[Lekcja 21] Pytanie dotyczące zadania 1
Ostatnio zmodyfikowano 2013-05-13 19:27
Fley Temat założony przez niniejszego użytkownika |
[Lekcja 21] Pytanie dotyczące zadania 1 » 2013-05-11 19:51:26 Problem dotyczy działania programu, podczas losowania 8 liczb nie losuje on 8 liczb, nie mam pojęcia dlaczego. Czy ktoś mógłby mi to wyjaśnić? #include <iostream> #include <ctime> #include <cstdlib>
bool wbp( int liczba, int t[], int licznik ) { if( licznik <= 0 ) return false; int i = 0; do { if( t[ i ] == liczba ) return true; i++; } while( i < licznik ); return false; } int wylosuj( int tab[] ) { return tab[( rand() & 10 ) ]; } int main() { srand( time( NULL ) ); int tablica[ 10 ]; int licznik = 0; int liczba; std::cout << "Prosze podac 10 liczb" << std::endl; do { std::cin >> tablica[ licznik ]; licznik++; } while( licznik < 10 ); licznik = 0; do { liczba = wylosuj( tablica ); if( wbp( liczba, tablica, licznik ) == false ) { std::cout << liczba << ", "; licznik++; } } while( licznik < 8 ); return 0; }
|
|
CodeMeister |
» 2013-05-11 20:08:52 |
|
pekfos |
» 2013-05-11 20:10:04 return tab[( rand() & 10 ) ];
Zły operator, powinno być % . |
|
Fley Temat założony przez niniejszego użytkownika |
» 2013-05-11 20:24:04 Dzięki, :P teraz tylko muszę wykminić jak naprawić tą chece z powtarzaniem. |
|
usmiech |
» 2013-05-11 20:32:07 Realizuj program etapami.. najpierw opanuj jak uzytkownik ma wprowadzic np 10 liczb , pozniej kaz programowi je wydrukowac na ekranie (uzyj tu petli for). Pozniej rand wylosuj 1 liczbe z tej tablicy.. jak bedziesz potrafil to robic to losuj wiecej.. pozniej dopiero zastsujesz bool :)
|
|
Fley Temat założony przez niniejszego użytkownika |
» 2013-05-11 20:49:58 Problem w tym ,że nie wiem jak się do tego losowania bez powtórzeń zabrać. Wylosować jest prosto, tylko jak zastosować do tego bool? Tak wygląda kod bez wcześniejszego bool: #include <iostream> #include <ctime> #include <cstdlib>
int wylosuj() { return( rand() % 10 ); } int main() { srand( time( 0 ) ); int tablica[ 10 ]; int licznik = 0; std::cout << "Prosze podac 10 liczb" << std::endl; do { std::cin >> tablica[ licznik ]; licznik++; } while( licznik < 10 ); licznik = 0; do { std::cout << tablica[ wylosuj() ] << ", "; licznik++; } while( licznik < 8 ); return 0; }
|
|
Bajt |
» 2013-05-11 20:57:19 Może tak: for( int i = 0; i < ilosc_liczb_w_tablicy; ) { Liczby[ i ] = rand() % maksymalna_liczba_w_twojej_tablicy + 1; bool PowtarzaSie = false; for( int j = 0; j < i; ++j ) { if( Liczby[ j ] == Liczby[ i ] ) { PowtarzaSie = true; break; } if( PowtarzaSie == false ) ++i; }
|
|
Fley Temat założony przez niniejszego użytkownika |
» 2013-05-11 21:20:00 Zrozumiałym dla mnie jest moment do sprawdzenia, a póżniej to wygląda tak?: Czyli : ,ze bool "powtarzasię" ma wartość false, dla 'j' początkowej =0 jeżeli 'j<0' (j zwrasta po każdej pętli) to: dla liczb 'j' oraz 'i' jeżeli są równe to bool dostaje wartość true. I dalej dla bool"powtarzasię" jest false to "i" wzrasta. Tak?
|
|
« 1 » 2 |