21
Programmation Un aveniruneformation , Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Embed Size (px)

Citation preview

Page 1: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Programmation

Un avenir une formation,

Initiation Aux Langages C et C++ (2)

Bruno Permanne 2006

Page 2: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

ProgrammationSommaire

Bruno Permanne 2006

ProgrammationInstructions de bas niveauManipulation de la mémoirePréprocesseurLes fonctions en C++La portée des variablesProgrammation avancée C++

Page 3: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Instructions de bas niveauOpérateurs de manipulation de bits << >> & | ~ ^

Retour sommaireBruno Permanne 2006

Instructions Adresse

Mémoire

Contenu

(décimal)

Contenu

(hexa)

Contenu

(binaire)

unsigned char a; 0x34FE (a) ? ? ?

a=0x54; 0x34FE 84 0x54 0101 0100

a>>=2; 0x34FE (a) 21 0x15 0001 0101

unsigned char b=240,c;

c=a&b;

0x34FE (a)

0x34FF (b)

0x3500 (c)

21

240

16

0x15

0xF0

0x10

0001 0101

1111 0000

0001 0000

c^=0xFF;

ou c~=c;

0x34FE (a)

0x34FF (b)

0x3500 (c)

21

240

239

0x15

0xF0

0xEF

0001 0101

1111 0000

1110 1111

c=a&1|0x30; 0x34FE (a)

0x34FF (b)

0x3500 (c)

21

240

49

0x15

0xF0

0x31

0001 0101

1111 0000

0011 0001

a=(char) (b==240); 0x34FE (a)

0x34FF (b)

0x3500 (c)

1 (true)

240

49

0x01

0xF0

0x31

0000 0001

1111 0000

0011 0001

Page 4: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Manipulation de la mémoireRappel: Le code ASCII

Retour sommaireBruno Permanne 2006

Page 5: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Manipulation de la mémoireOpérateurs d'accès & *

Retour sommaireBruno Permanne 2006

Instructions Adresse

Mémoire

Contenu

char a; 0x34FE (a) ?

a=0x54; 0x34FE 0x54

char *p; 0x34FE (a)

0x34FF (p)

0x3500

0x54

?

?

p=&a; 0x34FE (a)

0x34FF (p)

0x3500

0x54

0x34

0xFE

*p=0x33; 0x34FE (a)

0x34FF (p)

0x3500

0x33

0x34

0xFE

• Déclaration d'un octet• Affectation d'une valeur• Déclaration d'un pointeur sur un octet

• Recopie de l'adresse de a dans le pointeur p

• Modification du contenu de la mémoire à l'adresse pointée par p

Page 6: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Manipulation de la mémoire

Retour sommaireBruno Permanne 2006

Instructions Adresse

Mémoire

Contenu

char a; 0x34FE (a) ?

a=0x54; 0x34FE 0x54

char *p; 0x34FE (a)

0x34FF (p)

0x3500

0x54

?

?

char b;

p=0x3501;

*p=234;

0x34FE (a)

0x34FF (p)

0x3500

0x3501 (b)

0x54

0x35

0x01

0xEA

p--;

*p=0;

0x34FE (a)

0x34FF (p)

0x3500

0x3501 (b)

0x33

0x34

0x00

0xEA

• Déclaration d'un octet• Affectation d'une valeur• Déclaration d'un pointeur sur un octet

• Affectation directe d'une l'adresse dans le pointeur p• modification de la case mémoire pointée• Modification du contenu de la mémoire à l'adresse pointée par p-1

Opérateurs d'accès & *

Page 7: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Manipulation de la mémoire

Retour sommaireBruno Permanne 2006

Instructions Adresse

Mémoire

Contenu

int a=0x54FE; 0x34FE (a)

0x34FF

0x54

0xFE

int *pa;

pa=&a;

0x34FE (a)

0x34FF

0x3500 (pa)

0x3501

0x54

0xFE

0x34

0xFE

*pa=0; 0x34FE (a)

0x34FF

0x3500 (pa)

0x3501

0x00

0x00

0x34

0xFE

int **pb;

*pb=&pa;

0x3500 (pa)

0x3501

0x3502 (pb)

0x3503

0x34

0xFE

0x35

0x00

• Déclaration d'un entier initialisé •Déclaration d'un pointeur sur un entier et affectation à l'adresse de a

• Remise à zéro de l'entier pointé par pa

•Déclaration d'un pointeur sur un pointeur.

Opérateurs d'accès & *

Page 8: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Manipulation de la mémoire

Retour sommaireBruno Permanne 2006

Instructions Adresse

Mémoire

Contenu

char b=4; 0x34FE (a)

0x34FF (p)

0x3500

0x3501 (b)

0x33

0x34

0xFE

0x04

b=*(p+2); 0x34FE (a)

0x34FF (p)

0x3500

0x3501 (b)

0x33

0x34

0xFE

0xFE

a=*p-3; 0x34FE (a)

0x34FF (p)

0x3500

0x3501 (b)

0xFE

0x34

0xFE

0xFB

• Déclararation et initialisation d'un octet b

• la variable b reçoit la contenu de la case mémoire pointée par l'adresse stockée par la pointeur p augmentée de 2• Modification du contenu de la mémoire à l'adresse pointée par p

Opérateurs d'accès & *

Page 9: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Tableaux, chaînes de caractères et pointeurs

Retour sommaireBruno Permanne 2006

Instructions Adresse

Mémoire

Contenu

char a[3]=

{10,0x34,'0');

0x34FE (a)

0x34FF

0x3500

0x0A

0x34

0x30

char b,*p; p=&a; b=a[2];

ou b=*(p+2);

ou p+=2; b=*p;

0x34FE (a)

0x34FF

0x3500

0x3501 (b)

0x30

0x34

0x30

0x30

string s="OK";

ou

char s[]="OK";

ou

char s[]=

{'O','K','\0');

ou char s[3];

s[0]='O';

s[1]='K';

s[2]='\0';

0x3502 (s)

0x3503

0x3504

0x3505

0x4F ('O')

0x4B ('K')

0x00 ('\0')

?

• Déclaration d'un tableau d'octets initialisé

•Déclaration d'un octet, d'un pointeur sur a et accès aux cases du tableau

• Déclaration dune chaine de caractère string pour le C++

•Différents styles de déclaration

•Ne pas oublier le caractère nul '\0' à la fin de la chaine

Manipulation de la mémoire

Page 10: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Directives de compilation #include et #define

Retour sommaireBruno Permanne 2006

Préprocesseur

Directive Action

#include <iostream> Inclure à cet endroit le fichier source iostream du C++ standard

#include "MonEntete.h" Inclure à cet endroit un fichier que j'ai écrit et qui se trouve dans le répertoire courant du projet

#define PI 3.14159

#define S(r) PI*r*r

Définition du symbole PI et S(r) (comportant un paramètre) qui sera remplacé avant la compilation dans le programme source

s1=PI*r*r;

s2=S(r);

s1=3.14159*r*r;

s2=3.14159*r*r;

Au moment de l'écriture,

Après le passage du préprocesseur et avant la compilation

Page 11: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Définition des fonctions (1)

Retour sommaireBruno Permanne 2006

Directive Action

// fichier simple.hpp

#include <csdtlib>

#include <iostream>

using spacename std;

void simple(void);

void simple(void)

{

cout << "Bonjour" << endl;

}

Fichier des bibliothèques utilisées

Prototype d'une fonction sans arguments et sans valeur de retourdéfinition de la fonction, c'est un simple sous programme

// fichier simple.cpp

#include "simple.hpp"

main()

{

simple();

}

Programme principal complet avec appel de la fonction simple()

Les fonctions en C++

Page 12: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Définition des fonctions (2)

Retour sommaireBruno Permanne 2006

Directive Action

// fichier simple2.hpp

#include <csdtlib>

#include <iostream>

using spacename std;

void simple2(string);

void simple2(string s)

{

cout << s << endl;

}

Fichier des bibliothèques utilisées

Prototype d'une fonction avec un argument et sans valeur de retourdéfinition de la fonction

// fichier simple2.cpp

#include "simple2.hpp"

main()

{

simple2("Bonjour");

}

Programme principal complet avec appel de la fonction simple2()

Les fonctions en C++

Page 13: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Définition des fonctions (3)

Retour sommaireBruno Permanne 2006

Directive Action

// fichier mult.hpp

#include <csdtlib>

using spacename std;

int mult(int, int);

int mult(int a, int b)

{

return a*b;

}

Fichier des bibliothèques utilisées

Prototype d'une fonction avec un argument et une valeur de retourdéfinition de la fonction

// fichier mult.cpp

#include <iostream>

#include "mult.hpp"

main()

{ int r=10;

cout << mult(r, 3);

}

Programme principal complet avec appel de la fonction mult()

Les fonctions en C++

Page 14: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Définition des fonctions (4)

Retour sommaireBruno Permanne 2006

Directive Action

// fichier mult.hpp

#include <csdtlib>

using spacename std;

void mult(int, int, int*);

void mult(int a, int b, int *s)

{

*s=a*b;

}

Fichier des bibliothèques utilisées

Prototype d'une fonction avec un argument et pas de valeur de retourdéfinition de la fonction avec passage d'un pointeur sur la variable résultat

// fichier mult.cpp

#include <iostream>

#include "mult.hpp"

main()

{ int s, r=10; mult(r,3,&s);

cout << s;

}

Programme principal complet avec appel de la fonction mult()Notez le passage de l'adresse de la variable résultat par &s

Les fonctions en C++

Page 15: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Définition des fonctions (5)

Retour sommaireBruno Permanne 2006

Directive Action

// fichier mult.hpp

#include <csdtlib>

using spacename std;

void mult(int, int, int&);

void mult(int a, int b, int &s)

{

s=a*b;

}

Fichier des bibliothèques utilisées

Prototype d'une fonction avec un argument et pas de valeur de retourdéfinition de la fonction avec passage d'une référence sur la variable résultat

// fichier mult.cpp

#include <iostream>

#include "mult.hpp"

main()

{ int s, r=10; mult(r,3,s);

cout << s;

}

Programme principal complet avec appel de la fonction mult()Notez le passage de l'adresse de la variable résultat sans le &

Les fonctions en C++

Page 16: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

La portée des variables (1)

Retour sommaireBruno Permanne 2006

Directive Action

// fichier portee.hpp

#include <csdtlib>

#include <iostream>

using spacename std;

int x=5:

void fonc(void);

void fonc(void)

{

cout << x;

}

Définition de x globale au fichier portee.hpp

Affiche la valeur 5

// fichier portee.cpp

#include "portee.hpp"

main()

{

cout << x;

}

Affiche une erreur car la variable x est inconnue du fichier principal portee.cpp

Les fonctions en C++

Page 17: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

La portée des variables (1)

Retour sommaireBruno Permanne 2006

Directive Action

// fichier portee.hpp

#include <csdtlib>

#include <iostream>

using spacename std;

extern int x=5:

void fonc(void);

void fonc(void)

{

cout << x;

}

Définition de x globale à tous les fichiers du projets

Affiche la valeur 5

// fichier portee.cpp

#include "portee.hpp"

extern int x;

main()

{

cout << x;

}

la variable extern doit être reprécisée ici (sans valeur !)Affiche la valeur 5

Les fonctions en C++

Page 18: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

La portée des variables (2)

Retour sommaireBruno Permanne 2006

Directive Action

// fichier portee.hpp

#include <csdtlib>

#include <iostream>

using spacename std;

int x=5:

void fonc(void);

void fonc(void)

{ int x=10;

cout << x;

}

Définition de x globale au fichier portee.hpp

Affiche la valeur 10

// fichier portee.cpp

#include "portee.hpp"

main()

{

int x=1;

cout << x;

}

Affiche la valeur 1

Les fonctions en C++

Page 19: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Enumérations enum

Retour sommaireBruno Permanne 2006

Directive Action

#define PRINTEMPS 0

#define ETE 1

#define AUTOMNE 2

#define HIVER 3

Utilisation du #define classique

#enum {PRINTEMPS,ETE,AUTOMNE,HIVER};

L'énumération est plus élégante

enum SAISON {PRINTEMPS,ETE,AUTOMNE,HIVER};

Elle peut être nommée

SAISON saison_2=HIVER; Nouveau type légal en C++ en fait SAISON est un int

Programmation avancée C++

Page 20: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

types et structures struct

Retour sommaireBruno Permanne 2006

Programmation avancée C++

Directive Action

struct complexe

{

double re; double im;

};

en C++ une structure est un nouveau type, pas en C !

complexe addcomp(complexe, complexe);

complexe addcomp(complexe x, complexe y)

{

complexe res;

res.re=x.re+y.re; res.im=x.im+y.im;

return res;

}

fonction addition de nombres complexes

prototype obligatoireLe '.' permet l'accès aux membres de la structure

complexe m,n,somme;

somme=addcomp(m,n);

Appel de la fonction

Page 21: Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

Programmation

Un avenir une formation,

Fin de la deuxième partie

Bruno Permanne 2006