dominik0294 Temat założony przez niniejszego użytkownika |
[Rozdział 22.] Zadanie domowe - ostatnie z rozdziału. » 2014-02-12 21:44:25 Witam. Pytanie - skąd mogła się wziąć wartość "-2" w drugiej linijce? Czy to jest błąd w kodzie źródłowym? #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
void losujLiczby( int t[], int ile ) { for( int i = 0; i < ile; i++ ) t[ i ] =(( rand() %( 30 - 10 ) ) + 10 ); }
void wypiszTablice1( int t[], int ile ) { for( int i = 0; i < ile; i++ ) cout << t[ i ] << ", "; }
void wypiszTablice2( int t[], int ile ) { for( int i = ile; i > 0; i-- ) cout << t[ i ] << ", "; }
int znajdzMinimum( int t[], int ile ) { int min = t[ 0 ]; for( int i = 0; i < ile; i++ ) { if( min > t[ i ] ) min = t[ i ]; } return min; }
int znajdzMaximum( int t[], int ile ) { int max = t[ 0 ]; for( int i = 0; i < ile; i++ ) { if( max < t[ i ] ) max = t[ i ]; } return max; }
void wypiszMinMax( int a, int b ) { cout << "min: " << a << " max: " << b; }
int main() { srand( time( NULL ) ); int tablica[ 10 ]; losujLiczby( tablica, 10 ); wypiszTablice1( tablica, 10 ); cout << endl << endl; wypiszTablice2( tablica, 10 ); cout << endl << endl; int iMin = znajdzMinimum( tablica, 10 ); int iMax = znajdzMaximum( tablica, 10 ); wypiszMinMax( iMin, iMax ); return 0; }
|
|
Monika90 |
» 2014-02-12 21:49:19 void wypiszTablice2( int t[], int ile ) { for( int i = ile; i > 0; i-- ) cout << t[ i ] << ", "; }
Jeżeli ile jet równe 10, to w pierwszym obiegu pętli i też będzie równe 10, wtedy t[i] to jest wyjście poza zakres tablicy |
|
dominik0294 Temat założony przez niniejszego użytkownika |
» 2014-02-12 21:55:12 Dzięki bardzo,ale krótko po założeniu tematu doszedłem do wniosku że to właśnie w tej pętli jest problem. Dla informacji - żeby to rozwiązać kod zmieniłem w ten sposób: void wypiszTablice2( int t[], int ile ) { for( int i = ile - 1; i > - 1; i-- ) cout << t[ i ] << ", "; } Jeśli da się czytelniej opisać tę pętlę, to proszę o odpowiedź. Dzięki ;). |
|
dante89 |
» 2014-02-13 06:03:28 Hej wystarczy zrobić to tak: void wypiszTablice2( int t[], int ile ) { for( int i = ile - 1; i > = 0; i-- ) cout << t[ i ] << ", "; }
A dlaczego? Ponieważ, jeśli zmienna ile ma w sobie wartość 10 to w funkcji wypiszTablice1(a raczej jej tablicy) jest 10 elementów (0,1,2,3,4,5,6,7,8,9) dlatego jest warunek, że i=0(zaczynamy od 0) i i<10(kończymy na 9, nie 10). Jeśli chcemy w druga stronę to i=10-1 (ponieważ 10 tak na prawdę nie ma) i warunek i>=0, ponieważ iteracja musi dojść do 0 (9,8,7,6,5,4,3,2,1,0) a u Ciebie tego nie było, stąd błędy. Mam nadzieje, że po tym będzie wszystko jasne. Pozdrawiam |
|
dominik0294 Temat założony przez niniejszego użytkownika |
» 2014-02-13 09:27:04 Oczywiście, że wszystko jasne. Po prostu wcześniej tego nie zauważyłem i tak o zanim ktoś odpowiedział sam znalazłem błąd :D. Dzięki, a kod myślę, że Twój i mój jest dosyć jasny. |
|
« 1 » |