- •Информатика
- •Лабораторный практикум
- •По программированию
- •На Турбо-Паскале
- •Содержание
- •Предисловие
- •Общая схема выполнения лабораторной работы
- •Лабораторная работа № 1
- •Var r,d: real; {раздел описаний переменных может
- •Блок-схема алгоритма
- •Текст программы
- •Результат расчета
- •Варианты заданий
- •Лабораторная работа № 2
- •If Pr then {здесь Pr – логическая переменная,}
- •Разбор контрольного варианта Задание
- •Блок-схема алгоритма
- •Текст программы
- •Результаты расчетов
- •Варианты заданий
- •Лабораторная работа № 3
- •Общие пояснения
- •Разбор контрольного варианта Задание
- •Алгоритм
- •Текст программы
- •Vvod: writeln('Сколько будет чисел?');
- •Варианты заданий
- •Лабораторная работа № 4
- •Задачи лабораторной работы Вопросы, изучаемые в работе
- •Задание (общее ко всем вариантам)
- •Требования к программе
- •Содержание программы
- •Общие пояснения
- •Var Massiv1,Nmbs:IntMasMax; {завели 2 целочисл. Массива}
- •Разбор контрольного варианта Задание.
- •Текст программы
- •Результаты работы
- •Варианты заданий
- •Лабораторная работа № 5
- •Общие пояснения
- •Var {здесь выделяется место под все массивы }
- •Разбор контрольного варианта Задание
- •Формирование таблицы идентификаторов
- •Алгоритм
- •Текст программы.
- •Содержимое файла результатов umnik5.Res
- •Варианты заданий
- •Лабораторная работа n 6
- •Задачи лабораторной работы Вопросы, изучаемые в работе
- •Задание (общее ко всем вариантам)
- •Требования к программе
- •Содержание программы
- •Общие пояснения
- •Разбор контрольного варианта Задание
- •Рассмотрение метода решения
- •Алгоритм
- •Текст программы.
- •Vvod_eps:writeln('введите минимальный размер слагаемого);
- •Результаты расчета
- •Варианты заданий
- •Лабораторная работа n 7
- •Задачи лабораторной работы Вопросы, изучаемые в работе
- •Задание (общее ко всем вариантам).
- •Требования к программе и отчету по работе
- •Содержание программы.
- •Пояснения к лабораторной работе Общие пояснения к использованию процедур и функций.
- •Механизм параметров
- •Разбор контрольного варианта Задание
- •Б Рисунок 7. Алгоритм 31-го варианталок-схема алгоритма Текст программы.
- •Лабораторная работа n 8
- •Алгоритмы построения графиков на экране
- •Стандартный модуль работы с графическим экраном Graph
- •Разбор контрольного варианта № 31 Задание
- •Алгоритм
- •Разбор контрольного варианта № 32 Задание
- •X,y:mas; { текущие значения переменных х иY}
- •Xmin,Xmax,t,tmin,tmax, { минимальное и максимальное значения х на графике }
- •Imin,Imax, { координаты экрана, соответствующиеYminиYmax}
- •Варианты заданий
- •Лабораторная работа № 9
- •Задачи лабораторной работы Вопросы, изучаемые в работе
- •Задание (общее ко всем вариантам)
- •Требования к программе
- •Содержание программы
- •Общие пояснения
- •Односвязные списки
- •Двусвязные списки
- •Нульсвязные списки
- •Описание файлов с данными
- •Inc(I); { стандартная процедура увеличения на 1 }
- •Разбор контрольного варианта Задание
- •Содержание программы
- •Алгоритм
- •Текст программы
- •IfBegthen{ если добавляем в начало }
- •If Beg then { если удаление из начала }
- •Варианты заданий
- •Литература
- •Главное меню
- •Приложение а. Система меню и команды Турбо-Паскаля Меню системы программирования Турбо-Паскаль
- •Опции главного меню
- •Локальные меню
- •Основные команды встроенного редактора текста
- •Приложение б. Сообщения об ошибках
- •Сообщения об ошибках на шаге выполнения
- •Приложение в. Описание числовых файлов для лабораторных работ
- •I,j : integer; {I- счетчик элементов массива, j - номер символа в файле }
- •Приложение г. Таблица ascii-кодов (с альтернативной кодировкой)
Нульсвязные списки
К таким спискам относятся стек, очередьидек. В отличие от прочих типов списков, по которым можно перемещаться, используя находящиеся в звеньях указатели, в нульсвязных списках доступны только элементы на одном или обоих концах. Только после удаления из такого списка доступного элемента, можно получить доступ к следующему элементу, который теперь становится крайним в списке.
В нульсвязных списках нет заглавных звеньев. У них есть только начало и конец. Началом (или начальным звеном) называется звено, которое можно взять из списка, концом – звено, после которого можно добавить в список новый элемент (новое звено).
В языке Паскаль нет средств, позволяющих описывать переменные типа нульсвязных списков. Их приходится моделировать односвязными списками с запретом перемещения по указателям звеньев. Работа с нульсвязными списками выполняется, только используя специальные процедуры и функции. Обычно достаточно использовать функцию проверки не пуст ли список и две процедуры: добавления элемента к списку и выбора элемента из списка (с удалением выбираемого звена).
Рассмотрим варианты нульсвязных списков.
Стек– это нульсвязный список, иногда называемый очередью, с правилом обслуживанияLIFO(LastIn–FirstOut– последним пришел – первым ушел). У стека начало и конец – это одно и то же звено, обычно называемое вершиной стека.
Создание пустого стека – это, по сути, создание указателя на вершину стека (N), и присвоение ему значенияnil. Этот указатель в дальнейшем играет роль адреса начала и конца стека текущего звена.
Для добавления элемента данных в стек необходимо составить процедуру, получающую в качестве параметров указатель на вершину стека Nи собственно данныеDt. Процедура должна создать динамическую переменную типа звена стека, в поле указателя перенести значение из указателя вершины стека, в поле данных записать значенияDtи в указатель на вершину стека записать адрес созданной динамической переменной. Процедура должна вернуть эту новую вершину стека.
П
роцедура
выбора из стека последнего введенного
звена выполняется наоборот: в переменную
для выбираемых данных переносятся
значения поляDt,
новое значение указателя на вершину
стека берется из поля ссылки на следующее
звено, а старая вершина стека удаляется
процедуройDispose.
В обоих процедурах используется рабочий
указатель на звено стека. Описатели
типов для стека полностью совпадают с
описателями односвязного списка.
О
чередь– нульсвязный список с правилом
обслуживанияFIFO(FirstIn–FirstOut–
первым пришел – первым ушел).
Для работы с очередью необходимы такие же процедуры, как и для стека. При создании пустой очереди указателям NиKприсваивается значениеnil. Процедурам добавления в очередь и выбора из очереди приходится передавать указатели на оба конца, так как при создании первого звена, его адрес необходимо занести в оба указателя, а при удалении последнего звена очереди, обоим указателям надо присвоить значениеnil.
Дек– это нульсвязный список, в котором добавление и выбор элементов возможен с любого конца. Его можно рассматривать как двусторонний стек или двустороннюю очередь. Название (deque) расшифровывается какdouble-endedqueue– очередь с двумя концами.
П
роще
всего дек моделировать двусвязным
линейным списком, по которому запрещено
перемещаться. Формально для него
приходится составлять две процедуры
добавления и две процедуры удаления
элементов, находящихся на первом и
втором концах дека. На практике процедуры
добавления можно объединить в одну,
используя дополнительный признак – к
какому концу добавляется элемент. Хотя
оба конца дека равноправны, для
определенности одну сторону будем
называть началом, обозначая указателемNK,
а вторую –концом, с обозначениемKN.
Обе процедуры удаления элемента также можно объединить в одну. В процедуру добавления (удаления) элемента таким образом придется передавать указатели на оба конца списка, данные (или адрес, куда их поместить при удалении) и признак, в начало ли идет добавление. В зависимости от того, какая сторона будет указана в списке параметров первой, с той и будет производиться работа. Вторая сторона необходима при занесении первого или удалении последнего звена из дека. Примеры этих процедур разобраны в контрольном варианте № 31.
Примеры процедур по добавлению и удалению элементов нульсвязных списков приведены в разобранном ниже контрольном варианте.
