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

Rozdział 22. Problem z zadaniem 2.

Ostatnio zmodyfikowano 2013-06-28 20:05
Autor Wiadomość
Skuty
Temat założony przez niniejszego użytkownika
Rozdział 22. Problem z zadaniem 2.
» 2013-06-28 19:28:31
Napisz program, który za pomocą pętli
for wypełni 20 elementową tablicę następującym ciągiem liczb: {1, 6, 11, ... , (1 + n*5)}. Zawartość wypełnionej tablicy wypisz na ekran.

Otóż wszystko ładnie działa ale na ostatniej zmiennej tablicy zamiast liczby 101 daje 96. Czemu tak się dzieje?
C/C++
#include <iostream>
using namespace std;
int nadawanie( int tab[], int liczbaWyp )
{
    if( liczbaWyp == 0 )
         return 1;
   
    int a;
    if( liczbaWyp > 0 )
         a = tab[ --liczbaWyp ] += 5;
   
    return a;
   
}

int wypisz( int tab[], int liczbaWyp )
{
    for( int wypelnienie = 0; wypelnienie < liczbaWyp; wypelnienie++ )
         cout << tab[ wypelnienie ] << " ";
   
}

int main()
{
    int liczby[ 20 ];
    int bufor;
    for( int wypelnienie = 0; wypelnienie < 20; wypelnienie++ )
    {
        bufor = nadawanie( liczby, wypelnienie );
        liczby[ wypelnienie ] = bufor;
    }
   
    wypisz( liczby, 20 );
   
   
    return 0;
   
}
P-86496
pekfos
» 2013-06-28 19:33:17
Przekombinowałeś z tym nadawanie(). Masz n, a w ten dziwny sposób usiłujesz obliczyć 1 + n*5.

C/C++
a = tab[ --liczbaWyp ] += 5;
Zamiast + masz +=.
P-86497
KubusiastyKuba
» 2013-06-28 19:37:39
w for w main jesli ustawisz "wypelnienie < 21" to dziala tak jak chciales nie wiem czemu ,nie chce mi sie myslec :P
P-86500
pekfos
» 2013-06-28 19:39:40
jesli ustawisz "wypelnienie < 21" to dziala tak jak chciales
20 elementową tablicę
;)
P-86501
KubusiastyKuba
» 2013-06-28 19:41:58
a spróbowałeś ? nie wiem czemu tak sie dzieje ale wtedy dziala :P
P-86502
pekfos
» 2013-06-28 19:45:30
To UB, ale przez pomylony operator prawie działa. Prawie, bo ciąg zaczyna się od 6, a nie od 1.
P-86505
KubusiastyKuba
» 2013-06-28 19:47:41
tego nie zauważylem :P
P-86506
Skuty
Temat założony przez niniejszego użytkownika
» 2013-06-28 20:05:27
Dzięki Pekfos - muszę odpocząć chwilkę bo umysł zmęczony i nie wpadłem na to :D

Działający kod:
C/C++
#include <iostream>
using namespace std;
int nadawanie( int liczbaWyp )
{
   
    int a = 1 + liczbaWyp * 5;
    return a;
   
}

int wypisz( int tab[], int liczbaWyp )
{
    for( int wypelnienie = 0; wypelnienie < liczbaWyp; wypelnienie++ )
         cout << tab[ wypelnienie ] << " ";
   
}

int main()
{
    int liczby[ 20 ];
    int bufor;
    for( int wypelnienie = 0; wypelnienie < 20; wypelnienie++ )
    {
        bufor = nadawanie( wypelnienie );
        liczby[ wypelnienie ] = bufor;
    }
   
    wypisz( liczby, 20 );
   
   
    return 0;
   
}
P-86511
« 1 »
  Strona 1 z 1