Losowanie bez powtórzeń

0

Witam,
program powinnien losować 8 liczb bez powtórzeń po wcześniejszym wpisaniu 10 liczb . Tylko , że nie zabardzo działa . Sprawdzanie czy liczba się powtórzyła nie działa a wcześniej jak miałem 2 liczby do losowania to wszystko normalnie działało a teraz jak zmieniłem na 8 liczb to losuje czasami 2 razy te same liczby . Co jest źle ?

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


//1. 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. 


const int rozmiar = 10;
const int rozmiar_temp_array = 8;

void wczytaj(int *tab)
{
	for (int i = 0; i < rozmiar; i++)
	{
		std::cout << "Podaj " << i + 1 << " liczbe : ";
		std::cin >> *(tab);
		*(tab++);
	}
}


int losuj()
{
	return rand () % 11;
}

bool sprawdz(int *tab, int wylosowana_liczba)
{
	for (int i = 0; i < rozmiar; i++)
	{
		if (tab[i] == wylosowana_liczba)
		{
			return true;
		}
	}

	return false;
}


int main()
{
	int tab[rozmiar];
	wczytaj(tab);

	srand(time(NULL));

	int temp_array[rozmiar_temp_array];

	for (int i = 0; i < 8;)
	{
		int wylosowana = losuj();
		if (!(sprawdz(tab, wylosowana)))
		{
			std::cout << "Wylosowany indeks to : " << wylosowana << std::endl;
			temp_array[i] = tab[wylosowana];
			i++;
		}

	}

	for (int i = 0; i < 8; i++)
	{
		std::cout << "Wylosowana liczba to : " << temp_array[i] << std::endl;
	}

	system("pause");
	return 0;
}
0

Co z tego , że było ? Ja nie chce skopiować kodu tylko wiedzieć dlaczego nie działa i to poprawić ...

0

Więc porównaj swój kod z resztą i zobacz co spieprzyłeś.

0

U Ciebie jest tak, sprawdzasz czy wylosowana liczba znajduje się w tablicy tab i jeśli jej nie ma to wielokrotnie może losować ten sam indeks. Stąd powtórzenia w temp_array.
temp_array[i] = tab[wylosowana];
Jeśli w tab nie będzie liczby np. 5 to tab z takim wylosowanym indeksem będzie wielokrotnie przypisywać tą samą liczbę do temp_array.

0

Poza tym zakres liczb losowych masz za duży, powinno być od 0 do 9 więc daj:
rand()%10

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