
- •4. Составной Оператор. Понятия функции и процедуры. Пользовательский интерфейс, Структура программ на языке Паскаль
- •4.1. Составной оператор, понятия функции и процедуры в языке Паскаль
- •4.2. Понятие интерфейса пользователя. Средства создания текстового пользовательского интерфейса в Паскале
- •4.3. Реализация базовых функций интерфейса по вводу и выводу данных в Паскале
- •4.4. Использование библиотеки crt для создания текстового пользовательского интерфейса
- •Рассмотрим выполнение отдельных функций по работе с текстовым экраном при помощи подпрограмм из библиотеки crt.
- •Процедуры работы со звуком.
- •Процедура ожидания.
- •4.5. Общая структура программы на Паскале. Комментарии
- •4.6. Содержание подразделов в разделе описаний
- •4.7. Простейшие программы на языке Паскаль для обработки данных простых типов. Основная задача программы и ее интерфейс
- •III. Тело алгоритма.
- •5. ОРганизация ветвлений
- •5.1. Полный и сокращенный оператор if
- •If условие then оператор 1 else оператор 2;
- •If условие then оператор 1;
- •5.2. Полный и сокращенный оператор case
- •5.3. Оператор безусловного перехода goto. Пример программы с использованием ветвления
- •Календарный план семинаров (18 семинаров - 36 час)
- •Указатели в Паскале. Динамическая память на языке Паскаль
- •Ссылочные типы. Указатели в Паскале
- •Операции с указателями
- •Процедуры и функции для работы с указателями и адресами в Паскале
Ссылочные типы. Указатели в Паскале
Указатель – это переменная, которая содержит адрес другой переменной (байта памяти). В ТР имеется два вида указателей: указатель на объект некоторого типа (типизированный) и указатель, не связанный с типом. Описание указателей.
Для объявления типизированных указателей используется значок ^, который помещается перед соответствующим типом:
Type T = ^T1; Var A :T; где: T – имя типа; T 1 - базовый тип (любой в т.ч. указатель); ^ - указатель. Примеры: Var a :byte; {выделение памяти для переменной где хранится ее значение} a ;^byte; {выделение памяти для переменной где хранится ее адрес}
Var p1 :^integer; p2, p3 :^real;
Для объявления переменных не связывая их, с каким либо типом данных можно использовать указатель без типа (pointer). Var p :pointer; где: pointer - не типизированный указатель, который занимает в памяти 4 байт (2-байта сегмент, 2байта смещение.).
Операции с указателями
Для указателей допустимы операции сравнения и присваивания.
Присваивание. Указателю можно присвоить содержимое другого указателя того же самого типа или константу NIL – пустой, или адрес объекта с помощью функции ADDR или оператора @. Пример: P1 := PP; P2 := NIL; P3 := Addr(X); P4 := @X;
Процедуры и функции для работы с указателями и адресами в Паскале
Функции:
ADDR(X) – результат POINTER, в котором содержится адрес аргумента. (X –имя любой переменной, процедуры или функции). OFS(X):WORD – возвращает значение смещения адреса объекта X. SEG(X):WORD – возвращает значение сегмента адреса объекта X. CSEG(X):WORD – возвращает текущее значение регистра Cs. DSEG(X):WORD – возвращает текущее значение регистра Ds. SSEG(X):WORD – возвращает текущее значение регистра Ss. SPRT(X):WORD - возвращает текущее значение регистра Sp. PRT(SEG,OFS) – преобразует отдельно заданные значение сегмента и смещения к типу указателя. MAXAVAIL:LONGINT - возвращает размер наибольшего непрерывного участка кучи. MEMXAVAIL:LONGINT - возвращает размер общего свободного пространства кучи.
Процедуры: DISPOSE(TP:POINTER) – уничтожает динамическую переменную и возвращает в кучу фрагмент динамической памяти, который был зарезервирован указателем. NEW(TP:POINTER) – резервирует фрагмент кучи для размещения переменной. GETMEM(P:POINTER; ZIZE:WORD) –выделяет из кучи блок заданного размера и адрес его начала присваивает указателю. FREEMEM(P:POINTER; ZIZE:WORD) – освобождает блок заданного размера.. MARK(P:POINTER) – запоминает текущую вершину кучи (адрес начала свободного участка). RELEASE(P:POINTER) – освобождает участок кучи от адреса с P до конца.
Пример 19.1. Сгенерировать случайным образом массив случайных чисел. Разместить массив в динамической памяти, найти сумму элементов и удалить его с памяти.
Текст программы
, которая необходима для решения задачи и реальной цели (выходной информации, результата задачи), которая должна быть достигнута
Ввод чисел исходной информации
(аргумента задачи Е)
Вывод выходной информации
(результата задачи R),
Операторы, выполняемые
алгоритмом решения
задачи А(Е) = R
(тело алгоритма А)
Ввод исходных чисел Е = a,b,c
Вывод результата задачи R =S
Операторы алгоритма R = А(Е),
S = (a+b+c)/3
_ R
(тело алгоритма А)