Консультация № 188353
07.12.2015, 19:20
0.00 руб.
0 1 1
Уважаемые эксперты, мне очень нужна ваша помощь! Нужно написать программу на С:
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) Произведение отрицательных элементов массива;
2) Сумму положительных элементов массива, расположенных до максимального элемента.
Изменить порядок следования элементов в массиве на обратный

Заранее спасибо!

Обсуждение

давно
Посетитель
7438
7205
08.12.2015, 01:32
общий
это ответ
Здравствуйте, fttfcxsasfghu!
Три в одном...
Массив заполняется случайными числами...
[code h=200]
/*
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) Произведение отрицательных элементов массива;
2) Сумму положительных элементов массива, расположенных до максимального элемента.
3) Изменить порядок следования элементов в массиве на обратный
*/
#include <time.h>
#include <malloc.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

//Вывод элементов массива по одному в строке
void print(double* pd, int count)
{
for(int i=0; i<count; i++)
printf("a[%d] = %g\n", i, pd[i]);
}

//умножение отрицательных элементов массива pd, длины count,
// результат:
// если найдены отрицательные элементы, то вернется true и произведение будет по адресу *pResult
// иначе функция вернет false
bool mul_n(double* pd, int count, double* pResult)
{
bool fRes = false;
*pResult = 1;
for(int i=0; i<count; i++)
{
if (pd[i] < 0)
{
fRes = true;
*pResult *= pd[i];
}
}
return fRes;
}

//поиск максимального элемента, с получением индекса и значения максимального элемента
void get_max(double* pd, int count, int* pidx, double* pmax)
{
*pidx = 0; //начнем с нулевого
*pmax = pd[0];

for(int i=1; i<count; i++)
{
if (*pmax < pd[i])
{
*pmax = pd[i]; //значение
*pidx = i; //индекс
}
}
}

//подсчет суммы положительных элементов до индекса максимального
// с выводом индексов подсчитываемых элементов (для наглядности) и самой суммы
// если сумма = 0, значит, необходимые элементы не найдены!
void sum_p(double* pd, int imax)
{
double sum = 0;
bool fFound = false; //для первого элемента

for(int i=0; i<imax; i++) //до индекса максимального
{
if (pd[i] > 0) //рассматриваем только положительные
{
sum += pd[i];
if (fFound)
printf("+"); //если уже есть, то разделим плюсом
else
{
printf(" = "); //первый отделим равенством
fFound = true; //нашли первого
}
printf("a[%d]", i); //выведем, какого нашли
}
}
printf(" = %g\n", sum); //выведем сумму
}

//перевернем массив
void reverse(double* pd, int count)
{
int i,j;
double temp;

for(i=0,j=count-1; i<j; i++,j--) //меняем местами с начала и с конца
{
temp = pd[i];
pd[i] = pd[j];
pd[j] = temp;
}
}

int main()
{
const int n=10; //длина массива
double *a = (double*)malloc(n*sizeof(double)); //выделим место в куче
int i, imax;
double m_n, max;
//заполним массив случайными числами [-100;+100]
srand((unsigned)time(NULL)); //инициируем генератор псевдослучайных чисел
for(i=0; i<n; i++)
a[i] = ((double)((rand()%200)-100))/((rand()%100)+1);
print(a, n); //выведем массив

//умножим отрицательные числа
if (mul_n(a, n, &m_n))
printf("1) The product of negative numbers = %g\n", m_n);
else
printf("1) Negative numbers not found!\n");

//найдем максимальный элемент и его индекс
get_max(a, n, &imax, &max);
//выведем максимальный элемент
printf("2) Max = a[%d] = %g, sum", imax, max);
// и сумму положительных до максимального
sum_p(a, imax);

//перевернем массив
reverse(a, n);
printf("3) Reversed array:\n");
print(a, n); //выведем массив

_getch();
free(a); //освободим память
return 0;
}
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа