gef 243b programmation informatique appliquée expressions de type mixte et blocs §3.3 - 3.6
TRANSCRIPT
GEF 243BProgrammation 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;
4/11/23 3JGA Beaulieu
Synopsis
• Conversion de type ImpliciteExplicite
• Énoncés• Énoncés composés (Blocs)
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?
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
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
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;
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
4/11/23 9JGA Beaulieu
Expressions de types mixtes
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
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?
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);
4/11/23 13JGA Beaulieu
Énoncés en C
C’é plate!
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é
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é
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
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 ?
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