Pascal-random

Programovacie jazyky, rady, poradňa...
Yxo
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 357
Registrovaný: 24 aug 2005, 11:14
Bydlisko: Veľaty/Brno
Kontaktovať používateľa:

Pascal-random

Príspevok od používateľa Yxo »

Ako mam prinutit pascal aby mi nahodne poprehadzoval poradie cisel? Napr. zadam rad cisel od 1 po 20 a vypise tych 20 cisel v nahodnom poradi.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Urob si pole 20 čísel, premiešaj ho (a potom vypíš).
Yxo
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 357
Registrovaný: 24 aug 2005, 11:14
Bydlisko: Veľaty/Brno
Kontaktovať používateľa:

Príspevok od používateľa Yxo »

Dakujem pekne. Neviem preco ma premiesanie hned nenapadlo. Posielam K+ :wink:
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Aký algoritmus na premiešanie pola používaš? Rýchly je napr. tento spôsob:

Kód: Vybrať všetko

var
	a: array[1..20] of Integer;
	i, r, t: Integer;
	
begin
	Randomize;
	for i := 1 to 20 do
	begin
		a[i] := i;
	end;
	for i := 1 to 20 do
	begin
		r := random(20) + 1;
		t := a[i];
		a[i] := a[r];
		a[r] := t;
	end;
end.
(v Pascale som už dávno nič nerobil, takže možno tam bude nejaká chyba)
Yxo
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 357
Registrovaný: 24 aug 2005, 11:14
Bydlisko: Veľaty/Brno
Kontaktovať používateľa:

Príspevok od používateľa Yxo »

Vygenerujem dostatocny pocet premiesani (p), a tolko krat sa potom navzajom vymenia nahodne prvky pola.

Kód: Vybrať všetko

var a:array [1..20] of integer;
    p,i,j,k,l:integer;
begin
  randomize;
  p:=(random(100)+50);
  for i:=1 to p do begin
    k:=(random(19)+1);
    l:=(random(19)+1);
    j:=a[k];
    a[k]:=a[l];
    trieda[l]:=j;
  end;
end.
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

Yxo napísal:Vygenerujem dostatocny pocet premiesani (p), a tolko krat sa potom navzajom vymenia nahodne prvky pola.

Kód: Vybrať všetko

var a:array [1..20] of integer;
    p,i,j,k,l:integer;
begin
  randomize;
  p:=(random(100)+50);
  for i:=1 to p do begin
    k:=(random(19)+1);
    l:=(random(19)+1);
    j:=a[k];
    a[k]:=a[l];
    trieda[l]:=j;
  end;
end.
uplne zbytocne to miesas viac krat. ak sa bavime o pseudonahodnom poradi tak
1 x premiesanie = 2 x premiesanie= 3 x premiesanie
atd
Napísať odpoveď