Symulator LOTTO- w teori działa w praktyce nie tak jak powinien.
Ostatnio zmodyfikowano 2015-04-11 12:40
BadBullPL Temat założony przez niniejszego użytkownika |
Symulator LOTTO- w teori działa w praktyce nie tak jak powinien. » 2015-04-10 18:46:01 Postanowiłem się pobawić i napisać symulator lotto. Oto kod: #include <iostream> #include <cstdlib> #include <ctime> #include <string> int losowanie() { return( rand() % 51 ) + 1; } int czworka() { return( rand() % 500 ) + 100; } int trojka() { int a = 24; return a; } int piatka() { return( rand() & 19000 ) + 1000; } int szostka() { return( rand() & 48000000 ) + 2000000; } bool czyByla( int tablica[], int iLiczba, int ile ) { if( ile == 0 ) return false; int indeks = 0; do { if( tablica[ indeks ] == iLiczba ) indeks++; return true; } while( indeks < ile ); return false; } int main() { srand( time( NULL ) ); std::string tekst = "wygrac"; std::cout << "Witaj w symulatorze TOTALIZATORA SPORTOWEGO LOTTO" << std::endl; std::cout << "Jest on bardzo realistyczny ale pieniadze które mozesz " << tekst << " już nie bardzo." << std::endl; std::cout << "Zasady są jak w orginalnym TOTKU czyli podajesz 6 liczb od 1 do 50 i w zaleznosci ile trafiles wyplacana ci jest nagroda." << std::endl; std::cout << "Za jedną trafiona lub dwie nie ma żadnych pieniedzy ale od trojki zaczyna sie jazda." << std::endl; std::cout << "Zaczynamy!" << std::endl; std::cout << "Na poczatek wpisz szesc liczb." << std::endl; int twojeLiczby[ 6 ]; int x = 0; do { std::cin.clear(); std::cin.sync(); std::cin >> twojeLiczby[ x ]; if( twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() ) { std::cout << "Podaj LICZBE od 1 do 50." << std::endl; } else x++; } while( x < 6 || twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() ); int wylosowaneLiczby = 0; int cos = 0; int tablica[ 6 ]; do { wylosowaneLiczby = losowanie(); if( czyByla( tablica, wylosowaneLiczby, cos ) == false ) { tablica[ cos ] = wylosowaneLiczby; cos++; } } while( cos < 6 ); int wynik = 0; cos = 0; do { if( tablica[ cos ] == twojeLiczby[ cos ] ) { wynik++; } cos++; } while( cos < 6 ); int trzy = trojka(); int cztery = czworka(); int piec = piatka(); int szesc = szostka(); cos = 0; do { std::cout << "Liczby wylosowane to: " << tablica[ cos ] << "," << std::endl; } while( cos < 6 ); cos = 0; do { std::cout << "A twoje liczby to: " << twojeLiczby[ cos ] << std::endl; } while( cos < 6 ); if( wynik == 0 || wynik == 1 || wynik == 2 ) { std::cout << "Niestety, nic nie wygrales." << std::endl; } if( wynik == 3 ) { std::cout << "Trafiles trojke. Wygrales: " << trzy << std::endl; } if( wynik == 4 ) { std::cout << "Trafiles czworke. Wygrales: " << cztery << std::endl; } if( wynik == 5 ) { std::cout << "Trafiles piatke. Wygrales: " << piec << std::endl; } if( wynik == 6 ) { std::cout << "GRATULEJE. WYGRALES GLOWNA NAGRODE CZYLI: " << szesc << std::endl; } return 0; }
ale niestety podczas wpisywanie liczb zamiast sześciu liczb trzeba wpisać 8 a potem nic sie nie dzieje mógłby mi ktoś napisać gdzie jest błą podejrzeam że tu: do { std::cin.clear(); std::cin.sync(); std::cin >> twojeLiczby[ x ]; if( twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() ) { std::cout << "Podaj LICZBE od 1 do 50." << std::endl; } else x++; } while( x < 6 || twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() );
ale nie wiem gdzie dokładnie. |
|
pekfos |
» 2015-04-10 18:54:09 if( twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() ) { std::cout << "Podaj LICZBE od 1 do 50." << std::endl; } else x++;
} while( x < 6 || twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() );
|
Jak zwiększysz w pętli x, to, dla x większego równego 6, warunek pętli sprawdza nieokreślone wartości. return( rand() & 19000 ) + 1000;
|
To nie działa tak, jak oczekujesz. W szostka() nawet z dwóch powodów. |
|
BadBullPL Temat założony przez niniejszego użytkownika |
» 2015-04-10 19:44:15 Wytłumacz troche wolniej z tą petlą bo nie zrozumiałem |
|
pekfos |
» 2015-04-10 19:53:30 Po x++, twojeLiczby[x] to nie jest zmienna, z której możesz coś odczytać. |
|
michal11 |
» 2015-04-10 19:55:48 W ogóle ten warunek w while jest niepotrzebny, wystarczy tylko x<6. |
|
BadBullPL Temat założony przez niniejszego użytkownika |
» 2015-04-10 20:07:12 No dobra zmodyfikowałem ale dalej nie wyświetla sie nic dalej #include <iostream> #include <cstdlib> #include <ctime> #include <string> int losowanie() { return( rand() % 51 ) + 1; } int czworka() { return( rand() % 500 ) + 100; } int trojka() { int a = 24; return a; } int piatka() { return( rand() % 19000 ) + 1000; } int szostka() { return( rand() % 48000000 ) + 2000000; } bool czyByla( int tablica[], int iLiczba, int ile ) { if( ile == 0 ) return false; int indeks = 0; do { if( tablica[ indeks ] == iLiczba ) indeks++; return true; } while( indeks < ile ); return false; } int main() { srand( time( NULL ) ); std::string tekst = "wygrac"; std::cout << "Witaj w symulatorze TOTALIZATORA SPORTOWEGO LOTTO" << std::endl; std::cout << "Jest on bardzo realistyczny ale pieniadze które mozesz " << tekst << " ju¿ nie bardzo." << std::endl; std::cout << "Zasady s¹ jak w orginalnym TOTKU czyli podajesz 6 liczb od 1 do 50 i w zaleznosci ile trafiles wyplacana ci jest nagroda." << std::endl; std::cout << "Za jedn¹ trafiona lub dwie nie ma ¿adnych pieniedzy ale od trojki zaczyna sie jazda." << std::endl; std::cout << "Zaczynamy!" << std::endl; std::cout << "Na poczatek wpisz szesc liczb." << std::endl; int twojeLiczby[ 6 ]; int x = 0; do { std::cin.clear(); std::cin.sync(); std::cin >> twojeLiczby[ x ]; if( twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() ) { std::cout << "Podaj LICZBE od 1 do 50." << std::endl; } else x++; } while( x < 6 ); int wylosowaneLiczby = 0; int cos = 0; int tablica[ 6 ]; do { wylosowaneLiczby = losowanie(); if( czyByla( tablica, wylosowaneLiczby, cos ) == false ) { tablica[ cos ] = wylosowaneLiczby; cos++; } } while( cos < 6 ); int wynik = 0; cos = 0; do { if( tablica[ cos ] == twojeLiczby[ cos ] ) { wynik++; } cos++; } while( cos < 6 ); int trzy = trojka(); int cztery = czworka(); int piec = piatka(); int szesc = szostka(); cos = 0; do { std::cout << "Liczby wylosowane to: " << tablica[ cos ] << "," << std::endl; cos++; } while( cos < 6 ); cos = 0; do { std::cout << "A twoje liczby to: " << twojeLiczby[ cos ] << std::endl; cos++; } while( cos < 6 ); if( wynik == 0 || wynik == 1 || wynik == 2 ) { std::cout << "Niestety, nic nie wygrales." << std::endl; } if( wynik == 3 ) { std::cout << "Trafiles trojke. Wygrales: " << trzy << std::endl; } if( wynik == 4 ) { std::cout << "Trafiles czworke. Wygrales: " << cztery << std::endl; } if( wynik == 5 ) { std::cout << "Trafiles piatke. Wygrales: " << piec << std::endl; } if( wynik == 6 ) { std::cout << "GRATULEJE. WYGRALES GLOWNA NAGRODE CZYLI: " << szesc << std::endl; } return 0; }
|
|
pekfos |
» 2015-04-10 20:15:45 int indeks = 0; do { if( tablica[ indeks ] == iLiczba ) indeks++; return true; } while( indeks < ile );
|
Co to za pętla? Co by się nie działo, zwracasz true, więc pętla z wywołaniem tej funkcji jest nieskończona. |
|
BadBullPL Temat założony przez niniejszego użytkownika |
» 2015-04-11 12:40:50 Dziękuje ci pekfos i michal11 już sobie poradziłem i wszystko działa jak powinno. |
|
« 1 » |