Académique Documents
Professionnel Documents
Culture Documents
#include <iostream>
int main()
{
int N = 0, i = 0, nb = 0, d = 0;
bool est_premier;
cout << "Tapez la valeur de N : ";
cin >> N;
int nbrp = 1;
for (i = 2; i<N; i++)
{
/*Ecrire un programme qui teste si i est premier*/
est_premier = true;
d = 2;
while (est_premier && d * d <= i)
if (i %d == 0)
est_premier = false;
else
d++;
if (est_premier == true)
{
nb++;
cout << "Nombre premier " << nbrp << " = " << i << endl;
nbrp++;
}
}
return 0;
}
Librairies C++
Fichier Exécutable
(Programme
Exécutable) prog.exe
Code ou programme
écrit en C ou C++
Compilation et lien
Non
Réussi ?
Oui
Exécution et test du
programme
#include<iostream>
using namespace std;
int main(){
cout<< "Bonjour le monde";
return 0;
}
8
Taille
Type Exemple de contenu
(Octet)
A. Types de base
short (Petit nombre entier) 2 Nombre entier compris entre -32 768 et 32 767. Ex : short nbr = 12;
Nombre entier compris entre -2 147 483 648 à 2 147 483 647.
long (Grand Nombre entier) 4
Ex : long nbr1 = 2458948963;
Nombre réel en double précision : +/- 1.7e +/- 308 (~15 digits).
double (Grand nombre réel) 8
Ex : double nbr4 = 24e69;
B. Autres types
Correspond à double mais avec une précision un peu plus poussée (~18
long double (Grand Nombre
12 digits).
décimal)
Ex : long double nbr5 = 39e209;
9
Il faut savoir qu’une bonne utilisation des variables conduit à une optimisation de la
mémoire (RAM) de l’ordinateur de sorte à lui permettre de pouvoir effectuer d’autres
traitements. Il est évident que cet état des choses ne peut se remarquer lorsque l’on manipule
des petits programmes (Addition des deux nombres, calcul du produit des trois nombres, etc.),
mais lorsque l’on doit faire un programme complexe avec beaucoup des fonctionnalités, cet
aspect est très capital.
Il est possible de pouvoir connaître la taille occupée en mémoire par un type quelconque
en utilisant le mot clef sizeof (En minuscule).
Exemple 3 : Utilisation de l’instruction sizeof
#include<iostream>
using namespace std;
int main(){
cout<< "Taille de bool : " << sizeof(bool) << endl;
cout<< "Taille de char : " << sizeof(char) << endl;
cout<< "Taille de short : " << sizeof(short) << endl;
cout<< "Taille de long : " << sizeof(long) << endl;
cout<< "Taille de int : " << sizeof(int) << endl;
cout<< "Taille de float : " << sizeof(float) << endl;
cout<< "Taille de long double : " << sizeof(long double) << endl;
cout<< "Taille de double : " << sizeof(double) << endl;
cout<< "Taille de string : " << sizeof(string) << endl;
return 0;
}
10
- Base 8 (Octale) : Avec les chiffres de 0 à 7. Les nombres octaux doivent être précédés
d’un 0 (qui indique la base). Le signe ’-’ ne peut pas être utilisé.
Exemple 6 : Représentation valeurs Octales
01, 0154
On peut donner un caractère non accessible au clavier en donnant son code en octal,
précédé du caractère '\'. Par exemple, le caractère 'A' peut aussi se noter '\101' (Ex : cout<<
endl << "J'affiche la valeur de A en utilisant l'octal = " << "\101";). Cette
notation est semblable à la celle des nombres entiers en octal, et que le ′0′ initial est
simplement remplacé par un ′\′. Il est aussi possible de noter les caractères avec leur code en
hexadécimal, à l′aide de la notation « \xNN » (Ex : cout<< endl << "J'affiche un
caractere special en utilisant l’hexadecimal : " << "\x25";), où NN est le code
hexadécimal du caractère. Enfin, il existe des séquences d′échappement particulières qui
permettent de coder certains caractères spéciaux plus facilement. Les principales séquences
d’échappement sont les suivantes :
A. Opérateurs arithmétiques
01 + Addition
Comme 5%2 = 1, car c’est le reste entier que l’on obtient après
division de 5 par 2.
B. Opérateurs de comparaison
C. Opérateurs logiques
11 && ET logique
12 || OU logique
17 == Egalité logique
18 != Différence logique
D. Opérateurs d’affectation
19 = Affectation valeur
F. Autres opérateurs
#include<iostream>
using namespace std;
int main(){
cout<< "Bonjour le monde";
//Ceci est un commentaire sur une ligne
/*
Ceci est commentaire
sur plusieurs lignes
*/
return 0;
}
n’importe quel type que nous avons vu précédemment). L’initialisation d’une variable porte
le nom d’affectation d’une valeur à la variable. Ainsi lorsque l’on affecte une valeur à une
variable, on lui donne une valeur.
Exemple 10 : Affectation des variables
#include<iostream>
using namespace std;
int main(){
int entier = 2147483647;
long double ld = -1.7e30;
float monNombre = 2.e21;
char caractere = 't';
short nbr = 12;
long nbr2 = 214748364;
float nbr3 = 3.142857;
int nombre_premier;
double nbrDouble = 24e69;
string nom_famille = "Jean de Dieu Bokanga";
return 0;
}
L’affectation d’une variable s’effectue principalement par l’utilisation du signe '=' ou du
signe égale. Lorsque dans une affectation intervient des opérateurs, on parle à ce moment
d’expression. Les opérateurs sont des signes qui permettent d’effectuer au moins une
opération voulue.
Exemple 11 : Utilisation de l’incrémentation/Décrémentation
#include<iostream>
using namespace std;
int main(){
int compteur = 10;
cout<<"La valeur de compteur est egale a :"<<compteur<<endl;//Affiche 10
cout<<"La valeur de compteur est egale a :"<<compteur++<<endl;//Affiche 10
cout<<"La valeur de compteur est egale a :"<<compteur<<endl;//Affiche 11
cout<<"La valeur de compteur est egale a :"<<++compteur<<endl;//Affiche 12
cout<<"La valeur de compteur est egale a :"<<compteur++<<endl;//Affiche 12
cout<<"La valeur de compteur est egale a :"<<compteur<<endl;//Affiche 13
cout<<"La valeur de compteur est egale a: "<<compteur--<<endl;//Affiche 13
cout<<"La valeur de compteur est egale a :"<<compteur<<endl;//Affiche 12
cout<<"La valeur de compteur est egale a :"<<--compteur<<endl;//Affiche 11
return 0;
}
15
Symbole Signification
== Est égale à
< Est inférieur à
> Est supérieur à
<= Est inférieur ou égal à
>= Est Supérieur ou égal à
!= Est différent de
! Négation (Not)
III.2. TYPE DES CONDITIONS
On distingue trois types des conditions en C++ (Condition Simples, conditions
Alternatives et conditions Imbriquées.
#include<iostream>
using namespace std;
int main(){
if (condition) {
//Instructions
}
//Bloc d’instruction facultatif
else {
//Instructions facultatives
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
bool reussite = false;
if (!reussite) {
cout<< "Tu as un t\x82l\x82phone IPhone 4S:" << endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
int nombre = 0;
cout<< "Saisi un nombre : ";
cin >> nombre;
if (nombre % 2 == 0) {
cout<< "Le nombre " << nombre << " est pair" << endl;
}
else {
cout<< "Le nombre " << nombre << " est impair" << endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
int nombre = 0;
cout<< "Saisi un nombre : ";
cin >> nombre;
(nombre % 2 == 0) ? cout<< "Le nombre " << nombre << " est pair" << endl :
cout<< "Le nombre " << nombre << " est impair" << endl;
return 0;
}
#include<iostream>
using namespace std;
int main(){
if (choix1) {
//Instructions si choix1 vrai
}
else if (choix2) {
//Instructions si choix 2 vrai
}
else if (choix3) {
//Instructions si choix 3 vrai
}
….
else if (choixN) {
//Instructions si choix N vrai
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
char choix = ' ';
cout<< "Entrez votre choix : ";
cin >> choix;
if (choix == 'N' || choix == 'n') {
cout<< "C'est le Nord";
} else if (choix == 'S' || choix == 's') {
cout<< "C'est le Sud";
} else if (choix == 'E' || choix == 'e') {
cout<< "C'est l'Est";
} else if (choix == 'O' || choix == 'o') {
cout<< "C'est l'Ouest";
} else
cout<< "Echec de choix";
return 0;
}
20
A chaque fois que l’on utilise plusieurs else if qui se suivent et qui évaluent la même
variable, il est préférable d’utiliser la clause switch...case. Ainsi, nous allons reprendre le
programme précédent mais en utilisant désormais la nouvelle clause.
Ce qu’il faut retenir est que, le switch... évalue une seule et même variable pour
différent cas (case) qui seront vérifiés, et ne considère que le cas où la condition évaluée est
vraie. Pour séparer les différents cas, on utilise le mot clé break. Enfin, si aucun des cas ne
renvoie une valeur vraie, la clause ira directement chercher les instructions situées dans
default et vas les exécuter (Néanmoins si vous l’avez placé dans la clause switch...case).
#include<iostream>
using namespace std;
int main(){
char choix = ' ';
cout<< "Entrez votre choix : ";
cin >> choix;
switch (choix) {
case 'N':
case 'n': {
cout<< "C'est le Nord";
break;
}
21
case 'S':
case 's': {
cout<< "C'est le Sud";
break;
}
case 'E':
case 'e': {
cout<< "C'est l'Est";
break;
}
case 'O':
case 'o': {
cout<< "C'est l'Ouest";
break;
} default: {
cout<< "Echec de choix";
}
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
if (choix) {
//Vérification autre condition
if (autre_choix) {
//Instructions pour autre condition
…..
}
}
return 0;
}
au clavier, de même que le nombre d’échec aux cours. Avant de saisir le nombre d’échec, on
devra absolument vérifier que le pourcentage et supérieur à 50. Pour tout échec ou
pourcentage inférieur à 50, on affichera "DESOLE" et on ne demandera pas le nombre d’échec
aux cours ; car, on considère que l’étudiant a échoué.
#include<iostream>
using namespace std;
int main(){
int pourcentage = 0, echec = 0;
cout<< "Entrez votre pourcentage : ";
cin >> pourcentage;
if (pourcentage > 50) {
cout<< "Entrez le nombre d'echecs : ";
cin >> echec;
cout<< endl;
if (echec <= 2) {
cout<< "Je peux commencer mon TFC" << endl;
}
} else {
cout<< "DESOLE";
}
return 0;
}
Ex11. Ecrire un programme qui permet de simuler le fonctionnement d’une calculatrice, tout
en sachant que vous devez commencer par saisir le premier nombre, puis le second et enfin le
signe. Le signe peut être '+' pour l’addition, '-' pour la soustraction, '*' pour la
multiplication et enfin '/' pour la division. En cas de division par zéro, un message d’erreur
s’affichera en disant "La division par zéro est impossible". Après chaque opération, le
résultat sera affiché à l’utilisateur.
Ex12. Ecrire un programme qui permet de saisir un nombre entier au clavier, et qui affiche
"Le nombre est positif" si le nombre est supérieur à zéro ; et qui affiche "Le nombre
affichera "L’eau est chaude". Enfin, pour toute température ne respectant aucune de celles
qui sont spécifiées ici – haut, le programme affichera "Température non autorisée".
24
#include<iostream>
using namespace std;
int main(){
int nombre = 245;
while (nombre < 500) {
cout<<"Le nombre "<<nombre<<" est inf\x82rieur \x85 500"<< endl;
nombre += 30;
}
cout<< "On quitte la boucle" << endl;
return 0;
}
#include<iostream>
using namespace std;
int main(){
int temperature = 10;
while (temperature > -30) {
cout<<"La temp\x82rature "<<temperature<<" est \x82levee"<<endl;
temperature--;
}
cout<<"La temp\x82rature "<<temperature<<" est maintenant basse"<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main(){
while (true) {
cout<< "Je suis dans une boucle infinie" << endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
int p = 1, i = 1;
do {
p = p * i;
i = i + 1;
cout<< "p = " << p << " et i = " << i << endl;
} while (i != 10);
return 0;
}
28
#include<iostream>
using namespace std;
int main(){
double n1, n2;
bool continuer = false;
char reponse = ' ';
do {
cout<< "Saisi un reel : ";
cin >> n1;
cout<< "Saisi un second reel : ";
cin >> n2;
cout<<"Le produit de "<<n1<<" et de "<<n2<< " est " << n1*n2 << endl;
cout<< "Voulez-vous continuer (O/N) ?";
cin >> reponse;
cout<< endl;
switch (reponse) {
case 'O':
case 'o':
continuer = true;
break;
case 'N':
case 'n':
continuer = false;
break;
default:
cout<<"\nLa saisie est invalide, veuillez recommencer !!"<<endl;
continuer = true;
break;
}
} while (continuer);
return 0;
}
29
#include<iostream>
using namespace std;
int main(){
for (int i = 0; i < 10; i++) {
cout<< "Je suis content\n";
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
for (int i = 0; i < 20; i++) {
cout<< "Affichage de " << i << endl;
if (i == 12) break;
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
for (int i = 0; i < 20; i++) {
if (i == 12) continue;
else cout<< "Affichage de " << i << endl;
}
return 0;
}
31
#include<iostream>
using namespace std;
int main(){
erreur:{
cout<< "\nErreur, pas de division par z\x82ro\n";
}
Ex15. Afficher à l’écran ISIG/GOMA autant de fois que l’utilisateur l’aura spécifié au
clavier.
Ex16. Ecrire un programme qui permet d’afficher les tables de multiplications des nombres
de 0 à 10.
Ex17. Ecrire un programme qui permet d’afficher la table de multiplication des nombres de 1
à n qui sera spécifiée par l’utilisateur.
Ex18. Ecrire un programme qui calcul le factoriel d’un nombre entier saisi au clavier. Le
factoriel de 0 donnera 1 et les nombres négatifs seront refusés.
Ex19. Ecrire un programme qui affichera "Je suis en train de programmer" tant que
l’utilisateur aura saisi un nombre compris entre 27 et 53. Et qui dans le cas contraire affichera
10 fois "Je dois quitter" et on arrêtera le programme.
Ex20. Ecrire un programme qui affichera "Je suis en train de programmer" tant que
l’utilisateur aura saisi un nombre compris entre 10 et 60, sachant qu’à chaque itération,
l’utilisateur devra répondre 'O' ou 'o' à un message qui lui demandera s’il veut continuer.
S’il répond 'N' ou 'n' à ce message, le programme s’arrêtera automatiquement. Pour toute
réponse invalide, on affichera le message d’erreur "Saisie invalide, recommencez !!!", et
le programme recommencera.
Ex21. Calculer la somme des n premiers termes de la série harmonique «, c’est-à-dire la
somme : 1 + 1/2 + 1/3 + 1/4 + ..... + 1/n. La valeur de n sera saisie au préalable.
33
int tab[5];
tab[0] = 1;
tab[1] = 2;
tab[2] = 3;
tab[3] = 4;
tab[4] = 5;
Exemple 32. Déclaration d’un tableau à deux dimensions sans affectation immédiate
Exemple 33. Déclaration d’un tableau à deux dimensions avec affectation immédiate
NB : Il faudra souligner que pour les tableaux en C++, lorsque vous dépassez la taille du
tableau lors de son parcours pour l’affichage de son contenu, il arrive que le compilateur
complète les valeurs non attribuées par des adresses mémoire de façon tout à fait aléatoire. Il
est important de savoir que des tels cas ne sont pas autorisés dans d’autre langages de
programmation comme Java, C# et autres. Ainsi manipulez les tableaux de façon intelligente.
saisie au préalable par l’utilisateur au clavier. Le programme refusera toute taille inférieure ou
égale à zéro. Une fois le tableau rempli, afficher son contenu pour chaque indice.
#include<iostream>
using namespace std;
int main(){
int nombre_element_tableau = 0;
cout<< "Saisi la taille du tableau : ";
cin >> nombre_element_tableau;
if (nombre_element_tableau <= 0) {
cout<< endl << "Cette taille est invalide !!" << endl;
} else {
string tabNom[nombre_element_tableau];
for (int i = 0; i< nombre_element_tableau; i++) {
cout<< "Saisi l'\x82l\x82ment pour l'indice " << i << " : ";
cin >> tabNom[i];
}
cout<< endl << "Affichage du contenu du tableau" << endl;
cout<< "-------------------------------" << endl << endl;
for (int i = 0; i< nombre_element_tableau; i++) {
cout<<"Valeur \x85 l'indice "<<i<<" est : "<<tabNom[i]<< endl;
}
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
int k = 0;
cout<< "Saisi le nombre des lignes et colonnes du tableau : ";
cin >> k;
int b[k][k];
int n = 1;
cout<< "====SAISIE====\n\n";
for (int i = 0; i < k; i++) {
for (int j = 0; j < k; j++) {
cout<< "Saisi l'entier n\xf8" << n << " : ";
cin >> b[i][j];
n++;
}
}
cout<< "\n====AFFICHAGE====\n\n";
for (int i = 0; i < k; i++) {
for (int j = 0; j < k; j++) {
cout<< "b[" << i << "][" << j << "] = " << b[i][j] << endl;
}
}
return 0;
}
Ex22. Ecrire un programme qui affiche les lettres de votre nom dans un tableau.
Ex23. Ecrire un programme qui permet de saisir des nombres entiers qui seront stockés dans
un tableau, puis afficher le contenu du tableau. La taille du tableau dépendra du nombre que
l’utilisateur aura saisi au clavier.
Ex24. Ecrire un programme qui demande à l’utilisateur de saisir plusieurs valeurs entières et
les affichent en spécifiant ceux qui sont pair ou impair. Le nombre total des valeurs à saisir
sera spécifié par l’utilisateur au clavier.
37
Ex25. Ecrire un programme qui demande à l'utilisateur de taper des entiers et qui affiche leur
moyenne. Le nombre d’entiers à taper sera spécifié par l’utilisateur.
Ex26. Ecrire un programme qui demande à l’utilisateur de saisir une série de nombres entiers
entre 0 et 20 et les stocke dans un tableau de 10 éléments. La saisie s’arrête si l’utilisateur
saisit -1 ou si le tableau est complet. Sinon, à chaque erreur de saisie, l’utilisateur doit
recommencer.
Ex27. Ecrire un programme qui demande à l’utilisateur de saisir plusieurs valeurs entières et
les affichent dans l’ordre LIFO (Ordre inversée, Last In First Out).
Ex28. Ecrire un programme qui demande à l’utilisateur de saisir plusieurs valeurs entières
après avoir spécifié leurs nombres et qui va ensuite les trier par ordre croissante.
Ex29. Même exercice que Ex28 mais trier par ordre décroissante.
38
Désignation de la Nom de la
Exemple
fonction fonction en C++
Racine carrée sqrt() double racinecaree = sqrt(valeur);
Sinus sin() double sinusnbr = sin(valeur);
Cosinus cos() double cosinusnbr = cos(valeur);
Tangente tan() double tangentenbr = tan(valeur);
Exponentiel exp() double exponentielnbr = exp(valeur);
Logarithme népérien log() double lognbr = log(valeur);
Logarithme en base 10 log10() double log10nbr = log10(valeur);
Valeur absolue fabs() double absolunbr = fabs(valeur);
Arrondi vers le bas floor() double arrondi_bas_inbr = floor(valeur);
Arrondie vers le haut ceil() double arrondi_haut_nbr = ceil(valeur);
Exposant pow() double var_AexposantB = pow(A,B);
#include<iostream>
using namespace std;
//Déclaration fonction avec 2 paramètres rééls
double addition(double, double);
int main(){
cout<< "Appel de l'addition de deux nombres positifs" << endl;
//Appel de la fonction
cout<< "R\x82sultat1 = " << addition(-4, 8) << endl;
cout<< "R\x82sultat2 = " << addition(10, 15) << endl;
cout<< "R\x82sultat3 = " << addition(22.5, 27.5) << endl;
return 0;
}
//Définition de la fonction addition avec deux paramètres réels
double addition(double nbr1, double nbr2) {
double somme = 0;
if (nbr1<0 || nbr2<0)
cout<<"Seuls les nombres strictements positifs sont valides" << endl;
else
somme = nbr1 + nbr2;
return somme;
}
#include<iostream>
using namespace std;
int nbr = 20;
int main(){
cout<<"Affichage du contenu d'une variable globale : " << nbr++ << endl;
cout<<"Affichage du contenu d'une variable globale : " << --nbr << endl;
cout<<"Affichage du contenu d'une variable globale : " << nbr << endl;
return 0;
}
#include<iostream>
using namespace std;
int main(){
int nombre = 20;//Variable local au bloc main
cout<< "Affichage contenu variable locale \x85 'main' nombre = " << nombre
<< endl;
for (int i = 0; i<3; i++) {
int nombre2 = nombre*i;//Variable locale à for et globale à if
cout<< "Affichage contenu variable locale au bloc 'for' et global au '
if' nombre2 = " << nombre2 << endl;
nombre += nombre2;
if (nombre > 10) {
int nombre3 = nombre2 * 3;//variable local au bloc if seulement
cout<< "Affichage contenu variable locale au bloc 'if' nombre3 = "
<< nombre3 << endl;
nombre += nombre3;
}
}
cout<< "Affichage contenu variable globale avec op\x82rations aux autres v
ariables locales = " << nombre << endl;
return 0;
}
#include<iostream>
using namespace std;
void souligner();
void souligner(char);
void souligner(char, int);
int main(){
cout<< "Soulignement normal" << endl;
souligner();
cout<< endl;
cout<< "Soulignement par un caract\x8are fixe " << endl;
souligner('*');
cout<< endl;
cout<< "Soulignement pour un nombre d'un caract\x8are fixe"<< endl;
souligner('_', 47);
cout<< endl;
return 0;
}
void souligner() {
for (int i = 0; i < 19; i++) cout<< "^";
}
void souligner(char caractere) {
for (int i = 0; i < 39; i++) cout<< caractere;
}
void souligner(char caractere, int nbr_caractere) {
for (int i = 0; i < nbr_caractere; i++) cout<< caractere;
}
NB : L’instruction return sert à la fois à fournir une valeur de retour et à mettre fin à
l’exécution de la fonction. Elle peut mentionner une expression ou apparaître à plusieurs
reprises dans une même fonction sans problèmes. Lorsqu’une fonction ne fournit aucun
résultat, son en-tête et sa déclaration comportent le mot clé void à la place du type de la
valeur de retour, comme dans : void fonctionSansValeurRetour(...) ; lorsqu’elle ne reçoit
aucun argument, l’en-tête et la déclaration comportent une liste vide, comme dans : int
fSansArguments(), et il n’est pas nécessaire d’ajouter void comme en langage C.
45
Ex32. Ecrire un programme qui utilise une fonction qui retourne la somme de deux nombres
entiers passés en paramètre de la fonction.
Ex33. Ecrire un programme avec une fonction qui reçoit en arguments 2 nombres flottants
et un caractère, et qui fournit un résultat correspondant à l’une des 4 opérations
appliquées à ses deux premiers arguments, en fonction de la valeur du dernier, à savoir :
addition pour le caractère +, soustraction pour -, multiplication pour * et division pour / (tout
autre caractère que l’un des 4 cités sera interprété comme une addition). On tiendra compte
des risques de division par zéro.
Ex34. Ecrire 2 fonctions à un argument entier et une valeur de retour booléenne qui sera
vrai si l’argument reçu est multiple de 2 (pour la première fonction) ou multiple de 3 (pour la
seconde fonction) ou fausse dans le cas contraire.
Ex35. Ecrire une fonction permettant d’ajouter une valeur fournie en argument à une autre
variable fournie également en argument et d’en afficher leur résultat.
Ex36. Ecrire une un programme qui utilise une fonction permettant de retourner le plus
grand de deux nombres entiers passés en paramètres de la fonction.
Ex37. Même exercice que le précédent mais avec 3 nombre entiers passés en paramètre.
46
struct record {
int numero = 0;
int qte = 0;
float prix = 0;
string caracteristique[2] = {};
};
Cette déclaration définit un type (Modèle) de structure mais ne réserve pas de variables
correspondant à cette structure. Ce type s’appelle ici record et il précise le nom et le type de
chacun des champs constituant la structure (numero, qte et prix). Une fois un tel type de
donné défini, nous pouvons déclarer des variables de ce type correspondant (De type de cette
structure). Par exemple, l’instruction : record article1, article2; réserve deux
emplacements nommés article1 et article2, de type record ; destinés à contenir chacun deux
entiers, un flottant et un tableau de deux chaines des caractères. Les champs d’une structure
peuvent être de n’importe quel type de base, d’un type tableau ou structure. De même, les
éléments d’un tableau peuvent être d’un type structure.
VII.2. INITIALISATION DES STRUCTURES
Les structures ne sont pas initialisées par défaut. A l’instar d’un tableau, une structure
peut être initialisée lors de sa déclaration, comme dans cette instruction qui utilise le type
47
OU
OU
article1.numero = 1;
article1.qte = 10;
article1.prix = 28.5;
article1.caracteristique[0] = "Verte";
article1.caracteristique[1] = "Emballage en carton";
article2.numero = 2;
article2.qte = 7;
article2.prix = 63.5;
article2.caracteristique[0] = "Rouge";
article2.caracteristique[1] = "Emballage en sachet";
Ainsi, dans cet exemple, nous affectons des valeurs aux différentes variables de type
structure.
VII.2. UTILISATION DES STRUCTURES
Un champ d’une structure peut être manipulé comme n’importe quelle variable du type
correspondant (char, int, float, double, sting, etc.). On désigne un champ donné en faisant
suivre le nom de la variable structure de l’opérateur « point » (.), suivi du nom du champ. Un
détail important à signaler est que l’utilisation des structures nécessite que leur définition
soit faite avant ou après celle de main. L’utilisation d’une structure, en évoque son appel.
Nous donnons ici-bas un exemple complet sur l’utilisation des structures.
Exemple 43 : Utilisation d’une structure
Ecrire un programme permettant d’affecter plusieurs valeurs correspondantes à un article
(Numéro, Quantité, Prix ainsi que les caractéristiques), et d’en afficher le contenu en utilisant
des structures.
48
#include<iostream>
using namespace std;
struct record {
int numero = 0;
int qte = 0;
float prix = 0;
string caracteristique[2] = {};
};
int main(){
record article1, article2;
//record article1 = { 1, 10, 28.5,"Verte","Emballage en carton" };
//record article2 = { 2, 7, 63.5,"Rouge","Emballage en sachet" };
article1.numero = 1;
article1.qte = 10;
article1.prix = 28.5;
article1.caracteristique[0] = "Verte";
article1.caracteristique[1] = "Emballage en carton";
article2.numero = 2;
article2.qte = 7;
article2.prix = 63.5;
article2.caracteristique[0] = "Rouge";
article2.caracteristique[1] = "Emballage en sachet";
a 5 0x220004
b 3 0x220008
c 8 0x22000C
p 0x220004 0x220010
#include<iostream>
using namespace std;
int main(){
int *p;//Déclaration d’un pointeur p de nombre entier
cout<< "Adresse m\x82moire initiale : p = " << p << endl;
cout<< "Valeur initiale : *p = " << *p << endl;
int a = 15;
cout<< "Adresse m\x82moire : a = " << &a << endl;
p = &a;//Le pointeur p pointe sur l’adresse mémoire de la variable a
cout<< "Adresse m\x82moire avant modification : p = " << p << endl;
cout<< "Valeur avant modification : *p = " << *p << endl;
*p = 10;//Modification de la valeur pointée par le pointeur
cout<< "Adresse m\x82moire apr\x8as modification : p = "<<p << endl;
cout<< "Valeur apr\x8as modification : *p = " << *p << endl;
cout<< "Valeur apr\x8as modification : a = " << a << endl;
return 0;
}
#include<iostream>
using namespace std;
int main(){
int a = 10;
int b = 20;
int c = 30;
De la même façon que nous avons eu à effectuer des opérations avec des variables
simples (Addition, Soustraction, multiplication, etc.), il est aussi possible d’en faire de la sorte
avec les pointeurs, tout en respectant leur syntaxe (Différentier valeur et adresses mémoire).
Exemple 46 : Multiplication des deux nombres en utilisant les pointeurs et adresses
mémoire
#include<iostream>
using namespace std;
void multiplicationPointeur(double*, double*);
void multiplicationAdresse(double&, double&);
int main(){
double nb1 = 0, nb2 = 0, res = 0;
double *pointeur1, *pointeur2;//Création des deux pointeurs
cout<< "Saisi un nombre reel : ";
cin >> nb1;
cout<< "Saisi un autre nombre reel : ";
cin >> nb2;
pointeur1 = &nb1;//le pointeur pointeur1 pointe à présent au contenu situé
dans l'adresse mémoire de nb1
pointeur2 = &nb2;//le pointeur pointeur2 pointe à présent au contenu situé
dans l'adresse mémoire de nb2
multiplicationAdresse(nb1, nb2);
multiplicationPointeur(pointeur1, pointeur2);
// multiplicationPointeur(&nb1, &nb2); Idem que précédemment
return 0;
}
pointeur (Passage par valeur), puis avec pointeur afin de voir la valeur ajoutée que nous offre
les pointeurs (Passage par référence).
#include<iostream>
using namespace std;
void invert(int, int);
void invert(int*, int*);
// Sans pointeur
void invert(int a, int b) {
int temp = a;
a = b;
b = temp;
}
// Avec pointeur
void invert(int *c, int *d) {
int temp = *c;
*c = *d;
*d = temp;
}
int main(){
int a = 10, b = 5, c = 10, d = 5;
cout<< "Affichage avant swap :\na = " <<a <<", b = " << b <<", c = "
<< c <<", d = " << d << endl;
invert(a, b);
invert(&c, &d);
cout<< "Affichage apr\x8as swap :\na = " <<a <<", b = " << b <<", c = "
<< c <<", d = " << d << endl;
return 0;
}
Nous nous servirons des pointeurs plus particulièrement dans le chapitre suivant sur
la Programmation Orientée Objet.
54
- public (+) : Désigne une propriété qui peut être non seulement accessible à
l’intérieur de la classe où elle a été déclarée, mais aussi dans les autres classes
extérieures à celle – ci ; mais se trouvant dans le même paquetage (Package ou
Dossier) que ce dernier. Ce mot clé assimile la propriété à une variable globale. Elle
est représentée avec un signe plus (+) dans un diagramme des classes.
- protected (#) : Désigne une propriété qui peut être non seulement accessible à
l’intérieur de la classe mère où elle a été déclarée, mais aussi dans les autres classes
filles à celle – ci. Ce mot clé assimile la propriété à une variable locale à la classe mère
et globale aux classes dérivées. Elle est représentée avec un signe dièse (#) dans un
diagramme des classes.
IX.4. UTILISATION DU CONSTRUCTEUR
Le constructeur est une méthode particulière qui est appelée automatiquement par le
compilateur lors de la création d’un objet de type de cette classe. Ses caractéristiques sont les
suivantes :
- Elle ne retourne aucune valeur : Donc, elle est toujours vide ou void mais sans le
spécifier.
- Il n’a pas besoin des respecter les trois étapes d’utilisation des Fonctions/Méthodes
(Déclaration, définition et utilisation), sa définition seule est suffisante.
- Elle est une méthode qui est toujours publique et ne peut en aucun cas être déclarée
privée ou private (Cependant, il peut l’être dans certains cas spécifiques).
- Elle porte toujours le même nom que celui de la classe.
- Elle peut être surchargée (Pas toujours obligatoire). A ce moment-là, lors de la
création d’un objet, il faudra spécifier le type de constructeur à utiliser.
Il faut en outre tenir compte du fait que dans certains langages de programmation, la
définition du constructeur est obligatoire même si l’on ne va y mettre aucune instruction, ce
qui n’est pas le cas pour C++. Néanmoins, il est fortement recommandé de toujours ajouter le
constructeur de la classe.
Par opposition, au constructeur qui interviens lors de la création d’un objet (En
initialisant les variables de la classe soit à des valeurs spécifiques ou en avec leurs valeurs par
défaut dépendant du type de donné : 0 pour int, 0.0 pour float et double, etc.), nous avons
le destructeur (Utilisé avec un tilde ~ devant sa déclaration) qui interviens ou qui est invoqué
lors de la destruction de l’objet qui a été créé. Enfin, le destructeur n’est pas obligatoire (Mais
57
est indispensable pour détruire des objets même s’il n’a aucun bloc d’instruction défini : En
utilisant la syntaxe suivante : delete nom_object).
Retenons que le paradigme C++ impose d’utiliser une même classe en deux fichiers
distincts : *.h pour le fichier d’en-tête et *.cpp pour le fichier des traitements. Le fichier *.h
(Ex : Personne.h) est celui qui sera utilisé pour toutes les déclarations (Il est aussi appelé
fichier d’en-tête ou fichier header) de la classe et le fichier *.cpp (Ex : Personne.cpp) sera
utilisé pour toutes les définitions des fonctions/méthodes qui ont été déclarées dans le
précédent fichier. Ceci implique alors que le fichier *.cpp puisse absolument inclure le fichier
d’en-tête (En utilisant le mot clé include) pour une association correcte des déclarations et
des définitions (Ex : #include "Personne.h"). Ainsi, nous allons procéder de cette façon
dans la suite de ce cours, tout en évitant de mettre tout le code correspondant aux classes dans
un seul fichier (Ce qui est aussi faisable, cfr. Exemple49).
Exemple 49 : Utilisation d’un Constructeur/Destructeur sans fichier en-tête
#include <iostream>
using namespace std;
class Personne {
private:
string nom;
string prenom;
char sexe;
int age;
public:
//Constructeur normal
Personne() {
cout<< "I'am constructor without params" << endl;
}
//Constructeur surcharge
Personne(string nom, string prenom, char sexe, int age) {
this->nom = nom;
this->sexe = sexe;
this->age = age;
cout<< "I'am constructor with params" << endl;
}
//Destructeur de la classe
~Personne() {
cout<< "I'am destructor" << endl;
}
};
58
int main() {
Personne p;
Personne p1("nom", "prenom", 'M', 100);
return 0;
}
#ifndef PERSONNE_H
#define PERSONNE_H
#include <iostream>
using namespace std;
class Personne {
public:
//Declaration Constructeur normal
Personne();
//Declaration Constructeur surcharge
Personne(string, string, char, int);
//Declaration Destructeur de la classe
~Personne();
private:
string nom;
string prenom;
char sexe;
int age;
};
#endif
Les instructions #ifndef (if not define), #define (define) et #endif (end if)
permettent à ce qu’une fois un fichier d’en-tête ajouté (Par l’instruction #include
"fichier_header.h") qu’il ne le soit qu’une et une seule fois (Quel que soit le nombre de
fois que cette instruction d’inclusion serait ajoutée). Ainsi, il garantit l’unicité de l’inclusion
du fichier header par une condition (Si le fichier d’en-tête n’est pas encore inclus, l’inclure ;
sinon ne rien faire). En outre, ces instructions ne sont vraiment utiles que pour le fichier
header et non pour celui des définitions.
59
#include "Personne.h"
#include "Personne.h"
int main() {
Personne p;
Personne p1("nom", "prenom", 'M', 100);
return 0;
}
aura à créer tous les accesseurs et mutateurs. Afficher ensuite les valeurs affectées dans les
différents attributs de la classe en utilisant des pointeurs d’objets.
#ifndef PERSONNE_H
#define PERSONNE_H
#include <iostream>
using namespace std;
class Personne {
public:
//Declaration Constructeur normal
Personne();
//Declaration Constructeur surcharge
Personne(string, string, char, int);
//Declaration Destructeur de la classe
~Personne();
//Declaration ACCESSEURS-GETTERS
string getNom();
string getPrenom();
int getAge();
char getSexe();
//Declaration MUTATEURS-SETTERS
void setNom(string);
void setPrenom(string);
void setAge(int);
void setSexe(char);
//Autre declarations
void afficher();
private:
string nom;
string prenom;
char sexe;
int age;
};
#endif
61
#include "Personne.h"
// Definition ACCESSEURS-GETTERS
string Personne::getNom() {
return this->nom;
}
string Personne::getPrenom() {
return this->prenom;
}
int Personne::getAge() {
return this->age;
}
char Personne::getSexe() {
return this->sexe;
}
// Definition MUTATEURS-SETTERS
void Personne::setNom(string nom) {
this->nom = nom;
}
void Personne::setPrenom(string prenom) {
this->prenom = prenom;
}
void Personne::setAge(int age) {
this->age = age;
}
void Personne::setSexe(char sexe) {
this->sexe = sexe;
}
62
void Personne::afficher() {
cout<< "Le nom est : " << this->nom << endl;
cout<< "Le pr\x82nom est : " << this->prenom << endl;
cout<< "L'age est : " << this->age << endl;
cout<< "Le sexe est : " << this->sexe << endl;
}
#include "Personne.h"
int main(){
string nom = "", prenom = "";
int age = 0;
char sexe = ' ';
Personne *p = new Personne();
//Affectation Statique
p->setNom("ISAMUNA");
p->setPrenom("Josue");
p->setAge(100);
p->setSexe('M');
//Affichage Dynamique
cout<< "\n===AFFICHAGE STATIC===\n\n";
p->afficher();
cout<< "\n---------------------\n\n";
//Affectation statique
cout<< "Saisi le nom : ";
cin >> nom;
cout<< "Saisi le prenom : ";
cin >> prenom;
cout<< "Saisi l'age : ";
cin >> age;
cout<< "Saisi le sexe : ";
cin >> sexe;
p->setNom(nom);
p->setPrenom(prenom);
p->setAge(age);
p->setSexe(sexe);
//Affichage Dynamique
cout<< "\n==AFFICHAGE DYNAMIC==\n\n";
p->afficher();
return 0;
}
63
Exemple 52 : Utilisation d’une classe Arme avec setters, getters et pointeur d’objets (1)
Ecrire un programme utilisant une classe Arme (num, nom, marque et couleur) pour lequel on
aura à créer tous les accesseurs et mutateurs. Afficher ensuite les valeurs affectées dans les
différents attributs de la classe en utilisant des pointeurs d’objets. Les valeurs des propriétés
seront affectées par une saisie au clavier via des méthodes appropriées. Le destructeur devra
être utilisé et affichera un message au choix. Enfin, on surchargera le constructeur.
#ifndef ARME_H
#define ARME_H
#include<iostream>
using namespace std;
class Arme {
public:
//Declaration fonctions/Methode
Arme();
Arme(int, string, string, string);
~Arme();
void setNum(int);
void setNom(string);
void setMarque(string);
void setCouleur(string);
private:
int num;
string nom;
string marque;
string couleur;
};
#endif // ARME_H
#include "Arme.h"
Arme::Arme() {
cout<< "I'm a constructor without params" << endl;
}
Arme::Arme(int num, string nom, string marque, string couleur) {
this->num = num;
this->nom = nom;
this->marque = marque;
this->couleur = couleur;
cout<< "I'm a constructor with params" << endl;
}
Arme::~Arme() {
cout<< "I'am destructor" << endl;
}
//ACCESSEURS-GETTERS
int Arme::getNum() {
return this->num;
}
string Arme::getNom() {
return this->nom;
}
string Arme::getMarque() {
return this->marque;
}
string Arme::getCouleur() {
return this->couleur;
}
65
//MUTATEURS-SETTERS
void Arme::setNum(int num) {
this->num = num;
}
void Arme::setNom(string nom) {
this->nom = nom;
}
void Arme::setMarque(string marque) {
this->marque = marque;
}
void Arme::setCouleur(string couleur) {
this->couleur = couleur;
}
void Arme::saisie(Arme *a) {
int num = 0;
string nom = "", marque = "", couleur = "";
a->setNum(num);
a->setNom(nom);
a->setMarque(marque);
a->setCouleur(couleur);
}
void Arme::afficher(Arme *a) {
cout<< "\n===AFFICHAGE ARME===\n\n";
cout<< "***Je suis une arme***\n";
cout<< "***********************\n";
cout<< "Num\x82ro : " << a->getNum() << endl;
cout<< "Nom : " << a->getNom() << endl;
cout<< "Marque : " << a->getMarque() << endl;
cout<< "Couleur : " << a->getCouleur() << endl;
}
66
#include "Arme.h"
int main(){
//Arme *a;
//a = new Arme();
Arme *a = new Arme();
Arme *a1 = new Arme(0, "Arme", "Default", "Default");
/*a->setNum(1);
a->setNom("AKA 47");
a->setMarque("Russe");
a->setCouleur("Noire");*/
a->saisie(a);
a->afficher(a);
a1->afficher(a1);
Dans le précédent programme, deux méthodes extérieures à la classe ont été utilisées
pour pourvoir effectuer la saisie et l’affichage, cela est possible, mais comme il s’agit des
classes ; il est préférable que ces méthodes soient à l’intérieur même de la classe.
67
Ce même exemple peut être fait en ignorant l’utilisation d’une méthode avec paramètre
tout en faisant recours au pointeur d’objet de la classe this (Voir Exemple 53).
Exemple 53 : Utilisation d’une classe Arme avec setters, getters et pointeurs d’objets (2)
Cet exemple est identique à celui de l’exemple 52, sauf qu’ici les méthodes saisie() et
afficher() n’ont pas de paramètre.
#ifndef ARME_H
#define ARME_H
#include<iostream>
using namespace std;
class Arme{
public:
//Declaration fonctions/Methode
Arme();
Arme(int, string, string, string);
~Arme();
void saisie();
void afficher();
void setNum(int);
void setNom(string);
void setMarque(string);
void setCouleur(string);
private:
int num;
string nom;
string marque;
string couleur;
};
#endif // ARME_H
68
#include "Arme.h"
Arme::Arme() {
cout<< "I'm a constructor without params" << endl;
}
Arme::Arme(int num, string nom, string marque, string couleur) {
this->num = num;
this->nom = nom;
this->marque = marque;
this->couleur = couleur;
cout<< "I'm a constructor with params" << endl;
}
Arme::~Arme() {
cout<< "I'am destructor" << endl;
}
//ACCESSEURS-GETTERS
int Arme::getNum() {
return this->num;
}
string Arme::getNom() {
return this->nom;
}
string Arme::getMarque() {
return this->marque;
}
string Arme::getCouleur() {
return this->couleur;
}
//MUTATEURS-SETTERS
void Arme::setNum(int num) {
this->num = num;
}
void Arme::setNom(string nom) {
this->nom = nom;
}
void Arme::setMarque(string marque) {
this->marque = marque;
}
void Arme::setCouleur(string couleur) {
this->couleur = couleur;
}
69
void Arme::saisie() {
cout<< "\n===SAISIE ARME===\n\n";
cout<< "Saisi le num : ";
cin >> this->num;
cout<< "Saisi le nom : ";
cin >> this->nom;
cout<< "Saisi la marque : ";
cin >> this->marque;
cout<< "Saisi la couleur : ";
cin >> this->couleur;
}
void Arme::afficher() {
cout<< "\n===AFFICHAGE ARME===\n\n";
cout<< "***Je suis une arme***\n";
cout<< "***********************\n";
cout<< "Num\x82ro : " << this->num << endl;
cout<< "Nom : " << this->nom << endl;
cout<< "Marque : " << this->marque << endl;
cout<< "Couleur : " << this->couleur << endl;
}
#include "Arme.h"
int main(){
//Arme *a;
//a = new Arme();
Arme *a = new Arme();
Arme *a1 = new Arme(0, "Arme", "Default", "Default");
a->afficher();
// Affectation en utilisant les Mutateurs
a->setNum(1);
a->setNom("AKA 47");
a->setMarque("Russe");
a->setCouleur("Noire");
a->afficher();
Aussi, pour avoir une méthode pure abstraite (Pour une classe Abstraite, car elle est par
définition une classe contenant au moins une méthode abstraite), il faudra égaliser la
Méthode/ou Fonction à zéro dans la partie déclaration (Fichier avec extension .h). Par
conséquent, pareil Méthode/Fonction n’ont pas des corps dans la classe mère.
Pour que les propriétés communes de la classe mère soient utilisables (Et partageables) par
les classes filles (Ou classes héritées), elles devront être déclarées comme étant protected.
Le diagramme des classes répondant aux contraintes que nous venons de poser est repris ici-
bas. En outre, il n’est pas nécessaire d’avoir des notions assez avancées en UML pour
comprendre ce diagramme de classe.
72
#ifndef ARME_H
#define ARME_H
#include<iostream>
using namespace std;
class Arme{
public:
//Declaration fonctions/Methodes
Arme();
Arme(int, string, string, string);
73
virtual ~Arme();
virtual void saisie() = 0;
virtual void afficher() = 0;
void setNum(int);
void setNom(string);
void setMarque(string);
void setCouleur(string);
protected:
int num;
string nom;
string marque;
string couleur;
private:
};
#endif // ARME_H
#include "Arme.h"
#ifndef ARME_FEU_H
#define ARME_FEU_H
#include "Arme.h"
class Arme_feu : public Arme {
public:
Arme_feu();
~Arme_feu();
void saisie(Arme_feu *);
void saisie();
void afficher();
//ACCESSORS AND MUTATORS
int getLong_gachette();
float getLong_cartouche();
void setLong_gachette(int);
void setLong_cartouche(float);
private:
int long_gachette;
float long_cartouche;
};
#endif // ARME_FEU_H
75
#include "Arme_feu.h"
Arme_feu::Arme_feu() {
this->long_cartouche = 0;
this->long_gachette = 0;
cout<< "I'am Constructor of Arme_feu without params" << endl;
}
Arme_feu::~Arme_feu() {
cout<< "I'am Destructor of Arme_feu" << endl;
}
void Arme_feu::saisie() {
cout<< "\nSAISIE" << endl;
cout<< "======" << endl;
cout<< "\nArme_feu" << endl;
cout<< "------------------------" << endl;
cout<< "Saisie le num\x82ro : ";
cin >> this->num;
cout<< "Saisie le nom : ";
cin >> this->nom;
cout<< "Saisie la marque : ";
cin >> this->marque;
cout<< "Saisie la couleur : ";
cin >> this->couleur;
cout<< "Saisie long gachette : ";
cin >> this->long_gachette;
cout<< "Saisie long cartouche : ";
cin >> this->long_cartouche;
}
void Arme_feu::saisie(Arme_feu *a) {
cout<< "\nSAISIE" << endl;
cout<< "======" << endl;
cout<< "Arme_feu" << endl;
cout<< "------------------------" << endl;
cout<< "Saisie le num\x82ro : ";
cin >> a->num;
cout<< "Saisie le nom : ";
cin >> a->nom;
cout<< "Saisie la marque : ";
cin >> a->marque;
cout<< "Saisie la couleur : ";
cin >> a->couleur;
void Arme_feu::afficher() {
cout<< "\nAFFICHAGE" << endl;
cout<< "=========" << endl;
cout<< "Arme_feu" << endl;
cout<< "Le num\x82ro est : " << this->num << endl;
cout<< "Le nom est : " << this->nom << endl;
cout<< "La marque est : " << this->marque << endl;
cout<< "La couleur est : " << this->couleur << endl;
cout<< "La long gachette est : " << this->long_gachette << endl;
cout<< "La long cartouche est : " << this->long_cartouche << endl;
}
#ifndef ARME_BLANCHE_H
#define ARME_BLANCHE_H
#include "Arme.h"
#include "Arme_blanche.h"
Arme_blanche::Arme_blanche() {
this->lame = 0;
cout<< "I'am Constructor of Arme_blanche without params" << endl;
}
Arme_blanche::~Arme_blanche() {
cout<< "I'am Destructor of Arme_blanche" << endl;
}
void Arme_blanche::saisie() {
cout<< "\nSAISIE" << endl;
cout<< "======" << endl;
cout<< "\nArme_blanche" << endl;
cout<< "------------------------" << endl;
cout<< "Saisie le num\x82ro : ";
cin >> this->num;
cout<< "Saisie le nom : ";
cin >> this->nom;
cout<< "Saisie la marque : ";
cin >> this->marque;
cout<< "Saisie la couleur : ";
cin >> this->couleur;
void Arme_blanche::afficher() {
cout<< "\nAFFICHAGE" << endl;
cout<< "=========" << endl;
cout<< "Arme_blanche" << endl;
cout<< "Le num\x82ro est : " << this->num << endl;
cout<< "Le nom est : " << this->nom << endl;
cout<< "La marque est : " << this->marque << endl;
cout<< "La couleur est : " << this->couleur << endl;
#include "Arme.h"
#include "Arme_feu.h"
#include "Arme_blanche.h"
int main(){
//Utilisation objet Arme_feu
Arme_feu *afeu = new Arme_feu();
afeu->saisie(afeu);
afeu->afficher();
//UTILISATION POLYMORPHYSME
cout<< "\n\nAPPEL POLYMORPHE" << endl;
cout<< "----------------" << endl;
delete afeu;
delete abla;
return 0;
}
80
CONCLUSION
En conclusion de ce cours, nous encourageons les étudiants à pousser loin leurs
recherches de sorte à tirer le meilleur du langage de programmation C++ et devenir alaise
dans la programmation en usant de n’importe quel langage de programmation. En outre, c’est
en s’exerçant que chacun pourra très bien se familiariser avec ce langage de programmation
qui est très proche du langage Java et de certains autres.
82
BIBLIOGRAPHIE
1. Claude Delannoy, S’initier à la programmation, Ed. Eyrolles, 2008, Paris, 300p.
2. Matthieu Nebra et Matthieu Schaller, Guide Programmer avec le langage C, Paris, 2011,
704p.
3. Matthieu Nebra et Matthieu Schaller, Guide Programmer avec le langage C++, Paris, 654p.
4. Claude Delannoy, Exercices en langage C++, Ed. Eyrolles, 2007, Paris, 352p.
5. Brian Overland, C++ without fear Second Edition, Ed. Pearson Education, 2011, USA,
581p.
6. Hugues Bersini et Ivan Wellesz, L’orienté objet (Cours et exercices en UML2 avec Java 5,
C# 2, C++, Python et PHP 5, Ed. Eyrolles, Paris, 2007, 602p.
7. www.cplusplus.com.
8. https://bloodshed.net/.
9. https://sourceforge.net/projects/orwelldevcpp/.
10. https://www.embarcadero.com/free-tools/dev-cpp
83
CONCLUSION ....................................................................................................................... 81
BIBLIOGRAPHIE ................................................................................................................. 82