random üretilen sayıların birbirinden farkı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
serkan887
Üye
Mesajlar: 4
Kayıt: 26 Eki 2005 03:46

random üretilen sayıların birbirinden farkı

Mesaj gönderen serkan887 »

S.A. arkadaşlar. kafama takılan bir soru var. 9 adet random sayı üretmem lazım. random sayıları üretiyorum ancak bu sayiların birbirinden farklı olmasını istiyorum. bunu nasıl kontrol edebilirim?
bir mantık kurdum yine ancak gene çalıştıramadım. kurduğum mantık şu
1. sayiyi üret.
2. sayiyi üret ve 1 ile karşılaştır aynıysa tekrar üret.
3. sayiyi üret 1 veya 2 ile ayniysa ayni olani tekrar üret....

ama bu kodu yazmaya çalışırken içinde kayboldum. umuyorum ki bunun kolay bir yolu olmali. yardimci olurmusunuz?
teşekkürler.
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

Bunun için 9 sayılık bir dizi ve bir adet de integer değişken tanımlayın. Randomla ürettiğiniz sayıları bu dizi indeksine sırasıyla atayın.
Yeni ürettiğiniz sayının dizi içinde olup olmadığını for döngüsü ile kontrol edin eğer varsa yeniden random yapın yoksa diziye atayın ve oluşturduğunuz değişkenin değerini 1 artırın, bu değişkenin değeri 9 olana kadar işleme devam edin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Bu daha önce sorulan bir soruda verdiğim cevap fonksiyon...

Kod: Tümünü seç

Procedure RandomDoldur( Liste:TStrings; Limit, Adet:Integer );
var
  Sayi : Integer;
begin
  If Limit <= Adet then begin
    ShowMessageFmt( '0''dan farklı olarak %d Limit ile %d Adet rakam elde etmek mantıklı değil...', [Limit, Adet]);
    Exit;
  end;
  Liste.Clear;
  Sayi := -1;
  Randomize;
  While (Sayi < 0) OR (Liste.Count < Adet)  do begin
     Sayi := Trunc(Random * Limit);
     If (Sayi > 0) AND (Sayi <= Limit) AND (Liste.IndexOf( IntToStr(Sayi) ) < 0) then
       Liste.Add( IntToStr(Sayi) );
  end; // While
end;
Kullanımı

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  RandomDoldur(ListBox1.Items, 10, 9);
end;
Resim
Resim ....Resim
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

benim bildiğim random olayı tarih saat gibi birşeyden tetiklenirdi. küsuratlı ise aralık dar değilse neden eşit gelsinki ?

kaldıki dokuz random üretip diziye alırsın sıralatıp bir döngüde kontrol edersin.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@lonely

- Random : adı üzerinde rastgele... Yani aynı rakam gelmesi ihtimali de var. İstenen listede aynı rakam mükerrer olmasın.

- 0 ile 1 arasında bir rakam üretilir. Siz bunu 10 ile çarpar tamsayı kısmını alırsanız 0 ile 9 arasında bir rakam bulursunuz. 100 ile çarpar tamsayı kısmını alırsanız 0 ile 99 arasında bir rakam bulursunuz.

- 0 ile 9 arasında bir döngü kurarak ve kontrol yapmayarak benzer rakam gelip gelmeyeceğini kendin test edebilirsin.
Resim
Resim ....Resim
Cevapla