Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
rovengod
3 / 3 / 0
Регистрация: 03.02.2012
Сообщений: 32
1

Определить по заданным сторонам, является ли данный треугольник прямоугольным

14.06.2012, 17:59. Просмотров 1011. Ответов 7
Метки нет (Все метки)

Помогите пожалуйста.Дано 3 стороны треугольника. Нужно определить по этим сторонам , является ли данный треугольник прямоугольным.Ассемблер для меня всё таки тёмный лес.А то по лабораторной завал.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2012, 17:59
Ответы с готовыми решениями:

Определить, является ли треугольник из отрезков с длинами A, B и C прямоугольным или равносторонним
Заданы три положительных числа A, B и C (A>=B> =C). Определить, является ли...

Определить, является ли каждый треугольник прямоугольным
Помогите разобраться с задачей на TASM. Ввести с клавиатуры длины сторон...

По трем сторонам определить, является ли треугольник прямоугольным
Надо ввести три целых числа a,b,c, стороны треугольника. Является ли данный...

По введенным координатам вершин треугольника определите является ли данный треугольник прямоугольным
Сейчас нужно... По введенным координатам вершин треугольника определите...

Заданы значения 2-х катетов и гипотенузы треугольника. Проверить является ли данный треугольник прямоугольным.
В общем так: Заданы значения 2-х катетов и гипотенузы треугольника. Проверить...

7
pyzhman
782 / 477 / 65
Регистрация: 15.05.2012
Сообщений: 2,685
14.06.2012, 18:07 2
В прямоугольном треугольнике a*a + b*b = c*c. Т.е. сумма квадратов меньших сторон(катетов) равна квадрату большей(гипотенузы). Если равенство выполняется печатаем "Да", если нет - "Нет".
1
rovengod
3 / 3 / 0
Регистрация: 03.02.2012
Сообщений: 32
14.06.2012, 18:53  [ТС] 3
Я на Паскале и С++ написать то смогу такую, с Ассемблером сложнее, там ведь условного оператора нет, а составить из простых команд не получается. Не могли бы помочь с кодом?
0
DarkVeiL
16 / 10 / 0
Регистрация: 14.06.2012
Сообщений: 25
14.06.2012, 18:59 4
Написано на MASM32 с помощью макрокоманд:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
include \masm32\include\masm32rt.inc
 
Max macro m1, m2, m3
    mov eax, m1
    mov ebx, m2
    mov ecx, m3
    cmp eax, ebx
    jae @F
    xchg eax, ebx
    @@:
    push ebx
    cmp eax, ecx
    jae @F
    xchg eax, ecx
    @@:
    push ecx
    push eax
endm
 
Sqr macro m1
    mov eax, m1
    mov ecx, m1
    mul cx
    mov cl, 16
    shl edx, cl
    add eax, edx
    exitm <eax>
endm
 
.code
start:
call main
getkey
exit
 
main proc
    local side_a: DWORD
    local side_b: DWORD
    local side_c: DWORD
 
    ccout "Storony treugolnika:\n"
    mov side_a, uval(input("a = "))
    mov side_b, uval(input("b = "))
    mov side_c, uval(input("c = "))
    ; выделение наибольшей стороны
    Max side_a, side_b, side_c
    mrm side_a, dword ptr [esp+8]       ; одна сторона
    mrm side_b, dword ptr [esp+4]       ; вторая сторона
    mrm side_c, dword ptr [esp]             ; наибольшая сторона
    add esp, 12                         ; корректировка стека после макроса
    mov side_a, Sqr(side_a)                 ; side_a = a * a
    mov side_b, Sqr(side_b)                 ; side_b = b * b
    mov side_c, Sqr(side_c)                 ; side_c = c * c
    mov eax, side_a
    add eax, side_b
    .if eax == side_c
        ccout "\nTreugolnik pryamougolny\n"
    .else
        ccout "\nTreugolnik nepryamougolny\n"
    .endif
    ret
main endp
end start
Файл компиляции прилагается:

Код
@echo off
\masm32\bin\ml /c /coff test.asm
\masm32\bin\link /SUBSYSTEM:CONSOLE test.obj
pause
1
rovengod
3 / 3 / 0
Регистрация: 03.02.2012
Сообщений: 32
14.06.2012, 19:06  [ТС] 5
Спасибо большое! А где теперь этот MASM32 взять, это тоже компилятор? Если можно , напишите пожалуйста этот код на Паскале, дельфи или с++, у меня только они установлены.
0
DarkVeiL
16 / 10 / 0
Регистрация: 14.06.2012
Сообщений: 25
14.06.2012, 19:27 6
MASM32 всегда есть на своем сайте masm32.com. На паскале вот аналогичная программа:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
uses Crt;
var
  a, b, c : integer;
 
procedure MaxSide (var x, y, z: integer);
var m : integer;
begin
  if (x > z) then
  begin
    m := x;
    x := z;
    z := m
  end;
  if (y > z) then
  begin
    m := y;
    y := z;
    z := m
  end
end;
 
begin
clrscr;
Writeln('‘Стороны треугольника*:');
Write('a = '); Readln(a);
Write('b = '); Readln(b);
Write('c = '); Readln(c);
MaxSide(a, b, c);
a := a*a;
b := b*b;
c := c*c;
if a + b = c then
  Writeln(#13, #10, 'Треугольник прямоугольный')
else
  Writeln(#13, #10, 'Треугольник непрямоугольный');
Readln
end.
1
rovengod
3 / 3 / 0
Регистрация: 03.02.2012
Сообщений: 32
14.06.2012, 19:45  [ТС] 7
И за эту спасибо! Я имел ввиду на Паскале используя внутри Паскаля код Ассемблера
0
Vasyl_S
0 / 0 / 0
Регистрация: 07.11.2017
Сообщений: 1
07.11.2017, 10:25 8
Цитата Сообщение от DarkVeiL Посмотреть сообщение
Написано на MASM32 с помощью макрокоманд:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
include \masm32\include\masm32rt.inc
 
Max macro m1, m2, m3
    mov eax, m1
    mov ebx, m2
    mov ecx, m3
    cmp eax, ebx
    jae @F
    xchg eax, ebx
    @@:
    push ebx
    cmp eax, ecx
    jae @F
    xchg eax, ecx
    @@:
    push ecx
    push eax
endm
 
Sqr macro m1
    mov eax, m1
    mov ecx, m1
    mul cx
    mov cl, 16
    shl edx, cl
    add eax, edx
    exitm <eax>
endm
 
.code
start:
call main
getkey
exit
 
main proc
    local side_a: DWORD
    local side_b: DWORD
    local side_c: DWORD
 
    ccout "Storony treugolnika:\n"
    mov side_a, uval(input("a = "))
    mov side_b, uval(input("b = "))
    mov side_c, uval(input("c = "))
    ; выделение наибольшей стороны
    Max side_a, side_b, side_c
    mrm side_a, dword ptr [esp+8]       ; одна сторона
    mrm side_b, dword ptr [esp+4]       ; вторая сторона
    mrm side_c, dword ptr [esp]             ; наибольшая сторона
    add esp, 12                         ; корректировка стека после макроса
    mov side_a, Sqr(side_a)                 ; side_a = a * a
    mov side_b, Sqr(side_b)                 ; side_b = b * b
    mov side_c, Sqr(side_c)                 ; side_c = c * c
    mov eax, side_a
    add eax, side_b
    .if eax == side_c
        ccout "\nTreugolnik pryamougolny\n"
    .else
        ccout "\nTreugolnik nepryamougolny\n"
    .endif
    ret
main endp
end start
Файл компиляции прилагается:

Код
@echo off
\masm32\bin\ml /c /coff test.asm
\masm32\bin\link /SUBSYSTEM:CONSOLE test.obj
pause
можно код со вставкой в c++
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru