Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Развёрнутые лекции по Паскалю.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
512.51 Кб
Скачать

12.Операторы

Операторы описывают те алгоритмические действия, которые долж-

ны выполняться программой для получения искомого результата.

┌───────────┐

│ Операторы │

└─────┬─────┘

┌───────────────┴────────────────┐

┌─────────┴─────────┐ ┌───────────┴───────────┐

│ Простые операторы │ │ Структурные операторы │

└┬──────────────────┘ └┬──────────────────────┘

├──>Присваивания ├──>Составной ┌─>If

├──>Процедуры ├──>Условный───────┤

├──>Перехода │ ┌─>For └─>Case

└──>Пустой ├──>Цикла─┼─>Repeat

│ └─>While

└──>With

Рис.2.

12.1.Простые операторы

Простым называется оператор, который не содержит других опера-

торов.

а)Оператор присваивания

<переменная> := <выражение>;

<идентификатор функции> := <выражение>;

└─ оператор присваивания

Примечание:

Типы данных правой и левой частей оператора должны совпадать,

автоматическое преобразование типов возможно только для типа Real.

б)Оператор процедуры

Пример 10.

->Inc(X,4);

->Dec(Y);

в)Оператор перехода

=>Goto <метка>; - Переход для выполнения других операторов.

=>Halt; - Выход из программы в DOS.

=>Exit; - Выход из подпрограммы.

=>RunError; - Прекращение программы и генерация ошибки.

Примечания:

-><метка> отделяется от оператора двоеточием.

-><метка> используется только в том блоке (подпрограмме), где

она описана и нельзя войти/выйти из него в другой по метке.

->Каждая <метка> должна быть описана в разделе описаний того

блока, в котором используется.

Пример 11.

Label _41,l1,125;

Begin

...

Goto _41;

..┌─ двоеточие отделяет <метку> от <оператора> в программе.

_41: <оператор>;

г)Пустой оператор

;

125: ;

12.2.Структурные (сложные) операторы

Структурные операторы строятся из других операторов: простых

или структурных.

а)Составной оператор

Составной оператор - это совокупность любых (простых или слож-

ных) операторов, отделяемых друг от друга ; и заключенных в ограни-

чители: Begin .. End;

Пример 12.

Label l;

Var X,Y,N:Real; F:Boolean;

Const A:Byte=10;

Begin

R:=Ln(X)/Ln(N); {LognX -логарифм от X по основанию N}

l: Y:=Sin(X)+Sqr(X);

F:=Sin(X)>Sqr(X); {F - логическая переменная}

Begin

Dec(A,-4);

If Not F Then Goto l;

End;

End.

Примечания:

->; перед End можно не ставить, но для однообразия и простоты

рекомендуется ее ставить.

->Составной пустой оператор: Begin End;

б)Условный оператор

Условный оператор позволяет определить последовательность ал-

горитмических действий в зависимости от логического условия.

=>Оператор IF.

IF <логическое условие> Then <оператор1>

[Else <оператор2>];

Примечания:

-><логическое условие> - это константа, переменная или выраже-

ние, которые могут принимать логическое значение False или

True.

->Если альтернатива Else отсутствует, то точка с запятой ста-

вится после <оператора1>.

->В качестве <оператора> может быть использован другой услов-

ный оператор If, однако необходимо следить за тем, к какому

из операторов If будет относиться Else (в ряде случаев необ-

ходимо использовать составной пустой оператор).

->При составлении сложных <логических условий> необходимо пра-

вильно расставлять скобки.

Пример 13.

->If True Then <оператор>;

->If Not Logical Then <оператор>;

->If X>5 Then <оператор>;

->If (A=B)Or(C=D)And(P=1) Then <оператор>; {используются () !}

->If X=0.0 Then RPower:=0.0 {возведение X в степень Y}

Else If Y=0.0 Then RPower:=1.0

Else RPower:=Exp(Y*Ln(X));

=>Оператор варианта Case

Case <селектор> Of ┌──── разделитель

<набор1 значений селектора>:<оператор1>;

<набор2 значений селектора>:<оператор2>;

... └───── возможные значения селектора.

[Else <операторN>;]

End;

Примечания:

->В качестве <селектора> может быть использована переменная

любого порядкового типа или выражение, имеющее своим значе-

нием также любой порядковый тип, кроме LongInt. Нельзя испо-

льзовать другие типы, например: Real, String и т.п.

->Тип <значений 1, 2...> должен совпадать с типом <селектора>.

->Альтернатива Else может отсутствовать, точка с запятой перед

ней может стоять.

-><набор значений> может быть указан через диапазон или запя-

тую и его необходимо отделить от <оператора> двоеточием.

->Если не более двух значений, то удобнее оператор If.

Пример 14.

->Case Col Of {перечисляемый для примера 7}

Red:X:=X+Y;

Green:X:=X-Y;

Black:X:=X*Y;

End;

->Case I+2 Of {селектор-выражение целого типа}

0,2,4,6:Dec(I,2); {набор значений через запятую}

8..10:Inc(I); {набор значений через диапазон}

5:Goto <метка>;

7:Case C Of {селектор-символьного типа}

'a':WriteLn('Конец работы !');

#98:ReadLn(X);

End;

Else X:=Sqrt(Y);

End;

в)Операторы цикла

Операторы цикла задают повторное выполнение операторов (прос-

тых или структурных).

=>Оператор с параметром For

For <параметр-счетчик>:=<начальное значение> То/DownTo

<конечное значение> Do <оператор>;

Примечания:

->Можно задать два различных шага цикла изменения <параметра-

счетчика> +1 (To) или -1 (DownTo).

->Срабатывают внутри цикла процедуры Inc, Dec и функции Succ,

Pred, изменяющие значение <параметра-счетчика>, хотя в руко-

водстве по TP это считается ошибкой.

->Целесообразно применять цикл For тогда, когда число повторе-

ний известно. Достоинство этого цикла в простоте.

-><параметр-счетчик>, <начальное> и <конечное значения> должны

быть одного типа, в качестве которого можно использовать то-

лько порядковый тип.

->В качестве <начального> и <конечного значений> может быть

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

-><начальное> и <конечное значения> запоминаются в начале цик-

ла и не могут быть изменены внутри него.

->Досрочно выйти из цикла For можно с использованием операто-

ров перехода.

->По окончании цикла значение <параметра-счетчика> не гаранти-

руется.

Пример 15.

->For C:='a' To 'z' Do Begin {символьный}

I:=Ord(C);

X:=Sin(X);

End;

->For Col:=Red To Black Do X:=1/Y; {перечисляемый}

->n!: I:=1;For K:=1 To N Do I:=I*K; {факториал}

->xn: I:=1;For K:=1 To N Do I:=I*X; {возведение в степень}

-> (Sin(X/I) {подсчет суммы}

S:=0.0;

For I:=1 To N Do S:=S+Sqr(Sin(X/I)); {целый}

=>Оператор с постусловием Repeat

Repeat <операторы> Until <условие выхода из цикла>;

Примечания:

-><операторы> цикла должны изменять <условие выхода из цикла>

для того, чтобы он мог закончиться.

-><операторы> выполняются по крайней мере один раз.

->В качестве <условия выхода из цикла> могут быть использова-

ны: логические константа или переменная или выражение с ло-

гическим результатом.

Пример 16.

->Repeat Until KeyPressed; {остановка до нажатия клавиши}

->Repeat

Write(^M,'Хотите закончить работу Y/N ?');

Read(C); {^M - курсор в начало той же строки}

Until UpCase(C) In ['Y','N']; {с логическим результатом}

->Определение корней уравнений методом половинного деления

F - функция, имеющая корень между точками A и B, например,

вычисляющая Sin(X).

Var A,B,C,Ex,Ey:Real;

Begin

A:=-1.2; {начальные значения точек A и B}

B:=1.4;

Ex:=0.0001; {точность, с которой надо найти корень}

Ey:=0.0001; │ | │

. . . │ |C │

Repeat │A | │B

C:=(A+B)/2; ┼──────┼─────────────┼

If Sin(A)*Sin(C) < 0 Then B:=C │ | │

Else A:=C;

Until (Abs(A-B)<=Ex)Or(Abs(Sin(A)-Sin(B))<=Ey);

WriteLn('Корень равен=',C:4:3);

Readln;

End.

=>Оператор с предусловием While

While <условие продолжения цикла> Do <оператор>;

Примечания:

-><оператор> цикла должен изменять <условие продолжения цикла>,

чтобы он мог закончиться.

-><оператор> может ни разу не выполниться.

->В качестве <условия продолжения цикла> может быть использо-

ваны логические константа или переменная или выражение с ло-

гическим результатом.

Пример 17.

While I>0 Do Begin { (I>0)And(X<100) }

If Odd(I) Then Z:=X+Y;

I:=I Div 2;

X:=Sqr(X);

End;

Примечание:

В TP в версии 7.0 в операторах циклов можно использовать сле-

дующие стандартные процедуры:

=>Break - Досрочно выйти из цикла.

=>Continue - Продолжить выполнение цикла, начиная с первого опера-

тора новой итерации.

13.ВВОД И ВЫВОД ДАННЫХ

13.1.Ввод данных с клавиатуры

=>Read(<список переменных через запятую>); - Считывание данных с

клавиатуры.

Read(A,B,C); или Read(A);Read(B);Read(C);

Данные набираются на одной строке или на нескольких.

=>ReadLn[(<список переменных через запятую>)]; - Считывание данных

и переход к новой строке на экране дисплея или принтера.

ReadLn(A,B,C);=Read(A);Read(B);Read(C);ReadLn;

Примечания:

->Переменные целого и вещественного типов, вводимые с помощью

одного оператора, должны отделяться друг от друга пробелами

или символами возврата каретки (#13), ReadLn(A,B,C);

5.2 3.7 4<Enter>. Тогда получим: A:=5.2;B:=3.7;C:=4;

->Переменные символьного типа набираются без пробелов и, если

считывается один символ, а случайно набрано больше, то будет

считан будет только один-первый.

->При вводе строковых переменных клавишу <Enter> нужно нажи-

мать лишь один раз в конце строки.

->Переменные логического и перечисляемого типов вводятся с кла-

виатуры с использованием процедуры преобразования типов: це-

лый в логический или перечисляемый.

->Процедура Read работает со сбоями, лучше использовать ReadLn.

Пример 18. ┌─ дополнительная переменная

->Var Bool:Boolean;B:Byte;

Begin

Write('Введите значение логической переменной: 0-False, 1-

True ');

ReadLn(B);

Bool:=Boolean(B); {логический тип преобразуется}

{или, что проще, Bool:=B=1;}{результат сравнения}

End. ┌─ дополнительная переменная

->Var Col:Color;B:Byte; {продолжение примеров 7, 14}

Begin

Write('Укажите цвет: 0 - красный, 1- зеленый, 2 - голубой,

3 - черный ');

ReadLn(B);

Col:=Color(B); {перечисляемый тип преобразуется}

End.

->При вводе переменных смешанного типа, таких как целые, веще-

ственные, символьные и строковые необходимы дополнительные

символьные переменные со значением пробела (#32) или #13, #9.

Пример 19.

Необходимо ввести одновременно значения следующих переменных:

вещественной, целой, строковой[11], символьной, строковой[90].

Оператор ввода должен быть записан следующим образом:

ReadLn(VReal,VInt,C(дополнительная),St11,C,St90);

Необходимо набрать следующим образом:

-1.23E-10 +12964 abcdefhijzfqdlmn<Enter>

└─VReal─┘║└VInt┘C└──St11─┘C└St90┘║

╚══Игнорируются═════════╝

Вместо дополнительной разделительной переменной C можно вво-

дить только пробел (#32), #13, #9. Во избежание ошибок лучше

избегать ввода значений переменных смешанных типов данных.