
- •Лекция 1. Основы языков программирования.
- •Лекция 2. Способы записи алгоритмов.
- •Лекция 3. Знакомство с языком Паскаль.
- •Лекция 4. Структура программы на языке Паскаль.
- •Лекция 5. Стандартные типы данных.
- •5.1 Целые типы
- •5.2 Вещественные типы
- •5.3 Символьный тип.
- •5.4 Ограничительные типы.
- •5.5 Перечислимые типы.
- •Л.6. Операторы языка Паскаль Ввод исходных данных.
- •Расчет.
- •Стандартные функции Турбо Паскаля
- •Стандартные процедуры
- •Константы
- •Вывод результатов
- •Лекция 7. Операторы условий if, case
- •7.1 Оператор безусловного перехода
- •7.2 Условный оператор
- •7.3 Оператор варианта
- •Лекция 8. Операторы цикла for, while, repeat
- •8.1 Оператор цикла с предусловием.
- •8.2 Оператор цикла с постусловием.
- •8.3 Оператор цикла с параметром.
- •Лекция 9. Одномерные и двумерные массивы.
- •Работа с массивами
- •Инициализация элементов массива
- •Лекция 10. Процедуры и функции в Паскаль.
- •Лекция 11. Параметры в процедурах.
- •11.1 Механизм параметров.
- •11.2. Параметры - значения.
- •11.3. Параметры - переменные.
- •11.4. Безтиповые параметры.
- •Лекция 12. Типы данных, определяемые пользователем. Записи.
- •Лекция 13. Работа с файлами. Обработка ошибок в Паскаль.
- •13.1 Файловые типы
- •13.2 Операции ввода-вывода Write, Read
- •13.3. Перемещение по файлу.
- •13.4 Обработка ошибок ввода - вывода
- •13.5 Текстовые файлы
- •13.6 Файлы без типа.
- •Лекция 14. Модули и внешние файлы в Паскаль.
- •15.1. Компиляция и использование модулей
- •15.2. Компиляция и поиск модулей.
- •15.3. Стандартные модули
- •Лекция 15. Динамические структуры данных.
- •15.1 Ссылочные типы и указатели.
- •15.2 Статические переменные.
- •15.3. Создание и удаление динамических переменных.
- •15.4. Установка размеров динамической памяти.
- •Лекция.16. Графические возможности языка Паскаль.
- •Лекция17. Практическое применение языка Паскаль в решении технологических и экологических задач
15.3. Стандартные модули
Turbo Pascal имеет восемь стандартных модулей, в которых, собственно, и содержатся все упоминаемые системные процедуры функции. Имена этих модулей следующие: SYSTEM, DOS, CRT, PRINTER, OVERLAY, GRAPH, TURBO3, GRAPH3.
В модуль SYSTEM входят все процедуры и функции авторской версии языка Pascal, подпрограммы стандартного Паскаля, а так же много дополнительных подпрограмм общего характера, в частности, ориентированные на конкретную операционную среду.
Модуль DOS содержит средства доступа к операционной системе и по существу является программным представлением системного интерфейса MS-DOS.
Модуль CRT обеспечивает практически полный спектр возможностей для доступа к экрану дисплея в текстовом режиме. кроме того, в данный модуль включены средства чтения информации с клавиатуры (включая расширенные коды клавиш) и простейшего управления звуком.
Модуль Printer содержит единственный интерфейсный элемент - переменную Lst стандартного типа text, системно связанную с логическим устройством PRN (то есть с печатающим устройством, если оно имеется в конфигурации). Использование этой переменной в стандартных процедурах Write и Writeln приводит к выводу информации на печать.
Модуль Overlay предоставляет средства для организации так называемых оверлейных программ, позволяющих обеспечить достаточно эффективное выполнение больших программных систем, размер которых превышает объем доступной оперативной памяти.
Модуль Graph объединяет многочисленные программные средства управления графическим режимом работы дисплея. Данный модуль обеспечивает использование всех возможностей наиболее распространенных типов дисплейных адаптеров - CGA, EGA, VGA, Hercules и т. п. как для монохромных, так и для цветных дисплеев, и позволяет создавать разнообразные и эффективные графические программы.
Модули Turbo3 и Graph3 обеспечивают совместимость с данной версией системы Turbo Pascal тех программ, которые были разработаны для ранней версии 3.0
Лекция 15. Динамические структуры данных.
15.1 Ссылочные типы и указатели.
Ссылочные или указательные типы занимают промежуточное положение между скалярными и составными типами: с одной стороны, значения ссылочных типов являются атомарными (неразделимыми), с другой стороны, эти типы определяются через другие (в том числе и ссылочные) типы.
Любой ссылочный тип определяет множество значений, которые являются указателями на значение некоторого определенного типа.
Type
P = ^integer;
Var
P1, p2 : p;
OneMan : ^Person;
Значение переменной OneMan ссылается (указывает) на некоторое значение типа Person.
Описание ссылочных типов - единственное исключение из общего правила, согласно которому все идентификаторы должны быть описаны перед использованием.
Type
PtrType = ^BaseType;
BaseType = record
X, y :real;
End;
Рисунок 15.1 - Ссылочный тип
Реально значения ссылочных типов содержат адреса расположения в памяти конкретных значений базового типа. Чтобы присвоить переменной ссылочного типа некоторое значение, необходимо воспользоваться унарной операцией взятия указателя, которая строится из знака этой операции - символа '@' и одного операнда - переменной любого типа.
Var
I : integer;
То применение этой операции к переменной i : @i дает в качестве результата значение типа 'указатель на целое':
P1 :=@i;
Правомочен, т. к. в обеих его частях стоят конструкции одного и того же типа. В результате такого присваивания p1 получит в качестве своего нового значения указатель на переменную i (или адрес переменной i).
Операция взятия указателя допустима для любых переменных в том числе для элементов массива, полей записей и т. д.
Над значениями ссылочных типов допускаются две операции сравнения на равенство и неравенство; эти операции проверяют, ссылаются ли два указателя на одно и то же место в памяти.
S := p1 = p2;
If p1<>nil then …
Nil - служебное слово, обозначает, что указатель ссылается на место в адресном пространстве, в котором заведомо не может быть размещена никакая переменная.
P1 := @i;
Эта схема показывает, что для доступа к переменной i имеются две возможности: использовать для доступа идентификатор i, вторая - воспользоваться адресом этой переменной, который содержится в p1. Первый путь очевиден:
I: = i+2;
Для реализации второго, косвенного доступа к переменной через указатель (ссылку) на ней используется конструкция, называемая разыменованием. Общее правило: для того, чтобы по указателю на переменную получить доступ к самой этой переменной, необходимо после указателя поставить знак '^'.
P1^ - переменная, на которую ссылается p1.
P1^ :=P1^+2;
Разыменование считается не корректным, если ссылочная переменная имеет значение nil. В этом случае не существует переменной, на которую ссылается указатель.
P1:=nil
P1^ :=2 - является недопустимым.
До сих пор мы имели дело с переменными, которые размещаются в памяти согласно вполне определенным правилам. Для локальных переменных, описанных подпрограмме, память отводится при вызове подпрограммы: при выходе из нее эта память освобождается, а сами переменные прекращают существование. Глобальным переменным программы, память отводится в начале ее выполнения : эти переменные существуют в течение всего периода работы программы. Распределение памяти во всех этих случаях производится полностью автоматически и подчинено стековой дисциплине.