0% ont trouvé ce document utile (0 vote)
26 vues89 pages

SIMAC1121 - Algorithmique - Supp1)

Le document présente le cours de Licence 1 en Algorithmique, détaillant l'organisation pédagogique, les objectifs d'apprentissage, la charge de travail et les modalités d'enseignement. Il inclut également les séquences pédagogiques, les objectifs spécifiques, les prérequis, ainsi que des références bibliographiques. Le cours est conçu pour être suivi à distance avec un mélange d'apprentissage synchrone et asynchrone, et il met l'accent sur la compréhension des algorithmes et des structures de données.

Transféré par

GnTeR
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
26 vues89 pages

SIMAC1121 - Algorithmique - Supp1)

Le document présente le cours de Licence 1 en Algorithmique, détaillant l'organisation pédagogique, les objectifs d'apprentissage, la charge de travail et les modalités d'enseignement. Il inclut également les séquences pédagogiques, les objectifs spécifiques, les prérequis, ainsi que des références bibliographiques. Le cours est conçu pour être suivi à distance avec un mélange d'apprentissage synchrone et asynchrone, et il met l'accent sur la compréhension des algorithmes et des structures de données.

Transféré par

GnTeR
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Pôle des Sciences, Technologies et Numérique

Licence 1

LSIMAC1121 - Algorithmique

Juin 2021

©
+221 76 600 79 40
[email protected]
Préliminaires

Préliminaires

1 - Organisation pédagogique
➢ Pôle : Sciences, Technologies et Numérique
➢ Domaine : Sciences et Technologies
➢ Mention : Sciences Informatiques et Mathématiques de la Cybersécurité
➢ Spécialité :
➢ Cycle : Licence
➢ Niveau : 1
➢ Semestre : 1

2 - Unité d’enseignement
➢ Code : LSIMAC112
➢ Intitulé : Algorithmique et Programmation 1
➢ Crédit : 6

3 - Elément constitutif
➢ Code : LSIMAC1121
➢ Intitulé : Algorithmique
➢ Poids de l’EC au sein de l’UE : 50%
➢ Statut : Obligatoire
➢ Nombre de séquences : 6
➢ Nombre d’objectifs généraux : 12
➢ Nombre d’objectifs spécifiques : 23
➢ Durée : 3 semaines
➢ Version : 1.0
➢ Date de création ou de mise à jour : Juin 2021

4 - Charge de travail
➢ Volume horaire total : 60 heures
➢ Apprentissage supervisé : 36 heures
➢ Travail Personnel de l’Etudiant : 24 heures
➢ Tutorat : 20 heures
➢ Durée apprentissage par semaine :

5 - Modalités
➢ Spatiale : A distance
➢ Temporelle : Mixte (synchrone et asynchrone)
➢ Collaborative : Travail individuel

Dr Guy MBATCHOU Page i


Préliminaires

6 - Objectifs généraux
➢ Connaitre la notion d’algorithmique
➢ Connaitre les étapes de résolution informatique d’un problème
➢ Comprendre la structure générale d’un algorithme
➢ Connaître les différents types élémentaires (prédéfinis ou de base) de données
➢ Savoir déclarer les constantes et variables
➢ Connaître les instructions d’entrée et sortie
➢ Comprendre l’utilisation des structures de contrôle
➢ Comprendre l’utilisation des structures itératives
➢ Savoir manipuler les données dans un tableau
➢ Savoir trier les données contenues dans un tableau
➢ Comprendre l’intérêt du tri des données
➢ Savoir décomposer ou modulariser un algorithme

7 - Mots-clés
Algorithme, type de données, variable, constante, structure alternative, structure
itérative, tableau, enregistrement, tri des données, module, procédure, fonction, paramètre,
argument, récursivité.

8 - Prérequis
➢ Réaliser les opérations arithmétiques
➢ Réaliser les opérations logiques
➢ Evaluer les opérations de comparaison
➢ Décrire un système informatique

9 - Test d’entrée
Voir fichier joint des travaux dirigés

10 - Mots-clés
Algorithme, type de données, variable, constante, structure alternative, structure
itérative, tableau, enregistrement, tri des données, module, procédure, fonction, paramètre,
argument, récursivité.

11 - Références Bibliographiques
[1] Christophe Dabancourt, Apprendre à programmer : Algorithmes et conception objet,
Edition Eyrolles, 2008, https://international.scholarvox.com/reader/docid/40001066/page/1

Dr Guy MBATCHOU Page ii


Préliminaires

[2] Aziz Aziz, Algorithmique : La méthode descendante – Comprendre et mettre en œuvre la


programmation structurée, Le Génie Editeur, 2003,
https://international.scholarvox.com/reader/docid/88819336/page/1
[3] Michel Murgulescu, Algorithmique et programmation en langage Turbo-Pascal (v. 7.0),
Loze-Dion, 2002, https://international.scholarvox.com/reader/docid/45006885/page/1

12 - Déroulement de l’apprentissage
Séquences pédagogiques Objectifs pédagogiques
(%) Seuil Durée
N° Titre Durée Code Intitulé
Validation (Heure)
O11 Décrire la notion d’algorithmique 75 1
6 heures

La notion Décrire les étapes de résolution


1 O12 50 2
d’algorithme informatique d’un problème
Décrire la structure générale d’un
O13 80 3
algorithme
Différencier les différents types
O21 90 2
élémentaires de données
O22 Déclarer une variable et une constante 80 6
3 jours 12 heures

O23 Associer des opérateurs aux opérations 90 12


Les éléments
2
d’un algorithme Traduire une idée en instructions
O24 50 16
algorithmiques
Utiliser les structures alternatives ou
O25 60 24
structures conditionnelles
Utiliser les structures itératives ou
O26 60 24
répétitives
O31 Décrire un tableau 50 12

O32 Parcourir un tableau de dimension 1 70 24


La gestion des
8 jours

Réaliser des opérations dans un tableau de


3 données dans O33 60 36
dimension 1
un tableau
Organiser les données dans un tableau de
O34 50 72
dimension 1 non plein
Parcourir un tableau de dimension 2 ou
O35 60 48
plus
O41 Décrire la notion de tri 80 4
Les algorithmes
3 jours

de tri dans un
4 O42 Ecrire des algorithmes de tri 60 32
tableau de
dimension 1
O43 Analyser l’intérêt du tri des données 70 36

O51 Décrire un enregistrement 70 12


3 jours

Les
5
enregistrements
O52 Utiliser un enregistrement 60 60

Dr Guy MBATCHOU Page iii


Préliminaires

Séquences pédagogiques Objectifs pédagogiques


(%) Seuil Durée
N° Titre Durée Code Intitulé
Validation (Heure)
O61 Décrire la notion de module 50 18

3 jours 6 heures
Identifier les paramètres d'une fonction,
Les algorithmes O62 60 24
leurs catégories et portées
6 procéduraux ou
Différencier les modes de passage d’un
modulaires O63 60 24
paramètre à un module
O64 Ecrire des modules récursifs 40 12
6 séquences 21 478
23 objectifs spécifiques
pédagogiques jours heures

13 - Graphe de précédences entre les objectifs

14 - Consignes de travail
➢ Faites le Test d’entrée ; en principe vous devez avoir un score de 80% pour pouvoir
continuer mais cette contrainte n’est pas prise en compte.
➢ Le cours est organisé par objectifs qui s’afficheront dès que vous aurez atteint l’objectif
courant
➢ Au sein du cours, vous avez des questions posées sous forme de Test ; il faudra aller
dans le forum pour y répondre
➢ Dans chaque objectif, il faut d’abord lire le cours, ensuite la vidéo et enfin les exercices
➢ Le tout premier exercice de chaque objectif est un Test de connaissance auquel votre
note doit être égale à au moins à 80%. Vous la possibilité de reprendre le test jusqu’à
obtenir les 80% sinon vous ne pouvez pas progresser dans votre apprentissage
➢ Les autres exercices sont des exercices de production classiquement appelé Travaux
Dirigés. Vous devez déposer votre solution pour progresser
➢ Tous les exercices ne sont pas obligatoires et le système vous donnera progressivement
les conditions d’accès à un exercices. Je vous recommande de faire le maximum !
➢ Vous aurez des séances de travail synchrone avec un tuteur pour des explications en
direct

Dr Guy MBATCHOU Page iv


Préliminaires

15 - Table des matières

Préliminaires _________________________________________________________ i
1 - Organisation pédagogique _______________________________________________________i
2 - Unité d’enseignement __________________________________________________________i
3 - Elément constitutif _____________________________________________________________i
4 - Charge de travail ______________________________________________________________i
5 - Modalités i
6 - Objectifs généraux ____________________________________________________________ ii
7 - Mots-clés ii
8 - Prérequis ii
9 - Test d’entrée ________________________________________________________________ ii
10 - Mots-clés ii
11 - Références Bibliographiques ___________________________________________________ ii
12 - Déroulement de l’apprentissage ________________________________________________ iii
13 - Graphe de précédences entre les objectifs ________________________________________ iv
14 - Consignes de travail __________________________________________________________ iv
15 - Table des matières ___________________________________________________________ v

Séquence 1 : La notion d’algorithme __________________________________ 1

Objectif 1.1 : Décrire la notion d’algorithmique ________________________________ 2


1 - Problématique _______________________________________________________________ 2
2 - Définitions 2
3 - Propriétés 3
4 - Complexité 3
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O11(100%) __ 3
Objectif 1.2 : Décrire les étapes de résolution informatique d’un problème __________ 4
1 - Etape 1 : Poser clairement le problème à résoudre __________________________________ 4
2 - Etape 2 : Conception d’une méthode de résolution du problème _______________________ 5
3 - Etape 3 : Choix des structures de données et rédaction des algorithmes _________________ 5
4 - Etape 4 : Choix d’un langage de programmation et transcription de l’algorithme __________ 6
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O12(100%) __ 6
Objectif 1.3 : Décrire la structure générale d’un algorithme _______________________ 7
1 - Structure générale d’un algorithme ______________________________________________ 7
2 - Le langage algorithmique _______________________________________________________ 8
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O13(100%) __ 9

Séquence 2 : Les éléments d’un algorithme ____________________________ 10

Objectif 2.1 : Différencier les différents types élémentaires de données ____________ 11


1 - Le type booléen _____________________________________________________________ 11
2 - Le type numérique ___________________________________________________________ 11
3 - Le type alphanumérique ______________________________________________________ 12
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O21(100%) _ 12
Objectif 2.2 : Déclarer une variable et une constante ___________________________ 13
1 - Notion d’objet ______________________________________________________________ 13
2 - Déclaration d’une variable _____________________________________________________ 13
3 - Déclaration d’une constante ___________________________________________________ 14
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O22(100%) _ 14
Objectif 2.3 : Associer des opérateurs aux opérations __________________________ 15
1 - L’affectation ________________________________________________________________ 15
2 - Les opérations arithmétiques __________________________________________________ 15

Dr Guy MBATCHOU Page v


Préliminaires

3 - Les opérations relationnelles ou de comparaison __________________________________ 15


4 - Les opérations logiques ou booléennes __________________________________________ 16
5 - Autres opérations ____________________________________________________________ 16
6 - La communication entre l’homme et l’ordinateur __________________________________ 16
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O23(100%) _ 17
Objectif 2.4 : Traduire une idée en instructions algorithmiques ___________________ 18
1 - Notion d’instruction __________________________________________________________ 18
2 - Notion de bloc d’instructions___________________________________________________ 18
3 - Notion de commentaire _______________________________________________________ 19
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O23(10%) __ 19
Seuil de validation : 70% Titre : Permutation de 2 variables Objectifs visés :
O23(30%) ___________________________________________________________ 19
Seuil de validation : 60% Titre : Lecture et affichage du produit de 2 réels Objectifs
visés : O23(50%) _____________________________________________________ 19
Seuil de validation : 50% Titre : Hypoténuse d’un triangle rectangle Objectifs visés :
O23(80%) ___________________________________________________________ 19
Objectif 2.5 : Utiliser les structures alternatives ou structures conditionnelles _______ 20
1 - La structure conditionnelle « SI » _______________________________________________ 20
2 - La structure conditionnelle « Selon Que » ________________________________________ 21
3 - L’imbrication des structures conditionnelles ______________________________________ 22
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O25(30%) __ 23
Seuil de validation : 60% Titre : Résistance d’un circuit Objectifs visés : O25(75%) _ 23
Seuil de validation : 60% Titre : Calcul du maximum de 3 valeurs avec variable
d’aide Objectifs visés : O25(60%) ________________________________________ 23
Seuil de validation : 60% Titre : Calcul du maximum de 3 valeurs sans variable
d’aide Objectifs visés : O25(60%) ________________________________________ 23
Seuil de validation : 60% Titre : Equation du second degré avec solutions complexes
Objectifs visés : O25(75%) _____________________________________________ 23
Objectif 2.6 : Utiliser les structures itératives ou répétitives _____________________ 24
1 - La boucle « Pour » ___________________________________________________________ 24
2 - La boucle « Tant Que »________________________________________________________ 25
3 - La boucle « Repeter … Jusqu’à » ________________________________________________ 25
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O26(20%) __ 26
Seuil de validation : 70% Titre : Calcul du factoriel avec la boucle Pour Objectifs
visés : O26(30%) _____________________________________________________ 26
Seuil de validation : 70% Titre : Calcul du factoriel avec la boucle Repeter Objectifs
visés : O26(30%) _____________________________________________________ 26
Seuil de validation : 70% Titre : Calcul du factoriel avec la boucle Tant Que Objectifs
visés : O26(30%) _____________________________________________________ 26
Seuil de validation : 70% Titre : Puissance d’un nombre Objectifs visés : O26(40%) 26
Seuil de validation : 70% Titre : Série harmonique Objectifs visés : O26(40%) ____ 26
Seuil de validation : 70% Titre : Suite de nombres Objectifs visés : O26(40%) _____ 26

Séquence 3 : La gestion des données dans un tableau ___________________ 27

Objectif 3.1 : Décrire un tableau ____________________________________________ 28


1 - Nécessité 28
2 - Définition 28
3 - Déclaration 28
4 - Notion de case ou de cellule ___________________________________________________ 30
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O31(100%) _ 31
Objectif 3.2 : Parcourir un tableau de dimension 1 _____________________________ 32
1 - Parcours en lecture __________________________________________________________ 32
2 - Parcours en écriture __________________________________________________________ 32
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O32(20%) __ 33

Dr Guy MBATCHOU Page vi


Préliminaires

Seuil de validation : 50% Titre : Lecture des données et calcul de la moyenne et la


variance Objectifs visés : O32(40%) ______________________________________ 33
Seuil de validation : 50% Titre : Lecture des données et affichage des données de
cases paires Objectifs visés : O32(40%) ___________________________________ 33
Seuil de validation : 50% Titre : Lecture des données et affichage des données
impaires Objectifs visés : O32(40%) ______________________________________ 33
Seuil de validation : 50% Titre : Lecture des données et affichage des données
supérieures à la moyenne Objectifs visés : O32(70%) ________________________ 33
Objectif 3.3 : Réaliser des opérations dans un tableau de dimension 1 _____________ 34
1 - Recherche d’un élément ______________________________________________________ 34
2 - Comptage du nombre d’occurrences d’un élément _________________________________ 35
3 - Les chaînes de caractères comme tableau ________________________________________ 36
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O33(10%) __ 36
Seuil de validation : 70% Titre : Lecture des données et affichage de la dernière
occurrence d’une valeur Objectifs visés : O33(30%) _________________________ 36
Seuil de validation : 60% Titre : Extraction d’une sous-chaîne de début Objectifs
visés : O33(30%) _____________________________________________________ 36
Seuil de validation : 60% Titre : Extraction d’une sous-chaîne de fin Objectifs visés :
O33(30%) ___________________________________________________________ 36
Seuil de validation : 60% Titre : Extraction d’une sous-chaîne d’une plage donnée
Objectifs visés : O33(30%) _____________________________________________ 36
Seuil de validation : 60% Titre : Recherche de la position de début d’une sous-
chaîne dans une chaîne de caractères Objectifs visés : O33(70%) ______________ 36
Seuil de validation : 40% Titre : Comptage du nombre d’occurrences d’une sous-
chaîne dans une chaîne de caractères Objectifs visés : O33(90%) ______________ 36
Objectif 3.4 : Organiser les données dans un tableau de dimension 1 non plein ______ 37
1 - Notion de « Tableau non plein » ________________________________________________ 37
2 - Marquage des cellules vides ___________________________________________________ 37
3 - Initialisation d’un tableau non plein _____________________________________________ 38
4 - Recherche d’un élément dans un tableau non plein ________________________________ 38
5 - Insertion d’un élément dans un tableau __________________________________________ 40
6 - Suppression d’un élément dans un tableau _______________________________________ 42
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O34(10%) __ 44
Seuil de validation : 70% Titre : Affichage des données d’un tableau non plein avec
la technique des éléments continus dans le tableau Objectifs visés : O34(30%) ___ 44
Seuil de validation : 60% Titre : Affichage des données d’un tableau non plein avec
la technique des tableaux à trous Objectifs visés : O34(30%) __________________ 44
Seuil de validation : 60% Titre : Lecture des données dans un tableau non plein avec
la technique des éléments continus dans le tableau Objectifs visés : O34(30%) ___ 44
Seuil de validation : 50% Titre : Lecture des données dans un tableau non plein avec
la technique des tableaux à trous Objectifs visés : O34(30%) __________________ 44
Objectif 3.5 : Parcourir un tableau de dimension 2 ou plus_______________________ 45
1 - Parcours en lecture d’un tableau de dimension 2 __________________________________ 45
2 - Parcours en écriture d’un tableau de dimension 2 __________________________________ 45
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O35(10%) __ 46
Seuil de validation : 30% Titre : Test de matrice nulle Objectifs visés : O35(40%) __ 46
Seuil de validation : 30% Titre : Test de matrice identité Objectifs visés : O35(40%) 46
Seuil de validation : 30% Titre : Test de matrice triangulaire supérieure Objectifs
visés : O35(50%) _____________________________________________________ 46
Seuil de validation : 30% Titre : Multiplication scalaire d’une matrice Objectifs
visés : O35(70%) _____________________________________________________ 46
Seuil de validation : 30% Titre : Addition de 2 matrices Objectifs visés : O35(40%) 46
Seuil de validation : 30% Titre : Multiplication de 2 matrices Objectifs visés :
O35(40%) ___________________________________________________________ 46

Dr Guy MBATCHOU Page vii


Préliminaires

Séquence 4 : Les algorithmes de tri dans un tableau de dimension 1 ________ 47

Objectif 4.1 : Décrire la notion de tri ________________________________________ 48


Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O41(100%) _ 48
Objectif 4.2 : Ecrire des algorithmes de tri ____________________________________ 49
1 - Le tri par Sélection ___________________________________________________________ 49
2 - Le tri par Insertion ___________________________________________________________ 50
3 - Le tri à Bulles _______________________________________________________________ 50
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O42(10%) __ 52
Seuil de validation : 40% Titre : Tri par ordre décroissant dans un tableau non plein
contenant des trous Objectifs visés : O42(50%) ____________________________ 52
Seuil de validation : 40% Titre : Tri par ordre décroissant dans un tableau non plein
à éléments continus Objectifs visés : O42(50%) ____________________________ 52
Objectif 4.3 : Analyser l’intérêt du tri des données _____________________________ 53
1 - La recherche dichotomique ____________________________________________________ 53
2 - La recherche trichotomique ____________________________________________________ 54
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O43(20%) __ 54
Seuil de validation : 40% Titre : Recherche trichotomique dans un tableau non plein
à éléments contigus Objectifs visés : O43(50%) ____________________________ 54
Seuil de validation : 40% Titre : Recherche trichotomique dans un tableau non plein
à trous Objectifs visés : O43(50%) _______________________________________ 54

Séquence 5 : Les enregistrements ____________________________________ 55

Objectif 5.1 : Décrire un enregistrement _____________________________________ 56


1 - Nécessité 56
2 - Définition 56
3 - Déclaration de variable de type enregistrement ___________________________________ 56
4 - Déclaration de type enregistrement _____________________________________________ 57
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O51(30%) __ 58
Seuil de validation : 80% Titre : Déclaration d’un nombre complexe Objectifs visés :
O51(50%) ___________________________________________________________ 58
Seuil de validation : 80% Titre : Déclaration d’un nombre fractionnaire Objectifs
visés : O51(50%) _____________________________________________________ 58
Objectif 5.2 : Utiliser un enregistrement _____________________________________ 59
1 - Accès à un champ d’enregistrement _____________________________________________ 59
2 - Enregistrement d’enregistrements ______________________________________________ 60
3 - Opérations sur les enregistrements _____________________________________________ 60
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O52(30%) __ 62
Seuil de validation : 70% Titre : Lecture et affichage d’un nombre complexe
Objectifs visés : O52(30%) _____________________________________________ 62
Seuil de validation : 70% Titre : Lecture et affichage d’un nombre fractionnaire
Objectifs visés : O52(30%) _____________________________________________ 62
Seuil de validation : 50% Titre : Opérations arithmétiques sur les nombres
complexes Objectifs visés : O52(70%) ____________________________________ 62
Seuil de validation : 50% Titre : Module, argument et expression conjuguée d’un
nombre complexe Objectifs visés : O52(40%) ______________________________ 62

Séquence 6 : Les algorithmes procéduraux ou modulaires ________________ 63

Objectif 6.1 : Décrire la notion de module ____________________________________ 64


1 - Problématique ______________________________________________________________ 64
2 - Définition 64
3 - Structure d’un module ________________________________________________________ 65
4 - Notion de procédure et de fonction _____________________________________________ 66

Dr Guy MBATCHOU Page viii


Préliminaires

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O61(100%) _ 69


Objectif 6.2 : Identifier les paramètres d'une fonction, leurs catégories et portées ___ 70
1 - Problématique ______________________________________________________________ 70
2 - Définition de paramètre_______________________________________________________ 70
3 - Les catégories de paramètres __________________________________________________ 72
4 - Appel des procédures et fonctions ______________________________________________ 72
5 - Portée d’une variable _________________________________________________________ 72
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O62(20%) __ 74
Seuil de validation : 60% Titre : Module de calcul itératif du factoriel Objectifs
visés : O6240%) ______________________________________________________ 75
Seuil de validation : 60% Titre : Module de calcul itératif de la puissance Objectifs
visés : O6240%) ______________________________________________________ 75
Seuil de validation : 60% Titre : Module d’affichage de la table de multiplication
Objectifs visés : O6240%) ______________________________________________ 75
Seuil de validation : 50% Titre : Module de calcul itératif du PPMC Objectifs visés :
O6240%) ___________________________________________________________ 75
Seuil de validation : 50% Titre : Module de calcul itératif du PGDC Objectifs visés :
O6240%) ___________________________________________________________ 75
Objectif 6.3 : Différencier les modes de passage d’un paramètre à un module _______ 76
1 - Passage par valeur ___________________________________________________________ 76
2 - Passage par adresse ou par référence ____________________________________________ 76
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O63(20%) __ 76
Seuil de validation : 80% Titre : Module de lecture des données dans un tableau
Objectifs visés : O63(40%) _____________________________________________ 77
Seuil de validation : 80% Titre : Module d’affichage des données d’un tableau
Objectifs visés : O63(40%) _____________________________________________ 77
Seuil de validation : 80% Titre : Module de lecture des données d’un étudiant
Objectifs visés : O63(40%) _____________________________________________ 77
Seuil de validation : 80% Titre : Module d’affichage des données d’un étudiant
Objectifs visés : O63(40%) _____________________________________________ 77
Seuil de validation : 80% Titre : Module de tri des données d’un tableau Objectifs
visés : O63(40%) _____________________________________________________ 77
Seuil de validation : 80% Titre : Module d’affichage du calcul du minorant et
majorant de 4 nombres Objectifs visés : O63(40%)__________________________ 77
Seuil de validation : 80% Titre : Module d’initialisation d’un tableau avec une valeur
particulière Objectifs visés : O63(40%) ___________________________________ 77
Objectif 6.4 : Ecrire des modules récursifs ____________________________________ 78
1 - Définition 78
2 - Quelques exemples __________________________________________________________ 78
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O64(20%) __ 79
Seuil de validation : 60% Titre : Module de calcul récursif des termes de la suite de
Fibonacci Objectifs visés : O64(40%) _____________________________________ 79
Seuil de validation : 60% Titre : Module de calcul récursif de la puissance Objectifs
visés : O64(70%) _____________________________________________________ 79
Seuil de validation : 50% Titre : Module récursif de recherche dichotomique
Objectifs visés : O64(70%) _____________________________________________ 79

Dr Guy MBATCHOU Page ix


La notion d’algorithme

Séquence 1 : La notion
d’algorithme

Dr Guy MBATCHOU Page 1


La notion d’algorithme

Objectif 1.1 : Décrire la notion d’algorithmique

1 - Problématique
De par sa définition, l’informatique est la science de traitement automatique de
l’information par l’ordinateur. Or de base, l’ordinateur n’est qu’un amas de composants
(électroniques ou mécaniques) démuni d’une capacité de traitement de l’information. Pour que
l’ordinateur en soit capable, il faut y installer des logiciels (programmes) pour la réalisation de
différents traitements (opérations ou travaux). En fait l’ordinateur ne sait faire que ce qu’on lui
a appris. Son apprentissage consiste à lui installer autant de logiciels que de travaux que vous
voulez qu’il réalise. Par exemple, mon ordinateur n’est pas capable de faire un montage vidéo
car je ne le lui ai pas appris ou en d’autres termes car je n’ai pas installé un logiciel de montage
vidéo. Par contre mon ordinateur sait faire du traitement de texte puisqu’il est doté du logiciel
Microsoft Word.
Jusqu’à présent, lorsque vous avez besoin des logiciels pour réaliser des tâches
particulières, vous les achetez, téléchargez ou copiez chez des tiers (amis, parents, …) que vous
installez dans votre ordinateur. Vous êtes-vous déjà posés les questions suivantes :
1 - Comment produire des logiciels ?
2 - Puis-je produire mon propre logiciel ?
3 - Que contiennent les logiciels ?
4 - Comment fonctionnent les logiciels ?

Tout comme vous apprenez vos leçons de mathématiques, de vie ou de sagesse,


l’ordinateur apprend à partir des instructions données. Produire un logiciel (ou un programme),
revient à écrire un ensemble d’instructions compréhensibles par l’ordinateur dont le but est de
réaliser les tâches pour lesquelles le logiciel est produit. Durant ce cours associé au cours de
programmation, vous aurez des débuts de réponse aux questions que vous vous posez sur le
traitement automatique de l’information par l’ordinateur.

2 - Définitions
Un algorithme est la spécification précise et non ambiguë d’une séquence d’étapes,
formée d'un nombre fini d'opérations, pouvant être exécutée de façon automatique par un
ordinateur.
Un algorithme est une suite finie d’instructions ordonnées permettant de résoudre un
problème précis.

Dr Guy MBATCHOU Page 2


La notion d’algorithme

Un algorithme est une suite de règles opératoires à appliquer dans un ordre déterminé
à un nombre fini de données afin d’effectuer un calcul numérique en un nombre fini d’étapes.
Un algorithme est un ensemble de règles opératoires dont l’application permet de
résoudre un problème donné au moyen d’un nombre fini d’opérations.
L’algorithmique est la science qui étudie les algorithmes.
L’algorithmique est l’étude de la résolution de problèmes par la mise en œuvre des
suites d’opérations élémentaires selon un processus défini aboutissant à une solution.

3 - Propriétés
Un algorithme doit :
➢ avoir un nombre fini d’étapes ;
➢ avoir un nombre fini d’opérations par étape ;
➢ se terminer après un nombre fini d’opérations ;
➢ fournir un résultat ;
➢ avoir chacune des opérations définie rigoureusement, non ambiguë et effective c’est-
à-dire réalisable par une machine ;
➢ être déterministe c’est-à-dire appliquer sur les mêmes données, il produit toujours la
même suite d’opérations et fournit donc toujours le même résultat ;
➢ être en générale indépendant du langage de programmation à utiliser plus tard

4 - Complexité
L’exécution d’un algorithme sur un ordinateur consomme des ressources :
➢ en temps de calcul : complexité temporelle
➢ en espace-mémoire occupé : complexité spatiale
Un algorithme "hors du possible" a une complexité temporelle et/ou spatiale qui rend
son exécution impossible.
Exemple : Jeu d’échec par recherche exhaustive de tous les coups possibles
On a 1019 possibilités Si chaque possibilité est calculée en 1 milliseconde alors il faudra
plus de 300 millions d’années pour rechercher le meilleur coup.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O11(100%)

Dr Guy MBATCHOU Page 3


La notion d’algorithme

Objectif 1.2 : Décrire les étapes de résolution


informatique d’un problème

La résolution informatique d’un problème se résume généralement en une seule phase


automatique : l’exécution d’un programme pour obtenir la solution. Mais un programme n’est
en lui-même qu’un élément de résolution du problème. Il matérialise tout simplement dans un
langage compréhensible par l’ordinateur une méthode qui à partir des grandeurs connues
produit les grandeurs cherchées.
La résolution informatique d’un problème comporte donc plusieurs étapes.

Figure 1 : Etapes de résolution informatique d’un problème

1 - Etape 1 : Poser clairement le problème à résoudre


Henri Poincaré : « Un problème bien posé est un problème à moitié résolu. »
On analyse le problème pour savoir s’il peut être résolu par un ordinateur. On l’exprime
ensuite dans un langage moins ambigu, plus facilement compréhensible que le problème réel.
Cette phase d’analyse doit être d’autant plus approfondie et détaillée que le problème est
complexe. On n’analysera pas de la même façon la mise en place d’une chaîne de production
automatisée dans une grande entreprise que le tri de dix éléments contenus dans un tableau ou
un fichier. Les personnes chargées d’analyser un problème important ont à leur disposition
diverses méthodes (MERISE, SADT, UML, Unified Process, …) pour mener à bien leur projet.
Le but de ce cours étant d’apprendre l’algorithmique, nous ne traiterons pas de
problèmes nécessitant l’utilisation de telles méthodes. Ainsi, les problèmes (exercices) que nous
traiterons dans le cadre de ce cours seront assez simplifiés avec une formulation assez claire.

Dr Guy MBATCHOU Page 4


La notion d’algorithme

2 - Etape 2 : Conception d’une méthode de résolution du


problème
Nicolas Boileau : « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le
dire arrivent aisément. »
Ici, il s’agit de trouver le principe de résolution du problème. Généralement, ce principe
se résume en une relation ou un ensemble de relations entre les grandeurs connues et les
grandeurs cherchées. Il existe des approches pratiques de résolution :
➢ Algorithme glouton : L’idée est de résoudre le problème étape par étape en
optimisant localement chaque étape dans l’espoir d’obtenir un résultat optimum
global du problème.
➢ Diviser pour mieux régner : L’idée est de diviser le problème en des sous-problèmes
de tailles plus petites ; puis résoudre les sous-problèmes et enfin, fusionner les
solutions des sous-problèmes pour obtenir la solution globale du problème.
➢ Recherche exhaustive ou combinatoire : L’idée est d’examiner tous les cas possibles
de solutions pour en déterminer la meilleure. Evidemment, c’est une stratégie très
couteuse en temps.
➢ Décomposition top-down ou Décomposition descendante : L’idée est de décomposer
successivement un problème en des sous-problèmes à résoudre. La décomposition
s’arrête lorsqu’on obtient des sous-problèmes triviaux (faciles) à résoudre.
➢ Décomposition Bottom-up ou Décomposition ascendante : L’idée est de résoudre un
problème (solution globale) en composant des algorithmes simples (solutions
partielles) résolvant des sous-parties du problème.

3 - Etape 3 : Choix des structures de données et rédaction des


algorithmes
Il est question de rédiger les algorithmes qui contiennent l’ensemble des actions à
exécuter pour résoudre le problème. Les données du problème ainsi que celles de la solution
sont contenues dans les structures de données qui doivent être appropriées à l’information à
conserver. Une structure de données est l’architecture (différents compartiments) d’un objet
permettant de garder l’information avant, pendant et après les traitements.
L’algorithme n’est que la formulation dans un langage plus concis des différentes étapes
ou instructions de la solution du problème issues de la phase d’analyse.

Dr Guy MBATCHOU Page 5


La notion d’algorithme

4 - Etape 4: Choix d’un langage de programmation et


transcription de l’algorithme
Il s’agit dans cette phase de transcrire (traduire) l’algorithme dans un langage
compréhensible par l’ordinateur.
Il est légitime de se poser la question à savoir pourquoi écrire la solution dans un langage
algorithmique (pour obtenir un algorithme) et le traduire ensuite dans un langage de
programmation (pour obtenir un programme exécutable par un ordinateur). Trois raisons
justifient la rédaction des algorithmes ou l’utilisation du langage algorithmique :
1 - Le langage algorithmique est proche du langage naturel
2 - Le langage algorithmique permet d’éviter de devoir gérer 2 difficultés à savoir d’une
part l’analyse du problème posé et la conception d’une solution au problème et
d’autre part, les spécificités liées au langage de programmation utilisé.
3 - Le langage algorithmique est en quelque sorte le plus grand dénominateur commun
des langages de programmation

Figure 2 : Phases de résolution informatique d’un problème

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O12(100%)

Dr Guy MBATCHOU Page 6


La notion d’algorithme

Objectif 1.3 : Décrire la structure générale d’un


algorithme

1 - Structure générale d’un algorithme


La structure générale d’un algorithme comprend :
1 - Le nom de l’algorithme précédé du mot clé Algorithme et suivi d’un point-virgule
2 - Un ensemble de déclarations de nouveaux types de données. En fait, il arrive souvent
que le programmeur créé ses propres types de données en fonction de la solution
proposée car les types simples ou prédéfinis ne sont pas capables de stoker les
données à manipuler ou à conserver.
3 - Un ensemble de déclarations d’objets (constantes et variables) globales c’est-à-dire
accessibles et utilisables partout dans l’algorithme
4 - Un ensemble de définitions de modules qui sont des sous-algorithmes contribuant à
la résolution du problème général dans le cas d’une décomposition du problème en
sous-problèmes
5 - Un ensemble de déclarations d’objets (constantes et variables) utilisable seulement
par l’algorithme et non les modules
6 - Le mot clé Début matérialisant le début de l’algorithme
7 - Un ensemble d’instructions représentant les actions à réaliser pour produire la
solution du problème. Chaque instruction doit être terminée par un point-virgule à
l’exception de certaines instructions que nous verrons plus tard.
8 - Le mot clé Fin matérialisant la fin de l’algorithme. Ce mot-clé doit être suivi d’un point.

Dr Guy MBATCHOU Page 7


La notion d’algorithme

Algorithme nom_algorithme ;

Déclaration (création) de nouveaux types de données

Déclaration des constantes et variables globales

Définition des modules (procédures et/ou fonctions)

Déclaration des variables de l’algorithme

Début

Instruction(s) ;

Fin.

Figure 3 : Structure générale d’un algorithme

2 - Le langage algorithmique
L’un des premiers langages fut l’organigramme (algorigramme ou logigramme) qui est
une représentation graphique avec des formes (rectangle, losange, point, flèche, …) des
différentes actions à mener pour obtenir la solution aux problèmes posés. L’organigramme a
été abandonnée car elle n’est pas pratique pour de grands algorithmes (organigramme trop
gigantesque). De plus, l’organigramme favorise la programmation non structurée qui est un
type de programmation non recommandé.
Le langage algorithme utilisé généralement est une série de conventions appelée
« pseudo-code » qui ressemble à un langage de programmation à la différence que la plupart
des spécificités (syntaxe) des langages de programmation y sont épurées. Le langage sera appris
au fur et à mesure que nous progresserons dans le cours. Je tiens à signaler d’un enseignant ou
d’un ouvrage à un autre, le langage algorithmique peut différer légèrement. C’est normal car

Dr Guy MBATCHOU Page 8


La notion d’algorithme

l’algorithme est écrit pour formaliser l’écriture des instructions la solution au problème posé et
non destiné à être exécuté par un ordinateur.
NB : En général, les enseignants enseignent l’algorithme avec des syntaxes proches du
langage de programmation qui sera utilisé.

Discutez avec vos camarades, la différence entre la programmation structurée


et la programmation non structurée
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O13(100%)

Dr Guy MBATCHOU Page 9


Les éléments d’un algorithme

Séquence 2 : Les
éléments d’un algorithme

Dr Guy MBATCHOU Page 10


Les éléments d’un algorithme

Objectif 2.1 : Différencier les différents types


élémentaires de données

Pour produire un algorithme résolvant un problème, il faut en général des objets. Par
exemple pour écrire un algorithme permettant de calculer la surface d’un rectangle, il faut 3
objets dont le premier contiendra la longueur, le deuxième contiendra la largeur et le troisième
contiendra la surface. Chaque objet appartient un type bien précis. Il existe plusieurs types
élémentaires de données. Un type élémentaire est un type de base qui est différent d’un type
complexe qui est obtenu de la composition des types élémentaires et/ou des types complexes.

1 - Le type booléen
Un booléen appartient à un ensemble contenant que 2 valeurs possibles : VRAI et
FAUX.
Les opérations réalisables sur des valeurs de tels types sont des opérations logiques dont
les opérateurs sont OU, ET, NON, …
OU VRAI FAUX ET VRAI FAUX NON
VRAI VRAI VRAI VRAI VRAI FAUX VRAI FAUX
FAUX VRAI FAUX FAUX FAUX FAUX FAUX VRAI
Table 1 : Table logique de Table 2 : Table logique de Table 3 : Table logique
l’opérateur OU l’opérateur ET de l’opérateur NON

Ce type est généralement utilisé pour évaluer les conditions. Par exemple, pour calculer
la racine carrée d’un nombre dans l’ensemble des réels, il faut d’abord s’assurer que le nombre
est positif ; donc le calcul sera possible si la condition « Est-ce le nombre est positif ? » à la
valeur de vérité VRAI.

2 - Le type numérique
Ce type comporte 2 sous-types à savoir les entiers et les réels :
➢ Un entier appartient à l’ensemble des entiers relatifs (ℤ) qu’il ne faut pas confondre
avec l’ensemble des entiers naturels (ℕ).
➢ Un réel appartient à l’ensemble des nombres réels (ℝ).

Quelques opérations réalisables sur des valeurs de tels types sont les opérations
arithmétiques et trigonométriques.

Dr Guy MBATCHOU Page 11


Les éléments d’un algorithme

3 - Le type alphanumérique
Ce type comporte 2 sous-types à savoir les caractères et les chaînes de caractères :
➢ Un caractère est soit une lettre (a, b, …, z, A, B, …, Z), un signe de ponctuation (., ;, /,
\, ?, !, …), un espace, un caractère spécial ($, €, #, @, &, §, £ …), un chiffre (0, 1, …, 9)
et autres contenue entre simple côtes ('). Par exemple, le caractère '1' ou le caractère
'p' ou le caractère 'ç'.
➢ Une chaîne de caractères est une succession de caractères contenue entre simples
côtes ('). Par exemple, la chaîne 'algorithmique 1'. En algorithmique, nous
supposerons que la chaîne peut avoir une longueur infinie ce qui n’est pas vrai dans la
réalité. La longueur maximale de la chaîne sera définie dans un cours de
programmation en fonction du langage utilisé.

Quelques opérations réalisables sur des valeurs de tels types sont la concaténation, le
calcul de la longueur d’une chaîne de caractères, l’insertion, la suppression, la modification, la
position, le nombre d’occurrences d’une sous-chaîne dans une chaîne.
Un caractère est représenté dans l’ordinateur par son code ASCII1 (American Standard
Code for Information Interchange) qui est le codage des caractères.
Pour représenter un caractère vide ou une chaîne de caractères vide, il ne faut rien mettre
entre les côtes ('').

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O21(100%)

1
http://www.table-ascii.com/

Dr Guy MBATCHOU Page 12


Les éléments d’un algorithme

Objectif 2.2 : Déclarer une variable et une


constante

1 - Notion d’objet
L’algorithme manipule des objets pour aboutir à la solution au problème. Ces objets
représentent d’une part des données du problème et d’autre part, les données de la solution.
Tout objet est caractérisé par :
➢ Son identificateur est une suite de caractères alphanumériques commençant
obligatoirement par une lettre ou le caractère blanc souligné ou tiret-bas ou caractère de
soulignement (_). Le choix de l’identificateur ne dépend que de l’algorithmicien
(programmeur) mais il est fortement recommandé de choisir un identificateur en rapport
avec la sémantique de ce qu’il représente. Par exemple pour définir un identificateur
devant contenir l’âge des étudiants, il est préférable d’utiliser l’identificateur
age_etudiant qu’un identificateur qui ne veut rien dire du tout comme X ou Y.
➢ Son type qui détermine l’ensemble des valeurs possibles.
➢ Sa valeur représente le contenu et est une constante appartenant à l’ensemble de valeurs
du type. On verra plus loin que la valeur d’un objet peut être un objet mais
indirectement, ça sera toujours une constante.
NB : Un objet de type élémentaire possède à tout moment une et une seule valeur.

2 - Déclaration d’une variable


Une variable est un objet (conteneur) permettant de stocker une valeur (contenue)
pouvant changer. La déclaration d’une variable est introduite par le mot-clé « variable » et
terminée par un point-virgule ( ;).
Variable identificateur : type ;
Exemple
Variable age : entier ;
Pour déclarer plusieurs variables, on met le mot-clé variable une seule fois.
Exemple 1 : Plusieurs variables de types différents
Variable Nom : chaine ;
Moyenne : reel ;
Sexe : caractere ;
Exemple 2 : Plusieurs variables de même type séparées par des virgules (,)
Variable Nom, Prenom, Filiere, Lieu_naissance : chaine ;
Moyenne, Volume_cylindre, Surface_cercle : reel ;
Rang : entier ;

Dr Guy MBATCHOU Page 13


Les éléments d’un algorithme

3 - Déclaration d’une constante


Une constante est un objet (conteneur) permettant de stocker une valeur (contenue)
inchangeable. La déclaration d’une constante est introduite par le mot-clé « constante » et
terminée par un point-virgule ( ;). Etant donné que la valeur de la constante ne peut pas changer,
il faut la préciser lors de la déclaration.
Constante identificateur = valeur ;
Exemple
Constante Pi = 3.14 Pesanteur =10 ;

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O22(100%)

Dr Guy MBATCHOU Page 14


Les éléments d’un algorithme

Objectif 2.3 : Associer des opérateurs aux


opérations

Pour aboutir à un résultat, on a besoin généralement besoin de réaliser des opérations


d’affectation, arithmétiques, trigonométriques, logiques, … entre les données du problème
posé.

1 - L’affectation
L’affection est une opération qui consiste à attribuer une valeur (contenu) à une variable
(conteneur). Son opérateur est le signe  utilisé ainsi :
identificateur  valeur ;
Exemple : Pour affecter la valeur 10 à la variable A, il faut écrire A 10 ;
Pour que l’affectation soit possible, il faut que la valeur ou la variable affectée soit de
même type ou le type de la valeur soit inclut dans le type de la variable (Exemple Entier et réel
ou caractère et chaîne de caractères).
A la place de la valeur, il est possible d’affecter une autre variable ou une constante ou
une expression (arithmétique, trigonométrique, …) sous réserve de la compatibilité des types.
Après affectation, la variable ayant reçu l’affection contiendra la valeur de la variable ou de la
constante ou le résultat de l’expression affectée.
Exemple :
A 8 ; La valeur A vaut la valeur 8
B A ; La valeur de B vaut 8 car B a reçu la valeur contenue dans A
C  15 ; La valeur C vaut la valeur 15
D  C + B ; La valeur de vaut 23
A  D * 2 ; A perd la valeur 8 pour la nouvelle qui est 46

Peut-on affecter une valeur à une autre valeur ? Pourquoi ?

2 - Les opérations arithmétiques


Les opérations arithmétiques restent classiques à savoir : l’addition (+), la soustraction
(-), la multiplication (*), la division (/), le modulo (%), etc.

3 - Les opérations relationnelles ou de comparaison


Ce sont des opérations de :
➢ Egalité : =
➢ Différence ou d’inégalité : <>
➢ Infériorité ou sens stricte : <

Dr Guy MBATCHOU Page 15


Les éléments d’un algorithme

➢ Infériorité au sens large : <=


➢ Supériorité au sens stricte : >
➢ Supériorité au sens large : >=

4 - Les opérations logiques ou booléennes


➢ La conjonction logique : ET (voir les propriétés à
https://fr.wikipedia.org/wiki/Conjonction_logique)
➢ La disjonction logique : OU (voir les propriétés à
https://fr.wikipedia.org/wiki/Disjonction_logique)
➢ La négation logique : NON (voir les propriétés à
https://fr.wikipedia.org/wiki/N%C3%A9gation_logique)

5 - Autres opérations
La concaténation dont l’opérateur est &, permet de coller 2 chaînes de caractères.
Exemple : 'Université' & 'Publique' donnera 'UniversitéPublique'

6 - La communication entre l’homme et l’ordinateur


L’homme (utilisateur) a besoin de communiquer avec l’ordinateur et cela se fait au
travers des unités d’entrée (clavier, souris, micro, …) et des unités de sortie (écran, baffle,
imprimante, …). Dans le cadre de ce cours, nous n’utiliserons que le clavier comme unité
d’entrée et l’écran comme unité de sortie. Vous verrez comment utiliser les autres unités dans
le cadre des autres cours.
6.1 - L’affichage des données
L’affichage est l’opération qui permet à l’ordinateur de restituer les données qu’il
contient via son écran ; ainsi l’utilisateur pourra le lire. Son opérateur est ecrire() s’utilisant
ainsi :
Ecrire('Bonjour à tous') ; Affichage du message « Bonjour à tous »
A 5 ;
Ecrire(A) ; Affichage de « 5 » représentant la valeur de A
Ecrire('Le carrée de', A, ' vaut ', A*A) ; Affichage du message « Le carrée de 5 vaut 25 »
L’affichage d’une variable A peut être matérialisée comme l’affectation à un utilisateur
le contenu de la variable A.

A
6.2 - La lecture des données

Dr Guy MBATCHOU Page 16


Les éléments d’un algorithme

La lecture est l’opération qui permet à l’ordinateur de prendre les données via le clavier ;
ainsi l’utilisateur entre les données dans l’ordinateur. Son opérateur est lire() s’utilisant ainsi :
Lire(A) ; à condition que A soit une variable
La lecture d’une variable A peut-être matérialisée comme l’affectation à la variable A,
ce qui vient d’un utilisateur.

A
La lecture des données est une action bloquante jusqu’à ce que l’utilisateur saisisse la
donnée et la valide en appuyant sur le bouton « entrée ou Enter » du clavier.

Pourquoi dit-on que la lecture est une opération bloquante ?


Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O23(100%)

Dr Guy MBATCHOU Page 17


Les éléments d’un algorithme

Objectif 2.4 : Traduire une idée en instructions


algorithmiques

1 - Notion d’instruction
Une instruction est une commande (action à exécuter) qu’on passe à l’ordinateur dont
l’exécution produira un résultat.
En algorithmique, chaque instruction est terminée par un point-virgule à l’exception de
quelques qui seront précisées au et à mesure qu’on les verra.
Exemples
Instruction de déclaration de la variable Université comme chaîne de caractères
Variable Universite : chaine ;
Instruction d’affection de la chaîne de caractères UVS à la variable Université
Universite 'UVS' ;
Instruction de lecture du nom d’une universté
Lire(Universite) ;
Instruction de calcul et d’affectation dans la variable S, la surface d’un cercle de rayon
9
S  3.14 * 9 * 9 ;
Instruction d’affichage de la surface d’un cercle de rayon 9
Ecrire('La surface du cercle de rayon 9 vaut ', S) ;

2 - Notion de bloc d’instructions


Un bloc d’instruction est un ensemble d’instruction commençant par le mot-clé Debut
et se terminant par le mot-clé Fin suivi d’un point-virgule. Dans l’algorithme, le bloc
d’instructions sera considéré comme une seule instruction c’est-à-dire pour garder la cohérence
des données, il faut que toutes les instructions du bloc soient exécutées.
Syntaxe d’un bloc à n instructions
Debut
Instruction_1 ;
Instruction_2 ;

Instruction_n ;
Fin ;

Dr Guy MBATCHOU Page 18


Les éléments d’un algorithme

3 - Notion de commentaire
Quand vous lisez un livre, il arrive souvent que vous y fassiez des annotations à côté de
certains paragraphes. Ces annotations sont vos propres commentaires qui vous aideront à mieux
comprendre ce paragraphe ou à faire des liens avec d’autres paragraphes du même livre ou d’un
autre livre. Tout comme dans un livre, votre algorithme peut contenir des commentaires.
Un commentaire est une annotation que vous insérez dans votre algorithme pour faciliter
sa lecture et/ou sa compréhension.
Un commentaire doit être compris entre les accolades et peut être sur une ligne ou
plusieurs lignes.
Exemple : Algorithme d’addition de 2 entiers avec des commentaires
Algorithme Addition ; {Nom de l’algorithme}
Variable Nombre1, Nombre2, Somme : entier ; {Déclaration des variables}
Debut
Ecrire('Calcul de la somme de 2 entiers') ;
{Lecture des données}
Ecrire('Entrer le premier nombre') ;
Lire(Nombre1) ;
Ecrire('Entrer le second nombre') ;
Lire(Nombre2) ;
Somme  Nombre1 + Nombre2 ; {Réalisation de l’opération
d’addition}
Ecrire('La somme des 2 nombres entiers vaut ', Sommes) ; {Affichage
du résultat}
Fin.
Dans l’algorithme ci-dessus, les commentaires sont en couleur rouge et permettent de
comprendre ce que j’ai fait à chaque étape. Il y a beaucoup de commentaires, juste pour vous
montrer comment insérer des commentaires et par conséquent, vous n’êtes pas tenus d’y mettre
autant de commentaire. Tout comme lorsque vous lisez un livre, les commentaires ne dépendent
que de vous !

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O23(10%)


Seuil de validation : 70% Titre : Permutation de 2 variables Objectifs visés :
O23(30%)
Seuil de validation : 60% Titre : Lecture et affichage du produit de 2 réels
Objectifs visés : O23(50%)
Seuil de validation : 50% Titre : Hypoténuse d’un triangle rectangle Objectifs
visés : O23(80%)

Dr Guy MBATCHOU Page 19


Les éléments d’un algorithme

Objectif 2.5 : Utiliser les structures


alternatives ou structures
conditionnelles

Dans la vie, les tâches (actions) à réaliser ne se font pas de façon linéaire car certaines
sont soumises à des conditions. De même, dans la solution algorithmique d’un problème,
certaines instructions seront réalisées si des conditions sont satisfaites.
Exemple : Mauvais algorithme de la division de 2 entiers naturels
Algorithme Division ;
Variable Dividende, Diviseur : entier ;
Quotient : reel ;
Debut
Ecrire('Calcul du quotient de 2 entiers') ;
Ecrire('Entrer le Dividende') ;
Lire(Dividende) ;
Ecrire('Entrer le Diviseur') ;
Lire(Diviseur) ;
Quotient  Dividende / Diviseur ; {Problème ! Le quotient n’est pas
toujours calculable }
Ecrire('Le quotient de ', Dividende, ,' sur ', Diviseur ', vaut ', Quotient) ;
Fin.
Cet algorithme ne produira pas de résultat si le dénominateur est nul. De ce fait, il fallait
réaliser la division en tenant compte de la condition de nullité du dénominateur.

Etant donné que chaque algorithme produit un résultat, quel résultat sera
produit si le diviseur est nul ?
Il existe 2 structures conditionnelles permettant de faire des contrôles.

1 - La structure conditionnelle « SI »
La structure de contrôle « SI » permet de teste une condition (booléenne) et si la
condition est respectée, les instructions qui suivent sont exécutées. Au cas où la condition n’est
pas respectée (fausse), les instructions qui suivent le « Sinon » seront exécuter.
Syntaxe
Si condition Alors
Instruction(s) ;
Sinon
Instruction(s) ;
FinSi ;
Exemple : Bon algorithme de la division de 2 entiers naturels

Dr Guy MBATCHOU Page 20


Les éléments d’un algorithme

Algorithme Division ;
Variable Dividende, Diviseur : entier ;
Quotient : reel ;
Debut
Ecrire('Calcul du quotient de 2 entiers') ;
Ecrire('Entrer le dividende') ;
Lire(Dividende) ;
Ecrire('Entrer le diviseur ') ;
Lire(Diviseur) ;
Si Diviseur <> 0 Alors
Quotient  Dividende / Diviseur ;
Ecrire('Le quotient de ', Dividende, ,' sur ', Diviseur', vaut ',
Quotient) ;
Sinon
Ecrire('Erreur ! La division n’est pas possible car le diviseur est
nul') ;
FinSi ;
Fin.
S’il y’a plusieurs conditions à combiner (avec des opérateurs logiques OU, ET et NON),
il est recommandé d’utiliser les parenthèses pour mieux formuler votre condition finale.
Attention : Il ne faut jamais mettre un point-virgule après « Alors » et « Sinon ».
Il est possible de ne pas avoir la partie « Sinon » en fonction de la solution au problème.
Exemple : Algorithme permettant de calculer et d’afficher la valeur absolue d’un
nombre
Algorithme ValeurAbsolue ;
Variable Nombre, Resultat : reel ;
Debut
Ecrire('Calcul de la valeur absolue d’un nombre') ;
Ecrire('Entrer le nombre') ;
Lire(Nombre) ;
Resultat  Nombre ;
Si Nombre < 0 Alors
Resultat  Resultat * (-1) ;
FinSi ;
Ecrire('La valeur absolue de ', Nombre, ' = ', Resultat) ;
Fin.

2 - La structure conditionnelle « Selon Que »


La structure de contrôle « Selon que » permet de réaliser des instructions en fonction
des cas de valeurs (d’une variable ou d’une expression) que vous auriez précisé.

Dr Guy MBATCHOU Page 21


Les éléments d’un algorithme

Syntaxe
Selon Que variable vaut
Cas Valeur_1 :
Instruction ;
Cas Valeur_2 :
Instruction ;

Cas Valeur_N :
Instruction ;
Sinon
Instruction ;
FinSelonQue ;
Exemple : Algorithme de lecture d’un d’entier naturel inférieur à 10 et affichage en lettre
Algorithme Chiffre_Vers_Lettres ;
Variable Nombre : entier ;
Debut
Ecrire('Ecriture en lettres d’un entier compris entre 0 et 9') ;
Ecrire('Entrer le nombre entier') ;
Lire(Nombre) ;
Selon que Nombre vaut
Cas 0 : Ecrire('zéro') ;
Cas 1 : Ecrire('un') ;
Cas 2 : Ecrire('deux') ;
Cas 3 : Ecrire('trois') ;
Cas 4 : Ecrire('quatre') ;
Cas 5 : Ecrire('cinq') ;
Cas 6 : Ecrire('six') ;
Cas 7 : Ecrire('sept') ;
Cas 8 : Ecrire('huit') ;
Cas 9 : Ecrire('neuf') ;
Sinon Ecrire('Le nombre saisi n’est pas un chiffre') ;
FinSelonQue ;
Fin.
Si dans un cas, il faut plusieurs instructions, il faut mettre un bloc d’instructions.
La partie « Sinon » peut être omise si elle n’est pas nécessaire.

Algorithme de lecture d’un d’entier naturel inférieur à 10 et affichage en lettre


en utilisant la structure « Si »

3 - L’imbrication des structures conditionnelles


Il est possible d’insérer au sein d’une structure de contrôle, n’importe quelle structure
de contrôle. Cette imbrication peut se faire à plusieurs niveaux.

Dr Guy MBATCHOU Page 22


Les éléments d’un algorithme

Exemple : Lecture d’un entier ; si le nombre est positif et inférieur à 10 alors afficher en
lettres. S’il est positif et supérieur à 9 alors afficher le reste de la division par 9. S’il est négatif
alors afficher sa valeur absolue.
Algorithme Imbrication_strucures_conditonnelles ;
Variable Nombre, Resultat : entier ;
Debut
Ecrire('Entrer le nombre entier') ;
Lire(Nombre) ;
Si Nombre >=0 Alors
Si Nombre < 10 Alors
Selon que Nombre vaut
Cas 0 : Ecrire('zéro') ;
Cas 1 : Ecrire('un') ;
Cas 2 : Ecrire('deux') ;
Cas 3 : Ecrire('trois') ;
Cas 4 : Ecrire('quatre') ;
Cas 5 : Ecrire('cinq') ;
Cas 6 : Ecrire('six') ;
Cas 7 : Ecrire('sept') ;
Cas 8 : Ecrire('huit') ;
Cas 9 : Ecrire('neuf') ;
FinSelonQue ;
Sinon
Resultat = Nombre % 9 ;
Ecrire('Le reste de la division par 9 de ', Nombre, ' = ',
Resultat) ;
FinSi ;
Sinon
{Il est possible d’afficher un résultat sans le stocker dans une
variable}
Ecrire('La valeur absolue de ', Nombre, ' = ', -1*Nombre) ;
FinSi ;
Fin.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O25(30%)


Seuil de validation : 60% Titre : Résistance d’un circuit Objectifs visés : O25(75%)
Seuil de validation : 60% Titre : Calcul du maximum de 3 valeurs avec variable
d’aide Objectifs visés : O25(60%)
Seuil de validation : 60% Titre : Calcul du maximum de 3 valeurs sans variable
d’aide Objectifs visés : O25(60%)
Seuil de validation : 60% Titre : Equation du second degré avec solutions
complexes Objectifs visés : O25(75%)

Dr Guy MBATCHOU Page 23


Les éléments d’un algorithme

Objectif 2.6 : Utiliser les structures itératives ou


répétitives

Lors de la résolution d’un problème, il existe souvent des actions (instructions) qu’il
faut répéter un certain nombre de fois pour garantir la solution. Lors de la répétition, soit on sait
à l’avance le nombre de répétitions (itérations), soit on connait la ou les conditions de poursuite
ou d’arrêt de l’itération.
En algorithmique, il existe des structures itératives ou répétitives classiquement
appelées boucles pour réaliser la répétition des instructions.

1 - La boucle « Pour »
La boucle « Pour » est utilisée lorsqu’on connait à l’avance le nombre d’itérations à
faire. Par exemple, dans un problème de lecture de 100 nombres et affichage de leur moyenne,
on connait exactement le nombre de fois qu’on va lire le nombre, c’est 100 !
Syntaxe
Pour compteur  Valeur_initiale à Valeur_finale faire
Instructions() ;
FinPour ;
A chaque itération, le compteur est incrémenté (ajouté) de 1.
Exemple : Algorithme de lecture, calcul et affichage de la moyenne de 100 entiers
Algorithme Moyenne_de_100_entiers ;
Variable Nombre, Compteur : entier ;
Moyenne : réel ; {La variable moyenne contiendra le résultat}
Debut
Moyenne 0 ; {Initialisation de la variable à 0 car 0 est l’élément
neutre de l’addition}
Pour compteur 1 à 100 faire
Ecrire('Entrer un nombre entier') ;
Lire(Nombre) ;
Moyenne  Moyenne + Nombre ; {Addition des nombres lues
dans la variable Moyenne pour avoir la somme}
FinPour ;
Moyenne  Moyenne /100 ; {Division de la somme des nombres lues
par 100 pour avoir la moyenne}
Ecrire('La moyenne des 100 nombres lus ', ' = ', Moyenne) ;
Fin.
Vous avez dû remarquer que nous n’avons pas déclarer 100 variables pour résoudre le
problème. Si certains pensent qu’ils peuvent déclarer 100 variables, que feront-ils lorsqu’il
s’agira des milliers voire millions de données ?

Dr Guy MBATCHOU Page 24


Les éléments d’un algorithme

Avec la boucle Pour, on avance de pas de 1. Il est possible de préciser le pas


d’avancement (positif) ou pas de recul (négatif) avec la syntaxe suivante :
Pour compteur  Valeur_initiale à Valeur_finale Pas Valeur_Pas faire
Instructions() ;
FinPour ;
Exemple : Affichage des nombres de 10 à 1 de pas 2
Pour compteur  10 à 1 Pas -2 faire
Ecrire(i) ;
FinPour ;

2 - La boucle « Tant Que »


La boucle « Tant que » est utilisée lorsqu’on ne connait pas à l’avance le nombre
d’itérations à faire. En revange, il faut connaître la condition de poursuite de l’itération. Avant
de faire l’itération, il faut s’assurer du respect de la condition.
Syntaxe
Tant Que conditon faire
Instructions() ;
FinTantQue ;
Exemple : Algorithme de lecture des nombres jusqu’à ce que la somme soit négative
Algorithme Somme_Negative ;
Variable Nombre, Somme : réel ;
Compteur : entier ;
Debut
Compteur 0 ;
Somme 0 ; {Initialisation des variables à 0 car 0 est l’élément
neutre de l’addition}
Tant Que Somme >=0 faire
Ecrire('Entrer un nombre') ;
Lire(Nombre) ; {Le nombre lu peut négatif, positif ou nul}
Somme  Somme + Nombre ;
Compteur  Compteur +1 ;
FinTantQue ;
Ecrire('Le nombre de nombres lus pour avoir une somme négative vaut',
Compteur) ;
Fin.

3 - La boucle « Repeter … Jusqu’à »


La boucle « Repeter J’usqu’a » est utilisée lorsqu’on ne connait pas à l’avance le nombre
d’itérations à faire. En revange, il faut connaître la condition de poursuite de l’itération. Après
chaque itération, il faut s’assurer du respect de la condition avant de poursuivre l’itération.

Dr Guy MBATCHOU Page 25


Les éléments d’un algorithme

Syntaxe
Repeter
Instructions() ;
Jusqu’à condition ;
Exemple : Algorithme de lecture des nombres jusqu’à lecture d’un nombre négatif
Algorithme Lecture_suite_nombres_positifs ;
Variable Nombre : réel ; {Pour être général, il faut déclarer le nombre
comme un réel et non un entier}
Debut
Repeter
Ecrire('Entrer un nombre') ;
Lire(Nombre) ;
Jusqu’à Nombre < 0 ;
Fin.
Il est possible d’imbriquer n’importe quelle boucle dans n’importe quelle autre. De plus,
un algorithme écrit avec la boucle « Pour », peut être réécrit par avec la boucle « Tant Que » et
« Repeter … Jusqu’à » mais l’inverse est impossible. Pourquoi ?
Un algorithme écrit avec la boucle « Repeter … Jusqu’à » peut être réécrit avec la boucle
« Tant Que » et inversement.

Pourquoi un algorithme écrit avec la boucle « Tant Que » et « Repeter …


Jusqu’à » ne peut pas être écrit avec la boucle « Pour » ?
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O26(20%)
Seuil de validation : 70% Titre : Calcul du factoriel avec la boucle Pour Objectifs
visés : O26(30%)
Seuil de validation : 70% Titre : Calcul du factoriel avec la boucle Repeter
Objectifs visés : O26(30%)
Seuil de validation : 70% Titre : Calcul du factoriel avec la boucle Tant Que
Objectifs visés : O26(30%)
Seuil de validation : 70% Titre : Puissance d’un nombre Objectifs visés : O26(40%)
Seuil de validation : 70% Titre : Série harmonique Objectifs visés : O26(40%)
Seuil de validation : 70% Titre : Suite de nombres Objectifs visés : O26(40%)

Dr Guy MBATCHOU Page 26


La gestion des données dans un tableau

Séquence 3 : La gestion
des données dans un
tableau

Dr Guy MBATCHOU Page 27


La gestion des données dans un tableau

Objectif 3.1 : Décrire un tableau

1 - Nécessité
Imaginez-vous un algorithme devant stocker les notes des étudiants puis faire des
opérations (moyenne, rang, classement, …). Comment feriez-vous s’il y a 500 étudiants ? Il est
presque impossible de déclarer 500 variables ! Si certains pensent qu’ils sont capables de faire
cet effort, que feront-ils lorsqu’il s’agira d’un problème avec des milliers voire des millions de
variables ?
Or les variables que nous avons manipulées jusqu’à présent ne peuvent contenir qu’une
valeur à la fois. Il est donc nécessaire d’avoir une variable pouvant contenir plusieurs valeurs à
la fois. Ce type de variable s’appelle tableau.

2 - Définition
Un tableau est une structure de données (type de données) permettant de stocker
plusieurs valeurs de même type de façon contiguë dans une seule variable.
Un tableau est caractérisé par :
➢ Sa borne inférieure : indice minimal ou numéro minimal du tableau
➢ Sa borne supérieure : indice maximal ou numéro maximal du tableau
➢ Sa dimension : nombre d’indices permettant d’accéder à l’une des valeurs du tableau
➢ Son type de données : type de données des valeurs devant être contenues dans le tableau
La taille du tableau est le nombre maximal de valeurs que le tableau peut contenir à la
fois et est obtenue selon la formule suivante :
Taille tableau = Borne supérieure – Borne inférieure +1
Bien qu’il soit possible de déclarer un tableau de taille 1, cela n’est pas pertinent.

Pourquoi dans la formule de calcul de la taille d’un tableau, il faut ajoute 1 ?

3 - Déclaration

3.1 - Tableau de dimension 1


Syntaxe
Variable NomVariable : Tableau[BorneInf…BorneSup] de TypeDonnees ;
Taille d’un tableau de dimension 1
Taille = BorneSup– BorneInf +1

Dr Guy MBATCHOU Page 28


La gestion des données dans un tableau

Exemple
Variable V1 : Tableau[1…90] de entier ;
V2 : Tableau[0...57] de reel ;
V3 : Tableau[-23...68] de chaine ;
3.2 - Tableau de dimension 2
Syntaxe
Variable NomVariable : Tableau[BorneInf1...BorneSup1, BorneInf2...BorneSup2] de TypeDonnees ;
Taille d’un tableau de dimension 2
Taille = (BorneSup1– BorneInf 1+1) x (BorneSup2– BorneInf2 +1)
Exemple
Variable M1 : Tableau[1...90, 1…60] de entier ;
M2 : Tableau[0...10, -7...65] de reel ;
M3 : Tableau[1...90, 1...60] de caractere ;

Donnez les déclarations d’une matrice carrée, d’une matrice uniligne et une
matrice unicolonne
3.3 - Tableau de dimension 3 ou plus
Syntaxe
Variable NomVariable : Tableau[BorneInf1 ... BorneSup1, BorneInf2 ... BorneSup2,
BorneInf3 ... BorneSup3] de TypeDonnees {Tableau de dimension 3}
Taille d’un tableau de dimension 2
Taille = (BorneSup1– BorneInf 1+1) x (BorneSup2– BorneInf2 +1) x (BorneSup3– BorneInf3 +1)
Exemple
Variable T : Tableau[1...20, 1...6, 1...35] de caractere ; {Tableau de dimension 3}
Q : Tableau[0…9, -7...5, 19...34, -11...-4] de reel ; {Tableau de dimension 4}
C : Tableau[-16…9, 21...56, -1...1, 0...17, 13...68] de booleen ; {Tableau de dimension 5}
3.4 - Déclaration de type de données
La déclaration d’un tableau est relativement longue. Pour éviter de répéter à tout
moment cette longue suite de caractères lors de la déclaration, il est possible de déclarer (créer)
un nouveau type de données basé sur le tableau.
La déclaration (création) d’un nouveau type de données (structure de données) se fait
avec le mot clé type selon la syntaxe suivante :
Type NomType = Tableau[BorneInf…BorneSup] de TypeDonnees ;

Dr Guy MBATCHOU Page 29


La gestion des données dans un tableau

Exemple : Déclaration de type de données basé sur un tableau de dimension 1


Type Vecteur = Tableau[1…90] de entier ;
Dans ce cas, « Vecteur » n’est pas une variable mais un type de données au même titre
que les entiers, réels, booléens, caractères et chaînes de caractères. Ainsi, il devient possible de
déclarer une variable de type « Vecteur » ainsi :
Variable V1, V2, A, G : Vecteur ;
On déclare une seule fois le type dans un algorithme et on l’utilise autant qu’on le veut.
Attention : Une variable ne doit pas avoir le même nom qu’un type déclaré !
3.5 - Déclaration des bornes d’un tableau comme des constantes
Pour éviter de manipuler des valeurs, il est souvent préférable d’utiliser des
identificateurs. Etant donné que la taille du tableau doit être connue lors de sa déclaration, il
faut déclarer ses bornes comme des constantes.
Exemple 1 : Borne avec des constantes
Constante BorneInf = 1, BorneSup = 10 ;

Type Vecteur = Tableau[BorneInf…BorneSup] de entier ;

Variable V1, V2, A, G : Vecteur ;


Exemple 2 : Borne avec des expressions
Constante Borne = 10 ;

Type Vecteur = Tableau[Borne … 2 * Borne] de entier ;

Variable V1, V2, A, G : Vecteur ;

4 - Notion de case ou de cellule


Pour stocker plusieurs valeurs à la fois, le tableau dispose des cases ou cellules. La
cellule ou case est l’unité atomique d’une variable de type tableau et à ce titre, elle ne peut
contenir qu’une seule valeur à la fois.
4.1 - Tableau de dimension 1
Soit la déclaration de la variable V :
Variable V : Tableau[1...10] de entier ;
La variable V est schématisée ainsi :
V
1 2 3 4 5 6 7 8 9 10
Pour accéder à la case d’indice « i », il faut écrire « V[i] ».

Dr Guy MBATCHOU Page 30


La gestion des données dans un tableau

4.2 - Tableau de dimension 2


Soit la déclaration de la variable M :
Variable M : Tableau[1...5, 1…10] de reel ;
La variable M est un tableau à 5 lignes et 10 colonnes schématisée ainsi :
M 1 2 3 4 5 6 7 8 9 10
1
2
3
4
5
Pour accéder à la case de la ligne « i » et colonne « j », il faut écrire « M[i, j] ».

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O31(100%)

Dr Guy MBATCHOU Page 31


La gestion des données dans un tableau

Objectif 3.2 : Parcourir un tableau de dimension 1

Parcourir un tableau revient à passer dans ses cases (toutes ou quelques-unes en fonction
de ce qu’on veut). Pour parcourir un tableau, même si sa taille est relativement faible, il faut
utiliser une boucle.

1 - Parcours en lecture
Le parcours en lecture consiste à lire des données et les mettre dans les différentes cases
du tableau.
Algorithme Lecture_Tableau_Diension_1 ;
Variable T = Tableau[31...89] de reel ;
Nombre : reel ;
i :entier ;
Debut
Ecrire('Lecture ou saisie des données dans le tableau') ;
Pour i  31 à 89 faire
Ecrire('Entrer un nombre réel') ;
Lire(Nombre) ;
T[i]  Nombre ;
{Il est possible de combiner la lecture et l’affectation en une seule
instruction Lire(T[i])}
FinPour ;
Fin.

2 - Parcours en écriture
Le parcours en écriture consiste à afficher à l’écran les données contenues dans un
tableau.

Dr Guy MBATCHOU Page 32


La gestion des données dans un tableau

Algorithme Affichage_Tableau_Diension_1 ;
Constante BorneInf = 23, BorneSup = 247
Type Vecteur = Tableau[BorneInf ... BorneSup] de reel ;
Variable V : Vecteur ;
Nombre : reel ;
i :entier ;
Debut
Ecrire('Affichage des données du tableau') ;
Pour i  BorneInf à BorneSup faire
Nombre  V[i] ;
Ecrire('La valeur à la position ', i, ' vaut ', Nombre) ;
{Il est possible de combiner l’affectation et l’affichage en une
seule instruction Ecrire(V[i])}
FinPour ;
Fin.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O32(20%)


Seuil de validation : 50% Titre : Lecture des données et calcul de la moyenne et la
variance Objectifs visés : O32(40%)
Seuil de validation : 50% Titre : Lecture des données et affichage des données de
cases paires Objectifs visés : O32(40%)
Seuil de validation : 50% Titre : Lecture des données et affichage des données
impaires Objectifs visés : O32(40%)
Seuil de validation : 50% Titre : Lecture des données et affichage des données
supérieures à la moyenne Objectifs visés : O32(70%)

Dr Guy MBATCHOU Page 33


La gestion des données dans un tableau

Objectif 3.3 : Réaliser des opérations dans un


tableau de dimension 1

1 - Recherche d’un élément


Pour rechercher un élément ou une valeur dans un tableau de dimension 1, il faut se
positionner au début du tableau, le parcourir en comparant le contenu de chaque case avec la
valeur recherchée. Dès qu’il y a égalité alors on a trouvé et on s’arrête. La recherche s’arrête
soit parce qu’on a trouvé l’élément recherché soit parce qu’il n’existe pas. Pour conclure que
l’élément n’existe pas, il faut tester toutes les valeurs du tableau.
Exemple : Algorithme de recherche d’une valeur dans un tableau à 1 dimension
Algorithme Recherche_Valeur_Dans_Tableau_Diension_1 ;
Constante BorneInf = 23, BorneSup = 247
Type Vecteur = Tableau[BorneInf … BorneSup] de reel ;
Variable V : Vecteur ;
ValeurCherchee : reel ;
i :entier ;
Trouver : booleen ;

Debut
Ecrire('Recherche d’une valeur dans le tableau') ;
{On suppose que le tableau contient déjà des valeurs sinon, il faudra
les lire}
Ecrire('Donner la valeur à chercher') ;
Lire(ValeurCherchee) ;
Trouver  Faux ; {Normal car on n’a pas trouvé puisqu’on n’a pas
encore commencé la recherche}

i  BorneInf ; {La recherche débute à la première case}


Tant Que (Non Trouver) ET (i <= BorneSup) faire
{Non Trouver est équivalent à « Trouver = Faux »}
Si V[i] = ValeurCherchee Alors
Trouver  Vrai ;
Sinon {J’avance}
i  i+1 ;
FinSi ;
FinTantQue ;
{On sort de la boucle soit parce qu’on a trouvé (Trouver=Vrai), soit
parce que on est hors du tableau (i > BorneSup). Pour savoir ce qui a

Dr Guy MBATCHOU Page 34


La gestion des données dans un tableau

entraîné la sortie de la boucle, il faut tester à nouveau l’une de


conditions de la boucle pour décider}
Si Touver = Vrai Alors
Ecrire('La valeur recherchée existe dans le tableau') ;
Sinon
Ecrire('La valeur recherchée n’existe pas dans le tableau') ;
FinSi ;
Fin.

2 - Comptage du nombre d’occurrences d’un élément


Pour compter le nombre d’occurrences (nombre d’apparitions) d’un élément dans un
tableau de dimension 1, il faut parcourir le tableau du début jusqu’à la fin. A chaque cellule, si
sa valeur correspond à l’élément recherché, il faut incrémenter le nombre d’occurrence.
Initialement, le nombre d’occurrences doit être à 0 car on n’a pas encore trouvé dû au fait que
le comptage n’a pas encore commencé.
Algorithme Comptage_Valeur_Dans_Tableau_Diension_1 ;
Constante BorneInf = 23, BorneSup = 247
Type Vecteur = Tableau[BorneInf ... BorneSup] de reel ;
Variable V : Vecteur ;
Valeur : reel ;
i, Occurrence :entier ;

Debut
Ecrire('Comptage du nombre d’occurrences d’une valeur dans le
tableau') ;
{On suppose que le tableau contient déjà des valeurs sinon, il faudra
les lire}
Ecrire('Donner la valeur à compter ses occurrences') ;
Lire(Valeur) ;
Occurrence  0 ; {0 est l’élément neutre de l’addition. De plus on a
pas encore trouvé une occurrence}

Pour i BorneInf à BorneSup faire


Si V[i] = Valeur Alors
Occurrence  Occurrence + 1 ;
FinSi ;
FinTantQue ;
Ecrire('Le nombre d’occurrences de ', Valeur, ' = ', Occurrence) ;
Fin.

Dr Guy MBATCHOU Page 35


La gestion des données dans un tableau

3 - Les chaînes de caractères comme tableau


Une chaîne de caractères étant une suite finie et contigüe de caractères peut être
manipulée comme un tableau à 1 dimension contenant des caractères. Il existe quelques
fonctions et opérateurs pour :
➢ La concaténation de 2 chaînes de caractères : &
➢ Le calcul de la longueur d’une chaîne de caractères : longueur()
Lorsque vous déclarez une variable de type chaîne de caractères, en algorithmique, on
suppose que cette variable peut contenir autant de caractères qu’on le désire. En
programmation, ce n’est pas le cas car par défaut, une chaîne de caractères contient au plus 255
caractères.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O33(10%)


Seuil de validation : 70% Titre : Lecture des données et affichage de la dernière
occurrence d’une valeur Objectifs visés : O33(30%)
Seuil de validation : 60% Titre : Extraction d’une sous-chaîne de début Objectifs
visés : O33(30%)
Seuil de validation : 60% Titre : Extraction d’une sous-chaîne de fin Objectifs
visés : O33(30%)
Seuil de validation : 60% Titre : Extraction d’une sous-chaîne d’une plage donnée
Objectifs visés : O33(30%)
Seuil de validation : 60% Titre : Recherche de la position de début d’une sous-
chaîne dans une chaîne de caractères Objectifs visés : O33(70%)
Seuil de validation : 40% Titre : Comptage du nombre d’occurrences d’une sous-
chaîne dans une chaîne de caractères Objectifs visés : O33(90%)

Dr Guy MBATCHOU Page 36


La gestion des données dans un tableau

Objectif 3.4 : Organiser les données dans un


tableau de dimension 1 non plein

1 - Notion de « Tableau non plein »


Les opérations réalisées précédemment sur les tableaux sont faites en considérant que
toutes ses cases ont des données : ce qui est irréaliste !
Dans la réalité, lorsque nous voulons stocker un ensemble d’informations ou d’objets,
nous choisissons un conteneur ayant une capacité égale au nombre maximal d’informations.
Par exemple, si nous avons une bibliothèque d’une capacité de 15 000 livres cela ne signifie
pas qu’à tout moment, nous aurons 15 000 livres disponibles puisqu’il y a des emprunts.
Pour les humains, il semble évident, d’un coup d’œil dans la bibliothèque pour savoir
s’il y a des places vides (bibliothèque non pleine). Mais pour l’ordinateur, le vide n’existe pas !
Car chaque variable déclarée contient automatiquement une valeur même si vous ne la
connaissez (Ne dit-on pas que la nature a horreur du vide !). Il se pose donc un problème de
reconnaissance des places vides. Pour y parvenir, il faut donc définir la notion de vide.
Le vide sera défini comme une « non information » c’est-à-dire une information qui ne
nous appartient pas et ne doit pas être prise en compte.

2 - Marquage des cellules vides


Pour matérialiser le fait qu’une case sot vide, vous verrez 2 techniques.
2.1 - Technique des éléments contigus dans le tableau
Dans cette technique, il est question de stocker les valeurs de façon contigüe (continue)
dans le tableau de telle manière que les cases pleines (cases contenant de vraies valeurs) soient
en début du tableau et les cases vides (cases contenant de fausses valeurs) soient à la fin du
tableau.
Avec cette technique, il faut absolument une variable que nous appellerons délibérément
Taille qui représente le nombre de valeurs dans le tableau.
Exemple
Soit un tableau de 10 entiers. Si le tableau contient 4 valeurs alors Taille = 4
4 0 -9 5 9 6 23 63 987 -32
1 2 3 4 5 6 7 8 9 10

Taille

Dr Guy MBATCHOU Page 37


La gestion des données dans un tableau

Les vraies valeurs à considérer sont 4, 0, -9, et 5 contenues dans les cases de 1 à 4. Les
cases de 5 à 10 sont considérées comme vides
2.2 - Technique du tableau à « trou »
Dans cette technique, il est question de stocker dans les cases vides une valeur
particulière qui appartient au domaine de valeurs mais pas au domaine de définition. Cette
valeur particulière est appelée Trou et permet de repérer toutes les case vides.
Exemples
➢ Si nous avons un tableau d’âges des étudiants à gérer, nous pouvons choisir zéro (0)
comme trou car aucun étudiant ne peut avoir un âge nul.
25 0 0 35 0 0 23 63 0 0
1 2 3 4 5 6 7 8 9 10
Le tableau ci-dessus contient 4 valeurs et 6 cases vides
➢ Si nous manipulons un tableau de noms d’unités d’enseignement, nous pouvons choisir
la chaîne '+++' comme trou car nous sommes sûrs qu’aucune unité d’enseignement
n’aura ce nom.
Donnez d’autres exemples où le tableau peut ne pas être plein et préciser la
valeur du trou

3 - Initialisation d’un tableau non plein


Après la déclaration d’un tableau non plein, il est important de l’initialiser comme un
tableau entièrement vide en fonction des techniques.
3.1 - Technique des éléments contigus dans le tableau
Avec cette technique, il suffit d’initialiser la variable Taille à 0 pour dire que le tableau
ne contient aucune valeur.
3.2 - Technique du tableau à « trou »
Avec cette technique, il faut mettre la valeur du trou dans toutes les cases du tableau.
Trou Trou Trou Trou Trou Trou Trou Trou Trou Trou
1 2 3 4 5 6 7 8 9 10

4 - Recherche d’un élément dans un tableau non plein

4.1 - Technique des éléments contigus dans le tableau


Il faudra chercher de la première case à la case correspondante à Taille.

Dr Guy MBATCHOU Page 38


La gestion des données dans un tableau

Algorithme Recherche_Valeur_Dans_Tableau_Diension_1_Non_Plein ;
Constante N = 250 {Taille du tableau }
Type Vecteur = Tableau[1 ... N] de reel ;
Variable V : Vecteur ;
ValeurCherchee : reel ;
I, Taille :entier ;
Trouver :booleen ;

Debut
Ecrire('Recherche d’une valeur dans le tableau') ;
{On suppose que Taille a une valeur qui représente le nombre
d’éléments dans le tableau}
Ecrire('Donner la valeur à chercher') ;
Lire(ValeurCherchee) ;
Trouver  Faux ;

i  1 ; {La recherche débute à la première case}


Tant Que (Non Trouver) ET (i <= Taille) faire {Recherche dans les
Taille premières case du tableau}
Si V[i] = ValeurCherchee Alors
Trouver  Vrai ;
Sinon
i  i+1 ;
FinSi ;
FinTantQue ;
Si Trouver = Vrai Alors
Ecrire('La valeur recherchée existe dans le tableau') ;
Sinon
Ecrire('La valeur recherchée n’existe pas dans le tableau') ;
FinSi ;
Fin.
4.2 - Technique du tableau à « trou »
Il faudra chercher dans tout le tableau car les cases vides (contenant le trou) peuvent
n’importe où.

Dr Guy MBATCHOU Page 39


La gestion des données dans un tableau

Algorithme Recherche_Valeur_Dans_Tableau_Diension_1_Non_Plein ;
Constante N = 250 {Taille du tableau }
Type Vecteur = Tableau[1 ... N] de reel ;
Variable V : Vecteur ;
ValeurCherchee, Trou : reel ; {Dans cet algorithme, le Trou n’a
aucune importance}
i :entier ;
Trouver :booleen ;

Debut
Ecrire('Recherche d’une valeur dans le tableau') ;
{On suppose que Taille a une valeur qui représente le nombre
d’éléments dans le tableau}
Ecrire('Donner la valeur à chercher') ;
Lire(ValeurCherchee) ;
Trouver  Faux ;

i  1 ; {La recherche débute à la première case}


Tant Que (Non Trouver) ET (i <= N) faire {Recherche dans tout le
tableau}
Si V[i] = ValeurCherchee Alors
Trouver  Vrai ;
Sinon
i  i+1 ;
FinSi ;
FinTantQue ;
Si Trouver = Vrai Alors
Ecrire('La valeur recherchée existe dans le tableau') ;
Sinon
Ecrire('La valeur recherchée n’existe pas dans le tableau') ;
FinSi ;
Fin.

Justifiez pourquoi la valeur du Trou n’a pas d’importance dans l’algorithme de


recherche d’une valeur dans un tableau non plein

5 - Insertion d’un élément dans un tableau


Avant d’insérer un élément dans un tableau, il faut s’assurer qu’il contient encore des
cases vides.
5.1 - Technique des éléments contigus dans le tableau
Il faut insérer de telle enseigne que les valeurs restent contigües dans le tableau. Pour
cela, il faut aller insérer la nouvelle valeur à la case Taille +1.

Dr Guy MBATCHOU Page 40


La gestion des données dans un tableau

Algorithme Insertion_Valeur_Dans_Tableau_Diension_1_Non_Plein ;
Constante N = 250 {Taille du tableau }
Type Vecteur = Tableau[1 ... N] de reel ;
Variable V : Vecteur ;
Valeur : reel ;
i, Taille :entier ;

Debut
Ecrire('Insertion d’une valeur dans le tableau') ;
{On suppose que Taille a une valeur qui représente le nombre
d’éléments dans le tableau}
Si Taille = N Alors
Ecrire('Le tableau est plein !') ;
Sinon
Ecrire('Entrer la valeur à insérer') ;
Lire(Valeur') ;
Taille  Taille + 1 ; {Augmentation du nombre de valeurs du
tableau}
V[Taille]  Valeur ;
FinSi ;
Fin.
5.2 - Technique du tableau à « trou »
Il faut chercher le premier trou et y insérer la valeur.

Dr Guy MBATCHOU Page 41


La gestion des données dans un tableau

Algorithme Insertion_Valeur_Dans_Tableau_Diension_1_Non_Plein ;
Constante N = 250 {Taille du tableau }
Type Vecteur = Tableau[1 ... N] de reel ;
Variable V : Vecteur ;
Valeur, Trou : reel ; {La valeur du Trou est définie en fonction du
problème}
i :entier ;
Trouver : booleen ;

Debut
Ecrire('Insertion d’une valeur dans le tableau') ;
{Recherche de la première case vide dans le tableau}
Trouver  Faux ;
i1;
Tant Que (Non Trouver) ET (i <= N) faire
Si V[i] = Trou Alors
Trouver  Vrai ;
Sinon
i  i+1 ;
FinSi ;
FinTantQue ;
Si Trouver = Vrai Alors
Ecrire('Donner la valeur à insérer') ;
Lire(Valeur) ;
V[i]  Valeur ;
Sinon
Ecrire('Le tableau est plein !') ;
FinSi ;
Fin.

6 - Suppression d’un élément dans un tableau

6.1 - Technique des éléments contigus dans le tableau


Il faut rechercher l’élément à supprimer dans le tableau. S’il existe à la position P alors
décaler d’un pas de la droite vers la gauche les éléments des positions comprises entre P+1 et
Taille.

Dr Guy MBATCHOU Page 42


La gestion des données dans un tableau

Algorithme Suppression_Valeur_Dans_Tableau_Diension_1_Non_Plein ;
Constante N = 250 {Taille du tableau }
Type Vecteur = Tableau[1 ... N] de reel ;
Variable V : Vecteur ;
Valeur : reel ;
i, j, Taille :entier ;
Trouver : booleen ;

Debut
Ecrire('Suppression d’une valeur dans le tableau') ;
{On suppose que Taille a une valeur qui représente le nombre
d’éléments dans le tableau}
Si Taille > 0 Alors {La suppression n’a un sens que si le tableau est
non vide}
Ecrire('Entre la valeur à supprimer') ;
Lire(Valeur') ;
{Recherche de la valeur à supprimer}
Trouver  Faux ;
i1;
Tant Que (Trouver = Faux) ET (i<=Taille) faire
Si V[i] = Valeur Alors
Trouver  Vrai ;
Sinon
i  i+1 ;
FinSi ;
FinTantQue ;
Si Trouver Alors
{La valeur existe et se trouve à la position i. Il faut décaler
la valeur de la position i+1 à la positon i ; ensuite décaler
celle de la position i+2 à la position i+1 ; ainsi de suite
jusqu’à la case Taille}
Pour j  i à Taille-1 faire
V[j]  V[j+1] ;
FinPour ;
Taille  Taille – 1 ; {Diminution de la Taille du tableau}
FinSi ;
FinSi ;
Fin.
6.2 - Technique du tableau à « trou »
Il faut rechercher l’élément à supprimer dans le tableau. S’il existe il faut insérer la
valeur du Trou à sa position.

Dr Guy MBATCHOU Page 43


La gestion des données dans un tableau

Algorithme Suppression_Valeur_Dans_Tableau_Diension_1_Non_Plein ;
Constante N = 250 {Taille du tableau }
Type Vecteur = Tableau[1 ... N] de reel ;
Variable V : Vecteur ;
Valeur : reel ;
Trou : reel ;
i, j : entier ;
Trouver : booleen ;

Debut
Ecrire('Suppression d’une valeur dans le tableau') ;
{On suppose que les cases vides du tableau contiennent la valeur du
Trou}
Ecrire('Entre la valeur à supprimer') ;
Lire(Valeur') ;
{Recherche de la valeur à supprimer}
Trouver  Faux ;
i1;
Tant Que (Trouver = Faux) ET (i<=N) faire
Si V[i] = Valeur Alors
Trouver  Vrai ;
Sinon
i  i+1 ;
FinSi ;
FinTantQue ;
Si Trouver Alors
{La valeur existe et se trouve à la position i. Il faut insérer à la
position i la valeur du trou}
V[i]  Trou ; {Marquage de la case i comme vide}
FinSi ;
Fin.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O34(10%)


Seuil de validation : 70% Titre : Affichage des données d’un tableau non plein avec
la technique des éléments continus dans le tableau Objectifs visés : O34(30%)
Seuil de validation : 60% Titre : Affichage des données d’un tableau non plein avec
la technique des tableaux à trous Objectifs visés : O34(30%)
Seuil de validation : 60% Titre : Lecture des données dans un tableau non plein
avec la technique des éléments continus dans le tableau Objectifs visés : O34(30%)
Seuil de validation : 50% Titre : Lecture des données dans un tableau non plein
avec la technique des tableaux à trous Objectifs visés : O34(30%)

Dr Guy MBATCHOU Page 44


La gestion des données dans un tableau

Objectif 3.5 : Parcourir un tableau de dimension 2


ou plus

Le parcours des tableaux de dimension 2 se fait ligne par ligne ou colonne par colonne.

1 - Parcours en lecture d’un tableau de dimension 2


Ce parcours se fera ligne par ligne c’est-à-dire lorsqu’on est sur une ligne on lit les
données de toutes les colonnes avant de passer à la ligne suivante.
Algorithme Lecture_Tableau_Diension_2 ;
Constante BorneInf1 = 9, BorneSup1 = 35, BorneInf2 = 50, BorneSup2 = 78;
Type Matrice = Tableau[BorneInf1 ... BorneSup1, BorneInf2...BorneSup2] de reel ;
Variable M : Matrice;
Nombre : reel ;
i, j :entier ; {i permet de parcourir les lignes et j permet de parcourir les
colonnes}
Debut
Ecrire('Lecture ou saisie des données dans le tableau') ;
Pour i  BorneInf1 à BorneSup1 faire
Pour j  BorneInf2 à BorneSup2 faire
Ecrire('Entrer le nombre de la ligne', i, ' et de la colonne ', j) ;
Lire(Nombre) ;
M[i, j]  Nombre ;
{Il est possible de combiner la lecture et l’affectation en une seule
instruction Lire(M[i, j])}
FinPour ;
FinPour ;
Fin.

2 - Parcours en écriture d’un tableau de dimension 2


Ce parcours se fera colonne par colonne c’est-à-dire lorsqu’on est sur une colonne on lit
les données de toutes les lignes avant de passer à la colonne suivante.

Dr Guy MBATCHOU Page 45


La gestion des données dans un tableau

Algorithme Affichage_Tableau_Diension_2 ;
Constante Ligne = 19, Colonne = 21; {Nombre de ligne et colonnes du tableau}
Type Matrice = Tableau[1 … Ligne, 1 … Colonne] de reel ;
Variable M : Matrice;
Nombre : reel ;
i, j :entier ; {i permet de parcourir les colonnes et j permet de parcourir les
lignes}
Debut
Ecrire('Affichage des données du tableau') ;
Pour i  1 à Colonne faire
Pour j  1 à Ligne faire
Ecrire('Valeur de la ligne', i, ' et de la colonne ', j) ;
Nombre  M[j, i] ;
Ecrire(Nombre) ;
{Il est possible de combiner l’affectation et l’affichage en une seule
instruction Ecrire(M[j, i])}
FinPour ;
FinPour ;
Fin.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O35(10%)


Seuil de validation : 30% Titre : Test de matrice nulle Objectifs visés : O35(40%)
Seuil de validation : 30% Titre : Test de matrice identité Objectifs visés : O35(40%)
Seuil de validation : 30% Titre : Test de matrice triangulaire supérieure Objectifs
visés : O35(50%)
Seuil de validation : 30% Titre : Multiplication scalaire d’une matrice Objectifs
visés : O35(70%)
Seuil de validation : 30% Titre : Addition de 2 matrices Objectifs visés : O35(40%)
Seuil de validation : 30% Titre : Multiplication de 2 matrices Objectifs visés :
O35(40%)

Dr Guy MBATCHOU Page 46


Les algorithmes de tri dans un tableau de dimension 1

Séquence 4 : Les
algorithmes de tri dans un
tableau de dimension 1

Dr Guy MBATCHOU Page 47


Les algorithmes de tri dans un tableau de dimension 1

Objectif 4.1 : Décrire la notion de tri

Le tri est une opération qui consiste à ordonner les données selon un ordre voulu. Cela
implique qu’il existe une relation d’ordre entre les éléments à trier.
Les relations d’ordre sont :
➢ L’égalité : =
➢ L’infériorité stricte :<
➢ L’infériorité au sens large : <=
➢ La supériorité stricte : >
➢ La supériorité au sens large : >=
➢ La différence : <>

Le tri peut se faire dans l’ordre croissant ou dans l’ordre décroissant.


Une suite de n éléments (x1, x2, …, xn) est triée dans l’ordre croissant si :
 1 ≤ i ≤ n ;  1 ≤ j ≤ n Si i < j Alors xi ≤ xj.
Une suite de n éléments (x1, x2, …, xn) est triée dans l’ordre décroissant si :
 1 ≤ i ≤ n ;  1 ≤ j ≤ n Si i < j Alors xi ≥ xj.
Dans le cas des tableaux à 1 dimension, la donnée xi est remplacée par T[i] si le tableau
est nommé T.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O41(100%)

Dr Guy MBATCHOU Page 48


Les algorithmes de tri dans un tableau de dimension 1

Objectif 4.2 : Ecrire des algorithmes de tri

Les différents algorithmes ci-dessous trieront les données du tableau dans l’ordre
croissant. Il vous reviendra de les adapter s’il faut trier dans l’ordre décroissant.

1 - Le tri par Sélection


On parcourt le tableau à la recherche du plus petit élément que l’on permutera avec
l’élément de la première position (à la fin de cette étape, le plus petit élément du tableau est à
la position 1 ; il reste à trier les n-1 éléments restants).
Pour les n-1 éléments à trier, on les parcourt à la recherche du plus petit élément que
l’on permutera avec l’élément de la seconde position (les 2 premiers éléments sont triés et il
reste à trier les n-2 restants).
On reprend le même procédé pour les n-2 éléments restants puis les n-3 éléments,
ensuite les n-4 jusqu’à ce qu’il manque 1 élément à trier. Il va de soi que ce dernier élément est
le plus grand élément du tableau : Le tableau est ainsi trié !
Algorithme Tri_Selection;
Constante N = 100;
Type Vecteur = Tableau[1 … N] de reel ;
Variable
T : Vecteur;
i, j, PositionMininum : entier;
tampon : reel;
Debut
Pour i  1 à N-1 faire
PositionMininum  i;
Pour j  i+1 à N faire
Si T[PositionMinimum] > T[j] Alors
{Permutation des valeurs des positions PositionMinimum et j}
tampon  T[PositionMinimum] ;
T[PositionMinimum]  T[j] ;
T[j]  tampon ;
FinSi ;
FinPour;
FinPour;
Fin.
La variable PositionMinimum peut être supprimée de l’algorithme et remplacée par i
car il a toujours la même valeur que i.

Dr Guy MBATCHOU Page 49


Les algorithmes de tri dans un tableau de dimension 1

2 - Le tri par Insertion


On suppose que les i premiers éléments sont triés et les n-i restants pas encore. On
choisit le i+1ème élément qu’on va insérer au bon emplacement parmi les i premiers éléments
triés de tel sorte que les i+1 premiers éléments du tableau soient triés.
On répètera ce procédé pour l’élément de position i+2 puis i+3 jusqu’à l’élément de
position n.
Initialement, on supposera que seul le premier élément est trié.
Pour insérer un élément dans parmi ceux trier, on fera un décalage droit des éléments
triés jusqu’à trouver le bon emplacement des éléments à insérer pour garantir que le tout reste
trié.
Algorithme Tri_Insertion;
Constante N = 100;
Type Vecteur = Tableau[1 … N] de chaine ;
Variable
T : Vecteur;
i, j : entier;
Element_a_Positionner : chaine;
Debut
Pour i  2 to N faire
Element_a_Positionner  T[i];
j  i-1;
Tant Que (j>0) ET (Element_a_Positionner < T[j]) faire
T[j+1]  T[j];
j  j-1;
FinTantQue;
T[j+1]  Element_a_Positionner ;
FinPour;
Fin.
La variable Element_a_Positionner peut-être supprimée de l’algorithme et remplacer
par T[i] puisqu’elle est toujours égale à T[i].

3 - Le tri à Bulles
Le principe consiste à parcourir le tableau de la gauche vers la droite en comparant deux
éléments consécutifs ; si celui de gauche est plus grand que celui de droite (T[i] < T[i+1]) alors
on les permute. Cela revient à faire remonter le plus grand élément à la fin du tableau (position
n). On reprend la remontée du plus grand élément jusqu’à l’avant dernière position (n-1) du
tableau. On reprend le processus jusqu’à la position (n-2) du tableau. Ainsi les éléments du
tableau des positions n-2, n-1 et n sont triés dans le tableau. Le processus sera repris jusqu’à la
position 1.

Dr Guy MBATCHOU Page 50


Les algorithmes de tri dans un tableau de dimension 1

3.1 - Version initiale


Cette version implémente l’algorithme dans son expression la plus simple sans
amélioration ou optimisation.
Algorithme Tri_Bulles;
Constante N = 100;
Type Vecteur = array[1 … N] de caractere;
Variable
T : Vecteur;
i, j: entier;
tampon : caractere;
Debut
Pour i  N-1 à 1 Pas -1 faire {Aller de N-1 à 1 en décrémentant de 1}
Pour j 1 à i faire
Si T[j] > T[j+1] Alors
tampon T[j] ;
T[j]  T[j+1] ;
T[j+1]  tampon ;
FinSi ;
FinPour;
FinPour;
Fin.
3.2 - Version améliorée
Etant donné qu’avec ce tri, il est question qu’à chaque parcours de remonter le plus
grand élément, il arrive souvent qu’après quelques itérations le tableau soit trié sans que le
processus ne soit terminé. On constate donc qu’avec la version initiale il y a des parcours ou
itération inutile ce qui rend l’algorithme lent et le temps de réponse important surtout si nous
avons à faire un très grand volume de données.
On utilisera la variable continuer de type booléen qui à chaque parcours permettra de
savoir si on a fait une permutation (si T[i]>T[i+1]). Si à un parcours, il n’y a pas eu de
permutation, cela veut dire que le tableau est déjà trié et on peut arrêter les parcours restants.
La variable position permet de délimiter l’intervalle ([1 … position]) de remontée du
plus grand élément que l’on positionnera à position+1.

Dr Guy MBATCHOU Page 51


Les algorithmes de tri dans un tableau de dimension 1

Algorithme Tri_Bulles;
Constante N = 100;
Type Vecteur = Tableau[1 … N] de caractere;
Variable
T : Vecteur;
i, position : entier;
tampon : caractere;
continuer : booleen;
Debut
position  N-1;
Repeter
continuer  Faux;
Pour i 1 à position faire
Si T[i] > T[i+1] Alors
Tampon  T[i] ;
T[i]  T[i+1] ;
T[i+1]  tampon ;
continuer  Vrai;
FinSi ;
FinPour;
position  position -1;
Jusqu’a continuer = Faux;
Fin.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O42(10%)


Seuil de validation : 40% Titre : Tri par ordre décroissant dans un tableau non
plein contenant des trous Objectifs visés : O42(50%)
Seuil de validation : 40% Titre : Tri par ordre décroissant dans un tableau non
plein à éléments continus Objectifs visés : O42(50%)

Dr Guy MBATCHOU Page 52


Les algorithmes de tri dans un tableau de dimension 1

Objectif 4.3 : Analyser l’intérêt du tri des


données

Quand nous devons chercher une donnée dans un tableau, on doit parcourir le tableau
du début à la fin dans l’espoir de retrouver ce que nous cherchons. Mais si les données étaient
triées alors plus besoin de parcourir entièrement le tableau car si la donnée cherchée est par
exemple une valeur forte, il sera intéressant de la chercher à la fin du tableau et non à partir
début. Cela nous permet de réduire considérablement le temps de recherche.

1 - La recherche dichotomique
La recherche dichotomique consiste à diviser le tableau en 2 parties égales (si la taille
du tableau est impaire, l’une des parties aura une place de plus que l’autre).
Si la valeur recherchée est celle contenue dans la case au milieu du tableau alors on
arrête la recherche puisqu’on l’a déjà trouvé. Sinon si elle est inférieure à celle valeur du milieu,
il faut la rechercher dans la partie gauche du tableau. Si elle est plutôt supérieure à la valeur du
milieu, il faut la chercher dans la partie droite.

Dr Guy MBATCHOU Page 53


Les algorithmes de tri dans un tableau de dimension 1

Algorithme Recherche_Dichotomique;
Constante N = 100;
Type Vecteur = Tableau[1 … n] de chaine ;
Variable
V: Vecteur;
Val :chaine ; {val est la valeur à rechercher dans le tableau}
debut, fin, milieu : entier;
Trouver : booleen

Debut
Ecrire('Entrer la valeur à rechercher') ;
Lire(Val) ;
Trouver  faux ;
debut  1 ;
fin  N ;

Repeter
Milieu  (debut + fin) div 2 ; {div est l’opérateur de la division
entière}
Si V[milieu] = Val Alors
Trouver  vrai ;
Sinon
Si Val < V[milieu] Alors
fin  milieu – 1 ;
Sinon
debut  milieu + 1;
FinSi ;
FinSi ;
Jusqu’a (Trouver = vrai) OU (debut > fin) ;

Si Trouver = vrai Alors


Ecrire(Val, 'existe dans le tableau') ;
Sinon
Ecrire(val, 'n’existe pas dans le tableau'’) ;
FinSi ;
Fin.

2 - La recherche trichotomique
Ici, il est question de diviser le vecteur en trois parties et de rechercher dans la partie la
plus probable où la valeur peut se trouver.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O43(20%)


Seuil de validation : 40% Titre : Recherche trichotomique dans un tableau non
plein à éléments contigus Objectifs visés : O43(50%)
Seuil de validation : 40% Titre : Recherche trichotomique dans un tableau non
plein à trous Objectifs visés : O43(50%)

Dr Guy MBATCHOU Page 54


Les enregistrements

Séquence 5 : Les
enregistrements

Dr Guy MBATCHOU Page 55


Les enregistrements

Objectif 5.1 : Décrire un enregistrement

1 - Nécessité
Soit un programme où il est question de sauvegarder (stocker dans des variables) les
informations sur un étudiant. Pour simplifier, nous nous intéressons aux caractéristiques
suivantes d’un étudiant : nom, prénom, âge, sexe, niveau et filière d’études. Pour stocker donc
un étudiant, nous aurons besoin six (06) variables correspondant à ses six caractéristiques :
➢ 3 variables de type chaîne de caractères pour le nom, prénom et filière d’études ;
➢ 2 variables de type entier pour l’âge et le niveau d’études ;
➢ 1 variable de type caractère pour le sexe.
La difficulté vient du fait que d’une part pour déclarer un étudiant, il faut beaucoup de
variables (proportionnelles aux caractéristiques). Heureusement qu’il existe les tableaux
permettant de stocker plusieurs valeurs à la fois mais hélas, ces valeurs doivent être de même
type ; ce qui n’est pas le cas pour un étudiant. Il semble nécessaire de créer autant de variables
que de caractéristiques pour chaque étudiant. Imaginez-vous juste un algorithme avec 5
étudiants ; on aura donc au moins 30 (5x6) variables à gérer ! De plus, il est possible de se
tromper lors de la manipulation des variables et associer par exemple le nom d’un étudiant au
prénom d’un autre.
Pour résoudre ces problèmes, il serait intéressant d’avoir une structure permettant
d’encapsuler (englober) toutes les caractéristiques en un seul bloc indivisible. En algorithmique,
cette structure existe et s’appelle les enregistrements.

Donnez quelques exemples de données possédant des caractéristiques. Précisez


les caractéristiques et leur type

2 - Définition
Un enregistrement est une structure de données composée de caractéristiques pouvant
être de type différent.
Un enregistrement est utilisé si et seulement si l’information a au moins deux (02)
caractéristiques.

3 - Déclaration de variable de type enregistrement


La déclaration d’une variable de type enregistrement commence avec le mot
Enregistrement et se termine par Fin suivi d’un point-virgule.
Syntaxe de la déclaration d’une variable de type enregistrement

Dr Guy MBATCHOU Page 56


Les enregistrements

Variable NomVariable : Enregistrement


Champ1 : type1 ;
Champ2 : type2 ;

ChampN : typeN ;
Fin ;
L’ordre des champs ou caractéristiques est laissé à l’appréciation de l’algorithmicien.
Vous pouvez décider de regrouper les caractéristiques par type ou par sémantique ou par ordre
alphabétique ou selon des critères propres à vous. L’ordre des caractéristiques importe peu !
Exemple : Déclaration de 3 étudiants conformément aux simplifications précédentes
Variable e1, e2, e3 : Enregistrement
nom : chaine ;
prenom : chaine ;
age : entier ;
sexe :caractere ;
niveau : entier ;
filiere : chaine ;
Fin ;
e1; e2 et e3 sont trois variables de type enregistrement.
Si nous avons besoin de déclarer d’autres variables répondant aux mêmes spécifications
plus loin dans le programme, on sera obligé de mettre le mot clé Enregistrement puis
l’ensemble des caractéristiques et enfin le «Fin ; ». Cette façon de faire apporte des difficultés
suivantes :
➢ L’algorithme est inutilement plus long à cause des déclarations occupant beaucoup de
lignes
➢ Au moment de déclarer une autre variable plus loin, il peut arriver que nous ne
saisissions pas exactement l’une des caractéristiques ou que nous trompons sur le type
d’une caractéristique. Dans ce cas, les 2 seront considérer comme 2 types différents.
Toutes ces difficultés rendent la maintenance (correction ou évolution) de l’algorithme
difficile. Pour remédier à cette difficulté, il est conseillé de créer et de nommer votre nouveau
type. Lorsque vous voulez déclarer une variable correspondant à votre type, vous utiliserez le
nom de votre type et non la succession « Enregistrement - caractéristiques - types - Fin ; »

4 - Déclaration de type enregistrement


La déclaration d’un nouveau type est introduite par le mot clé type.

Dr Guy MBATCHOU Page 57


Les enregistrements

Type NomType = Enregistrement


Champ1 : type1 ;
Champ2 : type2 ;

ChampN : typeN ;
Fin ;
Exemple : Déclaration de 3 étudiants
Type Etudiant = Enregistrement
nom :chaine ;
prenom : chaine ;
age : entier ;
sexe :caractere ;
niveau : entier ;
filiere : chaine ;
Fin ;

Var e1, e2, e3 : Etudiant;


Dans cet exemple, Etudiant n’est pas une variable mais un type utilisateur (ou type
composé ou complexe) que vous avez créé. Par contre, e1, e2 et e3 sont des variables
appartenant au type Etudiant.
NB : Dans la déclaration d’un type, le nom du type est suivi du signe « = » alors que
dans la déclaration d’une variable, le nom de la variable est suivi de « : ».
En général, les types utilisateurs sont déclarés au début de l’algorithme vous permettant
de les utiliser sans les redéfinir puisqu’elle aura une portée globale à tout l’algorithme.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O51(30%)


Seuil de validation : 80% Titre : Déclaration d’un nombre complexe Objectifs
visés : O51(50%)
Seuil de validation : 80% Titre : Déclaration d’un nombre fractionnaire Objectifs
visés : O51(50%)

Dr Guy MBATCHOU Page 58


Les enregistrements

Objectif 5.2 : Utiliser un enregistrement

1 - Accès à un champ d’enregistrement

1.1 - Accès par nom composé


L’accès à un champ se fait à partir du nom de la variable suivi d’un point et enfin du
nom du champ.
NomVariable.NomChamp

Exemple
e1.age  25 ; {Affectation d’une valeur à un champ d’enregistrement}
Lire(e1.nom) ; {Lecture d’un champ d’enregistrement}
Ecrire(e1.prenom) ; {Affichage d’un champ d’enregistrement}
e1.niveau  e2.niveau {Affectation d’une valeur à un champ provenant du
même champ d’une autre variable}
Lors de la manipulation des enregistrements, vous devez le faire champ par champ car :

➢ les champs peuvent être de types différents ;

➢ même si les champs sont de même type, leur manipulation groupée (non champ par
champ) peut être sémantiquement incorrecte. Par exemple l’instruction e1 < e2 n’a pas
de sens car c’est à vous de programmer la comparaison de 2 étudiants en fonction des
critères bien définis.
Par contre, il est possible d’affecter à une variable de type enregistrement une autre
variable de même type.
Au lieu d’écrire :
e1.nom  e2.nom ;
e1.prenom  e2.prenom ;
e1.age  e2.age ;
e1.niveau  e2.niveau ;
e1.sexe  e2.sexe ;
e1.filiere  e2.filiere ;
On peut écrire :
e1  e2 ;
1.2 - Accès par l’instruction « Avec … Faire »
L’accès par l’instruction Avec … Faire nous permet d’éviter de préfixer le champ par
le nom de la variable.

Dr Guy MBATCHOU Page 59


Les enregistrements

Avec NomVariable Faire


NomChamp {instruction contenant le nom du champ}

FinAvec ;
Exemple
Avec e1 Faire
Age  25 ; {Affectation d’une valeur à un champ d’enregistrement}
Lire(nom) ; {Lecture d’un champ d’enregistrement}
Ecrire(prenom) ; {Affichage d’un champ d’enregistrement}
Niveau  e2.niveau {Affectation d’une valeur à un champ provenant
du même champ d’une autre variable}
FinAvec ;
Dans cet exemple, à la dernière instruction nous avons accédez au champ niveau de
l’étudiant 2 (e2) par nom composé car le with ne concerne que l’étudiant 1 (e1).

2 - Enregistrement d’enregistrements
Un enregistrement d’enregistrements est un enregistrement où au moins l’une de ses
caractéristiques est de type enregistrement. Rien n’empêche qu’une sous-caractéristique soit
aussi de type enregistrement.
Dans l’exemple de l’étudiant, au lieu de prendre en compte son âge, il est plus judicieux
de prendre en compte sa date de naissance. La date est un type composé de jour, mois et année.
Dans ce cas, le type Etudiant sera un enregistrement d’enregistrements et sera défini comme ci-
dessous.
Type
Date = Enregistrement
jour :entier;
mois :entier;{peut être déclaré comme une chaine}
annee :entier;
Fin ;
Etudiant = Enregistrement
nom :chaine ;
prenom : chaine ;
DateNaissance : Date ;
sexe :caractere ;
niveau :entier ;
filiere : chaine ;
Fin ;

3 - Opérations sur les enregistrements


Il n’est pas possible de lire ou écrire (afficher) un enregistrement en une seule instruction
comme les types simples. Il en est de même pour les opérations arithmétiques (addition,

Dr Guy MBATCHOU Page 60


Les enregistrements

soustraction, multiplication, division, …), logiques (conjonction, disjonction, implication, …)


et relationnelles (égalité, différence, supériorité, infériorité, …).
Variable e1, e2 : Etudiant ;
Lire(e1);{Impossible car Lire permet la lecture des valeurs de type simple}
Ecrire(e1);{Impossible car Ecrire permet l’affichage des valeurs de type simple}
Si e1 < e2 Alors Ecrire(‘inférieur’) FinSi ; {Impossible car aucune de relation
d’ordre n’est établie sur les étudiants}
e1  e2 ; {Possible car e1 et e2 sont de même type}
Pour lire, afficher ou comparer des enregistrements, vous devez écrire pour chacune de
ces opérations un ensemble d’instructions. Pour comparer deux enregistrements, il faut au
préalable définir une relation d’ordre. En exemple, sur quelle(s) base(s) ou critère(s) dira-t-on
qu’un étudiant est supérieur à l’autre ? Est-ce sur un critère d’âge ? de niveau ? de filière ? ou
de composition des critères ?
Algorithme Lecture_et_Affichage_Etudiant
Type
Date = Enregistrement
jour :entier;
mois :entier;{peut être déclaré comme une chaine}
annee :entier;
Fin ;
Etudiant = Enregistrement
nom :chaine ;
prenom : chaine ;
DateNaissance : Date ;
sexe : caractere ;
niveau :entier ;
filiere : chaine ;
Fin ;
Variable E : Etudiant ;

Debut
{Lecture d’un étudiant avec un accès en utilisant l’instruction Avec}
Avec E Faire
Ecrire('Lecture des données d’un étudiant') ;
Ecrire('Entrer le nom : ') ;
Lire(nom) ;
Ecrire(' Entrer le prénom : ') ;
Lire(prenom) ;
Ecrire(Entrer le jour de naissance : '') ;
Lire(DateNaissance.jour) ;
Ecrire(' Entrer le mois de naissance : ') ;
Lire(DateNaissance.mois) ;
Ecrire(' Entrer l’année de naissance : ') ;

Dr Guy MBATCHOU Page 61


Les enregistrements

Lire(DateNaissance.annee) ;
Ecrire(' Entrer le sexe :') ;
Lire(sexe) ;
Ecrire(' Entrer le niveau d’études : ') ;
Lire(niveau) ;
Ecrire(' Entrer la filière : ') ;
Lire(filiere) ;
FinAvec ;

{Affichage d’un étudiant avec un accès par nom composé}


Ecrire('Affichage des données d’un étudiant') ;
Ecrire('Prénom : ', E.prenom) ;
Ecrire('Nom : ', E.nom) ;
Ecrire('Sexe : ', E.sexe) ;
Ecrire('Date de naissance : ', E.DateNaissance.jour, '/',
E.DateNaissance.mois, '/', E.DateNaissance.annee) ;
Ecrire('Filière : ', E.filiere) ;
Ecrire('Niveau d’études : ', E.niveau) ;
Fin.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O52(30%)


Seuil de validation : 70% Titre : Lecture et affichage d’un nombre complexe
Objectifs visés : O52(30%)
Seuil de validation : 70% Titre : Lecture et affichage d’un nombre fractionnaire
Objectifs visés : O52(30%)
Seuil de validation : 50% Titre : Opérations arithmétiques sur les nombres
complexes Objectifs visés : O52(70%)
Seuil de validation : 50% Titre : Module, argument et expression conjuguée d’un
nombre complexe Objectifs visés : O52(40%)

Dr Guy MBATCHOU Page 62


Les algorithmes procéduraux ou modulaires

Séquence 6 : Les
algorithmes procéduraux
ou modulaires

Dr Guy MBATCHOU Page 63


Les algorithmes procéduraux ou modulaires

Objectif 6.1 : Décrire la notion de module

1 - Problématique
Jusqu’à présent, nous avons écrit nos algorithmes en un seul bloc. Dans certains
algorithmes, certaines parties se répètent ou sont très proches à l’exception généralement des
données manipulées. Ces parties peuvent être regroupées en un bloc clairement identifié pour
faciliter d’une part la visibilité de l’algorithme et d’autre part pour faciliter sa maintenance
(correction des bugs ou amélioration de la performance). L’idée est de n’écrire ce bloc qu’une
seule fois dans l’algorithme et chaque fois qu’on en a besoin, on l’appelle seulement.
En exemple, écrivons un algorithme résolvant 2 équations du second degré.
L’algorithme se présentera comme suit :
Le bloc en bleu représente la
{Résolution de la première équation}
lecture des coefficients et s’écrit en au
Lecture des coefficients
moins 6 instructions. Il en est de même du
Calcul du discriminant
bloc en jaune. Or les instructions dans
Calcul et affichage des solutions chacun des blocs bleus sont identiques à

{Résolution de la seconde équation}


l’exception des variables manipulées.
Il serait intéressant de regrouper et
Lecture des coefficients
d’écrire une seule fois chaque bloc de
Calcul du discriminant
couleur bleue, verte et jaune. Et chaque
Calcul et affichage des solutions
fois que l’on veut résoudre une équation,
il faut seulement appeler le bloc sans plus
le réécrire. Ce regroupement permettra de réduire le nombre d’instructions et de rendre le
programme facilement lisible et modifiable (maintenance).
Un ensemble d’instructions encadré par « Debut » et « Fin ; » est appelé bloc
d’instructions et non un module. Pour être appelé module, l’ensemble d’instructions doit avoir
un nom et si nécessaire une liste finie de variables (paramètres) dont on décidera de la valeur
lors de l’appelle du module.

2 - Définition
Un module est une suite finie d’instructions ordonnée à laquelle on attribue un nom et
une liste de paramètres qui peut éventuellement être vide.

Dr Guy MBATCHOU Page 64


Les algorithmes procéduraux ou modulaires

Un algorithme modulaire est un algorithme dans lequel certaines instructions sont


regroupées en module.
Un algorithme contenant au moins un module est modulaire. En revanche, il est
recommandé dans un algorithme modulaire d’écrire la plupart des instructions dans des
modules. De ce fait, votre algorithme sera un ensemble de blocs (modules) dont le résultat
dépendra de leur agencement. L’algorithme vu comme un agencement de modules est plus
lisible et facile à comprendre qu’un algorithme où toutes les centaines voire milliers de lignes
d’instructions sont en un seul bloc. En cas de disfonctionnement d’un module dû à des erreurs
qui y sont contenues, l’algorithmicien ne se contentera de modifier que le module sans se
soucier de sa répétitivité (son appel) dans tout l’algorithme. Si l’algorithme n’est pas modulaire,
il faut identifier les instructions erronées, les corriger et ensuite, parcourir les autres instructions
à la recherche des instructions similaires afin de les corriger. Il peut arriver que certaines
instructions soient similaires mais sans toutefois appartenir à un module. Dans ce genre de
situation, en modifiant les instructions similaires, vous résolvez un problème mais en créant
d’autres. D’où la nécessité d’écrire dès à présent des algorithmes modulaires.
Un algorithme modulaire offre les avantages suivants :

➢ La modularité : une décomposition ascendante ou descendante du problème en sous-


problème.

➢ La réutilisabilité : un module peut être réutilisé dans un autre algorithme car il permet
de résoudre un sous-problème précis. Donc un module peut être utilisé dans tous les
algorithmes où ce sous-problème est identifié.

➢ La récursivité : un module peut s’appeler lui-même de façon directe ou indirecte d’où


la récursivité.
Un module correspondant à une portion de l’algorithme n’est pas forcément autonome
mais est compréhensible, analysable et intégrable dans un autre module ou algorithme. En fait,
un module ne peut pas s’exécuter tout seul, il a besoin d’être appelé par un autre module (qui
peut être lui-même dans le cadre de la récursivité) ou par l’algorithme principal.
Chaque module doit être bien commenté pour que son utilisateur comprenne son
contexte d’utilisation (conditions d’entrée, résultats attendus, objectifs, …)

3 - Structure d’un module


Un module est un « sous-algorithme » car il a une structure similaire à celle d’un
algorithme comme présenté ci-dessous.

Dr Guy MBATCHOU Page 65


Les algorithmes procéduraux ou modulaires

Module NomDuModule ;
Variable
variable1 : type1 ;

variableP : typeP ;
Début
instruction1 ;
instruction2 ;

instructionN ;
Fin ;
Un module contient :

➢ une entête comportant en une ligne :


✓ le mot clé module qui introduit le module et permet de le différencier d’un
algorithme.
✓ un nom respectant les règles de définition d’un identificateur.
✓ une liste éventuellement vide de paramètres avec leur type respectif

➢ une partie de déclaration des variables qui contient la liste des variables et leur type.
Ces variables sont dites locales au module. En général, il n’est pas conseiller de déclarer
de nouveau type dans le module sauf si dans l’algorithme, ce type ne sera utilisé que par
ce module. Cette partie peut être vide et au cas où elle ne l’est pas, elle est introduite par
le mot clé « type » pour les nouveaux types et le mot clé « variable » pour les variables
locales.

➢ un corps contenant un ensemble d’instructions commençant par Début et se terminant


par Fin. Un module se termine par un point-virgule « ; » contrairement à un algorithme
qui se termine par un point « . ».

4 - Notion de procédure et de fonction


Tout module à la fin de son exécution produit un résultat (pas forcément une valeur)
mais il arrive souvent que l’on n’ait pas besoin de la valeur des résultats dans la suite
d’exécution de son algorithme. Une différence est faite entre les modules qui renvoient un
résultat et ceux qui ne le renvoient pas. Une procédure est un module qui ne revoit pas de
résultat alors qu’une fonction est un module qui renvoie toujours un résultat (une valeur).
Renvoyer un résultat ne signifie pas l’afficher mais il est question de retourner dans une
variable la valeur du résultat qui sera exploité à d’autre fins.
Exemples :

Dr Guy MBATCHOU Page 66


Les algorithmes procéduraux ou modulaires

➢ Module permettant de calculer le salaire d’un employé est une fonction car après le
calcul, il faut retourner la valeur du salaire pour une utilisation ultérieure. Par contre si
on demande un module de calcul et d’affiche du salaire d’un employé, il s’agira d’une
procédure car le résultat (salaire) est affiché et non retourné pour une quelconque
utilisation.

➢ Module pour le tri des données est une procédure car après le tri, on ne renvoie pas
les données triées et le commanditaire du tri verra que le travail est bel et bien fait.

➢ Module d’insertion ou de suppression d’une donnée dans un ensemble est une


procédure.

➢ Module de calcul de la moyenne ou somme des valeurs d’un ensemble est une fonction
car il faudra retourner la valeur de la moyenne ou de la somme.

Donnez des exemples de modules et justifiez s’ils sont des procédures ou des
fonctions
4.1 - Structure d’une procédure
Bien qu’une procédure ne revoie pas de résultat, cela ne veut pas dire qu’elle ne produit
pas un résultat.
Procedure NomProcedure ;
Variable
variable1 : type1 ;

variableP : typeP ;
Début
instruction1 ;
instruction2 ;

instructionN ;
Fin ;
Exemple : Procédure permettant de lire le nom d’une personne et de lui dire bonjour
Procedure Salutation ;
Variable
nom : chaine de caractères ;
Début
ecrire(‘Veuillez saisir votre nom : ‘) ;
lire(nom) ;
ecrire(‘Bonjour ‘, nom) ;
Fin ;
Le résultat de cette procédure est de prodiguer un message de salutation mais elle ne
renvoie pas de valeur même pas le nom lu, mais l’affiche.

Dr Guy MBATCHOU Page 67


Les algorithmes procéduraux ou modulaires

4.2 - Structure d’une fonction


Contrairement à la mathématique où une fonction peut retourner plusieurs valeurs, en
algorithmique, une fonction ne peut retourner qu’une seule valeur.
Fonction NomFonction : TypeValeurResultat ;
Variable
variable1 : type1 ;

variableP : typeP ;
resultat : TypeValeurResultat ;
Début
instruction1 ;
instruction2 ;

instructionN ;

NomFonction  resultat ;
Fin ;
Pour renvoyer un résultat, on doit affecter le résultat au nom de la fonction. Cela veut
dire que dans la liste des variables locales, il faut absolument une variable qui doit contenir le
résultat obtenu par combinaison des opérateurs arithmétiques ou logiques des variables locales
ou globales.
Fonction CalculAge : entier ; Fonction CalculAge : entier ;
Variable Variable
annee_en_cours, annee_naissance : entier ; annee_en_cours, annee_naissance, age :
Debut entier ;
ecrire(‘Programme de calcul d’âge’) ; Debut
ecrire(‘Donner l’année courante :’) ; ecrire(‘Programme de calcul d’âge’) ;
lire(annee_en_cours) ; ecrire(‘Donner l’année courante :’) ;
ecrire(‘Donner votre année de naissance’) ; read(annee_en_cours) ;
lire(annee_naissance) ; lire(‘Donner votre année de naissance’) ;
lire(annee_naissance) ;
CalculAgeannee_en_cours – annee_naisance ; ageannee_en_cours – annee_naisance ;
Fin ; CalculAge age ;
Fin ;
Fonction sans variable contenant le résultat. Fonction avec variable contenant le
Ici, le résultat est renvoyé sans besoin d’être résultat. Ici, le résultat est d’abord stocké
stocké dans une variable résultat dans la variable age avant d’être renvoyé
Intégrons à présent la procédure Salutation et la fonction CalculAge dans un algorithme.
Algorithme Salutation_et_Calcul_Age;

{Définition de la procédure Salutation}


Procedure Salutation;

Dr Guy MBATCHOU Page 68


Les algorithmes procéduraux ou modulaires

Variable nom : chaine;


Debut
ecrire('Veuillez saisir votre nom : ');
lire(nom);
ecire('Bonjour ', nom);
Fin;

{Définition de la fonction CalculAge}


Fonction CalculAge() : entier;
Variable annee_en_cours, annee_naissance, age : entier;
Debut
ecrire('Programme de calcul d"âge');
ecrire('Donner l"année courante :');
lire(annee_en_cours) ;
ecrire('Donner votre année de naissance') ;
lire(annee_naissance) ;
age  annee_en_cours - annee_naissance ;

CalculAge  age ;
Fin;

{Déclaration des variables de l’algorithme principal}


VARIABLE : MonAge : entier;

{Début de l’agorithme principal}


DEBUT
Salutation; {appel de la procédure Salutation}
MonAge  CalculAge; {appel de la fonction CalculAge et affectation
du résultat dans la variable MonAge}
ecrire('Votre age est de : ', MonAge);
FIN.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O61(100%)

Dr Guy MBATCHOU Page 69


Les algorithmes procéduraux ou modulaires

Objectif 6.2 : Identifier les paramètres d'une


fonction, leurs catégories et
portées

1 - Problématique
Jusqu’à présent, tous les modules écrits ne sont pas paramétrés ! Cela veut dire que ces
modules ont tout le nécessaire pour réaliser leur tâche sans intervention de celui qui l’exécute.
Or si nous prenons la fonction CalculAge écrite précédemment, celui qui vous demande de
calculer son âge ne sera pas présent lorsque vous le ferez or dans la fonction CalculAge, il y a
une instruction qui lui demande de saisir son année de naissance. Que faire ?
Avant de commencer l’exécution de la fonction ou de la procédure, l’algorithmicien doit
s’assurer qu’il dispose tout le nécessaire pour le faire. La question qu’il faut se poser pour
trouver les paramètres d’une fonction ou procédure est la suivante : De quoi ai-je besoin de
celui qui passe la commande de la fonction ou procédure pour la réaliser ?
Dans notre exemple, si vous voulez que je calcule votre âge, j’ai absolument besoin
que vous me donniez votre date de naissance (pour simplifier dans l’exemple, nous avons
demandé seulement l’année de naissance). Ce n’est pas à vous de donner à l’algorithmicien
l’année courante. Cette date de naissance est appelée paramètre pour la fonction CalculAge car
la valeur de retour de la fonction dépend de la valeur du paramètre. Dans le cas d’une procédure
le résultat produit dépendra de la valeur du paramètre.

2 - Définition de paramètre
Un paramètre est une variable mise à l’entrée d’un module dont sa valeur conditionne
le résultat que produira ce module.
Lorsqu’un module (procédure ou fonction) contient au moins un paramètre, il est dit
paramétré.
La syntaxe d’un module paramétré est la suivante :
Module NomModule(parametre1 : type1, .parametre2 : type2, .…, parametreN : typeN)
Nous avons vu précédemment qu’un module est écrit soit comme une procédure soit
comme une fonction.
La syntaxe d’une fonction paramétrée est la suivante :
Fonction NomFonction(type1 parametre1, …, typeN parametreN) : typeValeurDeRetour
La syntaxe d’une procédure paramétrée est la suivante :

Dr Guy MBATCHOU Page 70


Les algorithmes procéduraux ou modulaires

Fonction NomProcedure(type1 parametre1, …, typeN parametreN) :


Une fonction ou procédure peut comporter plusieurs paramètres pourvu qu’ils soient de
noms différents. Evidemment, il faudrait aussi que la sémantique des paramètres soit différente.
C’est-à-dire qu’il ne sert à rien de mettre par exemple 2 paramètres de noms différents qui
jouent le même rôle. Pour chaque paramètre, il faut préciser son type de données. Les
paramètres sont séparés par des virgules « , ».
En reprenant l’exemple précédent, nous nous rendons compte que la procédure
Salutation et la fonction CalculAge doivent être paramétrées. La procédure doit avoir un
paramètre de type chaîne de caractères pour représenter le nom tandis que la fonction doit avoir
un paramètre de type entier pour représenter une année de naissance.
Algorithme Salutation_et_Calcul_Age;
{Définition de la procédure paramétrée Salutation}
Procedure Salutation(nom : chaine);{nom est le paramètre de la procédure Salutation}
Debut
ecrire('Bonjour ', nom);
Fin;

{Définition de la fonction paramétrée CalculAge}


Fonction CalculAge(annee_naissance : entier) : entier;{annee_naissance est le paramètre de
la fonction CalculAge}
Variable
Age, annee : entier; {La variable annee permet de stocker l’année courante}
Debut
writeln('Programme de calcul d"âge');
{En fonction des langages de programmation, il existe des fonctions pour avoir la date
courante. Etant donné que nous ne sommes pas en programmation, on supposera que
nous avons par un coup de baguette magique l’année courante dans la variable annee}
age := annee - annee_naissance ;
CalculAge := age ;
Fin;

{Déclaration des variables de l’algorithme principal}


VARIABLE
MonNom : string;
MonAge, MonAnneeNaissance : entier;

{Début de l’algorithme principal}


DEBUT
ecrire('Veuillez saisir votre nom : ');
lire(MonNom);
Salutation(MonNom); {appel de la procédure Salutation avec le paramètre MonNom}
ecrire('Donner votre année de naissance') ;
lire(MonAnneeNaissance) ;

Dr Guy MBATCHOU Page 71


Les algorithmes procéduraux ou modulaires

MonAge  CalculAge(MonAnneeNaissance); {appel de la fonction CalculAge avec le


paramètre MonAnneeNaissance et retour du résultat dans la variable MonAge}
ecrire('Votre age est de : ', MonAge);
FIN.

3 - Les catégories de paramètres


Les paramètres sont désignés différemment selon leur emplacement dans le code source.
Le code source est l’ensemble des instructions d’un algorithme.
3.1 - Les paramètres formels ou variables formelles
Un paramètre formel est une variable utilisée lors de l’écriture (définition) du module.
Il n’a pas d’existence réelle et ne sert qu’à définir l’expression du module comme c’est le cas
en mathématique où lorsque écrit f(x), x n’est qu’un paramètre pour exprimer f.
Exemple : f(x)=3x²+8x-1

Entête de la fonction Factoriel


Entête de la fonction PPMC
Entête de la fonction PGCD
Entête de la fonction Puissance (puissance entière)
Entête de la fonction calculant le nième terme de la suite de Fibonacci
3.2 - Les paramètres effectifs ou variables effectives
Un paramètre effectif est une variable ou valeur utilisée lors de l’appel du module. Cette
variable a une existence réelle car elle est déclarée dans l’algorithme et réside en mémoire.
En mathématique, on peut calculer f(4) ou calculer f(p) avec p=4. Dans le premier cas,
le paramètre est une valeur alors que dans le second cas, c’est une variable.

4 - Appel des procédures et fonctions


L'appel d'une procédure ou fonction se fait en donnant son nom, puis les valeurs de ses
paramètres entre parenthèses. S’il n’y a pas de paramètre, vous pouvez omettre les paraenthèses.
Exemple :
afficheAlea ; {Appel de la procédure d’affichage d’un nombre aléatoire}
delta  discriminant(5, 6, 3) ; {Appel de la fonction calcul du discriminant avec 3 paramètres }

5 - Portée d’une variable


En fonction de la position de sa déclaration dans le code source, une variable peut avoir
une portée locale ou une portée globale. La portée de la variable exprime son accessibilité par
l’algorithme principal ou par un module (fonction ou procédure).

Dr Guy MBATCHOU Page 72


Les algorithmes procéduraux ou modulaires

5.1 - Les variables locales


Une variable a une portée locale (variable locale) dans les cas suivants :

➢ Elle est déclarée dans un module (fonction ou procédure) : variable locale au module.

➢ Elle est déclarée juste avant le début d’algorithme principal : variable locale à
l’algorithme principal.

➢ Elle est un paramètre d’un module : un paramètre d’un module est une variable locale
à ce module.
5.2 - Les variables globales
Une variable a une portée globale (variable globale) lorsqu’elle est déclarée hors d’un
module et avant ce module. Ainsi, on peut avoir des variables qui sont globales à certains
modules mais non accessibles aux autres.
Exemple
Algorithme Portée_des_variables;

VARIABLE A : entier;

Procedure Procedure1;
Variable x : entier;
Debut
...
Fin;

VARIABLE B : entier;

Fonction Fonction1() : entier;


Variable y : entier;
Debut
...
Fin;

VARIABLE C : entier;

Fonction Fonction2() : entier;


Variable z : entier;
Debut
...
Fin;

VARIABLE D : entier;

Dr Guy MBATCHOU Page 73


Les algorithmes procéduraux ou modulaires

Procedure Procedure2;
Debut
...
Fin;

VARIABLE E : entier;

{Début du programme principal}


DEBUT
...
FIN.

➢ La variable A est globale à tout l’algorithme

➢ La variable B est globale à Fonction1, Fonction2, procédure2 et l’algorithme principal

➢ La variable C est globale à Fonction2, procédure2 et l’algorithme principal

➢ La variable D est globale à procédure2 et l’algorithme principal

➢ La variable E est locale à l’algorithme principal

➢ La variable x est locale à Procédure1

➢ La variable y est locale à Fonction1

➢ La variable z est locale à Fonction2


5.3 - Conflit entre variable locale et variable globale
Deux variables sont en conflit dans une portion du code (algorithme) lorsqu’elles sont
déclarées avec le même nom et type et sont accessibles par cette portion de code.
En général, il s’agit d’un conflit entre une variable locale et une variable globale car la
déclaration de deux variables ayant dans le même nom et même type dans un module ou
l’algorithme principal est interdite.
En cas de conflit, la variable locale l’emporte sur la variable globale c’est-à-dire que
c’est le contenu de la variable locale qui sera utilisé au lieu du contenu de la variable globale.
Attention : l’utilisation des variables globales doit être évitée au maximum et ne doit se
justifier que si elle ne peut pas être déclarée autrement.
Si vous déclarez une variable globale accessible par un module et que vous oubliez de
déclarer la variable locale alors qu’elle est nécessaire, la variable globale sera utilisée à sa
place : ce qui rendra vos résultats probablement faux.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O62(20%)


 Vrai

Dr Guy MBATCHOU Page 74


Les algorithmes procéduraux ou modulaires

Seuil de validation : 60% Titre : Module de calcul itératif du factoriel Objectifs


visés : O6240%)
Seuil de validation : 60% Titre : Module de calcul itératif de la puissance
Objectifs visés : O6240%)
Seuil de validation : 60% Titre : Module d’affichage de la table de multiplication
Objectifs visés : O6240%)
Seuil de validation : 50% Titre : Module de calcul itératif du PPMC Objectifs
visés : O6240%)
Seuil de validation : 50% Titre : Module de calcul itératif du PGDC Objectifs
visés : O6240%)

Dr Guy MBATCHOU Page 75


Les algorithmes procéduraux ou modulaires

Objectif 6.3 : Différencier les modes de passage


d’un paramètre à un module

Lorsqu’on utilise un paramètre dans un module, on dit qu’on passe le paramètre au


module. Ce passage peut se faire de façons différentes en fonction du comportement du module
sur le contenu de la variable.

1 - Passage par valeur


Un paramètre est passé par valeur lorsque le module ne modifie pas le contenu du
paramètre. C’est-à-dire qu’il n’existe aucune instruction dans le module capable de modifier le
contenu du paramètre. Dans tous les exemples vus précédemment, les paramètres sont passés
par valeur puisque dans le corps du module, aucune instruction ne permet de modifier le
paramètre.

Entête du module permettant d’afficher le contenu d’un tableau de dimension


1
Entête du module qui compte le nombre d’occurrence d’un caractère dans un
texte.
Entête du module qui affiche la table de multiplication d’une valeur.
Entête du module qui affiche un rectangle

2 - Passage par adresse ou par référence


Un paramètre est passé par adresse si le module peut modifier le contenu du paramètre.
Dans ce cas, il existe au moins une instruction qui permet de changer le contenu du paramètre
par affection.
Pour qu’un paramètre soit passé par adresse ou référence ou variable, il faut qu’il soit
précédé par le mot clé « variable ». Chaque paramètre passé par adresse doit être précédé par
« variable » (Pas un seul « variable » pour plusieurs paramètres !)

Entête du module de tri dans l’ordre croissant de 3 valeurs réelles


Entête du module qui prend en entrée 4 valeurs entières et retourne le minorant
et le majorant sans modifier les valeurs initiales
Entête du module qui supprime d’un texte, un caractère particulier.
Entête du module permettant de lire les données et stockées dans un tableau
de dimension 1
Entête du module permettant d’initialiser un vecteur par une valeur
particulière
Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O63(20%)

Dr Guy MBATCHOU Page 76


Les algorithmes procéduraux ou modulaires

Seuil de validation : 80% Titre : Module de lecture des données dans un tableau
Objectifs visés : O63(40%)
Seuil de validation : 80% Titre : Module d’affichage des données d’un tableau
Objectifs visés : O63(40%)
Seuil de validation : 80% Titre : Module de lecture des données d’un étudiant
Objectifs visés : O63(40%)
Seuil de validation : 80% Titre : Module d’affichage des données d’un étudiant
Objectifs visés : O63(40%)
Seuil de validation : 80% Titre : Module de tri des données d’un tableau Objectifs
visés : O63(40%)
Seuil de validation : 80% Titre : Module d’affichage du calcul du minorant et
majorant de 4 nombres Objectifs visés : O63(40%)
Seuil de validation : 80% Titre : Module d’initialisation d’un tableau avec une
valeur particulière Objectifs visés : O63(40%)

Dr Guy MBATCHOU Page 77


Les algorithmes procéduraux ou modulaires

Objectif 6.4 : Ecrire des modules récursifs

1 - Définition
Un algorithme est dit récursif si dans son exécution, il s’appelle lui-même (récursivité
directe) ou s’il appelle un autre algorithme qui l’appelle (récursivité indirecte).
Un algorithme récursif doit obéit aux règles suivantes :
• il doit exister des critères pour lesquels la récursivité (les auto-appels) doit
s’arrêter
• chaque fois que l’algorithme s’appelle (directement ou indirectement), il doit
être plus proche de ses critères d’arrêt.
Une procédure ou fonction est dite récursive si elle contient dans sa définition un appel
à elle-même (récursivité directe) ou si elle contient dans sa définition un appel de procédure ou
de fonction qui appelle à son tour (ou à plus tard) la procédure ou la fonction initiale (récursivité
indirecte).
Chaque appel de procédure ou de fonction entraîne une allocation d’espaces pour les
variables locales et les paramètres. La récursivité entraine donc un empilement d’espaces
mémoires et ce n’est qu’à la fin de chaque appel de la procédure ou fonction que les
emplacements mémoires commenceront à être dépilés et libérés.

2 - Quelques exemples
2.1 - Le Calcul factoriel
La factorielle est une fonction mathématique définit dans l’ensemble des entiers naturels
tel que pour tout entier naturel non nul, n ! = n x (n-1) x (n-2) x … x 2 x 1 et si n=0 alors 0 ! =
1.
Mathématiquement la définition récursive de la factorielle est : n ! = n x (n-1) !
Algorithmiquement, factorielle peut être écrite sous forme de fonction récursive en se
calquant sur les propriétés mathématiques de factorielle. Evidemment, la récursivité s’arrêtera
lorsque n vaudra 0.

Dr Guy MBATCHOU Page 78


Les algorithmes procéduraux ou modulaires

Fonction factoriel(n : entier) : entier ;


Debut
Si n = 0 Alors
factoriel  1;
Sinon
factoriel  n x factoriel(n-1);
Fin;
2.2 - La recherche dichotomique
La recherche dichotomique consiste à diviser un tableau en 2 parties et effectuer la
recherche dans la partie la plus probable. De façon récursive, nous pouvons l’écrire en rappelant
l’algorithme sur la partie gauche ou la partie droite selon que la valeur recherchée est
probablement dans la partie gauche ou la partie droite.

Seuil de validation : 80% Titre : Test de connaissance Objectifs visés : O64(20%)


Seuil de validation : 60% Titre : Module de calcul récursif des termes de la suite
de Fibonacci Objectifs visés : O64(40%)
Seuil de validation : 60% Titre : Module de calcul récursif de la puissance
Objectifs visés : O64(70%)
Seuil de validation : 50% Titre : Module récursif de recherche dichotomique
Objectifs visés : O64(70%)

Dr Guy MBATCHOU Page 79

Vous aimerez peut-être aussi