IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

algorithme de rotation


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 52
    Points : 32
    Points
    32
    Par défaut algorithme de rotation
    Bonjour a tous

    je suis débutant en C , voici un exercice que j'ai vu sur le net qui s'intitule

    Ecrire un programme qui lit une liste de Nb nombres, la décale d'un cran vers le haut (le premier doit se retrouver en dernier), l'affiche puis la décale vers le bas. On pourra décomposer le programme en fonctions.

    voici la solution proposée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdio.h>
    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);
     }
    la fonction void decale_bas(composante *deb, int max) je ne comprends pas très bien cette.
    pourriez vous m'expliquer car c'est vraiment important pour moi.
    merci d'avance pour votre aide

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    La même fonction un peu commentée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    void decale_bas(composante *deb, int max)
     {
      /* une variable composante, 
         un pointeur sur une variable composante. (l'élément courant)
       */
      composante c,*t;
      /* on fait pointer t sur le dernier élément de la liste.
         on aurai aussi pu écrire t = &deb[max-1];
       */
      /* Attention, ici il faudrait vérifier que deb et max n'ont pas des valeurs
          fantaisistes
       */
      t=deb+(max-1);
      /* on stoque le dernier élément de la liste dans c 
         cette ligne plus la précédente pourrait donc s'écrire
         c = deb[max-1];
       */
      c=*t;
     
      /* tant que t pointe sur un élément qui se trouve après le premier élément
       */
      while (t>deb) {
        /* on stocke à la position courant, la valeur de la position précédent
           un truc comme deb[n] = deb[n-1];
         */
        *t=*(t-1);
        /* on fait pointer l'élément courant sur la position précédente.
         */
        t--;
      }
      /* on stocke dans le premier élément du tableau la valeur sauvegardée
         deb[0] = c;
       */
      *t=c;
     }

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/11/2012, 08h50
  2. Algorithme de rotation
    Par Mujin dans le forum Mathématiques
    Réponses: 0
    Dernier message: 16/02/2011, 15h09
  3. algorithme de rotation d'images 90°, 180°, 270° ?
    Par mobi_bil dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 23/03/2009, 12h51
  4. Algorithme pour rotation image en C
    Par guigui01 dans le forum Traitement d'images
    Réponses: 6
    Dernier message: 22/04/2006, 14h41
  5. Algorithme de randomisation ... ( Hasard ...? )
    Par Anonymous dans le forum Assembleur
    Réponses: 8
    Dernier message: 06/09/2002, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo