0% au considerat acest document util (0 voturi)
5 vizualizări6 pagini

Lab 2

Lucrarea de laborator se concentrează pe studiul structurilor dinamice de date, în special listele simplu înlănțuite. Se propun două probleme: crearea unei liste de numere reale și calcularea mediei elementelor pozitive, precum și crearea unei liste de studenți sortată după nota medie. Algoritmii sunt proiectați pentru a gestiona aceste operații, inclusiv afișarea listei în ordine inversă și sortarea studenților.

Încărcat de

Veronica Gușan
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
0% au considerat acest document util (0 voturi)
5 vizualizări6 pagini

Lab 2

Lucrarea de laborator se concentrează pe studiul structurilor dinamice de date, în special listele simplu înlănțuite. Se propun două probleme: crearea unei liste de numere reale și calcularea mediei elementelor pozitive, precum și crearea unei liste de studenți sortată după nota medie. Algoritmii sunt proiectați pentru a gestiona aceste operații, inclusiv afișarea listei în ordine inversă și sortarea studenților.

Încărcat de

Veronica Gușan
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.

Lucrarea de laborator №2

STRUCTURI DINAMICE DE DATE. LISTE SIMPLU ÎNLĂNȚUITE


Scopul lucrării:
1. Studierea operațiilor cu date dinamice.
2. Realizarea operațiilor cu structuri dinamice de date (lista liniară).
3. Studierea mecanismului de prelucrare a elementelor structurilor dinamice de date.
4. Proiectarea algoritmilor cu structuri dinamice de date.
5. PROBLEME:
1. Creați și afișați lista de numere reale introduse de la tastatură (până la introducerea
0).
a) Să se calculeze media aritmetică a elementelor pozitive din listă;
b) Să se afișeze numerele în ordinea inversă formării listei.
2. Creați lista Student care conține următoarea informație: Numele studentului, Grupa,
3 (trei) note. Să se creeze lista studenților în ordinea descreșterii notei medii.
REZOLVARE:
1. program lab2_1;
type lista=record
inf:real;
next:^lista;
end;
var l1,l2:^lista;
x:^lista;
n, med, sum:real;
pozitiv:integer;
{Afișarea inversă a listei}
procedure printList(p:^lista);
begin
if(p <> nil) then
begin
printList(p^.next);
write(' ',p^.inf);
end;
end;
begin
{Crearea listei vide}
l1:=nil;
l2:=nil;
writeln('Introduceți elementele listei: ');
{Completarea listei}
readln(n);
new(x);
x^.inf:=n;
if l1=nil then begin
l1:= x;
l2:=x;
end;
med:=0;
pozitiv:=0;
if x^.inf>0 then begin
sum:=x^.inf;
pozitiv:=pozitiv+1; end
else sum:=0;
while (n<>0) do begin
readln(n);
new(x);
x^.inf:=n;
if x^.inf>0 then begin
sum:=sum+x^.inf;
pozitiv:=pozitiv+1; end;
l2^.next:=x;
l2:=x;
end;
{Afișarea listei}
x:=l1;
writeln('Lista de numere este: ');
while x <> nil do begin
write(' ',x^.inf);
x:=x^.next;
end;
writeln;
{Calcularea și afișarea mediei elementelor pozitive din listă}
med:=sum/pozitiv;
writeln;
writeln('Media elementelor pozitive din listă este: ', med:2:2,'.');
writeln;
{Afișarea listei in ordine inversă}
writeln('Lista inversă este: ');
x:=l1;
printList(x);
end.
1. program lab2_2;
type
notee=array[1..3] of integer;
info=record
nume:string[25];
grupa: string[10];
note:notee;
med:real;
end;
Lista = ^Student;
student=record
inf:info;
next:Lista;
end;
var s1, s2, x: Lista;
s11, s22, x1, x2, poz: Lista;
p:info;
n, i, j, sum:integer;
m:real;

function Pozitia(Prim, Ultim: Lista; m:real):lista;


var P: Lista;
begin
P:=Prim;
If (m>P^.[Link]) then
pozitia:=Prim
else
If (m<P^.[Link]) and (P=Ultim) then
pozitia:=Ultim
else
begin
while (P^.next<>nil) and (P^.next^.[Link]>m) do
P:=P^.next;
Pozitia:=P;
end;

end;

procedure Adaugare(var Prim: Lista; Var Ultim: Lista; P, Q: Lista);


begin
If (P=Prim) and (Q^.[Link]>P^.[Link]) then
begin
Q^.next:=Prim;
Prim:=Q;
end
else
If P=Ultim then
begin
Ultim^.next:=Q;
Ultim:=Q;
end
else
begin
Q^.next:=P^.next;
P^.next:=Q;
end;
end;

begin
writeln('Introduceți numărul de studenți: ');
readln(n);
s1:=nil;
s2:=nil;
writeln('----------Introduceți informația despre studenți----------');
for i:=1 to n do begin
write('Numele studentului: ');
readln([Link]);
write('Grupa: ');
readln([Link]);
write('Notele:');
for j:=1 to 3 do
read([Link][j]);
readln;
sum:=0;
for j:=1 to 3 do
sum:=sum+[Link][j];
[Link]:=sum/3;
writeln;
new(x1);
x1^.inf:=p;
if s1=nil then begin
x1^.next:=nil;
s1:=x1;
s2:=x1;
end
else begin
s2^.next:=x1;
s2:=x1;
end;
end;
x:=s1;
while x<>Nil do
begin
writeln(x^.[Link],' ',x^.[Link]:2);
x:=x^.next;
end;
writeln;
//Crearea noii liste a studentilor
s11:=nil;
s22:=nil;
x:=s1;
while x<>nil do begin
new(x2);
x2^.inf:=x^.inf;
if s11=nil then begin
x2^.next:=nil;
s11:=x2;
s22:=x2;
end
else
begin
m:=x2^.[Link];
poz:=Pozitia(s11,s22,m);
Adaugare(s11,s22,poz,x2);
end;
x:=x^.next;
end;
//Afisarea listei finale a studentilor
writeln('Lista aranjată a studenților in ordinea descreșterii mediei: ');
x:=s11;
while x<>nil do begin
writeln(x^.[Link],' ',x^.[Link]:2);
x:=x^.next;
end;
end.

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