..

Сайт города Попасная.
 

 

 

Интернет издания:

ПОПАСНЯНСКАЯ ПРАВДА

 



 

 

 

 

3.5. Оператор безусловного перехода. Метки

Оператор безусловного перехода обеспечивает передачу управления в любое место программы. Он имеет вид GоТо Метка. GoTo является зарезервированным словом. Метка позволяет указать тот оператор, с которого будет продолжаться выполнение программы. Метки объявляются в виде списка в разделе описания программы после зарезервированного слова Label. Имена меток формируются по тем же правилам, что и имена переменных. Кроме этого в качестве меток могут использоваться натуральные числа, не превосходящие 9999. Рассмотрим использование меток в программе, определяющей максимальное число из вводимой последовательности целых чисел. Количество вводимых чисел заранее не известно. Анализ последовательности заканчивается после ввода отрицательного числа.

Программа 3.5.

Label Inp;
Var n,max:Integer;
Begin
max:=-l;
Inp: Write('Введите число ');
Readln(n);
If n>max Then max:=n;
If n>=0 Then GoTo Inp;
Writeln('Максимум = ',max);
End.

В первой строке программы объявлена метка Inp. Затем объявлены две переменные n и max, первая из которых предназначена для записи текущего вводимого значения, вторая - для записи текущего максимального значения. Первый оператор программы присваивает переменной max начальное значение, равное -1. Следующие четыре строки программы выполняются до тех пор, пока не будет введено отрицательное число. Последняя строка предназначена для вывода полученного максимального значения. Применение оператора безусловного перехода без особой необходимости не рекомендуется, поскольку, наряду с применением процедуры Halt, такой оператор нарушает представление алгоритма в тексте программы, затрудняет ее понимание и модификацию.

Задание:

Составьте программу, обеспечивающую ввод заданного количества вещественных чисел и определение минимального из них.
Указание: предусмотрите счетчик введенных чисел, для хранения чисел используйте переменные типа Real.

3.6. Операторы цикла

В предыдущем разделе мы рассмотрели программу, определяющую максимальное число из введенных целых чисел. Часть операторов этой программы выполнялась циклически. Повторение было реализовано с помощью оператора условия и оператора безусловного перехода. Однако в TurboPascal есть три оператора, специально предназначенных для реализации циклических алгоритмов. Это операторы цикла с предварительной проверкой условия, с последующей проверкой условия и с параметром. Оператор цикла с предварительной проверкой условия содержит зарезервированные слова While и Do, имеет структуру While условие Do оператор; и выполняется следующим образом. Сначала проверяется условие. Если результатом проверки условия является значение True, то выполняется оператор, входящий в состав оператора цикла. После чего снова проверяется условие. Этот процесс продолжается до тех пор, пока в результате проверки условия не будет получено значение False, то есть условие перестанет выполняться. Если в цикле надо выполнить группу операторов, ее необходимо оформить как составной оператор. В качестве условия применяется выражение логического типа. Заменим в программе 3.5. оператор безусловного перехода и оператор условия рассмотренным оператором цикла.

Программа 3.6.

Var n,max:Integer;
Begin
max:=-l;
While n>=0 Do
Begin
Write('Введите число ');
Readln(n);
If n>max Then max:=n;
End;
Writeln('Максимум = ',max);
End.

В операторе цикла проверяется условие n>=0. Пока оно выполняется, будут повторяться три оператора, входящих в состав составного оператора. После того, как мы введем отрицательное число, условие продолжения цикла не выполнится, и цикл завершится. Оператор Writeln('Максимум = ',max); выведет найденный максимум, и программа завершится. При работе в интегрированной среде TurboPascal 7.0 всем переменным, объявленным в разделе описаний после слова Var, до начала выполнения программы присваиваются нулевые значения или значения, соответствующие нулевым кодам. Поэтому, хотя перед началом цикла переменной п в данной программе не было присвоено никакого значения, программа выполняется правильно. Однако, поскольку программа может быть откомпилирована на диск, а затем выполняться непосредственно в среде DOS, рекомендуется присваивать значения всем используемым в ней переменным, и более правилен следующий вариант данной программы.

Программа 3.7.

Var n,max:Integer;
Begin
Write('Введите число ');
Readln(n);
max:=n;
While n>=0 Do
Begin
If n>max Then max:=n;
Write('Введите число');
Readln(n);
End;
If max>= 0 Then Writeln(‘Максимум = ‘,max)
Else Writeln('Максимум не найден');
End.

Программа 3.7. более корректна еще и по той причине, что ее легко изменить, например, чтобы находить не максимум, а минимум. Для этого достаточно в операторе условия If n>max Then max:=n знак операции сравнения "больше" заменить знаком операции сравнения "меньше". Еще, конечно, надо сменить текст выводимого сообщения. Напомним, что по условию дополнительной задачи минимум ищется только среди вводимых положительных чисел, а отрицательное число используется только как признак завершения вводимой последовательности. Если сменить знак операции сравнения в программе 3.6, то минимум всегда будет равен последнему введенному отрицательному числу, что неверно. В рассмотренном операторе цикла условие, определяющее, продолжать или не продолжать выполнение цикла, проверяется перед выполнением цикла. Поэтому данный оператор цикла называется оператором с предварительной проверкой условия. Слово While означает "Пока", a Do -"Выполнять", то есть цикл продолжается до тех пор, пока выполняется условие. В операторе цикла другого типа сначала выполняется группа операторов, а затем производится проверка условия, определяющая, выполнять ли эти операторы еще раз. Данный оператор называется оператором цикла с последующей проверкой условия. Он имеет следующую структуру:

Repeat
0ператор1;
0ператор2;
.
.
ОператорN;
Unti1 условие;

Группа выполняемых в цикле операторов ограничена зарезервированными словами Repeat - "Повторять" и Until - "До"; использовать составной оператор в данном случае не требуется. Условие в операторе цикла с последующей проверкой противоположно условию оператора цикла с предварительной проверкой. Здесь выполнение условия приводит к завершению цикла. Программа 3.7, реализованная с помощью оператора цикла с последующей проверкой условия, будет выглядеть следующим образом:

Программа 3.8.

Var n,max:Integer;
Begin
n: — 1; max:=n;
Repeat
If n>max Then max:=n;
Write('Введите число ');
Readln(n);
Until n<0;
If max>= 0 Then Writeln('Максимум = ',max)
Else Writeln('Максимум не найден');
End.

 

Вернуться к оглавлению

 
Popasnaya.com.ua Web-Source 2003 - 2004 / babelyuk jr / All Rights Reserved