diziler ile ilgili sorular

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

diziler ile ilgili sorular

Mesaj gönderen Serhan01 »

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?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: diziler ile ilgili sorular

Mesaj gönderen mrmarman »

Ö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

Kod: Tümünü seç

Var
  Dizimiz : Array[0..10] of String;
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 :

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;
// 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;
Resim
Resim ....Resim
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

Re: diziler ile ilgili sorular

Mesaj gönderen Serhan01 »

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.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: diziler ile ilgili sorular

Mesaj gönderen esistem »

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;
mrmarman zaten yukarıda vermiş dizideki elemanları nasıl memo veya listbox'a çekeceğinizi.
Cevapla