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

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

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

Например, пусть у нас набор купюр 1000, 500, 100 и 50 рублей:

Сумму 350 рублей: по задаче следует выдать как: 3 по 100 и 1 по 50
Сумму 520 рублей: таким набором разменять нельзя.
Указания по возможному оформлению (можно оформлять и иначе):

Напишите процедуру, которая принимает на вход:

1 число (сумму) по значению
2 массив "достоинств" купюр отсортированный по убыванию (предположим, что видов купюр не может быть больше 10) по значению
3 массив для "количеств купюр" по ссылке
4 булевский параметр успешности подбора купюр (некоторые суммы вообще разменять нельзя)
После выполнения процедуры в четвертом параметре должен быть true или false,
а в массиве "количеств" должены находиться значения, на основании которых банкомант мог бы выдать купюры.

type
  arr1 = array [1..10] of integer;
  arr2 = array [1..10] 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('Выдать сумму следующими купюрами:');
    for i := 1 to 10 do
      if b[i] > 0 then
        writeln('купюру ', a[i], ' - ', b[i], ' раз');
  end
  else
    writeln('Выбранная сумма не может быть выдана');
end;

begin
  a[1] := 50000;
  a[2] := 20000;
  a[3] := 10000;
  a[4] := 5000;
  a[5] := 2000;
  a[6] := 1000;
  a[7] := 500;
  a[8] := 200;
  a[9] := 100;
  a[10] := 50;

  writeln('Сколько выдать?');
  readln(cash);
  bank(cash, a, b, flag);
  readln();
end.