Добавил:
надеюсь это добро кому-то поможет Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 сем лаба 4.docx
Скачиваний:
0
Добавлен:
08.07.2025
Размер:
494.08 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра систем автоматизированного проектирования

отчет

по лабораторной работе №4

по дисциплине «Программирование»

Тема: «Сложно-структурированные списки: иерархические списки. Операции над иерархическими списками»

Студентка гр. 3352

Преподаватель

Санкт-Петербург

2024

  1. Исходная формулировка

Проверить равны ли множества l1 и l2 (рассматривать одинаковые элементы списка как один элемент множества).

  1. Формальная постановка задачи

Из двух входных файлов посимвольно считываются строки и заносятся в два списка l1 и l2. Далее программа проверяет, содержится ли каждая строка первого списка во втором. Эта же операция проводится для l2. Если все строки из первого списка соответствуют каким-либо строкам из второго и наоборот, условие выполняется, иначе ответ отрицательный. После выполнения сравнения и обработки l1 и l2 происходит их вывод и ответ на вопрос в выходной файл. В конце все списки удаляются.

  1. Контрольный пример

Список 1:

Dog!!

pig

Cat

Список 2:

Dog!!

Dog!!

Cat

pig

Результат:

Множества равны между собой

  1. Пользовательские типы

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

Вызов всех функций, процесс выявления совпадений в списках

  1. Ограничение, условленное исполнением на компьютере

    Название

    Тип

    Диапазон

    Len

    int

    От 32768 до 32767

    massiv

    char

    от -127 до 127

    N

    unsigned int

    от 0 до 65535

  2. Организация интерфейса пользователя

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

  1. Макеты ввода/вывода

  1. Открытие и чтение файла input

in.txt, in2.txt

  1. Файл input не найден

«Ошибка открытия исходного файла»

  1. Файл out не найден

«Ошибка открытия файла записи»

  1. Вывод списка

podstroka.massiv[i]

  1. Результат после обработки

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