EXERCICE III
Gestion Dynamique de la mémoire
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)
void
rajouter(tableau *tab,int *nb,int *dim)