Sunteți pe pagina 1din 6

Evaluarea 2

la cursul Structuri de date și algoritmi

1. Scrieți un program care va calcula recursiv cel mai mare divizor comun a două numere
naturale m și n date ( n < 30 000, m < 30 000).

#include <iostream>
using namespace std;
int a,b;
int main()
{
cout<<"Introduceti numerele a si b: "<<endl;
cin>>a>>b;
while(a!=b)
{
if(a>b)
a=a-b;
else
b=b-a;
}
cout<<"cmmdc = "<<a;
}

2. Vectorul T = (12, 7, 1, 8, 3, 10, 6, 5, 9, 24, 0, 4, 15, 14, 22) este reprezentarea liniară a arborelui binar
complet A. Reprezentați grafic arborele A.

12
9

75 1

80 37 10 6
3

24 0 4 15 14 22
50 90
0

1
3. Construiți max-Heap-ul corespunzător vectorului

T = (12, 7, 1, 8, 3, 10, 6, 5, 9, 24, 0, 4, 15, 14, 22).

2
3
4
4. Se dau coordonatele carteziene ale punctelor A, B, C și D. Să se scrie un algoritm care
verifică dacă punctul D aparține interiorului triunghiului ABC.

Program P9;
Type Tpunct=record
x, y: real;
end;
var A: array[1..100] of Tpunct;
L: Tpunct;
i, n: integer; {n - numarul de virfuri}
f: boolean;
function Ab(X, Y, Z: Tpunct): real; {Abaterea punctului X fata de dreapta YZ}
begin
5
Ab:=(Y.y-Z.y)*X.x+(Z.x-Y.x)*X.y+Y.x*Z.y-Y.y*Z.x;
end;
BEGIN
for i:=1 to 3 do {begin
write('Coord X: '); readln(A[i].x);
write('Coord Y: '); readln(A[i].y);
end;}
with A[i] do begin
write('x',i,': '); readln(x);
write('y',i,': '); readln(y);
end;
write('Scrie coordonatele punctului L: '); readln(L.x, L.y);
f:=true;
A[n+1].x:=A[1].x; A[n+1].y:=A[1].y;
A[n+2].x:=A[2].x; A[n+2].y:=A[2].y;
for i:=1 to n do
if Ab(L, A[i], A[i+1])*Ab(A[i+2], A[i], A[i+1])<=0 then f:=false;
if f=true then write('Apartine interiorului triunghiului') else write('Nu apartine interiorului triunghiului');
end.

S-ar putea să vă placă și