Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Rozdzial 16] - zadanie domowe

Ostatnio zmodyfikowano 2012-08-28 14:21
Autor Wiadomość
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 ;
}
P-63867
jsc
» 2012-08-28 12:16:46
Porównujesz zmienną a i liczbę po trzecim losowaniu.
P-63868
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
P-63869
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ń.
P-63871
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ę).
P-63886
Dragonit
» 2012-08-28 14:09:16
<to nie to> :)
P-63887
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 ||.
P-63889
jsc
» 2012-08-28 14:12:10
Może być chociaż miałem na myśli:
C/C++
bool czyZnaleziono = false;
for( int i = 0; i < 3; ++i )
{
    liczba =( rand() % 10 ) + 1;
    czyZnaleziono =( czyZnaleziono ||( a == liczba ) );
}
P-63890
« 1 » 2
  Strona 1 z 2 Następna strona