Demande d'explication

Résolu/Fermé
jeancrien1121 Messages postés 16 Date d'inscription vendredi 21 juin 2013 Statut Membre Dernière intervention 14 septembre 2013 - Modifié par jeancrien1121 le 21/06/2013 à 02:40
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 - 22 juin 2013 à 22:45
Bonjour à tous, j'ai examen en principe et méthode de programmation lundi et j'ai encore pas mal de lacune et c'est pour cela que je viens solliciter votre aide.
Petite exemple je ne comprend pas pourquoi dans ce programme :
int a = 0, x = 11;
while (x--)
printf("A = %d\n",a++);
printf("X =%d\n",x++);

a la fin de de cette boucle X vaudra -1 et A vaudra 10
A mon sens ce serai une boucle infini étant donner qu'il diminue x mais le rajoute en gros ça valeur serait 10 - 11 - 10 - 11 ensuite pourquoi x s'arrête a -1 à 0 j'aurai compris mais a -1 je me dis qui devrait continuer et la encore boucle infini :s
Alors voila, je vous remercie d'avance pour le temps que vous me consacrerez :)

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
21 juin 2013 à 07:56
Attention, il n'y a pas d'accolades apres le while. Seule la 1ere instruction suivante fait donc partie du while.
De plus afficher x++ revient à afficher x et à faire x=x+1.
Avec ces deux éléments tu devrais comprendre.
0
jeancrien1121 Messages postés 16 Date d'inscription vendredi 21 juin 2013 Statut Membre Dernière intervention 14 septembre 2013
21 juin 2013 à 17:14
Je vous remercie pour vos réponse cela m'aide énormément :D mais comment savoir quand la boucle while ce finit ? j'ai noter dans mon cours boucle while tant que different de 0 = vrai et continue mais la a mon sens il devrait s'arrêter a 0 :s ou me suis tromper ou je comprend pas grand chose :D
0
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
Modifié par [Dal] le 21/06/2013 à 18:46
Salut Jean,

Lis attentivement la réponse de Char Snipeur.

Voilà une illustration.

Compare le résultat de :

#include <stdio.h>

int main(void)
{
    int a = 0, x = 11;
    while (x--)
        printf("A = %d et X = %d\n", a++, x);
    printf("after the while loop X = %d\n", x);
    printf("printing x++ = %d\n", x++);
    printf("in fact now X = %d\n", x);

    return 0;
}

et de

#include <stdio.h>

int main(void)
{
    int a = 0, x = 11;
    while (--x)
        printf("A = %d et X = %d\n", a++, x);
    printf("after the while loop X = %d\n", x);
    printf("printing x++ = %d\n", x++);
    printf("in fact now X = %d\n", x);

    return 0;
}


et tu comprendras ce qu'il explique et pourquoi il y a une décrémentation après évaluation (pareil pour ce qui se passe avec le printf sur x++).

Dans les deux cas, while s'arrête quand x est évalué à 0. Cependant, selon que tu écrives --x ou x--, la décrémentation de x se produira respectivement avant ou après l'évaluation de x.

Dans la vraie vie, ce type de style d'écriture de code est à fuir et à proscrire, tellement il est cryptique.


Dal
0
jeancrien1121 Messages postés 16 Date d'inscription vendredi 21 juin 2013 Statut Membre Dernière intervention 14 septembre 2013
Modifié par jeancrien1121 le 22/06/2013 à 02:44
Merci énormément pour vos réponse j'ai fini par comprendre la petite nuance --' :p
Enfin je croit :p
Dans le premier cas il va décrémenter après avoir vérifier si la condition est vrai et meme si elle est fausse il décrémentera mais n'effectuera pas l'action et dans le deuxième cas il décrémentera avant de vérifier la condition.
en tous cas merci a vous tous :)
0
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
22 juin 2013 à 02:59
salut

ajoutez entre les parenthèse une double condition comme while ( x<11 & x=0 ) par exemple et la boucle va arrêter si x vaut 0 ou ajoutez une condition IF instruction et voilà

je suis pas professionnel mais le code est mal structuré .
0
jeancrien1121 Messages postés 16 Date d'inscription vendredi 21 juin 2013 Statut Membre Dernière intervention 14 septembre 2013
22 juin 2013 à 03:36
Enfet kariroxav, mon prof a donnée un exemple d'examen en classe ou il disait que la première question il y aurai le même genre a l examen avec des valeur différente et la question est qu'elles seront les dernière valeurs affichées pour a et x sur le bout de code que j'ai déjà inscrit plus haut. Croit moi je ne coderai pas comme ça j'y voit pas l'intérêt je suis quelqu'un qui fais tous pour me faciliter la vie en générale :p
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
21 juin 2013 à 08:32
Je compléte un peu quand même. Il y a la pré incrémantation (respectivement décrémentzation) ++x et la post-incrémanentation (respectivement décrementation) x++.
La différence, c'est que dans le premier cas tu effectues l'opération sur la variable avant l'instruction, dans le deuxième cas après l'instruction.
Il ne faut pas abusé de ces opérateurs, car ils peuvent donner un source assze illisible.
0