Professional Documents
Culture Documents
Langage C
2013-2014
1/8
1AB A. Algorigrammes
Langage C
2013-2014
Limportance du dveloppement dun algorithme est telle quune norme a t dveloppe pour normaliser la faon de reprsenter un algorithme sous forme de logigramme (ou algorigramme). Il sagit de la norme ISO 5807. Elle permet de dcrire en dtail les diffrents symboles utiliser pour reprsenter un algorithme de manire normalise. Quiconque connat cette norme reconnatra aisment les symboles et comprendra lalgorithme. A.I. Structure basique dun algorigramme A la lecture de la dfinition dun algorithme, on comprend quun algorigramme a un dbut et une fin spars par une multitude dinstructions. Une instruction excute une opration ou un ensemble doprations visant modifier la valeur dune variable par exemple, ou encore la forme ou la place dune information. La norme ISO 5807 propose les lments graphiques visibles la figure 1.
Tip 1 : Le dbut et la fin dun algorigramme sont tous deux reprsents par un rectangle aux coins arrondis. Il ne peut y avoir quun seul dbut, mais plusieurs fins sont possibles. Tip 2 : Une instruction se trouve lintrieur dun rectangle. Tip 3 : Les tapes de lalgorithme sont relies entre elles par des flches. Ces flches indiquent le sens dexcution du programme. Pour un lment considr comme une entre (exemple : lecture de la saisie dun clavier) ou une sortie (impression lcran), le symbole est un paralllogramme.
A.II.
Dfinition de variables
Une difficult essentielle dans llaboration dun algorithme est la dfinition des variables ncessaires et utiles au traitement. Les variables sont des zones rserves dans la mmoire de lordinateur. Leur taille et le codage binaire utilis pour lire ou crire les donnes dpendent du type de la variable. Toutes les donnes traites dans un programme sont localises dans des variables.
2/8
1AB
Langage C
2013-2014
La dclaration dune variable rserve un espace mmoire auquel on accde par le nom de cette variable. La valeur dune variable aprs sa dclaration est indfinie. En effet, lespace mmoire allou nest pas nettoy , et la variable rcupre ce qui tranait en mmoire . Il est donc important dinitialiser une variable aprs sa dclaration. DANS TOUTE LA SUITE, CHAQUE ALGORIGRAMME QUE VOUS CONSTRUIREZ DEVRA OBLIGATOIREMENT AVOIR POUR PREMIERE INSTRUCTION DEFINITION ET INITIALISATION DES VARIABLES . IL VOUS APPARTIENDRA EGALEMENT DE REFLECHIR SUR LES VARIABLES DONT VOUS AUREZ BESOIN. A.III. Branchements conditionnels : test et dcision
Llve
prcdent
a
de
la
chance
:
il
est
arriv
lheure.
Mais
que
se
passe-t-il
si
lenseignant
a
une
montre
qui
avance
de
cinq
minutes
?
Le
fait
mme
de
poser
la
question
introduit
un
branchement
conditionnel
ou
un
test
:
SI.
Selon
la
valeur
de
lexpression
logique
(ou
condition)
teste
(VRAI
ou
FAUX),
le
programme
excute
un
groupe
dinstructions
donn.
Comment
construit-on
cette
condition
?
En
utilisant
des
oprateurs
de
comparaison
coupls
des
oprateurs
logiques.
A.III.1. Apart
sur
la
logique
boolenne
La
logique
boolenne
est
au
cur
du
dispositif
des
tests.
Une
mauvaise
valuation
de
la
condition
est
la
cause
principale
de
dysfonctionnement
des
tests
et
donc
du
programme.
A.III.1.1. Oprateurs
de
comparaison
Les
ordinateurs
tant
capables
dinterprter
exclusivement
des
0
et
des
1,
les
oprateurs
de
comparaison
travaillent
sur
des
nombres
(entiers
ou
rels).
Deux
nombres
A
et
B
peuvent
tre
:
- gaux
- diffrents
- A
est
suprieur
(strictement
ou
gal)
B
- A
est
infrieur
(strictement
ou
gal)
B
A.III.1.2. Oprateurs
logiques
Les
trois
oprateurs
boolens
couramment
employs
sont
le
ET,
le
OU
et
le
NON.
Le
ET
utilise
deux
oprandes.
Son
rsultat
est
VRAI
quand
les
deux
oprandes
sont
VRAI,
FAUX
sinon.
A
linverse,
le
OU
est
VRAI
ds
quun
seul
des
deux
oprandes
est
VRAI,
et
donc
FAUX
si
les
deux
oprandes
sont
FAUX.
Le
NON
donne
le
rsultat
inverse
de
son
oprande
(et
donc
utilise
un
seul
oprande).
Dans
le
cas
dun
test
sur
des
intervalles
(valeur
comprise
entre
deux
bornes),
il
est
ncessaire
de
combiner
lutilisation
des
oprateurs
de
comparaison
et
des
oprateurs
logiques
en
crivant
que
la
variable
doit
tre
suprieure
la
borne
infrieure
et
que
la
variable
doit
tre
infrieure
la
borne
suprieure.
Do
it
2
:
Etablir
des
expressions
logiques.
x
suprieur
ou
gal
3
y
compris
strictement
entre
1
et
8.
Le
contraire
du
test
prcdent
en
utilisant
le
NON,
puis
sans
utiliser
le
NON.
A.III.2. Symbole dun branchement conditionnel Le test, reprsent par un losange, possde une entre et deux sorties correspondant des alternatives, mais une et une seule sera active, dpendant de lvaluation de la condition.
3/8
1AB
Langage C
2013-2014
Figure 3 : Symbole d'une structure conditionnelle
Quelques
rgles
simples
de
graphisme
sont
respecter
:
- les
traits
des
flches
sont
horizontaux
ou
verticaux
;
pas
de
diagonale.
- Les
directions
des
alternatives
VRAI
doivent
toutes
tre
identiques.
On
ne
peut
pas
mettre
le
cas
VRAI
vers
le
bas
pour
une
condition
1,
puis
vers
la
droite
pour
une
condition
2.
Do
it
3
:
Construire
des
algorigrammes
avec
branchement
conditionnel.
Noubliez
pas
de
rflchir
sur
les
variables
utiles.
Etudier
le
signe
dun
nombre.
Etudier
la
parit
dun
nombre.
Etudier
la
responsabilit
du
port
de
ceinture.
Rappelons
les
rgles
suivantes
concernant
le
port
obligatoire
de
la
ceinture
:
- Le
conducteur
ne
portant
pas
la
ceinture
se
voit
retirer
3
points
de
permis
et
cope
une
me amende
de
4
classe.
- La
personne
ne
portant
pas
la
ceinture
est
mineure.
Le
conducteur
cope
dune
amende
me de
4
classe.
- La
personne
ne
portant
pas
la
ceinture
est
me majeure.
Celle-ci
cope
dune
amende
de
4
classe.
A.IV.
Boucles et rptitions
Supposons
maintenant
que
lenseignant
veut
pointer
les
lves.
Il
dispose
dune
liste
quil
aura
pris
soin
dimprimer
avant
le
TD
qui
lui
indique
le
nombre
et
les
noms
des
lves.
Do
it
4
:
Effectuer
un
pointage
des
lves.
Supposons
pour
une
question
de
simplicit
que
les
lves
soient
au
nombre
de
4,
appels
A,
B,
C
et
D.
En
utilisant
uniquement
des
structures
conditionnelles,
dessiner
lalgorigramme
permettant
de
pointer
les
lves.
Question 1 : Quel test avez-vous effectu aprs chaque lve ? En existe-t-il au moins un autre possible ? Votre algorigramme ainsi dfini comporte certainement des squences qui se rptent. Afin de simplifier la visibilit, et parce que la plupart des langages de programmation le permettent, on peut introduire une boucle. Dans un algorigramme, cela consiste simplement rediriger une flche vers une tape antrieure. Bien entendu, pour que lalgorithme puisse atteindre son tat final, la boucle doit pouvoir sarrter et donc valider (ou ne plus valider) une condition. Il est trs important de noter que lvolution de la variable teste par la boucle sapproche (et non sloigne) de la condition darrt. Chaque passage dans la boucle sappelle une itration.
4/8
1AB
Langage C
2013-2014
Figure 4 : Boucle
Question
2
:
Quels
sont
les
changements,
autres
que
la
suppression
des
passages
redondantes
et
lintroduction
de
la
boucle,
que
vous
avez
d
apporter
votre
algorigramme,
en
particulier
au
niveau
des
tests
?
Considrons
maintenant
que
lenseignant
soit
suffisamment
tte-en-lair
pour
oublier
la
liste
quil
a
imprime.
Il
ne
connat
ni
les
noms
des
lves,
ni
leur
nombre.
Question
3
:
Quel
test
lui
permettrait
alors
de
savoir
sil
a
termin
le
pointage
?
Ainsi,
comme
on
peut
le
voir
dans
cet
exemple,
on
peut
distinguer
deux
types
de
boucles
:
- dterministe
:
on
connat
lavance
le
nombre
ditrations,
et
donc
sen
servir
comme
condition
darrt
;
- non
dterministe
:
on
ne
connat
pas
a
priori
le
nombre
ditrations.
Certes,
un
test
permettra
de
sortir
de
la
boucle,
mais
le
nombre
ditrations
peut
varier
selon
les
donnes
dentre.
Tip
4
:
Dans
le
cas
dune
boucle
dterministe,
on
peut
tablir
une
condition
sans
faire
appel
au
nombre
ditrations.
La
connaissance
du
nombre
ditrations
permet
de
rendre
le
test
plus
simple.
Do
it
6
:
Construire
des
algorigrammes
avec
boucles.
Dans
chaque
cas
qui
suit,
rflchir
aux
variables
utiles,
dire
sil
sagit
dune
boucle
dterministe
ou
non
et
tablir
un
lalgorigramme
correspondant.
Additionner
les
cent
premiers
entiers.
Calculer
x
puissance
y,
x
et
y
tant
deux
entiers
donns.
Calculer
la
factorielle
de
lentier
n.
Trouver
les
puissances
de
2
encadrant
un
nombre
entier.
Dcomposer
un
nombre
entier
en
facteurs
premiers.
Soient
x
la
variable
contenant
lentier
donn
et
n
une
variable
initialise
2.
Tant
que
x
est
diffrent
de
1,
- si
le
nombre
x
est
divisible
par
n,
affecter
x
la
valeur
x
divise
par
n
et
afficher
n
;
- sinon,
incrmenter
n
de
1
;
Calculer
le
PGCD
de
deux
nombres.
Algorithme
dEuclide
:
Lalgorithme
continue
tant
que
le
reste
est
diffrent
de
zro,
et
le
PGCD
est
le
dernier
reste
non
nul.
5/8
1AB
A.V. Sous-programmes
:
modularit
Langage C
2013-2014
A.V.1. Fonctionnement dun sous-programme Un sous-programme possde la mme structure quun programme. Il dclare des variables (dites locales), que lui seul connat, et effectue des traitements dans sa partie instructions. Chaque sous-programme implmente un calcul et participe au traitement gnral du programme. Les autres sous-programmes ignorent son mode de fonctionnement interne. Seule linformation change via les arguments dentre et de retour des modules de traitement est connue. Cette segmentation des traitements amliore le fonctionnement global du programme en ddiant des modules de traitement des tches particulires, et facilite ainsi le dveloppement qui se fait par modules. De plus, il devient possible doptimiser le fonctionnement interne dun module dans intervenir sur le reste du programme. Dans la phase de conception de lalgorithme global, le dveloppeur doit dfinir clairement la liste des modules de traitement, leur rle respectif et leurs interactions rciproques.
Figure 5 : Structure d'un sous-programme et appel du sous-programme dans le programme principal
Lappel
du
sous-programme
se
fait
en
utilisant
le
symbole
de
deux
rectangles
encastrs.
Do
it
7
:
Dterminer
les
N
premiers
nombres
premiers.
Pour
ce
faire,
on
construit
un
sous-programme
qui
teste
si
un
nombre
est
premier,
puis
on
lutilise
pour
afficher
ces
N
premiers
nombres
premiers.
Tester
si
un
nombre
est
premier.
Reprendre
lalgorigramme
qui
dcompose
un
nombre
entier
en
facteurs
premiers.
Le
nommer
Premier.
Le
modifier
pour
quil
retourne
1
si
le
nombre
dcomposer
est
premier
et
0
sinon.
Ecrire
lalgorigramme
du
programme
principal
qui
affiche
les
N
premiers
nombres
premiers
en
utilisant
le
sous-programme
Premier.
A.V.2. Un saut dans la complexit algorithmique Le but de tout algorithme est de proposer une solution un problme pos en minimisant le temps de traitement. Celui-ci dpend directement du nombre de calculs mis en uvre. La complexit algorithmique informe sur le nombre de calculs, et donc sur la performance dun programme. Un cours dalgorithmique avanc traitera de ces problmes dans une anne ultrieure pour les intresss. Pour lheure, il est intressant et important de noter que la modularit dun programme permet damliorer la complexit algorithmique de faon indpendante pour chaque module, contribuant grandement amliorer la complexit de lensemble.
6/8
1AB
Langage C
2013-2014
Do
it
8
:
Dterminer
les
N
premiers
nombres
premiers
(2).
Pour
ce
faire,
on
construit
un
sous-programme
qui
teste
si
un
nombre
est
premier,
puis
on
lutilise
pour
afficher
ces
N
premiers
nombres
premiers.
Amliorer
le
sous-programme
Premier.
Pour
ce
faire,
il
est
important
de
remarquer
que
2
est
le
seul
nombre
premier
pair.
Il
est
donc
inutile,
lorsquon
cherche
les
facteurs
premiers
de
sintresser
aux
nombres
pairs.
Amliorer
le
programme
principal.
La
remarque
est
identique,
le
nombre
2
est
le
seul
nombre
premier
pair.
Reprendre
lalgorigramme
Premier
et
le
modifier
afin
de
diminuer
les
calculs.
Reprendre
lalgorigramme
principal
et
le
modifier
afin
de
diminuer
les
calculs.
B. Pseudo-code
ou
mtalangage
Le
pseudo-code
ou
mtalangage
permet
la
description
crite
dun
algorithme
sans
rfrence
un
langage
de
programmation
en
particulier.
Ainsi,
de
mme
que
pour
un
algorigramme,
le
mtalangage
saffranchit
des
contraintes
de
programmation
pour
sintresser
lalgorithme.
Bien
entendu,
il
utilise
les
mmes
structures
que
celles
dcrites
dans
la
partie
algorigramme.
Nous
allons
les
passer
en
revue,
puis
donner
un
exemple
dalgorithme
en
pseudo-code.
B.I. Traitements
logiques
en
pseudo-code
Affectation
dune
variable
:
Variable
x
initialise
5
Entre
dun
nombre
x
partir
du
clavier
Sortie
dun
nombre
x
sur
lcran
Branchement
conditionnel
SI
x
5
SAISIR x AFFICHER x SI <expression du test> ALORS instruction(s) FINSI Branchement conditionnel SISINON SI <expression du test> ALORS instruction(s) SINON instruction(s) FINSI Branchement conditionnel CAS OU : CAS OU x EGAL La variable x prend un nombre fini de valeurs valeur 1 : instruction(s) discrtes. finValeur valeur 2 : instruction(s) finValeur valeur k : instruction(s) finValeur valeur n : instruction(s) finValeur FINCASOU Boucle dterministe POUR x VARIANT DE val_initial A val_finale instruction(s) FINPOUR Boucle non dterministe TANT QUE <expression du test> FAIRE instruction(s) FINTANTQUE
7/8
1AB
B.II. Exercices
Langage C
2013-2014
Conclusion
Dfinir
correctement
un
algorithme
est
donc
primordial,
car
ce
sont
les
solutions
quil
propose
qui
seront
programmes.
La
qualit
et
la
rapidit
du
programme
final
dcoulent
directement
de
lalgorithme.
Des
outils
tels
que
les
algorigrammes
et
le
pseudo-code
permettent
den
faciliter
la
construction
en
saffranchissant
des
problmes
de
code.
8/8