Nous allons étudier l'utilisation de base des tableaux (statiques unidimensionnels), ainsi que les fonctions. Nous supposons vouloir traiter diverses valeurs réelles (des températures) mesurées lors d'un essai thermique, regroupées dans un tableau.
Soient les déclarations :
#define DIM 100 typedef float tableau[DIM]; int main (void) { tableau t; int nb; }
Dans un premier temps, complétez le programme pour qu'il :
que voulez vous faire ? 1 -> saisir le tableau 2 -> l'afficher 3 -> moyenne 0 -> quitter le programme
#include <stdio.h> #define DIM 100 typedef float tableau[DIM]; void saisie (tableau t,int *nb,int dim) { int i; do { printf("combien de valeurs (entre 1 et %d) ? ",dim); scanf("%d",&*nb); } while(*nb<0 || *nb>dim); for(i=0;i<*nb;i++) { printf("entrez valeur %d :",i); scanf("%f",t+i); } } void affichage (tableau t, int nb) { int i; for(i=0;i<nb;i++) printf("valeur %d : %f\n",i,t[i]); } float moyenne (tableau t, int nb) { float somme; int i; somme=0; for(i=0;i<nb;i++)somme+=t[i]; return(somme/nb); } void ajouter (tableau t, int *nb,int dim) { if(*nb>=dim)printf("plus de place !\n"); else { printf("Entrez la valeur à rajouter : "); scanf("%f",&t[*nb]); (*nb)++; } } void supprimer (tableau t, int *nb) { int i,j; if(*nb<=0)printf("déja vide !\n"); else { printf("Quelle valeur voulez vous supprimer ?"); scanf("%d",&j); if (j<*nb && j>=0) { (*nb)--; for(i=j;i<*nb;i++) t[i]=t[i+1]; } } } void rotbas (tableau t, int nb) { int i,rot; rot=t[0]; for(i=0;i<nb;i++) t[i]=t[i+1]; t[nb-1]=rot; } void rothaut (tableau t, int nb) { int i,rot; rot=t[nb-1]; for(i=nb;i>0;i--) /*il faut commencer par la fin ! */ t[i]=t[i-1]; t[0]=rot; } void trier (tableau t, int nb) { int i,j, min,rot; for(i=0;i<nb-1;i++) /* on les classe tous sauf le dernier */ { min=i; for(j=i+1;j<nb;j++) /* recherchons le plus petit */ if(t[j]<t[min]) min=j; rot=t[i]; /* on les échange */ t[i]=t[min]; t[min]=rot; } } int main (void) { tableau tab; int nb,i,choix; nb=0; do { printf("que voulez vous faire?\n1 : saisir\n2 : afficher\n"); printf("3 : calcul moyenne\n4 : ajout valeur\n5 : supprimer valeur\n"); printf("6 : rotation vers le bas\n7 : rotation vers le haut\n"); printf("8 : trier\n0 : quitter\n-> "); scanf("%d",&choix); switch(choix) { case 1: saisie(tab,&nb,DIM);break; case 2: affichage(tab,nb);break; case 3: printf("La moyenne vaut %f\n",moyenne(tab,nb));break; case 4: ajouter(tab,&nb,DIM);break; case 5: supprimer(tab,&nb);break; case 6: rotbas(tab,nb);break; case 7: rothaut(tab,nb);break; case 8: trier(tab,nb);break; } } while(choix); }
(c) P. TRAU IPST - ULP