Exercice langage C corrigé chaîne et tableau

Exercice 1 :

rotation
#include 
typedef int composante;
void lecture(composante *t,int *nb)
 {
  int i;
  puts("nombre de valeurs à entrer ? ");
  scanf("%d",nb);
  for(i=1;i<=*nb;i++)
   {
    printf("%dième valeur : ",i);
    scanf("%d",t++);
   }
 }
void affiche(composante *t, int max)
 {
  int i;
  for(i=0;i<max;i++) printf("%d ",*t++);
  puts(" ");
 }
void decale_bas(composante *deb, int max)
 {
  composante c,*t;
  t=deb+(max-1);
  c=*t;
  while (t>deb) {*t=*(t-1);t--;}
  *t=c;
 }
void decale_haut(composante *t, int nb)
 {
  composante c;int i;
  c=*t;
  for (i=1;i<nb;i++) {*t=*(t+1);t++;}
  *t=c;
 }
void main(void)
 {
  composante tableau[100];
  int nombre;
  lecture(tableau,&nombre);
  puts("tableau initial :");
  affiche(tableau,nombre);
  decale_haut(tableau,nombre);
  puts("décalage vers le haut :");
  affiche(tableau,nombre);
  decale_bas(tableau,nombre);
  puts("décalage vers le bas :");
  affiche(tableau,nombre);
 }

Exercice 2 :

#include 
#define dim 100
typedef int composante;
void lecture(composante *t,int *nb)
 {
  int i;
  puts("nombre de valeurs à entrer ? ");
  scanf("%d",nb);
  for(i=1;i<=*nb;i++)
   {
    printf("%dième valeur : ",i);
    scanf("%d",t++);
   }
 }
void affiche(composante *t, int max)
 {
  int i;
  for(i=0;i<max;i++) printf("%d ",*t++);
  puts(" ");
 }
int indice_min(composante t[],int indice_dep, int nb_indices)
/* cherche l'indice de la valeur du tableau :
 *  -soit égale à t[indice_dep], mais d'indice > à indice_dep;
 *  -soit la plus petite mais >t[indice_deb]
 */
 {
  int i,indice_resultat=-1;
  for(i=indice_dep+1;i<nb_indices;i++) if (t[i]==t[indice_dep]) return(i);
/* si on est encore là c'est qu'il n'y en pas d'égal */
  for(i=0;i<nb_indices;i++)
    if ((t[i]>t[indice_dep]) && ((indice_resultat<0) || (t[i]<t[indice_resultat]))) indice_resultat=i;
  return(indice_resultat);
}
void copier(composante *source, composante *dest, int nb)
/* copie le tableau source dans le tableau dest */
 {
  int i;
  for(i=0;i<nb;i++) *(dest++)=*(source++);
 }
void classe(composante tab[], int nb)
 {
  composante tempo[dim]; /* un malloc(sizeof(composante)*nb) aurait été
                mieux mais on n'en a pas encore parlé en cours */
  int i,ind_faits,indice;
/* 1er : recherche du plus petit, le 1er si ex aequo */
  indice=0;
  for(i=1;i<nb;i++)
   if(tab[i]<tab[indice]) indice=i;
  tempo[ind_faits=0]=tab[indice];
/* les suivants : recherche le + petit mais > au précédent */
  for(ind_faits=1;ind_faits<nb;ind_faits++)
   {
    indice=indice_min(tab,indice,nb);
    tempo[ind_faits]=tab[indice];
   }
  copier(tempo,tab,nb);
 }
void main(void)
 {
  composante tableau[dim];
  int nombre;
  lecture(tableau,&nombre);
  puts("tableau initial :");
  affiche(tableau,nombre);
  classe(tableau,nombre);
  puts("tableau classé :");
  affiche(tableau,nombre);
 }

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *