[C++] Losowanie liczb
Ostatnio zmodyfikowano 2015-12-30 14:09
BluePotato Temat założony przez niniejszego użytkownika |
[C++] Losowanie liczb » 2015-12-30 13:09:06 Cześć. Otóż mam pewien problem z tym kodem, potrzebuję jakiejś poprawki żeby działał tak jak trzeba. (losuje liczbe, wprowadzasz ja. jesli trafisz - wiadomosc i ile razy losowales, jesli nie wiadomosc o nie trafieniu i powrot do pkt 1. czyli losowanie, wprowadzenie) długo próbowałem to naprawić przez zmianianie do while, if else, ale jakoś nie pomaga. To kod: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand( time( NULL ) ); int liczba =( rand() % 3 ) + 1; int elo; int ilerazy = 0; do { cout << "Podaj liczbe: "; cin >> elo; ilerazy++; if( elo > 3, elo < 1 ) { cout << "Podales liczbe ze zlego zakresu lub litere."; } else if( elo = liczba ) { cout << "Trafiles! Wylosowana liczba to: " << liczba << endl; cout << "Probowales " << ilerazy << "razy."; } else cout << "Nie udalo ci sie trafic."; if( elo = liczba ) { cout << "Trafiles! Wylosowana liczba to: " << liczba << endl; cout << "Probowales " << ilerazy << "razy."; } else cout << "Nie udalo ci sie trafic."; } while( liczba = elo ); return 0; }
|
|
carlosmay |
» 2015-12-30 13:22:17 Zamiast przecinka powinien być operator logiczny. W tym przypadku z warunku brane jest pod uwagę tylko wyrażenie najbardziej z prawej elo < 1 . Natomiast tutaj zamiast porównania wartości następuje przypisanie i jeśli liczba jest inna niż zero to wartość wyrażenia w warunku zawsze będzie true (a losowane są od 1 do 3 więc zawsze się wykona). Zapoznaj się z operatorami logicznymi oraz operatorami relacji w języku C++ . Operatory relacjiOperatory logiczne |
|
BluePotato Temat założony przez niniejszego użytkownika |
» 2015-12-30 13:36:16 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand( time( NULL ) ); int liczba =( rand() % 10 ) + 1; int elo; int ilerazy = 0; while( liczba == elo ); { cout << "Podaj liczbe od 1 do 10: "; cin >> elo; if( elo >= 1 && elo <= 10 ) { ilerazy++; if( elo == liczba ) { cout << "Trafiles! Wylosowana liczba to: " << liczba << endl; cout << "Probowales " << ilerazy << "razy."; } else cout << "Nie udalo ci sie trafic."; } else cout << "Podales liczbe z poza zakresu."; return 0; } }
Lekko to skróciłem, ale dalej mnie zastanawia co zrobić, żeby po nie trafieniu liczby wracał na początek, a nie kończył działanie. |
|
Lucas535 |
» 2015-12-30 13:44:25 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand( time( NULL ) ); int liczba =( rand() % 3 ) + 1; int elo; int ilerazy = 0; cout << "Podaj liczbe: "; while( cin >> elo ) { ilerazy++; if( elo == liczba ) { cout << "Trafiles! Wylosowana liczba to: " << liczba << endl; cout << "Probowales " << ilerazy << " razy."; break; } else { cout << "Nie udalo ci sie trafic.\nPodaj liczbe: "; continue; } } return 0; }
|
|
carlosmay |
» 2015-12-30 13:45:22 int elo; int ilerazy = 0; while( liczba == elo );
|
Lepiej użyć pętli do...while(); albo pierwsze wprowadzenie elo dać przed wejściem do pętli. ale co zrobić, żeby po błędnym wprowadzeniu liczby wracał na początek |
Zmienić operator logiczny w warunku pętli. Można też wczytywanie i sprawdzenie elo dać w warunku pętli. Będzie krótszy kod. np. tak: int ilerazy = 1; cout << "Podaj liczbe: "; while(( cin >> elo ) &&( elo != liczba ) ) { ilerazy++; cout << "Nie udalo ci sie trafic.\nPodaj liczbe: "; } cout << "Trafiles! Wylosowana liczba to: " << liczba << endl; cout << "Probowales " << ilerazy << " razy.";
|
|
BluePotato Temat założony przez niniejszego użytkownika |
» 2015-12-30 14:09:38 Lucas nie zauważyłem twojego postu, więc bardziej sugerowałem się odp. carlosa, ale obu wam dziękuje za pomoc. Zrozumiałem już, co robiłem źle. #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand( time( NULL ) ); int liczba =( rand() % 10 ) + 1; int elo; int ilerazy = 0; cout << "Podaj liczbe: "; while(( cin >> elo ) &&( elo != liczba ) ) { ilerazy++; cout << "Nie udalo ci sie trafic.\nPodaj liczbe: "; } if( liczba == elo ) { cout << "Trafiles! Wylosowana liczba to: " << liczba << endl; cout << "Probowales " << ilerazy << " razy."; } return 0; }
Na koniec coś takiego mi wyszło - i działa. :) |
|
« 1 » |