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

Задача про банкомат:

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

Напишите программу, которая в качестве результата скажет как именно надо разменять указанную сумму купюрами наибольшего достоинства (укажет количество для купюры каждого типа)

Например, пусть у нас набор купюр 1000, 500, 100 и 50 рублей:
Сумму 350 рублей: по задаче следует выдать как: 3 по 100 и 1 по 50
Сумму 520 рублей: таким набором разменять нельзя.

Указания по возможному оформлению (можно оформлять и иначе):

Напишите процедуру, которая:
принимает на вход число (сумму) по значению
массив "достоинств" купюр отсортированный по убыванию (предположим, что видов купюр не может быть больше 10) по значению
массив для "количеств купюр" по ссылке
булевский параметр успешности подбора купюр (некоторые суммы вообще разменять нельзя)

После выполнения процедуры в четвертом параметре должен быть true или false, а в массиве "количеств" должены находится находится значения, на основании которых банкомант мог бы выдать купюры.

function celoe(s:integer;i:integer):integer;
var c:integer;
  begin
    c:=s div i;
    result:=c;
  end;
function ostatok(s:integer;j:integer):integer;
var o:integer;
  begin
   o:=s mod j;
   result:=o;
  end;

var sum,z,o,i:integer;
  mas:array [1..4] of integer;

begin
  writeln('Vvedite trebuemuiy summy: ');
  read(sum);
  mas[1]:=1000;
  mas[2]:=500;
  mas[3]:=100;
  mas[4]:=50;
  o:=sum;
  if ((sum mod 50)<>0) then
    writeln('Summa dolzna bit kratna 50!')
  else
    for i:=1 to 4 do
     begin
       z:=celoe(o,mas[i]);
       if ((z<>0)and(i<>4)) then
         write (z,' kupur po ', mas[i], ' rub, ');
       o:=ostatok(sum,mas[i]);
       if ((z<>0)and (i=4)) then
         write (z,' kupur po 50 rub.');
     end;
end.      
Консоль:
Vvedite trebuemuiy summy: 
4850

4 kupur po 1000 rub, 1 kupur po 500 rub, 3 kupur po 100 rub, 1 kupur po 50 rub.
vedro-compota's picture

засчитано

_____________
матфак вгу и остальная классика =)