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

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


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

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

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 2069
∙ повысить рейтинг »
CradleA
Статус: Профессионал
Рейтинг: 801
∙ повысить рейтинг »
Асмик Гаряка
Статус: Советник
Рейтинг: 170
∙ повысить рейтинг »

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

Номер выпуска:1839
Дата выхода:03.03.2016, 21:51
Администратор рассылки:F®ost (Администратор)
Подписчиков / экспертов:17 / 14
Вопросов / ответов:1 / 1

Консультация # 188860: Здравствуйте, уважаемые эксперты! Прошу помощи в следующем вопросе: Дан массив arr из n целых элементов и целое число c. 1) Вычислить количество элементов массива, больших c(morec). 2)Вычислить произведение prod элементов массива, расположенных после максимального по модулю элемента. 3) Преобразовать массив, поместив в правой его ча...

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

Здравствуйте, уважаемые эксперты! Прошу помощи в следующем вопросе:

Дан массив arr из n целых элементов и целое число c.
1) Вычислить количество элементов массива, больших c(morec).
2)Вычислить произведение prod элементов массива, расположенных после максимального по модулю элемента.
3) Преобразовать массив, поместив в правой его части все отрицательные элементы, а потом- все положительные.
Написать функцию, решающую эти задачи. Прототип функции :
int arr_proc(int *arr, int n, int c, int *pprod);
Функция возвращает значение morec. Значение prod передается вызывающей функции через pprod.
Написать функцию main() для тестирования arr_proc().
Желательно вспомогательные массивы не использовать.

Дата отправки: 27.02.2016, 07:00
Вопрос задал: fridge (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, fridge!
Комментарии смотрите в тексте. Если что непонятно или не так сделано, милости просим в мини-форум.

/*
 Дан массив arr из n целых элементов и целое число c.
 1) Вычислить количество элементов массива, больших c(morec).
 2) Вычислить произведение prod элементов массива, расположенных после максимального по модулю элемента.
 3) Преобразовать массив, поместив в правой его части все отрицательные элементы, а потом- все положительные.
 Написать функцию, решающую эти задачи. Прототип функции :
 int arr_proc(int *arr, int n, int c, int *pprod);
 Функция возвращает значение morec. Значение prod передается вызывающей функции через pprod.
 Написать функцию main() для тестирования arr_proc().
 Желательно вспомогательные массивы не использовать.
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int arr_proc(int*, int, int, int*);
 
int main()
{
    int i, n, c, morec, prod;
	int *a;

	srand(time(NULL));

    printf("Input array size, n = ");
	scanf("%d", &n);					//вводим n

    a = (int*)malloc(n * sizeof(int));	//выделяем память в куче
    
	for(i = 0; i < n; i++)				//заполним случайными числами
    {
		a[i] = (rand() % 20) - 10;		//в интервале [-10;9]. Большие числа брать не стоит,
										//  иначе произведение может не поместиться в int
		printf("%d ", a[i]);			//выведем массив
    }
    printf("\nInput integer number, c = ");	//вводим число с
    scanf("%d", &c);

	morec = arr_proc(a, n, c, &prod);	//считаем
										//выводим результат
    printf("\nResult:\nmorec = %d\nprod = %d\nNew array:\n",morec,prod);
    for(i = 0; i < n; i++)
        printf("%d ", a[i]);

	printf("\n");						//перевод  строки
	free(a);							//освободим память
 
	system("pause");
    return 0;
}
//наша функция.
//возвращает количество элементов, больших с
//в *pprod произведение элементов за максимальным по модулю, если = 0, значит максимальный - 
// последний элемент массива (или все элементы = 0!)
//сортируем массив так, что все отрицательные элементы будут в начале массива.
// Порядок отрицательных и неотрицательных элементов внутри групп не меняется!
int arr_proc(int *arr, int n, int c, int *pprod)
{
	int	morec, i, j, max, imax, temp;
	
	//считаем количество элементов, больших с, одновременно ищем максимальный по модулю элемент и его индекс
	for(imax=max=morec=i=0; i<n; i++)
	{
		morec += (arr[i] > c);			//прибавится 1, если больше, и 0, если меньше или равно
		if (abs(arr[i]) > max)
		{
			max = abs(arr[i]);			//новый максимальный по модулю элемент
			imax = i;					// его индекс
		}
	}
	
	//решаем задачу №2: находим произведение элементов за максимальным
	for(imax++,*pprod=0; imax<n; imax++)//вначале присвоим 0, на случай, если максимальный окажется последним!
	{
		if (*pprod == 0)
			*pprod = arr[imax];
		else
			*pprod *= arr[imax];
	}

	//задача №3: сортируем массив
	for(i=0; i<n-1; i++)				//от первого до предпоследнего
	{
		if (arr[i]>=0)					//неотрицательный?
		{								//ищем, куда его переместить
			for(j=i+1; j<n; j++)		//от последующего до конца
			{
				if (arr[j]<0)			//ищем отрицательный
				{						//нашли
					temp = arr[j];		//сохраним найденный отрицательный
					for(; j>i; j--)		//переместим ряд неотрицательных элементов на один вперед
						arr[j] = arr[j-1];
					arr[i] = temp;		//а отрицательный вставим на место бывшего неотрицательного
					break;				//переместили, выходим на продолжение поиска неотрицательных
				}
			}
		}
	}
	return morec;						//вернем morec
}

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

5
нет комментария
-----
Дата оценки: 28.02.2016, 20:41

Рейтинг ответа:

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


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

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

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


В избранное