Untitled
c_cpp
15 days ago
5.1 kB
4
Indexable
Never
#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 ); }