
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Строковый тип данных
- •Описание констант
- •Операция присваивания
- •Приоритет операций
- •Оператор присваивания
- •Совместимость и преобразование типов
- •Элементарный ввод-вывод
- •Лекция 5 Выражения
- •Математические операции
- •Логические операции
- •Операции отношения
- •Приоритет операций
- •Основные математические функции
- •Уменьшает значение числа X на y. Если число y не указано, то уменьшение происходит на 1. Циклы
- •Арифметические циклы
- •Итерационные циклы с предусловием
- •Итерационные циклы с постусловием
- •Операторы завершения цикла
- •Операторы ветвления и цикла Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Операторы ветвления и цикла
- •Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Лекция 7. Подпрограммы: процедуры и функции
- •Пример 27
- •Обмен данными
- •4.2. Множества
- •4.2.1. Объявление типа множества
- •4.2.2. Операции над множествами
- •4.2.3. Пример использования множества
- •Пример 33
- •4.3. Строки
- •4.3.1. Объявление типа String
- •4.3.2. Операции над строковыми переменными
- •4.3.3. Встроенные процедуры и функции обработки строк
- •Пример 34
- •4.1. Матрица
- •4.1.1. Ввод-вывод элементов матрицы
- •4.1.2. Определение индексов элементов матрицы
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Определение и особенности файлов
- •Доступ к компонентам файла
- •Текстовый файл
- •Чтение из текстового файла
- •Запись в текстовый файл
- •Файлы в Тубо Паскаль
- •Файловые процедуры и функции
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Графика Турбо Паскаля
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Статические и динамические памяти переменные
- •Объявление указателей
- •Выделение и освобождение динамической памяти
- •Операции с указателем
- •Пример 41
- •Связанные списки
- •Понятие бинарные деревья. Операции над бинарными деревьями
- •Применение бинарных деревьев
- •Сравнение рекурсии и итерации
- •Пример 51
- •Реализация объектно-ориентированного подхода в турбо-паскале
- •Алгоритмическая и объектная декомпозиция
- •Объектный тип в Турбо-Паскале
- •Способы наследования и переопределения
- •Виртуальные методы
- •Модуль c r t
- •Модуль g r a p h
Статические и динамические памяти переменные
Для каждой переменной, тип которой описан в секции Var, до выполнения программы выделяется область памяти. Размер этой области в процессе выполнения программы не меняется и кроме того, выделенную память нельзя использовать в других целях до конца работы программы. Такие переменные и связанные с ними типы данных называются статическими. В Турбо-Паскале допускается использовать динамические переменные. Для них память выделяется в процессе выполнения программы и может быть освобождена до окончания ее работы, благодаря использованию специального способа доступа к области памяти. Для статической переменной этот доступ осуществляется в программе через ее уникальное имя, которому после компиляции ставится в соответствие адрес. Для динамической переменной обращение к участку динамической памяти осуществляется с помощью специального указателя, содержащего адрес этой области. Указатель получает значение адреса только после выделения области памяти для соответствующей ему переменной с помощью специальной процедуры. Переменная, размещаемая динамически, не объявляется в разделе Var, она определяется своим указателем.
Объявление указателей
Каждый указатель представляет собой переменную и должен быть объявлен в секции Var. Компилятор выделит под указатель четыре байта в статической памяти. Указатель предназначен для хранения адреса размещения динамической переменной, с которой он связан. Поскольку динамическая переменная определена в программе только своим указателем, то обычно при объявлении указателя задается тип соответствующей динамической переменной. Однако указатель может быть нетипизированным. Такие указатели удобно использовать для размещения динамических данных, структура которых меняется в процессе выполнения программы. Для объявления типизированных указателей используется значок ^, размещаемый перед соответствующим типом, например:
var IStat1: integer; IStat2: real; IDin1: ^integer; IDin2,IDin3: ^real;
Здесь объявлены две статические переменные IStat1, IStat2 и три указателя: IDin1, IDin2, IDin3. Указатель IDin1 соответствует динамической переменной целого типа, которая обозначается в программе именем своего указателя со значком ^, т.е. IDin1^. Указатели IDin2, IDin3 определяют соответственно динамические переменные IDin2^ и IDin3^ вещественного типа. Последовательность из значка ^ и идентификатора типа динамической переменной называется ссылочным типом, который обычно объявляется заранее в секции Type, например:
type ZapDin = ^Zap; {ссылочный тип} Zap = record Ukaz: ZapDin; Info: integer; end;
Здесь ссылочный тип ZapDin объявляется с использование типа Zap, который предварительно в программе объявлен не был. Такое использование идентификатора до его определения является исключением в Паскале и разрешается только для указателей, содержащих ссылку на еще не объявленный тип данных.
Выделение и освобождение динамической памяти
Создание и уничтожение динамических переменных реализуется стандартными процедурами New и Dispose. Для выделения области памяти под значение динамической переменной используется процедура New. Вызов процедуры:
New( < имя_указателя >);
Например, выполнение процедуры
New( IDin1);
создает новую динамическую переменную IDin1^, указатель IDin1 содержит адрес этой переменной. Размер выделяемого участка памяти определяется типом указателя. В данном случае он равен двум байтам (тип Integer). Теперь возможно присвоить новой динамической переменной значение:
IDin1^ := 123;
Для освобождения памяти, выделенной под динамическую переменную, используется процедура Dispose. Вызов процедуры:
Dispose( < имя_указателя >);
Например, в результате выполнения процедуры
Dispose( IDin1 );
память, связанная с указателем IDin1, будет отмечена как свободная. Соответствующая динамическая переменная IDin1^ уничтожается.