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

Problem ze sprawdzeniem, czy liczba została już wcześniej wylosowana

Ostatnio zmodyfikowano 2016-02-13 14:29
Autor Wiadomość
krzychu_ten
Temat założony przez niniejszego użytkownika
Problem ze sprawdzeniem, czy liczba została już wcześniej wylosowana
» 2016-02-13 12:13:37
Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje.

Witam.
Poniższy program ma taki problem, że w momencie gdy wylosowuje taką samą liczbę nie idzie dalej, zamiast wylosować kolejną liczbę.
Proszę o pomoc, bo patrze na ten kod i nic nie widzę :-)

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

int wpisz( int tab[], int ile )
{
    int i = 0;
    do
    {
        std::cout << "Liczba " << i + 1 << ": ";
        std::cin >> tab[ i ];
        i++;
    } while( i < ile );
   
}

int wypisz( int tab[], int numery[], int ile )
{
    int i = 0;
    do
    {
        std::cout << tab[ numery[ i ] ] << ", ";
        i++;
    } while( i < ile );
   
}

int wylosuj()
{
    return( rand() % 3 );
}

bool czy_byla( int liczba, int tab[], int ile )
{
    if( ile < 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tab[ i ] == liczba )
             return true;
       
        i++;
       
    } while( i < ile );
   
    return false;
   
}

int main()
{
    srand( time( NULL ) );
    int tablica[ 3 ];
    wpisz( tablica, 3 );
    int numery[ 2 ];
   
    int wylosowane = 0;
    do
    {
        int los = wylosuj();
        std::cout << los << std::endl; //sprawdzam jakie liczby zostały wylosowane
       
        if( czy_byla( los, numery, wylosowane ) == false )
             numery[ wylosowane ] = los;
       
        wylosowane++;
       
    } while( wylosowane < 2 );
   
    std::cout << "Wylosowane liczby to: ";
    wypisz( tablica, numery, 2 );
   
    return 0;
}
P-144805
carlosmay
» 2016-02-13 14:29:16
wylosowane++;
tą zmienną inkrementuj tylko gdy zapisujesz liczbę do tablicy.
Inaczej przy powtórzeniu się liczby wychodzisz indeksami poza tablicę.

C/C++
int wpisz( int tab[], int ile )
{
    //...   
}

int wypisz( int tab[], int numery[], int ile )
{
    //...
}
te funkcje nie zwracają niczego. Zmień typ wartości zwracanej przez funkcje.
P-144814
« 1 »
  Strona 1 z 1