++ - 1 m. benjelloun & s. mahmoudi : s_fpmsj 2010 mohammed benjelloun said mahmoudi service...
TRANSCRIPT
++- 1M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Mohammed BENJELLOUN
Said Mahmoudi
Service d’Informatique
Faculté Polytechnique de Mons
2010
++- 2M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Y=X2 et Z=X3 ??
int X, Y, Z; // déclaration des Variables : identificateur
X = 2 ; // initialisation
Y = X * X ; Z = Y * X ; // ou Z=X*X*X ….
Variables : déclarations, Syntaxe : Type identificateur1, id2,…. ;
char c1, c2, c3;int i, j, var_ent;
float f, variable;
Exemple:
initialisations
int i=9; ou int i; i=9;char c1= 'A'; ou char c1; c1= 'A';
corps du programme
void main(void) // ou void main(){
}
++- 3M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Fichier source / Fichier exécutable
Le code source doit obligatoirement fournir au compilateur le « point d’entrée » : la fonction main ()
++- 4M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Identificateurs
Les identificateurs nomment les objets C++ (fonctions, variables ...).
Le C++ distingue les minuscules des majuscules.
Exemple: ab, Ab, AB sont des identificateurs valides et tous différents.
Identificateurs valides : xx y1 somme_5 _position Noms Programme_1
Identificateurs invalides :
3eme commence par un chiffre x#y caractère non autorisé (#) no-commande caractère non autorisé (-) taux change caractère non autorisé (espace)
++- 5M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Un identificateur ne peut pas être un mot réservé du langage :
asm auto bool break case
catch char class const continue
default delete do double else
enum extern float for friend
goto if inline int long
mutable namespace new operator private
protected public register return short
signed sizeof static struct switch
template this typedef union unsigned
using virtual void volatile while
Les mots réservésmots réservés du langage C++ doivent être écrits en minuscules.
++- 6M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Y=X2 et Z=X3 ??
void main(void) // ou void main(){ int Y, Z, X; // déclaration des Variables
X = 2 ; // instruction1
Y = X * X ; // instruction2 Z = Y * X ; // instruction3
}
cout Y
cout Z
#include < iostream > using namespace std;
Directives du préprocesseur accès avant la compilation
Directives du préprocesseur accès avant la compilation
using namespace std;
/* espace de nommage std pour importer les symboles de la bibliothèque standard C++ */
Affichage !!
++- 7M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Directives du préprocesseur Directives du préprocesseur
Une directive préprocesseur est une directive de compilation (précédées par un #)
Exemples d’inclusion de librairies standards:
Gestion des Entrées-Sorties standard <iostream>
Fonctions mathématiques <cmath>
Traitement de chaînes de caractères <string>
Contrôler les paramètres d'affichage <iomanip>
++- 8M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Les entrées /sorties : cin et cout
• cout, le flux standard de sortie, habituellement associé à l'écran,
Syntaxe : cout << expression << expression … ;
• cin, le flux standard d’entrée, habituellement associé au clavier,
Syntaxe : cin >> valeur >> valeur >> valeur … ;
#include <iostream>
using namespace std;
void main() {
cout <<" Salut a vous tous" << endl;
cout << " oui tous " ;
}endl signifie un saut de ligne
définies dans la librairie <iostream>
++- 9M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
cout <<"Qu'il est agreable d'utiliser "
<<"cout en\t C++,\nlorsqu'on l'utilise " <<endl << "\t\tproprement";
Résultat :
Qu'il est agreable d'utiliser cout en C++,
lorsqu'on l'utilise
proprement
Caractères Signification CODE ASCII(hexadécimal)
\n ou endl Génère une nouvelle ligne (newline) 0x0A\t Tabulation horizontale 0x09\v Tabulation verticale 0x0B\b Retour d’un caractère en arrière (backspace) 0x08\r Retour chariot (return) 0x0D\f Saut de page (form feed) 0x0C..
\t
\t \t
setw(x) : la prochaine sortie sera sur une largeur de x
setfill(c) : utilisera c comme caractère de remplissage.
++- 10M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Y=X2 et Z=X3 ??
void main(void) // ou void main(){ int Y, Z, X; // déclaration des Variables
X = 2 ;
Y = X * X ; Z = Y * X ;
}
cout << " valeur de Y = " << Y << endl;
cout << " valeur de Z = " << Z;
#include < iostream >
using namespace std;
valeur de Y= 4
valeur de Z = 8
cout << " valeur de Y = " << Y << endl << " valeur de Z = " << Z;
cout << " valeur de Y = " << Y << " \nvaleur de Z = " << Z;
++- 11M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
void main(void){ int Y, Z, X; // déclaration des Variables
X = 2 ;
Y = X * X ; Z = Y * X ;
}
cout << " valeur de Y = " << Y << endl;
cout << " valeur de Z = " << Z;
#include < iostream >using namespace std;
valeur de Y= 4
valeur de Z = 8
X !!
cout << " ??valeur de X = "; cin >> X;
-3
valeur de Y= 9 valeur de Z = -27
++- 12M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
#include <iostream>using namespace std; void main () { int n=2; float x= 3.4; char C= 'A' ;
cout << " Entier n = "<< n << " ; Entrez un nouveau = " ; cin >> n ;
cout << " Float x = "<< x << " ; Entrez un nouveau = " ; cin >> x ;
cout << " Char C = "<< C << " ; Entrez un nouveau = " ; cin >> C ;
cout << "\n L'entier vaut maintenant : " << n << endl; cout << " Le flottant vaut maintenant :" << x << endl; cout << " Le caractere vaut maintenant :" << C << endl ;}
Entier n = 2 ; Entrez un nouveau = 3Float x = 3.4 ; Entrez un nouveau = 5.67Char C = A ; Entrez un nouveau = y L'entier vaut maintenant : 3Le flottant vaut maintenant :5.67Le caractere vaut maintenant :y
int n=2; float x= 3.4; char C= 'A' ;
cout << "Entrez n, x et C : ";cin >> n >> x >> C;cout << C << ' ' << x << ' ' << n;
Entrez n, x et C : 5 9.9 VV 9.9 5
++- 13M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Si X est une constante !!
void main(void){ int Y, Z, X; // déclaration des Variables
Y = X * X ; Z = Y * X ;
}
cout << " valeur de Y = " << Y << endl;
cout << " valeur de Z = " << Z;
#include < iostream >using namespace std;
const int X = 4 ; valeur de Y= 16
valeur de Z = 64
Constantes : déclarations+initialisationsSyntaxe : const Type identificateur1=Val1, identificateur2=Val2, …,…. ;
const char c = 'A';const int i=5, var_ent=8;
Exemple: const int i;
i= 5;
++- 14M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
void main(void)
{/* programme disque1
Ce programme calcule la circonférence et la surface d’un disque de rayon 2 */
const float PI= 3.14159;
int rayon = 2;
float circonference, surface;
circonference = 2* PI*rayon;
surface = PI * rayon *rayon ;
}
TP Affichage !!
cout circonference
cout surface
#include < iostream >using namespace std;
++- 15M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
void main(void)
{ /* programme disque2 : Ce programme calcule et affiche la circonférence et la surface d’un disque de rayon 2.
*/
const float PI= 3.14159;
int rayon = 2;
float circonference, surface;
circonference = 2* PI*rayon;
surface = PI * rayon *rayon ;
}
cout << " La circonference = " << circonference << endl;
cout << " La surface = " << surface;
#include < iostream >using namespace std;
TP : suite
La circonference = 12.56636
La surface = 12.56636
rayon !!
++- 16M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
void main(void)
{ /* programme disque2 : Ce programme calcule et affiche la circonférence et la surface d’un disque de rayon quelconque positif.
*/
const float PI= 3.14159;
int rayon = 2;
float circonference, surface;
circonference = 2* PI*rayon;
surface = PI * rayon *rayon ;
}
cout << " La circonference = " << circonference << endl;
cout << " La surface = " << surface;
#include < iostream >using namespace std;
TP : suite
cout << " ?valeur rayon = "; cin >> rayon;
Seulement si ( rayon >= 0 ) !!
++- 17M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
< plus petit
<= plus petit ou égal
> plus grand
>= plus grand ou égal
== égal
!= différent
Les opérateurs logiques&& et
|| ou (non exclusif)
! non
Le résultat d'une expression logique est un booléen. Il vaut true si elle est vraie et false sinon.
Le résultat d'une expression logique est un booléen. Il vaut true si elle est vraie et false sinon.
Toute valeur non nulle est considérée comme vraie et la valeur nulle comme fausse.
!!
Les opérateurs de comparaison
!!
++- 18M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Les structures de contrôleAlternative: if-else
Itérations: for, while, do-while
Rupture de Contrôle: break, continue, return …
Choix Multiple: switch-case
Bloc 1 d’instructions
Bloc 1 d’instructions
Bloc 2 d’instructions
Bloc 2 d’instructions
oui non
Suite du programme
oui non
Suite du programmeBloc
d’instructions
Bloc d’instructions
Conditionvraie
Conditionvraie
oui
non
Bloc d’instructions
programme
Condition
vraie
Condition
vraie
Suite du programme
programme
Conditionvraie
Conditionvraie
if-else while
do-while
++- 19M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Condition
vraie
Bloc 1 d’instructions
Bloc 2 d’instructions
oui non
Suite du programme
void main(){ // corps du programme déclaration des Cstes et Var ; instruction1 ; instruction2 ; …. }
int a, b;
a = 1;
if (Condition vraie) { BLOC 1 D'INSTRUCTIONS
}else { BLOC 2 D'INSTRUCTIONS
}
Les structures de contrôle Les décisions - if … else
if (i) if (i != 0)
++- 20M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Les décisions - if … else if (Condition vraie)
{ BLOC 1 D'INSTRUCTIONS
}else { BLOC 2 D'INSTRUCTIONS
}
Bloc 1 d’instructions
Bloc 1 d’instructions
Bloc 2 d’instructions
Bloc 2 d’instructions
oui non
Suite du programme
programme
Conditionvraie
Conditionvraie
if ( X== Y) { X= X+1; Y= Y+2;}else { X = X-1 ; Y = Y- 2 ;}
Bloc 1 d’instructions
Bloc 1 d’instructions
oui non
Suite du programme
Conditionvraie
Conditionvraie
if (Condition vraie){ instruction 1; instruction 2; instruction 3; …
instruction N; }
if (Condition vraie) instruction 1;
if ( temperature > 70.0)
cout << " Alarme "<<endl;
if (Condition vraie) instruction A;else instruction B;
if (a<b) min=a;
else min=b;
++- 21M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
int i = 1;
if(i < 0)
cout <<" i < 0 \n";
cout <<" Il faut un i > 0 \n";
cout <<" alors!! \n";
…
Il faut un i > 0alors!!
int i = 1;
if(i < 0){
cout <<" i < 0 \n";
cout <<" Il faut un i > 0" << endl;
}
cout <<" alors!! \n";
alors!!
Condition
vraie
Bloc 1 d’instructions
oui non
++- 22M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
int i = -1;
if(i < 0){ cout <<" i < 0 \n"; cout <<" Il faut un i > 0" << endl;}
cout <<" alors!! \n";
i < 0Il faut un i > 0alors!!
int i = 1;
if(i < 0){
cout <<" i < 0 \n";
cout <<" Il faut un i > 0" << endl;
}
cout <<" alors!! \n";
alors!!
Condition
vraie
Bloc 1 d’instructions
oui non
++- 23M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
int i = -1;
if(i < 0){ cout <<" i < 0 \n"; cout <<" Il faut un i > 0" << endl;}
cout <<" alors!! \n";
i < 0Il faut un i > 0alors!!
int i = -1;
if(i < 0){ cout <<" i < 0 \n"; cout <<" Il faut un i > 0" << endl;}
else {
cout <<" alors!! \n";
}
i < 0Il faut un i > 0
Condition
vraie
Bloc 1 d’instructions
oui non
Bloc 2 d’instructions
else (i>=0) { …
++- 24M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Ce programme calcule la circonférence et la surface d’un disque de rayon quelconque positif
if ( rayon < 0 ) {
cout << "je ne peux calculer avec un rayon négatif!\n";
}
else
{
….
++- 25M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
void main(void)
{ const float PI= 3.14159;
float circonference, surface;
int rayon; cout << " ?valeur rayon = "; cin >> rayon;
if ( rayon < 0 ) { cout << "je ne peux calculer avec un rayon négatif!\n";
} else{ circonference = 2* PI*rayon;
surface = PI * rayon *rayon ;
}
}
cout << " La circonference = " << circonference << endl;
cout << " La surface = " << surface;
#include < iostream >using namespace std;
TP : suiteCe programme calcule et affiche la circonférence et la surface d’un disque de rayon quelconque positif.
++- 26M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
#include <iostream> using namespace std;
void main(){int i=0;cout << "i = " << i << endl;i++;cout << "i = " << i << endl; i++;cout << "i = " << i << endl;i++;cout << "i = " << i << endl;}
Les itérations – for
for( init ;(Condition vraie); itération) { /* liste d'instructions */ }
for (i = 0; i <4; i++) {
cout << "i = " << i << endl;
}
for (i = 0; i <4; ) {
cout << "i = " << i << endl;
i++ ;
}
i=0
i=1
i=2
i=3
++- 27M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
for (int i = 1; i < 8; i++) cout << setw(7) << i << setw(10) << i+1 << setw(5) << i+2 << endl;
1 2 3 2 3 4 3 4 5 4 5 6 5 6 7 6 7 8 7 8 9
7 10 5
setw(x) : la prochaine sortie sera sur une largeur de x
#include <iomanip >
++- 28M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
void main(void)
{ const float PI= 3.14159;
float circonference, surface;
float rayon;
cout << " rayon\t circonference \t surface\n";
for (rayon=2.0; rayon <= 8.0; rayon+=2.0) {
circonference = 2* PI*rayon;
surface = PI * rayon *rayon ; cout << rayon << "\t " << circonference << "\t " << surface << endl;
}
}
#include < iostream >using namespace std;
TP : suite ???rayon=2.0rayon=4.0rayon=6.0rayon=8.0
++- 29M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
int i, j=1;char a;for (i = -10; i <= 10; i++){
while(j!=0) { cin >> a ; if(a=='x') break; } }
Pour rompre le déroulement séquentiel d'une suite d'instructions
Instructions d'échappement
return (expression); permet de sortir de la fonction qui la contient
return (expression); permet de sortir de la fonction qui la contient
exit (expression); La fonction est interrompue. ‘expression’ : un entier indiquant le code de terminaison du processus
for (i = -10; i <= 10; i++) { if (i == 0) continue; // pour éviter la division par zéro
cout << 1 / i;}
while (Condition vraie) { ............ ; ............ ; continue; ............ ; ............ ; break; ............ ; ............ ; } ............ ;
++- 30M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
switch = AU CAS OU ... FAIRE ...
…switch(variable de type char ou int) // au cas où la variable vaut:
{ case valeur1: ......; // variable=valeur1 : exécutez ce bloc d'instructions.
.......; break;
case valeur2:........; // variable=valeur2: exécutez ce bloc d'instructions. ........; break; . . // etc ... .
default: .......; /* aucune des valeurs précédentes: exécutez ce bloc ........; d'instructions, pas de "break" ici.*/
}
Le bloc "default" n'est pas obligatoire. valeur1, valeur2, …. doivent être des expressions constantes. L’instruction switch correspond à une cascade d’instructions if ...else
++- 31M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
….
void main( ) {
const float PI= 3.14159; float rayon = 3.5; float diametre, circonference, surface; int choix;
cout << "1. Calculer la circonference\n"; cout << "2. Calculer la surface\n"; cout << "3. Calculer le diametre\n"; cout << "Votre choix?"; cin >> choix;
switch (choix) {case 1 : circonference = 2*PI*rayon; break;
case 2 : surface = PI*rayon*rayon; break;case 3 : diametre = 2*rayon; break;
default : cout << "Mauvais choix…\n"; }}
char choix;
switch(choix)
{
case '1': …
char choix;
switch(choix)
{
case '1': …
!!switch(i) { case 2 * j:
....
switch(i) { case 2 * j:
....
float f;
switch(f) { case 2:
....
float f;
switch(f) { case 2:
....
switch : instruction commode pour les "menus"
++- 32M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Corrigez, si nécessaire, ce programme pour ne plus avoir d’erreurs lors de la compilation.
Qu’affiche-t-il à l’écran (après correction)?
Si choix = 1
Si choix = 5
char choix;cout << " Case 1 : 1\n";cout << " Case 2 : 2" <<endl;cout << "\nVOTRE CHOIX: ";cin >> choix;switch(choix){ case 1 : cout << "case 1"; case 2 : cout << "case 2"; default : cout << "\n Default ";}
EXCES ' '
' '
int choix;
break;
break;
++- 33M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
void main(void) { float rayon = 3.5; float diametre, circonference, surface; int choix; cout << "1. Calculer la circonference\n"; cout << "2. Calculer la surface\n"; cout << "3. Calculer le diametre\n"; cout << "Votre choix?"; cin >> choix;
switch (choix) {case 1 : circonference = 2*PI*rayon; break;
case 2 : surface = PI*rayon*rayon; break;case 3 : diametre = 2*rayon; break;
default : cout << "Mauvais choix…\n"; } /* poursuite du programme….*/}
++- 34M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
La boucle TANT QUE ... FAIRE ...
Boucle pré-testée
Il s'agit de l'instruction while :tant que (expression vraie)faire{ BLOC D'INSTRUCTIONS }
Organigramme:
while (Condition vraie){ ............; /* bloc d'instructions */ ............; ............;} Le test se fait d'abord, le bloc d'instructions n'est pas forcément exécuté.
Syntaxe:
tant que, pas jusqu’à ce que!tant que, pas jusqu’à ce que!
(Boucles)
oui non
Suite du programme
Conditionvraie
Bloc 1 d’instructions
++- 35M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
i=1; while(i<5) { cout<<"Interieur " <<i << endl; i++; } cout<<"Exterieur " <<i << endl;
Exemples
Interieur 1Interieur 2Interieur 3Interieur 4Exterieur 5
int j = 5;
cout<<"start\n";while(j == 0)
cout<<"j = "<<j--<<endl;cout<<"end\n";
int j = 5;
cout<<"start\n";while(j == 0)
cout<<"j = "<<j--<<endl;cout<<"end\n";
startend
startendtant que, pas jusqu’à ce que!
i=1;
while(i<5); { cout<<"Interieur " <<i << endl; i++; }
"tant que l'expression est vraie attendre".
itérationitération
++- 36M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
do while = REPETER … tant que
do{ ............; /* bloc d'instructions */
............;}while (Condition vraie);
Condition
vraie
Condition
vraie
oui non
Bloc d’instructions
programme
int j = 5;do cout<<"j = "<<j--<<endl;while(j > 0);cout <<"stop\n";
int j = 5;do cout<<"j = "<<j--<<endl;while(j > 0);cout <<"stop\n";
j = 5j = 4j = 3j = 2j = 1stop
j = 5j = 4j = 3j = 2j = 1stop
Suite du programme
(garantit l’exécution au moins une fois)
int j = 5;do { cout<<"j = "<<j <<endl; j--;} while(j > 0);cout <<"stop\n";
int j = 5;do { cout<<"j = "<<j <<endl; j--;} while(j > 0);cout <<"stop\n";
++- 37M. BENJELLOUN & S. Mahmoudi : S_FPMsJ 2010
Les itérations
for( init ;(Condition vraie); itération) { /* liste d'instructions */ }
for (i = 0; i <4; i++) {
cout << "i = " << i << endl;
}
while (Condition vraie){ ............; /* bloc d'instructions */ ............; ............;}
int i = 0; while(i < 4) { cout<<"i = "<< i <<endl; i++;}
int i = 0; while(i < 4) { cout<<"i = "<< i <<endl; i++;}
do{ ............; /* bloc d'instructions */ ............;}while (Condition vraie);
int i = 0;do { cout<<"i = "<< i <<endl; i++;} while(i < 4);
int i = 0;do { cout<<"i = "<< i <<endl; i++;} while(i < 4);