1 / 18

GEF 243B Programmation informatique appliquée

GEF 243B Programmation informatique appliquée. Expressions de type mixte et blocs §3.3 - 3.6 . Revue. Quel genre d’opérateur est sizeof() ? Quel est la valeur de toutes les variables pour les expressions suivantes? int a=5, b=3, c=4, d; d=++a%c-b--*b; float x=7.2, y=-3, z;

said
Download Presentation

GEF 243B Programmation informatique appliquée

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GEF 243BProgrammation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

  2. Revue • Quel genre d’opérateur est sizeof()? • Quel est la valeur de toutes les variables pour les expressions suivantes? • int a=5, b=3, c=4, d;d=++a%c-b--*b; • float x=7.2, y=-3, z; bool w;w = y>-x;z = x%y; JGA Beaulieu

  3. Synopsis • Conversion de type • Implicite • Explicite • Énoncés • Énoncés composés (Blocs) JGA Beaulieu

  4. Les Types Revisité • Un type définit • Un ensemble (plage) de valeurs • Un ensemble d’opérations • Pourquoi dit on que les opérateurs sont différents pour les types? • Ils font les mêmes opérations … non? JGA Beaulieu

  5. Exemple d’addition • 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 l’on fasse l’addition de façon différente JGA Beaulieu

  6. 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 l’on fasse aussi la multiplication de façon différente JGA Beaulieu

  7. Opérateurs et types • Il devient évident que + et * demandent que l’ordinateur exécute des opérations différentes dépendamment du type • Les autres opérateurs / - < > ++ … dépendent aussi du type • Mais qu’est-ce qui ce passe si on veut additionner un int avec un float? • x = 3.14159 + 1; JGA Beaulieu

  8. Expressions de types mixtesConversion implicite • Que ce passe-t-il quand on veut multiplier un entier avec un nombre avec virgule flottante? • Dans un expression d’assignation, l’expression final doit avoir le même type que l’opérande de gauche • Mais avant d’arriver à l’assignation 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 l’information durant la conversion JGA Beaulieu

  9. Expressions de types mixtes JGA Beaulieu

  10. 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 s’assurer 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 JGA Beaulieu

  11. 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? JGA Beaulieu

  12. Énoncés en C • Il y a différents types d’énoncés en C. • Le plus évident est l’énoncé d’expression. • 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); JGA Beaulieu

  13. Énoncés en C C’é plate! JGA Beaulieu

  14. Énoncés composés - blocs • Les blocs {} sont fait d’une section de déclaration (optionnelle) et un ensemble d’énoncés. • Les blocs peuvent être en dedans d’autre 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é JGA Beaulieu

  15. É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 qu’il n’y a pas de point-virgule après l’accolade de fermeture, c’est déjà un énoncé JGA Beaulieu

  16. É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 n’est pas visible ici } //fin du bloc externe A JGA Beaulieu

  17. Problèmes de pratique • Tout comme les expressions, la conversion de type implicite et les erreurs possibles sont sujet à l’examen • Si x est float, y int et z char, quel est le type des expressions suivantes? • x /(y+z) ? • x * (double) y / z ? JGA Beaulieu

  18. Revue • Les conversion de type implicite est fait par le compilateur dépendamment des types en jeu • L’assignation d’un type de haute précision à un type de plus basse précision peut engendrer une perte d’information • Les expressions composés ont des avantages: • Parfois la seule façon de faire • Organisation de la mémoire efficace • Masquage d’information (plus sur ce sujet en OO) • Rend le code plus facile à lire JGA Beaulieu

More Related