20 Şubat 2014 Perşembe

Delphi XE5- DataClientSet' te Toplam, Ortalama Bulma Fonksiyonlarınını Oluşturulması


    Bu yazıda toplama ve ortalama alma fonksiyonlarının nasıl yapılacağını anlatacağım. Fonksiyonları oluşturduktan sonra çalıştığını göstermek için küçük bir de bakkal uygulaması yaptım. Bakkal uygulamasına:



1 adet Button
1 adet Label
1 adet DBEdit
1 adet DBGrid
1 adet DBNavigatör
1 adet ClientDataSet
1 adet DataSource

koydum.

Değişken tipleri

ürün : string
fiyat : curency
adet : integer;


   Yapmak istediğim bakkalın ürünü fiyati ve adetini girdiktikten sonra, ne kadar ürün girdiyse toplam fiyatini hesaplatmak. Şimdi fonksiyonumuzu hazırlamaya başlayalım. İlk önce fonksiyon kalıbımızı hatırlayalım

Function ...(..;..;..):....;
begin
.
.
.
Result:= '....';
end;

 Şimdi de yapmamız gereken fonksiyonumuza bir isim vererek değişmeyecek parametreleri girmek. Fonskiyonumuzun ismi topla olsun. ClientDataSette arama yapacak ve ClientDataSetteki satırları toplayacağımız için sadece bir parametremiz olacak.

Parametre

tClientDataSet

Parametreyi kullanmak için ona isim verelim

ClientDataSet

olsun ismi. Fonksiyonumuz hazır. Toplu şekilde yazacak olursak buraya kadar

Function topla ( cliendataset: tclientdataset ) : real;

 Bundan sonraki işlem fonksiyonumuzun ne yapmasını istediğiyle alakalı

1. Satır satır gezsin
2. Fiyat olan satırları bulsun
3. Fiyat olan satırları birbiriyle toplasın

  Satırlar arasında gezebilmesi için for döngüsünden yadım alacağız ve toplamı hesaplatabilmek içinde bir toplam tanımlamamız gerekli

var
i:integer;
toplam:real;

 Gerekli bütün tanımlamaları yaptık. fonksiyonu tamamlamak için yukarda yazdığımız ne yapmamız gerektiği algoritmasını şimdi de kodlamaya dökelim.

 ClientDataSet' te satırlar arasında dolaşmak için RecNo komutunu kullanacağız. RecNo bize ClientDataSetin hangi kaydında olduğunu verir. İnteger türünde bir değişkendir. Bu komutu for döngüsüyle birleştirerek bütün satırlar da gezebileceğiz. RecordCount komutuda bize verisetinde kaç tane veri varsa sayısını verecektir.

  for i := 1 to clientdataset.RecordCount do
      begin
          clientdataset.RecNo := i;
      end;

  For dögüsüyle 1. kayıttan son kayıta gezdik fakat bir işlem yaptırmadık. Şimdide asıl yaptırmak istediğimiz işlemi yani toplama işlemini yaptıralım. İlk önce toplamı 0 değerine eşitlememiz gerekli. Çünkü en başta hiç toplamımız yok ve bu değeri vermezsek bir hiç birşeyle toplamamış oluruz. Yapmak istediğimiz her satırdaki fiyat'ı bir sonraki kayıt ile toplamak. Bunun içinde toplam:= toplam + bir sonraki fiyat kayıt yapmamız gerekli;

toplam := 0;
    for i := 1 to clientdataset.RecordCount do
      begin
          clientdataset.RecNo := i;
         toplam := toplam + clientdataset.FieldByName('fiyat').Value;
      end;

  Artık fonksiyonumuz hazır. Fonksiyonun bütün şekli:

function topla(clientdataset:tclientdataset):real;
var toplam:real;
i:integer;
begin
  toplam := 0;
    for i := 1 to clientdataset.RecordCount do
      begin
          clientdataset.RecNo := i;
         toplam := toplam + clientdataset.FieldByName('fiyat').Value;
      end;
  Result := toplam;
end;

  Şeklinde olacaktır. Bunu gelin Bakkal programında  kullanalım.

Örneğin:

procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption:=floattostr(topla(ClientDataSet1));
end;

Burada topla fonksiyonumuz real olduğu için label da gösterebilmek için string 'e dönüştürdük.


Şimdide ortalamayı alma fonksiyonunu yapmaya başlayalım. Bir önceki fonksiyonu biraz değiştirerek ortalamayı da çok rahat bir şekilde alabilirim. Tek yapmamız gereken toplamı ürün sayısına bölmek olacaktır. Şöyle ki:

function ortalama(clientdataset:tclientdataset):real;
var toplam,ort:real;
i:integer;
begin
  toplam := 0;
    for i := 1 to clientdataset.RecordCount do
      begin
          clientdataset.RecNo := i;
         toplam := toplam + clientdataset.FieldByName('fiyat').Value;
      end;
      ort := toplam / clientdataset.RecordCount;
  Result := ort;
end;


Bu fonksiyonlar sadece tek bir kolonun toplamı ve ortalamasını almanıza yarayacaktır. Eğer fiyat ve adetin çarpımının toplamını ve ortalamasını almak istersek bunu da fonksiyona bir kaç değişiklik yaparak yapabiliriz. Bu da diğer yazımın konusu olsun. Toplam ve ortalama algoritma mantığını anladıktan sonra bu fonksiyonu başka bileşenlere de uygulayabilirsiniz. Örneğin StringGirid ya da ListBox taki değerler içinde yapabilirsiniz.

Okuduğunuz İçin Teşekkür Ederim
Hakan UÇAR
İstatistikçi ve Amatör Programcı
İçerikler Tamamen Ücretsiz Olup Özgün Anlatımdır Paylaşırken Kaynak Belirtiniz Lütfen.

Uygulamayı Yandex Diskimden indirebilirsiniz.
 Clientdataset toplam ve ortalama alma


0 yorum:

Yorum Gönder