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 :

Dernier élément d'un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Par défaut Dernier élément d'un tableau
    Bonjour,

    Programme pour inverser les éléments d'un tableau à l'aide de pointeurs :

    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
    #include<stdio.h>
     
    int main(int argc, char *argv[])
    {
    	int A[50];
    	int *P1,*P2,AIDE,N;
     
    	printf("entrer la dimension du tableau a (max.50) : ");
    	scanf("%d",&N);
     
    	for(P1=A;P1<A+N;P1++)
    	{
    		printf("element %d : ",P1-A);
    		scanf("%d",P1);
    	}
     
    	for(P1=A;P1<A+N;P1++)
    		printf("%d", *P1);
    	printf("\n");
     
    	for(P1=A,P2=A+(N-1);P1<P2;P1++,P2--)
    	{
    		AIDE=*P1;
    	    *P1=*P2;
    	    *P2=AIDE;
    	}
     
    	printf("tableau resultat : \n");
    	for(P1=A;P1<A+N;P1++)
    		printf("%d", *P1);
    	printf("\n");
     
    	return 0;
    }

    Je ne comprends pas pourquoi on met P2=A+(N-1) dans la boucler de traitement et P1<A+N dans les autres boucles ?
    Le dernier élément de A est A+N ou A+(N-1) ? P2 doit bien pointer sur le dernier élément de A ?

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Dans les boucles, tu pourrais aussi mettre :
    C'est le strictement inférieur qui t'induit en erreur, on atteindra jamais cet élément (qui n'existe pas d'ailleurs).
    Autrement, le code est vraiment crade...
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    #include <stdio.h>
     
    static void dump(int const * tab, size_t size)
    {
       for(int const * next = tab; next < tab + size; next++)
          printf("%d ", *next);
     
       puts("");
    }
     
    static void swap(int * tab, size_t size)
    {
       for(int * next = tab, *last = tab + size - 1; next < last; next++, last--)
       {
          int tmp = *next;
          *next = *last;
          *last = tmp;
       }
    }
     
    static void fill(int * tab, size_t size)
    {
       for(int * next = tab; next < tab + size; next++)
       {
          int ret = 0;
     
          do
          {
             printf("element %td : ", next - tab); /* substracting pointers give a ptrdiff_t */
             fflush(stdout);
             ret = scanf("%d", next);
             scanf("%*[^\n]"), getchar();
          }
          while(ret != 1);
       }
    }
     
    int main(void)
    {
       size_t size = 0;
       int ret = 0;
     
       puts("entrer la taille du tableau (max.50) :");
       ret = scanf("%zu", &size);
       scanf("%*[^\n]"), getchar(); /* flush stdin */
     
       if(ret == 1  &&  size <= 50)
       {
          int tab[size]; /* VLA, checked size */
     
          fill(tab, size);
     
          dump(tab, size);
     
          swap(tab, size);
     
          puts("tableau resultat :");
     
          dump(tab, size);
       }
     
       return 0;
    }

  3. #3
    Membre éclairé Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Par défaut
    Compris pour le strictement inférieur

    Par contre pourquoi ton code est-il meilleur que le mien ?

  4. #4
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    Par contre pourquoi ton code est-il meilleur que le mien ?
    - code redondant
    - paramètres inutilisés
    - mauvais typage de variable
    - mauvais nommage de variable
    - mauvaise indentation
    - pas de gestion des erreurs
    - mauvais format dans printf
    - portée injustifiée des variables
    - utilisation injustifié d'une fonction d'entrée sortie formaté pour une sortie non formaté

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu as oublié le const dans la fonction dump().

    (et à ta place, j'aurais fais une fonction swap() séparée, mais bon, c'est du détail)

    Edit: Je pensais plus au swap() de deux éléments, plutôt que celui de tout le tableau. Mais bon, une fois la seconde fonction extraite, elle est assez petite pourqu'on n'ait pas à la modifier encore plus...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Tu as oublié le const dans la fonction dump().
    done.

    Citation Envoyé par Médinoc Voir le message
    (et à ta place, j'aurais fais une fonction swap() séparée, mais bon, c'est du détail)
    Je viens de l'intégrer, néanmoins, comme tu l'as dit, c'est du détail, en fait il y a plein de choses qui pourraient être modifié/amélioré, tout dépend des objectifs qu'on se fixe.
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VxiR2] Précédent et dernier élément d'un tableau
    Par thorgal1612 dans le forum Webi
    Réponses: 11
    Dernier message: 18/03/2013, 10h15
  2. Lecture et affichage du dernier élément d'un tableau
    Par wajdi ben hssine dans le forum LabVIEW
    Réponses: 1
    Dernier message: 07/07/2010, 20h50
  3. Réponses: 2
    Dernier message: 07/07/2010, 15h26
  4. Réponses: 2
    Dernier message: 20/07/2008, 10h32
  5. [Smarty] dernier élément d'un tableau
    Par wkd dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 05/10/2006, 13h07

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