Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie rosnące i malejące

Ostatnio zmodyfikowano 2014-05-11 23:42
Autor Wiadomość
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ć.

C/C++
#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;
}
P-109730
pekfos
» 2014-05-11 20:14:04
Modyfikujesz elementy o ujemnych indeksach, dlatego program się sypie i argumenty wchodzą do tablicy.
P-109734
skymaja
Temat założony przez niniejszego użytkownika
» 2014-05-11 20:15:36
To jak można to inaczej zrobić?
P-109735
pekfos
» 2014-05-11 20:24:37
Normalnie? Tak jak sortowanie każdej innej tablicy. Od zera, do rozmiar-1..
P-109737
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.

C/C++
#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;
}
P-109745
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.
P-109746
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.
P-109751
pekfos
» 2014-05-11 21:32:25
C/C++
int tablica[ n ];
Co to robi w funkcji sortuj()? Poza tym, że to niepoprawne tworzenie tablicy?

C/C++
int tablica[ 2 * n + 1 ];
Tu też.
P-109752
« 1 » 2
  Strona 1 z 2 Następna strona