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

Rozdzial 16ty. Pseudolosowe liczby calkowite.

Ostatnio zmodyfikowano 2016-04-11 22:25
Autor Wiadomość
Grzegorzdut
Temat założony przez niniejszego użytkownika
Rozdzial 16ty. Pseudolosowe liczby calkowite.
» 2016-03-13 12:57:13
Hej,
moj kod wyglada tak:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()


{
    bool check;
    int zakres;
    int zgadula;
    int proba;
    int liczba;
    proba = 0;
    srand( time( NULL ) );
    zakres =(( rand() % 1000 ) + 1 );
    liczba = zakres;
    std::cout << "Program wlasnie wylosowal liczbe od 1 do 1000. " << liczba << std::endl;
    do
    {
        std::cout << "Zgadnij jaka to liczba? " << std::endl;
        std::cin >> zgadula;
        check = std::cin.fail();
        std::cin.clear();
        std::cin.sync();
        if( zgadula < 1 || zgadula > 1000 || check )
        {
            std::cout << "To nie jest liczba od 1 do 1000." << std::endl;
            do
            {
                std::cout << "Zgadnij jaka to liczba? " << std::endl;
                std::cin >> zgadula;
                check = std::cin.fail();
                std::cin.clear();
                std::cin.sync();
                if( zgadula < 1 || zgadula > 1000 || check )
                     std::cout << "To nie jest liczba od 1 do 1000" << std::endl;
               
            } while( zgadula < 1 || zgadula > 1000 || check );
           
        }
        proba++;
        if( zgadula < liczba )
             std::cout << "Komputer wylosowal wincyj... Sprobuj jeszcze raz." << std::endl;
       
        if( zgadula > liczba )
             std::cout << "Komputer wylosowal mniejsza liczbe... Sprobuj jeszcze raz." << std::endl;
       
        if( zgadula = liczba )
             std::cout << "Bejerka! Trafiles! " << std::endl << "Udalo ci sie trafic za " << proba << " razem." << std::endl;
       
    } while( zgadula != liczba );
   
    return 0;
}
Program przyjmuje
while( zgadula != liczba );
 jako prawde, jesli zgadula będzie w przedziale 1-1000. Wydaje mi sie, ze liczba to caly zakres niezależnie od wylosowanej liczby. Jak wyciagnac te konkretna wylosowana wartosc?
P-145972
Matei
» 2016-03-13 13:05:34
Nie jestem pewien czy o to Ci chodzi, ale po zmianie warunków ze zwykłych if na else if program działa jak należy. Powinno to wyglądać tak:
C/C++
if( zgadula < liczba )
     std::cout << "Komputer wylosowal wincyj... Sprobuj jeszcze raz." << std::endl;

else if( zgadula > liczba )
     std::cout << "Komputer wylosowal mniejsza liczbe... Sprobuj jeszcze raz." << std::endl;

else if( zgadula = liczba )
     std::cout << "Bejerka! Trafiles! " << std::endl << "Udalo ci sie trafic za " << proba << " razem." << std::endl;
P-145973
Grzegorzdut
Temat założony przez niniejszego użytkownika
» 2016-03-13 13:12:14
Dzieki.
Czy ktos moglby wytlumaczyc dlaczego w moim przypadku program przechodzil dalej pomimo
} while( zgadula != liczba );
?
Bo nie bede mogl spac. :P
P-145974
Matei
» 2016-03-13 13:22:02
Dopiero teraz to zauważyłem, ale prawdopodobnie to jest powodem. Mianowicie masz złą instrukcję porównania
C/C++
if( zgadula = liczba )
     std::cout << "Bejerka! Trafiles! " << std::endl << "Udalo ci sie trafic za " << proba << " razem." << std::endl;

To w if to nijako przypisanie i to pewnie przez to twój program zaczyna szaleć :P Jak to powinno wyglądać w teorii:
if( a == b ) {...}
P-145975
KrulTibianus
» 2016-04-11 22:25:11
Moje rozwiązanie z jedną pętlą:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>


int main()
{
    int wylosowana, proby = 0, strzal;
    srand( time( NULL ) );
   
    wylosowana =(( std::rand() % 1000 ) + 1 );
    std::cout << "Zgadnij liczbe 1-1000: ";
    do
    {
        std::cin >> strzal;
        if( std::cin.fail() ||( strzal < 1 ) ||( strzal > 1000 ) )
        {
            std::cout << "Podaj liczbe z zakresu 1-1000!" << std::endl;
            std::cin.clear();
            std::cin.sync();
        }
        else if( strzal < wylosowana )
        {
            proby++;
            std::cout <<( "Za malo. Probuj dalej: " );
        }
        else if( strzal > wylosowana )
        {
            proby++;
            std::cout <<( "Za duzo, probuj dalej: " );
        }
    } while( strzal != wylosowana );
   
    std::cout << "No, w koncu zgadles, ze to " << wylosowana << std::endl;
    std::cout << "Odgadles dopiero za " << proby + 1 << " razem!";
   
    return 0;
}
P-147196
« 1 »
  Strona 1 z 1