Académique Documents
Professionnel Documents
Culture Documents
OBJECTIFS
Objectifs :
L’étudiant performant sera celui qui pourra identifier à 100% les éléments et structures de
contrôle d’un algorithme présenté à lui.
Situation problème :
Votre petit frère André est un étudiant en classe de seconde. Après sa journée de cours, il rentre
directement à la maison et constate que Maman lui a servie deux plats (un plat contenant le riz
et l’autre la sauce). Cependant, le plat contenant la sauce a un petit trou et laisse couler la sauce.
Il veut permuter les contenus des deux plats mais ne sait pas comment procéder. Il sollicite
votre aide et vous lui dites qu’il s’agit là d’un problème algorithmique séquentiel. Troublé par
ces nouveaux concepts, il vous demande de nouveau de l’expliquer ces notions
d’algorithmiques. En vous basant sur les cours d’algorithmique des classes antérieures,
apprenez à votre petit frère des instructions algorithmiques.
Introduction
L’homme fait face chaque jour à une multitude de problèmes auxquels il se doit de proposer
des solutions. La recherche de la solution à un problème est une démarche algorithmique, qui
est loin d’être figée ou universelle. Chaque solution algorithmique respecte un standard selon
le type de problème à résoudre. Dans cette leçon, il sera question pour nous d’aborder les
notions liées aux instructions algorithmiques de base.
1. Définitions
• Un algorithme est une suite finie et ordonnée d’instruction donnée à un utilisateur lui
permettant de résoudre un problème donné.
• Variable : C’est un objet contenant une valeur pouvant être modifiée au cours de
l’exécution d’un algorithme. Une variable est caractérisée par un nom et un type. En
outre, la valeur de la variable peut être modifiée au cours de l’exécution de l’algorithme.
• Constante : C’est un objet dont la valeur du contenu ne change pas lors de l’exécution
d’un algorithme. De même qu’une variable, une constante est caractérisée par un nom
et un type.
• Une instruction : est un verbe d’action qui caractérise la nature des opérations à
effectuer sur une ou plusieurs données. Ainsi, nous avons les instructions de base telles
que : les instructions de lecture, d’écriture et d’affectation.
Un algorithme peut être amené à manipuler plusieurs types de données. Nous avons vu que
l’une des deux caractéristiques de la variable ou de la constante est le type. On peut citer cinq
types de base ;
Pour déclarer une variable, nous utilisons le Mot clé : var ou variable
Syntaxe : var NomVariable : [Type]
Exemples : var Rayon : Réel ;
variable Compteur : Entier ;
NB : Les variables de mêmes types peuvent être déclarées ensemble sur une même ligne.
Cependant, elles doivent être séparées par des virgules.
Pour déclarer une constante, nous utilisons le Mot clé : const ou constante (selon les
ouvrages).
Syntaxe : const NomConstante = Valeur : [Type] ;
Exemples : const Pi : Réel = 3.141559 ;
On distingue plusieurs types d’instructions entre autres nous pouvons citer les instructions de
lecture, d’écriture et les instructions d’affectation.
1- Les instructions de lecture
Une instruction de lecture permet de récupérer la valeur d’une variable entrée au clavier
par un utilisateur. Le mot clé est Lire () ; Ex : Lire (A) cette instruction permet de récupérer la
valeur de la variable A entré au clavier par un utilisateur.
Une instruction d’écriture permet d’afficher à l’écran une chaîne de caractère ou d’afficher
la valeur du contenu d’une variable. Le mot clé est : Ecrire () ou Ecrire (" ") ; Ex :
L’affectation est une opération qui permet d’attribuer une valeur à une variable. Sa
syntaxe d’utilisation est la suivante : NomVariable Expression ; et son symbole est « ».
Une expression peut être : une constante, une variable ou le résultat d’une fonction. Une
affectation se fait en 3 étapes. L’évaluation, le calcul et le transfert de donnée. Une affectation
se comporte de deux manières : copie la valeur de l’expression et écrase l’ancienne valeur de
NomVariable. Exemples : c←a ; d←b ; b←b ; b←10 ; b← "Bonjour !" ; delta ← b*b –
4*a*c ;
Un algorithme séquentiel est une suite finie et ordonnée d’instruction sans aucune instruction
de contrôle comme (si, tant que, pour, répéter…) à exécuter dans l’ordre pour aboutir à un
résultat. Il est délimité par les mots clés début et fin. Exemples : les notices des appareils
électroniques, des médicaments, les recettes de cuisine…
Activité 1 : Individuel, écrire un algorithme séquentiel qui permet de permuter deux entiers
naturels entrés au clavier par un utilisateur.
Solution :
Algorithme permutation ;
Var : a, b, c : Entier ;
Début
Lire(a) ;
Lire (b) ;
c←a ;
a←b ;
b←c;
Fin algorithme
LEÇON 2 : LES STRUCTURES DE CONTRÔLE.
Situation problème : Votre petit frère André a résolu son problème grâce à vous. Après avoir
pris son repas, Papa l’a envoyé au marché chez son ami le boutiquier Mamadou acheter un sac
de riz pour le mois. Cependant, il menace de pleuvoir dehors et votre petit frère est dans
l’embarras. Il pose ses conditions à papa (S’il pleut, « je n’y vais pas », sinon « j’irais dans un
instant »). Vous souriez et il vous demande qui y a-t-il grand frère ? vous lui répondez en lui
disant que ses conditions vous rappellent les structures de contrôle. Curieux, il vous pose des
questions par rapport à ces structures de contrôle. En vous basant sur la documentation et les
cours d’algorithmiques vu en classe de seconde C, aidez votre petit frère à mieux comprendre
ces notions des structures algorithmiques.
Introduction
Dans cette structure il est question d’effectuer un nombre de traitement si une condition fixée
dans la résolution du problème est vérifiée. Ainsi, sa syntaxe est la suivante ci-dessous :
• Une valeur ;
• Un opérateur de comparaison ;
Les valeurs peuvent être a priori de n’importe quel type (numériques, caractères…). Les
opérateurs de comparaison sont : = ; != ; < ; > ; =< ; >= ; L’ensemble constitue donc si l’on
veut une affirmation, qui a un moment donné est VRAIE ou FAUSSE.
Une condition complexe est une combinaison logique de conditions simples (par exemple :
A=B et B<C)
Exemple : Étant donnés deux nombres entiers positifs, identifier le plus grand des deux
nombres.
Solution :
Analyse : si A>B alors le plus grand est A sinon le plus grand est B.
Conception :
Algorithme
variables A, B : entiers
début
écrire("Programme permettant de déterminer le plus grand de deux entiers positifs”)
écrire(“Entrer le premier nombre : ”) ;
lire(A) ;
écrire (“Entrer le second nombre : ”) ;
lire(B) ;
si (A>B) alors
écrire(“Le nombre le plus grand est : ”, A) ;
sinon
écrire(“Le nombre le plus grand est : ”, B) ;
finsi
fin
La structure proposée ci-dessus est qualifiée de « complète » mais, selon le cas, il se peut que,
si la condition n’est pas vérifiée, il n’y ait pas à effectuer de traitement 2. On écrira ainsi la
structure alternative « réduite » comme sur la syntaxe ci-dessous :
Si C Alors // Où C est une condition.
Traitement (instructions à effectuer si la condition est vérifiée)
FinSi
Exemple : écrire un algorithme qui permet de transformer les nombres entiers positifs en
nombres entiers négatifs.
Solution
Analyse : si nombre > 0 alors le nombre négatif est -nombre.
Conception :
Algorithme nombre_negatif
L’incrémentation est une opération qui permet de façon automatique d’ajouter à chaque
exécution, une valeur à une variable selon un pas donné.
2. La Décrémentation
La décrémentation est l’opération inverse de l’incrémentation.
Exemples : i ← i - 1 ; i ← i - 2 ; i ← i - 2*i ; …
N.B : Pour qu’il y ait décrémentation, il faudrait que la valeur de la variable i soit initialement
plus grand que la valeur de l’expression. Exemple : i ← 10 ; ainsi, nous pouvons faire 9 fois :
i←i-1;
3. L’Initialisation
L’initialisation est une opération qui consiste à donner une valeur par défaut à une variable
avant le début du traitement d’un problème. Exemples : i ← 1 ; cpt ← 10 ; somme ← 0 ; …
Toutes les structures itératives répètent l’exécution de traitement(s). Deux cas sont cependant à
envisager, selon que :
• Le nombre de répétitions est connu à l’avance : c’est le cas des boucles itératives
• Le nombre de répétitions n’est pas connu ou est variable : c’est le cas des boucles
conditionnelles
Cette structure est une BOUCLE ITERATIVE ; elle consiste à répéter un certain
traitement un nombre de fois fixé à l’avance. Sa syntaxe est la suivante :
• Le pas peut ne pas être précisé, dans ce cas il est considéré comme valant 1.
Exemple : Ecrire un algorithme qui calcul le carré des nombres compris entre 1 et 10.
Solution
Analyse : pour chaque nombre i allant de 1 à 10 avec un pas de 1 par défaut calculer le carré
du nombre et l’afficher.
Conception :
Algorithme carre_nombre
Variables i, c : Entier
Debut
Pour i allant de 1 à 10 faire
c←i*i ;
ecrire("le carre est. : ", c) ;
Finpour
Fin
Dans ce cas on distingue plusieurs variantes. Ici nous allons exposer le cas des boucles tant que
et celui des boucles répéter jusqu’à.
Parfois, pour réaliser une tâche, on doit effectuer plusieurs fois les mêmes instructions,
sans que le nombre de fois soit déterminé à l’avance. On utilise alors une BOUCLE
CONDITIONNELLE. Dans cette structure, le même traitement est effectué tant qu’une
condition reste valide ; la boucle s’arrête quand celle-ci n’est plus remplie. Cette structure
répétitive est ainsi formulée :
Tant que condition Faire // (on répète un nombre inconnu de fois le même traitement, autant
de fois que la condition est vérifiée)
Traitement (instructions à effectuer)
FinTantq
Remarques :
- Si la condition n’est pas vérifiée au début, alors le traitement 1 ne sera pas exécuté du
tout.
Exemple : écrire un algorithme qui demande un nombre à un utilisateur et qui calcule la somme
des entiers jusqu’à ce nombre en utilisant la boucle tant que.
Solution
Analyse : tant que la variable i ou le compteur i est inférieur au nombre entré par l’utilisateur,
alors on calcul la somme.
Conception :
Algorithme somme
Variables som, i, nbre : entiers ;
i←1 ;
som←0 ;
Début
Ecrire(’’Entrer un nombre : ’’) ;
Lire(nbre) ;
Tant que i< nbre faire
som ← som+nbre ;
i ← i+1;
fintantq
écrire(’’la somme est : ’’, som);
Fin
3. La boucle Répéter Jusqu’à
Dans cette structure algorithmique, 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 vraie, la répétitivité s'arrête. La
Syntaxe de la boucle Répéter jusqu'à est la suivante :
Répéter
Liste d'instructions
Jusqu'à condition
Exemple : soit l’algorithme ci-dessous : répondez aux questions
variables N, i, somme : entiers
somme ← 0
i←0;
Répéter
somme ← somme + i ;
i ← i+1 ;
Jusqu’à i >=N
fin
Solution
• La première condition c’est sur la valeur de N qui doit être positive. Et la deuxième
condition est sur la variable i qui doit être supérieure ou égale à la valeur de N entrée
par l’utilisateur.
Jeu bilingue
Activités d’intégrations
Début début
finsi
fin
Consignes :
1) Identifie les parties de chacun de ces algorithmes.
2) Pour chacun des algorithmes ci-dessus, identifies les éléments les constituants.
Activité 2 : D’après toi dire quel est la nature de l’algorithme qui peut permettre
l’organisation du travail d’un étudiant de son réveil jusqu’à son départ pour l’école. Donnes
en ordre quelques-unes de ces tâches à faire avant d’aller à l’école.
Activité 3 : Après le cours de géographie, votre petit frère veut comprendre le problème
qui se cache derrière la température de l’eau. Il vous sollicite. Propose une solution lui
permettant de mieux comprendre la notion de température de l’eau en utilisant la structure
adéquate sachant que : lorsque la température t est tel que : (t<=0 eau glacée ; t>=100 eau
gazeuse ; 0<t<100 eau liquide)
Fin
som←som + i ;
Finpour
Fin
Début algorithme ?
Peut-on résoudre ce problème en utilisant
Ecrire (‘entrer un nombre’) ;
une structure différente de celle utilisée ?
Lire (p) ; si oui laquelle ?
Ecrire (‘entrer un autre nombre’) ;
Lire (q) ;
i←0 ;
p← p-q;
i←i+1 ;
fintantque ;
Fin algorithme
Activité 1
Activité 2 :
Algorithme mention
Variables t : réel
Début
Ecrire (“Entrer la température de l’eau : ”) ;
Lire (t) ;
Si (t<= 0) alors
Ecrire (“ Eau glacée ”) ;
Sinon
Si (0< t <100) alors
Ecrire (“ Eau liquide ”) ;
Sinon
Si (t >100) alors
Ecrire (“ Eau gazeuse ”) ;
Finsi
Finsi
Finsi
Fin
Activité 4
Activité 5
Activité 6
a) La structure utilisée dans cet algorithme est la structure TantQue ; et la condition est
p≥q
b) On sortira de la boucle lorsque p < q
Activité 7
Activité 8
Algorithme divisio_entiere
Var p, q, i: entier ;
Début
Ecrire (‘entrer un nombre’) ;
Lire (p) ;
Ecrire (‘entrer un autre nombre’) ;
Lire (q) ;
i←0 ;
Tant que p≥q faire
p← p-q;
i←i+1 ;
fintantque ;
Écrire (‘le résultat est :’i) ;
Fin algorithme
CHAPITRE II : ECRITURE DES ALGORITHMES
Compétences visées :
L’étudiant performant sera celui qui pourra identifier à 100% les éléments et structures de
contrôle d’un algorithme présenté à lui.
Situation problème :
Après le cours sur l’algorithmique, vous voulez écrire un algorithme qui permet de gérer les
notes des étudiants par matière par classe. Cependant, vous ne savez pas comment représenter
le type Elève… En vous rapprochant de votre grand frère il vous dit qu’il faut utiliser les
structures de données (enregistrements, tableaux). En vous basant sur la documentation,
expliquez ces nouvelles notions.
Introduction
Une structure de données est une manière d’organiser les données pour les traiter plus
facilement. C’est aussi une mise en œuvre concrète d’un type abstrait (en anglais abstract data
type ou ADT : c’est aussi une spécification mathématique d’un ensemble de données et de
l’ensemble des opérations qu’on peut effectuer sur elles.). Différentes structures de données
existent pour des données différentes ou répondant à des contraintes algorithmiques différentes.
Ainsi, on peut citer : les structures finies (constantes, variables, enregistrements), les structures
composées finies (tableaux…), structures récursives (listes, arbres, graphes, piles). Dans ce
cours nous nous limiterons à la présentation sommaire de quelques-unes telles que les
enregistrements, et les tableaux.
I. Les tableaux
Un tableau (array en anglais) est un ensemble d’éléments de même type désigné par un
identificateur unique. En d’autres termes, c’est une structure de données permettant d'effectuer
un même traitement sur des données de même nature. Chaque élément y est repéré par une
valeur entière nommée indice indiquant sa position au sein de l’ensemble. Dans un tableau, les
cases (indices) sont numérotées à partir de 0.
Avantage : accès direct au i -ème élément
Inconvénients : les opérations d’insertion et de suppressions sont impossibles. Sauf si
on crée un tableau de taille plus grande ou plus petite selon l’opération. Il est alors
nécessaire de copier tous les éléments du tableau original dans le nouveau.
N.B : Pour initialiser un tableau, il suffit de le créer, de le parcourir et de le remplir par des
valeurs correspondantes ou par des 0. Ou tout simplement on se limite à la déclaration de la
variable tableau.
1. Parcourir un tableau
2.5 8 14 17
En se donnant un élément i indice du tableau, nous savons que les indices d’un tableau vont de
0 à la taille max – 1 du tableau. Notons que la taille max d’un tableau est le nombre d’éléments
max qu’un tableau peut contenir. Dans notre cas la taille est de 4. Car l’indice min est 0 et
l’indice max est 3. On peut parcourir ce tableau pour plusieurs raisons.
Pour déterminer par exemple quelle est la note qui est obtenue à le cellule 4 ?
Pour comparer les notes avec celles d’un autre tableau
Pour attribuer une note dans une cellule
Pour savoir si le tableau est plein
Dans ce cas, on aura à effectuer plusieurs fois la même opération qui sera celle de parcourir le
tableau. D’où la nécessité d’un algorithme itératif ou répétitif. Le mieux à utiliser sera donc la
boucle Pour. Car, le nombre de fois qu’on aura à parcourir le tableau sera connu aussi tôt que
la taille (max – 1) du tableau. Exemple soit le parcours du tableau note donné par l’algorithme
suivant :
Dans le deuxième cas cela veut dire que la valeur de l’indice initial peut changer. Alors que le
premier cas a pour indice initial 0 ;
L’utilisation d’un tableau se fait à partir de son nom suivit des crochets qui encadre l’indice
de la case concernant l’élément sur lequel on veut effectuer le traitement. Exemple Note[i]
pour i=0 on a Note [0] =2.5 c’est-à-dire la valeur du contenu de la cellule numéro 0.
Dès lors nous pouvons effectuer des opérations de lecture d’affectation et d’affichage sur
un tableau.
L’affectation d’une valeur dans une cellule d’un tableau utilise toujours le symbole
« » en algorithmique. Exemple : tab[1] 3 ; ou X tab[2] ; ces deux instructions veulent
dire respectivement : affecter à la deuxième cellule du tableau tab la valeur 3. Et la deuxième
instruction veut dire affecter à X la valeur de la cellule tab dans la variable X.
La lecture d’un élément du tableau se fait grâce l’instruction « lire ». Exemple lire(tab[1]) ; qui
permet de lire la donnée que l’utilisateur va saisir au clavier pour l’enregistrer dans la deuxième
cellule ou tout simplement dans la cellule correspondant à l’indice 1.
L’affichage du contenu d’un tableau à une position donnée se fait grâce à l’instruction « écrire ».
Exemple : écrire(Note[2]) ; permet d’afficher à l’écran la valeur du contenu de la cellule numéro
2 du tableau note qui est égale à 14.
Exercice : écrire un algorithme qui permet de créer un tableau nommé Note2 de taille 5 qui
prend les différentes notes du tableau Note dans les cellules respectives. Ensuite, modifie la
note de maths de cet étudiant en 5 au lieu de 2.5. Puis, calcule leur somme et affecte cette
somme à la dernière cellule du tableau Note2.
L’enregistrement est une façon de créer un nouveau type. C’est-à-dire un type qui contient
d’autres variables (appelées champs) de types déjà définis. Ces champs peuvent être de type
différent.
Toute variable déclarée avec ce nouveau type utilise alors une zone mémoire suffisante
pour y stocker tous champs de l’enregistrement.
Syntaxe de déclaration : Exemple : Créer un enregistrement de Type
Elève.
Type
Type
Nom_type = Enregistrement
Elève= Enregistrement
Champ1 : type1 ;
Matricule : chaîne ;
Champ2 : type2 ;
Nom : chaîne ;
……………
Classe : chaîne ;
ChampN : typeN ;
Age : entier ;
FinEnregistrement
Sexe : caractère ;
FinEnregistrement
Pour initialiser un enregistrement on le fait de la même façon que l’initialisation d’un tableau ;
Pour manipuler un enregistrement, on le fait champ par champ. On accède à un champ de
l’enregistrement en indiquant le nom de l’enregistrement suivi d’un point et enfin du nom du
champ. Exemple : Eleve.Nom ; dès lors nous pouvons effectuer les opérations normales sur les
champs telles que : attribuer une valeur à un champ, accéder à un champ, afficher, modifier un
champ…
Exercice : En se servant du type Elève que nous avons déclaré à l’exemple précédent, écris un
algorithme qui permet de manipuler ce type en répondant aux questions suivantes.
Comme nous avons vu plus haut, nous initialisons l’étudiant comme une simple déclaration de
variable en supposant que le Type Elève a été déjà créé. Ainsi, nous avons :
Var e : Elève ;
2. Accéder à un champ de l’enregistrement
Fin
Pour afficher le contenu d’un champ d’un enregistrement, on utilise l’instruction écrire () ;
comme suit :
Cette opération se fait soit par lecture ou par une affectation directe. Exemple modifier le nom
de l’étudiant « Daysie Cami » en « Bob Karl ».
COMPÉTENCES ATTENDUES : Après cette leçon, chaque étudiant de la 1ère année devra
être capable de :
Introduction
Diviser pour mieux régner est généralement la solution la mieux partager pour résoudre
des problèmes un peu plus complexes. C’est ainsi qu’il devient important voir nécessaire
d’étudier et d’utiliser les sous-programmes (sous-algorithme) pour alléger la résolution des
problèmes complexes. Ces sous-algorithmes dont nous verrons dans cette leçon sont des
fonctions et procédures.
Le terme « sous-programme » est un terme générique qui englobe à la fois les procédures et les
fonctions.
Remarque :
Une fonction n’affiche jamais la réponse à l’écran car elle la renvoie simplement à
l’algorithme appelant. Donc, Le rôle d'une fonction est similaire à celui d'une fonction en
mathématique : elle retourne un résultat à partir des valeurs des paramètres.
Début
Instructions;
retourne … ;
FinFonction
Pour le choix d'un nom de fonction il faut respecter les mêmes règles que celles pour les
noms de variables,
Type_fonction est le type du résultat retourné,
L'instruction retourne sert à retourner la valeur du résultat.
Exemples :
Ecrire la fonction Pair qui permet de déterminer si un nombre est pair ou non.
Ecrire la fonction Sqrt qui calcule la racine carrée d’un nombre entier.
Fonction Pair (nbre : Entier) : Booléen Fonction Sqrt (nbre : Entier) : Réel
Variable res : Booléen ; Variable res : Réel ;
Début Début
Sinon Finfonction
res false ;
finsi
retourne res ;
Finfonction
Début
retourne (nbre % 2 = 0) ;
Finfonction
L’appel (utilisation) d’une fonction se fera par simple écriture de son nom dans le
programme principal.
Le résultat d’une fonction étant une valeur, devra être affecté ou utilisé dans une
expression, une écriture.
Exemple : écrire un algorithme qui demande un nombre entier à un utilisateur et affiche
la racine carrée de ce nombre s’il est pair.
L’Algorithme du Problème est le suivant :
Algorithme RacineCarreeNombrePair
Variable nbre : Entier ;
Début
retourne (nbre % 2 = 0) ;
Finfonction
Début
res (nbre)^1/2 ;
Début
Ecrire ("Entrer un nombre") ;
Lire (nbre) ;
Si Pair(nbre) alors
Ecrire ("La Racine Carrée de : ",nbre, " est : ", Sqrt (nbre)) ;
Sinon
Ecrire (nbre," n’est pas un nombre pair ") ;
Finsi
Fin
2- Déclaration de procédure
Dans certains cas, on peut avoir besoin de répéter une tâche dans plusieurs endroits du
programme, mais que dans cette tâche on ne calcule pas de résultats. Dans ces cas, on ne peut
pas utiliser une fonction, on utilise plutôt une procédure.
Une procédure est un bloc d’instructions nommé, déclaré dans l’entête de l’algorithme et
appelé dans son corps à chaque fois que le programmeur en a besoin.
C’est un sous-programme semblable à une fonction mais qui ne retourne rien ou retourne
un ou plusieurs résultats de façon implicite.
Début
Instructions ;
FinProcédure
L'appel d'une procédure, se fait dans le programme principal ou dans une autre procédure par
une instruction indiquant le nom de la procédure :
Remarque :
On peut manipuler deux (02) types de variables dans un module (procédure ou fonction) qui
sont :
Elles se distinguent par ce qu'on appelle leur portée (leur "champ de définition", leur "durée de
vie").
Une variable locale n'est connue qu'à l'intérieur du module ou elle a été définie. Elle est
créée à l'appel du module et détruite à la fin de son exécution.
Une variable globale est connue par l'ensemble des modules et le programme principal.
Elle est définie durant toute l’application et peut être utilisée et modifiée par les
différents modules du programme.
Remarque :
Conseil :
Il faut utiliser autant que possible des variables locales plutôt que des variables globales.
Ceci permet d'économiser la mémoire et d'assurer l'indépendance de la procédure ou de la
fonction.
Exemples :
Entrez la valeur de n :
retourne (n * n * n) ; som ← 0 ;
Finfonction Début
Lire (n) ;
Pour i allant de 1 à n faire
som ← som + i ;
Finpour
Finprocédure
Définition de la Fonction :
Fonction Pair (n : entier) : booléen
retourne (n%2=0);
FinFonction
Appel de la Fonction :
b ← Pair(3) ;
Lors de l'appel de la Fonction Pair(3) ; le paramètre formel n est remplacé par le paramètre
effectif 3.
Les paramètres servent à échanger des données entre le programme principal (ou la
procédure/fonction appelante) et la procédure/fonction appelée.
INTRODUCTION
Réaliser un tri (ou un classement) est une opération relativement courante dans la vie
quotidienne. On peut trier par ordre alphabétique les produits d’une pharmacie, les livres d'une
bibliothèque, un agenda téléphonique suivant l’ordre alphabétique des noms des individus
(même au fur et à mesure de l'insertion de nouveaux numéros). Les tris portent aussi sur des
nombres, des nombres assez importants de données. En effet, les tableaux permettent de stocker
plusieurs données de même type. Si ces données possèdent un ordre total, on peut donc les
ranger en ordre croissant ou décroissant. Ainsi, trier un tableau c’est donc ranger ses éléments
suivant un ordre déterminé (croissant ou décroissant). Il existe plusieurs méthodes de tri : les
tris par sélection, les tris par insertion, les tris par bulles, les tris rapides (quick sort), les tris par
fusion, les tris par tas… Tous ces algorithmes de tri utilisent généralement une procédure qui
permet d’échanger (de permuter) la valeur de deux variables.
vartemp : Entier ;
Début
temp ← a ;
a←b;
b ← temp ;
FinProc
Soit le tableau T[1..n] de nombres à trier. La procédure pour trier ces éléments dans l’ordre
croissant est la suivante :
Procédure tri_sélection (T[1..n], : tableau de …)
var i, j : entier ;
Début
pour i allant de 1 à n-1 faire
pour j allant de i+1 à n faire
si T[i] > T[j] alors
Permuter(T[i], T[j])
fsi
fpour
Fpour
FinProc
NB :
Exercice d’application :
Principe : Elle consiste à insérer les éléments les uns après les autres dans la partie triée.
Généralement, La partie de départ qui est triée est le premier élément. En insérant un élément
dans la partie triée, il se pourrait qu’on ait à déplacer plusieurs autres.
Soit le tableau T[1..n] de nombres à trier. La procédure pour trier ces éléments dans l’ordre
croissant est la suivante :
Procédure tri_insertion(T[1..n], : tableau de …)
vari,j : entier ;
Début
j<-i-1 ;
j<-j-1 ;
ftantque
fpour
FinProc
Après l'étape i, tous les éléments entre la première et la ième position sont triés.
Diviser : Diviser la suite de n éléments à trier en deux sous-suites de n/2 éléments chacune.
Régner : Trier les deux sous-suites de manière récursive en utilisant le tri par fusion.
Combiner : Fusionner les deux sous-suites triées pour produire la réponse triée.
La récursivité s’arrête quand la séquence à trier a une longueur 1, auquel cas il n’y a plus rien
à faire puisqu’une suite de longueur 1 est déjà triée. D’où :
Exercice d’application :