Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Patrick Reuter maître de conférences http://www.labri.fr/~preuter/c++
C++ 2ème cours Patrick Reuter maître de conférences
2
Préchauffement /* Programme écrit par Patrick Reuter */
#include <iostream> // Debut du programme int main() { float radius; float circ; float aire; // Afficher ‘le radius à l’ecran’ std::cout << « Entrer un nombre! " << endl; }
3
Proc 64bit 2,93 GHz : 2,93 Giga-Instructions par seconde
4
Organisation de la mémoire
Mémoire de 512 MegaOctets # # ... #1.000 ... #5 #4 #3 #2 #1 #0
6
Organisation de la mémoire
Bit est une unité de mesure en informatique désignant la quantité élémentaire d'information représentée par un chiffre binaire. Un bit ne peut prendre que deux valeurs : 0 ou 1. Selon le contexte, numérique, logique (voir algèbre de Boole), ou électronique numérique, on les appelle « faux » et « vrai » ou « ouvert » et « fermé » : Contexte logique : FAUX, VRAI Conexte numérique : 0, 1 On note que la valeur 0 est associée à « ouvert » en électronique, car dans cet état le courant ne passe pas (on parle d'interrupteur ouvert ou de circuit ouvert). Le nombre de bits traités simultanément par un microprocesseur courant d'ordinateur a varié de 4 en 1973 à 64 en 2004. Le plus petit paquet traitable (ou adressable) est appelé byte (octet). Lorsqu'un microprocesseur est conçu pour traiter simultanément plusieurs bytes, on appelle « mot » le paquet de bytes. Les tailles de mot les plus courantes sont de 8, 16, 32 et 64 bits. On parlera alors par exemple de « microprocesseur 64 bits ».
7
Organisation de la mémoire
Un octet peut prendre 28=256 valeurs différentes, entre et 1 kilo-octet (ko ou Ko) = 210 octets = 1 024 octets (et pas 1 000 octets comme on pourrait le supposer), soit 2 à la puissance 10. 1 méga-octet (Mo) = 220 octets = 1 024 ko = 1 048 576 octets. 1 giga-octet (Go) = 230 octets = 1 024 Mo = 1 073 741 824 octets. 1 téra-octet (To) = 240 octets = 1 024 Go = 1 099 511 627 776 octets.
8
Déclaration de variables
Préparation : La veille, mettez les pois chiches dans un bol d'eau. Le jour même, roulez le couscous . Si vous utilisez du couscous roulé et séché, rincez-le à l'eau froide, égouttez-le et laissez-le gonfler pendant 30 mn. Coupez la viande en morceaux. Pelez les oignons et coupez-en 1 en morceaux. Lavez et passez les tomates à la moulinette. Mettez la viande dans une marmite et ajoutez les morceaux d'oignon, les tomates ou le concentré de tomate dilué dans 1 verre d'eau, l'huile, le poivre, le piment, la cannelle et du sel. Faites revenir ….. Comme dans un livre de recettes Ingrédients(pour 8-10 personnes) : - 1 kg de couscous roulé - 1 kg de mouton - 1 poignée de pois chiches - 2 oignons secs tomates fraîches ou 1 cuil. à soupe de concentré de tomate pommes de terre navets carottes courgettes - 1 tranche de courge - 4 cuillères à soupe d'huile - 1/2 cuillère à café de cannelle - 1 pincée de poivre noir - 1/2 cuillère à soupe de piment rouge doux ou de paprika - 1/2 cuillère à soupe de ras-el-hanout - 1 piment rouge sec g de beurre ou 3 cuillères à soupe d'huile - sel
9
Déclaration de variables
int compteur; float diviseur; char c; double precision; string nom; bool masculin; diviseur = 1.1; compteur = 1; Nom = ‘Gerhard’; Nombre entier Nombre à virgule flottante caractère Nombre à virgule flottante avec double précision Chaîne de caractère VRAI/FAUX
10
Types de base Type binaire : bool 1 bit FALSE, TRUE (FAUX, VRAI)
Nombre entiers : unsigned char 1 Octet 0 à 255 signed char 1 Octet à 127 unsigned int 4 Octets 0 à signed int 4 Octets à Nombre à virgule flottante : float 4 Octets -3.4* à 3.4*1038 double 8 Octets 1.8 * à 1.8 * 10308 Rappel : 1 Octet = 8 bits = 28 possibilités 4 Octets = 32 bits = 232 possibiltés
11
Octet (character) Qu’est-ce qu’on peut faire avec un octet ?
Code ASCII (American Standard Code for Information Interchange) 95 printable characters
12
Octet - Code ASCII
13
Organisation de la mémoire
Un octet peut prendre 28=256 valeurs différentes, entre et Octets non-signé : Par exemple :
14
Organisation de la mémoire
Octet signé de jusqu’à 127 Valeurs négatives : = -1 à = -128. Valeurs positives : = 0 à = 127 Calculer les valeurs négatives : Prendre le complément Ajouter 1 Exemple: - 65 Complément Ajouter
15
Nombre à virgule flottante
Float, single, double, real, .. Approximations rationnelles de nombres réels. Les nombres à virgule flottante possèdent un signe s (dans {-1, 1}) une mantisse entière m (parfois appelée significande) un exposant e. s * m * be - Avec b la base de représentation (parfois 2, 16, ou autre) - En faisant varier e, on fait « flotter » la virgule décimale. Généralement, m est d'une taille fixée.
16
0, ,231*10^-3 ,866*10^3 1,45 1,45*10^1 … 1,4
17
mantisse m (entier, sans le ‘virgule’)
exposant e signe s {+1,-1} exposant e 0, ,231*10^-3 ,866*10^3 1,45 1,45*10^1 … 1,4 base b=10 mantisse m (entier, sans le ‘virgule’)
18
Nombre à virgule flottante
Float, single, double, real, .. Approximations rationnelles de nombres réels. Les nombres à virgule flottante possèdent un signe s (dans {-1, 1}) une mantisse entière m (parfois appelée significande) un exposant e. s * m * be Avec b la base de représentation (parfois 2, 16, ou autre) signe exposant mantisse Simple précision (float, 32 bits) 1 bit 8 bits 23 bits Double précision(double,64 bits) 1 bit 11 bits 52 bits Simple précision (b=2): (-1)S * (1 + M ) * 2(E-127) Double précision (b=2): (-1)S * (1 + M ) * 2(E-1023)
19
Conversion d’un nombre x
Nombre x = (-1)s * m * 2e (base b = 2) signe s : 0 pour positive, 1 pour négative Exposant e: e = └log2 (x)┘ Mantisse m: m = (x/2e – 1) * 223
20
Conversion d’un nombre x
Nombre x = (-1)s * m * 2e (base b = 2) signe s : 0 pour positive, 1 pour négative Exposant e: e = └log2 (x)┘ Mantisse m: m = (x/2e – 1) * 223 Exemple : x = +11,25 Signe s = positive -> 0 binaire Exposant e = └log2 (11,25) ┘ = └3,49 ┘ = 3 = 130 -> binaire Mantisse m = (11,25/23 – 1) * 223 = ) = binaire Solution :
21
Nombre à virgule flottante
Float, single, double, real, .. Approximations rationnelles de nombres réels. Les nombres à virgule flottante possèdent un signe s (dans {-1, 1}) une mantisse entière m (parfois appelée significande) un exposant e. s * m * be Limitation : précision limitée qui se traduit par des arrondis qui peuvent s'accumuler de façon gênante.
22
Organisation de la mémoire
char lettre; ( 1 octet (byte) ) # # ... #1.000 ... #5 #4 #3 #2 #1 #0
23
Organisation de la mémoire
char lettre; # # ... #1.000 ... #5 lettre #4 #3 #2 #1 #0
24
Organisation de la mémoire
char lettre; lettre = ‘a’; ou bien lettre := 97; # # ... #1.000 ... #5 lettre #4 97 #3 #2 #1 #0
25
Organisation de la mémoire
int nombre; # # ... #1.000 ... #5 #4 nombre #3 nombre #2 nombre #1 nombre #0
26
Organisation de la mémoire
int nombre; ( 4 byte (octets) ) nombre = 125; # # ... #1.000 ... #5 #4 nombre #3 nombre #2 nombre #1 nombre #0 125
27
Définition de constantes
const int A = 26; const float Pi =
28
Mémoire vive Proc 64bit 2,93 GHz : 2,93 Giga-Instructions par seconde
29
Organisation de la mémoire
Mémoire de 512 MegaOctets # # ... #1.000 ... #5 #4 #3 #2 #1 #0 # : adresse dans la mémoire vive
30
Déclaration de variables
int counter; float diviseur; char c; double precision; string nom; bool masculin; diviseur = 1.1; compteur = 1; Nom = « Gerhard »; // Nombre entier // Nombre à virgule flottante // caractère // Nombre à virgule flottante avec double précision // Chaîne de caractère // VRAI/FAUX
31
Type : tableaux (angl. ARRAY)
Déclaration d’une variable de type tableau Défintion : type nom_du_tableau[taille]; Exemples : int jours[12]; int score[10]; int vies[10] structure de données la plus connu structure homogène, chaque élément est du même type de base
32
Type : tableaux (angl. ARRAY)
Déclaration d’une variable de type tableau Affectation : int jours[12]; nom_du_tableau[index] = valeur ; Exemples : jours[1] = 31; jours[2] = 28; … jours[12] = 31; jours[13] Erreur !!! jours[14] Erreur !!!
33
Type : tableaux (angl. ARRAY)
#include <iostream> int main() { // Declaration de variables int jours[12]; int i, nombre; { Affectation des variables} jours[1] := 31; jours[2] := 28; … jours[12] := 31; // initialisation} i:=1; nombre := 0; // boucle while (i<=12) if (jours[i] = 30) nombre := nombre + 1; i := i +1; } // end while std::cout << "Il y a" << nombre << "de mois à 30 jours" << std::endl; } // end main
34
Type : tableaux (angl. ARRAY)
#include <iostream> int main() { // Declaration de variables int jours[12]; int i, nombre; { Affectation des variables} jours[1] := 31; jours[2] := 28; … jours[12] := 31; // initialisation} i:=1; nombre := 0; // boucle while (i<=12) if (jours[i] = 30) nombre := nombre + 1; i := i +1; } // end while std::cout << "Il y a" << nombre << "de mois à 30 jours" << std::endl; } // end main Jours[1] Jours[2] ... Jours[12] i nombre 31 28 31 1 2 3 4 1 ….
35
Organisation de la mémoire
var jours : array[1..12] of byte; {12 octets} # # ... jours[12] #2011 ... ... jours[3] #2002 jours[2] #2001 jours[1] #2000 ... #0
36
Organisation de la mémoire
Jours[1]:=31; jours[2]:=30; … # # ... jours[12] #2011 31 ... jours[3] #2002 31 jours[2] #2001 28 jours[1] #2000 31 ... #0
37
Organisation de la mémoire
var jours : array[1..12] of byte; {12 octets} # # ... jours[12] #2011 31 ... Occupe de la place successive dans la mémoire jours[3] #2002 31 jours[2] #2001 28 jours[1] #2000 31 ... #0
38
Organisation de la mémoire
char jours[12]; {12+1=13 octets} # # ... jours[12] #2011 31 ... Occupe de la place successive dans la mémoire jours[3] #2002 31 jours[2] #2001 28 jours[1] #2000 31 ... #0 jours[index] #(2000+index-1)
39
Organisation de la mémoire
int i; # # ... jours[12] #2011 31 ... jours[3] #2002 31 jours[2] #2001 28 jours[1] #2000 31 ... i #0
40
Type : tableaux (angl. ARRAY)
structure de données la plus connu structure homogène, chaque élément est du même type de base occupe de la place successive dans la mémoire « random access » = accès aux différentes éléments se fait au coût égal
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.