skymaja Temat założony przez niniejszego użytkownika |
Sortowanie rosnące i malejące » 2014-05-11 20:10:19 Hej, mam prośbę o pomoc. Mam napisać program, w którym jedna funkcja będzie sortować tablicę rosnąco i malejąco. Tablica ma mieć liczby całkowite od -n do n. I mam 3 problemy z tym co napisałam. 1. w warunku sortowania malejącego też sortuje rosnąco 2. cyfry 1 i 2, które są argumentem funkcji i mają określać czy będzie sortowane rosnąco czy malejąco, wchodzą w jakiś sposób do tablicy... 3. jeśli n jest większe niż 5, to program w ogóle nie działa - mam windowsowy komunikat, że przestał działać. #include <iostream>
using namespace std;
void sortuj( int * tab, int n, int sort ) { int zamiana, tablica[ n ]; if( sort == 1 ) { for( int i =- n; i <= n; i++ ) { for( int j =- n; j <= n; j++ ) { if( tablica[ i ] > tablica[ i + 1 ] ) { swap( tablica[ i ], tablica[ i + 1 ] ); } } } } else if( sort == 2 ) { for( int i =- n; i <= n; i++ ) { for( int j =- n; j <= n; j++ ) { if( tablica[ i ] < tablica[ i + 1 ] ) { swap( tablica[ i + 1 ], tablica[ i ] ); } } } } }
int main() { int n; cout << "podaj n" << endl; cin >> n; int tablica[ 2 * n + 1 ]; for( int i =- n; i <= n; i++ ) { tablica[ i ] = i; } cout << "posortowane rosnaco" << endl; sortuj( tablica, n, 1 ); for( int j =- n; j <= n; j++ ) { cout << tablica[ j ] << endl; } cout << "posortowane malejaco" << endl; sortuj( tablica, n, 2 ); for( int j =- n; j <= n; j++ ) { cout << tablica[ j ] << endl; } return 0; } |
|
pekfos |
» 2014-05-11 20:14:04 Modyfikujesz elementy o ujemnych indeksach, dlatego program się sypie i argumenty wchodzą do tablicy. |
|
skymaja Temat założony przez niniejszego użytkownika |
» 2014-05-11 20:15:36 To jak można to inaczej zrobić? |
|
pekfos |
» 2014-05-11 20:24:37 Normalnie? Tak jak sortowanie każdej innej tablicy. Od zera, do rozmiar-1.. |
|
skymaja Temat założony przez niniejszego użytkownika |
» 2014-05-11 20:46:30 To teraz rosnąco sortuje do połowy, a potem wypisuje zera, a na sortowaniu malejącym program się wyłącza. #include <iostream>
using namespace std;
void sortuj( int * tab, int n, int sort ) { int tablica[ n ]; if( sort == 1 ) { for( int i = 0; i <= 2 * n; i++ ) { for( int j = 0; j <= 2 * n; j++ ) { if( tablica[ i ] > tablica[ i + 1 ] ) { swap( tablica[ i ], tablica[ i + 1 ] ); } } } } else if( sort == 2 ) { for( int i = 0; i <= 2 * n; i++ ) { for( int j = 0; j <= 2 * n; j++ ) { if( tablica[ i ] < tablica[ i + 1 ] ) { swap( tablica[ i + 1 ], tablica[ i ] ); } } } } }
int main() { int n; cout << "podaj n" << endl; cin >> n; int tablica[ 2 * n + 1 ]; for( int i = 1; i <= n; i++ ) { tablica[ i ] = - i; } for( int i = 0; i <= n; i++ ) { tablica[ i ] = i; } cout << "posortowane rosnaco" << endl; sortuj( tablica, n, 1 ); for( int j = 0; j < 2 * n; j++ ) { cout << tablica[ j ] << endl; } cout << "posortowane malejaco" << endl; sortuj( tablica, n, 2 ); for( int j = 0; j < 2 * n; j++ ) { cout << tablica[ j ] << endl; } return 0; } |
|
ArgonZapan |
» 2014-05-11 20:53:38 jeśli przekazujesz tablicę n elementową, to w pętli nie możesz robić 2n przeszukiwań bo wyjeżdżasz poza tablice n razy.
kolejny błąd to taki że ta 2 pętla nic nie robi, bo wykonuje się 2n razy, a ' i ' zostaje cały czas takie same, czyli sprawdzasz 2n razy to samo. |
|
skymaja Temat założony przez niniejszego użytkownika |
» 2014-05-11 21:29:30 No nie wiem jak to zrobić :/ Poprawiłam tablica[n] na tablica[2*n+1] oraz i na j tam gdzie miałam if( tablica[ i ]... ale nadal źle działa ten program. On nie sortuje tablicy z liczbami od -n do n tylko jakieś losowe sam sobie wybiera. |
|
pekfos |
» 2014-05-11 21:32:25 Co to robi w funkcji sortuj()? Poza tym, że to niepoprawne tworzenie tablicy? int tablica[ 2 * n + 1 ];
|
Tu też. |
|
« 1 » 2 |