Problème en C (incrémententation de variable)
Résolu
gigisan
-
loupius -
loupius -
Bonjour,
Une question concernant le petit programme en langage C qui suit
#include <iostream>
#include<stdio.h>
using namespace std;
int main()
{
int N, P, Q;
N = 5; P = 2;
Q = N++ > P || P++ != 3;
printf ("C : N=%d P=%d Q=%d\n", N, P, Q);
N = 5; P = 2;
Q = N++ < P || P++ != 3;
printf ("D : N=%d P=%d Q=%d\n", N, P, Q);
return 0;
}
affiche à l'exécution:
C: N=6 P=2 Q=1
D: N=6 P=3 Q=1
Je ne comprends pas ce qui se passe pour la variable P à la 1ère ligne:
P++ != 3 compare P = 2 à 3 et retourne 1(vrai car 2 != 3) puis incrémente P qui devrait prendre la valeur 3 comme à la deuxième ligne
Si quelqu'un veut bien éclairer ma lanterne je le remercie d'avance
Vous avez compris bien sur que je débute en C.
Gilbert BONNET
Une question concernant le petit programme en langage C qui suit
#include <iostream>
#include<stdio.h>
using namespace std;
int main()
{
int N, P, Q;
N = 5; P = 2;
Q = N++ > P || P++ != 3;
printf ("C : N=%d P=%d Q=%d\n", N, P, Q);
N = 5; P = 2;
Q = N++ < P || P++ != 3;
printf ("D : N=%d P=%d Q=%d\n", N, P, Q);
return 0;
}
affiche à l'exécution:
C: N=6 P=2 Q=1
D: N=6 P=3 Q=1
Je ne comprends pas ce qui se passe pour la variable P à la 1ère ligne:
P++ != 3 compare P = 2 à 3 et retourne 1(vrai car 2 != 3) puis incrémente P qui devrait prendre la valeur 3 comme à la deuxième ligne
Si quelqu'un veut bien éclairer ma lanterne je le remercie d'avance
Vous avez compris bien sur que je débute en C.
Gilbert BONNET
A voir également:
- Problème en C (incrémententation de variable)
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp - Forum Microsoft Office
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Vba range avec variable ✓ - Forum VB / VBA
- Vérifiez la variable d'environnement TEMP. QUE FAIRE ????? ✓ - Forum Microsoft Office
- 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
3 réponses
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 :-).
(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!
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 :)