Losowanie liczb z podanego zbioru

0

Witam
Próbuję napisać program który losuje liczby ze zbioru liczb podanych przez użytkownika.
Lecz niestety coś jest nie tak ;/

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int losuj_liczbe()
{
    return(rand() %3)+0;

}

bool sprawdz(int liczba,int t[],int rozmiar)
{
    if(rozmiar<=0)
    return false;
    int i=0;
    do{
    if(t[i]==liczba)
    return true;
    i++;
    }while(i<rozmiar);
    return false;

}

void pobierz(int t[], int rozmiar)
{
    rozmiar=0;
    int x=0;
    do
    {
        cout<<"podaj liczbe "<<x<<":";
        cin>>t[rozmiar];
        x++;
        rozmiar++;
    }while(x<3);
    cout<<endl;
}

void wypisz(int t[],int rozmiar)
{
    rozmiar=0;
    int x=0;
    cout<<"twoje liczby:"<<endl;
    do
    {

        cout<<x<<":"<<t[rozmiar]<<endl;
        rozmiar++;
        x++;
    }while(x<3);
    cout<<endl;
}

int main()
{
srand(time(0));
int t[3];
int t2[2];
int t3[3];
int s;
int y=1;
int c,j=0;
int d,x;
pobierz(t,3);
wypisz(t,3);
int liczba;
cout<<"losowanie:"<<endl;
do
{
    c=losuj_liczbe();
    t[c]=t2[j];
    s++;
    j++;
}while(s!=3);
c,y,j=0;
do{
int liczba=t2[j];
if(sprawdz(liczba,t,3)==false)
{
t3[y]=liczba;
s++;
y++;}
}while(s<2);
s=0;
y=0;
do
{
    cout<<y<<":"<<t3[y]<<endl;
    s++;
    y++;

}while(y<3);
return 0;
}
 
0

Lecz niestety coś jest nie tak ;/

Ojejku mam nadzieję że uda ci się rozwiązać ten problem lub nauczysz się opisywać problemy.

0

Problem polega tkwi w losowaniu podanych liczb nie wiem jak powinienem ci to opisać...

0

To ja ci podpowiem:

  1. Nikt z nas nie wie co chcesz zrobić, bo samo losowanie liczby (od 0 do 2) napisałeś poprawnie.
  2. Nikt z nas nie wie co ci nie działa.
    Jak powinien wyglądać temat?
    "Cześć, próbuje napisać program który robi XYZ. Czyli przykładowo dla danych ABC daje wynik DEF. Napisałem coś takiego:... ale nie działa poprawnie bo dla danych OMG daje wyniki WTF"
0

Problem polega tkwi w losowaniu podanych liczb nie wiem jak powinienem ci to opisać...

No wiesz, ja też miałbym problem w opisaniu problemu z programem którego nie napisałem. Ale ja bym chociaż umiał stwierdzić czy jest to błąd składniowy czy logiczny. Ja bym radził się wysilić, bo z takim opisem to chyba nikt tobie nie pomoże.

0

Tak ogólnie to ten kod nie ma sensu. Masa błędów. Przekazujesz rozmiar do funkcji i zaraz go potem zerujesz. jakaś tablica t2... co ona przechowuje według Ciebie?

0

ok spróbuję ;p
zatem chcę by losowanie zwracało numer indeksu tabeli, co nam daję losowanie liczb z jakiegoś zakresu np podaję liczby kolejno 11,22,33 więc indeksy: 0=11,1=22,3=33 ok potem losuję indeks ze skali 0-2 więc mam już losowo wybrane liczby ;] Ale potem jest sajgon gdy próbuję zrobić to bez powtórzeń :(

0

Chodzi o to, że chcesz wyświetlić dowolną permutację (wariację?) liczb wprowadzonych przez użytkownika?

0

tylko nie chce wypisać wszystkich możliwości tylko np 2 liczby spośród 3 podanych przez użytkownika.

0

No to usuwaj liczby z tabeli i zmniejszaj "zakres" losowania, albo prościej zrób to na wektorze i losuj nie do 3 tylko do jego wielkości. Ew napisz z czym konkretnie masz problem, najlepiej z "sajgonowym" kodem.

ps przy 2 wyświetlanych liczbach zawsze możesz też je porównać i losować jeszcze raz jeśli okażą się identyczne. Jeśli będziesz zawsze wyświetlał właśnie 2 liczby to będzie najprostsze a więc i najlepsze.

1

To lepiej zrób to tak:
masz jedną tablice wypełnioną wartościami od użytkownika. Teraz losowo zacznij zamieniać elementy ze sobą, np tab[0] z tab[2]. oczywiście te indeksy masz losować. robisz tak kilka razy i masz pomieszaną tablicę. Teraz już wystarczy wypisać kilka pierwszy elementów z tablicy i już :)
istnieje już taki algorytm http://www.cplusplus.com/reference/algorithm/random_shuffle/
możesz przeczytać jak oni to zrobili.

1 użytkowników online, w tym zalogowanych: 0, gości: 1