Vous êtes sur la page 1sur 198

Université Sidi Mohamed Ben Abdellah

Faculté des sciences


Pr. Bennani Taj

Bases du

Langage C++
Avant propos

• Cours essentiel pour votre carrière !!


– L’informatique est l’un des secteurs qui embauche le plus,
– La connaissance de l’informatique est primordiale pour tous,

• La programmation est une discipline qui s’apprend par la pratique !!


– (Dev-C++, www.developpez.com, www.openclassrooms.com, www.ideone.com,
http://cpp.sh/ )

• Le langage C++ n’est pas simple, lire le polycopié n’est pas suffisant, il faut
assister aux cours/TD/TP et travailler beaucoup à la maison

• N’étudiez pas que juste pour l’examen, étudiez pour montez en


compétence !!

• Améliorez votre Français et Anglais, ce sont les langues de cette science…

• Contact: Bennani.Taj@gmail.com

Bases du C++ 2
Objectif du cours

• Rappel des composants d’un ordinateur

• Apprendre les concepts de base de la programmation

• Etre capable d’analyser des problèmes simples et écrire les


programmes correspondants en C++

Bases du C++ 3
Généralités

• Ordinateurs, informatique, c’est quoi ?

• Représentation de l’information sur l’ordinateur


• Composants matériels
• Composants logiciels

4
REPRÉSENTATION DE
L’INFORMATION SUR
L’ORDINATEUR

Bases du C++ 5
Le fonctionnement binaire de l'ordinateur

• Informatique :
– traitement automatique de l’information au moyen d’un ordinateur.
• Comment représenter l’information avec l’électronique?
– 2 états électriques

Hors tension Sous tension


0 1

Commutateur

Bit (BInary digiT)


Bases du C++ 6
La représentation binaire

• Combien de valeurs avec combien d’ampoules?


2 ampoules permettent de représenter…

Si =0

=0 =1
4 valeurs
et =2 ou
22 valeurs
=1 =3
Bases du C++ 7
Le système de numération binaire
• n bits nous permettent de représenter 2n valeurs différentes.
• 1 octet : une combinaison de 8 bits
– 28 = 256 valeurs possible
– permet de coder tous les caractères alphabétiques, numériques, et
symboles tels que ?,*,&, …

Espace Nombre de valeurs possibles


1 bit 21 2

2 bits 22 4

4 bits 24 16

1 oct = 8 bits 28 256


2 oct = 16 bits 216 65 536
4 oct = 32 bits 232 4 294 967 296
8 oct = 64 bits 264 18 446 744 073 709 551 616
Bases du C++ 8
Unités de mesure informatique
• Nomination standardisée par le Commission électrotechnique internationale en 1998.

Préfixes décimaux Valeur Préfixes binaires Valeur

Octet (o) 8 bits Octet (o) 8 bits

Kilooctet (Ko) 103 o = 1 000 o Kibioctet (Kio) 210 o = 1 024 o

Mégaoctet (Mo) 106 o = 1 000 Ko Mébioctet (Mio) 220 o = 1 024 Kio

Gigaoctet (Go) 109 o = 1 000 Mo Gibioctet (Gio) 230 o = 1 024 Moi

Téraoctet (To) 1012 o = 1 000 Go Tébioctet(Tio) 240 o = 1 024 Gio

Windows Linux

Bases du C++ 9
Conversion binaire / décimal

• Du binaire au décimal :
7 6 5 4 3 2 1 0
– Adition des puissances de 2 27 26 25 24 23 22 21 20
• 𝑋(10) = 𝑛−1 𝑖 0 1 0 0 1 1 0 1
𝑖=0 ℎ𝑖 . 2
– Avec n le nombre de chiffres et ℎ𝑖 la valeur du chiffre à la position i

• 01001101(2) = 26 + 23 + 22 + 20 (10) = 77(10).

• Du décimal au binaire :
– Divisions successives par 2
• 44 (10) = 101100 (2)

Bases du C++ 10
Système de numération hexadécimal

• Système Hexadécimal :
– Utilisation de 16 ‘chiffres’:
0 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; A ; B ; C ; D ; E ; F.
1 0
• De l’hexadécimal au décimal 161 160
– 𝑋(10) = 𝑛−1 𝑖 6 4
𝑖=0 ℎ𝑖 . 16
• Avec n le nombre de chiffres et
• ℎ𝑖 la valeur du chiffre à la position i

– Exemple : 64(16) = 6x161 +4x160(10)=100(10)

• Du décimal à l'hexadécimal (deux méthodes)


– Passage par le binaire comme système
intermédiaire
• Exemple : 335(10) = 0001 0100 1111‬(2) = 14F(16)
– Divisions successives par 16

Bases du C++ 11
Système de numération à base b

• Un système de numération à base b est un système qui n'a


que b symboles pour représenter les chiffres
• 0,1,…, (b-1)

• Conversion du système à base b au décimal


𝑛−1 𝑖
– 𝑋(10) = 𝑖=0 ℎ𝑖 . 𝑏
• Avec n le nombre de chiffres et
• ℎ𝑖 la valeur du chiffre à la position i

• Conversion du décimal au système à base b


– Divisions successives du chiffre décimal par b

Bases du C++ 12
Passage de la base 10 vers une base
quelconque des nombres fractionnaires
Nombres fractionnaires: On multiplie la partie fractionnaire par la base en
répétant l’opération sur la partie fractionnaire du produit jusqu’a ce qu’elle soit
nulle (ou que la précision voulue soit atteinte).
Pour la partie entière, on procède par divisions comme pour un entier.
Exemple: conversion de 54,2510 en base 2

Partie entière : 5410  1101102

Partie fractionnaire :
0,25  2  0,50  a1  0
0,50  2  1,00  a2  1
0,00  2  0,00  a3  0

Donc 54,2510  110110,0102

Bases du C++ 13
Notation des entiers négatifs
Les entiers négatifs sont stockés en binaire par complément à deux. Le
complément à deux se calcule en deux étapes:

• On inverse d'abord les bits (complément à un)


• On ajoute 1 au résultat
L’addition
0 0 1
+ 0 + 1 + 1
0 1 10
Retenue

Exemple: Conversion de -13 en base 2


13 se note 0000 1101 sur‬8‬bits,‬et‬l’inverse de 0000 1101 qui est 1111 0010,
après on ajoute 1 au résultat, enfin on obtient 1111 0011.
-13 se note 1111 0011 sur 8 bits
L'opposé d'un entier est son complément à deux.

Bases du C++ 14
• Exemples d’application
1) 1101)2= )10 2) 1110)2= )10

3) 1100)2= )10 4) 1001)2= )10

5) 1234)8= )10 6) 7765)16= )10

7) 098A)16= )10

1) 12 Mo= Ko 2) 1To= Mo

3)1To= Ko 4)10Mo= bit


Bases du C++ 15
• Exemples d’application
1) 1101)2= 13)10 2) 1110)2=14)10

3) 1100)2= 12)10 4) 1001)2=9)10

5) 1234)8=668)10 6) 7765)16=30565)10

7) 098A)16=2442)10

1) 12 Mo=12 *210.Ko 2) 1To=220.Mo

3)1To=230Ko 4)10Mo=8*210bit
Bases du C++ 16
Code ASCII (1)

• Code ASCII (American Standard Code for Information Interchange) donne


les correspondances entre les caractères alphanumériques et leurs
représentation binaire.
• Version 1, 1969, 7bits, 128 caractères
ASCII BITS ASCII BITS ASCII BITS ASCII BITS
NUL 0000000 SP 0100000 @ 1000000 ` 1100000
SOH 0000001 ! 0100001 A 1000001 a 1100001
STX 0000010 " 0100010 B 1000010 b 1100010
ETX 0000011 # 0100011 C 1000011 c 1100011
EOT 0000100 $ 0100100 D 1000100 d 1100100
ENQ 0000101 % 0100101 E 1000101 e 1100101
ACK 0000110 & 0100110 F 1000110 f 1100110
Bel 0000111 ‘ 0100111 G 1000111 g 1100111
BS 0001000 ( 0101000 H 1001000 h 1101000
HT 0001001 ) 0101001 I 1001001 i 1101001
LF 0001010 * 0101010 J 1001010 j 1101010
VT 0001011 + 0101011 K 1001011 k 1101011
FF 0001100 , 0101100 L 1001100 l 1101100
CR 0001101 - 0101101 M 1001101 m 1101101
SO 0001110 . 0101110 N 1001110 n 1101110
SI 0001111 / 0101111 O 1001111 o 1101111
DLE
DC1
0010000
0010001
0
1
0110000
0110001
P
Q
1010000
1010001
p
q
1110000
1110001 ‘q’ :
DC2 0010010 2 0110010 R 1010010 r 1110010
DC3
DC4
0010011
0010100
3
4
0110011
0110100
S
T
1010011
1010100
s
t
1110011
1110100
1110001 = 113
NCK 0010101 5 0110101 U 1010101 u 1110101
SYN 0010110 6 0110110 V 1010110 v 1110110
ETB 0010111 7 0110111 W 1010111 w 1110111
CAN 0011000 8 0111000 X 1011000 x 1111000
EM 0011001 9 0111001 Y 1011001 y 1111001
SUB 0011010 : 0111010 Z 1011010 z 1111010
ESC 0011011 ; 0111011 [ 1011011 { 1111011
FS 0011100 < 0111100 \ 1011100 | 1111100
GS 0011101 = 0111101 ] 1011101 } 1111101
RS 0011110 > 0111110 ^ 1011110 ~ 1111110
US 0011111 ? 0111111 _ 1011111 DEL 1111111
Bases du C++ 17
Code ASCII (2)

• Version 2, 1981, IBM, 8bits, 256 caractères

Bases du C++ 17
Codage d’une image
Image matricielle = matrice de points
élémentaires
= PIcture ELement = pixel

• Chaque pixel est codé en binaire sur un certain


nombre de bits.

Bases du C++ 18
Codage d’une image (suite)

Image noir et blanc :


• Chaque pixel est codé sur 1 bit : 0 = blanc
1 = noir

0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 1 1 1 1 0
1 1 1 1 1 1 303 pixels
0 1 0 0 1 0

36 bits

303 pixels

303 x 303 x 1 bit = 91809 bits


Bases du C++ 19
Codage d’une image (suite)

Image Niveaux de gris


• Chaque pixel est codé sur plusieurs bits
• Si on code sur 8 bits = 1 pixel = 1 octet

303 pixels
303 x 303 x 1 octet = 91809 octets
= 734 472 bits

303 pixels

Bases du C++ 20
Codage d’une image (suite)

Image couleur 24 bits


• Code RVB = Rouge, Vert, Bleu
• Chaque couleur est codée sur 8 bits
• La couleur du pixel est‬l’association des 3 couleurs
o Chaque pixel est codé sur 24 bits (true color)

303 x 303 x 3 octets = 275 424 octets


303 pixels = 2 203 392 bits
•‬Pour faciliter le stockage des images en mémoire

Bases du C++ 21
Les composantes matérielles

Bases du C++ 23
Les composantes matérielles

Bus

Unité de traitement
Périphérique Processeur Périphérique
d’entrée de sortie
(input) 
 Mémoire centrale 
(output)

RAM ROM


Port d’entrée Port de sortie
Mémoire externe ou
unité de stockage
Bases du C++ 24
Les composantes matérielles : Carte mère

Bases du C++ 25
La mémoire centrale

• Mémoire morte ou ROM


– mémoire non volatile : conserve ses données même si on coupe l’alimentation
– Contient le BIOS

• Mémoire vive ou RAM (Random Access Memory)


– mémoire volatile : perd ses données lorsqu'on coupe son l’alimentation
– C’est la mémoire principale de l’ordinateur

• La RAM contient :
– les données à traiter
– les données résultant du traitement
– les instructions (les logiciels)

• Capacité : de 512 Mo à 32 Go*


• Vitesse : 10 ns* (nanosecondes ou milliardièmes de secondes)
• Deux types de mémoires vives :
– mémoire vive dynamique (DRAM)
• La plus utilisée
– mémoire vive statique (SRAM)
• La plus performante et la plus chère

* Les capacités sont données à titre d’exemple seulement, car la puissance des ordinateurs s’accroît constamment.
Bases du C++ 26
Le processeur

• Contient l'unité arithmétique et logique


• Vérifie les conditions et exécute les instructions:
addition, soustraction, multiplication, division,
comparaison de données
– Exemple : Si x > 0, alors multiplier x par 5
• Des millions de transistors (interrupteurs) sur une puce
de silicium

• Puissance
– Dépend de la capacité d'adressage de la mémoire (en
bits)
• Vitesse d'horloge : 1600 MHz*
– 1 mégahertz = 1 million de cycles par seconde
– 1 cycle = 1 instruction
• Exemples :
– Intel : Celeron, i3, i5, i7 (PC)
– Motorola (MacIntosh)

* Les capacités sont données à titre d’exemple seulement, car la puissance des ordinateurs s’accroît constamment.
Bases du C++ 27
Les bus

• Ensemble de conducteurs parallèles destinés


au transfert de données entre les diverses
composantes matérielles d'un système
• Largeur du bus de données
– De 1 à 64 bits*
• Vitesse de transfert
– 533 MHz*

* Les capacités sont données à titre d’exemple seulement, car la puissance des ordinateurs s’accroît constamment.
Bases du C++ 28
Les ports d'entrée-sortie

• Port PS2
– Port de clavier
– Port de souris
• Port série : 1 bit à la fois
• Port VGA : branchement analogique d'une carte graphique à un écran
• Port parallèle : 8 bits à la fois
• Port USB (Universal Serial Bus)
– Rapide : 480 Mbits/sec*
– Connexion prête à tourner (plug and play)
– Imprimante, caméra numérique, etc. LAN
RJ45

PS/2 - Souris

PS/2 - Clavier

Bases du C++ 29
Les périphériques d'entrée

• Saisie des données


– Clavier
– Souris
– Numériseur
– Micro
– Caméra numérique
– Etc.

Bases du C++ 30
Les périphériques de sortie

• Restitution des données


– Écran
– Imprimante
– Traceur
– Haut-parleur
– Etc.

Bases du C++ 31
La mémoire externe ou unité de stockage

• Stockage interne ou externe de longue durée (même après la


mise hors tension de l’ordinateur)
– CD-ROM (en centaines de Mo)
– DVD (en quelques Go)
– Clé de stockage USB (en dizaines de Go)
– Disque dur (en To)

* Les capacités sont données à titre d’exemple seulement, car la puissance des ordinateurs s’accroît constamment.
Bases du C++ 32
Les composantes logicielles

Bases du C++ 33
Les composantes logicielles

Logiciels d'application

Système Pilotes de
d'exploitation périphériques

Microcode (BIOS)

Bases du C++ 34
Le microcode BIOS
• Basic Input-Output System
• Couche logicielle fondamentale
qui contrôle le matériel
Logiciels d'application • Le premier programme qui
Système Pilotes de démarre
d'exploitation périphériques – Vérifie et initialise le matériel
– Démarre le système d’exploitation
Microcode (BIOS)

Bases du C++ 35
Le système d'exploitation

• Plate-forme commune pour les


logiciels d'application
• Fonctions communes :
Logiciels d'application
– Exécution des logiciels
Système Pilotes de d'application
d'exploitation périphériques – Gestion des fichiers
– Gestion des utilisateurs
Microcode (BIOS)
– Contrôle des programmes
– Etc.
• Exemples : Windows, Linux,
Unix, Mac OS, …

Bases du C++ 36
Les pilotes de périphériques

• Extensions du système
d'exploitation (Drivers)
• Pour ajouter facilement une
Logiciels d'application
grande variété de
Système Pilotes de périphériques
d'exploitation périphériques
• Exemples :
Microcode (BIOS) – clavier
– souris
– imprimante
– carte d'interface réseau

Bases du C++ 37
Les logiciels d'application

• Plusieurs types :
– Editeur de texte : MS Word,
Notepad++, Emacs,
Logiciels d'application – Navigateur : Chrome, Internet
Explorer, Firefox,
Système Pilotes de
d'exploitation périphériques – Messagerie instantanée :
WhatsApp, Skype, Messenger,
Microcode (BIOS) – Traitement d’image: Photoshop,
Gimp,
– Réseau sociaux : Facebook,
Linkedin,
– Jeux: Minecraft, Starcraft II, World
of Warcraft, Worms,

Starcraft
Bases du C++ 38
PROGRAMMATION
• Langages informatiques
• Développement logiciel
• Production d'exécutable

Programmation, Quoi? Pourquoi? Comment?

39
La programmation ?

• Beaucoup de logiciels existent, mais tous ne répondent pas à


notre besoin

– Comment créer des logiciels qui répond à notre besoin spécifique ?


– Quel moyen pour communiquer avec le matériel ?

Programmation :
- Rédiger des instructions pour commander l’ordinateur, en utilisant un
langage informatique

Bases du C++ 40
LANGAGES INFORMATIQUES

Bases du C++ 41
Langages informatiques

• Un langage informatique est un outil permettant de donner


des ordres (instructions) à la machine

– A chaque instruction correspond une action du processeur

• Intérêt : écrire des programmes (suite d’instructions) destinés


à effectuer une tache donnée

– Exemple: un programme de calcultrice

• Contrainte: être compréhensible par la machine

Bases du C++ 42
Niveau d'abstraction des langages de programmation

Ordinateur Langage naturel

movl $4, %eax


011100101010 movl $1, %ebx
movl $str, %ecx C/C++ Java,C#...
111000101101
movl $8, %edx

Les
Langage Langage Langages
machine Assembleur évolués

Bases du C++ 43
Langage machine

• C’est le langage binaire:


– l’information est exprimée et manipulée sous forme d’une suite de bits

• Un bit (binary digit) = 0 ou 1 (2 états électriques)

• Une combinaison de 8 bits= 1 Octet  28 = 256 valeurs possibles

• Le code ASCII donne les correspondances entre les caractères


alphanumériques et leurs représentation binaire.

• Les opérations logiques et arithmétiques de base (addition,


multiplication,…) sont effectuées en binaire

Bases du C++ 44
Langage Assembleur

• Problème: le langage machine est difficile à comprendre par


l'humain

• Idée: trouver un langage compréhensible par l'homme qui sera


ensuite converti en langage machine
– Assembleur (1er langage): exprimer les instructions élémentaires de façon
symbolique
ADD A, 4
LOAD B traducteur langage machine
MOV A, OUT

– +: déjà plus accessible que le langage machine
– -: dépend du type de la machine (n’est pas portable)
– -: pas assez efficace pour développer des applications complexes

Bases du C++ 45
Langages évolués

• Langage informatique de haut niveau:


– proche du langage humain «anglais» (compréhensible)
– permet une plus grande portabilité (indépendant du matériel)
– Manipulation de données et d’expressions complexes (réels,
objets, a*b/c, …)
• Nécessité un traducteur (compilateur/interpréteur)

Programme Programme exécutable


code source en Langage machine
Compilateur /
en langage de interpréteur 100010010010011000001001
programmation 011100101010111000100100
100110001001001001001001

Bases du C++ 46
Types principaux de langages de programmation

• langages de programmation Spaghettis :


– Assembleur, Fortran I, Basic
– Logique de saut
– Code et données étroitement imbriqués

• langages de programmation Procédurale :


– Pascal, C, Algol, Perl, Python
– Expression séparée des données et des traitements.
– Procédures, fonctions et structures de contrôle remplaçant les sauts.

• langages de programmation Orientée Objet :


– Simula, SmallTalk, Eiffel, C++, Pascal objet, Java, C#
– Regroupe les données et les traitements liés dans une même entité
appelée objet
– Simulation de la réalité à travers les classes et les objets

Bases du C++ 47
Généalogie des langages de programmation

Bases du C++ 48
Développement logiciel

Bases du C++ 49
Terminologie

• Algorithme :
– Suite de prescriptions qui indiquent l’exécution ordonnée d’une succession d’opérations afin de
résoudre un problème.

• Programme (code source):


– Ensemble d’ordres ou instructions qui agit sur les données pour produire des résultats.

• Programmation :
– Ecriture de programmes dans un langage de programmation pour résoudre des problèmes donnés

• Développement logiciels :
– Processus complet allant de la définition du problème à la livraison d’un programme valide (logiciel)

• Ordinateur :
– Machine électronique capable d’exécuter un programme.

• Informatique :
– Traitement automatique de l’information à l’aide d’un ordinateur.

Bases du C++ 50
Etapes du développement logiciel

Génie logiciel  bonne pratiques pour la réalisation d’un logiciel

1. Analyse du problème
2. Conception d’une solution (algorithmique)
– Choix de la représentation des données
– Choix de la méthode utilisée Enoncé du problème

3. Développement de la solution (programmation) Analyse


– Choix du langage de programmation Spécification
– Choix de la machine utilisée Conception
4. Création du programme l’exécutable (Compilation) Algorithme
– Correction des erreurs Programmation
– Traduction du programme en langage machine Programme
Tests et
5. Exécution et tests modifications
Compilation
Exécutable

Version finale de l’exécutable

Bases du C++ 51
Algorithmique

• Le terme algorithme vient du nom du mathématicien arabe Al-Khawarizmi.

• L’algorithmique‬désigne‬aussi‬la‬discipline‬qui‬étudie‬les‬algorithmes et leurs
applications en Informatique.
• Une bonne connaissance de l’algorithmique permet d’écrire‬des
algorithmes exactes et efficaces

Bases du C++ 59
Pourquoi on utilise un algorithme ?

• Pour obtenir de la «machine» qu’elle‬fait un travail à notre place.

• Problème: expliquer à la «machine» comment elle doit s'y prendre.

• Besoins :
• expliciter son raisonnement
• formaliser son raisonnement
• concevoir (et écrire) des algorithmes:
• séquence d’instructions qui décrit comment résoudre un problème
particulier.

Bases du C++ 60
Algorithmique

• Savoir expliquer comment faire un travail sans difficulté.

• Langage simple : des instructions.

• Suite finie d'actions à entreprendre en respectant une chronologie


imposée.

• L’écriture algorithmique :
• un algorithme ne dépend pas du langage dans lequel il est implanté,
• ni de la machine qui exécutera le programme correspondant.

Bases du C++ 61
Production d’exécutable

https://sites.google.com/usmba.ac.ma/ah
Bases du C++ 55
medazough/enseignement
Programmes exécutables

• Les programmes (instructions pour commander l’ordinateur) sont rédigés


en langages de programmation évolués.
• L’ordinateur ne comprend que le binaire (0 et 1)

• Comment faire pour exécuter le programme sur une machine?


 Il faut le traduire

• Trois types de traduction Programme source


– Compilation
– Interprétation
– Semi-compilation

Programme exécutable
Bases du C++ 56
Production d’exécutable

• Compilation :
– traduire le programme entier une fois pour toutes
 plus rapide à l’exécution
 il faut recompiler à chaque modification

• Interprétation :
– traduire au fur et à mesure les instructions du programme à chaque exécution
 exécution instantanée appréciable pour les débutants
 exécution lente par rapport à la compilation

• Semi-compilation :
– traduire tout dans un langage intermédiaire (bytecode), puis interpréter les instructions
une par une
 Langage indépendant des machines (multiplateforme)
 exécution lente par rapport à la compilation (des améliorations existent)

Bases du C++ 57
La notion de compilation

• La machine ne comprend que le langage machine.


0x33 00011010 01011010 11101010 11101010
0x34 01011110 01011010 11000111 11111000
0x35 01011010 01011010 10101010 10101010
0x36 11011110 11101010 10101010 10101010
0x37 11101010 11000111 11000111 11111111

• Pour les humains:


• difficile à comprendre le langage machine.
• le langage machine est spécifique d’un‬processeur donné.
• absence de portabilité.

• développement de langages de haut niveau.


- permettent de s’abstraire des détails de fonctionnement de la machine.
- la compilation correspond à la phase de traduction depuis le langage
de haut niveau vers le langage machine.

Bases du C++
63
Langages compilés

• Un programme compilé est exécuté a partir d'un bloc en langage


machine issu de la traduction du fichier source.
• Avantage
• plus rapide à l’exécution.
• Inconvénient
- il faut recompiler à chaque modification.
- un code compilé n’est exécutable que sur les machines compatibles
avec celle où il a été produit.

Bases du C++
64
La notion d’interprète

• Pour une tâche d'analyse, de traduction et d'exécution d’un programme


écrit dans un langage informatique.

• Un programme est exécuté a partir du fichier source.

• Le cycle d'un interprète est le suivant :


- lire et analyser une instruction.
- si l'instruction est syntaxiquement correcte, l'exécuter.
- passer à l'instruction suivante.

Bases du C++
65
Langages interprétés

• Avantage:
- facilité de programmation
- portabilité: le même programme est exécutable sur n’importe quelle
machine.
• Inconvénient:
- exécution lente par rapport à la compilation.

Bases du C++
66
Production d’exécutable

Bases du C++ 62
LES BASES DU C++
• Environnement de développement
• Structure d’un programme
• Bibliothèque standard
• Les variables et les constantes
• Ecriture / Lecture
• Commentaires
• Expressions et opérateurs

Découvrons les bases du langages C++

63
Langage C++

• Langage C++ :
– Langage de programmation compilé, permettant la
programmation procédurale et orientée objet
– Langage libre d’utilisation, normalisé par l'ISO
– Crée en 1983 par Bjarne Stroustrup, professeur
d’informatique danois
– Versions:
• La dernière version majeure est la C++17 (Déc 2017)
• Les versions précédentes sont :
– Une version majeure C++11 (2011)
– Une version mineure C++14 (2014)

• Du C à C++
– C++ est un extension du langage C, crée en 1972 par
Dennis Ritchie ingénieur américain aux laboratoires Bell

Bases du C++ 64
Classement des langages de programmation

• Classement général selon l’IEEE en 2015


– IEEE : la plus grande association mondiale de professionnels
techniques en informatique, électronique, et télécommunication
(+420 000 membres)

Bases du C++ 65
Environnement de
développement

Bases du C++ 66
Environnement de développement

• Création des programmes


– On peut développer en ligne de commande (Dos ou terminal Linux) et
éditeurs de texte, mais c’est fastidieux…
– Les environnements de développement intégrés (Integrated
Development Environment - IDE) facilitent le développement logiciel

• Les IDE permettent:


– L’édition des programmes
– La compilation : commande « compile » ou « build »
• Vérification de la syntaxe
• Création de l’exécutable
– L’exécution des programmes : « run »
– Débogage des programmes (exécution étape par étape)

Bases du C++ 67
Environnement de développement pour C++

• Sous Windows
– Dev C++
– Code::Blocks
– Visual C++
– Eclipse
– Netbeans
– Intellij Idea CLion

• Sous Linux
– Eclipse
– Netbeans
– Kdevelop

• En ligne
– www.ideone.com
– https://gcc.godbolt.org/
• …
Bases du C++ 68
Dev C++ : installation

• Environnement de développement intégré libre et simple pour Windows


• Intègre le compilateur GCC (GNU Compiler Collection), c’est le compilateur
standard pour la majorité des systèmes d’exploitation.

• Installer Dev C++ :


– Télécharger le fichier d’installation Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exe
ici https://sourceforge.net/projects/orwelldevcpp/
– Lancer le fichier d’installation
– Choisir la langue (Français par défaut),
accepter la licence, choisir le dossier
d’installation par défaut,
– Pousuivre l’installation
• Lancez Dev C++
– Cliquer sur l’icone du bureau

Bases du C++ 69
Dev C++ : configuration (1)

• Configurer Dev C++ pour prendre en


compte une des dernière version du
langage C++ (la C++11)
– menu : Outils  Options du
compilateur
– onglet : Options  Génération du
code  langage standard (-std)
– Choisir “ISO C++ 11“,
– Cliquer sur Ok

Bases du C++ 70
Dev C++ : configuration (2)

• Vérifier que la pause de


console après le retour
est activée
– menu : Outils  Options
d’environnement  cocher
« pause console programs
after return » (si c’est pas
fait)
– Cliquer sur Ok

Bases du C++ 71
Dev C++ : créer un projet console

• Créer un projet console:


– Créer un nouveau projet
menu : Fichier  Nouveau  Projet

– Choisir Console Application, choisir Projet C++,


– Choisir un nom au projet, cliquer sur Ok, choisir un dossier pour sauvegarder le projet,

Bases du C++ 72
Premier exemple (1)

• Dès la création d’un nouveau projet console C++, un fichier main.cpp est
créé.
• Effacer son contenu, puis remplacer le par le contenu suivant :

• Sauvegarder le fichier main.cpp


• Compiler et exécuter votre programme
– menu : Exécuter  Compiler & Exécuter F11, ou cliquer sur F11

• Qu’est ce qui se passe !!?


Bases du C++ 73
Premier exemple (2)

• Retour de console :

• Maintenant, dans le même code, supprimer la première ligne puis


recommencer (sauvegarder, compiler & exécuter)
• Qu’est ce que vous remarquez?

• 2 Erreurs de compilation : « cout » et « endl » non reconnus

Bases du C++ 74
Deuxième exemple (1)

• Maintenant créer un
nouveau projet, puis copier
le texte suivant dans le
main.cpp

Bases du C++ 75
Deuxième exemple (2)

• Rendu à la console après exécution :

Bases du C++ 76
Structure d'un programme C++

Bases du C++ 77
Structure d’un programme C++

• Un programme peut être constitué de plusieurs fichiers


• Nous nous limiterons ici aux programmes constitués d’un seul fichier : le
fichier principale.

Bibliothèques
Directive de nommage
Variables globales

Fonctions secondaires

Fonction principale
(obligatoire)

Bases du C++ 78
using namespace std;

• Utilisation de l'espace de nommage std.

• Un espace de nommage est un ensemble de classes dont cout fait partie.

• Utilisation de cin ou cout nécessite l’écriture de cette directive.

• Si Les fichiers d'en-tête sont inclus sans être suivi de la commande using namespace
std;, cela ne fonctionnera pas correctement

83
Fonction principale

• Tout programme contient une et une seule fonction principale.


• Elle doit obligatoirement s’appeler main.
• C’est la fonction par laquelle commence l’exécution de chaque
programme.
• La fonction main doit avoir un retour de type entier.
#include<cstdlib>
… …
int main() { équivalents int main() {
… …
return 0; return EXIT_SUCCESS;
} }

• return 0 ou return EXIT_SUCCESS signifie que le programme se termine


correctement.
• Pour utiliser EXIT_SUCCESS, il faut ajouter #include<cstdlib>
Bases du C++ 80
Fonctions secondaires

• Exemple 1: circonférence
– Variable globale : PI = 3.14159265359
– Paramètre : rayon (entier)
– Variable locale : c;
– Fonction pour la formule :
• 𝐶 = 2 ×𝜋×𝑟

• Exemple 2: max de 2 entiers


– Paramètre : 2 entiers a et b
– Variable locale : x;
– Fonction pour la formule :
• 𝑠𝑖 (𝑎 > 𝑏) 𝑎𝑙𝑜𝑟𝑠 𝑥 = 𝑎, 𝑠𝑖𝑛𝑜𝑛 𝑥 = 𝑏

Bases du C++ 81
Bibliothèque standard

Bases du C++ 82
Bibliothèque standard C++

• Bibliothèque de classes et de fonctions standardisées selon la norme ISO pour


le langage C++.
– C++ Standard Library en anglais
– http://fr.cppreference.com/w/
– http://www.cplusplus.com/reference/

• Elle contient :
– La bibliothèque standard du langage C
– Un type pour manipuler les chaînes de caractères .
– Des types pour manipuler les flux (fichiers, entrée et sortie…) .
– Des conteneurs qui facilitent la manipulation de plusieurs objets de même type.
– une collection d'algorithmes de bas niveau (tri,…).

• Chaque élément de la bibliothèques standard est sauvegardé dans un


fichier d’entête
• Pour utilisé chaque élément dans un programme, il faut inclure sans
fichier d’entête en utilisant:
#include <fichierEntete>
Bases du C++ 83
Quelques fichiers d’entêtes du C++
Nom du fichier Rôle
d’entête
<iostream> Fournit les capacités centrales d'entrée/sortie du
• <complex.h> cin, cout, cerr, clog
langage C++
– Pour manipuler les nombres complexes
<cstdio> Fournit les capacités centrales d'entrée/sortie du printf, scanf
langage C
<cmath> Fournit les fonctions mathématiques courantes fabs, fmax, log, sin,
cos, sqrt, pow,…
<cstring> Permet de faire des opérations sur les chaînes de strcat, strchr,
caractères. strcmp, strcpy,…
<cfloat> Spécifie les propriétés des nombres en virgule
flottante
<ctime> Permet de manipuler les formats de date et d’heure
<string> Permet de manipuler les chaînes de caractères.
<vector> Permet de manipuler des tableaux dynamiques
d’éléments contigus
http://www.cplusplus.com/reference/
Bases du C++ 84
LES TYPES ET LES VARIABLES
• Déclaration de variables
• Types simples
• Types structurés
• Types objets

Définir les données d'un programme C++

85
Déclaration de variables

Bases du C++ 86
Déclaration de variables

• Les variables sont les données de votre problème (ingrédients d’une


recette) ou toutes les variables intermédiaires permettant d’arriver au
résultat (Variable d’échange, indices,…)

• La déclaration d’une variable est la réservation d’une zone mémoire pour


manipuler et sauvegarder temporairement la donnée.

• La déclaration peut apparaître n’importe où dans un programme


• Une variable reste définie jusqu’à la fin du block (marquée par } ) qui
contient sa définition
Ne pas
• Syntaxe de déclaration de variables langage C++ : oublier le ;

typeVariable nomVariable0 ,… ,nomVariablen ;

Bases du C++ 87
Initialisation de variables

• Opérateur d’affectation : =
– On donne une valeur à une variable au moyen de l’instruction « = »
– Ce n’est pas une égalité au sens mathématique
– On prends la valeur de ce qui est à droite du « = » et on la mets dans la
variable qui est à sa gauche.

L’opérateur « = » 
Ce n’est pas une égalité, c’est une affection
On le lit : « reçoit »

• Il est possible d’initialiser une variable au moment de sa déclaration


– Syntaxe :
typeVariable nomVariable0 = valeur0, … nomVariablen = valeurn ;

– Exemple:
• double x = 2.45;
• int y = 4, z = -1;

Bases du C++ 88
Portées de variables

• Trois portées de variables existent :


– Globale:
• En dehors de toute fonction
• Utilisable dans tout le fichier (programmation procédurale)
– Locales:
• à l’intérieur d’une fonction
• Utilisable uniquement dans cette fonction
– De block:
• Déclaré dans un block délimité par { et }

Bases du C++ 89
Variables, exemple (1)

Variable globale

Variable locale

Bases du C++ 90
Variables, exemple (suite)

Variables locales

• Autre exemple :
int x, y, z;
double r;
double c;
Bases du C++ 91
Noms de variables

• Le nom d’une variable :


1. doit être un identificateur valide
• Le premier caractère doit être une lettre,
• puis les caractères suivant sont soit des lettres soit des digits
id = letter(letter|digit)*
letter = a|b|…|y|z|A|B|…|Y|Z|_
digit = 0|…|9

2. ne doit pas être un mot réservé


• Quelques mots clés sont réservés par le langage à un usage prédéfini et ne
peuvent pas être utilisés comme identificateurs.

• Remarques :
– la casse est importante : majuscule ≠ minuscule
– Il est recommandé de ne pas utiliser les mots qui commencent par ‘_’ comme
identificateur

Bases du C++ 92
Mots clés réservés de C++ (version C++11)
alignas (depuis C++11) enum return
alignof (depuis C++11) explicit short
and export signed
and_eq extern sizeof
asm false static
auto float static_assert (depuis C++11)
bitand for static_cast
bitor friend struct
bool goto switch
break if template
case inline this
catch int thread_local (depuis C++11)
char long throw
char16_t (depuis C++11) mutable true
char32_t (depuis C++11) namespace try
class new typedef
compl noexcept (depuis C++11) typeid
const not typename
constexpr (depuis C++11) not_eq union
const_cast nullptr (depuis C++11) unsigned
continue operator using
decltype (depuis C++11) or virtual
default or_eq void
delete private volatile
do protected wchar_t
double public while
dynamic_cast register xor
else reinterpret_cast xor_eq
http://fr.cppreference.com/w/cpp/keyword
Bases du C++ 93
Nom de variable, exemple

Nom de variable Accepté ou non Explication


Brol Oui
bRol Oui
Brol123 Oui
Brol_2_brol_1 Oui
Brol_ Oui
1brol Non Commence par 1
O23 Oui C’est un O au début
Mon nom Non L’espace n’est pas accepté
_123_23 Déconseillé Commence par _
Prénom Non L’accent n’est pas acceptée
main Non Mot réservé
Union Oui Union ≠ union (qui est lui réservé)
breakauto Oui Ca devient un nouveau nom
Bases du C++ 94
Types de variables

Type de variables
en C++

Simples Structurés Objets

vide Booléen Entiers Réels Caractères Tableaux string

void bool short float char Structure vector

int double …

long

long long

unsigned …

Bases du C++ 95
Types simples

Bases du C++ 96
Tailles des types de variables
Taille en octets 1 2 4 8
Taille
en octets Entiers
bool
char
(unsigned)
short
(unsigned)
Int
(unsigned)
long
(unsigned)
long long

Réels
float float
double double
Bases du C++ 97
Types entiers : short, int, long, long long

• Types numériques servant au stockage des nombres entiers signés


(positifs, négatifs ou nuls). 1 bit est réservé pour le signe.
• Les versions unsigned stockent uniquement les entiers non signés.

Entiers signés Valeur minimale Valeur maximale


short -215 215-1 = 32 767
int -231 231-1 = 2 147 483 647
long -231 231-1 = 2 147 483 647

long long (C99) -263 263-1 = 9 223 372 036 854 775 807

Entiers non signés


unsigned short 0 216-1 = 65 535

unsigned int 0 232-1 = 4 294 967 295

unsigned long 0 232-1 = 4 294 967 295

unsigned long long 0 264-1 = 18 446 744 073 709 551 615
Bases du C++ 98
Types réels : float, double

• Les types flottants permettent de représenter d’une manière approchée,


une partie des nombres réels.
• Tout nombre réel peut être représenté sous forme
𝑀𝑎𝑛𝑡𝑖𝑠𝑠𝑒 × 10𝐸𝑥𝑝𝑜𝑠𝑎𝑛𝑡
– Avec mantisse contient uniquement les chiffres significatif du réel
• pas de 0 ni à gauche ni à droite

Type Précision Encodage Signe Exposant Mantisse Valeur d'un nombre

float Simple 4 oct 1 bit 8 bits 23 bits −1 𝑠 × 𝑀 × 2(𝐸−127)


−1 𝑠 × 𝑀
double Double 8 oct 1 bit 11 bits 52 bits
× 2(𝐸−1023)

• Quel type réel choisir ?


Taille mantisse |Exposant|
Type
max max

float 7 38 sinon long double (16 oct)


double 16 308

Bases du C++ 99
Types entiers et réels, exemple

Nombre Type minimum adapté Explication


-15 short
33000 int ou unsigned short Borne max short dépassée
1.23 float taille(mantisse) ≤ 7 et |exposant| ≤ 38
234.98756 double taille(mantisse) > 7
-3*109 long long Borne max long dépassée
4*109 long long ou unsigned int Borne max int dépassée
0,456005 float taille(mantisse) ≤ 7 et |exposant| ≤ 38
1 * 10-40 double |exposant| > 38

short x = 32767, y;
unsigned int z = 4294967295, t; Exécution y = -32768
y = x + 1; t = 0
t = z + 1;
cout << "y = " << y << endl;
cout << "t = " << t;
Bases du C++ 100
Type caractère : char

• Permet de représenter un seul caractère


• Les caractères en C++ sont représentés par des entiers
– La valeur d’une variable de type caractère est la valeur de son code ASCII
• Exemple : ’0’ correspond à 48 dans le codage ASCII

• Une variable caractère est initialisée de deux manière :


char c = „A‟; // c contient la lettre A
char c =48; // contient le caractère du chiffre 0 (initialisation avec code ASCII)

• Pour afficher le code ASCII d’un caractère c


printf("%d",c);
– En rajoutant #include<cstdio> au début du programme

• Il existe des caractères spéciaux


\0 Caractère nul \ " Guillemet \t Tabulation
\\ Antislash \r Retour au début de ligne \b Un retour en arrière
\’ Apostrophe \n Nouvelle ligne \a Bip d’alerte
Bases du C++ 101
Type booléen : bool

• Permet de représenter l’état d’une condition.


• Une variable booléenne peut prendre deux valeurs différente:
– true pour représenter le vrai
– false pour representer le faut

• Lorsqu’on l’affiche, une variable booléenne affichera la valeur associée.


– true est associée à 1
– false est associée à 0
• Exemple :
bool exist=true;
cout << "existe ou non ? : " << exist;
– À l’exécution, on aura:
existe ou non ? : 1

Bases du C++ 102


Qualificatif auto

• Créer une variable sans spécifier son type explicitement :


– Syntaxe 1 :
auto var = valeur;
• Le compilateur choisi le type adapté à la valeur : int, double, char, ou bool,…
• Exemple :
auto x = 1; // x aura un type int
auto y = 3.6; // y aura un type double
– Syntaxe 2 :
type var1 = valeur1;
auto var2 = var1;
• var2 aura le même type et la même valeur que var1.
• Exemple :
bool condi1 = true;
auto condi2 = condi1; // condi2 sera de type bool

• Remarque:
– pour afficher le type assigné par le compilateur à une variable:
cout << typeid(x).name();

… avec #include <typeinfo> en haut du programme

Bases du C++ 103


Qualificatif const

• Déclarer une constante dont la valeur ne peut pas être changer


• Il est recommander d’écrire les noms de constantes en lettre
majuscule

– Syntaxe :
const type variable = value;
• Exemple:
#include <iostream>
using namespace std;
const double PI = 3.14159265359; // constante globale
int main() {
const int RAYON = 2; // constante locale
int surface;
surface = PI * RAYON * ROYON ;
cout << “la surface est = ” << surface ;
return 0;
}
À l’exécution, le programme affiche :
la surface est = 12,56637061436
Bases du C++ 104
Variables en Mémoire

• Le déclaration d’une variable est la réservation d’une zone mémoire pour


manipuler et sauvegarder temporairement la donnée qu’elle contient.

• Exemple : Adresse Nom de


Variable
– char a=‘0’, b=‘a’; (en oct) variable
– short x=2; … …
– bool e=true; 1008 0 0 1 1 0 0 0 0 a
– float f=1.2; 1009 0 1 1 0 0 0 0 1 b
1010 0 0 0 0 0 0 0 0
x
1011 0 0 0 0 0 0 1 0
1012 0 0 0 0 0 0 0 1 e
1013 0 0 1 1 1 1 1 1
1014 1 0 0 0 1 1 0 0
f
1015 1 1 0 0 1 1 0 0
1016 1 1 0 0 1 1 0 1
… …

Bases du C++ 105


Variables en Mémoire

• Pour afficher la représentation binaire d'une variable


– Récupérer sa présentation binaire dans un tableau de caractères à
l'aide de la fonction reinterpret_cast
– Afficher 8 caractères par 8 caractères (octet par octer)
– Exemple pour une variable float :
#include <typeinfo>
#include <bitset>
#include <iostream>
using namespace std;

int main(){

float f=1.2;

char* bits = reinterpret_cast<char*>(&f);


for(short n = sizeof(f) - 1; n >= 0; n--)
cout << bitset<8>(bits[n]);
cout << '\n';
return 0;
}

Bases du C++ 106


Ecriture / Lecture

Bases du C++ 107


Instructions d’Entrée/sortie (i/o)

• Ce sont les instructions permettent de :


– De lire l’écriture au clavier : (Entrée / input)
– D’afficher dans l’écran : (Sortie / output)
output

• Pour pouvoir demander à l’ordinateur


d’exécuter des fonctions de (i/o)
input
– Il faut inclure dans la programme le fichier
d’entête C++ <iostream>
#include<iostram>

Remarque :
- Il existent d’autres fonctions de (i/o) selon la norme du langage C. (printf, scanf,…)
- Pour les utiliser on doit inclure le fichier d’entête <cstdio>
- Dans ce cours, nous nous limiterons à la norme C++
Bases du C++ 108
Afficher à l’écran (console)

• Syntaxe : cout << expr1 << ... << exprn << endl;

– cout est le flux d’affichage de l’écran de la console.


– "<<" permet d’orienter les expressions expri vers cout.
– endl permet d’afficher un saut de ligne si besoin, elle est optionnel.
– cout permet d’afficher les expressions de tous les types.

– Selon cette syntaxe, l’expression expr1 puis l’expression expr2,


jusqu’à l’expression exprn vont s’afficher à la console l’une collée à
l’autre, puis un saut de ligne va être affiché.


• Exemple : int age = 35;
cout << "Mon age est de : " << age << " ans." <<endl;

– A l’écran on verra :
Mon age est de : 35 ans.

Bases du C++ 109


Lire au clavier
• Syntaxe : cin >> var1 >> ... >> varn;
– cin est le flux d’entrée du clavier
– ">>" permet d’orienter les valeurs tapées dans le clavier vers les variables vari
– cin permet de lire des valeurs de tous les types.

• En pratique :
– Lors de l’exécution d’un programme, si on rencontre une instruction cin,
l’exécution s’arrête en attente de la saisie des valeurs dans le clavier. Selon la
syntaxe précédente, il faudra saisir n valeurs vali espacées par des espaces, des
tabulations ou des sauts de ligne. Il faudra terminer la saisie par un saut de ligne.
Le programme va affecter à chaque variable vari la valeur vali :(vari=vali)
int age;
• Exemple : cout << "Veuillez saisir votre age : ";
cin >> age;
cout << "Votre age est de " << age << " ans...";
– A l’écran on verra :
Veuillez saisir votre age : 22 Ici arrêt pour
Votre age est de 22 ans... saisi au clavier
Bases du C++ 110
Exercice d’application

Exercice d’application 1
• Écrire un programme en langage C++ qui déclare et initialise
quartes variables A, B, C, et D de types, respectivement :
double, char, float et int. Ensuite, il affiche les résultats.

Bases du C++ 111


Exercice d’application
Solution Exercice 1
• #include <cstdlib>
• #include <iostream>
• using namespace std;
• int main()
• {
• double A=8.9;
• char B='R';
• float C=1.2;
• int D=15;
• cout << "La valeur de la variable A est: " << A << endl;
• cout << "La valeur de la variable B est: " << B << endl;
• cout << "La valeur de la variable C est: " << C << endl;
• cout << "La valeur de la variable D est: " << D << endl;
• system("PAUSE");
• return EXIT_SUCCESS;
• }

Bases du C++ 112


Exercice d’application

Exercice d’application 2
• Écrire un programme en langage C++ qui déclare et demande
à l’utilisateur quartes variables A, B, C, et D de types,
respectivement : double, char, float et int. Ensuite, il affiche
les résultats.

Bases du C++ 113


Exercice d’application
Solution Exercice 2
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
double A;
char B;
float C;
int D;
cout << "Donnez La valeur de la variable double A " << endl;
cin>>A;
cout << "Donnez La valeur de la variable caractere B " << endl;
cin>>B;
cout << "Donnez La valeur de la variable float C " << endl;
cin>>C;
cout << "Donnez La valeur de la variable entiere D " << endl;
cin>>D;
cout << "La valeur de la variable A est: " << A << endl;
cout << "La valeur de la variable B est: " << B << endl;
cout << "La valeur de la variable C est: " << C << endl;
cout << "La valeur de la variable D est: " << D << endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Bases du C++ 114


Commentaires

Bases du C++ 115


Commentaires

• Les commentaires :
– permettent de donner des explications du programme ou de ces différentes parties
– sont nécessaires à la compréhension d’un programme (Programmation collaborative,
maintenance
– ne sont pas vérifiés ni traduits par le compilateur

• Trois types de commentaires existent :


• Commentaires d’entête de fichier /**……**/
• Explique ce que contient ce fichier
• Commentaires de fonction ou de bloc /*……*/
• Explique la fonction et l’usage du fragment du code qui suit
• Commentaires de ligne //…….
• Déclaration de variable
• Début de boucle
• Astuces, etc.

Bases du C++ 116


Commentaires, exemple (1)

Commentaire d’entête
de fichier

Commentaire de ligne

Commentaire de fonction

Bases du C++ 117


Commentaires, exemple (suite)

Commentaire de fonction

Commentaires de ligne

Bases du C++ 118


EXPRESSIONS et OPERATEURS
• Expressions
• Opérateurs

Comment manipuler les données d'un programme C++ ?

Bases du C++ 119


Expressions

120
Bases du C++
Expressions

• Dans des programmes écrits dans le langage C++, on rencontre


souvent des expressions (ou des instructions) telles que :
i=0;
i++ ;
z = 5 * x + 2* y ;
• Une expression est un calcul qui donne une valeur comme résultat.
• Les expressions peuvent comporter des variables et des constantes
combinées entre eux par des opérateurs.

• Une instruction est toujours terminée par un point-virgule (;).


Instruction-bloc
Forme : {
<déclarations et instructions>
}

Exemple : { int i = 3, j;
double x = 2.2, y = 3.3;
y = 0.5 * (x + y);
int k = 1 - (j = i);
}
121
Bases du C++
Fonctions mathématiques

• Elles sont déclarées dans #include<cmath>.


• Il y a les fonctions suivantes, de paramètre double et de résultats double:

o floor (resp. ceil) : partie entière par défaut.


o fabs : valeur absolue.
o sqrt : racine carrée.
o pow : puissance (pow(x,y) renvoie x y).
o exp : L’exponnentiel d’un nombre.
o log: Le logarithme d’un nombre.
o Autre fonctions: sin, cos, tan, acos, etc…

122
Bases du C++
Exemple:

#include<iostream>
#include<cmath>
using namespace std;
int main ( ){
double x,y;
cout << "Saisir x "<<endl;
cin >> x;
y=log(x);
cout << "log(x)=« <<y<<endl;
return 0;
}

123
Bases du C++
Opérateurs

124
Bases du C++
Opérateurs arithmétiques

Comme tous les langages , C++ dispose d’opérateurs arithmétiques.

opérateur signification
+ addition
- soustraction
* Multiplication
/ division
% modulo (reste d'une
division entière)

125
Bases du C++
Exemple:

opération résultat
int i=3;
4
i=i+1;
int i=3;
2
i=i-1;
int b=3;
b=b*2 6

int k=4;
k=k/2; 2

int ii =3;
ii=ii%2; 1

126
Bases du C++
Opérateur d’affectation

Affectation simple:
C’est l’opération qui permet de donner une valeur à une variable.
La syntaxe est : <variable> = <expression> ;

L’expression est évaluée puis affectée à la variable.

Exemple:
j=3 était une expression qui réalise une action :
l'affectation de la valeur 3 a j.

127
Bases du C++
Exercice 1

Donnez les valeurs des variables A, B et C après exécution


du programme suivant en langage c++ ?
#include<iostream>
using namespace std;
int main ( ){
int A,B,C;
A =5;
B =4;
A =B;
B =A+5;
C =A + B;
C =B-A;
cout << " les valeurs sont: " <<A<<"\t"<<B<<"\t"<<C << "\n";
return 0;
}

128
Bases du C++
Exercice 2

Donnez les valeurs des variables A et B après exécution du


programme suivant en langage c++ ?

#include<iostream>
using namespace std;
{
Int main()
int A,B;
A=1;
B=2;
A=B;
B=A;
cout << " les valeurs sont: " <<A<<"\t"<<B<< "\n";
return 0;
}

129
Bases du C++
Exercice 3

Ecrire un programme en langage C++ permettant d’échanger les


valeurs de deux variables A=1 et B=2.

130
Bases du C++
Exercice 3

Ecrire un programme en langage C++ permettant d’échanger les


valeurs de deux variables A=1 et B=2.
Réponse:
#include<iostream>
using namespace std;
int main ( )
{
int A,B,C;
A =1;
B =2;
C=A;
A=B;
B=C;
cout << " les valeurs sont: " <<A<<"\t"<<B<< "\n";
return 0;
}
131
Bases du C++
Opérateur d’affectation (suite)
Affectation composée: expression1 OP= expression2
la variable expression1 n’est évaluée qu’une seule fois. OP est un
opérateur arithmétique.
Opérateurs d’affectation utilisables :
+= -= *= /= %=
Exemple:
i = i+20; i+=20 int i=4;
i+=20; 24

i = i+k; i+=k; int i=3,k=6;


9
i+=k;
i = i*3; i*=3; int i=4;
12
i = i*3;
i = i/3; i/=3; int i=9;
3
i/=3;
ii = ii%3; i%=3; int ii;
1
ii=ii%2;

132
Bases du C++
Opérateur de comparaison

La syntaxe : expression1 OP expression2

Où opérateur peut être l'un des symboles suivants :

== l’opérateur égal à
!= l’opérateur différent de
<, <=, >, plus petit, plus petit ou égal,
>= plus grand, plus grand ou égal

Ces opérateurs retournent la valeur 0 si la comparaison est fausse et 1


sinon.

133
Bases du C++
Exemple:

#include<iostream>
using namespace std;
int main(){
int a,b; int res; a=2,b=3;
res=(a>3); /* FAUX donc res=0 */
cout << "res = " << res <<"\n";
res=(a>b); /* FAUX donc res=0 */
cout << "res = " << res <<"\n"; res=(a<b); /* VRAI
donc res différent de 0*/
cout << "res = " << res <<"\n";
res=(a==b); /* FAUX donc res=0 */
cout << "res = " << res <<"\n";
return 0;
}

res = 0
Nous avons la sortie suivante : res = 0
res = 1
res = 0

134
Bases du C++
Opérateurs logiques

&& Et logique (and)


|| Ou logique (or)
! Négation logique
(not)
• ET retourne la valeur 1 si les deux opérandes sont non nuls, et 0 sinon.
• OU retourne la valeur 1 si au moins un des opérandes est non nul, et 0
sinon.
Exemple: (a<b) && (c<d) prend la valeur 1 (vrai) si les deux expressions
a<b et c<d sont toutes deux vraies (de valeur 1), la valeur 0 (faux) dans
le cas contraire.

135
Bases du C++
Exemple
#include<iostream>
using namespace std;
int main(){
int a,b,c;
int res;
a=2,b=3,c=5;
res=((a>3)&&(c>5));
/* (a>3) faux ET (c>5) faux DONC res=0(faux) */
cout << "res = " << res <<"\n";
res=((b>2)||(c<4));
/* (b>2) vrai OU (c<4) faux DONC res différent de 0(vrai) */
cout << "res = " << res <<"\n";
res=!(a<b);
/* (a<b) vrai -> !(Non) -> faux DONC res=0(faux) */
cout << "res = " << res <<"\n";
return 0;
} res = 0
Nous avons le résultat suivant : res = 1
res = 0
136
Bases du C++
Opérateurs d’incrémentation (++) et de décrémentation (--)

++ Incrémente de 1
-- Décrémente de 1

Si l'opérateur d'incrémentation ou de décrémentation est placé à gauche alors la


variable sera incrémentée ou décrémentée avant d'être utilisée.
Exemple 1 :
#include<iostream>
using namespace std;
{
int main()
int a,b;
a=2;
b=3;
/* incrémente d'abord et passe la valeur incrémentée à a */
cout << " ++a = " << ++a<< "\n";
/* décrémente d'abord et passe la valeur décrémentée à b */
cout << " --b = " << --b<< "\n";
return 0; a=3
} b=2
137
Bases du C++
Opérateurs d’incrémentation (++) et de décrémentation (--)

Si l'opérateur d'incrémentation ou de décrémentation est placé à droite, alors la


variable sera incrémentée ou décrémentée après avoir été utilisée.
Exemple 2 :
#include<iostream>
using namespace std;
{
int main()
int a,b;
a=2;
b=3;
/* Affichage de a avec incrémentation après l'utilisation */
cout << "a = " << a++ << "\n";
/* Affichage de b avec décrémentation après l'utilisation */
cout << "b = " << b--<< "\n";
cout << "a = " << a<< "\n";
cout << "b = " << b<< "\n"; a=2
return 0; b=3
} a=3
b=2

138
Bases du C++
Structures

• Une structure: Un groupe de variables (membres) regroupés


sous un même nom. Ces variables peuvent avoir des types
différents et des longueurs différentes.
• Syntaxe : struct typeName {
memberType1 memberName1;
memberType2 memberName2;
memberType3 memberName3;

} structName;

– Déclaration d'une variable : typeName structName;


– Accès aux membres d'une variable structure :
• Initialisation : structName.memberName1 = value1;
• Affichage : cout << structName.memberName1;
• Saisie : cin >> structName.memberName1;

Bases du C++ 139


Structures

• Exemple :

• Exécution :
poids des pommes : 1500
prix des pommes : 15

Bases du C++ https://sites.google.com/usmba.ac.ma/ahmedazough/enseignement 140


Structures

• Exercice d’application:
Ecrire un programme qui écrit une structure « Point »
avec deux variables doubles x et y. Initialisez deux
variables A et B de type « Point » puis affichez
chaque valeur.

Bases du C++ https://sites.google.com/usmba.ac.ma/ahmedazough/enseignement 141


Structures
#include <iostream>
using namespace std;

struct Point
{
double x;
double y;
}Particule;

int main()
{
Point A, B;

A.x = 2.0;
A.y = 3.0;

B.x = 8.0;
B.y = 9.0;

cout << "Les valeurs de A : " << A.x << ", " << A.y << endl;
cout << "Les valeurs de B : " << B.x << ", " << B.y << endl;
return 0;
}

Bases du C++ 142


Types objets

Bases du C++ 143


Chaines de caractères : string

• La classe string, n’est un pas un type élémentaire. Elle permet


de déclarer des variables de type chaines de caractères
• Pour l’utiliser, il faut placer l'entête du fichier
# include <string>

• Syntaxe :
string nomChaine;
string nomChaine = "valeur"; // avec initialisation

• Exemple :
string nom="Alami";
string expressionAccueil="Bienvenu dans mon programme \n";

Bases du C++ 144


Manipulation de string

• cout << str;


– Permet d'afficher la chaine (du début jusqu'au premier '\0')
– Exemple :
string str0 = "bienvenu";
string str1 = "bonj\0our";
cout << "la chaine str_0 : " << str0 <<endl;
cout << "la chaine str_1 : " << str1 <<endl;
• Execution :
la chaine str0 : bienvenu
la chaine str1 : bonj

• str.size()
– permet de récupérer la taille du mot de la chaine (jusqu'au premier \0)
– Exemple :
string str0 = "bienvenu cher ami";
string str1 = "bonj\0our";
cout << "la taille de str_0 : " << str0.size() <<endl;
cout << "la taille de str_1 : " << str1.size() <<endl;
• Execution : la taille de str0 :17
la taille de str1 :4
Bases du C++ 145
Manipulation de string

• char c = s[i]
– Permet d'accéder au ième caractère de la chaine s ( i = 0,1,. . . s.size()-1)
– Exemple:
string st = "pere";
st[0]='m';
cout << "la chaine str : " << st <<endl;
cout << "derniere lettre : " << st[st.size()-1];
• Exécution :
la chaine str : mere
derniere lettre : e

• string r = s+t
– Permet de concaténer (coller l'une à l'autre) deux chaines s et t et de mettre le résultat
dans r
– Exemple :
string s1 = "bon", s2="jour", s12;
cout << "le mot est : "s12;
• Exécution :
le mot est : bonjour

Bases du C++ 146


Manipulation de string

• Int res=s.find(t,index);
– Permet de chercher la première occurrence de la chaine t dans la chaine s
à partir du indexème caractère de s. Sans index, on commencera du début,
– res sera égale à l'indice de la première occurrence, si t n'existe pas dans s
res sera égale à string::npos
– Exemple :
string chaine = "Bonjour !"; Exécution :
cout << chaine.find("jour") << endl; 3
cout << chaine.find("jour",0) << endl;

• string dst = src.replace(pos, len, tmp);


– Remplace la portion de chaine de src qui commence à la position pos et
qui est de longueur len, par la chaine tmp, puis met le résultat dans dst.
– Exemple : Exécution :
• string src = "Bonjour !";
Bonsoir !
• cout << src.replace(3, 4, "soir");

Bases du C++ 147


Manipulation de string

• string dst = src.substr(index, num);


– Permet d'extraire une sous-chaine dst à partir de la chaine src. Le premier
caractère de dst va être le indexème caractère de src, et dst contiendra les num
caractères suivants;
– Si num n'est pas précisé (dst = src.substr(index)) dst contiendra tous les
caractères de src suivants le indexème caractère
– Exemple :
string chaine = "Bonjour !";
cout << chaine.substr(3) << endl;
cout << chaine.substr(3,2) << endl; Exécution :
jour !
jo

Toutes les autres fonctions de manipulations de chaines de caractères sur :


http://www.cplusplus.com/reference/string/string/

Bases du C++ 148


Écrire et lire des accents

• Pour écrire et lire des accents, rajouter les deux fonctions suivante en début de la fonction
principale
SetConsoleOutputCP(1252);
SetConsoleCP(1252);
• Ceci nécessitera de rajouter l'entête #include <Windows.h>

• Exemple :
#include <Windows.h>
#include <iostream>
#include <string> Exécution :
using namespace std;
père
int main(){ écrire un mot : éléments
SetConsoleOutputCP(1252);
éléments
SetConsoleCP(1252);

string s="père",p;
cout<<s<<endl;
cout<<"écrire un mot : ";
cin>>p;
cout<<p<<endl;
return 0;
}
Bases du C++ 149
STRUCTURES DE CONTRÔLE
• if-else, Opérateur ternaire, switch-case
• Boucles for, while, do-while
• Instructions break et continue

Implémenter des traitements conditionnels dans un programme C++

150
Plan

• Structures de contrôle
– if … else
– Opérateur ternaire … ?... : …
– switch … case
– for
– while
– do … while
– Instruction break
– Instruction continue

Bases du C++ 151


Structures de contrôle

• Les structures de contrôle servent à orienter l’exécution du


programme en fonction de la valeur courante d’une
expression
– Exécution unique d’un fragment de code si une certaine condition est
vérifiée
– Exécution répétitive d’un fragment du code si une certaine condition
est vérifiée

• Les conditions de contrôle sont des expressions logiques


booléennes

Bases du C++ 152


Traduction des instructions : schéma conditionnel

Syntaxe en algorithme Syntaxe en C++

Si condition Alors if ( condition)


Début Si {
instructions instructions
Fin Si }

Si condition Alors if ( condition )


Début Si {
instructions instructions
Fin Si }
Sinon else
Début Sinon {
instructions instructions
Fin Sinon }

Bases du C++ 153


Instruction if … else

• Syntaxe :

 if (expression) {bloc d'instructions 1}


 if (expression) {bloc d'instructions 1} else {bloc d'instructions 2}
• Si expression est vrai, le bloc d'instructions 1 est exécutée, sinon bloc
d'instructions 2 est exécutée si il existe

• Les accolades déterminent le bloc d’instructions qui dépend du if ou du else

• Les accolades ne sont pas nécessaires pour un bloc d'instructions composée d'une
seule instruction

• Exemple :
if( (an%4==0 && an%100!=0) || an%400==0){
– Année bissextile nbjours =366;
}
else {
nbjours = 365;
}

Bases du C++ 154


Instruction if … else
• Lorsqu’on a plusieurs cas à tester, il est possible d’enchaîner les if … else
• Le else se rapporte au premier if le précédant
• Utilisez les accolades pour mieux organiser vos if…else imbriqués

if(a == b) {
cout<<a<<" et "<<b<<" sont égaux";
} else {
if (a>b) {
cout<<a<<" et strictement supérieur à "<<b;
}
else {
cout<<b<<" et strictement supérieur à "<<a;
}
}

Bases du C++ 155


Opérateur ternaire (…) ? … : …

• Dans de nombreux cas, une instruction conditionnelle sert juste à calculer


la valeur d'une variable
if(a > b)
– Exemple :
max = a;
else
max = b ;

• L’opérateur ternaire « expression ? valeur1 : valeur2 »


– renvoie une valeur différente selon la validité de l’expression qui le précède le signe ?

– Si l'expression est vraie, l'opérateur renvoie la valeur1 qui précède le signe :

– Si l'expression est fausse, l'opérateur renvoie la valeur2 qui devance le signe :


• Exemple :

max = (a > b) ? a : b ;

Bases du C++ 156


Instruction Switch … case
• L’instruction switch … case sert à traiter des choix multiples en fonction d’une expression
entière (des caractères ou des entiers)

• break permet de sortir du bloc switch

• Exemple :
char section;
cout<<"Quelle est votre section ? "<<endl;
cin>>section;

switch(section) { // suivant la valeur de section


case 'A' :
cout<<"Vous être en section A."<<endl;
cout<<"Vous étudiez l'informatique mardi de 15h45 à 17h15";
break;
case 'B' :
cout<<"Vous être en section B."<<endl;
cout<<"Vous étudiez l'informatique mardi de 14h à 15h30";
break;
default :
cout<<"Votre choix est invalide";
break;
}

Bases du C++ 157


Instruction if (suite)
Exemple 1:
if (x > y)
max = x;
else max = y;
Cet exemple peut s’écrire plus simplement (mais moins lisiblement):
(x > y)?(max = x):(max = y);

Exemple 2 :
Si on écrit :
if (n>0)
if (a>b) z = a ;
else z = b ;
Le else se rapporte à if (a>b). En effet, en l’absence d’accolades, un else
se rapporte toujours au if le plus rapproché.
Si on voulait qu’il se rapporte à if (n>0), il faudrait écrire :
if (n>0) { if (a>b) z = a ;}
else z = b ;
Bases du C++ 158
Exemple 3:
#include <iostream>
using namespace std;
int main ( )
{
int i ;
cout << " Saisissez une valeur ";
cin>>i ;
if ( i == 0) /* la condition sur la valeur de i‬s’elle est égale à 0 */
{
cout << "Vous avez saisi une valeur nulle \n"; /* instruction du bloc de if */
}
cout << " Au revoir ! \n "; /* instruction en dehors du bloc de if */
return 0 ;
}

Bases du C++ 159


Exemple 4:
#include <iostream>
using namespace std;
int main ( )
{
int i ;
cout << " Saisissez une valeur ";
cin>>i ;
if(++i<10) /* équivalent à : i=i+1; if (i<10) */
{
cout << " OK " << "\n"; /* instruction du bloc de if */
}
cout << " Au revoir! \n "; /* instruction en dehors du bloc de if */
return 0 ;
}

Resultat: pour i= 8 OK
Au revoir!
pour i= 9 Au revoir!

Bases du C++ 160


Exemple 5:
#include <iostream>
using namespace std;
int main ( ){
int i ;
cout<< " Saisissez une valeur : " ;
cin>>i ;
if ( i == 0) /* la condition sur la valeur de i‬s’elle est égale à 0 */
{
cout << " Vous avez saisi une valeur nulle" << "\n";
/* execution instruction du bloc de if si le test est vrai */
}
else
{
cout << "Vous avez saisi une valeur " <<i <<endl; ;
/* execution instruction du bloc de else de if si le test est faux*/
}
cout<<" Au revoir! \n " ; /* instruction en dehors du bloc de if */
return 0 ;
}
Bases du C++ 161
Boucles Tant que et Faire tant que

Syntaxe en algorithmique Syntaxe en C++


while (condition)
Tant que condition Faire
{
instructions
instructions
Fin Tant que
}

Syntaxe en algorithmique Syntaxe en C++


do
Faire
{
instructions
instructions
Tant que condition
}while (condition) ;

Bases du C++ 162


Boucle while

• Syntaxe :

while (expression) {bloc d'instructions}

• Tant que expression est vraie, on exécute le bloc d'instructions

• Remarque : l’expression doit être modifiée au sein du bloc d'instructions


pour qu'elle devienne fausse, sinon on aura une boucle infinie

cout<<endl<<"Entrez un entier positif :";


cin>>x;

while (x <0) {
cout<<endl<<"l'entier saisi n'est pas positif, réessayez :";
cin>>x;
}

Bases du C++ 163


Boucle do … while

• Syntaxe :
do{bloc d'instructions} while (expression);

• Le bloc d'instructions est d’abord exécuté, puis l’expression est évaluée. Si


elle est vraie, on reboucle sur l’exécution du bloc d'instructions puis
l'évaluation de l'expression jusqu'à ce qu'elle devienne fausse.

• A la différence de la boucle while, l’instruction est toujours exécutée au


moins un départ.

do {
cout<<endl<<"entrez un entier positif :";
cin>>x;
}while ( x<0) ;

Bases du C++ 164


Boucle while

• Exemple while : conversion du décimal au binaire


char bin[51],tmp;
int indice=0,i,l,n,n0;

cout<<"Entrez un nombre décimal : ";


cin>>n;
n0 = n;
while (n>0) {
bin[indice]=(n%2==0)?'0':'1';
n=n/2;
indice++;
}
bin[indice]='\0';

l=indice;
for(i=0;i<l/2;i++){
tmp=bin[l-1-i];
bin[l-1-i]=bin[i];
bin[i]=tmp;
}
cout<<n0<<" au format binaire est : "<<bin;

Bases du C++ 165


Traduction des instructions : boucle Pour

Syntaxe en algorithmique Syntaxe en C++

for ( i = valeur initiale ; i < = valeur finale ; i = i


Pour i ← valeur initiale à valeur finale
+p)
[de pas p ] Faire
{
instructions
instructions
Fin Pour
}

Syntaxe en algorithmique Syntaxe en C++


for ( i = 1 ; i < = 100 ; i = i + 1 )
Pour i ← 1 à 100 de pas 1 Faire
{


Fin Pour
}

Pour i ← 1 à 100 Faire for ( i = 1 ; i < = 100 ; i++ )


{
Fin Pour }
Bases du C++ 166
Boucle for
• Syntaxe :
for (instructionInit ; expression ; instructionIteration)
{bloc d'instructions}
• Au départ, instructionInit est exécutée (initialisation).
• Puis, tant que expression est vraie,
– on exécute bloc d'instructions (corps de la boucle),

– puis on exécute l'instructionIteration (itérateur)

cout<<"Je compte jusqu’à 10 :"<<endl;


for ( i= 1 ; i < = 10 ; i ++)
cout <<"i="<<i<<endl;

for ( ; ; )
cout<<"Je suis une boucle infinie"<<endl;

Bases du C++ 167


Boucle for

• La boucle for est sémantiquement équivalente à la boucle while.

cout<<"Je compte jusqu’à 10 : ";

for (int i= 1 ; i < = 10 ; i++)


cout <<"i="<<i<<endl;

cout<<"Je compte jusqu’à 10 : ";

int i = 1;
while (i < = 10){
cout <<"i="<<i<<endl;
i ++ ;
}

Bases du C++ 168


Instruction break

• L’instruction break permet de quitter la boucle la plus interne, ou


bien le case de switch, dans lesquels elle se trouve.
– On ne sort que d’un seul niveau
cout<<"Je calcule la somme de 10 entiers positifs"<<endl;

somme =0 ;

for ( i= 1 ; i <= 10 ; i ++) { // Lecture d’au plus 10 entiers


cout<<endl<<"donner un entier positif :";
cin>>n;
if ( n < 0){ // si un entier n’est pas positif
cout<<"Vous avez saisi un chiffre négatif, je m'arrête !";
break; // On quitte la boucle for
}
somme += n;
}
cout<<"Somme="<<somme;

Bases du C++ 169


Instruction break

• L’instruction break peut être utilisée pour sortir d’une boucle


déclarée comme boucle infinie
while (1) { /* Boucle infinie */
cin>>c;
if ( (c == ’ Q’) || (c == ’ q’) ) // si c vaut la valeur de sortie
break; // On quitte la boucle while
switch (c) {
case ‘A’ : …
case ‘a’ : …
break; // se break là, ne fait sortir que du switch

}
}

Bases du C++ 170


Instruction continue

• L’instruction continue sert à sauter l’itération courante de la


boucle la plus interne, dans laquelle elle se trouve, et à passer
à l’itération suivante
cout<<"Je calcule la somme de 10 entiers positifs"<<endl;

somme =0 ;

for ( i= 1 ; i <= 10 ; i ++) { // Lecture d’au plus 10 entiers


cout<<endl<<"donner un entier positif :";
cin>>n;
if ( n < 0){ // si un entier n’est pas positif
cout<<"Vous avez saisi un chiffre négatif, ressayez";
i--;
continue; // On passe à l'itération suivante
}
somme += n;
}
cout<<"Somme="<<somme;

Bases du C++ 171


Exemple 1:
#include <iostream>
using namespace std;
int main ( ){ int i,j;
for(i=0;i<100;i++){
cout << "\n i= " << i <<endl;
cout << "\n Pour quitter taper
cin >> j; -1 : " <<endl;
if(j==-1)
break;}
return 0;
}

Cette boucle va afficher tous les nombres de 0 à 99. Nous demandons à


l'utilisateur une valeur.
S'il tape "-1" nous sortons de la boucle même si elle n'est pas terminée.

Bases du C++ 172


Exemple 2 :
#include <iostream>
using namespace std;
int main ( ){
int i=2;
do{
i++;
if (i==5)
continue;
cout << "i= \t " << i << endl;
} while(i<7);
return 0 ;}
Cet exemple affichera :
i=3
i=4
i=6
i=7
Quand "i" vaut 5, le code exécute l'instruction "continue" qui saute le "cout" et va se
brancher au niveau du test "while (i<7)" pour évaluer la condition d'arrêt.
Bases du C++ 173
Exemple 3 :
#include <iostream>
using namespace std;
int main ( ){ int i;
for(i=0;i<10;i++)
{
if((i%3)==0) continue;
cout << "\n i= \t" << i <<endl;
}
cout << "\n sortie : " <<endl;
cout << "\n i= \t" << i <<endl;
return 0 ;}
• La boucle for s'effectue pour « i = 0,1,2,3,4,5,6,7,8,9 ».
• Si « i » est divisible par 3, c'est-à-dire que « (i%3)==0 », alors on effectue
l'instruction « continue », ce qui va directement passer à l'instruction « i++ », puis le
test « i<10 » est fait.
• Cette boucle n'affiche pas les multiples de 3.

Bases du C++ 174


Exercices corrigés

Bases du C++ 175


Exercice 1 :
Qu'affiche le programme suivant ?

Bases du C++ 176


Exercice 3 :
Qu'affiche le programme suivant ?

Bases du C++ 177


Exercice 4 :
Qu'affiche le programme suivant ?

Bases du C++ 178


Exercice 5 :
Écrire un programme permettant de lire la valeur de la température de l'eau et
d'afficher son état :
Glace si la température est inférieure à 0.
Eau si la température est strictement supérieure à 0 et inférieure à 100.
Vapeur si la température est strictement supérieure à 100.

Bases du C++ 179


Exercice 5 :
#include <iostream>
using namespace std;
int main ( ){
float tmp;
cout << "Donner une temperature \n";
cin >> tmp;
if(tmp<=0)
cout << "L'eau est glacee" <<endl;
else if((tmp>0)&&(tmp<=100))
cout << "L'eau est a l'etat liquide" <<endl;
else
cout << "L'eau est a l'etat vapeur" <<endl;
return 0 ;
}

Bases du C++ 180


Exercice 6 :
Ecrire un programme qui demande à l’utilisateur de choisir une opération parmi
l’addition (+), soustraction (-), multiplication (*) et division (/) (tout autre caractère
que l’un des 4 cités sera interprété comme une addition) et fournir deux réels
puis afficher le résultat en utilisant le traitement conditionnel(switch).

Bases du C++ 181


Exercice 6 :
#include <iostream>
using namespace std;
int main ( ){
float v1, v2;
char op;
cout << "donnez deux nombres réels: \n";
cin >> v1 >> v2; /* saisie de l'operateur */
cout << "taper un operateur arithmétique\n";
cin >> op; /* saisie de l'operateur */
switch(op){
case '+': cout << "Leur somme est \t" << v1+v2 <<endl; break;
case '-': cout << "Leur différence est \t" << v1-v2 <<endl; break;
case '*': cout << "Leur produit est \t" << v1*v2 <<endl; break;
case '/': cout << "Leur division est \t" << v1/v2 <<endl; break;
default : cout << "La somme est \t" << v1+v2 <<endl;}
return 0 ;}

Bases du C++ 182


LES TABLEAUX ET LES VECTEURS

Syntaxe des fonctions dans C++

183
Plan

• Structures de la section
– Les tableaux
– Les vecteurs

Bases du C++ https://sites.google.com/usmba.ac.ma/ahmedazough/enseignement 184


Les tableaux

Bases du C++ 185


Tableaux

• Ensemble ordonné d’une taille fixe de plusieurs variables du même type

– Syntaxe :
• typeVariables nomTableau[nbrElem] = {elem0, …, elemnbrElem-1}

– Initialisation :
• Liste des constantes du type adéquat, entre accolades
int listEntiers[8] = {1, 2, 3, 4, 5, 6, 7, 8};
double notes[4]={15.5, 14.0, 11.25, 13.75};

• Nombre d’éléments comptés par le compilateur


int g[] = {1, 2, 3, 4, 5, 6, 7, 8 };
short pair[]={10, 4};

• Tableau partiellement rempli


int t[8] = {1, 2, 3, 4}; // 8 réservés, 4 initialisés
Double tab[10] = {1.3, -4.5, 5.1} // 10 réservés, 3 initialisés

Bases du C++ 186


Tableaux

• Accès aux éléments:


– Un Tableau de taille N : tab[N], les éléments sont : {tab[0], …, tab[N-1]}
• Le ième element est : tab[i-1],
• Le premier élément est : tab[0],
• le dernier élément est : tab[N-1]
– Exemple :
int elem[7] = {-1, 0, 4, 6, 7, -23, -5};
int indice = 3;
cout << "Le " << indice << "ème élément du tableau est : " << T[indice-1];

• à l'exécution :
Le 3ème élément du tableau est : 4

–  Attention :
• Aucun contrôle de débordement sur les indices
int elem[7] = {-1, 0, 4, 6, 7, -23, -5};
elem[7] = 5; // autorisé mais dangereux, dépassement de limite

Bases du C++ 187


Tableaux (chaines) de caractères

• Méthode C pour déclarer des chaine de caractères


– Une chaîne de caractères en C est un tableau unidimensionnel de
caractères
– Une chaîne de caractères bien formée est toujours terminée par un
caractère nul '\0' qui indique la fin de la chaine
• Syntaxe :
char nomTableau[taille] = {carct0, carct1, …, carcttaille-2, '\0' };
Ou
char nomTableau[taille] = {"carct0carct1…carcttaille-2"};

• Exemple :
char exp[] = {'B', 'o', 'n', 'j', 'o', 'u', 'r', '\0' };
– Équivalent à
char exp[] = {"Bonjour" };

• Affichage
– Cout << exp;
• permet d'afficher jusqu'au premier \0

Bases du C++ 188


Manipulation des tableaux de caractères
• Dans la bibilothéque cstring (#include <cstring>)

• x = strlen (src)
– renvoie la taille courante x d’une chaîne src (pas la taille maximale du tableau)

• strcpy (dest,src)
– copie d’une chaîne source src vers un tableau de caractères destination dest

• strcat (dest,src)
– ajout d’une chaîne source src à la fin d’une chaîne destination dest

• p = strchr (src,c)
– recherche de la première occurrence d’un caractère c dans une chaîne src

Bases du C++ 189


Manipulation des tableaux de caractères (exemple)

• x = strlen (src) :

• Si src == "bonjour",  x == 7

• strcpy (dest,src) :

• Si src == "bonjour",  dest == "bonjour"

• strcat (dest,src) :

• Si src == "jour" et dest == "bon"  dest == "bonjour"

• p = strchr (src,c) :

• Si src == "bonbon", et c == ‘n’  p=="nbon"

attention : on déclare p comme ceci :


char *p;

c’est est un pointeur sur chaine de caractère,

Bases du C++ 190


Les vecteurs

Bases du C++ 191


Tableau dynamique : vector

• Type qui permet de manipuler des tableaux de taille dynamique de variables


de même type.
– Syntaxe :
• vector<type> nomVect;
– Tableau vide
• vector<type> nomVecteur(nbrElem, valeurInit);
– Tableau de nbrElem, tous initialisés avec la valeur valeurInit
• Récupérer la taille du tableau :
– int taille = nomVect.size();
• Accès à l'élément indice i:
– nomVect.at(i);
• Insérer un élément elem à la fin d'un vecteur nomVect:
– nomVect.push_back(elem);
• Insérer un élément elem à une position particulière pos
– nomVect.insert(pos, elem);
• Supprimer le dernier élément d'un vecteur
– nomVect.pop_back();

Bases du C++ 192


Tableau dynamique : vector (exemple)

Exécution :
0. size: 0
1. size: 3
2. size: 4
3. size: 3
-1, 0, 1,

Bases du C++ 193


LES FONCTIONS

Syntaxe des fonctions dans C++

194
Syntaxe des fonctions (1)

• Toute fonction (principale et secondaire) à la syntaxe suivante:


Entête typeDeRetour nomDeFonction(ListeDesParamètres ) {

variablesLocales;
corps; Définition
retour;
}

Entête
Variables locales

Corps

Retour

• Les accolades ouvrante "{" et fermante "}" sont obligatoires

Bases du C++ 195


Syntaxe des fonctions (2)

Entête typeDeRetour nomDeFonction(ListeDesParamètres ) {

variablesLocales;
corps; Définition
retour;
}

• Entête: (Obligatoire)
– Type De Retour
• C’est le type du résultat de la fonction (int, float, char, …)
• Si c’est une procédure (sans résultat) : le typeDeRetour est void
– Nom De Fonction
• C’est un Identifiant : id
– id = letter(letter|digit)*
– letter = a|b|…|y|z|A|B|…|Y|Z|_
– digit = 0|…|9
– Liste Des Paramètres
• C’est la liste des paramètres formels passés de l’extérieur à la fonction
• ListeDesParamètres = type1 p1, ..., typen pn
Bases du C++ 196
Syntaxe des fonctions (3)

Entête typeDeRetour nomDeFonction(ListeDesParamètres ) {

variablesLocales;
corps; Définition
retour;
}

• Définition
– Variables Locales
• Une fonction définie optionnellement des variables locales nécessaires aux traitements
– Corps
• Décrit les instructions à effectuer sur les paramètres, les variables locales et les variables
globales
• Toute instruction se termine par un point-virgule ;
• Les instructions vont être exécutées l’une après l’autre.
– Retour
• C’est la dernière instruction exécutée dans la fonction
• S’écrit : return X; avec le type de X est le même que le typeDeRetour
• Pour une procédure, on se limite à return;

Bases du C++ 197


Bonne chance !

Bases du C++ 198