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

praca domowa z rozdziału 21 losowanie bez powtórzeń

Ostatnio zmodyfikowano 2013-05-29 14:28
Autor Wiadomość
ToNieJa
Temat założony przez niniejszego użytkownika
praca domowa z rozdziału 21 losowanie bez powtórzeń
» 2013-05-29 12:31:40
Witam.
Przejdę od razu do rzeczy. Otóż zabrałem się za zadanie domowe z rozdziału 21 i napisałem taki kod:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

bool czyBylaWylosowana( int wylosowane[], int wylosowanych, int wylosowany )
{
    if( wylosowanych <= 0 )
         return false;
   
    int i;
   
    do
    {
        if( wylosowane[ i ] == wylosowany )
             return true;
       
        i++;
    } while( i < wylosowanych );
   
   
    return false;
}


int main()
{
    srand( time( 0 ) );
    int tablica[ 3 ];
    cout << "Podaj pierwszy element ";
    cin >> tablica[ 0 ];
    cin.clear();
    cin.sync();
    cout << "Podaj drugi element ";
    cin >> tablica[ 1 ];
    cin.clear();
    cin.sync();
    cout << "Podaj trzeci element ";
    cin >> tablica[ 2 ];
    cin.clear();
    cin.sync();
   
    int wylosowane[ 2 ];
    int wylosowanych = 0;
    int wylosowany;
   
    do
    {
        wylosowany = tablica[(( rand() & 3 ) + 0 ) ];
        if( czyBylaWylosowana( wylosowane, wylosowanych, wylosowany ) == false )
        {
            wylosowane[ wylosowanych ] = wylosowany;
            wylosowanych++;
        }
    } while( wylosowanych < 2 );
   
   
    cout << wylosowane[ 0 ] << ", " << wylosowane[ 1 ] << ", " << wylosowane[ 2 ] << endl; // wylosowane liczby
   
    cout << tablica[ 0 ] << ", " << tablica[ 1 ] << ", " << tablica[ 2 ]; // wszystkie podane liczby
   
    return 0;
}

Uruchomiłem program pierwszy raz i podałem liczby: 15, 21, 77. Program wylosował 77 i 21. Niby wszystko poszło jak należy ale po ponownym uruchomieniu program wylosował liczby: 15 i 1. Skąd się wzięła ta jedynka? Przecież nie podałem jej do tablicy. Uruchomiłem program jeszcze kilka razy i znowu raz było dobrze a drugi raz źle. Zamiennie z tą nieszczęsną jedynką występowało jeszcze 0 i chyba 2. Ktoś wie w czym problem?

P-84252
Monika90
» 2013-05-29 14:15:03
W funkcji czyBylaWylosowana masz niezainicjalizowaną zmienną
int i;

Ta linijka jest błędna
C/C++
cout << wylosowane[ 0 ] << ", " << wylosowane[ 1 ] << ", " << wylosowane[ 2 ] << endl; // wylosowane liczby
Tablica wylosowane ma tylko dwa elementy a ty odwołujesz się do trzech.

To też jest źle:
C/C++
int wylosowany = tablica[(( rand() & 3 ) + 0 ) ];
pewnie chodziło ci o
%
, a nie o
&
P-84257
ToNieJa
Temat założony przez niniejszego użytkownika
» 2013-05-29 14:28:14
No nieźle, pomyliłem & z %. Chyba muszę zacząć chodzić do okulisty :P. Pozostałe dwa błędy sam wykryłem w międzyczasie, ale tego pierwszego pewnie prędko bym nie zauważył. Dziwne, że kompilator nie protestował.
P-84258
« 1 »
  Strona 1 z 1