C++
0
Вклад в тег
/*Cоставить ф-цию нахождения первого (first) и последнего (last) по счету отрицательного элемента в столбце матрицы.
Используя эту функкцию, в матрице А(4,6) найти сумму произведения first*last для всех столбцов, а в матрице В(6,5) произведение
сумм first*last для четных столбцов */
#include <iostream>
using namespace std;
void find_first_last(){
int m, n, first, last, sum = 0;
cout << "Введите размер матрицы \n\n\n";
cin >> m >> n;
/*Создание динамического массива*/
int **matrix = new int*[m];
for (int i = 0; i < m; i++)
matrix[i] = new int[n];
/*Заполнение матрицы*/
cout << "Заполните матрицу \n\n\n";
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++) cin >> matrix[i][j];
}
/*Поиск первого и последнего отрицательного элементов в столбцах*/
for (int j = 0; j < n; j++){
int fin = 0;
cout << endl;
//поиск первого отрицательного элемента
for (int i = 0; i < m; i++){
if (matrix[i][j] < 0) {first = matrix[i][j]; fin = i;}
else first = NULL;
if (first){
cout << "Первый отрицательный элементв в столбце " << j << " равен " << first << endl;
break;
}
}
if (!first) cout << "Отрицательных элементов в столбце "<< j <<" нет\n";
//поиск последнего отрицательного элемента
for (int i = m - 1; i > fin; i--){
if (matrix[i][j] < 0) last = matrix[i][j];
else last = NULL;
if (last)
{
cout << "Последний отрицательный элементв в столбце " << j << " равен " << last << endl;
break;
}
}
/*
Если количество столбцов четное, то вычислять сумму всех столбцов, если нет - то только четных.
Из условия А(4,6), а В(6,5) - закономерность.
*/
if (n % 2 == 0) sum += last*first;
else if ((j + 1) % 2 == 0) sum += last*first;
}
cout << sum;
}
int main(){
setlocale(LC_ALL, "Russian");
find_first_last();
system("pause");
}