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 :

Problème avec pré-décrémentation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 26
    Par défaut Problème avec pré-décrémentation
    Bonjour,

    Débutant en C, j'ai voulu développer un petit programme pour résoudre le problème de la tour de Hanoï.

    Celui-ci génère une liste des mouvements.

    Quand j'essaie ce code :

    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
    #include <stdio.h>
     
    void move(int, int, int, int);
     
    int main(void) {
    	move(5, 1, 3, 2);
    }
     
    void move(int n, int from, int to, int temp) {
    	if(n == 1) printf("%d -> %d\n", from, to);
    	else {
    		move(--n, from, temp, to);
    		printf("%d -> %d\n", from, to);
    		move(--n, temp, to, from);
    	}
    }
    J'obtiens une erreur de segmentation. J'ai trouvé le problème qui réside dans la pré-décrémentation de n dans les appels de fonctions. La correction suivante fonctionne donc :

    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
    #include <stdio.h>
     
    void move(int, int, int, int);
     
    int main(void) {
    	move(5, 1, 3, 2);
    }
     
    void move(int n, int from, int to, int temp) {
    	if(n == 1) printf("%d -> %d\n", from, to);
    	else {
    		move(n-1, from, temp, to);
    		printf("%d -> %d\n", from, to);
    		move(n-1, temp, to, from);
    	}
    }
    J'avoue ne pas comprendre pourquoi l'opérateur "--" devant la variable "n" ne fonctionne pas. De ce que j'ai appris, cet opérateur unaire est tout au-dessus niveau priorité des opérateurs et placé devant la variable c'est la nouvelle valeur qui devrait être utilisée dans l'appel de fonction.

    Merci d'avance à toute personne qui pourra m'éclairer sur ce sujet !

    Bonne journée,

    Sébastien

  2. #2
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Au premier appel de move, n vaut n-1, là c'est bon.
    au deuxième appel de move, n vaut n-2, car tu l'as décrémenté deux fois.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    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 860
    Billets dans le blog
    1
    Par défaut
    Pourquoi mon post, et celui de SebastienBE qui y a répondu, ont tous deux disparu ???
    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]

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 154
    Billets dans le blog
    4
    Par défaut
    il semble y avoir eu un rollback de la db...
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 26
    Par défaut
    Oui en effet j'avais répondu et marqué le post comme résolu... étrange.

    Merci donc à vous deux de m'avoir indiqué mon erreur, ça ne m'a pas frappé et j'ai persévéré dans l'erreur à chaque relecture.

    Comme je le disais dans mon post original, c'est ça la différence entre un débutant et un pro.

    Sébastien

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    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 860
    Billets dans le blog
    1
    Par défaut
    Effectivement. Je viens d'aller voir un autre fil que je regardais, c'est 3 ou 4 posts qui ont disparu.
    Mais ce n'est pas un rollback, un rollback c'est annuler une transaction non terminée. Là c'est carrément une restauration de sauvegarde...
    Enfin bon quel que soit le terme, l'important c'est qu'il y ait une explication.
    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]

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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