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

"Lotto" - program nie porównuje liczb podanych przez użytkownika z liczbami wylosowanymi przez komputer

Ostatnio zmodyfikowano 2012-01-21 14:53
Autor Wiadomość
Verteks
Temat założony przez niniejszego użytkownika
"Lotto" - program nie porównuje liczb podanych przez użytkownika z liczbami wylosowanymi przez komputer
» 2012-01-21 14:18:42
Witam, jest to mój pierwszy post na tym forum, więc za wszelkie źle sformułowane pytania i niejasności z góry przepraszam.

Od kilku dni uczę się podstaw C++ z kursów (między innymi tego, który jest na łamach tej strony). Po odświeżeniu dawnej podstawowej wiedzy (funkcje, tablice, pętle - czyli podstawy podstaw) stwierdziłem, że warto coś napisać dla podkręcenia programistycznego skilla. Wybór padł na program "udający" Dużego Lotka...

Program działa na prostej zasadzie - najpierw prosi użytkownika o podanie 6 liczb, następnie zapisuje je do WybraneLiczby[]. Następnie losuje 6 liczb (losowanie bez powtórzeń, of course :)), zapisuje je do wylosowane[] i wywala na ekran. Trzecia "część" to porównanie liczb wybranych przez usera i wylosowanych. Tutaj zaczynają sie schody... Coś takiego:
C/C++
if( WybraneLiczby[ licznik3 ] == wylosowane[ licznik3 ] )
Niby sie kompiluje, lecz nic nie robi. Z tym sposobem jest jeszcze zabawniej:
C/C++
if( WybraneLiczby[ wylosowane[ licznik3 ] ] )
Znów kompilacja udana, tylko że program najpierw sie crashował przy tej linijce (sprawdzane dla pewności debuggerem), a po kolejnych poprawkach i kolejnej kompilacji niby działał dobrze, ale... patrz pierwszy sposób :)

Siedze nad tym już z 2h i nie mogę rozkminić, jak należy porównać te indeksy z tych dwóch tablic. Ba, jestem świadom tego, iż jeszcze potrzeba sprawdzania wszystkich możliwych kombinacji, nie tylko indeksów [0] == [0], [1] == [1] i tak dalej. Czyli mam na myśli: [0] == [0], [0] == [1], [0] == [2]... [0] == [5], [1] == [0] aż do [5] == [5]. Do tego zaprzęgnie się dwie pętelki for i po sprawie. Tak myśle :)

Tutaj macie cały kod aplikacji (przecież to żadna tajemnica, promujmy open - source :))

C/C++
#include <iostream>
#include <conio.h>
#include <ctime>
#include <cstdlib>
#include <windows.h>

using namespace std;

bool CzyBylaWylosowana( int iLiczba, int tablica[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tablica[ i ] == iLiczba )
             return true;
       
        i++;
    }
    while( i < ile );
   
    return false;
}

int wylosuj()
{
    return( rand() % 6 ) + 1;
}

int main()
{
    int licznik = 0;
   
    int WybraneLiczby[ 6 ];
    int wybrana = 0;
   
    int licznik3 = 0;
    int trafioneliczby = 0;
   
    // Wybieranie liczb //
    for( licznik = 0; licznik < 6; licznik++ )
    {
        cout << "Podaj " << licznik + 1 << " liczbe: ";
        cin >> wybrana;
        if( wybrana <= 49 )
             wybrana = WybraneLiczby[ licznik ];
        else
             licznik -= 1;
       
    }
    cout << endl << endl;
    Sleep( 2000 );
   
    // Algorytm losowania liczb //
    srand( time( 0 ) );
    int wylosowane[ 6 ];
    int wylosowanych = 0;
    do
    {
        int liczba = wylosuj();
        if( CzyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false )
        {
            wylosowane[ wylosowanych ] = liczba;
            wylosowanych++;
        } //if
    }
    while( wylosowanych < 6 );
   
    wylosowanych = 0;
    do
    {
        cout << wylosowane[ wylosowanych ] << endl;
        wylosowanych++;
    }
    while( wylosowanych < 6 );
   
    // Porównanie liczb wybranych & wylosowanych //
    for( licznik3 = 0; licznik3 < 6; licznik3++ )
    {
        // Sprawdzanie ilosci trafionych liczb
        if( WybraneLiczby[ wylosowane[ licznik3 ] ] )
        {
            ++trafioneliczby;
        }
        else
             continue;
       
    }
    cout << trafioneliczby << " na 6 liczb trafiono";
   
    getch();
}
P-49030
pekfos
» 2012-01-21 14:24:50
if( WybraneLiczby[ wylosowane[ licznik3 ] ] )
WybraneLiczby ma 6 elementów. czy każda liczba z wylosowane mieści się w zakresie 0-5? to samo ze zmienną licznik3..

//edit:
promujmy open - source :)
No nie powiedziałbym, że ten portal promuje open source :P

//edit #2:
ehh, zebrało ci się na edytowanie, jak już poprawiłem :D
P-49032
Verteks
Temat założony przez niniejszego użytkownika
» 2012-01-21 14:53:19

ehh, zebrało ci się na edytowanie, jak już poprawiłem :D
Wiesz, zdziwiłem sie, że przy tworzeniu tematu/wiadomości nie ma jakichś przycisków ze znacznikami BBCode. Więc stwierdziłem, że najpierw napisze to co chce napisać, a dopiero później poprawie formatowanie.


if( WybraneLiczby[ wylosowane[ licznik3 ] ] )WybraneLiczby ma 6 elementów. czy każda liczba z wylosowane mieści się w zakresie 0-5? to samo ze zmienną licznik3..
Co do wylosowane - od 1 do 6 (było od 1 do 49, ale zmniejszyłem, aby ułatwić sobie sprawdzanie warunków)
licznik3 - od 0 do 5
Pomijam już niezbyt trafione i posegregowane nazwy zmiennych i brzydki kod. Poprawne działanie jest najważniejsze, później można brać się za mniej ważne rzeczy.
Tak teraz sobie na chłodno przeanalizowałem obydwa warunki - zawsze stwierdzą, że trafiłem 5 na 6 liczb. Mam wrażenie, że nie odnoszę się do poszczególnych indeksów tablicy, lecz do liczb. Więc zawsze 0 == 0, 1 == 1 itd.
Moje pomysły się wyczerpały, nie chce od was rozwiązania, jedynie abyście naprowadzili mnie na właściwy trop. Cóż to za satysfakcja, że ktoś ci poda na tacy gotowca? Wiadomo, żadna...
P-49039
« 1 »
  Strona 1 z 1