Random - randomize

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
lom
Üye
Mesajlar: 135
Kayıt: 25 Nis 2006 02:37

Random - randomize

Mesaj gönderen lom »

Herkese Merhabalar arkadaşlar. Forumda arama yaptım ama tam olarak aradığım cevabı bulamadım. Paradoxda yapmış olduğum bir Veritabanımda tek bir alan var ve projede butona basıldığı zaman alandaki herhangi bir kelimenin harfleri karışık gelmesi gerekiyo. Formda arayıp da bulduğum bir Function sayesinde yapacağımı umuyordum ancak beceremedim :?

Kod: Tümünü seç

function karistir(PWLen: integer; a: string): string;
var
  N, K, X, Y: integer;
begin

  Randomize;
  if (PWlen > Length(a)) then K := Length(a)
    else K := PWLen;
  SetLength(result, K);
  Y := Length(a);
  N := 0;

  while N < K do begin
    X := Random(Y);
    if (pos(a[X], result) = 0) then begin
      inc(N);
      Result[N] := a[X];
    end
  end;
end;
Fonksiyonum bu şekilde..

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Table1.RecNo:=random(Table1.RecordCount);
edit1.Text := karistir(30,Table1Kelime_adi.AsString);
end;
Butonun click olayına bu kodu kullanarak çalıştırıyorum. ancak bazen çalışıyo bazen çalışmıyo. Tabi muhtemelen karakter saysında problem vardır ama ben çözemedim. Adım Adım çalıştırdım. Function bölümünde while döngüsünden çıkamıyo. Bu yüzden donuyo. Yardımlarınız için teşekkürler....
Kullanıcı avatarı
lom
Üye
Mesajlar: 135
Kayıt: 25 Nis 2006 02:37

Mesaj gönderen lom »

Arkadaşlar programı kurcalarken bişe buldum :shock:

Örneğin veritabanından gelen kelime : Ahmet olsun
butona bastığım zaman harfler istediğim gibi karışık geliyo. Ancak veritabanından gelen kelimede aynı harften birden fazla varsa program donuyo.
Örneğin : Ahmeet yazdığımda butona bastığımda program donuyor. Bunu nasıl engelleyebiliriz ?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
anladığım kadarı ile kelimenin içinde aynı karakterden birden fazla varsa döngüden çıkmıyor.
karıştırma proceduresi üzerinde biraz çalışman lazım.
gelen kelimeyi bir değişkene at.(kelime)

Kod: Tümünü seç

random(length(kelime))
ile kelime içersinden rastgele bir karakteri seç.
sonra o karakteri resulta at.
kelimeden seçtiğin karakteri çıkart(böylece aynı karakterin tekrar seçilmesini engellemiş olursun)
döngüyü for ile kurarsan bu şekilde bir mantık ile çalışması lazım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
lom
Üye
Mesajlar: 135
Kayıt: 25 Nis 2006 02:37

Mesaj gönderen lom »

aslangeri yazdı: random(length(kelime))
ile kelime içersinden rastgele bir karakteri seç.
sonra o karakteri resulta at.
Peki hocam bu result olayını tam olarak anlayamadım. Sölediğim gibi bu procedürü forumdan buldum ve kendime uyarlamaya çalıştım. Biraz daha açık yardımcı olursanız sevinirim. Kolay gelsin
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

hatanın sebebini sende görmüşsün
ben olsam karıştır fonksiyonunu şöyle hazırlardım

Kod: Tümünü seç

function karistir(a: string): string;
var
  i,j,len:byte;
  temp:string;
begin
  Randomize;
  len:=length(a);
  temp:='';
  for i:=1 to len do
  begin
    j:=random(length(a))+1;//random un geriye 0 göndermesi ihtimaline karışı +1 diyoruz
    temp:=temp+a[j];
    delete(a,j,1);//böylelikle aynı karakterin tekrar seçilmesini engelliyoruz
  end;
  result:=temp;
end;
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
lom
Üye
Mesajlar: 135
Kayıt: 25 Nis 2006 02:37

Mesaj gönderen lom »

Hocam çok teşekkür ederim. Elinize Dilinize sağlık :) Kolay Gelsin
Cevapla