- •Предисловие
- •Общая схема выполнения лабораторной работы
- •Требования к программе
- •Содержание программы
- •Общие пояснения
- •Var r,d: real; {раздел описаний переменных может
- •Требования к программе
- •Общие пояснения
- •If Pr then {здесь Pr – логическая переменная,}
- •Разбор контрольного варианта Задание
- •Лабораторная работа № 3
- •Задачи лабораторной работы Вопросы, изучаемые в работе
- •Задание (общее ко всем вариантам).
- •Требования к программе.
- •Общие пояснения
- •Разбор контрольного варианта Задание
- •Алгоритм
- •Текст программы
- •Vvod: writeln('Сколько будет чисел?');
- •Варианты заданий
- •Требования к программе
- •Содержание программы
- •Общие пояснения
- •Var Massiv1,Nmbs:IntMasMax; {завели 2 целочисл. Массива}
- •Разбор контрольного варианта Задание.
- •Текст программы
- •Результаты работы
- •Варианты заданий
- •Требования к программе
- •Содержание программы.
- •Общие пояснения
- •Var {здесь выделяется место под все массивы }
- •Разбор контрольного варианта Задание
- •Формирование таблицы идентификаторов
- •Алгоритм
- •Текст программы.
- •Содержимое файла результатов umnik5.Res
- •Варианты заданий
- •Требования к программе
- •Содержание программы
- •Общие пояснения
- •Разбор контрольного варианта Задание
- •Рассмотрение метода решения
- •Алгоритм
- •Текст программы.
- •Vvod_eps:writeln('введите минимальный размер слагаемого);
- •Результаты расчета
- •Варианты заданий
- •Требования к программе и отчету по работе
- •Содержание программы.
- •Пояснения к лабораторной работе Общие пояснения к использованию процедур и функций.
- •Механизм параметров
- •Разбор контрольного варианта Задание
- •Б Рисунок 7. Алгоритм 31-го варианта лок-схема алгоритма Текст программы.
- •Общие пояснения Графический режим экрана
- •Алгоритмы построения графиков на экране
- •Стандартный модуль работы с графическим экраном Graph
- •Разбор контрольного варианта № 31 Задание
- •Алгоритм
- •Текст программы
- •X,y, { текущие значения переменных х и y }
- •Xmin,Xmax,{минимальное и максимальное значения х на графике}
- •Imin,Imax, {координаты экрана, соответствующие Ymin и Ymax}
- •Разбор контрольного варианта № 32 Задание
- •X,y:mas; { текущие значения переменных х и y }
- •Xmin,Xmax,t,tmin,tmax, { минимальное и максимальное значения х на графике }
- •Imin,Imax, { координаты экрана, соответствующие Ymin и Ymax }
- •Варианты заданий
- •Требования к программе
- •Содержание программы
- •Общие пояснения
- •Односвязные списки
- •Двусвязные списки
- •Нульсвязные списки
- •Описание файлов с данными
- •Inc(I); { стандартная процедура увеличения на 1 }
- •Разбор контрольного варианта Задание
- •Содержание программы
- •Алгоритм
- •Текст программы
- •If Beg then { если добавляем в начало }
- •If Beg then { если удаление из начала }
- •Варианты заданий
- •Литература
- •Приложение а. Система меню и команды Турбо-Паскаля Меню системы программирования Турбо-Паскаль
- •Главное меню
- •Опции главного меню
- •Локальные меню
- •Основные команды встроенного редактора текста
- •Приложение б. Сообщения об ошибках
- •Сообщения об ошибках на шаге выполнения
- •Приложение в. Описание числовых файлов для лабораторных работ
- •I,j : integer; {I- счетчик элементов массива, j - номер символа в файле }
- •Приложение г. Таблица ascii-кодов (с альтернативной кодировкой)
- •Содержание
Inc(I); { стандартная процедура увеличения на 1 }
read(F,Stud.Name[i]); {читаем из файла по символу в поле имени }
if Stud.Name[i]=' ' then P:=P+1; { подсчет пробелов}
end;
Stud.Name:=Copy(Stud.Name,1,i); { Из полной строки поля фамилии вырезаем подстроку по второй пробел (включительно) и заносим обратно в поле фамилии }
readln(F,Stud.Bal1,Stud.Bal2,Stud.SrBal); { остаток записи файла читаем в поля оценок }
Разбор контрольного варианта Задание
Таблица 31. Данные к заданию 31 варианта
№ вар. |
Требования к записям, выбираемым из файла и помещаемым в список |
Тип списка |
Файл данных |
31 |
В начало – только с пятерками, в конец – только с тройками |
S0D |
dan.txt |
На основе общего задания и данных таблицы вариантов конкретное задание формулируется следующим образом:
Заполнить нульсвязный список дек данными из файла DAN.TXT, занося в начало дека записи о студентах, у которых все оценки – 5 баллов, а в конец дека – сведения о студентах, имеющих все оценки – 3 балла. Добавить в начало дека запись, в которой вместо фамилии указан тип списка, а вместо первой оценки – число записей с информацией в деке. Вывести в выводной текстовый файл таблицу записей из дека. Созданный дек удалить из памяти.
Содержание программы
Задание включает в себя следующие действия, подлежащие программированию:
-
Формирование пустого дека;
-
Открытие входного и выходного файлов;
-
Чтение данных из файла с занесением нужных записей в дек с подсчетом их количества;
-
Добавление информационной записи в начало дека;
-
Вывод в выходной файл информационной записи из дека с удалением этой записи;
-
Вывод "шапки" таблицы в выходной файл;
-
Удаление из дека записей с выводом информации в табличном виде в выходной файл;
-
Закрытие выходного файла.
При составлении программы, формирование дека и его распечатку в выходной файл оформим в виде процедур. Кроме того, отдельными процедурами оформим процессы добавления записи в дек и удаления (выбора) записи из дека.
Учитывая, что файл текстовый, воспользуемся процедурой чтения строки файла с распределением информации по полям структуры, как это рассмотрено в пояснениях выше.
Алгоритм
Укрупненные шаги алгоритма основной программы приведены под заголовком "содержание программы" (при оформлении отчета, алгоритмы следует включить в блок-схему программы). Рассмотрим строение процедур.
Добавление записи в дек. Исходя из схемы дека, приведенной на рис. 20, будем считать его пустым, если в нем нет ни одной записи, то есть указатели начала и конца дека указывают на nil. Если запись добавляется в пустой дек, то меняются оба указателя, если в непустой – меняется только один указатель (начала или конца). Проверку, что дек пуст, можно выполнять по содержимому любого указателя (nil или нет). Добавление записей к обоим концам выполняется почти одинаково: создается динамическая переменная типа звена дека, заполняется ее информационная часть, обе ссылки на соседние звенья делаются равными nil. Затем, в зависимости от того, к какому концу добавляется запись, меняется первая ссылка в новой записи (прицепляясь к деку) и вторая ссылка в концевой записи дека (связываясь с новой записью) или наоборот – вторая ссылка новой записи и первая ссылка конца дека. Наконец меняется указатель конца дека к которому добавлена запись.
Удаление записи из дека. В задаче требуется выбирать данные из дека с одной стороны, но для универсальности, составим процедуру выбора и удаления с заказанного конца дека. Как и в предыдущей процедуре, будем использовать логический параметр, равный истине, при работе с началом и лжи, при работе с концом дека. Если начало и конец ссылаются на одну и ту же область памяти (равны между собой), то при удалении записи дек становится пустым. Если нет, процесс выполняется в обратном порядке, по сравнению с добавлением записи.
Заполнение дека из текстового файла. Представляет собой цикл (пока не достигнут конец файла) чтения очередной строки текстового файла с заполнением информационной структуры, которую либо добавляют к началу дека (обе оценки – 5), либо к концу (обе оценки – 3), либо просто пропускают. Внутри цикла используются процедуры ввода одной строки и добавления записи в дек. При заполнении дека ведется подсчет количества записей дека.
Распечатка дека в выходной текстовый файл. Так как количество записей дека известно, вывод выполняется в форме арифметического цикла. Тело цикла содержит обращение к процедуре выбора записи из дека (из начала) и форматного вывода данных в выводной файл в виде строки таблицы.
При составлении блок-схем алгоритмов в отчете по лабораторной работе можно пользоваться именами переменных, описания которых предварительно заданы в таблице идентификаторов основной программы и подпрограмм.
Примечание: формальные параметры, передаваемые по имени (которым предшествует ключевое слово var), являются, по сути, указателями на данные, поэтому занимают в памяти по 4 байта, независимо от типа данных, на которые указывают.
Таблица идентификаторов
Таблица 32. Идентификаторы программы 31 варианта
Имя |
Тип |
Р-р, байт |
Назначение |
Основная программа |
|||
Lab_9 |
имя программы |
- |
Работа с динамическими списками |
data |
описатель |
- |
Описатель типа для структуры данных |
.Name |
строка |
16 |
Поле структуры данных для фамилии |
.Bal1 |
целое |
2 |
Поле структуры данных для первой оценки |
.Bal2 |
целое |
2 |
Поле структуры данных для второй оценки |
.SrBal |
вещественное |
6 |
Поле структуры данных для средней оценки. |
Pd |
описатель |
- |
Описатель типа для указателей на звено дека |
Dek |
описатель |
- |
Описатель типа для структуры данных записи дека |
P1 |
указатель |
4 |
Ссылка на следующий элемент дека |
P2 |
указатель |
4 |
Ссылка на предыдущий элемент дека |
Student |
структура |
26 |
Структура – составное поле данных записи дека |
Docum |
структура |
26 |
Данные одной записи |
DN |
указатель |
4 |
Указатель первого конца дека (начала) |
DK |
указатель |
4 |
Указатель второго конца дека (конца) |
Fin |
последовательн. символьн. файл |
128 |
Входной текстовый файл с данными |
Fout |
последовательн. символьн. файл |
128 |
Выходной текстовый файл с таблицей результатов |
k |
целое |
2 |
Количество элементов дека |
GetStud – процедура выбора строки из входного файла |
|||
St |
указатель на структуру |
4 |
Формальный параметр адрес структуры с данными по студенту |
F |
указатель на файл |
4 |
Формальный параметр имя входного файла |
P |
целое |
2 |
Счетчик пробелов во входной записи |
i |
целое |
2 |
Порядковый № символа во входной записи |
PutDek Процедура формирования нового звена дека |
|||
NK |
указатель |
4 |
Формальный параметр адрес конца дека, к которому добавляют запись |
KN |
указатель |
4 |
Формальный параметр адрес второго конца дека |
Inf |
структура |
24 |
Формальный параметр – добавляемые данные |
Beg |
логическое |
1 |
Признак, что добавляется к началу |
U |
указатель |
4 |
Вспомогательный указатель на добавляемое звено дека |
DelDek Процедура удаления крайнего звена дека |
|||
NK |
указатель |
4 |
Формальный параметр адрес конца дека, у которого удаляют запись |
KN |
указатель |
4 |
Формальный параметр адрес второго конца дека |
Inf |
указатель на структуру |
4 |
Формальный параметр – адрес структуры, куда поместить выбираемые данные |
Beg |
логическое |
1 |
Признак, что удаляется из начала |
U |
указатель |
4 |
Вспомогательный указатель на удаляемое звено дека |
ReadFile Процедура чтения записи из файла и заполнения дека |
|||
F |
указатель на файл |
4 |
Формальный параметр – указатель на входной файл для входных данных |
DekN |
указатель |
4 |
Формальный параметр адрес указателя на начало дека |
DekK |
указатель |
4 |
Формальный параметр адрес указателя на конец дека |
N |
указатель |
4 |
Формальный параметр адрес переменной для числа элементов дека |
Stud |
структура |
26 |
Рабочая структура для данных о студенте |
Разработанный алгоритм с использованием перечисленных идентификаторов реализуется на языке Турбо-Паскаль приведенной ниже программой.