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; }
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
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?