IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Précédence des opérateurs


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut Précédence des opérateurs
    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. Aussi, le problème qui se pose encore pour moi, et que je n'arrive pas à 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. D'autant plus que les avis divergent (sur un polycopier dédié au Visual Basic, on les classe avec le (), et sur un autre traitant du matlab on les classe priorité n°2, il faut dire que je m'emmêle les pinceaux avec tout ça...

    Je vous serai reconnaissante si vous pouviez m'offrir un peu de votre attention et m'éclairer sur ce point.

  2. #2
    Membre Expert
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut MERCI mais....
    Merci beaucoup pour votre réponse. mais je ne vois pas le classement des fonctions dans tout cela.
    Par exemple si on a l'expression suivante:
    A= abs(x)+(v+z)/(x+y)

    Le compilateur 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
    ...

    Veuillez tolérer mes jeunes connaissances en cette captivante discipline qui est l'informatique. Et encore MERCI de bien vouloir m'accepter dans votre communauté de professionnels en espérant que je puisse très vite partager avec vous des sujets d'un plus grand interêt.

  4. #4
    Membre Expert
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Par défaut
    Bien vu ! Je pensais qu'il aurait quelque part sur la page wiki un mot sur l'évaluation des fonctions (function evaluation), apparemment ce n'est pas le cas. Mais avoir la page wiki en tête est bien pour pouvoir s'attaquer ensuite aux problèmes de l'ordre de l'évaluation des fonctions, laquelle varie selon les différents langages de programmation (et parfois, selon les compilateurs !), e.g. http://stackoverflow.com/questions/1...valuation-vs-c :

    In C# it is left to right: http://blogs.msdn.com/oldnewthing/ar...4/4374222.aspx

    In C++, any particular compiler can guarantee the order. The problem is that the language spec does not specify an order, so each compiler can do whatever it wants. This means you have to add a sequence point between the two method calls if you want to guarantee ordering.
    Malheureusement je n'ai pas sous la main de lien recensant un grand nombre de langages de programmation et de compilateurs pour montrer leur politique en matière d'ordre d'évaluation des fonctions. Essaie de Googler "Order of function evaluation", il y aura sûrement d'autres liens intéressants.

    Donc comme tu le vois, ce n'est pas du tout un problème aussi trivial qu'il n'y paraît :-)

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Franck Dernoncourt Voir le message
    Donc comme tu le vois, ce n'est pas du tout un problème aussi trivial qu'il n'y paraît :-)
    Absolument :

    Ce pourquoi je recommande systématiquement de :

    • primo, mettre systématiquement des parenthèses autour de chaque bloc, ce que beaucoup de programeurs ne font pas.

    • secondo, "réfléchir" un tantinet avant d'écrire.


    Ainsi, dans l'exemple donné :


    Citation Envoyé par oceane36 Voir le message
    A= abs(x)+(v+z)/(x+y)
    Pour obtenir de manière répétive et sûre le résultat attendu, il faut écrire :

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

    Dans tous les cas de figure, n'obtenir que des opérations à 2 opérandes.

    Autre exemple :

    x = x + z + b*(x - y)

    Dans ce cas, je conseille d'écrire :

    x = x + (z + (b*(x-y)))

    Bien que l'écriture soit plus lourde, on est certain de l'évaluation, quelle que soit les priorités des opérations et/ou fonctions.


    L'ordre d'écriture/d'évaluation n'a pas d'importance à partir du moment où les opérations sont décomposées en opérations à 2 opérandes par les parenthèses.

  6. #6
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut Sincèrement désolée.... mais je me perds!!!!
    Bonsoir,

    Merci à vous, Franck Dernoncourt ainsi que Souviron34, pour vos réponses. Bien que j'avoue que vos arguments me dépassent un peu pour l'instant. Ce que je dois comprendre d'après vos réposes et que pour:

    Franck: L'ordre d'évaluation dépend des langages, où libre cours est donné au copmilateur.

    Souviron34: Essayez d'obtenir des opérations à deux opérandes pour éviter toute confusion.

    Deux astuces de "chercheurs praticiens" qu'on a omis de notifier sur mes manuels rigides et bien disciplinés .
    Le problème qui se pose donc pour moi et comment puis-je répondre à l'exercice sus-cité de manière parfaitement scolaire. Doit-je citer que le compilateur a carte blanche?? ou effectuer des modifications sur l'expression à calculer qu'on me soumet de manière à obtenir le nombre désiré d'opérandes????!!!!
    J'avoue me perdre un peu dans tout cela ...ou bien suis-je allée un peu trop loin dans ma volonté de tout comprendre au point où je m'emmêle parfaitement les pinceaux à présent....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2006, 10h39
  2. Union des opérateurs IN et LIKE
    Par PapyCrouton dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/08/2006, 16h28
  3. [SQL] Utilisation des opérateurs SQL plutôt que PHP
    Par php_newbie dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/05/2006, 11h38
  4. redéfinition des opérateurs en C++
    Par apan dans le forum C++
    Réponses: 11
    Dernier message: 27/03/2006, 15h58
  5. implémentation des opérateurs de comparaison
    Par niko8181 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 28/04/2005, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo