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

[Rozdział 22.] Zadanie domowe - ostatnie z rozdziału.

Ostatnio zmodyfikowano 2014-02-13 09:27
Autor Wiadomość
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?

Obraz ilustrujący zachowanie kodu źródłowego
Obraz ilustrujący zachowanie kodu źródłowego

C/C++
#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;
}
P-104560
Monika90
» 2014-02-12 21:49:19
C/C++
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
P-104562
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:
C/C++
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 ;).
P-104564
dante89
» 2014-02-13 06:03:28
Hej wystarczy zrobić to tak:

C/C++
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
P-104568
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.
P-104569
« 1 »
  Strona 1 z 1