Patrick Reuter maître de conférences

Slides:



Advertisements
Présentations similaires
Algorithmes et structures de données (avancées) Cours 1+2
Advertisements

Introduction au Langage C,C++
Patrick Reuter maître de conférences
Le langage C++ Les boucles.
Algorithmes et structures de données avancées Cours 4
Algorithmes et structures de données 9ème cours Patrick Reuter maître de conférences
Algorithmes et structures de données avancées 6ème cours Patrick Reuter
Conception de Site Webs dynamiques Cours 6
Algorithmes et structures de données avancées 5ème cours Patrick Reuter
Algorithmes et structures de données avancées Cours 6 Patrick Reuter
Algorithmes et structures de données 7ème cours
Algorithmes et structures de données avancés
Algorithmes et structures de données 3ème cours Patrick Reuter
Algorithmes et structures de données
Algorithmes et structures de données Cours 8
Algorithmes et structures de données Cours 3
Conception de Site Webs Interactifs Cours 3
Algorithmes et structures de données Cours 10 Patrick Reuter
Algorithmes et structures de données Cours 7
Algorithmes et structures de données Cours 1 Patrick Reuter
Conception de Site Webs Interactifs Cours 4
Algorithmes et structures de données 4ème cours
Algorithmes et structures de données 5ème cours
C++ 6ème cours Patrick Reuter maître de conférences
C++ 5ème cours Patrick Reuter maître de conférences
Algorithmes et structures de données Cours 9 Patrick Reuter
Algorithmes et structures de données avancées Cours 1+2+3
Algorithmes et structures de données Cours 2
Programmation Orientée Objet (POO)
M. BENJELLOUN : Info II Mohammed BENJELLOUN Service dInformatique Faculté Polytechnique de Mons
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
CYCLE 1 : Saisir – Afficher – Données Afficher du texte sur lécran 1- Rôle du printf() 2- Syntaxe du printf() 3- Exécution du printf() par le CPU.
Nous allons vous présenter: - Photoshop - Algorithme et programmation
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
CYCLE 1 : Saisir – Afficher – Données Déclarer des Constantes dans un programme 1- Rôle de la déclaration de constante 2- Syntaxe de la déclaration de.
Bases de la programmation en C++ 1 Les enchaînementsdinstruction Séquentiels. Exécutions dinstructions les unes à la suite des autres. Instructions séparées.
Les fichiers binaires en C++
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Programmation Initiation Aux Langages C et C++ (3) Bruno Permanne 2006.
1 PROTOTYPE PGC++ Vecteur_3D DÉFINITION. 2 class Vecteur_3D { private : float vx, vy, vz, vw; // Représentation en coordonnées homogènes. public : Vecteur_3D();
Un langage de programmation hybride
8PRO107 Éléments de programmation
8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux.
1 La récursion. Nous avons vu qu'un programme est constitué d'un ensemble de fonctions. Il est possible pour une fonction donnée d'appeler une autre fonction.
Les pointeurs en C. valeur : main () { float valeur; void* pointeur; }
Introduction au C++ héritage / polymorphisme
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 4 Polymorphisme II.
Procédures et fonctions
Structures de données IFT-10541
Formation C++. Hello World ! #include /* Commentaire sur plusieurs lignes */ int main() { //Affiche hello world std::cout
La librairie assert.h.
Structures de données IFT Abder Alikacem Semaine 2 Tests sur les pointeurs Département d’informatique et de génie logiciel Édition Janvier 2009.
Faculté Polytechnique de Mons
L’essentiel du langage C
B.Shishedjiev - Entrée/sortie1 Entrée-sortie simple Faire le programme d’écouter et parler.
Sous-programmes.
B.Shishedjiev - TD11 Travaux dirigés 1 Expressions et affectation Entrée-sortie.
SIF-1053 Architecture des ordinateurs
Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Les opérateurs L’amitié Les opérateurs Introduction
Les surcharges d'opérateurs
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Conception de Programmes - IUT de Paris - 1ère année – Cours 6 - Les opérateurs L’amitié Les opérateurs –Introduction –Surcharge par fonction.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
Langage de programmation
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
Int 10. Int 6.
Transcription de la présentation:

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

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; }

Proc 64bit 2,93 GHz : 2,93 Giga-Instructions par seconde

Organisation de la mémoire Mémoire de 512 MegaOctets #536.870.911 #536.870.910 ... #1.000 ... #5 #4 #3 #2 #1 #0

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

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

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

Types de base Type binaire : bool 1 bit FALSE, TRUE (FAUX, VRAI) Nombre entiers : unsigned char 1 Octet 0 à 255 signed char 1 Octet -128 à 127 unsigned 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és 4 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’à 127 Valeurs 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: - 65 01000001 Complément 10111110 Ajouter 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.

0,001231 1,231*10^-3 -9866 -9,866*10^3 1,45 1,45*10^1 … 1,4

mantisse m (entier, sans le ‘virgule’) exposant e signe s {+1,-1} exposant e 0,001231 1,231*10^-3 -9866 -9,866*10^3 1,45 1,45*10^1 … 1,4 base b=10 mantisse m (entier, sans le ‘virgule’)

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)

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) ) #536.870.911 #536.870.910 ... #1.000 ... #5 #4 #3 #2 #1 #0

Organisation de la mémoire char lettre; #536.870.911 #536.870.910 ... #1.000 ... #5 lettre #4 #3 #2 #1 #0

Organisation de la mémoire char lettre; lettre = ‘a’; ou bien lettre := 97; #536.870.911 #536.870.910 ... #1.000 ... #5 lettre #4 97 #3 #2 #1 #0

Organisation de la mémoire int nombre; #536.870.911 #536.870.910 ... #1.000 ... #5 #4 nombre #3 nombre #2 nombre #1 nombre #0

Organisation de la mémoire int nombre; ( 4 byte (octets) ) nombre = 125; #536.870.911 #536.870.910 ... #1.000 ... #5 #4 nombre #3 nombre #2 nombre #1 nombre #0 125

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 #536.870.911 #536.870.910 ... #1.000 ... #5 #4 #3 #2 #1 #0 # : 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 // caractère // Nombre à virgule flottante avec double précision // 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 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

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

Organisation de la mémoire var jours : array[1..12] of byte; {12 octets} #536.870.911 #536.870.910 ... jours[12] #2011 ... ... jours[3] #2002 jours[2] #2001 jours[1] #2000 ... #0

Organisation de la mémoire Jours[1]:=31; jours[2]:=30; … #536.870.911 #536.870.910 ... jours[12] #2011 31 ... jours[3] #2002 31 jours[2] #2001 28 jours[1] #2000 31 ... #0

Organisation de la mémoire var jours : array[1..12] of byte; {12 octets} #536.870.911 #536.870.910 ... 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

Organisation de la mémoire char jours[12]; {12+1=13 octets} #536.870.911 #536.870.910 ... 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)

Organisation de la mémoire int i; #536.870.911 #536.870.910 ... jours[12] #2011 31 ... jours[3] #2002 31 jours[2] #2001 28 jours[1] #2000 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