Vous êtes sur la page 1sur 49

Objectif et plan du cours

Objectif:
Apprendre les concepts de base de l'algorithmique et de la
programmation

Etre capable de mettre en uvre ces concepts pour


analyser des problmes simples et crire les programmes
correspondants

Plan:

Algorithmique (affectation, instructions conditionnelles,


instructions itratives, )

ALGO/ SABOUNDJI 1
Etapes de ralisation dun programme
Enonc du problme
Spcification
Cahier des charges
Analyse
Algorithme
Traduction en langage
Programme source
Compilation
Programme excutable
Tests et modifications
Version finale et rsultats

La ralisation de programmes passe par lcriture dalgorithmes


Do lintrt de lAlgorithmique
ALGO/ SABOUNDJI 2
Algorithmique
Le terme algorithme vient du nom du mathmaticien arabe

Al-Khawarizmi (820 aprs J.C.)


Un algorithme est une description complte et dtaille des actions
effectuer et de leur squencement pour arriver un rsultat
donn
Intrt: sparation analyse/codage (pas de proccupation de syntaxe)
Qualits: exact (fournit le rsultat souhait), efficace (temps dexcution,
mmoire occupe), clair (comprhensible), gnral (traite le plus grand
nombre de cas possibles),

Lalgorithmique dsigne aussi la discipline qui tudie les


algorithmes et leurs applications en Informatique
Une bonne connaissance de lalgorithmique permet dcrire des
algorithmes exacts et efficaces

ALGO/ SABOUNDJI 3
Reprsentation dun algorithme

Historiquement, deux faons pour reprsenter un


algorithme:
LOrganigramme: reprsentation graphique avec des
symboles (carrs, losanges, etc.)
offre une vue densemble de lalgorithme
reprsentation quasiment abandonne aujourdhui

Le pseudo-code: reprsentation textuelle avec une srie


de conventions ressemblant un langage de programmation
(sans les problmes de syntaxe)
plus pratique pour crire un algorithme
reprsentation largement utilise

ALGO/ SABOUNDJI 4
Notions et instructions de
base

ALGO/ SABOUNDJI 5
Notion de variable
Dans les langages de programmation une variable sert
stocker la valeur dune donne

Une variable dsigne en fait un emplacement mmoire


dont
le contenu peut changer au cours dun programme (do
le nom variable)

Rgle : Les variables doivent tre dclares avant dtre


utilises, elle doivent tre caractrises par :
un nom (Identificateur)
Identificateur
un type (entier, rel, caractre, chane de caractres, )

ALGO/ SABOUNDJI 6
Choix des identificateurs (1)
Le choix des noms de variables est soumis quelques
rgles qui varient selon le langage, mais en gnral:
Un nom doit commencer par une lettre alphabtique
exemple valide: A1 exemple invalide: 1A
doit tre constitu uniquement de lettres, de chiffres et du
soulignement _ (Eviter les caractres de ponctuation et les
espaces) valides: SMIP2007, SMP_2007 invalides:
SMP 2005,SMI-2007,SMP;2007
doit tre diffrent des mots rservs du langage (par exemple
en Java:
Java int, real, begin ,end , else ,

La longueur du nom doit tre infrieure la taille maximale


spcifie par le langage utilis

ALGO/ SABOUNDJI 7
Choix des identificateurs (2)
Conseil: pour la lisibilit du code choisir des noms
significatifs qui dcrivent les donnes
manipules
exemples: TotalVentes2015, Prix_TTC, Prix_HT

ALGO/ SABOUNDJI 8
Types des variables

Le type dune variable dtermine lensemble des valeurs quelle peut


prendre, les types offerts par la plus part des langages sont:
Type numrique (entier ou rel)
Byte (cod sur 1octet): de 0 255
Entier court (cod sur 2 octets) : -32 768 32 767
Entier long (cod sur 4 ou 8 octets)
Rel simple prcision (cod sur 4 octets)
Rel double prcision (cod sur 8 octets)

Type logique ou boolen: deux valeurs VRAI ou FAUX

Type caractre: lettres majuscules, minuscules, chiffres, symboles,



exemples: A, a, 1, ?,
Type chane de caractre: toute suite de caractres,
exemples: " Nom, Prnom", "code postale: 1000",

ALGO/ SABOUNDJI 9
Dclaration des variables
Rappel: toute variable utilise dans un programme doit
avoir fait lobjet dune dclaration pralable
En pseudo-code, on va adopter la forme suivante pour la
dclaration de variables
Variables liste d'identificateurs : type
Exemple:
Variables i, j,k : entier
x, y : rel
OK: boolen
ch1, ch2 : chane de caractres
Remarque: pour le type numrique on va se limiter aux
entiers et rels sans considrer les sous types

ALGO/ SABOUNDJI 10
Linstruction daffectation
laffectation consiste attribuer une valeur une variable
(a consiste en fait remplir o modifier le contenu d'une zone mmoire)

En pseudo-code, l'affectation se note avec le signe


Var e: attribue la valeur de e la variable Var
- e peut tre une valeur, une autre variable ou une expression
- Var et e doivent tre de mme type ou de types compatibles
- laffectation ne modifie que ce qui est gauche de la flche

Ex valides: i 1 j i k i+j
x 10.3 OK FAUX ch1 "SMI"
ch2 ch1 x 4 x j

ALGO/ SABOUNDJI 11
Quelques remarques

En pascal le signe utilise pour laffectation est :=

l'affectation n'est pas commutative : A:=B est


diffrente de B:=A
l'affectation est diffrente d'une quation
mathmatique

A:=A+1 a un sens en langages de


programmation

ALGO/ SABOUNDJI 12
Exercices simples sur l'affectation (1)

Donnez les valeurs des variables A, B et C aprs


excution des instructions suivantes?

Variables A, B, C: Entier
Dbut
A3
B7
AB
B A+5
CA+B
CBA
Fin

ALGO/ SABOUNDJI 13
Exercices simples sur l'affectation (2)
Donnez les valeurs des variables A et B aprs excution des
instructions suivantes?

Variables A, B : Entier
Dbut
A1
B2
AB
BA
Fin

Les deux dernires instructions permettent-elles


dchanger les valeurs de A et B?

ALGO/ SABOUNDJI 14
Exercices simples sur l'affectation (3)
Ecrire un algorithme permettant dchanger
les valeurs de deux variables A et B

ALGO/ SABOUNDJI 15
Expressions et oprateurs
Une expression peut tre une valeur, une variable ou une
opration constitue de variables relies par des oprateurs
L'valuation de l'expression fournit une valeur unique qui est le
rsultat de l'opration
Les oprateurs dpendent du type de l'opration, ils peuvent
tre :
des oprateurs arithmtiques: +, -, *, /, % (modulo), ^ (puissance)
des oprateurs logiques: NON, OU, ET
des oprateurs relationnels: =, , <, >, <=, >=
des oprateurs sur les chanes: & (concatnation)

Une expression est value de gauche droite mais en tenant
compte de priorits

ALGO/ SABOUNDJI 16
Priorit des oprateurs

Pour les oprateurs arithmtiques donns ci-dessus, l'ordre


de priorit est le suivant (du plus prioritaire au moins prioritaire) :

^ : (lvation la puissance)
* , / (multiplication, division)
% (modulo)
+ , - (addition, soustraction)

exemple: 2+3*7 vaut 23

En cas de besoin (ou de doute), on utilise les parenthses


pour indiquer les oprations effectuer en priorit
exemple: (2 + 3) * 7 vaut 35
3

ALGO/ SABOUNDJI 17
Les instructions d'entres-sorties: lecture et
criture (1)
Les instructions de lecture et d'criture permettent la
machine de communiquer avec l'utilisateur
La lecture permet d'entrer des donns partir du clavier

En pseudo-code, on note: lire (var)


la machine met la valeur entre au clavier
dans la zone mmoire nomme var

Remarque: Le programme s'arrte lorsqu'il rencontre une


instruction Lire et ne se poursuit qu'aprs la frappe dune
valeur au clavier et de la touche Entre

ALGO/ SABOUNDJI 18
Les instructions d'entres-sorties: lecture et
criture (2)
L'criture permet d'afficher des rsultats l'cran (ou de
les crire dans un fichier)

En pseudo-code, on note: crire (var)


la machine affiche le contenu de
la zone mmoire var

Conseil: Avant de lire une variable, il est fortement


conseill dcrire des messages lcran, afin de prvenir
lutilisateur de ce quil doit frapper

ALGO/ SABOUNDJI 19
Exemple (lecture et
criture)
Ecrire un algorithme qui demande un nombre entier
l'utilisateur, puis qui calcule etaffiche le double de ce
nombre

Algorithme Calcul_double
variables A, B : entier
Dbut
crire("entrer le nombre ")
lire(A)
B 2*A
crire("le double de ", A, "est :", B)
Fin
ALGO/ SABOUNDJI 20
Exercice (lecture et criture)
Ecrire un algorithme qui vous demande de saisir votre nom
puis votre prnom et qui affiche ensuite votre nom complet

Algorithme AffichageNomComplet
variables Nom, Prenom, Nom_Complet : chane de caractres
Dbut
crire("entrez votre nom")
lire(Nom)
crire("entrez votre prnom")
lire(Prenom)
Nom_Complet Nom & Prenom
crire("Votre nom complet est : ", Nom_Complet)
Fin

ALGO/ SABOUNDJI 21
Tests: instructions conditionnelles (1)

Les instructions conditionnelles servent n'excuter une


instruction ou une squence d'instructions que si une condition
est vrifie
On utilisera la forme suivante: Si condition alors
instruction ou suite d'instructions1
Sinon
instruction ou suite d'instructions2
Finsi
la condition ne peut tre que vraie ou fausse

si la condition est vraie, se sont les instructions1 qui seront excutes

si la condition est fausse, se sont les instructions2 qui seront excutes

la condition peut tre une condition simple ou une condition compose


de plusieurs conditions

ALGO/ SABOUNDJI 22
Tests: instructions conditionnelles (2)
La partie Sinon n'est pas obligatoire, quand elle n'existe pas
et que la condition est fausse, aucun traitement n'est ralis

On utilisera dans ce cas la forme simplifie suivante:

Si condition alors
instruction ou suite d'instructions1
Finsi

ALGO/ SABOUNDJI 23
Exemple (SiAlors
Sinon)
Algorithme AffichageValeurAbsolue (version1)
Variable x : rel
Dbut
Ecrire (" Entrez un rel: )
Lire (x)
Si (x < 0) alors
Ecrire ("la valeur absolue de ", x, "est:",-x)
Sinon
Ecrire ("la valeur absolue de ", x, "est:",x)
Finsi
Fin

ALGO/ SABOUNDJI 24
Exemple (SiAlors)
Algorithme AffichageValeurAbsolue (version2)
Variable x,y : rel
Dbut
Ecrire (" Entrez un rel: )
Lire (x)
y x
Si (x < 0) alors
y -x
Finsi
Ecrire ("la valeur absolue de ", x, "est:",y)
Fin

ALGO/ SABOUNDJI 25
Exercice (tests)
Ecrire un algorithme qui demande un nombre entier
l'utilisateur, puis qui teste etaffiche s'il est divisible par
3
Algorithme Divsible_par3
Variable n : entier
Dbut
Ecrire " Entrez un entier: "
Lire (n)
Si (n mod 3=0) alors
Ecrire (n," est divisible par 3")
Sinon
Ecrire (n," n'est pas divisible par 3")
Finsi
Fin

ALGO/ SABOUNDJI 26
Conditions composes
Une condition compose est une condition forme de
plusieurs conditions simples relies par des oprateurs
logiques:
ET, OU, OU exclusif (XOR) et NON

Exemples :
x compris entre 2 et 6 : (x > 2) ET (x < 6)

n divisible par 3 ou par 2 : (n mod 3=0) OU (n mod 2=0)

L'valuation d'une condition compose se fait selon des


rgles prsentes gnralement dans ce qu'on appelle
tables de vrit

ALGO/ SABOUNDJI 27
Tables de vrit
C1 C2 C1 ET C2 C1 C2 C1 OU C2
VRAI VRAI VRAI VRAI VRAI VRAI
VRAI FAUX FAUX VRAI FAUX VRAI
FAUX VRAI FAUX FAUX VRAI VRAI
FAUX FAUX FAUX FAUX FAUX FAUX

C1 C2 C1 XOR C2 C1 NON C1
VRAI VRAI FAUX VRAI FAUX
VRAI FAUX VRAI FAUX VRAI
FAUX VRAI VRAI
FAUX FAUX FAUX

ALGO/ SABOUNDJI
Tests imbriqus
Les tests peuvent avoir un degr quelconque d'imbrications
Si condition1 alors
Si condition2 alors
instructionsA
Sinon
instructionsB
Finsi
Sinon
Si condition3 alors
instructionsC
Finsi
Finsi

ALGO/ SABOUNDJI 29
Tests imbriqus: exemple 1

Variable n : entier
Dbut
Ecrire ("entrez un nombre: ")
Lire (n)
Si (n < 0) alors
Ecrire ("Ce nombre est ngatif")
Sinon
Si (n = 0) alors
Ecrire ("Ce nombre est nul")
Sinon
Ecrire ("Ce nombre est positif")
Finsi
Finsi
Fin

ALGO/ SABOUNDJI 30
Tests imbriqus: exemple 2

Variable n : entier
Dbut
Ecrire ("entrez un nombre: ")
Lire (n)
Si (n < 0) alors Ecrire ("Ce nombre est ngatif")
Finsi
Si (n = 0) alors Ecrire ("Ce nombre est nul")
Finsi
Si (n > 0) alors Ecrire ("Ce nombre est positif")
Finsi
Fin
Remarque : dans la version 2 on fait trois tests systmatiquement
alors que dans la version 1, si le nombre est ngatif on ne fait
qu'un seul test
Conseil : utiliser les tests imbriqus pour limiter le nombre de tests
et placer d'abord les conditions les plus probables

ALGO/ SABOUNDJI 31
Tests imbriqus: exercice
Le prix de photocopies dans une reprographie varie selon le
nombre demand: 0,5 Da la copie pour un nombre de
copies infrieur 10, 0,4Da pour un nombre compris entre
10 et 20 et 0,3Da au-del.

Ecrivez un algorithme qui demande lutilisateur le nombre


de photocopies effectues, qui calcule et affiche le prix
payer

ALGO/ SABOUNDJI 32
Tests imbriqus: corrig de l'exercice

Variables copies : entier


prix : rel
Dbut
Ecrire ("Nombre de photocopies : ")
Lire (copies)
Si (copies < 10) Alors
prix copies*0.5
Sinon Si (copies) < 20
prix copies*0.4
Sinon
prix copies*0.3
Finsi
Finsi
Ecrire (Le prix payer est : , prix)
Fin

ALGO/ SABOUNDJI 33
Instructions itratives: les boucles
Les boucles servent rpter l'excution d'un groupe
d'instructions un certain nombre de fois

On distingue trois sortes de boucles en langages de


programmation :
Les boucles tant que : on y rpte des instructions tant qu'une
certaine condition est ralise
Les boucles repeter jusqu' : on y rpte des instructions jusqu'
ce qu'une certaine condition soit ralise
Les boucles pour ou avec compteur : on y rpte des instructions
en faisant voluer un compteur (variable particulire) entre une
valeur initiale et une valeur finale

ALGO/ SABOUNDJI 34
Les boucles Tant que
TantQue (condition)
instructions condition Vrai instructions
FinTantQue
Faux

la condition (dite condition de contrle de la boucle) est value avant


chaque itration
si la condition est vraie, on excute instructions (corps de la boucle),
puis, on retourne tester la condition. Si elle est encore vraie, on rpte
l'excution,
si la condition est fausse, on sort de la boucle et on excute l'instruction
qui est aprs FinTantQue

ALGO/ SABOUNDJI 35
Les boucles Tant que : remarques
Le nombre d'itrations dans une boucle TantQue n'est pas
connu au moment d'entre dans la boucle. Il dpend de
l'volution de la valeur de condition

Une des instructions du corps de la boucle doit absolument


changer la valeur de condition de vrai faux (aprs un certain
nombre d'itrations), sinon le programme tourne indfiniment

Attention aux boucles infinies


Exemple de boucle infinie :
i2
TantQue (i > 0)
i i+1 (attention aux erreurs de frappe : + au lieu de -)
FinTantQue

ALGO/ SABOUNDJI 36
Boucle Tant que : exemple1
Contrle de saisie d'une lettre majuscule jusqu ce que le
caractre entr soit valable

Variable C : caractre
Debut
Ecrire (" Entrez une lettre majuscule ")
Lire (C)
TantQue (C < 'A' ou C > 'Z')
Ecrire ("Saisie errone. Recommencez")
Lire (C)
FinTantQue
Ecrire ("Saisie valable")
Fin

ALGO/ SABOUNDJI 37
Boucle Tant que : exemple2
Un algorithme qui dtermine le premier nombre entier N tel
que la somme de 1 N dpasse strictement 100

version 1
Variables som, i : entier
Debut
i0
som 0
TantQue (som <=100)
i i+1
som som+i
FinTantQue
Ecrire (" La valeur cherche est N= ", i)
Fin

ALGO/ SABOUNDJI 38
Les boucles Pour
Pour compteur allant de initiale finale par pas valeur
du pas

instructions

FinPour
i initiale

Vrai
i n'a pas atteint finale instructions i i + pas

Faux

ALGO/ SABOUNDJI 39
Les boucles Pour
Remarque : le nombre d'itrations dans une boucle Pour est
connu avant le dbut de la boucle

Compteur est une variable de type entier (ou caractre). Elle


doit tre dclare

Pas est un entier qui peut tre positif ou ngatif. Pas peut ne
pas tre mentionn, car par dfaut sa valeur est gal 1. Dans
ce cas, le nombre d'itrations est gal finale - initiale+ 1

Initiale et finale peuvent tre des valeurs, des variables


dfinies avant le dbut de la boucle ou des expressions de
mme type que compteur

ALGO/ SABOUNDJI 40
Droulement des boucles Pour
1) La valeur initiale est affecte la variable compteur

2) On compare la valeur du compteur et la valeur de finale :

a) Si la valeur du compteur est > la valeur finale dans le cas d'un


pas positif (ou si compteur est < finale pour un pas ngatif), on
sort de la boucle et on continue avec l'instruction qui suit FinPour

b) Si compteur est <= finale dans le cas d'un pas positif (ou si
compteur est >= finale pour un pas ngatif), instructions
seront excutes

i. Ensuite, la valeur de compteur est incrmente de la valeur


du pas si pas est positif (ou dcrment si pas est ngatif)

ii. On recommence l'tape 2 : La comparaison entre compteur et


finale est de nouveau effectue, et ainsi de suite

ALGO/ SABOUNDJI 41
Boucle Pour : exemple1
Calcul de x la puissance n o x est un rel non nul et n
un entier positif ou nul
Variables x, puiss : rel
n, i : entier
Debut
Ecrire (" Entrez la valeur de x ")
Lire (x)
Ecrire (" Entrez la valeur de n ")
Lire (n)

puiss 1
Pour i allant de 1 n
puiss puiss*x
FinPour
Ecrire (x, " la puissance ", n, " est gal ", puiss)
Fin
ALGO/ SABOUNDJI 42
Boucle Pour : exemple1
Calcul de x la puissance n o x est un rel non nul et n un
entier positif ou nul (version 2 avec un pas ngatif)
ngatif
Variables x, puiss : rel
n, i : entier
Debut
Ecrire (" Entrez respectivement les valeurs de x et n ")
Lire (x, n)
puiss 1
Pour i allant de n 1 par pas -1
puiss puiss*x
FinPour
Ecrire (x, " la puissance ", n, " est gal ", puiss)
Fin

ALGO/ SABOUNDJI 43
Boucle Pour : remarque
Il faut viter de modifier la valeur du compteur (et de
finale) l'intrieur de la boucle. En effet, une telle
action :
perturbe le nombre d'itrations prvu par la boucle Pour
rend difficile la lecture de l'algorithme
prsente le risque d'aboutir une boucle infinie

Exemple : Pour i allant de 1 5


i i -1
crire(" i = ", i)
Finpour

ALGO/ SABOUNDJI 44
Lien entre Pour et
TantQue
La boucle Pour est un cas particulier de Tant Que (cas o le nombre
d'itrations est connu et fix) . Tout ce qu'on peut crire avec Pour
peut tre remplac avec TantQue (la rciproque est fausse)

Pour compteur allant de initiale finale par pas valeur du


pas
instructions

FinPour
peut tre remplac par : compteur initiale
(cas d'un pas positif) TantQue compteur <= finale
instructions
compteur compteur+pas
FinTantQue
ALGO/ SABOUNDJI 45
Lien entre Pour et TantQue: exemple
Calcul de x la puissance n o x est un rel non nul et n un entier
positif ou nul (version avec TantQue)
TantQue
Variables x, puiss : rel
n, i : entier
Debut
Ecrire (" Entrez la valeur de x ")
Lire (x)
Ecrire (" Entrez la valeur de n ")
Lire (n)

puiss 1
i1
TantQue (i<=n)
puiss puiss*x
i i+1
FinTantQue
Ecrire (x, " la puissance ", n, " est gal ", puiss)
Fin

ALGO/ SABOUNDJI 46
Rpter
Les boucles
jusqu
Rpter

instructions instructions

Jusqu' condition
Faux
condition

Vrai

Condition est value aprs chaque itration

les instructions entre Rpter et jusqu sont excutes au moins une


fois et leur excution est rpte jusqu ce que condition soit vrai
(tant qu'elle est fausse)

ALGO/ SABOUNDJI 47
Boucle Rpter jusqu : exemple
Un algorithme qui dtermine le premier nombre entier N tel que la
somme de 1 N dpasse strictement 100 (version avec rpter
jusqu')

Variables som, i : entier


Debut
som 0
i0
Rpter
i i+1
som som+i
Jusqu' ( som > 100)
Ecrire (" La valeur cherche est N= ", i)
Fin

ALGO/ SABOUNDJI 48
Choix d'un type de boucle
Si on peut dterminer le nombre d'itrations avant l'excution
de la boucle, il est plus naturel d'utiliser la boucle Pour

S'il n'est pas possible de connatre le nombre d'itrations


avant l'excution de la boucle, on fera appel l'une des
boucles TantQue ou rpter jusqu'

Pour le choix entre TantQue et jusqu' :

Si on doit tester la condition de contrle avant de commencer les


instructions de la boucle, on utilisera TantQue

Si la valeur de la condition de contrle dpend d'une premire


excution des instructions de la boucle, on utilisera rpter
jusqu'

ALGO/ SABOUNDJI 49