Belirli aralıkta rassal sayı üretme ve sıralama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
takkus
Üye
Mesajlar: 25
Kayıt: 18 Şub 2005 03:53
İletişim:

Belirli aralıkta rassal sayı üretme ve sıralama

Mesaj gönderen takkus »

s.a.. bitirme projem(genetik algoritmalarla tek makina çizelgeleme probleminin optimizasyonu) için yapmam gereken programda başlangıç çözümünü elde etmek için rassal sıralama yapmam gerekiyor. örneğin; tek makinada işlem görecek 10 adet iş var. başlangıç çözümünde bu işler rassal bir şekilde sıralanmalı. dinamik dizilerle yapmaya çalıştım ama her işin sıralamada bulunması koşulunu yaptıramadım. iş sayısını kullanıcı belirliyor. mesela 1-10 aralığında rassal sıralama yapılacak ama hiç 4 gelmemiş.kodum şöyle;

Kod: Tümünü seç

setlength(rassalsayilar,issayisi+1,issayisi+1);
for k:=1 to issayisi+1 do
for l:=1 to issayisi+1 do
  begin
   screen.Cursor:=crhourglass;
   comehere:
   rassalsayilar[k-1,l-1]:=random(issayisi+1);
     if rassalsayilar[k-1,l-1]=0 or rassalsayilar[k,l]=rassalsayilar[k-1,l-1] then    
   begin
     goto comehere;
   end;
  end;
if rassalsayilar[k-1,l-1]= 0 or rassalsayilar[k-1,l-1]=rassalsayilar[k,l] then >>> bu satırda "incompatible types" hatası veriyor. acaba yaptığım bir mantık hatası mı yoksa kodlama hatası mı? ve de bunu yapmanın daha kısa bir yolu var mı.
şimdiden teşekkürler. kolay gelsin
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Madem her elemanın bir kere geçmesi gerekiyor, random ile atama yapamazsın. Dediğin gibi mesela 5 hiç gelmeyebilir.

Bunun yerine elemanlarını diziye koy. Mesela 1 den 5 e kadar olanlar'ı bir dizi içine koy.

Dizi = (1, 2, 3, 4, 5) gibi.

Buradan random çek. Çektiğini diziden sil. Random çekme işini yeni eleman sayısına göre yap. Böylece bütün elemanları random bir şekilde alırsın.
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

belirli bir aralıkta rastsal sayı üretmek için

Kod: Tümünü seç

rastsalsayi:=(random(ustsinir)+altsinir);
takkus
Üye
Mesajlar: 25
Kayıt: 18 Şub 2005 03:53
İletişim:

Mesaj gönderen takkus »

cevaplarınız için çok teşekkür ederim.
sayın coderlord;
Bunun yerine elemanlarını diziye koy. Mesela 1 den 5 e kadar olanlar'ı bir dizi içine koy.
Dizi = (1, 2, 3, 4, 5) gibi.
Buradan random çek. Çektiğini diziden sil. Random çekme işini yeni eleman sayısına göre yap. Böylece bütün elemanları random bir şekilde alırsın.
demişsiniz. mantığı kavradım ama -cahilliğimi bağışlayın- ben rassal sırayı diziden çektikten sonra bu diziden aldığım sayıyı silip yeni boyuta göre tekrar random çekemedim. biliyorum basit bi sorun ama vermeyince Hâlık neylesin mahluk:)
biraz daha yardım lütfen. tekrar teşekkürler. kolay gelsin
takkus
Üye
Mesajlar: 25
Kayıt: 18 Şub 2005 03:53
İletişim:

Mesaj gönderen takkus »

utana sıkıla tekrar sormak istiyorum.
dinamik diziden istediğim elemanı aldıktan sonra nasıl silebilirim?
tşkkrler
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

diziden silmekte kasıt o elemanı işaretle. ya matris yapı kurar başka bi alt indisi TRUE FALSE gibi bişey yaparsın yada en basiti kullanmadığın bi değer aralığında rakam verirsin.
örneğin elemanlar 0..2..3.4.5.6 diye gidiyorsa aldıığın elemanını -1 yaparsın.

veya bi döngü ile aldığın elemandan sonra gelen elemanların bi düşer dizi boyutunu kısaltırsın. ama fazla kasmaya gerek yok -1 ver geç :)
.-.-.-.-.-.-.-. ^_^
Cevapla