Rastgele sayı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Rastgele sayı
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
...
..
.
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
...
..
.
Re: Rastgele sayı
Yokmu yardım edicek olan? çok lazım programımın büyük bi güvenlik açığını kapatıcam...
-
- Üye
- Mesajlar: 69
- Kayıt: 02 Oca 2009 09:03
Re: Rastgele sayı
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.
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.
Re: Rastgele sayı
sayısı üret sonra 0...9 arası rakamlardan uygun olanı sayının sonuna ekle StrToInt(Inttostr(12345üretilmiş rakam) + '1') = 123451
Re: Rastgele sayı
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
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/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Re: Rastgele sayı
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...
ö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
Re: Rastgele sayı
ç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?
Re: Rastgele sayı
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.
kolay gelsin...
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;
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
Re: Rastgele sayı
çok teşekkür ederm bu yardımınızı unutmayacağım
Re: Rastgele sayı
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.
Re: Rastgele sayı
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;
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