Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ ЛР.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
128 Кб
Скачать

Федеральное агентство по образованию Российской Федерации

Государственное образовательное учреждение

высшего профессионального образования

Владимирский государственный университет

Кафедра вычислительной техники

Системное программное обеспечение

Методические указания к лабораторным работам

Составитель:

К.В. КУЛИКОВ

Владимир 2008

УДК 681.3.06(076.5)

Рецензенты:

Кандидат технических наук С.Ю. Кириллова

Печатается по решению редакционно-издательского совета

Владимирского государственного университета

Системное программное обеспечение: Методические указания к лабораторным работам/ Владим. гос. ун-т; Сост. К.В. Куликов. Владимир, 2008. 16 с.

Рассматриваются вопросы создания программных средств обработки структур данных переменной длины – списков и бинарных деревьев. В каждой теме приводятся примеры решения. Содержатся теоретические вопросы по курсу. Методические рекомендации предназначены для студентов специальности 230100 «Вычислительные машины, комплексы, системы и сети» при изучении курса «Системное программное обеспечение», могут быть полезны студентам, аспирантам, специалистам, занимающимся вопросами проектирования и разработки средств компиляции, трансляции и интерпретации.

Ил. __. Библиогр.: __ назв.

Введение

Содержание лабораторных работ посвящено изучению информационных структур переменного размера - связанных списков и деревьев. Целесообразность такого выбора диктуется тем, что эти структуры данных составляют информационную основу многих алгоритмов теории формальных языков - одной из основных теорий, составляющих содержание курса по системному программному обеспечению. Три работы посвящены связанным спискам и две - бинарным деревьям. В первой работе для представления списков необходимо использовать массивы фиксированного размера. В остальных работах для представления информационных структур используется более абстрактный уровень, реализуемый с помощью динамического метода управления памятью. Большое внимание в лабораторных работах обращено на освоение практических навыков разработки рекурсивных алгоритмов. Этой теме посвящены две работы - одна по связанным спискам и одна по бинарным деревьям. В остальных работах предполагается использование итеративных методов.

Типовое задание

Типовое задание на лабораторную работу предполагает разработку процедуры (функции) для реализации заданной операции. При оформлении текстов программ следует ориентироваться на примеры, которые даны в указаниях. Для разрабатываемой процедуры и процедур, ею вызываемых, в обязательном порядке должна быть дана спецификация. Текст программы должен иметь удобную для восприятия человеком структуру, иметь комментарии.

Для уменьшения объема рутинной работы рекомендуется применять типы, структуры данных и процедуры из модуля DS_UNIT (текст приведен в приложении).

ВНИМАНИЕ! В разрабатываемые процедуры не следует включать операции ввода-вывода. Следует считать, что ввод-вывод относится к прерогативам драйвера. Если это необходимо, разрабатываемая процедура может формировать код завершения.

Содержание отчета

Каждая лабораторная работа выполняется с оформлением соответствующей документации. В документации обязательно должны быть представлены следующие пункты:

1. Номер варианта (выдает преподаватель) и текст задания (состоит из общего задания раздела и персональной части).

2. Расшифровка текста задания (как студент понял смысл задания, логическая или математическая основа) и предложения по его решению (алгоритм).

3. Графическое отображение действий алгоритма – наглядное представление, упрощающее понимание пункта 2.

4. Листинг программы и спецификации разработанных процедур и функций.

5. Тесты и результаты их выполнения (можно показывать экранные формы). Тесты должны включать входные и выходные данные и покрывать все принципиально-отличные друг от друга варианты входных данных. Тесты должны покрывать все ветви алгоритма.

6. Выводы по работе.

Все представленные пункты должны быть отражены в отчете по каждой лабораторной работе. Невыполнение данного требования приводит либо к снижению оценки за лабораторную работу при должной защите, либо к требованию оформить отчет заново.

Работа 1. Списки. Представление однородными массивами фиксированного размера

Линейный список – структура данных переменного размера, линейно упорядоченная, включение и исключение в которой выполняется в произвольном порядке.

Операции со списками:

  1. включение элемента (вслед за …);

  2. исключение элемента;

  3. инициализация списка;

  4. просмотр (сканирование) элементов списка.

Существует два представления списков – последовательное и связное. Первый вариант проще при реализации и сканировании, но менее эффективен при операциях включения и исключения элементов. Второй вариант требует накладных расходов на представление полей связи, но дает выигрыш по производительности на операциях включения и исключения элементов списка. В данной работе рассматривается связное представление списков. Для организации связного списка в примере используется два массива и две переменные, отвечающие за адрес первого элемента информационного списка (first) и адрес первого элемента списка свободного пространства (avail). Список свободного пространства занимает все ячейки, которые не заняты информационными списками внутри массивов.

Пример реализации задания

program ds_01;

uses ds_unit;

var first: integer;

len: integer;

procedure lst_len(lst:integer; var len:integer);

{ Входы: lst - указатель списка;

Выходы: len - длина списка;

Гл. имена: link - массив полей связи;

Функция: Определение длины len списка lst.

}

var p: integer;

begin

p:=lst; len:=0;

while p<>0 do begin len:=len+1; p:=link[p]; end;

end; {lst_len}

begin

rdblock;

write('First: '); readln(first);

lst_len(first,len);

writeln('Len: ',len);

wrblock;

writeln('First: ',first);

escwait;

end.

Варианты индивидуальных заданий:

1. Сцепление двух списков.

2. Определение значения элемента списка с заданным порядковым номером.

3. Определение порядкового номера элемента списка с заданным значением.

4. Определение суммы положительных элементов списка.

5. Исключение из списка элементов с отрицательными значениями.

6. Копирование списка.

7. Определение значения элемента списка, который следует за элементом с заданным значением.