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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2014, 18:24   #1
NYork
Пользователь
 
Регистрация: 17.11.2014
Сообщений: 35
По умолчанию Помогите найти ошибку в коде

Сначала опишу задание.
1. найти номер максимального значения (вроде все ок)
2. если в массиве есть нули, то между первым и вторым нулем элементы перемножаются (тоже вроде все ок)
3. перевернуть массив так, что бы сначала шли элементы стоявшие в нечетных позициях, а затем элементы стоявшие в четных позициях.(вроде тоже все ок)

проблема такая, если в массиве нулей не было, то 3 задание выполняется правильно, но как только появляются нули, и элементы между первым и вторым 0 перемножаются, тогда в перевернутом массиве какая-то каша получается.
искал искал, так и не наискал ошибку.

Код такой
Код:
#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
long int main()
{
	setlocale(LC_ALL, "RU");
	int n, choice, max, c,t, i,j;
	double a, b, p, v;
	cout << "Задайте размер массива: ";
	cin >> n;
	cout << endl << "1. Ручной ввод" << endl << "2. Автоматический ввод" << endl;
	cout << endl << "Ваш выбор: ";
	cin >> choice;
	float *arr = new float[n];
	cout << endl;
	if (choice == 2)// автоматический ввод массива
	{
		cout << "Введите диапазон значений массива [a;b]" << endl << endl;
		cout << "a: "; cin >> a;
		cout << "b: "; cin >> b;
		cout << endl;
		srand(time(NULL));
		c = (b - a)*10.0 + 1;// задаем, что массив будет из вещественных чисел
		for (int i = 0; i < n; i++)
		{
			arr[i] = (rand() % c + a * 10) / 10.0;// для вещественного
			if (i % 10 == 0)
			{
				cout << endl;
			}
			cout << setw(7) << arr[i];
		}
	}
	if (choice == 1)//ввод руками

		for (i = 0; i < n; i++)
		{
		cout << "Введи значение " << i + 1 << ": ";
		cin >> arr[i];
		}
{
	//1 задание------------------------------------------------------
	double max = arr[0];// первая ячейка массива
	for (i = 0; i < n; i++)//ищем номер макимального числа
		if (max < arr[i])
		{
		max = arr[i];
		}
	cout << endl << endl << "Номер(a) максимального =  ";
	for (i = 0; i < n; i++)// ищем само число
		if (arr[i] == max)
			cout << i + 1 << ", ";
	cout << " Само число: " << max << endl;
	cout << endl;
}
	//2 задание----------------------------------------------
	int nuli = 0;
	{
		for (int i = 0; i < n; i++)// Находим нулевые элементы
			if (arr[i] == 0)
			{
			arr[nuli] = i;
			nuli++;
			}
		if (nuli < 2)
			cout << "В массиве нету 0 или не хватает второго\n\n\n";
		else// нашлись нули
			if (arr[0] + 1 != arr[1])// если нули не друг за другом
			{
			double rez = 1;
			for (int i = arr[0] + 1; i < arr[1]; i++)
				rez *= arr[i];

			cout << "Произведение элементов между первым и вторым нулём =  " << fixed << setprecision(6) << rez << endl << endl;
			}
	}
	//3   задяние    -------------------------------------------------------------------------

	cout << "Преобразованный массив - сначала в строчку идут элементы стоявшие в нечетных позициях\n\n ";
		double tmp;
		for (int i = 0; i < n - i; i++)
		{
			tmp = arr[i];
			for (int j = i; j < n; j++){
				arr[j] = arr[j + 1];
			}
			arr[n - 1] = tmp;
		}
		for (i = 0; i < n; i++)
		{
			if (i % 10 == 0)
				cout << endl;
			cout << setw(7) << arr[i];
		}
	delete[] arr;
	cout << endl << endl;
	return 0;
}

Последний раз редактировалось Stilet; 16.12.2014 в 18:39.
NYork вне форума Ответить с цитированием
Старый 16.12.2014, 18:54   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

После поиска нулей первые два элемента массива могут быть испорчены.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 16.12.2014, 18:57   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
если в массиве есть нули, то между первым и вторым нулем элементы перемножаются
Перемножаются на что?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.12.2014, 19:45   #4
NYork
Пользователь
 
Регистрация: 17.11.2014
Сообщений: 35
По умолчанию

допустим в массиве идут числа 1 33 0 3 6 1 0
так вот между первым и вторым нулем получается 3*6*1=18, только у меня массив вещественных чисел
NYork вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в коде ( С++ ) nexUS1 Помощь студентам 1 29.12.2009 01:09
помогите найти ошибку в коде xaero93 Помощь студентам 4 20.04.2009 16:05
Помогите найти ошибку в коде Jora_Kornev Общие вопросы Delphi 10 10.01.2009 17:00
Помогите найти ошибку в коде! alex2008ean Паскаль, Turbo Pascal, PascalABC.NET 1 27.12.2008 18:31
Помогите найти ошибку в коде C++ Жека:) Помощь студентам 15 29.10.2008 11:32