Смекни!
smekni.com

Создание и обработка динамического списка (стр. 1 из 3)

Создание и обработка динамического списка

Пензенский технологический институт (завод-втуз)

Факультет ФСВТ Кафедра Вмис

Пояснительная записка

к курсовой работе по дисциплине:

«Алгоритмические языки и программирование»

на тему

«Создание и обработка динамического списка»

Выполнил: студент группы 02В2

Новокшонов М.С.

Руководитель: Данилина Н.П.

Проект защищен с оценкой ________

Пенза 2003

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. Выбор языка

Язык программирования СИ++ является языком высокого уровня. Язык СИ++ был разработан на основе языка СИ Бьярном Страуструпом. Выбор языка СИ++ для решения данной задачи обусловлен наличием в языке СИ++ средств для динамического распределения памяти.