Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 11125
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4966
∙ повысить рейтинг »
CradleA
Статус: Специалист
Рейтинг: 2720
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1815
Дата выхода:12.12.2015, 19:51
Администратор рассылки:F®ost (Администратор)
Подписчиков / экспертов:15 / 13
Вопросов / ответов:1 / 1

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


Консультация # 188353:

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

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

Дата отправки: 07.12.2015, 19:20
Вопрос задал: fttfcxsasfghu (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, 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
Рейтинг ответа:

НЕ одобряю +2 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное