Что такое цикл с постусловием? Каковы его отличия от цикла с предусловием?
Цикл с постусловием — это цикл, в котором условие проверяется после выполнения тела цикла. Это означает, что тело такого цикла всегда выполняется хотя бы один раз.
Классический пример — конструкция do...while.
let count = 1;
do {
console.log(count);
count++;
} while (count <= 5);let count = 1;
do {
console.log(count);
count++;
} while (count <= 5);package main
import "fmt"
func main() {
count := 1
for {
fmt.Println(count)
count++
if count > 5 {
break
}
}
}public class Example {
public static void main(String[] args) {
var count = 1;
do {
System.out.println(count);
count++;
} while (count <= 5);
}
}count = 1
while True:
print(count)
count += 1
if not (count <= 5):
breakЭтот код выведет числа от 1 до 5.
Главная особенность
В цикле с постусловием сначала выполняется действие, а только потом проверяется условие продолжения или завершения.
Например:
let value = 10;
do {
console.log(value);
} while (value < 5);let value = 10;
do {
console.log(value);
} while (value < 5);package main
import "fmt"
func main() {
value := 10
for {
fmt.Println(value)
if value >= 5 {
break
}
}
}public class Example {
public static void main(String[] args) {
var value = 10;
do {
System.out.println(value);
} while (value < 5);
}
}value = 10
while True:
print(value)
if not (value < 5):
breakХотя условие value < 5 ложно, тело цикла все равно выполнится один раз.
Отличие от цикла с предусловием
Цикл с предусловием:
while (condition) {
// тело цикла
}while (condition) {
// тело цикла
}package main
func main() {
for condition {
// тело цикла
}
}public class Example {
public static void main(String[] args) {
while (condition) {
// тело цикла
}
}
}while condition:
# тело цикла
passСначала проверяет условие, потом выполняет тело.
Цикл с постусловием:
do {
// тело цикла
} while (condition);do {
// тело цикла
} while (condition);package main
func main() {
condition := false
for {
// тело цикла
if !condition {
break
}
}
}public class Example {
public static void main(String[] args) {
do {
// тело цикла
} while (condition);
}
}while True:
# тело цикла
if not condition:
breakСначала выполняет тело, потом проверяет условие.
Сравнение
| Признак | Цикл с предусловием | Цикл с постусловием |
|---|---|---|
| Когда проверяется условие | До тела цикла | После тела цикла |
| Минимальное число выполнений | 0 | 1 |
| Типичный оператор | while | do...while |
| Когда удобен | Когда действие может быть вообще не нужно | Когда действие нужно выполнить хотя бы один раз |
Когда используется цикл с постусловием?
Он полезен, когда действие обязательно должно быть выполнено хотя бы один раз.
Например:
- показать меню пользователю;
- запросить ввод;
- выполнить первую попытку действия;
- повторять ввод, пока данные некорректны.
Пример с меню:
let command;
do { command = 'exit';
// условно: пользователь ввел команду
console.log(`Команда: ${command}`);
} while (command !== 'exit');let command: string;
do { command = 'exit';
// условно: пользователь ввел команду
console.log(`Команда: ${command}`);
} while (command !== 'exit');package main
import "fmt"
func main() {
command := ""
for {
command = "exit"
// условно: пользователь ввел команду
fmt.Printf("Команда: %s
", command)
if command == "exit" {
break
}
}
}public class Example {
public static void main(String[] args) {
String command;
do {
command = "exit";
// условно: пользователь ввел команду
System.out.println("Команда: " + command);
} while (!command.equals("exit"));
}
}command = ''
while True:
command = 'exit'
# условно: пользователь ввел команду
print(f'Команда: {command}')
if command == 'exit':
breakВывод
Цикл с постусловием отличается от цикла с предусловием тем, что тело выполняется до проверки условия. Поэтому такой цикл всегда выполняется хотя бы один раз.
Источники
- Горбатов В.А., Горбатов А.В., Горбатова М.В. Дискретная математика: Учебник для студентов втузов. - М.: АСТ, 2014. - 448 с.
- Горбатов В.А., Горбатов А.В., Горбатова М.В. Теория автоматов: учебник для втузов. - М.: АСТ, 2008. - 559 с.
- Кузнецов О. П. Дискретная математика для инженера. - Санкт-Петербург [и др.]: Лань, 2009.
- Содержание курса лекций «Языки программирования». Кафедра алгоритмических языков ВМК МГУ, 2018.
- Босова Л.Л. Информатика. Базовый курс: учебник для 10-11 классов. - М.: БИНОМ. Лаборатория знаний, 2021.
- Гладкий Ю.Н. Информатика и информационные технологии: учеб. пособие. - М.: КноРус, 2020.