Написать программу, которая вычисляет сумму минимального и максимального элементов массива значений с подвижной запятой двойной точности
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;
}