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

[Lekcja 21] Losowanie bez powtórzeń zad.1

Ostatnio zmodyfikowano 2013-04-14 18:23
Autor Wiadomość
Loreth
Temat założony przez niniejszego użytkownika
[Lekcja 21] Losowanie bez powtórzeń zad.1
» 2013-04-08 17:58:16
Witam. Mam lekki problem z pierwszym zadaniem domowym z tego działu, tj. "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". Starałem napisać się go samodzielnie od zera, zamiast kopiować przykład z lekcji i go modyfikować. Niestety liczby z niewiadomej mi przyczyny się powtarzają. Chciałbym wiedzieć co jest tego powodem.
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
bool bezPowtorzen( int wylosowana, int tab[], int wylosowane )
{
    if( wylosowane == 0 )
         return false;
   
    int licznik = 0;
    do
    {
        if( tab[ licznik ] == tab[ wylosowana ] )
             return true;
       
        licznik++;
    } while( licznik < wylosowane );
   
    return false;
   
}
int wylosuj()
{
    return( rand() % 3 ) + 0;
}

int main()
{
    srand( time( NULL ) );
    int a[ 3 ], licznik = 0, b[ 2 ];
    cout << "Podaj 3 liczby: ";
    do
    {
        cin >> a[ licznik ];
        licznik++;
    } while( licznik < 3 );
   
    licznik = 0;
    do
    {
        int wylosowana = wylosuj();
        if( bezPowtorzen( wylosowana, a, licznik ) == false )
        {
            b[ licznik ] = a[ wylosowana ];
            licznik++;
        }
    } while( licznik < 2 );
   
    licznik = 0;
    cout << "Wylosowane liczby to: ";
    do
    {
        cout << b[ licznik ] << ", ";
        licznik++;
    } while( licznik < 2 );
   
    return 0;
}
P-80216
MrPoxipol
» 2013-04-08 18:17:58
Masz błąd w funkcji sprawdzającej.
W linijce:
if( tab[ licznik ] == tab[ wylosowana ] )

W głównej funkcji w tym if'ie(domyśl się, którym ;p) musisz obsłużyć to chociażby switchem(albo if'em).

Czyli:
C/C++
switch( wylosowana )
{
case 0:
    //Kod
case 1:
    //Kod
case 2:
    //Kod
}

Rozwiązania Ci nie podam, sam musisz to zauważyć ;)
P-80217
Loreth
Temat założony przez niniejszego użytkownika
» 2013-04-13 10:26:35
Starałem się przeanalizować tego if'a, ale twoja podpowiedź jest dla mnie trochę nie jasna i wciąż nie rozumiem gdzie popełniłem błąd ;(
P-80499
empty2102
» 2013-04-14 18:11:51
<< removed >>
P-80565
pekfos
» 2013-04-14 18:23:36
C/C++
int w1 = wylosuj(), w2; //losowanie pierwszej
while(( w2 = wylosuj() ) == w1 ); //losowanie drugiej, tak długo, aż będzie inna niż pierwsza

I tyle.
P-80567
« 1 »
  Strona 1 z 1