Dizi Elemanlarını Kontrolu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ENIGMA55
Üye
Mesajlar: 23
Kayıt: 15 Eki 2006 08:50

Dizi Elemanlarını Kontrolu

Mesaj gönderen ENIGMA55 »

Merhaba arkadaşlar. Delphi 7 kullanıcısıyım ve projem için önemli sayabileceğim bir hususta takıldım kaldım. Kaç gündür internetten araştırdım ama bir türlü çözüme kavuşturamadım. Yardımlarınızı talep ediyorum.Konu şu, önce kodu vereyim;

procedure TForm1.Button1Click(Sender: TObject);
var
i :Byte;
katar,sonuc:String;
s :Array[0..2]of String;
begin
randomize;
katar:='abc';
for i:=0 to 2 do
begin
s:= katar[random(3)+1];
sonuc:=sonuc+s;
end;
li1.Items.Add(sonuc);
end;

Delphiden rastgele string üretmesini ve listbox da göstermesini istiyorum.Buraya kadar herşey iyi fakat istediğim şey; aynı stringi bir daha üretmeyecek.Yani program çalıştırıldığında -atıyorum-
acb
bbb
bca
ccb
acb
.... gibi üretiyor. Ama gördüğünüz gibi mükerrer string oluştu! işte bunu engellemek istiyorum. Nasıl yapabilirim?
Teşekkürler.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Dizi Elemanlarını Kontrolu

Mesaj gönderen SimaWB »

Listboxa ekleyeceğiniz string'i önce Listboxta var mı yok mu kontrol etmelisiniz. Bunu da ListBox1.Items.IndexOf() ile sağlarsınız.
ListBox1.Items.IndexOf('aranan') ifadesi, eğer "aranan" Listboxta yoksa -1 döndürür. Dolayısıyla siz kodunuzda li1.Items.Add(sonuc) yazmadan evvel bu kontrolü kullanmalısınız:

Kod: Tümünü seç

if (li1.Items.IndexOf('aranan')=-1) then
  li1.Items.Add(sonuc);
There's no place like 127.0.0.1
ENIGMA55
Üye
Mesajlar: 23
Kayıt: 15 Eki 2006 08:50

Re: Dizi Elemanlarını Kontrolu

Mesaj gönderen ENIGMA55 »

Teşekkür ederim ama aradığım tam olarak o değil. Şöyle ki; programda listbox olmadığını düşünün veya en son olarak devreye girecek. Bakın problemi şöyle sormak istiyorum; Elimizde a ve b değeri var. Biz bundan random string üretmesini ve her ürettiği stringin de bir kez olmasını isteyelim. Sonucu da en son listbox a yazdıralım. Şöyle bir çıktı verecek;
ab
ba
aa
bb
ve burada programın son bulması gerekecek çünkü başka üretilecek string kalmadı. İşte soru esas burada! Burada bize verilen dizi elemanların a,b,c,d,e,f,g vb.. gibi olduğunu düşünürsek delphi bunu nasıl yapacak yani nasıl bir kodlama olacak? yukarıda bahsettiğim sistemi nasıl yaprırabileceğiz?
Teşekkür ederim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Dizi Elemanlarını Kontrolu

Mesaj gönderen mrmarman »

Merhaba

@SimaWB'in önerisini anladığınızı ancak nerede bu döngüye dur diyeceğinizi bilemediğinizi düşünerek bu mesajı yazıyorum.

Basit matematik kombinasyon der. Yani harf sayısı ve harf grubu içeren kombinasyonu hesaplamak basit bir işlemdir. İhtiyacınız olan ürün liste hesapladığınız adede ulaşıldığında döngüyü sonlandırırsınız. Bu bir yolu.

Örneğinizde a ve b için toplam kombinason 4 olduğuna göre liste eleman sayısı 4 olana kadar ve elde edilen random harf ikilisi için liste indexof değeri -1 olduğu sürece ekleyen while veya repeat döngüsü çözüm sunacaktır.

Bir başka yöntem de tombala şeklinde harf içerik bankasından random seçtirip yine liste indexof değeri -1 olduğu sürece ekleyen while veya repeat döngüsü ki bu defa küçük bir farkla, kelimeler daha önce kelime bankasında hazırdır.

Başarılar.
Resim
Resim ....Resim
ENIGMA55
Üye
Mesajlar: 23
Kayıt: 15 Eki 2006 08:50

Re: Dizi Elemanlarını Kontrolu

Mesaj gönderen ENIGMA55 »

Merhaba mrmarman. Bilerek en küçük örneği verdim ve kombinasyon sayısının 4 olduğunu bilmek sorun olmaz. Ama dediğim gibi, örneğin dizi eleman sayısının 20-30 adet olduğunu kabul edelim kombinasyon sayısını bilemiyoruz, o zaman nasıl bir kodlama yapacağız?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Dizi Elemanlarını Kontrolu

Mesaj gönderen mrmarman »

Kombinasyon sayısını bilebiliyoruz. Matematik burada devreye giriyor.
Permütasyon ve kombinasyon terimlerini bir araştırıp döner misin.
Resim
Resim ....Resim
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Dizi Elemanlarını Kontrolu

Mesaj gönderen SimaWB »

Dünkü cevabımdan sonra bugün yazılanları geç gördüm. Maalesef soru biraz hatalı sorulmuş olunca ben de o yönde cevap vermiştim. Başlık ise tam bir aldatmaca olmuş :) Neyse siz sonraki açıklamanızla düzeltmişsiniz zaten.

Sn. mrmarman gerekenleri söylemiş. Araştırmanız gereken bence de kombinasyon. Elinizde bir karakter dizisi var ve bunun elemanlarıyla belirli uzunlukta yeni diziler oluşturacaksınız. Oluşturduğunuz her yeni diziyi listeye atarken "daha önce bulunmuş mu" diye kontrol edeceksiniz.
Siz biraz daha araştırın, olmazsa elimizden geldiğince biz yardımcı olmaya çalışırız.
There's no place like 127.0.0.1
Kullanıcı avatarı
badkursat
Üye
Mesajlar: 84
Kayıt: 03 Mar 2014 08:58

Re: Dizi Elemanlarını Kontrolu

Mesaj gönderen badkursat »

Farklı bir yaklaşım olarak bütün sonuçları üretip sonuçlar arasından random seçmeyi deneyebilirsin. Ama tabiki bütün sonuçları üretmen israf olacaktır.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Dizi Elemanlarını Kontrolu

Mesaj gönderen mrmarman »

- Bunları birer rakam olarak değerlendirelim..
- 0123456789
- 4 haneli kaç rakam elde edebilirim deseydin her haneye 0,1,2,3,4,5,6,7,8,9 gelmeyecek mi ? İç içe döngü gibi düşünün her döngü 10 adet rakam için döneceğine göre (4) kere dönecek. (10 x 10 x 10 x 10) yani (0000 - 9999) arasındaki rakamlar için 10.000 tane seçenek var demektir.

- Şimdi senin örneğinde de a ve b ile yan yana kullanılabilir olacaksa 2^2 = 4 buldun.
- Dizi elemanların a,b,c,d,e,f,g ise ve a,b,c,d,e,f,g kadar hane kullanılacaksa o zaman hane kadar kuvvet uygulayacak 7^7 = 7x7x7x7x7x7x7 = 823.543 tane seçenek var demek olacaktır.

- Kombinasyon derken bu seçeneklerin tekrarlı olmadığını yani aaaaaaa, aaaaaab gibi olamayacağını değerlendirdim. Soruya bir daha bakınca aa bb kısmını da görünce bu açıklamayı yapmak durumunda kaldım.
Resim
Resim ....Resim
ENIGMA55
Üye
Mesajlar: 23
Kayıt: 15 Eki 2006 08:50

Re: Dizi Elemanlarını Kontrolu

Mesaj gönderen ENIGMA55 »

Sn mrmarman, teşekkür ederim bana fikir verdiniz.
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Dizi Elemanlarını Kontrolu

Mesaj gönderen ikra »

Veli ben de sana tesekkür ederim.
kıdemsiz üye
Cevapla