C++ Sortowanie pozycyjne i tablica dwuwymiarowa
Ostatnio zmodyfikowano 2014-03-17 01:26
mared Temat założony przez niniejszego użytkownika |
C++ Sortowanie pozycyjne i tablica dwuwymiarowa » 2014-03-17 01:26:40 Witam od dłuższego czasu mam problem z sortowaniem pozycyjnym.Użyłem w nim sortowania przez zliczanie jednak coś nie działa tak jak powinno. Ogólnie program ma posortować tym algorytmem słowa o długości maksymalnej 8 znakow.Po każdym miejscu znaczącym ma tworzyć plik i wyświetlać cząstkowe wyniki sortowania. Uznałem że dobre będzie zczytanie całej wartości pliku znak po znaku do tablicy dwuwymiarowej.Jednak chyba pomieszałem i nie za bardzo wiem co może być nie tak. Bardzo was proszę,a wręcz błagam o pomoc :( Tutaj fragment sortowania który mi nie pasuje for( int j = 0; j < n; j++ ) for( int i = n - 1; i >= 0; i-- )
kopia[( ilosc[ tablica[ n - m ][ i ] - 65 ] -- ) - 1 ][ j ] = tablica[ i ][ j ];
A tutaj cały kod żeby ogarnąć o co chodzi. #include <iostream> #include <fstream> #include <cstdlib> #include <cstring> #include <sstream> using namespace std;
template < typename type > std::string ToStr( type tmp ) { std::ostringstream out; out << tmp; return out.str(); }; int main() { const char n = 5; char tablica[ 8 ][ n ]; char kopia[ 8 ][ n ]; int ilosc[ 26 ]; char znak; int i, j; int m; fstream plik; plik.open( "slowa.txt", ios::in ); if( plik.good() ) { cout << "Zawartosc pliku:" << endl; while( !plik.eof() ) { for( j = 0; j < 5; j++ ) { for( i = 0; i <= 8; i++ ) { plik.get( znak ); if( !plik ) break; if( znak != '\n' ) { tablica[ i ][ j ] = znak; } else { break; } cout << tablica[ i ][ j ]; cout << " i: " << i << " j: " << j << endl; } } cout << endl; } plik.close(); } else cout << "Error! Nie udalo otworzyc sie pliku!" << endl; for( m = 0; m <= 7; m++ ) { for( int i = 0; i < 26; i++ ) ilosc[ i ] = 0; for( int i = 0; i < n; i++ ) ilosc[ tablica[ n - m ][ i ] - 65 ] ++; for( int i = 1; i < 26; i++ ) ilosc[ i ] = ilosc[ i ] + ilosc[ i - 1 ]; for( int j = 0; j < n; j++ ) for( int i = n - 1; i >= 0; i-- ) kopia[( ilosc[ tablica[ n - m ][ i ] - 65 ] -- ) - 1 ][ j ] = tablica[ i ][ j ]; for( i = 0; i < n; i++ ) tablica[ i ][ j ] = kopia[ i ][ j ]; string src = "slowa_" + ToStr( m ) + ".txt"; plik.open( src.c_str(), ios::out ); for( int j = 0; j < n; j++ ) { for( int i = 0; i < n; i++ ) plik << tablica[ i ][ j ] << endl; cout << tablica[ i ][ j ] << endl; } } cout << endl; plik.close(); return 0; }
|
|
« 1 » |