БлогNot. С++: Ввод динамической матрицы через cin с проверкой корректности данных

С++: Ввод динамической матрицы через 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 просмотров]


теги: учебное c++ алгоритм

К этой статье пока нет комментариев, Ваш будет первым