41
C++ 2ème cours Patrick Reuter maître de conférences http://www.labri.fr/~preuter/c++

C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Embed Size (px)

Citation preview

Page 1: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

C++

2ème cours

Patrick Reutermaître de conférences

http://www.labri.fr/~preuter/c++

Page 2: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Préchauffement/*

Programme écrit par Patrick Reuter*/

#include <iostream>

// Debut du programmeint main() {

float radius;float circ;float aire;

// Afficher ‘le radius à l’ecran’ std::cout << « Entrer un nombre! " << endl;

}

Page 3: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Proc 64bit

2,93 GHz : 2,93 Giga-Instructions par seconde

Page 4: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

• Mémoire de 512 MegaOctets

#0#1#2#3#4#5

...

#536.870.910#536.870.911

#1.000

...

Page 5: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++
Page 6: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

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, VRAIConexte 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 ».

Page 7: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

• Un octet peut prendre 28=256 valeurs différentes, entre 00000000 et 11111111.

• 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.

Page 8: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Déclaration de variables

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 - 3-4 tomates fraîches ou 1 cuil.à soupe de concentré de tomate - 3-4 pommes de terre - 3-4 navets - 3-4 carottes - 3-4 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 - 100 g de beurre ou 3 cuillères à soupe d'huile - sel

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 …..

Page 9: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

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

Nombre à virgule flottante avec double précision

caractère

Chaîne de caractère

VRAI/FAUX

Page 10: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Types de baseType binaire :

bool 1 bit FALSE, TRUE (FAUX, VRAI)

Nombre entiers :

unsigned char 1 Octet 0 à 255signed char 1 Octet -128 à 127unsigned int 4 Octets 0 à 4294967295 signed int 4 Octets -2147483648 à

+2147483647

Nombre à virgule flottante :

float 4 Octets -3.4*10-38 à 3.4*1038

double 8 Octets 1.8 * 10-308 à 1.8 * 10308

Rappel : 1 Octet = 8 bits = 28 possibilités4 Octets = 32 bits = 232 possibiltés

Page 11: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Octet (character)

• Qu’est-ce qu’on peut faire avec un octet ?

Code ASCII

(American Standard Code for Information Interchange)

95 printable characters

Page 12: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Octet - Code ASCII

Page 13: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

• Un octet peut prendre 28=256 valeurs différentes, entre 00000000 et 11111111.

• Octets non-signé :

• Par exemple :

1 1 0 0 0 1 0 0 128 64 32 16 8 4 2 1

Page 14: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

Octet signé de -128 jusqu’à 127Valeurs négatives : 1111 1111 = -1 à 1000 0000 = -128. Valeurs positives : 0000 0000 = 0 à 1111 1111 = 127

Calculer les valeurs négatives :- Prendre le complément- Ajouter 1

- Exemple: - 6501000001

Complément 10111110Ajouter 1 10111111

Page 15: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

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.

Page 16: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

1,4

0,001231 1,231*10^-3

-9866 -9,866*10^3

1,45 1,45*10^1

Page 17: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

1,4

0,001231 1,231*10^-3

-9866 -9,866*10^3

1,45 1,45*10^1

base b=10

mantisse m (entier, sans le ‘virgule’)

signe s {+1,-1}exposant e

exposant e

Page 18: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

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 mantisseSimple précision (float, 32 bits) 1 bit 8 bits 23 bitsDouble 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)

Page 19: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

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

Page 20: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

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 + 127 =

130 -> 10000010 binaire• Mantisse m = (11,25/23 – 1) * 223 = 3407872 ) =

01101000000000000000000 binaire

• Solution : 0 10000010 01101000000000000000000

Page 21: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

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.

Page 22: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

char lettre; ( 1 octet (byte) )

#0#1#2#3#4#5

...

#536.870.910#536.870.911

#1.000

...

Page 23: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

char lettre;

#0#1#2#3

lettre #4#5

...

#536.870.910#536.870.911

#1.000

...

Page 24: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoirechar lettre;lettre = ‘a’; ou bien lettre := 97;

#0#1#2#3

lettre #4#5

...

#536.870.910#536.870.911

#1.000

...

97

Page 25: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

int nombre;

#4#5

...

#536.870.910#536.870.911

#1.000

...

nombre #0nombre #1nombre #2nombre #3

Page 26: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoireint nombre; ( 4 byte (octets) )nombre = 125;

nombre #0

#4#5

...

#536.870.910#536.870.911

#1.000

...

0

00125

nombre #1nombre #2nombre #3

Page 27: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Définition de constantes

• const int A = 26;

• const float Pi = 3.14159

Page 28: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Mémoire vive

Proc 64bit

2,93 GHz : 2,93 Giga-Instructions par seconde

Page 29: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

• Mémoire de 512 MegaOctets

#0#1#2#3#4#5

...

#536.870.910#536.870.911

#1.000

...

# : adresse dans la mémoire vive

Page 30: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

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

// Nombre à virgule flottante avec double précision

// caractère

// Chaîne de caractère

// VRAI/FAUX

Page 31: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

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

Page 32: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

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 !!!

Page 33: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Type : tableaux (angl. ARRAY)#include <iostream>

int main(){

// Declaration de variablesint jours[12];int i, nombre;

{ Affectation des variables} jours[1] := 31;jours[2] := 28;…jours[12] := 31;

// initialisation} i:=1;nombre := 0;

// bouclewhile (i<=12){

if (jours[i] = 30) nombre := nombre + 1;

i := i +1;} // end whilestd::cout << "Il y a" << nombre << "de mois à 30 jours" << std::endl;

} // end main

Page 34: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Type : tableaux (angl. ARRAY)#include <iostream>

int main(){

// Declaration de variablesint jours[12];int i, nombre;

{ Affectation des variables} jours[1] := 31;jours[2] := 28;…jours[12] := 31;

// initialisation} i:=1;nombre := 0;

// bouclewhile (i<=12){

if (jours[i] = 30) nombre := nombre + 1;

i := i +1;} // end whilestd::cout << "Il y a" << nombre << "de mois à 30 jours" << std::endl;

} // end main

Jours[1] Jours[2] ... Jours[12] i nombre

3128

311

2

3

4

0

1….

Page 35: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

var jours : array[1..12] of byte; {12 octets}

#0

jours[1] #2000

...

#536.870.910#536.870.911

...

jours[3] #2002

jours[12] #2011

...

jours[2] #2001

...

Page 36: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

Jours[1]:=31; jours[2]:=30; …

#0

jours[1] #2000

...

#536.870.910#536.870.911

...

jours[3] #2002

jours[12] #2011

...

jours[2] #2001312831

31

Page 37: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

var jours : array[1..12] of byte; {12 octets}

#0

jours[1] #2000

...

#536.870.910#536.870.911

...

jours[3] #2002

jours[12] #2011

...

Occupe de la place successivedans la mémoire

jours[2] #2001312831

31

Page 38: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

char jours[12]; {12+1=13 octets}

#0

jours[1] #2000

...

#536.870.910#536.870.911

...

jours[index] #(2000+index-1)

jours[3] #2002

jours[12] #2011

...

Occupe de la place successivedans la mémoire

jours[2] #2001312831

31

Page 39: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

Organisation de la mémoire

int i;

jours[1] #2000

...

#536.870.910#536.870.911

...

jours[3] #2002

jours[12] #2011

...

jours[2] #2001312831

31

i #0

Page 40: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++

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

Page 41: C++ 2ème cours Patrick Reuter maître de conférences preuter/c++