Arşiv Anasayfa Delphi Makaleleri
Sayfalar: 1
Delphi dizi fonksiyonları Gönderen: Akrep Tarih: 11 February 2008 15:39:12
Forumda bir köşede bulunmasında fayda var.

Mean(Dizi);

Parametre olarak girilen dizi elemanlarının aritmetik ortalamasını hesaplayan bir fonksiyondur. Dizi değişkeninin tipi ondalıklı sayı tipinde olmalıdır.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Double=(10, 20, 30, 40); // Tip ondalikli olmali
var
Sonuc : Extended;
begin
Sonuc := Mean(Dizi);
Caption:= FloatToStr(Sonuc); // Elemanlarin aritmetik ortalamasini verir
end;

Sum(Dizi);

Parametre olarak diziye gönderilen elemanların toplamını hesaplayan bir fonksiyondur.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Double=(10, 20, 30, 40); // Tip ondalikli olmali
var
Sonuc : Extended;
begin
Sonuc := Sum(Dizi);
Caption:= FloatToStr(Sonuc); // Elemanlarin toplamini verir
end;

SumInt(Dizi);

Parametre olarak girilen dizi elemanlarının toplamını hesaplayan bir fonksiyondur. Burada dikkat edeceğiniz husus, dizi elemanlarının tam sayı tipli tanımlanmaları gerektiğidir.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Integer=(10, 20, 30, 40); // Tip tam sayi olmali
var
Sonuc : Extended;
begin
Sonuc := SumInt(Dizi);
Caption:= FloatToStr(Sonuc); // Elemanlarin toplamini verir
end;

Bir önceki fonksiyon zaten bu işlemi kolayca yapar demeyin. Çünkü tam sayılı işlemler çok daha hızlı bir şekilde sonuca ulaştırılırlar.

SumOfSquares(Dizi);

Parametre olarak girilen dizi elemanlarının karelerinin toplamını hesaplayan bir fonksiyondur.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Double=(10, 20, 30, 40);
var
Sonuc : Extended;
begin
Sonuc := SumOfSquares(Dizi);
Caption:= FloatToStr(Sonuc); // Elemanlarin karelerinin toplamini verir
end;

Fonksiyondan geriye dönen değer ondalıklı sayı olacağı için, reel tip bir değişkene aktarılmalıdır.

SumsAndSquares(Dizi , Toplam , Kare_Toplam);

Birinci parametre ile girilen dizi değişkeninin elemanlarının toplamını ikinci parametreye, elemanlarının karelerinin toplamını da üçüncü parametreye aktaran bir prosedürdür.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Double=(10, 20, 30, 40);
var
Toplam, Kare_Toplam : Extended;
begin
SumOfSquares(Dizi , Toplam , Kare_Toplam);
Caption:= ‘Elemanların Toplamı : ’+FloatToStr(Toplam)+’ Elemanların Karelerinin Toplamı : ’+FloatToStr(Kare_Toplam);
end;

TotalVariance(Dizi);

Dizi elemanlarına ait toplam varyansı hesaplayan bir fonksiyondur.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Double=(10, 20, 30, 40);
var
Sonuc : Extended;
begin
Sonuc := TotalVariance(Dizi);
Caption:= FloatToStr(Sonuc);
end;

Variance(Dizi);

Dizi elemanlarına ait varyans değerini hesaplayan bir fonksiyondur.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Double=(10, 20, 30, 40);
var
Sonuc : Extended;
begin
Sonuc := Variance(Dizi);
Caption:= FloatToStr(Sonuc);
end;

EnsureRange(Küçük , Orta , Büyük);

Parametre olarak girilen elemanlar arasında ortanca değere sahip olanı döndüren bir fonksiyondur.

Procedure TForm1.Button1Click(Sender; Object);
var
Sonuc : Extended;
begin
Sonuc := EnsureRange(40 , 100 , 70); // Orta eleman
Caption:= FloatToStr(Sonuc); // 70 yazar
end;
 

High(Dizi);

Parametre ile girilen dizinin en son elemanının index numarasını döndüren bir fonksiyondur.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Double=(10, 20, 30, 40);
var
Sonuc : Integer;
begin
Sonuc := High(Dizi);
Caption:= IntToStr(Sonuc); // 3 yazar
end;

Örneğe dikkat edecek olursanız tanımlamış olduğunuz dizi değişkenin en son elemanının index numarası 3 tür. Bu değeri öğrenmek için kullanabileceğiniz önemli bir fonksiyondur. (Bilhassa dinamik dizilerde kullanımı zorunlu gibidir)

Low(Dizi);

Parametre ile girilen dizinin ilk elemanının index numarasını döndüren bir fonksiyondur.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Double=(10, 20, 30, 40);
var
Sonuc : Integer;
begin
Sonuc := Low(Dizi);
Caption:= IntToStr(Sonuc); // 0 yazar
end;

Dizinin ilk elemanı ( dizi[0] ) 0 olduğu için, örneğimizde geriye dönecek olan değer 0 olacaktır.

Aşağıdaki gibi bir (veya benzeri bir durumda ) durumda bu iki fonksiyon sizin için yararlı olacaktır. Sınıf mevcudunun bilinmediği (veya her sınıf için farklı olduğu durumlarda) dizinin kaç eleman olacağı bilinmeyecek, aynı zamanda alt ve üst sınırları devamlı olarak farklı olacaktır. Sabit değerler yerine bu fonksiyonları kullanırsanız her zaman doğru sonuçlara ulaşmanız mümkün olacaktır.

Procedure TForm1.Button1Click(Sender; Object);
var
Ogrenci : Array Of Integer;
Mevcut, I : Integer;
begin
Mevcut := StrToInt(Inputbox(‘Sınıf Mevcudunu Giriniz’,’Mevcut’,’’));
SetLength(Ogrenci , Mevcut);
For I:=Low(Ogrenci) To High(Ogrenci) Do // ilkten son elemana kadar
Ogrenci[i] := StrToInt(InputBox(‘Notu Giriniz’,’Not’,’’));
end;

MaxIntValue(Dizi);

Parametre olarak girilen dizi elemanları içerisinde maximum değeri bulabilen bir fonksiyondur. Dikkat edeceğiniz husus dizi değişkenin tam sayı tipli olması gerektiğidir.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Integer=(10, 70, 30, 40);
var
Sonuc : Integer;
begin
Sonuc := MaxIntValue(Dizi); // En buyuk degeri bul
Caption:= IntToStr(Sonuc); // 70 yazar
end;

MaxValue(Dizi);

Yine parametre olarak girilen dizi elemanlarından en büyüğünün değerini döndürür. Üstünlüğü tam veya ondalıklı sayıların ikisi içinde kullanılabilmesidir.

Fonksiyondan geriye dönecek olan değer ondalıklı sayı içereceği için FloatToStr tip dönüştürme fonksiyonu sayesinde yazdırılabilir.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Integer=(10, 20, 30, 40);
var
Sonuc : Extended;
begin
Sonuc := MaxValue(Dizi);
Caption:= FloatToStr(Sonuc); // 40 yazar
end;

MinIntValue(Dizi);

Parametre olarak girilen dizi elemanları içerisinde minimum değeri bulabilen bir fonksiyondur. Dikkat edeceğiniz husus dizi değişkenin tam sayı tipli olması gerektiğidir.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Integer=(10, 70, 30, 40);
var
Sonuc : Integer;
begin
Sonuc := MinIntValue(Dizi); // En buyuk degeri bul
Caption:= IntToStr(Sonuc); // 10 yazar
end;
 

MinValue(Dizi);

Yine parametre olarak girilen dizi elemanlarından en küçüğünün değerini döndürür. Üstünlüğü tam veya ondalıklı sayıların ikisi içinde kullanılabilmesidir.

Fonksiyondan geriye dönecek olan değer ondalıklı sayı içereceği için FloatToStr tip dönüştürme fonksiyonu sayesinde yazdırılabilir.

Procedure TForm1.Button1Click(Sender; Object);
const
Dizi : Array[0..3] of Integer=(10, 20, 30, 40);
var
Sonuc : Extended;
begin
Sonuc := MinValue(Dizi);
Caption:= FloatToStr(Sonuc); // 10 yazar
end;

Not: Alıntıdır.
Ynt: Delphi dizi fonksiyonları Gönderen: kocaturk Tarih: 11 February 2008 22:27:05
Akrep, Makaleler için teşekkürler..
Ynt: Delphi dizi fonksiyonları Gönderen: RewriteRule Tarih: 13 February 2008 15:48:34
Akrep teşekkürler. Böyle derli toplu durması gerçekten iyi.
Ynt: Delphi dizi fonksiyonları Gönderen: Akrep Tarih: 13 February 2008 16:22:05
Rica ederim efenim ne demek... Bütün makaleler kurban olsun size.
Ynt: Delphi dizi fonksiyonları Gönderen: RewriteRule Tarih: 13 February 2008 17:01:54
hehehe. kurban edelim ama kan akmasın lütfen Smile
Ynt: Delphi dizi fonksiyonları Gönderen: Akrep Tarih: 13 February 2008 17:56:19
Akacak kan damarda durmaz. Alın bir ipucu daha;

Tek boyutlu bir diziyi yine başka bir tek boyutlu diziye tamamen ve tıpatıp aktarmak için

Dizi2:=copy(Dizi1);

Sadece tek boyutlu diziler için geçerli. Malesef çok boyutlu diziler için 3. parti kullanmadan böyle kolay bir yöntem yok.
Ynt: Delphi dizi fonksiyonları Gönderen: FetihlerFatihi Tarih: 13 February 2008 19:42:53
Döngü kullanarak aktarırız bizde Smile

Denemedim ama pointer tipli dizi ile de aynını elde edebiliriz gibime geldi.
Ynt: Delphi dizi fonksiyonları Gönderen: Akrep Tarih: 13 February 2008 19:50:32
Döngü kullanarak aktarırız bizde Smile

Denemedim ama pointer tipli dizi ile de aynını elde edebiliriz gibime geldi.
Doğrudur hocam. Kolay yöntem yok derken copy fonksiyonu gibi birşey yok demek istedim. En yakın kolay yöntem döngü ile halletmek, ben dün bir süre araştırıp 2d dizide copy'nin işe yaramadığını öğrenince for-do döngüsüyle hallettim.

Pointer ile aynısını elde etmek derken copy gibi birşeyden mi bahsediyorsun? Kolay bir yöntem varsa öğrenelim hocam.
Ynt: Delphi dizi fonksiyonları Gönderen: FetihlerFatihi Tarih: 13 February 2008 19:58:12
Bunun için kitap için işlediğim pointer konusuna detaylıca bakmam gerek. o da uzun iş Grin

Pointerlarda kopyalamadan öte veerinin bellekteki yeri elde edilir. Yerini diğer diziye de gösterince ikiz dizi olmaları gerek kanımca. Kendi yazdıklarımı unutuyorum Smile

Bence for do yerine for in do kullan. Daha modern Grin
Ynt: Delphi dizi fonksiyonları Gönderen: Akrep Tarih: 14 February 2008 00:04:01
Bence for do yerine for in do kullan. Daha modern Grin

Hay hay hocam, siz nasıl tenzip buyurursanız Smile Ama bir de örnek buyursanız ?
Ynt: Delphi dizi fonksiyonları Gönderen: kocaturk Tarih: 14 February 2008 01:13:00
http://www.delphidunyasi.net/index.php/topic,1030.msg2474.html#msg2474
Ynt: Delphi dizi fonksiyonları Gönderen: 32844 Tarih: 14 February 2008 02:26:25
Akrep,

Ellerine, aklına sağlık...

Fatih, for do yerine; for in do kullanabilirsin demiş. KocaTürk örnek uygulamayı (emre tarafından verilmiş) göstermiş. İki kodu da denedim. Sonuç aynı. Farkı tam anlayamadım. Püf noktası mutlaka vardır.

ListBox'a button aracılığı ile veri aktardım. Uygulamadaki kodlar ile bunları memo'ya aktardım. Ancak aktarma sırasında enter (#13) olan yerlerde kare işareti çıktı. Aynı işareti Memik Yanık'ın (reklam amaçlı yazılmamıştır) kitabından yararlanarak form üzerindeki nesneleri yazdırmak üzere çalıştığım sırada da aldım. Biraz arama tarama yaptım. Ancak çözüm olarak söylenenleri pek benimsemedim.

Neyse fazla laf kalabalığı yapmayayım. Tekrar ellerine ve emeğine sağlık.
Ynt: Delphi dizi fonksiyonları Gönderen: kocaturk Tarih: 14 February 2008 18:37:02
Akrep,

Ellerine, aklına sağlık...

Fatih, for do yerine; for in do kullanabilirsin demiş. KocaTürk örnek uygulamayı (emre tarafından verilmiş) göstermiş. İki kodu da denedim. Sonuç aynı. Farkı tam anlayamadım. Püf noktası mutlaka vardır.

ListBox'a button aracılığı ile veri aktardım. Uygulamadaki kodlar ile bunları memo'ya aktardım. Ancak aktarma sırasında enter (#13) olan yerlerde kare işareti çıktı. Aynı işareti Memik Yanık'ın (reklam amaçlı yazılmamıştır) kitabından yararlanarak form üzerindeki nesneleri yazdırmak üzere çalıştığım sırada da aldım. Biraz arama tarama yaptım. Ancak çözüm olarak söylenenleri pek benimsemedim.

Neyse fazla laf kalabalığı yapmayayım. Tekrar ellerine ve emeğine sağlık.
Fark sadece kullanım kolaylığı. örneğin

i := i + 1;

yerine
Inc(i);

demek gibi. ayrıca laf kalabalığı ne demek Fatih hocam onun yerine kod kalabalığı yap ve paylaş bence.
Ynt: Delphi dizi fonksiyonları Gönderen: yongaseti Tarih: 16 February 2008 22:05:06
Teşekkür ederim çok güzel bilgilendirici bir makale.Başarılar dilerim