М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
elenalenam
elenalenam
10.07.2022 15:15 •  Информатика

Решить : синтезировать автомат по продаже билетов стоимостью 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 шт.

Опускайте монеты достоинством 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
Вы не опустили ни одной монеты
4,8(46 оценок)
Открыть все ответы
Ответ:
Про228лирс
Про228лирс
10.07.2022
Могу в предложить в данном случае использовать goto и метки. Ну, если вы имеете какой то признак неправильных данных, например, это отрицательные значения (предположим, что это неправильные данные) То на этапе, когда вы вводите эти значения, вы должны поставить условный оператор. Т.е.
if a<0 tnen
begin
Writeln('Вы ввели неверные данные');
goto 1
else
goto 2;
Метку 1 вы ставите в начало алгоритма, т.е. туда, откуда вы хотите начать повторное выполнение программы, а метку 2 поставить в продолжение алгоритма, т.е. на тот случай, если данные были введены верно
4,8(78 оценок)
Ответ:
Даша1707
Даша1707
10.07.2022
Program Massiv;
{$APPTYPE CONSOLE}
uses  SysUtils;

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.
4,5(86 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ