Чем можно заменить оператор goto в турбо паскале. Существует программа нужно, чтобы при...

0 голосов

Чем можно заменить оператор goto в турбо паскале. Существует программа нужно, чтобы при нажатии определенной буквы выполнялась определенный цикл, как это сделать не используя оператор безусловного перехода goto.
Приведите пример на следующем коде:
Program ABC;
Uses CRT;
var
a, b, x, y, w, z: Real;
C, D, E, Q: integer;
begin
begin {Q}
writeln ('la-la-la');
writeln ('Если хотите вычислить сумму, то нажмите С, произведение- D, операцию деления -E ');
readln;
ClrScr;
end;
begin {c}
readln(a, b);
writeln (a+b);
readln;
ClrScr;
end;
begin {D}
readln(x, y);
writeln (x*y);
readln;
ClrScr;
end;
begin {E}
readln(w, z);
writeln (w/z);
readln;
ClrScr;
end;
end.
Если пользователь нажимает букву Q нужно вернуть его к операции:
" begin {Q}
writeln ('la-la-la');
writeln ('Если хотите вычислить сумму, то нажмите С, произведение- D, операцию деления -E ');
end;"
В случае, если пользователь вводит любую другую букву нужно сказать, что 'Error, please enter C, E or D' и после того, как он введет нужную букву вывести соответствующую операцию


спросил от Бакалавр (10.8k баллов) в категории Информатика
2 Ответы
0 голосов
ответил от БОГ (150k баллов)
 
Лучший ответ

Program ABC;
Uses CRT;
var
  a,b:real;
  c:char;
begin
  ClrScr;
  repeat
    Writeln('la-la-la');
    Write('Если хотите вычислить сумму, то нажмите С,');
    Writeln(' произведение- D, операцию деления -E ');
    Writeln('Для завершения работы нажмите Q');
    c:=ReadKey;
    case c of
    'C','c':begin
      Write('Сложение: введите слагаемые: '); Read(a,b);
      Writeln('Сумма равна ',a+b);
      Write('Для продолжения нажмите любую клавишу');
      ReadKey;
      ClrScr
      end;
    'D','d':begin
      Write('Умножение: введите сомножители: '); Read(a,b);
      Writeln('Произведение равно ',a*b);
      Write('Для продолжения нажмите любую клавишу');
      ReadKey;
      ClrScr
      end;
    'E','e':begin
      Write('Деление: введите делимое и делитель: '); Read(a,b);
      Writeln('Частное равно ',a/b);
      Write('Для продолжения нажмите любую клавишу');
      ReadKey;
      ClrScr
      end;
    'Q','q':;
    else begin
      Writeln(#13#10,'Error, please enter C, E or D',#13#10);
      end
    end;
  until c in ['Q','q'];
  Writeln('Ждем Вас снова!');
  Readkey
end.

оставил комментарий от Бакалавр (10.8k баллов)

Хороший код, жаль, что я уже сделала задание другим способом, но ничего, главное это то, что буду знать, как делать на будущее.

оставил комментарий от Бакалавр (10.8k баллов)

Не могли бы вы, пожалуйста, сказать за что отвечает #10?

оставил комментарий от Бакалавр (10.8k баллов)

спасибо

0 голосов
ответил от Отличник (7.2k баллов)

Почему бы не использовать условия if для выбора нужного цикла по введённой букве?

Program ABC;
Uses CRT;
var
  a, b, x, y, w, z: Real;
  C, D, E, Q: integer;
  action: char;
begin
  action := 'x';
  while not (action = 'Q') do
  begin
    writeln ('la-la-la');
    writeln ('Если хотите вычислить сумму, то нажмите С, произведение- D, операцию деления -E ');
    readln(action);
    ClrScr;
    if action = 'C' then
    begin
      readln(a, b);
      writeln (a+b);
      readln(action);
      ClrScr;
    end;
    if action = 'D' then
    begin
      readln(x, y);
      writeln (x*y);
      readln(action);
      ClrScr;
    end;
    if action = 'E' then
    begin
      readln(w, z);
      writeln (w/z);
      readln(action);
      ClrScr;
    end;
    if not ( (action = 'C') or (action = 'D') or (action = 'E') or (action = 'Q') ) then
    begin
      writeln('Ошибка, введите C, D, E или Q');
      readln(action);
      ClrScr;
    end;
  end;
end.

оставил комментарий от Бакалавр (10.8k баллов)

спсибо

оставил комментарий от Отличник (7.2k баллов)

Не за что)

оставил комментарий от Бакалавр (10.8k баллов)

Главная проблема в том, что мне надо, чтобы первый раз 'la-la-la' выбивались автоматически, а затем только в случае, если к нему будут обращаться. А при ошибке выбивало, что-то типа "Ошибка" и тогда пользователю разрешалось выбирать еще раз операцию, которою нужно выполнять (примерно это в этом коде раз и происходит с 'la-la-la' )

оставил комментарий от Отличник (7.2k баллов)

Так оно и должно выходить автоматически при первом запуске. А ошибка - вы имеете в виду ошибку в программе или неверно введённый символ?

оставил комментарий от Бакалавр (10.8k баллов)

Ну, например, это когда пользователь вводит букву P и тогда нужно нечто такого типа:

оставил комментарий от Бакалавр (10.8k баллов)

writeln('Error, please enter C,D,E or Q');

оставил комментарий от Отличник (7.2k баллов)

Ага, окей

оставил комментарий от Отличник (7.2k баллов)

Исправил, принимайте

оставил комментарий от Бакалавр (10.8k баллов)

вроде все работает, большое спасибо.

оставил комментарий от Отличник (7.2k баллов)

Не стоит, рад помочь))

...