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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2013, 18:31   #1
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию сортировка случайных чисел

Дан массив случайных чисел в диапазоне от -20 до +20. Необходимо найти позиции крайних отрицательных элементов (самого левого отрицательного элемента и самого правого отрицательного элемента) и отсортировать элементы, находящиеся между ними.
Код:
#include<iostream>
#include<time.h>
using namespace std;
void insertSort(int array[],int length){ 
	int x,k;
	for(int i=0;i<length;i++){
		k=i;
		x=array[i];
		for(int j=i+1;j<length;j++)
			if(array[j]<x){
			k=j;
			x=array[j];
			}
			array[k]=array[i];
			array[i]=x;
cout<<array[i]<<" ";
	}

}
void main(){
	int const length=20;
	int array[length];
	srand(time(NULL));
for(int i=0; i<length;i++){
	array[i]=rand()%40-20;
	cout<<array[i]<<" ";
}
cout<<'\n';
insertSort(array,length);
cout<<'\n';
}
подскажите как отсортировать от крайнего левого отрицательного до крайнего правого отрицательного
mixon-21 вне форума Ответить с цитированием
Старый 14.05.2013, 19:07   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Что такое, в сущности, массив? Это адрес его начала и его длина; собственно, это и передаётся в качестве аргументов функции insertSort.
Пусть позиции крайнего левого и крайнего правого отрицательных элементов уже найдены, и равны leftNeg и rightNeg соответственно. Тогда, если rightNeg>(leftNeg+2) (потому что иначе было бы чего сортировать), можно вызвать:
Код:
insertSort(array+leftNeg+1, rightNeg-leftNeg-1);
Этот вызов отсортирует массив, начинающийся с элемента, следующего за leftNeg и продолжающийся до rightNeg, исключая.
Abstraction вне форума Ответить с цитированием
Старый 14.05.2013, 19:32   #3
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
Печаль

ничего не понял???????????
mixon-21 вне форума Ответить с цитированием
Старый 14.05.2013, 20:41   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от mixon-21 Посмотреть сообщение
ничего не понял???????????
Это плохо.
а позвольте полюбопытствовать, вышеприведённую программу из поста #1 Вы сами писали?!

Вам сказали следующее.
Нужно найти два индекса - первого отрицательного числа и последнего отрицательного числа.

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

Теперь понятнее стало?..



p.s. кстати, у Вас в коде сортировки ошибка. первый цикл, который по i должен быть не до length, а до length-1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.05.2013, 21:25   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
найти позиции крайних отрицательных элементов
Код:
inr q=0,w=0;
for(int i=0; i<length;i++){
	array[i]=rand()%40-20;
 q=(q==0 && array[i]<0)?i:q; // Первый отриц
 w=(array[i]<0)?i:w; // Последний отриц
	cout<<array[i]<<" ";
}
I'm learning to live...

Последний раз редактировалось Stilet; 14.05.2013 в 21:28.
Stilet вне форума Ответить с цитированием
Старый 14.05.2013, 21:26   #6
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

код писал я сам и то что нужно от первого отрицательного до последнего отрицательного числа все числа отсортировать я знаю но я не могу понять как найти первое и последнее отрицательные индексы????????
mixon-21 вне форума Ответить с цитированием
Старый 14.05.2013, 21:39   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от mixon-21 Посмотреть сообщение
но я не могу понять как найти первое и последнее отрицательные индексы????????
А если бы этот массив был написан на бумажке в строку, вы бы знали как найти индексы (номера по счету) нужных элементов?
s-andriano вне форума Ответить с цитированием
Старый 14.05.2013, 21:49   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
но я не могу понять как найти первое и последнее отрицательные индексы????????
ну так бы сразу и сказали.

во-первых, вам не индексы отрицательные нужны, а нужны индексы отрицательных значений элементов массива, индексы будут при этом положительные, разумеется!

во-вторых, Stilet уже дал пример кода.

в-третьих, позволю себе прямо тут, на форуме набросать примерчик поиска нужных Вам индексов:
Код:
  leftNeg = -1;
  rightNeg = -1;
  for(int i=0; i<length;i++)
    { if (array[i]<0)
         {
            rightNeg = i;
            if (leftNeg == -1) leftNeg = i;
          }
     }
в конце добавьте проверку:
Код:
if (leftNeg == -1) 
{ сообщение о том, что в массиве НЕТ ни одного отрицательного 
        значения - сортировать нечего}
else
  if (rightNeg == leftNeg)
  { сообщение о том, что в массиве один единственный элемент с отрицательным значением
         - сортировать нечего}
 иначе
  if (rightNeg<=(leftNeg+2) )
  { сообщение о том, что в массиве между отрицательными элементами менее одного элемента
         - сортировать один элемент нельзя}
 иначе
    сортируем элементы между leftNeg и rightNeg
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2013, 16:55   #9
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
  leftNeg = -1;
  rightNeg = -1;
  for(int i=0; i<length;i++)
    { if (array[i]<0)
         {
            rightNeg = i;
            if (leftNeg == -1) leftNeg = i;
          }
     }
[/CODE]
А можно пожалуйста коментарии????????????
А то я не могу въехать

Иэто надо отдельную функцию????????????
mixon-21 вне форума Ответить с цитированием
Старый 15.05.2013, 18:22   #10
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

индексы с отрицательными числами я нашел

Код:
   int leftNeg = -1;
  int rightNeg = -1;
  for(int i=0; i<length;i++)
    { if (array[i]<0)
         {
            rightNeg =i;
           cout<< rightNeg<<" ";
  }
}
а как теперь их отсортировать?????????????????????? ?


вот полностью код
Код:
#include<iostream>
#include<time.h>
using namespace std;

void insertSort(int array[],int length){ 
	int x,k;
   int leftNeg = -1;
  int rightNeg = -1;
  for(int i=0; i<length;i++)
     if (array[i]<0)
         {
            rightNeg =i;
			
	 }
  
	 for(int i=length-1;i>=0;i--)
		 if(array[i]<0){
		 leftNeg=i;
		
		 }
	for(int i=0;i<length;i++){
		k=i;
		x=array[i];

		for(int j=i+1;j<length;j++)
			if(array[j]<x){
			k=j;
			x=array[j];
			}
			array[k]=array[i];
			array[i]=x;
	}
  cout<<array[i]<<" ";
  
}

void main(){
int const length=10;
    int array[length];
    srand(time(NULL));
for(int i=0; i<length;i++){
    array[i]=rand()%40-20;
cout<<array[i]<<" ";
}
cout<<'\n';
insertSort(array,length);
cout<<'\n';
}

Последний раз редактировалось mixon-21; 15.05.2013 в 19:16.
mixon-21 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генерация случайных чисел N.i.k.o.l.a.y. Помощь студентам 1 30.10.2012 21:38
Генератор случайных чисел Evgenii(Евгений) Помощь студентам 6 23.01.2011 22:41
C++ генератор случайных чисел sir.andrey Помощь студентам 4 03.09.2010 12:22
Генерация случайных чисел от -1 до 1 Shketer Общие вопросы Delphi 4 19.12.2009 23:43
Генерация Случайных Чисел Кирилл13 Помощь студентам 6 06.01.2009 10:31