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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2014, 20:01   #1
Loqwer78rus
Пользователь
 
Регистрация: 24.03.2014
Сообщений: 60
Печаль Сначала записать отрицательные элементы затем положительные // C++

Дан рандомный массив. Сначала записать отрицательные элементы затем положительные.
Как я понял нужно создать второй массив и скопировать в него первый так, чтобы сначала шли отрицательные элементы, потом положительные. Но сделать это не получается. Где ошибка ? Помогите плз

Код:
const int n=10;
	int a1[]={21,321,521,123,-123,123,-23,213,-213,4212,213,123};
	int i;
	int a2[n];

	for(i=0;i<n;i++)
	{
		
		cout<<" "<<a1[i];
		if(a1[i]<0)
			a1[i]=a2[i];
			
	}
		
	for(i=0;i<n; i++)
		if(a1[i]>0)
			a1[i]=a2[i];
	

	cout<<endl;
	cout<<a2[i];

	
	cout<<endl;
	system("pause");
}

Последний раз редактировалось Stilet; 27.06.2014 в 20:15.
Loqwer78rus вне форума Ответить с цитированием
Старый 27.06.2014, 20:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Первая ошибка:
Цитата:
a1[i]=a2[i];
Ты исходному массиву присваиваешь значение результирующего.

Вторая ошибка:
Там же. Заведи другую переменную, которую будешь увеличивать внутри if после присваивания второму массиву:
Код:
int k=0;
...
if(...)
  a2[k++]=...
Уловил идею?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.06.2014, 20:45   #3
Loqwer78rus
Пользователь
 
Регистрация: 24.03.2014
Сообщений: 60
По умолчанию

Вместо
Цитата:
a1[i]=a2[i] --> a1[i]=a2[k++]
Я так понял
Все равно не выходит.
Loqwer78rus вне форума Ответить с цитированием
Старый 27.06.2014, 20:49   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Или, например, так, если порядок чисел не важен:
Код:
int a[] = {1, -1, 3, 5, -7, -8};
int n = 6;
int i = 0, j = 0;
while (i < n && j < n) {
  if (a[i] > 0) {
    j = i + 1 > j ? i + 1 : j;
    while (j < n && a[j] > 0) ++j;
    if (j < n) {
      int tmp = a[i];
      a[i] = a[j];
      a[j] = tmp;
    } 
  }
  ++i;
}
Мог ошибиться. Положительные числа "уплывают" вправо, а отрицательные - влево.

Loqwer78rus, ещё раз - "исходному массиву присваиваешь значение результирующего".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 27.06.2014 в 20:51.
BDA на форуме Ответить с цитированием
Старый 27.06.2014, 20:51   #5
unpaleness
Новичок
Джуниор
 
Регистрация: 27.06.2014
Сообщений: 2
По умолчанию

Loqwer78rus, тебе нужно сделать счётчик, который будет отвечать за второй массив. Иначе иначе получится, что ты присваиваешь значения из первого массива на те же самые места во втором массиве.
unpaleness вне форума Ответить с цитированием
Старый 27.06.2014, 21:06   #6
Loqwer78rus
Пользователь
 
Регистрация: 24.03.2014
Сообщений: 60
По умолчанию

Цитата:
Сообщение от unpaleness Посмотреть сообщение
Loqwer78rus, тебе нужно сделать счётчик, который будет отвечать за второй массив. Иначе иначе получится, что ты присваиваешь значения из первого массива на те же самые места во втором массиве.
Я это понял. Но как это сделать ?
Цитата:
for(i=0;i<n;i++)
{

cout<<" "<<a1[i];
if(a1[i]<0)
a1[i]=a2[k++];

}

for(i=0;i<n; i++)
if(a1[i]>0)
a1[i]=a2[k++];


cout<<endl;
cout<<a2[k++];
Loqwer78rus вне форума Ответить с цитированием
Старый 27.06.2014, 21:11   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Loqwer78rus, опишите, пожалуйста, словами, что происходит в строке a1[i]=a2[k++].
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 27.06.2014, 21:13   #8
madmaniac
Форумчанин
 
Регистрация: 09.12.2010
Сообщений: 115
По умолчанию

посмотри тот же buble sort на википедии, там есть псевдо код, думаю разберешься где ошибка
Господа - учитесь юзать поисковые машины
web-обитель | авто
madmaniac вне форума Ответить с цитированием
Старый 28.06.2014, 09:43   #9
Trojan_de
 
Регистрация: 03.04.2010
Сообщений: 3
По умолчанию

Почему бы не сделать примерно так:
Код:
int compare (const void * a, const void * b){  
   return ( *(int*)b - *(int*)a );
int main() {
qsort(a,1,a+n,compare);
bool b;
for(int i=0;i<n;i++){
if ((!b) && (a[i]>0)) {
cout<<endl;
b=true;}
cout<<a[i];
}
}
ну и во второй массив можно записать аналогично, если нужно.
Trojan_de вне форума Ответить с цитированием
Старый 28.06.2014, 10:12   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Почему бы не сделать примерно так:
Можно но сортировка для такой постановки задачи слюшком жирно
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
все отрицательные числа и нули, затем положительные максим2012 Паскаль, Turbo Pascal, PascalABC.NET 8 25.10.2012 14:26
В двумерном массиве, в каждоый строке сначала разместить положительные эелементы, потом отрицательные эел Катя) Паскаль, Turbo Pascal, PascalABC.NET 7 15.04.2011 22:32
В заданном массиве C(8) переставить элементы так щеб сначала шли все отрицатильние а затем положительные. basav1k Помощь студентам 2 26.05.2010 21:10
массивы. вначале нули, затем положительные, в конце отрицательные. Сумерки Фриланс 5 17.02.2010 11:21
в начале все отрицательные, затем все положительные элементы в матрице motaro Паскаль, Turbo Pascal, PascalABC.NET 2 07.03.2008 19:16