RandomRange ne işe yarıyo bilmiyorum ama tahminimce 1 ile 52 arasında bir sayı üretiyor. Eğer öyleyse her sayıdan 2 tane üretse toplamda 104 sayı eder 2 tane sayı zaten 2 den fazla tekrarlanmak zorunda olmazmı? Aslında 'for 1 to 52' ve 'RandomRange(1,106)' mı yazmak istedin acaba?
Eğer öyleyse şöyle bişi deneyebilirsin. Tabi bu tekrarsız olur biraz oynayıp en fazla 2 tekrarlı da yapabilirsin.
procedure TForm1.Button1Click(Sender: TObject);
var
x,i:integer;
function Dublicate(x:Integer):Boolean;
var j : Integer;
begin
For j := 0 To Memo1.Lines.Count-1 do
if SameText(Trim(Memo1.Lines[j]),Trim(IntToStr(x))) Then Result := True Else Result := False;
end;
begin
Memo1.Clear;
i := 1;
repeat
x:=Randomrange(1,106);
if Not Dublicate(x) Then
begin
memo1.lines.add(inttostr(x));
Inc(i);
end;
until i = 53;
end;
Bence başta bu işlem için ürettiğim tüm sayıları tutabileceğin array bir değişken tanımla. Ardında Sayaç adında integer değişkeni oluştur. Rastgele ürettiğin bu sayıları bu array değişkenin içine ekle , eklerken array içindeki sayıları bir döngü ve if yapısı ile kontrol et. Eğer aynı sayı varsa sayıcı bir arttır. Son olarak tek yapman gereken eğer sayac>2 den başka sayı üret dersin eğer küçükse 2 den memoya ekle dersin.