Что такое цикл с предусловием? В каких ситуациях он используется?

Цикл с предусловием — это цикл, в котором условие проверяется до выполнения тела цикла. Если условие истинно, тело цикла выполняется. После выполнения тела условие проверяется снова. Цикл продолжается, пока условие остается истинным.

Классический пример цикла с предусловием — цикл while.

Общая форма:

пока условие истинно:    выполнить действия

В TypeScript это можно записать так:

let count = 1;

while (count <= 5) {
  console.log(count);
  count++;
}
let count = 1;

while (count <= 5) {
  console.log(count);
  count++;
}
package main
import "fmt"
func main() {
  count := 1

  for count <= 5 {
    fmt.Println(count)
    count++
  }
}
public class Example {
  public static void main(String[] args) {
    var count = 1;

    while (count <= 5) {
      System.out.println(count);
      count++;
    }
  }
}
count = 1

while count <= 5:
  print(count)
  count += 1

Этот цикл выведет числа от 1 до 5.

Главная особенность цикла с предусловием

Тело цикла может не выполниться ни разу, если условие с самого начала ложно.

Например:

let count = 10;

while (count <= 5){
  console.log(count);
  count++;
}
let count = 10;

while (count <= 5){
  console.log(count);
  count++;
}
package main
import "fmt"
func main() {
  count := 10

  for count <= 5 {
    fmt.Println(count)
    count++
  }
}
public class Example {
  public static void main(String[] args) {
    var count = 10;

    while (count <= 5){
      System.out.println(count);
      count++;
    }
  }
}
count = 10

while count <= 5:
  print(count)
  count += 1

Здесь условие count <= 5 изначально ложно, поэтому тело цикла не выполнится ни одного раза.

Когда используется цикл с предусловием?

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

Например:

Пример:

let password = '';

while (password !== '12345') {
  // условно: запрашиваем пароль у пользователя
  password = '12345';
}
let password = '';

while (password !== '12345') {
  // условно: запрашиваем пароль у пользователя
  password = '12345';
}
package main
func main() {
  password := ""

  for password != "12345" {
    // условно: запрашиваем пароль у пользователя
    password = "12345"
  }
}
public class Example {
  public static void main(String[] args) {
    var password = "";

    while (password != "12345") {
      // условно: запрашиваем пароль у пользователя
      password = "12345";
    }
  }
}
password = ''

while password != '12345':
  # условно: запрашиваем пароль у пользователя
  password = '12345'

Важное условие правильной работы

В теле цикла должно происходить изменение данных, от которых зависит условие. Иначе цикл может стать бесконечным.

Пример ошибки:

let i = 0;

while (i < 10) {
  console.log(i);  // i не изменяется
}
let i = 0;

while (i < 10) {
  console.log(i);  // i не изменяется
}
package main
import "fmt"
func main() {
  i := 0

  for i < 10 {
    fmt.Println(i)  // i не изменяется
  }
}
public class Example {
  public static void main(String[] args) {
    var i = 0;

    while (i < 10) {
      System.out.println(i);  // i не изменяется
    }
  }
}
i = 0

while i < 10:
  print(i) # i не изменяется

Такой цикл будет выполняться бесконечно, потому что i всегда остается меньше 10.

Правильный вариант:

let i = 0;

while (i < 10) {
  console.log(i);
  i++;
}
let i = 0;

while (i < 10) {
  console.log(i);
  i++;
}
package main
import "fmt"
func main() {
  i := 0

  for i < 10 {
    fmt.Println(i)
    i++
  }
}
public class Example {
  public static void main(String[] args) {
    var i = 0;

    while (i < 10) {
      System.out.println(i);
      i++;
    }
  }
}
i = 0

while i < 10:
  print(i)
  i += 1

Вывод

Цикл с предусловием — это цикл, в котором условие проверяется перед каждой итерацией. Он используется, когда количество повторений заранее неизвестно, а выполнение действий зависит от некоторого условия.

Источники

  • Горбатов В.А., Горбатов А.В., Горбатова М.В. Дискретная математика: Учебник для студентов втузов. - М.: АСТ, 2014. - 448 с.
  • Горбатов В.А., Горбатов А.В., Горбатова М.В. Теория автоматов: учебник для втузов. - М.: АСТ, 2008. - 559 с.
  • Кузнецов О. П. Дискретная математика для инженера. - Санкт-Петербург [и др.]: Лань, 2009.
  • Содержание курса лекций «Языки программирования». Кафедра алгоритмических языков ВМК МГУ, 2018.
  • Босова Л.Л. Информатика. Базовый курс: учебник для 10-11 классов. - М.: БИНОМ. Лаборатория знаний, 2021.
  • Гладкий Ю.Н. Информатика и информационные технологии: учеб. пособие. - М.: КноРус, 2020.