Основы програмирования

Управляющие структуры

Без управляющих структур программа представляла бы собой всего лишь набор последовательно выполняемых команд. Рассмотрим пример инструкции:
«Двигайтесь по Главной улице на север, пока слева не увидите школу. Если улица перекрыта из-за ремонта, поверните направо на 17-ю улицу». Данная инструкция сложна и её можно написать с помощью управляющих структур.

Конструкция if-then-else

В приведенном примере Главная улица может оказаться перекрытой из-за ремонта. Для такой ситуации требуется наиболее понятные управляющие структуры if-then-else(«если-тогда-иначе»). Общий синтаксис выглядит так (в соответствии с синтаксисом языка C):
if (условие) then
{
  Набор команд, выполняемый при соблюдении условия;
}
else
{
  Набор команд, выполняемый, когда условия не соблюдаются;
}
Если представить описание движения по маршруту в виде конструкции if-then-else, получится следующий псевдокод:
Ехать по Главной улице;
if (улица перекрыта) then
{
  Повернуть направо на 17-ю улицу;
  Повернуть налево на Советскую улицу;
  Повернуть направо на 18-ю улицу;
}
else
{
 Повернуть направо на 18-ю улицу;
}
Каждая команда занимает отдельную строку, наборы команд, выполняющихся при соблюдении условия, заключены в фигурные скобки и, чтобы структура кода была понятнее, расположены отступом. Также есть языки (например BASIC, Pascal), синтаксис которых требует всегда использовать ключевое слово then.

Поясним, как используется условный оператор if-then-else в Pascal на простом примере:
var
  t: real; { Температура воздуха }

begin
  writeln('Введите температуру воздуха:');
  readln(t); 
  if t > 0 then writeln('вода не замерзла')
  else writeln('вода замерзла');
  readln
end.
Здесь идет проверка температуры t воздуха – если она больше 0 (условие t > 0 после if), то выполняется оператор после then и мы увидим ответ: «вода не замерзла»; в противном случае (то есть при температуре от 0 и ниже: t ≤ 0 — это условие противоположное по отношению к предыдущему t > 0) выполнится оператор после else и ответ будет другим: «вода замерзла» (без кавычек).

Циклы while/until

Базовая концепция программирования — управляющая структура while, представляющая собой разновидность цикла. Цикл нужен для того чтобы выполнять набор команд более одного раза. Ключевое слово while означает «пока». Соответственно, набор команд выполняется, пока соблюдается заданное условие. Программа действий для голодной мыши будет выглядеть так:
while (ты голодна)
{
  Найти еду;
  Съешь еду;
}
Две следующие за оператором while команды будут выполняться, пока мышь чувствует голод. Существует и другая версия цикла, с ключевым словом until(«пока не»). Она применятся, например, в языке Perl(в C такой синтаксис не используется). Программа с until примет такой вид:
until (ты сыта)
{
  Найди еду;
  Съешь еду;
}

Цикл for

Цикл for обычно служит для выполнения команд заданного количества раз. Инструкцию «поверните направо на Конечную улицу и двигайтесь еще 10 миль» можно превратить в такой цикл for:
for (10 итераций)
  Проехать 1 милю прямо;
По своей сути, цикл for — это цикл while со счетчиком. Указанную инструкцию можно записать так:
while (значение счетчика меньше 10)
{
  Проехать 1 милю прямо;
..Увеличить значение счетчика на 1;
}
Нагляднее это выглядит в псевдокоде, напоминающем язык C:
for (i=0; i<10; i++)
  Проехать 1 милю прямо;
i - это имя счетчика, а оператор for разбит на три части, отделенные друг от друга точкой с запятой. В первой объявляется счетчик и ему присваивается начальное значение. Вторая часть напоминает цикл while: пока выполняется условие для значения счетчика, цикл работает.

Последняя часть указывает, что должно происходить со счетчиком на каждой итерации цикла. i++ - это короткий способ сказать: "добавить 1 к счетчику с именем i".

Теперь можно взять все изученные управляющие конструкции и записать приведенный в начале статьи пример в виде следующего псевдокода:
Начать движение на север по Главной улице;
while (слева нет школы)
   Двигаться по Главной улице;
if (улица перекрыта) then
{
  Повернуть направо на 17-ю улицу;
  Повернуть налево на Советскую улицу;
  Повернуть направо на 18-ю улицу;
}
else 
{
  Повернуть направо на 18-ю улицу;
  Повернуть налево на Конечную улицу;
}
for (i=0; i < 10; i++)
  Проехать 1 милю прямо;
Остановиться у дома 666 по Конечной улице;
Основы программирования