Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр.на_ЯВУ_уч.пос.DOC
Скачиваний:
24
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

§4.4. Пустой оператор

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

§4.5. Безусловный оператор перехода

Это единственный оператор, в котором используется метка. Он имеет вид:

Go To <метка>;

После выполнения этого оператора будет осуществлен переход на оператор, перед которым стоит указанная метка.

Использование безусловных передач управления в программе считается теоретически избыточным для многих языков высокого уровня и способствует созданию малопонятных и трудно модифицируемых программ, которые вызывают сложности при отладке и сопровождении. Если же программист считает, что без условных переходов не обойтись, то необходимо выполнять следующие условия:

  1. Не допускаются переходы внутрь подпрограмм (процедур и функций) или из них.

  2. Переход внутрь структурного оператора может вызвать непредсказуемые эффекты, хотя компилятор не выдает сообщение об ошибке.

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

Program S;

Label L;

Const Eps = 1E-6; {определим точность как константу}

Var a,x,y:real;

Begin

WriteLn (‘Введите число для определения кубического корня’);

Read (a);

x := a;

L: y := x; {«старим» предыдущее значение}

x := 1/3*(a/sqr(y)+2*y); {вычисляем новое значение}

If Abs(x-y)>Eps Then

GoTo L; {повторим, если разность старого и нового значений не достигла заданной точности}

WriteLn (‘Значение корня:’, x:10:6);

End.

§4.6. Условный оператор

При составлении по алгоритму программы на месте блока «Решение» записывается условный оператор, который может иметь 2 формы. В общем виде полная форма записывается как:

If <логическое выражение> Then <оператор1> Else < оператор2>;

а сокращенная:

If < логическое выражение > Then < оператор1>;

В первом случае, если логическое выражение истинно (True), то выполняется оператор1, а если ложно, то оператор2. Во втором случае при ложности логического выражения просто осуществляется переход к следующему оператору.

Наиболее простой пример – вычисление значения кусочно-непрерывной функции:

Program Function;

Var

f,x:real;

Begin

Read (x);

If x>=0 Then F := x*x {первый вариант}

Else F := sqrt (x); {второй вариант}

WriteLn ('Значение функции =',F:8:3);

end.

Заметим, что значение функции используется как имя переменной. Оно не должно содержать скобок, поэтому здесь вместо F(x) используется просто F (можно функцию назвать и по-другому, например Fx).

§4.7. Оператор цикла с параметром for

Операторы цикла заставляют выполняться входящие в их состав внутренние операторы несколько раз. В языке Паскаль существует три вида операторов цикла.

Если число повторений цикла известно перед его началом, то используют наиболее наглядный, но все же имеющий ограниченную область применения оператор FOR:

For <параметр цикла> := <начальное значение> To | DownTo <конечное значение> Do <внутренний оператор – тело цикла>

Внутренний оператор будет выполняться один раз для каждого значения параметра цикла из указанного диапазона. Если используется служебное слово То, то при каждом новом выполнении берется следующее значение, при DownTo – предыдущее (используются функции Succ и Pred), то есть тип параметра цикла должен быть дискретным.

При использовании оператора FOR необходимо соблюдать следующие правила:

  1. Начальное и конечное значение являются выражениями (константа – вырожденное выражение), а параметр цикла – имя переменной (может быть и структурированной, например, элемент массива).

  2. Параметр цикла, начальное и конечное значение должны быть одного и того же дискретного типа (не допускается использование типа Real) и не должны изменяться внутри оператора FOR.

  3. Если используется служебное слово То, а начальное значение больше конечного (или меньше в случае DownTo), то внутренний оператор не выполнится ни разу.

Пример на вычисление суммы с оператором FOR приводился ранее. Если количество повторений заранее известно, но параметр цикла – вещественный, то в явном виде этот оператор использовать нельзя. Ограничение на дискретный тип можно обойти, если ввести дополнительную целую переменную. Например, необходимо вычислить таблицу синуса для значений аргумента от 0.5 до 0.7 с шагом 0.01. Введем дополнительную переменную i, изменяющуюся от 0 до 20 (всего надо вычислить 21 точку). Если учесть, что внутри цикла надо использовать не только оператор вычисления синуса, но и оператор вывода, то в операторе цикла используем операторные скобки.

Программа будет выглядеть следующим образом:

Program Tabl;

Var

i:integer;

x:real;

Begin

WriteLn (' Таблица синуса');

For i:=0 To 20 Do

Begin

x := i/100+0.5;

WriteLn ('x=', x:4:1,'sin(x)=', sin(x):8:5);

end

end.

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