Реферат: Обработка динамических структур

--PAGE_BREAK--Пример выполнения менюВведите номер пункта для выполнения 1. Заполнить список 2. Загрузить списки из файлов 3. Отсортировать текущий список 4. Вывести текущий список 5. Вывести текущий список выданных на руки книг 6. Добавить новый элемент
7. Удалить из списка книги заданного автора
8. Выдать книгу на руки 9. Вернутькнигу в библиотеку 10. Сохранить списки в файл
11. Выход из программы

Ваш выбор:
2.2 Метод сортировки
Сортировка методом простого выбора – один из наиболее простых способов сортировки. Алгоритм состоит в повторяющихся проходах по сортируемому списку. За каждый проход элементы последовательно будут сравниваться попарно и, в случае если последующий элемент меньше предыдущего (то есть порядок в паре неверный), будет выполняться обмен элементов. Проходы по списку будут повторяться до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает, что список отсортирован.

Обращение к функции, реализующей сортировку, будет производиться не только при непосредственном выборе пункта меню сортировки созданного списка, но и при добавлении нового элемента в список. Это обеспечивает добавление новой записи при неизменном алфавитном порядке.




3. Разработка алгоритмов решения задачи
3.1 Схема работы программы
Считать номер nпункта меню:

1. Если n=1, вызвать функцию vvodSp. Формирование списка.

2. Если n=2, вызвать функцию loadIT. Считывание списков из файлов.

3. Если n=3, вызвать функцию sort. Сортировка первого списка по фамилиям автора.

4. Если n=4, вызвать функцию vivodSp. Вывод первого (текущего) списка на печать.

5. Если n=5, вызвать функцию vivodSp. Вывод второго списка (выданных на руки книг) на печать.

6. Если n=6, вызвать функцию dobEl. Добавление нового элемента в конец списка и последующая сортировка по имени автора.

7. Если n=7, вызвать функцию delel. Удаление всех записей с введённой фамилией автора.

8. Если n=8, вызвать функцию vidacha. Добавление книги во второй список, удаление из первого.

9. Если n=9, вызвать функцию vozvrat. Удаление книги из второго списка, добавление в первый.

10. Если n=10, вызвать функцию saveIT. Запись данных первого и второго списков в файлы.

11. Если n=11, выполнить выход из программы.

Блок схемы основной программы и функций vvodSp, dobEl, delelпредставлены в приложениях соответственно А, Б, В, Г.




3.2 Стандартные процедуры и функции, используемые в программе
В процессе разработки программы были использованы стандартные модули языка программирования С: stdio.h, alloc.h, conio.h, string.h,.

Модуль stdio.hпозволяет работать с потоками (строки, файлы…). Данный модуль включает такие необходимые функции как scanf(), printf(), gets(), puts(), и набор функций для работы с файлами.

Модуль alloc.hпредназначен для работы с динамической памятью, в нем содержатся функции calloc(), malloc(), free() и константа NULL.

Модуль string.hпредназначен для работы со строками, точнее строковым типом данных. В нем находятся функции для копирования, сравнения, склеивания, и поиска подстроки. В программе используются две стандартные функции этого модуля: strwrи strcmp. Первая преобразует строчные символы строки в прописные. Данная функция необходима для предотвращения ошибок ввода из-за восприимчивости программы к регистру. Функция strcmp(Строка1, Строка2) сравнивает строки Строка1 и Строка2, возвращает 0, если строки равны; число меньше нуля, если первая строка меньше второй; число больше нуля, если первая строка больше второй.Модуль conio.hпредназначен для работы с экраном в текстовом режиме. В нем хранятся функции для очистки экрана, изменения цвета текста и фона, атрибутов текста, процедуры для буферизированного и небуферизированного ввода с клавиатуры.
3.3 Описание работы пользовательских подпрограмм
3.3.1 Описание работы подпрограммы vvodSp

Подпрограмма предназначена для формирования первого списка. Функция возвращает указатель на начало первого списка. Входной параметр – указатель на указатель на начало второго списка.

1. Обнулить указатели на начала и хвосты обоих списков.

2. Пока не будет введено "no" выполнять:

2.1 Динамически выделить память под указатель на текущий элемент.

2.2 Обнулить указатель на следующий за текущим элемент.

2.3 Присвоить указателю на предшествующий текущему элемент адрес предыдущего элемента.

2.4 Если указатель на начало списка обнулён, то присвоить вершине списка адрес текущего элемента, то есть текущий элемент становится вершиной.

2.5 Иначе, присвоить указателю на следующий за предыдущим элемент списка адрес текущего элемента.

2.6 Приравнять адрес текущего элемента к адресу предыдущего.

Аналогичные действия проводятся со вторым списком. Далее:

2.7 Считать информационные поля элемента первого списка.

2.8 Приравнять информационные поля элементов первого списка к информационным полям второго.

2.9 Обнулить поле количества книг.

2.10 Считать значение s.

3. Вернуть указатель на начало первого списка.
Таблица 3.3.1-Локальные идентификаторы функции vvodSp
    продолжение
--PAGE_BREAK--


3.3.2 Описаниеработы подпрограммы loadIT

Подпрограмма предназначена для считывания данных первого и второго списков из файлов.

Входные параметры функции – указатель на указатель на начало первого и второго списков.

1. Обнулить ссылки на хвосты и вершины обоих списков.

2. Открыть файлы "Base.txt" и "Out.txt" для чтения.

3. В цикле «пока не конец файла» динамически выделять память под указатель на текущий элемент.

3.1 Обнулить указатель на элемент, следующий за текущим.

3.2 Приравнять указатель на конец списка к указателю на предшествующий.

3.3 Если указатель на начало списка пустой, то присвоить ему адрес текущего элемента, текущий элемент становится началом списка.

3.4 Иначе присвоить адрес текущего элемента указателю на следующий за предыдущим.

3.5 Указатель на текущий элемент приравнять к последнему.

3.6 Произвести считывание списков из файлов.

4. Закрыть все файлы.
Таблица 3.3.2-Локальные идентификаторы функции loadIT



3.3.3 Описаниеработы подпрограммы sort

Подпрограмма предназначена для сортировки списков по фамилии автора. Обращение к функции происходит и при добавлении нового элемента в список. Входной параметр функции – указатель на начало первого списка.

1. В цикле «пока не конец списка перейти к последующему элементу».

1.2 Если указатель на следующий элемент поля имени автора меньше текущего, то записать в дополнительную переменную dopадрес информационного поля текущего элемента.

1.3 Присвоить полю текущего элемента адрес поля следующего элемента, то есть переписать в текущий элемент данные последующего.

1.4 Присвоить указателю на следующий элемент поля имени автора адрес вспомогательной переменной.
Таблица 3.3.3-Локальные идентификаторы функции sort



3.3.4Описаниеработы подпрограммы vivodSp

Подпрограмма обеспечивает вывод на печать текущего списка. При обращении к ней может вывести содержимое первого или второго списка. Входной параметр – указатель на текущий элемент списка.

В цикле «пока не конец списка», если информационное поле количества книг больше нуля, то распечатать текущий элемент и перейти к следующему.
3.3.5Описаниеработы подпрограммы dobEl

Подпрограмма предназначена для добавления нового элемента в списки. Входные параметры – указатели на текущий элемент первого и второго списков.

1. В циклах «пока указатель на последующий элемент первого и второго списков не пустой»

1.2 Выделить динамически память под добавляемые элементы.

1.3 Считать информационные поля добавляемого элемента.

1.4Приравнять информационные поля элементов первого списка к информационным полям второго.

1.5 Обнулить поле количества книг.

1.6 Для обоих списков обнулить указатель на следующий за добавляемым элемент.

1.7 Приравнять добавленный элемент в первом и втором списках к указателю на последний элемент.

1.8 Присвоить указателю на предыдущий элемент значение последнего элемента.

1.9 Присвоить адрес добавленного элемента последнему.
Таблица 3.3.4-Локальные идентификаторы функции dobEl
--PAGE_BREAK--


3.3.6 Описаниеработы подпрограммы delel

Подпрограмма предназначена для удаления всех записей с введённой фамилией автора. Входные параметры – указатель на указатель на начало первого и второго списков.

1. В цикле «пока не конец файла»:

1.1 Если информационное поле автора у элемента совпадает с введённым именем, то рассматриваются три случая.

1.1.1 Если удаляемый элемент стоит в начале списка, то присвоить указателю на начало списка указатель на следующий за ним элемент списка.

1.1.2 Обнулить ссылку на предыдущий элемент следующего элемента, то есть указатель новой вершины на предыдущий элемент.

1.1.3 Проделать аналогичные действия над вторым списком.

1.2.1 Если следующий элемент за текущим равен нулю, то удаляемый элемент находится в конце списка.

1.2.2 Для обоих списков обнулить ссылку предыдущего элемента на следующий.

1.3.1 Если удаляемый элемент находится в середине списка, то присвоить указатель на предыдущий элемент ссылке на предыдущий элемент у следующего элемента.

1.3.2 Приравнять ссылку на следующий элемент к ссылке на следующий элемент у предыдущего элемента.




Таблица 3.3.5-Локальные идентификаторы функции delel



3.3.7Описаниеработы подпрограммы vidacha

Подпрограмма предназначена для выдачи книги на руки, то есть для уменьшения количества книг в первом списке и увеличения во втором.

Входные параметры функции – указатели на текущие элементы первого и второго списков.

1. Считать фамилию автора и название книги.

2. В цикле «пока не конец списка»

2.1 Если фамилия автора и название книги совпадает с введёнными и количество книг больше 0, то:

2.1.1 Уменьшить на единицу значение количества в информационном поле первого списка

2.1.2 Увеличить на единицу значение количества в поле второго списка

3. Перейти к следующему элементу
Таблица 3.3.6-Локальные идентификаторы функцииvidacha



3.3.8Описаниеработы подпрограммы vozvrat

Подпрограмма обратная функции vidacha. Возвращает указанную книгу автора в библиотеку, то есть уменьшает количество книг во втором списке и увеличения в первом. Входные параметры функции – указатели на текущие элементы первого и второго списков.

1. Считать фамилию автора и название книги.

2. В цикле «пока не конец списка»

2.1 Если фамилия автора и название книги совпадает с введёнными и количество книг больше 0, то:

2.1.1 Уменьшить на единицу значение количества в поле второго списка.

2.1.2 Увеличить на единицу значение количества в поле первого списка.

3. Перейти к следующему элементу.
Таблица 3.3.7-Локальные идентификаторы функцииvozvrat
--PAGE_BREAK--
еще рефераты
Еще работы по информатике