Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parDieudonné Lecomte Modifié depuis plus de 11 années
1
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6
2
21-Jan-14 2 JGA Beaulieu Revue Quel genre dopérateur est sizeof() ? Quel est la valeur de toutes les variables pour les expressions suivantes? 1.int a=5, b=3, c=4, d; d=++a%c-b--*b; 2.float x=7.2, y=-3, z; bool w; w = y>-x; z = x%y;
3
21-Jan-14 3 JGA Beaulieu Synopsis Conversion de type Implicite Explicite Énoncés Énoncés composés (Blocs)
4
21-Jan-14 4 JGA Beaulieu Les Types Revisité Un type définit Un ensemble (plage) de valeurs Un ensemble dopérations Pourquoi dit on que les opérateurs sont différents pour les types? Ils font les mêmes opérations … non?
5
21-Jan-14 5 JGA Beaulieu Exemple daddition Faisons ces deux additions à la mitaine Additionnez les int suivants 125 + 375 Additionnez les float suivants 3.7525e2 + 7.525e-1 Les int et float demande que lon fasse laddition de façon différente
6
21-Jan-14 6 JGA Beaulieu Exemple de multiplication Faisons ces deux multiplication à la mitaine Multipliez les int suivants 125 * 375 Aditionnez les float suivants 3.7525e2 * 7.525e-1 Les int et float demande que lon fasse aussi la multiplication de façon différente
7
21-Jan-14 7 JGA Beaulieu Opérateurs et types Il devient évident que + et * demandent que lordinateur exécute des opérations différentes dépendamment du type Les autres opérateurs / - ++ … dépendent aussi du type Mais quest-ce qui ce passe si on veut additionner un int avec un float ? x = 3.14159 + 1;
8
21-Jan-14 8 JGA Beaulieu Expressions de types mixtes Conversion implicite Que ce passe-t-il quand on veut multiplier un entier avec un nombre avec virgule flottante? Dans un expression dassignation, lexpression final doit avoir le même type que lopérande de gauche Mais avant darriver à lassignation dans une expression complexe, C va faire une conversion implicite de type pour stocker les valeurs temporaires C a une hiérarchie de promotion de type de façon à ne pas perdre de linformation durant la conversion
9
21-Jan-14 9 JGA Beaulieu Expressions de types mixtes
10
21-Jan-14 10 JGA Beaulieu Expressions de types mixtes - casting Au lieu de laisser le compilateur décider, vous pouvez explicitement spécifier vos variables temporaires (cast) Ceci est ce que nous devrions toujours faire pour sassurer que les résultats sont ce que nous voulons. Ex.: a, x et y sont int (float) a //converti a à un float (float) (x+y+3) //converti le résultat //de x+y+3 à float
11
21-Jan-14 11 JGA Beaulieu Expressions de types mixtes - casting Mais il peut y avoir des problèmes en faisant du casting: float x,y; //mes vars de résultat int a; //une var int quelconque a = 3; // une valeur initiale x = (float) (a / 10); y = (float) a / 10; … Est-ce que x et y ont la même valeur?
12
21-Jan-14 12 JGA Beaulieu Énoncés en C Il y a différents types dénoncés en C. Le plus évident est lénoncé dexpression. Une expression peut être converti en énoncé en ajoutant un point-virgule à la fin de la ligne. x = a + 3; y = sizeof(int); Un énoncé peut aussi être un appel de fonction. TransposeMatrix(matrixA);
13
21-Jan-14 13 JGA Beaulieu Énoncés en C Cé plate!
14
21-Jan-14 14 JGA Beaulieu Énoncés composés - blocs Les blocs {} sont fait dune section de déclaration (optionnelle) et un ensemble dénoncés. Les blocs peuvent être en dedans dautre blocs (imbriqués). La raison principale pour utiliser les blocs est pour créer des espaces de noms et pour allouer la mémoire plus efficacement. Une variable déclarée dans un bloc est seulement visible dans ce bloc Une fois que le bloc termine, la mémoire peut être réutilisé pour autres buts. Nous allons voir bientôt que les énoncés for, while et do…while répètent seulement un énoncé Donc nous allons utiliser les blocs pour grouper des énoncés en un énoncé composé
15
21-Jan-14 15 JGA Beaulieu Énoncés composées - blocs Ex1.: blocs parallèles { //commence bloc A int k = 5; } //fini bloc A { //commence bloc B int i = 2; } //fini bloc B Notez quil ny a pas de point-virgule après laccolade de fermeture, cest déjà un énoncé
16
21-Jan-14 16 JGA Beaulieu Énoncés composées - blocs Ex2.: blocs imbriqués { //commence bloc externe A int i = 2; int k = 5;//k est une variable dans le bloc A { //commence le bloc interne B int j; int k = 5; //Notez que k est une nouvelle variable!! j = k * 3; //k est celui interne (block B) k = i; //i peut être utilisé pcq il est visible } //fin du bloc interne B i = k;//quelle est la valeur de k ici? i = j – 6; //ERREUR j nest pas visible ici } //fin du bloc externe A
17
21-Jan-14 17 JGA Beaulieu Problèmes de pratique Tout comme les expressions, la conversion de type implicite et les erreurs possibles sont sujet à lexamen Si x est float, y int et z char, quel est le type des expressions suivantes? 1.x /(y+z) ? 2.x * (double) y / z ?
18
21-Jan-14 18 JGA Beaulieu Revue Les conversion de type implicite est fait par le compilateur dépendamment des types en jeu Lassignation dun type de haute précision à un type de plus basse précision peut engendrer une perte dinformation Les expressions composés ont des avantages: Parfois la seule façon de faire Organisation de la mémoire efficace Masquage dinformation (plus sur ce sujet en OO) Rend le code plus facile à lire
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.