uses crt;

const NrNominal=9;                              {Nr. de nominaluri}
      valiuta:array[1..NrNominal]of integer=
      (1, 5, 10, 20, 50, 100, 200, 500, 1000);  {Enumerarea nominalurilor}

var NrBanknote:array[1..NrNominal]of integer;   {Nr de bancnote de fiecare nominal in suma indicata}
    Suma: LongInt;                              {Suma de impartit in nominaluri}

Procedure CalcBanknote(SumaLei:LongInt);        {Calculeaza cate bancnote de fiecare formeaza SumaLei}
var i:integer;
    Suma:LongInt;
begin
 Suma:=SumaLei;
 For i:=1 To NrNominal do NrBanknote[i]:=0;     {Initial avem cate 0 bancnote de fiecare}
 For i:=NrNominal DownTo 1 do                   {Incepem cu valoarea cea mai mare si parcurgem toate tipurile de bancnote...}
  if Valiuta[i]<=Suma then                      {Daca valoarea bancnotei 'i' e mai mica decat suma, atunci se poate de scazut din suma...}
   Repeat
    Suma:=Suma-Valiuta[i];                      {Scadem valoarea bancnotei din suma de lei}
    inc(NrBanknote[i]);                         {Mai adaugam o bancnota de de tipul 'i'}
   Until(Suma=0)or(Valiuta[i]>Suma)             {Se repeta operatiile de mai sus pana suma = 0 sau suma devine mai mica decat valoarea bancnotei}
  else if Suma=0 then exit;                     {Daca suma a fost initial '0' (inainte de a scadea), atunci se termina executia procedurii curente}
end;

Procedure ArataBanknote(SumaLei:LongInt;titl1,titl2:string);  {Afiseaza pe ecran nr bamcnote de fiecare nomilal ce formeaza sumalei}
var i:integer;
begin
 WriteLn;
 CalcBanknote(SumaLei);                           {Intai se fac calculele cu ajutorul proceduri declarate mai sus}
 Writeln(' '+titl1+' - '+titl2);                  {Se afiseaza titlul tabelului}
 For i:=1 to length(titl1)+length(titl2)+5 do write('_');{Se traseaza linia ce separa titlul tabelului}
 Writeln;
 For i:=1 to NrNominal do if NrBanknote[i]>0 then {Daca avem mai mult de '0' bancnote de nominalul respectiv, atunci...}
 WriteLn(Valiuta[i]:length(titl1)+1,' - ',NrBanknote[i]:length(titl2));  {se afiseaza valoarea bancnotei si nr de bancnote cu aceasta valoare}
end;

Begin
 TextMode(1);                                    {Setarea modului textual}    
 ClrScr;                                         {Curatirea ecranului}
 Write('Suma lei: ');readln(suma);               {Introducerea sumei de la tastatura}
 ArataBanknote(suma,'Nominalul','Nr Bancnote');  {Afisarea pe ecran a nr de bancnote de fiecare nominal}
 readkey;                                        {Asteptarea utilizatorului sa preseze o tasta}
End.