Консультация # 188353: Уважаемые эксперты, мне очень нужна ваша помощь! Нужно написать программу на С: В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) Произведение отрицательных элементов массива; 2) Сумму положительных элементов массива, расположенных до максимального элемента. Изменить порядок следования элементов в массиве на обр...
Уважаемые эксперты, мне очень нужна ваша помощь! Нужно написать программу на С: В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) Произведение отрицательных элементов массива; 2) Сумму положительных элементов массива, расположенных до максимального элемента. Изменить порядок следования элементов в массиве на обратный
Здравствуйте, fttfcxsasfghu! Три в одном... Массив заполняется случайными числами...
Код :
/*
В одномерном массиве, состоящем из 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;
}
Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 08.12.2015, 01:32
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!