 
        
        МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра систем автоматизированного проектирования
отчет
по лабораторной работе №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 | 
 | 
 | |
