Problème en C (incrémententation de variable)
Résolu/Fermé
A voir également:
- Problème en C (incrémententation de variable)
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Windows 10
- Variable d'environnement TEMP ✓ - Forum Windows 7
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
3 mars 2009 à 18:55
3 mars 2009 à 18:55
Salut,
N++ > P est évalué en premier. On compare N à P soit 5>2 (qui retourne vraie) et on incrémente N (qui devient 6). Comme le premier membre du OU est vraie. Le résultat sera forcément vraie. Donc le deuxième membre n'est pas évalué. Donc à la fin de cette ligne N vaut 6, Q vaut 1 et P vaut 2.
Même principe. Sauf qu'ici le premier membre du OU est faux. Donc on évalue le deuxième membre, ce qui a pour conséquence de post incrémenté P. On compare P (2) à 3, qui renvoie logiquement 1 (car différent) et incrémenté P (donc P vaut 3).
D'où à la fin de l'instruction N vaut 6, Q vaut 1 et P vaut 3.
Ouf, la machine n'a pas dit de bêtises :-).
N = 5; P = 2; Q = N++ > P || P++ != 3;
N++ > P est évalué en premier. On compare N à P soit 5>2 (qui retourne vraie) et on incrémente N (qui devient 6). Comme le premier membre du OU est vraie. Le résultat sera forcément vraie. Donc le deuxième membre n'est pas évalué. Donc à la fin de cette ligne N vaut 6, Q vaut 1 et P vaut 2.
N = 5; P = 2; Q = N++ < P || P++ != 3;
Même principe. Sauf qu'ici le premier membre du OU est faux. Donc on évalue le deuxième membre, ce qui a pour conséquence de post incrémenté P. On compare P (2) à 3, qui renvoie logiquement 1 (car différent) et incrémenté P (donc P vaut 3).
D'où à la fin de l'instruction N vaut 6, Q vaut 1 et P vaut 3.
Ouf, la machine n'a pas dit de bêtises :-).
[o.o]REplay
Messages postés
357
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
20 juillet 2009
28
3 mars 2009 à 12:28
3 mars 2009 à 12:28
(N++ est incrémenté et est comparé à P qui vaut 2 à la base. N++ = 6, 6>2 renvoie ??)
||
(P est incrémenté d'abord, donc P = 3, et il est ensuite comparé à 3, 3!=3 -> faux, renvoie ?.)
Donc Q vaut? :)
||
(P est incrémenté d'abord, donc P = 3, et il est ensuite comparé à 3, 3!=3 -> faux, renvoie ?.)
Donc Q vaut? :)
Tout d'abord, merci de votre réponse rapide
Vous dites : (N++ est incrémenté et est comparé à P qui vaut 2 à la base. N++ = 6, 6>2 renvoie ??)
Je ne suis pas d'accord N est comparé à P (N = 5, 5>2 qui renvoie 1) puis seulement ensuite incrémenté N++ = 6
s'il y avait ++N > P je serais d'accord, mais ce n'est pas le cas.
Dans les deux cas l'expression booléenne renvoie 1
|| (ou logique)
Vous dites ensuite : (P est incrémenté d'abord, donc P = 3, et il est ensuite comparé à 3, 3!=3 -> faux, renvoie ?.)Donc Q vaut? :)
Je ne suis pas d'accord P est comparé à 3 (P = 2, 2 =!3 qui renvoie 1) puis seulement ensuite incrémenté P++ = 3
1 || 1 renvoie 1 (de toute façon 1 || 0 renvoie 1 aussi pour Q)
Ce qui est inexplicable c'est pourquoi à la première ligne P vaut 2 après l'exécution du programme que j'ai fait tourner avec code:: blocks IDE sous Mandriva , alors qu'a la deuxième ligne il vaut 3 alors que les deux expression se ressemblent beaucoup!
Vous dites : (N++ est incrémenté et est comparé à P qui vaut 2 à la base. N++ = 6, 6>2 renvoie ??)
Je ne suis pas d'accord N est comparé à P (N = 5, 5>2 qui renvoie 1) puis seulement ensuite incrémenté N++ = 6
s'il y avait ++N > P je serais d'accord, mais ce n'est pas le cas.
Dans les deux cas l'expression booléenne renvoie 1
|| (ou logique)
Vous dites ensuite : (P est incrémenté d'abord, donc P = 3, et il est ensuite comparé à 3, 3!=3 -> faux, renvoie ?.)Donc Q vaut? :)
Je ne suis pas d'accord P est comparé à 3 (P = 2, 2 =!3 qui renvoie 1) puis seulement ensuite incrémenté P++ = 3
1 || 1 renvoie 1 (de toute façon 1 || 0 renvoie 1 aussi pour Q)
Ce qui est inexplicable c'est pourquoi à la première ligne P vaut 2 après l'exécution du programme que j'ai fait tourner avec code:: blocks IDE sous Mandriva , alors qu'a la deuxième ligne il vaut 3 alors que les deux expression se ressemblent beaucoup!
[o.o]REplay
Messages postés
357
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
20 juillet 2009
28
3 mars 2009 à 19:34
3 mars 2009 à 19:34
Il a entièrement raison ^^
dans (x || y), si x vrai, alors y n'est pas vérifié.
De même dans (x & y), si x faux, y ne sera pas vérifié.
Et désolé pour mon incompréhension sur le N++ et le ++N, tu avais raison :)
dans (x || y), si x vrai, alors y n'est pas vérifié.
De même dans (x & y), si x faux, y ne sera pas vérifié.
Et désolé pour mon incompréhension sur le N++ et le ++N, tu avais raison :)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
3 mars 2009 à 19:58
3 mars 2009 à 19:58
De même dans (x & y), si x faux, y ne sera pas vérifié.
Non pas avec le simple &. Avec && par contre, oui, si le premier membre est faux alors le deuxième ne sera pas évalué.
Non pas avec le simple &. Avec && par contre, oui, si le premier membre est faux alors le deuxième ne sera pas évalué.
gigisan
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
3 mars 2009 à 21:18
3 mars 2009 à 21:18
fiddy
Merci beaucoup pour ton explication très simple et très claire!
En tout cas me voila réconcilié avec mon mon compilateur :)
Encore merci à tous les deux : vos deux contributions m'encouragent à m'avancer plus avant dans la jungle de C
Gilbert BONNET
Merci beaucoup pour ton explication très simple et très claire!
En tout cas me voila réconcilié avec mon mon compilateur :)
Encore merci à tous les deux : vos deux contributions m'encouragent à m'avancer plus avant dans la jungle de C
Gilbert BONNET
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
loupius
3 mars 2009 à 22:48
3 mars 2009 à 22:48
J'ai toujours considéré que c'est lui qui avais toujours raison
Sauf quand il ne respecte pas la norme. Et ça arrive :d.
Sauf quand il ne respecte pas la norme. Et ça arrive :d.
loupius
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
4 mars 2009 à 01:07
4 mars 2009 à 01:07
Oui, c'est vrai si on cherche la limite; mais en général, avant d'accuser le compilateur, je remets d'abord en cause mes lignes de code.
Bonne nuit.
Bonne nuit.