Upload
celestine-pereira
View
113
Download
2
Embed Size (px)
Citation preview
C++
2ème cours
Patrick Reutermaître de conférences
http://www.labri.fr/~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;
}
Proc 64bit
2,93 GHz : 2,93 Giga-Instructions par seconde
Organisation de la mémoire
• Mémoire de 512 MegaOctets
#0#1#2#3#4#5
...
#536.870.910#536.870.911
#1.000
...
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 ».
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.
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 …..
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
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
Octet (character)
• Qu’est-ce qu’on peut faire avec un octet ?
Code ASCII
(American Standard Code for Information Interchange)
95 printable characters
Octet - Code ASCII
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
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
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.
1,4
0,001231 1,231*10^-3
-9866 -9,866*10^3
1,45 1,45*10^1
…
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
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)
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
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
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.
Organisation de la mémoire
char lettre; ( 1 octet (byte) )
#0#1#2#3#4#5
...
#536.870.910#536.870.911
#1.000
...
Organisation de la mémoire
char lettre;
#0#1#2#3
lettre #4#5
...
#536.870.910#536.870.911
#1.000
...
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
Organisation de la mémoire
int nombre;
#4#5
...
#536.870.910#536.870.911
#1.000
...
nombre #0nombre #1nombre #2nombre #3
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
Définition de constantes
• const int A = 26;
• const float Pi = 3.14159
Mémoire vive
Proc 64bit
2,93 GHz : 2,93 Giga-Instructions par seconde
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
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
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
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 !!!
…
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
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….
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
...
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
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
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
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
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