|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Обработка динамических структурОбработка динамических структурМинистерство образования РФМосковский авиационный институт(государственный технический университет)филиал "Восход"Кафедра МиПОИС Отчет по курсовой работе "Обработка динамических структур" по дисциплине: Программирование на языках высокого уровня Студента гр. ДА 2-40Воронцов О. В.Байконур 2006г.АннотацияВ данной курсовой работе представлена реализация программы, для обработки динамической структуры данных, содержащей сведения об авторах книг. Программа, разработанная в среде Turbo C++ 3.0, моделирует работу со структурой как с базой данных.СодержаниеВведение1. Постановка задачи2. Метод решения2.1 Общая схема работы программы2.2 Метод сортировки3. Разработка алгоритмов решения задачи3.1 Общая схема алгоритма3.2 Стандартные процедуры и функции, используемые в программе3.3 Описание работы пользовательских подпрограмм3.3.1 Описание работы подпрограммы vvodSp3.3.2 Описание работы подпрограммы loadIT3.3.3 Описание работы подпрограммы sort3.3.4 Описание работы подпрограммы vivodSp3.3.5 Описание работы подпрограммы dobEl3.3.6 Описание работы подпрограммы delel3.3.7 Описание работы подпрограммы vidacha3.3.8 Описание работы подпрограммы vozvrat3.3.9 Описание работы подпрограммы saveIT3.3.10 Описание работы основной программы4. Руководство пользователя5. Анализ результатовЗаключениеСписок литературыПриложенияВведениеВ данном отчёте представлено решение задачи с помощью языка программирования С.В первом разделе отчёта представлена постановка задачи. Второй раздел содержит метод решения программы. Третий раздел отчёта - алгоритм работы программы, включая алгоритм работы интерфейса программы и десяти основных подпрограмм. В четвёртом разделе рассматривается подробное руководство пользователя. Пятый раздел содержит анализ результатов. В листинге (приложение Д) представлен полный текст программы с комментариями.1. Постановка задачиТребуется сделать обработку картотеки библиотеки. Для этого следует:а) Создать список (не менее 10 записей) со следующей структурой:- фамилия и инициалы автора- название книги- год издания- количество экземпляров данной книги в библиотекеИспользовать двусвязный список.б) Реализовать следующие действия:- Отсортировать список по фамилиям авторов книг методом простого обмена;- Добавить в картотеку новую книгу, не нарушая алфавитный порядок;- Удалить из картотеки книги заданного автора;- По фамилии автора и названию книги выдать книгу на руки, то есть уменьшить значение количества книг на единицу или выдать сообщение о том, что требуемой книги нет или требуемая книга находится на руках. Для этого должен формироваться список книг, находящихся на руках у читателей, после каждой выдачи книги;- По фамилии автора и названию книги возвратить книгу в библиотеку, отслеживая количество книг в обоих списках;- Сохранить полученные списки в файл.в) Действия со списком оформить в виде отдельных функций.2. Методы решения задачи2.1 Общая схема работы программыЦелесообразно для решения задачи использовать два списка. Первый список будет хранить информацию о книгах, хранящихся в библиотеке, а второй - о выданных на руки. Для этого будет произведено присваивание информационных полей первого списка второму, а затем поле записи количества книг во втором списке будет обнулено (так как в начале книг на руках нет). Уменьшение количества книг в одном списке будет сопровождаться увеличением во втором и наоборот. Например, после выдачи книги на руки счётчик количества экземпляров во втором списке увеличится на единицу, а в первом уменьшится на единицу. При выводе на печать второго списка следует оговорить, чтобы на экране появлялись только те книги, количество которых в этом списке больше нуля.При добавлении нового элемента будет осуществляться сортировка в обоих списках, следовательно, алфавитный порядок нарушен не будет.Так как требуется провести ряд действий со списком, то рационально организовать текстовое меню (его вид приведен в таблице 1.1). Меню будет представлено вертикально расположенными строками, каждая строка - отдельный пункт меню. Выбор пункта меню будет осуществляться путём введения с клавиатуры его порядкового номера. Для считывания введенного символа требуется зарезервировать переменную n, хранящую код нажатой клавиши. Выбор любого пункта меню будет активировать соответствующую функцию.В процессе создания списка будут заполняться информационные поля каждого элемента. Информационные поля будут включать данные об авторе книги, её названии, годе издания и количестве экземпляров в библиотеке. Более подробно создание списка описано в пункте 3.3.1.Оба списка можно будет записать в файлы, которые будут храниться на диске. Это позволит не вводить информацию заново при каждом запуске программы, а просто считать её из файлов. Путь к файлам можно задать отдельно.Пример выполнения менюВведите номер пункта для выполнения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
Анализируя полученное задание, я выбрал метод решения поставленной задачи, на основе которого получил алгоритмы в виде блок-схем (приложения А, Б, В, Г, Д). Преимущество блок-схем состоит в их наглядности. Кодирование алгоритмов осуществлено на языке программирования С. Листинг программы представлен в приложении Д. Преимущество программы состоит в простой организации пользовательского интерфейса, в удобстве ввода сведений авторах и книгах. Программа сортирует список по имени автора в алфавитном порядке, позволяет выдать книгу на руки, вернуть её назад в библиотеку и удалить все книги выбранного автора из картотеки. Возможно, что применение данной программы на практике (в существенно более доработанной форме) может оптимизировать работу персонала библиотек или учреждений, в которых требуется работа с большими базами данных. Недостатки программы: - на разных ЭВМ работа с файлами осуществляется по-разному. То есть при работе на одном ЭВМ задача может идеально реализовываться, а на другом выполняться, но с ошибками. Скорее всего, это вызвано разницей в версиях ТС или недоработкой разработчиков. - при вводе в командной строке меню некорректных данных, для которых не предусмотрены действия, программа работать не будет, а в некоторых случаях возможно зацикливание, что может привести как к выходу из процесса компиляции, так и к полному выходу из интегрированной среды программирования с потерей текущих данных, что нежелательно. Список литературы 1. Н. Б. Культин, С/С++ в задачах и примерах, СПб: БХВ-Петербург, 2001. 2. А. Б. Крупник, Изучаем С++, Спб: Питер, 2003. 3. С. Р. Дэвис, С++ для "чайников", М.: "Вильямс", 2004. 4. Т.А. Павловская, С/С++. Программирование на языке высокого уровня, Спб: Питер, 2005. Приложение А Листинг программы #include <stdio.h> #include <alloc.h> #include <conio.h> #include <string.h> typedef struct AsFalonour //создание нового типа запись для хранения информационных полей элемента списка { int kol; //количество книг в картотеке char nazv[20]; //название книги int god; //год издания char avt[20]; //фамилия автора книги } book; //имя созданного типа typedef struct spisok //создание нового типа запись для хранения информации элемента списка { book inf; //информационные поля struct spisok* next; //указатель на следующий элемент списка struct spisok* pred; //указатель на предыдущий элемент списка } el; //имя созданного нового типа //-------------------------------------------------------------\\ el* vvodSp(el **top2) //создание списка { char s[3]={'y','e','s'}; //переменная для хранения ответа на вопрос о продолжении ввода списка el *cur,*pr,*top,*tail,*tail2,*cur2; //указатель clrscr(); *top2=top=tail=tail2=NULL; //обнуление указателей на начало и хвост списков printf("Введите первую запись\n"); while(strcmp(strlwr(s),"no")!=0) //пока ответ не равен no { cur=(el*)malloc(sizeof(el)); //выделяем память под новый элемент (далее текущий) cur->next=NULL; //обнуление указателя на следующий элемент текущего элемента cur->pred=tail; //указатель на предыдущий элемент текущего элемента присваивается хвосту списка if(top==NULL) top=cur; //если указатель на начало списка пуст то указателем на начало списка становится текущий элемент else tail->next=cur; //если нет, то указателем на хвост списка становится текущий элемент tail=cur; //указатель на хвост приравнивается текущему элементу cur2=(el*)malloc(sizeof(el)); //выделяется память под новый элемент второго списка, выполняются те же действия cur2->next=NULL; cur2->pred=tail2; if((*top2)==NULL) (*top2)=cur2; // *top2 это указатель на указатель else tail2->next=cur2; tail2=cur2; printf("Введите фамилию и инициалы автора:\n"); //ввод информационных полей scanf("%s",cur->inf.avt); printf("Введите название книги:\n"); scanf("%s",cur->inf.nazv); printf("Введите год издания книги:\n"); scanf("%d",&cur->inf.god); while(cur->inf.god<0) { printf("Год издания не может быть отрицательным числом! Введите повторно!\n"); //проверяется, положителен ли год scanf("%d",&cur->inf.god); //повторный ввод } printf("Введите количество экземпляров книги:\n"); //аналогичное с количеством scanf("%d",&cur->inf.kol); while(cur->inf.kol<0) { printf("Количество книг не может быть отрицательным числом! Введите повторно!\n"); scanf("%d",&cur->inf.kol); } cur2->inf=cur->inf; //копировние информационных полей элемента первого списка в элемент второго списка cur2->inf.kol=0; //количество выданных книг в начале равно 0 printf("Введете еще одну запись?(для выхода напишите no; для продолжения-yes)\n"); scanf("%s",s); while(strcmp(strlwr(s),"no")!=0&&strcmp(strlwr(s),"yes")!=0) //пока не введён правильный вариант { printf("Вы неверно ввели свой выбор, введите, пожалуйста, его еще раз\n"); scanf("%s",s); //повторный ввод } } return top; //возвращение указателя на начало первого списка } //-----------------------------------------------------\\ void vivodSp(el *cur) //вывод списка { clrscr(); printf("Текущий список:\n"); if(cur==NULL) printf("Перед тем, как выводить список, необходимо его создать!"); else { printf("Фамилия автора\tНазвание книги\tГод издания\tКоличество экземпляров\n"); while(cur!=NULL) //печать списка пока не достигнут конец списка, если количество книг больше нуля (нужно для второго списка) { if(cur->inf.kol>0) printf(" %s\t\t\t%s\t %d\t\t\t %d\n",cur->inf.avt,cur->inf.nazv,cur->inf.god,cur->inf.kol); cur=cur->next; //переход к следующему элементу } } getch(); } //--------------------------------------------------------------\\ void vidacha(el *cur,el *cur2) { char iskA[10],iskN[10]; int n=0; //результат поиска clrscr(); if(cur==NULL) printf("Перед тем, как производить выдачу книг, необходимо создать список!"); else { printf("Введите интересующего Вас автора:\n"); //ввод искомого автора и книги scanf("%s",iskA); printf("Введите интересующую Вас книгу:\n"); scanf("%s",iskN); while(cur!=NULL) //пока не конец списка { if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur->inf.kol>0) //если элемент содержит сведения о нужной книге и есть свободные в наличии { cur->inf.kol--; //уменьшаем количество в первом списке cur2->inf.kol++; //и увеличиваем во втором n++; //поиск успешен printf("Книга выдана на руки!"); break; //конец поиска } else if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur->inf.kol==0) //если свободных нет { printf("Все книги находятся на руках!"); n++; //поиск успешен break; //конец поиска } cur=cur->next; //переход к следующем элементу } if(n==0) printf("Такой книги вообще нет!"); } getch(); } //---------------------------------------------------------------------\\ void dobEl(el *cur, el *cur2) //добавление нового элемента {el *x,*x2; clrscr(); if(cur==NULL) printf("Перед тем, как добавлять элементы в список, необходимо его создать!"); else { while(cur->next!=NULL) cur=cur->next; //поиск конца списка while(cur2->next!=NULL) cur2=cur2->next; //аналогично со вторым x=(el*)malloc(sizeof(el)); //выделение памяти под новый элемент x2=(el*)malloc(sizeof(el)); //аналогичный действия для второго списка printf("Введите данные на новый элемент:\n"); //ввод информационных полей printf("Введите фамилию и инициалы автора:\n"); scanf("%s",x->inf.avt); printf("Введите название книги:\n"); scanf("%s",x->inf.nazv); printf("Введите год издания книги:\n"); scanf("%d",&x->inf.god); while(x->inf.god<0) { printf("Год издания не может быть отрицательным числом! Введите повторно!\n"); scanf("%d",&x->inf.god); } printf("Введите количество экземпляров книги:\n"); scanf("%d",&x->inf.kol); while(x->inf.kol<0) { printf("Количество книг не может быть отрицательным числом! Введите повторно!\n"); scanf("%d",&x->inf.kol); } x2->inf=x->inf; //копирование информационных полей x2->inf.kol=0; //в начале количество выданных книг-0 printf("Новый элемент добавлен!\n"); x->next=NULL; //обнуление указателя на следующий элемент добавляемого элемента cur->next=x; //последний (пока что последний)элемент списка указывает на следующий элемент (добавляемый) x->pred=cur; //указатель на предыдущий элемент нового элемента равен последнему cur=x; //теперь добавленный элемент-последний x2->next=NULL; //аналогично для второго списка cur2->next=x2; x2->pred=cur2; cur2=x2; } } //---------------------------------------------------------------------\\ void delel(el **top,el **top2) //удаление элементов { el *cur=*top,*cur2=*top2; //текущие указатели списков равны указателям на вершины списков int n=0; //результат поиска char isk[20]; //фамилия искомого автора clrscr(); if(cur==NULL) printf("Перед тем, как удалять элементы из списка, создайте его!\n"); else { printf("Введите фамилию автора, книги которого должны быть удалены:\n"); scanf("%s",isk); //ввод фамилии искомого автора(он же удаляемый) while(cur!=NULL) //пока не конец списка { if(strcmp(cur->inf.avt,isk)==0) //если фамилия автора у элемента совпадает с введенной { n++; //поиск успешен if(cur==*top) //если удаляемый элемент-вершина { *top=(*top)->next; //вершиной становится следующий элемент cur->next->pred=NULL;и //обнуление указателя новой вершины на предыдущий элемент free(cur); //освобождение памяти под старую вершину *top2=(*top2)->next; //по аналогии для второго cur2->next->pred=NULL; free(cur2); } else if(cur->next==NULL) //если это-последний элемент списка { cur->pred->next=NULL; //ссылка предпоследнего элемента на следующий обнуляется free(cur); //память под старый конец списка освобождается cur2->pred->next=NULL; //аналогично для второго free(cur2); } else { cur->next->pred=cur->pred; //ссылка на следующий элемент у предыдущего элемента (относительно удаляемого) приравнивается следующем элементу cur->pred->next=cur->next; //ссылка на предыдущий элемент у следующего элемента (относительно удаляемого) приравнивается предыдущему элементу free(cur); //память освобождается cur2->next->pred=cur2->pred; //то же для второго cur2->pred->next=cur2->next; free(cur2); } } cur=cur->next; //переход к следующему элементу cur2=cur2->next; //аналогично } printf("Было удалено %d книг данного автора",n); } getch(); } //---------------------------------------------------------------------\\ void vozvrat(el *cur,el *cur2) //возвращение элемента { char iskA[10],iskN[10]; int n=0; clrscr(); if(cur==NULL) printf("Перед тем, как производить поиск в списке, необходимо его создать!"); else { printf("Введите интересующего Вас автора:\n"); scanf("%s",iskA); printf("Введите интересующую Вас книгу:\n"); scanf("%s",iskN); while(cur!=NULL) { if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur2->inf.kol>0) //если есть книги на руках (кол-во>0) { cur->inf.kol++; //увеличивается в первом списке количество cur2->inf.kol--; //уменьшается во втором n++; printf("Книга возвращена!"); break; } else if((strcmp(cur->inf.avt,iskA)==0)&&(strcmp(cur->inf.nazv,iskN)==0)&&cur2->inf.kol<=0) //если книг на руках нет { printf("Все свои книги дома! Чужих нам не надо)))"); n++; break; } cur=cur->next; cur2=cur2->next; } if(n==0) printf("К сожалению, ни одной такой книги не найдено!\n"); } getch(); } //---------------------------------------------------------------------\\ void sort(el *top) //сортировка { int k=1; //вспомогательный элемент, показывает были ли перестановки или нет el* cur; //указатель на текущий элемент book dop; //переменная для временного хранения данных (используется при сортировке) clrscr(); if(top==NULL) printf("Перед тем, как сортировать список, необходимо его создать!"); else { while(k!=0) //пока не будет перестановок { k=0; //перстановок нет for(cur=top;cur->next!=NULL;cur=cur->next) //пока указатель на следующий элемент у текущего не равен NULL if(strcmp(cur->inf.avt,cur->next->inf.avt)>0) //если следующий элемент меньше, чем текущий { dop=cur->inf; //занесение в буфер данных текущего элемента cur->inf=cur->next->inf; //переписывание в текущий данные следующего cur->next->inf=dop; //переписывание в следующий данные из буфера k=1; //перестановки есть } } } } //---------------------------------------------------------------------\\ void saveIT(el *cur,el *cur2) //сохранение в файл { FILE *f1,*f2; //файлы f1=fopen("Base.txt","wb"); //файл для первого списка f2=fopen("Out.txt","wb"); //для второго if(f1==NULL||f2==NULL) printf("Чтоё-то не грузится: глюк)"); else { while(cur!=NULL) //пока не конец списка { fwrite(&cur->inf,sizeof(el),1,f1); //запись данных текущего элемента в файл fwrite(&cur2->inf,sizeof(el),1,f2); //то же cur=cur->next; //переход к следующему элементу cur2=cur2->next; //то же } printf("Списки сохранены успешно!"); fcloseall(); //закрытие файлов } getch(); } //---------------------------------------------------------------------\\ void loadIT(el **top,el **top2) //чтение файлов { el *cur,*pr,*tail,*tail2,*cur2; //указатели FILE *f1,*f2; //файлы clrscr(); *top2=*top=tail=tail2=NULL; //обнуление ссылок на хвост и вершину f1=fopen("Base.txt","rb"); //открытие файла Base.txt f2=fopen("Out.txt","rb"); //открытие файла Out.txt if(f1==NULL||f2==NULL) printf("Чтоё-то не грузится: глюк)");//если файлов нет else { while(!feof(f1)) //пока не конец файла { cur=(el*)malloc(sizeof(el)); //выделение памяти под новый элемент (далее текущий) cur->next=NULL; //обнуление указателя на следующий элемент текущего элемента cur->pred=tail; //присваивание указателя на предыдущий элемент текущего элемента хвосту списка if((*top)==NULL) (*top)=cur; //если указатель на начало списка пуст, то указателем на начало списка становится текущий элемент else tail->next=cur; //если нет, то указателем на хвост списка становится текущий элемент tail=cur; //указатель на хвост становится приравнивается текущему элементу cur2=(el*)malloc(sizeof(el)); //аналогично для второго элемента cur2->next=NULL; cur2->pred=tail2; if((*top2)==NULL) (*top2)=cur2; else tail2->next=cur2; tail2=cur2; fread(&cur->inf,sizeof(el),1,f1); //считывание с файла fread(&cur2->inf,sizeof(el),1,f2); } fcloseall(); //закрываем файлы printf("Списки успешно загружены из файлов!"); } getch(); } //---------------------------------------------------------------------\\ void main() //основная программа { int n=0; el *top=NULL,*top2=NULL; while(n!=11) { clrscr(); printf("Введите номер пункта для выполнения:\n"); printf("1.Заполнить список\n"); printf("2.Загрузить списки из файлов\n"); printf("3.Отсортировать текущий список\n"); printf("4.Вывести текущий список\n"); printf("5.Вывести текущий список выданных на руки книг\n"); printf("6.Добавить новый элемент\n"); printf("7.Удалить из списка книги заданного автора\n"); printf("8.Выдать книгу на руки\n"); printf("9.Вернуть книгу в библиотеку\n"); printf("10.Сохранить списки в файл\n"); printf("11.Выход из программы\n"); printf("Ваш выбор:\n"); scanf("%d",&n); while(n>11||n<1) { printf("Такого пункта нет! Введите повторно:\n"); scanf("%d",&n); } if(n==1) top=vvodSp(&top2); else if(n==2) loadIT(&top,&top2); else if(n==3) {sort(top); sort(top2);} else if(n==4) vivodSp(top); else if(n==5) vivodSp(top2); else if(n==6) {dobEl(top,top2); sort(top); sort(top2);} else if(n==7) delel(&top,&top2); else if(n==8) vidacha(top,top2); else if(n==9) vozvrat(top,top2); else if(n==10) saveIT(top,top2); } } Приложение Б Результаты работы программы |
РЕКЛАМА
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |