Reklama
Pokazuje wyniki od 1 do 6 z 6

Temat: [C++] Losowanie, problem z pętlą

  1. #1

    Data rejestracji
    2006
    Położenie
    Strzyżów
    Wiek
    30
    Posty
    494
    Siła reputacji
    18

    Domyślny [C++] Losowanie, problem z pętlą

    Witam,
    w wolnych chwilach bawię sie z c++ i mam następujący problem
    Tutaj treść zadania:
    Kod:
    Twoim zadaniem domowym jest napisanie prostej gry, która ma działać następująco: 
    1. Program losuje liczbę z przedziału od 1 do 1000. 
    2. Użytkownik zgaduje liczbę, która została wylosowana. 
    3. Jeżeli podana liczba jest za duża (za mała) gra wypisuje stosowny komunikat i powraca do kroku 2. 
    4. Jeżeli gracz trafi liczbę wylosowaną to progam kończy działanie, wypisując na ekran wylosowaną liczbę oraz liczbę 'strzałów', które oddał gracz.
    Tutaj mój kod:
    Kod:
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    
    int main()
    {int A;
    int liczba_wylosowana=((rand() % 10)+1);
    int proby=0 ;
        do
       {
            cout << "Podaj liczbe z zakresu 1-10" << endl;
            cin.clear ();
            cin.sync ();
            cin >> A;
            srand( time( NULL ) );
            cout << "Wylosowano numer " <<((rand() % 10)+1)<<endl;
            int liczba_wylosowana= ((rand() % 10)+1) ;
            if (A!=liczba_wylosowana) {cout <<"Nie trafiles! Sproboj jeszcze raz!" <<endl;}
            proby++ ;
        }
        while(A==liczba_wylosowana);
            cin >> liczba_wylosowana;
            cout <<"Gratulacje! Odgadłeś liczbę, ta liczba to: "<<liczba_wylosowana <<endl;
            cout <<"Liczba prób: " << proby <<endl ;
        return 0;
    }
    Program się kompiluje, wychodzi tylko za pierwszym razem, za każdym kolejnym kończy pętle. Nie widzę, gdzie mam błąd, czy może ktoś mi go wskazać, tak abym sam mógł go poprawić?

    Mam wrażenie, że jest ono w while, ale poczekam na waszą opinię.


    PS. zmieniłem zakres na 1-10 w celu lepszego testowania.

    Dodatkowo, używam Code blocks i podcczas testowania, moje okno aplikacji jest bardzo małe, jak je zwiększyc? (było wcześniej normalne, nic nie zmieniałem w opcjach).



    @Edit:

    problem z kodem rozwiązany mój błąd można opisać w tym zdaniu:


    Pętla do ... while zakończy się gdy warunek umieszczony w nawiasach zaokrąglonych zwróci wartość false.
    Cytuj Astaroth napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Za każdym razem jak piszesz : (rand() % 10)+1) , to losujesz nową liczbę, powinieneś wylosować tylko raz przed pętlą do while i pytać usera o jego strzał i porówynywać z odpowiedzią użytkownika i wypisywać odpowieni komunikat w przypadku błędnego strzału.
    yup, źle zrozumialem zadanie, myślałem że po każdej błędnej odpowiedzi ma losować na nowo, dzięki.


    Teraz została kwestia z oknem aplikacji
    Cytuj moth napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    ee nie jestem pewien czy o to chodzi ale jak masz windowsa to w lewym górnym rogu klikasz sobie(na tym pasku co jest nazwa okna) i tam we właściwościach sobie to ustawiasz
    załatwione
    Ostatnio zmieniony przez Cysiu :P : 28-07-2016, 18:47

  2. #2
    Avatar Astaroth
    Data rejestracji
    2006
    Położenie
    Plock
    Posty
    286
    Siła reputacji
    18

    Domyślny

    Za każdym razem jak piszesz : (rand() % 10)+1) , to losujesz nową liczbę, powinieneś wylosować tylko raz przed pętlą do while i pytać usera o jego strzał i porówynywać z odpowiedzią użytkownika i wypisywać odpowieni komunikat w przypadku błędnego strzału.

    Zauważ, że np. tutaj:

    cout << "Wylosowano numer " <<((rand() % 10)+1)<<endl;
    int liczba_wylosowana= ((rand() % 10)+1) ;
    if (A!=liczba_wylosowana)

    Wypisujesz inną liczbę niż porównujesz. Najlepiej odpal sobie program pod debuggerem i zobacz jak zmieniają Ci się zmienne.

    Dodatkowo zapoznaj się z działaniem pętli do while. Podpowiem, że warunek w while() jest błędny.
    Kryptolog i Cyberbezpiecznik

  3. Reklama
  4. #3
    Avatar moth
    Data rejestracji
    2007
    Położenie
    Gdańsk
    Wiek
    38
    Posty
    15,410
    Siła reputacji
    27

    Domyślny

    Cytuj Cysiu :P napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    moje okno aplikacji jest bardzo małe, jak je zwiększyc?
    ee nie jestem pewien czy o to chodzi ale jak masz windowsa to w lewym górnym rogu klikasz sobie(na tym pasku co jest nazwa okna) i tam we właściwościach sobie to ustawiasz

  5. #4

    Data rejestracji
    2006
    Położenie
    Strzyżów
    Wiek
    30
    Posty
    494
    Siła reputacji
    18

    Domyślny

    Chcę zabezpieczyć ten program tak, aby podczas wpisywania, sprawdzało czy :
    1)czy wprowadzono liczbę
    2)czy liczba mieści się w przedziale 1-1000

    Czy powinno się to zrobić przy pomocy if, czy można użyć switcha i rozdzielić to na 2 case'y odpo
    Ostatnio zmieniony przez Cysiu :P : 28-07-2016, 19:07

  6. #5
    Avatar Thrawn
    Data rejestracji
    2005
    Posty
    232
    Siła reputacji
    20

    Domyślny

    Cytuj Cysiu :P napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Chcę zabezpieczyć ten program tak, aby podczas wpisywania, sprawdzało czy :
    1)czy wprowadzono liczbę
    2)czy liczba mieści się w przedziale 1-1000

    Czy powinno się to zrobić przy pomocy if, czy można użyć switcha i rozdzielić to na 2 case'y odpowiednio jeden dla <1 i >1000, oraz default jako inne?
    1. Sprawdź sobie kod ASCII wprowadzonego znaku.
    2. Jeden if z koniunkcją wystarczy

  7. #6

    Data rejestracji
    2006
    Położenie
    Strzyżów
    Wiek
    30
    Posty
    494
    Siła reputacji
    18

    Domyślny

    Dzięki wszystkim, jeżeli ktoś w przyszłości będzie chciał zrobić podobne zadanie, wrzucam kod:

    Kod:
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    
    int main()
    {
    int A;
    int liczba_wylosowana=((rand() % 1000)+1);
    int proby=0 ;
    srand( time( NULL ) );
        do
       {
            cout << "Podaj liczbe z zakresu 1-1000" << endl;
            cin.clear ();
            cin.sync ();
            cin >> A;
            if(cin.fail())
               cout<< "Prosze wpisac liczbe!"<<endl;
            if(!((A<1001)&&(A>0)))
              cout<< "Liczba nie miesci sie w przedziale" <<endl;
                else
            if (A!=liczba_wylosowana) {cout <<"Nie trafiles! Sproboj jeszcze raz!" <<endl;}
            proby++ ;
      }
      while(A!=liczba_wylosowana);
    
            cout <<"Gratulacje! Odgadłeś liczbę, ta liczba to: "<<liczba_wylosowana <<endl;
            cout <<"Liczba prób: " << proby <<endl ;
        return 0;
    }

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Pętla
    Przez BBsrv w dziale Programowanie
    Odpowiedzi: 2
    Ostatni post: 26-06-2014, 09:21
  2. Pętla
    Przez Taca w dziale Muzyka
    Odpowiedzi: 1
    Ostatni post: 17-05-2013, 17:27
  3. League of Legends [Losowanie] Turniej torga 5v5
    Przez Trickhor w dziale Inne gry
    Odpowiedzi: 20
    Ostatni post: 17-02-2013, 21:10
  4. League of Legends Losowanie graczy..
    Przez hucksteR w dziale Inne gry
    Odpowiedzi: 17
    Ostatni post: 14-02-2013, 20:03
  5. Losowanie postaci za sms!!!
    Przez Argoson w dziale Tibia
    Odpowiedzi: 4
    Ostatni post: 29-09-2010, 19:29

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •