You are on page 1of 2

Program V4P7;

type lista=record
nume:string;
prenume:string;
sex:char;
inaltimea:real;
end;
AdresaCelula=^Celula;
Celula=record
Info : lista;
Urm : AdresaCelula;
end;
var f,b,i,t1 : integer; ife,ib : real;
p,q : AdresaCelula; fi:text; t,b1:boolean;
procedure Creare(var p: AdresaCelula);
var R,V,W : AdresaCelula; info1:lista; nir:integer; s:char; ss:string;
begin p:=nil;
while not eof(fi) do {Citim datele din fisier}
begin read(fi,s); ss:='';
while s<>' ' do begin ss:=ss+s;read(fi,s); end; Info1.nume:=ss;
read(fi,s); ss:=''; while s<>' ' do begin ss:=ss+s;read(fi,s); end;
Info1.prenume:=ss; read(fi,Info1.sex,s);readln(fi,Info1.inaltimea);
new(R); r^.Info:=Info1; r^.urm:=nil;
if P=nil then begin P:=R; V:=R; nir:=1; end
else
begin w:=P; t1:=0; b1:=true;
while b1 and (t1<nir) do
begin if w^.Info.nume>Info1.nume then b1:=false;
t1:=t1+1; w:=w^.urm;
end;
if b1 then {la sfarsit}
begin v^.urm:=r; v:=r; nir:=nir+1; end
else
begin w:=P; for i:=1 to t1-2 do w:=w^.urm;
new(q);
if t1=1
then begin q^.urm:=p; p:=q;
q^.Info:=r^.Info; nir:=nir+1;
end
else begin q^.Info:=r^.Info; nir:=nir+1;
q^.urm:=w^.urm; w^.urm:=q;
end;
end;
end;
end;
end; { Creare }

procedure parcurgere(var p: AdresaCelula);


var R : AdresaCelula;
begin R:=P;

while R<>nil do
begin
if R^.info.sex='f'then begin f:=f+1;ife:=ife+R^.info.inaltimea; end
else begin b:=b+1;ib:=ib+R^.info.inaltimea; end;
write(R^.info.nume,' '); write(R^.info.prenume,' ');
write(R^.info.sex,' '); writeln(R^.info.inaltimea:5:2);
R:=R^.Urm;
end;
end; { parcurgere }

begin
assign (fi,'elevi.int'); reset(fi); creare(p);
writeln ('Tiparim lista creata '); parcurgere(p);
writeln ('in lista sunt:');
writeln (f,' fete cu inaltimea medie ',ife/f:5:2);
writeln (b,' baieti cu inaltimea medie ',ib/b:5:2);
close(fi);
end.
procedure Creare(var p: AdresaCelula); {Altă variantă}
var R,V,W : AdresaCelula; info1:lista; s:char; ss:string;
begin p:=nil;
while not eof(fi) do
begin {Analog citim datele din fisier, apoi …}
new(R); r^.Info:=Info1; r^.urm:=nil; new(W); W:=P;
if P=nil
then P:=R;
else if w^.Info.nume>Info1.nume
then begin r^.urm:=P; P:=R; end
else begin
while (w^.urm^.Info.nume<Info1.nume) and (w^.urm<>nil) do
w:=w^.urm;
r^.urm:=w^.urm; w^.urm:=r;
end;
end;
end; { Creare }

Program v12p7_r;
Var F:Text; C:String; N:Integer;
Function inv(C:String):String;
Begin if Length(C)>0
then inv:=inv(copy(c,2,length(c)-1))+c[1]
else inv:='';
End;
Procedure citire(num:integer);
var t:string;
Begin if num<=n
Then begin readln(t); t:=inv(t);
citire(num+1); writeln(f,t);
end;
End;
Begin
Write('Num de cuvinte=');ReadLn(N);
Assign(F,'IESIRE.TXT');Rewrite(F);
citire(1); Close(F)
End.

Program v12p7_fr;
Type Lista=^Celula;
Celula=Record
C:String;
Prec:Lista
End;
Var F:Text; C:String; S,R:Lista; N,I:Integer;
Function Invers(C:String):String;
Var I:Byte; X:Char;
Begin
For I:=1 To Length(C) Div 2 Do
Begin X:=C[I]; C[I]:=C[Length(C)-I+1]; C[Length(C)-I+1]:=X; End;
Invers:=C
End;
Procedure Tipar;
Begin R:=s;
Repeat WriteLn(F,R^.C); R:=R^.Prec
Until R=Nil
End;
Begin
Write('Num de cuvinte=');ReadLn(N); s:=Nil;
WriteLn('Introduceti cuvintele');
For I:=1 To N Do
Begin Write('Cuvintul ',I,':');ReadLn(C);
New(R); R^.C:=Invers(C); R^.Prec:=s; s:=r;
End;
Assign(F,'IESIRE.TXT');Rewrite(F);
Tipar; Close(F)
End.

You might also like