EXERCICE XI
Les adresses des fonctions
void (*fonc)(double,double,double);
Utiliser la partie d’un programme
donne :
. . .
do
{ printf("\n'1' perimetre");
printf("\n'2' surface");
printf("\n'3' fin");
printf("\nEntrer
Votre choix:");
ch=getche();
switch(ch)
{ case
'1':fonc=perim; fonc(a,b,c); break;
case
'2':fonc=surf; fonc(a,b,c); break;
case
'3':break;
default:break;
}
}while(ch!='3');
. . .
#include
<stdio.h>
#include
<math.h>
#include
<stdlib.h>
void *f(int
a[],int,int);
void main()
{ int a[]={-1,5,-1,1,-2,8},*s=(int *)malloc(4);
float *moy=(float *)malloc(8);
moy=(float *)f(a,sizeof(a)/sizeof(int),1);
s=(int *)f(a,sizeof(a)/sizeof(int),0);
printf("La moyenne de
positives=%.2f\n",*moy);
printf("La moyenne de
negatives=%.2f\n",*(moy+1));
printf("La somme de
positives=%d\n",*s);
printf("La somme de
negatives=%d\n",*(s+1));
}
void *f(int a[],int n, int k)
{ float *m=(float *)malloc(8);
int *s=(int *)malloc(4),i,sp,sn,cp,cn;
for(i=0,sp=0,sn=0,cp=0,cn=0;i<n;i++)
{ if(a[i]>0) { sp+=a[i];
cp++; }
if(a[i]<0) { sn+=a[i]; cn++; }
}
if(cp>0) *m=(float)sp/cp;
if(cn>0) *(m+1)=(float)sn/cn;
*s++=sp;
*s=sn;
if(!k) return (s -1);
else return
m;
free(m) ;
free(s) ;
}
typedef struct {
char *nom;
double (*fon)(double[ ],int);
}tab_fon;
tab_fon table[ ] = {
"s",
sonmme,
"p", produit,
"max", max
};