
- •Министерство образования российской федерации
- •Содержание
- •Алгоритмизация вычислительных процессов.
- •Основные определения и понятия.
- •Средства изображения алгоритмов.
- •Базовые канонические структуры алгоритмов.
- •1)Следование
- •2) Развилка
- •3)Повторение
- •Вопросы к главе 1.
- •Введение в Турбо Паскаль.
- •Общая характеристика языка Паскаль.
- •Основные понятия языка Турбо Паскаль.
- •Алфавит языка.
- •Элементарные конструкции.
- •Типы данных.
- •Операторы языка Паскаль.
- •Оператор присваивания.
- •Оператор перехода. Пустой оператор. Составной оператор.
- •Условный оператор.
- •Оператор выбора.
- •Операторы цикла.
- •Var X: real; {аргумент }
- •If not fl then Writeln(‘ нет чисел на 3‘);
- •Вопросы к главе 2.
- •Структурированные типы данных.
- •Свойства множеств.
- •Операции над множествами.
- •If fl then writeln('идентификатор')
- •Описание записи (record).
- •Оператор присоединения.
- •Запись с вариантами.
- •Вопросы к главе 3.
- •Использование подпрограмм в Турбо Паскале.
- •Структура программы на языке Паскаль.
- •Описание и вызов процедур.
- •Описание функции.
- •Формальные и фактические параметры.
- •Параметры-значения.
- •Параметры-переменные.
- •Var r:tvect; {результат - вектор}
- •Var k:byte); {длина полученного вектора}
- •Параметры-константы.
- •Параметры-процедуры и параметры-функции.
- •Область действия имен.
- •Процедуры и функции без параметров.
- •Рекурсивные процедуры и функции.
- •Предварительно-определенные процедуры.
- •Модули.
- •Вопросы к главе 4.
- •Стандартные процедуры и функции.
- •Математические функции.
- •Функции округления и преобразования типов.
- •Функции порядкового типа.
- •Процедуры порядкового типа.
- •Строковые функции.
- •Строковые процедуры.
- •Прочие процедуры и функции.
- •Процедуры ввода данных.
- •Процедуры вывода данных.
- •Особенности вывода вещественных значений.
- •Вопросы к главе 5.
- •Работа с файлами.
- •Общие сведения о файлах.
- •Процедуры и функции для работы с файлами.
- •Особенности обработки типизированных файлов.
- •Особенности обработки текстовых файлов.
- •Файлы без типа.
- •Проектирование программ по структурам данных
- •Работа с файлами при обработке экономической информации
- •Постановка задачи.
- •Проектирование программы.
- •Кодирование программы.
- •Вопросы к главе 6.
- •Динамическая память.
- •Указатель.
- •Стандартные процедуры размещения и освобождения динамической памяти.
- •Стандартные функции обработки динамической памяти.
- •Примеры и задачи.
- •Работа с динамическими массивами.
- •Организация списков.
- •Задачи включения элемента в линейный однонаправленный список без головного элемента.
- •Формирование пустого списка.
- •Формирование очередного элемента списка.
- •Подсчет числа элементов списка.
- •Вставка элемента в начало списка.
- •Включение элемента в конец списка.
- •Включение в середину (после I-ого элемента).
- •Задачи на удаление элементов из линейного однонаправленного списка без головного элемента.
- •Удаление элемента из начала списка.
- •Удаление элемента из конца списка.
- •Удаление элемента из середины списка (I-ого элемента).
- •Удаление всего списка с освобождением памяти.
- •Задачи на замену элементов в линейном однонаправленном списке без головного элемента.
- •Стеки, деки, очереди.
- •Использование рекурсии при работе со списками.
- •Бинарные деревья.
- •Действия с бинарными деревьями.
- •Построение бинарного дерева.
- •Решение задач работы с бинарным деревом.
- •Вопросы к главе 7.
- •Основные принципы структурного программирования.
- •Понятие жизненного цикла программного продукта
- •Основные принципы структурной методологии.
- •Структурное кодирование.
- •Модульное программирование.
- •Вопросы к главе 8.
- •Список литературы
Стандартные процедуры размещения и освобождения динамической памяти.
При выполнении программы наступает момент, когда необходимо использовать динамическую память, т.е. выделить её в нужных видах, разместить там какие-то данные, поработать с ними, а после того, как в данных отпадет необходимость - освободить выделенную память.
Динамическая память может быть выделена двумя способами:
1. С помощью стандартной процедуры New:
New (P);
где р- переменная типа «типизированный указатель».
Эта процедура создает новую динамическую переменную (выделяет под нее участок памяти) и устанавливает на нее указатель P(вPзаписывается адрес выделенного участка памяти). Размер и структура выделяемого участка памяти задается размером памяти для того типа данных, с которым связан указательP. Доступ к значению созданной переменной можно получить с помощьюP^.
2. С помощью стандартной процедуры GetMem.
GetMem (P,size);
где P- переменная типа «указатель» требуемого типа.
size- целочисленное выражение размера запрашиваемой памяти в байтах.
Эта процедура создает новую динамическую переменную требуемого размера и свойства, а также помещает адрес этой созданной переменной в переменную Р типа «указатель». Доступ к значению созданной переменной можно получить с помощьюP^.
Например:
type
Rec =record
Field1:string[30];
Field2:integer;
end;
ptr_rec = ^ rec;
var
p : ptr_rec;
begin
GetMem(Р, SizeOf (Rec)); { Выделение памяти, адрес выделенного участка фиксируется в Р; размер этой памяти в байтах определяет и возвращает стандартная функция SizeOf , примененная к описанному типу данных; однако, зная размеры внутреннего представления используемых полей, можно было бы подсчитать размер памяти «вручную» и записать в виде константы вместо SizeOf (Rec) }
...
{использование памяти}
...
FreeMem(p, SizeOf(Rec)); {освобождение уже ненужной памяти}
...
Динамическая память может быть освобождена четырьмя способами.
Автоматически по завершении всей программы.
С помощью стандартной процедуры Dispose.
Dispose (P);
где P- переменная типа «указатель» (типизированный).
В результате работы процедуры Dispose(P)участок памяти, связанный с указателемP, помечается как свободный для возможных дальнейших размещений. При этом физической чистки указателяPи связанной с ними памяти нe происходит, поэтому, даже удалив этот экземпляр записи, можно все же получить значения ее полей, однакоиспользовать это обстоятельство не рекомендуется.
Ввиду различия в способах реализации процедуру Dispose не следует использовать совместно с процедурами Mark и Release.
С помощью стандартной процедуры FRееМеm.
FreeMem (P, size);
где P- переменная типа «указатель»,
size- целочисленное выражение размера памяти в байтах для освобождения.
Эта процедура помечает память размером, равным значению выражения size, связанную с указателемP, как свободную (см. пример дляGetMem).
4. С помощью стандартных процедур МаrkиRelease.
Mark (P);
Release (P);
где P - переменная типа «указатель»;
Mark- запоминает состояние динамической области в переменной-указателер;
Release- освобождает всю динамическую память, которая выделена процедурамиNewилиGetMemпосле запоминания текущего значения указателярпроцедуройMark.
Обращения к Mark иReleaseнельзя чередовать с обращениями кDisposeиFRееМеmввиду различий в их реализации.
Например:
var
p:pointer;
p1, p2, p3:^integer;
begin
New(p1);
p1^ := 10;
Mark(p); {пометка динамической области}
New(p2);
p2^ := 25;
New(p3);
p3^ := p2^ + p1^;
Writeln ( p3^);
Release(p); {память, связанная с p2^ и p3^, освобождена, а p1^ может использоваться}
end.