Vous êtes sur la page 1sur 17

Les éléments de bases d’un

programme C/C++

• Architecture d’un programme


Département des Classes Préparatoires • Les premières instructions
Transparents du cours d'Informatique I • Les sorties écrans
Jeu no2
Année 2010-2011 • Les entrées claviers
• Les variables (entières et réelles)
Classes de Mathématiques Supérieures
• L’instruction if
Proposé par M. Tony NICOLAS
Jeudi 10 Mars 2011 1 Jeudi 10 Mars 2011 2

Architecture obligatoire d’un


Les premières instructions
programme en langage C/C++
void main( ) void main( )
{ {
Attention un oubli de n’importe quelle composante Instruction vide
engendre des erreurs ;

} }

Jeudi 10 Mars 2011 3 Jeudi 10 Mars 2011 4


Les premières instructions Les premières instructions

void main( ) void main( )


{ {
; ;
Programme correct Programme faux
; Que fait il ??? ; Que fait il ???
; ;
:
} }

Jeudi 10 Mars 2011 5 Jeudi 10 Mars 2011 6

Les premières instructions Les premières instructions

void main( ) void main( )


{ {
;; ; ;
Programme correct Programme incorrect
Que fait il ??? ; Pourquoi ???
; ;

} }
;

Jeudi 10 Mars 2011 7 Jeudi 10 Mars 2011 8


Les sorties écran : l’instruction cout
Ecrire les lignes au fur et à mesure
Les sorties sur l’écran en C/C++ compiler, exécuter et déduire
cout permet d’afficher
#include<iostream> cout << 3; des informations sur l’écran
using namespace std; cout<<2+3;
void main() Permet d’utiliser l’instruction cout
cout<< "2+3"; Chaque instruction doit se
{ cout< "bonjour "; terminer par un ;
cout<<“ bonjour”; cout << " \n ";
cout << " au revoir "; Essayer sans ; et
} constater les erreurs
cout << " a bientot ";
cout <<endl;
Différence entre cout
avec “ “ et sans “ “ ??
Jeudi 10 Mars 2011 9 Jeudi 10 Mars 2011 10

Les sorties écran : l’instruction cout But : Ecrire un programme qui permet de
en rafale résoudre une équation de second ordre

cout << 3; Exemple : 2 x2 + 5 x +1 = 0


cout<< " bonjour ";
cout << " \n ";
Mais mathématiquement la démarche à suivre est la même " les
cout << " au revoir " << " a bientot " <<endl;
valeurs des constantes.

Donc au lieu de faire autant de programme qu’il y a des choix de constantes


possibles, il est préférable de faire un seul programme mais qui
permet à l’utilisateur de donner les valeurs de constantes.

D’où le besoin de la notion de variable.


Jeudi 10 Mars 2011 11 Jeudi 10 Mars 2011 12
Donc but : Ecrire un programme qui permet de En général
résoudre une équation de second ordre
On souhaite faire des programmes paramétrables,
c’est-à-dire des programmes dont les entrées sont
Exemple : a x2 + b x + c = 0 données par l’utilisateur, et ensuite le programme
travaille sur ces entrées.
C’est la notion de variables..
Besoin de stocker les valeurs de a, b et c
Pour bien comprendre ce point :
D’où le besoin de la notion de variables
– Machine à laver (avec un seul programme)
Besoin de permettre à l’utilisateur de les fournir – Lecteur dvd (qui ne lit qu’un dvd donné)

Jeudi 10 Mars 2011 13 Jeudi 10 Mars 2011 14

La notion d’une variable


Modèle élémentaire d’un ordinateur
L’instruction d’affectation
Mémoire Définition
La déclaration d’une variable correspond à une réservation d’une
place dans la mémoire permettant le stockage de l’information.

Réservation d’une place dans la mémoire, qui


Microprocesseur
Bus de données Exemple : s’appelle i et qui peut contenir un entier
int i;
Cet opérateur ( = ) s’appelle l’opérateur d’affectation, On met dans
la place mémoire i la valeur 5. En général on évalue l’expression qui
i=5; se trouve à droite de l’égalité et on la met dans la variable
i=6;
!!! Attention ce programme n’affiche rien sur l’écran
i=i+1; Pouquoi ???

Jeudi 10 Mars 2011 15 Jeudi 10 Mars 2011 16


Les entrées clavier en C/C++ C’est quoi un entier ?
L’instruction cin

int i;
cout << " entrer une valeur : ";
cin >> i;
cout<< " bonjour vous avez rentree ";
cout << i;
cout << " au revoir " << " a bientot " <<endl;
Exemple : des entiers Exemple : ne sont pas des entiers
cin récupère la valeur tapée sur le clavier et la met dans la variable i 123 123A
-123 -12-3
+1 23
Jeudi 10 Mars 2011 17 Jeudi 10 Mars 2011 18

Les opérations de base Exemples


les opérations disponibles sur le type int : cout << 5/2; /* Quelle est le résultat affiché ?? */
• Addition : +
• Soustraction : -
• Multiplication : * cout <<5%2; // Quelle est le résultat affiché ??
• Quotient : /
Attention (il s’agit du quotient de la division entière exemple
int i;
i=5/2; // i reçoit la valeur 2
• Reste : %
Attention (il s’agit du reste de la division entière exemple
int i;
i=5%2; // i reçoit la valeur 1
Jeudi 10 Mars 2011 19 Jeudi 10 Mars 2011 20
Solution
Exercice #include <iostream>
using namespacestd;
Ecrire un programme qui demande à l’utilisateur void main()
{
de donner un nombre de secondes (un entier) et int nbs, h, m, s, rest;
qui transforme ce nombre en nombre d’heures, cout << " Entrer le nombre de secondes : ";
cin >> nbs;
de minutes et de secondes et qui affiche sur h=nbs / 3600;
rest=nbs%3600;
l’écran le résultat
m=rest/60;
s=rest%60;
cout << nbs <<" secondes correspondent a " << h<< " : " <<m<< " : " <<s<<endl;
}

Jeudi 10 Mars 2011 21 Jeudi 10 Mars 2011 22

Est-ce qu’on peut représenter tous Modèle élémentaire d’un ordinateur


les entiers en machine ?
Mémoire

Bus de données
Microprocesseur

Jeudi 10 Mars 2011 23 Jeudi 10 Mars 2011 24


Est-ce qu’on peut représenter tous les
Besoin de travailler sur des
entiers en machine ?
réels
Le type entier ne permet pas de résoudre tous les problèmes
• La mémoire est composée d’une suite d’octets
Problème à résoudre :
• Chaque octet est composée de 8 bits
Résolution d’une équation de second degré
• Chaque bit peut prendre la valeur 0 ou la valeur 1 Donc on a besoin de la racine carré
• Un entier est codée sur 4 octets (c’est-à-dire 32 bits)
D’où le besoin de travailler sur les réels
• Un bit est réservé pour le signe donc reste 31 bit pour
l’entier c’est-à-dire 231 possibilités un nouveau type
• C’est-à-dire entre 0 et 231-1pour les entiers positifs
et entre -231 et -1 pour les entiers négatifs
Jeudi 10 Mars 2011 25 Jeudi 10 Mars 2011 26

Comment déclarer une variable de


C’est quoi un réel ? type réel
double x; // réservation d’un espace mémoire pour x
double y,z; // réservation d’un espace mémoire pour y
// et z
Ou bien

float x; // réservation d’un espace mémoire pour x


Exemple : réels float y,z; // réservation d’un espace mémoire pour y
1.2365
1235 // et z
12e10
12.5444E2 Jeudi 10 Mars 2011 27 Jeudi 10 Mars 2011 28
Les fonctions prédéfinies
Les opérations de base #include<math.h>

+ représente l'addition • fabs (valeur) valeur absolue de valeur, par


- représente la soustraction exemple abs (-3.4) vaut 3.4
* représente la multiplication • sqrt (valeur) racine carrée de valeur (>= 0!);
/ représente la division exemple: sqrt (4.0) vaut 2.0
Attention : • exp (valeur) nombre e à la puissance valeur
Les symboles +, -, *, / sont les opérateurs réels. • log (valeur) logarithme naturel de valeur

Question :
Comment la machine distingue entre le quotient
et la division des réels??
Jeudi 10 Mars 2011 29 Jeudi 10 Mars 2011 30

Quelles noms peuvent prendre les variables Exercices


Les identificateurs (les noms admissibles EXERCICE 1
pour nommer les variables) Ecrire un programme qui demande à l'utilisateur de
taper la largeur et la longueur d'un champ et qui en
affiche le périmètre et la surface.
EXERCICE 2
Ecrire un programme qui demande à l'utilisateur de
taper 5 entiers et qui affiche leur moyenne. Le
programme ne devra utiliser que 2 variables.

EXERCICE 3
Ecrire un programme qui demande à l’utilisateur de
saisir 2 entiers A et B, qui échange le contenu des
Attention : Un certain nombre de mots est réservé pour le langage, ces mots ne peuvent variables A et B puis qui affiche A et B.
être utilisés comme identificateur (exemple main, int, if, etc…)

Jeudi 10 Mars 2011 31 Jeudi 10 Mars 2011 32


Exercices La structure de contrôle IF
EXERCICE 4
Première variance
Ecrire un programme qui demande à l'utilisateur de taper le
Prix HT d'un kilo de tomates, le nombre de kilos de tomate if (condition booléenne)
achetés, le taux de TVA (Exemple 5.5, 19.6,...). Le instruction;
programme affiche alors le prix TTC des marchandises

EXERCICE 5

Ecrire un programme qui demande à l’utilisateur de saisir


Les coordonnées de deux points du plan A et B et qui affiche
La Le carré de la distance entre A et B. Condition qui peut être vraie ou fausse

Jeudi 10 Mars 2011 33 Jeudi 10 Mars 2011 34

Application : Valeur absolue d’un réel Exemple


Apprentissage par l’exemple
#include <iostream>
using namespace std;
Ecrire un programme qui demande à l’utilisateur void main()
{
de donner un réel, le stocke dans une variable a int a;
cout << "Tapez la valeur de a : ";
et met dans a sa valeur absolue cin >> a;
if (a < 0) a= - a;
cout << "Le programme est fini" << endl;
}

Jeudi 10 Mars 2011 35 Jeudi 10 Mars 2011 36


Autre exemple : Déduire la • Ce programme demande à l'utilisateur de saisir une valeur entière a.
question associée à ce programme • Si la valeur tapée est strictement supérieure à 10 on affiche "Gagné"
puis "Le programme est fini" et le programme s'arrête.
• Dans le cas contraire, on affiche uniquement "le programme est fini" et
#include <iostream> le programme s'arrête.
using namespace std; • Exécution de l'exemple 1 n°1
Lorsqu'on exécute notre programme, il s'affiche à l'écran :
void main() Tapez la valeur de a : 80
{ Gagné
Le programme est fini
int a; • Exécution de l'exemple 1 n°2
cout << "Tapez la valeur de a : "; Lorsqu'on exécute notre programme, il s'affiche à l'écran :
Tapez la valeur de a : 8
cin >> a; Le programme est fini
if (a > 10) cout << "Gagné !" << endl; • Exécution de l'exemple 1 n°3
cout << "Le programme est fini" << endl; Tapez la valeur de a : 10
Le programme est fini
}

Jeudi 10 Mars 2011 37 Jeudi 10 Mars 2011 38

La structure de contrôle IF Exemple


Deuxième variance
#include <iostream>
if (condition booléenne) using namespace std;
instruction1; void main()
{
else int a;
cout<<"Tapez la valeur de a : ";
instruction2 ; cin>>a;
if(a>10) cout<<"Gagné !"<<endl;
else cout<<"Perdu"<<endl;
cout<<"le programme est fini"<<endl;
}

Condition qui peut être vraie ou fausse

Jeudi 10 Mars 2011 39 Jeudi 10 Mars 2011 40


• Ce programme demande à l'utilisateur de saisir une valeur entière a. Où est l’erreur??
• Si la valeur tapée est strictement supérieure à 10, on affiche "Gagné"
puis "Le programme est fini" et le programme s'arrête.
• Dans le cas contraire, on affiche "Perdu" puis "Le programme est fini" et
le programme s'arrête.
• Exécution de l'exemple 2 n°1 #include <iostream>
Lorsqu'on exécute notre programme, il s'affiche à l'écran : using namespace std;
Tapez la valeur de a : 80
Gagné void main()
Le programme est fini {
• Exécution de l'exemple 2 n°2 int a;
Lorsqu'on exécute notre programme, il s'affiche à l'écran : cout<<"Tapez la valeur de a : ";
Tapez la valeur de a : 5 cin>>a;
Perdu if(a>10) ;cout<<"Gagné !"<<endl;
Le programme est fini else cout<<"Perdu"<<endl;
• Exécution de l'exemple 2 n°3 cout<<"le programme est fini"<<endl;
Lorsqu'on exécute notre programme, il s'affiche à l'écran : }
Tapez la valeur de a : 10
Perdu
Le programme est fini

Jeudi 10 Mars 2011 41 Jeudi 10 Mars 2011 42

Où est l’erreur?? Si pas quel L’instruction de contrôle IF


est le résultat Le diagramme

#include <iostream>
using namespace std; Si pas de else alors
void main() Condition
{ Booléenne
Fausse
int a;
cout<<"Tapez la valeur de a : ";
Vraie Instruction(s)
cin>>a;
if(a>10) ;cout<<"Gagné !"<<endl;
Instruction(s)
cout<<"Perdu"<<endl;
cout<<"le programme est fini"<<endl;
}

Suite du programme
Jeudi 10 Mars 2011 43 Jeudi 10 Mars 2011 44
Notion de Bloc d’instructions :
Exercice On pourra regrouper plusieurs instructions éventuellement dan
un if en les englobant dans des accolades { }.

Exemple :
Bloc d’instructions
if ( i<j) {
cout << " valeur de i = ";
Ecrire un programme qui permet de demander a l’utilisateur de rentrer deux cout <<i;
entiers, et qui permet d’afficher sur l’écran si le premier entier est supérieur cout << " valeur de j = ";
au deuxième ou bien si c’est l’inverse
cout <<j;
cout << " i est inferieure a j " ;
}
else
{
Bloc d’instructions
…..
…..
}
cout << " Au revoir " ;
Jeudi 10 Mars 2011 45 cout << endl; Jeudi 10 Mars 2011 46

C’est quoi une condition Peut-on avoir des conditions


booléenne sur les entiers ? booléennes composées ?
Par l’exemple Opérateur
( i > j ) Les opérateurs et, ou , et non existent-ils ?

int i,j;
Evidemment :
….
Opérande && pour et
|| pour ou
Le résultat est soit vraie soit faux ! Pour non
Jeudi 10 Mars 2011 47 Jeudi 10 Mars 2011 48
Exemple sur le ET logique :&& Exemple sur le ou logique : ||
// On déclare i et on saisit une valeur
if ((i>1) && (i<5) ) if ((i<5) || (i>10) )

Attention au nombre de parenthèses


(qui donne des erreurs courantes en programmation)

Résultat vraie si et seulement si i>1 et i<5 Résultat vraie si et seulement si i<5 ou i>10
Jeudi 10 Mars 2011 49 Jeudi 10 Mars 2011 50

Les conditions comparaison


Exemple sur le non logique : !
entre entier et/ou réel
Les conditions habituelles sont utilisables :
if (! (i<5))
if(a>b)… strictement supérieur à
if(a>=b)…. supérieur ou égal à
if(a<b)…. strictement inférieur à
if(a<=b)… inférieur ou égal à
if(a==b)… test d'égalité
Résultat vraie si et seulement si i>= 5 if(a!=b)…. différent de
Jeudi 10 Mars 2011 51 Jeudi 10 Mars 2011 52
Une erreur courante Une erreur courante
#include <iostream> #include <iostream>
using namespace std; Qu’affiche ce programme ?? using namespace std;
void main() Interpreter ?? void main()
{ {
int a,b; int a,b;
cout<<"Tapez la valeur de a : "; cout<<"Tapez la valeur de a : ";
cin>>a; cin>>a; Tester et comprendre
cout<<"Tapez la valeur de b : "; cout<<"Tapez la valeur de b : "; Quelle est l’erreur ?
cin>>b; cin>>b;

if(a=b) cout<<" a et b sont égales!"<<endl; if(a=b) cout<<" a et b sont égales!"<<endl;


else cout<<" a et b sont différents"<<endl; else cout<<"a et b sont différents"<<endl;
cout<<"le programme est fini"<<endl; cout << " a= " <<a;
} cout << " b="<<b;
cout<<"le programme est fini"<<endl;
}
Jeudi 10 Mars 2011 53 Jeudi 10 Mars 2011 54

Une erreur courante Question ?


#include <iostream>
#include <iostream>
using namespace std; using namespace std;
void main() void main()
{
int a,b; {
cout<<"Tapez la valeur de a : ";
cin>>a; int i,j; // réservation de variables de type entier
cout<<"Tapez la valeur de b : ";
cin>>b;
.......
if ((i % 2)==0)
if(a=b) cout<<" a et b sont égales!"<<endl;
else cout<<"a et b sont différents"<<endl; if ( (j % 2 )==0) cout << i<<‘‘ et ’’<<j<< ‘‘sont pairs’’;
cout << " a= " <<a;
cout << " b="<<b;
else cout <<‘‘ quoi?? ’’;
cout<<"le programme est fini"<<endl;
}
Jeudi 10 Mars 2011 55 Jeudi 10 Mars 2011 56
Comment faire pour que le else suit
Le type bool (Booléen)
le premier if ?
• Une variable de type bool pourra prendre les valeurs vraie ou faux
• Exemple
main()
{ #include <iostream>
int i,j; using namespace std;
void main()
....... Bloc d’instructions {
if ((i % 2)==0) int a;
{ bool c,d;
cout<<"Tapez une valeur entière : ";
if ( (j % 2 )==0) cout << i<<‘‘ et ’’<<j<< ‘‘sont pairs’’; cin>>a;
} c=(a<3);
d=(a>20);
else cout <<‘‘ quoi?? ’’; if(c||d)cout<<"GAGNE"<<endl;
} else cout<<"PERDU"<<endl;
}

Jeudi 10 Mars 2011 57 Jeudi 10 Mars 2011 58

L’aiguillage (le switch) Exemple switch pour comprendre


#include <iostream>
using namespace std;
• Permet de choisir une alternative parmi plusieurs void main()
{
choix possibles. int i;
cout<<"Tapez un entier entre 1 et 3 bornes incluses :";
cin>>i;
switch (i)
• Très utile pour les programmes de grandes tailles { case 1: cout<<"GAGNE je suis dans le cas n ° 1 "<<endl;
i=i+99;
exemple: gestion d’un magasin faire un menu break;
case 2: cout<<"PERDU je suis dans le cas n° 2"<<endl;
qui propose à l’utilisateur de faire un i=0;
break;
choix ensuite suivant le choix case 3: cout<<"PERDU je suis dans le cas n°3"<<endl;
i=0;
exécuter les instructions correspondantes break;
}
cout<<"La valeur finale de i est "<<i<<endl;
}
Jeudi 10 Mars 2011 59 Jeudi 10 Mars 2011 60
Que se passe-t-il si on enlève les Quelle est l’utilité de default ??
break? #include <iostream>
using namespace std;
#include <iostream> void main()
using namespace std; {
void main() int i;
{int i; cout<<"Tapez un entier entre 1 et 3 bornes incluses :";
cin>>i;
cout<<"Tapez un entier entre 1 et 3 bornes incluses :"; switch(i)
cin>>i; { case 1: cout<<"GAGNE"<<endl;
switch(i) i=i+99;
break;
{ case 2: cout<<"PERDU n° 2"<<endl;
case 1: cout<<"GAGNE je suis dans le cas n ° 1 "<<endl; i=0;
i=i+99; break;
case 3: cout<<"PERDU n°3"<<endl;
case 2: cout<<"PERDU je suis dans le cas n° 2"<<endl;
i=0;
i=0; break;
case 3: cout<<"PERDU je suis dans le cas n°3"<<endl; default : cout<<"J'ai dit entre 1 et 3 !!!"<<endl;
i=0; i=-1000;
break;
} }
cout<<"La valeur finale de i est "<<i<<endl; cout<<"La valeur finale de i est "<<i<<endl;
} }
Jeudi 10 Mars 2011 61 Jeudi 10 Mars 2011 62

Règles d’utilisation Travail à faire


#include <iostream>
using namespace std;
void main()
1. Continuer tous les exercices de la feuille 2
{
int i;
faire un fichier txt contenant toutes les
cout<<"Tapez un entier entre 1 et 3 bornes incluses :";
cin>>i;
Les valeurs après les cases doivent solutions.
switch(i) être des entiers
{ case 1: cout<<"GAGNE"<<endl; exemple :
i=i+99;
case (i>2) donnera une erreur
break;
case 2: cout<<"PERDU n° 2"<<endl;
i=0;
2. Proposer un programme dans lequel on
break;
case 3: cout<<"PERDU n°3"<<endl;
demande à l’utilisateur de rentrer un choix et
i=0;
break; suivant le choix le programme résolve une des
default : cout<<"J'ai dit entre 1 et 3 !!!"<<endl;
i=-1000;
break;
question du TD2 (utilisation du switch).
}
cout<<"La valeur finale de i est "<<i<<endl;
}
Jeudi 10 Mars 2011 63 Jeudi 10 Mars 2011 64
Top Ten des erreurs Top Ten des erreurs
Erreurs Solutions Solutions
Erreurs
• cout << “ Bonjour “>>; • cout << “ Bonjour “;
• If (b<a) b>>a; ?? • If (b<a) b>>a; ??
• cout <<x=-b/a; • x=-b/a;
cout <<“x=“<<x; • If (b^2 – 4 a c)
• ^ ???????quel est cet opérateur
Ou - 4 a c ??????
cout << “x=“<<-b/a;
• If (a=0) • If (a==0)
• B==A+2; • B=A+2;

• If (a==0) { …} • cout<<“ entrer a:”; cin >>a;


cout<<“ entrer a:”; cin If (a==0) { …}
>>a;
Jeudi 10 Mars 2011 65 Jeudi 10 Mars 2011 66