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

Rozdział 21. Problem z losowaniem z tablicy lub sprawdzaniem.

Ostatnio zmodyfikowano 2016-09-10 07:58
Autor Wiadomość
kamillo
Temat założony przez niniejszego użytkownika
Rozdział 21. Problem z losowaniem z tablicy lub sprawdzaniem.
» 2016-09-08 22:01:59
Witam, od dłuższego czasu nie mogę sobie poradzić z wylosowaniem dwóch zmiennych z tablicy i sprawdzeniem czy się nie powtarzały wcześniej. Czego bym nie próbował, to program albo wypisuje dwie pierwsze wpisane liczby, albo powtarza dwie liczby. Z góry dziękuje za pomoc ;)


C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

void wczytywanie( int tablica[], int pozycja )
{
    cout << " Podaj trzy liczby" << endl;
    int i = 3;
    do
    {
        cin >> tablica[ pozycja ];
        cin.clear();
        cin.sync();
        pozycja++;
    } while( i > pozycja );
   
}

int losowanie( int tablica[] )
{
    return tablica[ rand() % 2 ];
}

bool sprawdzanie( int tablica[], int pozycja, int wylosowana )
{
    if( pozycja <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tablica[ i ] == wylosowana )
             return true;
       
        i++;
    } while( i < pozycja );
   
    return false;
}

void wypisywanie( int tablica[], int pozycja )
{
    cout << "wylosowane liczby to:" << endl;
    do
    {
        cout << tablica[ pozycja ] << ", " << endl;
        pozycja++;
    } while( pozycja < 2 );
   
}


int main()
{
    srand( time( 0 ) );
    int tablica[ 3 ];
    int pozycja = 0;
    wczytywanie( tablica, pozycja );
    do
    {
        int wylosowana = losowanie( tablica );
        if( sprawdzanie( tablica, pozycja, wylosowana ) == false )
             tablica[ pozycja ] = wylosowana;
       
        pozycja++;
    } while( pozycja < 3 );
   
   
    pozycja = 0;
    wypisywanie( tablica, pozycja );
   
    return 0;
}
P-151573
kamillo
Temat założony przez niniejszego użytkownika
» 2016-09-10 07:58:28
Udało mi się w końcu dojść do tego. Rozwiązaniem problemu bylo zrobienie dodatkowej tablicy na liczby sprawdzone, bo program przy wypisywaniu się gubił i wypisywał wpisaną tablicę bez losowania oraz zwiększenie (nie wiem czemu) przedziału losowania z 2 do 3.

Wiem, że odpisuje sam sobie, ale myślę, że nie tylko ja miałem taki problem ;)

C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

void wczytywanie( int tablica[], int pozycja )
{
    cout << " Podaj trzy liczby" << endl;
    int i = 3;
    do
    {
        cin >> tablica[ pozycja ];
        cin.clear();
        cin.sync();
        pozycja++;
    } while( i > pozycja );
   
}

int losowanie( int tablica[] )
{
    return tablica[ rand() % 3 ];
}

bool sprawdzanie( int tablica[], int pozycja, int wylosowana )
{
    if( pozycja <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tablica[ i ] == wylosowana )
             return true;
       
        i++;
    } while( i < pozycja );
   
    return false;
}

void wypisywanie( int tablica[], int pozycja )
{
    cout << "wylosowane liczby to:" << endl;
    do
    {
        cout << tablica[ pozycja ] << ", " << endl;
        pozycja++;
    } while( pozycja < 2 );
   
}


int main()
{
    srand( time( 0 ) );
    int tablica[ 3 ];
    int pozycja = 0;
    int sprawdzone[ 2 ];
    int i = 0;
    wczytywanie( tablica, pozycja );
    do
    {
        int wylosowana = losowanie( tablica );
        if( sprawdzanie( sprawdzone, i, wylosowana ) == false )
             sprawdzone[ i ] = wylosowana;
       
        i++;
    } while( i < 3 );
   
   
    i = 0;
    wypisywanie( sprawdzone, i );
   
    return 0;
}
P-151618
« 1 »
  Strona 1 z 1