pekfos |
» 2019-03-20 00:26:32 To nie wywołanie jest błędne, tylko implementacja. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-03-20 00:51:48 @pekfos - a czy mógłbyś mi dać jakąś wskazówkę, gdzie szukać błędu? Dlaczego kod nr 1 działa poprawnie, a kod nr 2, gdzie dodałem tylko linijkę int i = 0; już nie? W pierwszym przypadku otrzymuję poprawne dane: -303 -22 2 101 . A w drugim już mi się wkradło zero: -303 -22 0 2 . Kod nr 1 #include <iostream>
using namespace std;
void nWartosc( int * pT, int * kT ) { int * nWartosc = pT; int a; for( int * wskaznik = pT; pT != kT; wskaznik++ ) { if( * wskaznik < * nWartosc ) { nWartosc = wskaznik; } if( wskaznik == kT ) { a = * pT; * pT = * nWartosc; * nWartosc = a; pT++; wskaznik = pT; nWartosc = pT; } } }
int main() { int tablica[ 4 ] = { - 303, - 22, 2, 101 }; nWartosc( tablica, tablica + 5 ); for( int i = 0; i < 4; i++ ) cout << tablica[ i ] << " "; }
Kod nr 2 #include <iostream>
using namespace std;
void nWartosc( int * pT, int * kT ) { int * nWartosc = pT; int a; for( int * wskaznik = pT; pT != kT; wskaznik++ ) { if( * wskaznik < * nWartosc ) { nWartosc = wskaznik; } if( wskaznik == kT ) { a = * pT; * pT = * nWartosc; * nWartosc = a; pT++; wskaznik = pT; nWartosc = pT; } } }
int main() { int tablica[ 4 ] = { - 303, - 22, 2, 101 }; int i = 0; nWartosc( tablica, tablica + 5 ); for( int i = 0; i < 4; i++ ) cout << tablica[ i ] << " "; }
|
|
pekfos |
» 2019-03-20 11:02:09 |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-03-20 19:27:23 Wszystko zdaje się działać jak trzeba. Czy dobrze rozwiązałem zadanie? #include <iostream>
using namespace std;
void sortuj( int * pT, int * kT ) { int * nWartosc = pT; int a; for( int * wskaznik = pT; pT != kT; wskaznik++ ) { if( * wskaznik < * nWartosc ) { nWartosc = wskaznik; } if( wskaznik == kT ) { a = * pT; * pT = * nWartosc; * nWartosc = a; pT++; wskaznik = pT; nWartosc = pT; } } }
void wypisz( int posT[], int j ) { for( int i = 0; i < j; i++ ) cout << posT[ i ] << " "; }
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[ 15 ] = { 9, 7, 8, 6, 5, 4, 4, 0, 9, 6, 7, 1, 6, 3, 1 }; sortuj( tab2, tab2 + 15 ); wypisz( tab2, 15 ); }
|
|
pekfos |
» 2019-03-20 19:58:56 Użyj aktualnego maina danego w zadaniu. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-03-20 20:44:26 Fragment aktualnego maina wygląda tak: 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 );
i przy takim mainie wszystko działa. Jednak ten fragment chyba powinien wyglądać tak: ? int tab2[ 16 ] = { 9, 7, 8, 6, 5, 4, 4, 0, 9, 6, 7, 1, 6, 3, 1, - 100 }; sortuj( tab2, tab2 + 16 ); wypisz( tab2, 16 );
#include <iostream>
using namespace std;
void sortuj( int * pT, int * kT ) { int * nWartosc = pT; int a; for( int * wskaznik = pT; pT != kT; wskaznik++ ) { if( * wskaznik < * nWartosc ) { nWartosc = wskaznik; } if( wskaznik == kT ) { a = * pT; * pT = * nWartosc; * nWartosc = a; pT++; wskaznik = pT; nWartosc = pT; } } }
void wypisz( int posT[], int j ) { for( int i = 0; i < j; i++ ) cout << posT[ i ] << " "; }
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, - 101 }; sortuj( tab2, tab2 + 16 ); wypisz( tab2, 16 ); }
No i rzeczywiście przy takim układzie kod zachowuje się wbrew moim oczekiwaniom, bo otrzymuję 0 1 2 3 4 5 6 7 8 9 -101 0 0 1 1 3 4 4 5 6 6 6 7 7 8 9 Nie wiem skąd w drugim rzędzie dodatkowe zero, ale wiem, że kod jest niepoprawny. |
|
pekfos |
» 2019-03-20 23:30:43 Kod w kursie jest dokładnie taki, jaki ma być. Podane tam wyjście programu jest też dokładnie takie, jakie ma być. Rozwiązanie zadania jest błędne, jeśli nie użyjesz kodu narzuconego w zadaniu, lub nie otrzymasz wyniku narzuconego w zadaniu. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-03-21 17:22:27 Zrobiłem kod, który działa. Rozwiązałem je dokonując dekrementacji wskaźnika int * kT . Czy to dobre rozwiązanie? #include <iostream>
using namespace std;
void sortuj( int * pT, int * kT ) { int * nWartosc = pT; kT--; int a; for( int * wskaznik = pT; pT != kT; wskaznik++ ) { if( * wskaznik < * nWartosc ) { nWartosc = wskaznik; } if( wskaznik == kT ) { a = * pT; * pT = * nWartosc; * nWartosc = a; pT++; wskaznik = pT; nWartosc = pT; } } }
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 ); }
|
|
1 2 « 3 » 4 |