EXERCICE III

Gestion Dynamique de la mémoire

  1. Saisie et affichage d'un tableau statique

 

void main(void)
{
         char rep;
         int nb=0;
         float tab[100];
         puts("combien d'éléments ?");
         scanf("%d",&nb);
         do
          {
                         puts("Saisie, Affiche, Moyenne, Quitter ?");
                         printf("%c\n",rep=toupper(getch()));
                         switch (rep)
                          {
                                        case 'S':saisie(tab,nb);break;
                                        case 'A':affiche(tab,nb);break;
                                        case 'M':moyenne(tab,nb);
                         }
         }while (rep!='Q'); 
}

 

·        Ecrire les fonctions saisie, affiche et moyenne. Passer en tableau dynamique en ne modifiant que le programme principal.

 

# include <stdio.h>

# include <stdlib.h>

#include <ctype.h>

#include <conio.h>

typedef float * tableau;

void saisie(tableau tab,int a);

void affiche(tableau tab,int dim);

void moyenne(tableau tab,int a);

void main(void)

   {    tableau tab; char rep; int nb,dim;

        printf ("\nCombien de valeurs ? ");

        scanf ("%d",&nb);

        dim=nb;

        tab=(float *)malloc(nb*sizeof(float));

        do {   printf ("\nSaisie,Affichage,Moyenne,Quitter?");

                  rep=toupper(getche());

                  switch (rep)

                    {         case 'S': saisie (tab,nb);break;

                               case 'A': affiche (tab,dim);break;

                               case 'M': moyenne(tab,nb);break;

                    }

             } while (rep!='Q');

        puts("\n ---- salut ----");

   }

void saisie(tableau tab,int a)

   {    int i;

        printf("\nC'est parti pour la saisie des %d valeurs\n",a);

        for (i=0;i<a;i++)

                  {           printf("position %d : donnez la valeur : ",i+1);

                              scanf("%f",tab++);

                  }

   }

void affiche(tableau tab,int dim)

   {     int i;

         printf("\nle tableau contient %d valeurs",dim);

         printf("\nvaleurs du tableau : ");

         for (i=0;i<dim;i++) printf ("\n\tposition %d : %f",i+1,*tab++);

   }

void moyenne(tableau tab,int a)

   {    int i;

        float s=0,m;

        for (i=0;i<a;i++) s=s+*tab++;

        m=s/a;

        printf("\nLa moyenne vaut %f",m);

   }

2.      Modifier le programme de p.1 en ajoutant une case à la fin du tableau dynamique et mettre dans cette case la moyenne. Modifier la fonction moyenne si ça est nécessaire. Afficher le tableau après le changement.

3.      Modifier le programme de p.2 en permettant de supprimer une valeur dans le tableau (on gère deux variables : nb et dim), nb donne le nombre de valeurs réellement dans le tableau, alors que dim est la taille du tableau telle qu'il a été dimensionné (par malloc). On a donc toujours nb<=dim. Ecrire la fonction        void enleve(tableau t, int *nb)
  1. Modifier le programme de p.3 en permettant d'ajouter une valeur (et si nécessaire agrandir le tableau, de 10% par exemple). Ecrire la fonction        

void rajouter(tableau *tab,int *nb,int *dim)