Set (Küme) Kullanımı ile ilgili

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Set (Küme) Kullanımı ile ilgili

Mesaj gönderen mucar »

S.A.,

Programımda küme tipi ile işlem yapmaktayım. Küme tipini tercih sebebim ise tek tek iki dizideki elemanları birbirleriyle karşılaştırmak yerine direk kümelerin kapsama özelliğini kullanmaktı.

Şimdiye kadar şu şekilde işlem yapıyordum;

Kod: Tümünü seç

...
 type Tkume = set of 1..90;
 var kume1,kume2,kume3:tkume;
for döngüsüyle kümelerime gerekli değerleri veritabanımdan dolduruyordum ve en sonunda da şu kontrole göre işlem yapıyordum;

Kod: Tümünü seç

if not(kume1+kume2>=kume3) then
//...gerekli kodlar
bu şimdiye kadar söylediklerimde bir sorun yok. burada ben kümelerimde integer değerler tutmaktaydım (1,17,20 vs. ). Şimdi ise kümemde bu değerlerin yanında string değerler de tutmam gerekiyor (17/1, 17/2, 2/1, 1,2 vs. ) Bunu yapmaya çalıştım. Tanımlamayı;

Kod: Tümünü seç

 type Tkume = set of Tstrings;
 type Tkume=set of Tstringlist;
şu şekillerde denedim, araştırdım olmadı. Nasıl yapabilirim? Şimdiden teşekkürler.
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Kümeler sayılabilir (enumerated) elemanlardan oluşmak zorunda olduğundan bunu yapamazsın. Kümeler 0-255 arasında değer alan elemanlardan oluşmak zorunda. Tabii Dexter (Delphi 2006) ya kadar bu böyleydi. ;)

Kod: Tümünü seç

Type
  TMeyveler = (Elma, Armut, Kiraz);

  TMeyveKümesi = set of TMeyveler; 
yapabilirsin. Ama dikkat derleyici bunları string olarak değil Elma=0, Armut=1, Kiraz=2 olarak algılar. Yani gene sayılabilir değerlere çevrilir.

Kümeleri tam olarak anlamamışsın. Biraz daha araştırman gerekli.
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Kümeleri tam olarak anlamamışsın. Biraz daha araştırman gerekli.
Evet ben de az önce araştımalarım sonucu aynı kanıya vardım.
In a set, each bit represents a separate value. Up to 256 bits (32 bytes) are allowed. Each element of the set is represented by an 8-bit integer. Individual bits can be set and cleared, as well as groups of bits.
Ama şu şekilde yapmaya karar verdim. Kaydettiğim sayılar 100'den küçüktü hep, 17/2 yi ifade etmek için kümeye 17002 gibi bir değer kaydedeceğim. bu şekilde sorun olmayacak.

Cevabın için çok teşekkürler :wink:
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Cevapla