Régle de précédence

Fermé
oceane36 Messages postés 13 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 6 avril 2013 - Modifié par oceane36 le 31/12/2011 à 20:37
oceane36 Messages postés 13 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 6 avril 2013 - 3 janv. 2012 à 13:29
Bonjour,
Je suis débutante en programmation. et je viens d'avoir affaire au cours concernant la priorité relative aux opérateurs. Bref en mathématiques c'est simple:
n°1/ ()
n°2/ ** alias ^
n°3/ *, /
n°4) +,-

Mais en informatique il y a quelques nouveaux intrus: par exemple \ et mod qui viennent s'insérer respectivement entre le n° 3 et le 4. Il me reste que je n'arrive à saisir l'ordre que prennent les fonctions( abs, sqrt, sin, tan...), est-ce qu'elles sont exécutées au même temps que les parenthèses ou après celles-ci.
Je vous serai reconnaissante et vous prie de bien vouloir m'éclairer sur ce point.



4 réponses

nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
31 déc. 2011 à 21:39
Je ne comprend pas trop ton problème, étant donné que ces fonctions s'applique directement sur la variable entre parenthèses, donc elles sont à considérer comme un élément unique...
0
oceane36 Messages postés 13 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 6 avril 2013
1 janv. 2012 à 01:31
Re

Merci nicocorico pour ta réponse.

Je vais reformuler mon problème d'une façon plus claire.

Si on considère par exemple qu'on a l'expression suivante:

A= abs(x)+(v+z)/(x+y)

L'ordinateur considère t-il que la priorité est aux parenthèses et commece alors par calculer:
R1: v+z .... puis:
R2: x+y
R3: abs(x)
R4: R1/R2
R5: R3+R4

ou bien considère t-il que les fonctions ont la même priorité que les parenthèses et effectue donc le calcul de la façon suivante:
R1: abs(x)
R2: v+z
R3:x+y
R4:R2/R3
R5: R1+R4
...

Et encore MERCI.
0
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
Modifié par nicocorico le 1/01/2012 à 10:24
Ok j'ai mieux compris, et la logique voudrait que tout ce qui peut être calculé l'est au fur et à mesure, car à quoi bon s'obliger à retenir ce qui précède alors qu'on peut directement le réduire en un résultat unique...

Mais en fait l'ordre du calcul n'est pas déterminé par l'ordinateur (qui se contente de faire ce qu'on lui dit en fait), mais par le compilateur ou la routine qui prend en charge le calcul, donc ta question est plus compliquée qu'on pourrait le croire, et je pense que c'est trop intimement lié au comportement du programme qui traduira la formule pour avoir une réponse certaine.

On peut imaginer par exemple que la décomposition se fasse par une fonction récursive, qui est appelée pour chaque 'binôme' et qui détermine si le calcul entre les 2 est prioritaire sur le précédent ou le suivant, puis effectue le calcul.
Mais en fait cette routine peut calculer le 1er terme abs(x) , faire un appel récursif pour décomposer la suite (v+z)/(x+y) , puis additionner;
ou bien elle peut peut faire le calcul du terme qui la concerne uniquement après avoir fait l'appel récursif, au choix, ce qui inverserait l'ordre de l'ensemble des calculs...
De plus, il est également possible que l'ajout de parenthèses cernant la formule, ne modifiant pas le résultat, modifie le comportement de la routine et donc l'ordre de réduction;
Difficile d'avoir une réponse claire donc !

Le chêne aussi était un gland, avant d'être un chêne
0
oceane36 Messages postés 13 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 6 avril 2013
Modifié par oceane36 le 1/01/2012 à 13:16
Bonjour,

Merci beaucoup nicocorico. Je constate qu'il est effectivement difficile d'avoir une réponse claire.

Les divers manuels et polycopiés traitant d'Algorithmes et déstinés aux débutants comme moi, simplifient les choses au point où je fus poussée à considérer que le complilateur ne faisait qu'obéir à une méthode de calcul prélablement définie et commune à tous les langages de programmation. Or, je découvre que chaque compilateur est susceptible de générer son propre code machine.
Alors pourquoi se targuer à vouloir nous apprendre cette règle de précédence d'une manière bête et disciplinée à cette étape de notre formation. Où est l'interêt de perdre du temps sur des exercices qui obéissent à une méthode qui n'est qu'à moitié justifiée!!!! Je me demande qu'elle réponse je peux proposer à l'exercice ci-dessus quand je sais qu'en réalité il n'y a point de réponse vraiment claire?!

Encore Merci pour l'aide que tu m'apportes.
0
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
1 janv. 2012 à 15:40
Comme d'habitude en programmation, ce qui compte c'est que le programme soit juste et efficace, mais il est rare d'avoir une seule manière d'accéder à ce but...
Et je pense que ton exercice de précédence ne porte que sur la justesse de l'algorithme et donc du résultat, pas sur la façon de le faire;
Dans ce cas, il t'es sûrement demandé de faire les calculs dans l'ordre en te préoccupant simplement des priorités, donc :
R1: abs(x)
R2: v+z
R3:x+y
R4:R2/R3
R5: R1+R4
0
oceane36 Messages postés 13 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 6 avril 2013
Modifié par oceane36 le 2/01/2012 à 01:15
Re

Merci nicocorico.
R1: abs(x). Ceci implique alors que supposant que l'expression (A) est graduellement executée de gauche à droite, je peux considèrer que les fonctions se classent avec les parenthése en terme de "priorité" et non après -dûment que le résultat est le même [sinon on aurait eu R1: v+z.]
Je viens de lire une autre bizarerie sur l'un de mes polycopiés, c'est que parmi toutes les fonctions il y a une qui est considérée comme une "puissance **" et qui prend donc la même priorité que celle-ci... et c'est la fonction SQRT(). Qu'en penses-tu de cette exception à la règle (Personnellement je n'y vois aucun interêt) ??.
Ce cours m'ennuie vraiment et dire que ce n'est qu'une légère introduction à toute une discipline!!!!!

Encore Millle MEERCIS.
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
2 janv. 2012 à 02:43
L'ordre d'évaluation des différents opérandes dépend des langages.
En C, l'ordre d'évaluation est laissé libre au compilateur qui, en fonction des optimisations demandées, choisira ce qui lui semble le mieux adapté. Ainsi une expression du style:
  x = f(++x) + g(x);
est à proscrire car on ne sera jamais certain du résultat. Par contre, pour ce qui concerne les opérateurs && ou ||, la norme spécifie que l'opérande de gauche doit d'abord être evaluée et ensuite, si nécessaire celui de droite. Il en est de même en Perl, sinon une ligne comme:
  open FICHIER or die "FICHIER non trouvé";
n'aurait aucun sens.Par contre, en Basic, les deux opérandes des opérateurs logiques (AND, OR, ...) sont systématiquement évalués.
A ma connaissance, en C, aucune fonction n'est prioritaire par rapport à une autre.
Bonne continuation.
0
oceane36 Messages postés 13 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 6 avril 2013
Modifié par oceane36 le 2/01/2012 à 19:46
Bonsoir,

Merci infiniment pour vos réponses. Et je suis sincèrement gênée de devoir vous demander encore quelques éclaircissements.

Nicocorico: oui, une fonction et son paramètre forment un tout indissociable. Aussi, les fonctions sont toujours prioritaires sur leurs paramètres entre parenthèses, mais ce que je cherche à comprendre depuis le début, c'est la priorité de la fonction par rapport aux "autres" parenthèses figurant dans l'expression dont je dois calculer le résultat. Dois-je déduire de tes propos ci-dessus que la fonction est égale en terme de priorité aux parenthèses de manière générale (indépendemment de celles qui lui sont associées) et est donc calculée au moment même où elle est rencontrée???

loupius: "En C, aucune fonction n'est prioritaire par rapport à une autre". cela laisse t-il supposer l'existence d'exceptions dans d'autres langages.

Encore MILLE MERCIS pour l'attention que vous m'accordez si aimablement et pour vos encouragements rassurants.
0
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
Modifié par nicocorico le 2/01/2012 à 21:56
2ème fois que ça se produit, après moults essais, impossible de mettre un message de plus de 2 lignes, le sujet est bloqué. je te le met dans ta boite...
0
oceane36 Messages postés 13 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 6 avril 2013
3 janv. 2012 à 13:29
Salut, Effectivement je te réponds en MP aussi. Encore Merci.
0