Vous êtes sur la page 1sur 30

12/11/2010

Algorithmique
Programmation C

Abdelmajid Hajami
2010

Plan
• Algorithmique (6 séances)
• Programmation C (8 séances)

Algorithmique

Loi de Greer

Un programme Informatique ne fait jamais ce que vous 
voudriez faire
voudriez faire,… 
il fait seulement ce que vous lui dites de faire

Logiciel Matériel

Informatique

1
12/11/2010

Algorithmique

Préambule

L’algorithmique est un terme d’origine


arabe comme algèbre
arabe, algèbre, amiral
‫اﻟﺨﻮارزﻣﻲ‬

Algorithmique
Définition

1- un algorithme, c’est une suite d’instructions, qui une fois


exécutée correctement, conduit à un résultat donné. Si l’algorithme est
juste, le résultat est le résultat voulu. Si l’algorithme est faux, le résultat
est, faux, ou aléatoire.
2- C’est un ensemble de règles opératoires rigoureuses,
ordonnant à un processeur d’exécuter dans un ordre déterminé un
nombre fini d’opérations
d opérations élémentaires ; il oblige à une programmation
structurée.
3- Un algorithme est écrit en utilisant un langage de description
d’algorithme (LDA). L’algorithme ne doit pas être confondu avec le
programme proprement dit.

Pour fonctionner, un algorithme doit donc contenir uniquement des


instructions compréhensibles par celui qui devra l’exécuter.

Algorithmique
Généralement : c’est la description des étapes à suivre pour réaliser un 
travail
Exemple : pour aller à la poste, il faut prendre la première à droite, aller 
tout  droit jusqu’au feu, prendre à gauche, et c’est le 4ième bâtiment 
après le supermarché.

Le savoir faire d’un informaticien se transmet par un algorithme; Qui 
d
demande aussi un langage particulier
d i l ti li

Un programme est donc la description d’un algorithme dans un langage accepté par la 
machine.
Un algorithme à l’inverse d’un programme, est indépendant du langage de 
programmation (et donc de la machine)

2
12/11/2010

Algorithmique
Problème
Analyse
Algorithme
Programmation
Programme  évolué
Compilation
Programme en langage 
l
machine
Edition des liens
Programme  exécutable
Tests
Correct ? Rapide ? …
Solution acceptée

Algorithmique
Définition d’un organigramme
C’est une représentation graphique de l’algorithme. Pour le construire, on 
utilise des symboles normalisés.
Quelques symboles utilisés dans la construction d’un organigramme :

Algorithmique

Le langage de description d’algorithme
Ce langage utilise un ensemble de mots clés et de structures permettant de 
décrire de manière complète, claire, l’ensemble des opérations à exécuter 
sur des données pour obtenir des résultats ; on n’hésitera donc pas à 
agrémenter l’algorithme de nombreux commentaires.

L’avantage d’un tel langage est de pouvoir être facilement transcrit dans un 
langage de programmation structuré ( Pascal, C…)

3
12/11/2010

Structure d’un algorithme Algorithmique
Représentation
1. L’en‐tête
Il permet tout simplement 
d’identifier un algorithme.
2. Les déclarations
C’est une liste exhaustive des 
objets, grandeurs utilisés et 
manipulés dans le corps de l ’ 
algorithme ; cette liste est placée 
en début d’algorithme.
en début d algorithme.
3. Le corps
Dans cette partie de l’algorithme, 
sont placées les tâches 
(instructions,
opérations…) à exécuter.
4. Les commentaires :
Pour permettre une 
interprétation aisée de 
l’algorithme, l’utilisation de
commentaires est vivement 
conseillée.
10

Algorithmique
Déclaration de constantes, de variables et de structures

a. Les constantes :
Elles représentent des chiffres, des nombres, des caractères, des chaînes de caractères, 
… dont la valeur ne peut pas être modifiée au cours de l’exécution de l’algorithme.
Mot clé : const
b. Les variables :
Elles peuvent stocker des chiffres des nombres, des caractères, des chaînes de 
caractères,… dont la valeur peut être modifiée au cours de l’exécution de l’algorithme.
Mot clé : var
Les constantes et les variables sont définies dans la partie déclarative par deux 
caractéristiques essentielles, à savoir :
• L’ identificateur : c’est le nom de la variable ou de la constante. Il est composé 
de lettres et de chiffres
• Le type : il détermine la nature de la variable ou de la constante (entier, réel, 
booléen, chaîne de caractères…)

11

Algorithmique
Les opérations sur les variables

Tout au long d’un programme, une variable peut subir plusieurs changements
issu de certaines opérations ( Affectation , Incrémentation , Décrémentation ,
Arithmétique ) et delà un changement de sa valeur.

Affectation

Initialisation
Opérations
Opérations arithmétiques

Incrémentation / Décrémentation

12

4
12/11/2010

Algorithmique
Opérations sur les variables 
Affectation 
Pour pouvoir envisager des exemples d’utilisation, il faut introduire dès à présent 
l’instruction d’affectation ; elle s’écrit de la façon suivante :
identificateur de variable ←valeur ;

← : symbole d’affectation (ou assignation)
y ( g )

L’affectation se fait toujours en deux temps :
1. évaluation de l’expression située à droite du symbole
2. affectation du résultat à l’identificateur de variable 1‐ Evaluation

ainsi dans l’instruction d’affectation suivante  y ← 2*x+3 ;

2‐ Affectation

13

Algorithmique
Opérations sur les variables 
Incrémentation / Décrémentation
Incrémenter une variable c’est le fait de lui ajouter une valeur à sa valeur initiale.
Décrémenter une variable c’est le fait de soustraire une valeur de sa valeur initiale.
Cette notion est souvent utilisée dans le cas ou on a besoin de créer un compteur.

Variable  ←  Variable + Val ;
Par exemple :
I ←  I + 1 ;
J ←  j – 2 ;

14

Algorithmique
Opérations sur les variables 
Initialisation
C’est le fait de donner une valeur initiale à une variable avant de l’incrémenter ou de 
la décrémenter. Cette notion est souvent employée lorsqu’on utilise un compteur.

Var ←  Val1 ;
Par exemple :
I ← 0 ;
I ← I + 1 ;

15

5
12/11/2010

Algorithmique
Opérations sur les variables 
Opérations arithmétiques
Les opérations arithmétiques courantes sont l’addition, soustraction, multiplication et 
division. Ces opérations s’écrivent de la manière suivante :

Variable ←  Val1 + Val2 ;
Variable ←  Val1 ‐
Variable ← Val1 Val2 ;
Variable ←  Val1 * Val2 ;
Variable ←  Val1 / Val2 ;
On doit toujours affecter le résultat d’une opération dans une variable
Par exemple :
A ← 5 + 2 ; 
B ← A – 1 ; 
C ←(B / 2) – 1 + A ;

16

Algorithmique
Le dialogue avec l’utilisateur

Pour permettre au programme de dialoguer avec l’utilisateur, c’est‐à‐dire d’afficher un 
résultat à l’écran et de lire une entrée au clavier, il faut au moins deux instructions une 
pour lire et l’autre pour afficher à l’écran ou pour imprimer. Dans un organigramme, 
elles sont représentées ainsi :

Formalisme d’une séquence d’instructions de dialogue avec l’utilisateur

Lire Variable Imprimer Variable
Afficher  ’ ’Message ’ ’ Imprimer  ’’Message ’’
Afficher Variable

17

Algorithmique
Le dialogue avec l’utilisateur

Dans le pseudo‐langage, elles s’écrivent ainsi :
Lire  Variable ; Lit tous les caractères qui sont saisis au clavier, 
Lire  Variable1, Variable2,…. ; Lecture jusqu’à ce que l’utilisateur appuie sur la touche 
entrée, et stocke le résultat dans la variable.
Afficher ’’Texte’’ ;
Afficher  Variable ; affiche sur l’écran le ou les textes et la 
Affichage
g
Affi h ’’Texte’’ , Variable
Afficher  ’’T t ’’ V i bl ; valeur des variables
valeur des variables.

Imprimer  ’’Texte’’ ;
Imprimer  Variable ; imprime le ou les textes et la valeur des 
Impression
Imprimer  ’’Texte’’ , Variable ; variables

18

6
12/11/2010

Algorithmique
Le dialogue avec l’utilisateur : exemple

Dans le pseudo‐langage, elles s’écrivent ainsi :

Afficher  ’’Quel est ton nom ?’’ ; A ff i cher  ’’Quel est ton nom ? ’’


Lire  Nom ; Lire Nom
Afficher ’’Ton
Afficher  Ton nom est :
nom est :’’ , Nom
Nom
Afficher  ’’Ton nom est:’’, Nom ; Afficher  ’’Le mien est  Khalil’’
Afficher  ’’Le mien est Khalil’’ ;

19

Exercices
• Quel résultat produit le programme suivant ?
Variables val, double numériques;
Début
Val ← 231 ;
Val ← 231 ;
Double ← Val * 2 ;
Ecrire Val ;
Ecrire Double ;
On verra apparaître à l’écran 231, 
puis 462 (qui vaut 231 * 2)
Fin

20

Exercices
Ecrire un programme qui lit le prix HT d’un 
article, le nombre d’articles et le taux de TVA, 
et qui fournit le prix total TTC correspondant. 
Faire en sorte que des libellés apparaissent
Faire en sorte que des libellés apparaissent 
clairement.

21

7
12/11/2010

Exercices
Variables nb, pht, ttva, pttc ;
Début
Ecrire "Entrez le prix hors taxes :";
Lire pht;
Ecrire "Entrez le nombre d’articles :";
Lire nb;
Ecrire "Entrez le taux de TVA :";
Lire ttva;
pttc ← nb * pht * (1 + ttva);
Ecrire "Le prix toutes taxes est : ", pttc;
Fin
On pourrait économiser une variable et une ligne en écrivant directement. :
Ecrire "Le prix toutes taxes est : ", nb * pht * (1 + ttva);
C'est plus rapide, plus léger en mémoire, mais un peu plus difficile à relire.
22

Exercices
Ecrire un programme qui lit deux nombres, puis il permute leurs valeurs.

Variables a, b, temp ;
Début
Ecrire "Entrez le premier nombre:";
Lire a;
Lire a;
Ecrire "Entrez le deuxième nombre:";
Lire b;
temp ← a;
a ← b;
b ← temp;
Ecrire "le premier nombre est :", a;
Ecrire "le deuxième nombre est:", b;
Fin

23

Notion de constante
Une constante prend la même valeur dans tout le programme.

Programme convertisseur;
Déclaration
constante taux = 11,6435;
= 11 6435;
Variables  dh, euro ;
Début
Ecrire "Entrez la valeur en euro :";
Lire euro;
dh ← euro*taux ;
Ecrire " valeur en dirham :", dh;
Fin
24

8
12/11/2010

Les variables (rappel)


• Une variable est une entité qui contient une
information, elle possède :
– un nom, on parle d’identifiant
– une valeur
– un type
t quii caractérise
té i l’ensemble
l’ bl des
d valeurs
l que
peut prendre la variable

• L’ensemble des variables est stocké dans la


mémoire de l’ordinateur

25

Les variables
• Type de variable
– entier pour manipuler des entiers

– réel pour manipuler des nombres réels

– booléen pour manipuler des valeurs booléennes

– caractère pour manipuler des caractères


alphabétiques et numériques

– chaîne pour manipuler des chaînes de caractères


permettant de représenter des mots ou des phrases.
26

Les variables

– A un type donné, correspond un ensemble


d'opérations définies pour ce type.

– Une variable est ll'association


association dd'un
un nom avec un
type, permettant de mémoriser une valeur de ce
type.

27

9
12/11/2010

Opérateur, opérande et expression

• Un opérateur est un symbole d’opération qui


permet d’agir sur des variables ou de faire des
“calculs”

• Une opérande est une entité (variable, constante


ou expression) utilisée par un opérateur

• Une expression est une combinaison


d’opérateur(s) et d’opérande(s), elle est évaluée
durant l’exécution de l’algorithme, et possède
une valeur (son interprétation) et un type
28

Opérateur, opérande et expression

Exemple dans a + b :
a est l’opérande gauche
+ est l’opérateur
b est l’opérande droite
a + b est appelé une expression

Si par exemple a vaut 2 et b 3, l’expression a + b


vaut 5

Si par exemple a et b sont des entiers,


l’expression a + b est un entier
29

Les opérateurs
• Un opérateur peut être unaire ou binaire :
– Unaire s’il n’admet qu’une seule opérande, par
exemple l’opérateur non
– Binaire s’il admet deux opérandes, par exemple
l’opérateur +

• U
Un opérateur
é est associé
ié à un type de
d donnée
d é et
ne peut être utilisé qu’avec des variables, des
constantes, ou des expressions de ce type

• Par exemple l’opérateur + ne peut être utilisé


qu’avec les types arithmétiques (naturel, entier et
réel) ou (exclusif) le type chaîne de caractères
30

10
12/11/2010

Les opérateurs
• On ne peut pas additionner un entier et un
caractère
• Toutefois exceptionnellement dans certains cas on
accepte d’utiliser un opérateur avec deux opérandes
de types différents, c’est par exemple le cas avec les
types arithmétiques (2 + 3.5)

• La signification d’un opérateur peut changer en


fonction du type des opérandes
– l’opérateur + avec des entiers aura pour sens l’addition,
2+3 vaut 5
– avec des chaînes de caractères il aura pour sens la
concaténation "bonjour" + " tout le monde" vaut
"bonjour tout le monde"
31

Les opérateurs booléens


• Pour les booléens nous avons les opérateurs non, et, ou, ouExclusif

– Non

– Et

32

Les opérateurs booléens


– Ou

– Ou exclusif

33

11
12/11/2010

Les opérateurs booléens

• Rappels sur la logique booléenne...


Valeurs possibles : Vrai ou Faux

• Associativité des opérateurs


p et et ou
a et (b et c) = (a et b) et c

• Commutativité des opérateurs et et ou


a et b = b et a
a ou b = b ou a
34

Les opérateurs booléens


• Distributivité des opérateurs et et ou
a ou (b et c) = (a ou b) et (a ou c)
a et (b ou c) = (a et b) ou (a et c)

• Involution (homographie réciproque)


(homos semblable et graphein écrire)

non non a = a

• Loi de Morgan
non (a ou b) = non a et non b
non (a et b) = non a ou non b
35

Les opérateurs sur les numériques

• On retrouve tout naturellemment +, -, *, /


– Avec en plus pour les entiers div et mod, qui
permettent respectivement de calculer une
division entière et le reste de cette division,

par exemple :
11 div 2 vaut 5
11 mod 2 vaut 1

36

12
12/11/2010

Les opérateurs sur les numériques


• L’opérateur d’égalité :
C’est l’opérateur que l’on retrouve chez tous les
types simples qui permet de savoir si les deux
opérandes sont égales
Il est représenté par le caractère =
Le résultat d'une expression contenant cet opérateur
est un booléen

• On a aussi l’opérateur d’inégalité : ≠

• Et pour les types possédant un ordre les opérateurs


de comparaison
<, ≤, >, ≥

37

Priorités des opérateurs

• Tout comme en arithmétique les opérateurs


ont des priorités
Par exemple * et / sont prioritaires sur + et -
Pour les booléens
booléens, la priorité des opérateurs
est : non, et, ouExclusif et ou

• Pour clarifier les choses (ou pour dans


certains cas supprimer toutes ambiguïtés) on
peut utiliser des parenthèses
38

Instruction conditionnelle
La structure alternative
Il est souvent nécessaire lorsque l’on écrit un programme de distinguer entre plusieurs
cas conditionnant l’exécution de telles ou telles instructions. Pour ce faire, on utilise une
structure alternative (Conditionnelle) : Si on est dans tel cas on fait cela sinon on fait
ceci. Le formalisme de cette structure dans un organigramme sera comme suit :

Formalisme d’u ne Structure alternative

39

13
12/11/2010

Algorithmique
La structure alternative
La syntaxe de cette structure en pseudo‐langage est la suivante :

SI Condition ALORS Actions1 [ SINON Actions2 ] FINSI

NB : Les crochets signifient que la partie sinon est facultative
Les actions
Les actions qui suivent le Sinon ou le Alors 
peuvent être :
Une simple instruction
Une suite d’instructions
Une autre structure alternative
Une autre structure répétitive
Les conditions
Pour exprimer les conditions on utilise les opérateurs conditionnels suivants :
= égal ; < Inférieur ; > Supérieur ; <= Inférieur ou égal ; >= Supérieur ou égal ;
<> différents ;
40

Algorithmique
La structure alternative

Les conditions (exemple) :
(A<1) (A<=B) ……..
On peut combiner des conditions à l'aide des opérateurs logiques suivant : Ou ; Et ;XOR;
Par exemple :
(A<>B) ET (A>=5)
((A<0) ET ((B=0) OU (C<>A)) XOR (D=1))
Lorsque l’on écrit de telles conditions, il est recommandé de mettre toutes les parenthèses 
afin d’éviter les erreurs.

41

Algorithmique
La structure alternative

Par exemple : Programme permettant de calculer la valeur absolue d’un nombre :
Organigramme :

Ce qui donnera en pseudo‐langage :
Si (A<0) Alors ABS ←  A* (‐1) Sinon ABS ← A FINSI

42

14
12/11/2010

Exercice 1
Écrire un algorithme permettent de lire une note et
d'afficher la mention selon la valeur saisie,
comme suit :
• note < 10 : mention médiocre
• 10<= note <12 : mention passable
• 12<= note <14 : mention assez bien
• 14<= note <16 : mention bien
• 16<= note <18 : mention très bien
• 18<= note <=20 : mention excellent

43

Exercice 2
Quel est, après exécution de la séquence 
d’instructions suivante,  la valeur de A
• A Å A + B
• B Å
BÅA A – B
• A ÅA – B
Permutation de A et B

44

Exercice 3
Ecrire l’algorithme de résolution d’une équation 
du second ordre dans l’ensemble C:

aX2 + bX
b + c = 00
a, b et c sont lus à partir du clavier.

45

15
12/11/2010

La structure de choix

• Une structure de choix permet d'effectuer un choix 
parmi plusieurs.

• Une structure de choix est privilégié à une imbrication 
de tests «SI » lorsque les valeurs que peut prendre
de tests «SI » lorsque les valeurs que peut prendre 
une variable sont discrètes (constantes).

• Elle permet une présentation plus claire d'un 
ensemble d'alternatives imbriquées.

46

La structure de choix
• Syntaxe 

Selon (variable ou expression) Faire
< valeur 1> : action 1

< valeur N> : action N
Sinon : action par défaut
Sinon : action par défaut
Fin Selon

• La variable (ou expression) est comparée aux différentes 
constantes(valeur 1 à valeur N).
• Les actions exécutées dépendent de ces valeurs (les valeurs 
peuvent être énumérée en les séparant par des virgules).
• L'action par défaut est exécutée lorsque la variable n'est égale 
à aucune des constantes énumérées.
47

La structure de choix : exemple

Algorithme testchoix
Variable couleur : Chaîne de caractères
Début
Écrire (" saisir couleur de feu ")
Lire (couleur)
( )
Suivant (couleur) Faire
"Vert" : Écrire ("je passe")
"Orange" : Écrire ("je ralentis")
"Rouge" : Écrire ("je m'arrête")
Sinon : Écrire ("ceci n'est pas une couleur de feu")
Fin suivant
Fin

48

16
12/11/2010

L'instruction cas
• Autre syntaxe :

cas où v vaut
v1 : action1
v2 : action2
...
vn : actionn
autre : action autre
fincas

v1,. . . ,vn sont des constantes de type scalaire (entier,


naturel, enuméré, ou caractère)
action i est exécutée si v = vi (on quitte ensuite
l’instruction cas)

action autre est exécutée si quelque soit i, v ≠ vi


49

L'instruction cas : exercice


• Ecrire un algorithme qui permet d’afficher le
jour en lettre qui correspond à une valeur
numérique saisie au clavier.
• 1 Æ Lundi
• 2 Æ Mardi
• 3 Æ Mercredi
• 4 Æ Jeudi
• 5 Æ Vendredi
• 6 Æ Samedi
• 7 Æ Dimanche
• Autre Æ « jour non valide »

50

Les itérations
• Il arrive souvent dans un algorithme qu'une même action
soit répétée plusieurs fois, avec éventuellement quelques
variantes.
Il est alors fastidieux d'écrire un algorithme qui contient
de nombreuses fois la même instruction. De plus, ce
nombre peut dépendre du déroulement de l'algorithme.
Il est alors impossible de savoir à l'avance combien de
fois la même instruction doit être décrite
décrite.
Pour gérer ces cas, on fait appel à des instructions en
boucle qui ont pour effet de répéter plusieurs fois une
même instruction.
Deux formes existent : la première, si le nombre de
répétitions est connu avant l'exécution de l'instruction de
répétition, la seconde s'il n'est pas connu. L'exécution de
la liste des instructions se nomme itération.
51

17
12/11/2010

Répétitions inconditionnelles
• Il est fréquent que le nombre de répétitions soit
connu à l'avance, et que l'on ait besoin d'utiliser
le numéro de l'itération afin d'effectuer des
calculs ou des tests. Le mécanisme permettant
cela est la boucle Pour.

• Forme de la boucle Pour :


Pour variable de valeur_initiale à valeur_finale faire
liste d'instructions
finpour
52

Répétitions inconditionnelles
• La variable dont on donne le nom va
prendre successivement toutes les valeurs
entières entre valeur initiale et valeur finale.
Pour chaque valeur prise par la variable, la
liste des instructions est exécutée.

• La valeur utilisée pour énumérer les


itérations est appelée valeur d'itération,
indice d'itération ou compteur.
L'incrémentation par 1 de la variable est
implicite.
53

Répétitions inconditionnelles
• Autre forme de la boucle Pour :

Pour variable de valeur initiale à valeur finale


[par <pas>] 
[par <pas>] faire
liste d'instructions
finpour

La variable d'itération est décrémentée de <pas>


après chaque itération.
54

18
12/11/2010

Les répétitions conditionnelles


• L'utilisation d'une "boucle pour" nécessite de connaître à
l'avance le nombre d'itérations désiré, c'est-à-dire la valeur
finale du compteur. Dans beaucoup de cas, on souhaite répéter
une instruction tant qu'une certaine condition est remplie, alors
qu'il est à priori impossible de savoir à l'avance au bout de
combien d'itérations cette condition cessera d'être satisfaite.
Dans ce cas, on a deux possibilités :
- la boucle Tant que
- la boucle Répéter jusqu'à

• Syntaxe de la boucle Tant que :

tantque condition faire


liste d'instructions
fintantque
55

Les répétitions conditionnelles


• Cette instruction a une condition de poursuite dont la
valeur est de type booléen et une liste d'instructions
qui est répétée si la valeur de la condition de poursuite
est vraie : la liste d'instructions est répétée autant de
fois que la condition de poursuite a la valeur vraie. Le
déroulement pas à pas de cette instruction
équivaut à :

si condition
alors liste d'instructions
si condition
alors liste d'instructions
si condition
alors liste d'instructions
...

56

Les répétitions conditionnelles


• Etant donné que la condition est évaluée avant
l'exécution des instructions à répéter, il est possible
que celles-ci ne soient jamais exécutées.

• Il faut que la liste des instructions ait une incidence


sur la condition afin qu'elle puisse être évaluée à faux
et que la boucle se termine.

• Il faut toujours s'assurer que la condition devient


fausse au bout d'un temps fini.

• Exemple
Un utilisateur peut construire des rectangles de taille
quelconque, à condition que les largeurs qu'il saisit
soient supérieures à 1 pixel.
57

19
12/11/2010

Les répétitions conditionnelles


{ Nom : saisirLargeurRectangle
Rôle : Vérification validité largeur saisie
Données : La largeur
Résultat :
Principe : Tant que la largeur est < 1, on demande de resaisir la largeur }

début
écrire ("indiquez la largeur du rectangle :")
largeur Å lire()
tantque largeur < 1 faire
écrire ("erreur : indiquez une valeur strictement positive")
écrire ("indiquez la largeur du rectangle :")
largeur Å lire()
fintantque
fin

Lexique
- largeur : entier, largeur courante saisie 58

Les répétitions conditionnelles


• Syntaxe de la boucle Répéter jusqu'à :
Répéter
liste d'instructions
jusqu'à condition

La séquence d'instructions est exécutée au


moins une fois et jusqu'à ce que l'expression
soit vraie. Dès que la condition est vrai, la
répétitivité s'arrête.

59

Les répétitions conditionnelles


{ Nom : saisirLargeurRectangle
Rôle : Vérification validité largeur saisie
Données : La largeur
Résultat :
Principe : Tant que la largeur est < 1, on demande de resaisir la largeur}

début
Répéter
écrire (("indiquez
indiquez la largeur du rectangle ::"))
largeur Å lire()
si largeur < 1 alors
écrire ("erreur : indiquez une valeur strictement positive")
fin_si
jusqu'à largeur >= 1
fin

Lexique
- largeur : entier, largeur courante saisie
60

20
12/11/2010

Les répétitions conditionnelles


• Différences entre les boucles Tant que et Répéter jusqu'à :
- la séquence d'instructions est exécuter au moins une fois dans
la
boucle Répéter jusqu'à, alors qu'elle peut ne pas être exécuter
dans le cas du Tant que.

- la
l séquence
é d'i
d'instructions
i est exécuter
é sii la
l condition
di i est vraii
pour le Tant que et si la condition est fausse pour le Répéter
jusqu'à.

- Dans les deux cas, la séquence d'instructions doit


nécessairement faire évoluer la condition, faute de quoi on
obtient une boucle infinie.

61

Exercices
• Écrire un algorithme qui détermine le factoriel 
d’un entier N en utilisant les boucles du type : 
Pour, Tant que et Répéter.
• Écrire un algorithme qui calcule la somme des 
Écrire un algorithme qui calcule la somme des
nombres entrés par l'utilisateur tant que cette 
somme est inférieure à mille.

62

Exercices
• Écrire un algorithme qui affiche les tables de
multiplication de 1 à N. Le nombre N est saisi au
clavier. Utilisez deux boucles POUR imbriquées: la
première parcourra les numéros des tables, et la
seconde effectuera les calculs pour une table
donnée. L’affichage sera de la forme:
Table de 1: 1 2 3 4 5 6 7 8 9 10
Table de 2: 2 4 6 8 10 12 14 16 18 20
……..

63

21
12/11/2010

Les tableaux
• Lorsque les données sont nombreuses et de même
type, afin d'éviter de multiplier le nombre des
variables, on les regroupe dans un tableau

• Le type d'un tableau précise le type (commun) de


tous les éléments.

• Syntaxe :
tableau type_des_éléments[borne_inf ... borne_sup]

• En général, nous choisirons toujours la valeur 0 pour


la borne inférieure dans le but de faciliter la
traduction de l'algorithme vers les autres langages
(C, Java, ...). Pour un tableau de 10 entiers, on aura :
tab : tableau entier[0..9]
64

Les tableaux
• Les tableaux à une dimension ou vecteurs
0 1 2 3 4 5 6 7 8 9
45 54 1 -56 22 134 49 12 90 -26
• Ce tableau est de longueur 10, car il contient 10
emplacements.

• Chacun des dix nombres du tableau est repéré


par son rang, appelé indice

• Pour accéder à un élément du tableau, il suffit


de préciser entre crochets l'indice de la case
contenant cet élément.
Pour accéder au 5ème élément (22), on écrit :
Tab[4]
65

Les tableaux
• Les instructions de lecture, écriture et affectation
s'appliquent aux tableaux comme aux variables.

x ← Tab[0]

La variable x prend la valeur du premier élément


du tableau, c'est à dire : 45

Tab[6] ← 43

Cette instruction a modifiée le contenu du tableau


66

22
12/11/2010

Les tableaux
• Parcours complet d'un tableau

La plupart des algorithmes basés sur les tableaux


utilisent des itérations permettant de faire un
parcours complet ou partiel des différents
g
éléments du tableau. De tels algorithmes
établissent le résultat recherché par récurrence en
fonction des éléments successivement rencontrés.

Les répétitions inconditionnelles sont le moyen le


plus simple de parcourir complètement un
tableau.
67

Les tableaux
Dans l'exemple suivant, le programme initialise
un à un tous les éléments d'un tableau de n
éléments :
InitTableau
début
pour i de 0 à n-1 faire
[]←0
tab[i]
fpour
fin

Lexique :
- i : entier, indice d'itération
- n : entier, taille du tableau
- tab : tableau entier[0..n-1]
68

Les tableaux
• Les tableaux à deux dimensions ou matrices

Lorsque les données sont nombreuses et de


même nature, mais dépendent de deux critères
différents, elles sont rangées dans un tableau à
deux entrées.
0 1 2 3 4 5 6
0 12 28 44 2 76 77 32
1 23 36 51 11 38 54 25
2 43 21 55 67 83 41 69

Ce tableau a 3 lignes et 7 colonnes. Les


éléments du tableau sont repérés par leur
numéro de ligne et leur numéro de colonne.

Tab[1, 4] = 38
69

23
12/11/2010

Les tableaux
• La variable T[L, C] s'appelle l'élément
d'indice L et C du tableau T.

T[0, 0] T[0, 1] T[0, 2] T[0, 3] T[0, 4]

T[1, 0] T[1, 1] T[1, 2] T[1, 3] T[1, 4]

T[2 0]
T[2, T[2 1]
T[2, T[2 2]
T[2, T[2 3]
T[2, T[2 4]
T[2,

Tableau T à 3 lignes et 5 colonnes.

• Les tableaux peuvent avoir n dimensions.


70

Les procédures et les fonctions


• La méthodologie de base de l’informatique est :
1. Abstraire
Retarder le plus longtemps possible l’instant du
codage

2. Décomposer
"...diviser chacune des difficultés que j’examinerai
en autant de parties qu’il se pourrait et qu’il serait
requis pour les mieux résoudre." Descartes

3. Combiner
Résoudre le problème par combinaison
d’abstractions
71

Les procédures et les fonctions


• Par exemple, résoudre le problème suivant :
Ecrire un programme qui affiche en ordre croissant
les notes d’une promotion suivies de la note la plus
faible, de la note la plus élevée et de la moyenne,
revient à résoudre les problèmes suivants :
- Remplir un tableau de naturels avec des notes
saisies
par ll’utilisateur
utilisateur
- Afficher un tableau de naturels
- Trier un tableau de naturel en ordre croissant
- Trouver le plus petit naturel d’un tableau
- Trouver le plus grand naturel d’un tableau
- Calculer la moyenne d’un tableau de naturels

72

24
12/11/2010

Les procédures et les fonctions


Chacun de ces sous-problèmes devient un
nouveau problème à résoudre.
Si on considère que l’on sait résoudre ces
sous-problèmes, alors on sait “quasiment”
résoudre le problème initial.
Donc écrire un p
programme
g qqui résout un
problème revient toujours à écrire des sous-
programmes qui résolvent des sous parties du
problème initial.
En algorithmique il existe deux types de
sous-programmes :
- Les fonctions
- Les procédures
73

Les fonctions récursives


• Une fonction récursive est une fonction qui pour
fournir un résultat, s’appelle elle-même un certain
nombre de fois.

• Exemple : la formule de calcul de la factorielle


dd’un
un nombre n ss’écrit
écrit :

n!=1x2x3x…xn

Ce qui peut se programmer avec une boucle Pour.

74

Les fonctions récursives


Une autre manière de voir les choses, serait de dire
que :

n ! = n x (n-1) !

D’où, la factorielle d’un nombre, c’est ce nombre


multiplié par la factorielle du nombre précédent
précédent.

• Pour programmer cela, il faut une fonction Facto,


chargée de calculer la factorielle. Cette fonction
effectue la multiplication du nombre passé en
argument par la factorielle du nombre précédent.
Et cette factorielle du nombre précédent va bien
entendu être elle-même calculée par la fonction Fact.
75

25
12/11/2010

Les fonctions récursives


• Pour terminer, il nous manque la condition
d'arrêt de ces auto-appels de la fonction Facto.
Dans le cas d'un calcul de factorielle, on s’arrête
quand on arrive au nombre 1, pour lequel la
factorielle est par définition 1.

Fonction Facto (n : Entier)


Début
Si n = 1 alors
Renvoyer 1
Sinon
Renvoyer Facto(n - 1) * n
Finsi
Fin
76

Les fonctions récursives


• Le processus récursif remplace en quelque
sorte la boucle, c’est-à-dire un processus
itératif.

• Il est à noter que l'on traite le problème à


l’
l’envers : on partt du
d nombre,
b ett on remonte t
à rebours jusqu’à 1, pour pouvoir calculer
la factorielle.

• Cet effet de rebours est caractéristique de la


programmation récursive.
77

Les fonctions récursives


• Pour conclure sur la récursivité, trois remarques
fondamentales.
- la programmation récursive, pour traiter certains
problèmes, peut être très économique, elle permet de faire
les choses correctement, en très peu de lignes de
programmation.

- en revanche,
h elle
ll est très
è dispendieuse
di di de
d ressources
machine. Car il faut créer autant de variable temporaires
que de " tours " de fonction en attente.

- toute fonction récursives peut également être formulée


en termes itératifs ! Donc, si elles facilitent la vie du
programmeur, elle ne sont pas indispensable.

78

26
12/11/2010

Les algorithmes de tri


• Les algorithmes de tri, sont utilisés principalement
pour les tableaux et les listes, ils peuvent aller du
plus simple au plus compliquer.

• Le tri à bulle
C’est un des algorithmes
g le pplus connu. Bien qqu’il
soit rarement efficace en terme de temps de calcul,
il est néanmoins correcte.

Le principe consiste à balayer tout le tableau, en


comparant les éléments adjacents et en les
échangeant s’ils ne sont pas dans le bon ordre.

79

Les algorithmes de tri


Un seul passage ne déplacera un élément donné
que d’une position, mais en répétant le processus
jusqu’à ce que plus aucun échange ne soit
nécessaire, le tri sera effectué.

Ce tri va nécessiter un grand nombre de


déplacements d’éléments, il est donc inutilisable
dans les cas où ces déplacements sont coûteux en
temps.

Il peut par contre être intéressant quand le tableau


initial est pré-trié, les éléments n’étant pas disposés
trop loin de leur position finale, par exemple lors
d’un classement alphabétique, où les éléments sont
déjà triés par leur première lettre.
80

Les algorithmes de tri


• Le tri par insertion

Plutôt que de déplacer les éléments d’une position,


on peut prendre un élément après l’autre dans
l’ordre initial, et le placer correctement dans les
éléments précédents déjà triés, comme on le fait
lorsque ll’on
on classe ses carte à jouer après la donne.
donne

Le tri par insertion peut être intéressant pour des


tableaux ayant déjà été triés, mais où l’on doit
rajouter quelques nouveaux éléments.

81

27
12/11/2010

Les algorithmes de tri


• Le tri par sélection

Le but est désormais de déplacer chaque élément à


sa position définitive.
On recherche l’élément le plus petit. Il faut donc le
placer en premier, or cette position est déjà
occupée, on échange donc les deux éléments.
Il ne reste plus qu’à répéter l’opération N fois.

Chaque échange met un élément en position


définitive, l’autre par contre est mal placé.
Cependant, aucun échange n’est inutile, car un
élément qui a été bien placé, ne sera plus testé par
la suite.

82

Les algorithmes de tri


• Le tri shell
C’est une amélioration du tri par insertion, au lieu
d’effectuer une rotation de tous les éléments entre
la position initiale et finale d’un élément, on peut
faire des rotation par pas de P, ce qui rendra le
fichier presque trié.

Ch
Chaque élé
élément t sera à moins
i ded P positions
iti d sa
de
position exacte.

On répète ce tri pour P diminuant jusqu’à 1.

Une suite possible pour P est de finir par 1, les pas


précédents étant de 4, 13, 40, 121, 364, 1093.
83

Les algorithmes de tri


D’autres suites sont possibles, à condition de
prendre des valeurs qui ne soient pas multiples
entre elles, pour ne pas toujours traiter les mêmes
éléments et laisser de côté les autres.

Les puissances successives de 2 ne traiteraient que


les positions paires,
paires sauf au dernier passage.
passage

L’intérêt de ce tri, est qu’il créé rapidement un


fichier presque trié, en appliquant un dernier par
insertion, celui-ci sera beaucoup plus rapide.

84

28
12/11/2010

Les algorithmes de tri


• Le tri rapide (Quick Sort)
Ce tri est récursif. On cherche à trier une partie du
tableau, délimitée par les indices gauche et droite.

On choisit une valeur de ce sous tableau que l’on


appelle pivot (une valeur médiane serait idéale,
mais sa recherche ralentit plus le tri que de prendre
une valeur
l aléatoire).
lé t i )

Puis on cherche la position définitive de ce pivot,


c’est-à-dire que l’on effectue des déplacements de
valeurs de telle sorte que tous les éléments avant le
pivot soient plus petit que lui et que tous ceux
placés après lui soient supérieurs, mais sans
chercher à les classer, pour accélérer le processus.
85

Les algorithmes de tri


Puis on rappelle récursivement le tri de la partie
avant le pivot et celle de la partie après le pivot.

On arrête la récursivité sur les parties à un seul


élément, dans ce cas, le tri à obligatoirement été
effectué.

• Le tri par création

Lorsqu’il est nécessaire de disposer simultanément


du tableau initial et du tableau trié, on peut recopier
le tableau initial puis effectuer un tri sur la copie ou
adapter un des algorithmes précédents.
86

Les algorithmes de tri


• Les autres tris

Suivant les données à trier, il peut être plus efficace


de construire un algorithme de tri spécifique.
Par exemple si un tableau contient un grand
nombre de valeurs similaires, on peut utiliser un
algorithme simple, consistant à rechercher
l’élément le plus petit, compter le nombre de ces
éléments les mettre dans un tableau destination,
éléments, destination et
répéter l’opération jusqu’à la fin du fichier. C’est le
tri par comptage.

Le tri par fusion utilise un algorithme de fusion de


deux tableaux triés en un seul plus grand, appelé
récursivement sur les deux moitiés du tableau,
jusqu’à une taille de tableau de 1.

87

29
12/11/2010

Les algorithmes de recherche


• La recherche séquentielle
A partir d’un tableau trié, on parcours ce tableau
élément par élément jusqu’à trouver le bon
élément.

• La recherche dichotomique
La recherche dichotomique recherche un élément
dans un tableau trié et retourne l’indice d’une
occurrence ded cet élément.
élé
On compare l’élément cherché à celui qui se trouve
au milieu du tableau. Si l’élément cherché est plus
petit, on continu la recherche dans la première
moitié du tableau, sinon dans la seconde moitié.
On recommence ce processus sur la moitié. On
s’arrête lorsque l’on a trouvé l’élément, ou lorsque
l’intervalle de recherche est nul.

88

30

Vous aimerez peut-être aussi