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

losowanie bez powtózeń z podanych liczb

Ostatnio zmodyfikowano 2014-03-17 13:32
Autor Wiadomość
leon_w
» 2014-03-12 18:56:27
W funkcji czybylawylosowana() zawsze sprawdza ci tylko pierwszą pozycje w tablicy. Przy każdym wyjściu z funkcji, zmienne utworzone w danej funkcji są zerowane. Takiemu zerowaniu zapobiega przedrostek "static" przed rodzajem zmiennej.
P-106198
maciek77
Temat założony przez niniejszego użytkownika
» 2014-03-12 20:17:51
to nie pomaga, cały kod jest chyba lekko zrypany i mi się nie podoba... muszę go od nowa napisać
P-106214
maciek77
Temat założony przez niniejszego użytkownika
» 2014-03-12 21:33:43
hmm podaje liczby np 22,11,11 i nie losuje ich, w czym może leżeć problem? jak podam 22,1,2 lub 1,2,4 losuje... ogólnie do 5 jest ok
P-106230
SIwy
» 2014-03-13 16:51:49
W funkcji czyBylaWylosowana
C/C++
do {
    if( tab[ i ] == wLiczba )
         return true;
   
    i++;
} while( i < wLiczba );

return false;
}

zamień w while wLiczba na wLiczb - inaczej będziesz buszował gdzieś po pamięci, bo "i" będzie zwiększane aż do wartości wylosowanej liczby, a nie do ilości elementów w tablicy.
P-106266
maciek77
Temat założony przez niniejszego użytkownika
» 2014-03-17 12:27:20
przy wypisywaniu z 8 z 10 podanych po wpisaniu program się wiesza... tablice mam chyba dobrze określone

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

bool czyBylaWylosowana( int wLiczba, int tab[], int wLiczb )
{
    if( wLiczb <= 0 )
         return false;
   
    int i = 0;
   
    do {
        if( tab[ i ] == wLiczb )
             return true;
       
        i++;
    } while( i < wLiczb );
   
    return false;
}

int wczytaj( int tab[], int ile )
{
    cout << "Podaj trzy liczby." << endl;
    int i = 0;
    do {
        cin >> tab[ i ];
        i++;
    } while( i < 10 );
   
}

int wylosuj( int tab[], int ile )
{
    return tab[( rand() % ile ) ];
}

int main()
{
    srand( time( NULL ) );
    int tablica[ 10 ];
    int wylosowane[ 8 ];
    int wylosowanych = 0;
    wczytaj( tablica, 10 );
   
    do {
        int liczba = wylosuj( tablica, 10 );
        if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false )
        {
            wylosowane[ wylosowanych ] = liczba;
            wylosowanych++;
        }
    } while( wylosowanych < 8 );
   
   
    cout << "Wylosowane liczby to " << endl;
    wylosowanych = 0;
   
    do {
        cout << wylosowane[ wylosowanych ] << endl;
        wylosowanych++;
    } while( wylosowanych < 8 );
   
    return 0;
}
P-106621
Monika90
» 2014-03-17 13:32:10
W funkcji czyBylaWylosowana porównujesz liczbę w tablicy z ilością liczb zamiast z wylosowaną liczbą
C/C++
do {
    if( tab[ i ] == wLiczb ) //<---- ŹLE!!!1!
         return true;
   
Może cię to nauczy żeby nie używać nazw, które są tak do siebie podobne jak wLiczb i wLiczba

A jeszcze funkcja wczytaj zwraca int, powinno być void.
P-106625
1 « 2 »
Poprzednia strona Strona 2 z 2