
- •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.Команды работы редактора
1.Алфавит языка паскаль
Алфавит (основные символы (лексемы) языка TP) включает:
а)Буквы английского алфавита: a..z, A..Z.
б)Арабские цифры: 0..9.
в)Шестнадцатиричные цифры: 0..9, A(a), B(b), C(c), D(d), E(e),
F(f); признаком шестнадцатиричной системы является предшествующий
символ $ (символ с кодом ASCII 36): $D5, $FF, $5A.
г)Пробел (символ с кодом ASCII 32) и все управляющие символы с
кодами от 0 до 31, исключая некоторые из них: #10 - перевод строки,
#13 - возврат каретки.
д)Спецсимволы:
->Простые: +, -, *, /, =, ^, <, >, . , , , :, ;, #, $, @.
->Составные:
->Симметричные: ( ), [ ], { }, ' '.
->Комбинированные: (. .), (* *).
->Комбинированные без пробелов: <>, <=, >=, :=, ...
е)Зарезервированные слова:
1.And Exports Mod Shr
2.Array File Nil String
3.Asm For Not Then
4.Begin Function Object To
5.Case Goto Of Type
6.Const If Or Unit
7.Constructor Implementation Packed Until
8.Destructor In Procedure Uses
9.Div Inherited Program Var
10.Do Inline Record While
11.DownTo Interface Repeat With
12.Else Label Set XOr
13.End Library Shl
ж)Стандартные директивы:
Absolute, Assembler, Export, External, Far, Forward, Index,
Interrupt, Name, Near, Private, Public, Resident, Virtual.
2.ИДЕНТИФИКАТОРЫ
Идентификаторы - это имена констант, переменных, типов, меток,
процедур, функций, модулей, программ и полей в записях.
Примечания:
->Длина их произвольная, но различаются первые 63 символа.
->Большие (прописные) и маленькие (строковые) буквы не разли-
чаются.
->Идентификатор может состоять из букв, цифр и знака подчерки-
вания _ (символ с кодом ASCII 95).
->Идентификатор может начинаться с буквы или _.
->Идентификатор не может содержать пробелов (пробелы отделяют
идентификаторы друг от друга).
->Идентификатор метки может состоять из одних цифр в диапазоне
0..9999, причем начальные нули не являются значащими.
->В программе нельзя объявить два одинаковых идентификатора.
->Одноименные идентификаторы из разных блоков следует исполь-
зовать вместе с именем блока, объединенных через точку (как
составной идентификатор).
->Зарезервированные слова нельзя использовать как идентифика-
торы, поскольку они не переопределяются.
->Стандартные директивы можно переопределять, но не стоит.
Пример 1.
a, A, Beta, BETA, BeTa, a12, A_12, _alpfa, _, 0001, Dos.Exec.
Мы будем писать идентификаторы с большой (заглавной) буквы.
3.СТРУКТУРА ПРОГРАММЫ НА ПАСКАЛЕ
а)Заголовок программы, начинающийся со слова Program. Напри-
мер, Program First; Заголовок программы может отсутствовать, за ис-
ключением одного случая, когда имена идентификаторов требуется уто-
чнять с помощью имени программы.
б)Раздел описаний. Он может включать в себя несколько секций:
->Описание блоков: Uses <имя1>, <имя2>,... <имяN>; эта дире-
ктива включается всегда первой, если она необходима.
->Описание меток: Label <имя1>, <имя2>,...<имяN>;
->Описание констант: Const <имя1>, <имя2>,...<имяN>;
->Описание типов: Type <имя1>=<опис1>,...<имяN>=<описN>;
->Описание переменных: Var <имя1>=<тип1>,...<имяN>=<типN>;-
они нужны для хранения и передачи данных внутри программы.
->Описание процедур: Procedure P1; и
функций: Function F1:Byte;
->Подключение процедур и функций из внешних файлов:
{$I <имя файла>[.Pas]}
{$L <имя файла>[.Obj]}
{$O <имя файла>[.Ovl]}
Примечания:
->Порядок следования секций, кроме первой, произвольный.
->Каждая секция, кроме первой, может отсутствовать или быть
вставлена несколько раз.
в)Операторная (исполняемая) часть
Begin
<операторы>
End.
Примечания:
->Объем текста программы не более 64 кбайт (до ТР версии 6).
->Длина строки в программе не более 126 символов.
->Самая простая программа: Begin End.
4.КОММЕНТАРИИ
->{...текст. . . . }
->(*. . текст. . . . . . *)
->{. .текст. (*. . текст. . . *). .текст. . . } - вложенные.
5.ОПЕРАЦИИ, ДОПУСТИМЫЕ В ПАСКАЛЕ
В TP возможно использование следующих адресных, математических
и логических операций, которые упорядочены в порядке убывания прио-
ритета:
а)Унарные:
->Логическая: Not.
->Адресная: @.
->Разыменования: ^.
б)Мультипликативные:
->Математические: *, /, Div, Mod.
->Логические: And, Shl, Shr.
в)Аддитивные:
->Математические: +, -.
->Логические: Or, XOr.
г)Отношения: =, <>, <, >, <=, >=, In.
Логические операции выполняются поразрядно, по правилам:
Таблица 1
┌───┬───┬─────┬─────┬────┬─────┐
│ X │ Y │ Not │ And │ Or │ XOr │
├───┼───┼─────┼─────┼────┼─────┤
│ 1 │ - │ 0 │ - │ - │ - │
│ 0 │ - │ 1 │ - │ - │ - │
│ 0 │ 0 │ - │ 0 │ 0 │ 0 │
│ 0 │ 1 │ - │ 0 │ 1 │ 1 │
│ 1 │ 0 │ - │ 0 │ 1 │ 1 │
│ 1 │ 1 │ - │ 1 │ 1 │ 0 │
└───┴───┴─────┴─────┴────┴─────┘
6.ВЫРАЖЕНИЯ В ПАСКАЛЕ
Основными объектами, из которых состоит исполняемая часть про-
граммы, являются константы, переменные и обращения к функциям.
С помощью знаков операций и скобок мы составляем из них выра-
жения, которые фактически представляют собой правила получения но-
вых значений.
Пример 2.
->Y
->21
->(A+B)*C
->Sin(X)+A/B.
Примечание:
При составлении выражений, включающих операции деления или из-
влечения корня, необходимо следить за тем, чтобы не было деле-
ния на 0 или извлечения корня из отрицательного значения.
7.КОНСТАНТЫ
Константы - это средства языка, которые не изменяют своих зна-
чений в течение выполнения программы и используются для сокращения
программ особенно при их изменениях. Возможны следующие типы конс-
тант:
а)Числовые:
->Целые со знаком и без него: от -2147483648 до 2147483647.
->Шестнадцатиричные: от $00000000 до $FFFFFFFF (-1).
->Вещественные со знаком и без него: 0.0021, 1.21E-4, 2.54E5
от 2.9E-39 до 1.7E38 - для Real.
└─ масштабный множитель
б)Логические: False, True.
в)Символьные: любой символ ЭВМ, заключенный в апострофы 'а',
'Z','"', ';' или указанный через спецсимвол #: #97 - это бу-
ква 'a', #90 - 'Z', #13 - CR.
г)Строковые:
->Последовательность символов, кроме 13-ого, длиной до 255
штук, которые заключены в кавычки.
->Строка, составленная с использованием спецсимволов:
#83#121#109#98#111#108='Symbol',
^G^G^G^G - длинный звонок.
->Комбинированная строка: 'Внимание!'^G^G'Входите!'#10#13.
д)Конструкторы множеств: [].
е)Адресная: Nil.
Примечание:
Константы могут включать выражения с использованием ряда встро-
енных математических и стандартных функций: Abs, Hi, Chr, Odd,
Pred, Length, Lo, Low, Ptr, Succ, Round, SizeOf, Swap, Trunc,
Ord, High.
Пример 3.
Const Min=0;
Max=100;
Center=(Max-Min) Div 2;
Beta=Chr(225);
Mes='Out Of memory';
Ln10=2.302585092994045684;
Ln10R=1/Ln10;
NumChars=Ord('Z')-Ord('A')+1;
ASet=['А'..'Я'];
Pt=Nil;
8.ТИПЫ ДАННЫХ
Типы данных, используемых в ТР представлены на рис.1.
Типы─┬─>Простые────────────┬─>Порядковые───┬─>Целые
│ └─>Вещественные ├─>Логический
├─>Структурированные──┬─>Массивы ├─>Символьный
├─>Строки ├─>Записи ├─>Перечисляемый
├─>Процедурный ├─>Множества └─>Диапазон
├─>Указатели └─>Файлы
└─>Классы
Рис.1.
9.ПОРЯДКОВЫЕ (РЕГУЛЯРНЫЕ) ТИПЫ
Порядковые типы имеют конечное число значений и их можно рас-
ставить по порядку, т.е. упорядочить. Порядковые номера у целых чи-
сел совпадают с их значениями, а у других типов нумеруются от 0.
Простые типы - это упорядоченные множества значений.
9.1.Тип целый
В TP предусмотрено 5 целых типов, которые отличаются диапазо-
ном возможных значений, как представлено в табл.2.
Таблица 2
┌───────────┬─────────┬─────────────────────────┬────────────┐
│ Название │ Размер, │ Диапазон значений │ Знак │
│ типа │ байт │ │ │
├───────────┼─────────┼─────────────────────────┼────────────┤
│ Byte │ 1 │ 0..255 │ без знака │
│ ShortInt │ 1 │ -128..127 │ со знаком │
│ Integer │ 2 │ -32768..32767 │ со знаком │
│ Word │ 2 │ 0..65535 │ без знака │
│ LongInt │ 4 │ -2147483648..2147483647 │ со знаком │
└───────────┴─────────┴─────────────────────────┴────────────┘
Примечания:
->Объявляются переменные целых типов следующим образом:
Var I1,I2:Integer;
W:Word;
B:Byte;
Si:ShortInt;
Li:LongInt;
->Переменные целого типа занимают в памяти столько байт, ско-
лько указано в табл.2.
->Над целым типом допустимы все операции, перечисленные в 5.
Пример 4.
12 Or 22=30 0 0 0 0 1 1 0 0 │12 арифметическое поразрядное
0 0 0 1 0 1 1 0 │22 ИЛИ.
────────────────┼───
0 0 0 1 1 1 1 0 │30
12 XOr 22=26 0 0 0 0 1 1 0 0 │12 арифметическое поразрядное
0 0 0 1 0 1 1 0 │22 исключающее ИЛИ.
────────────────┼───
0 0 0 1 0 1 1 0 │26
12 And 22=4 0 0 0 0 1 1 0 0 │12 арифметическое поразрядное
0 0 0 1 0 1 1 0 │22 И.
────────────────┼───
0 0 0 0 0 1 0 0 │4
123/4=30.75 Деление простое (с остатком).
123 Div 4=30 Целое частное от деления целого числа на целое.
123 Mod 4=3 Остаток от деления целого числа на целое.
256 128 64 32 16 8 4 2 1
2 Shl 7=256 0 0 0 0 0 0 0 1 0 сдвиг влево (Left).
7<─6<─5<─4<─3<─2<─1<─┘
256 128 64 32 16 8 4 2 1
256 Shr 7=2 1 0 0 0 0 0 0 0 0 сдвиг вправо (Right)
└─>1─>2─>3─>4─>5─>6─>6
->Необходимо следить за значениями переменных из-за возможнос-
ти выхода их за допустимый диапазон.
Пример 5.
Var A,B,S:Byte;
Пусть: A:=250; B:=150; То чему будет равно S:=A+B; ?
Ответ: S=(250+150) Mod 256=144!
->Вложенность целых типов:
Byte -> Word,
ShortInt -> Integer -> LongInt.
->При использовании разных целых типов в одном операторе резу-
льтирующий тип будет минимально возможный:
ShortInt и Integer -> Integer,
Word и Integer -> LongInt.
->Встроенные процедуры и функции приведены в табл.3.
Таблица 3
┌───────────────┬──────────────┬─────────────────────────────┐
│ Наименование │Тип результата│ Действие │
├───────────────┼──────────────┼─────────────────────────────┤
│ Abs(X) │ X │ Возвращает модуль от числа X│
│ Chr(X) │ Char │ Возвращает символ с кодом X │
│ Sqr(X) │ X │ Квадрат числа X │
│ Random(X) │ Word │ Случайное число 0..X-1 │
│ Hi(X) │ Byte │ Возвращает старший байт от X│
│ Lo(X) │ Byte │ Возвращает младший байт от X│
│ Swap(X) │ Word │ Меняет местами байты │
│ Sqrt(X) │ Real │ Корень квадратный из X │
│ Odd(X) │ Boolean │ True, если X - нечетно │
│ Inc(X[,I]) │ X │ X+I, по умолчанию X+1 │
│ Dec(X[,I]) │ X │ X-I, по умолчанию X-1 │
└───────────────┴──────────────┴─────────────────────────────┘
Пример 6.
Swap($1200) -> 18
Lo($F00A) -> 10
Hi($F000) -> 240 (15*16)=240
Abs(-15) -> 15
Sqr(4) -> 16
Sqrt(9) -> 3.0
Chr(97) -> 'a'
Ord('a') -> 97
I:=15;: Dec(I,4);I -> 11, Dec(I);I -> 14, но Dec(I,-4);I -> 19.
I:=15;: Inc(I,4);I -> 19, Inc(I);I -> 16, но Inc(I,-4);I -> 11.
9.2.Тип логический (Boolean)
В TP предусмотрен один логический тип Boolean, который прини-
мает 2 значения: False и True (могут принимать значения 0,1).
Примечания:
->Объявляются переменные логического типа следующим образом:
Var Ll,A,B:Boolean;
->Переменная логического типа занимает в памяти 1 байт.
->Поскольку это переменная порядкового типа, то за False зак-
репляется 0, а за True - 1.
->Над логическими переменными можно производить операции отно-
шения из 5.г и логические операции из 5.а..5.в, причем ло-
гические операции выполняются в порядке убывания приоритета:
Not, And, Or, XOr, при этом выполняются все соглашения, ука-
занные в табл.1, если считать, что 0-False, а 1-True.
->Логическую переменную нельзя непосредственно ввести с клави-
атуры (ввод будет рассмотрен в примере 18 в 11.1).
->В ТР 7.0 для совместимости с другими языками и Windows вве-
дены дополнительные типы: ByteBool, WordBool, LongBool, ко-
торые могут принимать значение, отличные от Boolean.
9.3.Тип символьный (Char)
Примечания:
->Объявляются переменные символьного типа следующим образом:
Var C1,C2,Ic:Char;
->Переменная символьного типа занимает в памяти 1 байт и может
принимать любые значения кода ASCII.
->Над символьными переменными можно производить операции отно-
шения из 5.г. Сравнение при этом осуществляется по кодам.
Отметим, что коды больших букв меньше кодов маленьких букв,
т.е. A < a, поскольку Ord('A')=65, а Ord('a')=97 и т.д.
->К символьным переменными применимы функции: Chr(97) = 'a' и
UpCase('a') = 'A', но последняя только для латинских букв.
->Коды маленьких букв больше кодов больших букв.
9.4.Тип перечисляемый (перечислимый)
Примечания:
->Синтаксис этого типа данных:
<идентификатор типа>=(<элемент1>,<элемент2>,...,<элементN>);
->Объявляются переменные перечисляемого типа следующим образом:
-развернутая схема (через введение типа):
Type
Month=(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);
Var M1,M2:Month;
-короткая схема:
Var M1,M2:(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);
->Элементами типа могут быть только правильные идентификаторы.
->Переменная перечисляемого типа занимает 1 байт в памяти, ес-
ли их не больше 256 значений и 2 байта, если их менее 65536.
->Поскольку это переменные порядкового типа, то за первым эле-
ментом типа закрепляется номер 0, за вторым - 1 и т.д.
->Над переменными перечисляемого типа можно производить опера-
ции отношения из 5.г.
->Использование переменных перечисляемого типа позволяет:
-улучшить смысловую читаемость программ,
-более четко производить контроль значений,
-компактнее представить данные в памяти ЭВМ.
->Переменные этого типа нельзя непосредственно ввести с клави-
атуры и вывести на экран или принтер (смотри примеры 18,20).
->Один и тот же элемент не может входить в различные типы.
Пример 7.
0 1 2 3 <- порядковый номер элемента.
Type Color=(Red,Green,Blue,Black);
NewColor=(Red,Black,Yellow); Red и Black нельзя уже включать.
->Обязательным атрибутом этого типа являются круглые скобки в
начале и в конце перечисления элементов. Кавычки отсутствуют.
9.5.Тип диапазон (ограничительный тип)
Примечания:
->Тип диапазон является подтипом ранее рассмотренных типов а).
.г), но с меньшим числом возможных значений.
->Синтаксис этого типа данных:
<идентификатор типа>=<константа1>..<константа2>;
->Объявляются переменные типа диапазон следующим образом:
-развернутая схема (через введение типа):
Type Days=(Mo,Tu,We,Th,Fr,Sa,Sn);
WeekEnd=Sa..Sn; {диапазон на перечисляемом типе}
Digital=49..52; {диапазон на целом типе}
Cc='A'..'F'; {диапазон на символьном типе}
Var D:WeekEnd;
C:Cc; и т.д.
-короткая схема:
Var Dd:49..52;
C:'A'..'F';
->Переменная типа диапазон наследует все свойства базового ти-
па и занимает не менее 1 байта в памяти.
->Тип диапазон позволяет обеспечить лучший контроль проверки
выхода значений переменных за границы диапазона. Особенно
это удобно для переменных целого типа.
->Обязательным атрибутом типа диапазон являются две точки без
пробелов между левой и правой границами, причем левая грани-
ца должна быть меньше правой.
->Скобок не должно быть даже для перечисляемого типа, посколь-
ку они есть в базовом типе.
->При объявлении типа диапазон возможны простейшие математиче-
ские выражения, но они не должны начинаться со скобки.
Пример 8.
Type Interval=2*(2*3+2)..(5+123);