Académique Documents
Professionnel Documents
Culture Documents
Algorithmique Et Programmation C++ AHMADI 2021 - 2022 - V27
Algorithmique Et Programmation C++ AHMADI 2021 - 2022 - V27
Programmation C++
A. AHMADI
ENSAM-Meknès
2021-2022
1
Algorithmique et Programmation C++
2
A.AHMADI
_________________
ENSAM-Meknès
2021/2022
Plan du cours
3
1. Algorithmique
2. Présentation du langage C++ et de l’environnement de développement
intégré
3. Eléments de base du langage C++
Types de base
Opérateurs et expressions
Entrées/Sorties standard
Instructions de contrôle
4. Fonctions
5. Types structurés
Tableaux et Pointeurs
Chaînes de styles
Types structurés
6. Gestion des Fichiers
Algorithmique
Le mot "Algorisme " provient du nom du célèbre mathématicien Perse Al-Khawarismi, auteur du
livre "Hissab Al jabr wa Al Mokabala" ;
Algorithme : description du schéma de réalisation d’un événement à l’aide d’un répertoire fini
d ’actions élémentaires, réalisables à durée limitée dans le temps ;
Un algorithme est destiné à un processeur qui peut l’exécuter, c’est à dire, réaliser l’enchaînement
des opérations que l’algorithme lui décrit ;
Pour qu’un algorithme soit exécutable par un processeur, il doit être écrit dans un Langage
compréhensible par ce processeur ;
Dans les années 50, le mot algorithme était associé à "l’algorithme d’Euclide", c’est à dire, le
processus de trouver le plus grand diviseur commun de deux entiers :
principe : 𝒂 = 𝒃 ∗ 𝒒 + 𝒓 , 𝟎 ≤ 𝒓 < 𝒃 (Division Euclidienne de 𝑎 par 𝑏).
On a 𝑷𝑮𝑪𝑫(𝒂, 𝒃) = 𝑷𝑮𝑪𝑫(𝒃, 𝒓). Donc, on cherche le dernier reste non nul. On affine
cette méthode comme suit :
1- Définition du problème
Il s’agit de bien définir le problème, de manière à éviter toute ambiguïté, et souligner toutes ses
spécifications et les conditions nécessaires à sa réalisation. Il s’agit de répondre aux questions
suivantes :
2- Structure générale
Dans cette étape, on pose les grandes lignes de l’algorithme et on procède à une décomposition du
problème en une suite de sous-problèmes plus simples à résoudre. C’est le principe de "diviser pour
régner".
3- Développement
Il s’agit d’élaborer l’algorithme correspondant à chaque sous-problème de l’étape précédente et
l’algorithme global du problème.
4- Validation de l’algorithme
Dans cette étape, on vérifie si l’algorithme répond bien à toutes les spécifications du problème définies
à l’étape 1. Une erreur ou un cas non traité pourra remettre en cause la solution proposée.
5- Codage
On traduit l’algorithme, validé, en un programme dans un langage de programmation adéquat,
disponible et maîtrisé, pour le rendre exécutable par la machine
6- Mise au point
On corrige les erreurs commises à l’étape précédente et signalées par le compilateur .
Le compilateur est un programme qui, ayant reçu un autre programme écrit dans un langage évolué,
l’analyse(détermine les erreurs de syntaxe, mais pas de conception et de logique) et le traduit en un
langage machine; il traduit donc le source en un exécutable.
1- Variable
C’est un objet qui peut prendre une ou plusieurs valeurs durant son existence dans un programme
donné. Elle est caractérisée par les trois éléments suivants :
- Son nom (identification ou désignation de l’emplacement mémoire de la variable) qui la
différencie des autres et permet l’accès à sa valeur.
- Son type, qui spécifie le domaine de valeurs que peut prendre la variable.
- sa valeur (c’est le contenu actuel de l’emplacement mémoire de la variable).
Le type de variable spécifie implicitement le genre d’opérations permises. Par exemple sur les
entiers on utilise l’addition , la multiplication, etc.
2-Affectation
C’est l’attribution d’une valeur à une variable. Notation : ou = .
On affecte une variable par une expression du même type. Il faut noter qu’une expression du
style : 𝑥 = 𝑒𝑥𝑝𝑟𝑒𝑠𝑠𝑖𝑜𝑛, ne se lit que dans un seul sens : la variable 𝑥 prend la valeur de
l’expression à droite
NB : Faire attention à la concordance des types de variables pendant l’affectation. Supposons que 𝑥 est
de type 𝑟é𝑒𝑙 et que 𝑛 est de type 𝑒𝑛𝑡𝑖𝑒𝑟. L’affectation 𝑥 = 𝑛 est valide alors que 𝑛 = 𝑥 ne l’est
pas.
3-Lecture
C’est une opération qui consiste à attribuer une valeur de l’extérieur, par une unité d’entrée (ex.
clavier, capteur de grandeurs physique, etc.), à une variable ;
Notation : 𝐿𝐼𝑅𝐸(𝑥) ou 𝐿𝐼𝑅𝐸(𝑥, 𝑦, … ).
A la différence de l’affectation qui se passe au niveau de la mémoire (interne), la lecture utilise un
périphérique d’entrée (externe) ;
4- Ecriture
Son rôle est de faire sortir l’information à l’extérieur par un périphérique de sortie (ex. imprimante,
écran, fichier, etc.) ;
Cette information peut être numérique, chaîne de caractères, ...
Notation : 𝐸𝐶𝑅𝐼𝑅𝐸(𝑖𝑛𝑓𝑜𝑟𝑚𝑎𝑡𝑖𝑜𝑛1, 𝑖𝑛𝑓𝑜𝑟𝑚𝑎𝑡𝑖𝑜𝑛2, … ).
- 𝐸𝐶𝑅𝐼𝑅𝐸(𝑥) : affiche la valeur de la variable 𝑥 ;
- 𝐸𝐶𝑅𝐼𝑅𝐸(′𝑆𝑎𝑙𝑢𝑡′) : affiche ou écrit le message : 𝑆𝑎𝑙𝑢𝑡 (le texte doit être toujours entre deux
apostrophes).
Exemple : si la variable 𝑥 est de type 𝑒𝑛𝑡𝑖𝑒𝑟 et qu’elle contient la valeur 13, alors l’instruction
𝐸𝐶𝑅𝐼𝑅𝐸(′𝑥 = ′, 𝑥) a pour effet d’afficher 𝑥 = 13.
A. AHMADI Algorithmique et Programmation en C++
Chap. 1 Algorithmique
IV- Instructions de contrôle
12
1- La séquence
On dit aussi instruction composée : c’est une suite d’instructions (arithmétiques ou autres), délimitée
par les mots-clés, DEBUT et FIN, qui s’exécutent séquentiellement (c.à.d., l’une après l’autre).
Exemple : L’algorithme suivant lit les variables 𝑥 et 𝑦, en fait la somme 𝑧 et affiche le résultat :
𝑥 , 𝑦 , 𝑧 ∶ 𝑒𝑛𝑡𝑖𝑒𝑟 ;
𝑫𝑬𝑩𝑼𝑻
𝑙𝑖𝑟𝑒 𝑥 ;
𝑙𝑖𝑟𝑒 𝑦 ;
𝑧 ← 𝑥 + 𝑦;
é𝑐𝑟𝑖𝑟𝑒 ′𝑧 =′ , 𝑧 ;
𝑭𝑰𝑵
2- La sélection
Elle comporte les instructions conditionnelles : c’est à dire qu’une instruction (simple ou composée)
ne sera exécutée qu’après remplissage (satisfaction) de certaines conditions ;
Dans ce qui suit <condition> a comme type les booléens {𝒗𝒓𝒂𝒊, 𝒇𝒂𝒖𝒙}; c’est une expression
construite à partir des variables booléennes et des connecteurs (opérateurs) logiques « et »,
« ou », « non ».
SI <condition> ALORS
Forme 1 : instructions
FSI
Si la condition <condition> est vraie, alors exécuter les instructions; sinon on ne fait rien. On passe
à l’exécution de l’instruction suivante (qui est juste après FSI).
𝑥: entier ;
DEBUT
Exemple : lire(𝑥);
SI (𝑥 ≥ 0) ALORS
écrire(‘la valeur de x est positive’ );
FSI
FIN
SI <condition> ALORS
Forme 2 : instructions 1
SINON
Instructions 2
FSI
Si la condition <condition> est vraie, alors exécuter les instructions 1; sinon exécuter les instructions 2 ;
Exemple : L’algorithme suivant compare les variables 𝑥 et 𝑦. La variable 𝑧 contient la différence 𝑥 − 𝑦
si 𝑥 est supérieure ou égale à 𝑦, sinon 𝑧 contient 𝑦 − 𝑥. Ensuite affiche la valeur absolue de
𝑥 − 𝑦.
𝑥, 𝑦, 𝑧 : entier ;
DEBUT
lire(𝑥, 𝑦) ;
SI (𝑥 ≥ 𝑦) ALORS
𝑧 = 𝑥– 𝑦;
SINON
𝑧 = 𝑦– 𝑥 ;
FSI
écrire(‘la valeur absolue de x-y est : ‘, 𝑧) ;
FIN
Remarque :
- L’instruction après ALORS ou SINON est quelconque et peut être une instruction SI. Dans ce cas, on
dit qu’on a des SI imbriqués.
SI (a = 0) ALORS
SI (b = 0) ALORS
x = x/2 ;
FSI
SINON
x = 2*x ;
FSI
3- La répétition
Permet de répéter (ré-exécuter) une ou plusieurs instructions (quelconques) tant qu’une condition
est vérifiée ;
Elle est réalisée par des boucles de trois formes.
On évalue d’abord la condition < condition> ; si elle est vraie on exécute les instructions
«instructions » et on retourne pour réévaluer la condition. Dès que la condition est fausse on
exécute l’instruction qui suit la boucle TANT QUE ... FAIRE…
L’algorithme ci-dessus calcule la somme des entiers de 1 à n. On observe qu’il faut initialiser les
variables x et s à 0 ( au début du programme les variables contiennent des valeurs quelconques) ;
Remarque :
La condition peut ne pas être remplie dès le départ. Dans ce cas aucune instruction, à l’intérieur de la
boucle, ne sera exécutée.
Exercice : Réécrire l’algorithme de l’exemple précédent, en utilisant REPETER à la place de TANT QUE.
On utilise cette forme lorsqu’on connaît le nombre de fois qu’on exécutera les instructions en
question.
Les indices commencent par 𝟎 dans certains langages (C, C++, Java, etc.) et le dernier indice dans ce
cas, est 99.
Un tableau peut avoir une ou plusieurs dimensions.
Exemple :
FONCTION SurfaceRectangle(long,larg : Entier) : Entier
DEBUT
RETOURNER(long*larg);
FIN
ALGORITHME geometrie;
Var a,b,s : Entier;
DEBUT
Lire(a,b);
s= SurfaceRectangle(a,b);
Ecrire('La surface est : ',s);
FIN
ALGORITHME geometrie;
Var m,n : Entier;
DEBUT
m=3; n=7;
Permuter(m,n);
FIN
A. AHMADI Algorithmique et Programmation en C++
Chap. 1 Algorithmique
V- Fonctions et procédures
31
Algorithme Essai;
Var x,y: Entier;
DEBUT
x=10 ;
y=20 ;
PermuterVal(x,y);
Ecrire('x=',x,’ et y= ',y); Affichera x=10 et y=20
PermuterAdr(x,y);
Ecrire('x=',x,' et y= ',y); Affichera x=20 et y=10
FIN
Formalisme :
2- La sélection
Forme 1 : Forme 2 :
VRAI
FAUX
Forme 1 :
Forme 3 :
Forme 2 :
La complexité d’un algorithme (spatiale et/ou temporelle) dépend de la taille des données
manipulées par l’algorithme.
La complexité ne donne pas des valeurs exactes de ces 2 ressources mais juste des ordres de
grandeurs : les valeurs de ces dernières dépendent aussi, des paramètres matériels de la machine.
2. Complexité temporelle
La complexité temporelle d'un programme est le temps qu’il lui faut pour s'exécuter jusqu'à son
terme. Elle est de deux types : Temps de compilation et Temps d'exécution.
Pendant le temps de compilation, on ne calcule pas les instructions exécutables, mais on calcule
uniquement les instructions de déclaration et on vérifie les éventuelles erreurs de syntaxe et de
sémantique.
Le temps d'exécution dépend de la taille des instructions exécutables. i.e., du nombre de ses
instructions, et de la taille de ses données d’entrée. Il est calculé pour les instructions exécutables
et non pour les instructions de déclaration.
Si l’on fixe l’espace mémoire et considère uniquement le temps d’exécution, on distinguera 3 types
de complexités temporelles: meilleurs cas, pire cas et moyenne.
A. AHMADI Algorithmique et Programmation en C++
Chap. 1 Algorithmique
VII- Complexité des algorithmes
38
2. Complexité temporelle
Dans certains cas, les algorithmes ne dépendent pas seulement de la taille des données, mais aussi
des données elles-mêmes. On peut distinguer alors 3 types de complexités temporelles :
– complexité dans le pire des cas (la plus utilisée): c’est un majorant du temps d’exécution possible
pour toutes les données d’entrées possibles d’une même taille. Elle est exprimée l’aide de la
notation O (grand O).
– complexité dans le meilleur des cas (rarement utilisée): c’est un minorant du temps d’exécution
pour toutes les entrées possibles d’une même taille. Elle est exprimée l’aide de la notation Ω .
– complexité en moyenne : c’est le temps d’exécution moyen pour toutes les entrées possibles (de
même taille et équiprobables).
Exemples :
Considérons un algorithme de recherche séquentielle d’un élément dans un tableau à 𝒏 éléments :
– si l’élément se trouve à la 1ère position du tableau (meilleurs cas), on aura une seule comparaison
complexité= Ω(1).
– si l’élément recherché ne se trouve pas dans le tableau (pire cas), on aura fait 𝒏 comparaisons
complexité= 𝑂(𝑛).
A. AHMADI Algorithmique et Programmation en C++
Chap. 1 Algorithmique
VII- Complexité des algorithmes
39
Complexité Nom
𝑂(1) Constante
𝑂(ln(𝑛)) Logarithmique
𝑂(𝑛) Linéaire
𝑂(𝑛𝑙𝑛(𝑛)) Quasi-linéaire
𝑂(𝑛2 ) Quadratique
𝑂 𝑛𝑘 , 𝑘 > 2) Polynomiale
𝑂 𝑘 𝑛 , 𝑘 > 1) Exponentielle
Exemple 1 :
Exemple 3 :
Pour i=1 à n faire Si Instructions (en nombre fini) sont élémentaires (lecture,
Instructions ; écriture, affectation, etc.), alors sa complexité sera :
FinPour 𝒏. 𝑶 𝟏 = 𝑶(𝒏)
Exemple 5 : Les 2 portions d’algorithme ci-dessous, calculent tous les deux le nombre de diviseurs d’un
entier 𝑛, mais de complexités différentes.
d = 0 ;
d = 0 ; k = 1 ;
k = 1 ; TANT QUE (k∗k < n) FAIRE
TANT QUE(k <= n)FAIRE SI (n mod k = 0) ALORS
SI(n mod k)=0 ALORS d = d + 2 ;
d=d+ 1 ; 𝑶(𝒏) 𝑶( 𝒏)
FINSI
FINSI k = k + 1 ;
k=k+ 1 ; FINTQ
FINTQ SI (k∗k= n) ALORS
d = d + 1 ;
FINSI
44
C++ est un langage de programmation développé, au milieu des années 80, par le jeune ingénieur
Bjarne Stroustrup, au sein des laboratoires AT & T de Bell.
C’est une extension du langage de programmation C précédemment développé par AT & T Labs
au début des années 1970.
À l'origine, AT & T ont développé le langage de programmation C pour écrire des systèmes
d'exploitation UNIX, des logiciels de niveau système et le développement de systèmes
embarqués.
Les concepts de la programmation orientée objet (un autre type de la programmation) en abrégé
P.O.O.) ont donné naissance à de nouveaux langages dits "orientés objets" (Smalltalk, Simula,
Eiffel).
Bjarne Stroustrup, a cherché à ajouter à un langage structuré existant (le C), un certain nombre
de spécificités lui permettant d’appliquer les concepts de P.O.O. : permettre aux programmeurs C
d’effectuer une transition en douceur de la programmation structurée vers la P.O.O.
C++ est un langage compilé. c.à.d, que le programme est traduit dans le langage binaire (langage
machine) avant qu’il ne soit exécuté.
Les fichiers C++ (et un projet typique en contient plusieurs) sont appelés fichiers source. Ces
derniers sont saisis dans éditeur de texte.
i. Les fichiers sources individuels sont d’abord traduits par le compilateur (programme spécial)
en fichiers objets. Ensuite, un deuxième programme, appelé
ii. Ensuite, l’éditeur de liens (un autre programme), appelé aussi chargeur, combine les fichiers
objets individuels dans un fichier exécutable.
La compilation, l’édition des liens et l’exécution peuvent être réalisées à l’aide des commandes ou
en utilisant des environnements intégrés (IDE) : CodeBlocks, Dev cpp, etc.
Dans ce cours, nous étudierons la programmation structurée à l’aide du langage C++. La P.O.O.
sera étudiée en 3ème année.
A. AHMADI Algorithmique et Programmation en C++
Chap 2 : Présentation du langage C++ et de l’environnement de
développement intégré
II- Création et exécution d’un programme C++
47
Un programme C++ créé et exécuté dans plusieurs systèmes d’exploitation : Unix, Linux,
Windows, Mac OS, etc.
Un projet C++ peut contenir plusieurs fichiers qui peuvent être compilés séparément et liés pour
générer un seul fichier exécutable.
• on peut utiliser un éditeur de texte basique (vi, emacs, etc.) ou plus élaboré (gedit, …)
• pour la compilation, l’édition des liens et l’exécution, on peut utiliser des commandes Linux
dans un Terminal (fenêtre de commandes).
• on peut aussi, utiliser des environnement de développement intégré (IDE comme Codeblocks)
pour écrire les fichiers d’un projet, le compiler et l’exécuter plus facilement (sans utilisation
directe des commandes).
On peut y écrire maintenant les instructions de notre programme C++. Toutes les opérations
(copier, coller, insérer, retour à la ligne, enregistrer, …) sont faites à l’aide des combinaisons de
touches. "vi" est un éditeur basique et la souris ne peut y être utilisée.
Enregistrer le fichier saisi en lui donnant un nom et une extension cpp (exemple: ensam1.cpp)
Le fichier ensam1.cpp sera sauvegardé dans le répertoire courant (sinon spécifier le chemin
complet lors de l’enregistrement)
Vi était utilisé dans le temps, avant le développement des éditeurs graphiques et conviviaux.
Actuellement, il es recommandé d’utiliser des éditeurs graphiques plus élaborés comme "gedit" .
A. AHMADI Algorithmique et Programmation en C++
Chap 2 : Présentation du langage C++ et de l’environnement de
développement intégré
II- Création et exécution d’un programme C++
49
L’éditeur gedit est installé par défaut dans plusieurs distributions Linux (comme ubuntu). S’il n’est
pas installé, il suffit de taper, dans un terminal, la commande suivante :
sudo apt install gedit
le mot de passe de l’administrateur (root), sera demandé avant le téléchargement et
l’installation du package.
Une fois, installé, on peut le lancer en utlisant le lanceur d’application (gfraphique) ou en tapant
daans un terminal la commande : gedit
Ensuite, on saisit les instructions de notre programme avant de l’enregistrer sous le nom :
ensam1.cpp :
#include <iostream>
using namespace std;
int main (){
cout << "Hello World !\n";
return 0;
}
Maintenant, il faut compiler notre programme par un compilateur (pour chaque langage, il peut y
en avoir plusieurs). Pour C++, on utilisera le compilateur GNU GCC. S’il n’est pas déjà installé, on
pourra procéder comme suit :
A. AHMADI Algorithmique et Programmation en C++
Chap 2 : Présentation du langage C++ et de l’environnement de
développement intégré
II- Création et exécution d’un programme C++
50
1. Taper la commande sudo apt update suivie d'une pression sur la touche Entrée pour
mettre à jour la liste des paquets des dépôts de la distribution Linux.
2. Taper la commande sudo apt install build-essential suivie de la touche
Entrée pour installer les compilateurs GCC, G++, les dépendances requises ainsi que le
gestionnaire de compilation Make.
3. Taper sudo apt install manpages-dev suivie de la touche Entrée pour installer
les pages des manuels de ces outils de compilation, que l’on pourra consulter en cas de
besoin au moyen de la commande man nom_de_l'outil.
4. Se placer dans le répertoire où se trouve le programme (code source). Taper la commande cd
pour naviguer entre les dossiers. Exemple :
cd /home/[nom_d'utilisateur]/Mes_programmes ou bien :
cd ~/Mes_programmes
5. compiler le programme à l’aide de la commande :
g++ [nom_prgme].cpp –o [nom_exécutable].
Exemple: g++ ensam1.cpp –o ensam1
6. Exécuter le fichier exécutable généré en tapant la commande : ./ensam1
A. AHMADI Algorithmique et Programmation en C++
Chap 2 : Présentation du langage C++ et de l’environnement de
développement intégré
III- Environnement de développement intégré (IDE)
51
• Code:: Blocks
• CLion
• Eclipse CDT
• CodeLite
• Apache NetBeans
• Dev C++
• …
Certains IDEs peuvent être disponibles sur plusieurs SE. Exple : Codeblocks propose 3 versions
(Linux, Windows et MAC).
Certains IDEs permettent de choisir entre plusieurs langage de programmation. Exple :
Codeblocks : C, C++ et Fortran.
A. AHMADI F Algorithmique et Programmation en C++
Chap 2 : Présentation du langage C++ et de l’environnement de
développement intégré
IV- CodeBlocks
53
1 2
Cette version téléchargée contient un compilateur C++ par défaut qui est le "GNU GCC compiler". S’il
n’est pas détecté automatiquement, allez dans le menu Settings, puis Compiler :
Sélectionnez le compilateur "GNU GCC Compiler". Puis , cliquez sur l’onglet "Toolchain executables"
et enfin sur le bouton "Auto-detect".
Eléments de base du
langage C++
Exécution :
Un programme est composé de deux éléments : les données et les opérations sur ces données,
i.e., un programme reçoit, à son entrée, des données et les traite avant de fournir des résultats
(autres données) à sa sortie.
Chaque donnée a un type (entier, flottant, caractère, …), et est stockée dans la RAM, sous forme
de séquences binaires.
Un type de données indique le domaine des valeurs qu'une variable ou expression peut prendre
et les opérations qu'on peut lui appliquer.
Le type permet de :
- définir la représentation interne d’une donnée dans la mémoire ;
- connaître l’espace mémoire (nb d’octets) nécessaire au stockage de cette donnée.
Par exemple le nombre entier -350 peut être stocké sur 2 ou 4 octets. Lors de l'accès à la
mémoire, il est important :
- de lire le bon nombre d'octets.
- que la séquence de bits en cours de lecture, soit interprétée correctement comme un entier
signé.
Le compilateur ou l’interpréteur a aussi besoin de connaître les types de données pour définir les
opérations qu’il peut réaliser sur ces dernières.
Exple : l’addition de 2 entiers et celle de 2 flottants ne sont pas réalisées (implémentées) en
langage machine, de la même manière.
Les types de base du langage C++ peuvent se grouper en 4 catégories :
⁻ nombres entiers (mot-clé int)
⁻ nombres flottants (mot-clé float ou double) ;
⁻ valeurs booléennes, i.e., la valeur est soit vrai, soit faux (mot-clé bool).
Le compilateur C++ reconnaît les types fondamentaux (intégrés), ci-dessus, sur lesquels sont
basés tous les autres types (vecteurs, structures, pointeurs, classes, ...).
Il est aussi possible d’utiliser un caractère en faisant appel à son code et à "\".
'A' ⟺ '\x41' ⟺ '\101' ; '\r' ⟺'\x0d' ⟺ ’\15’ ⟺’\015’; ’\a’ ⟺ ’\x07’ ⟺ ’\x7’ ⟺ ’\07’ ⟺’\007’
A
Chap 3 : Eléments de base du langage C++
II- Types de base
64
3- Types entiers
Type Taille Intervalle de valeurs
char 1 octet -128 à +127 ou 0 à 255
unsigned char 1 octet 0 à 255
signed char 1 octet -128 à +127
int ≥2
2 octets -32768 à +32767
4 octets -2147483648 à +2147483647
unsigned int ≥2
2 octets 0 à 65535
4 octets 0 à 4294967295
≥2
short 2 octets -32768 à +32767
unsigned short 2 octets 0 à 65535
≥4
long 4 octets -2147483648 à +2147483647
unsigned long 4 octets 0 à 4294967295
long long ≥8
8 octets -9223372036854775808 à 9223372036854775807
Remarque : En C++ (ANSI), la taille des types entiers n’est pas prédéfinie. Toutefois, on a :
𝑡𝑎𝑖𝑙𝑙𝑒 (𝑠𝑜𝑟𝑡) ≥ 2, 𝑡𝑎𝑖𝑙𝑙𝑒 (𝑙𝑜𝑛𝑔) ≥ 4 et : taille(𝑐𝑎𝑟) ≤ taille(𝑐𝑜𝑢𝑟𝑡) ≤ taille(𝑖𝑛𝑡) ≤ taille(𝑙𝑜𝑛𝑔)
A. AHMADI Algorithmique et Programmation en C++
Chap 3 : Eléments de base du langage C++
II- Types de base
65
3- Types entiers
Programme de vérification :
Exécution :
Exécution :
Le classement des constantes décimales est le suivant : int, long, unsigned long
Le type de la constante entière peut être indiqué en ajoutant la lettre L ou l (pour long), U ou
u (pour unsigned int) ou bien UL/ul ( pour unsigned long).
Exemples : 35L ou 35l ; 35U ou 35u ; 35UL ou 35ul.
Remarque : Un type supérieur permet de définir des valeurs très grandes, mais gaspille de l’espace
mémoire.
Les nombres à virgule flottante sont toujours représentés sous forme de décimales et une virgule
décimale est utilisée pour distinguer la partie fractionnaire de la partie entière. Cependant, la
notation exponentielle est également autorisée.
Exemples : 85.25 3.4E-2 (ou 3.4e-3). Notons que 2.5E2 = 2.5*102.
Un point décimal ou E (e) doit toujours être utilisé pour distinguer les constantes à virgule
flottantes des constantes entières.
Les constantes à virgule flottante sont de type double par défaut. Cependant, on peut ajouter F
ou f pour désigner le type flottant, ou ajouter L ou l pour le type long double.
Un identificateur (nom) est utilisé pour désigner une entité (variable, constante, type, structure,
fonction, …). Il doit être choisi en respectant les contraintes suivantes :
i. un nom contient une série de lettres, de chiffres ou de caractères de soulignement ( _ ). Les
caractères spéciaux et les lettres accentuées ne sont pas valides. C++ est sensible à la casse ;
c.à.d, que les lettres majuscules et minuscules sont différentes.
ii. le premier caractère doit être une lettre ou un trait de soulignement.
iii. il n'y a aucune restriction sur la longueur d'un nom et tous les caractères du nom sont
significatifs.
iv. les mots-clés C++ (int,if,for,while,…) sont réservés et ne peuvent pas être utilisés
comme noms.
Exemples de noms valides :
a ; US; us ; VOID ; _var ; val_Max2.
Une division effectuée avec des opérandes entiers produira un résultat entier (Ex., 25/2 donne
12). Si au moins un des opérandes est un flottant, le résultat sera également un flottant (Ex. par
exemple, la division 25.0/2 produit un résultat exact de 12.5.
Le reste de la division (modulo) ne s'applique qu'aux opérandes entiers et renvoie un entier (Ex.,
17%3 retournera à 2.
bool b1=true ;
b1+3 ;
int (=4)
• il y a d’abord conversion implicite de la valeur de x en double, puis évaluation de l’addition qui aura
comme résultat une valeur double, et enfin cette valeur sera convertie en int (on prendra sa valeur
entière) pour être affectée à la variable n (de type int).
• Si cette valeur est très grande (n’est pas représentable sur int), n prendra une valeur erronée ou une
erreur d’exécution se produira (en fonction de l’environnement utilisé).
lors d’une affectation, On peut aussi faire une conversion forcée à l’aide de l’opérateur CAST.
Exemple :
double x;
x=(double)20/6 ; // x=3.33… L’opérateur cast a une priorité très élevée. Il faut
donc, mettre son opérande entre parenthèses.
x=(double)(20/6) ; // x=3
Exemples :
y = 4 ;
x = ++y – 2 ; ⇒ x = 3 et y = 5
y = 4 ;
x = y-- - 2 ⇒ x = 2 et y = 3
Exemples :
• A+B*C ⇔ A+(B*C)
• A*B+C%D ⇔ (A*B)+(C%D)
• -A/B ⇔ (-A)/B
• ++i+j-- ⇔ (++i)+j;j=j-1;
Les expressions comparées sont toujours des valeurs numériques quelles que soient les types des
variables qu’elles utilisent (short, int, long, float, …, bool, char).
Pour le type bool : true=1 et false=0. On a bien true>false.
Pour le type char, on peut comparer 2 caractères en comparant leurs codes. Ces derniers
dépendent du codage utilisé. Mais, on a toujours l’ordre alphabétique qui est respecté pour les
minuscules d’une part, pour les majuscules d’autre part. Les chiffres sont aussi classés par ordre
naturel.
• Exemples :
• (5 < 3) && (30 >20) prendra la valeur 0
• (5 < 3) || (30 >20) prendra la valeur 1
• !(5 < 3) prendra la valeur 1
• if (a==0) i++; ⇔ if (!a) i++;
Exemple 1:
𝑚𝑎𝑥 = 𝑥 > 𝑦 ? 𝑥 ∶ 𝑦 ; ⟺ 𝑖𝑓 (𝑥 > 𝑦) 𝑚𝑎𝑥 = 𝑥 ;
𝑒𝑙𝑠𝑒 𝑚𝑎𝑥 = 𝑦;
- Les 3 expressions : x>y, x et y sont les opérandes de l’opérateur conditionnel.
- L’opérateur conditionnel est matérialisé par deux symboles séparés "?" et ":"
- La priorité de l’opérateur conditionnel est faible (juste après celle de l’affectation).
• 𝑧 = 𝑥 = 𝑦 ?𝑎 ∶ 𝑏 ; ⇔ 𝑧 = 𝑥 = 𝑦 ?𝑎 ∶ 𝑏 ;
L’opérateur séquentiel permet d’exprimer plusieurs calculs successifs au sein d’une même
expression. La valeur de cette dernière est le résultat du dernier calcul.
Exemple 1:
• i++, j=i+k ; ⇔ i++; j=i+k ;
L’opérateur séquentiel est utile dans les instructions de sélection et de boucle.
Exemple 2:
• if (i++, >0) a=0 ; ⇔ i++; if (k>0) a=0;
• for (i=0,j=10; i<j ; i++,j--)
…
En C ++, les entrées/sorties sont effectuées sous la forme d'une séquence d'octets appelée flux.
Fichiers d'en-tête de bibliothèque d'E/S :
- <iostream> : définit les objets cin,cout, cerr et clog, qui correspondent resp. au flux
d'entrée standard, au flux de sortie standard, au flux d'erreur
standard non mis en mémoire tampon et au flux d'erreur
standard mis en mémoire tampon.
- <iomanip> : déclare des services utiles pour effectuer des E/S formatées avec des
manipulateurs de flux paramétrés, tels que setw et setprecision.
- <fstream> : déclare les services pour le traitement de fichiers contrôlés par l'utilisateur.
1- Le flux de sortie standard - cout :
cout est utilisée pour produire une sortie sur le périphérique standard de sortie (qui est
généralement l’écran).
Les données de sortie (à afficher) sont insérées dans le flux se sortie cout à l’aide de l’opérateur
d’insertion << (surdéfini).
L'opérateur << permet d’afficher les données des types intégrés : char, bool, entier, flottant,,
chaînes de caractères et pointeurs.
Tampon de lecture:
Les caractères saisis (aussi le caractère de validation <Entrée>) au clavier sont stockés
provisoirement dans une mémoire tampon avant d’être explorés par l’opérateur >> en fonction
du besoin.
Les caractères non explorés pour la lecture courante peuvent être explorés et affectés aux
variables des prochaines lectures.
L’exploration d’une valeur du tampon est faite caractère par caractère jusqu’à la rencontre d’un
séparateur (espace, tabulations horizontale et verticale, saut de page, fin de ligne) ou d’un
caractère invalide.
Exemples :
Si on tape :
a12@ ⟹ c = ’a’ n = 12
a^^12@ ⟹ c = ’a’ n = 12
^a12@ ⟹ c = ’a’ n = 12
Si dans une lecture, un ou plusieurs caractères ont été explorés avant de rencontrer un caractère
invalide, la lecture suivante commencera l’exploration à partir de ce caractère invalide.
Exemple : cin >> n >> c ; Si on tape :
12a@ ⟹ n = 12 et c = 'a'
Exécution
Exécution
On pourra désactiver showpoint en utilisant le
manipulateur noshowpoint, ou uppercase
en utilisant nouppercase
Exécution :
Exécution :
Avec cout<<P[i][j]<<" "; Avec cout<<setw(4)<<P[i][j]<<" ";
Décalage des colonnes Alignement des colonnes
97
Le langage C++ dispose des instructions de contrôle suivantes :
• Séquence (bloc d’instructions).
• Instructions de sélection : if…else… et switch…
• Instructions de répétition (boucle) : do…while, while… et for…
• Instructions de branchement inconditionnel : goto, break et continue.
1- Bloc d’instructions
Un bloc d’instructions est une suite d’instructions simples ou composées placées entre "{" et "}".
Exemples :
• Les variables d’un bloc cachent la
visibilité des variables appartenant
aux blocs supérieurs.
• Une variable peut être utilisée
dans n’importe quel bloc qui suit sa
déclaration.
• Une variable déclarée au sein d’un
bloc ne peut pas être utilisée en
dehors de celui-ci.
98
2- Instruction if
Forme1 : Forme2 :
Syntaxe : if <expression> { if <expression> {
Traitement Traitement1
} }
else {
Traitement2
}
- expression : expression quelconque.
- Traitement1, Traitement1 et Traitement2 : instructions quelconques (simples, blocs,
instructions structurées). S’ils contiennent une seule instruction, alors les accolades sont
optionnelles.
#include<iostream>
Exemple 1 : Valeur absolue de x-y using namespace std;
main(){
int x,y;
cout<<"Donner x et y : " ; cin>>x>>y ;
if (x>y) cout<<"Valeur absolue= "<<x-y<<endl ;
else cout<<"Valeur absolue= "<<y-x<<endl ;
}
#include <iostream>
using namespace std;
int main(){
float x, y, min;
cout << "Donner 2 flottants: \n";
if(cin >> x && cin >> y) { // si les 2 valeurs sont valides
if( x < y )
min = x;
else
min = y;
cout << "Le minimum est: " << min << endl;
}
else
cout << "Entree(s) invalide(s)" << endl;
}
Remarque :
Dans cet exemple, la condition est une expression constituée de deux instructions de lecture.
Syntaxe:
3- instruction switch
switch est une instruction de
sélection multiple qui généralise la
sélection simple. Elle permet d’éviter
l’emboîtement (l’imbrication) de
plusieurs sélections simples, en
permettant de spécifier les différents
cas sans la contrainte d’utiliser les
structures if … else.
Syntaxe:
switch est une instruction de sélection
multiple qui généralise la sélection
simple. Elle permet d’éviter
l’emboîtement (l’imbrication) de
plusieurs sélections simples, en
permettant de spécifier les différents cas
sans la contrainte d’utiliser les structures
if … else.
Exemple1:
Exemple2:
#include<iostream>
using namespace std; #include<iostream>
main() using namespace std;
{ int i=1, max, y ; main(){
cout<<"Donner le premier entier : " ; int n;
cin>>max ; do{
do cout << "donnez un entier >0 : " ;
{ cout<<"Donner l'entier suivant : " ; }
cin>>y ; while (cin >> n, n <= 0) ;
if (y>max) max=y ; cout << "Bien. Vous avez donné un
i++ ; entier >0 : "<<endl;
}while (i<10) ; }
cout<<"Max="<<max<<endl ;
}
A. AHMADI Algorithmique et Programmation en C++
Chap 3 : Eléments de base du langage C++
VIII- Instructions de contrôle
5- instruction while …
105
L’instruction while … permet de répéter un traitement tant qu’une condition (expression) est
vraie. Mais, la condition est examinée avant le traitement (c’est la traduction de Tant que … Faire ...)
Syntaxe : while (expression) expression peut être quelconque (constante, arithmétique,
booléenne).
instruction
instruction : simple, bloc d’instructions, instruction de contrôle.
Exemple1: Exemple2:
#include<iostream> // calcule la moyenne d'un certain nombre
using namespace std; d'entiers
main() { #include <iostream>
int i=1, s=0, n ; using namespace std;
cout<<"Donner n : " ; cin>>n ; int main(){
while (i<=n){ int x, cpt = 0;
s+=i ; float s = 0.0;
i++ ; cout << "Saisissez des entiers\n"
} "(pour arreter tapez une lettre):"<< endl;
cout<<"Somme="<<s<<endl ; while(cin >> x ){
} s += x;
++cpt;
}
cout << "La maoyenne des nombres saisis est: "
<< s/cpt << endl;
}
A. AHMADI Algorithmique et Programmation en C++
Chap 3 : Eléments de base du langage C++
VIII- Instructions de contrôle
5- instruction for…
106
Syntaxe : expression1;
while (expression2){
for ([expression1] ; [expression2] ; [expression3]) instruction
instruction expression3;
}