
- •1.Алфавит языка паскаль
- •9.6.Функции определения порядка
- •10.Тип вещественный
- •12.Операторы
- •12.1.Простые операторы
- •13.2.Вывод данных на монитор
- •13.3.Форматирование при выводе данных
- •17.1.Объявление и вызов подпрограмм
- •19.Блоки (модули) в паскале
- •19.1.Блок Crt (Unit Crt)
- •23.1.Работа с текстовыми файлами
- •24.Динамическая память
- •640 Кбайт ┌───────────────────┐
- •26.Динамические библиотеки
- •28.Тип объект (класс)
- •30.Встроенный ассемблер
- •30.1.Объявление операндов
- •31.Основы работы в графическом режиме
- •34.Многоугольники
- •35.Криволинейные фигуры
- •39.Команды работы редактора
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. Во избежание ошибок лучше
избегать ввода значений переменных смешанных типов данных.