1. Постановка задачи
В данной курсовой работе необходимо на языке программирования написать программу, которая выполняет следующие действия:
o Создание однонаправленного динамического списка содержащего сведения о книгах
o Вывод данных однонаправленного динамического списка на экран
o Удаление первого элемента однонаправленного динамического списка.
o Перемена мест элементов однонаправленного динамического списка, которые заданы ключами.
Программу построить по процедурному принципу, пользовательский элемент оформить в виде меню.
3
2. Разработка метода решения задачи и его формализация
1) В данной программе будут использоваться следующие глобальные переменные:
n – массив 30 переменных типа char. Несет информацию о названии газеты.
s – массив 30 переменных типа char. Несет информацию о названии статьи
st – переменная типа int. Несет информацию о номере страницы.
Все эти переменные являются элементами структуры gaseta:
struct games {
char n[30];
char s[30];
int st;};
g – переменная типа gaseta. Несет полную информацию о газете.
n – указатель на структуру news.
Все эти переменные являются элементами структуры news:
struct news{
gaseta g;
news *n;};
un – указатель на структуру news. Несет информацию об адресе первого элемента однонаправленного динамического списка.
p – указатель на структуру news. Несет информацию об адресе текущего элемента однонаправленного динамического списка.
q – указатель на структуру news. Несет информацию об адресе последнего созданного элемента однонаправленного динамического списка.
news *un,*p,*q;
i – переменная типа int. Несет информацию о количестве элементов однонаправленного динамического списка.
int i;
4
2) Локальные переменные процедуры ввода данных:
j – переменная типа int. Эта переменная является параметром всех циклов используемых в данной процедуре.
int j;
3) Локальные переменные процедуры вывода данных:
j – переменная типа int. Эта переменная является параметром всех циклов используемых в данной процедуре.
int j;
4) Локальные переменные процедуры удаления первого элемента списка:
У данной процедуры нет локальных переменных.
5) Локальные переменные процедуры перемены мест элементов, которые заданы по названию:
j – переменная типа int. Эта переменная является одним параметром всех циклов используемых в данной процедуре.
int j;
k1 – переменная типа char. Несет информацию о названии первой газеты, место которой будем менять.
k1 – переменная типа cnar. Несет информацию о названии второй газеты, место которой будем менять.
char k1[30],k2[30];
p2 – указатель на структуру news. Несет информацию об адресе второго текущего элемента однонаправленного динамического списка.
news *p2;
c - переменная типа gaseta. Несет полную информацию об игре.
gaseta c;
5
6) Локальные переменные основной части программы:
a – переменная типа int. Несет информацию о текущей процедуре и является параметром цикла и оператора множественного выбора.
int a;
6
3. Разработка состава и структуры исходных данных и результата
Исходные данные и результат представляют собой однонаправленный динамический список. Элементом списка будет являться структура, состоящая из внутренней структуры и указателя на следующий элемент списка. Внутренняя структура состоит из полей:
1) название газеты (тип char)
2) название статьи (тип char)
3) номера страниц (тип int)
На экране исходные данные будут представлены:
Введите данные о 1 статье
Название: Комсомольская правда
Статья: О вреде курения
Страница: 12
………………………………
Результат будет представлен в виде таблицы:
╔═══════════════╦══════════════╦══════════════╗
║ газета ║ статья ║ страница ║
║Комсомольская правда ║ О вреде курения ║ 12 ║
7
4. Разработка алгоритма
4.1 Основная часть программы.
0. Начало
1 Очищаем экран
2 Присваиваем переменной а, которая является параметром последующего цикла и оператора множественного выбора значение равное единицы
3 Открываем цикл с предусловием (условие: переменная а не равна 5); в цикле будут выполняться шаги с 4 по 11
4 Вводим переменную а
5 Выполняем оператор множественного выбора с параметром а; оператор включает шаги с 6 по 10
6 Если а=1, вызываем процедуру ввода данных
7 Если а=2, вызываем процедуру вывода данных
8 Если а=3, вызываем процедуру удаления первого элемента
9 Если а=4, вызываем процедуру перемены мест элементов, которые заданы названиями
10 Если а не равно не одному из указанных раннее значений, то а присваиваем значение 5
11 Закрываем оператор множественного выбора
12 Закрываем цикл с предусловием
13 Конец
4.2 Процедура ввода данных
0 Начало процедуры
1 Резервируем область оперативной памяти размером равным размеру элемента и присваиваем указателю на последний элемент q адрес этой области.
2 Последовательно вводим данные внутренней структуры, на которую будит указывать указатель q.
3 Присваиваем указателю на первый элемент списка un и указателю на текущий элемент p значение указателя q. Присваиваем переменной i, которая содержит данные о числе элементов списка и переменной j, которая является параметром последующих циклов значение равное 1
4 Открываем цикл с предусловием (условие: переменная j равна 1); в цикле будут выполняться шаги с 5 по 9
8
5 Увеличиваем значение переменной i на единицу
6 Резервируем область оперативной памяти размером равным размеру элемента и присваиваем указателю q адрес этой области
7 Последовательно вводим данные внутренней структуры, на которую будит указывать указатель q
8 Устанавливаем указатель введенного ранее элемента n на элемент, введенный шагом 7, а указателю p значение указателя q
9 Вводим новое значение переменной j
10 Закрываем цикл с предусловием
11 Устанавливаем указатель n текущего элемента на NULL
12 Конец процедуры
4.3 Процедура вывода данных
0 Начало процедуры
1 Устанавливаем указатель p на первый элемент списка, а переменную j, которая будет параметром следующего цикла, устанавливаем в 1
2 Открываем цикл с предусловием (условие: переменная j меньше или равно i); в цикле будет выполняться шаги с 3 по 4
3 Последовательно выводим данные внутренней структуры, на которую будит указывать указатель p
4 Указатель текущего элемента p устанавливаем на следующий элемент, а значение переменной j увеличиваем на 1
5 Закрываем цикл с предусловием
6 Конец процедуры
4.4 Процедура удаления первого в списке элемента
0 Начало процедуры
1 Указатель текущего элемента p устанавливаем в начало, а указатель первого элемента в списке un устанавливаем на следующий элемент
2 Освобождаем область памяти, на которую указывает указатель текущего элемента p
9
3 Значение переменной i, которая содержит данные о числе элементов в списке, уменьшаем на 1
4 Конец процедуры
4.5 Процедура перемены мест элементов, которые заданы номерами
0 Начало процедуры
1 Вводим переменную k1, которая указывает на название первого элемента в операции перемены мест
2 Устанавливаем указатель p на первый элемент списка.
3 Открываем цикл с заданным числом повторений (j=0…k1); в цикле будет выполняться шаг 4
4 Указатель на текущий элемент p устанавливаем на следующий элемент списка
5 Закрываем цикл с заданным числом повторений
6 Вводим переменную k2, которая указывает на название второго элемента в операции перемены мест
7 Устанавливаем указатель p2 на первый элемент списка.
8 Открываем цикл с заданным числом повторений (j=0…k2); в цикле будет выполняться шаг 4
9 Указатель на текущий элемент p2 устанавливаем на следующий элемент списка
10 Закрываем цикл с заданным числом повторений
11 Переменной с присваиваем данные внутренней структуры, на которые указывает указатель текущего элемента p
12 Данные внутренней структуры, на которые указывает указатель текущего элемента p2, копируем в переменные внутренней структуры, на которые указывает указатель текущего элемента p.
13 Значение переменной с присваиваем переменным внутренней структуры, на которые указывает указатель текущего элемента p2.
14 Конец процедуры
10
5. Выбор языка
Язык программирования СИ++ является языком высокого уровня. Язык СИ++ был разработан на основе языка СИ Бьярном Страуструпом. Выбор языка СИ++ для решения данной задачи обусловлен наличием в языке СИ++ средств для динамического распределения памяти.