12 3 Присваиваем указателю на первый элемент списка un и указателю на текущий элемент p значение указателя q. Присваиваем переменной i, которая содержит данные о числе элементов списка и переменной j, которая является параметром последующих циклов значение равное 1: un=q; p=q; j=1; i=1; 4 Открываем цикл с предусловием (условие: переменная j равна 1); в цикле будут выполняться шаги с 5 по 9: while (j==1) 5 Увеличиваем значение переменной i на единицу: i++ 6 Резервируем область оперативной памяти размером равным размеру элемента и присваиваем указателю q адрес этой области: q=new(news); 7 Последовательно вводим данные внутренней структуры, на которую будет указывать указатель q. Ввод будем осуществлять с помощью последовательности операторов ввода scanf 8 Устанавливаем указатель введенного ранее элемента n на элемент, введенный шагом 7, а указателю p значение указателя q: p->n=q; p=q; 9 Вводим новое значение переменной j. Ввод будем осуществлять с помощью оператора ввода scanf 10 Закрываем цикл с предусловием: } 11 Устанавливаем указатель n текущего элемента на NULL: p->n=NULL; 12 Конец процедуры: }
6.3 Процедура вывода данных 0 Начало процедуры: void vivod(); Описываем локальные переменные 1 Устанавливаем указатель p на первый элемент списка, а переменную j, которая будет параметром следующего цикла, устанавливаем в 1: p=un; j=1; 2 Открываем цикл с предусловием (условие: переменная j меньше или равно i); в цикле будет выполняться шаги с 3 по 4: while (jn; j++; 5 Закрываем цикл с предусловием: } 6 Конец процедуры: }
6.4 Процедура удаления элемента заданного по имени 0 Начало процедуры: void dele(); Описываем локальные переменные 1 Указатель текущего элемента p устанавливаем в начало, а указатель первого элемента в списке un устанавливаем на следующий элемент: p=un; un=un->n; 2 Освобождаем область памяти, на которую указывает указатель текущего элемента p: delete p; 3 Значение переменной i, которая содержит данные о числе элементов в списке, уменьшаем на 1: i=i-1; 4 Конец процедуры
6.5 Процедура перемены мест элементов, которые заданы номерами 0 Начало процедуры: void pomen();Описываем локальные переменные 1 Вводим переменную k1, которая указывает на название первого элемента в операции перемены мест. Ввод будем осуществлять с помощью оператора ввода scanf 2 Устанавливаем указатель p на первый элемент списка: p=un; 3 Открываем цикл с заданным числом повторений (j=0…k1); в цикле будет выполняться шаг 4: for(j=1;jn; 5 Закрываем цикл с заданным числом повторений: } 6 Вводим переменную k2, которая указывает на название второго элемента в операции перемены мест. Ввод будем осуществлять с помощью оператора ввода scanf 7 Устанавливаем указатель p2 на первый элемент списка: p2=un 8 Открываем цикл с заданным числом повторений (j=0…k2); в цикле будет выполняться шаг 4: for(j=1;jn;
14 10 Закрываем цикл с заданным числом повторений: } 11 Переменной с присваиваем данные внутренней структуры, на которые указывает указатель текущего элемента p: с=p->g; 12 Данные внутренней структуры, на которые указывает указатель текущего элемента p2, копируем в переменные внутренней структуры, на которые указывает указатель текущего элемента p: p->g=p2->g; 13 Значение переменной g1 присваиваем переменным внутренней структуры, на которые указывает указатель текущего элемента p2: p2->g=с; 14 Конец процедуры: }
15 7. Отладка и тестирование программы
Суть процесса тестирования и отладки программы заключается в проверке правильности программы и исправлении найденных ошибок. В ходе процесса отладки и тестирования возникали следующие ошибки:
Statement missing ; - отсутствие знака конца оператора.
16 Список используемой литературы
1 В. В. Подбельский. Язык СИ++. - М.: Финансы и статистика, 2003. 2 Б. И. Березин, С. Б. Березин. Начальный курс С и С++. – М.: Диалог-МИФИ, 1998.
17
ПРИЛОЖЕНИЕ 1
18
19
20
21
ПРИЛОЖЕНИЕ 2 # include # include # include
struct gaseta{ char n[30]; char s[30]; int st;};
struct news{ games g; play *n;};
play *un,*p,*q;
int i;
void vvod() { int j; q=new(news); printf("Введите данные о 1 статьеn"); printf("Газета: "); scanf("%s",&q->g.n); printf("Статья: "); scanf("%d",&q->g.s); printf("Страница: "); scanf("%d",&q->g.st); un=q; p=q; j=1; i=1; while (j==1) { i++; q=new(news); printf("Введите данные о %d", i ); printf(" игреn"); printf("Газета: "); scanf("%s",&q->g.n); printf("Статья: "); scanf("%d",&q->g.s); printf("Страница: "); scanf("%d",&q->g.st); p->n=q; p=q; printf("Хотите продолжить? 1-да, 2-нетn");
22 scanf("%d",&j); } p->n=NULL; }
void vivod() p=un; printf("+---------------+--------------+-------------+n"); }
void dele() { p=un; un=un->n; delete p; i=i-1; printf("Обработка выполненаn"); }
void pomen() { int j; char k1[30],k2[30]; gaseta c; news *p2; printf("введите первое название газетыn"); scanf("%s",&k1); p=un; while(strcmp(p->g.n,k1)!=0) p=p->n; printf("введите второе название газетыn"); scanf("%s",&k2); p2=un; while(strcmp(p2->g.n,k2)!=0) p2=p2->n; c=p->g; p->g=p2->g; p2->g=c; printf("Обработка выполненаn"); }
23
main () { int a; clrscr(); a=1; while (a!=5) { printf("Нажмите одну из кнопокn"); printf("Ввод данных - 1n"); printf("Вывод данных - 2n"); printf("Удаление первого элемента - 3n"); printf("перемена мест - 4n"); printf("Выход - 5n"); a=getch(); switch(a) { case '1':vvod(); break; case '2':vivod(); break; case '3':dele(); break; case '4':pomen(); break; default: a=5; break; } } return 0; }
24
ПРИЛОЖЕНИЕ 3 Нажмите одну из кнопок Ввод данных - 1 Вывод данных - 2 Удаление данных- 3 Перемена мест - 4 Выход – 5 1 Введите данные о 1 статье Газета: Комсомольская правда Статья: о вреде курения Страница: 12 Введите данные о 2 статье Газета: Пенза плюс тв статья: проблемы Страница: 6 Хотите продолжить? 1-да, 2-нет 1 Газета: Молодой ленинец Статья: наркомания Страница: 8 Хотите продолжить? 1-да, 2-нет 1 Газета: СПИД инфо Статья: беременность Страница: 20 Хотите продолжить? 1-да, 2-нет 1 Газета: московский комсомолец Статья: пенсионная реформа Страница: 9 Хотите продолжить? 1-да, 2-нет 2 Нажмите одну из кнопок Ввод данных - 1 Вывод данных - 2 Удаление данных - 3 Перемена мест - 4 Выход – 5 2 Данные о газетах +---------------+--------------+--------------+ | название | год выпуска | занимаемый объем | | Комсомольская правда | о вреде курения|
12| | Пенза плюс тв | проблемы|
6| | Молодой ленинец | наркомания |
8| | СПИД инфо | беременность|
20| |Московский комсомолец| пенсионная реформа|
9|
25
Нажмите одну из кнопок Ввод данных - 1 Вывод данных - 2 Удаление данных - 3 Перемена мест-4 Выход – 5 3 Удаление выполнено Нажмите одну из кнопок Ввод данных - 1 Вывод данных - 2 Удаление данных - 3 Перемена мест - 4 Выход – 5 2 Данные о газетах +---------------+--------------+--------------+ | название | год выпуска | занимаемый объем | | Пенза плюс тв | проблемы|
Нажмите одну из кнопок Ввод данных - 1 Вывод данных - 2 Удаление данных - 3 Перемена мест - 4 Выход – 5 4 Введите название первой газеты Пенза плюс тв Введите название второй газеты Молодой ленинец Перемена мест выполнена Нажмите одну из кнопок Ввод данных - 1 Вывод данных - 2 Удаление данных - 3 Перемена мест - 4 Выход – 5 2 Данные о газетах +---------------+--------------+--------------+ | название | год выпуска | занимаемый объем | | Молодой ленинец | наркомания |
8| | Пенза плюс тв | проблемы|
6| | СПИД инфо | беременность|
26
Нажмите одну из кнопок Ввод данных - 1 Вывод данных - 2 Удаление данных - 3 Перемена мест - 4 Выход – 5 5
27
----------------------- a
p->n=q; p=q;
void vvod ()
q=new(news)
Ввод q->g.n, q->g.s, q->g.st
un=q; p=q; j=1; i=1;
Цикл 1
Пока (j== 1)
i++; q=new(news);
Ввод j
p->n=NULL;
Конец
a
p=un; j=1;
void vivod ()
Пока (jg.n, q->g.s, q->g.st
p=p->n; j++;
p=un; un=un->n
void dele ()
delete p i=i-1;
Цикл 1 j=1…k1
p=un;
Ввод k1
void pomen ()
p=p->n;
p2=un;
Ввод k2
Цикл 2 j=1…k2
p2=p2->n;
c=p->g; p->g=p2->g; p2->g=c;
b
c
d
e
pomen()
4
vvod()
vivod()
dele()
1
2
3
Ввод a
Пока a!=5
clrscr(); a=1;
Начало
Содержание
1 Постановка задачи 3
2 Разработка метода решения задачи и его формализация 4
3 Разработка состава структуры исходных данных и результата 7
4 Разработка алгоритма 8
5 Выбор языка программирования 12
6 Разработка программы 13
7 Отладка и тестирование программы 18
Список используемой литературы 19
Приложение 1: схема программы 20
Приложение 2: листинг программы 25
Приложение 3: результаты выполнения программы 29
Масса
КР-2201-14-03-ПЗ
Лит.
Масштаб
ПТИ гр.02В2
Изм
Лист
№ докум.
Подпись
Дата
Разраб.
Пров.
Н.-конт.
Утв.
Т.-конт.
Лист 2
Листов 27
Данилина Н.П.
Новокшонов МС
Создание и обработка динамического списка.
Пояснительная записка
Указатель на первый элемент
Внутренняя структура
Указатель на следующий элемент
NULL
Страницы: 1, 2