Informatică, întrebare adresată de xfx, 7 ani în urmă

Sa se calculeze aria unui triunghi cunoscand lungimea fiecarei laturi, a se folosii formula lui Heron si Forma Babiloniala pentru radical. (Assembly)

Răspunsuri la întrebare

Răspuns de CretuT
0

Răspuns:

Pentru a calcula aria unui triunghi cunoscand lungimea fiecarei laturi, putem utiliza formula lui Heron sau Forma Babiloniala pentru radical.

Formula lui Heron:

S = sqrt(s * (s - a) * (s - b) * (s - c))

unde:

s = (a + b + c) / 2 (semiperimetrul triunghiului)

a, b, c = lungimile laturilor triunghiului

Exemplu de implementare in Assembly:

section .data

a dd 3

b dd 4

c dd 5

s dd ?

section .text

global _start

_start:

   mov eax, a

   add eax, b

   add eax, c

   mov s, eax

   shr s, 1 ; s = (a + b + c) / 2

   mov eax, s

   sub eax, a

   mov ebx, s

   sub ebx, b

   mul ebx

   mov ebx, s

   sub ebx, c

   mul ebx

   mul eax

   mov eax, s

   mul eax

   call sqrt ; apelam functia sqrt pentru a calcula radicalul din formula lui Heron

   mov [area], eax ; salvam rezultatul in variabila area

   ; cod pentru afisarea rezultatului

sqrt:

   ; cod pentru calcularea radicalului folosind Forma Babiloniala

Forma Babiloniala pentru radical:

sqrt(x) = (x + n / x) / 2

unde x este numarul pentru care dorim sa calculam radicalul si n este numarul sub radical.

Exemplu de implementare in Assembly:

section .data

a dd 3

b dd 4

c dd 5

s dd ?

x dd ?

section .text

global _start

_start:

   mov eax, a

   add eax, b

   add eax, c

   mov s, eax

   shr s, 1 ; s = (a + b + c) / 2

   mov eax, s

   sub eax, a

   mov ebx, s

   sub ebx, b

   mul ebx

   mov ebx, s

   sub ebx, c

   mul ebx

   mul eax

   mov x, eax

   mov eax, x

   add eax, [n]

   mov ebx, x

   div ebx

   shr eax, 1

   mov [area], eax ; salvam rezultatul in variabila area

   ; cod pentru afisarea rezultatului

In ambele exemple, variabila "area" va contine rezultatul final al calculului ariei triunghiului.

Explicație:

Alte întrebări interesante