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

Symulator LOTTO- w teori działa w praktyce nie tak jak powinien.

Ostatnio zmodyfikowano 2015-04-11 12:40
Autor Wiadomość
BadBullPL
Temat założony przez niniejszego użytkownika
Symulator LOTTO- w teori działa w praktyce nie tak jak powinien.
» 2015-04-10 18:46:01
Postanowiłem się pobawić i napisać symulator lotto. Oto kod:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
int losowanie()
{
    return( rand() % 51 ) + 1;
}
int czworka()
{
    return( rand() % 500 ) + 100;
}
int trojka()
{
    int a = 24;
    return a;
}
int piatka()
{
    return( rand() & 19000 ) + 1000;
}
int szostka()
{
    return( rand() & 48000000 ) + 2000000;
}
bool czyByla( int tablica[], int iLiczba, int ile )
{
    if( ile == 0 )
         return false;
   
    int indeks = 0;
    do
    {
        if( tablica[ indeks ] == iLiczba )
             indeks++;
       
        return true;
    } while( indeks < ile );
   
    return false;
}
int main()
{
    srand( time( NULL ) );
    std::string tekst = "wygrac";
    std::cout << "Witaj w symulatorze TOTALIZATORA SPORTOWEGO LOTTO" << std::endl;
    std::cout << "Jest on bardzo realistyczny ale pieniadze które mozesz " << tekst << " już nie bardzo." << std::endl;
    std::cout << "Zasady są jak w orginalnym TOTKU czyli podajesz 6 liczb od 1 do 50 i w zaleznosci ile trafiles wyplacana ci jest nagroda." << std::endl;
    std::cout << "Za jedną trafiona lub dwie nie ma żadnych pieniedzy ale od trojki zaczyna sie jazda." << std::endl;
    std::cout << "Zaczynamy!" << std::endl;
    std::cout << "Na poczatek wpisz szesc liczb." << std::endl;
    int twojeLiczby[ 6 ];
    int x = 0;
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cin >> twojeLiczby[ x ];
        if( twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() )
        {
            std::cout << "Podaj LICZBE od 1 do 50." << std::endl;
        }
        else
             x++;
       
    } while( x < 6 || twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() );
   
    int wylosowaneLiczby = 0;
    int cos = 0;
    int tablica[ 6 ];
    do
    {
        wylosowaneLiczby = losowanie();
        if( czyByla( tablica, wylosowaneLiczby, cos ) == false )
        {
            tablica[ cos ] = wylosowaneLiczby;
            cos++;
        }
    } while( cos < 6 );
   
    int wynik = 0;
    cos = 0;
    do
    {
        if( tablica[ cos ] == twojeLiczby[ cos ] )
        {
            wynik++;
        }
        cos++;
    } while( cos < 6 );
   
    int trzy = trojka();
    int cztery = czworka();
    int piec = piatka();
    int szesc = szostka();
    cos = 0;
    do
    {
        std::cout << "Liczby wylosowane to: " << tablica[ cos ] << "," << std::endl;
    } while( cos < 6 );
   
    cos = 0;
    do
    {
        std::cout << "A twoje liczby to: " << twojeLiczby[ cos ] << std::endl;
    } while( cos < 6 );
   
    if( wynik == 0 || wynik == 1 || wynik == 2 )
    {
        std::cout << "Niestety, nic nie wygrales." << std::endl;
    }
    if( wynik == 3 )
    {
        std::cout << "Trafiles trojke. Wygrales: " << trzy << std::endl;
    }
    if( wynik == 4 )
    {
        std::cout << "Trafiles czworke. Wygrales: " << cztery << std::endl;
    }
    if( wynik == 5 )
    {
        std::cout << "Trafiles piatke. Wygrales: " << piec << std::endl;
    }
    if( wynik == 6 )
    {
        std::cout << "GRATULEJE. WYGRALES GLOWNA NAGRODE CZYLI: " << szesc << std::endl;
    }
    return 0;
}
ale niestety podczas wpisywanie liczb zamiast sześciu liczb trzeba wpisać 8 a potem nic sie nie dzieje mógłby mi ktoś napisać gdzie jest błą podejrzeam że tu:
C/C++
do
{
    std::cin.clear();
    std::cin.sync();
    std::cin >> twojeLiczby[ x ];
    if( twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() )
    {
        std::cout << "Podaj LICZBE od 1 do 50." << std::endl;
    }
    else
         x++;
   
} while( x < 6 || twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() );

ale nie wiem gdzie dokładnie.
P-130523
pekfos
» 2015-04-10 18:54:09
C/C++
if( twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() )
{
    std::cout << "Podaj LICZBE od 1 do 50." << std::endl;
}
else
     x++;

} while( x < 6 || twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() );

Jak zwiększysz w pętli x, to, dla x większego równego 6, warunek pętli sprawdza nieokreślone wartości.

C/C++
return( rand() & 19000 ) + 1000;
To nie działa tak, jak oczekujesz. W szostka() nawet z dwóch powodów.
P-130524
BadBullPL
Temat założony przez niniejszego użytkownika
» 2015-04-10 19:44:15
Wytłumacz troche wolniej z tą petlą bo nie zrozumiałem
P-130527
pekfos
» 2015-04-10 19:53:30
Po x++, twojeLiczby[x] to nie jest zmienna, z której możesz coś odczytać.
P-130529
michal11
» 2015-04-10 19:55:48
W ogóle ten warunek w while jest niepotrzebny, wystarczy tylko x<6.
P-130530
BadBullPL
Temat założony przez niniejszego użytkownika
» 2015-04-10 20:07:12
No dobra zmodyfikowałem ale dalej nie wyświetla sie nic dalej
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
int losowanie()
{
    return( rand() % 51 ) + 1;
}
int czworka()
{
    return( rand() % 500 ) + 100;
}
int trojka()
{
    int a = 24;
    return a;
}
int piatka()
{
    return( rand() % 19000 ) + 1000;
}
int szostka()
{
    return( rand() % 48000000 ) + 2000000;
}
bool czyByla( int tablica[], int iLiczba, int ile )
{
    if( ile == 0 )
         return false;
   
    int indeks = 0;
    do
    {
        if( tablica[ indeks ] == iLiczba )
             indeks++;
       
        return true;
    } while( indeks < ile );
   
    return false;
}
int main()
{
    srand( time( NULL ) );
    std::string tekst = "wygrac";
    std::cout << "Witaj w symulatorze TOTALIZATORA SPORTOWEGO LOTTO" << std::endl;
    std::cout << "Jest on bardzo realistyczny ale pieniadze które mozesz " << tekst << " ju¿ nie bardzo." << std::endl;
    std::cout << "Zasady s¹ jak w orginalnym TOTKU czyli podajesz 6 liczb od 1 do 50 i w zaleznosci ile trafiles wyplacana ci jest nagroda." << std::endl;
    std::cout << "Za jedn¹ trafiona lub dwie nie ma ¿adnych pieniedzy ale od trojki zaczyna sie jazda." << std::endl;
    std::cout << "Zaczynamy!" << std::endl;
    std::cout << "Na poczatek wpisz szesc liczb." << std::endl;
    int twojeLiczby[ 6 ];
    int x = 0;
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cin >> twojeLiczby[ x ];
        if( twojeLiczby[ x ] > 50 || twojeLiczby[ x ] < 1 || std::cin.fail() )
        {
            std::cout << "Podaj LICZBE od 1 do 50." << std::endl;
        }
        else
             x++;
       
    } while( x < 6 );
   
    int wylosowaneLiczby = 0;
    int cos = 0;
    int tablica[ 6 ];
    do
    {
        wylosowaneLiczby = losowanie();
        if( czyByla( tablica, wylosowaneLiczby, cos ) == false )
        {
            tablica[ cos ] = wylosowaneLiczby;
            cos++;
        }
    } while( cos < 6 );
   
    int wynik = 0;
    cos = 0;
    do
    {
        if( tablica[ cos ] == twojeLiczby[ cos ] )
        {
            wynik++;
        }
        cos++;
    } while( cos < 6 );
   
    int trzy = trojka();
    int cztery = czworka();
    int piec = piatka();
    int szesc = szostka();
    cos = 0;
    do
    {
        std::cout << "Liczby wylosowane to: " << tablica[ cos ] << "," << std::endl;
        cos++;
    } while( cos < 6 );
   
    cos = 0;
    do
    {
        std::cout << "A twoje liczby to: " << twojeLiczby[ cos ] << std::endl;
        cos++;
    } while( cos < 6 );
   
    if( wynik == 0 || wynik == 1 || wynik == 2 )
    {
        std::cout << "Niestety, nic nie wygrales." << std::endl;
    }
    if( wynik == 3 )
    {
        std::cout << "Trafiles trojke. Wygrales: " << trzy << std::endl;
    }
    if( wynik == 4 )
    {
        std::cout << "Trafiles czworke. Wygrales: " << cztery << std::endl;
    }
    if( wynik == 5 )
    {
        std::cout << "Trafiles piatke. Wygrales: " << piec << std::endl;
    }
    if( wynik == 6 )
    {
        std::cout << "GRATULEJE. WYGRALES GLOWNA NAGRODE CZYLI: " << szesc << std::endl;
    }
    return 0;
}
P-130531
pekfos
» 2015-04-10 20:15:45
C/C++
int indeks = 0;
do
{
    if( tablica[ indeks ] == iLiczba )
         indeks++;
   
    return true;
} while( indeks < ile );

Co to za pętla? Co by się nie działo, zwracasz true, więc pętla z wywołaniem tej funkcji jest nieskończona.
P-130532
BadBullPL
Temat założony przez niniejszego użytkownika
» 2015-04-11 12:40:50
Dziękuje ci pekfos i michal11 już sobie poradziłem i wszystko działa jak powinno.
P-130554
« 1 »
  Strona 1 z 1