Mam za zadanie zrobic mieszanie wyrazow ktore ma na celu:
przykładowo wylosowalismy ze zbioru liczb od 0 do 5, dwie cyfry: 1 i 4
Chce je pomieszać między sobą tak, żeby reszta została na swoim miejscu: 0 na 0, 2 na 2, 3 na 3, 5 na 5, a tamte chce zamienić tak, że 4 na 1, a 1 na 4.
Napisałem taki kod i nie mogę sobie poradzić z tą zamianą. Gdyż wypisuje jedynie '-'
procedure TForm1.MieszajWyrazyTylkoWylosowane;
type
tablicaWykorzystanych = array of boolean;
var
i:integer;
iloscWyrazow,wylosowano:Cardinal;
wykorzystane,wylosowane : tablicaWykorzystanych;
begin
Randomize;
SetLength(wykorzystane,ComboBox1.Items.Count{-1});
SetLength(wylosowane,ComboBox1.Items.Count{-1});
iloscWyrazow:=ListBox1.Items.Count;
ListBox2.Items.Clear;
Form1.Caption:='';
for i:=0 to iloscWyrazow-1 do begin
ListBox2.Items[i]:=ListBox1.Items[i];
end;
if ComboBox1.ItemIndex<2 then begin
ShowMessage('Drugim sposobem można wymieszać co najmniej dwa wyrazy!');
end
else begin
for i := 0 to ComboBox1.ItemIndex-1 do begin
repeat
wylosowano:=Random(iloscWyrazow)
until (wykorzystane[wylosowano] = false){ and (wylosowano<>i)};
wykorzystane[wylosowano]:=true;
wylosowane[wylosowano]:=true;
ShowMessage('Wybrano (lewa strona): '+ListBox1.Items[wylosowano]);
end;
for i := 0 to iloscWyrazow-1 do begin
if wykorzystane[i] = true then begin
Form1.Caption:=Form1.Caption+' '+IntToStr(i);
ListBox2.Items[i]:='-';
repeat
repeat
wylosowano:=Random(iloscWyrazow)
until (wylosowane[wylosowano] = true) and (wylosowano=i);
until (wylosowano=i);
ShowMessage('Po zamianie(prawa strona): '+ListBox1.Items[wylosowano]);
//ListBox2.Items[i]:=ListBox1.Items[wylosowano];
end;
end;
end;
end;