- •Алгоритмы.
- •Условие
- •Типы данных.
- •Целые числа.
- •Вещественный тип данных.
- •Символьные и строковые типы данных.
- •Булевские данные.
- •Указатели.
- •Идентификаторы.
- •Операторы.
- •Операторы присваивания.
- •Арифметические операторы.
- •Побитовые операторы.
- •Операторы отношений.
- •Логические операторы.
- •Адресные операторы.
- •Операторы над множествами.
- •Строковые операторы.
- •Создание программ в среде turbo pascal Структура программ.
- •1: WriteLn(' I меньше 10 ');
- •Тип константы компилятор определяет по типу значения. Описание типов используется при создании типов данных, отличных от базовых.
- •Обзор управляющих структур языка pascal
- •Интегрированная среда turbo pascal Назначение и состав среды.
- •Строка статуса
- •Справочник.
- •Работа с блоками текста
- •Компиляция и выполнение
- •Выполнение по шагам и трассировка
- •Управляющие структуры языка Паскаль. Условные операторы.
- •Пустой оператор
- •Условный оператор
- •If Flag then Writeln(‘Истинно’)
- •If not Flag then Writeln(‘Ложно’)
- •Оператор выбора
- •Операторы цикла Оператор цикла с предусловием (while)
- •Оператор цикла с постусловием (repeat…until)
- •Оператор цикла с параметром (for...Do)
- •I : Integer; { описание параметров циклов}
- •Процедуры и функции.
- •Структура процедуры и функции.
- •Локальные и глобальные элементы.
- •I : Integer; {I - глобальная}
- •I : Integer; {I - локальная }
- •Параметры.
- •I : Integer; {I - локальная }
- •Var { описание переменных }
- •Var { описание внутренних переменных}
- •Структурированные типы данных языка паскаль Перечисляемый тип.
- •Структурированные типы
- •Массивы
- •If eq then Write(“Массивы одинаковы”);
- •Множества
- •Совместимость и преобразование типов.
- •Символы и строки Символы:
- •Строки.
- •Строка- это массив символов.
- •Доступ к файлам.
- •Логические устройства
- •Открытие файла
- •Процедуры и функции для работы с файлами.
- •Текстовые файлы.
- •Типизированные файлы.
- •Нетипизированные файлы.
- •Модуль graph.
- •Драйверы.
- •Координатная система.
- •Текущий указатель.
- •Фигуры и стили.
- •Окна и битовые образы.
- •Обработка ошибок.
- •Пример простой программы:
- •Справочник по модулю Graph
- •Модуль crt
- •Ввод данных с клавиатуры. Более подробно о cтандартных операторах ввода.
- •Функции crt.
- •Текстовый вывод на экран.
- •Некоторые процедуры модуля crt.
- •Программирование звукового генератора.
- •Указатели.
- •Динамические переменные.
- •Проблема ограничения памяти.
Указатели.
Все рассмотренные типы данных содержат непосредственно данные. Указатель, содержащий другой тип информации - адрес. Указатель - это переменная, содержащая адрес памяти, где какие либо данные помещаются. Другими словами, он указывает на данные, как адресная книга или оглавление.
Обычно указатель указывает на данные определенного типа. Расмотрим следующий пример:
type
Buffer = string[255];
BufPtr = ^Buffer;
var
Buf1: Buffer;
Buf2: BufPtr;
Тип данных Buffer определен, как строковая переменная размером 255 байт, в то же время BufPtr - указатель на Buffer. Переменная Buf1 имеет тип Buffer и занимает (255+1) байт памяти. Переменная Buf2 имеет тип BufPtr, это 32-битовый адрес и занимает 4 байта памяти.
Куда указывает Buf2? В данный момент никуда. Прежде чем использовать BufPtr, необходимо зарезервировать (распределить) память и запомнить ее адрес в Buf2. Вы делаете это, используя процедуру New:
New(Buf2);
Поскольку Buf2 указывает на тип Buffer, то этот оператор выделит в памяти 256-байтовый буфер и его адрес поместит в Buf2.
Как использовать Buf2 и данные, на которые он указывает? С помощью оператора ^. Например, необходимо поместить строку и в Buf1 и в буфер, на который указывает Buf2:
Buf1 : = 'Эта строка помещается в Buf1';
Buf2^: = 'Эта строка помещается по указателю Buf2';
Отметим различие между Buf2 и Buf2^:
Buf2 означает 4-байтовую переменную указателя;
Buf2^ -256-байтовую строковую переменую, адрес которой в Buf2.
Теперь, как освободить память, на которую указывает Buf2? Используя процедуру Dispose. Эта процедура освобождает память. После того, как при помощи Dispose освобождена память, следует присвоить указателю значение nil, т.е. указатель ни на что не указывает:
Dispose(Buf2);
Buf2 := nil;
Заметим, что значение nil присваивается указателю Buf2, а не Buf2^.
Идентификаторы.
До сих пор в примерах содержались идентификаторы переменных без описания ограничений и правил их образования. Рассмотрим их более подробно.
Имена, которые даются константам, типам данных, переменным, функциям, известны как идентификаторы.
Turbo Pascal имеет несколько правил образования идентификаторов. Краткое описание правил:
- Все идентификаторы начинаются с буквы или знака подчеркивания (a..z, A..Z, _). Последующими символами могут быть буква, знак подчеркивания, цифра (0-9). Другие символы недопустимы.
- Идентификаторы рассматриваются без учета регистров (прописные и строчные буквы не различаются). Это значит, что a..z тождественно A..Z. Например index тоже самое что и Index, и INDEX.
- Идентификаторы могут иметь различную длину, но используются только первые 63 символа.
Операторы.
Итак, данные получены программой и присвоены переменым. Программе нужно их обработать и получить результат, используя операторы.
Существует восемь типов операторов: присваивания, арифметические, побитовые, отношений, логические, над множествами, адресные и над строками.
Большинство операторов в Паскале бинарные, имеют два операнда; унарные операторы имеют один операнд.
Бинарные операторы имеют обычно алгебраическую форму, например а+b. Унарный оператор предшествует своему операнду, например -b.
В сложных выражениях порядок выполнения операций определяется правилами приоритета ( см. таблицу 2.3)
Таблица 2.3 Приоритет операторов.
Операторы |
Приоритет |
Категория |
@, not |
Первый (высший) |
Унарные |
*, /, div, mod, and, shl, shr |
Второй |
Мультипликативные |
+, -, or, xor |
Третий |
Аддитивные |
=, <>, <, >, <=, >=, in |
Четвертый (низший) |
Отношения |
Операции равного приоритета выполняются слева направо, хотя компилятор может их перегруппировать для генерации оптимального кода.
Выражения, заключенные в скобки, вычисляются в первую очередь, независимо от предшествующих и последующих операторов.