16. Zadanie z grą
Ostatnio zmodyfikowano 2014-08-21 12:20
mlOOdy Temat założony przez niniejszego użytkownika |
16. Zadanie z grą » 2014-08-20 15:21:19 Cześć, proszę o pomoc w tym zadaniu gdy trafię prawidłową liczbę (a wiem jaka jest poprzez dodanie cout<< przed ((rand() % 1000)+1) program nie zakańcza pracy. Domyślam się, że chodzi o warunek while ( zgadniecie < 1 || zgadniecie > 1000); ale nie mam pojęcia co mam wstawić :/. btw od niedawna wyczaiłem taki sposób napisania warunku jak poniżej. Czy jest on prawidłowy ? ( głównie chodzi mi o to że znak == znaczy jest równe bez względu na wartość wyżej podaną np.jakbym podał że 1 == 2 to program uznałby to za prawdę , mimo wszystko ten sposób działa). do { cin.clear(); cin.sync(); cin >> zgadniecie; cin.good(); a = cin.good(); } while( a == false );
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { bool a; int zgadniecie; int strzaly = 0; cout << "Zgadnij wylosowana liczbe w przedziale 1 do 1000" << endl; srand( time( NULL ) ); (( rand() % 1000 ) + 1 ); int liczba =(( rand() % 1000 ) + 1 ); do { do { do { cin.clear(); cin.sync(); cin >> zgadniecie; strzaly++; cin.good(); a = cin.good(); } while( a == false ); if( zgadniecie >= 1 && zgadniecie <= 1000 ) { } else cout << "Wpisana przez Ciebie liczba jest za duza/mala !" << endl; } while( zgadniecie < 1 || zgadniecie > 1000 ); } while( zgadniecie = liczba ); cout << "Trafiles !!! to byla liczba: " << zgadniecie << endl; cout << "Liczba prob: " << strzaly << endl; return 0; }
|
|
pekfos |
» 2014-08-20 15:36:54 Mylisz operatory, wiele elementów programu jest bez sensu. ( głównie chodzi mi o to że znak == znaczy jest równe bez względu na wartość wyżej podaną np.jakbym podał że 1 == 2 to program uznałby to za prawdę , mimo wszystko ten sposób działa). |
1 nie jest równe 2. |
|
mlOOdy Temat założony przez niniejszego użytkownika |
zadanie z grą » 2014-08-20 15:40:41 To co jest źle w tej instrukcji ?
|
|
pekfos |
» 2014-08-20 16:08:32 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { bool a; int zgadniecie; int strzaly = 0; cout << "Zgadnij wylosowana liczbe w przedziale 1 do 1000" << endl; srand( time( NULL ) ); (( rand() % 1000 ) + 1 ); int liczba =(( rand() % 1000 ) + 1 ); do { do { do { cin.clear(); cin.sync(); cin >> zgadniecie; strzaly++; cin.good(); a = cin.good(); } while( a == false ); if( zgadniecie >= 1 && zgadniecie <= 1000 ) { } else cout << "Wpisana przez Ciebie liczba jest za duza/mala !" << endl; } while( zgadniecie < 1 || zgadniecie > 1000 ); } while( zgadniecie = liczba ); cout << "Trafiles !!! to byla liczba: " << zgadniecie << endl; cout << "Liczba prob: " << strzaly << endl; return 0; }
|
|
|
Mateus. |
» 2014-08-20 17:11:42 Ten program powinien/mógłby wy wyglądać tak: 1. Wylosowanie liczby (poza pętlą) i zapisanie jej do zmiennej. 2. Pętla (jedna wystarczy!): - na jej początku czyszczenie strumienia wejściowego, - podanie liczby przez użytkownika, - sprawdzenie czy nie było błędu wczytania, a jeśli nie było to czy jest mniejsza lub większa od wylosowanej i wypisanie stosownego do sytuacji komunikatu, - inkrementacja licznika, - sprawdzenie warunku pętli (gdy liczby są równe to koniec pętli),
Gdybym chciał napisać więcej musiałbym rozwiązać zadanie za ciebie :D
|
|
Moorfox |
» 2014-08-20 20:57:36 cout << rand() % 1000 ) + 1; int a =( rand() % 1000 ) + 1;
Robiąc tak nie wyświetli ci się prawidłowa liczba albo inaczej będą szanse na to jak 1 do 1000 int a =( rand() % 1000 ) + 1; cout << a;
Teraz już by działało a w kodzie pewnie pełno błędów skoro pekfos tak uważa, więc nie sprawdzam. Chociaż pekfos, wielu rzeczy się czepia... |
|
mlOOdy Temat założony przez niniejszego użytkownika |
random number » 2014-08-20 21:51:26 Trochę poprawiłem kod i działa dobrze chociaż chciałbym zmienić to: if( zgadniecie >= 1 && zgadniecie <= 1000 ) { } else cout << "Wpisana przez Ciebie liczba jest za duza/mala !" << endl;
if( zgadniecie != liczba ) cout << "niestety to nie ta liczba :/" << endl; na: if( zgadniecie < 1 && zgadniecie > 1000 ) cout << "Wpisana przez Ciebie liczba jest za duza/mala !" << endl;
if( zgadniecie != liczba && zgadniecie >= 1 && zgadniecie <= 1000 ) cout << "niestety to nie ta liczba :/" << endl; ale jak tak napiszę to program działa niepoprawnie, macie jakieś sugestie ? :D a co do tego co napisał Mateus. to w 1 pętli by się chyba tego nie dało zrobić bo wtedy nie zabezpieczyłbym strumienia wejściowego przed niepowołanymi wprowadzeniami. #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { int zgadniecie; int strzaly = 0; cout << "Zgadnij wylosowana liczbe w przedziale 1 do 1000" << endl; srand( time( NULL ) ); int liczba =( rand() % 1000 ) + 1; cout << liczba; do { do { cin.clear(); cin.sync(); cin >> zgadniecie; strzaly++; cin.good(); } while( cin.good() == false ); if( zgadniecie >= 1 && zgadniecie <= 1000 ) { } else cout << "Wpisana przez Ciebie liczba jest za duza/mala !" << endl; if( zgadniecie != liczba ) cout << "niestety to nie ta liczba :/" << endl; } while( zgadniecie != liczba ); cout << "Trafiles !!! to byla liczba: " << zgadniecie << endl; cout << "Liczba prob: " << strzaly << endl; return 0; } |
|
pekfos |
» 2014-08-20 22:06:12 ale jak tak napiszę to program działa niepoprawnie, macie jakieś sugestie ? :D |
Ta, czytać dokładnie zadanie i dotychczasowe odpowiedzi. Nie chodzi o sprawdzenie, czy liczba jest w zakresie 1-1000. |
|
« 1 » 2 |