program p117_28;{10}
uses crt;
const nm=100;
type Denum=string[16];
     Produs=record
      Num:Denum;
      Pr:word;
     end;
var Lst:array[1..100]of Produs;
    i,j,n:0..nm;
    f:file of Produs;
    s, fn:denum;
    Prmin:word;
begin
 clrscr;
 n:=0;
 repeat
  inc(n);Writeln('Produsul ',n,':');
  write('- Denumirea: ');readln(Lst[n].Num);
  if Lst[n].Num='' then break;
  write('- Pretul: ');readln(Lst[n].Pr);
 until(n=nm)or(Lst[n].Num='');dec(n);

{a}
 Write('Nume fisier (fara extensie): ');Readln(fn);
 assign(f,fn+'.dat'); rewrite(f);
 for i:=1 to n do write(f,Lst[i]);
 close(f);
{b} clrscr;
 PrMin:=$ffff;
 for i:=1 to n do with Lst[i] do if Pr<PrMin then PrMin:=Pr;
 Writeln('Produsele cu pretul minim (',PrMin,'):');
 for i:=1 to n do with Lst[i] do if Pr=PrMin then Writeln(Num);
 readkey;
{c} clrscr;
 Write('Introdu un pret: ');readln(Prmin);
 for i:=1 to n do with Lst[i] do if Pr=PrMin then Writeln(Num);
 readkey;
{d,f}  clrscr;
 Writeln('Lista produselor in ordinea alfabetica:');
 Assign(f,fn+'.num');ReWrite(f);
 for i:=1 to n do with Lst[i] do begin
  for j:=i+1 to n do if Num>Lst[j].Num then begin
   s:=Lst[j].Num;Lst[j].Num:=Num;Num:=s;
   PrMin:=lst[j].Pr;lst[j].Pr:=Pr;Pr:=PrMin;
  end;
   Writeln(num,' - ',Pr);  Write(f,Lst[i]);
 end; Close(f);
 readkey;
{e} clrscr;
 Writeln('Lista produselor descrescatoare dupa preturi:');
 for i:=1 to n do with Lst[i] do begin
  for j:=i+1 to n do if Pr<Lst[j].Pr then begin
   s:=Lst[j].Num;Lst[j].Num:=Num;Num:=s;
   PrMin:=lst[j].Pr;lst[j].Pr:=Pr;Pr:=PrMin;
  end;
  Writeln(Num,' - ',Pr);
 end;
 readkey;
{e} clrscr;
 Reset(f);
 n:=0;
 while not eof(f) do begin
  inc(n); Read(f,lst[n]);
 end; Close(f);
 Writeln('Introdu un nou produs pentru "'+fn+'.num":');
  inc(n);Writeln('Produsul ',n,':');
  write('- Denumirea: ');readln(Lst[n].Num);
  write('- Pretul: ');readln(Lst[n].Pr);
  ReWrite(f);
  for i:=1 to n do with Lst[i] do begin
  for j:=i+1 to n do if Num>Lst[j].Num then begin
   s:=Lst[j].Num;Lst[j].Num:=Num;Num:=s;
   PrMin:=lst[j].Pr;lst[j].Pr:=Pr;Pr:=PrMin;
  end;
  Write(f,Lst[i]);
 end; Close(f);
end.
