Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Листинг 1
- int **matrix = new int*[takeSize()];
- for (int count = 0; count < takeSize(); count++)
- {
- matrix[count] = new int[takeSize()];
- }
- // PR5_din_arrays.cpp: определяет точку входа для консольного приложения.
- //
- /*Дана целочисленная квадратная матрица. Определить:
- 1) Сумму элементов в тех строках, которые не содержат отрицательных элементов
- 2) минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.
- */
- #include "stdafx.h"
- #include <time.h>
- #include <iomanip>
- #include <iostream>
- using namespace std;
- int SetSize()//задаёт размер массива. Так как матрица квадратная, будем оперировать 1 числом.
- {
- int size = 2;
- cout << "input the size of matrix" << endl;
- cin >> size;
- while (size < 2)
- {
- cout << "incorrect value!" << endl;
- cout << "input the size of matrix" << endl;
- cin >> size;
- }
- return size;
- }
- void MakeArray(int** a, int size)
- {
- srand(time(NULL));
- cout << "Original array:" << endl;
- for (int i = 0; i < size; i++)
- {
- for (int j = 0; j < size; j++)
- {
- a[i][j] = rand() % 101 - 50;
- cout << setw(6) << left << a[i][j];
- }
- cout << endl;
- }
- }
- void ClearArrays(int *array, int size, int *array2)
- {
- int ds = size - 1;
- for (int i = 0; i < size; i++)
- {
- array[i] = 0;
- }
- for (int i = 0; i < ds; i++)
- {
- array2[i] = 0;
- }
- }
- int MakeSum(int **a, int size)
- {
- int sv = 0;
- for (int i = 0; i < size; i++)
- {
- for (int j = 0; j < size; j++)
- {
- if (a[i][j] < 0)
- {
- sv = 0;
- break;
- }
- else
- {
- sv = sv + a[i][j];
- }
- }
- }
- return sv;
- }
- int MakeMult(int *diasum, int **matrix, int N)
- {
- int ds = N - 1;
- int min_val1 = INT_MAX;
- int min_val = INT_MAX;
- for (int i = 1; i < N; i++)
- {
- int x = i;
- int y = 0;
- while ((x <= N - 1) && (y <= N - 1))
- {
- diasum[i - 1] = diasum[i - 1] + matrix[y][x];
- x++;
- y++;
- }
- for (int i = 0; i < ds; i++)
- {
- if (diasum[i] < min_val)
- {
- min_val = diasum[i];
- }
- }
- }
- for (int i = 1; i < N; i++)
- {
- int y = i;
- int x = 0;
- while ((y <= N - 1) && (x <= N - 1))
- {
- diasum[i - 1] = diasum[i - 1] + matrix[y][x];
- x++;
- y++;
- }
- for (int i = 0; i < ds; i++)
- {
- if (diasum[i] < min_val1)
- {
- min_val1 = diasum[i];
- }
- }
- }
- if (min_val1 == INT_MAX)
- {
- min_val1 = 0;
- }
- if (min_val == INT_MAX)
- {
- min_val = 0;
- }
- if (min_val1 < min_val)
- {
- min_val = min_val1;
- }
- return min_val;
- }
- void WriteRess(int *sum, int size, int min_val)
- {
- cout << endl << endl;
- cout << "Minimal element from diagonals " << min_val;
- cout << endl;
- cout << "sum-s of rows: " << endl;
- for (int i = 0; i < size; i++)
- {
- if (sum[i] != 0)
- {
- cout << setw(6) << left << sum[i];
- }
- else
- {
- cout << i + 1 << " Row have elements < 0 " << endl;
- }
- }
- }
- int takeSize(int a = 0)
- {
- static int size;
- size = 0;
- size = size + a;
- return size;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- //int N = SetSize();
- takeSize(SetSize());
- int **matrix = new int*[takeSize()];
- for (int count = 0; count < takeSize(); count++)
- {
- matrix[count] = new int[takeSize()];
- }
- /*выше объявляю саму матрицу*/
- int *sum = new int[takeSize()]; // в этот массив пишутся суммы строк. Должен быть динамическим ибо мы не знаем какого порядка будет матрица
- int *diasum = new int[takeSize() - 1]; // массив в который будут попадать суммы диагоналей
- ClearArrays(sum, takeSize(), diasum);
- MakeArray(matrix, takeSize());
- for (int i = 0; i < takeSize(); i++)
- {
- sum[i] = MakeSum(matrix, takeSize());
- }
- cout << endl;
- WriteRess(sum, takeSize(), MakeMult(diasum, matrix, takeSize()));
- cout << endl;
- system("pause");
- return 0;
- }
Add Comment
Please, Sign In to add comment