Реализация библиотеки для работы с
Вид материала | Документы |
- План работы библиотеки зав библиотекой Полещук Людмила Дмитриевна Анализ работы библиотеки, 363.46kb.
- Реализация комплексной программы автоматизации обслуживания пользователей в библиотеке, 81.9kb.
- План работы библиотеки Муниципального бюджетного общеобразовательного учреждения основной, 511.68kb.
- Годовой план работы библиотеки псош №46 имени В. П. Астафьева на 2008 2009 учебный, 536.46kb.
- В. М. Красильщикова Советник отдела библиотек, 110.39kb.
- Задачи конкурса -повысить престиж библиотеки как современного информационного и культурного, 108.49kb.
- Зональной научной библиотеки, 1482.03kb.
- План работы библиотеки моу «Миндерлинская сош» на 2010 -2011 учебный год Задачи библиотеки, 63.53kb.
- План работы школьной библиотеки мбоу краснокаменская сош №4 на 2011/2012 учебный год., 170.02kb.
- План работы Никольской сельской библиотеки на 2011, 33.87kb.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
РОССИЙСКОЙ ФЕДЕРАЦИИ
Государственное образовательное учреждение высшего профессионального образования «Московский государственный институт радиотехники,
электроники и автоматики (Технический Университет)»
_________________________________________________________________
кафедра «Математическое обеспечение вычислительных систем»
Курсовой проект
на тему
Реализация библиотеки для работы с
одномерными, двумерными, статическими и динамическими массивами.
по дисциплине «объектно-ориентированное программирование»
Учебные группы:
Студенты:
Руководитель: д.т.н., профессор: Федотова Д.Э.
Москва – 2009
ОГЛАВЛЕНИЕ
1. Структура классов 3
2. Системные соглашения 4
3. Методы 20
3.1. Общие методы 20
3.2. Индивидуальные методы для одномерного
статического массива 23
3.3. Индивидуальные методы, реализованные в
базовом классе, но используемые только в подклассах 24
3.4. Индивидуальные методы, реализованные в базовом
классе и используемые в подклассах без изменения 25
3.5. Индивидуальные методы для двумерного статического
массива развернутого по строкам 25
3.6. Индивидуальные методы для двумерного статического
массива развернутого по столбцам 26
4. Таблица тестов
4.1. Для одномерных массивов 28
4.2. Для двумерных массивов 32
5. Листинг программы на С++ 38
6. Листинг программы на Delphi 53
7. Вывод 75
Структура классов работающих с одномерным и двумерным статическими массивами.
Системные соглашения.
№ | Имя данного | Семантика данного | Диапазон изменения данного |
| | статические массивы | |
| | Глобальные константы | |
1 | nn | Количество элементов в одномерном массиве | 1,127 |
2 | ss | Количество строк в двумерном массиве | 1,127 |
3 | cc | Количество столбцов в двумерном массиве | 1,127 |
4 | ll | Количество элементов в двумерном развернутом статическом массиве | 1,127 |
| | Глобальные переменные | |
5 | n | Количество элементов в одномерном массиве, которые задает пользователь. | 0,127 |
6 | s | Количество строк в двумерном массиве, которые задает пользователь. | 0,127 |
7 | с | Количество столбцов в двумерном массиве, которые задает пользователь. | 0,127 |
8 | l | Количество элементов в двумерном развернутом массиве | 0,127 |
9 | ArrayStatic[nn] | Одномерный статический массив | 1,127 |
10 | TwoDimenArray[ss][cc] | Двумерный статический массив | 1,127 |
11 | NewArrayStatic[ll] | Двумерный развернутый массив | 1,127 |
| | По классам и экземплярам классов | |
12 | class MyArr | Этот класс проверяет ввод с клавиатуры и создает одномерный и двумерный статические массивы. class MyArr { public: bool check(char x[10]); void createArrayStatic(); void createTwoDimenArray(); void createDynArray(); void createDynArrayT(); }; | |
13 | myArrayStatic | Экземпляр класса MyArr (для создания одномерного массива) | |
14 | myTwoDimenArray | Экземпляр класса MyArr (для создания двумерного массива) | |
15 | class SearchAndSort | Базовый класс для работы с одномерным статическим массивом class SearchAndSort { public: virtual void SortMin(); virtual void SortMax(); virtual void printArray(); void searchMax(); void searchMin(); void searchMaxT(); void searchMinT(); void searchMinForSort(short pos); void searchMaxForSort(short pos); void searchMinForSortT(short pos); void searchMaxForSortT(short pos); void printTwoDimArray(); short GetMax(); short GetNumMax(); short GetMin(); short GetNumMin(); protected: short max; short numMax; short min; short numMin; }; | |
16 | mySearchAndSort | Экземпляр класса SearchAndSort | |
17 | class TwoDimenStr | Потомок класса SearchAndSort для работы с двумерным статическим массивом (по сторкам) class TwoDimenStr : public SearchAndSort { public: void createNewArrayStatic(); void SortMin(); void SortMax(); void printArray(); }; | |
18 | myTwoDimStr | Экземпляр класса TwoDimenStr | |
19 | class TwoDimenCol | Потомок класса SearchAndSort для работы с двумерным статическим массивом (по столбцам) class TwoDimenCol : public SearchAndSort { public: void createNewArrayStatic(); void SortMin(); void SortMax(); void printArray(); }; | |
20 | myTwoDimCol | Экземпляр класса TwoDimenCol | |
| | По методам | |
21 | bool check(char x[10]); | Метод проверки вводимых данных bool MyArr::check(char x[10]){ short j=0,z; bool d; if (x[0]==’-‘) { d=false; j++;z=4;} z=4; while (x[j]!=’\0’ && j d = isdigit (x[j]); j++; if (!d) return d; else d =true; } x[j]=’\0’; return d; } | |
22 | void createArrayStatic(); | Метод создания одномерного статического массива void MyArr::createArrayStatic(){ char x[10] ; short i=0,a=0; while (1) { cout<<(Rus(«\tВведите количество элементов массива от 1 до 127»))<<»\n»; cin >> x ; if (MyArr::check(x) ) { n=atoi(x) ; if (n>0 && n<=127) { break; } } cout<< (Rus(«\a\t\tВведено ошибочное значение\n\n»)); } while (i { cout<<(Rus(«Введите элемент массива – целое число от -128 до 127\n»)); cin >> x ; if (MyArr::check(x) ) { a=atoi(x) ; if (a>=-128 && a<=127) { ArrayStatic[i]=a; i++; } else cout<< (Rus(“\a\t\tВведено ошибочное значение\n\n”)); } else cout<< (Rus(“\a\t\tВведено ошибочное значение\n\n”)); } } | |
23 | void createTwoDimenArray (); | Метод создания двумерного статического массива void MyArr::createTwoDimenArray(){ char x[10];char y[10];char el[10]; short k=0,a=0,temp=0; while (1) { cout<<(Rus(«\tВведите количество строк массива от 1 до 127»))<<»\n»; cin >> x ; if (MyArr::check(x) ) { n=atoi(x) ; if (n>0 && n<=127) { break; } } cout<< (Rus(«\a\t\tВведено ошибочное значение\n\n»)); } while (1) { cout<<(Rus(«\tВведите количество столбцов массива от 1 до «))<<(127/atoi(x))<<»\n»; cin >> y ; if (MyArr::check(y) ) { n=atoi(y) ; if (n>0 && n<=(127/atoi(x))) { break; } } cout<< (Rus(«\a\t\tВведено ошибочное значение\n\n»)); } s=atoi(x) ; c=atoi(y); while (k { cout<<(Rus(«Введите элемент массива – целое число от -128 до 127\n»)); cin >> el ; if (MyArr::check(el) ) { a=atoi(el) ; if (a>=-128 && a<=127) { ArrayStatic[k]=a; k++; } else cout<< (Rus(“\a\t\tВведено ошибочное значение\n\n”)); } else cout<< (Rus(“\a\t\tВведено ошибочное значение\n\n”)); } k=0; for (short i=0; i for (short j = 0; j < c; j++){ temp = ArrayStatic[k]; TwoDimenArray[i][j] = temp; k++; } } | |
24 | void searchMax(); | Метод базового класса. Поиск максимального элемента в одномерном массиве. void SearchAndSort::searchMax(){ max = ArrayStatic[0]; numMax = 1; for (short i = 0; i if (ArrayStatic[i] > max) { max = ArrayStatic[i]; numMax = i + 1; } } | |
25 | virtual void searchMin(); | Метод базового класса. Поиск минимального элемента в одномерном массиве. Будет переопределен в подклассах. void SearchAndSort::searchMin(){ min = ArrayStatic[0]; numMin = 1; for (short i = 0; i if (ArrayStatic[i] < min) { min = ArrayStatic[i]; numMin = i + 1 ; } } | |
26 | void searchMinForSort (short pos); | Метод базового класса. Поиск минимального элемента в одномерном массиве. Используется при сортировке. Будет переопределен в подклассах. void SearchAndSort::searchMinForSort(short pos){ min = ArrayStatic[pos]; numMin = pos; for (short i = pos; i if (ArrayStatic[i] < min) { min = ArrayStatic[i]; numMin = i ; } } | |
27 | void searchMaxForSort (short pos); | Метод базового класса. Поиск максимального элемента в одномерном массиве. Используется при сортировке. Будет переопределен в подклассах. void SearchAndSort::searchMaxForSort(short pos){ max = ArrayStatic[pos]; numMax = pos; for (short i = pos; i if (ArrayStatic[i] > max) { max = ArrayStatic[i]; numMax = i ; } } | |
28 | virtual void SortMin(); | Метод базового класса. Сортровка одномерного массива по возрастанию. Будет переопределен в подклассах. void SearchAndSort::SortMin(){ short temp,pos; for (short i=0; i temp = ArrayStatic[i]; ArrayStatic[i]= SearchAndSort::GetMin(); ArrayStatic[SearchAndSort::GetNumMin()]= temp; } } | |
29 | virtual void SortMax(); | Метод базового класса. Сортровка одномерного массива по убыванию. Будет переопределен в подклассах. void SearchAndSort::SortMax(){ short temp,pos; for (short i=0; i temp = ArrayStatic[i]; ArrayStatic[i] = SearchAndSort::GetMax(); ArrayStatic[SearchAndSort::GetNumMax()] = temp; } } | |
30 | virtual void printArray(); | Метод базового класса. Вывод на печать. Будет переопределен в подклассах. void SearchAndSort::printArray(){ for (short i = 0; i cout << ArrayStatic[i]<<”\t”; cout <<”\n”; } | |
31 | void printTwoDimArray(); | Метод базового класса. Вывод на печать исходного двумерного массива. Будет наследоваться и вызываться в подклассах без изменения. void SearchAndSort::printTwoDimArray(){ for (short i = 0; i< s; i++){ for (short j = 0; j < c; j++) cout << TwoDimenArray[i][j]<<”\t”; cout <<»\n»; } } | |
32 | short GetMax(); | Метод базового класса. Обращение к максимальному элементу массива. short SearchAndSort::GetMax(){ return max; } | |
33 | short GetNumMax(); | Метод базового класса. Обращение к номеру максимального элемента массива по строкам. Short SearchAndSort::GetNumMax(){ return numMax; } | |
34 | short GetMin(); | Метод базового класса. Обращение к минимальному элементу массива. Short SearchAndSort::GetMin(){ return min; } | |
35 | short GetNumMin(); | Метод базового класса. Обращение к номеру минимального элемента массива по строкам. Short SearchAndSort::GetNumMin(){ return numMin; } | |
36 | void searchMaxT(); | Метод базового класса. Поиск максимального элемента и его номера в двумерном массиве. void SearchAndSort::searchMaxT(){ l=s*c; max = NewArrayStatic[0]; numMax = 1; for (short i = 0; i if (NewArrayStatic[i] > max) { max = NewArrayStatic[i]; numMax = i + 1; } } | |
37 | void searchMinT(); | Метод базового класса. Поиск минимального элемента и его номера в двумерном массиве. void SearchAndSort::searchMinT(){ l=s*c; min = NewArrayStatic[0]; numMin = 1; for (short i = 0; i if (NewArrayStatic[i] < min) { min = NewArrayStatic[i]; numMin = i + 1 ; } } | |
38 | void searchMinForSortT(short pos); | Метод базового класса. Поиск минимального элемента в одномерном массиве. Используется при сортировке. void SearchAndSort::SortMax(){ short temp; for (short i=0; i SearchAndSort::searchMaxForSort(i); temp = ArrayStatic[i]; ArrayStatic[i] = SearchAndSort::GetMax(); ArrayStatic[SearchAndSort::GetNumMax()] = temp; } } | |
39 | | Метод базового класса. Поиск максимального элемента в одномерном массиве. Используется при сортировке. void SearchAndSort::searchMaxForSortT(short pos){ l=s*c; max = NewArrayStatic[pos]; numMax = pos; for (short i = pos; i if (NewArrayStatic[i] > max) { max = NewArrayStatic[i]; numMax = i ; } } | |
40 | void createNewArrayStatic (); | Метод подкласса TwoDimenStr. Создает двумерный выпрямленный по строкам массив. Void TwoDimenStr::createNewArrayStatic (){ short temp = 0,k = 0; for (short i = 0; i < s; i++) for (short j = 0; j < c; j++){ temp = TwoDimenArray [i][j]; NewArrayStatic[k]=temp; k++; } } | |
41 | void SortMin(); | Метод подкласса TwoDimenStr. Сортировка по строкам по возрастанию. Void TwoDimenStr::SortMin(){ l=s*c; short temp,pos; for (short i=0; i temp = NewArrayStatic[i]; NewArrayStatic[i] =TwoDimenStr::GetMin(); NewArrayStatic[TwoDimenStr::GetNumMin()]= temp; } } | |
42 | void SortMax(); | Метод подкласса TwoDimenStr. Сортировка по строкам по убыванию. Void TwoDimenStr::SortMax(){ l=s*c; short temp,pos; for (short i=0; i TwoDimenStr::searchMaxForSort(i); temp = NewArrayStatic[i]; NewArrayStatic[i] = TwoDimenStr::GetMax(); NewArrayStatic[TwoDimenStr::GetNumMax()]= temp; } } | |
43 | void printArray(); | Метод подкласса TwoDimenStr. Вывод на печать отсортированного по строкам двумерного массива. Void TwoDimenStr::printArray (){ short temp,k=0; for (short i=0; i for (short j = 0; j < c; j++){ temp = NewArrayStatic[k]; TwoDimenArray[i][j]=temp; k++; } for (short i = 0; i< s; i++){ for (short j = 0; j < c; j++) cout << TwoDimenArray[i][j]<<”\t”; cout <<”\n”; } } | |
44 | void createNewArrayStatic (); | Метод подкласса TwoDimenCol. Создает двумерный выпрямленный по столбцам массив. Void TwoDimenCol::createNewArrayStatic (){ short temp = 0,k = 0; for (short j = 0; j < c; j++) for (short i = 0; i < s; i++){ temp = TwoDimenArray [i][j]; NewArrayStatic[k]=temp; k++; } } | |
45 | void SortMin(); | Метод подкласса TwoDimenCol. Сортировка по столбцам по возрастанию. Void TwoDimenCol::SortMin(){ l=s*c; short temp,pos; for (short i=0; i TwoDimenCol::searchMinForSort(i); temp = NewArrayStatic[i]; NewArrayStatic[i]=TwoDimenCol::GetMin(); NewArrayStatic[TwoDimenCol::GetNumMin()]= temp; } } | |
46 | void SortMax(); | Метод подкласса TwoDimenCol. Сортировка по столбцам по убыванию. Void TwoDimenCol::SortMax(){ l=s*c; short temp,pos; for (short i=0; i TwoDimenCol::searchMaxForSort(i); temp = NewArrayStatic[i]; NewArrayStatic[i] = TwoDimenCol::GetMax(); NewArrayStatic[TwoDimenCol::GetNumMax()]= temp; } } | |
47 | void printArray(); | Метод подкласса TwoDimenCol. Вывод на печать отсортированного по столбцам двумерного массива. void TwoDimenCol::printArray (){ short temp,k=0; for (short i=0; i for (short j = 0; j < s; j++){ temp = NewArrayStatic[k]; TwoDimenArray[j][i]=temp; k++; } for (short i = 0; i< s; i++){ for (short j = 0; j < c; j++) cout << TwoDimenArray[i][j]<<”\t”; cout <<»\n»; } } | |
| | По способу защиты переменных | |
48 | short max; | Защищенная переменная базового класса. Максимум. | -128,127 |
49 | short min; | Защищенная переменная базового класса. Минимум. | -128,127 |
50 | short numMax; | Защищенная переменная базового класса. Координата максимума. | 0,127 |
51 | short numMin; | Защищенная переменная базового класса. Координата максимума. | 0,127 |
| | По именам переменных | |
52 | i | 1)Индекс строк в двумерном массиве 2)Индекс элементов при создании одномерного массива | 0,127 |
53 | j | 1)Индекс столбцов в двумерном массиве 2)Индекс цикла считывания вводимых символов. | 0,127 |
54 | k | 1)Параметр цикла при разворачивании двумерного массива и вывода на печать двумерного развернутого массива. 2)Параметр цикла при создании двумерного массива | 0,127 |
55 | temp | Переменная для хранения временного значения элемента двумерного массива | 0,127 |
56 | z | Граница кол-ва вводимых символов | 0,4 |
57 | x | Массив вводимых символов, в одномерном и двумерном массиве, кол-во строк | 0,10 |
58 | y | Массив вводимых символов, в двумерном массиве, кол-во столбцов | 0,10 |
59 | el | Элемент двумерного массива | -128,127 |
60 | а | Элемент одномерного массива | -128,127 |
61 | d | Переменная возвращаю значение работы функции | t,f |
62 | pos | Переменная, хранящая позицию максимального элемента в массиве | 0,127 |
| | Динамические массивы | |
| | По классам и экземплярам классов | |
63 | vp | Экземпляр класса DynArray | |
64 | vb | Экземпляр класса DynArray | |
65 | wp | Экземпляр класса DynArrayT | |
66 | class DynArray | Класс одномерного динамического массива. class DynArray { short d_AllEl; short * d_hV; public: DynArray ( short ); ~DynArray ( void ); short get ( short ); short set ( short, short ); void sort_p ( short ); void sort_b ( short ); void print ( short ); }; | |
67 | class DynArrayT | class DynArrayT { short d_AllEl; short **d_hW; public: DynArrayT ( short, short ); ~DynArrayT ( void ); short get ( short, short ); void print ( short, short ); void rebuild ( void ); }; | |
| | По методам | |
68 | DynArray | Конструктор одномерного динамического массива DynArray::DynArray ( short in1 ) { char x[10] ; short i=0,a=0; MyArr chk; if (in1 == 0) { while (1) { cout<<(Rus("\tВведите количество элементов массива от 1 до 127"))<<"\n"; cin >> x ; if (chk.check(x) ) { n=atoi(x) ; if (n>0 && n<=127) { break; } else chk.MyError(1, x); } else chk.MyError(0, x); } } else n = in1; d_hV = new short [n]; if (in1 == 0) while (i { cout<<(Rus("Введите элемент массива - целое число от -128 до 127\n")); cin >> x ; if (chk.check(x) ) { a=atoi(x) ; if (a>=-128 && a<=127) { d_hV[i] = a; i++; } else chk.MyError(2, x); } else chk.MyError(0, x); } } | |
69 | ~DynArray | Деструктор одномерного динамического массива DynArray::~DynArray ( void ) { delete[]d_hV; } | |
70 | short DynArray::get | Возвращает значение одномерного динамического массива по номеру элемента short DynArray::get ( short in1 ) { return d_hV[in1]; } | |
71 | short DynArray::set | Устанавливает элемента одномерного динамического массива переданным на вход значением short DynArray::set ( short in1, short in2 ) { d_hV[in1] = in2; return 0; } | |
72 | void DynArray::sort_p | Метод сортировки вставкой одномерного динамического массива void DynArray::sort_p ( short in1 ) { short i, j, tmp; for (i = 0; i < in1; i++ ) { tmp = d_hV[i]; for(j = i-1; j >= 0 && tmp < d_hV[j]; j--) d_hV[j+1] = d_hV[j]; d_hV[j+1] = tmp; } } | |
73 | void DynArray::sort_b | Метод сортировки "пузырек" одномерного динамического массива void DynArray::sort_b ( short in1 ) { short i,j,tmp; for(i = 1; i < in1; i++) for(j = in1 - 1; j >= i; j--) if(d_hV[j-1] > d_hV[j]) { tmp = d_hV[j-1]; d_hV[j-1] = d_hV[j]; d_hV[j] = tmp; } } | |
74 | void DynArray::print | Печать одномерного динамического массива void DynArray::print ( short in1 ) { for (short i = 0; i< in1; i++){ cout << d_hV[i]<<"\t"; } cout <<"\n"; } | |
75 | DynArrayT | Конструктор двумерного динамического массива DynArrayT::DynArrayT ( short in1, short in2 ) { char x[10];char y[10];char el[10]; short k=0,a=0,temp=0; MyArr chk; if (in1 == 0 || in2 == 0) { while (1) { cout<<(Rus("\tВведите количество строк массива от 1 до 127"))<<"\n"; cin >> x ; if (chk.check(x) ) { n=atoi(x) ; if (n>0 && n<=127) { break; } else chk.MyError(1, x); } else chk.MyError(0, x); } while (1) { cout<<(Rus("\tВведите количество столбцов массива от 1 до "))<<(127/atoi(x))<<"\n"; cin >> y ; if (chk.check(y)) { n=atoi(y) ; if (n>0 && n<=(127/atoi(x))) { break; } else chk.MyError(3, x); } else chk.MyError(0, y); } s=atoi(x) ; c=atoi(y); } else { s = in1 ; c = in2; }; d_hW = new short*[s]; for (short i = 0; i < s; i++) d_hW[i] = new short[c]; if (in1 == 0 || in2 == 0) while (k { cout<<(Rus("Введите элемент массива - целое число от -128 до 127\n")); cin >> el ; if (chk.check(el) ) { a=atoi(el) ; if (a>=-128 && a<=127) { ArrayStatic[k]=a; k++; } else chk.MyError(2, x); } else chk.MyError(0, el); } k=0; for (short i=0; i for (short j = 0; j < c; j++){ temp = ArrayStatic[k]; d_hW[i][j] = temp; k++; } } | |
76 | ~DynArrayT | Деструктор двумерного динамического массива DynArrayT::~DynArrayT ( void ) { short i; for (i = 0; i < nn; i++) delete[]d_hW[i]; delete[]d_hW; } | |
77 | DynArrayT::get | Возвращает значение двумерного динамического массива по номеру элемента short DynArrayT::get ( short in1, short in2 ) { return d_hW[in1][in2]; } | |
78 | DynArrayT::rebuild | Переносит элементы из одномерного динамического массива в двумерный динамический массив void DynArrayT::rebuild ( void ) { short temp,k=0; for (short i = 0; i< s; i++){ for (short j = 0; j < c; j++){ temp = ArrayStatic[k]; d_hW[i][j]=temp; k++; } } } | |
79 | DynArrayT::get | Возвращает значение двумерного динамического массива по номеру элемента short DynArrayT::get ( short in1, short in2 ) { return d_hW[in1][in2]; } | |
80 | DynArrayT::rebuild | Переносит элементы из одномерного динамического массива в двумерный динамический массив void DynArrayT::rebuild ( void ) { short temp,k=0; for (short i = 0; i< s; i++){ for (short j = 0; j < c; j++){ temp = ArrayStatic[k]; d_hW[i][j]=temp; k++; } } } | |
81 | DynArrayT::print | Печать двумерного динамического массива void DynArrayT::print ( short in1, short in2 ) { for (short i = 0; i< in1; i++){ for (short j = 0; j < in2; j++) cout << d_hW[i][j]<<"\t"; cout <<"\n"; } } | |
Методы
для одномерного и двумерного статических массивов
============ Общие методы ============
//======================= ОБЩИЕ МЕТОДЫ ==================================
//------------------- СООБЩЕНИЯ ОБ ОШИБКАХ ----------------------------------
void MyArr::MyError(short Err, char x[10]){
switch (Err){
case 0 : cout << (Rus(“\a\t Введеное вами значение “)); cout<< x; cout << (Rus( “ не является целым числом\n\n”)); break;
case 1 : cout << (Rus(«\a Введеное вами значение выходит за пределы заданного диапазона от 1 до 127\n\n»));break;
case 2 : cout << (Rus(«\a Введеное вами значение выходит за пределы заданного диапазона от -128 до 127\n\n»));break;
case 3 : cout << (Rus(«\a Введеное вами значение выходит за пределы заданного диапазона от 1 до «))<<(127/atoi(x))<<»\n\n»;break;
case 4 : cout << (Rus(«\a\t Данного пункта меню не существует\n\n»));break;
default : break;
}
}
//------------------ ПРОВЕРКА ВВОДИМЫХ ДАННЫХ ------------------------------
bool MyArr::check(char x[80]){
short j=0,z;
bool d;
if (x[0]==’-‘) { d=false; j++;z=5;}
z=4;
while (x[j]!=’\0’ && j
d = isdigit (x[j]); j++;
if (!d) return d; else d =true;
}
x[j]=’\0’;
return d;
}
//------------- СОЗДАНИЕ ОДНОМЕРНОГО СТАТИЧЕСКОГО МАССИВА -------------------
void MyArr::createArrayStatic(){
char x[80] ;
short i=0,a=0;
while (1)
{
cout<<(Rus(«\tВведите количество элементов массива от 1 до 127»))<<»\n»;
cin >> x ;
if (MyArr::check(x) )
{
n=atoi(x) ;
if (n>0 && n<=127) { break; }
else MyArr::MyError(1, x);
}
else MyArr::MyError(0, x);
}
while (i
{
cout<<(Rus(«Введите элемент массива – целое число от -128 до 127\n»));
cin >> x ;
if (MyArr::check(x) )
{
a=atoi(x) ;
if (a>=-128 && a<=127)
{ ArrayStatic[i]=a; i++; }
else MyArr::MyError(2, x);
}
else MyArr::MyError(0, x);
}
}
//--------------- СОЗДАНИЕ ДВУМЕРНОГО СТАТИЧЕСКОГО МАССИВА ------------------
void MyArr::createTwoDimenArray(){
char x[80];char y[80];char el[80];
short k=0,a=0,temp=0;
while (1)
{
cout<<(Rus(«\tВведите количество строк массива от 1 до 127»))<<»\n»;
cin >> x ;
if (MyArr::check(x) )
{
n=atoi(x) ;
if (n>0 && n<=127) { break; }
else MyArr::MyError(1, x);
}
else MyArr::MyError(0, x);
}
while (1)
{
cout<<(Rus(«\tВведите количество столбцов массива от 1 до «))<<(127/atoi(x))<<»\n»;
cin >> y ;
if (MyArr::check(y) )
{
n=atoi(y) ;
if (n>0 && n<=(127/atoi(x))) { break; }
else MyArr::MyError(3, x);
}
else MyArr::MyError(0, y);
}
s=atoi(x) ; c=atoi(y);
while (k
{
cout<<(Rus(«Введите элемент массива – целое число от -128 до 127\n»));
cin >> el ;
if (MyArr::check(el) )
{
a=atoi(el) ;
if (a>=-128 && a<=127)
{ ArrayStatic[k]=a; k++; }
else MyArr::MyError(2, x);
}
else MyArr::MyError(0, x);
}
k=0;
for (short i=0; i
for (short j = 0; j < c; j++){
temp = ArrayStatic[k];
TwoDimenArray[i][j] = temp;
k++;
}
}
//------------- СОЗДАНИЕ ОДНОМЕРНОГО ДИНАМИЧЕСКОГО МАССИВА ---------------
void MyArr::createDynArray(){
char x[80] ;
short i=0,a=0;
while (1)
{
cout<<(Rus(«\tВведите количество элементов массива от 1 до 127»))<<»\n»;
cin >> x ;
if (MyArr::check(x) )
{
n=atoi(x) ;
if (n>0 && n<=127) { break; }
}
cout<< (Rus(«\a\t\tВведено ошибочное значение\n\n»));
}
while (i
{
cout<<(Rus(«Введите элемент массива – целое число от -128 до 127\n»));
cin >> x ;
if (MyArr::check(x) )
{
a=atoi(x) ;
if (a>=-128 && a<=127)
{vp.set(i, a); vb.set(i, a); vc.set(i, a); i++;}
else cout<< (Rus(«\a\t\tВведено ошибочное значение\n\n»));
}
else cout<< (Rus(«\a\t\tВведено ошибочное значение\n\n»));
}
}
//---------------- СОЗДАНИЕ ДВУМЕРНОГО СТАТИЧЕСКОГО МАССИВА -----------------
void MyArr::createDynArrayT(){
char x[80];char y[80];char el[80];
short k=0,a=0,temp=0;
while (1)
{
cout<<(Rus(«\tВведите количество строк массива от 1 до 127»))<<»\n»;
cin >> x ;
if (MyArr::check(x) )
{
n=atoi(x) ;
if (n>0 && n<=127) { break; }
}
cout<< (Rus(«\a\t\tВведено ошибочное значение\n\n»));
}
while (1)
{
cout<<(Rus(«\tВведите количество столбцов массива от 1 до «))<<(127/atoi(x))<<»\n»;
cin >> y ;
if (MyArr::check(y) )
{
n=atoi(y) ;
if (n>0 && n<=(127/atoi(x))) { break; }
}
cout<< (Rus(«\a\t\tВведено ошибочное значение\n\n»));
}
s=atoi(x) ; c=atoi(y);
while (k
{
cout<<(Rus(«Введите элемент массива – целое число от -128 до 127\n»));
cin >> el ;
if (MyArr::check(el) )
{
a=atoi(el) ;
if (a>=-128 && a<=127)
{vp.set(k, a); k++;}
else cout<< (Rus(“\a\t\tВведено ошибочное значение\n\n”));
}
else cout<< (Rus(“\a\t\tВведено ошибочное значение\n\n”));
}
}
//--- ВЫВОД НА ПЕЧАТЬ ОДНОМЕРНОГО СТАТИЧЕСКОГО МАССИВА ---
void SearchAndSort::printArray(){
for (short i = 0; i
cout << ArrayStatic[i]<<”\t”;
cout <<”\n”;
}
//--- ВЫВОД НА ПЕЧАТЬ ИСХОДНОГО ДВУМЕРНОГО СТАТИЧЕСКОГО МАССИВА ---
void SearchAndSort::printTwoDimArray(){
for (short i = 0; i< s; i++){
for (short j = 0; j < c; j++)
cout << TwoDimenArray[i][j]<<”\t”;
cout <<»\n»;
}
}
= Индивидуальные методы для одномерного статического массива =
//--- ПОИСК ПЕРВОГО МАКСИМАЛЬНОГО ЭЛЕМЕНТА И ЕГО НОМЕРА В ОДНОМЕРНОМ СТАТИЧЕСКОМ МАССИВЕ ---
void SearchAndSort::searchMax(){
max = ArrayStatic[0];
numMax = 1;
for (short i = 0; i
if (ArrayStatic[i] > max) {
max = ArrayStatic[i];
numMax = i + 1;
}
}
//--- ПОИСК ПЕРВОГО МИНИМАЛЬНОГО ЭЛЕМЕНТА И ЕГО НОМЕРА В ОДНОМЕРНОМ СТАТИЧЕСКОМ МАССИВЕ ---
void SearchAndSort::searchMin(){
min = ArrayStatic[0];
numMin = 1;
for (short i = 0; i
if (ArrayStatic[i] < min) {
min = ArrayStatic[i];
numMin = i + 1 ;
}
}
//--- ПОИСК МИНИМАЛЬНОГО ЭЛЕМЕНТА В ОДНОМЕРНОМ СТАТИЧЕСКОМ МАССИВЕ,ПЕРЕДАЧА ЕГО ПОЗИЦИИ В СОРТИРОВКУ ---
void SearchAndSort::searchMinForSort(short pos){
min = ArrayStatic[pos];
numMin = pos;
for (short i = pos; i
if (ArrayStatic[i] < min) {
min = ArrayStatic[i];
numMin = i ;
}
}
//--- СОРТИРОВКА ВСТАВКАМИ ПО ВОЗРАСТАНИЮ ОДНОМЕРНОГО СТАТИЧЕСКОГО МАССИВА –
void SearchAndSort::SortMin(){
short temp;
for (short i=0; i
SearchAndSort::searchMinForSort(i);
temp = ArrayStatic[i];
ArrayStatic[i]= SearchAndSort::GetMin();
ArrayStatic[SearchAndSort::GetNumMin()]= temp;
}
}
//--- ПОИСК МАКСИМАЛЬНОГО ЭЛЕМЕНТА В ОДНОМЕРНОМ СТАТИЧЕСКОМ МАССИВЕ,ПЕРЕДАЧА ЕГО ПОЗИЦИИ В СОРТИРОВКУ ---
void SearchAndSort::searchMaxForSort(short pos){
max = ArrayStatic[pos];
numMax = pos;
for (short i = pos; i
if (ArrayStatic[i] > max) {
max = ArrayStatic[i];
numMax = i ;
}
}
//--- СОРТИРОВКА ВСТАВКАМИ ПО УБЫВАНИЮ ОДНОМЕРНОГО СТАТИЧЕСКОГО МАССИВА ---
void SearchAndSort::SortMax(){
short temp;
for (short i=0; i
SearchAndSort::searchMaxForSort(i);
temp = ArrayStatic[i];
ArrayStatic[i] = SearchAndSort::GetMax();
ArrayStatic[SearchAndSort::GetNumMax()] = temp;
}
}
= Индивидуальные методы реализованные в базовом классе, но используемые только в подклассах =
/--- ПОИСК МИНИМАЛЬНОГО ЭЛЕМЕНТА В ДВУМЕРНОМ СТАТИЧЕСКОМ МАССИВЕ,ПЕРЕДАЧА ЕГО ПОЗИЦИИ В СОРТИРОВКУ ---
void SearchAndSort::searchMinForSortT(short pos){
l=s*c;
min = NewArrayStatic[pos];
numMin = pos;
for (short i = pos; i
if (NewArrayStatic[i] < min) {
min = NewArrayStatic[i];
numMin = i ;
}
}
//--- ПОИСК МАКСИМАЛЬНОГО ЭЛЕМЕНТА В ДВУМЕРНОМ СТАТИЧЕСКОМ МАССИВЕ,ПЕРЕДАЧА ЕГО ПОЗИЦИИ В СОРТИРОВКУ ---
void SearchAndSort::searchMaxForSortT(short pos){
l=s*c;
max = NewArrayStatic[pos];
numMax = pos;
for (short i = pos; i
if (NewArrayStatic[i] > max) {
max = NewArrayStatic[i];
numMax = i ;
}
}
//--- ПОИСК ПЕРВОГО МАКСИМАЛЬНОГО ЭЛЕМЕНТА И ЕГО НОМЕРА В ДВУМЕРНОМ СТАТИЧЕСКОМ МАССИВЕ ---
void SearchAndSort::searchMaxT(){
l=s*c;
max = NewArrayStatic[0];
numMax = 1;
for (short i = 0; i
if (NewArrayStatic[i] > max) {
max = NewArrayStatic[i];
numMax = i + 1;
}
}
//--- ПОИСК ПЕРВОГО МИНИМАЛЬНОГО ЭЛЕМЕНТА И ЕГО НОМЕРА В ДВУМЕРНОМ СТАТИЧЕСКОМ МАССИВЕ ---
void SearchAndSort::searchMinT(){
l=s*c;
min = NewArrayStatic[0];
numMin = 1;
for (short i = 0; i
if (NewArrayStatic[i] < min) {
min = NewArrayStatic[i];
numMin = i + 1 ;
}
}
= Индивидуальные методы, реализованные в базовом классе и используемые в подклассах без изменения =
//--- ВЗЯТИЕ ПЕРВОГО МАКСИМАЛЬНОГО ЭЛЕМЕНТА В МАССИВЕ ---
short SearchAndSort::GetMax(){
return max;
}
//--- ВЗЯТИЕ ПЕРВОГО МИНИМАЛЬНОГО ЭЛЕМЕНТА В МАССИВЕ ---
short SearchAndSort::GetMin(){
return min;
}
//--- ВЗЯТИЕ НОМЕРА ПЕРВОГО МАКСИМАЛЬНОГО ЭЛЕМЕНТА В МАССИВЕ ---
short SearchAndSort::GetNumMax(){
return numMax;
}
//--- ВЗЯТИЕ НОМЕРА ПЕРВОГО МИНИМАЛЬНОГО ЭЛЕМЕНТА В МАССИВЕ ---
short SearchAndSort::GetNumMin(){
return numMin;
}
= Индивидуальные методы для двумерного статического массива развернутого по строкам =
//--- СОЗДАНИЕ ДВУМЕРНОГО СТАТИЧЕСКОГО МАССИВА ВЫПРЯМЛЕННОГО ПО СТРОКАМ ---
void TwoDimenStr::createNewArrayStatic (){
short temp = 0,k = 0;
for (short i = 0; i < s; i++)
for (short j = 0; j < c; j++){
temp = TwoDimenArray [i][j];
NewArrayStatic[k]=temp;
k++;
}
}
//--- СОРТИРОВКА ВСТАВКАМИ ПО СТРОКАМ ПО ВОЗРАСТАНИЮ ДВУМЕРНОГО СТАТИЧЕСКОГО МАССИВА ---
void TwoDimenStr::SortMin(){
l=s*c;
short temp;
for (short i=0; i
TwoDimenStr::searchMinForSortT(i);
temp = NewArrayStatic[i];
NewArrayStatic[i] = TwoDimenStr::GetMin();
NewArrayStatic[TwoDimenStr::GetNumMin()]= temp;
}
}
//--- СОРТИРОВКА ВСТАВКАМИ ПО СТРОКАМ ПО УБЫВАНИЮ ДВУМЕРНОГО СТАТИЧЕСКОГО МАССИВА ---
void TwoDimenStr::SortMax(){
l=s*c;
short temp;
for (short i=0; i
TwoDimenStr::searchMaxForSortT(i);
temp = NewArrayStatic[i];
NewArrayStatic[i] = TwoDimenStr::GetMax();
NewArrayStatic[TwoDimenStr::GetNumMax()]= temp;
}
}
//--- ВЫВОД НА ПЕЧАТЬ ОТСОРТИРОВАННОГО ПО СТРОКАМ ДВУМЕРНОГО СТАТИЧЕСКОГО МАССИВА ---
void TwoDimenStr::printArray (){
short temp,k=0;
for (short i=0; i
for (short j = 0; j < c; j++){
temp = NewArrayStatic[k];
TwoDimenArray[i][j]=temp;
k++;
}
for (short i = 0; i< s; i++){
for (short j = 0; j < c; j++)
cout << TwoDimenArray[i][j]<<”\t”;
cout <<»\n»;
}
}
= Индивидуальные методы для двумерного статического массива развернутого по столбцам =
//--- СОЗДАНИЕ ДВУМЕРНОГО СТАТИЧЕСКОГО МАССИВА ВЫПРЯМЛЕННОГО ПО СТОЛБЦАМ ---
void TwoDimenCol::createNewArrayStatic (){
short temp = 0,k = 0;
for (short j = 0; j < c; j++)
for (short i = 0; i < s; i++){
temp = TwoDimenArray [i][j];
NewArrayStatic[k]=temp;
k++;
}
}
//--- СОРТИРОВКА ВСТАВКАМИ ПО СТОЛБЦАМ ПО ВОЗРАСТАНИЮ ДВУМЕРНОГО СТАТИЧЕСКОГО МАССИВА ---
void TwoDimenCol::SortMin(){
l=s*c;
short temp;
for (short i=0; i
TwoDimenCol::searchMinForSortT(i);
temp = NewArrayStatic[i];
NewArrayStatic[i] = TwoDimenCol::GetMin();
NewArrayStatic[TwoDimenCol::GetNumMin()]= temp;
}
}
//--- СОРТИРОВКА ВСТАВКАМИ ПО СТОЛБЦАМ ПО УБЫВАНИЮ ДВУМЕРНОГО СТАТИЧЕСКОГО МАССИВА ---
void TwoDimenCol::SortMax(){
l=s*c;
short temp;
for (short i=0; i
TwoDimenCol::searchMaxForSortT(i);
temp = NewArrayStatic[i];
NewArrayStatic[i] = TwoDimenCol::GetMax();
NewArrayStatic[TwoDimenCol::GetNumMax()]= temp;
}
}
//--- ВЫВОД НА ПЕЧАТЬ ОТСОРТИРОВАННОГО ПО СТОЛБЦАМ ДВУМЕРНОГО СТАТИЧЕСКОГО МАССИВА ---
void TwoDimenCol::printArray (){
short temp,k=0;
for (short i=0; i
for (short j = 0; j < s; j++){
temp = NewArrayStatic[k];
TwoDimenArray[j][i]=temp;
k++;
}
for (short i = 0; i< s; i++){
for (short j = 0; j < c; j++)
cout << TwoDimenArray[i][j]<<”\t”;
cout <<»\n»;
}
}
Таблица тестов для одномерных массивов
N | Вводимые данные | Ожидаемый результат | Скриншот теста |
1 | N:= 0 | ДС1: Введеное вами значение выходит за пределы заданного диапазона от 1 до 127 | №1 |
2 | N:= A…Z,a…z. | ДС0: Введеное вами значение N не является целым числом | №2 |
3 | N:=”” | ожидание ввода | |
4 | N:= 1, A:= 127 | max:=127 , maxNum:= 1 min:=127 , minNum:= 1 | №4 |
5 | N:= 127, A:= 0000000000 1111111111 4444444444 3333333333 2222222222 5555555555 6666666666 7777777777 9999999999 8888888888 4444444444 6666666666 -7-3-4-5-2-1-9 | Отсортированный массив по возрастанию убыванию -9-7-5-4-3-2-1 9999999999 0000000000 8888888888 1111111111 7777777777 2222222222 6666666666 3333333333 6666666666 4444444444 5555555555 4444444444 4444444444 5555555555 4444444444 6666666666 3333333333 6666666666 2222222222 7777777777 1111111111 8888888888 0000000000 9999999999 -1-2-3-4-5-7-9 max:=9 , maxNum:=81 min:=-9 , minNum:= 127 | №5 |
6 | N:= -1 | ДС1: Введеное вами значение выходит за пределы заданного диапазона от 1 до 127 | №6 |
7 | N:= 128 | ДС1: Введеное вами значение выходит за пределы заданного диапазона от 1 до 127 | №7 |
8 | N:= -129 | ДС1: Введеное вами значение выходит за пределы заданного диапазона от 1 до 127 | №8 |
9 | N:= 2, A:= -128, 127 | max:= 127 , maxNum:= 2 min:=-128 , minNum:= 1 | №9 |
10 | N:= 1, A:= -129 | ДС2: Введеное вами значение выходит за пределы заданного диапазона от -128 до 127 | №10 |
11 | N:= 1, A:= 128 | ДС2: Введеное вами значение выходит за пределы заданного диапазона от -128 до 127 | №11 |
12 | N:= 1, A:= A…Z,a…z. | ДС0: Введеное вами значение A не является целым числом | №12 |
13 | N:= 3, A:= 0 0 0 | max:= 0, maxNum:= 1 min:= 0, minNum:= 1 | №13 |