Untitled

mail@pastecode.io avatar
unknown
c_cpp
a year ago
5.1 kB
6
Indexable
#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 );
}