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

C++ Sortowanie pozycyjne i tablica dwuwymiarowa

Ostatnio zmodyfikowano 2014-03-17 01:26
Autor Wiadomość
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
C/C++
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.
C/C++
#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; // zmienna pomocnicza
    int i, j;
    int m; //miejsce po ktorym sortuje(indeks)
   
   
   
    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;
        // zliczanie ile jest tych samych znakow w slowach na pozycji n-k
        for( int i = 0; i < n; i++ )
             ilosc[ tablica[ n - m ][ i ] - 65 ] ++;
        // dodanie poprzednich wartosci dla utworzenia kolejnosci
       
        for( int i = 1; i < 26; i++ )
             ilosc[ i ] = ilosc[ i ] + ilosc[ i - 1 ];
        // umieszczenie slow na odpowiednych miejscach
        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 ];
        // przepisanie wyniku do starej tablicy
       
        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;
}
P-106613
« 1 »
  Strona 1 z 1