Algorithmique et Programmation
Instructions de base
Cours d'algorithmique
3
Notion d'algorithme
= Description d'un processus de résolution d'un
problème bien défini
= Succession d'actions qui, agissant sur un ensemble de
ressources (entrée), fourniront la solution (sortie) au
problème
 Comment faire pour l'obtenir ?
Énoncé Réflexion Programme
Résolution Codage
Cours d'algorithmique
4
Intérêt de l’algorithmique
 Faire la conception détaillée dans un langage
algorithmique, indépendant des langages de
programmation, et compréhensible par des
informaticiens qui ne sont pas des développeurs ;
 Préparer la phase de test.
Cours d'algorithmique
5
Les étapes d’un algorithme
 Préparation du traitement
 Données nécessaires à la résolution du problème
 Traitement
 Résolution pas à pas, après décomposition en sous-
problèmes si nécessaire.
 Édition des résultats
 impression à l’écran, dans un fichier, etc.
Cours d'algorithmique
6
Un premier algorithme
Algorithme CalculDuCarré
{Cet algorithme calcule le carré d’un nombre}
Variables unNombre, sonCarré: entiers
{préparation du traitement} {déclarations: réservation d'espace-
mémoire}
Début
unNombre <- 5
{traitement : calcul du carré}
sonCarré <- unNombre×unNombre
{présentation du résultat}
Fin
Cours d'algorithmique
7
Variables
 Fonction : Instruction permettant de réserver de l’espace
mémoire pour stocker des données (dépend du type de ces
données : entiers, réels, caractères, etc.)
 Déclaration de variable:
 Exemples :
Variables val, unNombre: entiers
nom, prénom : chaînes de caractères
Cours d'algorithmique
8
Types des variables
 Pour être utilisée par un ordinateur, elle doit
souvent être typée :
- entier : les entiers de -32 768 à 32 767
- réel :
- 3,40x1038
à -1,40x1045
pour les valeurs négatives
- 1,40x10-45
à 3,40x1038
pour les valeurs positives
- caractère (‘a’, ‘b’, …) ;
- chaînes de caractères ( "bonjour" ).
- Etc.…
Cours d'algorithmique
9
Remarques
Lorsque l’on déclare une variable, on ne lui donne pas de valeur.
On ne fait qu’indiquer au processeur le nom et le type des variables.
Le choix des noms de variables est arbitraire mais devrait toujours
refléter ce que représente les valeurs qu’elles contiennent.
Le contenu d’une case mémoire peut être modifié au cours de
l’exécution d’un programme mais pas le type de valeur qu’elle
contient.
Les déclaration sont faites à l’intérieur d’un programme donné.
Lorsque le programme se termine le nom, le type et la valeur
contenue dans les cases mémoire disparaissent.
Cours d'algorithmique
10
Affectation
 Fonction : Instruction permettant
d’attribuer à la variable identifiée par
l’élément placé à gauche du symbole la
valeur de l’élément placé à droite de ce
symbole.
Cours d'algorithmique
11
Exemple d’affectation
total
x2
y
entier
réel
réel
.
.
.
.
.
.
Après la déclaration
entiers: total
réels: x2,y
la mémoire ressemble à la figure
suivante:
45
55.5
-35.33
total
x2
y
entier
réel
réel
.
.
.
.
.
.
Si par la suite le processeur exécute
les instructions suivantes:
total <- 45
x2 <- -35.33
y <- 55.5
La mémoire devient:
Cours d'algorithmique
12
Affectation
Cours d'algorithmique
13
Constantes
 Fonction: Instruction permettant de réserver de
l’espace mémoire pour stocker des données dont la
valeur est fixée pour tout l’algorithme.
 Déclaration de la constante:
 Exemples:
Constantes (Max : entier) 25
(Min : entier) 10
Cours d'algorithmique
14
moyenne
note1
note2
réel
entier
entier
.
.
.
.
.
.
Exemple: calcul de la moyenne
note3
note4
entier
entier
Après les déclarations suivantes,
Réels: moyenne
Entiers: note1, note2, note3, note4
la mémoire ressemble à la figure
ci-contre
Cours d'algorithmique
15
95
moyenne
note1
note2
réel
entier
entier
.
.
.
.
.
.
Calcul de la moyenne (suite)
Après les instructions d’assignation
suivantes
note1 <- 75
note2 <- 100
note3 <- 88
note4 <- 95
La mémoire devient:
note3
note4
entier
entier
88
75
100
Remarque: la variable moyenne est toujours indéfinie puisqu’aucune valeur n’y
a été assignée.
Cours d'algorithmique
16
95
moyenne
note1
note2
réel
entier
entier
.
.
.
.
.
.
Calcul de la moyenne (suite)
moyenne = ( note1 + note2 + note3 + note4 ) / 4
note3
note4
entier
entier
88
75
100
Pour calculer la moyenne de ces 4 valeurs et mettre le résultat dans la variable moyenne
le processeur doit exécuter l’instruction suivante:
Cours d'algorithmique
17
95
moyenne
note1
note2
réel
entier
entier
.
.
.
.
.
.
Calcul de la moyenne (suite)
( note1 + note2 + note3 + note4 ) / 4
( 75 + 100 + 88 + 95 ) / 4
( 175 + 88 + 95 ) / 4
( 263 + 95 ) / 4
358 / 4
89.5
2) Le résultat est ensuite déposé dans la case
mémoire associée à la variable moyenne.
moyenne <- 89.5
note3
note4
entier
entier
88
75
100
1) Le processeur évalue d'abord la partie de gauche:
89.5
Cours d'algorithmique
18
Calcul de la moyenne (suite)
Liste des variables:
Réels: moyenne
Entiers: note1, note2, note3, note4
Instructions:
note1 <- 75
note2 <- 100
note3 <- 88
note4 <- 95
moyenne <- (note1 + note2 + note3 + note4 ) / 4
La séquence d'instructions nécessaires au calcul de la moyenne est donc:
Remarque: Les instructions sont toujours exécutées de façon séquentielle
par le processeur.
Cours d'algorithmique
19
Lecture et écriture
 Saisir des données en provenance du clavier :
Algorithme moyenne
Début
variables n, somme, moyenne : réel
Lire n
somme <- ...
moyenne <- somme / n
Écrire n
Fin
 Afficher des données sur un périphérique
(écran, imprimante, disque dur)
Cours d'algorithmique
20
Comparez
réels: moyenne
entiers: note1, note2, note3, note4
note1 = 75
note2 = 83
note3 = 79
note4 = 96
moyenne = note1 + note2 + note3 + note4 / 4
réels: moyenne
entiers: note1, note2, note3, note4
lire note1 note2 note3 note4
moyenne = note1 + note2 + note3 + note4 / 4
afficher moyenne
Ne calcule la
moyenne que
de ces 4
valeurs
particulières
Calcule la
moyenne de
n'importe
quelle
valeurs
Les structures de contrôle
Cours d'algorithmique
22
Les structures de contrôle 1/3
Instruction conditionnelle: Il est possible de demander à
l’ordinateur d’exécuter une instruction (ou une série
d’instructions) seulement si une certaine condition est
satisfaite.
Forme générale:
si (condition) alors
{instructions exécutées si la condition est vrai}
sinon
{instructions exécutées si la condition est fausse}
Cours d'algorithmique
23
Les structures de contrôle 2/3
 Les conditions peuvent être du type
- <expression arithmétique>
- <symbole de comparaison>
- <expression Booléen>
 les symboles de comparaisons sont :
= , < , > , <= , >= , <> ou #
Cours d'algorithmique
24
Exemple 1
Début
variable : note = 18: entier;
si (note >= 17) alors
Ecrire (" vous etes excellent " )
Finsi
Fin
Cours d'algorithmique
25
Exemple 2
Début
variable : note = 18: entier;
si (note >= 17) alors
{
Ecrire (" vous etes excellent " )
Ecrire ( " votre note est “, note)
}
Finsi
Fin
Cours d'algorithmique
26
Les conditions composées
si (condition1) et (condition2) alors instructions
Cours d'algorithmique
27
Exemple 3
Début
variable : note = 18: entier;
si (note >= 17) && (absence <=3) alors
{
Ecrire (" vous etes excellent " )
Ecrire ( " votre note est “, note)
}
Finsi
Fin
Cours d'algorithmique
28
Les structures de contrôle
(Si..Sinon Si )
si (condition) alors
instructions
sinon si (condition) alors
instructions
sinon
instructions
Cours d'algorithmique
29
Exemple 4
Début
Variables A,B : entiers
Ecrire ("Entrez deux nombres entiers :")
Lire A , B
Si (A > B)
Ecrire (A, " est plus grand que " ,B )
Sinon Si (A < B)
Ecrire ( A, " est plus petit que ",B )
Sinon
Ecrire ( A , " est égal à " , B )
Fin
Cours d'algorithmique
30
Les structures de contrôle 3/3
 Les choix peuvent avoir un degré quelconque
d’imbrication.
Les structures répétitives
Cours d'algorithmique
32
Itération à bornes non définies
 Lorsque les bornes ne sont pas
connues, il existe deux types de
boucles :
- Boucle TantQue ... Faire ...
- Boucle Repeter ... Jusqu‘à ...
Cours d'algorithmique
33
La boucle TantQue
 Fonction : répéter une suite d’instructions
tant qu’une condition est remplie
 Syntaxe :
TantQue < Expression logique (vrai) > Faire
Instructions
Fin TantQue
 Remarque : si la condition est fausse dès le
départ, le traitement n’est jamais exécuté
Cours d'algorithmique
34
Exemple
Algorithme CalculLeTotal
{Cet algorithme fait la somme des données qu’il saisit, arrêt à la lecture de -1)
constante (STOP : entier) ← -1
variables val, totalValeurs : entiers
Début
totalValeurs ← 0
Écrire ("Donnez une valeur, " , STOP, " pour finir.")
Lire (val)
TantQue val ≠ STOP faire
totalValeurs ← totalValeurs + val
Écrire ("Donnez une autre valeur, " , STOP, " pour finir.")
Lire (val)
Fin Tantque
Écrire ("La somme des valeurs saisies est " , totalValeurs)
Fin
Cours d'algorithmique
35
Sémantique de la boucle tant que
Lire (val)
TantQue val ≠ STOP faire
totalValeurs ← totalValeurs + val
Écrire ("Donnez une autre valeur, " , STOP, " pour finir.")
Lire (val)
Fin Tantque
Cours d'algorithmique
36
La boucle Répéter ….Jusqu’à
 Fonction: exécuter une suite
d’instructions au moins une fois et la
répéter tant qu’une condition est remplie
 Syntaxe :
Répéter <séquence d'instruction>
Jusqu’à < Expression logique (vrai) >
Cours d'algorithmique
37
Exemple
Algorithme Essai
{Cet algorithme a besoin d’une valeur positive non nulle}
variables valeur : entier
Début
Répéter
Écrire ("Donnez une valeur positive non nulle : ")
Lire (valeur)
Jusqu’à valeur <= 0
Écrire ("La valeur positive non nulle que vous avez saisie est ")
Lire ( valeur )
… {traitement de la valeur saisie}
Fin
Cours d'algorithmique
38
Boucle à bornes définies
 Dans le cas d'une boucle à bornes
définies, nous connaissons le nombre
d'itérations à effectuer, grâce aux valeurs
des bornes minimum et maximum fournies
dans la définition de la boucle.
Cours d'algorithmique
39
La boucle Pour
 Fonction: répéter une suite d’instructions
un certain nombre de fois
 Syntaxe :
Pour variable Allant de valeur initiale à valeur finale
Faire <séquence d'instruction>
Cours d'algorithmique
40
Exemple
Algorithme CalculLeTotal
variables nbVal, cpt : entiers
valeur, totalValeurs : réels
Début
Écrire ("Combien de valeurs voulez-vous saisir ?")
Lire (nbVal)
totalValeurs ← 0
Pour cpt Allant de 1 à nbVal faire
Écrire ("Donnez une valeur :")
Lire (valeur)
totalValeurs ← totalValeurs + valeur
finPour
Écrire ("Le total des ", nbVal, "valeurs est " ,Valeur )
Fin
Cours d'algorithmique
41
Les champs de la boucle POUR
Pour variable Allant de valeur initiale à valeur finale
[PAS Valeur du pas]
Faire <séquence d'instruction>
Cours d'algorithmique
42
Sémantique de la boucle pour
 Implicitement, l’instruction pour:
 initialise une variable de boucle (le compteur)
 incrémente cette variable à chaque pas
 vérifie que cette variable ne dépasse pas la borne
supérieure
 Attention :le traitement ne doit pas modifier
le compteur
Cours d'algorithmique
43
Pour et TantQue – Comparaison
 Implicitement, l’instruction Pour :
- initialise un compteur
- incrémente le compteur à chaque pas
- vérifie que le compteur ne dépasse pas la borne supérieure
 Explicitement, l’instruction TantQue doit :
- initialiser un compteur
- incrémenter le compteur à chaque pas
- vérifier que le compteur ne dépasse pas la borne supérieure
Cours d'algorithmique
44
Choisir Pour.. TantQue.. Répéter..
Cours d'algorithmique
45
Le problème d’une boucle : il faut en sortir!
 Quelque chose dans la suite d’instructions B
doit amener A à prendre la valeur Faux.
 La suite d’instructions B doit modifier au
moins une variable de l’expression logique A
 (mauvais) exemple :
Les tableaux
Cours d'algorithmique
47
Structures de données
 Lorsque l’on utilise un grand nombre de valeur
stockées sous forme de variables l’écriture d’un
algo devient laborieuse.
 Exemple : calculer la moyenne des notes obtenues au partiel d’algo par
les 24 étudiants de STI 1ère année :
Moy = (N1 + N2 + N3 + N4 + N5 + N6 + N7 + N8 + N9 + N10 + N11+ N12 + N13 +
N14 + N15 + N16 + N17 + N18 + N19 + N20 + N21 + N22 + N23 + N24 ) / 24
 Que faire si le nombre de variables est 100,1000
ou plus ?
Cours d'algorithmique
48
 On introduit donc la notion de structures de
données.
 De telles structures sont définies dans le
seul but de stocker des données.
 Chacune a ses spécificités et est adaptée à
un type de donnée mais surtout aux
traitements que l’on va y appliquer.
Cours d'algorithmique
49
Les tableaux
 Un tableau est un ensemble ordonné et
homogène de valeurs :
- ordonné car les cases mémoires composant un tableau sont numérotés
- homogène car un tableau ne peut avoir que des valeurs du même type.
 Avec un indice commençant à 0, les cases d’un
tableau de N éléments sont numérotés de 0 à N-1.
Cours d'algorithmique
50
Exemples d'applications
 Ensemble de valeurs entières, réelles,
booléennes,....
 Ensemble de noms (type chaîne)
 Ensemble de caractères (type caractère)
 Ensemble d'ouvrages
Cours d'algorithmique
51
Définition d’un tableau
 On définit un tableau par:
 Son nom
 Le nombre de ses dimensions
 Sa taille
 Le type de données qu’il contient
Cours d'algorithmique
52
Les tableaux à une dimension
 Déclaration :
<TypeSimple> <NomTableau>[<Dimension>];
 Exemples:
 int A[25];
 int C[10];
 char D[30];
Cours d'algorithmique
53
Initialisation et réservation
 Initialisation :
 int A[5] = {10, 20, 30, 40, 50};
 float B[4] = {-1.05, 3.33, 87e-5, -12.3E4};
 int C[10] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1};
 Réservation automatique :
 int A[] = {10, 20, 30, 40, 50};
Cours d'algorithmique
54
Accès aux éléments
 En déclarant un tableau par:
int A[5];
 On peut accéder à ces élément par :
A[0], A[1], ... , A[4]
 Attention aux indices
Cours d'algorithmique
55
Exercice
 Comment saisir les éléments d’un tableau
de taille N ?
Cours d'algorithmique
56
Affichage et affectation
 Affichage :
Pour I Allant de 1 à N faire
écrire A[I]
finpour
 Affectation :
Pour I Allant de 1 à N faire
écrire A[I]
finpour
Cours d'algorithmique
57
Tableaux à deux dimensions
 Déclaration :
<TypeSimple> NomTabl>[<DimLigne>][<DimCol>];
 Exemples:
 int A[10][10];
 float B[2][20];
 int C[3][3];
 char D[15][40];
Cours d'algorithmique
58
Initialisation et réservation
 Initialisation :
int A[3][10] = { { 0,10,20,30,40,50,60,70,80,90},
{10,11,12,13,14,15,16,17,18,19},
{ 1,12,23,34,45,56,67,78,89,90}};
 Réservation automatique :
int A[][10] = {{ 0,10,20,30,40,50,60,70,80,90},
{10,11,12,13,14,15,16,17,18,19},
{ 1,12,23,34,45,56,67,78,89,90}};
Cours d'algorithmique
59
Accès aux éléments
 Accès à un tableau à deux dimensions en C
<NomTableau>[<Ligne>][<Colonne>]
 Attention aux indices
Cours d'algorithmique
60
Exercice
 Comment saisir les éléments d’un tableau à
deux dimensions de taille N*M ?
Cours d'algorithmique
61
Affichage
 Affichage du contenu d'un tableau à deux dimensions
/* Pour chaque ligne */
Pour I Allant de 1 à L faire
Pour J variant de 1 à C faire
écrire A[I,J]
finpour
/* Retour à la ligne */
écrire
Fin pour
Cours d'algorithmique
62
Recherche dans un tableaux
 Recherche d’un élément dans un tableau
 Technique de flag
 Recherche dico
Cours d'algorithmique
63
Exercices
Cours d'algorithmique
64
Exercice 1
Cours d'algorithmique
65
Exercice 2
Cours d'algorithmique
66
Exercice 3
Cours d'algorithmique
67
Exercice 4
Cours d'algorithmique
68
Trier
 Trier, c'est ordonner des éléments en
fonction d'une certaine clé (valeur)
 Nous verrons comment trier les éléments
d'un tableau
 Tri par insertions
 Tri par permutations (tri-bulle)
 Tri rapide (quick sort)
Cours d'algorithmique
69
Les algorithmes de Tri
 Tri par sélection.
 Tri par insertion.
 Tri par bulle.
 Tri par fusion.
 Tri rapide.
Cours d'algorithmique
70
Tri par insertion
 On trie en prenant chaque élément du tableau, de
gauche à droite
 On le compare avec la partie déjà triée (à sa
gauche) pour trouver sa position
 On décale les éléments plus grands à droite pour
créer un "trou“
 On insert l'élément dans le "trou"
Cours d'algorithmique
71
Tri par insertion
 Le premier élément est toujours déjà trié
 78 est plus grand que 14, il est trié
 54 est plus petit que 78, il faut les déplacer
Cours d'algorithmique
72
Tri par insertion
 54 est plus grand que 14, il est trié
 23 est plus petit que 78, il faut les déplacer
 23 est plus petit que 54, il faut déplacer 54
Cours d'algorithmique
73
Tri par insertion
 23 est plus grand que 14, il est trié
 5 est plus petit que 78, il faut les déplacer
 est plus petit que 54, il faut déplacer 54
Cours d'algorithmique
74
Tri par insertion
 5 est plus petit que 23, il faut déplacer 23
 5 est plus petit que 14, il faut déplacer 14
 5 est tout au bout du tableau, il est trié
Cours d'algorithmique
75
Tri par insertion
 66 est plus petit que 78, il faut les déplacer
 66 est plus grand que 54, il est trié
 Tout le tableau est trié
Cours d'algorithmique
76
Pseudo-code
 Pour chaque position du tableau i (sauf la
première), répéter
 Mettre l'élément i dans une variable temporaire x
 Initialiser un indice j à la position précédente à i
 Tant que
 1. j ne dépasse pas la borne inférieure du tableau
 et
 2. x est plus petit que l'élément à la position j
 Faire
 déplacer l'éléments j du tableau un crans à la droite
 décrémenter j
 Fin Tant que
 Mettre x à la place ainsi libérée
Cours d'algorithmique
77
Algorithme de Tri par insertion
Pour i Allant de 1 à n - 1 Faire
temp tableau[i];
j i - 1;
TantQue (j >= 0) & (temp < tableau[j]) Faire
tableau[j+1] tableau[j];
j j-1
FinTantQue
tableau[j+1] temp
FinPour
Cours d'algorithmique
78
Tri par insertions en action
 Voir Applet
Cours d'algorithmique
79
Tri par bulle
 Principe
- Comparaison deux à deux des éléments du
tableau (de gauche à droite ou de droite à
gauche) et permutation si nécessaire
- A chaque itération, un nouvel élément est placé
dans sa position définitive
Cours d'algorithmique
80
 14 et 78 sont en ordre, respectivement
 78 est plus grand que 54, permutation
 78 est plus grand que 23, permutation
Cours d'algorithmique
81
 78 est plus grand que 5, permutation
 78 est plus grand que 66, permutation
 78 est en place, fin du 1er tour
Cours d'algorithmique
82
 14 et 54 sont en ordre, respectivement
 54 est plu grand que 23, permutation
 54 est plus grand que 5, permutation
Cours d'algorithmique
83
 54 et 66 sont en ordre, respectivement
 66 est en place, fin du 2e tour
 14 et 23 sont en ordre, repectivement
Cours d'algorithmique
84
 23 est plus grand que 5, permutation
 23 et 54 sont en ordre, respectivement
 54 est en place, fin du 3e tour
Cours d'algorithmique
85
 14 est plus grand que 5, permutation
 14 et 23 sont en ordre, respectivement
 23 est en place, fin du 4e tour
Cours d'algorithmique
86
 5 et 14 sont en ordre, respectivement
 14 est en place, fin du 5e et dernier tour
 Fin de l'algorithme
Cours d'algorithmique
87
Pseudo-code
 Pour chaque position du tableau (sauf
la première), répéter
 Pour chaque position du tableau, de la
première à l'avant-dernière non triée,
répéter
 Si l'élément courant est plus grand que sont
suivant
 Les permuter (utilisation d'une variable temporaire)
Cours d'algorithmique
88
Algorithme de Tri par bulle
Pour i Allant de 1 à n-1 Faire
Pour j Allant de 0 à n-i-1 Faire
Si tableau[j] > tableau[j+1] Alors
temp tableau[j+1];
tableau[j+1] tableau[j];
tableau[j] temp
FinSi
FinPour
FinPour
Cours d'algorithmique
89
Tri par insertions en action
 Voir Applet
Programmation modulaire
Cours d'algorithmique
91
Programmation modulaire
 Comment traiter les problèmes trop
complexes pour être appréhendés en un
seul bloc ?
 Programmation modulaire.
 Types de modules :
- Les procédures
- Les fonctions
 Un module est appelé (exécuté) quand son
nom est invoqué.
Cours d'algorithmique
92
Exemple
Cours d'algorithmique
93
Structure de blocs
 Définition de sous-programmes induit sur le programme
une structure de blocs, chaque bloc correspondant à un
sous-programme, l'imbrication des définitions engendre
une hiérarchie de niveaux.
Cours d'algorithmique
94
Les fonctions
 Les fonctions sont des sous-programmes admettant
des paramètres et retournant un seul résultat.
 Déclaration d’une fonction :
Fonction nom de la fonction (paramètre(s) de la fonction) : type de la valeur retournée
Variable locale 1 : type 1; . . .
Début
instructions de la fonction avec au moins une fois l’instruction
retourner
Fin
Cours d'algorithmique
95
Définition de la fonction
 On définit une fonction, c’est-à-dire le traitement
qu’elle effectue, généralement dans les lignes qui
suivent sa déclaration.
 Une fonction doit impérativement :
- retourner une valeur ;
- faire en sorte que cette valeur soit bien du
type spécifié dans sa déclaration.
Cours d'algorithmique
96
Exemple de fonction
fonction abs (unEntier : Entier) : Entier
début
si unEntier > 0 alors
retourner unEntier
sinon
retourner -unEntier
finsi
fin
Cours d'algorithmique
97
Paramètres formels (1)
 Les arguments utilisés lors de la définition
d’une fonction sont appelés paramètres
formels
 Leur rôle est de permettre, au sein du
corps de la fonction de décrire ce qu’elle
doit faire.
Cours d'algorithmique
98
Paramètres formels (2)
 Le corps de la fonction doit utiliser les
arguments (ou paramètres formels).
 Exemple :
Fonction somme(x : réel, y : réel, z : réel) : réel
Début
retourner x+y+z
Fin
Cours d'algorithmique
99
Appel de la fonction
 Une fois la fonction définie, il est possible de
l’appeler n’importe où dans le programme
principal.
 L’appel doit respecter :
- le type des arguments de la fonction
- leur nombre.
 Au niveau du programme principal, on appelle
ces arguments les paramètres effectifs
Cours d'algorithmique
100
Exemple – Appel d’une fonction
 L’allure générale d’un algorithme incluant des
fonctions est la suivante :
Algorithme Exemple1
fonction abs (unEntier : Entier) : réel
Variable valeurAbsolue : réel
Début
Si unEntier > 0 Alors
valeurAbsolue ← unEntier
Sinon
valeurAbsolue ← -unEntier
finsi
retourner valeurAbsolue
fin
Variable a : Entier, b : réel /* var. du prog. Principal */
Début /* Début de programme principal */
écrire("Entrez un entier :")
lire(a)
b ← abs(a)
écrire("la valeur absolue de ",a," est ",b)
fin
Cours d'algorithmique
101
Attention!
 Il n’est pas possible de changer la valeur d’un paramètre effectif. Par
exemple, ici, la fonction ne modifie en rien la valeur de x :
Algorithme calcul :
Fonction fois2(a : réel) : réel
Début
a ← a*2
retourner (a)
Fin
Variable x : réel
Début
x ← 3
Écrire fois2(x)
// x param. eff. passé par valeur
Écrire(x)
Fin
Exécution
6
3
Cours d'algorithmique
102
Les procédures
 Une procédure est une fonction qui ne renvoie
aucune valeur. Elle effectue seulement un
traitement particulier.
 Déclaration d’une procédure :
Procédure nom de la fonction (paramètre(s) du procédure)
Variable locale 1 : type 1; . . .
Début
instructions de la procédure
Fin
Cours d'algorithmique
103
Les procédures
 Les procédures se définissent et s’utilisent
comme des fonctions (ce sont en fait des
fonctions particulières de type vide) :
- Déclaration avec paramètres formels,
- Utilisation de variables locales,
- Appel avec paramètres effectifs
- Impossibilité de modifier les paramètres effectifs.
Cours d'algorithmique
104
Exemple 1
Algorithme VariablesLocales(input,output);
var nombre1, nombre2: entier {variables globales}
Procédure add;
Variable resultat: entier {variable locale à "add"}
Début
resultat ← nombre1 + nombre2;
writeln('La réponse est: ',resultat)
Fin
Début {programme principal}
Écrire('Entrez les 2 nombres entiers à additionner');
Lire(nombre1,nombre2);
add
Fin
Cours d'algorithmique
105
Exemple 2
Algorithme AddNombres
Procédure calcReponse(premier,second : entier);
Variable résultat : entier; {variable locale à calcReponse}
Début
resultat ← premier + second;
Écrire ('La réponse est ', resultat )
Fin
Variable nombre1,nombre2: entier; {variables globales}
Début {programme principal}
Écrire ('Entrez les 2 nombres à additionner');
Lire (nombre1,nombre2);
calcReponse(nombre1,nombre2)
Fin
Cours d'algorithmique
106
Récursivité
Définition:
Définition:
Une fonction est récursive si elle peut s'appeler elle-même de façon directe
Une fonction est récursive si elle peut s'appeler elle-même de façon directe
ou indirecte.
ou indirecte.
Idée générale
Idée générale :
:
La réalisation d'une tâche par un algorithme récursif
La réalisation d'une tâche par un algorithme récursif
repose sur deux éléments:
repose sur deux éléments:
 La résolution partielle du problème d'une façon simple. La réalisation du
La résolution partielle du problème d'une façon simple. La réalisation du
reste de la tâche étant déléguée aux appels récursifs successifs.
reste de la tâche étant déléguée aux appels récursifs successifs.
 La détermination d'une condition d'arrêt qui permet d'arrêter la cascade
La détermination d'une condition d'arrêt qui permet d'arrêter la cascade
d'appels récursifs. Résoudre le problème au moment où la condition d'arrêt
d'appels récursifs. Résoudre le problème au moment où la condition d'arrêt
est détectée correspond en général à résoudre un cas trivial de celui-ci.
est détectée correspond en général à résoudre un cas trivial de celui-ci.
Cours d'algorithmique
107
Avantages et inconvénients
Avantages:
Avantages:
 Formulation compacte, claire et élégante.
Formulation compacte, claire et élégante.
 Maîtrise des problèmes dont la nature même est
Maîtrise des problèmes dont la nature même est
récursive.
récursive.
Désavantages:
Désavantages:
 Possibilité de grande occupation de la mémoire.
Possibilité de grande occupation de la mémoire.
 Temps d'exécution peut être plus long.
Temps d'exécution peut être plus long.
 Estimation difficile de la profondeur maximale
Estimation difficile de la profondeur maximale
de la récursivité.
de la récursivité.
Cours d'algorithmique
108
Fonction récursive factorielle
Factorielle(N:réel):réel
Si (N==0) Alors
retourner 1;
Sinon
retourner (Factorielle(N-1)*N);
Soit la fonction Factorielle, effectuant l’opération
Soit la fonction Factorielle, effectuant l’opération n!
n!
Cours d'algorithmique
109
Exécution de Factorielle
Factorielle (4)
Factorielle (4)
Factorielle (4);
Factorielle (4);
Factorielle (3)
Factorielle (3)
Factorielle (2)
Factorielle (2)
Factorielle (1)
Factorielle (1)
Factorielle (0)
Factorielle (0)
Cours d'algorithmique
110
Récursivité (suite)
Quatre règles régissent la récursivité
Quatre règles régissent la récursivité:
:
1.
1. Présence de cas de base pouvant être résolu sans
Présence de cas de base pouvant être résolu sans
récursivité
récursivité
2.
2. Toujours progresser vers le cas de base à chaque
Toujours progresser vers le cas de base à chaque
appel récursif
appel récursif
3.
3. « Ayez la Foi »: avoir confiance que les appels
« Ayez la Foi »: avoir confiance que les appels
récursifs progressent réellement vers le cas de base.
récursifs progressent réellement vers le cas de base.
4.
4. Intérêt composé: Ne jamais dédoubler du travail
Intérêt composé: Ne jamais dédoubler du travail
dans deux appels récursifs différents.
dans deux appels récursifs différents.
Cours d'algorithmique
111
Limitations: Fonction récursive
Limitations: Fonction récursive
Fibonnacci
Fibonnacci
fibo (valeur:réel):réel
Si (valeur <= 1)Alors
retourner valeur;
Sinon
returnourner(fibo(valeur-1) + fibo(valeur-2));
Soit la fonction Fibo (Fibonacci), effectuant
Soit la fonction Fibo (Fibonacci), effectuant
l’opération
l’opération f(n) = f(n-1) + f(n-2)
f(n) = f(n-1) + f(n-2)
Cours d'algorithmique
112
Exécution de Fibonnacci
Exécution de Fibonnacci
Soit les appels effecutés pour fibo(4) :
Soit les appels effecutés pour fibo(4) :
fibo(4)
fibo(4)
fibo(3)
fibo(3)
fibo(2)
fibo(2)
fibo(1)
fibo(1) fibo(0)
fibo(0)
fibo(1)
fibo(1)
fibo(2)
fibo(2)
fibo(0)
fibo(0)
fibo(1)
fibo(1)
Cours d'algorithmique
113
Danger de Fibonnacci
Danger de Fibonnacci
Note :
Note :
 Cette fonction récursive effectue plusieurs appels au même calcul.
Cette fonction récursive effectue plusieurs appels au même calcul.
Par exemple pour déterminer f(n), on calcule d’abord f(n-1), puis au
Par exemple pour déterminer f(n), on calcule d’abord f(n-1), puis au
retour de l’appel, f(n-2) est calculé. Or, dans le calcul de f(n-1), f(n-
retour de l’appel, f(n-2) est calculé. Or, dans le calcul de f(n-1), f(n-
2) est déjà calculé!
2) est déjà calculé!
 Ce problème s’aggrave en descendant l’arborescence, puisque f(n-3)
Ce problème s’aggrave en descendant l’arborescence, puisque f(n-3)
sera appelé à 3 reprises : chaque appel récursif entraînera de plus en
sera appelé à 3 reprises : chaque appel récursif entraînera de plus en
plus d’appel redondant.
plus d’appel redondant.
 Règle 4:
Règle 4: Ne jamais dupliquer le travail par la résolution d’une
Ne jamais dupliquer le travail par la résolution d’une
même instance d’un problème dans plusieurs appels récursifs.
même instance d’un problème dans plusieurs appels récursifs.
Cours d'algorithmique
114
Récursivité
 Calcul de la racine carrée d'un nombre par approximation
successive
- calculer c’est trouver une quantité y telle que y2 = x
et x ≥ 0
 Algorithme:
– faire une première approximation G de
– améliorer cette approximation en calculant la moyenne
entre G et x/G
– continuer jusqu’à ce que l’estimation G soit jugée
satisfaisante
Cours d'algorithmique
115
Exemple

COURS ALGOgithmique et programmation ofppt.ppt

  • 1.
  • 2.
  • 3.
    Cours d'algorithmique 3 Notion d'algorithme =Description d'un processus de résolution d'un problème bien défini = Succession d'actions qui, agissant sur un ensemble de ressources (entrée), fourniront la solution (sortie) au problème  Comment faire pour l'obtenir ? Énoncé Réflexion Programme Résolution Codage
  • 4.
    Cours d'algorithmique 4 Intérêt del’algorithmique  Faire la conception détaillée dans un langage algorithmique, indépendant des langages de programmation, et compréhensible par des informaticiens qui ne sont pas des développeurs ;  Préparer la phase de test.
  • 5.
    Cours d'algorithmique 5 Les étapesd’un algorithme  Préparation du traitement  Données nécessaires à la résolution du problème  Traitement  Résolution pas à pas, après décomposition en sous- problèmes si nécessaire.  Édition des résultats  impression à l’écran, dans un fichier, etc.
  • 6.
    Cours d'algorithmique 6 Un premieralgorithme Algorithme CalculDuCarré {Cet algorithme calcule le carré d’un nombre} Variables unNombre, sonCarré: entiers {préparation du traitement} {déclarations: réservation d'espace- mémoire} Début unNombre <- 5 {traitement : calcul du carré} sonCarré <- unNombre×unNombre {présentation du résultat} Fin
  • 7.
    Cours d'algorithmique 7 Variables  Fonction: Instruction permettant de réserver de l’espace mémoire pour stocker des données (dépend du type de ces données : entiers, réels, caractères, etc.)  Déclaration de variable:  Exemples : Variables val, unNombre: entiers nom, prénom : chaînes de caractères
  • 8.
    Cours d'algorithmique 8 Types desvariables  Pour être utilisée par un ordinateur, elle doit souvent être typée : - entier : les entiers de -32 768 à 32 767 - réel : - 3,40x1038 à -1,40x1045 pour les valeurs négatives - 1,40x10-45 à 3,40x1038 pour les valeurs positives - caractère (‘a’, ‘b’, …) ; - chaînes de caractères ( "bonjour" ). - Etc.…
  • 9.
    Cours d'algorithmique 9 Remarques Lorsque l’ondéclare une variable, on ne lui donne pas de valeur. On ne fait qu’indiquer au processeur le nom et le type des variables. Le choix des noms de variables est arbitraire mais devrait toujours refléter ce que représente les valeurs qu’elles contiennent. Le contenu d’une case mémoire peut être modifié au cours de l’exécution d’un programme mais pas le type de valeur qu’elle contient. Les déclaration sont faites à l’intérieur d’un programme donné. Lorsque le programme se termine le nom, le type et la valeur contenue dans les cases mémoire disparaissent.
  • 10.
    Cours d'algorithmique 10 Affectation  Fonction: Instruction permettant d’attribuer à la variable identifiée par l’élément placé à gauche du symbole la valeur de l’élément placé à droite de ce symbole.
  • 11.
    Cours d'algorithmique 11 Exemple d’affectation total x2 y entier réel réel . . . . . . Aprèsla déclaration entiers: total réels: x2,y la mémoire ressemble à la figure suivante: 45 55.5 -35.33 total x2 y entier réel réel . . . . . . Si par la suite le processeur exécute les instructions suivantes: total <- 45 x2 <- -35.33 y <- 55.5 La mémoire devient:
  • 12.
  • 13.
    Cours d'algorithmique 13 Constantes  Fonction:Instruction permettant de réserver de l’espace mémoire pour stocker des données dont la valeur est fixée pour tout l’algorithme.  Déclaration de la constante:  Exemples: Constantes (Max : entier) 25 (Min : entier) 10
  • 14.
    Cours d'algorithmique 14 moyenne note1 note2 réel entier entier . . . . . . Exemple: calculde la moyenne note3 note4 entier entier Après les déclarations suivantes, Réels: moyenne Entiers: note1, note2, note3, note4 la mémoire ressemble à la figure ci-contre
  • 15.
    Cours d'algorithmique 15 95 moyenne note1 note2 réel entier entier . . . . . . Calcul dela moyenne (suite) Après les instructions d’assignation suivantes note1 <- 75 note2 <- 100 note3 <- 88 note4 <- 95 La mémoire devient: note3 note4 entier entier 88 75 100 Remarque: la variable moyenne est toujours indéfinie puisqu’aucune valeur n’y a été assignée.
  • 16.
    Cours d'algorithmique 16 95 moyenne note1 note2 réel entier entier . . . . . . Calcul dela moyenne (suite) moyenne = ( note1 + note2 + note3 + note4 ) / 4 note3 note4 entier entier 88 75 100 Pour calculer la moyenne de ces 4 valeurs et mettre le résultat dans la variable moyenne le processeur doit exécuter l’instruction suivante:
  • 17.
    Cours d'algorithmique 17 95 moyenne note1 note2 réel entier entier . . . . . . Calcul dela moyenne (suite) ( note1 + note2 + note3 + note4 ) / 4 ( 75 + 100 + 88 + 95 ) / 4 ( 175 + 88 + 95 ) / 4 ( 263 + 95 ) / 4 358 / 4 89.5 2) Le résultat est ensuite déposé dans la case mémoire associée à la variable moyenne. moyenne <- 89.5 note3 note4 entier entier 88 75 100 1) Le processeur évalue d'abord la partie de gauche: 89.5
  • 18.
    Cours d'algorithmique 18 Calcul dela moyenne (suite) Liste des variables: Réels: moyenne Entiers: note1, note2, note3, note4 Instructions: note1 <- 75 note2 <- 100 note3 <- 88 note4 <- 95 moyenne <- (note1 + note2 + note3 + note4 ) / 4 La séquence d'instructions nécessaires au calcul de la moyenne est donc: Remarque: Les instructions sont toujours exécutées de façon séquentielle par le processeur.
  • 19.
    Cours d'algorithmique 19 Lecture etécriture  Saisir des données en provenance du clavier : Algorithme moyenne Début variables n, somme, moyenne : réel Lire n somme <- ... moyenne <- somme / n Écrire n Fin  Afficher des données sur un périphérique (écran, imprimante, disque dur)
  • 20.
    Cours d'algorithmique 20 Comparez réels: moyenne entiers:note1, note2, note3, note4 note1 = 75 note2 = 83 note3 = 79 note4 = 96 moyenne = note1 + note2 + note3 + note4 / 4 réels: moyenne entiers: note1, note2, note3, note4 lire note1 note2 note3 note4 moyenne = note1 + note2 + note3 + note4 / 4 afficher moyenne Ne calcule la moyenne que de ces 4 valeurs particulières Calcule la moyenne de n'importe quelle valeurs
  • 21.
  • 22.
    Cours d'algorithmique 22 Les structuresde contrôle 1/3 Instruction conditionnelle: Il est possible de demander à l’ordinateur d’exécuter une instruction (ou une série d’instructions) seulement si une certaine condition est satisfaite. Forme générale: si (condition) alors {instructions exécutées si la condition est vrai} sinon {instructions exécutées si la condition est fausse}
  • 23.
    Cours d'algorithmique 23 Les structuresde contrôle 2/3  Les conditions peuvent être du type - <expression arithmétique> - <symbole de comparaison> - <expression Booléen>  les symboles de comparaisons sont : = , < , > , <= , >= , <> ou #
  • 24.
    Cours d'algorithmique 24 Exemple 1 Début variable: note = 18: entier; si (note >= 17) alors Ecrire (" vous etes excellent " ) Finsi Fin
  • 25.
    Cours d'algorithmique 25 Exemple 2 Début variable: note = 18: entier; si (note >= 17) alors { Ecrire (" vous etes excellent " ) Ecrire ( " votre note est “, note) } Finsi Fin
  • 26.
    Cours d'algorithmique 26 Les conditionscomposées si (condition1) et (condition2) alors instructions
  • 27.
    Cours d'algorithmique 27 Exemple 3 Début variable: note = 18: entier; si (note >= 17) && (absence <=3) alors { Ecrire (" vous etes excellent " ) Ecrire ( " votre note est “, note) } Finsi Fin
  • 28.
    Cours d'algorithmique 28 Les structuresde contrôle (Si..Sinon Si ) si (condition) alors instructions sinon si (condition) alors instructions sinon instructions
  • 29.
    Cours d'algorithmique 29 Exemple 4 Début VariablesA,B : entiers Ecrire ("Entrez deux nombres entiers :") Lire A , B Si (A > B) Ecrire (A, " est plus grand que " ,B ) Sinon Si (A < B) Ecrire ( A, " est plus petit que ",B ) Sinon Ecrire ( A , " est égal à " , B ) Fin
  • 30.
    Cours d'algorithmique 30 Les structuresde contrôle 3/3  Les choix peuvent avoir un degré quelconque d’imbrication.
  • 31.
  • 32.
    Cours d'algorithmique 32 Itération àbornes non définies  Lorsque les bornes ne sont pas connues, il existe deux types de boucles : - Boucle TantQue ... Faire ... - Boucle Repeter ... Jusqu‘à ...
  • 33.
    Cours d'algorithmique 33 La boucleTantQue  Fonction : répéter une suite d’instructions tant qu’une condition est remplie  Syntaxe : TantQue < Expression logique (vrai) > Faire Instructions Fin TantQue  Remarque : si la condition est fausse dès le départ, le traitement n’est jamais exécuté
  • 34.
    Cours d'algorithmique 34 Exemple Algorithme CalculLeTotal {Cetalgorithme fait la somme des données qu’il saisit, arrêt à la lecture de -1) constante (STOP : entier) ← -1 variables val, totalValeurs : entiers Début totalValeurs ← 0 Écrire ("Donnez une valeur, " , STOP, " pour finir.") Lire (val) TantQue val ≠ STOP faire totalValeurs ← totalValeurs + val Écrire ("Donnez une autre valeur, " , STOP, " pour finir.") Lire (val) Fin Tantque Écrire ("La somme des valeurs saisies est " , totalValeurs) Fin
  • 35.
    Cours d'algorithmique 35 Sémantique dela boucle tant que Lire (val) TantQue val ≠ STOP faire totalValeurs ← totalValeurs + val Écrire ("Donnez une autre valeur, " , STOP, " pour finir.") Lire (val) Fin Tantque
  • 36.
    Cours d'algorithmique 36 La boucleRépéter ….Jusqu’à  Fonction: exécuter une suite d’instructions au moins une fois et la répéter tant qu’une condition est remplie  Syntaxe : Répéter <séquence d'instruction> Jusqu’à < Expression logique (vrai) >
  • 37.
    Cours d'algorithmique 37 Exemple Algorithme Essai {Cetalgorithme a besoin d’une valeur positive non nulle} variables valeur : entier Début Répéter Écrire ("Donnez une valeur positive non nulle : ") Lire (valeur) Jusqu’à valeur <= 0 Écrire ("La valeur positive non nulle que vous avez saisie est ") Lire ( valeur ) … {traitement de la valeur saisie} Fin
  • 38.
    Cours d'algorithmique 38 Boucle àbornes définies  Dans le cas d'une boucle à bornes définies, nous connaissons le nombre d'itérations à effectuer, grâce aux valeurs des bornes minimum et maximum fournies dans la définition de la boucle.
  • 39.
    Cours d'algorithmique 39 La bouclePour  Fonction: répéter une suite d’instructions un certain nombre de fois  Syntaxe : Pour variable Allant de valeur initiale à valeur finale Faire <séquence d'instruction>
  • 40.
    Cours d'algorithmique 40 Exemple Algorithme CalculLeTotal variablesnbVal, cpt : entiers valeur, totalValeurs : réels Début Écrire ("Combien de valeurs voulez-vous saisir ?") Lire (nbVal) totalValeurs ← 0 Pour cpt Allant de 1 à nbVal faire Écrire ("Donnez une valeur :") Lire (valeur) totalValeurs ← totalValeurs + valeur finPour Écrire ("Le total des ", nbVal, "valeurs est " ,Valeur ) Fin
  • 41.
    Cours d'algorithmique 41 Les champsde la boucle POUR Pour variable Allant de valeur initiale à valeur finale [PAS Valeur du pas] Faire <séquence d'instruction>
  • 42.
    Cours d'algorithmique 42 Sémantique dela boucle pour  Implicitement, l’instruction pour:  initialise une variable de boucle (le compteur)  incrémente cette variable à chaque pas  vérifie que cette variable ne dépasse pas la borne supérieure  Attention :le traitement ne doit pas modifier le compteur
  • 43.
    Cours d'algorithmique 43 Pour etTantQue – Comparaison  Implicitement, l’instruction Pour : - initialise un compteur - incrémente le compteur à chaque pas - vérifie que le compteur ne dépasse pas la borne supérieure  Explicitement, l’instruction TantQue doit : - initialiser un compteur - incrémenter le compteur à chaque pas - vérifier que le compteur ne dépasse pas la borne supérieure
  • 44.
  • 45.
    Cours d'algorithmique 45 Le problèmed’une boucle : il faut en sortir!  Quelque chose dans la suite d’instructions B doit amener A à prendre la valeur Faux.  La suite d’instructions B doit modifier au moins une variable de l’expression logique A  (mauvais) exemple :
  • 46.
  • 47.
    Cours d'algorithmique 47 Structures dedonnées  Lorsque l’on utilise un grand nombre de valeur stockées sous forme de variables l’écriture d’un algo devient laborieuse.  Exemple : calculer la moyenne des notes obtenues au partiel d’algo par les 24 étudiants de STI 1ère année : Moy = (N1 + N2 + N3 + N4 + N5 + N6 + N7 + N8 + N9 + N10 + N11+ N12 + N13 + N14 + N15 + N16 + N17 + N18 + N19 + N20 + N21 + N22 + N23 + N24 ) / 24  Que faire si le nombre de variables est 100,1000 ou plus ?
  • 48.
    Cours d'algorithmique 48  Onintroduit donc la notion de structures de données.  De telles structures sont définies dans le seul but de stocker des données.  Chacune a ses spécificités et est adaptée à un type de donnée mais surtout aux traitements que l’on va y appliquer.
  • 49.
    Cours d'algorithmique 49 Les tableaux Un tableau est un ensemble ordonné et homogène de valeurs : - ordonné car les cases mémoires composant un tableau sont numérotés - homogène car un tableau ne peut avoir que des valeurs du même type.  Avec un indice commençant à 0, les cases d’un tableau de N éléments sont numérotés de 0 à N-1.
  • 50.
    Cours d'algorithmique 50 Exemples d'applications Ensemble de valeurs entières, réelles, booléennes,....  Ensemble de noms (type chaîne)  Ensemble de caractères (type caractère)  Ensemble d'ouvrages
  • 51.
    Cours d'algorithmique 51 Définition d’untableau  On définit un tableau par:  Son nom  Le nombre de ses dimensions  Sa taille  Le type de données qu’il contient
  • 52.
    Cours d'algorithmique 52 Les tableauxà une dimension  Déclaration : <TypeSimple> <NomTableau>[<Dimension>];  Exemples:  int A[25];  int C[10];  char D[30];
  • 53.
    Cours d'algorithmique 53 Initialisation etréservation  Initialisation :  int A[5] = {10, 20, 30, 40, 50};  float B[4] = {-1.05, 3.33, 87e-5, -12.3E4};  int C[10] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1};  Réservation automatique :  int A[] = {10, 20, 30, 40, 50};
  • 54.
    Cours d'algorithmique 54 Accès auxéléments  En déclarant un tableau par: int A[5];  On peut accéder à ces élément par : A[0], A[1], ... , A[4]  Attention aux indices
  • 55.
    Cours d'algorithmique 55 Exercice  Commentsaisir les éléments d’un tableau de taille N ?
  • 56.
    Cours d'algorithmique 56 Affichage etaffectation  Affichage : Pour I Allant de 1 à N faire écrire A[I] finpour  Affectation : Pour I Allant de 1 à N faire écrire A[I] finpour
  • 57.
    Cours d'algorithmique 57 Tableaux àdeux dimensions  Déclaration : <TypeSimple> NomTabl>[<DimLigne>][<DimCol>];  Exemples:  int A[10][10];  float B[2][20];  int C[3][3];  char D[15][40];
  • 58.
    Cours d'algorithmique 58 Initialisation etréservation  Initialisation : int A[3][10] = { { 0,10,20,30,40,50,60,70,80,90}, {10,11,12,13,14,15,16,17,18,19}, { 1,12,23,34,45,56,67,78,89,90}};  Réservation automatique : int A[][10] = {{ 0,10,20,30,40,50,60,70,80,90}, {10,11,12,13,14,15,16,17,18,19}, { 1,12,23,34,45,56,67,78,89,90}};
  • 59.
    Cours d'algorithmique 59 Accès auxéléments  Accès à un tableau à deux dimensions en C <NomTableau>[<Ligne>][<Colonne>]  Attention aux indices
  • 60.
    Cours d'algorithmique 60 Exercice  Commentsaisir les éléments d’un tableau à deux dimensions de taille N*M ?
  • 61.
    Cours d'algorithmique 61 Affichage  Affichagedu contenu d'un tableau à deux dimensions /* Pour chaque ligne */ Pour I Allant de 1 à L faire Pour J variant de 1 à C faire écrire A[I,J] finpour /* Retour à la ligne */ écrire Fin pour
  • 62.
    Cours d'algorithmique 62 Recherche dansun tableaux  Recherche d’un élément dans un tableau  Technique de flag  Recherche dico
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
    Cours d'algorithmique 68 Trier  Trier,c'est ordonner des éléments en fonction d'une certaine clé (valeur)  Nous verrons comment trier les éléments d'un tableau  Tri par insertions  Tri par permutations (tri-bulle)  Tri rapide (quick sort)
  • 69.
    Cours d'algorithmique 69 Les algorithmesde Tri  Tri par sélection.  Tri par insertion.  Tri par bulle.  Tri par fusion.  Tri rapide.
  • 70.
    Cours d'algorithmique 70 Tri parinsertion  On trie en prenant chaque élément du tableau, de gauche à droite  On le compare avec la partie déjà triée (à sa gauche) pour trouver sa position  On décale les éléments plus grands à droite pour créer un "trou“  On insert l'élément dans le "trou"
  • 71.
    Cours d'algorithmique 71 Tri parinsertion  Le premier élément est toujours déjà trié  78 est plus grand que 14, il est trié  54 est plus petit que 78, il faut les déplacer
  • 72.
    Cours d'algorithmique 72 Tri parinsertion  54 est plus grand que 14, il est trié  23 est plus petit que 78, il faut les déplacer  23 est plus petit que 54, il faut déplacer 54
  • 73.
    Cours d'algorithmique 73 Tri parinsertion  23 est plus grand que 14, il est trié  5 est plus petit que 78, il faut les déplacer  est plus petit que 54, il faut déplacer 54
  • 74.
    Cours d'algorithmique 74 Tri parinsertion  5 est plus petit que 23, il faut déplacer 23  5 est plus petit que 14, il faut déplacer 14  5 est tout au bout du tableau, il est trié
  • 75.
    Cours d'algorithmique 75 Tri parinsertion  66 est plus petit que 78, il faut les déplacer  66 est plus grand que 54, il est trié  Tout le tableau est trié
  • 76.
    Cours d'algorithmique 76 Pseudo-code  Pourchaque position du tableau i (sauf la première), répéter  Mettre l'élément i dans une variable temporaire x  Initialiser un indice j à la position précédente à i  Tant que  1. j ne dépasse pas la borne inférieure du tableau  et  2. x est plus petit que l'élément à la position j  Faire  déplacer l'éléments j du tableau un crans à la droite  décrémenter j  Fin Tant que  Mettre x à la place ainsi libérée
  • 77.
    Cours d'algorithmique 77 Algorithme deTri par insertion Pour i Allant de 1 à n - 1 Faire temp tableau[i]; j i - 1; TantQue (j >= 0) & (temp < tableau[j]) Faire tableau[j+1] tableau[j]; j j-1 FinTantQue tableau[j+1] temp FinPour
  • 78.
    Cours d'algorithmique 78 Tri parinsertions en action  Voir Applet
  • 79.
    Cours d'algorithmique 79 Tri parbulle  Principe - Comparaison deux à deux des éléments du tableau (de gauche à droite ou de droite à gauche) et permutation si nécessaire - A chaque itération, un nouvel élément est placé dans sa position définitive
  • 80.
    Cours d'algorithmique 80  14et 78 sont en ordre, respectivement  78 est plus grand que 54, permutation  78 est plus grand que 23, permutation
  • 81.
    Cours d'algorithmique 81  78est plus grand que 5, permutation  78 est plus grand que 66, permutation  78 est en place, fin du 1er tour
  • 82.
    Cours d'algorithmique 82  14et 54 sont en ordre, respectivement  54 est plu grand que 23, permutation  54 est plus grand que 5, permutation
  • 83.
    Cours d'algorithmique 83  54et 66 sont en ordre, respectivement  66 est en place, fin du 2e tour  14 et 23 sont en ordre, repectivement
  • 84.
    Cours d'algorithmique 84  23est plus grand que 5, permutation  23 et 54 sont en ordre, respectivement  54 est en place, fin du 3e tour
  • 85.
    Cours d'algorithmique 85  14est plus grand que 5, permutation  14 et 23 sont en ordre, respectivement  23 est en place, fin du 4e tour
  • 86.
    Cours d'algorithmique 86  5et 14 sont en ordre, respectivement  14 est en place, fin du 5e et dernier tour  Fin de l'algorithme
  • 87.
    Cours d'algorithmique 87 Pseudo-code  Pourchaque position du tableau (sauf la première), répéter  Pour chaque position du tableau, de la première à l'avant-dernière non triée, répéter  Si l'élément courant est plus grand que sont suivant  Les permuter (utilisation d'une variable temporaire)
  • 88.
    Cours d'algorithmique 88 Algorithme deTri par bulle Pour i Allant de 1 à n-1 Faire Pour j Allant de 0 à n-i-1 Faire Si tableau[j] > tableau[j+1] Alors temp tableau[j+1]; tableau[j+1] tableau[j]; tableau[j] temp FinSi FinPour FinPour
  • 89.
    Cours d'algorithmique 89 Tri parinsertions en action  Voir Applet
  • 90.
  • 91.
    Cours d'algorithmique 91 Programmation modulaire Comment traiter les problèmes trop complexes pour être appréhendés en un seul bloc ?  Programmation modulaire.  Types de modules : - Les procédures - Les fonctions  Un module est appelé (exécuté) quand son nom est invoqué.
  • 92.
  • 93.
    Cours d'algorithmique 93 Structure deblocs  Définition de sous-programmes induit sur le programme une structure de blocs, chaque bloc correspondant à un sous-programme, l'imbrication des définitions engendre une hiérarchie de niveaux.
  • 94.
    Cours d'algorithmique 94 Les fonctions Les fonctions sont des sous-programmes admettant des paramètres et retournant un seul résultat.  Déclaration d’une fonction : Fonction nom de la fonction (paramètre(s) de la fonction) : type de la valeur retournée Variable locale 1 : type 1; . . . Début instructions de la fonction avec au moins une fois l’instruction retourner Fin
  • 95.
    Cours d'algorithmique 95 Définition dela fonction  On définit une fonction, c’est-à-dire le traitement qu’elle effectue, généralement dans les lignes qui suivent sa déclaration.  Une fonction doit impérativement : - retourner une valeur ; - faire en sorte que cette valeur soit bien du type spécifié dans sa déclaration.
  • 96.
    Cours d'algorithmique 96 Exemple defonction fonction abs (unEntier : Entier) : Entier début si unEntier > 0 alors retourner unEntier sinon retourner -unEntier finsi fin
  • 97.
    Cours d'algorithmique 97 Paramètres formels(1)  Les arguments utilisés lors de la définition d’une fonction sont appelés paramètres formels  Leur rôle est de permettre, au sein du corps de la fonction de décrire ce qu’elle doit faire.
  • 98.
    Cours d'algorithmique 98 Paramètres formels(2)  Le corps de la fonction doit utiliser les arguments (ou paramètres formels).  Exemple : Fonction somme(x : réel, y : réel, z : réel) : réel Début retourner x+y+z Fin
  • 99.
    Cours d'algorithmique 99 Appel dela fonction  Une fois la fonction définie, il est possible de l’appeler n’importe où dans le programme principal.  L’appel doit respecter : - le type des arguments de la fonction - leur nombre.  Au niveau du programme principal, on appelle ces arguments les paramètres effectifs
  • 100.
    Cours d'algorithmique 100 Exemple –Appel d’une fonction  L’allure générale d’un algorithme incluant des fonctions est la suivante : Algorithme Exemple1 fonction abs (unEntier : Entier) : réel Variable valeurAbsolue : réel Début Si unEntier > 0 Alors valeurAbsolue ← unEntier Sinon valeurAbsolue ← -unEntier finsi retourner valeurAbsolue fin Variable a : Entier, b : réel /* var. du prog. Principal */ Début /* Début de programme principal */ écrire("Entrez un entier :") lire(a) b ← abs(a) écrire("la valeur absolue de ",a," est ",b) fin
  • 101.
    Cours d'algorithmique 101 Attention!  Iln’est pas possible de changer la valeur d’un paramètre effectif. Par exemple, ici, la fonction ne modifie en rien la valeur de x : Algorithme calcul : Fonction fois2(a : réel) : réel Début a ← a*2 retourner (a) Fin Variable x : réel Début x ← 3 Écrire fois2(x) // x param. eff. passé par valeur Écrire(x) Fin Exécution 6 3
  • 102.
    Cours d'algorithmique 102 Les procédures Une procédure est une fonction qui ne renvoie aucune valeur. Elle effectue seulement un traitement particulier.  Déclaration d’une procédure : Procédure nom de la fonction (paramètre(s) du procédure) Variable locale 1 : type 1; . . . Début instructions de la procédure Fin
  • 103.
    Cours d'algorithmique 103 Les procédures Les procédures se définissent et s’utilisent comme des fonctions (ce sont en fait des fonctions particulières de type vide) : - Déclaration avec paramètres formels, - Utilisation de variables locales, - Appel avec paramètres effectifs - Impossibilité de modifier les paramètres effectifs.
  • 104.
    Cours d'algorithmique 104 Exemple 1 AlgorithmeVariablesLocales(input,output); var nombre1, nombre2: entier {variables globales} Procédure add; Variable resultat: entier {variable locale à "add"} Début resultat ← nombre1 + nombre2; writeln('La réponse est: ',resultat) Fin Début {programme principal} Écrire('Entrez les 2 nombres entiers à additionner'); Lire(nombre1,nombre2); add Fin
  • 105.
    Cours d'algorithmique 105 Exemple 2 AlgorithmeAddNombres Procédure calcReponse(premier,second : entier); Variable résultat : entier; {variable locale à calcReponse} Début resultat ← premier + second; Écrire ('La réponse est ', resultat ) Fin Variable nombre1,nombre2: entier; {variables globales} Début {programme principal} Écrire ('Entrez les 2 nombres à additionner'); Lire (nombre1,nombre2); calcReponse(nombre1,nombre2) Fin
  • 106.
    Cours d'algorithmique 106 Récursivité Définition: Définition: Une fonctionest récursive si elle peut s'appeler elle-même de façon directe Une fonction est récursive si elle peut s'appeler elle-même de façon directe ou indirecte. ou indirecte. Idée générale Idée générale : : La réalisation d'une tâche par un algorithme récursif La réalisation d'une tâche par un algorithme récursif repose sur deux éléments: repose sur deux éléments:  La résolution partielle du problème d'une façon simple. La réalisation du La résolution partielle du problème d'une façon simple. La réalisation du reste de la tâche étant déléguée aux appels récursifs successifs. reste de la tâche étant déléguée aux appels récursifs successifs.  La détermination d'une condition d'arrêt qui permet d'arrêter la cascade La détermination d'une condition d'arrêt qui permet d'arrêter la cascade d'appels récursifs. Résoudre le problème au moment où la condition d'arrêt d'appels récursifs. Résoudre le problème au moment où la condition d'arrêt est détectée correspond en général à résoudre un cas trivial de celui-ci. est détectée correspond en général à résoudre un cas trivial de celui-ci.
  • 107.
    Cours d'algorithmique 107 Avantages etinconvénients Avantages: Avantages:  Formulation compacte, claire et élégante. Formulation compacte, claire et élégante.  Maîtrise des problèmes dont la nature même est Maîtrise des problèmes dont la nature même est récursive. récursive. Désavantages: Désavantages:  Possibilité de grande occupation de la mémoire. Possibilité de grande occupation de la mémoire.  Temps d'exécution peut être plus long. Temps d'exécution peut être plus long.  Estimation difficile de la profondeur maximale Estimation difficile de la profondeur maximale de la récursivité. de la récursivité.
  • 108.
    Cours d'algorithmique 108 Fonction récursivefactorielle Factorielle(N:réel):réel Si (N==0) Alors retourner 1; Sinon retourner (Factorielle(N-1)*N); Soit la fonction Factorielle, effectuant l’opération Soit la fonction Factorielle, effectuant l’opération n! n!
  • 109.
    Cours d'algorithmique 109 Exécution deFactorielle Factorielle (4) Factorielle (4) Factorielle (4); Factorielle (4); Factorielle (3) Factorielle (3) Factorielle (2) Factorielle (2) Factorielle (1) Factorielle (1) Factorielle (0) Factorielle (0)
  • 110.
    Cours d'algorithmique 110 Récursivité (suite) Quatrerègles régissent la récursivité Quatre règles régissent la récursivité: : 1. 1. Présence de cas de base pouvant être résolu sans Présence de cas de base pouvant être résolu sans récursivité récursivité 2. 2. Toujours progresser vers le cas de base à chaque Toujours progresser vers le cas de base à chaque appel récursif appel récursif 3. 3. « Ayez la Foi »: avoir confiance que les appels « Ayez la Foi »: avoir confiance que les appels récursifs progressent réellement vers le cas de base. récursifs progressent réellement vers le cas de base. 4. 4. Intérêt composé: Ne jamais dédoubler du travail Intérêt composé: Ne jamais dédoubler du travail dans deux appels récursifs différents. dans deux appels récursifs différents.
  • 111.
    Cours d'algorithmique 111 Limitations: Fonctionrécursive Limitations: Fonction récursive Fibonnacci Fibonnacci fibo (valeur:réel):réel Si (valeur <= 1)Alors retourner valeur; Sinon returnourner(fibo(valeur-1) + fibo(valeur-2)); Soit la fonction Fibo (Fibonacci), effectuant Soit la fonction Fibo (Fibonacci), effectuant l’opération l’opération f(n) = f(n-1) + f(n-2) f(n) = f(n-1) + f(n-2)
  • 112.
    Cours d'algorithmique 112 Exécution deFibonnacci Exécution de Fibonnacci Soit les appels effecutés pour fibo(4) : Soit les appels effecutés pour fibo(4) : fibo(4) fibo(4) fibo(3) fibo(3) fibo(2) fibo(2) fibo(1) fibo(1) fibo(0) fibo(0) fibo(1) fibo(1) fibo(2) fibo(2) fibo(0) fibo(0) fibo(1) fibo(1)
  • 113.
    Cours d'algorithmique 113 Danger deFibonnacci Danger de Fibonnacci Note : Note :  Cette fonction récursive effectue plusieurs appels au même calcul. Cette fonction récursive effectue plusieurs appels au même calcul. Par exemple pour déterminer f(n), on calcule d’abord f(n-1), puis au Par exemple pour déterminer f(n), on calcule d’abord f(n-1), puis au retour de l’appel, f(n-2) est calculé. Or, dans le calcul de f(n-1), f(n- retour de l’appel, f(n-2) est calculé. Or, dans le calcul de f(n-1), f(n- 2) est déjà calculé! 2) est déjà calculé!  Ce problème s’aggrave en descendant l’arborescence, puisque f(n-3) Ce problème s’aggrave en descendant l’arborescence, puisque f(n-3) sera appelé à 3 reprises : chaque appel récursif entraînera de plus en sera appelé à 3 reprises : chaque appel récursif entraînera de plus en plus d’appel redondant. plus d’appel redondant.  Règle 4: Règle 4: Ne jamais dupliquer le travail par la résolution d’une Ne jamais dupliquer le travail par la résolution d’une même instance d’un problème dans plusieurs appels récursifs. même instance d’un problème dans plusieurs appels récursifs.
  • 114.
    Cours d'algorithmique 114 Récursivité  Calculde la racine carrée d'un nombre par approximation successive - calculer c’est trouver une quantité y telle que y2 = x et x ≥ 0  Algorithme: – faire une première approximation G de – améliorer cette approximation en calculant la moyenne entre G et x/G – continuer jusqu’à ce que l’estimation G soit jugée satisfaisante
  • 115.

Notes de l'éditeur

  • #28 if - else La structure alternative en langage algorithmique si (<expression logique>) alors <bloc d'instructions 1> sinon <bloc d'instructions 2> fsi * Si l'<expression logique> a la valeur logique vrai, alors le <bloc d'instructions 1> est exécuté * Si l'<expression logique> a la valeur logique faux, alors le <bloc d'instructions 2> est exécuté La structure alternative en C if ( <expression> ) <bloc d'instructions 1> else <bloc d'instructions 2> * Si l'<expression> fournit une valeur différente de zéro,alors le <bloc d'instructions 1> est exécuté * Si l'<expression> fournit la valeur zéro, alors le <bloc d'instructions 2> est exécuté La partie <expression> peut désigner : une variable d'un type numérique, une expression fournissant un résultat numérique. La partie <bloc d'instructions> peut désigner : un (vrai) bloc d'instructions compris entre accolades, une seule instruction terminée par un point-virgule. Exemple 1 if (a > b) max = a; else max = b; Exemple 2 if (EGAL) printf("A est égal à B\n"); else printf("A est différent de B\n"); Exemple 3 if (A-B) printf("A est différent de B\n"); else printf("A est égal à B\n"); Exemple 4 if (A > B) { AIDE = A; A = C; C = AIDE; } else { AIDE = B; B = C; C = AIDE; }
  • #46 Les tableaux sont certainement les variables structurées les plus populaires. Ils sont disponibles dans tous les langages de programmation et servent à résoudre une multitude de problèmes. Dans une première approche, le traitement des tableaux en C ne diffère pas de celui des autres langages de programmation. Nous allons cependant voir plus loin (Chapitre 9. Les Pointeurs), que le langage C permet un accès encore plus direct et plus rapide aux données d'un tableau. Les chaînes de caractères sont déclarées en C comme tableaux de caractères et permettent l'utilisation d'un certain nombre de notations et de fonctions spéciales. Les particularités des tableaux de caractères seront traitées séparément au chapitre 8.
  • #52 Déclaration Déclaration de tableaux en langage algorithmique <TypeSimple> tableau <NomTableau>[<Dimension>] Déclaration de tableaux en C <TypeSimple> <NomTableau>[<Dimension>];
  • #53 Initialisation Lors de la déclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant la liste des valeurs respectives entre accolades Il faut évidemment veiller à ce que le nombre de valeurs dans la liste corresponde à la dimension du tableau. Si la liste ne contient pas assez de valeurs pour toutes les composantes, les composantes restantes sont initialisées par zéro. Réservation automatique Si la dimension n'est pas indiquée explicitement lors de l'initialisation, alors l'ordinateur réserve automatiquement le nombre d'octets nécessaires. Exemples int A[] = {10, 20, 30, 40, 50}; ==> réservation de 5*sizeof(int) octets (dans notre cas: 10 octets) float B[] = {-1.05, 3.33, 87e-5, -12.3E4}; ==> réservation de 4*sizeof(float) octets (dans notre cas: 16 octets) int C[] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1}; ==> réservation de 10*sizeof(int) octets (dans notre cas: 20 octets)
  • #54 Attention ! Considérons un tableau T de dimension N: En C, - l'accès au premier élément du tableau se fait par T[0] - l'accès au dernier élément du tableau se fait par T[N-1] En langage algorithmique, - l'accès au premier élément du tableau se fait par T[1] - l'accès au dernier élément du tableau se fait par T[N]
  • #56 La structure for se prête particulièrement bien au travail avec les tableaux. La plupart des applications se laissent implémenter par simple modification des exemples-types de l'affichage et de l'affectation. - Affichage du contenu d'un tableau * Avant de pouvoir afficher les composantes d'un tableau, il faut évidemment leur affecter des valeurs. * Rappelez-vous que la deuxième condition dans la structure for n'est pas une condition d'arrêt, mais une condition de répétition! Ainsi la commande d'affichage sera répétée aussi longtemps que I est inférieur à 5. La boucle sera donc bien exécutée pour les indices 0,1,2,3 et 4 ! Affectation avec des valeurs provenant de l'extérieur * Comme scanf a besoin des adresses des différentes composantes du tableau, il faut faire précéder le terme A[I] par l'opérateur adresse '&'. * La commande de lecture scanf doit être informée du type exact des données à lire. (Ici: %d ou %i pour lire des valeurs du type int)
  • #57 Définitions En C, un tableau à deux dimensions A est à interpréter comme un tableau (uni-dimensionnel) de dimension L dont chaque composante est un tableau (uni-dimensionnel) de dimension C. On appelle L le nombre de lignes du tableau et C le nombre de colonnes du tableau. L et C sont alors les deux dimensions du tableau. Un tableau à deux dimensions contient donc L*C composantes.
  • #58 Initialisation Lors de la déclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant la liste des valeurs respectives entre accolades. A l'intérieur de la liste, les composantes de chaque ligne du tableau sont encore une fois comprises entre accolades. Pour améliorer la lisibilité des programmes, on peut indiquer les composantes dans plusieurs lignes. Lors de l'initialisation, les valeurs sont affectées ligne par ligne en passant de gauche à droite. Nous ne devons pas nécessairement indiquer toutes les valeurs: Les valeurs manquantes seront initialisées par zéro. Il est cependant défendu d'indiquer trop de valeurs pour un tableau
  • #59 Attention ! Considérons un tableau A de dimensions L et C. En C, - les indices du tableau varient de 0 à L-1, respectivement de 0 à C-1. - la composante de la Nième ligne et Mième colonne est notée: A[N-1][M-1] En langage algorithmique, - les indices du tableau varient de 1 à L, respectivement de 1 à C. - la composante de la Nième ligne et Mième colonne est notée: A[N,M]
  • #61 Lors du travail avec les tableaux à deux dimensions, nous utiliserons deux indices (p.ex: I et J), et la structure for, souvent imbriquée, pour parcourir les lignes et les colonnes des tableaux. * Avant de pouvoir afficher les composantes d'un tableau, il faut leur affecter des valeurs.
  • #91  Une application, surtout si elle est longue, a toutes les chances de devoir procéder aux mêmes traitements, ou à des traitements similaires, à plusieurs endroits de son déroulement. Par exemple, la saisie (et le contrôle qu’elle implique) d’une réponse par oui ou par non, peuvent être répétés dix fois à des moments différents de la même application. La manière la plus immédiate – et la moins habile – de résoudre la question est bien entendu de répéter le code correspondant autant de fois que nécessaire. Ainsi, la structure peut paraître simple. Mais elle est inutilement lourdingue, et en réalité, pour peu que le programme soit joufflu, il peut devenir parfaitement illisible. Il faut donc opter pour une autre stratégie, qui consiste à séparer ce traitement du corps du programme et à appeler ces instructions (qui ne figurent donc plus qu’en un seul exemplaire) à chaque fois qu’on en a besoin. Le corps du programme s’appelle alors le proprogramme principal, et ces groupes d’instructions auxquels on a recours s’appellent des sous-prorammes. Reprenons cet exemple de question à laquelle l’utilisateur doit répondre par oui ou par non. Mauvaise Structure ... Ecrire "Etes-vous marié ?" Rep = "" TantQue Rep <> " Oui" et Rep <> "Non" Ecrire "Tapez Oui ou Non" Lire Rep FinTantQue Ecrire "Avez-vous des enfants ?" Rep = "" TantQue Rep <> "Oui" et Rep <> "Non" Ecrire "Tapez Oui ou Non" Lire Rep FinTantQue Bonne Structure Ecrire "Etes-vous marié ?" RéponseOuiNon() ... Ecrire "Avez-vous des enfants ?" RéponseOuiNon() ... Procédure RéponseOuiNon() Rep = "" TantQue Rep <> " Oui" et Rep <> "Non" Ecrire "Tapez Oui ou Non" Lire Rep FinTantQue Fin Procédure Dans ce cas, on se contente donc d’appeler des lignes de codes qui se répètent à l’identique. Mais on peut avoir des cas beaucoup plus rigolos. Lorsqu’un programme devient important par la taille, il effectue parfois plusieurs traitements similaires à des endroits différents. En outre, plus un programme est complexe, plus il est difficile à lire, à comprendre et à maintenir. Le découpage d’un programme ou d’un algorithme en morceaux permet de pallier à ces problèmes. Dans tout langage de programmation et donc en algorithmique, il est possible de définir des tâches relativement sophistiquées, que l’on pourra invoquer n’importe où dans le programme principal, en faisant référence à leur nom.
  • #94 On déclarera une fonction immédiatement après l’entête du programme en précisant son type (de données retournées), son nom, ainsi qu’une liste d’arguments dont on précisera également le type. Les fonctions sont des sous-programmes admettant des paramètres et retournant un seul résultat (comme les fonctions mathématiques y=f(x,y,. . . )) les paramètres sont en nombre fixe >( 0) une fonction possède un seul type, qui est le type de la valeur retournée lors de l’appel, on peut donc utiliser comme paramètre des variables, des constantes mais aussi des résultats de fonction la valeur de retour est spécifiée par l’instruction retourner Généralement le nom d’une fonction est soit un nom (par exemple minimum), soit une question (par exemple estVide) fonctions aussi acceptent des paramètres en entrée et ne retourne qu'un résultat unique de type scalaire, le résultat est retourné par l'intermédiaire du nom de la fonction, la structure d'une fonction est semblable à celle d'une procédure, pour que la fonction retourne son résultat il faut qu'il y ait quelque part dans le corps de la fonction une instruction d'affectation sur le nom de la fonction, l'appel d'une fonction correspond à un terme, l'en-tête d'une fonction a la forme générale suivante:
  • #97 Leur portée est limitée à la définition de la fonction. Ils n’entrent donc pas en conflit avec d’éventuelles autres variables locales ayant le même nom dans d’autres fonctions, y compris des variables globales. Le corps de la fonction doit utiliser les arguments (ou paramètres formels). Exemple : Fonction somme(x : réel, y : réel, z : réel) : réel Début retourner x+y+z Fin
  • #99 puisqu’ils constituent les informations effectivement utilisées pour évaluer la fonction. On peut utiliser n’importe qu’elle expression comme paramètre effectif ; au bout du compte, c’est la valeur de cette expression qui sera transmise à la fonction. On parle de passage des arguments à la fonction par valeur ou par copie. Cela signifie que ce n’est pas la variable elle-même qui est transmise à la fonction mais simplement une copie de sa valeur
  • #100 Dans le corps d’une fonction, on peut évidemment utiliser des variables autres que celles passés en argument. Ces variables ne seront visibles qu’à l’intérieur du corps de la fonction. On les appelle des variables locales. Exemple : Fonction somme_double(x : réel, y : réel, z : réel) : réel Variable double : réel // variable locale à la foction Début double ← x+y+z retourner double Fin
  • #101 Dans l’algorithme précédent on dit que la variable x est passée par valeur. C’est le mode classique de transmission de paramètre à une fonction ou procédure. Le passage par valeur signifie qu’une copie de la valeur du paramètre effectif est passée à la fonction. Ce paramètre aura la même portée qu’une variable locale à l’intérieur de la fonction. Une fois sorti de cette fonction, la variable locale est perdue, et le paramètre effectif reste inchangé, c’est-à-dire ici x = x après appel de la fonction.
  • #102 Les procédures ne renvoient pas de valeur, elles n’ont donc pas de type.
  • #104 Une procédure peut déclarer ses propres objets (variables, constantes, types et sous-programmes), • les objets déclarés dans une procédure sont dits locaux à cette procédure, • les objets locaux sont accessibles à partir du corps de la procédure.
  • #105 Les procédures peuvent aussi accepter des arguments (données) lors des appels déclaration des paramètres formels: – la liste des paramètres formels fait partie de l'en-tête de la procédure, – chaque paramètre est accompagné de son type et de l'indication du mécanisme de transfert utilisé, appel de procédure et passage des arguments (paramètres effectifs), – le nom de la procédure est accompagné de la liste de arguments entre (... ), - les arguments doivent être: - en même nombre que les paramètres formels, - du même type que le paramètre formel correspondant, - énumérés dans le même ordre que les paramètres formels.