- •Описание структуры
- •Описание списка
- •Контрольные примеры
- •Описание переменных главной функции
- •Краткое описание алгоритма
- •Описание функций Описание функции vvod
- •Описание функции vivod
- •Описание функции obrabotka
- •Описание функции sortirovka
- •Описание функции dobav
- •Описание функции ydal
- •Описание функции vivod2
- •Описание функции f_s
- •Описание функции The_end
- •Иерархическая структура программы
- •Код программы на языке c
- •Результаты выполнения программы
Федеральное государственное бюджетное образовательное учреждение высшего
профессионального образования
«Санкт-Петербургский государственный электротехнический
университет «ЛЭТИ» им. В.И.Ульянова (Ленина)»
Факультет компьютерных технологий и информатики
Кафедра вычислительной техники
Отчет
по лабораторной работе № 2
на тему «Односвязные списки»
по дисциплине «Программирование»
Выполнил:
Проверила: к.т.н., доцент Сискович Т.И.
Санкт-Петербург
2013 г.
Цель работы
Получение практических навыков в работе с односвязными списками.
Задание
Написать программу для выполнения типовых действий с односвязными списками: добавление элементов в список, вывод информационных полей на экран, удаление элементов списка, обработка списка, сортировка элементов списка.
Уточнение задания
Состав списка и структуры, которая является одним из полей списка, задается программистом. Пользователь вводит информационные поля списка. Условия для обработки – элементы списка, в которых значение поля «goals» поля «info» больше значения, заданного пользователем. Так же возможна сортировка исходного списка, заключающаяся в распределении элементов списка в порядке возрастания или убывания значений одного из полей «goals” или “age” поля «info». Поле для сортировки и тип сортировки выбирает пользователь.
Возможно добавление элемента в уже существующий список и удаление элемента из списка. Место, в которое нужно добавить выбирает пользователь (в начало, в конец, после заданного), элемент, который нужно удалить так же выбирает пользователь.
Описание списка и структуры приведено в следующем пункте.
Описание структуры
Шаблон:
structfootball
{
char*name; // Имя, фамилия футболиста
int age; // Возраст футболиста
int goals; // Кол-во голов
};
где первое поле типа char* - адрес первой буквы имени, фамилии футболиста, второе поле типаint– возраст футболиста, третье поле типаint– количество забитых за всю карьеру голов.
Имя структуры: football.
Имя нового типа: NT.
Пример объявления переменной типа NT: NT *players=NULL.
Описание списка
Шаблон:
structlist
{
NT info;
struct list *next;
}SP;
где первое поле – данные типа NT, второе поле указатель типа struct list *.
Имя структуры, задающей список: list.
Пример объявления переменной-указателя типа SP: SP *h1=NULL.
Контрольные примеры
Контрольные примеры обработки приведены в таблице 1 «Контрольные примеры обработки».
Таблица 1. Контрольные примеры обработки
№ п.п. |
Исходные данные |
Условие обработки |
Результат | ||||||
Имя |
Возраст |
Кол-во голов |
Имя |
Возраст |
Кол-во голов | ||||
1 |
Ronaldo |
28 |
390 |
>300 |
Ronaldo |
28 |
390 | ||
Messi |
25 |
341 |
Messi |
25 |
341 | ||||
Fàbregas |
25 |
80 |
|
|
| ||||
2 |
Ronaldo |
28 |
390 |
>350 |
Ronaldo |
28 |
390 | ||
Messi |
25 |
341 |
|
|
| ||||
Zidan |
40 |
140 |
|
|
|
Контрольные примеры сортировки по полю goalsприведены в таблице 2 «Контрольные примеры сортировки».
Таблица 2. Контрольные примеры сортировки
№ п.п. |
Исходные данные |
Тип сортировки |
Результат | ||||||
Имя |
Возраст |
Кол-во голов |
Имя |
Возраст |
Кол-во голов | ||||
1 |
Ronaldo |
28 |
390 |
По возрастанию |
Fàbregas |
25 |
80 | ||
Messi |
25 |
341 |
Messi |
25 |
341 | ||||
Fàbregas |
25 |
80 |
Ronaldo |
28 |
390 | ||||
2 |
Ronaldo |
28 |
390 |
По убыванию |
Ronaldo |
28 |
390 | ||
Messi |
25 |
341 |
Messi |
25 |
341 | ||||
Zidan |
40 |
140 |
Zidan |
40 |
140 |
Описание переменных главной функции
Описание переменных главной функции приведено в таблице 3.
Таблица 3. Описание переменных главной функции
Имя переменной |
Тип переменной |
Назначение |
k, q, z |
int |
Вспомогательные переменные |
pm, pm2 |
int |
Переменные для выбора пунктов меню |
c, ch |
char |
Переменные, управляющие циклом |
h1, rez |
SP * |
Указатели |
Краткое описание алгоритма
При разработке алгоритма предусмотрен контроль над выполнением пунктов меню.
1) Пользователь выбирает один из пунктов меню: 1 – ввод данных; 2 – вывод данных; 3 – обработка; 4 – добавление элемента; 5 – удаление элемента ; 6 – сортировка; 7 – вывод информационных полей элемента слева и справа от заданного; 0 - выход.
2) Если пользователь выбирает первый пункт меню, выполняется:
2.1) ввод имени, переход к пункту 2.2;
2.2) ввод возраста, переход к пункту 2.3;
2.3) ввод количества голов, переход к пункту 2.4;
2.4) вывод сообщения «Завершить ввод?(n/y)».
2.5) если сh==n, переход к пункту 2.1; если сh!=n, переход к пункту 1.
3) Если пользователь выбирает второй пункт меню, вывод данных переход к пункту 1.
4) Если пользователь выбирает третий пункт меню, выполняется обработка по заданному пользователем условию, переход к пункту 1.
5) Если выбран четвертый пункт меню, выполняется добавление элемента в список.
6) Если выбран 5 пункт, выполняется удаление элемента из списка.
7) Если выбран 6 пункт меню, выполняется сортировка элементов списка, переход к пункту 1.
8) Если выбран 7 пункт меню, завершение программы.
9) Если не выбран ни одни из 2-8 пунктов, вывод сообщения «Ошибка, выберете пункт меню снова».