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

[Lekcja 21] Zadanie nr.1

Ostatnio zmodyfikowano 2012-03-18 14:52
Autor Wiadomość
akwes
» 2012-03-17 22:46:01
Musisz przeanalizować co przesyłasz do funkcji czy_byla_wylosowana.

Zakładam, że chcesz przesłać tablicę liczb, które już były wylosowane?

C/C++
bool czy_byla_wylosowana( int liczba, int losowane[ 2 ], int wylosowane )
{
    /*
        if( wylosowane <= 0 )
             return false;
       
        int i = 0;
        do
        {
            if( losowane[ i ] == liczba )
                 return true;
           
            i++;
        } while( i < wylosowane );
       
        return false;*/
    cout << "DEBUG INFO: " << losowane[ 0 ] << losowane[ 1 ];
    return true;
}

Sprawdziłeś chociaż raz, co faktycznie tam przesyłasz? Sprawdź, przykład jak to zrobić wyżej ;)


1: Losuj liczbę
2: Sprawdź, czy zgadza się z podanymi przez użytkownika, jeżeli nie, wróć do 1.
3: Losuj drugą liczbę, czy zgadza się z podanymi przez użytkownika, jeżeli nie, wróć do 3.
4. Sprawdź czy liczba z punktu 3 jest różna od liczby z puntu 2, jeżeli nie wróć do 3.

P-52813
Unlimited
Temat założony przez niniejszego użytkownika
» 2012-03-17 22:54:46
No tak.
1. Wysyłam do tej funkcji liczbę wylosowaną z tych których podałem wcześniej.
2. Wysyłam tablicę z liczbami które zostały już wylosowane aby sprawdzać czy w niej czasami nie istnieje już ta liczba która być może się wylosowała.
3. Wysyłam zmienną która mówi którą liczbę z kolei losuję.

Wszystko wydaje się być ok. Co do tego debug nie wiem jak tego używać ale uruchomiłem z tym co Ty dałeś i program się normalnie wykonał lecz przy tym debug były jakieś liczby inne :) Nie wiem ocb :)

Pełna treść zadania:
Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje.
P-52816
akwes
» 2012-03-17 23:01:34
Debug info to zwykły tekst, który informuje o tym że jest to informacja. Potem są liczby które TY przesyłasz. Które DIAMETRALNIE różnią się od tych, które podał użytkownik.

Teraz już wiesz co jest źle.

//


2. Wysyłam tablicę z liczbami które zostały już wylosowane aby sprawdzać czy w niej czasami nie istnieje już ta liczba która być może się wylosowała.

Nie, nie robisz tego. Wyświetlam przecież te liczby w tej funkcji wyżej i mają prawie że losowe wartości.
P-52818
Unlimited
Temat założony przez niniejszego użytkownika
» 2012-03-17 23:10:24
No ok :) Błędu nie mogę zlokalizować chociaż wiem (lub jednak nie do końca) gdzie. Zastanawia mnie też fakt dlaczego jeśli tam są jakieś losowe liczby to przy wyświetlaniu tej zmiennej są te "niby" prawidłowe?
P-52821
dannooon
» 2012-03-17 23:42:52
Patrząc na ten kod widzę ten sam jaki był zamieszczony w lekcji 21 jako przykładowy. Sam miałem problem z tym tematem i żeby go całkowicie zrozumieć napisałem swoją funkcje losującą bez powtórzeń. Dzięki temu łatwiej sobie to przyswoiłem :)
Polecam ci zrobić to samo.
P-52824
akwes
» 2012-03-17 23:43:38
Eeeh Ty ;p

Prześledź kod :P

C/C++
int main()
{
    srand( time( NULL ) );
    int podawane[ 3 ];
    int losowane[ 2 ]; //! Nie ustalaszi ich wartości, czyli mają tutaj śmieci z pamięci.
    int wylosowane = 0;
    int a = 0;
   
    do
    {
        podawane[ a ] = podawanie_liczb();
        a++;
    } while( a < 3 );
   
    do
    {
        int liczba = wylosuj( podawane );
        //! tutaj wciąż losowane[2] są niezmienione i są takie jak wyżej a mimo to wysyłasz je do funkcji. To jaką one mają mieć wartość ;> ?
        if( czy_byla_wylosowana( liczba, losowane, wylosowane ) == false );
       
        {
            losowane[ wylosowane ] = liczba;
            wylosowane++;
        }
    } while( wylosowane < 2 );
   
    a = 0;
    do
    {
        cout << "Wylosowana liczba sposrod wyslanych: " << losowane[ a ] << endl;
        a++;
    } while( a < 2 );
   
    _getch();
    return 0;
}
P-52825
Unlimited
Temat założony przez niniejszego użytkownika
» 2012-03-17 23:55:37
akwes, a co to ma do rzeczy skoro i tak one się nadpiszą gdy przejdą przez funkcję a potem w programie przez if? Z mojego punktu widzenia to akurat problemu raczej nie robi no chyba że się mylę... ;)

dannooon, ja rozumie ten kod lecz nie wiem gdzie mój program ma błąd :O :)

Dla mnie ogólnie program działa tylko że jest w nim wada że nie działa do końca tak jak autor chciał xD
P-52826
akwes
» 2012-03-17 23:59:49
Kiedy się niby nadpiszą? Skoro odczytujesz je, zanim pojawia się jakakolwiek instrukcja zapisu? Ani w funkcji, ani przed jej wywołaniem ich nie nadpisujesz. A odczytujesz ich wartości w funkcji.

Przecież się nie teleportują do dalszej części kodu i nie nadpisza tam żeby potem wrócić wcześniej :|

C/C++
int main()
{
    srand( time( NULL ) );
    int podawane[ 3 ];
    int losowane[ 2 ];
    int wylosowane = 0;
    int a = 0;
   
    do
    {
        podawane[ a ] = podawanie_liczb();
        a++;
    } while( a < 3 );
   
    do
    {
        int liczba = wylosuj( podawane );
       
        if( czy_byla_wylosowana( liczba, losowane, wylosowane ) == false ); // TA FUNKCJA ODCZYTA JE ZANIM
       
        {
            losowane[ wylosowane ] = liczba; // ZANIM DOJDĄ TUTAJ
            wylosowane++;
        }
    } while( wylosowane < 2 );
   
    a = 0;
    do
    {
        cout << "Wylosowana liczba sposrod wyslanych: " << losowane[ a ] << endl;
        a++;
    } while( a < 2 );
   
    _getch();
    return 0;
}
P-52827
1 2 « 3 » 4 5 6
Poprzednia strona Strona 3 z 6 Następna strona