- •Ю.П. Чернов, о.П. Шафеева программирование для начинающих
- •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.