Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы языка Паскаль.doc
Скачиваний:
13
Добавлен:
01.07.2025
Размер:
134 Кб
Скачать
☆

Цепочка if-else-if

Одна из распространенных программных конструкций, основанных на последовательности вложенных операторов IF – это цепочка if-else-if. Выглядит она так:

IF <логическое выражение>

Then оператор;

else if <логическое выражение>

Then оператор1;

Else if <логическое выражение>

Then оператор2;

……

else операторN;

Порядок работы:

Логические выражения вычисляются сверху вниз. Как только одно из условий, управляющих таким if, оказывается равным true, тогда выполняется связанный с ним оператор, а оставшаяся часть цепочки пропускается. Если все логические выражения = false, то выполнятся операторN. Если конечный операторN отсутствует, то не выполняется никаких действий.

Пример: Задано целое число Y. Вычислить новое значение Y по правилу:

Y =

Решение. Сначала составим программу без использования цепочки if-else-if. Попробуем реализовать правило вычисления Y «в лоб»:

Program myif;

Var y:real;

Begin

Writeln (‘Введите y ’); readln(y);

If Y>2 then Y:=Y/10;

If y<0 then Y:=sqr(Y)

Else Y:=-10*Y;

Writeln(‘Результат Y = ’,Y:0:3);

End.

Проанализируем работу программы при:

1) Y = -1.

В первом операторе IF выражение Y>2 дает значение false, поэтому ветка Then пропускается. Второй оператор If при вычислении выражения Y<0 получает значение True и результирующее значение Y вычисляется в операторе Y:=sqr(Y). Ветка Else этого оператора IF пропускается. Ответ соответствует условию.

2) Y=10.

В первом операторе IF выражение Y>2 дает значение True, происходит переход к оператору, относящемуся к ветке Then. Вычисляется выражение 10/10 и Y := 1, т.е. ответ уже получен. Далее по правилам выполнения программ происходит переход к следующему после IF оператору – второму оператору If. При вычислении выражения Y<0 (1<0) получается значение False и происходит переход на ветку Else. Выполняется оператор Y:=-10*Y (Y:=-10*1) и Y := -10. Т.о., вторично изменяется значение Y, что не соответствует условию.

Исправить эту ошибку можно, применив цепочку if-else-if. Тогда текст программы будет следующий:

Program myif;

Var y:real;

Begin

Writeln (‘Введите y ’); readln(y);

If Y>2 then Y:=Y/10

Else If y<0 then Y:=sqr(Y)

Else Y:=-10*Y;

Writeln(‘Результат Y = ’,Y:0:3);

End.

Теперь при Y=0 выражение Y>2 дает True, выполняется оператор, стоящий на ветке Then : Y:=10/10 (=1). Второй оператор If теперь относится к ветке Else и пропускается. Т.о., результат соответствует условию.

Операторы повторений

В языке Паскаль имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты алгоритмов:

  1. Счетный цикл (цикл с параметром) – FOR

  2. Цикл с предусловием (цикл «пока»)– WHILE

  3. Цикл с постусловием (цикл «до»)– REPEAT

Счетный цикл

Используется тогда, когда в программе требуется организовать повторение определенных действий известное число раз. Для подсчета количества повторений используется переменная цикла. Этот цикл в Паскале требует соблюдения наибольшего числа ограничений и поэтому из всех циклов применять его наиболее сложно.

Оператор цикла с параметром имеет такую структуру:

F or <имя переменной>:=<выражение1> To <выражение2> Do <оператор>;

Здесь:

<имя переменной> - параметр цикла

<выражение1> - начальное значение параметра цикла

<выражение2> - конечное значение параметра цикла

Все три эти объекта должны быть одного порядкового типа.

<оператор> - тело цикла.

Пример написания оператора:

For I := 1 to 10 do writeln(I); - выполняет повторение вывода на экран значения параметра цикла с переводом строки.

Правила работы:

1. Вычисляются значения выражения 1 и выражения 2.

2. Параметру цикла присваивается начальное значение (в примере I:=1).

3. Параметр цикла сравнивается с конечным значением (10). Если параметр цикла меньше или равен конечному значению, то перейти к п.4, иначе - конец цикла (переход на следующий оператор после оператора цикла).

4. Выполняется тело цикла (итерация).

5. Параметр цикла принимает следующее значение, которое вычисляется с помощью функции Succ (шаг переменной цикла “+1”)

6. Выполняется переход к п.3.

Второй вариант записи этого оператора:

For <имя переменной>:=<выражение1> DownTo <выражение2> Do <оператор>;

Отличия от первого варианта:

  1. Повторение работы цикла происходит, если значение параметра цикла больше или равно конечному значению.

  2. Параметр цикла после каждой итерации цикла принимает следующее значение, полученное с помощью функции Pred (шаг переменной цикла “-1”).

Особенности оператора FOR:

  1. После слова DO тело цикла составляет только один оператор. Если нужно включить в тело цикла два и более оператора, то используется составной оператор – группа операторов, заключенная в операторные скобки Begin и End.

  2. Шаг переменной цикла может быть только +1 (DO) или -1 (DOWNTO).

  3. Если в начале работы цикла начальное значение больше конечного (вариант c TO) или начальное значение меньше конечного (вариант с DOWNTO), то оператор тела цикла не будет выполнен ни разу.

  4. Изменять в теле цикла значение параметра цикла не рекомендуется.