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

[Zad. 21] Nieprawidłowe działanie programu losującego bez powtórzeń.

Ostatnio zmodyfikowano 2015-12-06 08:24
Autor Wiadomość
Raziel95
Temat założony przez niniejszego użytkownika
[Zad. 21] Nieprawidłowe działanie programu losującego bez powtórzeń.
» 2015-12-06 00:36:48
Witam. Mam problem z losowaniem liczb bez powtórzeń. Szukałem odpowiedzi w innych tematach dotyczących tego zadania. Niestety nie znalazłem
w nich odpowiedzi. Proszę więc o pomoc.



C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void podaj_liczby( int liczba[], int i )
{
    do
    {
        int cyfra;
        cin >> liczba[ i ];
        i++;
       
    }
    while( i < 10 );
   
}

bool czy_byla( int x, int t[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( t[ i ] == x )
        {
            return true;
        }
        i++;
    }
    while( i < ile );
   
    return false;
}

void wylosuj( int t[], int i )
{
    do
    {
        int losuj = rand() % 10 + 1;
       
        if( czy_byla( losuj, t, i ) == false )
        {
            cout << t[ losuj ] << ", ";
            i++;
        }
       
    }
    while( i < 8 );
   
}

int main()
{
    srand( time( NULL ) );
    int tab[ 10 ];
    int wylosowanych = 0;
    podaj_liczby( tab, 0 );
    wylosuj( tab, wylosowanych );
   
    system( "PAUSE" );
    return 0;
}

P-141463
carlosmay
» 2015-12-06 01:42:17
podaj_liczby( tab, 0 );
 kiepski pomysł,
C/C++
void podaj_liczby( int liczba[], int i )
{
    do
    {
        int cyfra;
        cin >> liczba[ i ];
        i++;
       
    } while( i < 10 );
   
}
 traci na czytelności.
Lepiej przekazać cały rozmiar i do niego porównywać licznik pętli.

Mam problem
 z tym, że nie przechowujesz wylosowanych liczb, tylko losowanie porównujesz do tablicy, z której losujesz.
Utwórz drugą tablicę na to co wylosujesz i to z nią porównuj każdą kolejną wylosowaną.
Jeśli nie ma w tablicy to dopisz.
P-141465
Raziel95
Temat założony przez niniejszego użytkownika
» 2015-12-06 02:41:15
Chyba mi się udało ;)

Jeszcze jakbyś mógł obejrzeć ;)

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void podaj_liczby( int liczba[], int i )
{
    do
    {
        cin >> liczba[ i ];
        i++;
    }
    while( i < 10 );
   
}

bool czy_byla( int x[], int l, int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( x[ i ] == l )
             return true;
       
        i++;
    }
    while( i < ile );
   
   
    return false;
}

void wylosuj( int t[], int i, int t2[] )
{
    int licznik = 0;
    do
    {
        int liczba = rand() % 9 + 1;
        t2[ licznik ] = liczba;
       
        if( czy_byla( t2, liczba, i ) == false )
        {
            cout << t[ liczba ] << ", ";
            i++;
            licznik++;
        }
       
    }
    while( i < 8 && licznik < 8 );
   
}

int main()
{
    srand( time( NULL ) );
    int tab[ 10 ];
    int tab2[ 8 ];
    int wylosowanych = 0;
    podaj_liczby( tab, 0 );
    wylosuj( tab, wylosowanych, tab2 );
   
    system( "PAUSE" );
    return 0;
}

P.S
Czemu to jest kiepski pomysł?
C/C++
void podaj_liczby( int liczba[], int i )
{
    do
    {
        cin >> liczba[ i ];
        i++;
    }
    while( i < 10 );
   
}

Próbowałem to zrobić tak jak mówiłeś jednak po wpisaniu cyfr nic się dalej nie działo.
P-141467
carlosmay
» 2015-12-06 08:24:17
C/C++
void podaj_liczby( int liczba[], int rozmiar )
{
    int i = 0;
    do
    {
        cin >> liczba[ i ];
        i++;
    }
    while( i < rozmiar );
   
}
 
Chyba mi się udało ;)
 Jeśli działa poprawnie to OK.
P-141468
« 1 »
  Strona 1 z 1