Delphi Dünyası Facebook'ta

Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

Gönderen Konu: Delphi dizi fonksiyonları  (Okunma sayısı 7132 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı akrep

  • Global Moderatör
  • *****
  • İleti: 1.242
  • Rep: +27/-13
  • Cinsiyet: Bay
Delphi dizi fonksiyonları
« : 11 Şubat 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.

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Double=(10, 20, 30, 40); // Tip ondalikli olmali
  4. var
  5. Sonuc : Extended;
  6. begin
  7. Sonuc := Mean(Dizi);
  8. Caption:= FloatToStr(Sonuc); // Elemanlarin aritmetik ortalamasini verir
  9. end;

Sum(Dizi);

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

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Double=(10, 20, 30, 40); // Tip ondalikli olmali
  4. var
  5. Sonuc : Extended;
  6. begin
  7. Sonuc := Sum(Dizi);
  8. Caption:= FloatToStr(Sonuc); // Elemanlarin toplamini verir
  9. 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.

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Integer=(10, 20, 30, 40); // Tip tam sayi olmali
  4. var
  5. Sonuc : Extended;
  6. begin
  7. Sonuc := SumInt(Dizi);
  8. Caption:= FloatToStr(Sonuc); // Elemanlarin toplamini verir
  9. 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.

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Double=(10, 20, 30, 40);
  4. var
  5. Sonuc : Extended;
  6. begin
  7. Sonuc := SumOfSquares(Dizi);
  8. Caption:= FloatToStr(Sonuc); // Elemanlarin karelerinin toplamini verir
  9. 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.

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Double=(10, 20, 30, 40);
  4. var
  5. Toplam, Kare_Toplam : Extended;
  6. begin
  7. SumOfSquares(Dizi , Toplam , Kare_Toplam);
  8. Caption:= ‘Elemanların Toplamı : ’+FloatToStr(Toplam)+’ Elemanların Karelerinin Toplamı : ’+FloatToStr(Kare_Toplam);
  9. end;

TotalVariance(Dizi);

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

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Double=(10, 20, 30, 40);
  4. var
  5. Sonuc : Extended;
  6. begin
  7. Sonuc := TotalVariance(Dizi);
  8. Caption:= FloatToStr(Sonuc);
  9. end;

Variance(Dizi);

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

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Double=(10, 20, 30, 40);
  4. var
  5. Sonuc : Extended;
  6. begin
  7. Sonuc := Variance(Dizi);
  8. Caption:= FloatToStr(Sonuc);
  9. end;

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

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

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. var
  3. Sonuc : Extended;
  4. begin
  5. Sonuc := EnsureRange(40 , 100 , 70); // Orta eleman
  6. Caption:= FloatToStr(Sonuc); // 70 yazar
  7. end;
  8.  

High(Dizi);

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

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Double=(10, 20, 30, 40);
  4. var
  5. Sonuc : Integer;
  6. begin
  7. Sonuc := High(Dizi);
  8. Caption:= IntToStr(Sonuc); // 3 yazar
  9. 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.

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Double=(10, 20, 30, 40);
  4. var
  5. Sonuc : Integer;
  6. begin
  7. Sonuc := Low(Dizi);
  8. Caption:= IntToStr(Sonuc); // 0 yazar
  9. 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.

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. var
  3. Ogrenci : Array Of Integer;
  4. Mevcut, I : Integer;
  5. begin
  6. Mevcut := StrToInt(Inputbox(‘Sınıf Mevcudunu Giriniz’,’Mevcut’,’’));
  7. SetLength(Ogrenci , Mevcut);
  8. For I:=Low(Ogrenci) To High(Ogrenci) Do // ilkten son elemana kadar
  9. Ogrenci[i] := StrToInt(InputBox(‘Notu Giriniz’,’Not’,’’));
  10. 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.

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Integer=(10, 70, 30, 40);
  4. var
  5. Sonuc : Integer;
  6. begin
  7. Sonuc := MaxIntValue(Dizi); // En buyuk degeri bul
  8. Caption:= IntToStr(Sonuc); // 70 yazar
  9. 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.

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Integer=(10, 20, 30, 40);
  4. var
  5. Sonuc : Extended;
  6. begin
  7. Sonuc := MaxValue(Dizi);
  8. Caption:= FloatToStr(Sonuc); // 40 yazar
  9. 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.

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Integer=(10, 70, 30, 40);
  4. var
  5. Sonuc : Integer;
  6. begin
  7. Sonuc := MinIntValue(Dizi); // En buyuk degeri bul
  8. Caption:= IntToStr(Sonuc); // 10 yazar
  9. end;
  10.  

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.

Kod:  (Unknown Language)
  1. Procedure TForm1.Button1Click(Sender; Object);
  2. const
  3. Dizi : Array[0..3] of Integer=(10, 20, 30, 40);
  4. var
  5. Sonuc : Extended;
  6. begin
  7. Sonuc := MinValue(Dizi);
  8. Caption:= FloatToStr(Sonuc); // 10 yazar
  9. end;

Not: Alıntıdır.
Tomurcuk derdinde olmayan ağaç, odundur - Necip Fazıl Kısakürek

Çevrimdışı Kocaturk

  • Administrator
  • *****
  • İleti: 2.474
  • Rep: +56/-5
  • Cinsiyet: Bay
    • Delphi Dünyası
Ynt: Delphi dizi fonksiyonları
« Yanıtla #1 : 11 Şubat 2008 22:27:05 »
Akrep, Makaleler için teşekkürler..

Çevrimdışı RewriteRule

  • Delphi 7 Level 4
  • ****
  • İleti: 333
  • Rep: +7/-1
  • Cinsiyet: Bay
Ynt: Delphi dizi fonksiyonları
« Yanıtla #2 : 13 Şubat 2008 15:48:34 »
Akrep teşekkürler. Böyle derli toplu durması gerçekten iyi.

Çevrimdışı akrep

  • Global Moderatör
  • *****
  • İleti: 1.242
  • Rep: +27/-13
  • Cinsiyet: Bay
Ynt: Delphi dizi fonksiyonları
« Yanıtla #3 : 13 Şubat 2008 16:22:05 »
Rica ederim efenim ne demek... Bütün makaleler kurban olsun size.
Tomurcuk derdinde olmayan ağaç, odundur - Necip Fazıl Kısakürek

Çevrimdışı RewriteRule

  • Delphi 7 Level 4
  • ****
  • İleti: 333
  • Rep: +7/-1
  • Cinsiyet: Bay
Ynt: Delphi dizi fonksiyonları
« Yanıtla #4 : 13 Şubat 2008 17:01:54 »
hehehe. kurban edelim ama kan akmasın lütfen :)

Çevrimdışı akrep

  • Global Moderatör
  • *****
  • İleti: 1.242
  • Rep: +27/-13
  • Cinsiyet: Bay
Ynt: Delphi dizi fonksiyonları
« Yanıtla #5 : 13 Şubat 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.
Tomurcuk derdinde olmayan ağaç, odundur - Necip Fazıl Kısakürek

Çevrimdışı Fatih

  • Emekli Yönetici
  • *****
  • İleti: 2.217
  • Rep: +43/-10
  • Cinsiyet: Bay
    • Delphi Dünyası
Ynt: Delphi dizi fonksiyonları
« Yanıtla #6 : 13 Şubat 2008 19:42:53 »
Döngü kullanarak aktarırız bizde :)

Denemedim ama pointer tipli dizi ile de aynını elde edebiliriz gibime geldi.
Malulen emekli programcı / yazar. Bildiklerini unutmakta olduğundan size cevap veremez.

Çevrimdışı akrep

  • Global Moderatör
  • *****
  • İleti: 1.242
  • Rep: +27/-13
  • Cinsiyet: Bay
Ynt: Delphi dizi fonksiyonları
« Yanıtla #7 : 13 Şubat 2008 19:50:32 »
Döngü kullanarak aktarırız bizde :)

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.
Tomurcuk derdinde olmayan ağaç, odundur - Necip Fazıl Kısakürek

Çevrimdışı Fatih

  • Emekli Yönetici
  • *****
  • İleti: 2.217
  • Rep: +43/-10
  • Cinsiyet: Bay
    • Delphi Dünyası
Ynt: Delphi dizi fonksiyonları
« Yanıtla #8 : 13 Şubat 2008 19:58:12 »
Bunun için kitap için işlediğim pointer konusuna detaylıca bakmam gerek. o da uzun iş ;D

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 :)

Bence for do yerine for in do kullan. Daha modern ;D
Malulen emekli programcı / yazar. Bildiklerini unutmakta olduğundan size cevap veremez.

Çevrimdışı akrep

  • Global Moderatör
  • *****
  • İleti: 1.242
  • Rep: +27/-13
  • Cinsiyet: Bay
Ynt: Delphi dizi fonksiyonları
« Yanıtla #9 : 14 Şubat 2008 00:04:01 »
Bence for do yerine for in do kullan. Daha modern ;D

Hay hay hocam, siz nasıl tenzip buyurursanız :) Ama bir de örnek buyursanız ?
Tomurcuk derdinde olmayan ağaç, odundur - Necip Fazıl Kısakürek

Çevrimdışı Kocaturk

  • Administrator
  • *****
  • İleti: 2.474
  • Rep: +56/-5
  • Cinsiyet: Bay
    • Delphi Dünyası

Çevrimdışı 32844

  • Delphi 6 Level 4
  • ****
  • İleti: 288
  • Rep: +3/-0
  • Cinsiyet: Bay
Ynt: Delphi dizi fonksiyonları
« Yanıtla #11 : 14 Şubat 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.
Çang çing çong çung.
Çin Atasözü

Çevrimdışı Kocaturk

  • Administrator
  • *****
  • İleti: 2.474
  • Rep: +56/-5
  • Cinsiyet: Bay
    • Delphi Dünyası
Ynt: Delphi dizi fonksiyonları
« Yanıtla #12 : 14 Şubat 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

Kod:  (Unknown Language)
  1. i := i + 1;

yerine
Kod:  (Unknown Language)
  1. Inc(i);

demek gibi. ayrıca laf kalabalığı ne demek Fatih hocam onun yerine kod kalabalığı yap ve paylaş bence.

Çevrimdışı yongaseti

  • Delphi 1 Level 1
  • *
  • İleti: 1
  • Rep: +0/-0
Ynt: Delphi dizi fonksiyonları
« Yanıtla #13 : 16 Şubat 2008 22:05:06 »
Teşekkür ederim çok güzel bilgilendirici bir makale.Başarılar dilerim

Çevrimdışı fotografci

  • Delphi 1 Level 1
  • *
  • İleti: 3
  • Rep: +0/-0
Ynt: Delphi dizi fonksiyonları
« Yanıtla #14 : 15 Kasım 2008 20:46:19 »
teşekkürler...