Решить : синтезировать автомат по продаже билетов стоимостью 5 руб. автомат может принимать монеты 1,2,5 руб. сдачу автомат не выдает. при вводе неверной сумы – сброс денег обратно
// PascalABC.NET 3.3, сборка 1579 от 18.11.2017 // Внимание! Если программа не работает, обновите версию!
begin // В целях упрощения логики программы варианты // выбора кнопок 0 и * вместе не рассматриваются // Writeln('Опускайте монеты достоинством 1,2,5 руб.'); Writeln('Кнопка "0" завершение приема, кнопка "*" - возврат монет'); var s:=ReadlnString; var p:=Pos('*',s); if p>0 then begin var sr:=s[:p].ToIntegers; if sr.Sum>0 then Writeln('Возврат монет: ',s[:p]) else Writeln('Нечего возвращать!') end else begin p:=Pos('0',s); if p>0 then begin s:=s[:p]; var a:=s.ToIntegers; if a.Length>0 then begin var acc:=a.Where(t->t in [1,2,5]); var rej:=a.Where(t->not(t in [1,2,5])); if rej.Count>0 then Writeln('Не приняты: ',rej); var sum:=acc.Sum; if sum mod 5<>0 then begin Writeln('Введена неверная сумма'); Write('Принятые монеты возвращены: '); acc.OrderBy(t->t).Println end else if sum>0 then Writeln('Получите билеты в количестве ',sum div 5,' шт.') end else Writeln('Вы не опустили ни одной монеты') end else Writeln('Вы не выбрали кнопку "0" или "*"') end end.
Примеры Опускайте монеты достоинством 1,2,5 руб. Кнопка "0" завершение приема, кнопка "*" - возврат монет 3 6 3 1 3 5 2 5 2 4 2 3 6 2 1 0 Не приняты: [3,6,3,3,4,3,6] Получите билеты в количестве 4 шт.