"Tasowanie" wartości tablicy jednowymiarowej.

0

Witam! Niedawno postanowiłem rozpocząć swoją przygodę z programowaniem i nie do końca wiedziałem jak za to się zabrać, więc postawiłem sobie cel, że chcę stworzyć program, który "potasuje" mi 3 wartości w tablicy jednowymiarowej.
Program prawidłowo uzupełnia tablicę:
Tab[0] = 1
Tab[1] = 2
Tab[2] = 3

Lecz po tasowaniu daje mi
Tab[0] = 3
Tab[1] = 1
Tab[2] = 1

Problemy to:

  • Przy każdym uruchomieniu programu otrzymuję takie same wartości
  • Jedynka powtarza się 2 razy, za to dwójka ani razu.

Proszę o pomoc! :)

 
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int Tablica[3], j, temp;
for (int i=0; i<3; i++)
{
Tablica[i] = (i+1);
cout << Tablica[i] << " ";
}
cout << endl;
for (int i=0; i<3; i++)
{
j = rand()%3;
temp = Tablica[i];
Tablica[i] = Tablica[j];
Tablica[j] = temp;
cout << Tablica[i] << " ";
}
cin.ignore();
return 0;
}
2
Formatuj kod (wcięcia)! ~@twonek
Nie używaj magicznych liczb.
Nie używaj ''rand'' - jest deprecated.
Daruj sobie jakiekolwiek ręczne łapanie znaków na końcu programu.
#include <iostream>
#include <algorithm>
#include <array>
#include <random>
using namespace std;

int main() {
	array<int, 3> tab = {1, 2, 3};
	default_random_engine gen;
	shuffle(begin(tab), end(tab), gen);
	for_each(begin(tab), end(tab), [](auto el){
		cout << el << endl;	
	});
	return 0;
}
Jeśli koniecznie chcesz to zrobić po swojemu, trzymaj w głowie jedną zasadę: 
"przy zamianie NIE będę bawił się w ręczne przepisywania - użyję std::swap,
ażeby żaden z elementów zaprzepaszczonym nie został"

http://en.wikipedia.org/wiki/Magic_number_%28programming%29
http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
Uważaaajcie na magiczne liiiczby!

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