CSI3525: Concepts des Langages de Programmation

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Fonctions & procédures
Calcul géométrique avec des données incertaines
Algorithmique Résume.
GEF 243B Programmation informatique appliquée Boucles §
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée Expressions et opérateurs §
GEF 243B Programmation informatique appliquée Expressions et opérateurs.
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §
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 &
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
CSI3525: Concepts des Langages de Programmation Notes # 5: Langages de Programmation Fonctionelle I: Introduction au Scheme.
Initiation à la programmation et algorithmique cours 3
CSI3525: Concepts des Langages de Programmation Notes # 11: Sous-Programmes ( Lire Chapitre 8 )
Les bases de l’Algorithmique
Points importants de la semaine Les types arithmétiques. Les opérateurs.
Sous-programmes Concepts généraux Passage de paramètres Fonctions
Partie 1 Etude de l'existant
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
Démarche de résolution de problèmes
Expressions et assignations
Analyse lexicale Généralités Expressions rationnelles Automates finis
CSI3525: Concepts des Langages de Programmation Notes # 12: Implementation des Sous-Programmes ( Lire Chapitre 9 )
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Particularités des calculs
Outils de Programmation
Complément Le diagramme des classes
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.
Semaine #1 INF130 par Frédérick Henri.
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
Principes de programmation
CSI3525: Concepts des Langages de Programmation Notes # 7: Noms, Liaisons, Verification de Type et Portee ( Lire Chapitre 4 )
1 CSI3525: Concepts des Languages de Programmation Notes # 3: Description Syntaxique des Languages.
CSI3525: Concepts des Languages 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é.
Cours N°2 Base de Données & Langage SQL
IFT 6800 Atelier en Technologies d’information
Chapitre 3 Syntaxe et sémantique.
Expressions et affectations
8PRO100 Éléments de programmation Les types composés.
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.
CSI3525: Concepts des Langages de Programmation Notes # 6: Langages de Programmation Fonctionelle II: Introduction au ML.
Introduction à l’algèbre
Algorithmique et structure de données
Tutorat en bio-informatique Le 21 novembre Exercices 2 et 3 (MAT1400) - solutions Chapitre 11.7, Analyse - concepts et contextes vol. 2 27) Cherchez.
L’essentiel du langage C
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++
Paradigmes des Langages de Programmation
Chapitre 3 :Algèbre de Boole
Algorithmique et programmation en
Un survol du language C.
CSI3525: Concepts des Langages de Programmation Notes # 13: Introduction au SmallTalk.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
 Syntaxe du langage PHP
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Le langage Racket (Lisp)
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Les types composés Les enregistrements.
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
8PRO107 Éléments de programmation Les adresses et les pointeurs.
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.
Chapitre 4 La représentation des nombres.
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Objets et Actions Élémentaires.
Philippe Gandy - 15 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
L ES INSTRUCTIONS DE L ECTURE, E CRITURE ET A FFECTATION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université.
Transcription de la présentation:

CSI3525: Concepts des Langages de Programmation Notes # 9: Expressions et Affectations ( Lire Chapitre 6 )

Expressions Arithmetiques: Precedence des Operateurs La precedence (ou puissance) des operateurs est l’ordre d’evaluation d’expressions contennant plus d’un operateurs [Lorsque des parentheses ne sont pas la pour determiner cet ordre explicitement]. Les operateurs sont groupes par types: Exposant: **. Operateurs unitaires: abs, + unitaire, - unitaire, ++, --, not. Operateurs multiplicatifs: *, /, div, mod, and. Operateurs additifs: + binaire, - binaire, or.

Ordre de Precedence dans Differents Langages Les regles de precedences peuvent etre differentes d’un langage a l’autre: Pascal: multiplicatifs > additifs C: unitaires > multiplicatifs > additifs Ada: exposants > multiplicatifs > unitaire +, - > additifs Fortran: ** > multiplicatifs > additifs APL: Tous les operateurs ont le meme niveau de precedence.

Expressions Arithmetique: Associativite Etant donne un operateur binaire, , on peut parle de: Associativite de gauche a droite: x  y  z = ( x  y )  z Pascal, Ada, C (les operateurs “normaux”) Associativite de droite a gauche: x  y  z = x  ( y  z ) C (les operateurs de self-incrementation: ++, --) Non-Associativite: x  y  z est illegal: il faut specifier ou bien ( x  y )  z ou alors x  ( y  z ) Ada (exposants): x ** y ** z est incorrect.

Expressions Arithmetique: Associativite (continue) Pas de Precedence, une regle d’Associativite: APL: toujours l’associativite de droite a gauche: x + y * z = x + ( y * z ) x * y + z = x * ( y + z ) Smalltalk: toujours l’associativite de gauche a droite x + y * z = ( x + y ) * z x * y + z = ( x * y ) + z

Expressions Arithmetique: Evaluation d’Arguments et Effets Secondaires Une fonction apparaissant dans une expression peut avoir des effets secondaires (un changement dans un objet non-local–ce qui veut dire que cet objet n’etait pas mentionne dans l’expression) Example: function twice (var x: real): real; begin x := x + x; twice := x end; Si on fait l’appel: z := twice(y); la valeur de y est changee secretement. L’ordre d’evaluation d’operateurs est tres important dans le cas d’effets secondaires 

Expressions Arithmetique: Evaluation d’Arguments et Effets Secondaires (continue) Dans le programme suivant: y := 10; z := y + twice ( y ); Si le premier operande est evalue le premier, z aura la valeur30. Si, cependant, le deuxieme operande est evalue le premier, z aura la valeur 40. Le meme probleme arrive lorsque la valeur d’une variable globale est change a l’interieur d’une fonction ou d’une procedure.

Expressions Arithmetique: Evaluation d’Arguments et Effets Secondaires (continue) Solutions pour ce probleme: Interdiction d’effets secondaires de fonctions: 1) Pas une bonne idee pour les langages qui n’ont pas de procedures, mais ont seulement des fonctions (C,C++). 2) De plus, il faudrait passer toutes les variables comme parametres  Probleme d’efficacite: il est plus rapide d’avoir acces a des variables globales dans une fonction. Decider d’un ordre d’evaluation d’operandes: Pas une bonne ide car les methodes d’optimization de compilateurs change parfois l’ordre d’evaluation des operandes

Expressions Arithmetique: Evaluation d’Arguments et Effets Secondaires (continue) Solutions pour ce probleme (continue): En Fortran 77: expressions qui ont des appels de fonctions sont legaux seulement si les fonctions ne changent pas les valeurs des autres operandes de l’expression  probleme: il est tres difficile pour le compilateur de determiner l’effet exact qu’une fonction peut avoir sur les variables contenues a l’exterieur de cette fonction.

Expressions Arithmetiques: Operations Ternaires Expression conditionnelles: En Algol60: If x>0 then 1 . else if x=0 then 0 . else –1 En C, il y a l’operateur: “?” qui est un operateur ternaire “:” est un separateur: ( x > 0 ? 1 : ( x == 0 ? 0 : -1 ) )

Operateurs Overloades Un operateur est overloade si le meme nom ou le meme symbole a plusieurs usages distincts. Examples en Pascal: + addition d’entier et de reels, concatenation de chaines de caracteres, union d’ensembles. * multiplication d’entiers et de reels, intersection d’ensembles. abs entier  entier, reel  reel Il n’y a pas d’overloading pour mod et div

Operateurs Overloades (continue) L’overloading peut etre resolu en regardant le contexte (tous les operandes ont un type connu). Exemples: 2+3  entiers [‘a’] + [‘c’, ‘d’]  ensembles Dans certains langages, comme l’Ada ou le C++ (qui sont des langages extensibles), le programmeur peut overloader lui/elle-meme des operateurs. En Ada, ou il n’y a que 2 procedures de I/O: get, put, ces procedures sont tres overloades

Operateurs Overloades (continue) L’Overloading peut porter a la confusion: En C, par exemple, & veut dire “conjonction par bits” et “addresse”. * veut dire “multiplication” et “deference”. En PL/1, par exemple, = veut dire “egalite” et “affectation” Cependant, l’overloading est aussi tres utile car il peut rendre la lecture plus aisee.

Operateurs Overloades (continue) En Prolog, la virgule est tres overloadee, elle aussi: a :- b, c, d.  and a(b, c, d)  Separation d’arguments [b, c, d].  Separation d’elements de liste

Coercition de Types Les conversions de types sont ou bien aggrandiassantes ou retrecissantes. Il vaut toujours mieux aggrandir que retrecir: En Fortran, l’ordre de la coercition est: entier < reel < double < complex En Pascal, on a: entier < reel Neanmoins, il peut y avoir des problemes meme dans une conversion aggrandissante etant donnees les limites de la precision des types. Bien que la coercition soit bien pratique, la detection d’erreur de type est reduite.

Expressions Logiques Il existe six operateurs de comparaison: Pascal/Ada C Fortran Egal = == .EQ. Inegal <>, /= != .NE. Moins que < < .LT. Moins que ou Egal <= <= .LE. Plus que > > .LT. Plus que ou Egal >= >= .LE. L’egalite est bien definie pour tous les types, mais il n’existe pas d’ordre naturel pour les types non scalaires.

Expressions Logiques (Continue) L’ordre de precedence de tous les operateurs de l’Ada: **, abs, not *, /, mod, rem +, - (unitaire) +, - (binaire) =, /=, <, >, <=, >=, in, not in and, or, xor, and then, or else Ce n’est pas toujours comme cela: en Pascal, par exemple, les operateurs booleens ont une precedence plus haute que les operateurs relationnels  a > 5 or a < 0 est illegal car cela veut dire a > (5 or a) < 0

Expressions Logiques Evaluations Court-Circuites Une evaluation court-circuite est une evaluation dans laquelle le resultat est determine sans evaluer tous les operandes ou operateurs. Par exemple, dans l’expresion: (13 * A) * (B/13 –1), si A=0, on n’a pas besoin d’evaluer (B/13 –1). Neanmoins, dans les operations arithmetiques, il n’est pas facile de detecter de telles situations. Ce court-circuit n’est donc jamais utilise. Par contre, il peut etre utilise pour les operations logiques: Pascal ne l’utilise pas du tout  problemes; C l’utilise tout le temps  problemes; Ada permet les operations court-circuites et celles non court-circuites  Meilleure approche.

Affectations Affectations simples: Resultat := Expression Affectations Multiples: PL/1: A, B := Expression Algol 60: A := B := Expression 1. Il faut trouver la valeur de l’Expression 2’. Il faut affecter cette valeur a A puis a B 2’’.Il faut affecter cette valeur a B uis a A L’ordre d’affectation est important et l’ordre dans lequel les addresses des resultats sont evaluees est aussi important.

Affectations (Continue) Affectation Composee (en C): a += b;  a = a +b; a *= b;  a = a * b; etc… Affectations Conditionnelles (en C): (x != 0 ? Y : z) = 17 ou bien x ? Y : z = 17; Affectation qui est une expression (en C): a = b = Expression;  b=Expression a une valeur (Expression qui est affectee a a) while ((ch=getchar()) != EOF) { … }