Найти произведение всех элементов матрицы, расположенных на побочной диагонали и выше ее - C (СИ)
Формулировка задачи:
Найти произведение всех элементов, расположенных на побочной диагонали и выше ее, матрицы размером 6х6,состоящей из элементов целого типа
Если можно то попроще, как для новичка
Решение задачи: «Найти произведение всех элементов матрицы, расположенных на побочной диагонали и выше ее»
textual
Листинг программы
/*
============================================================================
Name : c_secondary_diag.c
Author : UranFlex
Version : 0.1 alpha
License : Free for All
Copyright : UranFlex 2013
Description : Найти произведение всех элементов, расположенных на побочной диагонали и выше ее,
* для матрицы размером 6х6,состоящей из элементов целого типа
* C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define SZ 6 // размер квадратной матрицы
//функция заполняет матрицу псевдослучайными данными
void FillMatrix( int* matrix, const int size, const unsigned randRange, const int shift );
//функция печатает матрицу
void PrintMatrix( int* matrix, const int size );
// функция рассчитывает произведение всех элементов, расположенных на побочной диагонали и выше ее
unsigned long CalcMulty( int* matrix, const int size );
int main( void ) {
srand( time( 0 ) ); // засеять генератор случайных чисел
int a[ SZ ][ SZ ];
// заполняем матрицу псевдослучайными значениями типа int в диапазоне [ 1..5 ]
FillMatrix( *a, SZ, 5, 1 );
// выводим матрицу на экран
puts( "Исходная матрица" );
PrintMatrix( *a, SZ );
// рассчитываем и выводим на экран результат произведения
printf( "Произведение всех элементов, расположенных на побочной диагонали и выше ее = %lu\n", CalcMulty( *a, SZ ) );
return EXIT_SUCCESS;
}
void FillMatrix( int* matrix, const int size, const unsigned randRange, const int shift ) {
int i, j;
for ( i = 0; i < size; ++i )
for ( j = 0; j < size; ++j )
// заполняем квадратную матрицу псевдослучайными данными
// shift - начальное значение диапазона данных
// randRange - ширина диапазона
matrix[ i * size + j ] = shift + rand() % randRange;
}
void PrintMatrix( int* matrix, const int size ) {
int i, j;
for ( i = 0; i < size; ++i ) {
for ( j = 0; j < size; ++j )
printf( "%4d ", matrix[ i * size + j ] );
puts( "" );
}
}
unsigned long CalcMulty( int* matrix, const int size ) {
int i, j, index = size - 1;
unsigned long mult = 1;
for ( i = 0; i < size; ++i )
for ( j = 0; j < size; ++j )
// в данном условии проверяется расположен ли элемент на побочной диоганали или выше нее
if ( j <= index - i )
// если проверка прошла, то домнажаем общее произведение на текущий элемент
mult *= matrix[ i * size + j ];
return mult;
}