Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2010, 17:32   #1
Цветик
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 21
По умолчанию Подпрограммы

1) Если треугольник со сторонами a, b, с является равнобедренным, найти его площадь, в противном случае – периметр.


2) Дан массив из 6 элементов. Посчитать число соседств двух чисел разных знаков.
идей вообще нет=(
Цветик вне форума Ответить с цитированием
Старый 31.10.2010, 17:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
найти его площадь, в противном случае – периметр.
Математические формулы покажи
Цитата:
идей вообще нет=(
А в методичке что написано?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.10.2010, 17:54   #3
Vergo
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 38
По умолчанию

Цитата:
1) Если треугольник со сторонами a, b, с является равнобедренным, найти его площадь, в противном случае – периметр.
Какие тут сложности?
У равнобедренного треугольника боковые стороны равны. Т.е. a=b. (если неизвестно, какая сторона являяется основанием - то проверить также варианты: b=c? a=c?) Если да - считаете площадь (половина произведения высоты на основание). Если нет - считаете периметр (a+b+c).
Цитата:
2) Дан массив из 6 элементов. Посчитать число соседств двух чисел разных знаков.
идей вообще нет=(
Сравниваете в массиве пары чисел по порядку (точнее их знаки). Если знаки разные - увеличиваете значение счетчика. Всего будет 5 пар (6-5, 5-4, 4-3, 3-2, 2-1). В ассемблере независимо от размера операнда достаточно проверять знаковый бит в каждом числе (старший разряд). Если он установлен - число отрицательное.

Последний раз редактировалось Vergo; 31.10.2010 в 18:04.
Vergo вне форума Ответить с цитированием
Старый 31.10.2010, 18:04   #4
Цветик
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Vergo Посмотреть сообщение
Какие тут сложности?
У равнобедренного треугольника боковые стороны равны. Т.е. a=b. Если да - считаете площадь (половина произведения высоты на основание). Если нет - считаете периметр (a+b+c).
А чтобы найти высоту нужно извлекать корни как их излечь?

Цитата:
Сравниваете в массиве пары чисел по порядку (точнее их знаки). Если знаки разные - увеличиваете значение счетчика. Всего будет 5 пар (6-5, 5-4, 4-3, 3-2, 2-1). В ассемблере независимо от размера операнда достаточно проверять знаковый бит в каждом число (старший разряд). Если он установлен - число отрицательное.
Вот как все это написать, я не знаю
Цветик вне форума Ответить с цитированием
Старый 31.10.2010, 18:27   #5
Vergo
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 38
По умолчанию

Цитата:
А чтобы найти высоту нужно извлекать корни как их излечь?
Математический сопроцессор использовать разрешается?
Vergo вне форума Ответить с цитированием
Старый 31.10.2010, 18:29   #6
Цветик
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Vergo Посмотреть сообщение
Математический сопроцессор использовать разрешается?
Нет нельзя
Цветик вне форума Ответить с цитированием
Старый 31.10.2010, 18:33   #7
Vergo
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 38
По умолчанию

узнать целую часть квадратного корня числа можно, вычитая из него все нечётные числа по порядку, пока остаток не станет меньше следующего вычитаемого числа или равен нулю, и сочтя количество выполненных действий. Например, так:

9 − 1 = 8
8 − 3 = 5
5 − 5 = 0
Выполнено 3 действия, квадратный корень числа 9 равен 3.
Vergo вне форума Ответить с цитированием
Старый 31.10.2010, 18:39   #8
Цветик
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Vergo Посмотреть сообщение
узнать целую часть квадратного корня числа можно, вычитая из него все нечётные числа по порядку, пока остаток не станет меньше следующего вычитаемого числа или равен нулю, и сочтя количество выполненных действий. Например, так:

9 − 1 = 8
8 − 3 = 5
5 − 5 = 0
Выполнено 3 действия, квадратный корень числа 9 равен 3.
Спасибо но не могли бы вы это в виде кода изобразить=)
Цветик вне форума Ответить с цитированием
Старый 31.10.2010, 19:23   #9
Vergo
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 38
По умолчанию

Пожалуйста:

Код:
; Data:
num DW 144

START:
	mov bx, 1
	xor cx, cx
	mov ax, num
L1:
	sub ax, bx
	jl  L2
	inc cx
	add bx, 2
	jmp L1
L2:
На выходе в регистре CX искомое значение квадратного корня.

Последний раз редактировалось Vergo; 31.10.2010 в 20:17.
Vergo вне форума Ответить с цитированием
Старый 31.10.2010, 19:27   #10
Цветик
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Vergo Посмотреть сообщение
Пожалуйста:

Код:
; Data:
num DW 144

START:
	mov bx, 1
	xor cx, cx
	mov ax, num
L1:
	sub ax, bx
	jle L2
	inc cx
	add bx, 2
	jmp L1
L2:
На выходе в регистре CX искомое значение квадратного корня.
; ################################### ################################### ###

.386
.model flat, stdcall
option casemap :none ; case sensitive

; ################################### ################################### ###

include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\kernel32.inc

includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib

; ################################### ################################### ###
.data
massA db 3,7, -21, -5, -8

buf db 8 dup(?)
frmt db "треугольник%d",0
Title1 db "Лаб4",0
a db 2
b db 2
c db 3
P db 0; периметр
p/2 db 0; полупериметр
.code

start:
add P,a
add P,b
add P,c
mov eax,P
div 2
mov p/2, eax
cmp a, b
jn a
cmp b,c
jn a
cmp a,c
jn a
invoke wsprintf,offset buf,offset frmt, P
a:; поиск площади
invoke wsprintf,offset buf,offset frmt,
invoke MessageBoxA,0,offset buf, offset Title1,MB_OK
invoke ExitProcess,0
end start


Надо как то все это соеденить=)
Цветик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подпрограммы!? nolx Помощь студентам 0 31.05.2010 18:53
Подпрограммы-процедуры, подпрограммы-функции в Pascal rishikesh Помощь студентам 19 18.05.2010 23:05
Подпрограммы Журенова Катя Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 05.05.2009 22:21
ПОДПРОГРАММЫ! Linker88 Паскаль, Turbo Pascal, PascalABC.NET 4 21.04.2009 22:25