Задача 24 Урок 15

Задача 24 Урок 15

Задача про банкомат:
Пользователь вводит целое число - сумму в некоторой валюте, требуется выдать эту сумму купюрами наибольшего достоинства.
Напишите программу, которая в качестве результата скажет как именно надо разменять указанную сумму купюрами наибольшего достоинства (укажет количество для купюры каждого типа)

type
  arr1 = array [1..7] of integer;
  arr2 = array [1..7] of integer;

var cash : integer;
    flag : boolean;
    a : Arr1;
    b : arr2;

procedure bank(cash : integer; a : Arr1; var b : arr2; flag : boolean);
var i : integer;
begin
  i := 1;
  while i <= high(a) do
  begin
    if cash >= a[i] then
    begin
      b[i] += 1;
      cash := cash - a[i];
      flag := true;
      if cash = 0 then break;
    end
    else
    begin
      i += 1;
      flag := false;
    end;
  end;

  if flag then
  begin
    writeln('receive the following bills');
    for i := 1 to 10 do
      if b[i] > 0 then
        writeln('a bill ', a[i], ' - ', b[i], ' times');
  end
   else
     writeln('it is not possible to issue');
end;

begin
  a[1] := 5000;
  a[2] := 2000;
  a[3] := 1000;
  a[4] := 500;
  a[5] := 200;
  a[6] := 100;
  a[7] := 50;

  writeln('how much to give out?');
  readln(cash);
  bank(cash, a, b, flag);
  readln();
end.     

Вывод консоли:

how much to give out?
20550
receive the following bills
a bill 5000 - 4 times
a bill 500 - 1 times
a bill 50 - 1 times