EXERCICE XI

Les adresses des fonctions

 

  1. Faire un programme menu de déterminer la surface ou le périmètre d’un 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 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');

. . .

 

 

  1. Faire un programme à déterminer les sommes et les moyennes des éléments positifs et négatifs d’un 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 d’un 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

                              };