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

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

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

type
  massiv = array[1..9] of integer;
var
  dost, kolich: massiv;
  s, i: integer;
  q: boolean;                         // параметр успешности подбора купюр

procedure razmen (s: integer; dost: massiv; var kolich: massiv; var q: boolean);
var
  i: integer;
begin
  for i:=low(dost) to high(dost) do
  begin
    if (s >= dost[i]) then
    begin
      kolich[i]:= s div dost[i];
      s:= s mod dost[i];
    end else
      kolich[i]:= 0;
  end;
  if s = 0 then   // если остаток равен нулю (купюры подобраны)
    q:= true;     // переключаем параметр успешности подбора купюр
end;

begin                                 // начало тела основной программы
  dost[1]:=5000;
  dost[2]:=2000;
  dost[3]:=1000;
  dost[4]:=500;
  dost[5]:=200;
  dost[6]:=100;
  dost[7]:=50;
  dost[8]:=10;
  dost[9]:=5;
  q:= false;
  write ('Введите сумму: ');
  readln (s);
  razmen (s, dost, kolich, q);        // вызываем процедуру, передаем сумму, массив достоинств, массив количества, параметр успешности подбора купюр
  if q = true then
  begin
    for i:=low(kolich) to high(kolich) do
      if not (kolich[i]=0) then       // проверка, чтобы не выводить нулевое количество купюр
      begin
        write (dost[i], '  x  ');
        writeln (kolich[i], ' ');
      end;
  end else
    write ('Данную сумму разменять нельзя');
  readln();
end.

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

Введите сумму: 10460
5000  x  2 
200  x  2 
50  x  1 
10  x  1 
Введите сумму: 712
Данную сумму разменять нельзя
Введите сумму: 10550
5000  x  2 
500  x  1 
50  x  1 
vedro-compota's picture

засчитано

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