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.
random üretilen sayıların birbirinden farkı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
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.
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.
Bu daha önce sorulan bir soruda verdiğim cevap fonksiyon...
Kullanımı
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;
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
begin
RandomDoldur(ListBox1.Items, 10, 9);
end;
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.
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
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
@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.
- 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.