Cours Algorithmique GIM
Cours Algorithmique GIM
Département d’informatique
Pr. KHOUILI Oussama
Contenu du Module
• Chapitre 1: Généralités
KHOULI Oussama 2
Chapitre 1: Généralités
• Introduction
• 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.
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:
1012 1 2 2 0 21 1 2 0 5
102 1 21 0 2 0 2
11112 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
KHOULI Oussama 22
Algorithmique
Définition :
KHOULI Oussama 23
Langage de programmation
Définition :
Exemple :
KHOULI Oussama 24
Compilateur
Définition :
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
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 :
Syntaxe de la déclaration :
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 :
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 :
Exemple :
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 :
Exemple :
KHOULI Oussama 34
Booléen
Définition :
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
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 :
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’ )
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é:
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
KHOULI Oussama 49
- Analyse du problème
• Recenser les données dont on dispose, celles qu’on cherche
à produire
Indication :
KHOULI Oussama 52
Représentation en langage C
KHOULI Oussama
53
Structure d’un programme C
KHOULI Oussama
54
Structure d’un programme C
#include<stdio.h>
Void main () {
}
monProgramme.c
KHOULI Oussama
55
Structure d’un programme C
#include <stdio.h>
void main()
{
printf(" Bonjour tout le monde ") ;
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
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 ;
X4 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
KHOULI Oussama
63
De l’algorithmique au C
Traduction des déclarations d’un algorithme : variables
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) :
• 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.
KHOULI Oussama 74
Nombre caractères affiches
• 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 }
KHOULI Oussama 75
Afficher le contenu d'une variable
• 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.
• 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
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.
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
• 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.
• 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.
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');
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
Exemple:
int C;
Scanf("%c",&c);
C = getchar();
KHOULI Oussama
86
Les Constantes caractères (Séquences d'échappement)
KHOULI Oussama
87
Les opérateurs standards
Opérateurs de comparaison
== égal à
!= différent de
<, <=, >, >= plus petit que, ...
KHOULI Oussama
88
Initialisation des variables
Exemple:
int A,MAX = 1023;
char C,TAB = '\t';
float X = 1.05e-4;
Remarque:
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
Exemple:
KHOULI Oussama 91
Les opérateurs particuliers de C
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
KHOULI Oussama 96
Les priorités des opérateurs
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
1. c1 + n
2. c1 + 1
3. c1 − c2
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
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
• Structure alternative
Structure alternative
Les conditions :
+ Addition
- Soustraction
* Multiplication
/ Division
Opérateur Signification
= Égal
< Inférieur
> Supérieur
<= Inférieur ou égal
>= Supérieur ou égal
<> différent
Opérateur Signification
Et Et logique
Ou Ou logique
Ou = Xor Ou exclusif
Expression Résultat
(4 <7) ET (9>0) Vrai
(1 < 0) OU (1<>1) Faux
Non(13.4 < 15) Faux
• 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.
• Exemple
• La valeur de max pourrait être définie par la phrase : "Si a > b alors a, sinon b".
• Cet opérateur est aussi appelé opérateur ternaire. Il permet de réaliser une instruction
conditionnelle de manière courte.
• Syntaxe :
(condition) ? expression_vraie : expression_fausse
Exercice : Écrire un programme qui demande un nombre entier à l'utilisateur, puis qui
teste et affiche s'il est divisible par 3.
• 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 :
• 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 :.
- 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.
• 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.
É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
• 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.
Solution Classique :
DEBUT
Écrire (' Bonjour tout le monde ') 1
Écrire (' Bonjour tout le monde ') 2
.
.
Écrire (' Bonjour tout le monde ') 300
FIN
Syntaxe :
<initialisation>
Tant que Condition Faire
<bloc de traitement>
<bloc de contrôle> Action
exécuté.
Si valeur(T)=Faux on passe à l'instruction suivante.
boucle.
La boucle n'est pas INCONDITIONNELLE. On
Syntaxe :
<Initialisation>
Faire
<bloc de traitement>
<bloc de progression > Action
Jusqu’à Condition
<Bloc de traitement>
Fin 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
• Syntaxe
• 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)
• 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 :
• 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.
• 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.
• Écrire un programme qui détermine le premier nombre entier N tel que la somme de 1 à N
dépasse strictement 100.
• Les trois instructions break, continue et goto fournissent des possibilités diverses de
branchement inconditionnel :
• 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.
• Exemple :
• En cas de boucles imbriquées, l'instruction continue ne concerne que la boucle la plus interne
• Exemple :
Remarque :
Exemple :
Exemple :
Exemple
:
Exercice 2 :
Fin
Figure – Caption
Nom_du_tableau [0][0] = 2 ;
Nom_du_tableau [0][1] = 3 ;
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).
Ecrire("Le
Retourner maxplus grand est : ", resultat)
Fin Fin
// 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