Académique Documents
Professionnel Documents
Culture Documents
En
Algorithme d’EUCLIDE :
1. Présenter le cours
• Objectif
• Organisation
2. Presenter la matière :
• Qu’est ce que le C++
• Qu’est ce que la programmation Orientée Objet
3. Outils de base de la programmation
• Variables et expressions
• Structures de contrôle
Connaissance
CT : 15 heures
TD : 5 heures
TP : 20 heures
Coefficient : 3
Bjarne Stroustrup
30 December
1950 (age 68)
DANOIS
10
Programmation avancée c/C++
Langage C++ (2)
Normalisé ISO en 1998 puis 2002
Version la norme Date de sortie
C ++ 20 À déterminer 2020
❑ Inconvénients
o Similarité syntaxique avec le C!
o Pas de gestion automatique de la mémoire
o Pas de protection de la mémoire
o Syntaxe parfois lourde et peu intuitive
o Gestion facultative des exceptions
o Effets parfois indésirables et peu intuitifs dus
à la production automatique de code.
Programmation avancée c/C++ 14
Qu’est ce que la programmation
Orientée Objet ?
#include <des_librairies_utiles>
...
using namespace std;
(déclaration d’objets globaux) [à éviter]
main() { Hello
010100001010101
cout << "Hello World!" << endl; 001010101001110
} 101111001010001
...
#include <iostream>
using namespace std;
int main() {
double a(0.0);
double b(0.0);
cout << "Entrez les nombres a et b " ;
cin >> a >> b;
cout << a << " + " << b << " = " << somme(a, b) <<endln() ;
#include <iostream>
//using namespace std;
int main() {
double a(0.0);
double b(0.0);
std::cout << "Entrez les nombres a et b " ;
std::cin >> a >> b;
std::cout << a << " + " << b << " = " << somme(a, b) <<std::endln() ;
Identificateur = valeur ;
Exemple : i = 3;
Solde = 2500000 ;
int val(2) ;
double pi(3.1415) ;
char c(’a’) ;
int j(2*i+5) ;
Une fois déclarée, une constante ne pourra donc plus être modifiée
par le programme (toute tentative de modification produira un
message d’erreur lors de la compilation).
* multiplication
/ division
(Remarque : le modulo est le reste de la
% modulo division entière)
+ addition
- soustraction
Note : nous avons déjà précédemment rencontré l’opérateur =, dit d’affection, qui
est universel : il s’applique à tout type.
38
Programmation avancée c/C++
Opérateurs et expressions (2)
Autres exemples d’expressions, utilisées ici pour des
affectations :
z = (x + 3) % y;
z = (3 * x + y) / 10;
C++ fournit un certain nombre de notations abrégées pour
des affectations particulières.
x = x + y peut aussi s’écrire x += y
(idem pour -, *, / et %)
x = x + 1 peut aussi s’écrire ++x
(idem pour - : --x)
En C, choisir l’instruction x++; plutôt que ++x; pour l’incrémentation d’une
x variable de type élémentaire n’a quasiment aucune incidence sur l’efficacité du programme.
En C++, nous verrons que x peut être un objet quelconque.
Or, l’opérateur postfixé copie la valeur originale de x, incrémente x, puis retourne sa valeur
originale
Pour éviter une copie inutile et qui peut-être coûteuse, on utilisera systématiquement la
Programmation avancée c/C++ 39
notation préfixée,++x (sauf en cas de réelle nécessité).
Quelques pièges à éviter!
Remarque sur l’opérateur de division en C++:
▪ si a et b sont des entiers, a/b est le quotient de la division
entière de a par b
Exemple : 5/2 = 2
(et a%b est le reste de la division entière de a par b
Exemple : 5%2 = 1)
▪ si a ou b sont des réels, a/b est le résultat de la division
réelle de a par b
Exemple : 5.0/2.0 = 2.5
Note : dans une expression constante, on distingue un réel
d’un entier en lui ajoutant . à la fin. En général pour la lisibilité
on préfère ajouter .0 :
5.0 (réel) ←→ 5 (entier)
40
Programmation avancée c/C++
Priorité entre opérateurs
Il est largement préférable de parenthèser ses expressions (ne
serait-ce que pour la lisibilité !).
Par exemple écrire (a * b) % c plutôt que a*b%c
En l’absence de parenthèsage, l’ordre de priorité des
opérateurs sera :
* ou / ou %
puis + ou -
Tous ces opérateurs sont associatifs à gauche :
a+b+c=(a+b)+c En cas d’ambiguité entre opérateurs du même
ordre de priorité c’est la règle d’associativité qui s’applique
Exemples : a * b % c = (a * b) % c
a % b * c = (a % b) * c
Programmation avancée c/C++ a + b * c % d = a + ((b * c) % d) 41
Les opérateurs de comparaison
Les opérateurs de comparaison sont :
== égalité logique
!= non égalité
< inférieur
> supérieur
<= inférieur ou égal
>= supérieur ou égal
&& « et »
|| « ou »
∧ « ou exclusif »
Rémarque :
! négation
l’ opérateur ! n’a qu’un seul opérande
bool un_test(true);
...
((x >= 0) || ((x*y > 0) && !un_test))
44
Programmation avancée c/C++
Les opérateurs logiques (2)
Les opérateurs logiques &&, || et ! Sont définis par les tables
de vérité usuelles :
x y !x x && y x || y x∧ y
return 0;
}
Exemple de bloc
{
int i ;
double x ;
cout << "Valeurs pour i et x : " << endl ;
cin >> i >> x ;
cout << "Vous avez saisi : i=" << i
<< ", x=" << x << endl ;
}
54
Programmation avancée c/C++
Branchement conditionnel
La syntaxe générale d’un branchement conditionnel est :
if (condition)
Instructions 1
else Instructions 2
switch(a+b) {
case2:
case8: instruction2; // lorsque (a+b) vaut 2 ou 8
case4:
case3: instruction3; // lorsque (a+b) vaut 2, 3, 4 ou 8
break;
case 0: instruction1; // execution uniquement lorsque
break; // (a+b) vaut 0
default: instruction4; // dans tous les autres cas
break;
}
Programmation avancée c/C++ 58
Boucles
La syntaxe Générale d’une boucle avec condition de continuation
à priori (on veut tester la condition avant d’executer les instratuctions)
est :
while (condition)
Instructions
Tant que la condition de continuation est vérifiée, les instructions sont
exécutées.
a posteriori (on veut exécuter les instructions au moins une fois avant
de tester la condition) est :
do
Instructions
while (condition);
Les instructions sont exécutées jusqu’à ce que la condition de
continuation soit fausse (et au moins une fois au départ,
indépendemment de la valeur de la condition).
Programmation avancée c/C++ 59
Boucles : Exercice
initialisation;
while(condition) {
Instructions;
mise_a_jour;
}
63
Programmation avancée c/C++
Exercice ; itération for
les deux utilisent le mot clé for, mais se distinguent par leur
syntaxe :
Pour la petite histoire, un bug lié à une mauvaise utilisation de break; a conduit à l’effondrement du réseau
téléphonique longue distance d’AT&T, le 15 janvier 1990. Plus de 16’000 usagers ont perdu l’usage de leur
télé- phone pendant près de 9 heures. 70’000’000 d’appels ont été perdus
Programmation avancée c/C++ 66
Instruction break : exemple
Exemple d’utilisation de break :
une mauvaise (!) façon de simuler une boucle avec condition
d’arrêt
while (true) {
Instruction 1;
...
If (condition_d_arret)
break;
}
autres instructions
int i;
...
i = 0;
while (i < 100) {
++i;
if ((i % 2) == 0) continue;
// L’execution de la suite des instructions
// ne se fait pour les entiers impairs
Instructions;
...
}
Question : quelle est une meilleure façon d’écrire le code ci-dessus ?
(on suppose que Instructions; ... ne modifie pas la valeur de i)
Programmation avancée c/C++ 68
Les structures de contrôle
Les branchements conditionnels si … alors …
if (condition) switch (expression) {
instructions case valeur:
........................ instructions;
if (condition 1) break;
instructions 1 ...
... default:
else if (condition N) instructions;
instructions N }
else
instructions N+1
Algorithme d’EUCLIDE :