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

R. 43 - prośba o sprawdzenie zadania domowego

Ostatnio zmodyfikowano 2019-03-31 21:25
Autor Wiadomość
pekfos
» 2019-03-21 17:39:20
Jest tak dobry, jak tylko mogą to sprawdzić aktualne testy. Czyli średnio. Mógłbym dopisać test
C/C++
sortuj( tab, tab );
który powinien działać poprawnie, nie modyfikując tab. A wtedy ty zrobisz 'kod, który działa', bo dopiszesz na początek if(begin == end) return;, kolejny workaround na słabo zaprojektowany kod. Nie miałbyś takich problemów, gdybyś nie próbował wcisnąć wszystkiego w jedną nieczytelną pętlę.
P-174235
rottingham
Temat założony przez niniejszego użytkownika
» 2019-03-24 19:16:06
Czy to jest dobre rozwiązanie?? :D

C/C++
#include <iostream>

using namespace std;

void sortuj( int * poczatek, int * koniec )
{
    int * nWartosc = poczatek;
    int a;
   
    while( poczatek != koniec )
    {
        for( int * p_poczatek = poczatek; p_poczatek != koniec; p_poczatek++ )
        {
            if( * p_poczatek < * nWartosc )
            {
                nWartosc = p_poczatek;
            }
           
        }
       
        a = * poczatek;
        * poczatek = * nWartosc;
        * nWartosc = a;
        poczatek++;
        nWartosc = poczatek;
       
    }
}

void wypisz( int * begin, int size )
{
    while( size > 0 )
    {
        std::cout << * begin << ' ';
        ++begin;
        --size;
    }
}

int main()
{
    int tab[ 10 ] = { 0, 9, 1, 3, 8, 2, 6, 7, 5, 4 };
    sortuj( tab, tab + 10 );
    wypisz( tab, 10 );
   
    std::cout << '\n';
   
    int tab2[ 16 ] = { 9, 7, 8, 6, 5, 4, 4, 0, 9, 6, 7, 1, 6, 3, 1, - 100 };
    sortuj( tab2, tab2 + 15 );
    wypisz( tab2, 15 );
}
P-174242
pekfos
» 2019-03-24 19:34:42
Tak.

Nie ma powodu, by tworzyć z wyprzedzeniem zmienne o prostym typie. Możesz skrócić kod o 2 linie przez same przeniesienie tworzenia zmiennych.
Kolejna drobna uwaga, p_poczatek to głupia nazwa. Długa i 'początek' nie ma w tym przypadku sensu. Dlaczego nie po prostu p? I tak istnieje wyłącznie w tej krótkiej pętli for.
Jeśli zadanie mówi, że masz napisać funkcję X, to nie znaczy to, że masz napisać tylko i wyłącznie taką funkcję. Jeśli napisać dodatkowe funkcje pomocnicze, kod sortowania można zapisać tak:
C/C++
void sortuj( int * poczatek, int * koniec )
{
    for(; poczatek != koniec; ++poczatek )
         zamien( poczatek, minimum( poczatek, koniec ) );
   
}
Chyba podpowiadałem w tym temacie, że napisanie sortowania jest proste, z użyciem funkcji zwracającej adres najmniejszego elementu.
P-174243
rottingham
Temat założony przez niniejszego użytkownika
» 2019-03-31 21:25:57
C/C++
void sortuj( int * poczatek, int * koniec )
{
    for(; poczatek != koniec; ++poczatek )
         zamien( poczatek, minimum( poczatek, koniec ) );
   
}
 
Zupełnie nie wpadłem na to, że można tak zapisać funkcje... I rzeczywiście w taki sposób łatwiej i szybciej się pisze kod - jest dużo przejrzyściej.

Dzięki wszystkim za pomoc i za cierpliwość - szczególnie Tobie pekfos.

Dla mnie to był do tej pory najcięższy temat z całego kursu. Dark Souls to przechadzka przy tym :D

Pozdrawiam!
P-174294
1 2 3 « 4 »
Poprzednia strona Strona 4 z 4