Académique Documents
Professionnel Documents
Culture Documents
programmation C++
Un langage de programmation est un code de communication entre un humain et une
machine (en général un ordinateur). À l'aide de ces langages, on peut écrire des programmes.
Compilateurs
GNU Compiler Collection, abrégé en GCC, est un ensemble de compilateurs créés par le
projet GNU. GCC est un logiciel libre capable de compiler divers langages de
programmation, dont C, C++, Objective-C, Java, Ada et Fortran. GCC est utilisé pour le
développement de la plupart des logiciels libres.
Il s'agit d'un compilateur multiplateformes, incontournable sur les systèmes Unix et reconnu
notamment pour son respect des standards. Il est fourni sous forme de sources et se compile
avec le compilateur C existant du système. GCC ne se compile nativement que sous Unix. La
version DOS s'appelle DJGPP, la version Windows s'appelle MinGW.
MinGW ou Mingw32 (Minimalist GNU for Windows) est une adaptation des logiciels de
développement et de compilation du GNU (GCC - GNU Compiler Collection), à la plate-
forme Win32. Contrairement à Cygwin, les programmes générés avec MinGW n'ont pas
besoin de couche intermédiaire de compatibilité (sous forme d'une bibliothèque dynamique,
DLL). L'appellation Mingw32 a été abandonnée depuis que MinGW supporte les
environnements d'exécution 64 bits en plus du 32 bits.
Borland C++ Compiler est une version gratuite du compilateur C & C++ inclus dans C++
Builder. Il est fourni avec les en-têtes Win32 ainsi que make.
Cygwin n'est pas un compilateur, mais un environnement qui permet de travailler sous
Windows comme si vous étiez sous Linux. Toutes les commandes Unix sont fournies, ainsi
qu'une version de GCC, pour vous permettre de compiler vos propres programmes Unix.
Attention : les programmes compilés sous Cygwin exigent la présence de la DLL Cygwin.
Intel C++ Compiler, Clang, DJGPP .....
- MingW Developer Studio , MingW Developer Studio est un EDI gratuit multi-
plateformes, qui fonctionne notamment sous Windows (avec MingW) et Linux. Son mode de
fonctionnement est assez proche de celui de Visual Studio.
- Anjuta , Anjuta est un IDE (les fonctionnalités RAD intégrant Glade sont en cour de
développement) pour Linux développé dans le cadre du projet Gnome et par conséquent, il est
particulièrement intéressant pour les développements en C avec GTK+ (coloration syntaxique
des mots clés de GTK+) mais il peut aussi être utilisé pour le développement en C++ avec
gtkmm.
- KDevelop , KDevelop est un IDE pour Linux qui fait partie de la suite de logiciels proposée
par l'environnement de bureau KDE. A l'inverse de ajunta, il est plutôt axé pour le
développement en C++ avec Qt.
- Glade , Glade est un RAD, qui permet de construire des interfaces GTK+ par glissé/déposé
des widgets sur une fiche.
- Qt Designer , Comme Kdevelop est le penchant C++ de Ajunta, Qt designer est le penchant
Qt de Glade. Il s'agit donc d'un RAD qui peut être utilisé en parallèle avec Kdevelop pour
créer des interface homme machine (IHM)
C est un langage général, procédural et impératif développé en 1972 par Dennis Ritchie chez
Bell Labs pour le système d'exploitation Unix.
Pourquoi le C++
L’édition du programme
L’édition du programme (on dit aussi parfois « saisie ») consiste à créer, à partir d’un
clavier, tout ou partie du texte d’un programme qu’on nomme « programme source ».
fichier source porte l’extension cpp.
La compilation
Elle consiste à traduire le programme source (ou le contenu d’un fichier source) en
langage
La notion de type
La mémoire centrale est un ensemble de positions binaires nommées bits. Les bits sont
regroupés en octets (8 bits), et chaque octet est repéré par ce qu’on nomme son
adresse.
Les types entiers
C++ prévoit que, sur une machine donnée, on puisse trouver jusqu’à trois tailles
différentes
• int (c’est celui que nous avons rencontré dans le chapitre précédent) ;
1 0000000000000001 0001
2 0000000000000010 0002
3 0000000000000011 0003
16 0000000000010000 0010
Lorsqu’il s’agit d’un nombre négatif, sa valeur absolue est codée généralement suivant
ce que l’on nomme la « technique du complément à deux »2. Pour ce faire, cette
valeur est d’abord exprimée en base 2 puis tous les bits sont inversés (1 devient 0 et 0
devient 1) et, enfin, on ajoute une unité au résultat. Voici quelques exemples (avec la
même présentation que précédemment) :
-1 1111111111111111 FFFF
-2 1111111111111110 FFFE
-3 1111111111111101 FFFD
-4 1111111111111100 FFFC
De façon quelque peu atypique, C++ vous autorise à définir trois autres types voisins
des précédents en utilisant le qualificatif unsigned.
Les types flottants
Les types flottants permettent de représenter, de manière approchée, une partie des
nombres réels. Pour ce faire, ils s’inspirent de la notation scientifique (ou
exponentielle) bien connue qui consiste à écrire un nombre sous la forme 1.5 1022 ou
0.472 10 -8 ; dans une telle notation,
on nomme « mantisses » les quantités telles que 1.5 ou 0.472 et « exposants » les
quantités telles que 22 ou -8.
C++ prévoit trois types de flottants correspondant à des tailles différentes : float,
double et long double.
La précision : lors du codage d’un nombre décimal quelconque dans un type flottant,
il est
Comme dans la plupart des langages, les constantes flottantes peuvent s’écrire
indifféremment suivant l’une des deux notations :
• exponentielle.
Comme la plupart des langages, C++ permet de manipuler des caractères codés en
mémoire sur un octet. Bien entendu, le code employé, ainsi que l’ensemble des
caractères représentables, dépend de l’environnement de programmation utilisé (c’est-
à-dire à la fois de la machine concernée et du compilateur employé).
Initialisation et constantes
int n = 15 ; int n;
n = 15 ;
Il est cependant possible de déclarer que la valeur d’une variable ne doit pas changer
lors de
l’exécution du programme. Par exemple, avec :
const int n = 20 ;
Le type bool
Ce type est tout naturellement formé de deux valeurs notées true et false. Il peut
intervenir
bool ok = false ;
.....
if (.....) ok = true ;
.....
if (ok) .....
Comme tous les langages, C++ dispose d’opérateurs classiques « binaires » (c’est-à-
dire portant sur deux « opérandes »), à savoir l’addition (+), la soustraction (-), la
multiplication (*) et la division (/),
ainsi que d’un opérateur « unaire » (c’est-à-dire ne portant que sur un seul opérande)
correspondant à l’opposé noté - (comme dans -n ou dans -x+y).
Les opérateurs binaires ne sont a priori définis que pour deux opérandes ayant le
même type
parmi : int, long int, float, double et long double (ainsi que unsigned int et unsigned
long) et ils fournissent un résultat de même type que leurs opérandes.
Effectivement, on peut dire qu’en quelque sorte C++ confond facilement un caractère
avec la valeur (entier) du code qui le représente. Notez bien que, comme toutes les
machines n’emploient pas le même code pour les caractères, l’entier associé à un
caractère donné ne sera pas toujours le même.
Comme tout langage, C++ permet de comparer des expressions à l’aide d’opérateurs
classiques
Le résultat de la comparaison est une valeur booléenne prenant l’une des deux valeurs
true ou
false.
Les expressions comparées pourront être d’un type de base quelconque et elles seront
soumises aux règles de conversion présentées dans le paragraphe précédent. Cela
signifie qu’au bout du compte on ne sera amené à comparer que des expressions de
type numérique, même si
dans les opérandes figurent des valeurs de type short, char ou bool (true>false sera
vraie).
Rôle
C++ dispose de trois opérateurs logiques classiques : et (noté &&), ou (noté ||) et non
Prend la valeur vrai si les deux expressions a<b et c<d sont toutes deux vraies et prend
la valeur faux dans le cas contraire.
• (a<b) || (c<d)
Prend la valeur vrai si l’une au moins des deux conditions a<b et c<d est vraie et prend
la valeur faux dans le cas contraire.
• ! (a<b) Prend la valeur vrai si la condition a<b est fausse et prend la valeur faux
dans le cas contraire. Cette expression est équivalente à : a>=b.
Cet opérateur d’affectation (=) peut faire intervenir d’autres expressions comme dans :
c=b+3
La faible priorité de cet opérateur = (elle est inférieure à celle de tous les opérateurs
arithmétiques et de comparaison) fait qu’il y a d’abord évaluation de l’expression b +
3. La valeur ainsi obtenue est ensuite affectée à c.
En revanche, il n’est pas possible de faire apparaître une expression comme premier
opérande de cet opérateur =. Ainsi, l’expression suivante n’aurait pas de sens :
c+5=x
Leur rôle Dans des programmes écrits dans un langage autre que C++ (ou C), on
rencontre souvent des
i=i+1
n=n-1
En C++, ces actions peuvent être réalisées par des opérateurs « unaires » portant sur
cette lvalue. Ainsi, l’expression :
++i
si i vaut 5, l’expression :
n = i++ - 5
affectera à i la valeur 6 et à n la valeur 0 (car ici la valeur de l’expression i++ est 5).
il porte.
il existe un opérateur de décrémentation noté -- qui, suivant les cas, sera :
i++
remplaçait avantageusement :
i=i+1
Mais C++ dispose d’opérateurs encore plus puissants. Ainsi, vous pourrez remplacer :
i=i+k
par :
i += k
Quelles seront les valeurs des variables A, B et C après exécution des instructions
suivantes ? Variables A, B, C en Entier
Début
A←5
B←3
C←A+B
A←2
C←B–A
Fin
Solution
#include <iostream>
int main(void)
int A, B,C ;
A = 5 ;B = 3 ;
C=A+B;
A=2;
C = A - B;
return 0;
system("PAUSE");
Syntaxe de la condition si
Exemple
Exercice 1
Ecrire un algorithme qui pour un nombre entré par l’utilisateur, et l’informe ensuite si
ce nombre est positif, négatif (on ne considère pas le cas nul).
Algorithme de l’exercice 1
Variable n Entier
Début
Lire n
Si n > 0 Alors
Ecrire "Le nombre est positif”
Sinon
Finsi
Fin
Solution
#include <iostream>
int main()
int age ;
cin>> age;
else // Sinon...
return 0;
Exercice 2
Deux condition
else // Sinon...
Cout<< ("Aga gaa aga gaaa"); // Langage bébé, vous pouvez pas comprendre
if (age == 2)
else if (age == 6)
}
else if (age == 18)
else
Deuxieme solution
switch (age)
case 2:
break;
case 6:
break;
case 12:
break;
case 16:
break;
case 18:
break;
case 68:
break;
default:
break;
L’édition du programme
L’édition du programme (on dit aussi parfois « saisie ») consiste à créer, à partir d’un
clavier, tout ou partie du texte d’un programme qu’on nomme « programme source ».
fichier source porte l’extension cpp.
La compilation
Elle consiste à traduire le programme source (ou le contenu d’un fichier source) en
langage
/ * Une barre oblique suivie d'un astérisque marque le début d'un commentaire sur
plusieurs lignes. Il se termine par un astérisque suivi d'une barre oblique. * /
6 L’instruction for
Syntaxe:
opération;
Considérez ce programme :
#include <iostream>
Int main()
{
int i ;
bonjour 1 fois
bonjour 2 fois
bonjour 3 fois
bonjour 4 fois
bonjour 5 fois
#include <iostream>
Int main()
somme = 0
int i ;
somme = somme + i;
Return 0;
}
• Exercice 2
variable N, a, i : entier
Debut
Lire a
somme← 0
pour i de 1 a n , i++
somme-----somme+a
Finpour
Ecrire somme
Fin
Exercice 1
Exo1 B
variable N entier
Debut
Ecrire i ;
i ← i+1
Fintq
Fin
#include <iostream>
int main()
int i = 0;
cout << "La valeur de i carré est : " << i *i<< endl;
i++;
cout << "La valeur finale de i est : " << i << endl;
return 0;
La sortie est:
La valeur de i est : 0
La valeur de i est : 1
La valeur de i est : 2
La valeur de i est : 3
La valeur de i est : 4
La valeur de i est : 5
La valeur de i est : 6
La valeur de i est : 7
La valeur de i est : 8
La valeur de i est : 9
La valeur finale de i est : 10
do instruction
while (expression) ;
• Exercice 5
A = 20 et B = 8, Alors PGCD = 4)
Exercice 5
Algorithme PGCD
DEBUT
Lire (A,B) ;
Répéter
Reste ← A mod B ;
A←B;
B ← Reste ;
Jusqu'à (Reste = 0) ;
PGCD = A ;
FIN
continue;
ou
break;
Ou
return [valeur];
return permet de quitter immédiatement la fonction en cours. Comme on l'a déjà vu,
la commande return peut prendre en paramètre la valeur de retour de la fonction.
break permet de passer à l'instruction suivant l'instruction while, do, for ou switch la
plus imbriquée (c'est-à-dire celle dans laquelle on se trouve).