← Все вопросы

в чём разница while и repeat until в паскале? а то путаюсь

Задан 2 месяца назад702 просмотров2 ответа
4

Объясните по-человечески, чем while отличается от repeat until. В учебнике написано мутно. Мне надо считать сумму чисел пока пользователь не введёт 0. Написал через while, но он почему-то ноль тоже прибавляет иногда.

var
  x, s: integer;
begin
  s := 0;
  readln(x);
  while x <> 0 do
  begin
    s := s + x;
    readln(x);
  end;
  writeln(s);
end.

2 ответа

9
✓ Принятый ответ — помог автору

На самом деле твой код через while правильный, он ноль НЕ прибавляет — проверь, может ты в тесте сам ноль в середине вводил) Он работает так: сначала читает x, потом пока x не ноль — прибавляет и читает дальше. Всё ок.

Теперь разница:

  • while ... do — проверяет условие в начале. Если сразу не подходит — тело ни разу не выполнится. Условие пишется на продолжение.
  • repeat ... until — выполняет тело хотя бы один раз, а проверяет в конце. Условие пишется на выход.

То же самое через repeat:

var
  x, s: integer;
begin
  s := 0;
  repeat
    readln(x);
    s := s + x;
  until x = 0;
  writeln(s);
end.

Заметь: тут условие until x = 0 (когда остановиться), а во while было while x <> 0 (пока продолжать) — противоположные. И ещё: while нужен begin/end вокруг тела, а repeat/until — нет, until сам как скобка.

4

я запоминаю так: while — 'пока', проверяет ДО. repeat — 'повторяй', сделает разок и проверит ПОСЛЕ. Если надо чтобы точно хоть раз выполнилось (например меню показать) — бери repeat

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект