Решить : синтезировать автомат по продаже билетов стоимостью 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 шт.
Могу в предложить в данном случае использовать goto и метки. Ну, если вы имеете какой то признак неправильных данных, например, это отрицательные значения (предположим, что это неправильные данные) То на этапе, когда вы вводите эти значения, вы должны поставить условный оператор. Т.е. if a<0 tnen begin Writeln('Вы ввели неверные данные'); goto 1 else goto 2; Метку 1 вы ставите в начало алгоритма, т.е. туда, откуда вы хотите начать повторное выполнение программы, а метку 2 поставить в продолжение алгоритма, т.е. на тот случай, если данные были введены верно
var i: integer; // счетчик a: array[1..10] of Integer; // объявляем массив из 10 целых элементов begin // Вводим элементы массива с клавиатуры for i:=1 to 10 do // цикл begin writeln('vvedite element massiva i nagmite >>ENTER'); write('a[',i,']='); write(a[i]); read(a[i]) end; i:=1; j:=0;// счетчик для поиска 3-го элемента repeat if a[i]<=0 then inc(i) // переходим к следующему элементу else begin inc(j); // отмечаем найденный положительный элемент inc(i) // переходим к следующему элементу end; until (j=3) or (i=11); // До тех пор пока не найден 3-й положительный элемент // либо не проверен весь массив if j=3 then // есть как минимум три положительных элемента в массиве writeln('3 Pologitelniy element a[',i-1,']=', a[i-1]) else // в массиве меньше трех положительных элементов writeln('Net 3 pologitelnogo eltmenta = '); readln; readln { TODO -oUser -cConsole Main : Insert code here } end.
// Внимание! Если программа не работает, обновите версию!
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 шт.
Опускайте монеты достоинством 1,2,5 руб.
Кнопка "0" завершение приема, кнопка "*" - возврат монет
3 6 3 1 3 5 2 5 2 4 2 3 6 2 1 *
Возврат монет: 3 6 3 1 3 5 2 5 2 4 2 3 6 2 1
Опускайте монеты достоинством 1,2,5 руб.
Кнопка "0" завершение приема, кнопка "*" - возврат монет
3 6 3 1 3 5 2 4 2 3 6 2 1 0
Не приняты: [3,6,3,3,4,3,6]
Введена неверная сумма
Принятые монеты возвращены: 1 1 2 2 2 5
Опускайте монеты достоинством 1,2,5 руб.
Кнопка "0" завершение приема, кнопка "*" - возврат монет
3 6 3 7 3 4 3 8 6 0
Не приняты: [3,6,3,7,3,4,3,8,6]
Опускайте монеты достоинством 1,2,5 руб.
Кнопка "0" завершение приема, кнопка "*" - возврат монет
0
Вы не опустили ни одной монеты