Задача 21 Урок 15
Primary tabs
Задача про банкомат:
Пользователь вводит целое число - сумму в некоторой валюте, требуется выдать
эту сумму купюрами наибольшего достоинства.
Напишите программу, которая в качестве результата скажет как именно надо
разменять указанную сумму купюрами наибольшего достоинства (
укажет количество для купюры каждого типа)Например, пусть у нас набор купюр 1000, 500, 100 и 50 рублей:
Сумму 350 рублей: по задаче следует выдать как: 3 по 100 и 1 по 50
Сумму 520 рублей: таким набором разменять нельзя.
Указания по возможному оформлению (можно оформлять и иначе):Напишите процедуру, которая:
принимает на вход число (сумму) по значению
массив "достоинств" купюр отсортированный по убыванию
(предположим, что видов купюр не может быть больше 10) по значению
массив для "количеств купюр" по ссылке
булевский параметр успешности подбора купюр
(некоторые суммы вообще разменять нельзя)
После выполнения процедуры в четвертом параметре должен быть true или
false, а в массиве "количеств" должены находится находится значения, на
основании которых банкомант мог бы выдать купюры.
type ArrOfInt = array[1..10] of integer; var a{номинал купюр в банкомате}: ArrOfInt = (5000, 1000, 500, 200, 100, 50, 0, 0, 0, 0); var b{по сколько каждой}: ArrOfInt = (50, 3, 7, 2, 50, 100, 50, 20, 4, 100); c1{успех обмена}: boolean; s{какую сумму разменять}: integer; procedure printArray(a1: ArrOfInt); //п-а печати массива var i1: integer; begin writeln('Купюры в банкомате, всего номиналов: ', length(a1)); for i1 := low(a1) to high(a1) do write(a1[i1], ' '); end; procedure atm(s1: integer; a1: ArrOfInt; var b1: ArrOfInt);//п-а расчета размена var i1, j1, k1: integer; begin c1 := false; k1 := 0; for i1 := low(a) to high(a) do begin j1 := 1; if (s1 > 0) and (s1 >= a1[i1]) and (a1[i1] > 0) then begin k1 := s1 div a1[i1]; if k1 <= b1[i1] then b1[i1] := k1; s1 := s1 - (a1[i1]*b1[i1]); inc(j1); if s1 = 0 then c1 := true; end else b1[i1] := 0; end; end; procedure printResult(s1: integer; a1, b1: ArrOfInt); //п-а печати результата var i1: integer; begin writeln(); writeln('Сумму ', s1, ' следует выдать:'); for i1 := low(a1) to high(a1) do begin if (a1[i1] > 0) and (b1[i1] > 0) then writeln(b1[i1], ' по ', a1[i1]); end; writeln(); end; begin writeln('Введите сумму'); readln(s); printArray(a); writeln(); atm(s, a, b); if c1 then printResult(s, a, b) else writeln('Выдача не возможна'); readln(); end.
КОНСОЛЬ
Введите сумму 7500 Купюры в банкомате, всего номиналов: 10 5000 1000 500 200 100 50 0 0 0 0 Сумму 7500 следует выдать: 1 по 5000 2 по 1000 1 по 500
- Log in to post comments
- 723 reads
vedro-compota
Sun, 11/28/2021 - 13:17
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)