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 :

Décrémentation de 4 à 1


Sujet :

C

  1. #1
    Membre éclairé Avatar de snyfir
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 246
    Par défaut Décrémentation de 4 à 1
    Bonjour,
    avec une boucle while pour afficher 1 2 3 4 1 2 3 4 etc
    je fais comme ceci
    i=(i++)%4+1;;

    Je voudrais faire de même pour afficher 4 3 2 1 4 3 2 1 etc
    le problème est que de metre i=(i--)%4+1; ne marche pas

    Si quelqu'un a une solution ?
    merci d'avance pour les réponsses.

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Tu incémentes i et tu affiches 4 - i.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    T'as pas plus tordu comme écriture?
    Je pense qu'il est plus simple de faire 0 1 2 3 0 1 2 3 et d'ajouter 1
    Ca donne ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i = 0;
    while (1)
    {
      int i_final;
      i = (i + 1) % 4;
      i_final = i + 1;
    }
    Pour l'inverse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i = 3;
    while (1)
    {
      int i_final;
      i = ((i + 4) - 1) % 4;
      i_final = i + 1;
    }
    Au fait, y a "4" qui se repete souvent, ça a peut etre un sens particulier, considère l'utilisation d'une constante symbolique

  4. #4
    Membre éclairé Avatar de snyfir
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 246
    Par défaut
    Bonjour,
    si je comprend bien il faut faire :
    i++;
    c=4-i;
    printf("%hd", c);

    Je pensse que j'ai mal compris car sa ne marche pas.

  5. #5
    Membre éclairé Avatar de snyfir
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 246
    Par défaut
    Citation Envoyé par Gruik Voir le message
    Salut,

    T'as pas plus tordu comme écriture?
    Je pense qu'il est plus simple de faire 0 1 2 3 0 1 2 3 et d'ajouter 1
    Ca donne ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i = 0;
    while (1)
    {
      int i_final;
      i = (i + 1) % 4;
      i_final = i + 1;
    }
    Pour l'inverse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i = 3;
    while (1)
    {
      int i_final;
      i = ((i + 4) - 1) % 4;
      i_final = i + 1;
    }
    Au fait, y a "4" qui se repete souvent, ça a peut etre un sens particulier, considère l'utilisation d'une constante symbolique
    Est'il possible de faire la même chose en utilisant une seul variable ?

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par snyfir Voir le message
    Est'il possible de faire la même chose en utilisant une seul variable ?
    C'est super dur !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    a := 4
    DO
     PRINT a
     DEC a
     IF a = 0
      a := 4
     END IF
    FOREVER

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par snyfir Voir le message
    Bonjour,
    avec une boucle while pour afficher 1 2 3 4 1 2 3 4 etc
    je fais comme ceci
    i=(i++)%4+1;;
    merci d'avance pour les réponsses.
    Déjà, je ne vois pas pourquoi avec ce code tu obtiens pour i la succession des valeurs 1 2 3 4 1 2 3 4 ...
    Donc, pour la séquence inverse, attendons .

  8. #8
    Membre éclairé Avatar de snyfir
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 246
    Par défaut
    Citation Envoyé par diogene Voir le message
    Déjà, je ne vois pas pourquoi avec ce code tu obtiens pour i la succession des valeurs 1 2 3 4 1 2 3 4 ...
    Donc, pour la séquence inverse, attendons .
    Essaye tu verra sa marche

  9. #9
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par diogene Voir le message
    Déjà, je ne vois pas pourquoi avec ce code tu obtiens pour i la succession des valeurs 1 2 3 4 1 2 3 4 ...
    Donc, pour la séquence inverse, attendons .
    Ben oui, i = (i++) % 4 + 1, c'est équivalent à i = ((i + 1) % 4) + 1. Enfin, je préfère l'algo d'Emmanuel plus lisible selon moi.

    EDIT: Suite aux remarques de diogene et sve@r, je réalise que j'ai écrit n'importe quoi. i étant post-incrémenté, i = (i++) % 4 + 1 est équivalent à i = (i % 4) + 1, mais présente un comportement indéfini. Mille excuses

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    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 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Ben oui, i = (i++) % 4 + 1, c'est équivalent à i = ((i + 1) % 4) + 1.
    Thierry
    Ben non ! Le "++" est post incrémenté et il ne sert à rien. On écrirait "i=i % 4 + 1" ce serait pareil...

    Citation Envoyé par Thierry Chappuis Voir le message
    Enfin, je préfère l'algo d'Emmanuel plus lisible selon moi.
    Certes mais je sens qu'on va partir dans une discussion géniale sur le comportement du ++ dans l'affectation et comment faire encore plus pourri comme code de décrémentation...
    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]

  11. #11
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    a un comportement indéfini

    n1124:
    6.5 Expressions
    ....
    2 Between the previous and next sequence point an object shall have its stored value
    modified at most once by the evaluation of an expression
    . Furthermore, the prior value
    shall be read only to determine the value to be stored.71)
    ....
    71) This paragraph renders undefined statement expressions such as
    i = ++i + 1;
    ...
    while allowing
    i = i + 1;
    ...;

  12. #12
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par snyfir Voir le message
    Essaye tu verra sa marche
    J'ai essayé avec deux compilateurs différents : avec l'un "ça marche", avec l'autre, "ça marche pas" ! Conclusion : ça marche pas

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    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 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Gruik Voir le message
    T'as pas plus tordu comme écriture?
    Oui, c'est vrai que ton écriture est beaucoup moins tordue (surtout les parenthèses pour être certain que le "i + 4" sera fait avant le "- 1")
    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]

  14. #14
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ben non ! Le "++" est post incrémenté et il ne sert à rien. On écrirait "i=i % 4 + 1" ce serait pareil...
    Tu as raison! Je n'étais pas très réveillé ce matin. En plus, j'ignorais que:

    présentait un comportement indéfini. Merci pour les précisions.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 83
    Par défaut
    Même si je comprend pas l'interêt du programme, j'ai fait un truc qui marche (dans mon idée de s'que tu veux faire).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
     
    void main() {
    	int a=1;
    	do {
    	int i=1;
    	for (i=1; i<=4; i++) {
    		printf("%d ",i);
    	}
    	}while (a==1);
    }
    Le truc, c'est que je ne sais pas si tu veux que se soit infini, ou si cela s'arrete au bout de trois fois.

  16. #16
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Jpa75 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <stdio.h>
     
    void main() {
    Ca part mal. Comportement indéterminé. Ton programme ne marche pas!

    A quoi sert ta variable a?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  17. #17
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut

    j'aimerais bien qu'on me dise avec quel compilateur c'est indéfini de faire
    i = ++i + 1;

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 83
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Ca part mal. Comportement indéterminé. Ton programme ne marche pas!

    A quoi sert ta variable a?

    Thierry
    Le variable a sert pour faire une boucle infini, pour que le 1 2 3 4 se répete indéfiniment.

    Par contre, pour ta première remarque, je n'en comprend pas très bien le sens.
    Est le #include <stdio.h> void main () qui ne va pas?
    Et mon programme marche sur mon compilateur, j'utilise Microsoft Visual C++ 6.0

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 83
    Par défaut
    Citation Envoyé par acx01b Voir le message
    salut

    j'aimerais bien qu'on me dise avec quel compilateur c'est indéfini de faire
    i = ++i + 1;
    ++i, est-ce équivalent à i++?

    Si oui, autant faire i=i+2 non?

  20. #20
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par acx01b Voir le message
    salut

    j'aimerais bien qu'on me dise avec quel compilateur c'est indéfini de faire
    i = ++i + 1;
    diogene a cité le passage de la norme qui rend ce comportement indéfini.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. Décrémentation à l'aide d'une boucle FOR-END
    Par fouad192007 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/06/2007, 17h54
  2. Problème TUpDown décrémentation
    Par OliverSleep dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/12/2006, 11h32
  3. Décrémentation de cellules
    Par amka dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 04/08/2006, 13h16
  4. incrémentation ,décrémentation
    Par BECHE dans le forum Langage
    Réponses: 6
    Dernier message: 07/12/2005, 00h03

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