• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Poprawność kodu C++

Object Storage Arubacloud
0 głosów
494 wizyt
pytanie zadane 8 kwietnia 2021 w C i C++ przez Dawidziu Bywalec (2,610 p.)
otwarte ponownie 9 kwietnia 2021 przez Dawidziu

Witam, czy wie ktoś może, dla czego w tym programie nie działa quick sort? Znajduję się ono pod voidem f_qs i  wywoływane jest na dole w kodzie

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <time.h>
#include <windows.h>

using namespace std;

char wybor;

clock_t start, stop;

int ile, i, a, b, c, j, x, y;

float *liczby, *bs, *qs, *posortowane, f, z, czas_bs, czas_qs;

void f_bs ()
{
    for ( i = 1; i < ile; i ++ )
    {
        for ( j = 1; j < ile; j ++ )
        {
            if ( bs [ j - 1 ] > bs [ j ] )
            {
                f = bs [ j - 1 ];

                bs [ j - 1 ] = bs [ j ];

                bs [ j ] = f;
            }
        }
    }
}

void f_qs ( int x0, int y0 )
{
    z = qs [ 0 ];

    x = x0;

    y = y0;

    do
    {
        while ( qs [ x ] < z )
        {
            x ++;
        }

        while ( qs [ y ] > z )
        {
            y --;
        }

        if ( x <= y )
        {
            f = qs [ x ];

            qs [ x ] = qs [ y ];

            qs [ y ] = f;

            x ++;

            y --;
        }
    }
    while ( x <= y );

    if ( x < y0 )
    {
        f_qs ( x, y0 );
    }

    if ( y > x0 )
    {
        f_qs ( x0, y );
    }
}

void napis ()
{
    b = 2;

    system ( "cls" );

    cout << "Liczby przed posortowaniem: ";

    if ( ile <= 10 )
    {
        for ( i = 0; i < ile; i ++ )
        {
            cout << endl << " - " << liczby [ i ];

            bs [ i ] = liczby [ i ];

            qs [ i ] = liczby [ i ];
        }
    }

    else
    {
        for ( i = 0; i < 10; i ++ )
        {
            cout << endl << " - " << liczby [ i ];

            bs [ i ] = liczby [ i ];

            qs [ i ] = liczby [ i ];
        }

        cout << endl << "... (+" << ile - 10 << ")";

        for ( i = 10; i < ile; i ++ )
        {
            bs [ i ] = liczby [ i ];

            qs [ i ] = liczby [ i ];
        }
    }

    cout << endl << endl << "Liczby po posortowaniu: ";
}

void czas_napis_bs ()
{
    cout << "Czas sortowania babelkowego: " << czas_bs << "s";
}

void czas_napis_qs ()
{
    cout << "Czas szybkiego sortowania: " << czas_qs << "s";
}

void czas_napis ()
{
    cout << endl << endl;

    switch ( wybor )
    {
        case '1':

        czas_napis_bs ();

        break;

        case '2':

        czas_napis_qs ();

        break;

        case '3':

        czas_napis_bs ();

        cout << endl;

        czas_napis_qs ();

        break;
    }

    cout << endl << endl;
}

int main()
{
    srand ( time ( NULL ) );

    system ( "color 09" );

    for ( ; ; )
    {
        for ( a = 1; a == 1; )
        {
            system ( "cls" );

            cout << "Co chcesz zrobic: " << endl << endl;

            cout << "[ 1 ] - Wybierz liczby do posortowania" << endl;

            cout << "[ 2 ] - Wylosuj liczby do posortowania" << endl;

            cout << "[ 3 ] - Wyjdz z programu" << endl;

            wybor = getch ();

            if ( wybor == '3' )
            {
                a = 2;

                exit ( 0 );
            }

            else if ( ( wybor == '1' ) || ( wybor == '2' ) )
            {
                a = 2;

                system ( "cls" );

                cout << "Ile liczb z zakresu od 1 do 1.000.000 chcesz posortowac: ";

                cin >> ile;

                for ( b = 1; b == 1; )
                {
                    if ( ile < 2 )
                    {
                        system ( "cls" );

                        cout << "Podaj poprawna wartosc: ";

                        cin >> ile;
                    }

                    else
                    {
                        b = 2;
                    }
                }

                liczby = new float [ ile ];

                bs = new float [ ile ];

                qs = new float [ ile ];

                posortowane = new float [ ile ];

                switch ( wybor )
                {
                    case '1':

                    for ( i = 0; i < ile; i ++ )
                    {
                        system ( "cls" );

                        cout << "Podaj " << i + 1 << " z " << ile << " liczbe: ";

                        cin >> liczby [ i ];

                        if ( liczby [ i ] > 1000000 )
                        {
                            liczby [ i ] = 1000000;
                        }

                        else if ( liczby [ i ] < 1 )
                        {
                            liczby [ i ] = 1;
                        }
                    }

                    break;

                    case '2':

                    for ( i = 0; i < ile; i ++ )
                    {
                        liczby [ i ] = rand () % 1000000 + 1;
                    }

                    break;
                }
            }
        }

        for ( a = 1; a == 1; )
        {
            system ( "cls" );

            cout << "Co chcesz zrobic: " << endl << endl;

            cout << "[ 1 ] - Wybierz sposob sortowania " << endl;

            cout << "[ 2 ] - Powrot do menu glownego" << endl;

            cout << "[ 3 ] - Wyjdz z programu" << endl;

            wybor = getch ();

            if ( wybor == '3' )
            {
                a = 2;

                exit ( 0 );
            }

            else if ( ( wybor == '1' ) || ( wybor == '2' ) )
            {
                a = 2;

                switch ( wybor )
                {
                    case '1':

                    for ( b = 1; b == 1; )
                    {
                        system ( "cls" );

                        cout << "Wybierz sposob sortowania: " << endl << endl;

                        cout << "[ 1 ] - Sortowanie babelkowe" << endl;

                        cout << "[ 2 ] - Szybkie sortowanie" << endl;

                        cout << "[ 3 ] - Porownaj oba" << endl;

                        wybor = getch ();

                        switch ( wybor )
                        {
                            case '1':

                            napis ();

                            start = clock ();

                            f_bs ();

                            stop = clock ();

                            czas_bs = ( float ) ( stop - start ) / CLOCKS_PER_SEC;

                            for ( i = 0; i < ile; i ++ )
                            {
                                posortowane [ i ] = bs [ i ];
                            }

                            break;

                            case '2':

                            napis ();

                            start = clock ();

                            f_qs ( 0, ile - 1 );

                            stop = clock ();

                            czas_qs = ( float ) ( stop - start ) / CLOCKS_PER_SEC;

                            for ( i = 0; i < ile; i ++ )
                            {
                                posortowane [ i ] = qs [ i ];
                            }

                            break;

                            case '3':

                            napis ();

                            start = clock ();

                            f_bs ();

                            stop = clock ();

                            czas_bs = ( float ) ( stop - start ) / CLOCKS_PER_SEC;

                            for ( i = 0; i < ile; i ++ )
                            {
                                posortowane [ i ] = bs [ i ];
                            }

                            start = clock ();

                            f_qs ( 0, ile - 1 );

                            stop = clock ();

                            czas_qs = ( float ) ( stop - start ) / CLOCKS_PER_SEC;

                            for ( i = 0; i < ile; i ++ )
                            {
                                posortowane [ i ] = qs [ i ];
                            }

                            break;
                        }
                    }

                    if ( ile <= 10 )
                    {
                        for ( i = 0; i < ile; i ++ )
                        {
                            cout << endl << " - " << posortowane [ i ];
                        }

                        czas_napis ();
                    }

                    else
                    {
                        for ( i = 0; i < 10; i ++ )
                        {
                            cout << endl << " - " << posortowane [ i ];
                        }

                        cout << endl << "... (+" << ile - 10 << ")" << endl;

                        czas_napis_bs ();
                    }

                    if ( ile <= 10 )
                    {
                        cout << "Co chcesz zrobic: " << endl << endl;

                        cout << "[ 1 ] - Powrot do menu glownego" << endl;

                        cout << "[ 2 ] - Wyjdz z programu" << endl;

                        for ( b = 1; b == 1; )
                        {
                            wybor = getch ();

                            switch ( wybor )
                            {
                                case '1':

                                b = 2;

                                break;

                                case '2':

                                b = 2;

                                exit ( 0 );

                                break;
                            }
                        }
                    }

                    else
                    {
                        cout << "Co chcesz zrobic: " << endl << endl;

                        cout << "[ 1 ] - Wyslwietl wszystko" << endl;

                        cout << "[ 2 ] - Powrot do menu glownego" << endl;

                        cout << "[ 3 ] - Wyjdz z programu" << endl;

                        for ( b = 1; b == 1; )
                        {
                            wybor = getch ();

                            switch ( wybor )
                            {
                                case '1':

                                system ( "cls" );

                                cout << "Liczby po posortowaniu: ";

                                for ( i = 0; i < ile; i ++ )
                                {
                                    cout << endl << " - " << bs [ i ];
                                }

                                cout << endl << endl << "Czas sortowania babelkowego: " << czas_bs << "s" << endl << endl;

                                cout << "Co chcesz zrobic: " << endl << endl;

                                cout << "[ 1 ] - Powrot do menu glownego" << endl;

                                cout << "[ 2 ] - Wyjdz z programu" << endl;

                                for ( c = 1; c == 1; )
                                {
                                    wybor = getch ();

                                    switch ( wybor )
                                    {
                                        case '1':

                                        c = 2;

                                        b = 2;

                                        break;

                                        case '2':

                                        b = 2;

                                        exit ( 0 );

                                        break;
                                    }
                                }

                                break;

                                case '2':

                                b = 2;

                                break;

                                case '3':

                                b = 2;

                                exit ( 0 );

                                break;
                            }
                        }
                    }

                    break;
                }
            }
        }

        delete [] liczby;

        delete [] bs;

        delete [] qs;
    }

    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 8 kwietnia 2021 przez Limono Użytkownik (560 p.)
wybrane 9 kwietnia 2021 przez Dawidziu
 
Najlepsza

Ogólnie to pomysliłeś\aś się w ostatnich linijkach funkcji f_qs, dlatego program się wysypuje. tak to powinno wyglądać

    while ( x <= y );
    if ( x < y0 )   f_qs ( y0, x );
    if ( y > x0 )   f_qs ( y, x0 );

Ale nawet jak poprawisz te linijki to program przestanie się wysypywać ale nadal nie bedzie sortować poprawnie. Powód jest nastepujący wszystkie zmienne masz globalne, wypisane na samej górze czyli każda funkcja ma do nich dostęp. Kiedy funkcja f_qs wywołuje nową funkcje f_qs to ta nie tworzy nowych zmiennych tylko zmienia wartości już istejących z których kożystają inne funkcje wiec powinno to wygądać tak

void f_qs ( int x0, int y0 )
{
    float z = qs [ 0 ];
    int x = x0;
    int y = y0;
    float f;

    do{
        while ( qs [ x ] < z )  x++;
        while ( qs [ y ] > z )  y--;

        if ( x <= y )
        {
            f = qs [ x ];
            qs [ x ] = qs [ y ];
            qs [ y ] = f;
            x ++;
            y --;
        }
    }
    while ( x <= y );
    if ( x < y0 )   f_qs ( y0, x );
    if ( y > x0 )   f_qs ( y, x0 );
}

Te zmienne które tutaj sa musisz usunąć z góry i bedzie działać

Ps. popatrz na tablice posortowane poniewarz wykonujesz na niej niepotrzebnego zapisu i zapomniałaś jej usunąć

komentarz 9 kwietnia 2021 przez Dawidziu Bywalec (2,610 p.)

Dzięki bardzo za pomoc laugh

komentarz 9 kwietnia 2021 przez Dawidziu Bywalec (2,610 p.)

@Limono, Kurcze, pozmieniałem program wg twoich instrukcji i teraz się nie wysypuje, jednak nadal nie sortuje poprawnie liczb. Nawet jeśli usunąłem swojego voida, a twoją wersję wrzuciłem na jego miejsce nadal było to samo. Tak teraz wygląda kod:

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <time.h>
#include <windows.h>

using namespace std;

char wybor;

clock_t start, stop;

int ile, i, a, b, c, j;

float *liczby, *bs, *qs, *posortowane, f, czas_bs, czas_qs;

void f_bs ()
{
    for ( i = 1; i < ile; i ++ )
    {
        for ( j = 1; j < ile; j ++ )
        {
            if ( bs [ j - 1 ] > bs [ j ] )
            {
                f = bs [ j - 1 ];

                bs [ j - 1 ] = bs [ j ];

                bs [ j ] = f;
            }
        }
    }
}

void f_qs ( int x0, int y0 )
{
    float buf, z = qs [ 0 ];

    int x = x0, y = y0;

    do
    {
        while ( qs [ x ] < z )
        {
            x ++;
        }

        while ( qs [ y ] > z )
        {
            y --;
        }

        if ( x <= y )
        {
            buf = qs [ x ];

            qs [ x ] = qs [ y ];

            qs [ y ] = buf;

            x ++;

            y --;
        }
    }
    while ( x <= y );

    if ( x < y0 )
    {
        f_qs ( y0, x );
    }

    if ( y > x0 )
    {
        f_qs ( y, x0 );
    }
}


void napis ()
{
    b = 2;

    system ( "cls" );

    cout << "Liczby przed posortowaniem: ";

    if ( ile <= 10 )
    {
        for ( i = 0; i < ile; i ++ )
        {
            cout << endl << " - " << liczby [ i ];

            bs [ i ] = liczby [ i ];

            qs [ i ] = liczby [ i ];
        }
    }

    else
    {
        for ( i = 0; i < 10; i ++ )
        {
            cout << endl << " - " << liczby [ i ];

            bs [ i ] = liczby [ i ];

            qs [ i ] = liczby [ i ];
        }

        cout << endl << "... (+" << ile - 10 << ")";

        for ( i = 10; i < ile; i ++ )
        {
            bs [ i ] = liczby [ i ];

            qs [ i ] = liczby [ i ];
        }
    }

    cout << endl << endl << "Liczby po posortowaniu: ";
}

void czas_napis_bs ()
{
    cout << "Czas sortowania babelkowego: " << czas_bs << "s";
}

void czas_napis_qs ()
{
    cout << "Czas szybkiego sortowania: " << czas_qs << "s";
}

void czas_napis ()
{
    cout << endl << endl;

    switch ( wybor )
    {
        case '1':

        czas_napis_bs ();

        break;

        case '2':

        czas_napis_qs ();

        break;

        case '3':

        czas_napis_bs ();

        cout << endl;

        czas_napis_qs ();

        break;
    }

    cout << endl << endl;
}

int main()
{
    srand ( time ( NULL ) );

    system ( "color 09" );

    for ( ; ; )
    {
        for ( a = 1; a == 1; )
        {
            system ( "cls" );

            cout << "Co chcesz zrobic: " << endl << endl;

            cout << "[ 1 ] - Wybierz liczby do posortowania" << endl;

            cout << "[ 2 ] - Wylosuj liczby do posortowania" << endl;

            cout << "[ 3 ] - Wyjdz z programu" << endl;

            wybor = getch ();

            if ( wybor == '3' )
            {
                a = 2;

                exit ( 0 );
            }

            else if ( ( wybor == '1' ) || ( wybor == '2' ) )
            {
                a = 2;

                system ( "cls" );

                cout << "Ile liczb z zakresu od 1 do 1.000.000 chcesz posortowac: ";

                cin >> ile;

                for ( b = 1; b == 1; )
                {
                    if ( ile < 2 )
                    {
                        system ( "cls" );

                        cout << "Podaj poprawna wartosc: ";

                        cin >> ile;
                    }

                    else
                    {
                        b = 2;
                    }
                }

                liczby = new float [ ile ];

                bs = new float [ ile ];

                qs = new float [ ile ];

                posortowane = new float [ ile ];

                switch ( wybor )
                {
                    case '1':

                    for ( i = 0; i < ile; i ++ )
                    {
                        system ( "cls" );

                        cout << "Podaj " << i + 1 << " z " << ile << " liczbe: ";

                        cin >> liczby [ i ];

                        if ( liczby [ i ] > 1000000 )
                        {
                            liczby [ i ] = 1000000;
                        }

                        else if ( liczby [ i ] < 1 )
                        {
                            liczby [ i ] = 1;
                        }
                    }

                    break;

                    case '2':

                    for ( i = 0; i < ile; i ++ )
                    {
                        liczby [ i ] = rand () % 1000000 + 1;
                    }

                    break;
                }
            }
        }

        for ( a = 1; a == 1; )
        {
            system ( "cls" );

            cout << "Co chcesz zrobic: " << endl << endl;

            cout << "[ 1 ] - Wybierz sposob sortowania " << endl;

            cout << "[ 2 ] - Powrot do menu glownego" << endl;

            cout << "[ 3 ] - Wyjdz z programu" << endl;

            wybor = getch ();

            if ( wybor == '3' )
            {
                a = 2;

                exit ( 0 );
            }

            else if ( ( wybor == '1' ) || ( wybor == '2' ) )
            {
                a = 2;

                switch ( wybor )
                {
                    case '1':

                    for ( b = 1; b == 1; )
                    {
                        system ( "cls" );

                        cout << "Wybierz sposob sortowania: " << endl << endl;

                        cout << "[ 1 ] - Sortowanie babelkowe" << endl;

                        cout << "[ 2 ] - Szybkie sortowanie" << endl;

                        cout << "[ 3 ] - Porownaj oba" << endl;

                        wybor = getch ();

                        switch ( wybor )
                        {
                            case '1':

                            napis ();

                            start = clock ();

                            f_bs ();

                            stop = clock ();

                            czas_bs = ( float ) ( stop - start ) / CLOCKS_PER_SEC;

                            for ( i = 0; i < ile; i ++ )
                            {
                                posortowane [ i ] = bs [ i ];
                            }

                            break;

                            case '2':

                            napis ();

                            start = clock ();

                            f_qs ( 0, ile - 1 );

                            stop = clock ();

                            czas_qs = ( float ) ( stop - start ) / CLOCKS_PER_SEC;

                            for ( i = 0; i < ile; i ++ )
                            {
                                posortowane [ i ] = qs [ i ];
                            }

                            break;

                            case '3':

                            napis ();

                            start = clock ();

                            f_bs ();

                            stop = clock ();

                            czas_bs = ( float ) ( stop - start ) / CLOCKS_PER_SEC;

                            for ( i = 0; i < ile; i ++ )
                            {
                                posortowane [ i ] = bs [ i ];
                            }

                            start = clock ();

                            f_qs ( 0, ile - 1 );

                            stop = clock ();

                            czas_qs = ( float ) ( stop - start ) / CLOCKS_PER_SEC;

                            for ( i = 0; i < ile; i ++ )
                            {
                                posortowane [ i ] = qs [ i ];
                            }

                            break;
                        }
                    }

                    if ( ile <= 10 )
                    {
                        for ( i = 0; i < ile; i ++ )
                        {
                            cout << endl << " - " << posortowane [ i ];
                        }

                        czas_napis ();
                    }

                    else
                    {
                        for ( i = 0; i < 10; i ++ )
                        {
                            cout << endl << " - " << posortowane [ i ];
                        }

                        cout << endl << "... (+" << ile - 10 << ")" << endl;

                        czas_napis_bs ();
                    }

                    if ( ile <= 10 )
                    {
                        cout << "Co chcesz zrobic: " << endl << endl;

                        cout << "[ 1 ] - Powrot do menu glownego" << endl;

                        cout << "[ 2 ] - Wyjdz z programu" << endl;

                        for ( b = 1; b == 1; )
                        {
                            wybor = getch ();

                            switch ( wybor )
                            {
                                case '1':

                                b = 2;

                                break;

                                case '2':

                                b = 2;

                                exit ( 0 );

                                break;
                            }
                        }
                    }

                    else
                    {
                        cout << "Co chcesz zrobic: " << endl << endl;

                        cout << "[ 1 ] - Wyslwietl wszystko" << endl;

                        cout << "[ 2 ] - Powrot do menu glownego" << endl;

                        cout << "[ 3 ] - Wyjdz z programu" << endl;

                        for ( b = 1; b == 1; )
                        {
                            wybor = getch ();

                            switch ( wybor )
                            {
                                case '1':

                                system ( "cls" );

                                cout << "Liczby po posortowaniu: ";

                                for ( i = 0; i < ile; i ++ )
                                {
                                    cout << endl << " - " << bs [ i ];
                                }

                                cout << endl << endl << "Czas sortowania babelkowego: " << czas_bs << "s" << endl << endl;

                                cout << "Co chcesz zrobic: " << endl << endl;

                                cout << "[ 1 ] - Powrot do menu glownego" << endl;

                                cout << "[ 2 ] - Wyjdz z programu" << endl;

                                for ( c = 1; c == 1; )
                                {
                                    wybor = getch ();

                                    switch ( wybor )
                                    {
                                        case '1':

                                        c = 2;

                                        b = 2;

                                        break;

                                        case '2':

                                        b = 2;

                                        exit ( 0 );

                                        break;
                                    }
                                }

                                break;

                                case '2':

                                b = 2;

                                break;

                                case '3':

                                b = 2;

                                exit ( 0 );

                                break;
                            }
                        }
                    }

                    break;
                }
            }
        }

        delete [] liczby;

        delete [] bs;

        delete [] qs;

        delete [] posortowane;
    }

    return 0;
}

 

komentarz 9 kwietnia 2021 przez Limono Użytkownik (560 p.)
edycja 9 kwietnia 2021 przez Limono

Pomyliłem się, będzie tak

void f_qs ( int x0, int y0 )
{
    float z = qs[(x0+y0)/2];
    int x = x0;
    int y = y0;
    float f;

    do{
        while ( qs [ x ] < z )  x++;
        while ( qs [ y ] > z )  y--;

        if ( x <= y )
        {
            f = qs [ x ];
            qs [ x ] = qs [ y ];
            qs [ y ] = f;
            x ++;
            y --;
        }
    }
    while ( x <= y );
    if ( x < y0 )   f_qs ( x, y0 );
    if ( y > x0 )   f_qs ( x0, y );
}

Teraz działa poprawnie przetestowałem.

ps. jak chcesz to moge ci pomóc wprowadzić troche pożądku 

edit: jak chcesz to może być ewętualnie tak

float z = qs[x0];

 

komentarz 9 kwietnia 2021 przez Dawidziu Bywalec (2,610 p.)
Jeśli masz czas to bardzo chętnie zobacze jak mógłbym uporządkować ten kod. To jest dopiero jeden z moich pierwszych programów i dopiero się ucze jak je zapisywać.
komentarz 10 kwietnia 2021 przez Limono Użytkownik (560 p.)

Sam dopiero się uczę więc códów nie wymyśle ale chwilowo cierpie na nude. Przerobiłem tylko funkcje sam oceń czy jest troche czytelniej, pobawa się troche z tymi zmiennymi co masz na samej górze bo to tak nie powinno być, powiny być one tworzone np wewnątrz danej funkcji (tak jak to jest w funkcji f_qs) i jeszcze wyszukaj w gogle komende do przerywania pętli, niebędziesz wtedy musieć wykożystywać zmienych a, b, c etc. więc wygląda to tak:

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <time.h>
#include <windows.h>

using namespace std;

char wybor;
clock_t start, stop;
int ile, i, a, j, *liczby, *bs, *qs, *posortowane, *posortowane2;
long double czas_bs, czas_qs;

void f_bs ();
void f_qs ( int x0, int y0 );
void czas_napis ();
void sortowanie (char decyzja,int n);


int main()
{

    srand ( time ( NULL ) );
    system ( "color 09" );
    for ( ; ; )
    {
        for (a = 1; a == 1; )
        {
            system ( "cls" );
            cout << "Co chcesz zrobic: " << endl << endl;
            cout << "[ 1 ] - Wybierz liczby do posortowania" << endl;
            cout << "[ 2 ] - Wylosuj liczby do posortowania" << endl;
            cout << "[ 3 ] - Wyjdz z programu" << endl;
            wybor = getch ();
            if ( wybor == '3' )     exit ( 0 );
            if  (( wybor == '1' ) || ( wybor == '2' ))
                a=2;
        }
        system ( "cls" );
        cout << "Ile liczb z zakresu od 1 do 1.000.000 chcesz posortowac: ";
        cin >> ile;
        for (a = 1; a == 1; )
            {
                if ( ile < 2 )
                {
                    system ( "cls" );
                    cout << "Podaj poprawna wartosc: ";
                    cin >> ile;
                }
                else        a = 2;
            }
        liczby = new int [ ile ];
        switch ( wybor )
        {
            case '1':
            for ( i = 0; i < ile; i ++ )
            {
                system ( "cls" );
                cout << "Podaj " << i + 1 << " z " << ile << " liczbe: ";
                cin >> liczby [ i ];
                if ( liczby [ i ] > 1000000 )       liczby [ i ] = 1000000;
                else if ( liczby [ i ] < 1 )        liczby [ i ] = 1;
            }
            break;

            case '2':
            for ( i = 0; i < ile; i ++ )            liczby [ i ] = rand () % 1000000 + 1;
            break;
        }
        for ( a = 1; a == 1; )
        {
            system ( "cls" );
            cout << "Co chcesz zrobic: " << endl << endl;
            cout << "[ 1 ] - Wybierz sposob sortowania " << endl;
            cout << "[ 2 ] - Powrot do menu glownego" << endl;
            cout << "[ 3 ] - Wyjdz z programu" << endl;
            wybor = getch ();
            if ( wybor == '3' )         exit ( 0 );
            else if (( wybor == '1' ) || ( wybor == '2' ))    a = 2;
        }
        if (wybor=='1')
        {
            posortowane = new int [ ile ];
            for ( a = 1; a == 1; )
            {
                system ( "cls" );
                cout << "Wybierz sposob sortowania: " << endl << endl;
                cout << "[ 1 ] - Sortowanie babelkowe" << endl;
                cout << "[ 2 ] - Szybkie sortowanie" << endl;
                cout << "[ 3 ] - Porownaj oba" << endl;
                wybor = getch ();
                if (( wybor == '1' ) || ( wybor == '2' )|| ( wybor == '3' ))      a=2;
            }

            sortowanie (wybor,ile);

            if ( ile <= 10 )
            {
                for ( a = 1; a == 1; )
                {
                    cout << "Co chcesz zrobic: " << endl << endl;
                    cout << "[ 1 ] - Powrot do menu glownego" << endl;
                    cout << "[ 2 ] - Wyjdz z programu" << endl;
                    wybor = getch ();
                    if (wybor=='2')       exit( 0 );
                    else if (wybor=='1')       a=2;
                }
            }
            else
            {
                for ( a = 1; a == 1; )
                {
                    cout << "Co chcesz zrobic: " << endl << endl;
                    cout << "[ 1 ] - Wyslwietl wszystko" << endl;
                    cout << "[ 2 ] - Powrot do menu glownego" << endl;
                    cout << "[ 3 ] - Wyjdz z programu" << endl;
                    wybor = getch ();
                    if (wybor=='3')       exit( 0 );
                    if ( ( wybor == '1' ) || ( wybor == '2' ) )    a = 2;
                }
                if(wybor='1')
                {
                    system ( "cls" );
                    cout << "Liczby po posortowaniu: ";
                    for ( i = 0; i < ile; i ++ )
                        cout << endl << " - " << posortowane [ i ];
                    cout<<endl;

                    for ( a = 1; a == 1; )
                    {
                    cout << "Co chcesz zrobic: " << endl << endl;
                    cout << "[ 1 ] - Powrot do menu glownego" << endl;
                    cout << "[ 2 ] - Wyjdz z programu" << endl;
                    wybor = getch ();
                    if(wybor=='2')       exit( 0 );
                    if(wybor=='1')       a=2;
                    }
                }
            }
            delete [] liczby;
            delete [] bs;
            delete [] qs;
            delete [] posortowane;
            delete [] posortowane2;
        }
    }
    return 0;
}

void f_bs ()
{
    float f;
    for ( i = 1; i < ile; i ++ )
    {
        for ( j = 1; j < ile; j ++ )
        {
            if ( bs [ j - 1 ] > bs [ j ] )
            {
                f = bs [ j - 1 ];
                bs [ j - 1 ] = bs [ j ];
                bs [ j ] = f;
            }
        }
    }
}

void f_qs ( int x0, int y0 )
{
    float z = qs[(x0+y0)/2];
    int x = x0;
    int y = y0;
    float f;

    do{
        while ( qs [ x ] < z )  x++;
        while ( qs [ y ] > z )  y--;

        if ( x <= y )
        {
            f = qs [ x ];
            qs [ x ] = qs [ y ];
            qs [ y ] = f;
            x ++;
            y --;
        }
    }
    while ( x <= y );
    if ( x < y0 )   f_qs ( x, y0 );
    if ( y > x0 )   f_qs ( x0, y );
}

void czas_napis ()
{
    cout << endl << endl;
    switch ( wybor )
    {
        case '1':
        cout << "Czas sortowania babelkowego: " << czas_bs << "s";
        break;
        case '2':
        cout << "Czas szybkiego sortowania: " << czas_qs << "s";
        break;
        case '3':
        cout << "Czas sortowania babelkowego: " << czas_bs << "s"<< endl;
        cout << "Czas szybkiego sortowania: " << czas_qs << "s";
        break;
    }

    cout << endl << endl;
}

void sortowanie (char decyzja, int n)
{
    system ( "cls" );
    cout << "Liczby przed posortowaniem: ";
    if ( n <= 10 )
    {
        for ( i = 0; i < n; i ++ )
            cout << endl << " - " << liczby [ i ];
    }
    else
    {
        for ( i = 0; i < 10; i ++ )
            cout << endl << " - " << liczby [ i ];

        cout << endl << "... (+" << n - 10 << ")";
    }

    switch(decyzja)
    {
        case '1':
            bs = new int [ n ];
            for ( i = 0; i < n; i ++ )        bs[ i ] = liczby[ i ];
            start = clock ();
            f_bs ();
            stop = clock ();
            czas_bs = ( long double ) ( stop - start ) / CLOCKS_PER_SEC;
            for ( i = 0; i < n; i ++ )        posortowane[ i ] = bs[ i ];
        break;

        case '2':
            qs = new int [ n ];
            for ( i = 0; i < n; i ++ )        qs[ i ] = liczby[ i ];
            start = clock ();
            f_qs (0, n-1);
            stop = clock ();
            czas_qs = ( long double ) ( stop - start ) / CLOCKS_PER_SEC;
            for ( i = 0; i < n; i ++ )        posortowane[ i ] = qs[ i ];
        break;

        case '3':
            posortowane2 = new int [ n ];
            bs = new int [ n ];
            for ( i = 0; i < n; i ++ )        bs[ i ] = liczby[ i ];
            start = clock ();
            f_bs ();
            stop = clock ();
            czas_bs = ( long double ) ( stop - start ) / CLOCKS_PER_SEC;
            for ( i = 0; i < n; i ++ )        posortowane[ i ] = bs[ i ];

            qs = new int [ n ];
            for ( i = 0; i < n; i ++ )        qs[ i ] = liczby[ i ];
            start = clock ();
            f_qs (0, n-1);
            stop = clock ();
            czas_qs = ( long double ) ( stop - start ) / CLOCKS_PER_SEC;
            for ( i = 0; i < n; i ++ )        posortowane2[ i ] = qs[ i ];
        break;
    }

    cout <<endl<< "Liczby po posortowaniu: ";
    if ( n <= 10 )
        {
            for ( i = 0; i < n; i ++ )
                cout << endl << " - " << posortowane [ i ];
        czas_napis ();
        }
    else
    {
        for ( i = 0; i < 10; i ++ )
                cout << endl << " - " << posortowane [ i ];

        cout << endl << "... (+" << n - 10 << ")" << endl;
        czas_napis ();
    }
    cout<<endl;
}

A i zmieniłem tablice na int poniewarz 

rand () % 1000000 + 1;

i tak zawsze da wartość całkowitą

edit: i moszesz posukać informacji o zabezpieczenu sie przed wpisaniem wyrazu w liczbe

 

komentarz 10 kwietnia 2021 przez Dawidziu Bywalec (2,610 p.)

No faktycznie jest trochę bardziej przejrzyście, także dzięki za pomoc. Mi jeszcze trochę ciężko używać funkcji w sposób intuicyjny i dla tego te zmienne definiuje na początku programu, a samych funkcji używam jak najmniej. A co do tego, dlaczego tablica na liczby była floatem, to wiem, że rand zwraca liczby całkowite, jednak jest też w programie możliwość ręcznego wpisywania liczb i, żeby można było w ten sposób sortować liczby z przecinkiem. Także dzięki bardzo za pomoc i będę starał się jak najlepiej optymalizować kod laugh. ( A i jeszcze taka mała uwaga, ponieważ pisze się przez Ż cheekywink )

Podobne pytania

0 głosów
0 odpowiedzi 182 wizyt
pytanie zadane 25 maja 2020 w Java przez miko98 Nowicjusz (150 p.)
+1 głos
1 odpowiedź 188 wizyt
pytanie zadane 11 kwietnia 2021 w C i C++ przez Dawidziu Bywalec (2,610 p.)
0 głosów
1 odpowiedź 416 wizyt

92,572 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...