
- •Основные понятия языка программирования паскаль
- •Структурное программирование
- •Основные символы языка
- •Элементы языка
- •Интегрированная среда turbo pascal
- •Структура программы в turbo pascal
- •Определение типов
- •Операторы в программе
- •Операторные скобки
- •Операторы ввода
- •Оператор присваивания
- •Оператор условного перехода
- •Оперетор безусловного перехода
- •Организация циклов
- •Использование операторов условного и безусловного перехода
- •Цикл с параметром
- •Цикл с предусловием - цикл while
- •Цикл с постусловием - цикл repeat
- •Оператор выбора варианта
- •Концепция типов данных
- •Стандартные простые типы Целый тип
- •Операции над данными целого типа:
- •Действительный тип
- •Операции над данными действительного типа:
- •Логический тип
- •Символьный тип
- •Символьные строковые константы
- •Нестандартные простые типы (определяемые пользователем)
- •Перечисляемый тип
- •Ограниченный тип (диапазон, интервал)
- •Процедуры и функции
- •Описание процедур
- •Стандартные процедуры
- •Описание функций
- •Стандартные функции
- •Итерация и рекурсия
- •Побочный эффект рекурсии
- •Предварительное описание (ссылки вперед)
- •Регулярные типы Одномерный массив
- •Алгоритмы сортировки массивов
- •1. Метод пузырька (метод обменной сортировки с выбором)
- •Многомерные массивы
- •Упакованные массивы
- •Множественные типы
- •Свойства множеств
- •Операции над множествами
- •Комбинированные типы Описание записей и действия с ними
- •Оператор присоединения.
- •Записи с вариантами
- •Типизированная константа
- •Простая типизированная константа
- •Структурированная (сложная) типизированная константа Типизированная константа массива
- •Типизированная константа записи
- •Типизированная константа множества.
- •Преобразование типов
- •Неявные преобразования типов
- •Использование стандартных функций для преобразования
- •Явные преобразования типов
- •Эквивалентность типов
- •Совместимость типов
- •Файловые типы
- •Определение файлового типа
- •Структура файла
- •Имя файла
- •Описание файлового типа
- •Файловая переменная
- •Операции над файлами
- •Типизированные файлы
- •Ссылочные типы (указатели) Статические и динамические переменные
- •Ссылочные типы (указатели)
- •Удаление узла из стека:
- •Человек
- •Человек
- •Вставка
- •Динамические переменные
- •Процедуры создания и удаления динамических переменных
- •Динамические списковые структуры
- •Однонаправленные списки
- •Двунаправленные списки
- •Очереди
- •Деревья
- •Модульная система turbo pascal
- •Uses mod 1, mod 2, mod 3; (подключение трех модулей) Общая структура модуля
- •Использование идентификаторов модуля
- •Использование модуля в программе
- •Компиляция модулей
- •Системный файл turbo.Tpl
- •Стандартные модули
- •Модуль crt
- •Модуль dos
- •Модуль printer
- •Модуль overlay
- •Модуль string
- •Процедуры модуля graph
- •Графические процедуры
- •Координаты. Окна. Страницы
- •Линии и точки
- •Многоугольники
- •Дуги,окружности, эллипсы
Новый Человек
Вставка
Связный список после вставки
нового элемента.
Удалить запись, следующую за текущей (т.е. той на которую указывает Pt), можно в одно действие:
Pt^.Next: = Pt^.Next^.Next;
Часто для обработки списков полезно пользоваться двумя указателями – «буксиром» и «прицепом», следующими друг за другом. В случае удаления один из указателей, скажем P1, указывает на элемент, предшествующий удаляемому, а другой, скажем P2 – на сам удаляемый элемент. Тогда удаление можно произвести одним простым предложением:
P1^.Next: = P2^.Next;
Следует, однако, предупредить вас, что при удалении таким образом в ряде случаев не рационально используется машинная память.
Стандартная процедура Паскаля по удалению элемента – Dispose (Q) – уничтожает динамическую переменную Q^ и делает идентифицирующее значение Q неопределенным. Обращение к этой процедуре, в случае, когда Q = nil и неопределена, приводит к ошибке. Значение Q должно быть создано с помощью процедуры New.
Динамические переменные
Использование только статических объектов при программировании может вызывать определенные трудности, так как не всегда удается получить эффективную программу, а эффективность при решении многих задач является главным фактором. Иногда до работы программы мы не знаем не только размера значения объекта, но и даже того, будет ли он существовать или нет. Такого рода программные объекты, которые возникают при выполнении программы или размер которых изменяется во время выполнения программы, называют динамическими. Язык Паскаль предусматривает возможность составления эффективных программ с использованием динамических объектов. При этом динамический объект не может иметь собственного имени, так как все идентификаторы должны быть описаны в соответствующих разделах программы. Поэтому в Паскале принято не именовать, а обозначать динамический объект и введен специальный ссылочный тип. Значением этого типа является ссылка на программный объект, по которой осуществляется прямой доступ к этому объекту.
Динамический объект обозначается присоединением символа к имени переменной-ссылки на этот объект:
type T = integer;{тип динамического объекта}
pointer = ^T;{имя ссылочного типа - pointer}
Переменная-ссылка должна быть описана в разделе var:
var p:pointer;
Процедуры создания и удаления динамических переменных
Значениями ссылочного типа являются значения адресов единиц оперативной памяти конкретной машины. Значение NIL принадлежит любому ссылочному типу. Оно указывает на отсутствие связи с объектом.
Сам динамический объект порождается с помощью стандартной процедуры new, фактическим параметром которой является ссылка на этот объект. Выполнение процедуры new(p) порождает динамический объект типа Т, т.е. процедура new ищет в оперативной памяти незадействованную до этого момента область памяти подходящего размера и присваивает переменной-ссылке p значение адреса начала этой области.
В языке Паскаль также определена специальная процедура dispose, уничтожающая динамический объект, т.е. высвобождающая область памяти, зарезервированной под этот объект. Динамические объекты размещающиеся на внешних носителях обычно имеют структуру файла.