Написать программу, которая вычисляет сумму минимального и максимального элементов массива значений с подвижной запятой двойной точности

1. Произвести поиск минимального и максимального элементов в двух отдельных функциях.



 >1) длину массива следует прочесть с клавиатуры с помощью функции scanf();
 >2) массив создается в динамической памяти;
 >3) массив должен заполняться случайными значениями в диапазоне от 0 до 100; 
 >4) обход массивов должен производиться с помощью адресной арифметики;
 >5) параметрами функций вычисления минимального и максимального элементов являются указатели на double и размеры массива;
 >6) необходимо обеспечить освобождение памяти.
    using std::srand;
    using std::time;
    using std::rand;
    using std::scanf;
    using std::printf;
    double maximum(double** a, int n, double maxIndex[5])
    {
        unsigned int max[5] = { 0, 0, 0, 0, 0 };
 
        for (unsigned int i = 0; i < 5; i++) {
            for (unsigned int j = 0; j < 5; j++) {
                if (max[i] < a[i][j]) {
                    max[i] = a[i][j];
                    maxIndex[i] = j;
                }
            }
        }
        return **a;
    }

    double minimum(double** a, int n, double minIndex[5])
    {
        unsigned int min[5] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff };

        for (unsigned int i = 0; i < 5; i++) {
            for (unsigned int j = 0; j < 5; j++) {
                if (min[i] > a[j][i]) {
                    min[i] = a[j][i];
                    minIndex[i] = j;
                }
            }
        }
        return **a;
    }
    double doubleRand()
    {

        return rand() / (RAND_MAX + 1.0);
    }

    int main()
    {
        const int m = 5;
        const int n = 5;
        if ((scanf("%d %d", &m, &n)) < 2)
        {
            return -1;
        }
        double** a = new double* [m];
        for (int i = 0; i < m; i++)
        {
            a[i] = new double[n];
            for (int j = 0; j < n; j++)
            {
                a[i][j] = doubleRand() * 100;
            }    
        }

        double maxIndex[5];
        double minIndex[5];
        srand(static_cast<unsigned int>(time(nullptr)));

        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
            {
                printf("a[%d][%d] = %f\t", i, j, a[i][j]);
            }
            printf("\n");
        }
        cout << endl;
        double sum = maximum(a, n, maxIndex) + minimum(a, n, minIndex);
        printf("sum: %f", sum);
        for (int i = 0; i < n; i++)
        {
            delete[] a[i];
        }
        delete[] a;
    }

Ответы (1 шт):

Автор решения: Student
using namespace std;

double maximum(double a[], int n)
{
    int IndexOfMax = 0;
    for (int i = 1; i < n; i++)
    {
        if (a[i] > a[IndexOfMax])
        {
            IndexOfMax = i;
        }

    }
    return a[IndexOfMax];
}

double minimum(double a[], int n)
{
    int IndexOfMin = 0;
    for (int j = 1; j < n; j++)
    {
        if (a[j] < a[IndexOfMin])
        {
            IndexOfMin = j;
        }
    }
    return a[IndexOfMin];
}

double doubleRand()
{

    return rand() / (RAND_MAX + 1.0);
}

int main()
{
    const int n = 5;
    if ((scanf("%d", &n)) < 2)
    {
        return -1;
    }
    double* a = new double [n];
    for (int i = 0; i < n; i++)
    {
        a[i] = doubleRand() * 100;
    }

    cout << endl;
    printf("Max: %d\n", maximum(a, n));
    printf("Min: %d\n", minimum(a, n));
    double Sum = maximum(a, n) + minimum(a, n);
    printf("Sum of max/min elem of array = %d\n", Sum);
    for (int i = 0; i < n; i++)
    {
        delete[i] a;
    }
    delete[] a;
    return 0;
}
→ Ссылка