- •Основные понятия языка программирования паскаль
- •Структурное программирование
- •Основные символы языка
- •Элементы языка
- •Интегрированная среда turbo pascal
- •Структура программы в turbo pascal
- •Определение типов
- •Операторы в программе
- •Операторные скобки
- •Операторы ввода
- •Оператор присваивания
- •Оператор условного перехода
- •Оперетор безусловного перехода
- •Организация циклов
- •Использование операторов условного и безусловного перехода
- •Цикл с параметром
- •Цикл с предусловием - цикл while
- •Цикл с постусловием - цикл repeat
- •Оператор выбора варианта
- •Концепция типов данных
- •Стандартные простые типы Целый тип
- •Операции над данными целого типа:
- •Действительный тип
- •Операции над данными действительного типа:
- •Логический тип
- •Символьный тип
- •Символьные строковые константы
- •Нестандартные простые типы (определяемые пользователем)
- •Перечисляемый тип
- •Ограниченный тип (диапазон, интервал)
- •Процедуры и функции
- •Описание процедур
- •Стандартные процедуры
- •Описание функций
- •Стандартные функции
- •Итерация и рекурсия
- •Побочный эффект рекурсии
- •Предварительное описание (ссылки вперед)
- •Регулярные типы Одномерный массив
- •Алгоритмы сортировки массивов
- •1. Метод пузырька (метод обменной сортировки с выбором)
- •Многомерные массивы
- •Упакованные массивы
- •Множественные типы
- •Свойства множеств
- •Операции над множествами
- •Комбинированные типы Описание записей и действия с ними
- •Оператор присоединения.
- •Записи с вариантами
- •Типизированная константа
- •Простая типизированная константа
- •Структурированная (сложная) типизированная константа Типизированная константа массива
- •Типизированная константа записи
- •Типизированная константа множества.
- •Преобразование типов
- •Неявные преобразования типов
- •Использование стандартных функций для преобразования
- •Явные преобразования типов
- •Эквивалентность типов
- •Совместимость типов
- •Файловые типы
- •Определение файлового типа
- •Структура файла
- •Имя файла
- •Описание файлового типа
- •Файловая переменная
- •Операции над файлами
- •Типизированные файлы
- •Ссылочные типы (указатели) Статические и динамические переменные
- •Ссылочные типы (указатели)
- •Удаление узла из стека:
- •Человек
- •Человек
- •Вставка
- •Динамические переменные
- •Процедуры создания и удаления динамических переменных
- •Динамические списковые структуры
- •Однонаправленные списки
- •Двунаправленные списки
- •Очереди
- •Деревья
- •Модульная система turbo pascal
- •Uses mod 1, mod 2, mod 3; (подключение трех модулей) Общая структура модуля
- •Использование идентификаторов модуля
- •Использование модуля в программе
- •Компиляция модулей
- •Системный файл turbo.Tpl
- •Стандартные модули
- •Модуль crt
- •Модуль dos
- •Модуль printer
- •Модуль overlay
- •Модуль string
- •Процедуры модуля graph
- •Графические процедуры
- •Координаты. Окна. Страницы
- •Линии и точки
- •Многоугольники
- •Дуги,окружности, эллипсы
Типизированные файлы
Длина любого компонента типизированного файла строго постоянна, что даёт возможность доступа к каждому компоненту. Перед первым обращением к процедурам ввода – вывода указатель файла стоит в его начале и указывает на первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Если этих переменных в списке несколько, указатель будет смещаться после каждой операции обмена данными между переменными и дисковым файлом.
Такой способ доступа называется последовательным. В Турбо – Паскале имеется также возможность организации прямого доступа к компонентам типизированного файла (процедура Seck).
Существует ряд процедур и функций для работы с типизированными файлами.
Процедура Read (файловая переменная, список ввода).
Обеспечивает чтение очередных компонентов типизированного файла.
Здесь «список ввода» - содержит одну или более переменных такого же типа, что и компоненты файла.
Ссылочные типы (указатели) Статические и динамические переменные
До настоящего времени мы вели разговор о типах данных, служащих для представления так называемых статических переменных.
Статической называется переменная, которую описывают в программе и к которой обращаются по имени. Статической она называется потому, что существует (то есть для нее выделен определенный участок памяти) на протяжении всего времени выполнения программы, процедуры или функции, в которой она содержится.
Все объекты, описанные в разделе переменной, являются статическими. То есть их можно проконтролировать при статическом анализе текста программы, без ее выполнения (F9). Во время компиляции программы каждой статической переменной ставится в соответствие адрес ячейки памяти. Этот адрес в дальнейшем не меняется.
Далеко не каждую задачу можно решить, используя только статические переменные.
Попытаемся решить следующую задачу: составить список клиентов, ожидающих обслуживание. Безусловно, заказчик требует от нас составить не просто статичный список на некоторый момент времени, а динамичную, изменяющуюся во времени структуру. Попробуем решить задачу описания очереди (а подобная структура называется очередью не только в быту, но и в информационных технологиях), используя известные нам структуры данных.
Опишем клиента так:
Type Person = record
……..
……..
end{of record};
Эта запись – информация о клиенте, она может содержать любые необходимые сведения, например, фамилию, имя, отчество, возраст, марку автомобиля, характеристику неисправности, и т.д. и т. п.
Пусть заказчик предполагает длину очереди до const N = …; тогда описание самой очереди будет иметь вид:
Var L: array [1…N] of Person;
A: Person; {описание рабочей, или оперативной переменной}
I, J, K: byte; {или word, в зависимости от величены N индексы очереди}
C: integer; {или chart критерий выбора процедуры}
Программа должна обеспечивать выполнение опреций типа:
Поставит в очередь,
Обслужить, то есть изъять из очереди,
Показать список очереди.
Обозначения: I – первый ожидающий обслуживания,
J – последнее свободное место в очереди.
Пишем программу:
Begin
I: =1; J:=1;{очередь пуста}
B: = False; {признак пустоты очереди}
Repeart
Write (‘операция: 1 – добавить,
2 –изъять,
3 – показать,
0 – конец работы’);
readln(c);
case c of
1: dobavit; {добавить}
2: izyat; {изъять}
3: perat; {печать}
0: exit; {выход}
end {of case}
until c = 0
end.
Теперь нужно написать три процедуры, что не составить трудности, и задача будет решена.
Итак, задача решена и довольно красиво, но остаются вопросы:
что делать, если кто-то желает покинуть очередь изнутри, не дождавшись обслуживания,
как поставить «своего» клиента внутрь очереди,
что делать, если значение N наперед не известно?
Ответы на эти вопросы чрезвычейно просты, если воспользоваться новым для нас видом переменных – динамическим.
Это значит, что, поимо статических существующих переменных, переменная может динамически создаваться и уничтожаться в процессе выполнения программы такая перемнная назывется динамической. Динамические переменные размещаются в свободной области памяти.
Динамические переменные не описываются явно и прямой доступ к ним по имени невозможен.
Адреса ячеек памяти, где они будут созданы, непредсказуемы и поэтому анализу не подлежат.