С++: Ввод динамической матрицы через cin с проверкой корректности данных
Продолжаем серию учебных заметок, которых где-то не хватало раньше :)
В первом примере - как выделить память под динамическую матрицу из элементов типа double
операторами new
, затем заполнить матрицу вводом с клавиатуры через cin
, проверяя корректность типа данных без использования try-catch
или иных "не-школьных" конструкций. Затем матрица выводится в консоль.
Второй листинг показывает, как передать динамическую матрицу параметром функции. Матрица формируется "ручным" присваиванием элементов. Сама функция с именем maxRows
формирует и возвращает новый вектор, составленный из максимальных элементов строк матрицы или NULL
, если не удалось выделить память.
Оба приложения проверены в консоли Studio 2015, работают.
#include <iostream> using namespace std; int main() { const int n = 3, m = 3; int i, j; double val; //Выделение памяти под матрицу double **a = new double *[n]; for (i = 0; i<n; i++) a[i] = new double[m]; //Ввод динамической матрицы с проверкой корректности ввода (через cin) for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { cout << endl << "Item A[" << i << "," << j << "]="; while (!(cin >> val)) { //Простой вариант без try-catch cin.clear(); while (cin.get() != '\n') continue; cout << "Error! Please, type it again" << endl; } a[i][j] = val; } } //Вывод матрицы по строкам for (i = 0; i < n; i++) { cout << endl; for (j = 0; j < m; j++) cout << a[i][j] << " "; } cin.get(); cin.get(); return 0; }
#include <iostream> #include <cstdlib> using namespace std; int *maxRows (int n, int m, int **a) { int *r = new int[n]; if (!r) return NULL; for (int i=0; i<n; i++) { r[i] = a[i][0]; for (int j=1; j<m; j++) if (a[i][j]>r[i]) r[i] = a[i][j]; } return r; } int main() { const int n = 4, m = 2; int **a = new int *[n]; for (int i = 0; i < n; i++) a[i] = new int[m]; a[0][0] = 4; a[0][1] = 4; a[1][0] = 3; a[1][1] = 4; a[2][0] = 5; a[2][1] = 5; a[3][0] = 4; a[3][1] = 5; int *s = maxRows (n, m, a); for (int i=0; i<n; i++) cout << s[i] << " "; cin.get(); return 0; }
10.10.2017, 21:03 [4489 просмотров]