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ść
maciek77
Temat założony przez niniejszego użytkownika
losowanie bez powtózeń z podanych liczb
» 2014-03-11 20:15:41
Mam do Was kolejne pytanie. Napisał jakiś tam kod ale po wpisaniu liczb program coś się wiesza, może ktoś da jakąś podpowiedź

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 ] == wLiczba )
             return true;
       
        i++;
    } while( i < wLiczba );
   
    return false;
}

int wylosuj()
{
    return( rand() % 2 ) + 1;
}

int main()
{
    srand( time( NULL ) );
    int tablica[ 3 ];
    int wylosowane[ 2 ];
    int wylosowanych = 0;
    cout << "Podaj trzy liczby." << endl;
    int i = 0;
    do {
        cin >> tablica[ i ];
        i++;
    } while( i < 3 );
   
    do {
        int liczba = wylosuj();
        if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false )
        {
            wylosowane[ wylosowanych ] = liczba;
            wylosowanych++;
        }
    } while( wylosowanych < 2 );
   
    cout << "Wylosowane liczby to " << endl;
    wylosowanych = 0;
   
    do {
        wylosowane[ wylosowanych ];
        wylosowanych++;
    } while( wylosowanych < 2 );
   
    return 0;
}
P-106125
poprawka
» 2014-03-11 20:41:22
Nie wiesza sie tylko nie wyświetla liczb.

C/C++
for( wylosowanych = 0; wylosowanych != 2; wylosowanych++ )

     cout << "Wylosowane liczby to " << wylosowane[ wylosowanych ] << endl;


Zamień na to i liczby wylosowane się wyświetlą.

A że złe to inna sprawa. Musisz wysłać tablice do funkcji losujacej.
P-106128
maciek77
Temat założony przez niniejszego użytkownika
» 2014-03-11 21:12:39
ale chciałby to zrobić bez użycia for :)
P-106129
leon_w
» 2014-03-11 21:51:46
No to uzyj do while, co za problem.
w sumie to przed:
C/C++
wylosowane[ wylosowanych ];
wylosowanych++;
} while( wylosowanych < 2 );

 dodaj "cout<<" i załatwione.
P-106137
maciek77
Temat założony przez niniejszego użytkownika
» 2014-03-11 22:15:36
to nic nie daje
P-106140
leon_w
» 2014-03-11 22:38:13
Jak nic nie daje???
C/C++
cout << "Wylosowane liczby to " << endl;
wylosowanych = 0;

do {
    cout << wylosowane[ wylosowanych ] << endl;
    wylosowanych++;
} while( wylosowanych < 2 );

P-106142
maciek77
Temat założony przez niniejszego użytkownika
» 2014-03-12 13:01:20
no tak, mój błąd , wypisuje liczby ale nie działa tak jak należy
P-106159
maciek77
Temat założony przez niniejszego użytkownika
» 2014-03-12 14:47:53
po modyfikacji mam coś takiego ale dalej to nie to... wypisuje 2 pierwsze liczby i jak wpisze liczbę większą niż 5 to sięwiesza

#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]==wLiczba)
return true;
i++;
}while(i < wLiczba);
return false;
}

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

int main()
{
srand(time(NULL));
int tablica[3];
int wylosowane [2];
int wylosowanych=0;
cout << "Podaj trzy liczby." << endl;
int i=0;
do{
cin >> tablica[i];
i++;
}while(i<3);

do{
int liczba =wylosuj(tablica);
if(czyBylaWylosowana(liczba, wylosowane, wylosowanych) ==false)
{
wylosowane[wylosowanych]=liczba;
wylosowanych++;
}
}while(wylosowanych<2);


cout << "Wylosowane liczby to " << endl;
wylosowanych=0;

do{
cout << wylosowane[wylosowanych] << endl;
wylosowanych++;
}while(wylosowanych<2);
return 0;
}
P-106168
« 1 » 2
  Strona 1 z 2 Następna strona