Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Пример на многомерные динамические массивы

Читайте также:
  1. I период развития менеджмента - древний период. Наиболее длительным был первый период развития управления - начиная с 9-7 тыс. лет до н.э. примерно до XVIII в.
  2. II. Пример определения контрактной цены на санитарных рубок
  3. III. Первоначальное накопление капитала (особенности, примеры)
  4. Lt;variant>носит примерный характер
  5. RAID-массивы
  6. V. Соотношение содержания стандартов и примерных программ
  7. V2: Бронхообструктивный синдром (на примере хр. обструктивного бронхита, бронхиальной астмы).
  8. V2: Мочевой синдром (на примере острого гломерулонефрита, хронического гломерулонефрита, осторого пиелонефрита, хронического пиелонефрита)..
  9. VI. Примерные вопросу к зачету /экзамену/ по логике.
  10. VII. ПРИМЕРНЫЙ ПЕРЕЧЕНЬ ВОПРОСОВ К ЭКЗАМЕНУ ПО КУРСУ

/*

Рассмотрим следующую задачу: необходимо создать массив, позволяющий создавать строки и работать с ними (аналог справочника). Для работы с этим массивом строк определен такой набор операций:

*/

#include <iostream.h>#include <string.h> // Набор констант, представляющих различные пункты менюenum {ChoiceAddEnd=1, ChoiceInsert, ChoiceDelete, ChoiceDeleteAll, ChoicePrint, ChoiceQuit}; int Menu(); // Вывод менюchar** AddLine(char**, int&); // Добавление строки в конец массиваchar** InsLine(char**, int&); // Вставка строки в массивchar** DelLine(char**, int&); // Удаление указанной строки из массиваvoid DelAllLines(char**, int&); // Удаление всех строк массиваvoid Print(char**, int); // Распечатка строк массиваbool IsArrayEmpty(int&); // Проверка на наличие строк в массиве void main(){ char **c; // Массив строк int m = 0; // Начальное количество строк массива int choice = ChoiceAddEnd; while (choice!= ChoiceQuit) // Пока не выбран пункт ВЫХОД { choice = Menu(); // Вывод меню cin.ignore(1); // Очистка потока ввода switch (choice) // Выбор пункта меню { case ChoiceAddEnd: c = AddLine(c, m); // Добавление строки в конец массива break; case ChoiceInsert: c = InsLine(c, m); // Вставка строки в массив break; case ChoiceDelete: if (!IsArrayEmpty(m)) // Если массив не пуст c = DelLine(c, m); // Удаление строки break; case ChoiceDeleteAll: if (!IsArrayEmpty(m)) // Если массив не пуст DelAllLines(c, m); // Удаление всех строк массива break; case ChoicePrint: if (!IsArrayEmpty(m)) // Если массив не пуст Print(c, m); // Распечатка массива break; case ChoiceQuit: break; default: // В остальных случаях cout<<"Error in choice!\n"; break; } }} char** AddLine(char **c, int &m)// Добавление строки в конец массива{ char str[256]; // Массив для ввода новой строки int n; // Длина введенной строки int i; cout<<"Input string: "; cin.getline(str, 256); // Ввод строки n = strlen(str); // Вычисление длины новой строки if (m == 0) // Если массив строк пуст { m++; c = new char*[m]; c[0] = new char[n + 1]; // Создаем новую строку в массиве строк strcpy(c[0], str); return c; } else { m++; char** t = new char*[m];// Новый массив строк for(i = 0; i < m - 1; i++) { t[i] = c[i]; } t[m - 1] = new char[n + 1]; strcpy(t[m - 1], str); // Копирование новой строки delete [] c; return t; // Возврат нового адреса массива строк } }} char** InsLine(char **c, int &m)// Вставка строки в массив{ char str[256]; // Массив для ввода новой строки int n; // Длина введенной строки int k; // Позиция новой строки в массиве int i, j = 0; cout<<"Input string: "; cin.getline(str, 256); cout<<"Input position # (0-"<<m<<"): "; cin >> k; while(k < 0 || k > m) // Проверка на ошибочный ввод { cout<<"Error!!!\nInput position # (0-"<<m<<"): "; cin >> k; } n = strlen(str); // Длина новой строки if (m == 0) // Если массив строк пуст { m++; c = new char*[m]; c[0] = new char[n + 1]; // Создаем новую строку в массиве строк strcpy(c[0], str); return c; // Возврат нового адреса массива строк } else { m++; char** t = new char*[m];// Новый массив строк for(i = 0; i < m; i++) { if (i == k) { t[i] = new char[n + 1]; strcpy(t[i], str); j = 1; } else { t[i] = c[i - j]; } } delete [] c; // Удаление массива строк return t; // Возврат нового адреса массива строк }} char** DelLine(char **c, int &m)// Удаление указанной строки из массива{ int k; // Индекс удаляемой строки int i, j = 0; cout<<"Input position # (0-"<<m - 1<<"): "; cin >> k; while(k < 0 || k >= m) // Проверка на ошибочный ввод { cout<<"Error!!!\nInput deleting position #: "; cin >> k; } m--; char** t = new char*[m];// Создание нового массива строк for(i = 0; i < m; i++) { if (i == k) j = 1; t[i] = c[i + j]; } delete [] c; // Удаление массива строк return t; // Возврат нового адреса массива строк} void DelAllLines(char **c, int &m)// Удаление всех строк массива{ for(int i = 0; i < m; i++) delete [] c[i]; delete [] c; // Удаление всех строк массива m = 0;} bool IsArrayEmpty(int &m)// Возвращает истину, если массив строк пуст; в обратном случае - ложь{ if (m == 0) { cout<<"Your line array is empty.\n"; return true; } else return false;} int Menu()// Вывод меню{ int choice; cout<<"\n******* Menu *******\n"; cout<<"1-Add 2-Insert 3-Delete 4-Delete All 5-Print 6-Quit\n"; cin >> choice; // Выбор пункта меню if(choice < 0 || choice > 6) // Проверка выбора choice = 0; return choice; // Возвращение выбранного пункта} void Print(char **c, int m)// Распечатка массива строк{ for(int i = 0; i < m; i++) cout<<i<<": "<<c[i]<<endl;}

/*

На экран выводится приглашение пользователю выбрать тот или иной пункт меню, после выбора которого выполняется соответствующее действие.*/




Дата добавления: 2014-12-15; просмотров: 123 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав