
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра систем автоматизированного проектирования
отчет
по лабораторной работе №4
по дисциплине «Программирование»
Тема: «Сложно-структурированные списки: иерархические списки. Операции над иерархическими списками»
Студентка гр. 3352 |
|
|
Преподаватель |
|
|
Санкт-Петербург
2024
Исходная формулировка
Проверить равны ли множества l1 и l2 (рассматривать одинаковые элементы списка как один элемент множества).
Формальная постановка задачи
Из двух входных файлов посимвольно считываются строки и заносятся в два списка l1 и l2. Далее программа проверяет, содержится ли каждая строка первого списка во втором. Эта же операция проводится для l2. Если все строки из первого списка соответствуют каким-либо строкам из второго и наоборот, условие выполняется, иначе ответ отрицательный. После выполнения сравнения и обработки l1 и l2 происходит их вывод и ответ на вопрос в выходной файл. В конце все списки удаляются.
Контрольный пример
Список 1: Dog!! pig Cat |
Список 2: Dog!! Dog!! Cat pig |
Результат: Множества равны между собой |
Пользовательские типы
Struct StrL |
||
Поля структуры |
Тип |
Назначение |
massiv[N] |
char |
Массив элементов строк списка |
len |
int |
Длина строки списка |
ListNodeV |
||
f_H |
FormularH |
Формуляр списка |
next |
ListNodeV* |
Переход к следующей строке списка |
REadV |
bool |
Вертикальное чтение строк |
Print1 |
void |
Вывод строк списка |
ListNodeH |
||
podstroka |
StrL |
Строка списка |
next |
ListNodeH* |
Переход к следующему элементу |
FormularV |
||
cur |
ListNodeV* |
Элемент вертикального списка |
head |
ListNodeV* |
Головной элемент вертикального списка |
last |
ListNodeV* |
Следующий элемент вертикального списка |
prev |
ListNodeV* |
Предыдущий элемент вертикального списка |
FormularH |
||
cur |
ListNodeH* |
Элемент горизонтального списка |
head |
ListNodeH* |
Головной элемент горизонтального списка |
last |
ListNodeH* |
Следующий элемент горизонтального списка |
prev |
ListNodeH* |
Предыдущий элемент горизонтального списка |
com |
||
N |
static const int |
Переменная константа для считывания горизонтального списка |
Laba4 |
||
Del() |
void |
Удаление списка |
Read_file() |
bool |
Чтение файла и перенос элементов в список |
Funk() |
void |
Проверка на соответствие списков |
print2 |
void |
Вывод списков в файл |
Funk |
void |
Вызов всех функций, процесс выявления совпадений в списках |
Ограничение, условленное исполнением на компьютере
Название
Тип
Диапазон
Len
int
От 32768 до 32767
massiv
char
от -127 до 127
N
unsigned int
от 0 до 65535
Организация интерфейса пользователя
in.txt |
res.txt |
Spisok 1: Str1 Str1 Str2 Str1 Str1 |
Началась обработка файла in.txt Исходный текст: Str1 -> Str1 ->NULL ----> Str2 -> NULL ----> Str1 -> Str1->NULL ----> NULL
Началась обработка файла in2.txt Str3->Str3->Str3->NILL ----> Str1->NULL ----> Str2->NULL ----> NULL Список был удален. Кончилась обработка файла in.txt Кончилась обработка файла in2.txt Множества совпадают / не совпадают |
In2.txt |
|
Str3 Str3 Str3 Str1 Str2
|
Макеты ввода/вывода
|
in.txt, in2.txt |
|
«Ошибка открытия исходного файла» |
|
«Ошибка открытия файла записи» |
|
podstroka.massiv[i] |
|
podstroka.massiv[i] |
8. Этапы трансляции
9.Средства обеспечения ввода/вывода
Библиотека |
Команды |
iostream |
cout |
fstream |
open(); close(); eof(); is_open() |
10.Параметры функций:
Имя функции |
Тип |
Файл, хранящий функцию |
Назначение |
Параметры |
||
входные |
выходные |
Модифи-цируемые |
||||
ReadV |
bool |
ListNodeV.h |
Считать символы строки и занести в массив, запомнить длину |
input, input2, res |
|
massiv, Len |
Print1 |
void |
Вывести элементы списка |
res |
|
|
|
Read_file |
bool |
Laba4.h |
Занести элементы в список |
input, input2, res, formularVert |
|
|
print2 |
void |
Вывести список |
res, formularVert |
|
|
|
del |
void |
Удалить список |
toProcess_F, res |
|
|
|
Funk |
void |
Проверить совпадают ли множества списков |
res, in_filename, in_filename2 |
|
|