#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <stdbool.h>
//функция перемножения элементов матрицы А
void MultiplicationA(int** a, const int size);
//функция нахождения среднего арифметического матрицы А
void GetAvgA(int** a, const int rows, const int cols);
//функция проверки на отрицательные элементы
bool NegativeElements(int* a, const int size);
//функция создания одномерно массива
void CreateVector(int* a, const int size);
// функция создания матрицы
int** CreateMatrix( const int rows, const int cols );
// функция заполнения массива
void FillArr( int** a, const int size);
// функция вывода массива
void PrintArr(int** a, const int size);
// функция очистки памяти
void DeleteMatrix( int** a, const int r );
int main()
{
/*Разработать алгоритм и составить программу, используя динамические массивы.
Ввод элементов массивов выполнить двумя способами: случайным образом и с клавиатуры.
В программе выделить одну или несколько под¬программ (функций), например, функции ввода, обработки элементов массива.
Предусмотреть обработку исключительных ситуаций.
Во всех вариан¬тах даны квадратная матрица A и вектор P, оба размером n.
21. Если в векторе P(одномерный массив) нет отрицательных элементов, найти среднее ариф¬метическое элементов матрицы A, иначе – их произведение.
*/
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(0));
const int size;
const int n = size * size;
int arr[size];
printf( "Введите размеры двумерного массива: ");
scanf( "%d", &size );
int** a = CreateMatrix( size, size );
if( arr == NULL ){
puts( "Ошибка выделения памяти!" );
return 1;
}
printf("%d", &arr);
FillArr( arr, size);
PrintArr( arr, size );
DeleteMatrix( arr, size );
return 0;
}
int** CreateMatrix( const int rows, const int cols ) {
// выделяем память под массив указателей на строки
int** a = (int**)malloc( rows * sizeof( int* ) );
if( a == NULL ) // если не удалось выделить память
return NULL;
int i;
//
for( i = 0; i < rows; ++i ){ // 0, 1, 2, 3, 4
//выделяем память под очередную строчку
a[ i ] = (int*)malloc( cols * sizeof( int ) ); // 5
if (a[ i ] == NULL) { // если не удалось выделить память
int j;
for( j = 0; j < i; ++j ) // очищаем память от строк, память под которые была успешно выделена
free( a[ j ] );
free( a ); // очищаем память от массива указателей
return NULL;
}
}
return a; // возвращаем указатель на массив указателей
}
void FillArr( int** a, const int size ) {
int i, n = size * size;
for( i = 0; i < n; ++i )
a[ i ] = rand() % 101 - 50;
}
void PrintArr(int** a, const int size) {
int i,j;
for (i = 0; i < size; ++i) {
for (j = 0; j < size; j++)
printf("%5d", a[ i ][ j ]);
puts("");
}
}
void CreateVector(int* a, const int size){
int i;
for (i = 0; i < size; i ++ ) {
a[ i ] = rand() % 101 - 50;
printf( "%4d", a[ i ] );
}
}
bool NegativeElements(int* a, const int size){
int i;
for (i = 0; i < size - 1; i++)
if (a[i] < 0){
break;
return false;
}
else
return true;
}
int MultiA(int** a, const int rows, const int cols ){
int i,j,m = 1;
for (i = 0; i < rows - 1; i++)
for (j = 0; j < cols - 1; j++ )
m = a[i][j] * m;
return m;
}
double GetAvg(int** a, const int rows, const int cols){
double sum = 0;
int i,j, count = 0;
for ( i = 0; i < rows - 1; i++)
for (j = 0; j < cols - 1; j++){
count += 1;
sum += a[i][j];
}
return sum / count;
}
void DeleteMatrix( int** a, const int r ){
int i;
for( i = 0; i < r; ++i )
free( a[ i ] );
free( a );
}