Автор Николай Мурин задал вопрос в разделе Другие языки и технологии
Программа паскаль множества и получил лучший ответ
Ответ от Wladimir[гуру]
Алгоритм:
Введенное число делится на самый большой член множества значений монет. ("50")
1. Если получилось число большее 1-цы, то целочисленная часть это и будет количество полтинников.
Далее от первоначальной суммы отнимается сумма в полтинниках и с остатоком производится та же операция, но со следующим членом множества монет (с меньшим) .
2. Если результат деления меньше единицы, то необходимо с числом повторить то же действие, но со следующим (меньшим) членом множества.
Если результат деления равен целому числу, то необходимо выйти из программы и вывести значения количеств монет по номиналам, которое тоже можно представить в виде множества.
Все эти действия замыкаются в цикл, выход из которого производится либо по появлению нуля в остатке от деления, либо по достижению последнего члена множества номиналов монет ("1")
Несколько странно использовать множества для данной задачи, поскольку множества не адресуются по элементам. Логичнее было бы использовать массив констант.
Но в общем и целом алгоритм такой: введенную сумму множим на 100 и превращаем в целое число методом обрубания дробной части. Затем идем от наибольшего члена множества к наименьшему (не знаю как, вот тут массив по-любому удобнее) и смотрим, сколько раз данный элемент помещается в наше число. Если количество больше 0, делаем соотв. вывод на экран. Затем берем остаток от деления нашего числа на произведение номинал*количество и повторяем. Остановка когда число=0. Например:
Ввели 1.28
Наше число 128
128/50=2 - вывод 2х50
128(50*2)=28
28/25=1 - вывод 1х25
28(25*1)=3
3/10=0
3/5=0
3/2=1 - вывод 1х2
3(2*1)=1
1/1=1 - вывод 1х1
1(1*1)=0 - выход.