Rastgele sayı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Sawyer
Üye
Mesajlar: 29
Kayıt: 05 May 2009 11:30

Rastgele sayı

Mesaj gönderen Sawyer »

merhaba, rastgele bir sayı elde etmek istiyorum fakat şöyle bir şey var.. mesela


54569882123645 sayısı geldi birdahaki gelcek sayının ve ilk sayının haneleri aynı olmayacak yani

54569882123645
31697426512095 // mesela burda son hanedeki 5ler aynı oldu bu işime yaramıyor hepsinin her seferinde bir öncekinde bütün rakamları farklı olucak


bunun gibi

54569882123645
31697426512092
29124632429143
...
..
.
Sawyer
Üye
Mesajlar: 29
Kayıt: 05 May 2009 11:30

Re: Rastgele sayı

Mesaj gönderen Sawyer »

Yokmu yardım edicek olan? çok lazım programımın büyük bi güvenlik açığını kapatıcam...
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

Re: Rastgele sayı

Mesaj gönderen ZeynelAbidin »

Sayının bütün hanelerini ayrı ayrı oluşturman lazım.
Mesela kaç karakterli sayı oluşturacaksan o kadar 1-9 arasında rastgele sayı oluşturup bu rastegele sayıların kaçıncı hane olduğuna göre bir önceki sayıya göre kontrol edip aynı değilse birleştirceksin aynıysa yeni bir sayı oluşturman gerekecek
Ancak böyle olur sanıyorum.Ama Delphinin böyle bir komutu varsa bilmek isterdim.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Rastgele sayı

Mesaj gönderen Lost Soul »

sayısı üret sonra 0...9 arası rakamlardan uygun olanı sayının sonuna ekle StrToInt(Inttostr(12345üretilmiş rakam) + '1') = 123451
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Rastgele sayı

Mesaj gönderen Kuri_YJ »

Selamlar,

Ben şu şekilde bir uygulama yapardım.

Önce Random Fonksiyonu ile 1. Sayıyı Üretirdim, Ardından 2. Sayıyı Üretirdim,

Her iki sayıyı da Stringe çevirir ve sonrasında 1'ler basamağından başlayarak her iki sayıyının basamaklarını tek tek kontrol ederdim. Eğer kontrol sırasında herhangi bir eşitliğe rastlarsam, otomatik olarak basamak değerini 1 arttırırdım,

Örneğin

1234567890 (1. Sayı)
2345679801 (2. Sayı)

1'ler basamağı farklı (0-1)
10'lar basamağı farklı (9-0)
100'ler basamağında çakışma var (8-8), 2. Sayıyı 1 Arttırırdım O zaman (8-9) olur.
böylelikle elimdeki 2. sayı string olarak 2345679901 olmuş olur.

Bu sistem ile bütün sayıları türetebilirim. Biraz yavaş bir yöntem ama sağlamdır. İlk aklıma gelen çözüm bu.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
quadr
Üye
Mesajlar: 69
Kayıt: 21 Haz 2003 10:12
İletişim:

Re: Rastgele sayı

Mesaj gönderen quadr »

random generate yapılmasında gettickcount yavaş bir çalışma mantığıdır.bunu hızlandırmak için özellikle brute force yapılacaksa (rdtsc) Time Stamp Counter okunması daha hızlı ve verimli bir çalışma elde edecektir.birazda asm ile işlem çok hızlı bir şekilde yapılabilir.bir örnek yazdım ekten indirebilirsiniz.
örnekte sawyer'ın istediği sayı üreteci için başlangıç sayısı 1234567890 dır key ürettirdikçe bir önceki sayıyı label'a yeni üretilen sayıyı ise edit'e yazdırdım.

kolay gelsin...
Dosya ekleri
rastgele sayı.rar
(161.55 KiB) 286 kere indirildi

Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...

http://www.tcct.us
Sawyer
Üye
Mesajlar: 29
Kayıt: 05 May 2009 11:30

Re: Rastgele sayı

Mesaj gönderen Sawyer »

çok teşekkür ederim ancak bu program sadece 0 ve 8 rakamını alıyor onu 0 dan 9 a kadar bütün sayılar yapabilirmiyiz?
Kullanıcı avatarı
quadr
Üye
Mesajlar: 69
Kayıt: 21 Haz 2003 10:12
İletişim:

Re: Rastgele sayı

Mesaj gönderen quadr »

hımm atlamışım.generete eden procedürü bu şekilde değiştir.sorunun çözülecektir bide bu şekilde döngü sayısını kısmış olduk.

Kod: Tümünü seç


procedure ser(i: integer);
begin
  repeat
  asm
    pushad
    rdtsc
    xor ecx,ecx
    mov cl, al
    mov [ass], ecx
    popad
  end;
  ass := StrToInt(copy(inttostr(ass),length(inttostr(ass)),1));
  if ass <> i then break;
  until false;
end;
kolay gelsin...

Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...

http://www.tcct.us
Sawyer
Üye
Mesajlar: 29
Kayıt: 05 May 2009 11:30

Re: Rastgele sayı

Mesaj gönderen Sawyer »

çok teşekkür ederm bu yardımınızı unutmayacağım
Kullanıcı avatarı
sunye
Üye
Mesajlar: 105
Kayıt: 24 Ağu 2004 04:49
Konum: izmir

Re: Rastgele sayı

Mesaj gönderen sunye »

Hocam vermiş olduğunuz program gayet güzel ancak ardışık gelen sayılarda aynı rakamlar denk geliyor yani 886612156 gibi buradaki 8 ve 6 ilgili nasıl bir çözüm bulabiliriz?
Bildiğim tek şey, hiç bir şey bilmediğim.
Kullanıcı avatarı
quadr
Üye
Mesajlar: 69
Kayıt: 21 Haz 2003 10:12
İletişim:

Re: Rastgele sayı

Mesaj gönderen quadr »

Kod: Tümünü seç


procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  s: string;
begin
 Label1.Caption := st;
 for i := 1 to length(st) do
 begin
  repeat
     ser(StrToInt(st[i]));   
     if ass <> strtoint(copy(s),length(s),1) then break;  
  until false; 
  s := s + IntToStr(ass);
 end;
 st := s;
 Edit1.Text := s;
end;
değiştir mükerrer vermez...

Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...

http://www.tcct.us
Cevapla