Expressions et affectations

Slides:



Advertisements
Présentations similaires
LES NOMBRES PREMIERS ET COMPOSÉS
Advertisements

Calculs de complexité d'algorithmes
Les Prepositions.
GEF 243B Programmation informatique appliquée Expressions et opérateurs §
GEF 243B Programmation informatique appliquée Expressions et opérateurs.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
A abstraction b assembleur c nombre binaire d bit e cache f UC g puce h compilateur i famille dordinateurs j contrôle k chemin de données l défaut m dé
Objectifs Nous allons concevoir une mise en œuvre contenant un noyau de jeu d’instructions. Nous verrons comment l’architecture de jeu d’instructions.
Le codage de l ’information
Ecriture simplifiée d'une somme de relatifs
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Initiation à la programmation et algorithmique cours 3
CSI3525: Concepts des Langages de Programmation Notes # 11: Sous-Programmes ( Lire Chapitre 8 )
Points importants de la semaine Les types arithmétiques. Les opérateurs.
Partie 1 Etude de l'existant
Récursivité.
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Expressions et assignations
Analyse lexicale Généralités Expressions rationnelles Automates finis
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Particularités des calculs
Programmation multimédia 3
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Calculs et écritures fractionnaires
Représentation des systèmes dynamiques dans l’espace d’état
Principes de programmation
CSI3525: Concepts des Langages de Programmation
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
Notre calendrier français MARS 2014
IFT 6800 Atelier en Technologies d’information
Chapitre 9 Les sous-programmes.
Chapitre 8 Structure de contrôle.
Chapitre 3 Syntaxe et sémantique.
Types de données abstrait et mécanismes d'encapsulation
Langages orientés objets
1-1 Chapitre 5: Les variables Introduction Les noms Les variables Les attributions (bindings) Portée et durée de vie L'environnement de référence Les noms.
Partie II Sémantique.
C'est pour bientôt.....
Résoudre une équation du 1er degré à une inconnue
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
Types de données fondamentaux
L’essentiel du langage C
Mise en forme en Mathématiques
Limiter et trier des données
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
chapitre -1- OPERATIONS [B] REGLES DE PRIORITE (f n°103) lundi 15 septembre 2014  rappels de 6°  du nouveau en 5°  applications  exercices  Page.
2.1 - Historique Chapitre 2 : Introduction au langage C++
CALENDRIER-PLAYBOY 2020.
Algorithmique Les structures Rappel L'enchaînement séquentiel
LES PILES ET FILES.
Paradigmes des Langages de Programmation
Notions de pointeurs en C
Ecrire des expressions arithmétiques et logiques
Chapitre 3 :Algèbre de Boole
Un survol du language C.
 Syntaxe du langage PHP
Le langage Racket (Lisp)
ISBN Chapitre 10 L'implémentation des sous- programmes.
B.Shishedjiev - Affectation1 Expressions et affectation Comment produire des nouvelles valeurs.
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
Les expressions. Une expression retourne une valeur lorsqu’elle est exécutée par le programme. a+2, x==0, i++, !isdigit(c) && b, sin(Pi),… On peut donc.
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Philippe Gandy - 15 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Introduction au langage C
Transcription de la présentation:

Expressions et affectations Chapitre 7 Expressions et affectations

Chapitre 7: Sujets Introduction Expressions arithmétiques Surcharge des opérateurs Conversions de types Expressions relationelle et booléenne Évaluations court-circuitées Les affectations Affectation multi-types Copyright © 2007 Addison-Wesley. All rights reserved. 2

Introduction Expressions: Outil fondamental permettant de spécifier les calculs devant être effectués par un programme informatique. Point crucial: Comprendre la syntaxe et la sémantique des expressions du langage. Évaluation d'une expression: Le résultat dépend de l'odre d'évaluation des opérateurs et des opérandes. Copyright © 2007 Addison-Wesley. All rights reserved.

Expressions arithmétiques L'apparition des premiers langages était motivée par le besoin d'évaluer des expressions arithmétiques telles que celles que l'on retrouve en mathématique, en science et en génie. Expressions arithmétiques: opérateurs, opérandes, parenthèses et appels de fonctions. Copyright © 2007 Addison-Wesley. All rights reserved.

Expressions arithmétiques: Conception Choix de conception Règles de précédence des opérateurs Règles d'associativité des opérateurs Ordre d'évaluation des opérandes Effets de bord de l'évaluation des opérandes Surcharge des opérateurs Mélange de types dans les expressions Copyright © 2007 Addison-Wesley. All rights reserved.

Expressions arithmétiques: Opérateurs Opérateur unaire: 1 opérande *ptr Opérateur binaire: 2 opérandes a+b Opérateur ternaire: 3 opérandes a ? b : c Dans la plupart des langages les opérateurs binaires sont infixes Copyright © 2007 Addison-Wesley. All rights reserved.

Priorité des opérateurs arithmétiques Les règles de priorité des opérateurs définissent l'ordre avec lequel sont évalués les opérateurs adjacents dans une expression. Niveaux de priorité typique: parenthèses opérateurs unaires ** (exponentiation, le cas échéant) *, / +, - Copyright © 2007 Addison-Wesley. All rights reserved.

Règles d'associativité des opérateurs Les règles d'associativité des opérateurs définissent l'ordre avec lequel les opérateurs adjacents de même priorité sont évalués. Règles d'associativité typiques: De gauche à droite, excepté pour l'exponentiation qui est de droite à gauche Les opérateurs unaires sont quelquefois évalué de droite à gauche (par exemple en FORTRAN) APL est différent: tous les opérateurs ont la même priorité et sont évalués de droite à gauche. Bien sûr, les règles de priorité et d'associativité peuvent être outrepassées en utilisant des parenthèses. Copyright © 2007 Addison-Wesley. All rights reserved.

Expressions conditionnelles Utilisé dans les langages de type C Exemple: moyenne = (nbre == 0)? 0 : somme / nbre Équivalent à if (nbre == 0) moyenne = 0 else moyenne = somme /nbre Copyright © 2007 Addison-Wesley. All rights reserved.

Ordre d'évaluation des opérandes Type d'opérandes: Variables: évaluées en récupérant la valeur en mémoire Constantes: Souvent évaluées de la même façon que les variables.Quelque fois la variable fait partie de l'instruction machine. Expressions avec parenthèses: Évaluer tous les opérateurs avant d'utiliser la valeur comme opérande. L'ordre d'évaluation des opérandes est important pour l'efficacité et lorsqu'il y a effet de bord. Copyright © 2007 Addison-Wesley. All rights reserved.

Effet de bord des fonctions Lorsqu'une fonction change la valeur d'un paramètre ou d'une variable non locale. Principal problème: Lorsqu'un des opérandes d'une expression est une fonction qui modifie la valeur d'une variable présente dans une autre opérande. Exemple: int f(int& a){a++;return 1;} b = a / f(a); Copyright © 2007 Addison-Wesley. All rights reserved.

Effet de bord des fonctions Deux solutions possibles au problème: Définir le langage afin de proscrire les effets de bord. Pas de paramètre pouvant être modifié Aucune variable non locale Avantage: C'est possible et cela fonctionne! Désavantage: Manque de flexibilité Définir le langage afin que l'ordre d'évaluation des opérandes soit fixe. Désavantage: limite l'optimisation effectuée par le compilateur. Copyright © 2007 Addison-Wesley. All rights reserved.

Surcharge des opérateurs Utilisation d'un opérateur pour plus d'un usage. Quelques cas sont communs + pour int et float En Java: + pour la concaténation Quelques uns sont problématiques (e.g., & en C et C++) Plus difficile de détecter les erreurs car l'omission d'une opérande peut ne pas être détectée: si on écrit &b plutôt que a&b Peut être évité (en Pascal on écrit div pour la division entière) Copyright © 2007 Addison-Wesley. All rights reserved.

Surcharge des opérateurs (suite) C++, Ada, Fortran 95 et C# permettent aux usager de surcharger les opérateurs. addition et produit sur les matrices: A * B + C * D Problèmes potentiels: L'usage d'un symbole peut être injustifié Les programmes peuvent être moins lisibles même si l'usage est justifié par exemple si on doit vérifier le type de tous les paramètres pour déterminer la sémantique. Copyright © 2007 Addison-Wesley. All rights reserved.

Conversion de types Une conversion réductrice (narrowing conversion) est une converstion vers un type plus restreint. Exemple: float vers int Une conversion expensive (widening conversion) est une conversion vers un type plus général Exemple: int vers float Copyright © 2007 Addison-Wesley. All rights reserved.

Conversion implicite (Coercition) Une coercition est une conversion de type implicite désavantages: Elles diminuent la capacité du compilateur de détecter les erreurs de types. La plupart des langages utilisent la coercition expensive pour tous les types numériques dans les expressions En Ada il n'y a pratiquement aucune coercition dans les expressions. Copyright © 2007 Addison-Wesley. All rights reserved.

Conversion explicite Possible dans la plupart des langages cast en C Exemples C: (int) angle Ada: Float (sum) Note: La syntaxe de Ada est similaire aux appels de fonctions. Ada possède aussi une fonction unchecked_Conversion qui change le type sans changer la représentation. Copyright © 2007 Addison-Wesley. All rights reserved.

Erreurs dans les expressions Causes Limitations Inhérentes de l'arithmétique: e.g., division par zéro Limitations de l'ordinateur e.g. débordement Certains langages offrent des outils pour traiter ce type d'erreurs (exceptions) Copyright © 2007 Addison-Wesley. All rights reserved.

Expressions booléennes et relationelles Expression relationelle Utilise des opérateurs relationels et des opérandes de types variés S'évalue à une représentation d'une valeur booléenne Les symboles représentant les opérateurs varient en fonction des langages != (C), /= (Ada), .NE.(Fortran), <> (Fortran), ~= (Lua), !== (PHP) Copyright © 2007 Addison-Wesley. All rights reserved.

Expressions booléennes et relationelles Les opérandes sont des booléens et le résultat est un booléen Exemples d'opérateurs FORTRAN 77 FORTRAN 90 C Ada .AND. and && and .OR. or || or .NOT. not ! not xor Copyright © 2007 Addison-Wesley. All rights reserved.

Pas de type booléen en C Le C utilise le type int pour représenter les booléens (0=faux et les autres valeurs valent Chose curieuse en C: a < b < c est une expression légale mais le résultat n'est pas ce que vous espérez: Que vaux 1 < 0 < 1 ? Copyright © 2007 Addison-Wesley. All rights reserved.

Précédence des opérateurs Opérateurs relationels dans les langages de type C: ++ et -- postfixes + et - unaires, ++ et -- préfixes, ! *, /, % + et - binaires <, >, <=, >= =, != && || Copyright © 2007 Addison-Wesley. All rights reserved.

Évaluations court-circuitées Lorsque le résultat d'une expression est déterminé sans évaluer toutes les opérandes et/ou opérateurs. Exemple: (13*a) * (b/13–1) Si a est zéro, inutile d'évaluer (b/13-1) Problème avec les évaluations non court-circuitées index = 0; while ((index < length) && (LIST[index] != value)) index++; Lorsque index=length alors LIST [index] n'est pas valide (en C) Copyright © 2007 Addison-Wesley. All rights reserved.

Évaluations court-circuitées (suite) C, C++, et Java: utilisent l'évaluation court- circuitée pour les opérateurs booléens usuels (&& and ||), mais ils fournissent aussi des opérateurs sur les bits qui ne sont pas court-circuités(& and |) Ada: on peut spécifier si les opérateurs AND et OR doivent être court-circuités en utilisant and-then et or-else: I := 1; while (I<=N) and then (tab(I) /= K) loop I:=I+1; end loop; Copyright © 2007 Addison-Wesley. All rights reserved.

Évaluations court-circuitées (suite) Ruby, Perl, Python: Tous les opérateurs logiques sont court-circuités. L'évaluation court-circuitée expose le problème potentiel de l'effet de bord dans les expressions: e.g. (a > b) || (b++ / 3) Copyright © 2007 Addison-Wesley. All rights reserved.

Les affectations Syntaxe générale: L'opérateur d'affectation <var_cible> <operator_affectation> <expression> L'opérateur d'affectation = FORTRAN, BASIC, PL/I, C, C++, Java := ALGOLs, Pascal, Ada = peut être problématique lorsqu'il est surchargé par l'opérateur relationel d'égalité Copyright © 2007 Addison-Wesley. All rights reserved.

Cible conditionnelle Ce qui est équivalent à: if (flag) total = 0 else En C, C++, et Java: (flag)? total : subtotal = 0 Ce qui est équivalent à: if (flag) total = 0 else subtotal = 0 Note: Cela illustre la différence entre les l-valeurs et les r-valeurs. Copyright © 2007 Addison-Wesley. All rights reserved.

Opérateurs composés Raccourci permettant de spécifier une forme particulière Introduit dans ALGOL; adopté par C Exemple a = a + b peut s'écrire a += b Copyright © 2007 Addison-Wesley. All rights reserved.

Opérateurs d'affectation unaires Dans les langages de type C Combine l'incrémentation (ou la décrémentation) avec l'affectation Exemples count++ --count sum = ++count sum = count++ Copyright © 2007 Addison-Wesley. All rights reserved.

L'affectation comme expression En C, C++, et Java, l'affectation produit un résultat et peut être utilisé comme opérande. Exemple: while ((ch = getchar())!= EOF){…} ch = getchar() est évalué et le résultat (mis dans ch) est utilisé comme valeur de comparaison avec EOF. Copyright © 2007 Addison-Wesley. All rights reserved.

Affectation multi-types L'affectation peut aussi être multi-type: int a, b; float c; c = a / b; Fortran, C, C++ et Perl utilisent des règles de coercition pour l'affectation similaire à celle utilisée dans les expressions. Copyright © 2007 Addison-Wesley. All rights reserved.

Affectation multi-types (suite) En Java et C#, seule la coercition expensive est effectuée. En Ada, il n'y a aucune coercition pour l'affectation. Les langages utilisant le typage dynamique n'ont pas besoin d'effectuer de coercition. Copyright © 2007 Addison-Wesley. All rights reserved.

Sommaire Expressions Associativité et priorité des opérateurs Évaluations court-circuitées Surcharge des opérateurs Expressions multi-types Formes variées d'affectations. Copyright © 2007 Addison-Wesley. All rights reserved.