Arkadaşlar başlangıç seviyesinde olduğum için bu kadar acemice bir soru soracağım.
Birkaç gündür dizileri anlamaya çalışıyorum ama anlamayı bırakın sadece kafam karıştı. Mesela dinamik bir diziye edit e yapilan girişleri dizi elemanları olarak nasil gönderebilirim?
diziler ile ilgili sorular
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: diziler ile ilgili sorular
Önce kavramları sınıflandıralım.
Statik Dizi (Array) : Daha VAR ile tanımlarken başı sonu belli olan, bu sınırlara sonradan herhangi bir müdahalenin mümkün olamadığı; Tip tanımı yapılmış olan dizilerdir.
Dinamik Dizi (Array): VAR ile tanımlarken boyutu hakkında herhangi bir çerçeve çizilmemiş, akış içerisinde SetLength() ile defaten boyutu ayarlanabilen; başlangıçta sadece Tip tanımı belli olan dizilerdir.
Low() ve High() fonksiyonları ile bir dizinin en küçük index değeri ile en büyük index değerini öğrenebiliyoruz. Yani
statik dizi tanımı için Low(Dizimiz) dersek cevap (0) döner, High(Dizimiz) dersek cevap (10) döner.
dinamik dizi tanımında Low(Dizimiz) dersek cevap (0) döner ancak : High(Dizimiz) dersek cevap (-1) dönebilir. Bu durumda SetLength ile uzunluk belirtmediğimiz anlamına gelir. Aksi halde Uzunluk kaç ise bunun bir altındaki rakam döner.
- Şimdi konuya girebilirim.
- Sorunda Dinamik dizi olarak sorduğuna göre bu dizinin uzunluğu başlangıçta henüz belli değildir.
- Sen Edit'ten gelen her veri için bu uzunluğu SetLength() ile (bir) adet daha uzatmalısın diyebiliriz.
örnek vermek gerekirse :
// Sağlama yapmak için Dizimiz İçeriğini bir MEMO içinde listelemek için de aşağıdaki şekilde yaparız...
Statik Dizi (Array) : Daha VAR ile tanımlarken başı sonu belli olan, bu sınırlara sonradan herhangi bir müdahalenin mümkün olamadığı; Tip tanımı yapılmış olan dizilerdir.
Dinamik Dizi (Array): VAR ile tanımlarken boyutu hakkında herhangi bir çerçeve çizilmemiş, akış içerisinde SetLength() ile defaten boyutu ayarlanabilen; başlangıçta sadece Tip tanımı belli olan dizilerdir.
Low() ve High() fonksiyonları ile bir dizinin en küçük index değeri ile en büyük index değerini öğrenebiliyoruz. Yani
Kod: Tümünü seç
Var
Dizimiz : Array[0..10] of String;
dinamik dizi tanımında Low(Dizimiz) dersek cevap (0) döner ancak : High(Dizimiz) dersek cevap (-1) dönebilir. Bu durumda SetLength ile uzunluk belirtmediğimiz anlamına gelir. Aksi halde Uzunluk kaç ise bunun bir altındaki rakam döner.
- Şimdi konuya girebilirim.
- Sorunda Dinamik dizi olarak sorduğuna göre bu dizinin uzunluğu başlangıçta henüz belli değildir.
- Sen Edit'ten gelen her veri için bu uzunluğu SetLength() ile (bir) adet daha uzatmalısın diyebiliriz.
örnek vermek gerekirse :
Kod: Tümünü seç
Var
Dizimiz : Array of String;
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
EskiUzunluk : Integer;
YeniUzunluk : Integer;
begin
// Dizilerde Index normal olarak 0'dan başlar.
// High() ile sorgulanan son index değeri (-1) dönerse
// bu dizi hiç SetLength görmemiş demektir.
EskiUzunluk := High(Dizimiz) + 1; //0'dan başladığından uzunluk ölçerken (1) ekliyoruz.
YeniUzunluk := EskiUzunluk + 1; // Ekleyeceğimiz TEXT için rezervasyon adına yeniden (1) ekliyoruz.
// iki defa (1) ekledik. (-1) dönmüş olsa bile cevap (1)'e kadar sürüldü...
SetLength( Dizimiz, YeniUzunluk );
Dizimiz[ YeniUzunluk-1 ] := Edit1.Text; //0'dan başladığından uzunluktan (1) azaltarak yerleştiriyoruz.
end;
Kod: Tümünü seç
procedure TForm1.BitBtn2Click(Sender: TObject);
Var
Sayac : Integer;
begin
for Sayac := Low(Dizimiz) to High(Dizimiz) do
begin
Memo1.Lines.Add( Dizimiz[Sayac] );
end;
end;
Re: diziler ile ilgili sorular
mrmarman cevap için çok teşekkürler. gerçekten çok yardımcı oldun. şu şekilde bir anlatım bulmak çok büyük bir nimet benim için.
ama kafama takılan bişi daha var. dizi dinamik veya sabit farketmez, bir isim listesi aldığımızı düşünelim. bu isimleri edit ten aldıkça diziye eleman olarak gönderiyoruz ve diziyi bir label a veya list box a basıyoruz. bunu nasıl yapabiliriz?
çok teşekkürler.
ama kafama takılan bişi daha var. dizi dinamik veya sabit farketmez, bir isim listesi aldığımızı düşünelim. bu isimleri edit ten aldıkça diziye eleman olarak gönderiyoruz ve diziyi bir label a veya list box a basıyoruz. bunu nasıl yapabiliriz?
çok teşekkürler.
Re: diziler ile ilgili sorular
mrmarman zaten yukarıda vermiş dizideki elemanları nasıl memo veya listbox'a çekeceğinizi.mrmarman yazdı: // Sağlama yapmak için Dizimiz İçeriğini bir MEMO içinde listelemek için de aşağıdaki şekilde yaparız...Kod: Tümünü seç
procedure TForm1.BitBtn2Click(Sender: TObject); Var Sayac : Integer; begin for Sayac := Low(Dizimiz) to High(Dizimiz) do begin Memo1.Lines.Add( Dizimiz[Sayac] ); end; end;