pekfos |
» 2019-03-21 17:39:20 Jest tak dobry, jak tylko mogą to sprawdzić aktualne testy. Czyli średnio. Mógłbym dopisać test 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ę. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-03-24 19:16:06 Czy to jest dobre rozwiązanie?? :D #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 ); }
|
|
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: 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. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-03-31 21:25:57 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! |
|
1 2 3 « 4 » |