Info IUP2 Octobre 99

TP3 : tableaux statiques et passages d'arguments.

  1. On déclare un tableau statique tab (déclaration globale), le nombre effectif d'éléments (inférieur à la dimension) est également global. Je donne les déclarations et le programme principal, écrire une fonction de saisie et une fonction d'affichage du tableau (sans passage d'arguments).
  2. Ecrire une fonction retournant la moyenne du tableau.
  3. Les déclarations globales sont déplacées dans main. Modifier les passages d'arguments aux fonctions.
  4. la saisie du nombre d'éléments doit également être déplacée dans la fonction de saisie (pas demandé à tous)
  5. trier le tableau (j'explique différentes méthodes : bulle insertion sélection)
  6. sans changer aucune des fonctions, permettre la gestion de plusieurs tableaux (déclarés dans main)

Solution finale :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h> //pour getch
#include <ctype.h> //pour toupper

#define DIM 100
typedef float tableau[DIM];

void affiche(tableau tab,int a)
   {
     int i;
     printf("\nle tableau contient %d valeurs",a);
     printf("\nvaleurs du tableau : ");
     for (i=0;i<a;i++) printf ("\n\t%dième valeur : %f",i+1,tab[i]);
   }

void saisie(tableau tab,int*nb) //nb est modifié par la fonction
   {
    int i;
    printf("\ncombien désirez vous de valeurs (<=%d) ? ",DIM);
    scanf("%d",nb);
    for (i=0;i<*nb;i++)
      {
      printf("position %d : donnez la valeur : ",i);
      scanf("%f",tab+i); //ou &(tab[i])
      }
   }

float moyenne(tableau tab,int a) //retourne un flottant
   {
     int i;
     float s=0,m;
     for (i=0;i<a;i++) s+=tab[i];
     m=s/a;
     return(m);
   }

void echange(tableau t,int i,int j) 
//échange , dans le tableau t, les valeurs en position i et j
 {
  float tmp;
  tmp=t[i];
  t[i]=t[j];
  t[j]=tmp;
 }

int lepluspetit(tableau t, int debut, int nb)
//cherche le plus petit dans t (en commençant en position début)
 {
  int i,pp;
  pp=debut; //je suppose que c'est le premier
  for(i=debut+1;i<nb;i++)
         if(t[i]<t[pp])pp=i; //j'en ai trouvé un plus petit
  return(pp);
 }

void trier(tableau t, int n)
 {
  int i,pp;
  for(i=0;i<n-1;i++)
   {
    pp=lepluspetit(t,i,n);
    if(pp!=i)echange(t,i,pp);
   }
 }

void main(void)
   {
     tableau tab[5];
     char rep; 
     int nb[5]={0};  //initialisé à 0
     int i;
     do
        {
          printf ("\nSaisie,Affichage,Moyenne,Trier,Quitter?");
          rep=toupper(getche()); //changer en majuscules
          if(rep!='Q') 
           {
            printf("\nlequel (entre 0 et 4) ? ");
            scanf("%d",&i);
           }
          switch (rep)
             {
               case 'S': saisie (tab[i],&(nb[i]));break;
               case 'A': affiche (tab[i],nb[i]);break;
               case 'M': printf("\nmoyenne:%f ",moyenne(tab[i],nb[i]));break;
               case 'T': trier(tab[i],nb[i]);break;
             }
        }
     while (rep!='Q');
     puts("\n ---- salut ----");
   }

retour au sommaire des travaux pratiques d'informatique.


P. TRAU, ULP-IPST, 115/12/99