IUP2 – TP programmation informatique n°4

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;
      }
  1. Dans un premier temps, complétez le programme pour qu'il :

  1. Décomposez ce programme en fonctions : une fonction qui effectue la saisie, une pour l'affichage, et évidement le programme principal. Les données seront obligatoirement transmises en arguments des fonctions. Je vous conseille de commencer par l'affichage, car il ne nécessite pas de modification des arguments.
  2. Calculez la température moyenne (à l'aide d'une fonction qui retourne un flottant) mais imprimez la dans le programme principal
  3. Créez une boucle dans le programme principal qui permette de répéter ce menu :
        que voulez vous faire ?
        1 -> saisir le tableau
        2 -> l'afficher
        3 -> moyenne
        0 -> quitter le programme
  1. Rajoutez la possibilité d'ajouter une température (à la suite des autres) via une fonction.
  2. Rajoutez la possibilité de supprimer une valeur(demander sa position)
  3. Modifiez l'ajout d'une température en permettant de l'insérer à un endroit précis
  4. Rajoutez la possibilité d'exécuter une rotation, dans les deux sens : le premier passe en dernier et tous les autres se décalent; le dernier passe en premier et tous les autres se décalent. (2 fonctions)
  5. Si vous vous vous sentez en forme, tentez de trier les températures (optionnel)

Propostion de solution


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


retour TP IUP2

(c) P. TRAU IPST - ULP