EXERCICE XI

Les adresses des fonctions

 

  1. Faire un programme menu de déterminer la surface ou le périmètre dun triangle en utilisant une variable pointeur sur une fonction (trois paramètres de type double les trois cotés du triangle).

void (*fonc)(double,double,double);

 

Utiliser la partie dun 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');

. . .

 

 

  1. Faire un programme à déterminer les sommes et les moyennes des éléments positifs et négatifs dun tableau donné en utilisant une fonction qui retourne les adresses sur les zones des résultats.

 

#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) ;

}

 

  1. Modifier le programme de p.2 en ajoutant la possibilité à déterminer les éléments maximaux et minimaux.

 

  1. Utiliser le tableau table d'adresses de fonctions et leurs noms, donné au dessus et calculer la somme, le produit et lélément maximal dun tableau donné. On sort en entrant "fin" au lieu du nom de fonction.

 

typedef struct {

char *nom;

double (*fon)(double[ ],int);

}tab_fon;

 

tab_fon table[ ] = {

"s", sonmme,

"p", produit,

"max", max

};