Содержание
Цель работы
Изучить методику создания и уничтожения двухмерных динамических массивов при помощи конструкторов с захватом динамической памяти и деструкторов для ее освобождения. Научиться работать с классом через функции-друзья этого класса.
Общая постановка
Пользовательский класс Array должен содержать:
- Конструктор с параметрами для создания динамических целочисленных массивов (операция new или стандартная библиотечная функция calloc) и установки начальных значений их элементов: Array(…) (реальные размеры массива — число строк и столбцов передается в конструктор через параметры);
- Деструктор: ~Array();
- Метод печати текущего состояния массива: void Print(…);
- Метод переустановки текущего состояния массива: void Set(…);
- Функция-друг, решающая поставленную задачу: friend void Run(…).
Код методов и функции-друга — вне пространства определения класса. Программа иллюстрирует косвенный способ обращения к элементам массива.
Индивидуальные задания
Составить функцию Run, которая позволит выполнить следующие действия с двухмерными массивами (если задачу решить нельзя, то сообщить об этом).
№ | Условие |
1 | Определить сумму элементов в тех строках, которые не содержат отрицательных элементов. |
2 | Определить количество строк, содержащих хотя бы один нулевой элемент. |
3 | Определить номер первой из строк, не содержащих ни одного положительного элемента. |
4 | Определить номер первого из столбцов, не содержащих ни одного отрицательного элемента. |
5 | Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент. |
6 | Определить номер первой из строк, содержащих хотя бы один положительный элемент. |
7 | Определить количество строк, среднее арифметическое элементов которых меньше заданной величины. |
8 | Найти сумму модулей элементов, расположенных выше главной диагонали. |
9 | Определить количество строк, не содержащих ни одного нулевого элемента. |
10 | Определить максимальное из чисел, встречающихся в заданной матрице более одного раза. |
11 | Определить количество столбцов, не содержащих ни одного нулевого элемента. |
12 | Найти произведение элементов в тех строках, которые не содержат отрицательных элементов. |
13 | Определить сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент. |
14 | Определить сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент. |
15 | Найти произведение элементов в тех строках, которые не содержат элементов, кратных $3$. |
Образец выполнения (вариант №2)
Условие задания звучит так:
Определить количество строк, содержащих хотя бы один нулевой элемент.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | #include <iostream> // для консольного ввода-вывода #include <locale> // для руссификации диалогов в программе #include <iomanip> // для форматированного вывода using namespace std; // создание класса "Динамический двухмерный целочисленный массив" class Array { private: int n; // количество строк int m; // количество колонок int** data; // указатель на данные (элементы) массива public: Array(const int pn, const int pm); // параметрический конструктор ~Array(); // деструктор void Print(void); // вывод массива на экран void Set(const int pn, const int pm); // переустановка состояние массива friend void Run(Array &pa); // дружественная вычислительная функция }; // параметрический конструктор Array::Array(const int pn, const int pm) { // запоминаем габариты массива this->n = pn; this->m = pm; // выделяем память под элементы двумерного целочисленного массива this->data = new int*[this->n]; for(int i = 0; i < this->n; i++) this->data[i] = new int[this->m]; // заполняем элементы массива случайными числами из отрезка [-10 ... +10] for(int i = 0; i < this->n; i++) for(int j = 0; j < this->m; j++) this->data[i][j] = -10 + rand() % 21; } // деструктор Array::~Array() { // уничтожаем память из-под элементов массива for(int i = 0; i < this->n; i++) delete[] this->data[i]; delete []this->data; } // вывод значений элементов массива на экран в табличной форме void Array::Print(void) { cout << "Элементы двумерного массива (" << this->n << " x " << this->m << "):" << endl; for(int i = 0; i < this->n; i++) { for(int j = 0; j < this->m; j++) cout << setw(6) << this->data[i][j]; cout << endl << endl; } } // переустановка состояние массива: изменение габаритов и значений элементов void Array::Set(const int pn, const int pm) { // сначала удаляем память из-под элементов текущего массива for(int i = 0; i < this->n; i++) delete[] this->data[i]; delete[] this->data; // запоминаем новые габариты this->n = pn; this->m = pm; // выделяем память под элементы двумерного целочисленного массива this->data = new int*[this->n]; for(int i = 0; i < this->n; i++) this->data[i] = new int[this->m]; // заполняем элементы массива случайными числами из отрезка [-10 ... +10] for(int i = 0; i < this->n; i++) for(int j = 0; j < this->m; j++) this->data[i][j] = -10 + rand() % 21; } // дружественная функция, в которой происходит определение кол-ва строк, содержащих хотя бы один нулевой элемент void Run(Array &pa) { int k = 0; for(int i = 0; i < pa.n; i++) for(int j = 0; j < pa.m; j++) if(pa.data[i][j] == 0) { k++; break; } cout << "Количество строк, содержащих хотя бы один нулевой элемент: " << k << endl << endl; } // главная функция (точка входа) int main(void) { srand(time(NULL)); // чтобы каждый раз генерировались новые псевдслучайные числа setlocale(LC_ALL, "rus"); // руссификация диалогов в программе Array a(3, 5); // создаем динамический массив размером 3 на 5 a.Print(); // выводим его содержимое на экран Run(a); // считаем кол-во строк, содержащих хотя бы один нулевой элемент a.Set(4, 8); // меняем состояние массива, получая новые габариты 4 на 8 a.Print(); // выводим его содержимое на экран Run(a); // считаем кол-во строк, содержащих хотя бы один нулевой элемент cin.get(); // задержка программы, чтобы можно было просмотреть результат // завершение выполнения программы и передача управления в ОС (код 0 - все прошло успешно) return 0; } |
Результаты работы программы
Стоимость заказа работы
➡ Стоимость программы из любого варианта составляет $250$ рублей.
Для оформления заказа пишите на почту: proglabs@mail.ru.
Время нашего ответа обычно составляет не более $10$ минут.
Добавить комментарий