gef 243b programmation informatique appliquée expressions de type mixte et blocs §3.3 - 3.6

18
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

Upload: dieudonne-lecomte

Post on 03-Apr-2015

107 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

GEF 243BProgrammation informatique

appliquée

Expressions de type mixte et blocs

§3.3 - 3.6

Page 2: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 2JGA Beaulieu

Revue

• Quel genre d’opé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;

Page 3: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 3JGA Beaulieu

Synopsis

• Conversion de type ImpliciteExplicite

• Énoncés• Énoncés composés (Blocs)

Page 4: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 4JGA Beaulieu

Les Types Revisité

• Un type définitUn ensemble (plage) de valeursUn 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?

Page 5: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 5JGA Beaulieu

Exemple d’addition

• Faisons ces deux additions à la mitaine

• Additionnez les int suivants125 + 375

• Additionnez les float suivants3.7525e2 + 7.525e-1

• Les int et float demande que l’on fasse l’addition de façon différente

Page 6: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 6JGA 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 l’on fasse aussi la multiplication de façon différente

Page 7: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 7JGA Beaulieu

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;

Page 8: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 8JGA Beaulieu

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

Page 9: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 9JGA Beaulieu

Expressions de types mixtes

Page 10: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 10JGA 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 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

Page 11: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 11JGA 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?

Page 12: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 12JGA Beaulieu

É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);

Page 13: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 13JGA Beaulieu

Énoncés en C

C’é plate!

Page 14: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 14JGA Beaulieu

É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é

Page 15: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

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

Page 16: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 16JGA 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 Bint 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

Page 17: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 17JGA Beaulieu

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?1. x /(y+z) ?

2. x * (double) y / z ?

Page 18: GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §3.3 - 3.6

4/11/23 18JGA Beaulieu

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 faireOrganisation de la mémoire efficaceMasquage d’information (plus sur ce sujet en OO)Rend le code plus facile à lire