0% ont trouvé ce document utile (0 vote)
4 vues229 pages

Cours Algorithmique GIM

Le document présente un module sur l'algorithmique et la programmation, comprenant des chapitres sur les généralités, les éléments de base d'un algorithme, la sélection, les boucles, les tableaux et les fonctions. Il explique les concepts fondamentaux de l'informatique, la structure d'un algorithme, les types de données, et les instructions de programmation. Le contenu est destiné à fournir une compréhension des bases de l'algorithmique et de la programmation en C.

Transféré par

yasserabsr
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues229 pages

Cours Algorithmique GIM

Le document présente un module sur l'algorithmique et la programmation, comprenant des chapitres sur les généralités, les éléments de base d'un algorithme, la sélection, les boucles, les tableaux et les fonctions. Il explique les concepts fondamentaux de l'informatique, la structure d'un algorithme, les types de données, et les instructions de programmation. Le contenu est destiné à fournir une compréhension des bases de l'algorithmique et de la programmation en C.

Transféré par

yasserabsr
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Algorithmique et programmation

Département d’informatique
Pr. KHOUILI Oussama
Contenu du Module
• Chapitre 1: Généralités

• Chapitre 2: L’élément de base d’un algorithme

• Chapitre 3: La sélection en algorithmique et en C

• Chapitre 4: Les boucles en algorithmique et en C

• Chapitre 5: Les tableaux et les fonctions

KHOULI Oussama 2
Chapitre 1: Généralités

• Introduction

• Composants d’un ordinateur

• Codage
Introduction
• L’informatique est la science de traitement automatique de
l’information par des ordinateurs.
• Informatique = information + automatique (mot inventé en 1962
par Philippe Dreyfus)
• Information: ensemble de données ou de connaissances humaines
et des communications dans le domaine technique, scientifique,
économique et social.
• Traitement automatique: toutes les opérations que l’on peut
effectuer sur les informations: saisie, modification, stockage,
transmission,…
• Le traitement de l'information consiste en une suite d'opérations
transformant une représentation de cette information en une autre
représentation plus facile à manipuler ou à interpréter.

KHOULI Oussama 4
Définitions
• Un ordinateur est un ensemble de circuits
électroniques qui traite l'information grâce à un
programme qu'il mémorise, communique et archive
des informations.
• Le traitement de l'information se fait automatiquement
et vise à résoudre un problème bien défini.

• Architecture d’un ordinateur désigne le mode de


fonctionnement d’un ordinateur; c’est-à-dire comment
l’information circule dans un ordinateur.

KHOULI Oussama 5
Composantes d’un ordinateur
 Un ordinateur se compose en deux principales
parties:
 Partie matérielle (Hardwrae) c’est les
composants physiques de l’ordinateur.
 Partie Logicielle (Software) c’est des
logiciels permettant le fonctionnement de
l’ordinateur.

KHOULI Oussama 6
• Les différentes fonctions correspondent à 3 constituants de l'ordinateur:
- la mémoire centrale
- l'unité centrale
- les périphériques
• La mémoire centrale contient les programmes systèmes nécessaires au
bon fonctionnement de l'ordinateur, et les programmes utilisateurs
répondant à un besoin particulier et résolvant un problème rencontré par
le dit utilisateur
• L'unité centrale va s'occuper de l'exécution des programmes logés dans la
mémoire centrale. Elle est constituée de l'unité arithmétique et logique
(UAL) qui s'occupe de toutes les opérations arithmétiques et logiques
(addition, soustraction, multiplication, etc) et de l’unité de commande
(UC) qui exécute les programmes instructions par instructions en
collaborant avec l'UAL.
• Les périphériques sont les unités qui assurent la relation de l'ordinateur
avec le monde extérieur. Ils constituent de périphériques d’entrée et
sortie assurant l’entrée et sortie de données.

KHOULI Oussama 7
Mémoire Processeur

Bus

Unités ...
d’entrée-
Imprimante Écran
sortie
Disque
La mémoire contient des instructions et des données
KHOULI Oussama 8
• Tous ces constituants sont reliés entre eux par
l’intermédiaire d’un bus, qui est l’artère
centrale et leur permet de s’échanger des
données.
• Pratiquement tous les ordinateurs actuels ont
cette architecture, qui ce soit les micros
ordinateurs personnels ou les gros ordinateurs
des entreprises.
• Les différences résident essentiellement dans
les performances des constituants.
• L’ensemble des communications à l’intérieur
s’effectue par le langage binaire.
KHOULI Oussama 9
Codage
Comprendre comment un ordinateur :
 représente une information (nombre,
caractère, image, son, etc.).
 Convertis des entiers ou des virgule flottante
en représentation binaire et vice versa.
En général on peut distinguer deux types
d’information: instructions et les données.

KHOULI Oussama 10
Les données
Les données: sont les opérandes sur lesquels
portent les opérations, ou produits par celles-
ci. Une addition, par exemple, peut
s’appliquer à deux opérandes, donnant un
résultat qui est la somme des deux opérandes.
On distingue les données numériques,
pouvant être l’objet d’une opération
arithmétique, des données non numériques,
par exemple, les symboles constituant un
texte.
KHOULI Oussama 11
Instructions
• Les instructions représentent les opérations (addition,
par exemple) effectuées par un ordinateur. Elles sont
composées de plusieurs champs:
- Le code de l’opération à effectuer;
- Les opérandes impliqués dans l’opération.
• Le traitement de l’information est une suite
d’opérations transformant une représentation de cette
information en une autre représentation plus facile à
manipuler ou à interpréter.
Exemples: 245+5x2-5=250; Gestion des comptes clients
dans une banque; Recensement de la population;
Inscription, notes des étudiants, …

KHOULI Oussama 12
• Le codage d’une information consiste à établir
une correspondance entre la représentation
externe (habituelle) de l’information (le nombre
65 ou le caractère «A» par exemple) et sa
représentation interne dans la machine (une suite
de bits).
• L’unité de base de la théorie de l’information est
le bit, bit = binary digit, qui signifie en anglais
nombre binaire.
• Un bit, par définition, est un composant
quelconque ne pouvant se trouver que dans deux
états possibles, exclusifs l’un de l’autre. Il prend la
valeur 0 ou 1.

KHOULI Oussama 13
Nombre de bits

KHOULI Oussama 14
Convertir de la base 10 vers une base
quelconque
• Cas de nombre entiers : On divise le nombre
par base b, puis le quotient obtenu par la base
b, et ainsi de suite jusqu’a obtenir un quotient
nul. La suite des restes obtenus correspond
aux chiffres dans la base b visée,

a n a n 1 ...a1 a0

KHOULI Oussama 15
Exemple 1

KHOULI Oussama 16
KHOULI Oussama 17
Sens inverse: binaire en décimal
Comme, on a définit précédemment ( en base
b), convertir un nombre binaire en base décimal
c’est le calcul de la décomposition de ce
nombre. Exemple:

1012  1  2 2  0  21  1  2 0  5
102  1  21  0  2 0  2
11112  1  2 3  1  2 2  1  21  1  2 0  15
KHOULI Oussama 18
Chapitre 2: L’élément de base
d’un algorithme

• Introduction

• Définitions

• Principe
Problème
• Je veux informatiser ce problème et le rendre exploitable à
travers ma machine. Qu’est ce que je dois faire ?

2*x + 3 = 0 10*x - 1= 0

0*x + 0 = 0 0*x + 3 = 0

?? a*x + b = 0 ??
KHOULI Oussama 20
Principe d’algorithmique
Énoncé non précis : Problème informel
Spécification
Énoncé précis : Problème formel
Analyse
Algorithme
Programmation
Langage de programmation : Pascal,..
Compilation
Exécutable du programme
Exécution
Résultat

KHOULI Oussama 21
Algorithmique

Définition : Encyclopédie Universelle

Un algorithme est une suite finie de règles à


appliquer dans un ordre déterminé à un nombre
fini de données pour arriver, en un nombre fini
d'étapes, à un certain résultat, et cela
indépendamment des données

KHOULI Oussama 22
Algorithmique
Définition :

C’est un pseudo-langage qui est conçu pour


résoudre les problèmes et applications sans aucune
contrainte due aux langages de programmation et
aux spécificités de la machine. Ce pseudo-langage
sera ensuite traduit et codé dans le langage de
programmation désiré.

KHOULI Oussama 23
Langage de programmation
Définition :

On appelle langage de programmation tout ensemble


fini de mots réservés qui permettent de traduire les
instructions de l’algorithme afin de l’exécuter par
l’ordinateur.

Exemple :

Turbo Pascal, Cobol, Fortran, C, Delphi, Visual Basic


(VB), C++, Java etc...

KHOULI Oussama 24
Compilateur

Définition :

On appelle compilateur tout programme spécial qui


permet d’avoir un programme exécutable à partir d’un
programme source:

Le programme ainsi obtenu est appelé


programme Objet

KHOULI Oussama 25
Structure générale d’un algorithme
Titre du Problème
 Déclaration des Constantes
Déclaration  Déclaration des Variables
des Objets  Déclaration des Tableaux
 Déclaration des Procédures et Fonctions

Début
Manipulation Instructions
FIN

KHOULI Oussama 26
Etapes de résolution

Démarches à suivre pour résoudre un problème donné:

Identifier les données du départ (entrées) et celle(s) qu’il


faut obtenir (sorties);
Structurer les données (variables ou constantes, type...);
Réfléchir pour déterminer les actions nécessaires à
l’obtention des résultats ;
Présenter les résultats.

KHOULI Oussama 27
Chapitre 2: L’élément de base
d’un algorithme

• Variables
Donnée ou objet
Définition :
Un objet est toute partie identifiable de l’information
au cours d’un traitement.
Il est caractérisé par son nom, son type et sa valeur.
L’ensemble des objets manipulés par un algorithme
est appelé:
environnement de cet algorithme.
Remarque :
Les objets manipulés par un ordinateur sont :
Les Constantes et Les Variables

KHOULI Oussama 29
Les constantes
Définition :

Les Constantes désignent des références à des


valeurs invariantes dans le programme

Syntaxe de la déclaration :

Constante Nom_Constante = Valeur

Exemple :
Constante Pi = 3.14

KHOULI Oussama 30
Les variables
Définition :
Ce sont des références (adresses mémoires) où vont
être stockées des valeurs variables. Les différentes valeurs
d’une référence vont appartenir au type de données auquel
appartient la référence.
Remarques :
1°- Le nom d’une variable  suite de caractères qui permet d’identifier
la variable d’une manière unique dans un algorithme.
2°- Il existe différents types de variables.

KHOULI Oussama 31
Types de variables: Entier
Définition :
C’est l’ensemble des nombres entiers positifs ou négatifs.

Syntaxe de la déclaration :

Variable variable1,variable2,… : Entier

Exemple :
a et b sont, par exemple,
Variable a,b : Entier les coefficients de
l’équation : ax + b = 0

KHOULI Oussama 32
Types de variables: Réel
Définition :

C’est l’ensemble des nombres réels, c’est à dire les


nombres décimaux sans limitation.
Syntaxe de la déclaration :

Variable variable1,variable2,… : Réel

Exemple :

Variable x,y : Réel

KHOULI Oussama 33
Chaines de caractères
Définition :
C’est une suite de caractères, c’est à dire des
combinaisons de caractères (lettres, chiffres, symboles..).
Syntaxe de la déclaration :

Variable variable1,variable2,… : Caractère

Exemple :

Variable Nom, Catégorie : Caractère

KHOULI Oussama 34
Booléen
Définition :

Il s’agit des objets qui ne peuvent prendre que deux


valeurs vrai ou faux.
Syntaxe de la déclaration :

Variable variable1,variable2,… : Booléen

Exemple :
Variable Décision : Booléen

KHOULI Oussama 35
Autres types de déclarations
Objets : Type Tableau
Un tableau permet de représenter un ensemble de valeurs ayant des
propriétés communes et appartenant toutes au même type. Ces variables sont

identifiées par un même nom mais un numéro de repère(indice) pour chacun.

Les Fonctions et Les Procédures


Ce sont des sous-programmes auxquels on peut faire référence à
l’intérieur d’un programme . Ils sont conçus pour éviter les répétitions et pour
découper des programmes jugés trop longs; ce qui facilite la lisibilité du programme

principal.

KHOULI Oussama 36
Manipulations des variables
Définition :
On appelle instruction toute commande élémentaire que
l’on doit appliquer sur des objets pour avoir des sorties bien
définies.
Définition :
Une action est un événement qui change l’état d’un objet
d’un état initial donné à un état final désiré. Une action a une
durée d’exécution finie et un effet propre et bien défini. Chaque
action porte sur des objets sur lesquels elle s’exécute :

L'Action est une seule instruction ou un groupe d’instructions

KHOULI Oussama 37
Structure d’un algorithme

Titre du Problème
 Déclaration des Constantes
Déclaration  Déclaration des Variables
des Objets  Déclaration des Tableaux
 Déclaration des Procédures et Fonctions

Début
Manipulation Instructions
FIN

KHOULI Oussama 38
Manipulation: Corps d’algorithme
Dans la partie manipulation, on doit commencer par
le mot DEBUT et se termine par le mot FIN :

DEBUT
Instruction 1
Instruction 2
……. Action
…….
Instruction n

FIN
KHOULI Oussama 39
Les instructions
La partie manipulation utilise les différents objets
déclarés dans la partie déclaration et leur applique des
opérations afin de retourner le(s) résultat(s) attendu(s) par le
programmeur. Pour ce fait, il y a différentes actions, dites
instructions, à savoir :
Instructions de dialogue Homme-Machine ;
Instructions d’affectation ;
Instructions à structure alternative ;
Instructions à structure répétitive.
Etc…
KHOULI Oussama 40
Fonction de dialogue Output
L’affichage des informations:
Pour faire comprendre qu’il faut afficher des
informations à l’écran, on utilise l’instruction écrire qui obéit
à la syntaxe suivante :
Écrire (Variable ou ‘ Message’ )

Exemples : Écrire (‘ Saisissez la valeur de a ’)


Écrire (‘ Saisissez la valeur de b ’)
Écrire (‘ Saisissez les valeurs de a et b ’)
Écrire (‘Le résultat trouvé est :’, r )
Écrire (r)
KHOULI Oussama 41
Fonction de dialogue Input
La Saisie des informations:
Pour indiquer dans un algorithme que telle donnée
doit être lue par le système, on utilise l’instruction lire qui
obéit à la syntaxe suivante :

Lire(Variable)

Exemple :
Écrire (‘ Saisissez la valeur de a ’)
Lire(a)

KHOULI Oussama 42
Instruction d’affectation
Définition:
C’est le stockage d’une valeur à un endroit
spécifique(variable). Pour affecter une valeur à une variable,
on écrit :

Variable Valeur

Exemple :
Variable valeur 1 + valeur 2
Variable valeur 1 * valeur 2
Variable valeur + Variable1

KHOULI Oussama 43
 Les variables sont des références (adresses mémoires) où vont
être stockées des valeurs qui peuvent changer au cours de
l’exécution du programme. Les mémoires sont repérées par des
numéros (pour l’ordinateur) ou des noms (pour le
programmeur, qui a intérêt à choisir des noms significatifs).
 Chaque fois qu’on procède à une nouvelle affectation, l’ancien
contenu de la mémoire est perdu et un nouveau contenu est
placé dans la mémoire.
 Les constantes correspondent à des zones mémoires dont le
contenu ne peut pas varier. octet n° 52 ’A’
01000001

KHOULI Oussama 44
Exemple
Quels résultats produit l’algorithme suivant ? Les types de
variables sont-ils corrects
Titre : Calcul
Déclaration

Variable A: Entier
C,B : Réel
D : caractère
E : Booléen
Début
A ← 30
B ← A * 2
Écrire('B=' , B)
Manipulation

C ← (B + A)/4
B ← C / 5
D ← ‘Amine’
E ←(A > 40) Ou (C < B)
Écrire('les valeurs obtenues sont : A = ' , A ,
'B = ' ,B , ' C = ', C , ' D = ', D, ' E = ', E)
Fin
KHOULI Oussama 45
Etat de la mémoire
Instruction A B C D E
Après l’instruction
A ← 30
30    
Après l’instruction
B←A*2
30 60   
Après l’instruction
C ← (B + A)/4
30 60 22.5  
Après l’instruction
B← C/5
30 4.5 22.5  
Après l’instruction
D ← ‘Amine'
30 4.5 22.5 Amine 
Après l’instruction
E ← (A >40) Ou (C<B)
30 4.5 22.5 Amine Faux

KHOULI Oussama 46
Exercice
Énoncé:

Écrire l’algorithme permettant le calcul de la surface


d’un cercle connaissant son rayon :
Surface =  * Rayon2

Entrée : Manipulation Sortie :


La valeur du rayon La Surface calculée

KHOULI Oussama 47
Solution
Titre : Surface d’un cercle
Déclaration :
Constante Pi=3.14
Variable Rayon : Entier * Donnée d’entrée*
Variable Surface : Réel * Donnée de sortie*

Manipulation :
DEBUT
Écrire ( 'Saisir la valeur du rayon' )
Lire(Rayon)
Surface  Rayon * Rayon * Pi
Écrire (' La Surface du cercle est : ', Surface)
FIN
KHOULI Oussama 48
Exercice

Écrire l’algorithme qui permet de déterminer le


salaire mensuel d’un commercial sachant que ce
salaire comporte un montant fixe de 4000 DHS et
une commission qui représente 10% du chiffre
d’affaire réalisé par mois.

KHOULI Oussama 49
- Analyse du problème
• Recenser les données dont on dispose, celles qu’on cherche
à produire

• Choisir les actions à utiliser pour résoudre le problème


- Présentation de l’algorithme

* Déclarer toutes les données utilisées (variables, constantes, types)

* Organiser les actions

* Présenter les résultats


KHOULI Oussama 50
Solution
Titre : Commission
Déclaration :
Constante M = 4000
Variable CA : Entier * Donnée d’entrée*
Com : Réel * Donnée intermédiaire*
Sal : Réel * Donnée de sortie*
Manipulation :
DEBUT
Écrire ('Donner le CA mensuel en DHS')
Lire(CA)
Com  CA * 10/100
Sal  Com + M
Écrire ('Le salaire mensuel est de : ', Sal, ' en DHS ' )
FIN
KHOULI Oussama 51
Exercice
Écrire un algorithme qui calcule la moyenne
générale d’un étudiant sachant que celle-ci se calcule de la
manière suivante :
Moyenne = [ 3 * Note(Biologie) + 2* Note(Géologie) + Note(LCI)] / 6

Indication :

Entrées: Algorithme Sortie:


NB,NG,NLCI MG

KHOULI Oussama 52
Représentation en langage C

(De l’algorithmique au langage C)

KHOULI Oussama
53
Structure d’un programme C

La structure d’un programme C est la suivante :

Votre programme doit


#include<stdio.h> Obligatoirement
void main () { contenir une fonction
principale
Déclaration des variables « main ( ) », qui est
Corps exécutée lorsque le
programme est lancé
}
monProgramme.c

KHOULI Oussama
54
Structure d’un programme C

#include<stdio.h>

Void main () {

Déclaration des variables


Corps

}
monProgramme.c

KHOULI Oussama
55
Structure d’un programme C

Mon premier programme : Bonjour tout le monde

#include <stdio.h>
void main()
{
printf(" Bonjour tout le monde ") ;

On sauvegarde ce programme dans un fichier qui se nomme


programme1.c

KHOULI Oussama
56
Structure d’un programme C
Mon premier programme : Bonjour tout le monde
 La machine ne comprend que le langage machine
 Il faut traduire mon programme programme1.c en langage
machine à l’aide d’un traducteur du langage C vers le langage
machine
 Un programme appelé compilateur vérifie la syntaxe de mon
programme (on dit d’une façon générale, code source) et le
traduit en code objet, compris par le processeur
 Le programme en code objet ainsi obtenu peut être exécuté sur la
machine
KHOULI Oussama
57
Compilation d'un programme C
Schéma simplifié de la compilation
#include <stdio.h>
void main()
{
printf(" Bonjour tout le monde ") ;
}

KHOULI Oussama 58
Compilation d'un programme C
Schéma: Bibliothèques de fonctions et compilation

KHOULI Oussama 59
Compilation d'un programme C
Quelques environnements de développement

Sous Windows Sous Linux


 Eclipse  Eclipse
 Netbeans  Netbeans
 Visual C++  KDevelop
 Turbo c++ …
 Dev-C++

KHOULI Oussama 60
Compilation d'un programme C
Schéma: Bibliothèques de fonctions et compilation

KHOULI Oussama 61
De l’algorithmique au C
Algorithme et programmation C
Algorithme somme #include <stdio.h>
variable X, Y: Entier void main ( ){
Début int X, Y ;
X4 X=4 ;
Ecrire("Donner Y ") printf("Donner Y");
Lire(Y) scanf("%d",&Y);
Ecrire(X+Y) printf("%d",X+Y);

Fin }
KHOULI Oussama
62
De l’algorithmique au C
Traduction de l’entête d’un algorithme

Syntaxe en pseudo-code: Syntaxe en langage C :

Algorithme <nom_algorithme> void main ( )


(éventuellement ajouter au début
du fichier #include<stdio.h>)

KHOULI Oussama
63
De l’algorithmique au C
Traduction des déclarations d’un algorithme : variables

Syntaxe en pseudo-code: Syntaxe en langage C :

variable<nom_variable> : <type_variable> <type_variable> <nom_variable> ;

KHOULI Oussama
64
De l’algorithmique au C
Traduction des déclarations d’un algorithme : variables

KHOULI Oussama 65
De l’algorithmique au C
Traduction des instructions : affectation

Exemple:

KHOULI Oussama
66
De l’algorithmique au C
Traduction des instructions : écriture

Exemple :

KHOULI Oussama 67
De l’algorithmique au C
Exemple : Traduire en C l'algorithme suivant

KHOULI Oussama
68
De l’algorithmique au C
Corrigé
#include<stdio.h>
Void main ( )
{
int A, B, C;
A = 3;
B=2;
printf(" Avant échange");
printf("La valeur de A =%d et de B =%d",A,B);
C=B;
B =A;
A=C;
printf(" Après échange") ;
printf("La valeur de A =%d et de B =%d",A, B);
}

KHOULI Oussama
69
De l’algorithmique au C
Traduction des instructions : lecture

Exemple :

KHOULI Oussama
70
De l’algorithmique au C
Exemple : Traduire en C l'algorithme suivant

KHOULI Oussama
71
De l’algorithmique au C
Corrigé #include<stdio.h>
Void main ( )
{
int A, B, C;
printf("Donner A");
scanf("%d",&A);
printf("Donner B");
scanf("%d ",&B) ;
C=B;
B =A;
A=C;
printf("Après échange") ;
printf("La valeur de A =%d et de B =%d",A, B);
}

KHOULI Oussama
72
Les formats en langage C
• Le format est une chaîne de caractères contenant le caractère spécial %. C'est une sorte de
guide qui précise au compilateur comment afficher à l'écran les informations qui sont fournies par
la liste d'expressions :

• Le caractère % indique que le(s) caractère(s) suivant(s) (jusqu'au premier espace ou guillemets
" rencontrés) est, non plus du texte à afficher tel quel, mais un code de format.
• Le format aide à préciser si on souhaite afficher : en décimale ou en hexadécimale, en entier,
en flottant ou en caractère, ainsi que le nombre de caractères à afficher à l'écran.

KHOULI Oussama 73
Nombre caractères affiches

• Pour indiquer la largeur minimale de la valeur de type entier à afficher (H désigne un espace qui
sera affiché à l'écran) :

printf("%4d\n", 123); // affiche H123


printf("%4d\n", 1234); // affiche 1234
printf("%4u\n", 0); // affiche HHH0
printf("%4x\n", 123); // affiche en hexadécimale HH7b

• Pour les flottants, on peut indiquer la largeur minimale du nombre à afficher en sa totalité et sa
précision (nombre de chiffres après la virgule). Noter que, par défaut pour %f ou %lf, 6 chiffres
sont affichés après la virgule.

printf("%f\n", 100.123); // affiche 100.123000 car 6 est la précision par défaut


printf("%.2f\n", 100.123); // affiche 100.12
printf("%5.0f\n", 100.123); // affiche HH100
printf("%.4f\n", 1.23458); // affiche 1.2346

KHOULI Oussama 74
Nombre caractères affiches

• printf("%10f\n", 1.23458); // affiche HH1.234580

Remarque : N'oubliez pas que le compilateur considère le point comme un caractère. Il


rajoute 0 pour avoir 6 chiffres après le point (précision par défaut) et 2 espaces pour
compléter les 10 caractères requis dans cet affichage.

• La fonction printf fournit en fait une valeur de retour, qui correspond au nombre de caractères
qu'elle a réellement affichés (ou la valeur -1 en cas d'erreur).

• Par exemple :

Pour s'assurer que l'opération d'affichage s'est bien déroulée, on peut inclure un test :
if (printf("chaine de caractère", liste) != -1 ) { instructions }

Pour obtenir le nombre de caractères effectivement affichés, on peut utiliser :


int n = printf("chaine de caractère", liste_expressions);

KHOULI Oussama 75
Afficher le contenu d'une variable

Code de format en désaccord avec le type de l'expression :


• Lorsque le code du format utilisé est faux, mais correspond à une information de même
taille que celle du type de l'expression, l'erreur se limite à une mauvaise interprétation de
l'expression. Exemple : écrire une valeur négative de type int en %u donne une valeur
incohérente.

• Lorsque le code du format est faux et correspond à une information de taille différente de
celle du type de l'expression, l'erreur affectera les autres valeurs à chercher (même celles
d'autres appels de la fonction printf). En effet, le repérage des emplacements des valeurs
suivantes va subir un décalage.

Nombre de codes de format différent du nombre d'expressions de la liste.

• Si des expressions de la liste n'ont pas de code format, elles ne seront pas à
chercher. Exemple : printf("%d", n, p); le contenu de p ne sera pas à chercher.

• S'il y a trop de codes de format, printf cherchera à chercher n'importe quoi. C'est le cas
dans cette instruction où 2 valeurs seront à chercher, la seconde étant (relativement)
aléatoire : printf("%d %d ", n);

KHOULI Oussama 76
Exercice

Donner l'affichage fourni par ce programme :

• La variable n = 543 • x (min sur 3) = 34.567799


• La variable x = 34.567799 • x (min sur 10 preci 3) = H H HH34.568
• n (min sur 4) = H543 • caractere Z son code ASCII 90
• x (min sur 10) = H34.567799 • caractere (min sur 10) H H H H H H H H HZ
• n (min sur 2) = 543

KHOULI Oussama 77
Saisie d'une variable

• Pour demander à l'utilisateur de saisir une valeur, on utilise la fonction suivante pour
récupérer sa saisie : scanf("format", liste d'expressions);
• Exemple :
#include<stdio.h>
int main(){ int x;
printf("Entrer un entier : ");
scanf("%d",&x);
printf("La valeur saisie est : %d \n", x); }

• Explications :
- La valeur saisie est stockée dans l'adresse mémoire de la variable x, d'où
l'utilisation du caractère & avant le nom de la variable.
- Saisir plusieurs variables : On utilise les formats séparés par un espace :
scanf("%d %d", &x, &y);
- La fonction scanf appartient à la bibliothèque stdio.h, d'où l'inclusion de la
directive #include<stdio.h>.

KHOULI Oussama 78
Saisie d'une variable
• Notez que pour la saisie, on retrouve uniquement les caractères qui définissent un code
de format.

• scanf("%d %d", &x, &y); Précise que la première valeur lue sera placée dans l'adresse
de la variable x et la deuxième dans celle de y.
• L'opérateur & signifie "adresse de". Pourquoi est-il nécessaire d'utiliser l'adresse de la
variable x (&x)
?
- scanf doit être en mesure de ranger la valeur qu'elle aura lue dans
l'emplacement
correspondant à cette variable, c'est-à-dire son adresse. C'est pour cette
raison qu'on transmet l'adresse de x, désignée par la notation &x.

• scanf a donc TOUJOURS besoin de l'adresse d'une lvalue pour stocker ce que
l'utilisateur va saisir.

• Si vous écrivez x au lieu de &x, le compilateur ne détectera pas d'erreur.

• Au moment de l'exécution, scanf prendra l'information (valeur de x) pour une adresse à


laquelle elle rangera la valeur lue et va écraser un emplacement de la mémoire (autre
que l'emplacement de la variable x) !!!

KHOULI Oussama 79
Pour désigner un espace et un retour ligne saisis par l'utilisateur, on utilise les notations H et ←› dans ce
cours.
Soient :int n, p; char c; Et l'instruction : scanf("%d %d", &n, &p); Supposons que l'utilisateur saisisse ces
caractères. En commentaire, on retrouve les valeurs affectées par la saisie aux variables :

12H25←› // n = 12
et p = 25
H12HH25HH←› // n
= 12 et p = 25
12←›←› H25←› // n
= 12 et p = 25
Soit l'instruction : scanf("%c %d", &c, &n);
Si l'utilisateur saisit :
a25←› // c =
'a' et n = 25
aHH25←› //
c= 'a' et n =
25
Attention !
- scanf("%dH%d", &n, &p); est équivalente à scanf("%d%d", &n, &p); pour les variables de type numérique.
- Cependant, scanf("%dH%c", &n, &c); est différente de scanf("%d%c", &n, &c);.
Exemple :
Si l'utilisateur saisit 12Ha←›,
- La 1ère instruction donnera : // n = 12 et c= 'a' car tous les espaces saisis seront ignorés.
- La 2ème instruction donnera :// n = 12 et c= 'H'.

KHOULI Oussama 80
Erreurs programmation relatives à la fonction scanf

Code de format en désaccord avec le type de la lvalue :


• Lorsque le code de format est faux mais correspond à un type de même taille que celle du
type de la lvalue de la liste, l'erreur se limite à l'introduction d'une mauvaise valeur.
Exemple : écrire une valeur négative de type int en %u donne une valeur incohérente.

• Lorsque le code de format est faux et correspond à une taille supérieure à celle du type de
la lvalue, il y aura écrasement d'un emplacement mémoire consécutif à cette lvalue. Les
conséquences sont difficilement prévisibles.

Nombre de codes de format différent du nombre de lvalue de la liste :


• Si des expressions de la liste n'ont pas de code format, elles ne seront pas lues. Exemple :
scanf("%d", &n, &p); On ne cherchera à lire que la valeur de n.

• S'il y a trop de codes de format, scanf cherchera à affecter des valeurs des emplacements
(presque) aléatoires de la mémoire. Là encore, les conséquences seront pratiquement
imprévisibles.

KHOULI Oussama 81
Afficher le contenu d'une variable

• Quelles seront les valeurs lues dans les variables n, p et d, par l'instruction
scanf("%d H %d H %c", &n, &p, &d); si on considère int n, p; char d; et que
l'utilisateur saisit ces données :

- Premier cas :
12H45HM←›
// n=12, p=45, d='M'
- Deuxième cas :
H12HH3HHw←›
// n=12, p=3, d='w'

KHOULI Oussama 82
Les macros putchar et getchar
• L'expression putchar(c); joue le même rôle que printf("%c", c);
• L'expression c = getchar(); joue le même rôle que scanf("%c", &c);
• Les exécutions des macros putchar et getchar sont un peu plus rapides que printf et
scanf, puisqu'elles ne font pas appel au mécanisme d'analyse de format.

Remarque importante :

Lorsqu'on veut effectuer une lecture au clavier d'un caractère par scanf("%c", &c); ou
c = getchar();, il est OBLIGATOIRE d'inclure juste avant une instruction getchar();
sans l'affecter à une variable.

- getchar(); est utilisé pour prendre en compte le séparateur (touche entrée


ou espace) saisi par l'utilisateur pour valider la saisie qu'il vient de réaliser.
- Si getchar(); n'est pas inclus avant chaque saisie d'un caractère au clavier,
l'utilisation de scanf("%c", &d); ou d = getchar(); dans le programme entraînera la
récupération du séparateur dans la variable d, ce qui donnera des résultats
incohérents.
- getchar(); sert donc à libérer le buffer (mémoire tampon), dans lequel scanf ou
getchar récupèrent
les caractères à lire.

KHOULI Oussama 83
Buffer ou mémoire tampon
• scanf (ou getchar) attend que l'utilisateur lui fournisse des données. L'information tapée au
clavier est rangée
temporairement dans un emplacement mémoire nommé tampon ou buffer en anglais.

• Le buffer est exploré, caractère par caractère, par scanf (ou getchar), pour récupérer les
données.

• Les séparateurs, espace et entrée, jouent le rôle de limiteur de caractères dans le parcours
des données.

• Dans le cas de la saisie avec des formats numériques (tout format autre que %c), le buffer
est parcouru jusqu'à ce que le premier séparateur soit trouvé, et tous les caractères lus sont
stockés dans la variable, puis supprimés du buffer.

• Si une saisie a été effectuée auparavant, l'instruction scanf avec le format %c ou getchar
prendra en compte le premier caractère qui est présent dans le buffer et qui sera un
séparateur (saisi par l'utilisateur pour valider le caractère entré précédemment).

• Introduire getchar(); avant chaque saisie d'un caractère servira à supprimer le séparateur du
buffer, sans l'affecter à une variable.

KHOULI Oussama 84
Écriture d'un caractère putchar('a');

putchar() c’est une fonction d’écriture d’un caractère.

Exemples

char A = 225;
char B = '\a';
int C = '\a';
putchar('x'); /* afficher la lettre x */
putchar('?'); /* afficher le symbole ? */
putchar('\n'); /* retour à la ligne */
putchar(65); /* afficher le symbole avec le code 65 (ASCII: 'A') */
putchar(A); /* afficher la lettre avec le code 225 (ASCII: 'ß') */
putchar(B); /* beep sonore */
putchar(C); /* beep sonore */

Remarque:
putchar(B); printf("%c",B) ;

KHOULI Oussama
85
Lecture d'un caractère getchar

getchar() c’est une fonction de lecture d’un caractère

Exemple:

int C;
Scanf("%c",&c);
C = getchar();

KHOULI Oussama
86
Les Constantes caractères (Séquences d'échappement)

Une séquence d'échappement est un couple de symboles dont le premier


est le signe d'échappement '\'.

\a sonnerie \\ trait oblique


\b curseur arrière \? point d'interrogation
\t tabulation \' apostrophe
\n nouvelle ligne \" guillemets
\r retour au début de ligne \f saut de page (imprimante)
\0 NUL \v tabulateur vertical

KHOULI Oussama
87
Les opérateurs standards

Opérateurs arithmétiques Opérateurs logiques

+ addition && et logique


- soustraction || ou logique
* multiplication
/ division (entière et rationnelle!) ! négation logique
% modulo (reste d'une div. entière)

Opérateurs de comparaison

== égal à
!= différent de
<, <=, >, >= plus petit que, ...

KHOULI Oussama
88
Initialisation des variables

En C, il est possible d'initialiser les variables lors de leur déclaration:

Exemple:
int A,MAX = 1023;
char C,TAB = '\t';
float X = 1.05e-4;

Remarque:

int A=10; int A;


A=10;

KHOULI Oussama
89
Initialisation des variables
Les constantes
En utilisant l'attribut const, nous pouvons indiquer que la valeur d'une variable
ne change pas au cours d'un programme.

Exemple:
const int MAX = 767;
const double TVA = 0.25;
const double e = 2.7;
const char NEWLINE = '\n';

KHOULI Oussama
90
Commentaires

Les commentaires sont non seulement utiles, mais nécessaires à la


compréhension d'un programme.

Forme « standard » : /*... */ ou //…

Exemple:

a = a + 1; /* Ceci est un commentaire de ligne */


b = b - 1; /* Et ceci en est un autre */

KHOULI Oussama 91
Les opérateurs particuliers de C

En pratique, nous retrouvons souvent des affectations comme: i = i + 2


En C, nous utiliserons plutôt la formulation plus compacte: i += 2
L'opérateur += est un opérateur d'affectation.
Pour la plupart des expressions de la forme:
expr1 = (expr1) op (expr2)
Il existe une formulation équivalente qui utilise un opérateur
d'affectation:
expr1 op= expr2

KHOULI Oussama
92
Les opérateurs particuliers de C
Opérateurs d'affectation

+= ajouter à
-= diminuer de
*= multiplier par
/= diviser par
%= modulo

Exemple

A+=2; A=A+2;
A*=B A=A*B;
A%=B A=A%B;

KHOULI Oussama
93
Opérateurs d'affectation
• Exemples
int x, y; x = 3;
y = 5;
x += 5; // Équivalent à x = x +
5; x aura la valeur 8 x -= 7; //
Équivalent à x = x - 7; x aura
la valeur 1 y *= 2; //
Équivalent à y = y * 2; y aura
la valeur 10
y /= 4; // Équivalent à y = y / 4; y aura la valeur 2 (et non pas
2.5, car son type est int)
• Remarque :
Les opérateurs d'affectation composés (+=, -=, *=, /=, etc.) permettent
d'écrire des opérations de manière plus concise et efficace.

KHOULI Oussama 94
Opérateurs d'incrémentation et de décrémentation
Les affectations les plus fréquentes sont du type: I = I + 1 et I=I-1
En C, nous disposons de deux opérateurs pour ces affectations:
I++ ou ++I pour l'incrémentation (augmentation d'une unité)
I-- ou --I pour la décrémentation (diminution d'une unité)
X=I++ passe d'abord la valeur de I à X et incrémente après
X=I-- passe d'abord la valeur de I à X et décrémente après
X=++I incrémente d'abord et passe la valeur incrémentée à X
X=--I décrémente d'abord et passe la valeur décrémentée à X

var ++; ⇒ Post-incrémentation


++ var; ⇒ Pré-incrémentation
Exemple
Supposons que la valeur de N est égal à 5:
X = N++; Résultat: N=6 et X=5
X = ++N; Résultat: N=6 et X=6
KHOULI Oussama
95
Exercice

Instruction Explication Valeurs après exécution


int x = 10, y = 5, a, b; Initialisation des variables. x = 10, y = 5, a = ?, b = ?
`a` et `b` ne sont pas
encore définis.
• Si on a les variables suivantes
a = x++; `x++` renvoie 10 (ancienne a = 10, x = 11
: valeur de `x`), puis `x` est
int x = 10, y = 5, a, b; incrémenté.
• Quelles valeurs sont données b = ++y; `++y` incrémente `y` avant b = 6, y = 6
par les instructions suivantes : d'affecter la nouvelle
valeur à `b`.
• a = x++; ⇒ a : 10 et x : 11
a -= b; `a = a - b = 10 - 6 = 4` a = 4, b = 6
• b = ++y; ⇒ b : 6 et y : 6 b = 3; `b` est directement assigné b=3
• a -= b; ⇒ a : 4 et b : 6 à 3.
• *b = 3; ⇒ b : 18 b = 18; `b` est réassigné à 18 b = 18
• x += --a + b++; ⇒ x : 32 et a : (erreur potentielle dans
l'image).
3 et b : 19
x += --a + b++; `--a` : `a` devient 3 avant x = 32, a = 3, b = 19
l'utilisation. `b++` : `b = 18`
utilisé, puis `b` devient 19.
`x += 3 + 18 = 21`, donc `x
= 11 + 21 = 32`.

KHOULI Oussama 96
Les priorités des opérateurs

Priorité 1 (la plus forte): ()


Priorité 2: ! ++ --
Priorité 3: */%
Priorité 4: +-
Priorité 5: < <= > >=
Priorité 6: == !=
Priorité 7: &&
Priorité 8: ||
Priorité 9 (la plus faible): = += -= *= /= %=

KHOULI Oussama
97
Les fonctions arithmétiques standard
Les fonctions suivantes sont prédéfinies dans la bibliothèque
standard <math>. Pour pouvoir les utiliser, le programme doit contenir la
ligne:
#include<math.h>

COMMANDE C EXPLICATION
exp(X) fonction exponentielle
log(X) logarithme naturel
log10(X) logarithme à base 10
pow(X,Y) X exposant Y
sqrt(X) racine carrée de X
fabs(X) valeur absolue de X
sin(X) cos(X) tan(X) sinus, cosinus, tangente de X
asin(X) acos(X) atan(X) arcsin(X), arccos(X), arctan(X)
sinh(X) cosh(X) tanh(X) sinus, cosinus, tangente hyperboliques de X

KHOULI Oussama
98
Les conversions de type
Les conversions de type automatiques
les valeurs des opérandes sont converties automatiquement dans un type
commun. Ces manipulations implicites convertissent en général des types plus
'petits' en des types plus 'larges';
char < short ≤ int ≤ long < float < double
Exemple
 Pour le calcul de D, A est converti en float et divisé par C. Le

char A=3; résultat (0.75) est affecté à D qui est aussi du type float. On
int B=4; obtient donc: D=0.75
float C=4;
float D,E;  Pour le calcul de E, A est converti en int et divisé par B. Le
char F; résultat de la division (type int, valeur 0) est converti en float.
D = A/C;
E = A/B; On obtient donc: E=0.000
F = A/C;  Pour le calcul de F, A est converti en float et divisé par C. Le
résultat (0.75) est retraduit en char. On obtient donc: F=0
KHOULI Oussama
99
Les conversions de type
Les conversions de type forcées (casting)
Il est possible de convertir explicitement une valeur en un type quelconque en
forçant la transformation à l'aide de la syntaxe:
Casting (conversion de type forcée)

(<Type>) <Expression>

Exemple
La valeur de A est explicitement convertie
char A=3;
int B=4; en float. La valeur de B est automatiquement
float C;
C = (float)A/B;
convertie en float. Le résultat de la division
(type rationnel, valeur 0.75) est affecté à C.
Résultat: C=0.75
KHOULI Oussama
100
Exercice 1

• Si c1, c2 sont de type char et n est de type int, les expressions suivantes auront quels types et
selon quels schémas ?

1. c1 + n

2. c1 + 1

3. c1 − c2

KHOULI Oussama 101


Exercice 1
Si c1, c2 sont de type char et n est de type int, les expressions suivantes auront quels types
et selon quels schémas ?

1. c1 + n

2. c1 + 1

3. c1 − c2

KHOULI Oussama 102


Exercice 2

• Si n est de type int, p de type long et x de type float, l'expression :


n * p + x aura quel type et selon quel schéma ?

KHOULI Oussama 103


Exercice 2
• Si n est de type int, p de type long et x de type float, l'expression :
n * p + x aura quel type et selon quel schéma ?

KHOULI Oussama 104


Exercice 3

• Si p1, p2 et p3 sont de type short et x de type float, l'expression :


p1 * p2 + p3 * x aura quel type et selon quel schéma ?

KHOULI Oussama 105


Exercice 3

• Si p1, p2 et p3 sont de type short et x de type float, l'expression :


p1 * p2 + p3 * x aura quel type et selon quel schéma ?

KHOULI Oussama 106


Exemple 1 : Traduire en C l'algorithme suivant

Algorithme Calcul
Variable A : Entier
C,B : Réel
D : caractère
E : Booléen
Début
A ← 30
B←A* 2
Écrire('B=' , B)
C ← (B + A)/4
B←C/5
D ← ‘A’
E ← (A > 40) Ou (C < B)
Écrire('les valeurs obtenues sont : A = ' , A , 'B = ' ,B , ' C =’,C, ' D = ', D, ' E = ', E)
Fin

KHOULI Oussama 107


Exemple 2 : Traduire en C l'algorithme suivant

Algorithme Surface d’un cercle


Constante Pi=3.14
Variable Rayon : Entier * Donnée d’entrée*
Variable Surface : Réel * Donnée de sortie*
DEBUT
Écrire ( 'Saisir la valeur du rayon' )
Lire(Rayon)
Surface  Rayon * Rayon * Pi
Écrire (' La Surface du cercle est : ', Surface)
FIN

KHOULI Oussama 108


Exemple 3 : Traduire en C l'algorithme suivant

Algorithme Commission
Constante M = 4000 * M: montant fixe*
Variable CA : Entier * Donnée d’entrée (CA: chiffre d’affaire) *
Com : Réel * Donnée intermédiaire (Com: commission )*
Sal : Réel * Donnée de sortie(Sal: salaire mensuel )*
DEBUT
Écrire ('Donner le CA mensuel en DHS')
Lire(CA)
Com  CA * 10/100
Sal  Com + M
Écrire ('Le salaire mensuel est de : ', Sal, ' en DHS ' )
FIN

KHOULI Oussama 109


Chapitre 2: L’élément de base
d’un algorithme

• Structure alternative
Structure alternative

Les conditions :

On appelle condition simple toute expression de la forme :

Variable 1 Opérateur Variable 2

KHOULI Oussama 111


Opérations Arithmétiques
Opération Signification

+ Addition

- Soustraction

* Multiplication

/ Division

% ou mod Modulo : le reste de la division de 2


valeurs entières
KHOULI Oussama 112
Opérations conditionnelles
Pour exprimer les conditions, on utilise les opérateurs conditionnels suivants :

Opérateur Signification
= Égal
< Inférieur
> Supérieur
<= Inférieur ou égal
>= Supérieur ou égal
<> différent

KHOULI Oussama 113


Opérations logique
On peut combiner des conditions à l’aide des opérateurs logiques :

Opérateur Signification
Et Et logique

Ou Ou logique

Non Négation logique

Ou = Xor Ou exclusif

KHOULI Oussama 114


Opérations logique

Opérateur Description Résultat (si a = 5, b = 3) Explication

& ET bit à bit (AND) 1 Le bit est 1 uniquement


si les deux bits sont 1.
| OU bit à bit (OR) 7 Le bit est 1 si au moins
un des bits est 1.
^ XOR bit à bit (OU 6 Le bit est 1 uniquement
exclusif) si un seul des bits est 1.

KHOULI Oussama 115


Exemple

Expression Résultat
(4 <7) ET (9>0) Vrai
(1 < 0) OU (1<>1) Faux
Non(13.4 < 15) Faux

KHOULI Oussama 116


Priorité des opérations
Priorité de *, / div et % par rapport à + et -
5 + 9 * 3 = 32 et non 42
5*9+3 = 48 et non 60
Pour les opérateurs de même priorité, associativité à
partir de la gauche
15 / 5 * 3 = 9 et non 1
5 – 2 + 4 = 7 et non –1
On peut utiliser des parenthèses pour changer l’ordre
des opérations :
15 / (5 * 3) = 1
(5 + 9 ) * 3 = 42
KHOULI Oussama 117
Types de variables et Opérations
Priorité de *, / div et % par rapport à + et -
5 + 9 * 3 = 32 et non 42
5*9+3 = 48 et non 60
Pour les opérateurs de même priorité, associativité à
partir de la gauche
15 / 5 * 3 = 9 et non 1
5 – 2 + 4 = 7 et non –1
On peut utiliser des parenthèses pour changer l’ordre
des opérations :
15 / (5 * 3) = 1
(5 + 9 ) * 3 = 42
KHOULI Oussama 118
Structure Alternative: SI
Pour exprimer le fait que des instructions vont être exécutées
dans un cas alors que d’autres instructions peuvent être
exécutées dans l’autre cas, on utilise une structure alternative.
Syntaxe :
Si condition alors
Actions 1
[ Sinon
Actions 2] Option Facultative
Finsi

KHOULI Oussama 119


Exemple
Titre : Test 1 Titre : Test 2
Variable x : entier Variable x : entier
Début Début
Écrire ('Saisir un entier x ') Écrire ('Saisir un entier x ')
Lire (x) Lire (x)
Si (x > 0) alors Si (x > 0) alors
Écrire('x est un nombre positif ') Écrire (' x est un nombre positif ')
Finsi Sinon
Fin Écrire (' x est un nombre négatif ou nul')
Finsi
Fin

KHOULI Oussama 120


Exercice
Dans l’exercice précédent (Calcul la moyenne générale). Afficher
‘Admis’ si un étudiant a une moyenne générale >=10 et Afficher ‘Ajourné’
dans le cas contraire (Moyenne générale < 10).

Solution : …………….(Reste de l’algorithme)


Si (MG >= 10) alors
Écrire ('Admis')
Sinon
Écrire ('Ajourné')
Finsi
FIN

KHOULI Oussama 121


Exercice

Écrire l’algorithme qui permet de calculer le


maximum de deux entiers quelconques.

KHOULI Oussama 122


Solution
Titre : Maximum
Variable a ,b, max : entier
Début
Écrire ('Saisir deux entiers a et b ')
Lire(a, b)
Si (a > b) alors
max  a
Sinon
max  b
Finsi
Écrire ('le maximum de ' , a , ' et de ' , b, ' est : ' , max)
Fin

KHOULI Oussama 123


Instruction conditionnelle if
• Il est souvent nécessaire de choisir une suite d'instructions à exécuter en fonction d'un
résultat donné.

• L'instruction if permet d'exécuter une ou plusieurs instructions si une certaine condition


est réalisée (c'est-à-dire vraie).

• L'instruction if peut inclure le mot-clé else, qui est facultatif. La partie du code
appartenant à else s'exécute lorsque la condition du if est fausse.

• Syntaxe :
if (condition) instruction_1;
else instruction_2;

• Avec :
- condition : expression quelconque.
- instruction_1 et instruction_2 : une ou plusieurs instructions quelconques.
- else : partie optionnelle qui peut ne pas être présente.

KHOULI Oussama 124


Instruction conditionnelle if

• Exemple

Rappelons qu'il est possible de ne pas mettre les accolades {} si un bloc ne


contient qu'une seule
instruction.
• Lorsqu'un programme rencontre une instruction if, il suit ce plan :
- L'expression (condition) est évaluée.
- Si elle est vraie (présente une valeur non nulle), le bloc d'instructions
correspondant à if est exécuté.
- Si la condition est fausse (présente une valeur nulle), le bloc correspondant à
else est
exécuté, si cette partie existe. Sinon, les instructions qui suivent l'instruction if sont
exécutées.

KHOULI Oussama 125


Exercice
• Écrire un programme qui demande un nombre entier à l'utilisateur, puis qui teste
et affiche s'il est divisible par 3.

KHOULI Oussama 126


Opérateur ternaire conditionnel
• Considérons l'instruction suivante :

• On attribue à la variable max la plus grande des valeurs de a et b.

• La valeur de max pourrait être définie par la phrase : "Si a > b alors a, sinon b".

• En langage C, il est possible, à l'aide de l'opérateur conditionnel, de traduire presque


littéralement la phrase ci-dessus de la manière suivante :
max = (a > b) ? a : b;

• Cet opérateur est aussi appelé opérateur ternaire. Il permet de réaliser une instruction
conditionnelle de manière courte.

KHOULI Oussama 127


Opérateur ternaire conditionnel

• Syntaxe :
(condition) ? expression_vraie : expression_fausse

• Il utilise deux symboles (? et :), et comprend trois opérandes :


Le premier argument correspond à une condition.
Si cette condition est non nulle, on retourne ce qui suit le point d'interrogation (?).
Dans le cas contraire, on retourne ce qui suit les deux points (:).

Exercice : Écrire un programme qui demande un nombre entier à l'utilisateur, puis qui
teste et affiche s'il est divisible par 3.

KHOULI Oussama 128


Imbrication

• Les instructions qui figurent dans chaque partie du choix d'une instruction
peuvent être quelconques. En particulier, elles peuvent, à leur tour, renfermer
d'autres instructions if.

• Exemple :

• Question : À quel if le else se rapporte-t-il ?


→ Un else se rapporte toujours au dernier if rencontré auquel un else n'a pas
encore été attribué.

KHOULI Oussama 129


Tests imbriqués versus tests successifs

• Vérifier si un nombre saisi au clavier


est négatif, positif ou nul.

• Remarque : dans la version 1, on


effectue 3 tests dans tous les cas.
Dans la version 2, si le nombre est
négatif, on ne fait qu'un seul test. Cela
réduit le temps d'exécution du
programme.

• Conseil : utiliser les tests imbriqués


pour limiter le nombre de tests et
placer d'abord les conditions les plus
probables.

KHOULI Oussama 130


Instruction: Selon-cas

L’instruction Selon cas constitue une structure


alternative à la forme en bloc [Si … Alors …Sinon…] et
permet de formuler de manière plus simple le choix du
groupe d’instructions.

KHOULI Oussama 131


Syntaxe : Suivant Cas variable Faire
Cas Valeur 1
Actions 1
Cas Valeur 2, Valeur3, Valeur 4
Actions 2
Cas Valeur 5 à Valeur 7
Actions 3
..
..
Sinon Cas
Actions N
Fin Suivant
KHOULI Oussama 132
Exemple

Écrire l’algorithme qui permet de déterminer


le nombre de jours d’un mois d’une année donnée

KHOULI Oussama 133


….Reste de l’Algorithme
Selon Cas M Faire
Cas 2
Action 1
Cas 1, 3, 5, 7, 8, 10 , 12
Action 2
Cas 4, 6, 9, 11
Action 3
Sinon Cas
Écrire ( 'Attention : Mois Incorrect ')
Fin Suivant
FIN
KHOULI Oussama 134
Instruction conditionnelle switch

• L'instruction switch est une généralisation de l'instruction if, elle permet


d'éviter d'utiliser plusieurs if...else.

• Elle permet au programme de faire un choix entre plusieurs possibilités,


chaque possibilité s'exprimant par une ou plusieurs instructions.

KHOULI Oussama 135


Instruction conditionnelle switch

• Syntaxe:

Avec :
- expression : expression de type entier ou caractère,
- constante : expression constante d'un type entier ou caractère. Attention : on
ne peut utiliser que des constantes numériques ou des nombres.
On ne peut pas utiliser des variables, même si elles sont définies avec
const.
- instructions : séquence d'instructions quelconques.
- NB : Les crochets ([ et ]) signifient que ce qu'ils renferment est facultatif. D'une
manière générale, on peut trouver :
- Plusieurs instructions à la suite d'une étiquette case,
- Des étiquettes case sans instructions, c'est-à-dire des
étiquettes accompagnées uniquement de :.

KHOULI Oussama 136


Instruction switch
Démarche :

- On commence tout d'abord par évaluer l'expression qui suit le mot switch.
On pose x
comme la valeur de cette expression
- Puis, on recherche dans le bloc qui suit s'il existe une étiquette de la
forme case x.
- Si c'est le cas, le compilateur se branche sur l'instruction qui suit cette
étiquette.
- Si cette instruction ne se termine pas par une instruction
break;, alors le
compilateur ira exécuter toutes les étiquettes qui la suivent.
- Dans le cas où aucune étiquette ne correspond à x :
Si une étiquette default est définie, le compilateur se branche sur
cette étiquette ; Sinon, il passe à l'instruction qui suit le bloc.

• Remarque : L'instruction break permet en général de sortir d'un bloc


quelconque pour
exécuter les instructions qui suivent.

KHOULI Oussama 137


Instruction switch
• Exemple:

• Si on oublie l'instruction break, et que n a la valeur 1, l'étiquette case 1 s'exécutera et


on aura comme résultat (un deux grand).

• Le programme se branchera sur l'étiquette default dans le cas où n n'a aucune des
valeurs 0, 1 ou 2. Il n'est pas nécessaire d'y inclure un break car c'est la dernière
étiquette.

KHOULI Oussama 138


Exercice

Écrivez un programme qui demande à l'utilisateur deux nombres entiers, puis lui demande
d'entrer un symbole d'opération arithmétique (+, -, *, /, %).

Remarque : Si getchar(); n'est pas utilisé, vous aurez automatiquement une mauvaise réponse,
car le séparateur saisi par l'utilisateur sera placé dans la variable op !!!
4

KHOULI Oussama 139


Exercice

• Écrivez un programme qui vérifie l'état de l'eau selon sa température :


• Solide (<= 0)
• Liquide (entre 0 et 100, strictement)
• Vapeur (>= 100).

• Remarque : switch...case ne permet de remplacer if...else que pour des tests d'égalité
(==). Si les tests comprennent d'autres opérateurs de comparaison, il est nécessaire
d'utiliser des tests if...else imbriqués.

KHOULI Oussama 140


Structure répétitive
Problème :
Écrire un algorithme permettant d’afficher 300 fois le message :
‘‘ bonjour tout le monde’’.

Solution Classique :
DEBUT
Écrire (' Bonjour tout le monde ') 1
Écrire (' Bonjour tout le monde ') 2
.
.
Écrire (' Bonjour tout le monde ') 300
FIN

KHOULI Oussama 141


Boucle: Tant que
On utilise cette instruction pour exécuter des actions
tant qu’une condition est réalisée.

Syntaxe :

<initialisation>
Tant que Condition Faire

<bloc de traitement>
<bloc de contrôle> Action

Fin tant que

KHOULI Oussama 142


«
Sémantique : Si condition = T
 Tant que Valeur(T)=Vrai le bloc d'instructions R sera

exécuté.
 Si valeur(T)=Faux on passe à l'instruction suivante.

 Avec TANT QUE le test est fait à PRIORI.

 Il se peut que l'on ne rentre jamais dans la

boucle.
 La boucle n'est pas INCONDITIONNELLE. On

ne connaît pas à l’avance le nombre d'itérations.

KHOULI Oussama 143


Solution de l’exercice précédent :
Variable i : Entier
DEBUT
i  0 * Initialisation *
Tant que (i < 300) Faire
Écrire (' Bonjour tout le monde ')
i  i+1
Fin tant que
FIN

KHOULI Oussama 144


Exercice
Afficher tous les multiples de 9 inférieurs à 485
Titre : Multiples de 9
Variable M, i : Entier *i: variable intermédiaire: compteur*
DEBUT
i  0 * initialisation de la boucle*
M  0
Tant que (M < 485) Faire
Écrire (M , ' est un multiple de 9 ' )
i  i+1 * incrémentation du compteur *
M  i * 9
Fin tant que
FIN
KHOULI Oussama 145
Exercice
Dans cet algorithme combien de fois la boucle est- elle exécutée ?
Titre : Boucle1
Variable i , y : Entier
Début
i  i = variable intermédiaire
y0 = compteur
Tant Que (i<7) faire i i+1 = incrémentation
du compteur
i i+1
y  y+i
Écrire (' y = ' , y)
Fin Tant que
Fin
KHOULI Oussama 146
Boucle: Faire jusqu’à
On utilise cette instruction pour exécuter des actions
jusqu'à ce que une condition soit remplie.

Syntaxe :

<Initialisation>
Faire
<bloc de traitement>
<bloc de progression > Action
Jusqu’à Condition

KHOULI Oussama 147


Sémantique :
Si valeur(T)= Faux la boucle est à nouveau exécutée.
 Si Valeur(T)=Vrai, on passe à l'instruction suivante.
Avec Faire jusqu’à le test est fait à POSTERIORI.
• Il y aura un passage dans la boucle. Le bloc
d’instructions sera exécuté au moins une fois.
• La boucle n’est pas INCONDITIONNELLE. On ne
connaît pas à l’avance le nombre d’itérations.

KHOULI Oussama 148


Exemple
Titre : Boucle2
Variable i , y : Entier
Début
i 
y0 Valeurs de y ?
faire
i i+1
y  y+i
Écrire (' y = ' , y)
Jusqu’à (i >7)
Fin

KHOULI Oussama 149


Exercice

Écrire un algorithme permettant de calculer, pour un


entier N> 0, la somme :
SN = 1 + 2 + 3 + …… + N

KHOULI Oussama 150


Solution
Variable N,S, i : Entier
DEBUT
Écrire (' Saisir une valeur entière positive :')
Lire (N)
S  0 * initialisation de la boucle*
i  0
Faire
i  i + 1
S  S + i
jusqu’à (i > =N)
Écrire (' La somme : S = ', S)
FIN

KHOULI Oussama 151


Boucle: Pour
La spécification de cette instruction c’est qu’elle
limite le nombre de fois où doit se répéter le bloc Action

Syntaxe : La boucle est


<Initialisation> Inconditionnelle
On connaît à priori le
nombre d'itérations
Pour variable  valeur1 à valeur2 faire

<Bloc de traitement>

Fin Pour

KHOULI Oussama 152


Exercice

Écrire un algorithme permettant le calcul du factoriel


d’un entier N > 0 donné : N !

KHOULI Oussama 153


Titre : Factoriel
Variable N : Entier
i : Entier * i variable intermédiaire
F : Entier i = compteur *
DEBUT
Écrire (' Saisir une valeur entière N > 0: ')
Lire (N )
F 1 * initialisation de la boucle*
Pour i  1 à N Faire
F  F*i
Fin Pour
Écrire (' Le factoriel de ', N , ' est : ' , F)
FIN

KHOULI Oussama 154


Exercice

Écrire l’algorithme permettant de calculer la


moyenne des notes de N étudiants

KHOULI Oussama 155


Solution
Titre : Moyenne
Variable N, i : Entier
note, S, Moy : Réel
DEBUT
Écrire (' Saisir le nombre d’étudiants: ')
Lire (N)
S  0 * initialisation de la boucle*
Pour i  1 à N faire
Écrire (' Saisir la note de l’Etudiant ' , i , ' : ')
Lire (note)
S  S + note
Fin Pour
Moy  S/N
Écrire (' La moyenne est : ', Moy)
FIN

KHOULI Oussama 156


A tenir
Si nombre d'itérations connu Alors
Boucle Pour
Sinon
Si itération exécutée au moins une fois Alors
Boucle Faire jusqu’à
Sinon
Boucle Tant que faire

KHOULI Oussama 157


Boucle: tant que faire et faire jusqu’à
Remarques: Soient T une condition et R l’action. Alors il y a équivalence
entre les boucles Tant que faire et Faire jusqu’à. La syntaxe est la suivante:
 Si T alors
 Tant Que T faire Faire
R ~ R
Fin Tant Que Jusqu ’à non(T)
FinSi
Et
 Faire  R
Tant Que non(T) faire
R ~ R
jusqu ’à T Fin Tant Que

KHOULI Oussama 158


Exercice

1- Écrire un algorithme permettant de déterminer le Nème


terme d’une suite numérique connaissant son premier
terme et ses coefficients a et b et tels que:
Un = a * Un-1 + b  1  n N
2- Écrire un algorithme permettant de définir le
rang N et le terme correspondant de la suite tels que
UN > 1000

KHOULI Oussama 159


Solution
1) Le nombre d’itérations est connu : Boucle Pour

Variable N, i : Entier
Variable a, b, S : Réel
DEBUT
Écrire (' Saisir la valeur de N: ')
Lire (N)
Écrire ('Saisir la valeur du premier terme et les coefs a et b:')
Lire (S , a, b )
Pour i  1 à N faire
S  a * S + b
Fin Pour
Écrire ( ' Le terme d’’ordre:’, N, ‘est : ', S )
FIN
KHOULI Oussama 160
2) Le nombre d’itérations inconnu : Boucle Faire jusqu’à

Variable N : Entier
Variable a, b, S : Réel
DEBUT
Écrire ('Saisir la valeur du premier terme et les coefs a et b:')
Lire (S , a, b)
N  0
Faire
S  a * S + b
N  N + 1
Jusqu’à S > 1000
Écrire (' La somme de la série est : ', S)
Écrire (' Le rang est : ', N )
FIN
KHOULI Oussama 161
Exercice

Écrire un algorithme permettant de calculer la somme :


Sn(x) = 1/x + 2/x2 + 3 /x3 + …… + n /xn

KHOULI Oussama 162


Boucle do...while

• Syntaxe

• Condition : expression quelconque.

• Instruction : instructions quelconques simples (terminées par un point-virgule) ou


sous forme d'un bloc d'instructions délimité par des accolades.

• Remarque : Ces éléments sont très importants et leur oubli entraîne une erreur :
le point-virgule après while(condition);
les parenthèses autour de (condition)

KHOULI Oussama 163


Boucle do...while

• Exemple:

• Remarque :
- La boucle do...while est très utilisée pour le contrôle de saisie car elle
effectue une
première itération avant de tester la condition d'arrêt.

- L'instruction à répéter peut être vide. On utilise alors l'une des syntaxes
suivantes avec un point-virgule ou avec des accolades :

KHOULI Oussama 164


Exercice
• Ecrire un programme de contrôle de saisie d'une lettre majuscule.

• Ecrire un programme de contrôle de saisie d'un nombre entier négatif.

KHOULI Oussama 165


Boucle while
Syntaxe :

• condition : expression quelconque.

• instruction : instructions quelconques simples (terminées par un point-virgule) ou


sous forme d'un bloc d'instructions délimité par des accolades.

• Remarque : Notez que while n'est pas suivie par un point-virgule. Si on l'inclut, la
partie instruction ne sera pas exécutée en boucle.

KHOULI Oussama 166


Boucle while

• Exemple:

• Remarque :
- L'expression utilisée comme condition de poursuite est évaluée avant le
premier tour de boucle.
- Il est donc nécessaire que sa valeur soit définie avant de commencer la
boucle, contrairement au cas de la boucle do...while.

KHOULI Oussama 167


Exercice

• Écrire un programme qui détermine le premier nombre entier N tel que la somme de 1 à N
dépasse strictement 100.

KHOULI Oussama 168


Boucle for
• Syntaxe:

- Expression1 : partie d'initialisation.


- Expression2 : partie condition.
- Expression3 : partie d'incrémentation.
- Instruction : instructions quelconques simples ou un bloc.
- NB : Les crochets ( [ et ] ) signifient que ce qu'ils renferment est facultatif.
• Exemple :
Avec la boucle for : Avec la boucle while :

KHOULI Oussama 169


Boucle for

• La ligne for (i = 1; i <= 5; i++) comporte trois expressions :


- La première est évaluée (une seule fois) avant d'entrer dans la
boucle.
- La deuxième conditionne la poursuite de la boucle. Elle est évaluée
avant chaque itération.
- La troisième est évaluée à la fin de chaque itération.
- Itération : un parcours de la boucle.
• En général, on peut dire que ces deux écritures sont équivalentes :

• NB : ces écritures sont équivalentes :

KHOULI Oussama 170


Remarques

• Possibilité de regrouper plusieurs actions dans une expression.


- Exemple pour la partie initialisation :

- Exemple pour la partie incrémentation :

• for( ; ; ) ; et for( ; ; ) sont syntaxiquement corrects et représentent des boucles infinies à


corps vide (qui ne vont jamais s'arrêter).

KHOULI Oussama 171


Exercice

• Ecrire un programme qui calcule x à la puissance n où x est un réel non


nul et n un entier positif non nul

• On peut remplacer la ligne 14 par for(i=n,puiss=1.0;i>=1;i- -)

KHOULI Oussama 172


Instructions inconditionnelles

• Les trois instructions break, continue et goto fournissent des possibilités diverses de
branchement inconditionnel :

- break et continue s'emploient principalement au sein de boucles,


- tandis que goto est d'un usage libre mais est peu utilisé en langage C.

KHOULI Oussama 173


Instruction break
• Utilisée dans une boucle, l'instruction break sert à interrompre le déroulement de la boucle, en
passant à l'instruction qui suit cette boucle.

• Cette instruction n'a d'intérêt que si son exécution est conditionnée par un choix. Dans le cas
contraire, elle serait exécutée dès le premier tour de boucle, ce qui rendrait la boucle inutile.

• Exemple :

• En cas de boucles imbriquées, l'instruction break fait sortir de la boucle la plus interne.

KHOULI Oussama 174


Instruction continue

• L'instruction continue permet de passer prématurément au tour de boucle suivant.

• Exemple :

• En cas de boucles imbriquées, l'instruction continue ne concerne que la boucle la plus interne

KHOULI Oussama 175


Instruction goto

• Cette instruction permet de se déplacer (on dit faire un branchement) vers un


emplacement quelconque du programme.

• Exemple :

KHOULI Oussama 176


Chapitre 4: Tableaux & fonctions
Tableaux
Qu’est-ce qu’un tableau ?
• Un tableau est une structure de données qui permet de stocker
plusieurs éléments du même type (entiers, flottants, caractères, etc.).
• Chaque élément est accessible à l’aide d’un indice, qui est
généralement un nombre entier.
Pourquoi utiliser des tableaux ?
• Stocker et gérer des ensembles de données de manière efficace.
Éviter de créer des variables individuelles pour chaque donnée
similaire.
• Par exemple : au lieu de déclarer note1, note2, note3, etc., on peut utiliser
notes[0], notes[1], etc.
• Faciliter le traitement automatique des données grâce à des boucles
(par exemple, pour trier, rechercher, calculer des moyennes, etc.).

KHOULI Oussama 178


Tableaux

Un tableau permet de représenter un ensemble de


valeurs ayant des propriétés communes et appartenant toutes
au même type. Ces variables sont identifiées par un même nom
mais un numéro de repère(indice) pour chacun.

Remarque :

1°- Un tableau peut être d’une ou plusieurs dimensions.


2°- La syntaxe de la déclaration d’un tableau change selon
la dimension de ce dernier

KHOULI Oussama 179


Tableaux
Syntaxe de la déclaration :

Tableau à une dimension :

Tab Nom-Tableau[nombre de valeurs supportées] : Type

Tableau à plusieurs dimensions :

Tab Nom-Tableau[nombre de valeurs supportées en dimension1,


nombre de valeurs supportées en dimension 2,
,… ] : Type

KHOULI Oussama 180


Tableaux
Syntaxe de la déclaration :
Tableau à une dimension :

KHOULI Oussama 181


Tableaux

Tableau à une dimension :


- Un tableau pour enregistrer les salaires de 30 employés :
Tab Salaires[30] : Réel
Salaires[16] = 4000.50
Tableau à plusieurs dimensions :
- Une matrice d’entiers de 5 lignes et 7 colonnes :
Tab Matrice-Test[5,7 ] : Entier
Matrice-Test[2,3] = 13
KHOULI Oussama 182
Tableaux
Exemples

Déclaration de la variable N de l’algorithme note :


Variable Tableau Notes [ 6 ] : Réel
Le tableau est représenté schématiquement dans la mémoire comme suit :

KHOULI Oussama 183


Initialisation d’un Tableau
Comme les variables scalaires, les tableaux peuvent être initialisés avec
n’importe quelle valeur. Il est possible, comme on le fait pour une variable
scalaire, d’initialiser partiellement ou totalement un tableau lors de sa
déclaration. Cette fois, cependant, les valeurs fournies devront
obligatoirement être des expressions constantes.
Exemples

KHOULI Oussama 184


Initialisation d’un Tableau
Exemples

KHOULI Oussama 185


Accès aux Éléments d’un Tableau :
Syntaxe d’affectation :

Exemple :

KHOULI Oussama 186


Accès aux Éléments d’un Tableau :
Syntaxe de lecture :

Exemple :

KHOULI Oussama 187


Accès aux Éléments d’un Tableau :
Syntaxe d’écriture :

Exemple
:

KHOULI Oussama 188


Parcours d’un Tableau :
Le parcours de tous les éléments d’un tableau, se fait à l’aide de la
boucle
Pour ou Tantque.
Exemple de remplissage de tous les éléments du tableau T[5]
avec l’instruction Lire :

KHOULI Oussama 189


Parcours d’un Tableau :

Exempel d’affichage de tous les éléments du tableau T avec l’instruction


Ecrire :

KHOULI Oussama 190


Les tableaux
Exercice 1 : Ecrire un programme C qui permet de lire N notes, de calculer et
d’afficher la moyenne puis l’écart entre chaque note et la moyenne

Exercice 2 :

• Écrire un programme qui lit un tableau de n nombres (donné par


l’utilisateur).
1

• Trouver et afficher l’élément maximum et l’élément minimum du


tableau.

KHOULI Oussama 191


Les tableaux
Tableau Note[11]:Réel
Variable Moy, Som, Ecart : Réel
Début
Pour i ← 0 à 10 faire
Ecrire ("Entrez la note n", i)
Lire (Note([i])
Fpour
Som ← 0
Pour i ← 0 à 10 faire
Som ← Som + Note[i]
Fpour
Moy ← Som / 11
Ecrire (‘la moyenne est ’,Moy)
Pour i ← 0 à 10 faire
Ecart ← (Note[i] – Moy)2
Ecrire (‘l’ecart type de ‘, Note[i], ′est ’,Ecart)
Fpour

Fin

KHOULI Oussama 192


Les tableaux
Tableau Tab[n]:Réel
Variable Max, Min: Réel
Début
Ecrire (‘Donner le nombre des éléments de votre tableau’)
Lire (n)
Pour i ← 0 à n-1 faire
Ecrire ("Entrez le nombre", i+1)
Lire (Tab([i])
Fpour
max ← 0
Pour i ← 0 à n-1 faire
Si (max> Tab[i]) alors
max= Tab[i]
Fpour
Min=0
Pour i ← 0 à n-1 faire
Si (Min< Tab[i]) alors
Min= Tab[i]
Fpour
Ecrire (le maximum est ’,Max, ‘et le minimum est ’, min )
Fin
KHOULI Oussama 193
Les tableaux multidimensionnels
• Les tableaux multidimensionnels sont des tableaux qui contiennent des
tableaux
• Par exemple le tableau bidimensionnel suivant (3 lignes, 4 colonnes),
est en fait un tableau comportant 3 éléments, chacun d’entre eux étant
un tableau de 4 éléments :

Il est stocké en mémoire de la manière suivante :

Figure – Caption

KHOULI Oussama 194


Les tableaux multidimensionnels
Un tableau multidimensionnel se définit de la manière suivante :

• Chaque élément entre crochets désigne le nombre d’éléments dans chaque


dimension
• Le nombre de dimension n’est pas limité

Un tableau d’entiers positifs à deux dimensions (3 lignes, 4 colonnes) se définira en


C avec la syntaxe suivante :

int Tableau [3][4]

KHOULI Oussama 195


Les tableaux multidimensionnels

Initialiser les éléments

L’initialisation d’un tableau multidimensionnel se fait à peu près de la même


façon que pour les tableaux unidimensionnels
Il y a donc plusieurs façons d’initialiser un tableau multidimensionnel :

Initialisation individuelle de chaque élément :

Nom_du_tableau [0][0] = 2 ;
Nom_du_tableau [0][1] = 3 ;

KHOULI Oussama 196


Les tableaux multidimensionnels
Parcours d’un Tableau à Deux Dimensions
Remplissage de tous les éléments du tableau T[5][5] avec l’instruction Lire :

KHOULI Oussama 197


Les tableaux multidimensionnels
Affichage de tous les éléments du tableau T[5][5] avec l’instruction
Ecrire :

KHOULI Oussama 198


Exemple 1: Calcul Moyenne
Tableau Note[11]:Réel
Variable Moy, Som : Réel
Début
Pour i ← 1 à 11 faire
Ecrire ("Entrez la note n", i)
Lire (Note([i])
Fpour
Som ← 0
Pour i ← 1 à 11 faire
Som ← Som + Note[i]
Fpour
Moy ← Som / 11
Ecrire (‘la moyenne est ’,Moy)
Fin

KHOULI Oussama 199


Exercice
Écrire un programme C qui saisit les notes des étudiants de la classe (de 20 étudiants) et
qui calcule le nombre d’étudiants ayant dépassé la moyenne de la classe.

KHOULI Oussama 200


Exercice
Écrire un programme qui saisit et affiche les éléments d'une matrice n*m.

KHOULI Oussama 201


Exercice
Écrire un programme qui calcule la somme de deux matrices carrées de taille n
composées d'entiers et place le résultat dans une troisième matrice

KHOULI Oussama 202


Fonctions et procédures

Ce sont des sous-programmes auxquels on peut faire


référence à l’intérieur d’un programme . Ils sont conçus pour
éviter les répétitions et pour découper des programmes jugés
trop longs ce qui facilite la lisibilité du programme principal.

Remarques :
1°- Les Fonctions et les Procédures sont caractérisées par des
paramètres d’entrée et des paramètres de sortie.
2°-La fonction retourne une seule valeur tandis que La
procédure peut retourner plusieurs valeurs ou aucune.
KHOULI Oussama 203
Pourquoi la Modularité ?
• Problème : Les programmes deviennent longs,
complexes et difficiles à lire.
• Solution : Découper un gros problème en petits
sous-problèmes indépendants (modules).
• Avantages :
– Réutilisation du code (écrire une fois, utiliser plusieurs
fois).
– Lisibilité et maintenance facilitées.
– Travail en équipe (chaque développeur travaille sur un
module).

KHOULI Oussama 204


Le concept de "Boîte Noire"
• Schéma d'un module :

[Entrées] → [TRAITEMENT] →[Sorties].

• L'utilisateur du module n'a pas besoin de


savoir comment ça marche à l'intérieur, il a
juste besoin de connaître les entrées
nécessaires et le résultat fourni.

KHOULI Oussama 205


La Fonction (Définition)
• Définition : Un sous-programme qui effectue
des calculs et renvoie obligatoirement un
résultat unique à l'algorithme principal.
• Analogie : La fonction mathématique
• 𝑓 𝑥 = 𝑦.
• Exemple : Une fonction qui calcule la racine
carrée ou la moyenne.

KHOULI Oussama 206


Syntaxe d'une Fonction (Pseudo-code)
• Fonction nom_fonction (param1 : type, param2 :
type) : type_du_retour
Variables
// variables locales
Début
// Instructions
Retourner valeur
Fin

KHOULI Oussama 207


Example d'une Fonction
(Pseudo-code)
Algorithme
Fonction Calcul_Elite
TrouverMax (n1 : Entier, n2 : Entier) : Entier
Variables
Variables
maxa,: Entier
b, resultat : Entier
Début
Début
Ecrire("Entrez
Si (n1 > n2) Alors deux nombres : ")
Lire(a,
max <- n1b)
Sinon
// Appel
max <- n2 de la fonction et stockage du retour
FinSiresultat <- TrouverMax(a, b)

Ecrire("Le
Retourner maxplus grand est : ", resultat)
Fin Fin

KHOULI Oussama 208


La Procédure (Définition)
• Définition : Un sous-programme qui exécute
une série d'actions mais ne renvoie pas de
valeur de retour.
• Exemple : Une procédure qui affiche un menu,
qui trie un tableau ou qui nettoie l'écran.
• Différence clé : Elle "fait" quelque chose au
lieu de "donner" quelque chose.

KHOULI Oussama 209


Syntaxe d'une Procédure (Pseudo-code)

• Procédure nom_procedure (param1 : type, ...)


Variables
// variables locales
Début
// Instructions (Affichage, modification, etc.)
Fin

KHOULI Oussama 210


Example d'une Procédure (Pseudo-code)
Procédure Algorithme Presentation
AfficherLigne (symbole : Caractère, longueur :
Entier) Début
Ecrire("Titre du Tableau")
Variables
i : Entier // Appel de la procédure
Début AfficherLigne('=', 20)
Pour i allant de 1 à longueur Faire
Ecrire("Donnée 1 | Donnée 2")
Ecrire(symbole)
FinPour
// Nouvel appel avec d'autres valeurs
Ecrire("\n")AfficherLigne('-',
// Retour à la 20)
ligne à la fin
Fin Fin

KHOULI Oussama 211


Les Paramètres (Arguments)
• Paramètres Formels (ou muets) : Déclarés
dans l'en-tête du module. Ils servent de
variables de travail locales.
• Paramètres Effectifs (ou réels) : Les valeurs
envoyées lors de l'appel du module dans le
programme principal.
• Règle : Correspondance exacte en nombre,
en ordre et en type.

KHOULI Oussama 212


Les Paramètres (Arguments)
Fonction CalculPrix (prixHT : Réel, tauxRemise :
Entier) : Réel
Début
// prixHT et tauxRemise sont des PARAMÈTRES
FORMELS (muets)
// Ils servent de "boîtes vides" en attendant
l'exécution.
Retourner prixHT * (1 - tauxRemise/100)
Fin

KHOULI Oussama 213


Les Paramètres (Arguments)
La Définition (Le "Plan de
travail")
Fonction CalculPrix (prixHT : Réel, tauxRemise :
Entier) : Réel
Début
// prixHT et tauxRemise sont des PARAMÈTRES
FORMELS (muets)
// Ils servent de "boîtes vides" en attendant
l'exécution.
Retourner prixHT * (1 - tauxRemise/100)
Fin

KHOULI Oussama 214


Les Paramètres (Arguments)
L'Appel (La "Mise en pratique")
Algorithme Principal
Variables
monAchat : Réel
Début
monAchat <- CalculPrix(200.0, 15)
// 200.0 et 15 sont des PARAMÈTRES EFFECTIFS
(réels)
// Ce sont les vraies valeurs que l'on envoie au
module.
Fin
KHOULI Oussama 215
"Règle d'Or" (Nombre, Ordre, Type)
• C'est le point le plus important de votre diapo. Expliquez
pourquoi c'est obligatoire :
• En NOMBRE :
– Si j'écris CalculPrix(200.0), l'ordinateur s'arrête et demande
: "Où est le taux de remise ?". Il manque une information.
• En ORDRE :
– Si j'écris CalculPrix(15, 200.0), l'ordinateur va essayer de calculer
un prix de 15€ avec une remise de 200% ! Le résultat sera
absurde car l'ordre n'est pas respecté.
• En TYPE :
– Si j'écris CalculPrix("Cher", 15), l'ordinateur plante car il ne peut
pas faire de mathématiques sur le mot "Cher". Il attendait
un Réel.

KHOULI Oussama 216


La Portée des Variables (Scope)
• Variables Locales : Déclarées à l'intérieur
d'une fonction/procédure. Elles ne sont
connues que par ce module. Elles sont
détruites à la fin de l'exécution du module.
• Variables Globales : Déclarées au début du
programme principal. Elles sont visibles par
tous les modules.
• Conseil : Éviter les variables globales pour
garder un code propre (encapsulation).

KHOULI Oussama 217


Modes de passage des paramètres
• Passage par Valeur : On envoie une copie. Le
module ne peut pas modifier la variable originale.
(Sécurisé).
• Passage par Référence (ou Adresse) : On envoie
l'adresse de la variable. Le module peut modifier
directement l'original. (Indispensable pour que
les procédures "renvoient" plusieurs résultats).
• Rappel de l'analogie : La Photocopie vs Le GPS.

KHOULI Oussama 218


Exemple complet
(Algorithme Principal + Module)
• Écrire un algorithme qui utilise une
fonction CalculerSurface(r) et une
procédure AfficherResultat(s).
• Montrer l'appel de chacun dans le
bloc Début...Fin principal.

KHOULI Oussama 219


Exemple complet
(Algorithme Principal + Module)
• Écrire un algorithme qui utilise une
fonction CalculerSurface(r) et une
procédure AfficherResultat(s).
• Montrer l'appel de chacun dans le
bloc Début...Fin principal.

KHOULI Oussama 220


Exemple complet (Algorithme Principal + Module)
1. La Fonction : CalculerSurface
Fonction CalculerSurface (r : Réel) : Réel
Constantes PI = 3.14159
Début
Retourner PI * r * r Fin
2. La Procédure : AfficherResultat
Procédure AfficherResultat (s : Réel)
Début
Ecrire("--------------------------------------")
Ecrire("Le résultat de la surface est : ", s)
Ecrire("--------------------------------------")
Fin

KHOULI Oussama 221


Exemple complet (Algorithme Principal + Module)
3. L'Algorithme Principal
Algorithme Geometrie_Cercle
Variables
rayon_saisi : Réel
surface_finale : Réel
Début
// 1. Entrée des données
Ecrire("Entrez le rayon du cercle : ")
Lire(rayon_saisi)

// 2. Appel de la FONCTION
// On stocke le résultat renvoyé par la fonction dans une variable
surface_finale <- CalculerSurface(rayon_saisi)

// 3. Appel de la PROCÉDURE
// On lui donne le résultat pour qu'elle l'affiche
AfficherResultat(surface_finale)
Fin

KHOULI Oussama 222


Traduction d'une fonction en C
type_retour nom_fonction(type1 param1, type2
param2) {
// Corps de la fonction (instructions)
return valeur;
}
On remplace le mot-clé "Fonction" par le type de donnée que l'on veut
renvoyer (int, float, char, etc.).

Return joue le rôle de retourner Arrête immédiatement l'exécution de la


fonction et renvoie le résultat à l'appelant.

KHOULI Oussama 223


Les Procédures en C (Type void)
• Puisque la procédure n'existe pas en tant que mot-
clé, on utilise une fonction de type void (vide).
• Syntaxe : void afficherMessage() { ... }
• Appel simple : nom_fonction(arguments);

KHOULI Oussama 224


Le Prototype de fonction (Déclaration)
• Problème : Le compilateur lit de haut en bas.
S'il voit un appel avant la définition, il fait une
erreur.
• Solution : Déclarer la signature de la fonction
en haut du fichier (avant le main).
• Syntaxe :
type nom(types_parametres); (n'oubliez pas
le ;).

KHOULI Oussama 225


Passage par Valeur (Par défaut)
• L'argument effectif est copié dans l'argument
formel.
• Toute modification à l'intérieur de la fonction
n'affecte pas la variable originale dans le
main.

KHOULI Oussama 226


Passage par Adresse (Pointeurs)
• On envoie l'adresse de la variable (&variable).
• L'argument formel est un pointeur (type *p).
• Permet à une fonction de modifier
directement la variable originale ou de
"renvoyer" plusieurs résultats.

KHOULI Oussama 227


Passage par Adresse (Pointeurs)

Avant échange : a = 2.40


b = 5.70
Après échange : a = 5.70
b = 2.40

KHOULI Oussama 228


FIN
KHOULI Oussama 229

Vous aimerez peut-être aussi