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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2009, 17:13   #1
quartzz
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 14
Лампочка перестановка эл. одномерного массива

и вот второе задание курсовой. опять же ОДНОМЕРНЫЙ массив заполнен с клавы,это я сделал. и затем нужно "переставлять элементы массива так, чтобы в начале массива располагались все
отрицательные,а в конце массива все положительные элементы."
помогите пож-ста с кодом. очень нуждаюсь.
quartzz вне форума Ответить с цитированием
Старый 26.05.2009, 17:21   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Аналогично. Выкладывайте свой код. И задавайте конкретные вопросы.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.05.2009, 17:30   #3
quartzz
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 14
По умолчанию

хорошо. просто поспешил.. щас уезжаю на учёбу. вечером приеду начну писать код и выложу.. извиняюсь за нарушения.
quartzz вне форума Ответить с цитированием
Старый 27.05.2009, 00:22   #4
quartzz
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 14
По умолчанию

вот на чём уже встал, голова под ночь уже пухнит. не могу додумать как начать грамотно переставлять элементы когда нашёл первый отрицательный в массиве.

Код:
void elements();
{
    for(int i=0;i<size;i++)//идём по массиву.
       
		if(mas[i]<0)//если значение в цикле меньше нуля.
		  {
             ???
		  } 

}

натолкните хотябы на правильный путь! спасибо. пойду спать больше не могу

Последний раз редактировалось Sazary; 27.05.2009 в 01:08.
quartzz вне форума Ответить с цитированием
Старый 27.05.2009, 01:12   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Как вариант, можно через дополнительный массив.
http://programmersforum.ru/showthread.php?t=51181

Ну а если без него:
идем по массиву. Имеем 2 счетчика. Первый - проходит до конца. Второй - указывает на первый положительный элемент после подмассива отрицательных элементов. Изначально этот счетчик k= 0. (нулевой элемент).
А обычный счетчик пусть будет i.
Если текущий элемент отрицательный, то меняем местами текущий и k-й элемент и увеличиваем k.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.05.2009, 09:47   #6
Kycaka
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 63
По умолчанию

Могу кинуть то, что сам недавно написал. (медот вроде пузырьковый или что-то типо того). Тут я упорядочиваю массив по убыванию. (отрицательных чисел тут нет, просто выложил как пример, мб поможет) Перепиши просто под свои цели))
Хотя поидеи тут и с отрицательными все будет норм. просто поменять нужно не по убываю сортировать, а по возрастанию


Код:
while ((unsigned)i<strlen(alfavit))  // выполняется столько раз, сколько всего записей в массиве, а их 32  (у меня в данном случае алфавит 32 буквы)
  {
      while ((unsigned)dd<strlen(alfavit)-1) // выполняется не 32 а 31 раз, не помню уже почему)) вроде лишний символ какойто появлялся.
	{
	if (mas[dd]<mas[dd+1]) //сравниваем два рядом стоящих числа. если 1ое число меньше  
           второго, то меняем их местами, если нет, то все оставляем на своих местах. (меняем знак с < на >(если надо повозсрастанию)
 	   {
	   temp1 = mas[dd];           //заменяем 
	   temp2 = mas[dd+1];
	   mas[dd] = temp2;
	   mas[dd+1] = temp1;
	   }
	dd++;
	}
   dd=0;
   i++;
   }
Яб написал с отрицательными еще, но времени нет, на зачет ехать нужно)))

Последний раз редактировалось Kycaka; 27.05.2009 в 09:54.
Kycaka вне форума Ответить с цитированием
Старый 28.06.2009, 15:20   #7
quartzz
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 14
По умолчанию

Помогите пож-ста, всё бьюсь с этой темой!

Вот код:

Это я сделал две функции: заполнение массива и показ массива, всё работает корректно.

Код:
void fill_array()
{
	cout << "Vvedite razmer massiva : ";
	cin >> size;
	cout << endl;
	if (mas) delete [] mas;
	mas = new int [size];
	for (int i = 0; i < size; i++)
	{
		cout << "Vvedite element massiva " << (i + 1) << ": ";
		cin >> mas[i];
	}
   cout << endl;
}

void view_array()
{
	cout<<"Nomer elementa massiva :\tZnachenije elementa massiva : \n";
	for(int i=0; i<size; i++)
  {
    cout<<i<<"                        \t"<< mas[i]<<"\n";
  }

}
___________________________________ ________________________

Далее повторю задание :

переставлять элементы массива так, чтобы в начале массива располагались все
отрицательные,а в конце массива все положительные элементы.

И вот моя функция сделанная по примеру данному выше, он запускается без ошибок, но при этом ничего не переставляет совершенно, всё остаётся на своих же местах, когда запускаю функцию view_array().
вот код :

Код:
void elements()
 
 {
	 int k = 0;
     int i = 0;
     int temp1 = 0;
	 int temp2 = 0;
	 
	 while (k<size)  // выполняется столько раз, сколько всего записей в массиве (size).
   {
      while (i<size-1) //выполняется на 1 раз меньше, т.к. появляется лишний символ.
	{
	   if (mas[i]>mas[i+1]) //сравниваем два рядом стоящих числа. если 2-ое число меньше  
          
 	   {
	     temp1 = mas[i];   // большее число
	     temp2 = mas[i+1]; // меньшее число
	     mas[i] = temp2;  // меняем местами большее и меньшее числа.
	     mas[i+1] = temp1;
	   }
	      i++;
	 }
    i=0;
    k++;
   }

    
 }
Очень прошу помочь разобраться где не так и почему она ничего не делает.

Опять код приравнялся к левой стенке.. где тут кнопка чтобы он нормально вставал?

Модератор: тег CODE. Значок "#" на панели.

Последний раз редактировалось Sazary; 28.06.2009 в 15:26.
quartzz вне форума Ответить с цитированием
Старый 28.06.2009, 15:24   #8
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

void fill_array() - эта функция должна возвращать заполненый массив,

void elements() - эта функция должна принимать исходный массив и возвращать отсортированый. Обе эти функции у вас ничего не делают.

Последний раз редактировалось profi; 28.06.2009 в 16:51.
profi вне форума Ответить с цитированием
Старый 28.06.2009, 15:41   #9
quartzz
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 14
По умолчанию

тогда в заголовке функции должно быть int elements(mas)

то есть возвращает значение целоого типа int, массив - mas. но вот ругается он только

пишит error C2448: 'elements' : function-style initializer appears to be a function definition
quartzz вне форума Ответить с цитированием
Старый 28.06.2009, 15:49   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

fill_array должна возвращать указатель на int
Код:
int* fill_array()
а elements должна его принимать
Код:
void elements(int* mas, int size)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск одинаковых элементов одномерного массива и их количества MyQwErTy Помощь студентам 2 28.02.2009 17:17
Сортировка одномерного массива введенного с клавиатуры по возрастанию sande Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 18.01.2009 20:31
из одномерного массива сделать матрицу Шико Паскаль, Turbo Pascal, PascalABC.NET 8 28.05.2008 08:26
Сортировка одномерного массива (ASM & C) voron Помощь студентам 0 02.12.2007 13:41