Семинар 4 (Вариант 5)

Условие: Дана целочисленная квадратная матрица. Определить:

1) сумму элементов в тех столбцах, которые не содержат отрицательных элементов;

2) минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.

Листинг программы (через динамический массив и файл)

#include <iostream>

#include <fstream>

#include <cmath>

using namespace std;

 

int main()

{

setlocale(LC_ALL, "Russian");

 

int n, ** arr;

 

ifstream fin("input4.txt");

if (!fin.is_open())

{

   cout << "Ошибка открытия файла" << endl;

   return 1;

}

 

fin >> n;

arr = new int* [n];

cout << "Матрица из файла" << endl;

for (int i = 0; i < n; i++)

{

   arr[i] = new int[n];

   for (int j = 0; j < n; j++)

   {

       fin >> arr[i][j];

       cout << arr[i][j] << "\t";

   }

   cout << endl;

}

fin.close();

 

cout << "Сумма элементов в столбцах, "

   << "в которых нет отрицательных элементов" << endl;

for (int j = 0; j < n; j++)

{

   int sum = 0;

   for (int i = 0; i < n && sum >= 0; i++)

       if (arr[i][j] < 0)

           sum = -1;

       else

           sum += arr[i][j];

   if (sum >= 0)

       cout << "Столбец " << j + 1 << ": " << sum << endl;

}

 

cout << "Минимум среди сумм модулей элементов диагоналей, "

   << "паралельных побочной" << endl;

int minSum = abs(arr[0][0]);

for (int i = 0; i < n; i++)

{

   int sumU = 0, sumD = 0;

   for (int j = 0; j < i + 1; j++)

   {

       sumU += abs(arr[i - j][j]);

       sumD += abs(arr[n - 1 - i + j][n - 1 - j]);

   }

   if (sumU < minSum)

       minSum = sumU;

   if (sumD < minSum)

       minSum = sumD;

}

cout << minSum;

 

for (int i = 0; i < n; i++)

   delete[] arr[i];

delete[] arr;

return 0;

}

 

 

Скриншот работы

 

Листинг программы (через локальный массив)

#include <iostream>

#include <cmath>

using namespace std;

 

int main()

{

setlocale(LC_ALL, "Russian");

 

const int n = 4;

int arr[n][n] = {{ 12, -4, 7, 8 }, {0, 5, 1, -20}, {1, 13, 7, -1}, {12, 0, 12, 18}};

cout << "Исходная матрица" << endl;

for (int i = 0; i < n; i++)

{

   for (int j = 0; j < n; j++)

       cout << arr[i][j] << "\t";

   cout << endl;

}

 

cout << "Сумма элементов в столбцах, "

   << "в которых нет отрицательных элементов" << endl;

for (int j = 0; j < n; j++)

{

   int sum = 0;

   for (int i = 0; i < n && sum >= 0; i++)

       if (arr[i][j] < 0)

           sum = -1;

       else

           sum += arr[i][j];

   if (sum >= 0)

       cout << "Столбец " << j + 1 << ": " << sum << endl;

}

 

cout << "Минимум среди сумм модулей элементов диагоналей, "

   << "паралельных побочной" << endl;

int minSum = abs(arr[0][0]);

for (int i = 0; i < n; i++)

{

   int sumU = 0, sumD = 0;

   for (int j = 0; j < i + 1; j++)

   {

       sumU += abs(arr[i - j][j]);

       sumD += abs(arr[n - 1 - i + j][n - 1 - j]);

   }

   if (sumU < minSum)

       minSum = sumU;

   if (sumD < minSum)

       minSum = sumD;

}

cout << minSum;

return 0;

}

 

 

Скриншот работы

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: