[Rozdzial 16] - zadanie domowe
Ostatnio zmodyfikowano 2012-08-28 14:21
TaOto Temat założony przez niniejszego użytkownika |
[Rozdzial 16] - zadanie domowe » 2012-08-28 12:06:30 0 errors, 0 warnings
ale:
Mam poblem z tym, że kiedy program policzy trzy wylosowane liczby i jedna z nich pokryje się z podaną przeze mnie, to pogram dalej wypisuje "Niestety. Trafiaj dalej" zamiast zakończyć grę.
Pyt.nr 2: Czy w tej grze dobrze jest stosowac postinkrementacje czy moge ja bez problemu pominąć?
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main ()
{
srand (time(NULL));
int a;
int liczba;
int strzaly =0;
do
{
cout << "\nPodaj liczbe od 1 do 10: ";
cin >> a;
cout << "\nKomora losowania jest pusta. Nastepuje zwolnienie blokady. Zaczynamy losowanie \ntrzech liczb." << endl;
std::cout << "Wylosowanie pierwsze: " <<(( rand() % 10 ) + 1 ) << std::endl;
int liczba =( rand() % 10) + 1;
std::cout << "Wylosowanie drugie: " << liczba << std::endl;
liczba =( rand() % 10 ) + 1;
std::cout << "Wylosowanie trzecie: " << liczba << std::endl;
if (a!=liczba)
cout << "Niestety. Trafiaj dalej." << endl;
strzaly ++;
}while (a!=liczba);
cout << "Trafiles _____ Koniec " << endl;
return 0 ;
}
|
|
jsc |
» 2012-08-28 12:16:46 Porównujesz zmienną a i liczbę po trzecim losowaniu. |
|
m4tx |
» 2012-08-28 12:17:07 Program zadziała poprawnie, jeśli trzecia wylosowana liczba będzie się pokrywać z tą wybraną. Trzecią liczbę zapisujesz to tej samej zmiennej co drugą, pierwszej w ogóle nie zapisujesz do zmiennej, to jak Ci to ma działać? :) Musisz utworzyć 3 zmienne, do każdej z nich oddzielnie zapisywać nowe liczby i wartości każdej sprawdzać z wybraną przez użytkownika.
@down ano tak też można :P |
|
jsc |
» 2012-08-28 12:25:14 Właściwie wystarczy jedna. Gdy raz się trafi to można za pomocą alternatywy logicznej olać wynik kolejnych sprawdzeń. |
|
TaOto Temat założony przez niniejszego użytkownika |
» 2012-08-28 14:04:04
Tak wiec nadalam kazdej liczbie(1,2,3) wartosc (rownanie z rand), nastepnie przyrownalam zmienna do liczb jak poniżej następuje:
...............
int liczba1 = (rand() % 10 ) + 1;
std::cout << "Wylosowanie pierwsze: " << liczba1 << std::endl;
int liczba2 = (rand() % 10 ) + 1;
std::cout << "Wylosowanie drugie: " << liczba2 << std::endl;
int liczba3 = (rand() % 10 ) + 1;
std::cout << "Wylosowanie trzecie: " << liczba3 << std::endl;
if (a!=liczba1 || a!=liczba2 || a!=liczba3)
cout << "Niestety. Trafiaj dalej." << endl;
}while (a!=liczba1 || a!=liczba2 || a!=liczba3);
cout << "Trafiles _____Koniec " << endl;
return 0 ;
}
....................
Wciaz brak błędów i ostrzeżeń, ale gra nie zatrzymuje się kiedy trafiam liczbę (cyfrę). |
|
Dragonit |
» 2012-08-28 14:09:16 <to nie to> :) |
|
m4tx |
» 2012-08-28 14:12:09 a!=liczba1 || a!=liczba2 || a!=liczba3 |
Ten warunek zwróci true, jeśli choć jedna liczba będzie różna od a. Dlaczego? Zakładając, że liczba1 to 1, liczba2 to 2, liczba3 to 3, a a to 2, to po porównaniu a z liczba1 już mamy false, więc warunek jest spełniony... Użyj && zamiast ||. |
|
jsc |
» 2012-08-28 14:12:10 Może być chociaż miałem na myśli: bool czyZnaleziono = false; for( int i = 0; i < 3; ++i ) { liczba =( rand() % 10 ) + 1; czyZnaleziono =( czyZnaleziono ||( a == liczba ) ); }
|
|
« 1 » 2 |