SlideShare uma empresa Scribd logo
1 de 198
Baixar para ler offline
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++
3
Bases du C++
Généralités
• Ordinateurs, informatique, c’est quoi ?
4
• Représentation de l’information sur l’ordinateur
• Composants matériels
• Composants logiciels
REPRÉSENTATION DE
L’INFORMATION SUR
L’ORDINATEUR
5
Bases du C++
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
Bases du C++ 6
Hors tension Sous tension
Commutateur
0 1
Bit (BInary digiT)
La représentation binaire
• Combien de valeurs avec combien d’ampoules?
Bases du C++ 7
= 0
= 1
= 2
= 3
4 valeurs
ou
22 valeurs
= 0
= 1
Si
et
2 ampoules permettent de représenter…
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
8
Bases du C++
Unités de mesure informatique
• Nomination standardisée par le Commission électrotechnique internationale en 1998.
Préfixes décimaux Valeur
Octet (o) 8 bits
Kilooctet (Ko) 103 o = 1 000 o
Mégaoctet (Mo) 106 o = 1 000 Ko
Gigaoctet (Go) 109 o = 1 000 Mo
Téraoctet (To) 1012 o = 1 000 Go
Linux
Windows
Préfixes binaires Valeur
Octet (o) 8 bits
Kibioctet (Kio) 210 o = 1 024 o
Mébioctet (Mio) 220 o = 1 024 Kio
Gibioctet (Gio) 230 o = 1 024 Moi
Tébioctet(Tio) 240 o = 1 024 Gio
9
Bases du C++
Conversion binaire / décimal
• Du binaire au décimal :
– Adition des puissances de 2
• 𝑋(10) = ℎ𝑖. 2𝑖
𝑛−1
𝑖=0
– 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)
7 6 5 4 3 2 1 0
27 26 25 24 23 22 21 20
0 1 0 0 1 1 0 1
10
Bases du C++
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.
• De l’hexadécimal au décimal
– 𝑋(10) = ℎ𝑖. 16𝑖
𝑛−1
𝑖=0
• 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
1 0
161 160
6 4
11
Bases du C++
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
– 𝑋(10) = ℎ𝑖. 𝑏𝑖
𝑛−1
𝑖=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
12
Bases du C++
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
nulle (ou que la précision voulue soit atteinte).
soit
Pour la partie entière, on procède par divisions
en base 2
comme pour un entier.
54,2510
Exemple: conversion de
Partie entière : 5410  1101102
Partie fractionnaire :
0,252  0,50
0,502 1,00
0,002  0,00
54,2510  110110,0102




a1
a2
a3
0
1
 0
Donc
13
Passage de la base 10 vers une base
Bases du C++
Les entiers négatifs sont stockés en binaire par complément
complément à deux se calcule en deux étapes:
• On inverse d'abord les bits (complément à
à deux. Le
un)
• On ajoute 1 au résultat
L’addition
0
+ 0
0
+ 1
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.
14
Notation des entiers négatifs
Bases du C++
• 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 0010000 0 0110000 P 1010000 p 1110000
DC1 0010001 1 0110001 Q 1010001 q 1110001
DC2 0010010 2 0110010 R 1010010 r 1110010
DC3 0010011 3 0110011 S 1010011 s 1110011
DC4 0010100 4 0110100 T 1010100 t 1110100
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
‘q’ :
1110001 = 113
17
Bases du C++
Code ASCII (2)
• Version 2, 1981, IBM, 8bits, 256 caractères
17
Bases du C++
Image matricielle
élémentaires
= matrice de points
= PIcture ELement = pixel
• Chaque pixel est codé en binaire sur un certain
nombre de bits.
18
Codage d’une image
Bases du C++
Image noir
• Chaque
et blanc :
pixel est codé sur 1 bit : 0
1
=
=
blanc
noir
303 pixels
36 bits
303 pixels
303 x 1 bit = 91809
303 x bits
19
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
0 1 0 0 1 0
Codage d’une image (suite)
Bases du C++
Image Niveaux de gris
• Chaque pixel est codé sur plusieurs bits
• Si on code sur 8 bits = 1 pixel = 1 octet
303 x 303 x 1 octet =
=
91809 octets
303 pixels
734 472 bits
303 pixels
20
Codage d’une image (suite)
Bases du C++
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
= 2 203 392 bits
des images en mémoire
303 pixels
•‬Pour faciliter le stockage
21
Codage d’une image (suite)
Bases du C++
Les composantes matérielles
Bases du C++ 23
Les composantes matérielles

Périphérique
d’entrée
(input)
Périphérique
de sortie
(output)
Mémoire externe ou
unité de stockage
Unité de traitement
Processeur
Mémoire centrale
   
Port d’entrée Port de sortie
Bus
RAM ROM
24
Bases du C++
Les composantes matérielles : Carte mère
25
Bases du C++
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.
26
Bases du C++
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.
27
Bases du C++
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.
28
Bases du C++
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.
PS/2 - Souris
PS/2 - Clavier
LAN
RJ45
29
Bases du C++
Les périphériques d'entrée
• Saisie des données
– Clavier
– Souris
– Numériseur
– Micro
– Caméra numérique
– Etc.
30
Bases du C++
Les périphériques de sortie
• Restitution des données
– Écran
– Imprimante
– Traceur
– Haut-parleur
– Etc.
31
Bases du C++
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.
32
Bases du C++
Les composantes logicielles
33
Bases du C++
Système
d'exploitation
Pilotes de
périphériques
Logiciels d'application
Microcode (BIOS)
Les composantes logicielles
34
Bases du C++
Le microcode BIOS
• Basic Input-Output System
• Couche logicielle fondamentale
qui contrôle le matériel
• Le premier programme qui
démarre
– Vérifie et initialise le matériel
– Démarre le système d’exploitation
Système
d'exploitation
Pilotes de
périphériques
Logiciels d'application
Microcode (BIOS)
35
Bases du C++
Le système d'exploitation
• Plate-forme commune pour les
logiciels d'application
• Fonctions communes :
– Exécution des logiciels
d'application
– Gestion des fichiers
– Gestion des utilisateurs
– Contrôle des programmes
– Etc.
• Exemples : Windows, Linux,
Unix, Mac OS, …
Système
d'exploitation
Pilotes de
périphériques
Logiciels d'application
Microcode (BIOS)
36
Bases du C++
Les pilotes de périphériques
• Extensions du système
d'exploitation (Drivers)
• Pour ajouter facilement une
grande variété de
périphériques
• Exemples :
– clavier
– souris
– imprimante
– carte d'interface réseau
Système
d'exploitation
Pilotes de
périphériques
Logiciels d'application
Microcode (BIOS)
37
Bases du C++
Les logiciels d'application
• Plusieurs types :
– Editeur de texte : MS Word,
Notepad++, Emacs,
– Navigateur : Chrome, Internet
Explorer, Firefox,
– Messagerie instantanée :
WhatsApp, Skype, Messenger,
– Traitement d’image: Photoshop,
Gimp,
– Réseau sociaux : Facebook,
Linkedin,
– Jeux: Minecraft, Starcraft II, World
of Warcraft, Worms,
Système
d'exploitation
Pilotes de
périphériques
Logiciels d'application
Microcode (BIOS)
Starcraft
38
Bases du C++
PROGRAMMATION
Programmation, Quoi? Pourquoi? Comment?
• Langages informatiques
• Développement logiciel
• Production d'exécutable
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
40
Bases du C++
LANGAGES INFORMATIQUES
41
Bases du C++
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
42
Bases du C++
Niveau d'abstraction des langages de programmation
011100101010
111000101101
movl $4, %eax
movl $1, %ebx
movl $str, %ecx
movl $8, %edx
Langage
machine
Langage
Assembleur
Les
Langages
évolués
C/C++ Java,C#...
Langage naturel
Ordinateur
43
Bases du C++
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
44
Bases du C++
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
– +: 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
ADD A, 4
LOAD B
MOV A, OUT
…
traducteur langage machine
45
Bases du C++
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
code source
en langage de
programmation
Compilateur /
interpréteur
Programme exécutable
en Langage machine
100010010010011000001001
011100101010111000100100
100110001001001001001001
46
Bases du C++
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
47
Bases du C++
Généalogie des langages de programmation
48
Bases du C++
Développement logiciel
49
Bases du C++
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.
50
Bases du C++
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
3. Développement de la solution (programmation)
– Choix du langage de programmation
– Choix de la machine utilisée
4. Création du programme l’exécutable (Compilation)
– Correction des erreurs
– Traduction du programme en langage machine
5. Exécution et tests
Analyse
Conception
Programmation
Compilation
Tests et
modifications
Enoncé du problème
Spécification
Algorithme
Programme
Exécutable
Version finale de l’exécutable
51
Bases du C++
• 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
59
Algorithmique
Bases du C++
• 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
particulier.
d’instructions qui décrit comment résoudre un problème
60
Pourquoi on utilise un algorithme ?
Bases du C++
• 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.
61
Algorithmique
Bases du C++
https://sites.google.com/usmba.ac.ma/ah
medazough/enseignement
Production d’exécutable
55
Bases du C++
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
– Compilation
– Interprétation
– Semi-compilation
Programme exécutable
Programme source
56
Bases du C++
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)
57
Bases du C++
• La machine ne comprend que le langage machine.
11101010
11111000
10101010
10101010
11111111
0x33
0x34
0x35
0x36
0x37
00011010
01011110
01011010
11011110
11101010
01011010
01011010
01011010
11101010
11000111
11101010
11000111
10101010
10101010
11000111
• Pour les humains:
•
•
•
difficile à comprendre le langage machine.
le langage machine est spécifique d’un‬processeur
absence de portabilité.
donné.
• 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.
63
La notion de compilation
Bases du C++
• 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.
64
Langages compilés
Bases du C++
• 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.
65
La notion d’interprète
Bases du C++
• Avantage:
- facilité de programmation
- portabilité: le même programme est exécutable
machine.
sur n’importe quelle
• Inconvénient:
- exécution lente par rapport à la compilation.
66
Langages interprétés
Bases du C++
Production d’exécutable
62
Bases du C++
LES BASES DU C++
Découvrons les bases du langages C++
• Environnement de développement
• Structure d’un programme
• Bibliothèque standard
• Les variables et les constantes
• Ecriture / Lecture
• Commentaires
• Expressions et opérateurs
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
64
Bases du C++
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)
65
Bases du C++
Environnement de
développement
66
Bases du C++
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)
67
Bases du C++
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/
• …
68
Bases du C++
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
69
Bases du C++
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
70
Bases du C++
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
71
Bases du C++
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,
72
Bases du C++
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 !!?
73
Bases du C++
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
74
Bases du C++
Deuxième exemple (1)
• Maintenant créer un
nouveau projet, puis copier
le texte suivant dans le
main.cpp
75
Bases du C++
Deuxième exemple (2)
• Rendu à la console après exécution :
76
Bases du C++
Structure d'un programme C++
77
Bases du C++
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)
78
Bases du C++
• 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
using namespace std;
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.
• return 0 ou return EXIT_SUCCESS signifie que le programme se termine
correctement.
• Pour utiliser EXIT_SUCCESS, il faut ajouter #include<cstdlib>
…
int main() {
…
return 0;
}
#include<cstdlib>
…
int main() {
…
return EXIT_SUCCESS;
}
équivalents
80
Bases du C++
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 :
• 𝑠𝑖 (𝑎 > 𝑏) 𝑎𝑙𝑜𝑟𝑠 𝑥 = 𝑎, 𝑠𝑖𝑛𝑜𝑛 𝑥 = 𝑏
81
Bases du C++
Bibliothèque standard
82
Bases du C++
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>
83
Bases du C++
Quelques fichiers d’entêtes du C++
• <complex.h>
– Pour manipuler les nombres complexes
Nom du fichier
d’entête
Rôle
<iostream> Fournit les capacités centrales d'entrée/sortie du
langage C++
cin, cout, cerr, clog
<cstdio> Fournit les capacités centrales d'entrée/sortie du
langage C
printf, scanf
<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
caractères.
strcat, strchr,
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/
84
Bases du C++
LES TYPES ET LES VARIABLES
Définir les données d'un programme C++
• Déclaration de variables
• Types simples
• Types structurés
• Types objets
85
Déclaration de variables
86
Bases du C++
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
• Syntaxe de déclaration de variables langage C++ :
typeVariable nomVariable0 ,… ,nomVariablen ;
Ne pas
oublier le ;
87
Bases du C++
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.
• 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;
L’opérateur « = »
Ce n’est pas une égalité, c’est une affection
On le lit : « reçoit »

88
Bases du C++
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 }
89
Bases du C++
Variables, exemple (1)
Variable locale
Variable globale
90
Bases du C++
Variables, exemple (suite)
• Autre exemple :
Variables locales
int x, y, z;
double r;
double c;
91
Bases du C++
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
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
id = letter(letter|digit)*
letter = a|b|…|y|z|A|B|…|Y|Z|_
digit = 0|…|9
92
Bases du C++
Mots clés réservés de C++ (version C++11)
alignas (depuis C++11)
alignof (depuis C++11)
and
and_eq
asm
auto
bitand
bitor
bool
break
case
catch
char
char16_t (depuis C++11)
char32_t (depuis C++11)
class
compl
const
constexpr (depuis C++11)
const_cast
continue
decltype (depuis C++11)
default
delete
do
double
dynamic_cast
else
enum
explicit
export
extern
false
float
for
friend
goto
if
inline
int
long
mutable
namespace
new
noexcept (depuis C++11)
not
not_eq
nullptr (depuis C++11)
operator
or
or_eq
private
protected
public
register
reinterpret_cast
return
short
signed
sizeof
static
static_assert (depuis C++11)
static_cast
struct
switch
template
this
thread_local (depuis C++11)
throw
true
try
typedef
typeid
typename
union
unsigned
using
virtual
void
volatile
wchar_t
while
xor
xor_eq
http://fr.cppreference.com/w/cpp/keyword
93
Bases du C++
Nom de variable, exemple
Nom de variable
Brol
bRol
Brol123
Brol_2_brol_1
Brol_
1brol
O23
Mon nom
_123_23
Prénom
main
Union
breakauto
Accepté ou non Explication
Oui
Oui
Oui
Oui
Oui
Non Commence par 1
Oui C’est un O au début
Non L’espace n’est pas accepté
Déconseillé Commence par _
Non L’accent n’est pas acceptée
Non Mot réservé
Oui Union ≠ union (qui est lui réservé)
Oui Ca devient un nouveau nom
94
Bases du C++
Types de variables
Type de variables
en C++
Simples
vide
void
Booléen
bool
Entiers
short
int
long
long long
unsigned …
Réels
float
double
Caractères
char
Structurés
Tableaux
Structure
Objets
string
vector
…
95
Bases du C++
Types simples
96
Bases du C++
Tailles des types de variables
Taille en octets 1 2 4 8
Entiers
bool
char
(unsigned)
short
(unsigned)
Int
(unsigned)
long
(unsigned)
long long
Réels
float float
double double
Taille
en octets
97
Bases du C++
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
98
Bases du C++
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
• Quel type réel choisir ?
Type Précision Encodage Signe Exposant Mantisse Valeur d'un nombre
float Simple 4 oct 1 bit 8 bits 23 bits −1 𝑠 × 𝑀 × 2(𝐸−127)
double Double 8 oct 1 bit 11 bits 52 bits
−1 𝑠
× 𝑀
× 2(𝐸−1023)
Type
Taille mantisse
max
|Exposant|
max
float 7 38
double 16 308
sinon long double (16 oct)
99
Bases du C++
Types entiers et réels, exemple
Nombre
-15
33000
1.23
234.98756
-3*109
4*109
0,456005
1 * 10-40
Type minimum adapté Explication
short
int ou unsigned short Borne max short dépassée
float taille(mantisse) ≤ 7 et |exposant| ≤ 38
double taille(mantisse) > 7
long long Borne max long dépassée
long long ou unsigned int Borne max int dépassée
float taille(mantisse) ≤ 7 et |exposant| ≤ 38
double |exposant| > 38
short x = 32767, y;
unsigned int z = 4294967295, t;
y = x + 1;
t = z + 1;
cout << "y = " << y << endl;
cout << "t = " << t;
Exécution y = -32768
t = 0
100
Bases du C++
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
101
Bases du C++
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
102
Bases du C++
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
103
Bases du C++
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
104
Bases du C++
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 :
– char a=‘0’, b=‘a’;
– short x=2;
– bool e=true;
– float f=1.2;
Adresse
(en oct)
Variable
Nom de
variable
… …
1008 0 0 1 1 0 0 0 0 a
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
f
1014 1 0 0 0 1 1 0 0
1015 1 1 0 0 1 1 0 0
1016 1 1 0 0 1 1 0 1
… …
105
Bases du C++
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;
}
106
Bases du C++
Ecriture / Lecture
107
Bases du C++
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)
• Pour pouvoir demander à l’ordinateur
d’exécuter des fonctions de (i/o)
– Il faut inclure dans la programme le fichier
d’entête C++ <iostream>
#include<iostram>
input
output
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++
108
Bases du C++
Afficher à l’écran (console)
• Syntaxe :
– 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 :
– A l’écran on verra :
cout << expr1 << ... << exprn << endl;
…
int age = 35;
cout << "Mon age est de : " << age << " ans." <<endl;
Mon age est de : 35 ans.
109
Bases du C++
Lire au clavier
• Syntaxe :
– 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)
• Exemple :
– A l’écran on verra :
cin >> var1 >> ... >> varn;
int age;
cout << "Veuillez saisir votre age : ";
cin >> age;
cout << "Votre age est de " << age << " ans...";
Veuillez saisir votre age : 22
Votre age est de 22 ans...
Ici arrêt pour
saisi au clavier
110
Bases du C++
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.
111
Bases du C++
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;
• }
112
Bases du C++
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.
113
Bases du C++
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;
}
114
Bases du C++
Commentaires
115
Bases du C++
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.
116
Bases du C++
Commentaires, exemple (1)
Commentaire d’entête
de fichier
Commentaire de fonction
Commentaire de ligne
117
Bases du C++
Commentaires, exemple (suite)
Commentaires de ligne
Commentaire de fonction
118
Bases du C++
•
•
Expressions
Opérateurs
Comment manipuler les données d'un programme C++ ?
119
EXPRESSIONS et OPERATEURS
Bases du C++
Expressions
120
Bases du C++
• 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
Expressions
Bases du C++
• 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
Fonctions mathématiques
Bases du C++
#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
Exemple:
Bases du C++
Opérateurs
124
Bases du C++
Comme tous les langages , C++ dispose d’opérateurs arithmétiques.
125
opérateur signification
+ addition
- soustraction
* Multiplication
/ division
% modulo (reste d'une
division entière)
Opérateurs arithmétiques
Bases du C++
126
opération résultat
int i=3;
i=i+1;
4
int i=3;
i=i-1;
2
int b=3;
b=b*2 6
int k=4;
k=k/2; 2
int ii =3;
ii=ii%2; 1
Exemple:
Bases du C++
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
Opérateur d’affectation
Bases du C++
Donnez les valeurs des variables A, B et C après exécution
du programme suivant
#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;
en langage c++ ?
cout << " les valeurs sont: " <<A<<"t"<<B<<"t"<<C
return 0;
}
<< "n";
128
Exercice 1
Bases du C++
Donnez les valeurs des variables Aet 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:
return 0;
}
" <<A<<"t"<<B<< "n";
129
Exercice 2
Bases du C++
Ecrire un programme en langage C++ permettant d’échanger les
et B=2.
valeurs de deux variables A=1
130
Exercice 3
Bases du C++
Ecrire un programme en langage C++ permettant d’échanger les
et B=2.
valeurs de deux variables
Réponse:
#include<iostream>
using namespace std;
int main ( )
{
int A,B,C;
A =1;
B =2;
C=A;
A=B;
B=C;
A=1
cout << " les valeurs sont: " <<A<<"t"<<B<<
return 0;
}
"n";
131
Exercice 3
Bases du C++
Affectation composée: expression1 OP= expression2
la variable expression1 n’est évaluée qu’une
opérateur arithmétique.
seule fois. OP est un
Opérateurs
+=
Exemple:
d’affectation utilisables :
%=
-= *= /=
132
i = i+20; i+=20 int i=4;
i+=20; 24
i = i+k; i+=k; int i=3,k=6;
i+=k;
9
i = i*3; i*=3; int i=4;
i = i*3;
12
i = i/3; i/=3; int i=9;
i/=3;
3
ii = ii%3; i%=3; int ii;
ii=ii%2;
1
Opérateur d’affectation (suite)
Bases du C++
La syntaxe : expression1 OP expression2
Où opérateur peut être l'un des symboles suivants :
Ces opérateurs
sinon.
retournent la valeur 0 si la comparaison est fausse et 1
133
= = l’opérateur égal à
!= l’opérateur différent de
<, <=, >,
>=
plus petit, plus petit ou égal,
plus grand, plus grand ou égal
Opérateur de comparaison
Bases du C++
#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;
}
Nous avons la sortie suivante :
134
res = 0
res = 0
res = 1
res = 0
Exemple:
Bases du C++
• 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)
a<b et c<d sont
le cas contraire.
&& (c<d) prend la valeur 1 (vrai) si les deux expressions
toutes deux vraies (de valeur 1), la valeur 0 (faux) dans
135
&& Et logique (and)
|| Ou logique (or)
! Négation logique
(not)
Opérateurs logiques
Bases du C++
#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
cout << "res = " << res <<"n";
return 0;
res=0(faux) */
}
136
Nous avons le résultat suivant :
res = 0
res = 1
res = 0
Exemple
Bases du C++
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
Exemple 1 :
#include<iostream>
using namespace std;
{
int main()
int a,b;
a=2;
b=3;
d'être utilisée.
/* 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;
}
137
a=3
b=2
++ Incrémente de 1
-- Décrémente de 1
Opérateurs d’incrémentation (++) et de décrémentation (--)
Bases du C++
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
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";
return 0;
}
été utilisée.
138
a=2
b=3
a=3
b=2
Bases du C++
Opérateurs d’incrémentation (++) et de décrémentation (--)
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;
139
Bases du C++
Structures
• Exemple :
• Exécution :
https://sites.google.com/usmba.ac.ma/ahmedazough/enseignement
poids des pommes : 1500
prix des pommes : 15
140
Bases du C++
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.
https://sites.google.com/usmba.ac.ma/ahmedazough/enseignement 141
Bases du C++
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;
}
142
Bases du C++
Types objets
143
Bases du C++
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";
144
Bases du C++
Manipulation de string
• cout << str;
– Permet d'afficher la chaine (du début jusqu'au premier '0')
– Exemple :
string str0 = "bienvenu";
string str1 = "bonj0our";
cout << "la chaine str_0 : " << str0 <<endl;
cout << "la chaine str_1 : " << str1 <<endl;
• Execution :
• 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 = "bonj0our";
cout << "la taille de str_0 : " << str0.size() <<endl;
cout << "la taille de str_1 : " << str1.size() <<endl;
• Execution :
la chaine str0 : bienvenu
la chaine str1 : bonj
la taille de str0 :17
la taille de str1 :4
145
Bases du C++
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 :
• 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 :
la chaine str : mere
derniere lettre : e
le mot est : bonjour
146
Bases du C++
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 !";
cout << chaine.find("jour") << endl;
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 :
• string src = "Bonjour !";
• cout << src.replace(3, 4, "soir");
Bonsoir !
Exécution :
3
Exécution :
147
Bases du C++
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;
jour !
jo
Exécution :
Toutes les autres fonctions de manipulations de chaines de caractères sur :
http://www.cplusplus.com/reference/string/string/
148
Bases du C++
É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>
using namespace std;
int main(){
SetConsoleOutputCP(1252);
SetConsoleCP(1252);
string s="père",p;
cout<<s<<endl;
cout<<"écrire un mot : ";
cin>>p;
cout<<p<<endl;
return 0;
}
père
écrire un mot : éléments
éléments
Exécution :
149
Bases du C++
STRUCTURES DE CONTRÔLE
Implémenter des traitements conditionnels dans un programme C++
• if-else, Opérateur ternaire, switch-case
• Boucles for, while, do-while
• Instructions break et continue
150
Plan
• Structures de contrôle
– if … else
– Opérateur ternaire … ?... : …
– switch … case
– for
– while
– do … while
– Instruction break
– Instruction continue
151
Bases du C++
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
152
Bases du C++
Syntaxe en algorithme Syntaxe en C++
Si condition Alors
Début Si
instructions
Fin Si
if ( condition)
{
instructions
}
Si condition Alors
Début Si
instructions
Fin Si
Sinon
Début Sinon
instructions
Fin Sinon
if ( condition )
{
instructions
}
else
{
instructions
}
Traduction des instructions : schéma conditionnel
153
Bases du C++
if( (an%4==0 && an%100!=0) || an%400==0){
nbjours =366;
}
else {
nbjours = 365;
}
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 :
– Année bissextile
154
Bases du C++
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;
}
}
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
155
Bases du C++
Opérateur ternaire (…) ? … : …
• Dans de nombreux cas, une instruction conditionnelle sert juste à calculer
la valeur d'une variable
– Exemple :
• 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 :
if(a > b)
max = a;
else
max = b ;
max = (a > b) ? a : b ;
156
Bases du C++
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;
}
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 :
157
Bases du C++
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 ;
Instruction if (suite)
Bases du C++ 158
#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
0 ;
<< " Au revoir ! n "; /* instruction en dehors du bloc de if */
return
}
Exemple 3:
Bases du C++ 159
#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
}
cout << " Au
return 0 ;
}
" << "n"; /* instruction du bloc de if */
revoir! n "; /* instruction en dehors du bloc de if */
Resultat: pour i= 8 OK
Au revoir!
i= 9 Au revoir!
pour
Exemple 4:
Bases du C++ 160
#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 ;
}
Exemple 5:
Bases du C++ 161
Syntaxe en algorithmique Syntaxe en C++
Tant que condition Faire
instructions
Fin Tant que
while (condition)
{
instructions
}
Syntaxe en algorithmique Syntaxe en C++
Faire
instructions
Tant que condition
do
{
instructions
}while (condition) ;
Boucles Tant que et Faire tant que
162
Bases du C++
cout<<endl<<"Entrez un entier positif :";
cin>>x;
while (x <0) {
cout<<endl<<"l'entier saisi n'est pas positif, réessayez :";
cin>>x;
}
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
163
Bases du C++
do {
cout<<endl<<"entrez un entier positif :";
cin>>x;
}while ( x<0) ;
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.
164
Bases du C++
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;
• Exemple while : conversion du décimal au binaire
Boucle while
165
Bases du C++
Syntaxe en algorithmique Syntaxe en C++
Pour i ← valeur initiale à valeur finale
[de pas p ] Faire
instructions
Fin Pour
for ( i = valeur initiale ; i < = valeur finale ; i = i
+ p )
{
instructions
}
Syntaxe en algorithmique Syntaxe en C++
Pour i ← 1 à 100 de pas 1 Faire
…
Fin Pour
for ( i = 1 ; i < = 100 ; i = i + 1 )
{
…
}
Pour i ← 1 à 100 Faire
Fin Pour
for ( i = 1 ; i < = 100 ; i++ )
{
}
Traduction des instructions : boucle Pour
166
Bases du C++
cout<<"Je compte jusqu’à 10 :"<<endl;
for ( i= 1 ; i < = 10 ; i ++)
cout <<"i="<<i<<endl;
for ( ; ; )
cout<<"Je suis une boucle infinie"<<endl;
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)
167
Bases du C++
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 ++ ;
}
Boucle for
• La boucle for est sémantiquement équivalente à la boucle while.
168
Bases du C++
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;
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
169
Bases du C++
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
…
}
}
Instruction break
• L’instruction break peut être utilisée pour sortir d’une boucle
déclarée comme boucle infinie
170
Bases du C++
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;
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
171
Bases du C++
#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;
if(j==-1)
break;}
return 0;
}
-1 : " <<endl;
Cette boucle va afficher tous les nombres de
l'utilisateur une valeur.
0 à 99. Nous demandons à
S'il tape "-1" nous sortons de la boucle même si elle n'est pas terminée.
Exemple 1:
Bases du C++ 172
#include <iostream>
using namespace
int main ( ){
int i=2;
do{
i++;
if (i==5)
continue;
std;
cout << "i= t
} while(i<7);
return 0 ;}
" << i << endl;
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.
Exemple 2 :
Bases du C++ 173
#include <iostream>
using namespace std;
int main ( ){ int i;
for(i=0;i<10;i++)
{
if((i%3)==0) continue;
cout
}
cout
cout
<< "n i= t" << i <<endl;
<<
<<
"n
"n
;}
sortie : " <<endl;
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.
Exemple 3 :
Bases du C++ 174
Exercices corrigés
175
Bases du C++
Qu'affiche le programme suivant ?
Exercice 1 :
Bases du C++ 176
Qu'affiche le programme suivant ?
Exercice 3 :
Bases du C++ 177
Qu'affiche le programme suivant ?
Exercice 4 :
Bases du C++ 178
É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.
Exercice 5 :
Bases du C++ 179
#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
else
cout << "L'eau
est a l'etat liquide" <<endl;
est a l'etat vapeur" <<endl;
return
}
0 ;
Exercice 5 :
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).
181
Bases du C++
#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étiquen";
cin >> op; /* saisie de l'operateur */
switch(op){
case
case
case
case
'+': cout << "Leur somme est t" << v1+v2 <<endl; break;
'-': cout << "Leur différence est t" << v1-v2 <<endl; break;
'*': cout << "Leur produit est t" << v1*v2 <<endl; break;
'/': cout << "Leur division est t" << v1/v2 <<endl; break;
default : cout << "La somme est t" << v1+v2 <<endl;}
return 0 ;}
Exercice 6 :
Bases du C++ 182
LES TABLEAUX ET LES VECTEURS
Syntaxe des fonctions dans C++
183
Plan
• Structures de la section
– Les tableaux
– Les vecteurs
https://sites.google.com/usmba.ac.ma/ahmedazough/enseignement 184
Bases du C++
Les tableaux
185
Bases du C++
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
186
Bases du C++
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 :
– 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
Le 3ème élément du tableau est : 4

187
Bases du C++
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
188
Bases du C++
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
189
Bases du C++
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,
190
Bases du C++
Les vecteurs
191
Bases du C++
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();
192
Bases du C++
Tableau dynamique : vector (exemple)
Exécution :
0. size: 0
1. size: 3
2. size: 4
3. size: 3
-1, 0, 1,
193
Bases du C++
LES FONCTIONS
Syntaxe des fonctions dans C++
194
Syntaxe des fonctions (1)
• Toute fonction (principale et secondaire) à la syntaxe suivante:
• Les accolades ouvrante "{" et fermante "}" sont obligatoires
Entête
Variables locales
Corps
Retour
Entête typeDeRetour nomDeFonction(ListeDesParamètres ) {
variablesLocales;
corps;
retour;
}
Définition
195
Bases du C++
Syntaxe des fonctions (2)
• 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
Entête typeDeRetour nomDeFonction(ListeDesParamètres ) {
variablesLocales;
corps;
retour;
}
Définition
196
Bases du C++
Syntaxe des fonctions (3)
• 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;
Entête typeDeRetour nomDeFonction(ListeDesParamètres ) {
variablesLocales;
corps;
retour;
}
Définition
197
Bases du C++
Bonne chance !
198
Bases du C++

Mais conteúdo relacionado

Mais procurados

Sécurité des Applications WEB -LEVEL1
 Sécurité des Applications WEB-LEVEL1 Sécurité des Applications WEB-LEVEL1
Sécurité des Applications WEB -LEVEL1
Tarek MOHAMED
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
Antoine Rey
 
Découverte de Redis
Découverte de RedisDécouverte de Redis
Découverte de Redis
JEMLI Fathi
 
Business Intelligence : introduction to datawarehouse
Business Intelligence : introduction to datawarehouseBusiness Intelligence : introduction to datawarehouse
Business Intelligence : introduction to datawarehouse
Alexandre Equoy
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
pierrepo
 
Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)
Linh Nguyen
 

Mais procurados (20)

Tp1 wp etud
Tp1 wp etudTp1 wp etud
Tp1 wp etud
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
Sécurité des Applications WEB -LEVEL1
 Sécurité des Applications WEB-LEVEL1 Sécurité des Applications WEB-LEVEL1
Sécurité des Applications WEB -LEVEL1
 
Dự án quản lý nội dung cho trang báo điện tử
Dự án quản lý nội dung cho trang báo điện tửDự án quản lý nội dung cho trang báo điện tử
Dự án quản lý nội dung cho trang báo điện tử
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Découverte de Redis
Découverte de RedisDécouverte de Redis
Découverte de Redis
 
Business Intelligence : introduction to datawarehouse
Business Intelligence : introduction to datawarehouseBusiness Intelligence : introduction to datawarehouse
Business Intelligence : introduction to datawarehouse
 
Curso HTML 5 - Aula com Formulários, Imagens, Áudio e Vídeo
Curso HTML 5 - Aula com Formulários, Imagens, Áudio e VídeoCurso HTML 5 - Aula com Formulários, Imagens, Áudio e Vídeo
Curso HTML 5 - Aula com Formulários, Imagens, Áudio e Vídeo
 
Introduction aux bases de données
Introduction aux bases de donnéesIntroduction aux bases de données
Introduction aux bases de données
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFITheses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
curriculum vitae
curriculum vitaecurriculum vitae
curriculum vitae
 
Fiche TD sur les systèmes informatiques
Fiche TD sur les systèmes informatiquesFiche TD sur les systèmes informatiques
Fiche TD sur les systèmes informatiques
 
UML
UMLUML
UML
 
Đề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đ
Đề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đĐề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đ
Đề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đ
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)
 
Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3
 

Semelhante a Cour d'informatique c++

Ch1 systemenumeration
Ch1 systemenumerationCh1 systemenumeration
Ch1 systemenumeration
mickel iron
 
Ch1 systemenumeration
Ch1 systemenumerationCh1 systemenumeration
Ch1 systemenumeration
mickel iron
 
Digital_Signal_Processors_TG_FULL.pdf
Digital_Signal_Processors_TG_FULL.pdfDigital_Signal_Processors_TG_FULL.pdf
Digital_Signal_Processors_TG_FULL.pdf
HouBou3
 
Numeration et codage_de_linfo
Numeration et codage_de_linfoNumeration et codage_de_linfo
Numeration et codage_de_linfo
yarsenv47
 
TD systèmes logiques.pdf----------------
TD systèmes logiques.pdf----------------TD systèmes logiques.pdf----------------
TD systèmes logiques.pdf----------------
NasriMohsen2
 

Semelhante a Cour d'informatique c++ (20)

Info smpc2 part1
Info smpc2 part1Info smpc2 part1
Info smpc2 part1
 
sujet 1.pptx
sujet 1.pptxsujet 1.pptx
sujet 1.pptx
 
Ch1 systemenumeration
Ch1 systemenumerationCh1 systemenumeration
Ch1 systemenumeration
 
Chapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdf
Chapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdfChapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdf
Chapitre-2_SYSTEMES DE NUMERATION ET CODAGE.pdf
 
Ch1 systemenumeration
Ch1 systemenumerationCh1 systemenumeration
Ch1 systemenumeration
 
Digital_Signal_Processors_TG_FULL.pdf
Digital_Signal_Processors_TG_FULL.pdfDigital_Signal_Processors_TG_FULL.pdf
Digital_Signal_Processors_TG_FULL.pdf
 
Cours de c
Cours de cCours de c
Cours de c
 
Architecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
Architecture des ordinateurs Elaboré par- ABIDA Mounir.pptArchitecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
Architecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
 
Numeration et codage_de_linfo
Numeration et codage_de_linfoNumeration et codage_de_linfo
Numeration et codage_de_linfo
 
bhaj_inspiration.pdf
bhaj_inspiration.pdfbhaj_inspiration.pdf
bhaj_inspiration.pdf
 
TD systèmes logiques.pdf----------------
TD systèmes logiques.pdf----------------TD systèmes logiques.pdf----------------
TD systèmes logiques.pdf----------------
 
Ch1 circuits logiques_p1_combinatoire-v4
Ch1 circuits logiques_p1_combinatoire-v4Ch1 circuits logiques_p1_combinatoire-v4
Ch1 circuits logiques_p1_combinatoire-v4
 
Technologies du Web - Architectures matérielles et logicielles
Technologies du Web - Architectures matérielles et logiciellesTechnologies du Web - Architectures matérielles et logicielles
Technologies du Web - Architectures matérielles et logicielles
 
Bitmaps
BitmapsBitmaps
Bitmaps
 
Tp1 architecture m.zarboubi
Tp1 architecture m.zarboubiTp1 architecture m.zarboubi
Tp1 architecture m.zarboubi
 
representation_numerique_de_l_information_annote.ppt
representation_numerique_de_l_information_annote.pptrepresentation_numerique_de_l_information_annote.ppt
representation_numerique_de_l_information_annote.ppt
 
Cours programmation en langage C.pdf
Cours  programmation  en  langage  C.pdfCours  programmation  en  langage  C.pdf
Cours programmation en langage C.pdf
 
Circuits logiques combinatoire
Circuits logiques combinatoireCircuits logiques combinatoire
Circuits logiques combinatoire
 
Formation python
Formation pythonFormation python
Formation python
 
Réseaux partie 2.ppt
Réseaux partie 2.pptRéseaux partie 2.ppt
Réseaux partie 2.ppt
 

Cour d'informatique c++

  • 1. Université Sidi Mohamed Ben Abdellah Faculté des sciences Pr. Bennani Taj Bases du Langage C++
  • 2. 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
  • 3. 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++ 3 Bases du C++
  • 4. Généralités • Ordinateurs, informatique, c’est quoi ? 4 • Représentation de l’information sur l’ordinateur • Composants matériels • Composants logiciels
  • 6. 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 Bases du C++ 6 Hors tension Sous tension Commutateur 0 1 Bit (BInary digiT)
  • 7. La représentation binaire • Combien de valeurs avec combien d’ampoules? Bases du C++ 7 = 0 = 1 = 2 = 3 4 valeurs ou 22 valeurs = 0 = 1 Si et 2 ampoules permettent de représenter…
  • 8. 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 8 Bases du C++
  • 9. Unités de mesure informatique • Nomination standardisée par le Commission électrotechnique internationale en 1998. Préfixes décimaux Valeur Octet (o) 8 bits Kilooctet (Ko) 103 o = 1 000 o Mégaoctet (Mo) 106 o = 1 000 Ko Gigaoctet (Go) 109 o = 1 000 Mo Téraoctet (To) 1012 o = 1 000 Go Linux Windows Préfixes binaires Valeur Octet (o) 8 bits Kibioctet (Kio) 210 o = 1 024 o Mébioctet (Mio) 220 o = 1 024 Kio Gibioctet (Gio) 230 o = 1 024 Moi Tébioctet(Tio) 240 o = 1 024 Gio 9 Bases du C++
  • 10. Conversion binaire / décimal • Du binaire au décimal : – Adition des puissances de 2 • 𝑋(10) = ℎ𝑖. 2𝑖 𝑛−1 𝑖=0 – 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) 7 6 5 4 3 2 1 0 27 26 25 24 23 22 21 20 0 1 0 0 1 1 0 1 10 Bases du C++
  • 11. 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. • De l’hexadécimal au décimal – 𝑋(10) = ℎ𝑖. 16𝑖 𝑛−1 𝑖=0 • 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 1 0 161 160 6 4 11 Bases du C++
  • 12. 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 – 𝑋(10) = ℎ𝑖. 𝑏𝑖 𝑛−1 𝑖=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 12 Bases du C++
  • 13. 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 nulle (ou que la précision voulue soit atteinte). soit Pour la partie entière, on procède par divisions en base 2 comme pour un entier. 54,2510 Exemple: conversion de Partie entière : 5410  1101102 Partie fractionnaire : 0,252  0,50 0,502 1,00 0,002  0,00 54,2510  110110,0102     a1 a2 a3 0 1  0 Donc 13 Passage de la base 10 vers une base Bases du C++
  • 14. Les entiers négatifs sont stockés en binaire par complément complément à deux se calcule en deux étapes: • On inverse d'abord les bits (complément à à deux. Le un) • On ajoute 1 au résultat L’addition 0 + 0 0 + 1 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. 14 Notation des entiers négatifs Bases du C++
  • 15. • 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
  • 16. • 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
  • 17. 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 0010000 0 0110000 P 1010000 p 1110000 DC1 0010001 1 0110001 Q 1010001 q 1110001 DC2 0010010 2 0110010 R 1010010 r 1110010 DC3 0010011 3 0110011 S 1010011 s 1110011 DC4 0010100 4 0110100 T 1010100 t 1110100 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 ‘q’ : 1110001 = 113 17 Bases du C++
  • 18. Code ASCII (2) • Version 2, 1981, IBM, 8bits, 256 caractères 17 Bases du C++
  • 19. Image matricielle élémentaires = matrice de points = PIcture ELement = pixel • Chaque pixel est codé en binaire sur un certain nombre de bits. 18 Codage d’une image Bases du C++
  • 20. Image noir • Chaque et blanc : pixel est codé sur 1 bit : 0 1 = = blanc noir 303 pixels 36 bits 303 pixels 303 x 1 bit = 91809 303 x bits 19 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 0 1 0 0 1 0 Codage d’une image (suite) Bases du C++
  • 21. Image Niveaux de gris • Chaque pixel est codé sur plusieurs bits • Si on code sur 8 bits = 1 pixel = 1 octet 303 x 303 x 1 octet = = 91809 octets 303 pixels 734 472 bits 303 pixels 20 Codage d’une image (suite) Bases du C++
  • 22. 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 = 2 203 392 bits des images en mémoire 303 pixels •‬Pour faciliter le stockage 21 Codage d’une image (suite) Bases du C++
  • 24. Les composantes matérielles  Périphérique d’entrée (input) Périphérique de sortie (output) Mémoire externe ou unité de stockage Unité de traitement Processeur Mémoire centrale     Port d’entrée Port de sortie Bus RAM ROM 24 Bases du C++
  • 25. Les composantes matérielles : Carte mère 25 Bases du C++
  • 26. 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. 26 Bases du C++
  • 27. 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. 27 Bases du C++
  • 28. 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. 28 Bases du C++
  • 29. 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. PS/2 - Souris PS/2 - Clavier LAN RJ45 29 Bases du C++
  • 30. Les périphériques d'entrée • Saisie des données – Clavier – Souris – Numériseur – Micro – Caméra numérique – Etc. 30 Bases du C++
  • 31. Les périphériques de sortie • Restitution des données – Écran – Imprimante – Traceur – Haut-parleur – Etc. 31 Bases du C++
  • 32. 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. 32 Bases du C++
  • 35. Le microcode BIOS • Basic Input-Output System • Couche logicielle fondamentale qui contrôle le matériel • Le premier programme qui démarre – Vérifie et initialise le matériel – Démarre le système d’exploitation Système d'exploitation Pilotes de périphériques Logiciels d'application Microcode (BIOS) 35 Bases du C++
  • 36. Le système d'exploitation • Plate-forme commune pour les logiciels d'application • Fonctions communes : – Exécution des logiciels d'application – Gestion des fichiers – Gestion des utilisateurs – Contrôle des programmes – Etc. • Exemples : Windows, Linux, Unix, Mac OS, … Système d'exploitation Pilotes de périphériques Logiciels d'application Microcode (BIOS) 36 Bases du C++
  • 37. Les pilotes de périphériques • Extensions du système d'exploitation (Drivers) • Pour ajouter facilement une grande variété de périphériques • Exemples : – clavier – souris – imprimante – carte d'interface réseau Système d'exploitation Pilotes de périphériques Logiciels d'application Microcode (BIOS) 37 Bases du C++
  • 38. Les logiciels d'application • Plusieurs types : – Editeur de texte : MS Word, Notepad++, Emacs, – Navigateur : Chrome, Internet Explorer, Firefox, – Messagerie instantanée : WhatsApp, Skype, Messenger, – Traitement d’image: Photoshop, Gimp, – Réseau sociaux : Facebook, Linkedin, – Jeux: Minecraft, Starcraft II, World of Warcraft, Worms, Système d'exploitation Pilotes de périphériques Logiciels d'application Microcode (BIOS) Starcraft 38 Bases du C++
  • 39. PROGRAMMATION Programmation, Quoi? Pourquoi? Comment? • Langages informatiques • Développement logiciel • Production d'exécutable 39
  • 40. 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 40 Bases du C++
  • 42. 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 42 Bases du C++
  • 43. Niveau d'abstraction des langages de programmation 011100101010 111000101101 movl $4, %eax movl $1, %ebx movl $str, %ecx movl $8, %edx Langage machine Langage Assembleur Les Langages évolués C/C++ Java,C#... Langage naturel Ordinateur 43 Bases du C++
  • 44. 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 44 Bases du C++
  • 45. 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 – +: 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 ADD A, 4 LOAD B MOV A, OUT … traducteur langage machine 45 Bases du C++
  • 46. 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 code source en langage de programmation Compilateur / interpréteur Programme exécutable en Langage machine 100010010010011000001001 011100101010111000100100 100110001001001001001001 46 Bases du C++
  • 47. 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 47 Bases du C++
  • 48. Généalogie des langages de programmation 48 Bases du C++
  • 50. 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. 50 Bases du C++
  • 51. 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 3. Développement de la solution (programmation) – Choix du langage de programmation – Choix de la machine utilisée 4. Création du programme l’exécutable (Compilation) – Correction des erreurs – Traduction du programme en langage machine 5. Exécution et tests Analyse Conception Programmation Compilation Tests et modifications Enoncé du problème Spécification Algorithme Programme Exécutable Version finale de l’exécutable 51 Bases du C++
  • 52. • 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 59 Algorithmique Bases du C++
  • 53. • 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 particulier. d’instructions qui décrit comment résoudre un problème 60 Pourquoi on utilise un algorithme ? Bases du C++
  • 54. • 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. 61 Algorithmique Bases du C++
  • 56. 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 – Compilation – Interprétation – Semi-compilation Programme exécutable Programme source 56 Bases du C++
  • 57. 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) 57 Bases du C++
  • 58. • La machine ne comprend que le langage machine. 11101010 11111000 10101010 10101010 11111111 0x33 0x34 0x35 0x36 0x37 00011010 01011110 01011010 11011110 11101010 01011010 01011010 01011010 11101010 11000111 11101010 11000111 10101010 10101010 11000111 • Pour les humains: • • • difficile à comprendre le langage machine. le langage machine est spécifique d’un‬processeur absence de portabilité. donné. • 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. 63 La notion de compilation Bases du C++
  • 59. • 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. 64 Langages compilés Bases du C++
  • 60. • 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. 65 La notion d’interprète Bases du C++
  • 61. • Avantage: - facilité de programmation - portabilité: le même programme est exécutable machine. sur n’importe quelle • Inconvénient: - exécution lente par rapport à la compilation. 66 Langages interprétés Bases du C++
  • 63. LES BASES DU C++ Découvrons les bases du langages C++ • Environnement de développement • Structure d’un programme • Bibliothèque standard • Les variables et les constantes • Ecriture / Lecture • Commentaires • Expressions et opérateurs 63
  • 64. 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 64 Bases du C++
  • 65. 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) 65 Bases du C++
  • 67. 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) 67 Bases du C++
  • 68. 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/ • … 68 Bases du C++
  • 69. 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 69 Bases du C++
  • 70. 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 70 Bases du C++
  • 71. 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 71 Bases du C++
  • 72. 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, 72 Bases du C++
  • 73. 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 !!? 73 Bases du C++
  • 74. 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 74 Bases du C++
  • 75. Deuxième exemple (1) • Maintenant créer un nouveau projet, puis copier le texte suivant dans le main.cpp 75 Bases du C++
  • 76. Deuxième exemple (2) • Rendu à la console après exécution : 76 Bases du C++
  • 77. Structure d'un programme C++ 77 Bases du C++
  • 78. 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) 78 Bases du C++
  • 79. • 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 using namespace std;
  • 80. 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. • return 0 ou return EXIT_SUCCESS signifie que le programme se termine correctement. • Pour utiliser EXIT_SUCCESS, il faut ajouter #include<cstdlib> … int main() { … return 0; } #include<cstdlib> … int main() { … return EXIT_SUCCESS; } équivalents 80 Bases du C++
  • 81. 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 : • 𝑠𝑖 (𝑎 > 𝑏) 𝑎𝑙𝑜𝑟𝑠 𝑥 = 𝑎, 𝑠𝑖𝑛𝑜𝑛 𝑥 = 𝑏 81 Bases du C++
  • 83. 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> 83 Bases du C++
  • 84. Quelques fichiers d’entêtes du C++ • <complex.h> – Pour manipuler les nombres complexes Nom du fichier d’entête Rôle <iostream> Fournit les capacités centrales d'entrée/sortie du langage C++ cin, cout, cerr, clog <cstdio> Fournit les capacités centrales d'entrée/sortie du langage C printf, scanf <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 caractères. strcat, strchr, 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/ 84 Bases du C++
  • 85. LES TYPES ET LES VARIABLES Définir les données d'un programme C++ • Déclaration de variables • Types simples • Types structurés • Types objets 85
  • 87. 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 • Syntaxe de déclaration de variables langage C++ : typeVariable nomVariable0 ,… ,nomVariablen ; Ne pas oublier le ; 87 Bases du C++
  • 88. 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. • 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; L’opérateur « = » Ce n’est pas une égalité, c’est une affection On le lit : « reçoit »  88 Bases du C++
  • 89. 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 } 89 Bases du C++
  • 90. Variables, exemple (1) Variable locale Variable globale 90 Bases du C++
  • 91. Variables, exemple (suite) • Autre exemple : Variables locales int x, y, z; double r; double c; 91 Bases du C++
  • 92. 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 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 id = letter(letter|digit)* letter = a|b|…|y|z|A|B|…|Y|Z|_ digit = 0|…|9 92 Bases du C++
  • 93. Mots clés réservés de C++ (version C++11) alignas (depuis C++11) alignof (depuis C++11) and and_eq asm auto bitand bitor bool break case catch char char16_t (depuis C++11) char32_t (depuis C++11) class compl const constexpr (depuis C++11) const_cast continue decltype (depuis C++11) default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new noexcept (depuis C++11) not not_eq nullptr (depuis C++11) operator or or_eq private protected public register reinterpret_cast return short signed sizeof static static_assert (depuis C++11) static_cast struct switch template this thread_local (depuis C++11) throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while xor xor_eq http://fr.cppreference.com/w/cpp/keyword 93 Bases du C++
  • 94. Nom de variable, exemple Nom de variable Brol bRol Brol123 Brol_2_brol_1 Brol_ 1brol O23 Mon nom _123_23 Prénom main Union breakauto Accepté ou non Explication Oui Oui Oui Oui Oui Non Commence par 1 Oui C’est un O au début Non L’espace n’est pas accepté Déconseillé Commence par _ Non L’accent n’est pas acceptée Non Mot réservé Oui Union ≠ union (qui est lui réservé) Oui Ca devient un nouveau nom 94 Bases du C++
  • 95. Types de variables Type de variables en C++ Simples vide void Booléen bool Entiers short int long long long unsigned … Réels float double Caractères char Structurés Tableaux Structure Objets string vector … 95 Bases du C++
  • 97. Tailles des types de variables Taille en octets 1 2 4 8 Entiers bool char (unsigned) short (unsigned) Int (unsigned) long (unsigned) long long Réels float float double double Taille en octets 97 Bases du C++
  • 98. 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 98 Bases du C++
  • 99. 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 • Quel type réel choisir ? Type Précision Encodage Signe Exposant Mantisse Valeur d'un nombre float Simple 4 oct 1 bit 8 bits 23 bits −1 𝑠 × 𝑀 × 2(𝐸−127) double Double 8 oct 1 bit 11 bits 52 bits −1 𝑠 × 𝑀 × 2(𝐸−1023) Type Taille mantisse max |Exposant| max float 7 38 double 16 308 sinon long double (16 oct) 99 Bases du C++
  • 100. Types entiers et réels, exemple Nombre -15 33000 1.23 234.98756 -3*109 4*109 0,456005 1 * 10-40 Type minimum adapté Explication short int ou unsigned short Borne max short dépassée float taille(mantisse) ≤ 7 et |exposant| ≤ 38 double taille(mantisse) > 7 long long Borne max long dépassée long long ou unsigned int Borne max int dépassée float taille(mantisse) ≤ 7 et |exposant| ≤ 38 double |exposant| > 38 short x = 32767, y; unsigned int z = 4294967295, t; y = x + 1; t = z + 1; cout << "y = " << y << endl; cout << "t = " << t; Exécution y = -32768 t = 0 100 Bases du C++
  • 101. 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 101 Bases du C++
  • 102. 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 102 Bases du C++
  • 103. 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 103 Bases du C++
  • 104. 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 104 Bases du C++
  • 105. 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 : – char a=‘0’, b=‘a’; – short x=2; – bool e=true; – float f=1.2; Adresse (en oct) Variable Nom de variable … … 1008 0 0 1 1 0 0 0 0 a 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 f 1014 1 0 0 0 1 1 0 0 1015 1 1 0 0 1 1 0 0 1016 1 1 0 0 1 1 0 1 … … 105 Bases du C++
  • 106. 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; } 106 Bases du C++
  • 108. 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) • Pour pouvoir demander à l’ordinateur d’exécuter des fonctions de (i/o) – Il faut inclure dans la programme le fichier d’entête C++ <iostream> #include<iostram> input output 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++ 108 Bases du C++
  • 109. Afficher à l’écran (console) • Syntaxe : – 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 : – A l’écran on verra : cout << expr1 << ... << exprn << endl; … int age = 35; cout << "Mon age est de : " << age << " ans." <<endl; Mon age est de : 35 ans. 109 Bases du C++
  • 110. Lire au clavier • Syntaxe : – 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) • Exemple : – A l’écran on verra : cin >> var1 >> ... >> varn; int age; cout << "Veuillez saisir votre age : "; cin >> age; cout << "Votre age est de " << age << " ans..."; Veuillez saisir votre age : 22 Votre age est de 22 ans... Ici arrêt pour saisi au clavier 110 Bases du C++
  • 111. 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. 111 Bases du C++
  • 112. 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; • } 112 Bases du C++
  • 113. 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. 113 Bases du C++
  • 114. 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; } 114 Bases du C++
  • 116. 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. 116 Bases du C++
  • 117. Commentaires, exemple (1) Commentaire d’entête de fichier Commentaire de fonction Commentaire de ligne 117 Bases du C++
  • 118. Commentaires, exemple (suite) Commentaires de ligne Commentaire de fonction 118 Bases du C++
  • 119. • • Expressions Opérateurs Comment manipuler les données d'un programme C++ ? 119 EXPRESSIONS et OPERATEURS Bases du C++
  • 121. • 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 Expressions Bases du C++
  • 122. • 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 Fonctions mathématiques Bases du C++
  • 123. #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 Exemple: Bases du C++
  • 125. Comme tous les langages , C++ dispose d’opérateurs arithmétiques. 125 opérateur signification + addition - soustraction * Multiplication / division % modulo (reste d'une division entière) Opérateurs arithmétiques Bases du C++
  • 126. 126 opération résultat int i=3; i=i+1; 4 int i=3; i=i-1; 2 int b=3; b=b*2 6 int k=4; k=k/2; 2 int ii =3; ii=ii%2; 1 Exemple: Bases du C++
  • 127. 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 Opérateur d’affectation Bases du C++
  • 128. Donnez les valeurs des variables A, B et C après exécution du programme suivant #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; en langage c++ ? cout << " les valeurs sont: " <<A<<"t"<<B<<"t"<<C return 0; } << "n"; 128 Exercice 1 Bases du C++
  • 129. Donnez les valeurs des variables Aet 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: return 0; } " <<A<<"t"<<B<< "n"; 129 Exercice 2 Bases du C++
  • 130. Ecrire un programme en langage C++ permettant d’échanger les et B=2. valeurs de deux variables A=1 130 Exercice 3 Bases du C++
  • 131. Ecrire un programme en langage C++ permettant d’échanger les et B=2. valeurs de deux variables Réponse: #include<iostream> using namespace std; int main ( ) { int A,B,C; A =1; B =2; C=A; A=B; B=C; A=1 cout << " les valeurs sont: " <<A<<"t"<<B<< return 0; } "n"; 131 Exercice 3 Bases du C++
  • 132. Affectation composée: expression1 OP= expression2 la variable expression1 n’est évaluée qu’une opérateur arithmétique. seule fois. OP est un Opérateurs += Exemple: d’affectation utilisables : %= -= *= /= 132 i = i+20; i+=20 int i=4; i+=20; 24 i = i+k; i+=k; int i=3,k=6; i+=k; 9 i = i*3; i*=3; int i=4; i = i*3; 12 i = i/3; i/=3; int i=9; i/=3; 3 ii = ii%3; i%=3; int ii; ii=ii%2; 1 Opérateur d’affectation (suite) Bases du C++
  • 133. La syntaxe : expression1 OP expression2 Où opérateur peut être l'un des symboles suivants : Ces opérateurs sinon. retournent la valeur 0 si la comparaison est fausse et 1 133 = = l’opérateur égal à != l’opérateur différent de <, <=, >, >= plus petit, plus petit ou égal, plus grand, plus grand ou égal Opérateur de comparaison Bases du C++
  • 134. #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; } Nous avons la sortie suivante : 134 res = 0 res = 0 res = 1 res = 0 Exemple: Bases du C++
  • 135. • 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) a<b et c<d sont le cas contraire. && (c<d) prend la valeur 1 (vrai) si les deux expressions toutes deux vraies (de valeur 1), la valeur 0 (faux) dans 135 && Et logique (and) || Ou logique (or) ! Négation logique (not) Opérateurs logiques Bases du C++
  • 136. #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 cout << "res = " << res <<"n"; return 0; res=0(faux) */ } 136 Nous avons le résultat suivant : res = 0 res = 1 res = 0 Exemple Bases du C++
  • 137. 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 Exemple 1 : #include<iostream> using namespace std; { int main() int a,b; a=2; b=3; d'être utilisée. /* 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; } 137 a=3 b=2 ++ Incrémente de 1 -- Décrémente de 1 Opérateurs d’incrémentation (++) et de décrémentation (--) Bases du C++
  • 138. 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 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"; return 0; } été utilisée. 138 a=2 b=3 a=3 b=2 Bases du C++ Opérateurs d’incrémentation (++) et de décrémentation (--)
  • 139. 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; 139 Bases du C++
  • 140. Structures • Exemple : • Exécution : https://sites.google.com/usmba.ac.ma/ahmedazough/enseignement poids des pommes : 1500 prix des pommes : 15 140 Bases du C++
  • 141. 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. https://sites.google.com/usmba.ac.ma/ahmedazough/enseignement 141 Bases du C++
  • 142. 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; } 142 Bases du C++
  • 144. 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"; 144 Bases du C++
  • 145. Manipulation de string • cout << str; – Permet d'afficher la chaine (du début jusqu'au premier '0') – Exemple : string str0 = "bienvenu"; string str1 = "bonj0our"; cout << "la chaine str_0 : " << str0 <<endl; cout << "la chaine str_1 : " << str1 <<endl; • Execution : • 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 = "bonj0our"; cout << "la taille de str_0 : " << str0.size() <<endl; cout << "la taille de str_1 : " << str1.size() <<endl; • Execution : la chaine str0 : bienvenu la chaine str1 : bonj la taille de str0 :17 la taille de str1 :4 145 Bases du C++
  • 146. 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 : • 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 : la chaine str : mere derniere lettre : e le mot est : bonjour 146 Bases du C++
  • 147. 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 !"; cout << chaine.find("jour") << endl; 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 : • string src = "Bonjour !"; • cout << src.replace(3, 4, "soir"); Bonsoir ! Exécution : 3 Exécution : 147 Bases du C++
  • 148. 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; jour ! jo Exécution : Toutes les autres fonctions de manipulations de chaines de caractères sur : http://www.cplusplus.com/reference/string/string/ 148 Bases du C++
  • 149. É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> using namespace std; int main(){ SetConsoleOutputCP(1252); SetConsoleCP(1252); string s="père",p; cout<<s<<endl; cout<<"écrire un mot : "; cin>>p; cout<<p<<endl; return 0; } père écrire un mot : éléments éléments Exécution : 149 Bases du C++
  • 150. STRUCTURES DE CONTRÔLE Implémenter des traitements conditionnels dans un programme C++ • if-else, Opérateur ternaire, switch-case • Boucles for, while, do-while • Instructions break et continue 150
  • 151. Plan • Structures de contrôle – if … else – Opérateur ternaire … ?... : … – switch … case – for – while – do … while – Instruction break – Instruction continue 151 Bases du C++
  • 152. 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 152 Bases du C++
  • 153. Syntaxe en algorithme Syntaxe en C++ Si condition Alors Début Si instructions Fin Si if ( condition) { instructions } Si condition Alors Début Si instructions Fin Si Sinon Début Sinon instructions Fin Sinon if ( condition ) { instructions } else { instructions } Traduction des instructions : schéma conditionnel 153 Bases du C++
  • 154. if( (an%4==0 && an%100!=0) || an%400==0){ nbjours =366; } else { nbjours = 365; } 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 : – Année bissextile 154 Bases du C++
  • 155. 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; } } 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 155 Bases du C++
  • 156. Opérateur ternaire (…) ? … : … • Dans de nombreux cas, une instruction conditionnelle sert juste à calculer la valeur d'une variable – Exemple : • 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 : if(a > b) max = a; else max = b ; max = (a > b) ? a : b ; 156 Bases du C++
  • 157. 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; } 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 : 157 Bases du C++
  • 158. 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 ; Instruction if (suite) Bases du C++ 158
  • 159. #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 0 ; << " Au revoir ! n "; /* instruction en dehors du bloc de if */ return } Exemple 3: Bases du C++ 159
  • 160. #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 } cout << " Au return 0 ; } " << "n"; /* instruction du bloc de if */ revoir! n "; /* instruction en dehors du bloc de if */ Resultat: pour i= 8 OK Au revoir! i= 9 Au revoir! pour Exemple 4: Bases du C++ 160
  • 161. #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 ; } Exemple 5: Bases du C++ 161
  • 162. Syntaxe en algorithmique Syntaxe en C++ Tant que condition Faire instructions Fin Tant que while (condition) { instructions } Syntaxe en algorithmique Syntaxe en C++ Faire instructions Tant que condition do { instructions }while (condition) ; Boucles Tant que et Faire tant que 162 Bases du C++
  • 163. cout<<endl<<"Entrez un entier positif :"; cin>>x; while (x <0) { cout<<endl<<"l'entier saisi n'est pas positif, réessayez :"; cin>>x; } 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 163 Bases du C++
  • 164. do { cout<<endl<<"entrez un entier positif :"; cin>>x; }while ( x<0) ; 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. 164 Bases du C++
  • 165. 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; • Exemple while : conversion du décimal au binaire Boucle while 165 Bases du C++
  • 166. Syntaxe en algorithmique Syntaxe en C++ Pour i ← valeur initiale à valeur finale [de pas p ] Faire instructions Fin Pour for ( i = valeur initiale ; i < = valeur finale ; i = i + p ) { instructions } Syntaxe en algorithmique Syntaxe en C++ Pour i ← 1 à 100 de pas 1 Faire … Fin Pour for ( i = 1 ; i < = 100 ; i = i + 1 ) { … } Pour i ← 1 à 100 Faire Fin Pour for ( i = 1 ; i < = 100 ; i++ ) { } Traduction des instructions : boucle Pour 166 Bases du C++
  • 167. cout<<"Je compte jusqu’à 10 :"<<endl; for ( i= 1 ; i < = 10 ; i ++) cout <<"i="<<i<<endl; for ( ; ; ) cout<<"Je suis une boucle infinie"<<endl; 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) 167 Bases du C++
  • 168. 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 ++ ; } Boucle for • La boucle for est sémantiquement équivalente à la boucle while. 168 Bases du C++
  • 169. 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; 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 169 Bases du C++
  • 170. 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 … } } Instruction break • L’instruction break peut être utilisée pour sortir d’une boucle déclarée comme boucle infinie 170 Bases du C++
  • 171. 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; 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 171 Bases du C++
  • 172. #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; if(j==-1) break;} return 0; } -1 : " <<endl; Cette boucle va afficher tous les nombres de l'utilisateur une valeur. 0 à 99. Nous demandons à S'il tape "-1" nous sortons de la boucle même si elle n'est pas terminée. Exemple 1: Bases du C++ 172
  • 173. #include <iostream> using namespace int main ( ){ int i=2; do{ i++; if (i==5) continue; std; cout << "i= t } while(i<7); return 0 ;} " << i << endl; 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. Exemple 2 : Bases du C++ 173
  • 174. #include <iostream> using namespace std; int main ( ){ int i; for(i=0;i<10;i++) { if((i%3)==0) continue; cout } cout cout << "n i= t" << i <<endl; << << "n "n ;} sortie : " <<endl; 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. Exemple 3 : Bases du C++ 174
  • 176. Qu'affiche le programme suivant ? Exercice 1 : Bases du C++ 176
  • 177. Qu'affiche le programme suivant ? Exercice 3 : Bases du C++ 177
  • 178. Qu'affiche le programme suivant ? Exercice 4 : Bases du C++ 178
  • 179. É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. Exercice 5 : Bases du C++ 179
  • 180. #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 else cout << "L'eau est a l'etat liquide" <<endl; est a l'etat vapeur" <<endl; return } 0 ; Exercice 5 : Bases du C++ 180
  • 181. 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). 181 Bases du C++
  • 182. #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étiquen"; cin >> op; /* saisie de l'operateur */ switch(op){ case case case case '+': cout << "Leur somme est t" << v1+v2 <<endl; break; '-': cout << "Leur différence est t" << v1-v2 <<endl; break; '*': cout << "Leur produit est t" << v1*v2 <<endl; break; '/': cout << "Leur division est t" << v1/v2 <<endl; break; default : cout << "La somme est t" << v1+v2 <<endl;} return 0 ;} Exercice 6 : Bases du C++ 182
  • 183. LES TABLEAUX ET LES VECTEURS Syntaxe des fonctions dans C++ 183
  • 184. Plan • Structures de la section – Les tableaux – Les vecteurs https://sites.google.com/usmba.ac.ma/ahmedazough/enseignement 184 Bases du C++
  • 186. 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 186 Bases du C++
  • 187. 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 : – 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 Le 3ème élément du tableau est : 4  187 Bases du C++
  • 188. 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 188 Bases du C++
  • 189. 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 189 Bases du C++
  • 190. 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, 190 Bases du C++
  • 192. 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(); 192 Bases du C++
  • 193. Tableau dynamique : vector (exemple) Exécution : 0. size: 0 1. size: 3 2. size: 4 3. size: 3 -1, 0, 1, 193 Bases du C++
  • 194. LES FONCTIONS Syntaxe des fonctions dans C++ 194
  • 195. Syntaxe des fonctions (1) • Toute fonction (principale et secondaire) à la syntaxe suivante: • Les accolades ouvrante "{" et fermante "}" sont obligatoires Entête Variables locales Corps Retour Entête typeDeRetour nomDeFonction(ListeDesParamètres ) { variablesLocales; corps; retour; } Définition 195 Bases du C++
  • 196. Syntaxe des fonctions (2) • 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 Entête typeDeRetour nomDeFonction(ListeDesParamètres ) { variablesLocales; corps; retour; } Définition 196 Bases du C++
  • 197. Syntaxe des fonctions (3) • 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; Entête typeDeRetour nomDeFonction(ListeDesParamètres ) { variablesLocales; corps; retour; } Définition 197 Bases du C++