в чём разница while и repeat until в паскале? а то путаюсь
Объясните по-человечески, чем 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 ответа
На самом деле твой код через 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 сам как скобка.
я запоминаю так: while — 'пока', проверяет ДО. repeat — 'повторяй', сделает разок и проверит ПОСЛЕ. Если надо чтобы точно хоть раз выполнилось (например меню показать) — бери repeat