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 :

faire un décalage à droite et puis un décalage à gauche dans un vecteur


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 44
    Par défaut faire un décalage à droite et puis un décalage à gauche dans un vecteur
    Bonjour,

    j'ai un vecteur exemple 1 2 3 4 5 et je le transformer en 5 1 2 3 4
    ç'est à dire faire un décalage vers la droite(rotation)

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par exercicec Voir le message
    Bonjour,

    j'ai un vecteur exemple 1 2 3 4 5 et je le transformer en 5 1 2 3 4
    ç'est à dire faire un décalage vers la droite
    j'ai fait les deux mais j'arrive plus à comprendre le décalage vers la droite que j'ai fait et qui marche.
    et la ligne que je comprends plus (décalage à droite) ç'est
    va[ i + 1] = va[ i + 1]; // ç'est cette ligne que je comprends plus
    Bonjour

    Je crois que personne ne la comprend non plus. Typiquement, tu as écrit "mettre dans la case [i+1] la valeur qu'il y a dans la case[i+1]" ce qui est totalement absurde.

    Accessoirement ça m'étonne que ça fonctionne (ou alors ça va pas durer). Voici les erreurs qui m'ont sauté aux yeux:
    • on ne flushe pas stdin (le comportement n'est pas garanti)
    • les cases d'un tableau vont de 0 à "n-1" or toi tu manipules les cases de 1 à n.


    Ps: pour ton code,
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 44
    Par défaut decalage à droite résolu ??
    Bonjour,

    Je voudrais savoir si ce code pour le décalage à droite (rotation) est bon ou pas

    Merci de me dire quoi.

    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
    64
    65
    66
    67
    68
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
       int va[50];// vecteur
       int i = 0;//compteur
       int nbel = 0;//nombre de cases du vecteur
       int temp = 0;//valeur temporaire pour stocker les nombres
     
     
        printf("Entrez le nombre de cases utilisees :  ");
        fflush(stdin);
        scanf("%d", &nbel);
        for( i = 0; i < nbel; i++)
        {
            printf("\nEntrez la valeur de la case %d : \t", i);
            fflush(stdin);
            scanf("%d", &va[i]);
        }
     
         for( i = 0; i < nbel; i++)
         {
              printf("%d\t",va[i]);
         }
        printf("\n");
     
        //decalage vers la gauche
        /*temp = va[0];
        for( i = 0; i < nbel ;i++)
        {
            va[i] = va[i + 1];
        }
            va[nbel-1] = temp;
        for( i = 0; i < nbel;i++)
        {
            printf("%d\t", va[i]);
        }
    */
     
     
    //decalage vers la droite
         temp = va[nbel-1];
     
        for( i =  nbel - 1; i > 0; i--)
         {
           va[ i ] = va[ i - 1 ];
     
     
         }
            va[0] = temp;
     
     
     
        for( i = 0; i < nbel ; i++)
        {
     
        printf("%d\t", va[i]);
     
     
        }
     
            return 0;
     
     
     
    }

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Punaise, 4 posts pour dire la même chose, avec en plus une écriture en majuscules (synonyme de hurlements) et du "urgent" de partout ? T'as jamais été voir la netiquette ? Ou au minimum les règles du forum ???

    Donc
    1. tu as un bouton "modifier" qui te permet de modifier les posts (et même les supprimer ce qui sera d'ailleurs un excellente idée)
    2. use your brain => i <= (n-1) équivaut à i < n...
    3. et euh pour ton décalage (ou plutôt rotation) à droite je ne comprends même pas que tu n'y arrives pas vu que tu as réussi la rotation à gauche. Mathématiquement il n'y a aucune différence entre "gauche" et "droite" sauf que d'un coté c'est "-" et que de l'autre c'est "+". Donc tu prends un papier, tu écris ton tableau et tu pointes chaque case de ton tableau en te demandant "vu que j'ai réussi à la décaler à gauche pourquoi je n'arrive pas à la décaler à droite"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 44
    Par défaut rotation résulu ???

    j'ai fait les modifications et je voudrais savoir si le code est mieux

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par exercicec Voir le message
    j'ai fait les modifications et je voudrais savoir si le code est mieux
    Ben il fonctionne donc si ça te suffit...

    Maintenant si tu veux faire plus "pros" (ou simplement faire moins "j'en fais dans tous les sens sans réfléchir") alors
    1. tu dédies l'affichage à une fonction ce qui te permettra de l'appeler quand tu veux sans avoir à retaper son code
    2. eventuellement tu mets aussi le décalage dans une fonction en lui rajoutant la possibilité de décaler de "n" (et non plus de "1")


    Et si c'est ton prof qui t'a conseillé les fflush(stdin) alors tu peux les laisser (pour les exos ça va) mais te faudra garder à l'esprit que si tu veux continuer plus profondément dans le C alors tôt ou tard il te faudra abandonner cette instruction (et mieux vaut tôt que tard) car elle t'amènera plus d'ennuis que de solutions et te faudra alors apprendre à gérer ton clavier (ce qui n'est d'ailleurs pas super compliqué en réalité).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 735
    Par défaut
    Bonjour.

    J'ai envie de dire, pourquoi tu te prends la tête comme ça ?
    Le vecteur n'est pas le meilleur conteneur pour faire ce genre de manipulation, puisque toutes les données sont stockées côte à côte dans la mémoire, et les décaler aura un coût.
    Un conteneur comme std::dequeue sera plus adapté, puisqu'il suffit de prendre le dernier élément std::dequeue::back(), le supprimer std::dequeue::pop_back(), puis l'ajouter au début std::dequeue::push_front().

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 44
    Par défaut réponse
    Citation Envoyé par Daïmanu Voir le message
    Bonjour.

    J'ai envie de dire, pourquoi tu te prends la tête comme ça ?
    Le vecteur n'est pas le meilleur conteneur pour faire ce genre de manipulation, puisque toutes les données sont stockées côte à côte dans la mémoire, et les décaler aura un coût.
    Un conteneur comme std::dequeue sera plus adapté, puisqu'il suffit de prendre le dernier élément std::dequeue::back(), le supprimer std::dequeue::pop_back(), puis l'ajouter au début std::dequeue::push_front().


    ç'est un exercice et on est en novembre? La rentrée académique ç'est en septembre? Donc avec un compteur i que j'incrémente i++ je me rends compte qu'on a fait que deux mois de langage c à l'école et qu'on a pas encore vu les fonction ni les tableaux à plusieurs dimensions
    cqfd

  9. #9
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Citation Envoyé par Daïmanu Voir le message
    Bonjour.

    J'ai envie de dire, pourquoi tu te prends la tête comme ça ?
    Le vecteur n'est pas le meilleur conteneur pour faire ce genre de manipulation, puisque toutes les données sont stockées côte à côte dans la mémoire, et les décaler aura un coût.
    Un conteneur comme std::dequeue sera plus adapté, puisqu'il suffit de prendre le dernier élément std::dequeue::back(), le supprimer std::dequeue::pop_back(), puis l'ajouter au début std::dequeue::push_front().
    Dommage, cette réponse serait bonne en C++, mais ici, c'est du C.

  10. #10
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 735
    Par défaut
    Je pensais qu'il s’agissait de C++, j'ai été trompé par le terme vecteur, mes excuses.

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

Discussions similaires

  1. Problème de décalage à droite d'un tableau
    Par vergezzois dans le forum Débuter
    Réponses: 4
    Dernier message: 02/11/2011, 08h54
  2. Mes pages bougent, décalage droite/gauche
    Par kerna dans le forum Débuter
    Réponses: 10
    Dernier message: 14/04/2009, 10h28
  3. Décalage à droite
    Par doomtn dans le forum C
    Réponses: 13
    Dernier message: 28/01/2008, 05h48
  4. Réponses: 6
    Dernier message: 21/04/2007, 20h08
  5. [cgi/DOM] Faire d'abord du DOM puis du cgi
    Par chpog dans le forum Web
    Réponses: 2
    Dernier message: 11/07/2005, 17h32

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