Amusent nous à incrémenter, décrémenter quand penser vous ?
Résolu/Fermé
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
-
Modifié par sambia39 le 30/01/2014 à 16:05
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 15 févr. 2014 à 20:43
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 15 févr. 2014 à 20:43
A voir également:
- Amusent nous à incrémenter, décrémenter quand penser vous ?
- Incrémenter numéro de semaine excel ✓ - Forum Excel
- Incrémenter une série excel ne fonctionne pas ✓ - Forum Excel
- Incrémenter jours ouvrés excel ✓ - Forum Bureautique
- Incrémentation automatique ne fonctionne pas - Forum Excel
- Incrémenter N° de semaine chaque lundi ✓ - Forum Excel
3 réponses
armasousou
Messages postés
1267
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
9 févr. 2014 à 18:15
9 févr. 2014 à 18:15
Ca a toujours été (enfin depuis l'invention du C), rien de choquant ...
avec "i++" on utilise la valeur d'i PUIS on l'incremente, avec "++i", on incremente i PUIS on utilise la (nouvelle) valeur d'i.
avec "i++" on utilise la valeur d'i PUIS on l'incremente, avec "++i", on incremente i PUIS on utilise la (nouvelle) valeur d'i.
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
10 févr. 2014 à 01:16
10 févr. 2014 à 01:16
Bonsoir,
Merci de votre réponse, mais vous ne m'appreniez rien, et ça ne répond pas du tout à ma question, ma question est : "est-il possible à une incrémentation de fausser un calcul intermédiaire pendant l'opération d'incrémentation (préfixé et suffixé) c'est pour cela que j'ai mis cet exemple et plus précisément pour montré qu'il y a une subtilité entre les valeurs de retour des incrémentations selon leur formes
autres exemple
Et me demander si cette subtilité minime peut erroné un calcul entre 2 incrémentations
Merci de votre réponse, mais vous ne m'appreniez rien, et ça ne répond pas du tout à ma question, ma question est : "est-il possible à une incrémentation de fausser un calcul intermédiaire pendant l'opération d'incrémentation (préfixé et suffixé) c'est pour cela que j'ai mis cet exemple et plus précisément pour montré qu'il y a une subtilité entre les valeurs de retour des incrémentations selon leur formes
i++; /* i=(i+1) donc valeur avant incrémentation */ ++i; /* i=(1+i) donc valeur après incrémentation */
autres exemple
a=i++; /* donc a=i puis a=i+1; */ a=++i; /* donc a=1+i; puis a=i;*/
Et me demander si cette subtilité minime peut erroné un calcul entre 2 incrémentations
Utilisateur anonyme
Modifié par le père. le 10/02/2014 à 08:51
Modifié par le père. le 10/02/2014 à 08:51
Bonjour
Je ne suis pas sûr (un spécialiste pour confirmer ?) que l'ordre d'évaluation des opérantes soit spécifié dans le langage.
Dans ce cas, si on utilise plusieurs fois une variable pré ou post incrémentée dans une même expression, le résultat peut être indéterminé :
i
Si le diviseur est évalué avant le dividende, on va calculer 5/6 et afficher 0 ; si le dividende est évalué avant le diviseur, on va calculer 6/5 et afficher 1.
Mais faut être tordu pour jouer à ça...
Je ne suis pas sûr (un spécialiste pour confirmer ?) que l'ordre d'évaluation des opérantes soit spécifié dans le langage.
Dans ce cas, si on utilise plusieurs fois une variable pré ou post incrémentée dans une même expression, le résultat peut être indéterminé :
i
nt i=5; std::cout<<(i++) / (i++)<<std::endl;
Si le diviseur est évalué avant le dividende, on va calculer 5/6 et afficher 0 ; si le dividende est évalué avant le diviseur, on va calculer 6/5 et afficher 1.
Mais faut être tordu pour jouer à ça...
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
10 févr. 2014 à 17:43
10 févr. 2014 à 17:43
Justement je suis assez tordus pour essayer cela, mais en réalité cela dépend de la priorité de l'opérateur, mais également la priorité entre les opérateurs et le sens d'évaluation des opérateurs, qui ce fait de la gauche vers la droite sauf cas des priorités des opérateurs 3(préfixe), 15(conditionnel ternaire ? :) et 16(opérateur d'affectation = *= /= %= etc.) qui sont de la droite vers la gauche en d'autres termes, c'est le sens d'utilisation des opérateurs qui influe sur le résultat exemple
ainsi si on écris
et que si c'est l'addition qui est prioritaire alors en auras 13*8 = 104 mais si c'est le contraire ont obtiendrais 10+24=34, alors oui le résultat demandé peut-être fausser et c'est rigolo imaginant si un tordu comme moi joue avec des actionneurs sur l'option des puissances, exemple pour réguler une pression ou température à titre exemple en peut très bien varier le style d'incrementation ou décrémentation et ainsi déboussoler l'équipement mais loin de moi cette idée c'est un exemple lol
ainsi si on écris
int x=10+3*8;
et que si c'est l'addition qui est prioritaire alors en auras 13*8 = 104 mais si c'est le contraire ont obtiendrais 10+24=34, alors oui le résultat demandé peut-être fausser et c'est rigolo imaginant si un tordu comme moi joue avec des actionneurs sur l'option des puissances, exemple pour réguler une pression ou température à titre exemple en peut très bien varier le style d'incrementation ou décrémentation et ainsi déboussoler l'équipement mais loin de moi cette idée c'est un exemple lol
Les priorités d'évaluation des opérateurs sont un autre problème. Ils suivent des règles parfaitement déterminées par le langage, il n'y a aucune incertitude là-dessus. Ton histoire de 10+3*8 ne peut tromper que les grands débutants en C.
Il ne faut pas confondre les indéterminations vraiment dues au langage avec celles dues à l'ignorance du programmeur.
L'ordre d'évaluation des opérandes n'est pas spécifié dans le langage, du moins pas dans le C de base défini par Ritchie . Regarde le paragraphe 7 :
http://cm.bell-labs.com/who/dmr/cman.pdf. Donc le résultat de l'exemple que je donnais n'est pas prévisible et ce n'est pas une question d'ignorance du programmeur, contrairement à ton 10+3*8.
Tu peux toujours essayer (i++) / (i++) dans un programme par curiosité, mais tu n'as aucune garantie que la même ligne recopiée ailleurs dans ton programme donnera le même résultat. Celui qui écrit ce genre d'expression autrement que "pour voir" n'est pas un tordu ni un rigolo, c'est un incompétent.
Il ne faut pas confondre les indéterminations vraiment dues au langage avec celles dues à l'ignorance du programmeur.
L'ordre d'évaluation des opérandes n'est pas spécifié dans le langage, du moins pas dans le C de base défini par Ritchie . Regarde le paragraphe 7 :
http://cm.bell-labs.com/who/dmr/cman.pdf. Donc le résultat de l'exemple que je donnais n'est pas prévisible et ce n'est pas une question d'ignorance du programmeur, contrairement à ton 10+3*8.
Tu peux toujours essayer (i++) / (i++) dans un programme par curiosité, mais tu n'as aucune garantie que la même ligne recopiée ailleurs dans ton programme donnera le même résultat. Celui qui écrit ce genre d'expression autrement que "pour voir" n'est pas un tordu ni un rigolo, c'est un incompétent.
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
12 févr. 2014 à 23:34
12 févr. 2014 à 23:34
Bonsoir
@le père Ton histoire de 10+3*8 ne peut tromper que les grands débutants en C.
L'exemple démontre juste l'ordre prioritaire des opérateurs qui peut donner des résultats no souhaités. À aucun moment j'ai parlé de calcul indéterminer, mais plutôt résultat erroné d'une opération entre deux incrémentations.
@le père Si le diviseur est évalué avant le dividende, on va calculer 5/6 et afficher 0 ; si le dividende est évalué avant le diviseur, on va calculer 6/5 et afficher 1.
Ton exemple revient sur l'ordre d'évaluation qui se fait soit de la gauche vers la droite ou de la droite vers la gauche ce qui résume un peu mon exemple de l'ordre des évaluations des opérateurs
x=10+3*8; x=34 ou x=104
Rappel@sambia39 cela dépend de la priorité de l'opérateur, mais également la priorité entre les opérateurs et le sens d'évaluation des opérateurs
@le père Tu peux toujours essayer (i++) / (i++) dans un programme par curiosité, mais tu n'as aucune garantie que la même ligne recopiée ailleurs dans ton programme donnera le même résultat
En effet ça donne pas le même résultat à cause de plusieurs facteurs cas de ton exemple l'ordre dévaluation ou sens d'évaluation de l'opérateur
@le père genre d'expression autrement que "pour voir" n'est pas un tordu ni un rigolo, c'est un incompétent.
vouloir comprendre les choses et savoir comment ça marche, ne fais pas de nous des incompétents, mais des curieux recherchant la compréhension des choses, et savoir comment ça marche (: D) (d'ailleurs le sens du mot curiosité veut dire envie de voir, d'apprendre de nouvelles choses).
celui qui ni la curiosité est dans l'incompétence totale de découvrir et comprendre certaines choses, d'ailleurs la science après tout, qu'est-elle, sinon une longue et systématique curiosité.
la curiosité est une condition essentielle du progrès.
@le père Ton histoire de 10+3*8 ne peut tromper que les grands débutants en C.
L'exemple démontre juste l'ordre prioritaire des opérateurs qui peut donner des résultats no souhaités. À aucun moment j'ai parlé de calcul indéterminer, mais plutôt résultat erroné d'une opération entre deux incrémentations.
@le père Si le diviseur est évalué avant le dividende, on va calculer 5/6 et afficher 0 ; si le dividende est évalué avant le diviseur, on va calculer 6/5 et afficher 1.
Ton exemple revient sur l'ordre d'évaluation qui se fait soit de la gauche vers la droite ou de la droite vers la gauche ce qui résume un peu mon exemple de l'ordre des évaluations des opérateurs
x=10+3*8; x=34 ou x=104
Rappel@sambia39 cela dépend de la priorité de l'opérateur, mais également la priorité entre les opérateurs et le sens d'évaluation des opérateurs
@le père Tu peux toujours essayer (i++) / (i++) dans un programme par curiosité, mais tu n'as aucune garantie que la même ligne recopiée ailleurs dans ton programme donnera le même résultat
En effet ça donne pas le même résultat à cause de plusieurs facteurs cas de ton exemple l'ordre dévaluation ou sens d'évaluation de l'opérateur
@le père genre d'expression autrement que "pour voir" n'est pas un tordu ni un rigolo, c'est un incompétent.
vouloir comprendre les choses et savoir comment ça marche, ne fais pas de nous des incompétents, mais des curieux recherchant la compréhension des choses, et savoir comment ça marche (: D) (d'ailleurs le sens du mot curiosité veut dire envie de voir, d'apprendre de nouvelles choses).
celui qui ni la curiosité est dans l'incompétence totale de découvrir et comprendre certaines choses, d'ailleurs la science après tout, qu'est-elle, sinon une longue et systématique curiosité.
la curiosité est une condition essentielle du progrès.
j'ai parlé de calcul indéterminer Je n'ai pas dit non plus que tu en avais parlé.Je disais seulement que l'évaluation de 10+3*8 en C ne comporte aucune ambiguïté qui puisse de près ou de loin s'apparenter à un résultat erroné, alors que le résultat de i++/i++ n'est pas prédictible.
Ton exemple revient sur l'ordre d'évaluation... ce qui résume un peu mon exemple D'abord, je trouve rigolo que tu trouves que mon exemple résume le tien, alors que tu as donné le tien après moi.Ensuite, nos exemples n'ont aucun rapport : l'évaluation du tien est parfaitement claire et définie par les règles du C, le mien est indéterminé. Je te rappelle qu'au départ, c'est toi qui demandais un exemple de résultat faussé et, comme tu ne définissais pas cette notion (qu'est-ce que c'est qu'un résultat faussé ?) je t'ai proposé ce qui à mon avis pouvait y ressembler.
vouloir comprendre les choses et savoir comment ça marche, ne fais pas de nous des incompétents D'abord, j'avais bien précisé que je ne parlais d'incompétence que dans le cas où faisait ça pour autre chose que "pour voir", car toi tu parlais de pilotage de processus physique. Et je maintiens ce point de vue. Mais surtout, regarder le résultat d'une expression indéterminée ne t'apprendra pas comment quoi que ce soit marche. Ou à la rigueur comment se comporte un compilateur particulier dans un cas particulier, mais c'est une connaissance tout à fait stérile. Pour apprendre quelque chose, il vaut mieux lire les spécifications du langage (voir le lien que je t'ai donné) que d'essayer des expressions au hasard, simplement parce qu'on les trouve jolies ou bizarres.
Ton exemple revient sur l'ordre d'évaluation... ce qui résume un peu mon exemple D'abord, je trouve rigolo que tu trouves que mon exemple résume le tien, alors que tu as donné le tien après moi.Ensuite, nos exemples n'ont aucun rapport : l'évaluation du tien est parfaitement claire et définie par les règles du C, le mien est indéterminé. Je te rappelle qu'au départ, c'est toi qui demandais un exemple de résultat faussé et, comme tu ne définissais pas cette notion (qu'est-ce que c'est qu'un résultat faussé ?) je t'ai proposé ce qui à mon avis pouvait y ressembler.
vouloir comprendre les choses et savoir comment ça marche, ne fais pas de nous des incompétents D'abord, j'avais bien précisé que je ne parlais d'incompétence que dans le cas où faisait ça pour autre chose que "pour voir", car toi tu parlais de pilotage de processus physique. Et je maintiens ce point de vue. Mais surtout, regarder le résultat d'une expression indéterminée ne t'apprendra pas comment quoi que ce soit marche. Ou à la rigueur comment se comporte un compilateur particulier dans un cas particulier, mais c'est une connaissance tout à fait stérile. Pour apprendre quelque chose, il vaut mieux lire les spécifications du langage (voir le lien que je t'ai donné) que d'essayer des expressions au hasard, simplement parce qu'on les trouve jolies ou bizarres.
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
15 févr. 2014 à 20:43
15 févr. 2014 à 20:43
bonsoir après re-lecture décidément, on n'est pas sur la même fréquence et encore moins précis de ma part dans les explications ceci dit, tu parles de calcul indéterminer avec un exemple précis et moi de calcul erroné prénom en compte l'ordre des évaluations des opérateurs.
Ceci étant que moi j'exposais en problème à la quel je trouve assez tordu et d'ailleurs pour le trouver j'ai dû faire un truc tordu(incompétent) et j'ai trouvé d'où ça venait. Et l'exemple du processus est bien réel, parce que juste avant qu'un intérimaire quitte son poste celui-ci a mis à jour une application interne et a procédé au déploiement sachant très bien que l'application pilote des sous-stations de réfrigérations, histoire de modifier la température et faire chier son monde (faute due à une promesse d'embauche à la fin de son contrat qui n'a pas été reconduit) bref le bon moyen.
Et ça il l'a disséminé partout dans le code(j'ai du faire la même manip pour comprendre d'où je suis assez tordu pour le faire).et également, des erreurs de ma part à vouloir mal comprendre ce que tu as exposé au deuxième poste MAIS AUSSI LE FAIT DE D' ECRIRE LE MOT IMCOMPETENCE grrr, mais bon ce n'est pas grave, l'erreur vient de moi j'ai mal compris. je m'en excuse (mais le mots incompétents grrrrrr mal passé Lol), mais merci a toi de tes remarque je laisse en résolus et si d'autres personnes en des commentaires à propos faite nous part de ça à bientôt
Ceci étant que moi j'exposais en problème à la quel je trouve assez tordu et d'ailleurs pour le trouver j'ai dû faire un truc tordu(incompétent) et j'ai trouvé d'où ça venait. Et l'exemple du processus est bien réel, parce que juste avant qu'un intérimaire quitte son poste celui-ci a mis à jour une application interne et a procédé au déploiement sachant très bien que l'application pilote des sous-stations de réfrigérations, histoire de modifier la température et faire chier son monde (faute due à une promesse d'embauche à la fin de son contrat qui n'a pas été reconduit) bref le bon moyen.
pvar=&pVar;
++pvar*0;
pVar+=1;
pvar++;
++pVar;
--pvar;
Et ça il l'a disséminé partout dans le code(j'ai du faire la même manip pour comprendre d'où je suis assez tordu pour le faire).et également, des erreurs de ma part à vouloir mal comprendre ce que tu as exposé au deuxième poste MAIS AUSSI LE FAIT DE D' ECRIRE LE MOT IMCOMPETENCE grrr, mais bon ce n'est pas grave, l'erreur vient de moi j'ai mal compris. je m'en excuse (mais le mots incompétents grrrrrr mal passé Lol), mais merci a toi de tes remarque je laisse en résolus et si d'autres personnes en des commentaires à propos faite nous part de ça à bientôt