Inscription / Connexion Nouveau Sujet
Niveau calculatrices
Partager :

Priorité des opérateurs

Posté par
tanx
27-02-21 à 22:07

bonsoir,
'*' désigne la multiplication des entiers.
on suppose que le programme de calcul est le plus optimisé possible.

N=3+5*6*2^{4+1}

Quelle est la première opération que l'on effectue ?
5*6=30
ou
4+1=5

Merci d'avance.

Posté par
LeHibou
re : Priorité des opérateurs 27-02-21 à 22:14

Bonsoir,

Une raison pour avoir utilisé des accolades { } à la place des classiques parenthèses ( ) ?
Sinon, pour répondre à ta question, l'ordre de priorité des calculs est :
- les parenthèses
- les puissances
- les multiplications / les divisions
- les additions / les soustractions
Et en cas d'ambiguïté, les opérations se traitent de gauche à droite.
Donc ici ce sera :
4+1 = 5
2^5 = 32
3*6*32 = 576
3+576 = 579

Posté par
tanx
re : Priorité des opérateurs 27-02-21 à 22:19

oui, je connais ces règles mais cet algorithme, que tu proposes, n'est pas le plus optimisé

Posté par
LeHibou
re : Priorité des opérateurs 27-02-21 à 22:29

Citation :
oui, je connais ces règles mais cet algorithme, que tu proposes, n'est pas le plus optimisé

Apparemment, tu connais déjà la réponse à la question que tu poses, alors on peut se demander pourquoi tu la poses...

Par ailleurs ton niveau est Licence 1ère année, et ton exercice est Niveau troisième.
Peux-tu expliquer cet écart ?

Posté par
tanx
re : Priorité des opérateurs 27-02-21 à 22:54

Le résultat que tu calcules est faux. on doit trouver 963.
En lisant l'expression de gauche à droite, on peut calculer 5*6=30
avant de calculer la puissance. Sinon pour répondre à ta question,
j'écris un parser de calculatrice.

Posté par
LeHibou
re : Priorité des opérateurs 27-02-21 à 23:13

C'est toute l'ambiguïté de ce genre d'expression, on peut lire 3+(5*6*2)^{4+1} = 963 ou 3+5*6*(2^{4+1}) = 579.
Effectivement, avec la règle de gauche à droite, on fait 5*6*2 en premier.
D'où l'intérêt des parenthèses...

Posté par
carpediem
re : Priorité des opérateurs 28-02-21 à 09:59

salut

tanx @ 27-02-2021 à 22:54

j'écris un parser de calculatrice.
ques aco ?

tanx @ 27-02-2021 à 22:54

Le résultat que tu calcules est faux. on doit trouver 963.
En lisant l'expression de gauche à droite, on peut calculer 5*6=30
avant de calculer la puissance.
pas d'accord même pour une lecture de gauche à droite !!!

l'exponentiation n'étant qu'une simplification d'écriture pour indiquer une multiplication :  le produit de "exposant" fois le même facteur et "exposant" s'appliquant uniquement au terme ou facteur à sa gauche ...

Posté par
LeHibou
re : Priorité des opérateurs 28-02-21 à 10:25

Bonjour carpediem,

Citation :
pas d'accord même pour une lecture de gauche à droite !!!

l'exponentiation n'étant qu'une simplification d'écriture pour indiquer une multiplication :  le produit de "exposant" fois le même facteur et "exposant" s'appliquant uniquement au terme ou facteur à sa gauche ...

Je suis entièrement d'accord avec toi, mon erreur initiale vient simplement du fait que j'avais utilisé un 3 au lieu d'un 5...
Une fois corrigé, ça donne :
4+1 = 5
2^5 = 32
5*6*32 = 960
3+960 = 963

Posté par
carpediem
re : Priorité des opérateurs 28-02-21 à 11:07

oui j'avais vu ton erreur mais la logique opératoire était exacte ...

Posté par
mathafou Moderateur
re : Priorité des opérateurs 28-02-21 à 16:30

bonjour
il s'agit d'effectuer les calculs selon "l'arbre" des opérations :

Priorité des opérateurs
les deux sont totalement équivalents
celui de gauche est plus "naturel" (pour une machine) dans une lecture mot à mot de gauche à droite.
celui de droite est "l'optimisation" effectuant une opération au plus tôt possible
ce qui économise un niveau dans la pile (ou les appels récursifs, c'est pareil)
il correspond à une transformation par le parser de l'expression en

N=3+(5*6)*2^{4+1}

on peut peut être gagner encore (pas sûr) en la transformant en

N=(5*6)*2^{4+1}+3
(de gauche à droite toujours donc N=((5*6)*2^{4+1})+3)

les économies de bout de chandelle réalisées ne justifient pas la complication du parser que cela implique... (AMHA)

Posté par
carpediem
re : Priorité des opérateurs 28-02-21 à 17:43

qu'est-ce qu'un parser ?

Posté par
mathafou Moderateur
re : Priorité des opérateurs 28-02-21 à 18:17

le morceau de logiciel qui analyse une ligne de texte représentant une expression à calculer pour le traduire en opérations à effectuer.

Posté par
carpediem
re : Priorité des opérateurs 28-02-21 à 18:32

ok merci beaucoup !!



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !