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

Pomoc w sortowaniu bąbelkowym

Ostatnio zmodyfikowano 2013-04-18 18:48
Autor Wiadomość
CTRL85
Temat założony przez niniejszego użytkownika
Pomoc w sortowaniu bąbelkowym
» 2013-04-18 18:02:02
C/C++
#include <iostream>
#include <cstdlib>

using namespace std;

int ile = 1;
string wpisane = "";
int * wiek;
void wczytaj()
{
    string temp = "";
    getline( cin, temp );
    ile = atoi( temp.c_str() );
    wiek = new int[ ile ];
    getline( cin, wpisane );
}
void zamien()
{
    int j = 0;
    string temp;
    for( int i = 0; i < wpisane.length(); i++ )
    {
        if( wpisane[ i ] != ' ' )
        {
            temp = temp + wpisane[ i ];
        }
        if( wpisane[ i ] == ' ' || i == wpisane.length() - 1 )
        {
            wiek[ j ] = atoi( temp.c_str() );
           
            temp = "";
            j++;
        }
    }
}
void sortuj()
{
    int * temp = new int[ ile ];
    int najw = 0;
    for( int i = 0; i < ile; i++ )
    {
        for( int g = 0; g < ile - 1; g++ )
        {
            if( wiek[ g ] > wiek[ g + 1 ] )
            {
                najw = wiek[ g ];
                wiek[ g ] = wiek[ g + 1 ];
                wiek[ g + 1 ] = najw;
                temp[ i ] = najw;
            }
        }
    }
    for( int i = 0; i < ile; i++ )
         wiek[ i ] = temp[ i ];
   
    for( int i = 0; i < ile; i++ )
         cout << wiek[ i ] << endl;
   
    system( "PAUSE" );
   
    delete[] temp;
}

int main()
{
    wczytaj();
    zamien();
    sortuj();
    cout << wiek[(( ile + 1 ) / 2 ) - 1 ] << endl;
    delete[] wiek;
}
Co jest źle w tym kodzie? Przy wpisaniu np
3
1 2 3

Wypisuje losowe liczby. Gdzie jest błąd?
P-80798
pekfos
» 2013-04-18 18:09:05
temp po pętli może mieć przypadkowe wartości które potem przypisujesz do tablicy z liczbami.
P-80800
CTRL85
Temat założony przez niniejszego użytkownika
» 2013-04-18 18:18:46
C/C++
#include <iostream>
#include <cstdlib>

using namespace std;

int ile = 1;
string wpisane = "";
int * wiek;
void wczytaj()
{
    string temp = "";
    getline( cin, temp );
    ile = atoi( temp.c_str() );
    for( int i = 0; i < ile; i++ )
         temp[ i ] = 0;
   
    wiek = new int[ ile ];
    getline( cin, wpisane );
}
void zamien()
{
    int j = 0;
    string temp = "";
    for( int i = 0; i < wpisane.length(); i++ )
    {
        if( wpisane[ i ] != ' ' )
        {
            temp = temp + wpisane[ i ];
        }
        if( wpisane[ i ] == ' ' || i == wpisane.length() - 1 )
        {
            wiek[ j ] = atoi( temp.c_str() );
           
            temp = "";
            j++;
        }
    }
}
void sortuj()
{
    int * temp = new int[ ile ];
    int najw = 0;
    for( int i = 0; i < ile; i++ )
         temp[ i ] = 0;
   
    for( int i = 0; i < ile; i++ )
    {
        for( int g = 0; g < ile - 1; g++ )
        {
            if( wiek[ g ] > wiek[ g + 1 ] )
            {
                najw = wiek[ g ];
                wiek[ g ] = wiek[ g + 1 ];
                wiek[ g + 1 ] = najw;
                temp[ i ] = najw;
            }
        }
    }
    for( int i = 0; i < ile; i++ )
         wiek[ i ] = temp[ i ];
   
    for( int i = 0; i < ile; i++ )
         cout << wiek[ i ] << endl;
   
    system( "PAUSE" );
   
    delete[] temp;
}

int main()
{
    wczytaj();
    zamien();
    sortuj();
    cout << wiek[(( ile + 1 ) / 2 ) - 1 ] << endl;
    delete[] wiek;
}

teraz są same zera. Siedzę nad tym od wczoraj i nic nie wymyśliłem. :(
P-80802
pekfos
» 2013-04-18 18:20:55
Podajesz posortowane dane, więc z tymi zerami nic się dalej nie dzieje ;)
P-80803
CTRL85
Temat założony przez niniejszego użytkownika
» 2013-04-18 18:26:57
Nie rozumiem. Siedzę nad tym już dziś 3,5h i muszę to skończyć przed 20:00 i może nie widzę czegoś oczywistego...
P-80804
pekfos
» 2013-04-18 18:29:29
Zamiast zer skopiuj tamtą tablicę. Jeśli reszta jest dobra, to powinno działać.
P-80805
CTRL85
Temat założony przez niniejszego użytkownika
» 2013-04-18 18:37:07
C/C++
#include <iostream>
#include <cstdlib>

using namespace std;

int ile = 1;
string wpisane = "";
int * wiek;
void wczytaj()
{
    string temp = "";
    getline( cin, temp );
    ile = atoi( temp.c_str() );
    for( int i = 0; i < ile; i++ )
         temp[ i ] = 0;
   
    wiek = new int[ ile ];
    getline( cin, wpisane );
}
void zamien()
{
    int j = 0;
    string temp = "";
    for( int i = 0; i < wpisane.length(); i++ )
    {
        if( wpisane[ i ] != ' ' )
        {
            temp = temp + wpisane[ i ];
        }
        if( wpisane[ i ] == ' ' || i == wpisane.length() - 1 )
        {
            wiek[ j ] = atoi( temp.c_str() );
           
            temp = "";
            j++;
        }
    }
}
void sortuj()
{
    int * temp = new int[ ile ];
    int najw = 0;
    for( int i = 0; i < ile; i++ )
         temp[ i ] = wiek[ i ];
   
    for( int i = 0; i < ile; i++ )
    {
        for( int g = 0; g < ile - 1; g++ )
        {
            if( wiek[ g ] > wiek[ g + 1 ] )
            {
                najw = wiek[ g ];
                wiek[ g ] = wiek[ g + 1 ];
                wiek[ g + 1 ] = najw;
                temp[ i ] = najw;
            }
        }
    }
    for( int i = 0; i < ile; i++ )
         wiek[ i ] = temp[ i ];
   
    for( int i = 0; i < ile; i++ )
         cout << wiek[ i ] << endl;
   
    system( "PAUSE" );
   
    delete[] temp;
}

int main()
{
    wczytaj();
    zamien();
    sortuj();
    cout << wiek[(( ile + 1 ) / 2 ) - 1 ] << endl;
    delete[] wiek;
}

Nie wiem czemu teraz źle sortuje liczby. :(
P-80806
pekfos
» 2013-04-18 18:42:58
Wywal całkiem tablice temp i te 2 pętle w których kopiujesz tablice.
P-80807
« 1 » 2
  Strona 1 z 2 Następna strona