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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2017, 19:01   #1
Fredom
Пользователь
 
Регистрация: 29.10.2016
Сообщений: 11
По умолчанию Помогите пожалуйста ;) C++

В одномерном массиве, состоящем из n целочисленных элементов, вычислить:
• произведение элементов массива с четными номерами;
• сумму элементов массива, расположенных между первым и последним нулевыми элементами.
Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом – все отрицательные (элементы, равные нулю, считать положительными).

*Вот что-то сделал, есть ошибки*
Код:
#include <math.h>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
	const int n = 6;
	int p = 1;
	setlocale(0, "");
	int arr[n];
	srand(time(0));
	for (int i = 0; i < n; i++)
	{
		arr[i] = rand() % 10;
		arr[1] = 0;
		arr[5] = 0;
		cout << arr[i] << " ";
		if (i % 2 == 0)
			p = p * arr[i];

	}
	cout << endl << "P = " << p << endl;
	int sum = 0;
	for (int i = 0; i < n; i++)
	{
		if (arr[i] = 0) 
			sum += arr[i];
	}
	cout << "Сумма: " << sum << endl;
	system("pause");
	return 0;
}

Последний раз редактировалось Fredom; 25.10.2017 в 19:16.
Fredom вне форума Ответить с цитированием
Старый 25.10.2017, 20:17   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я по поводу пункта: "сумму элементов массива, расположенных между первым и последним нулевыми элементами.", который (перед расчётом суммы требует) сначала найти "индексы первого и последнего 0-евого элемента".

Скажи, ты можешь это найти?

А ещё вопрос: у тебя все элементы генерируются положительными, а следующий пункт твоего задания предполагает наличие отрицательных элементов массива?...
ura_111 вне форума Ответить с цитированием
Старый 25.10.2017, 20:49   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я вижу вот такое решение задачи:

Код:
#include <math.h>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
	const int n = 20;
	int arr[n];

	setlocale(0, "");
	srand(time(0));
	for (int i = 0; i < n; i++)
	{
		arr[i] = rand() % 20 - 10;
	}
	arr[8] = 0;
	arr[9] = 0;
	arr[11] = 0;
	arr[17] = 0;
	/////////////////////////////////////////////

	cout << "Первоначальный массив:" << endl;
	for (int i = 0; i < n; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl << endl;
	/////////////////////////////////////////////

    int p = 1;
	cout << "Произведение:" << endl << "P= ";
	for (int i = 0; i < n; i++)
	{
		if (i % 2 == 0)
		{
			p = p * arr[i];

			if (arr[i] >= 0)
				cout << arr[i] << "*";
			else
				cout << "(" << arr[i] << ")*";
		}
	}
	cout << " = " << p << endl << endl;
	/////////////////////////////////////////////	

	int in = -1;
	int ik = -1;
	for (int i = 0; i < n; i++)
	{
		if (arr[i] == 0)
		{
			if (in == -1)
				in = i;
			else
				ik = i;
		}
	}
	cout << "Сумма элементов:" << endl;
	cout << "in= " << in << endl;
	cout << "ik= " << ik << endl;
	cout << "Sum= ";
	int Sum = 0;
	for (int i = in+1; i < ik; i++)
	{
		Sum = Sum + arr[i];

		if (arr[i] >= 0)
			cout << arr[i] << "+";
		else
			cout << "(" << arr[i] << ")+";
	}
	cout << " = " << Sum << endl << endl;
	/////////////////////////////////////////////	

	system("pause");
	return 0;
}

Но осталось доделать последний пункт: "Преобразовать массив таким образом, чтобы..."
Что думаешь по этому поводу?

Последний раз редактировалось ura_111; 25.10.2017 в 20:52.
ura_111 вне форума Ответить с цитированием
Старый 25.10.2017, 20:56   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Кстате, а если будет только один 0-ль (или вообще их не будет), то как программа должна реагировать на это?
Ведь сейчас я просто зануляю несколько элементов массива, а вообще то должно быть случайно-сгенерированые элементы...
Код:
arr[8] = 0;
	arr[9] = 0;
	arr[11] = 0;
	arr[17] = 0;
ura_111 вне форума Ответить с цитированием
Старый 25.10.2017, 21:07   #5
Fredom
Пользователь
 
Регистрация: 29.10.2016
Сообщений: 11
По умолчанию

Задача стоит в такой позиции, допустим arr[1] =0 и arr[4]=0 и программа должна посчитать сумму элементов между ними т.е arr[2] + arr[3]. Нельзя ли просто два элемента поставить равными нулю? Почему вы написали 4? Ну и это понятно, что программа должна реагировать на то, если в массиве нет нулевых элементов (но с этим уже заморачиваться не хочется, да и это не обязательно). Главное чтобы было правильное условие.

Последний раз редактировалось Fredom; 25.10.2017 в 21:11.
Fredom вне форума Ответить с цитированием
Старый 25.10.2017, 21:15   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Первое. Мне кажется, что пользователь должен определяться с "n". Но это предполагает динамическое распределение памяти, а не как сейчас - статическое.
Второе. "...допустим arr[1] =0 и arr[4]=0..." - ничего допускать не надо вообще. Генерацией самих значений должно заниматься "rand()". По этой логике искусственно занулять элементы - это ошибка. Т.е. на начальном периуде (отладка программы) это допустимо, но в окончательной версии программы эти строчки должны быть удалены полностью.
Третье. Почему именно 4-ри значения... А почему бы и нет? Ведь значения массива будут определяться случайно, что предполагает (пусть даже с небольшой вероятностью) что все элементы массива будут равны = 0-лю.
ura_111 вне форума Ответить с цитированием
Старый 25.10.2017, 21:19   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Кстате, ты видел что я изменил твою генерацию
Код:
rand() % 10;
чтобы получались не только положительные, но и отрицательные числа?

Всё, начинай думать над задачей №3:
"Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом – все отрицательные (элементы, равные нулю, считать положительными)."
ura_111 вне форума Ответить с цитированием
Старый 25.10.2017, 21:32   #8
Fredom
Пользователь
 
Регистрация: 29.10.2016
Сообщений: 11
По умолчанию

Что думаете об этом?
Код:
for (int i = 0; i < n; i++) {
		if (arr[i] < 0) {
			t = arr[i];
			for (int j = i; j < n; ++j)
			{
				arr[j] = arr[j + 1];
			}
			arr[n] = t;

Последний раз редактировалось Fredom; 25.10.2017 в 21:36.
Fredom вне форума Ответить с цитированием
Старый 25.10.2017, 23:03   #9
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Расскажи как работает код.
ura_111 вне форума Ответить с цитированием
Старый 25.10.2017, 23:27   #10
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я пока вижу:

0.jpg

1.jpg

2.jpg

3.jpg

4.jpg

5.jpg

6.jpg

7.jpg



Херня какая-то получилось.
А ещё, я не уверен - просто предполагаю, корректно ли запись "arr[n]"? Дело в том, что нумерация массива идёт с 0-ля и если считать с "n",
то в массиве (вроде) будет "n+1" элемент???

p.s.: а ну, проверь это. Просто создай массив размерностью "n" и попробуй что-нибудь записать в элемент "n+1". А потом выведи на экран...


Хотя... положительные числа же программа сгруппировала слево, - а это половина задания...
вот если отрицательные числа не в хвост массива "arr" пихать, а в какай-то промежуточный массив "brr"... а потом можно будет из
"brr" переместить элементы снова в "arr" (расположив их после положительных)...

Единственное, как это реализовать "после положительных"?
Надо считать количество "kol_polochitelnuch", которое и будет индексом массива "arr" , после которого вставляем отрицательные числа из "brr".



Пиши, что думаешь.

Последний раз редактировалось ura_111; 26.10.2017 в 02:02.
ura_111 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите создать програму для роботы с файлами, пожалуйста помогите нужно очень срочно Сергей Человек Фриланс 3 06.07.2009 19:30
Помогите Помогите Пожалуйста Решить Одну Задачку в Паскале!!! VisTBacK Помощь студентам 6 19.09.2008 13:44