Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум. Информатика.doc
Скачиваний:
11
Добавлен:
06.11.2018
Размер:
2.13 Mб
Скачать

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

Рабочая структура для данных о студенте

Разработанный алгоритм с использованием перечисленных идентификаторов реализуется на языке Турбо-Паскаль приведенной ниже программой.