| CodeMeister | » 2012-08-03 17:38:20 no fakt... morzowy :) potwór
 @tirou - ja wogóle nie wiem jak się sortuje przez kopcowanie (a może jednak wiem tylko nazwy nie znam :) tylko że zwróciłem na to dzielenie int-ów przez dwa...
 | 
|  | 
| tirou Temat założony przez niniejszego użytkownika | » 2012-08-03 20:00:30 w sumie to jest algorytm podany na tej stronce  http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0017.php  o sortowaniach, jednak nie rozumiem gdzie popelniam bład w moim kodzie.
 Ja po prsotu ujałem go w funkcje. Jeżeli ktoś inteligentny i oznajmiony z C++ chciałby się nauczyc sortować przez kopcowanie oraz przesledzic mój kod. Z góry serdecznie dziękuję. | 
|  | 
| kamillo121 | » 2012-08-05 01:43:23 Witam, Twój kod to nie jest kod objęty funkcjami z podanej strony. Jeżeli decydujesz się na objęcie czyjegoś kodu funkcjami musisz też przyjąć założenia programu napisanego przez kogoś. Przepisałeś cały kod ale w kilku miejscach prawdopodobnie zmieniłeś po swojemu albo omyłkowo napisałeś inaczej. Twój kod: #include <iostream>#include <cstdlib>
 using namespace std;
 void budujkop( int[], int );
 void rozlozkop( int[], int );
 void sort( int[], int n );
 void swap( int &, int & );
 
 int main()
 {
 const int n = 20;
 int d[ n ];
 for( int i = 0; i < n; i++ )
 { d[ i ] = rand() % 10;
 cout << d[ i ] << " ";
 
 }
 sort( d, n );
 cout << "\nPosortowana: \n\n";
 for( int i = 0; i < n; i++ )
 { cout << d[ i ] << " ";
 }
 
 
 }
 
Zamień na: #include <iostream>#include <cstdlib>
 #include <time.h>
 using namespace std;
 void budujkop( int[], int );
 void rozlozkop( int[], int );
 void sort( int[], int n );
 void swap( int &, int & );
 int main()
 { srand(( unsigned ) time( NULL ) );
 const int n = 20;
 int d[ n + 1 ];
 for( int i = 1; i <= n; i++ )
 { d[ i ] = rand() % 10;
 cout << d[ i ] << " ";
 
 }
 sort( d, n );
 cout << "\nPosortowana: \n\n";
 for( int i = 1; i <= n; i++ )
 { cout << d[ i ] << " ";
 }
 
 
 }
 
Twój kod: if(( k + 1 < i ) &&( d[ k + 1 ] > d[ k ] ) ) int m = k + 1;else m = k;
 
 
zamień na: if(( k + 1 < i ) &&( d[ k + 1 ] > d[ k ] ) ) m = k + 1;else m = k;
 
 
 | 
|  | 
| tirou Temat założony przez niniejszego użytkownika | » 2012-08-05 15:52:47 Jeśli mogę zadać pytanie, dlaczego inicjalizujemy tablica  d[n+1]  ? Bo z tym się wiąże późniejsze zaczęcie odliczania w pętli od  i=1; i<=n  Dlaczego zaczynamy od 1 a nie tak jak w c++ od 0 (tak jak odliczane są tablice ?) | 
|  | 
| mostrom | » 2012-08-05 16:27:59 W c++ 5/2 = 2, a nie 3 A przy inicjowaniu piszesz rzeczywisty wymiar tablicy, np  int tabl[ 6 ];  oznacza że tabl jest tablicą sześciu elementów typu int, ale dostęp do tych elementów masz po wpisaniu indeksu liczonego od 0, np for( int i = 0; i < 6; i++ ) {tabl[ i ] = i;
 }
 | 
|  | 
| tirou Temat założony przez niniejszego użytkownika | » 2012-08-05 19:28:47 @up - to co napisales jest oczywiste, tlyko nie rozumiem dlaczego kamillo zmienił mi kod, zwiększając ilość elementów tablicy o 1 (nie rozumiem na co to wpływa )
 @edit. Może to wynika z tego, iż nie dokońca rozumuje to sortowanie. tzn rozumiem algorytm ale nie potrafię go zaimplementowac ;(
 | 
|  | 
| kamillo121 | » 2012-08-06 00:41:42 | @up - to co napisales jest oczywiste, tlyko nie rozumiem dlaczego kamillo zmienił mi kod, zwiększając ilość elementów tablicy o 1 (nie rozumiem na co to wpływa )
 
 @edit. Może to wynika z tego, iż nie dokońca rozumuje to sortowanie. tzn rozumiem algorytm ale nie potrafię go zaimplementowac ;(
 
 | 
 Powiem Ci tyle(nawet nie wgłębiając się w sam algorytm sortowania), wynika to z tego, że autor algorytmu tak zorganizował kod. Twój problem polega na tym, że przepisałeś czyjś kod ale chyba nie zaznajomiłeś się z kodem i z samym algorytmem. Radzę najpierw poczytać o tym algorytmie, o jego sposobie działania a po tym dokładnie prześledzić kod. Ja wprowadziłem zmiany które spowodowały to, że algorytm działa prawdopodobnie poprawnie. Tak powracając to tak szczerze Ci powiem, że jeżeli rozumiesz algorytm na 90% to raczej go w ogóle nie rozumiesz. Zrozum go w 100% i wtedy zabierz się za kodowanie.  | 
|  | 
| tirou Temat założony przez niniejszego użytkownika | » 2012-08-06 16:57:59 Tak wprowadziłeś zmiany, które spowodowały że program działa poprawnie, dziekuje ci za to i prześledze go. | 
|  | 
| 1 « 2 » |