Vous êtes sur la page 1sur 93

PRINCIPES DE PROGRAMMATION

Université IBNZOHR – Faculté des Sciences - Agadir 1


PRINCIPES DE PROGRAMMATION

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 2


PRINCIPES DE PROGRAMMATION

Université IBNZOHR – Faculté des Sciences - Agadir 3


PRINCIPES DE PROGRAMMATION

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 4


PRINCIPES DE PROGRAMMATION

Université IBNZOHR – Faculté des Sciences - Agadir 5


PRINCIPES DE PROGRAMMATION

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 6


PRINCIPES DE PROGRAMMATION

Tout ordinateur ne peut fonctionner que si on lui donne des ordres. Un ordre
élémentaire que peut comprendre un ordinateur est appelé Instruction ou Commande.
Par exemple, un clic sur une icône, la commande «Ouvrir», la commande
«Enregistrer» ou la commande «Imprimer», sont des instructions.
Il existe deux manières principales pour donner des ordres à une machine :
La première façon consiste à donner un ordre à la machine et celle-ci l’exécute
instantanément, c'est-à-dire que la machine vous envoie sa réponse immédiatement.
C’est le cas, par exemple, lorsque vous cliquez deux fois sur une icône du Bureau de
Windows (Celui-ci ouvre immédiatement l’application ou le document correspondant
à l’icône sur laquelle vous avez cliquée).
La seconde façon consiste d’abord à établir une liste d’ordres ou d’instructions
(grâce à une application ou logiciel qui permet de le faire, appelé Logiciel de
programmation), puis de demander à la machine d’exécuter cette liste
d’instructions (les unes après les autres). La liste que vous venez de créer est
appelée Programme.
L’objectif de ce cours est de vous apprendre la manière d’élaborer des programmes.

L’algorithmique est un terme d’origine arabe. C’est une suite d’instructions, qui, une
fois exécutée, conduit au résultat voulu.
Tout problème à programmer doit être résolu, d’abord sous forme d’algorithme, puis
converti en programme dans le langage de votre choix. En effet, un algorithme est
indépendant du langage de programmation à utiliser.
On peut dire qu’un algorithme n’est qu’une sorte de «Plan» de votre futur programme.

Exemples
Pour faire un plat de cuisine, vous devez exécuter toutes les étapes
nécessaires de la recette pour y arriver. La recette est un « algorithme ».

Université IBNZOHR – Faculté des Sciences - Agadir 7


ALGORITHMES & ORGANIGRAMMES

Pour afficher une somme de deux nombres, vous devez d’abord les
« entrer », de demander à la machine de les calculer puis d’afficher
le résultat.

Bien qu'inusité de nos jours, les organigrammes permettent d'avoir une approche
visuelle que ne fournissent pas les algorithmes.
Un organigramme se définit comme une représentation graphique des algorithmes.
Leur point fort réside dans l’aisance et la facilité de vérifier la justesse de vos algorithmes.

Tout problème dont vous désirez créer l’algorithme, doit être préalablement
décomposé, pour vous faciliter son élaboration, ainsi :
Définir l’objectif du problème.
Décrire l'enchaînement des actions en utilisant une écriture « simple » et
« compréhensible », qui sera traduit en algorithme ultérieurement.
Définir la liste des données avec leurs caractéristiques.
Pour cette dernière étape, il faut préciser quelles sont les données qui vont être
saisies pendant l’exécution du programme (Données en Entrée), celles qui vont être
affichées (Données en Sortie) et les données traitées ou calculées (Données
Intermédiaires).

Exemple
Faire l’algorithme qui permet d’afficher le produit de deux nombres réels quelconques.
1ère étape
Objectif : Afficher le produit de deux nombres. Pour y arriver, il faut :
2ème étape
L’utilisateur doit entrer au clavier les valeurs respectives des deux nombres.
La machine doit calculer le produit de ces deux nombres.
La machine doit afficher le résultat.
ème
3 étape
Les données utilisées sont :

Donnée Action Type


Le 1er Nombre Entrée Réel
Le 2ème Nombre Entrée Réel
Le produit Calculé et Sortie Réel

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 8


PRINCIPES DE PROGRAMMATION

Tout algorithme doit respecter les règles suivantes :


Il doit toujours commencer par le mot «Début» et se terminer par le mot «Fin.».
L’ordre des instructions est d’une importance capitale.
Optionnellement, un algorithme peut commencer par un nom choisi par l’utilisateur
en tapant «Nom_Algo Nom de l’algorithme».
Les lignes d’un algorithme se terminent par un point-virgule
Pour cette dernière obligation, et si on reprend l’exemple précédent, le calcul du
produit doit être effectué avant son affichage, sinon c’est une erreur de conception de
l’algorithme.
Tout algorithme n’est qu’une combinaison d’instructions élémentaires.

Toute donnée, qu’elle soit entrée, calculée ou affichée, est stockée d’une façon
permanente ou provisoire dans la mémoire vive (R.A.M) de l’ordinateur.
La R.A.M de l’ordinateur est un maillage (Quadrillage) ou une sorte de tableau à
plusieurs lignes et colonnes dont l’intersection d’une ligne et d’une colonne constitue une
cellule ou case mémoire.

Structure simplifiée Cellule ou case


de la R.A.M mémoire

Remarque

Toute donnée, qu’elle soit en entrée, calculée ou en sortie, permanente ou


temporaire, doit loger dans une case mémoire.
La notion de variable est utilisée en programmation pour désigner une cellule ou
case mémoire.

Université IBNZOHR – Faculté des Sciences - Agadir 9


ALGORITHMES & ORGANIGRAMMES

Une variable est caractérisée par :

Les principaux types de données sont :


Le type Numérique : la donnée, si elle est numérique, peut être utilisée dans une
opération mathématique. Il existe de sous-types numériques : ENTIER ou RÉEL.
Le type Chaîne de caractères : toute donnée de ce type est constituée d’une suite
de caractères alphanumériques (Caractères alphabétiques, chiffres et autres
caractères). Il en existe deux types : Chaîne (1 ou plusieurs caractères) et
Caractère (1 seul caractère)
Le type Logique ou Booléen : toute donnée de ce type ne peut être que «Vrai» ou
«Faux».

Une variable ne peut contenir qu’une seule donnée. Celle-ci logera dans la variable
tant qu’on ne l’a pas remplacée.

Une variable doit être identifiée par un nom appelé Nom ou Identificateur de la
variable. Cet identificateur doit respecter certaines règles qui changent selon le langage de
programmation utilisé.

Avant l’utilisation d’une variable dans un algorithme ou programme proprement dit, il


faut d’abord la «réserver» , c'est-à-dire demander à la machine de chercher des cases
mémoires libres (inoccupées) dans la R.A.M, et de les «préparer» pour notre programme.
Cette opération est appelée Déclaration des variables. Elle est obligatoire et se
place après le mot «Début» et après le nom de l’algorithme.
La déclaration des variables se fait de la syntaxe suivante :

Type Variable(s)[=Valeurs initiales] ;

Exemples
1. Réel A;
Réserve dans la R.A.M une variable nommée A et qui sera de type réel.
2. Réel A,B,C ;
Réserve dans la R.A.M trois variables nommées A, B & C et qui seront de type réel.
3. Entier A,B ;Chaîne C,D ;Booléen E ;

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 10


PRINCIPES DE PROGRAMMATION

Réserve, dans la R.A.M, 2 variables nommées A, B de type Entier, 2 variables


nommées C & D de type Chaîne de caractères et une autre nommée E de type logique.
4. Réel A=0,B=0,C=0 ;
Réserve dans la R.A.M trois variables nommées A, B & C et qui seront de type réel.
Leur valeur initiale est la valeur 0.

C’est l’instruction qui permet de mettre (d’affecter) une valeur dans une variable. Sa
syntaxe est la suivante :

Variable=Valeur

Exemples

1. A = 5
Affecte (Met) la valeur 5 à la variable A.
2. B =5 + 16
Calcule la somme des valeurs 5 & 16 puis affecte le résultat (21) à la variable B.
3. B = ‘Sciences de la vie et de la terre’
Affecte la valeur ‘Sciences de la vie et de la terre’ à la variable B.
4. B = ‘C’
Affecte la valeur ‘C’ à la variable B.
5. B =C
Affecte la valeur de la variable C à la variable B.
6. B =C+D
Calcule la somme des valeurs des variables C & D puis affecte le résultat à la variable B.
7. K =K+1
Ajoute 1 à la valeur de la variable K, puis affecte la nouvelle valeur à la variable K (l’ancienne
valeur de la variable K est remplacée par la nouvelle : on dit qu’elle est écrasée). Ce type
d’opération est appelée Incrémentation avec un pas de 1 de la variable K.

C’est l’instruction qui va permettre à l’utilisateur de saisir (d’entrer ou de lire) les


données au clavier, pendant l’exécution du programme, et de les affecter aux variables
citées avec l’instruction de lecture.

Lire(Variable(s))

Université IBNZOHR – Faculté des Sciences - Agadir 11


ALGORITHMES & ORGANIGRAMMES

Exemples

1. Lire (B)
Permet à l’utilisateur de saisir une valeur au clavier qui sera affectée à la variable B.
2. Lire (C,D)
Permet à l’utilisateur de saisir deux valeurs au clavier qui seront affectées
respectivement aux variables C & D.

C’est l’instruction qui permet d’afficher, par défaut sur écran, un ou plusieurs
messages, la valeur d’une ou plusieurs variables, ou la combinaison des deux.

Ecrire(Messages et/ou Variable(s))

Exemples

1. Écrire(" Ceci est un exemple")


Permet d’afficher à l’écran le message « Ceci est un exemple ».
2. Écrire(B)
Permet d’afficher à l’écran la valeur de la variable B.
3. Écrire("Somme=" ,S)
Permet d’afficher à l’écran le message «Somme=» et la valeur de la variable S.
4. Écrire(C,D,E)
Permet d’afficher à l’écran les valeurs des variables C, D & E.

Exercice 1

Faire l’algorithme qui permet d’afficher de deux nombres réels saisis au clavier par
l’utilisateur.

Solution
Nom_Algo Produit ;
Début
Réel X,Y,P;
Écrire("Donnez la valeur du 1er nombre : ") ; Lire(X) ;

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 12


PRINCIPES DE PROGRAMMATION

Écrire("Donnez la valeur du 2ème nombre : ") ; Lire(Y) ;

P := X*Y ; Écrire("Le produit = : ",P) ;


FIN.

Exercice 2

Faire l’algorithme qui permet d’échanger les valeurs de deux variables X & Y de type
réel, saisies au clavier par l’utilisateur.

Solution

Nom_Algo Échange ;
Début

Réel X,Y,E;

Écrire("Donnez la valeur de la 1ère Variable : ")’ ; Lire(X) ;

Écrire("Donnez la valeur de la 2ème Variable : ")’ ; Lire(Y) ;


E=X;X=Y;Y=E;

Écrire("La nouvelle valeur de X est : ",X) ;

Écrire("La nouvelle valeur de Y est : ",Y) ;


FIN.

Si (condition)
Instruction(s) 1 ;
[Sinon
Instruction(s) 2 ;]
Instruction X ;

Cette instruction fonctionne de la manière suivante : La machine teste « Condition » :

Université IBNZOHR – Faculté des Sciences - Agadir 13


ALGORITHMES & ORGANIGRAMMES

Si celle-ci est juste (Vraie), elle exécutera «Instruction(s)1», ignorera


«Instruction(s)2» (si SINON existe) et passe à l’instruction qui suit le «SI» (c'est-à-
dire «Instruction X»).
Si celle-ci est fausse, la machine ignorera «Instruction(s)1», exécutera
«Instruction(s)2» (si SINON existe), et passe à l’instruction qui suit le «SI» (c'est-à-
dire «Instruction X»).

Exemple 1

Je suis en voiture.
J’arrive au feu.

Si (le feu est vert)


je passe ;

Sinon
Je m’arrête ;
On voit dans cet exemple que la condition est «le feu est vert». Si cette est condition
est exacte (vraie), alors je passe (je continue de rouler) et j’ignore l’action de SINON (c'est-
à-dire je ne m’arrête pas). Si la condition est fausse (c'est-à-dire que le feu est rouge ou
orange), alors j’ignore l’action «je passe» et j’exécute l’action de SINON (c'est-à-dire je
m’arrête).

Exemple 2

Faire l’algorithme qui permet d’afficher le maximum parmi deux nombres réels saisis
au clavier.

Solution 1

Nom_Algo MAX_1ère Version ;


Début

Réel X,Y;

Écrire("Donnez la valeur du 1er nombre : ") ; Lire(X) ;

Écrire("Donnez la valeur du 2ème nombre : ") ; Lire(Y) ;

SI (X>Y)

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 14


PRINCIPES DE PROGRAMMATION

Écrire("Le Maximum est : "’, X) ;

SINON

Écrire("Le Maximum est : "’, Y) ;


FIN.

Solution 2

Nom_Algo MAX_2ème Version ;


Début

Réel X,Y,MX;

Écrire("Donnez la valeur du 1er nombre : ") ; Lire(X) ;

Écrire("Donnez la valeur du 2ème nombre : ") ; Lire(Y) ;

SI (X>Y)
MX = X

SINON
MX =Y ;

Écrire("Le Maximum est : ",MX) ;


FIN.

Exemple 3
Faire l’algorithme qui permet d’afficher la racine carrée d’un nombre réel saisi au
clavier. Si celui-ci est négatif, afficher la racine carrée de son opposé.

Solution

Nom_Algo Racine Carrée ;


Début

Réel X,RC;

Université IBNZOHR – Faculté des Sciences - Agadir 15


ALGORITHMES & ORGANIGRAMMES

Écrire("Donnez la valeur de nombre : ") ; Lire( X) ;

SI (X<0)
X = -X;
RC = SQR(X) ;

Écrire("La racine carrée =",RC) ;


FIN.
Remarquez dans cet exemple l’absence de SINON ; en effet, si la condition X<0 n’est
pas vraie (fausse), cela veut dire que la valeur de X est >= 0, et quand X est positive, il faut
aller directement calculer sa racine carrée.

Remarque

Si vous avez plusieurs instructions à exécuter lorsque la condition est juste ou


devant SINON, vous devez les mettre entre les mots Début et Fin.

Dans ce cas, les instructions à exécuter lorsque la condition est juste ou fausse sont,
à leur tour, des instructions SI… …SINON.

Exemple

Faire l’algorithme qui permet d’afficher la mention obtenue par un étudiant en fonction
de la moyenne obtenue.
SI Moyenne>=16, alors la mention est « Très Bien ».
Si 16>Moyenne>=14, alors la mention est « Bien ».
Si 14>Moyenne>=12, alors la mention est « Assez Bien ».
Si 12>Moyenne>=10, alors la mention est « Passable ».
Si Moyenne <10, alors afficher le message« Pas de moyenne ».

Solution 1

Nom_Algo Mention_1ère Version ;


Début

Réel MY ;

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 16


PRINCIPES DE PROGRAMMATION

Écrire("Saisissez la moyenne obtenue : ") ; Lire(MY) ;

SI (MY>=16) Écrire("Mention Très Bien");

SI ((MY<16) et (MY>=14)) Écrire("Mention Bien")’;

SI ((MY<14) et (MY>=12)) Écrire("Mention Assez Bien")’;

SI ((MY<12) et (MY>=10)) Écrire("Mention Passable");

SI (MY<10) Écrire("Pas de moyenne");


FIN.

Remarque

Dans cet algorithme, on constate que lorsque l’une des conditions est juste, le
programme affichera le message correspondant, puis passe à l’instruction suivante,
qui est une autre instruction SI… (Sauf pour la dernière condition) dont le test de la
condition est indubitablement (certainement) faux.

Prenons l’exemple où la moyenne est de 15,00 :


Le programme testera la 1ère condition (MY>=16), elle sera fausse puis passera à
l’instruction suivante.
Le programme testera la 2ème condition ((MY<16) et (MY>=14)), elle sera juste ; le
programme affichera le message « Mention Bien », puis passera à l’instruction
suivante.
Le programme testera la 3ème condition ((MY<14) et (MY>=12)) ; elle est évidement
fausse ; le programme passera à l’instruction suivante.
Le programme testera la 4ème condition ((MY<12) et (MY>=10)) ; elle est évidement
fausse ; le programme passera à l’instruction suivante.
Le programme testera la dernière condition (MY<10) ; elle est évidement fausse ; le
programme se termine.
On remarque qu’après le second test (qui était juste), tous les autres qui suivaient se
sont avérés faux ; donc ce n’était pas la peine de les tester.
Pour être efficace et ignorer toutes les conditions qui suivent celle qui était juste, les
structures SI…Sinon…doivent s’imbriquer.

Université IBNZOHR – Faculté des Sciences - Agadir 17


ALGORITHMES & ORGANIGRAMMES

Nom_Algo Mention_2ème Version ;


Début

Réel MY ;

Écrire("Saisissez la moyenne obtenue : ") ; Lire(MY) ;

SI (MY>=16) MT = "Très Bien"

SINON SI (MY>=14) MT = "Bien"

SINON SI (MY>=12) MT = "Assez Bien"

SINON SI (MY>=10) MT = "Passable"’

SINON MT = "Pas de moyenne" ;

Écrire("Mention : ", MT) ;


FIN.

Pour comprendre le rôle primordial des boucles, nous partirons d’un exemple très
simple qui est le suivant :
Faire l’algorithme qui permet de calculer et d’afficher les racines carrées de 3
nombres réels saisis au clavier.

Solution 1

Nom_Algo Racines_carrées ;
Début

Réel X,RC;

Écrire("Saisissez la valeur du 1er Nombre : ") ; Lire(X) ;

RC = SQR(X) ; Écrire("La racine carrée =",RC) ;

Écrire("Saisissez la valeur du 2ème Nombre : " ) ; Lire(X) ;

RC = SQR(X) ; Écrire("La racine carrée =",RC) ;

Écrire("Saisissez la valeur du 3ème Nombre : " ); Lire(X) ;

RC = SQR(X) ; Écrire("La racine carrée =",RC) ;

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 18


PRINCIPES DE PROGRAMMATION

FIN.

Remarque

On constate dans cet algorithme que les instructions suivantes se répètent 3 fois :

Écrire("Saisissez la valeur du 1er Nombre : ") ; Lire(X) ;

RC = SQR(X) ; Écrire("La racine carrée =",RC) ;

Imaginez si on vous a demandé de le faire pour Mille (1000) nombres !!!!!!!!!!


En effet, il existe des instructions, appelées Boucles, qui permettent d’itérer (répéter)
tant de fois qu’il le faut l’exécution d’autres instructions.
Le schéma général d’une boucle est le suivant :

Début Boucle
Instruction(s) à
répéter

Il existe 3types de boucles :

Sa syntaxe est la suivante :

POUR(Vc=Vi ;Vc<=Vf ;Vc=Vc+P)


[Début]
Instruction(s);
[Fin]
Instruction X ;

Vc : Variable de contrôle ou Compteur.


Vi : Valeur initiale de Vc.
Vf : Valeur finale de Vc.
P : Pas de l’incrémentation.

Université IBNZOHR – Faculté des Sciences - Agadir 19


ALGORITHMES & ORGANIGRAMMES

Cette boucle fonctionne de la manière suivante :


Le programme affecte à Vc la valeur Vi (cette instruction est exécutée une fois et
une seule au début de l’exécution de POUR).Ensuite, le programme vérifie (teste) si la
valeur de Vc <= Vf :
Si c’est juste, le programme va exécuter les instructions entre le mot « Début » et
« Fin ; », incrémente la valeur de Vc de +P (c'est-à-dire ajoute P à l’actuelle valeur
de Vc puis affecte la nouvelle valeur à Vc) et teste à nouveau la condition Vc<=Vf…
Si c’est faux, le programme ignore les instructions entre le mot « Début » et « Fin ; »
et passe à l’instruction qui suit la boucle POUR.

Remarque

. Les instructions entre le mot « Début » et « Fin ; » sont appelées Instructions


du corps de la boucle.
Les mots « Début » et « Fin ; » ne sont plus obligatoires lorsque le corps de la
boucle est composé d’une seule instruction.

Sa syntaxe est la suivante :

Tant que (Condition)


[Début]
Instruction(s);
[Fin]
Instruction X ;

Cette boucle fonctionne de la manière suivante :


Le programme teste la condition :
Si elle est juste, il exécutera les instructions du corps de la boucle et revient pour
tester la condition à nouveau…
Si elle est fausse, il ignorera les instructions du corps de la boucle et passera à
l’instruction qui suit la boucle.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 20


PRINCIPES DE PROGRAMMATION

Sa syntaxe est la suivante :

Faire
Instruction(s);
Tant que (Condition) ;

Cette boucle fonctionne de la manière suivante :


Le programme exécute pour la première fois les instructions du corps de la boucle,
puis teste la condition de Tant que :
Si celle-ci est juste, le programme revient au début de la boute et exécute à nouveau
les instructions du corps de la boucle, puis teste la condition de TANT QUE …
Si celle-ci est fausse, le programme quitte la boucle et passe à l’instruction qui la suit.
Notre exemple de début devient :

Solution 2 – Boucle POUR

Nom_Algo Racines_carrées ;
Début
Réel X,RC; Entier i ;

Pour( i= 1 ; i<= 3 ;i=i+1)


Début
Écrire("Saisissez la valeur du Nombre : ") ; Lire(X) ;

RC = SQR(X) ; Écrire("La racine carrée =",RC) ;

FIN ;
FIN.

Solution 2 – Boucle Tant Que

Nom_Algo Racines_carrées ;
Début
Réel X,RC; Entier i=1 ;

Tant Que (i<= 3 )

Université IBNZOHR – Faculté des Sciences - Agadir 21


ALGORITHMES & ORGANIGRAMMES

Début
Écrire("Saisissez la valeur du Nombre : ") ; Lire(X) ;

RC = SQR(X) ; Écrire("La racine carrée =",RC) ;


I=i+1 ;
FIN ;
FIN.

Solution 2 – Boucle Faire…Tant Que

Nom_Algo Racines_carrées ;
Début
Réel X,RC; Entier i=1 ;

Faire

Écrire("Saisissez la valeur du Nombre : ") ; Lire(X) ;

RC = SQR(X) ; Écrire("La racine carrée =",RC) ; i=i+1 ;

Tant Que (i<= 3 ) ;


FIN.

Remarques

La différence entre les boucles TANT QUE…et FAIRE…TANT QUE réside


dans le fait suivant :
Les instructions du corps de la boucle TANT QUE… peuvent ne jamais
être exécutées ; pour ce faire, il suffit que la condition soit fausse dés le
premier test (celui-ci est fait au début de la boucle).
Les instructions du corps de la boucle FAIRE…TANT QUE sont
exécutées au moins une fois (car le test est fait à la fin de la boucle).
La différence entre les boucles TANT QUE… et FAIRE…TANT QUE d’une part
et la boucle POUR…d’autre part est la suivante : pour les deux premières
boucles, on ne connaît pas à l’avance le nombre de fois que les instructions de
leurs corps vont être exécutées (Nombre de tours de la boucle) ; alors que pour
la troisième boucle, il suffit de le calculer de la manière suivante (Vf - Vi + 1).

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 22


PRINCIPES DE PROGRAMMATION

Un organigramme se définit comme une représentation graphique des algorithmes.

Les graphiques ou les symboles de base sont les suivants :

Symbole Désignation
Début ou Fin
Lecture ou écriture
Test de la condition
Opération d’affectation, Calculs
Sens de l’exécution du programme
Renvoi à une autre partie de l’organigramme.
Appel à un sous-programme, Procédure…

Vrai

Condition

Instructi
Faux ( )

Université IBNZOHR – Faculté des Sciences - Agadir 23


ALGORITHMES & ORGANIGRAMMES

Faux Vrai

Condition

Instructio Instructio
( ) 2 ( ) 1

Vc :=

Vrai

Vc <Vf

Instructi
( )
Faux
Vc := Vc

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 24


PRINCIPES DE PROGRAMMATION

Vrai

Condition

Instructi
Faux ( )

Faire

Instructi
( )
Vrai

Condition

Faux

Université IBNZOHR – Faculté des Sciences - Agadir 25


ALGORITHMES & ORGANIGRAMMES

Pour faciliter la compréhension de l’importance de l’utilisation des tableaux, nous


partirons de l’exemple suivant : Faire l’algorithme qui permet de saisir 5 nombres réels et
de les garder en mémoire.
Pour ce faire, nous aurons besoin de 5 variables de type Réel.
Solution 1
Nom_Algo Tableau1_Version1 ;
Début
Réel A,B,C,D,E;

Écrire("Saisissez la valeur du 1er Nombre : ") ; Lire(A) ;

Écrire("Saisissez la valeur du 2ème Nombre : ") ; Lire(B) ;

Écrire("Saisissez la valeur du 3ème Nombre : ") ; Lire(C) ;

Écrire("Saisissez la valeur du 4ème Nombre : ") ; Lire(D) ;

Écrire("Saisissez la valeur du 5ème Nombre : ") ; Lire(E) ;


FIN.

Remarque

Nous constatons que les instructions Lire et Écrire se répètent 5 fois (Imaginez si
on vous a demandé de le faire pour 100 Nombres !!!!). Le problème pourrait être
résolu en les mettant dans une boucle qui répétera leur exécution 5 fois. En réalité,
même cette solution serait fausse, car nous ne pouvons utiliser qu’une seule
variable ; et seule la dernière valeur saisie sera conservée dans la R.A.M

Nom_Algo Tableau1_Version2 ;
Début
Réel A; Entier i ;

Pour( i= 1 ; i<= 5 ;i=i+1)


Début
Écrire("Saisissez la valeur du Nombre : ") ; Lire(A) ;
FIN ; Solution Fausse
FIN.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 26


PRINCIPES DE PROGRAMMATION

L’idéal serait d’utiliser une boucle et de pouvoir garder tous les nombres saisis dans la
R.A.M. Pour ce faire, nous utiliserons un tableau.

Un tableau est une suite de cases mémoire portant le même nom et différenciées
entre elles par un numéro ou un indice, d’où leur nom de variables indicées.

Tableau A

Exemple d’un Tableau


nommé A composé de
4 cases, dans la R.A.M

A(0) A(3)
A(1) A(2)

Un tableau à une dimension est un ensemble de cases référencées par un seul


indice. Il est composé d’une seule rangée de cellules.

La déclaration d’un tableau à une dimension peut se faire de la manière suivante :

Type Nom_Tableau[Nombre_cases]={Vi0,Vi1…Vin}

Type : est le type du tableau.


Nom_Tableau : est le nom du tableau.
Nombre_cases : est le nombre de cases du Tableau. La 1ère case aura comme indice
la valeur 0, la seconde, la valeur 1 et ainsi de suite.
Vi0,Vi1…Vin : sont les valeurs initiales des différentes cases du Tableau. Vi0 sera
affectée à la case d’indice 0, Vi1 à la case d’indice 1 et ainsi de suite.

Exemples

1. Réel A[5] ;
Déclare un Tableau nommé A de 5 cases de type réel.

Université IBNZOHR – Faculté des Sciences - Agadir 27


ALGORITHMES & ORGANIGRAMMES

2. Réel A[5],B[3] ;
Déclare deux tableaux de type réel. Le tableau A avec 5 cases et le tableau B
avec 3 cases.

3. Entier A[4]={3,5,9,12}
Déclare un tableau A de 4 cases de type Réel, puis affecte la valeur 3 à la case
A[0], 5 à A[1], 9 à A[2] et 12 à A[3].

4. Entier A[4]={0}
Déclare un tableau A de 4 cases de type Réel, puis affecte la valeur 0 à toutes
les cases du tableau.

5. Entier A[4]={5}
Déclare un tableau A de 4 cases de type Réel, puis affecte la valeur 5 à la case
A[0] ; les autres cases seront initialisées à 0.

Remplir un tableau consiste à affecter des valeurs à ses cases. L’action du


remplissage peut se faire de deux manières différentes : Par la lecture ou par
l’affectation.
Reprenons l’exemple du début de ce paragraphe :

Nom_Algo Tableau1_Version3;
Début
Réel A[5]; Entier i ;

Pour( i= 1 ; i<= 5 ;i=i+1)


Début
Écrire("Saisissez la valeur du Nombre : ") ; Lire(A[i]) ;
FIN ;
FIN.

Un tableau à deux dimensions est un ensemble de cases référencées par deux


indices. Il est composé de plusieurs lignes et colonnes de cellules.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 28


PRINCIPES DE PROGRAMMATION

Exemple

Faire l’algorithme qui permet de saisir et de garder en mémoire les 2 notes de 4


étudiants.
On remarque que chaque cellule du tableau sera identifiée (référencée) par le N°
d’étudiant et le N° de la note obtenue. Ce tableau aura la forme suivante :

Note N° 1 Note N° 2

NT[1,1] NT[1,2]
Étudiant N° 1

NT[2,1] NT[2,2]
Étudiant N° 2

NT[3,1] NT[3,2]
Étudiant N° 3

NT[4,1] NT[4,2]
Étudiant N° 4

La déclaration d’un tableau à 2 dimensions peut se faire de la manière suivante :

Type Nom_Tableau[NL][NC]

NL : Nombre de lignes du Tableau


NC : Nombre de colonnes du tableau.

Exemples

1. Réel A[3][5];
Déclare un tableau nommé A composé de 3 lignes et 5 colonnes de cases de
type réel.

2. Réel A[3][5],B[4][8];
Déclare 2 tableaux : le tableau A composé de 3 lignes et 5 lignes, le tableau B
composé de 4 lignes et 8 colonnes de type Réel.

Université IBNZOHR – Faculté des Sciences - Agadir 29


ALGORITHMES & ORGANIGRAMMES

3. Entier A[3][2]= {{5,9},{10,20},{45,9}};


Déclare un tableau A composé de 3 lignes et 2 colonnes de type Entier avec
initialisation :

Case Valeur initiale Case Valeur initiale


A[0][0] 5 A[0][1] 9
A[1][0] 10 A[1][1] 20
A[2][0] 45 A[2][1] 9

Comme pour les tableaux à une dimension, le remplissage peut se faire, soit par la
lecture, soit par l’affectation.
Il existe deux façons pour remplir un tableau à 2 dimensions :
Remplissage ligne par ligne ; dans ce cas, pour chaque ligne, on remplit d’abord
ses colonnes, avant de passer à la ligne suivante.
Remplissage colonne par colonne ; dans ce cas, pour chaque colonne, on remplit
d’abord ses lignes, avant de passer à la colonne suivante.
Dans les deux cas, on aura besoin de deux boucles, l’une dans l’autre : on les
appellera boucles imbriquées.
Reprenons l’exemple précédent (les notes) : Remplissage ligne par ligne

Nom_Algo Tableau2D_Ligne;
Début
Réel A[4][2]; Entier i,j;

Pour( i= 0 ; i<= 3 ;i=i+1)

Pour( j= 0 ; j<= 1 ;j=j+1)


Début
Écrire("Saisissez la valeur de la note : ") ;

Lire(A[i][j]) ;
FIN;
FIN.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 30


PRINCIPES DE PROGRAMMATION

Un programme C/C++ peut être constitué de plusieurs types de mots et/ou de


certains symboles.

Ils constituent le vocabulaire du langage C/C++. Ces mots sont réservés pour C/C++
et ne peuvent donc pas être utilisés à d’autres fins que celles pour lesquelles ils ont été
définis Vous ne pouvez pas utiliser ces mots comme identificateurs de variables, de
constantes ou de fonctions. Ces mots sont les suivants:

auto break case char Continue


const default do double Else
extern float for goto If
int long register return Short
sizeof static struct switch typedef
union unsigned while asm bool
catch class const_cast delete dynamic_cast
enum explicit export false friend
inline mutable namespace new operator
private protected public reinterpret_cast signed
static_cast Template This Throw True
Try typeid typename using Virtual
Void Volatile w_chr_t

Les mots en Italique sont réservés uniquement au langage C++.

Se sont les noms donnés par l’utilisateur aux constantes, aux variables, aux types
de données, aux fonctions, aux unités, et au nom du programme. Ce type
d’identificateur doit respecter les règles suivantes:
Ne doit pas dépasser 63 caractères.
Le premier caractère doit être une lettre.

Université IBNZOHR – Faculté des Sciences - Agadir 31


INTRODUCTION AU LANGAGE C/C++

Les suivants peuvent être des chiffres, des lettres ou le caractère de soulignement
De même que pour les mots réservés, la différence entre les majuscules et les
minuscules n'est pas prise en compte.

Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-
dire effectuer des opérations, les évaluer, etc.
On distingue plusieurs types d'opérateurs :
les opérateurs de calcul
les opérateurs d'assignation
les opérateurs d'incrémentation
les opérateurs de comparaison
les opérateurs logiques

Les opérateurs de calcul permettent de modifier mathématiquement la valeur d'une


variable.

Opérateur Dénomination Action


+ Addition Ajoute 2 valeurs
- Soustraction Soustrait 2 valeurs
* Multiplication Multiplie 2 valeurs
/ Division Divise 2 valeurs
% Modulo Reste d’une division entière

Ces opérateurs permettent de simplifier des opérations telles que ajouter une valeur
dans une variable et stocker le résultat dans la variable. Une telle opération s'écrirait
habituellement de la façon suivante par exemple : x=x+2.
Avec les opérateurs d'assignation il est possible d'écrire cette opération sous la forme
suivante : x+=2 . Ainsi, si la valeur de x était 7 avant opération, elle sera de 9 après...
Les autres opérateurs du même type sont les suivants :

Opérateur Action Exemple & Equivalent


Additionne deux valeurs et stocke le résultat
+= x+=y ≡ x=x+y
dans la variable de gauche.
-= Soustrait deux valeurs et stocke le résultat dans x-=y ≡ x=x-y

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 32


PRINCIPES DE PROGRAMMATION

Opérateur Action Exemple & Equivalent


la variable.
Multiplie deux valeurs et stocke le résultat dans
*= x*=y ≡ x=x*y
la variable.
Divise deux valeurs et stocke le résultat dans la
/= x/=y ≡ x=x/y
variable.
Divise deux valeurs entières et stocke le reste
%= x%=y ≡ x=x%y
dans la variable

Ce type d'opérateur permet de facilement augmenter ou diminuer d'une unité une


variable. Ces opérateurs sont très utiles pour des structures telles que des boucles, qui ont
besoin d'un compteur (variable qui augmente de un en un).

Opérateur Action Exemple & Equivalent


++ Augmente d’une unité le contenu de la variable. x++ ≡ x=x+1
-- Diminue d’une unité le contenu de la variable. x-- ≡ x=x-1

Opérateur Dénomination Action


== Opérateur d'égalité Compare 2 valeurs et vérifie leur égalité
Vérifie qu'une variable est différente
!= Opérateur de différence
d'une valeur
Opérateur d'infériorité Vérifie qu'une variable est inférieure ou
<
stricte égale à une valeur
Vérifie qu'une variable est inférieure ou
<= Opérateur d'infériorité
égale à une valeur
Opérateur de supériorité Vérifie qu'une variable est strictement
>
stricte supérieure à une valeur
Vérifie qu'une variable est supérieure ou
>= Opérateur de supériorité
égale à une valeur

Ce type d'opérateur permet de vérifier si plusieurs conditions sont vraies :

Université IBNZOHR – Faculté des Sciences - Agadir 33


INTRODUCTION AU LANGAGE C/C++

Opérateur Dénomination Action Syntaxe


Vérifie qu'une des conditions ((condition1)||(condition2))
|| OU inclusif
est réalisée
Vérifie que toutes les
&& ET logique ((condition1)&&(condition2))
conditions sont réalisées
Inverse l'état d'une variable
booléenne (retourne la valeur
! NON logique (!condition)
1 si la variable vaut 0, 0 si elle
vaut 1)

/* Inclusion des bibliothèques*/


# include <nom d’une bibliothèque>
# include <nom d’une bibliothèque>
.
.
/*Définition des constantes et variables globales*/
Définition des constantes globales
Définition des variables globales
/* Déclaration des fonctions*/
Définition de la 1ère fonction
{
Instructions ;
}
.
.
Définition de la nième fonction
{
Instructions ;
}
Définition de la fonction principale
{
Instructions ;
}

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 34


PRINCIPES DE PROGRAMMATION

On peut insérer des commentaires n'importe où dans un programme C/C++ à l'aide


des délimiteurs /* et */. Les commentaires permettent de rendre les programmes plus
lisibles.

On les appelle directives de préprocesseur. Ce sont des lignes qui seront lues par
un programme appelé préprocesseur, un programme qui se lance au début de la
compilation.
Le mot "include" en anglais signifie "inclure" en français. Ces lignes demandent
d’inclure des fichiers spéciaux (appelés Bibliothèques) au programme, c’est-à-dire
d’ajouter des fichiers pour la compilation.
La plupart des «instructions» utilisées dans le programme sont incluses dans des
bibliothèques. Pour pouvoir les utiliser, il faut inclure ces bibliothèques dans votre
programme.

Comme c’est montré dans la structure ci-dessus, un programme C/C++ comprend


plusieurs blocs appelés fonctions. Les variables et/ou constantes peuvent être déclarées
dans ces fonctions ou en dehors.
Si elles sont déclarées dans une fonction, elles ne peuvent être utilisées que par
celle-ci et elles seront appelées Variables/Constantes Locales. Par contre, si elles sont
déclarées après l’inclusion des bibliothèques, elles pourront être utilisés par toutes les
fonctions du programme et elles seront appelées Variables/Constantes Globales.
A l’inverse d’une variable, une constante est une variable qui reçoit une valeur initiale
qu’on ne peut modifier dans le programme.

Un programme en langage C/C++ est constitué de fonctions : ce sont des ensembles


d’instructions compris entre le mot «Début», représenté par «{» et le mot «Fin»,
représenté par «}».
Nous verrons un peu plus loin dans ce cours l’utilisation des fonctions d’une façon
plus détaillée.
La dernière fonction à être déclarée est la fonction principale, appelée «main()». Elle
correspond à l'algorithme général et utilise les autres fonctions qui sont définies dans le
programme C/C++.

Université IBNZOHR – Faculté des Sciences - Agadir 35


INTRODUCTION AU LANGAGE C/C++

Un type de données définit l’ensemble de valeurs qu’une variable peut prendre.


Chaque variable dans un programme doit être associé à un, et un seul, type de données.
Un type de données en C/C++peut être structuré ou simple. Un type simple peut être
défini par l’utilisateur ou standard (définit par C/C++).

Ces types sont valables en C/C++.

Le tableau ci-dessous énumère les différents types Entiers :

Type de donnée Signification Taille (en octets) Plage de valeurs acceptée


short int Entier court 2 -32 768 à 32 767
unsigned short int Entier court non signé 2 0 à 65 535
int Entier 4 -2 147 483 648 à 2 147 483 647
unsigned int Entier non signé 4 0 à 4 294 967 295
long int Entier long 4 -2 147 483 648 à 2 147 483 647
unsigned long int Entier long non signé 4 0 à 4 294 967 295

Le type «unsigned» (non signé) ne peut stocker que des nombres positifs. Pour
l’utiliser, il suffit de l’écrire avant le type entier.

C/C++ met à la disposition de l’utilisateur quatre types prédéfinis pour les nombres
réels que l’on nomme aussi les nombres à virgule flottante.
Le tableau ci-dessous énumère les différents types Réel :

Type de donnée Signification Taille (en octets) Plage de valeurs acceptée


float Flottant (réel) 4 3.4*10-38 à 3.4*1038
double Flottant double 8 1.7*10-308 à 1.7*10308
long double Flottant double long 10 3.4*10-4932 à 3.4*104932

Un nombre à virgule flottante est un nombre à virgule, il peut toutefois être représenté
de différentes façons :
un entier décimal : 9874
un nombre comportant un point (et non une virgule) : 6 543.21
une fraction : 56/12

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 36


PRINCIPES DE PROGRAMMATION

un nombre exponentiel, c'est-à-dire un nombre (éventuellement à virgule) suivi de la


lettre e (ou E), puis d'un entier correspondant à la puissance de 10 (signé ou non,
c'est-à-dire précédé d'un + ou d'un -) :
En réalité, les nombres réels sont des nombres à virgule flottante, c'est-à-dire un
nombre dans lequel la position de la virgule n'est pas fixe.
Un nombre à virgule flottante est composé de deux parties:
Un exposant.
Une mantisse.

Remarque

Le «E» est l’abréviation de « fois dix puissance ».

Exemple

Le nombre 12.3452 peut être réécrit de plusieurs manières:

Forme algébrique Forme informatique


1.23452 x 101
0.123452 x 102
12.3452 x 100
123.452 x 10–1
1234.52 x 10–2
12345.2 x 10–3

La précision des nombres réels est approchée. Elle dépend du nombre de positions
décimales, suivant le type de réel elle sera au moins :
de 6 chiffres après la virgule pour le type float

Université IBNZOHR – Faculté des Sciences - Agadir 37


INTRODUCTION AU LANGAGE C/C++

de 15 chiffres après la virgule pour le type double


de 17 chiffres après la virgule pour le type long double

C’est un type scalaire. Le type CHAR, qui occupe un octet dans la R.A.M, s’applique
à tous les caractères du jeu de caractères ASCII. Une variable ou une constante de ce
type peut recevoir un caractère de ce jeu. Celui-ci comprend les chiffres, les lettres
majuscules et minuscules, les caractères de ponctuation, les caractères graphiques, les
caractères de contrôle et les caractères spéciaux.
Le tableau ci-dessous énumère les différents types Caractère :

Type de donnée Signification Taille (en octets) Plage de valeurs acceptée


char Caractère 1 -128 à 127
unsigned char Caractère non signé 1 0 à 255

En réalité, le type CHAR est un type entier. En effet, une variable de type CHAR
stocke la valeur ASCII d'un caractère, c'est-à-dire un nombre entier.
Si jamais on désire par exemple stocker la lettre B (son code ASCII est 66), on pourra
définir cette donnée soit par le nombre 66, soit en notant 'B' où les apostrophes simples
signifient «code ascii de...».

Valable uniquement en C++.


C’est le type bool. Toute variable de ce type peut prendre 2 valeurs :
true, qui signifie vrai.
false, qui signifie faux.

La valeur d’une constante est fixée au moment de l’écriture du programme et reste la


même tout au cours de l’exécution du programme. La déclaration des constantes se fait de
la manière suivante:

CONST type variable=valeur ;

Exemple
1. Const int A=5;
Déclare une constante appelée A de type entier ayant pour valeur 5.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 38


PRINCIPES DE PROGRAMMATION

2. Const bool A=true;


Déclare une constante appelée A de type booléen ayant pour valeur true.

Dans un programme, un identificateur est toujours déclaré comme variable lorsqu’il


doit prendre différentes valeurs pendant le déroulement du programme. La déclaration se
fait de la manière suivante:

type variable(s)=valeur(s) d’initialisation ;

1. int A;
Déclare une variable appelée A de type entier.

2. int A=5;
Déclare une variable appelée A de type entier ayant pour valeur initiale 5.

3. float A,B,C;
Déclare 3 variables A,B & C de type réel.

4. float A=6.3,B=5.9,C=63.2;
Déclare 3 variables A,B & C de type réel initialisées respectivement aux valeurs 6.3,
5.9 & 63.2.

5. char A=’B’;
Déclare une variable appelée A de type Caractère ayant pour valeur initiale 66 (le
code ASCII de B).

Elle permet de stocker une valeur dans une variable. Sa syntaxe est la suivante :

Variable=valeur

1. A=5;
Affecte la valeur 5 à la variable A.
2. A=’B’;
Affecte la valeur ‘B’ à la variable A.
3. A=B;
Affecte la valeur de la variable B à la variable de A.

Université IBNZOHR – Faculté des Sciences - Agadir 39


INTRODUCTION AU LANGAGE C/C++

4. A=B*C;
Calcule le produit des valeurs des variables B & C et affecte le résultat à la variable A.
5. A+=B;
Calcule la somme des valeurs des variables A & B et affecte le résultat à A.

C’est l’instruction printf. En réalité, c’est une fonction faisant partie de la bibliothèque
stdio.h. Sa syntaxe est la suivante :

printf(“Chaîne de caractères“ , Var1,...,Varn)

Chaîne de caractères : peut-être :


Une chaîne à afficher directement à l’écran :
Exemple : printf("Langage C") : affichera la chaîne « Langage C » à l’écran.
Des commandes de formatage définissant comment les autres valeurs des
variables passées à printf vont être affichées.

Une commande de formatage est composée du caractère % (qui est une balise de
positionnement) suivi d'une spécification de traduction dont la syntaxe est :

%[indicateur][largeur][.précision][modification]type

Le champ «Type» est obligatoire. Le tableau ci-dessous décrit les différents types :

Type signification
%c caractère
%s chaîne de caractères
%d nombre entier en décimal
%e nombre réel sous la forme mantisse/exposant [-]m.nnnnnne[+|-]xx
%E nombre réel sous la forme mantisse/exposant en majuscule [-]m.nnnnnnE[+|-]xx
%f nombre réel sous la forme [-]mmm.nnnnnn
%g nombre réel sous la forme la plus courte entre les types %e et %f
%G nombre réel sous la forme la plus courte entre les types %E et %f
%o nombre entier en octal
%p pointeur ou adresse de la valeur numérique

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 40


PRINCIPES DE PROGRAMMATION

Type signification
%u nombre entier non signé en décimal
%x nombre entier en hexadécimal
%X nombre entier en hexadécimal ; lettres affichées en majuscules

Le champ «Indicateur» est facultatif. Le tableau ci-dessous décrit ses différents


paramètres :

Indicateur signification
- alignement à gauche pour la largeur donnée
+ affichage forcé du signe de la valeur numérique
espace insertion d'un caractère d'espacement si la valeur numérique est positive
affichage précédé de 0, 0x ou 0X avec les types respectifs o, x ou X
force l'affichage du point décimal avec les types e, E et f même si la partie décimale
# ne contient que des zéros
force l'affichage du point décimal avec les types g et G sans supprimer les zéros
inutiles

Le champ «Largeur» est facultatif. Le tableau ci-dessous décrit ses différents


paramètres :

Largeur signification
nombre minimum de caractères à afficher ; ajout de caractères d'espacement si la
nombre
valeur est plus «courte» que l'affichage demandé
idem ci-dessus ; ajout de caractères 0 si la valeur est plus «courte» que l'affichage
0nombre
demandé
la largeur n'est pas spécifiée dans la chaîne control mais par un entier précédent
*nombre
l'argument à afficher

Le champ «Précision» est facultatif. Le tableau ci-dessous décrit ses différents


paramètres :
Précision signification
pour les types d, i, o, u, x et X : nombre minimum de chiffres décimaux à afficher ;
ajout de caractères d'espacement si la valeur est plus «courte» que l'affichage
demandé
.nombre pour les types e, E et f : nombre de chiffres à afficher après le point décimal
pour les types g et G : nombre maximum de chiffres significatifs à afficher
pour le type s : nombre maximum de caractères à afficher
pour le type c : pas d'effet

Université IBNZOHR – Faculté des Sciences - Agadir 41


INTRODUCTION AU LANGAGE C/C++

Le champ «modification» est facultatif. Le tableau ci-dessous décrit ses différents


paramètres :

Modification signification
h argument traité comme un entier court (short)
argument traité comme un entier long pour les types entiers (long) ou comme un
l
réel double pour les types réels (double)
L argument traité comme un réel long double

Remarque

Vous pouvez intégrer dans la chaîne de caractères à afficher avec printf des
caractères spéciaux appelés séquences d’échappement. Ce sont des caractères
non imprimables tels que la tabulation, le saut de page, le saut de ligne et les
caractères utilisés dans la chaine elle-même tels que \, ? ‘….

Le tableau ci-dessous décrit les différents caractères spéciaux pouvant être intégrés
dans la chaîne :

\n NL(LF) nouvelle ligne


\t HT tabulation horizontale
\v VT tabulation verticale (descendre d'une ligne)
\a BEL sonnerie
\b BS curseur arrière
\r CR retour au début de ligne
\f FF saut de page
\\ \ trait oblique (back-slash)
\? ? point d'interrogation
\' ' apostrophe
\" " guillemets
\0 NUL fin de chaîne

Exemples

1. int a=5 ; printf("Valeur de la variable a = %d",a) ;


Affiche le message «Valeur de la variable a = » suivi du contenu de la variable a (5)
sous forme entière décimale (%d).

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 42


PRINCIPES DE PROGRAMMATION

2. int a=5,b=8 ; printf("Valeur de a = %d\t Valeur de b = %d\n",a,b) ;


Affiche le message «Valeur de a = » suivi du contenu de la variable a (5) sous forme
entière décimale (%d), insère le caractère «Tabulation» (\t), puis le message «Valeur de b
= » suivi du contenu de la variable a (8) sous forme entière décimale (%d) et passe à la
ligne suivante (\n).
3. float a=15,34; printf("Valeur de a = %f",a) ;
Affiche le message «Valeur de a = » suivi du contenu de la variable a (15.340000)
sous forme réelle (%f), avec 6 chiffres après la virgule.
4. float a=15,34; printf("Valeur de a = %10.4f",a) ;
Affiche le message «Valeur de a = » suivi du contenu de la variable a ( 15.3400)
sous forme réelle (%f), avec une largeur de 10 caractères et 4 chiffres après la virgule (Le
nombre sera précédé de 3 espaces).
5. char a[10]= "Langage C" ; printf("Valeur de a = %s",a) ;
Affiche le message «Valeur de a = » suivi du contenu de la variable a (Langage C)
sous forme chaîne de caractères (%s).
6. char a[10]= "Langage C" ; printf("Valeur de a = %.4s",a) ;
Affiche le message «Valeur de a = » suivi du contenu de la variable a (Lang) sous
forme chaîne de caractères (%s), en n’affichant que les quatre 1ers caractères.
7. char a= ‘C’ ; printf("Valeur de a = %.c",a) ;
Affiche le message «Valeur de a = » suivi du contenu de la variable a (C) sous forme
caractère (%c).

En C++, on utilise une nouvelle instruction de sortie appelée cout. En réalité, cout
est nommé flux ou flot de sortie.
Un programme qui utilise les flux standard d'entrée-sortie doit comporter la directive
#include <iostream.h>
Ou bien, si vous utilisez un compilateur récent et que vous suivez de près les
recommandations de la norme 4 :
#include <iostream>
using namespace std;
Les écritures et lectures sur ces unités ne se font pas en appelant des fonctions, mais
à l'aide des operateurs <<, appelé operateur d'injection (injection de données dans un
flux de sortie), et >>, appelé operateur d'extraction (extraction de données d'un flux
d'entrée). Or, le mécanisme de la surcharge des opérateurs permet la détection des types
des données à lire ou à écrire. Ainsi, le programmeur n'a pas à s'encombrer avec des
spécifications de format.

Université IBNZOHR – Faculté des Sciences - Agadir 43


INTRODUCTION AU LANGAGE C/C++

La syntaxe d'une injection de donnée sur la sortie standard cout est :

cout << Valeur 1 << Valeur 2…<< Valeur n

Exemples

1. cout << "Ceci est un exemple de cout"


Permet d’afficher le message «Ceci est un exemple de cout».
2. Int a=6 ; cout << "Valeur de a = " << a ;
Permet d’afficher le message «Valeur de a = », suivi du contenu de la variable a.
Remarquez que le format d’affichage n’a pas été spécifié comme pour printf.
3. cout << "Ceci est un exemple de cout" << "\n"
Permet d’afficher le message «Ceci est un exemple de cout» avec le passage à une
nouvelle ligne. Vous pouvez remplacer la chaîne "\n" par endl.

L’instruction de lecture de base est la fonction scanf. Elle appartient à la bibliothèque


<stdio.h>. sa syntaxe est la suivante :

scanf("Fromats",&Var1,&Var2,…,&Varn)

Formats : indiquent les différents formats des valeurs à saisir. La syntaxe d’un
format est exactement la même que celle pour printf.
&Var : est l’adresse de la variable qui reçoit la valeur lue par scanf.

Exemples

1. Int a ; scanf("%d",&a) ;
Permet de saisir au clavier une valeur de type entier qui sera affectée à la case ayant
pour adresse mémoire celle de la variable a.
2. Int a,b ; float c ; scanf("%d%d%f",&a,&b,&c) ;
Permet de saisir au clavier 3 valeurs, dont les deux premières sont entières et la
troisième réelle, qui seront affectées respectivement aux cases mémoire ayant pour
adresse des variables a, b et c.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 44


PRINCIPES DE PROGRAMMATION

En C++, on utilise une nouvelle instruction de lecture appelée cin. En réalité, cin est
nommé flux ou flot de sortie.
Un programme qui utilise les flux standard d'entrée-sortie doit comporter la directive
#include <iostream.h>
Ou bien, si vous utilisez un compilateur récent et que vous suivez de près les
recommandations de la norme 4 :
#include <iostream>
using namespace std;
Comme pour cout, cin utilisera l’opérateur d’extraction >> sans préoccuper des
formats des données à lire au clavier. Sa syntaxe est la suivante :

cin >> Var 1 >> Var 2…>> Var n

Exemples

1. int a ; cin >> a ;


Permet de lire au clavier une valeur qui sera affectée à la variable a.
2. int a ; char b[10] ; cin >> a >> b ;
Permet de lire au clavier deux valeurs (l’une entière et l’autre une chaîne de
caractères) qui seront affectées respectivement aux variables a et b.

Exemple 1

Faire le programme C/C++ qui permet de calculer et d’afficher la somme et le produit


de deux nombres réels saisis au clavier (En utilisant scanf et printf).

Université IBNZOHR – Faculté des Sciences - Agadir 45


INTRODUCTION AU LANGAGE C/C++

La 1ère ligne permet d’insérer un commentaire.


La 2ème ligne permet d’inclure la bibliothèque stdio.h pour pouvoir utiliser les
fonctions printf et scanf.
La 3ème ligne permet d’inclure la bibliothèque stdlib.h pour pouvoir utiliser la fonction
system.
La 4ème ligne marque le début du programme proprement dit. C’est la fonction main()
(adjectif anglais signifiant «principale») : c’est le point d’entrée du programme en ce
sens que le programme commence au début de main et s’arrête à la fin de celle-ci.
La 5ème ligne marque le début du bloc de la fonction main «{» .
La 6ème ligne permet de déclarer les variables x, y, s & p de type réel en les
initialisant à la valeur 0.
La 7ème ligne permet de faire appel à la commande cls de MS-DOS qui permet
d’effacer l’écran.
La 8ème ligne permet d’afficher le message "Donnez la valeur du 1er nombre : ".
La 9ème ligne permet de lire au clavier une valeur qui sera affectée à la variable x.
La 10ème ligne permet d’afficher le message "Donnez la valeur du 2eme nombre : ".
La 11ème ligne permet de lire au clavier une valeur qui sera affectée à la variable y.
La 12ème ligne permet de calculer la somme et le produit des 2 valeurs des variables
x et y, puis les résultats seront affectés respectivement aux variables s et p.
La 13ème ligne permet d’afficher le message "La somme des 2 nombres est :", la
valeur de la variable s sur 10 positions et deux décimales (10.2) et un retour à la
ligne (\n).

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 46


PRINCIPES DE PROGRAMMATION

La 14ème ligne permet d’afficher le message "Le produit des 2 nombres est :", la
valeur de la variable p sur 10 positions et deux décimales (10.2) et un retour à la
ligne (\n).
La 15ème ligne permet de faire appel à la commande pause de MS-DOS qui permet
de marquer une pause en affichant le message «Appuyez sur une touche pour
continuer»
La 16ème ligne marque la fin du bloc de la fonction main «}»

L’écran ci-dessous montre un exemple d’exécution du programme :

Exemple 2

Faire le programme C/C++ qui permet de permuter les valeurs de 2 variables x et y


(En utilisant cin et cout).

Université IBNZOHR – Faculté des Sciences - Agadir 47


INTRODUCTION AU LANGAGE C/C++

La 4ème ligne permet d’inclure la bibliothèque iostream.h pour pouvoir utiliser cin et
cout.
La 9ème et la 11ème ligne permettent d’afficher le message "Donnez la valeur de la
variable … :".
La 10ème et la 12ème ligne permettent de saisir au clavier les valeurs qui seront
affectées respectivement aux variables x et y.
La 13ème ligne permet d’échanger les valeurs des variables x et y.
La 14ème et la 15ème ligne permettent d’afficher le message "La nouvelle valeur de la
variable… : ", la valeur de la variable et un saut de ligne.

L’écran ci-dessous montre un exemple d’exécution du programme :

Sa syntaxe est la suivante :

if (condition)
Instruction(s) 1 ;
[else
Instruction(s) 2 ;]
Instruction X ;

Cette instruction fonctionne de la manière suivante : La machine teste « Condition » :


Si celle-ci est juste (Vraie), elle exécutera «Instruction(s)1», ignorera
«Instruction(s)2» (si else existe) et passe à l’instruction qui suit le «if» (c'est-à-dire
«Instruction X»).

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 48


PRINCIPES DE PROGRAMMATION

Si celle-ci est fausse, la machine ignorera «Instruction(s)1», exécutera


«Instruction(s)2» (si else existe), et passe à l’instruction qui suit le «if» (c'est-à-dire
«Instruction X»).

Remarque

S’il y’a plusieurs instructions à exécuter devant if et/ou else, il faut les mettre dans
un bloc entre «{» (Début) et «}» (fin).

Exemple 1

Faire le programme C/C++ qui permet d’afficher le maximum de deux nombres réels.

L’écran ci-dessous montre un exemple d’exécution du programme :

Université IBNZOHR – Faculté des Sciences - Agadir 49


INTRODUCTION AU LANGAGE C/C++

Exemple 2

Faire le programme C/C++ qui permet d’afficher le maximum de trois nombres réels.

L’écran ci-dessous montre un exemple d’exécution du programme :

Remarque

Il est possible de faire un test avec une structure beaucoup moins lourde grâce à la
structure suivante :

(condition) ? Instruction si vrai : Instruction si faux

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 50


PRINCIPES DE PROGRAMMATION

Exemple

Faire le programme C/C++ qui permet d’afficher le maximum de 4 nombres réels.

Comme s’est indiqué dans la partie «Algorithmes et Organigrammes», if…else…


peuvent être imbriquées.

Exemple

Faire le programme C/C++ qui permet de résoudre une équation du second degré :
Si Δ < 0, Afficher le message « Pas de solution dans l’ensemble ℜ».
Si Δ = 0, Afficher le message «1 seule solution» et sa valeur (x=-b/2a).
Si Δ > 0, Afficher le message «2 seules solutions» et leurs valeurs :
−𝑏 ± �∆
2𝑎

Université IBNZOHR – Faculté des Sciences - Agadir 51


INTRODUCTION AU LANGAGE C/C++

Cette instruction peut remplacer souvent if…else.. imbriquées. Sa syntaxe est la


suivante :

switch (Identificateur)
{
case Val1 : Instruction(s) 1 ; break ;
case Val2 : Instruction(s) 2 ; break ;
.
.
case Valn : Instruction(s) n ; break ;
[default : Instruction(s) x ; break ;]
}

Identificateur : une variable ou une expression qui ne peut être que de type entier
(char, int, long).
Val1, Val2,…,Valn : sont des constantes de type entier.
default : n’est pas obligatoire.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 52


PRINCIPES DE PROGRAMMATION

Cette instruction fonctionne de la manière suivante :


La valeur de «Identificateur» est comparée à Val1 :
Si les deux valeurs sont identiques, l’ensemble des Instruction(s) 1 est exécuté.
L’instruction break doit terminer chaque ensemble d’instructions : elle permet de
quitter switch pour ne pas vérifier les autres cas (qui sont évidement faux).
Si les deux valeurs ne sont pas identiques, on passe au 2ème cas pour comparer la
valeur de «Identificateur» à Val2 et ainsi de suite jusqu’au dernier cas.
Si aucune valeur n’est identique à celle de «Identificateur», et si default est
présent, ce sont les instructions X qui seront exécutées.

Exemple 1

Faire le programme C/C++ qui permet d’afficher la forme littérale d’un chiffre compris
entre 1 et 4.

Remarque

Lorsqu'une même séquence d'instructions est exécutée pour plusieurs cas qui
se suivent, il suffit de laisser se suivre les clauses "case" sans leur attribuer
d'instructions (même pas "break") sauf à la dernière.

Université IBNZOHR – Faculté des Sciences - Agadir 53


INTRODUCTION AU LANGAGE C/C++

Exemple 2

Faire le programme C/C++ qui permet d’afficher l’un des messages suivants selon la
valeur d’une note sur 10 saisie au clavier :
Si 3>=la note (nt)>=0, afficher le message «Nul ».
Si la note (nt) =4, afficher le message «Médiocre».
Si la note (nt) =5, afficher le message «Passable».
Si la note (nt) =6 , 7 ou 8, afficher le message «Bien».
Si la note (nt) = 9 ou 10, afficher le message «Très Bien».
Si la note (nt) < 0 ou >10, afficher le message «Note erronée».

Comme c’est vu dans la partie «Algorithmes et organigrammes», il existe 3 types


de boucles, qui sont :

Sa syntaxe est la suivante :

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 54


PRINCIPES DE PROGRAMMATION

for(Vc=Vi ;Vc<=Vf ;Vc=Vc+P)


[{]
Instruction(s);
[}]
Instruction X ;

Vc : Variable de contrôle ou Compteur.


Vi : Valeur initiale de Vc.
Vf : Valeur finale de Vc.
P : Pas de l’incrémentation.

Cette boucle fonctionne de la manière suivante :


Le programme affecte à Vc la valeur Vi (cette instruction est exécutée une fois et
une seule au début de l’exécution de for).Ensuite, le programme vérifie (teste) si la valeur
de Vc <= Vf :
Si c’est juste, le programme va exécuter les instructions entre le mot «{» et «}»
(Corps de la boucle), incrémente la valeur de Vc de +P (c'est-à-dire ajoute P à
l’actuelle valeur de Vc puis affecte la nouvelle valeur à Vc) et teste à nouveau la
condition Vc<=Vf…
Si c’est faux, le programme ignore les instructions du corps de la boucle et passe à
l’instruction qui suit la boucle for.

Sa syntaxe est la suivante :

while(Condition)
[{]
Instruction(s);
[}]
Instruction X ;

Cette boucle fonctionne de la manière suivante :


Le programme teste la condition :

Université IBNZOHR – Faculté des Sciences - Agadir 55


INTRODUCTION AU LANGAGE C/C++

Si elle est juste, il exécutera les instructions du corps de la boucle et revient pour
tester la condition à nouveau…
Si elle est fausse, il ignorera les instructions du corps de la boucle et passera à
l’instruction qui suit la boucle.

Sa syntaxe est la suivante :

do
[{]
Instruction(s);
[}]
while (Condition) ;

Cette boucle fonctionne de la manière suivante :


Le programme exécute pour la première fois les instructions du corps de la boucle,
puis teste la condition de while :
Si celle-ci est juste, le programme revient au début de la boute et exécute à nouveau
les instructions du corps de la boucle, puis teste la condition de while …
Si celle-ci est fausse, le programme quitte la boucle et passe à l’instruction qui la suit.

Remarque

S le corps de la boucle n’est composée qu’une d’une seule instruction, { & }


deviennent optionnels.

Exemple 1

Faire le programme C/C++ qui permet d’afficher la somme de 5 nombres réels


quelconques (en utilisant la boucle while).

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 56


PRINCIPES DE PROGRAMMATION

Exemple 2

Faire le programme C/C++ qui permet d’afficher la somme de N nombres réels


quelconques (en utilisant la boucle do …while).

Exemple 3

Faire le programme C/C++ qui permet d’afficher la moyenne de N nombres réels


quelconques (en utilisant la boucle for).

Université IBNZOHR – Faculté des Sciences - Agadir 57


INTRODUCTION AU LANGAGE C/C++

Remarque

Il existe deux instructions qui peuvent être utilisées à l’intérieur des 3 boucles :
break : permet de quitter une boucle.
continue : permet de continuer l’exécution de la boucle en allant directement
au tour suivant.

Exemple 4

Faire le programme C/C++ qui permet d’afficher les racines carrées d’un certain
nombre de valeurs réelles saisies au clavier (leur nombre n’est pas connu à l’avance ; pour
ce faire, on supposera que lorsque la valeur 0 sera saisie, le programme s’arrêtera : 0 sera
considéré comme le critère d’arrêt du programme).
Si la valeur saisie est négative, le calcul de la racine carrée doit être ignoré et passer
à la saisie du nombre suivant.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 58


PRINCIPES DE PROGRAMMATION

La fonction qui permet de calculer la racine carrée est sqrt (voir linge 19) et fait appel
à la bibliothèque math.h (voir ligne 3).
break permet de quitter la boucle si la valeur de x est égale à 0 (voir ligne 15).
continue permet de sauter le reste du corps de la boucle et revenir à son début
lorsque la variable x est négative (voir ligne 17).

Université IBNZOHR – Faculté des Sciences - Agadir 59


LES FONCTIONS EN C/C++

Une fonction est un programme qui exécute des instructions et renvoie un résultat.
Elle a besoin des valeurs sur lesquelles va être exécuté le programme de la fonction.
Ces valeurs sont appelées Paramètres en entrée ou Arguments.
Le schéma suivant explique le principe d’utilisation d’une fonction :

Argument 1

Argument 2 Fonction Résultat

Argument n

Entrées Sortie
Il existe deux types de fonctions :
Les fonctions standard : définies par le langage C/C++. Elles sont incluses dans des
bibliothèques. Par exemple, la fonction sqrt() (qui permet de calculer la racine carrée
d’un nombre) est une fonction de la bibliothèque math.h.
Les fonctions définies par l’utilisateur : créées par l’utilisateur dans le programme.

La syntaxe de déclaration d’une fonction est la suivante :

type nom de la fonction(Paramètres en entrée)


{
Instruction (s);
Return Résultat ;
}

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 60


PRINCIPES DE PROGRAMMATION

Type : représente le type de valeur que la fonction est sensée retourner (char, int,
float...). Si aucun type de donnée n'est précisé, (le type int est pris par défaut
Le nom de la fonction suit les mêmes règles que les noms de variables :
le nom doit commencer par une lettre
un nom de fonction peut comporter des lettres, des chiffres et les caractères _
et & (les espaces ne sont pas autorisés !)
le nom de la fonction, comme celui des variables est sensible à la casse
(différenciation entre les minuscules et majuscules)
Les arguments sont facultatifs, mais s'il n'y a pas d'arguments, les parenthèses
doivent rester présentes

Remarque

Il existe des fonctions avec un ou plusieurs paramètres en entrée et d’autres sans


paramètres ; dans ce cas-là, elles seront déclarées de la manière suivante :

void type nom de la fonction()


{
Instruction (s);
}

Remarque

Une fonction doit être déclarée avant la fonction main().

Université IBNZOHR – Faculté des Sciences - Agadir 61


LES FONCTIONS EN C/C++

Exemple 1

Faire le programme C/C++ qui permet d’afficher la somme de deux nombres entiers
saisis au claviers et passés comme paramètres à une fonction somme().

Deux fonctions sont déclarées dans ce programme (déclarées et décrites avant la


fonction main()):
La fonction saut_de_ligne() : de type void (vide) car elle est sans paramètres
d’entrée et sans retour de résultat (Ligne N° 6). Elle permet d’afficher une
ligne vide (saut de ligne) (Ligne N° 8).
La fonction somme() : (Ligne N° 10) de type entier (long) est déclarée avec
deux paramètres en entrée (x & y de type entier (long)). Elle retourne le
résultat de la somme dans la variable s (Ligne N° 14).
Dans la fonction principale main(), la fonction somme() est appelée en lui passant
deux paramètres a & b, du même type que ses paramètres d’entrée (x & y). le
résultat retourné par cette fonction est affectée à la variable ss (Ligne N° 21).

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 62


PRINCIPES DE PROGRAMMATION

À la ligne N° 22, on a un exemple d’appel d’une fonction de type void (vide) : aucun
paramètre ne lui est passé et pas de retour de résultat.

Le prototype d'une fonction est une description d'une fonction qui est définie plus loin
dans le programme. On place donc le prototype en début de programme (avant la fonction
principale main()).
Cette description permet au compilateur de «vérifier» la validité de la fonction à
chaque fois qu'il la rencontre dans le programme, en lui indiquant :
Le type de valeur renvoyée par la fonction
Le nom de la fonction
Les types d'arguments
Contrairement à la définition de la fonction, le prototype n'est pas suivi du corps de la
fonction (contenant les instructions à exécuter), et ne comprend pas le nom des
paramètres (facultatifs) (seulement leur type). Un prototype de fonction ressemble donc à
ceci :

type nom de la fonction(Type(s) des Paramètres en entrée) ;

Université IBNZOHR – Faculté des Sciences - Agadir 63


LES FONCTIONS EN C/C++

Les prototypes des fonctions saut_de_ligne() et somme() sont déclarées


respectivement aux lignes 4 et 5. Leur déclaration se termine toujours par un point-
virgule. Pour la fonction somme(), seuls les types de ses paramètres en entrée sont
déclarés.
Les fonctions elles-mêmes sont définies après la fonction main() (Lignes 16 & 20).

En C++, on peut affecter des valeurs par défaut à certains paramètres. On ne sera
plus obligé d’indiquer à chaque fois tous les paramètres lorsqu’on appelle une fonction.
Dans l’exemple qui suit (Convertit une heure donnée en secondes), on est obligé de
passer à la fonction «conversion_secondes» les paramètres «heures», «minutes» et
«secondes».

Il se peut qu’on ait uniquement la valeur des heures ou les valeurs des heures et des
minutes. Dans ce cas, seule la valeur des heures ou des heures et des minutes peuvent
être passées. Pour ce faire, le prototype de la fonction doit être déclaré de la façon
suivante :
int conversion_secondes(int h,int m,int s=0) : pour passer uniquement les heures
et les minutes.
int conversion_secondes(int h,int m=0,int s=0) : pour passer uniquement les
heures.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 64


PRINCIPES DE PROGRAMMATION

Règles à retenir pour les valeurs par défaut :


Seul le prototype doit contenir les valeurs par défaut.
Les valeurs par défaut doivent se trouver à la fin de la liste des paramètres.

Une fonction est définie par 3 paramètres :


Le nom de la fonction.
La liste des paramètres
Le type de retour.
En C, l’identification d’une fonction se fait uniquement sur le nom (Signature de la
fonction). Donc, il est impossible d’avoir deux fonctions qui portent le même nom.
En C++, l’identification d’une fonction se fait sur le nom et les paramètres (Signature
de la fonction). Donc, il est possible d’avoir plusieurs fonctions portant le même nom, à
condition que leurs paramètres soient différents.

Elle consiste à créer des fonctions qui ont le même nom mais qui ont des paramètres
différents ; donc des signatures différentes.

Exemple

Faire le programme qui permet de calculer la somme de deux nombres entiers et de


deux nombres réels.

Solution en C

Université IBNZOHR – Faculté des Sciences - Agadir 65


LES FONCTIONS EN C/C++

En version C, les deux fonctions qui permettent de calculer les sommes portent des
noms différents (somme() & somme1()) car la signature de la fonction porte uniquement
sur le nom de la fonction.
En version C++, les deux fonctions portent le même nom mais les paramètres en
entrée sont de type différent. Donc les deux fonctions ont des signatures différentes.

Solution en C++

Issues de la bibliothèque math.h (sauf abs et labs qui appartiennent à stdlib). Tous
les paramètres et résultats sont du type double; les angles sont indiqués en radians.
Le tableau suivant décrit les différentes fonctions :

Nom &
Description Exemple
syntaxe
abs(x) Retourne la valeur absolue de x (entier) abs(-6)  6
acos(x) Retourne arc cosinus de x acos(1)  0
asin(x) Retourne arc sinus de x asin(1)  1.57
atan(x) Retourne arc tangente de x atan(1)  0,79
cos(x) Retourne le cosinus de x cos(1)  0,54
sin(x) Retourne le sinus de x sin(1)  0,84
cosh(x) Retourne le cosinus hyperbolique de x cosh(1)  1,54

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 66


PRINCIPES DE PROGRAMMATION

Nom &
Description Exemple
syntaxe
sinh(x) Retourne le sinus hyperbolique de x sinh(1)  1.18
tan(x) Retourne la tangente de x tan(1)  1.54
tanh(x) Retourne la tangente hyperbolique de x tanh(1)  0.76
exp(x) Retourne l’exponentielle de x exp(2)  7.39
log(x) Retourne le logarithme népérien de x log(2)  0.6931
log10(x) Retourne le logarithme décimal de x log10(2)  0.301
Retourne le plus petit entier supérieur ou égal
ceil(x) ceil(12.34)  13
au réel x.
fabs(x) Retourne la valeur absolue de x (réel) fabs(-12.34)  12.34
floor(x) Retourne le plus grand entier inférieur au réel x floor(12.34)  12
pow(x,y) Retourne X à la puissance de y. pow(2,4)  16
sqrt(x) Retourne la racine carrée de x. sqrt(16)  4
fmod(x,y) Retourne le reste de la division de x par y. sqrt(12.35,3.5)  1.85
labs(x) Retourne la valeur absolue de x (entier long) labs(-120)  120
Retourne la valeur de x (double) multipliée par
ldexp(x,e) ldexp(3,4)  48
2 à la puissance y (int).
Retourne la valeur de x (float) multipliée par
ldexpf(x,e) ldexpf(3,4)  48
2 à la puissance y (int).
Retourne la valeur de x (long double) multipliée
ldexpl(x,e) ldexpl(3,4)  48
par 2 à la puissance y (int).

Université IBNZOHR – Faculté des Sciences - Agadir 67


LES POINTEURS EN C/C++

Chaque case de la mémoire vive est référencée par son adresse et la valeur qu’elle
contient. Une case ne peut contenir qu’une et seule valeur.
Quand on déclare une variable initialisée dans un programme C, par exemple :

int a = 10;

Le programme demande au système d'exploitation (Windows par exemple) la


permission d'utiliser un peu de mémoire. Le système d'exploitation répond en indiquant à
quelle adresse en mémoire il vous laisse le droit d'inscrire votre nombre. C'est d'ailleurs
justement un des rôles principaux d'un système d'exploitation : on dit qu'il alloue de la
mémoire aux programmes.

La valeur 10 a été inscrite quelque part en mémoire, disons par exemple à l'adresse
n°4655. Ce qu'il se passe (et c'est le rôle du compilateur) c'est que le mot "a" dans votre
programme est remplacé par l'adresse 4655 à l'exécution. Cela fait que, à chaque fois que
vous avez tapé le mot «a» dans votre code source, cela est remplacé par 4655, et votre
ordinateur voit ainsi à quelle adresse il doit aller chercher en mémoire.
L’exemple suivant permet d’affecter à la variable «a» la valeur 50, puis affiche
successivement la valeur de «a», les adresses de la variable «a» en hexadécimal et en
décimal.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 68


PRINCIPES DE PROGRAMMATION

Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné.

Un pointeur est une variable qui doit être définie en précisant le type de variable
pointée, de la façon suivante :

type *nom du pointeur

Après avoir déclaré un pointeur il faut l'initialiser. Cette démarche est très importante
car lorsque vous déclarez un pointeur, celui-ci va contenir n’importe quel nombre.
Autrement dit, si vous n'initialisez pas votre pointeur, celui-ci risque de pointer vers une
zone hasardeuse de la mémoire. Un pointeur non initialisé représente un
danger !

POUR INITIALISER UN POINTEUR SUR UNE VALEUR NULLE, TAPEZ :

type *nom du pointeur=NULL

ON PEUT AUSSI INITIALISER UN POINTEUR PAR L’ADRESSE D’UNE VARIABLE DEJA DECLAREE :

type variable ;
type *nom du pointeur=& variable

Université IBNZOHR – Faculté des Sciences - Agadir 69


LES POINTEURS EN C/C++

Exemple

Dans ce programme, on a déclaré une variable «p» qui pointe sur la variable «a»
(Ligne N° 7). Puis, on affiche le contenu de la variable «a» en faisant référence
directement à cette variable (Ligne N° 8) ou en faisant référence à la variable «p» qui
pointe sur celle-ci (Ligne N° 9).

4 points à retenir :
Sur une variable, par exemple la variable «a» :
Si vous faites référence au nom de la variable (a), vous le faites sur sa valeur.
Si vous utilisez un «&» avant le nom de la variable (&a), vous aurez son adresse
dans la mémoire.
Sur un pointeur, par exemple «p» :
Si vous faites référence au nom de la variable (p), vous le faites sur sa valeur
(qui est une adresse !!).
Si vous utilisez un «*» avant le nom de la variable (*p), vous aurez la valeur de la
variable sur laquelle pointe «p».

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 70


PRINCIPES DE PROGRAMMATION

Exemple 1

Faire le programme C/C++ qui permet de calculer le triple d’un nombre entier en
utilisant un pointeur avec une fonction.

Solution 1

La fonction calcul_triple prend un paramètre de type long* (c'est-à-dire un pointeur


sur long). Voici ce qu'il se passe dans l'ordre, en partant du début du main() :
1. Une variable «nombre» est créée dans le main(). On lui affecte la valeur lue au
clavier (6, à l’exécution).

Université IBNZOHR – Faculté des Sciences - Agadir 71


LES POINTEURS EN C/C++

2. On appelle la fonction calcul_triple. On lui envoie en paramètre l'adresse de la


variable «nombre» (calcul_triple(&nombre).
3. La fonction calcul_triple reçoit cette adresse dans «pointeur». À l'intérieur de la
fonction calcul_triple, on a donc un pointeur «pointeur» qui contient l'adresse de la
variable «nombre».
4. Maintenant qu'on a un pointeur sur nombre, on peut modifier directement la variable
nombre en mémoire ! Il suffit d'utiliser «*pointeur» pour désigner la variable
«nombre» Pour l'exemple, on fait un simple calcul : on multiplie la variable
«nombre» par 3.
5. De retour dans la fonction main(), notre nombre vaut maintenant 18 car la fonction
calcul_triple a modifié directement la valeur de nombre.

Solution 2

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 72


PRINCIPES DE PROGRAMMATION

Remarque

On aurait pu écrire une fonction simple qui permet de retourner le triple (avec
«return») sans l’utilisation des pointeurs. Or, ce que montre la solution proposée,
c’est qu’on peut modifier la valeur de plusieurs variables en appelant une seule
fonction ; alors qu’une fonction ne peut retourner qu’un seul résultat. Donc, en
utilisant les pointeurs avec les fonctions, on n’est plus limité à une seule valeur !

Exemple 2

Utilisation d’un pointeur avec la fonction scanf.

Cette fonction a pour rôle de lire ce que l'utilisateur a rentré au clavier et de renvoyer
cela. Pour que la fonction puisse modifier directement le contenu de votre variable afin d'y
mettre la valeur tapée au clavier, elle a besoin de l'adresse de la variable :

int nombre = 0;
scanf("%d", &nombre);

La fonction travaille avec un pointeur sur la variable «nombre», et peut ainsi modifier
directement le contenu de «nombre». On pourrait créer un pointeur qu'on enverrait à la
fonction scanf :

int nombre = 0;
int *pointeur = &nombre;
scanf("%d", pointeur);

Exemple 3

Faire le programme C/C++ qui permet d’utiliser une fonction qui permet de renvoyer
le nombre d’heures et de minutes en lui passant le nombre de minutes (lu au clavier).

Université IBNZOHR – Faculté des Sciences - Agadir 73


LES POINTEURS EN C/C++

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 74


PRINCIPES DE PROGRAMMATION

Les tableaux sont une suite de variables de même type, situées dans un espace
contigu en mémoire.
Lorsque vous demandez à créer un tableau de 4 cases en mémoire, votre programme
demande à l'OS la permission d'utiliser 4 cases en mémoire. Ces 4 cases doivent être
contiguës, c'est-à-dire les unes à la suite des autres.
Enfin, chaque case du tableau est du même type. Si le tableau est de type long, alors
chaque case du tableau contiendra un « long ». On ne peut pas faire de tableau contenant
à la fois des « long » et des « double » par exemple.

type nom du tableau=[Nombre de cases]

Remarque

Très important : un tableau commence à l'indice n°0. Si vous déclarez un tableau


avec Nombre_cases = 4, la 1ère case a comme indice 0, la seconde 1….L’indice 4
n’existe pas.

type nom du tableau=[Nombre de cases]={Val0,Val1,…,Valn}

Val0 est affectée à la case ayant pour indice 0 (la 1ère case) ; Val1 est affectée à la
case ayant pour indice 1 (la 2ème case) …et Valn est affectée à la dernière case (ayant
pour indice «Nombre de cases -1»).

Université IBNZOHR – Faculté des Sciences - Agadir 75


LES TABLEAUX EN C/C++

Pour initialiser les cases d’un tableau à la valeur 0, il suffit de taper (par exemple) :
long tab={0} ; Toutes les cases du tableau seront initialisées à 0.
Par contre, si vous initialisez avec une valeur différente de 0, seule la 1ère case aura
cette valeur ; les autres seront initialisées à 0 (par exemple, long tab={20} ;).

On peut remplir les cases d’un tableau soit par lecture, soit par affectation.

Exemple

Faire le programme C/C++ qui permet d’afficher la valeur maximum parmi 5 nombres
réels saisis au clavier.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 76


PRINCIPES DE PROGRAMMATION

Un tableau à plusieurs dimensions n'est en fait rien d'autre qu'un tableau (tableau à
une dimension) dont les éléments sont des tableaux.

type nom du tableau=[Nombre de lignes][Nombre de colonnes]

Exemples

1. float tab[3][2] ;
Déclare un tableau de 6 cases de type réel (3 lignes & 2 colonnes).
2. float tab[3][2]={{5,9},{10,20},{45,9}} ;
Déclare un tableau de 6 cases de type réel (3 lignes & 2 colonnes) initialisées aux
valeurs indiquées de la manière suivante :

Colonne 1 Colonne 2
tab[1,1] tab[1,2]
Ligne 1
5 9
tab[2,1] tab[2,2]
Ligne 2
10 20
tab[3,1] tab[3,2]
Ligne 3
45 9

Pour remplir les cases d’un tableau à 2D, il suffit d’utiliser deux boucles imbriquées
l’une dans l’autre. Le remplissage peut se faire ligne par ligne ou colonne par colonne.

Exemple

Faire le programme C/C++ qui permet d’afficher la note maximum obtenue parmi 4
élèves, sachant que chaque élève possède 3 notes.

Université IBNZOHR – Faculté des Sciences - Agadir 77


LES TABLEAUX EN C/C++

Si vous faites référence uniquement au nom du tableau (sans indiquer d’indice), vous
pointez sur la 1ère case (ayant pour indice 0) du tableau.

Exemple

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 78


PRINCIPES DE PROGRAMMATION

Exécution

Il est aussi possible d'avoir la valeur de la seconde case en tapant *(nom_tableau+ 1)


(adresse de tableau + 1).

Exemple

Exécution

Université IBNZOHR – Faculté des Sciences - Agadir 79


LES TABLEAUX EN C/C++

D’une façon générale, quand on écrit t[n], on demande la valeur qui se trouve à
l’adresse « t » + n cases.
Le programme suivant montre comment utiliser les pointeurs et les tableaux :

Exécution

Exemple

Faire le programme C/C++ qui permet d’afficher le contenu d’un tableau.


Pour ce faire, Il va falloir envoyer 2 informations à la fonction : le tableau (enfin,
l'adresse du tableau) et aussi et surtout sa taille.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 80


PRINCIPES DE PROGRAMMATION

Exécution

Remarque

il existe une autre façon d'indiquer que la fonction reçoit un tableau. Plutôt que
d'indiquer que la fonction attend un long *tableau, mettez ceci :

Université IBNZOHR – Faculté des Sciences - Agadir 81


LES TABLEAUX EN C/C++

En utilisant une seule fonction, faire le programme C/C++ qui permet d’afficher la
somme et la moyenne des éléments d’un tableau de type réel de 5 valeurs.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 82


PRINCIPES DE PROGRAMMATION

En utilisant une seule fonction, faire le programme C/C++ qui permet de copier un
tableau de 5 valeurs réelles dans un autre tableau..

Université IBNZOHR – Faculté des Sciences - Agadir 83


LES TABLEAUX EN C/C++

Faire le programme C/C++ qui aura pour rôle de remettre à 0 toutes les cases du
tableau (composé de 5 valeurs) ayant une valeur supérieure à un maximum.

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 84


PRINCIPES DE PROGRAMMATION

Exécution

En utilisant une fonction, faire le programme C/C++ qui permet d’afficher le maximum
et le Minimum d’un tableau de 2D de 3 lignes et 2 colonnes de réels.

Université IBNZOHR – Faculté des Sciences - Agadir 85


LES TABLEAUX EN C/C++

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 86


PRINCIPES DE PROGRAMMATION

Une chaîne de caractères (appelée string en anglais) est une suite de caractères,
c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code
ASCII.
En langage C, une chaîne de caractères est un tableau, comportant plusieurs
données de type char, dont le dernier élément est le caractère nul '\0', c'est-à-dire le
premier caractère du code ASCII (dont la valeur est 0). Ce caractère est un caractère de
contrôle (donc non affichable) qui permet d'indiquer une fin de chaîne de caractères. Ainsi
une chaîne composée de n éléments sera en fait un tableau de n+1 éléments de type
char. On peut par exemple représenter la chaîne «mémoire» de la manière suivante :

m é m o i r e \0

En C/C++, il suffit de définir un tableau de caractères. Le nombre maximum de


caractères que comportera la chaîne sera égal au nombre d'éléments du tableau moins un
(réservé au caractère de fin de chaîne).

char variable[Nombre de caractères +1]

Exemples

1. char ch[8] ;
Déclare un tableau «ch» de 8 cases de type char. Donc, on peut y mettre une chaîne
de caractères de 7 caractères.
2. char ch[6]= "salut" ;
Déclare un tableau «ch» de 6 cases de type char auquel sera affectée la chaîne
«salut».
3. char ch[]= "salut" ;
Déclare un tableau «ch» de type char, dont la taille sera calculée automatiquement et
auquel sera affectée la chaîne «salut».

Université IBNZOHR – Faculté des Sciences - Agadir 87


LES CHAINES DE CARACTERES EN C/C++

Soit l’exemple suivant :

À la ligne N° 7, on déclare un tableau «a» de 6 cases de type char initialisé à la


chaîne «salut».
La boucle de la ligne N° 9 permet d’afficher le contenu du tableau «a» (caractère par
caractère, en utilisant le format «%c») en affichant un caractère de tabulation «\t»
après chaque affichage.
À la ligne N° 12, on affiche le contenu du tableau d’un seul trait en utilisant le format
d’affichage %s.

En C++, le type «chaîne» ou «string» existe bel et bien. Pour l’utiliser, il suffit
d’inclure la bibliothèque < > et de définir l’espace nommé «std» comme pour cin et cout
(using namespace std).
Pour déclarer le type string :

string variable(s) ;

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 88


PRINCIPES DE PROGRAMMATION

En C, les fonctions de manipulation des chaines de caractères sont incluses dans la


bibliothèque <string.h> qui est devenue obsolète avec C++ et remplacée par <string>.

En C/C++, on utilise la fonction strcat :

strcat(chaîne1,chaine2) ;

«chaîne 2» est ajoutée à la fin de «chaîne 1». La valeur de «chaîne 2» reste


inchangée. Seul «chaîne 1» a changé : elle contient désormais le résultat de la
concaténation.
En C++, si vous déclarez vos chaines de type string, utilisez le signe «+» pour
concaténer les chaines :

chaîne 1+chaîne 2…+chaîne n ;

En C/C++, on utilise la fonction strlen qui permet de renvoyer le nombre de


caractères d’une chaîne de type char.

strlen(chaîne) ;

Université IBNZOHR – Faculté des Sciences - Agadir 89


LES CHAINES DE CARACTERES EN C/C++

En C++, la fonction utilisée est size() qui permet de renvoyer le nombre de caractères
(longueur) d’une chaîne de type string :

Chaîne.size() ;

Le programme ci-dessous montre un exemple de concaténation et de renvoi de


longueur de chaines de type char et string.

En C/C++, on utilise la fonction strcmp dont la syntaxe est la suivante :

strcmp(chaîne 1,chaîne 2) ;

Elle permet de renvoyer :


Une valeur négative si, lexicalement, chaîne 1 < chaîne 2
Une valeur nulle si chaine1 == chaîne 2
Une valeur positive si chaîne 1 > chaîne 2
Vous pouvez spécifier le nombre de caractères (n) sur lesquels la comparaison peut
se faire en utilisant la fonction strncmp :

strncmp(chaîne 1,chaîne 2,n) ;

En C++, la fonction utilisée est compare() qui permet de renvoyer -1 si les 2 chaines
ne sont pas identiques ou 1 dans le cas contraire.

chaîne 1.strcmp(,chaîne 2) ;

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 90


PRINCIPES DE PROGRAMMATION

Toutes ces fonctions s’appliqueront sur le type char.

La fonction strcpy (comme "string copy") permet de copier une chaîne à l'intérieur
d'une autre. Sa syntaxe est la suivante :

strcpy(chaîne 1,chaîne 2) ;

Chaîne 1 : chaîne dans laquelle sera copiée chaîne 2.


Chaîne 2 : chaîne à copier.

Sa syntaxe est la suivante :

strncpy(chaîne 1,chaîne 2,n) ;

Elle permet de copier n caractères, au maximum, de chaîne 2 vers chaîne 1.

La fonction strchr recherche un caractère dans une chaîne. Sa syntaxe est la


suivante :

strchr(chaîne 1,Caractère à rechercher) ;

Elle recherche la première occurrence d'une chaîne dans une autre chaîne. Sa
syntaxe est la suivante :

strstr(chaîne 1,Chaîne 2) ;

Chaîne 1 : chaîne dans laquelle se fera la recherche.


Chaîne 2 : chaîne recherchée.

Université IBNZOHR – Faculté des Sciences - Agadir 91


LES CHAINES DE CARACTERES EN C/C++

Cette fonction ressemble énormément au printf que vous connaissez mais, au lieu
d'écrire à l'écran, sprintf écrit dans une chaîne ! D'où son nom d'ailleurs, qui commence
par le "s" de "string" (chaîne en anglais). Sa syntaxe est la suivante :

sprintf(chaîne 1,Chaîne 2) ;

Elle permet d’écrire chaîne 2 dans chaîne 1. Elle fait partie de la librairie <stdio.h>.

Recherche une chaîne de caractères dans une autre et renvoie la position de la


première occurrence trouvée. Sa syntaxe est la suivante :

chaîne 1.find(Chaîne 2) ;

Chaîne 1 : chaîne dans laquelle la recherche va être effectuée.


Chaîne 2 : chaîne recherchée.

Elle permet d’ajouter une chaîne ou une partie à une autre chaîne. Sa syntaxe est la
suivante :

chaîne 1.append(Chaîne 2,p,n) ;

p : position du caractère de chaîne 2 à partir de laquelle on indique les caractères à


ajouter.
n : nombre de caractères de chaîne 2 à ajouter dans chaîne 1.

Elle permet d’insérer une chaîne dans une autre chaîne. Sa syntaxe est la suivante :

chaîne 1.insert(Position,Chaîne 2) ;

Chaîne 2 sera insérée dans chaîne 1 à la position indiquée par «Position».

Année Universitaire : 2010/2011 - Professeur : Mohsine BENOHOUD 92


PRINCIPES DE PROGRAMMATION

Elle permet de remplacer une sous-chaîne par une autre. Sa syntaxe est la suivante :

chaîne 1.replace(Position,N,Chaîne 2) ;

N : nombre de caractères de chaîne 1 à remplacer.


P : position à partir de laquelle le remplacement sera effectué.
Chaîne 2 : chaîne de remplacement.

Elle permet de supprimer un certain nombre de caractères d’une chaîne. Sa syntaxe


est la suivante :

chaîne.erase(Position,N) ;

N : est le nombre de caractères à supprimer à partir de «Position».

Elle permet d’extraire un certain nombre de caractères à partir d’une chaîne. Sa


syntaxe est la suivante :

chaîne.substr(Position,N) ;

N : est le nombre de caractères à extraire à partir de «Position».

Elle permet de permuter 2 chaînes.

swap(chaîne 1, chaîne 2) ;

Université IBNZOHR – Faculté des Sciences - Agadir 93