Filitreleme Tipi Fonksiyonlar (Filter Type Functions)

Yazan : Şadi Evren ŞEKER

Bir veri yapısı üzerinde çalışan ve veri yapısında bulunan verileri, verilen bir fonksiyonu kullanarak eleyen (filitreleyen) fonksiyon tipidir. Bu durum aşağıdaki bağlı liste (linked list) örneğinden anlaşılabilir:

Örneğin yukarıdaki bağlı liste üzerinden tek sayıları eleyen bir fonksiyon yazmak istersek yapmamız gereken, tek sayıları veren aşağıdaki fonksiyonu bu bağlı liste üzerine filitre tipinde uygulamaktır.

int tek(int a){

return a%2==1;

}

Yukarıdaki fonksiyon tek sayılarda 1 ve çift sayılarda 0 döndürmektedir (C dilinde 1′in olumlu (doğru, true) ve 0′ın olumsuz (yanlış, false) olduğunu hatırlayınız). Yukarıdaki bu fonskiyonu, fonksiyon göstericisi (function pointer) kullanarak aşağıdaki filter fonksiyonuna parametre verebiliriz:

node *filter ( node *root, int (*pt2Func)(int)){
   node * iter = root;
   while(iter->next != root){
         if(pt2Func(iter->next->data)){
            node * temp=iter->next;
            iter->next = iter->next->next;
            free(temp);
         }
         iter = iter->next;
   }
   if(pt2Func(root->data)){
         node*temp=root;
         root=root->next;
         free(temp);
   }
   return root;
}
Bu yazıyı beğendiyseniz, başkalarının da ilgisini çekebilirsiniz:


109 views

2 responses to “Filitreleme Tipi Fonksiyonlar (Filter Type Functions)”
  1. Fatih Kabakci says:

    int tek(int x){
    if(x%2==1)
    return 1;
    else
    return 0;
    }
    int buyuk(int x){
    return x>=3;
    }
    int filter(int *a,int s,int (*fp)(int)){
    int b=s;
    for(int i=0;i<b;i++){
    if(fp(a[i])==0){
    for(int k=i;k<b;k++){
    a[k]=a[k+1];
    }
    b–;
    i–;
    }
    }
    return b;
    }
    int main(){
    int a[]={3,2,1,5,4,3};
    int b=filter(a,6,buyuk);
    b=filter(a,b,tek);
    for(int i=0;i<b;i++){
    printf("%d ",a[i]);
    }

    if(fp(a[i])==0){
    for(int k=i;k<b;k++){
    a[k]=a[k+1];
    }
    b–;
    i–;
    Hocam kodun bu bolumunde Tam olarak mantik nedir?Aciklayabilirmisiniz,simdiden tesekkur ederim..

  2. Fatih Kabakci says:

    int b=filter(a,6,buyuk);
    b=filter(a,b,tek);

    ve bu bolumde ‘tek’ fonksiyonu icin; int b=filter(a,b,tek);
    diyerek uygulayıp,’buyuk’ fonksiyonunda bu sekil uyguladıgımızda= b=filter(a,6,buyuk) sonucun ekranda vermedigini hata olarak algıladıgını gordum.bunun sebebi sizce nedir?

Leave a Reply


+ 9 = onaltı

Benzer Yazılar:

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Filitreleme Tipi Fonksiyonlar (Filter Type Functions)' isimli yazı 30 Mar 2009 tarihinde, saat: 11:31 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam109 defa okunmuştur.

Benzer yazıları C/C++, Derleyiciler, Programlama Dilleri, veri yapıları kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


Category: C/C++, Derleyiciler, Programlama Dilleri, veri yapıları