pytanie tak jak w temacie (muszę to wiedzieć,a nie jestem programistą)
Kod: Zaznacz cały
#include <stdlib.h>
#include <stdio.h>
typedef struct {
char * name;
char * sname;
int year;
int grade;
} stud;
typedef stud * student;
typedef enum {
true,
false
} bool;
void printStudent(const void * a);
bool grade45 (const void * a);
void map (void * base, size_t n, void (*f) (const void * b))
{
size_t i;
void * ptr = (char *) base;
for(i=0;i<n;i++)
f((void *) (ptr+i));
}
void filter (void * base, size_t n, bool (* pred) (const void * a), void (*f) (const void * b))
{
size_t i;
void * ptr = (char *) base;
for(i=0;i<n;i++)
if (pred((void *) (ptr+i)) == true) f((void *) (ptr+i));
}
bool grade45 (const void * a)
{
student s = (student ) a;
if (s->grade >= 4 && s->grade <= 5)
return true;
else
return false;
}
void printStudent(const void * a)
{
student s = (student ) a;
printf("name: %s sname: %s grade: %d
",s->name,s->sname,s->grade);
}
student newStudent(char * name,char * sname, int year, int grade)
{
student s = malloc(sizeof(student));
s->sname = sname,s->name = name;
s->year = year,s->grade = grade;
return s;
}
int main(void)
{
student s1 = newStudent("dupa","dups",1,5);
student s2 = newStudent("foo","bar",2,3);
student sArray[2] = {s1,s2};
filter((void*)sArray,2,grade45,printStudent);
if(grade45((void *)s1) == true)
printStudent((void *)s1);
return 0;
}