- •Ю.П. Чернов, о.П. Шафеева программирование для начинающих
- •1. Среда программирования turbo pascal 7.0
- •1.1. Структура меню среды
- •1.2. Правила оформления программ
- •1.3. Команды редактора тп
- •Команды удаления и вставки
- •1.4. Компиляция и исправление синтаксических ошибок
- •2. Элементы языка pascal
- •2.1. Алфавит языка
- •2.2. Константы. Идентификаторы
- •2.3. Операторы
- •2.3.1. Оператор присваивания
- •2.3.2. Оператор безусловного перехода
- •Стандартные функции
- •2.3.3. Условный оператор if
- •2.3.4. Опеpатоp варианта case
- •2.3.5. Составной и пустой операторы
- •2.3.6. Операторы цикла
- •2.4. Процедуры прерываний
- •2.5. Типизированные константы
- •2.6. Структура программы
- •2.7. Подпрограммы
- •2.7.1. Определение процедур и функций
- •2.7.2. Вложенные подпрограммы
- •2.7.3. Вызов подпрограмм
- •2.7.4. Процедуры
- •2.7.5. Функции
- •2.7.6. Передача в подпрограмму параметров-массивов и параметров-строк
- •2.7.7. Рекурсия
- •2.8. Типы в Турбо Паскале
- •2.8.1. Целые типы
- •Классификация целых типов
- •Встроенные процедуры и функции для целых типов
- •2.8.2. Логический тип
- •2.8.3. Символьный тип
- •Служебные символы
- •2.8.4. Строковый тип
- •Встроенные функции и процедуры для обработки строк
- •Процедуры преобразования
- •2.8.5. Перечислимый тип
- •2.8.6. Ограниченный тип (диапазон)
- •2.8.7. Вещественные типы
- •Вещественные типы
- •Встроенные функции
- •2.8.8. Структурированные типы данных. Массивы
- •2.8.9. Множества
- •2.8.10. Записи
- •2.9. Изменение типа выражения
- •2.10. Процедурные типы
- •2.11. Файлы
- •Общие процедуры и функции для работы с файлами
- •2.11.1. Текстовые файлы
- •2.11.2. Типизированные файлы
- •2.11.3. Нетипизированные файлы
- •2.12. Указатели и динамическая память
- •2.13. Модули
- •2.14. Библиотека Турбо Паскаля
- •2.14.1. Модуль crt
- •2.14.2. Модуль graph
- •Var driver, Mode: integer переменные драйвера и режима.
- •Управление графическим режимом
- •Управление экраном, окном, страницей
- •Управление цветом и палитрой
- •Работа с точками
- •Работа с линиями
- •Построение фигур из линий
- •Построение криволинейных фигур
- •Работа с текстом
- •Обмен с памятью
- •2.15. Динамические структуры данных
- •2.15.1. Связанные динамические данные. Списки
- •Чтобы сослаться на двунаправленный кольцевой список как на единый программный объект, используется указатель, значением которого является ссылка на заглавное звено списка.
- •2.15.2 Очередь
- •2.15.3. Стек
- •3. Практическое программирование Этапы подготовки и решения задач на компьютере
- •Порядок выполнения лабораторных работ
- •Лабораторная работа 1 Основы программирования в среде Турбо Паскаля.
- •Приоритет операций в выражении
- •Задание 1 (программа 1_1)
- •Лабораторная работа 2 Программирование разветвленных алгоритмов. Операторы передачи управления
- •Лабораторная работа 3 Программирование циклических алгоритмов с заданным числом повторений
- •Лабораторная работа 4 Программирование циклических алгоритмов с предусловием
- •Лабораторная работа 5 Программирование циклических алгоритмов с постусловием
- •Модифицировать программу 3_2 для вычисления функций f1(X) и f2 (X) с применением оператора цикла с постусловием. Выполнить ее и сравнить результаты с полученными ранее.
- •Лабораторная работа 6 Программирование алгоритмов обработки одномерных массивов
- •Задание 1
- •Лабораторная работа 7
- •Лабораторная работа 8 Программирование с использованием функций
- •Лабораторная работа 9 Программирование с использованием процедур
- •Лабораторная работа 10 Обработка символьных и строковых данных
- •Лабораторная работа 11 Файлы
- •Лабораторная работа 12 Записи
- •Лабораторная работа 13 Решение нелинейных уравнений
- •Задание (программа_13)
- •Лабораторная работа 14 Вычисление приближенного значения определенного интеграла
- •Лабораторная работа 15 Модульное программирование
- •Лабораторная работа 16 Графика
- •Библиографический список
- •Обозначения графические в схемах алгоритмов (гост 19.701-90)
- •Зарезервированные слова Turbo Pascal 7.0
- •Приложение в
- •Кодировка символов в соответствии с кодами ascii
- •Приложение г
- •Альтернативная кодировка госТа для кодов 128...255
- •Клавиши с кодами из двух частей
- •Содержание
Чтобы сослаться на двунаправленный кольцевой список как на единый программный объект, используется указатель, значением которого является ссылка на заглавное звено списка.
Рассмотренный выше способ образования двунаправленного списка не является единственно возможным: можно не включать заглавное звено списка в кольцо:
Каждый метод имеет свои достоинства и недостатки, в частности во вставке элементов в конец или начало.
Над списками определены те же основные операции, что и над цепочками:
поиск элемента в списке;
вставка заданного элемента в указанное место списка;
удаление из списка заданного элемента.
Удаление элемента. Для исключения элемента достаточно изменить ссылку в поле *СЛЕД у предшествующего ему звена и ссылку в поле *ПРЕД у звена, следующего за исключаемым. Для экономичного расходования памяти удаленное из списка звено рекомендуется уничтожить оператором dispose.
Поиск элемента производится перебором элементов с помощью ссылок, содержащихся в каждом звене.
2.15.2 Очередь
Самыми распространенными случаями линейного односвязного списка
являются очередь и стек.
Очередь это частный случай линейного односвязного списка, для которого разрешены только два действия: добавление элемента строго в конец (хвост) списка, а извлечение (удаление) строго из начала (головы) очереди.
Очередь можно представить в виде трубы с двумя открытыми концами, куда помещаются «бочонки-элементы». Движение по трубе возможно лишь в одном направлении
начало конец
взять добавить
Очередь динамическая структура или дисциплина обслуживания, организованная по принципу FIFO (first in-first out). "Первым пришел - первым ушел". Основные операции для работы с очередями: добавление нового элемента в конец очереди (занесение заказа на обслуживание); удаление элемента из начала очереди для его обслуживания, при этом выбранный элемент, естественно, исключается из очереди. Таким образом, в очереди доступны только ее начало и конец.
Для создания очереди и работы с ней необходимо иметь как минимум два указателя: на начало очереди (BegP) и на конец очереди EndQ. Кроме того, для освобождения памяти удаляемых элементов и удобства работы с очередью требуется дополнительный временный указатель (t).
Функции, которые могут быть использованы при работе с очередями:
1) ADDE1( ) [insert( )] вставляет элемент (добавить в очередь элемент), отводит память под очередной элемент, заносит в него нужную информацию и ставит в конец очереди;
2) GetDELEl( ) [take_off( )] удаляет из очереди ее первый элемент, свобождает память и перемещает указатель начала очереди на следующий элемент.
Пример. Создание очереди (односвязного списка) добавлением элементов в начало
Program queue0; {queue0.pas}
Uses crt;
Type
ptr=^elem;
elem=record
inf: integer;
next: ptr
end;
Var beg_p, t, end_q: ptr;
x: integer;
i: byte;
Procedure ADDEl(val:integer); {Добавление элемента}
Var pt:ptr;
Begin
new(pt);
pt^.inf:=val;
pt^.next:=nil;
if end_q = nil then Beg_p:=pt {если создается первый элемент}
else end_q^.next:=pt; {если создается очередной элемент}
End_q:=pt
End;
Procedure GetDelEl(Var Val:integer);
var pt:ptr;
begin
val:=beg_p^.inf;
pt:=beg_p;
beg_P:=pt^.next;
if Beg_p=nil then end_q:=nil; {если удаляется последний элемент}
dispose(pt)
end;
BEGIN
clrscr;
Beg_p:=nil;
end_q:=nil; {Начальная установка указателей}
for i:=1 to 10 do AddEl(i);{Создание очереди из 10 элементов}
{Удаление очереди с распечаткой значений ее элементов}
while Beg_p<>nil do
begin
GetDelEl(x);
writeln('x=',x:4)
end;
END.