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

Lekcja 21, drugie zadanie domowe - program przestaje działać

Ostatnio zmodyfikowano 2016-06-23 09:43
Autor Wiadomość
magic_rainbow
Temat założony przez niniejszego użytkownika
Lekcja 21, drugie zadanie domowe - program przestaje działać
» 2016-06-22 21:19:08
Hey, mam prośbę - wytknijcie mi mój błąd. Program przestaje działać przy końcowym wypisywaniu wylosowanych 8 liczb z 10 podanych przez użytkownika.

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

float losuj()
{
    return( rand() % 10 ) + 1;
}

bool czybyla( int t[], int wylosowanych, int liczba )
{
    int i = 0;
    if( liczba < 0 )
         return false;
   
    do
    {
        if( t[ i ] == liczba )
             return true;
       
        i++;
    } while( i < 8 );
   
    return false;
}

int wypisz( int t[] )
{
    int i = 0;
    do
    {
        cout << t[ i ] << endl;
        i++;
    } while( i < 8 );
   
}

float pobierz()
{
    int i;
    cin.clear();
    cin.sync();
    cin >> i;
    return i;
}

int main()
{
    srand( time( 0 ) );
    int tablica[ 10 ];
    int tablica2[ 8 ];
    int liczba = 0;
    int wylosowanych = 0;
    do
    {
        liczba = pobierz();
        tablica[ wylosowanych ] = liczba;
        wylosowanych++;
    } while( wylosowanych < 10 );
   
    cout << endl;
    wylosowanych = 0;
    do
    {
        liczba = losuj();
        if( czybyla( tablica2, wylosowanych, liczba ) == false )
             tablica2[ wylosowanych ] = liczba;
       
        wylosowanych++;
    } while( wylosowanych < 8 );
   
    liczba = 0;
    wylosowanych = 0;
    do
    {
        liczba = tablica2[ wylosowanych ];
        cout << tablica[ liczba ] << endl;
        wylosowanych++;
    } while( wylosowanych < 8 );
   
    return 0;
}
P-149390
jankowalski25
» 2016-06-22 21:22:37
C/C++
int wypisz( int t[] )
{
    int i = 0;
    do
    {
        cout << t[ i ] << endl;
        i++;
    } while( i < 8 );
   
}
Nie zwracasz żadnej wartości.

C/C++
float pobierz()
{
    int i;
    cin.clear();
    cin.sync();
    cin >> i;
    return i;
}
Chcesz zwrócić
int
 czy
float
?

C/C++
float losuj()
{
    return( rand() % 10 ) + 1;
}
Dlaczego
float
?

C/C++
if( czybyla( tablica2, wylosowanych, liczba ) == false )
     tablica2[ wylosowanych ] = liczba;

wylosowanych++;
Co się stanie, gdy liczba już była wylosowana?
P-149391
carlosmay
» 2016-06-22 21:39:09
C/C++
liczba = tablica2[ wylosowanych ]; // są liczby od 1 do 10
cout << tablica[ liczba ] << endl; // a używasz ich tutaj jako indeksy
// dla przypomnienia indeksy są od 0 do 9
// poprawnie będzie
// cout << tablica[liczba - 1] << endl;
// lub losowanie
// return rand() % 10;

Pomijam już uwagi @jankowalski25 o niezgodności typów. Tzn. promocja int do float zachodzi,
ale trzeba mieć świadomość co się piszę.
P-149392
magic_rainbow
Temat założony przez niniejszego użytkownika
Ok
» 2016-06-23 09:43:30
Ok, już wszystko załapałem. Wielkie dzięki za wytłumaczenie problemu.
P-149397
« 1 »
  Strona 1 z 1