GEF 243B Programmation informatique appliquée Types, variables et constantes §2.3 - 2.6
Revue Quelles sont les étapes pour créer un programme en C? Quelles sont les caractères valides pour des identificateurs en C? Java is OO C is strucutral, Java is interpreted and C is compiled Edit, compile, link, execute A..Z, a..z, 0..9, _ JGA Beaulieu
Synopsis Identificateurs Types Variables Constantes Caractères spéciaux JGA Beaulieu
Pourquoi avoir des types Un compilateur a besoin de réserver de l’espace de mémoire pour les variables Les caractères et les nombres entiers ou réels n’ont pas tous besoin de la même espace d’entreposage Assumons que on veut pas s’en bâdrer des types À la limite on pourrais décider d’allouer le même montant de mémoire à toutes les données On calcul le montant de mémoire pour le plus gros types … puis on le donne à toutes les variables Possiblement très couteux …disons 16 octets Cela ou on laisse au compilateur la tâche de décider de notre intention comme programmeur JGA Beaulieu
Pourquoi avoir des types Que sont les types de toute façon? En terme communs, les types aident au compilateur à faire une vérification de base pour vérifier si l’intention d’une variable rencontre son utilisation. Définissent un ensemble de valeurs et un ensemble d’opérations qui peuvent être utilisées sur ces valeurs. Les variables et les fonctions ont des types. Et les constantes aussi (implicitement) Les types peuvent être standards ou dérivés. On va regarder les types standards pour les variables; les types pour les fonctions et les types dérivés sont vues plus tard. Forouzan P. 32 JGA Beaulieu
Types en C Les types de données standard en C sont atomiques (ils ne peuvent pas être décomposés en plus petits éléments) JGA Beaulieu
Types en C - void void: Aucune valeur et seulement une opération; l’affectation (=). … Béant … aucune dimension spécifiée C’est un type générique qui peut être utilisé pour représenter d’autres types. Utilisé si une fonction n’a pas de paramètre … MaFctn(void) {} … ou ne retourne pas de valeur … void main (void) {} Ce type est très flexible et comme nous allons le voir durant le cours, il est souvent utilisé. JGA Beaulieu
Intégral – Booléens (bool) Utilisé pour représenter les valeurs booléennes vrai ou faux Jusqu’à l’adoption de C-99, les entiers (integers) étaient utilisés pour représenter les valeurs booléennes Touts les nombres qui était non zéro en C (positifs ou négatifs) étaient utilisés pour représenter la valeur logique vrai et zéro étaient utilisé pour représenter faux Maintenant en mémoire les booléens (bool) sont entreposés en mémoire: faux = 0 vrai = 1 JGA Beaulieu
Comment j’fais pour mettre des lettres Pouvez-vous trouver des caractères dans la mémoire … puis sur le disque dure? YOU BET YOUR ASCII JGA Beaulieu
Intégral – caractère (char) Les caractères (char) utilisent normalement un octet (8 bits) pour stocker des caractères en ASCII. Parce que il n’y en as pas tant que ça …28 = 256 Les char sont stockés en mémoire comme des nombres, représentant le code ASCII pour le caractère correspondant. Donc en C, les caractères sont souvent traités comme des entiers (int) Une table ASCII est fournit à l’appendice A de Forouzan. Exemple ‘a’ = 0x61 or 9710 Mainframes sometimes use two bytes to represent chars. ASCII - American Standard Code for Information Interchange JGA Beaulieu
American Standard Code for Information Interchange (ASCII) EEE243 - 03 Types Variables and Constants American Standard Code for Information Interchange (ASCII) Winter 2010 discuss control characters and printable characters discuss CR and LF JGA Beaulieu Sylvain P. Leblanc 11
Intégral – integer (int) Les ‘integers’ sont des nombres entiers (sans fractions). En C il y a trois sortes de types de données int: short int int long int Un int peut être ‘signed’ ou ‘unsigned’ La bibliothèque <limits.h> de C, contient l’information sur la grandeur des entiers (int) pour la plateforme courante INT_MAX et INT_MIN Aussi vous pouvez vérifier la grandeur (en octets) d’un int avec l’opérateur sizeof() sizeof(short int); There is no guarantee about the size of an int other than it is at least 16 bits long. Appendix E in Forouzan has all the constant names for limits.h JGA Beaulieu
Types en C – Integer (int) Sign Octets (B) Valeur Min Valeur Max short int Signed Unsigned 2 -32,768 32,767 65,535 Int 4 -2,147,483,648 2,147,483,647 4,294,967,295 long int long long int 8 -9,223,372,036,854,775,807 +9,223,372,036,854,775,806 1.8 X 10 19 Most personal computers (IBMs) have short = 2 bytes, int = 2 bytes and long = 4 bytes. Large computers (mainframes) use int with 32 bits and long can have 48 or 64 bits. Forouzan p.33 Appendix E in Forouzan has all the constant names for limits.h Unsigned variables are declared as foll: unsigned int varA; JGA Beaulieu
Réels – fractionnaire (float) Un nombre fractionnaire (float) est un nombre qui a une partie fractionnelle (i.e. 43.56) Il y a trois différentes grandeurs pour un float: float, double et long double. Type Octets float 4 double 8 long double 10 As opposed to integers, these sizes are consistent across most machines. JGA Beaulieu
Types en C – String Il n’y a pas de strings en C non plus; il y a juste des tableaux de caractères, nous allons voir cela bientôt. There are also pointers to characters JGA Beaulieu
Identificateurs Les identificateurs nous permettent de nommer les données et autres objets dans un programme Chaque objet identifié dans un ordinateur est entreposé à une adresse de mémoire unique La mémoire est simplement un train d’octets Si nous n’avions pas d’identificateur nous aurions à se souvenir de toutes les adresses !!!! JGA Beaulieu
Variables Les variables ne sont rien de plus que des espaces de mémoire avec un identificateur et un type Parce qu’une variable a un type, elle a aussi une grandeur et un ensemble d’opérations qui sont définies par le type Les identificateurs de variable sont des symboles qui sont utilisés pour identifier la location des données en mémoire. Ceci libère le programmeur d’avoir à savoir où les variables sont physiquement; cela devient la responsabilité du compilateur. Les variables ne peuvent pas être déclarées comme void Here we are not covering the storage class of variables. Storage classes I believe are a bit beyond the scope of this course. Also we make no difference between declaration and definition for variables. These concepts are mostly used together in C except for functions, recursion and for dynamic memory allocation (pointers). JGA Beaulieu
Variables - initialisation On déclare une variable quand on lui donne un type et un identificateur Les variables ne sont pas initialisées automatiquement quand elles sont déclarées, sauf pour quelques exceptions; elles contiennent des déchets Les variables peuvent être initialisées quand elles sont déclarées int compte = 0; char initial = ‘a’; float tauxTaxe = 0.15; JGA Beaulieu
Constantes Les constantes sont … constantes Il y a trois façons de coder des constantes dans un programme: Littérale: une constante sans nom pour spécifier des données ‘a’ , 5, “Bonjour le Monde”, 3.25 Constantes Définies #define TAXE_DE_VENTE 0.07 // pas de ; Constantes de mémoire const float PI = 3.14159 Comme les variables, les constantes ont un type. Literals are normally not used other than to define a constant using the preprocessor directive or the memory constant definition. It is not a good coding practice because if there is a change for example in the tax rate, we would have to go everywhere in the code to find the information. Defined constants are replaced during the compilation where ever the name is encountered. Memory constants are variables that cannot be changed. They reserve space in memory. The compiler checks for the types in expressions. JGA Beaulieu
Constantes - bool Les constantes booléennes ont seulement deux valeurs 0 pour faux 1 pour vrai Il est possible d’utiliser les constantes true ou false Mais cela demande que vous incluez la bibliothèque stdbool.h JGA Beaulieu
Constantes - int Les constantes int: Si vous ne spécifiez pas un type, la constante est un signed int. Littérale Valeur Type 123 int -32000L -32,000 long int 76453LU 76,453 unsigned long int JGA Beaulieu
Constantes - float Les constantes float: Si vous ne spécifiez pas un type, la constante est un double. Littérale Valeur Type 1.0 double 3.1416F 3.1416 float 76453.1L 76,453.1 long double JGA Beaulieu
Constantes – characters & strings ‘\0’ /* caractère nulle */ ‘h’ /* le caractère h */ “” /* une string vide */ “h” /* une string contenant le caractère h */ “Bonjour le monde” Characters constants are enclosed in single quotes like variable assignments. Strings in double. There is a difference between the null character and the empty string. The null character is 00000000 and the empty string is nothing. JGA Beaulieu
Caractères spéciaux Null character ‘\0’ Alert ‘\a’ Backspace ‘\b’ Horizontal tab ‘\t’ New line ‘\n’ Vertical tab ‘\v’ Form feed ‘\f’ Carriage return ‘\r’ Single quote ‘\’’ Double quote ‘\”’ Backslash ‘\\’ Forouzan p. 40 JGA Beaulieu
Quiz Time Pourquoi utilisons nous des types dans un langage? Qu’est-ce qu’une variable A type is used as a “sanity” check to be performed by the compiler. A type defines the size of the data storage and the operation set defined on the type. A variable is a named memory location that has a type, hence it has a size and operations defined by its type. JGA Beaulieu