Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2018, 03:12   #1
Reanzero
Новичок
Джуниор
 
Регистрация: 31.05.2018
Сообщений: 1
Сообщение [C] Задача связанная с массивами.

Разработать программу обработки одномерного массива вещественных величин. Размерность массива задать именованной константой.


1. Найти сумму положительных элементов массива.

2. Найти произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами.

3. Упорядочить массив по убыванию элементов в четных позициях

Не могу понять, где я допустил ошибку. Вот собственно код:

Код:
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "time.h"
#include <string.h>
#include "locale.h"


int main()
{
	setlocale(LC_ALL, "RUS");
	const int N = 15;
	int Massiv[N];
	srand(time(NULL));
	printf("Сумма положительных элементов массива:\n");
	int Summa = 0, minE = 100, maxE = 0;
	for (int i = 0; i<N; i++)
	{
		Massiv[i] = rand() % 14 + 5;
		printf("%d ", Massiv[i]);
		Summa = Summa + Massiv[i];
		if (abs(minE)>abs(Massiv[i])) minE = abs(Massiv[i]);
		if (abs(maxE)<abs(Massiv[i])) maxE = abs(Massiv[i]);
		
	}
	int Proizvedenie = 1;
	for (int i = 0; i<N; i++) if ((Massiv[i]>minE) && (Massiv[i]<maxE)) Proizvedenie = Proizvedenie * Massiv[i];
	printf("\nПроизведение элементов массива=%d\n", Proizvedenie);
	for (int j = 1; j<N; j++) for (int i = 2; i<N - 2; i = i + 2) if (Massiv[i]<Massiv[i + 2])

	{
		Massiv[i] = Massiv[i] + Massiv[i + 2];
		Massiv[i + 2] = Massiv[i] - Massiv[i + 2];
		Massiv[i] = Massiv[i] - Massiv[i + 2];

	}
	printf("Элементы по убыванию в чётных позициях:\n");
	for (int i = 0; i<N; i++) printf("%d ", Massiv[i]);
	_getch();
	return 0;
}
Заранее благодарен.

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 31.05.2018 в 07:59.
Reanzero вне форума Ответить с цитированием
Старый 31.05.2018, 08:07   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

В MinE и MaxE нужно хранить не значения Massiv[i], а значения индекса в массиве i.

Код:
	if (abs(minE)>abs(Massiv[i])) minE = i;
		if (abs(maxE)<abs(Massiv[i])) maxE = i;
		
	}
	int Proizvedenie = 1;
	for (int i = minE + 1; i<maxE; i++) Proizvedenie = Proizvedenie * Massiv[i];
В сортировке в каком месте, кроме сравнения, используется счётчик j? И почему счёт не с нуля?

И ещё пример: при N=5 счёт идёт так: i = 2; i < 3; i +2. То есть чётный номер 4 не попадает в сортировку, хотя присутствует в массиве

Код:
	for (int j = 1; j<N; j++) for (int i = 2; i<N - 2; i = i + 2) if (Massiv[i]<Massiv[i + 2])

	{
		Massiv[i] = Massiv[i] + Massiv[i + 2];
		Massiv[i + 2] = Massiv[i] - Massiv[i + 2];
		Massiv[i] = Massiv[i] - Massiv[i + 2];

	}
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 31.05.2018 в 08:16.
Sciv вне форума Ответить с цитированием
Старый 31.05.2018, 08:16   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Reanzero Посмотреть сообщение
Massiv[i] = rand() % 14 + 5;
неверно заполняете случайными числами.
в массиве так отрицательных не будет, только положительные.
отнимайте какую-нибудь константу.
ну, например, так положительных и отрицательных будет (в среднем) поровну:
Код:
Massiv[i] = - 25 + rand() % 50 ;
следующее.
при вычислении суммы проверяйте, положительный элемент или нет
Код:
if (Massiv[i]>0)
  Summa += Massiv[i];
следующее.
перед циклом выведите сообщение не сумма, а
Код:
	printf("Исходный массив:");
а уже после цикла
Код:
	printf("\nСумма положительных элементов массива: %d\n", Summa);
следующее.
раз Вам нужны индексы элементов минимального и максимального,
то нужно их и искать.
всё точно так же, но только запоминаем не значение, а его позицию в массиве
Код:
int indexMinE =0, indexMaxE =0;

  цикл...

      if (abs(Massiv[indexMinE])>abs(Massiv[i])) indexMinE = i;
      if (abs(Massiv[indexMaxE])<abs(Massiv[i])) indexMaxE = i;
p.s. остальное не смотрел
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача связанная с IP камерой Aizov C# (си шарп) 3 09.10.2016 16:29
Задача связанная с bfs. Visapromo Помощь студентам 2 01.01.2013 05:20
Задача связанная с картами (Borland C++) SegagMegaDrive Помощь студентам 0 25.11.2012 17:47
Задача , связанная с двумерным массивом stas135642 Общие вопросы C/C++ 5 14.11.2010 16:18