Program P4; {-------------------------------------------------------------- Pentru o lista de paralelograme se cunoaste: - denumirea fiecarui parallelogram, - dimensiunile fiecarui parallelogram, - masura unui unghi al fiecarui pral. A) sa se determine tipul fiecarui parallelogram; B) sa se determine perimetrul si aria fiecaruia; C) sa se afiseze denumirea si diagonale fiecarui parallelogram. --------------------------------------------------------------} {--------------------------------------------------------------} uses crt; {--------------------------------------------------------------} label next; {--------------------------------------------------------------} const n = 10; toRad = pi / 180; toGrad = 180 / pi; tipParal: array[0..3] of string = ('Paralelogram', 'Romb', 'Dreptunghi', 'Patrat'); {--------------------------------------------------------------} type TParal = object a, b: Word; {lungimile laturilor} name: string[4]; private u: real; {masura unghiului in radiani} public function setUr(r: Real): Real; {seteaza unghiului in radiani} function getUr: Real; {masura unghiului in radiani} function setUg(r: integer): word; {seteaza unghiului in grade} function getUg: word; {masura unghiului in grade} function Ha: Word; {inaltimea dusa pe a} function Hb: Word; {inaltimea dusa pe b} function D1: word; {diagonala 1 (mai scurta)} function D2: Word; {diagonala 2 (din u)} function P: LongInt; {perimetrul} function S: real; {aria} function Tip: byte; {nr. tipului, conform tipParal} function TipStr: String;{tipul paralelogramului} end; {--------------------------------------------------------------} function TParal.setUr(r: Real): Real; begin if r > pi then r := r - pi; if r < 0 then r := r + pi; if r > pi/2 then r := pi - r; {alegem unghiul ascutit} u := r; setUr := u; end; function TParal.setUg(r: integer): word; begin setUg := round(setUr(r*toRad)*toGrad); end; function TParal.getUr: Real; begin getUr := u; end; function TParal.getUg: word; begin getUg := round(getUr*toGrad); end; {--------------------------------------------------------------} function TParal.Ha: Word; begin Ha := round(sin(u)*b); end; function TParal.Hb: Word; begin Hb := round(sin(u)*a); end; {--------------------------------------------------------------} function TParal.D1: Word; begin D1 := round(sqrt(a*a+b*b-2*a*b*cos(u))); end; function TParal.D2: Word; begin D2 := round(sqrt(a*a+b*b+2*a*b*cos(u))); end; {--------------------------------------------------------------} function TParal.P: LongInt; begin P := 2*(a+b); end; function TParal.S: real; begin S := a*b*sin(u); end; {--------------------------------------------------------------} function TParal.Tip: byte; var t: byte; begin t := 0; if a = b then inc(t,1); {romb} if round((u-pi/2)*240)=0 then inc(t,2); {dreptunghi (cu exactitatea de 1 grad)} Tip := t; end; function TParal.TipStr: String; begin TipStr := tipParal[Tip]; end; {--------------------------------------------------------------} var list: array[1..n] of TParal; i, j: byte; {--------------------------------------------------------------} BEGIN { Generarea parametrilor } randomize; for i := 1 to n do with list[i] do begin a := random(10); b := random(10); setUg(random(24)*15); j := random(ord('Z')-ord('A')-3); name := chr(ord('A')+j) + chr(ord('A')+j+1) + chr(ord('A')+j+2) + chr(ord('A')+j+3); end; goto next; { Citirea parametrilor de la tastatura } for i := 1 to n do with list[i] do begin write('nume (ex. "ABCD") = '); readln(name); write('a = '); readln(a); write('b = '); readln(b); write('u = '); readln(u); setUr(u*toRad);{daca u este masura unghiul in grade} end; next: { Afisarea rezultatului } clrscr; for i := 1 to n do with list[i] do begin writeln(name,' este ', TipStr,':'); writeln(name[1]+name[2],' = ',a); writeln(name[2]+name[3],' = ',b); writeln('<'+name[1]+name[2]+name[3],' = ',getUg); writeln('Diagonalele: '); write(name[1]+name[3],' = ', D1); write(', '); write(name[2]+name[4],' = ', D2); writeln; writeln('P = ', P ); writeln('S = ', S:4:2); write('Ha = ', Ha); write(', '); write('Hb = ', Hb); writeln; writeln('---------------------'); readkey; end; readkey; END.