Найти произведение положительных элементов, расположенных ниже главной диагонали матрицы - C (СИ)
Формулировка задачи:
Проблема в том, что если нет положительных элементов, то выводит присвоенную единицу. Как исправить?
Ввести матрицу размером NxM. Память для массива выделить динамически. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат. Предусмотреть в программе использование функции пользователя.
Определить произведение положительных элементов, расположенных ниже главной диагонали матрицы.
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
void Pro (int**,int,int*);
int main()
{
int **a, i, j, n, x=1;
cout << "Vvedite razmer massiva A:\n";
cin >> n ;
a = new int*[n];
for(i=0; i<n; i++)
a[i] = new int[n];
cout << "\nVvedite massiv A:\n";
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
cout << "Vvedite a[" << i << "][" << j << "]: " ;
cin >> a[i][j];
}
cout << "\nMassiv A:\n";
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
cout << setw (9) << a[i][j];
cout << endl;
}
Pro (a, n, &x);
cout << "proizvedenie = " << x;
cout << endl;
for(i=0; i<n; i++)
delete [] a[i];
delete []a;
a = NULL;
return 0;
}
void Pro (int **a, int n, int *x)
{
int i, j;
for (i=0; i<n; i++)
{
for (j=0; j<i; j++)
{
if(a[i][j]>0)
{
*x*=a[i][j];
}
}
}
}Решение задачи: «Найти произведение положительных элементов, расположенных ниже главной диагонали матрицы»
textual
Листинг программы
...
int tmp = 0;
Pro (a, n, &x);
if (tmp == 0) x = 0;
...
}
void Pro (int **a, int n, int *x)
{
int i, j;
for (i=0; i<n; i++)
{
for (j=0; j<i; j++)
{
if(a[i][j]>0)
{
*x*=a[i][j];
*tmp = 1;
}
}
}
}
Объяснение кода листинга программы
В данном коде происходит следующее:
- В функции
mainинициализируется переменнаяtmpсо значением 0. - Вызывается функция
Proс передачей в нее указателя на матрицуa, размер матрицыnи указатель на переменнуюx. - Внутри функции
Proинициализируются две переменныеiиjдля цикла. - Затем, с помощью вложенных циклов, происходит перебор всех элементов матрицы
a. - Если элемент
a[i][j]больше нуля, то произведение этого элемента и текущего значения переменнойxприсваивается переменнойtmp. - Переменная
tmpинициализируется значением 1. - После завершения циклов, значение переменной
tmpпроверяется на равенство 0. - Если
tmpравно 0, то значение переменнойxприсваивается 0. - Функция
Proвозвращает управление в функциюmain. - Значение переменной
xвыводится на экран.