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
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;
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....
Ö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 ?
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)
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
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
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