Sortowanie liczb w tablicy dynamicznej

0

Witajcie! Mam problem z takim oto zadaniem:
//" Napisać program, który:
*wczytuje liczbę elementów tablicy dynamicznej jednowymiarowej oraz wartości dodatnie a i b (gdzie b<a)
dane do tablicy (całkowite) losuje jako liczby o module <= a i umieszcza je w tej tablicy następująco:

*liczby o module <=b na początku tablicy
*pozostałe liczby dodatnie na końcu tablicy
*wszystkie inne liczby - w pozostałej, środkowej części tablicy.

Kolejność liczb w kazdej części tablicy nie ma znaczenia. Należy wymusić, by użytkownik podał sensowne wartości a, b oraz  liczby elementów tablicy.//

Tak wyglada moj kod jak do tej pory:

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>

using namespace std;


int main()
{
	
	cout<<"podaj rozmiar tablicy";
	cout<<endl;
	
	
	int rozmiar, a, b;
	int *T;	
	int i, i1, i2, ip;
	cin>>rozmiar;
	T = new int [rozmiar];

	cout<<"podaj teraz dwie wartosci dodatnie: a "<<endl;
	cin>>a;
	cout<<"oraz b, bedace mniejsze od a"<<endl;
	cin>>b;
	i1=0;
	ip=0;
	i2=rozmiar-1;

	srand (time(0));
	for( i=0; i<rozmiar; i++)
	{
		T[i] = rand() % a; 
		if(T[i]<=b)
		{
			T[ip] = T[i1];
			ip++;
			T[i1] = T[i];
		}
		else if (T[i]>b)
		{
			T[i2]=T[i];
			i2--;
		}
		else
		{
			T[ip]=T[i];
			ip++;
		}
	};

	for(i=0; i<rozmiar; i++)
		cout<<T[i]<<" ";



	delete [] T;
   
   system("pause");
   return 0;
}


 

Chcialem uporzadkowac tablice, nastepnie wziac sie za losowanie
liczb ujemnych.
Zatem pytania:
*dlaczego kod nie dziala, za nic w swiecie nie chce uporzadkowac tablicy
*odwolalem sie przez nazwe talicy by zrobic wskaznik, czy dlatego to nie chodzi?
*jak uzyskac liczby ujemne pseudolosowe za pomoca rand()?
*czy lepiej byloby uzyc klasy vector?
Z gory dziekuje za pomoc.

0
  1. Nigdzie nie sprawdzasz czy twoje nazwane idiotycznie zmienne i1,i2, ip się nie "zeszły" więc tablica będzie się psuła pewnie ;]
  2. Nie, to akurat jest poprawne bo nie widzę możliwości wyskoczenia poza zakres.
  3. Proponuje za pomocą magicznej operacji ODEJMOWANIA. Tak wiem, nie każdy o niej słyszał. Żeby wylosować liczbę (-5,5) wystarczy od 5 odjąć liczbę losową (0,10)...
  4. W tym przypadku to bez znaczenia.
0

"Zeszly" nadal mi niewiele mowi, chodzi mi tylko o to by przeskakiwac po indeksach, (zakresie,)
i nie ukrywam ze brakuje mi pomyslu. Stosowalem podobne sortowanie w statycznej tablicy i dzialalo. a teraz nic z tego.

0

Masz sprawdzać czy wartości tych zmiennych nie są takie same w pewnym momencie. Nie robisz tego i dlatego to nie działa, jak trzeba.

0

Dobra, pojąłem co te twoje magiczne zmienne oznaczają i chyba jednak nie ma możliwości że się zejdą w takim układzie.
Ale mimo to nie robisz tego zgodnie z poleceniem bo:

  • chodzi tutaj o MODUŁ liczby a nie MODULO
  • masz losować liczby a nie ich moduły (a ty losujesz ich modulo...)
  • masz w warunku używać modułu porównanego z b
0

nie do konca, jesli rand() ma miec przedzial to dla wartosci maksymalnej a(gornej granicy przedzialu) przyjuje postac rand() % a, co oznacza
ze nasz przedzial to < 0, a-1> , co zapene wiesz, wiec wybacz jesli nie zrozumialem co masz na mysli

co wiecej wrzucenie tego w abs() nie daje innego rezultatu wykonywania programu.

0

@sonny.black, chodzi o: rand()%(2*a+1)-a;

1 użytkowników online, w tym zalogowanych: 0, gości: 1