ABDELKADER BENHARI
ABDELKADER BENHARI
ABDELKADER BENHARI
ABDELKADER BENHARI
L’ALGORITHMIQUE
L’ALGORITHMIQUE
L’ALGORITHMIQUE
L’ALGORITHMIQUE
The algorithm is the set of rules and techniques that are involved in the definition and design of algorithms, that is to say, systematic process of problem solving to describe the steps to the result. In other words, an
algorithm is a finite and unambiguous instructions to give the answer to a problem.
If the instructions of an algorithm executed one after the other, the algorithm is called sequential if they run at the same time, it is parallel. If the algorithm operates tasks running on a processor network is called
distributed algorithm, or distributed.
The word "algorithm" comes from the name of the mathematician Al Khawarizmi (Latinized Algoritmi in the Middle Ages), which, in the ninth century wrote the first systematic work on the solution of linear and
A.BENHARI 2
Table des matières
INTRODUCTION A L’ALGORITHMIQUE
... 4-
Analyse
-
Algorithme
-
Squelette d’un algorithme
-
Elément de base
-
Schémas algorithmique
APPLICATION
... 13DEFINITION DES VARIABLES
... 14-
Variable destinée au calcul
-
Variable non destinée au calcul
ENTREE DE DONNEES DANS LA MACHINE
... 15AFFICHAGE DE RESULTATS
... 15CALCULS
... 15CONDITIONS
... 15LES STRUCTURES REPETITIVES
... 16LES PROCEDURES ET LES FONCTIONS (SOUS-PROGRAMME)
... 19-
Procédure
-
Fonction
LES CHAINES DE CARACTERES
... 22-
Définition
-
Concaténation
-
Conversions
-
Longueur d’une chaîne
-
Sous chaîne d’une chaîne
NOTION DE TABLEAU (OU TABLE OU VECTEUR OU MATRICE
ARRAY)
... 24-
Définition
-
Déclaration du tableau
-
Mise à l’état initial
-
Recherche de donnée dans un tableau
LES METHODES DE TRI USUELLES
... 28-
Tri par insertion
-
Tri par sélection
-
Le tri bulle
-
Le tri de shell
-
Tri de shell-Metzner
-
Tri par vecteur d’indice
-
Tri par monotonie
LA RECURSIVITE
... 35-
Définition
-
Principe
LES FICHIERS
... 37A.BENHARI 3
-
du fichier
-
Notion d’enregistrement
-
Déclaration des fichiers en algorithme
-
Instruction de manipulation des fichiers
-
Application sur les fichiers séquentiels
-
Les fichiers à accès direct
-
Les fichiers texte
ALGORITHMES ET STRUCTURE DE DONNEES
... 44-
Les structures arborescentes
-
Graphes
-
Problème de la recherche
-
Problème du tri
-
Quicksort
-
Heapsort
ALGORITHMES NUMERIQUES
... 58-
Généralités
-
Systèmes linéaires Ax=b : méthodes directes
-
Factorisation A=LU
-
Factorisation PA=LU
-
Factorisation A=BB
t: Cholesky
-
Factorisation A=LDL
t: Crout
SYSTEMES LINEAIRES AX=B : METHODES ITERATIVES
... 73-
Principe
-
Méthode Jacobi
-
Méthode Gauss-Seidel
-
Méthode de relaxation
-
Méthodes du gradient
PROBLEMES AU MOINDRES CARRES (LINEAIRE)
... 79-
Régression linéaire
-
Méthode des équations normales
RESOLUTION DES EQUATIONS NON LINEAIRES
... 81-
Méthode de dichotomie
-
Généralités
-
Valeurs propres et vecteurs propres
APPROXIMATION POLYNOMIALE & INTEGRATION NUMERIQUE
... 85-
Approximations polynomiales
ÉQUATIONS DIFFERENTIELLES
... 89-
Généralités
-
Méthode de résolution numérique
-
Méthode de Euler
-
Méthode du développement de Taylor
-
Méthode de Runge - Kutta
EXERCICES CORRIGES
... 92A.BENHARI 4
L’ALGORITHMIQUE
L’ALGORITHMIQUE
L’ALGORITHMIQUE
L’ALGORITHMIQUE
I.
I
NTRODUCTION A L
’
ALGORITHMIQUE
Qu’est ce qu’un algorithme ?
"Une suite finie de règles à appliquer dans un ordre déterminé à un nombre fini de données
pour arriver, en un nombre fini d'étapes, à un certain résultat, et cela indépendamment des
données".
Encyclopaedia universalis
I.1. Analyse
Définition
La décomposition d’un problème en sous problèmes, ensuite des sous problèmes en sous
problèmes, on arrive ainsi à des problèmes non décomposables, ou à des tâches élémentaires.
Ces tâches élémentaires ordonnées forment la succession des étapes qui permettent à partir
d’une situation initiale d’aboutir à une situation finale qui représente la solution du problème
de départ. Une première solution peut être rédigée dans un langage non formel (en français
par exemple), ensuite traduite dans un langage formel (algorithme), à partir duquel il est
possible d’écrire un programme dans un langage de programmation et de l’exécuter sur une
machine.
Démarche de décomposition
Nous allons détailler un exemple qui montre la démarche de décomposition et comment
arriver à résoudre un problème sans faire autre chose que de l’exprimer par des problèmes
plus petits.
Le problème initial : un individu se trouve devant une voiture et doit la faire démarrer.
Entrer dans la voiture
Démarrer la voiture
Ouvrir la portière
Monter
Fermer la portière
Faire fonctionner la voiture
Démarrer la voiture
Mettre la clé dans le contact
Faire un quart de tour, les voyants doivent s’activer
Continuer à tourner la clé jusqu’à ce que la voiture émette un bruit indiquant
l’état de marche normal
A.BENHARI 5
Appuyer sur la pédale d’embrayage
Enclencher la première vitesse
Désactiver le frein à main
Actionner doucement le démarreur et relâcher progressivement l’embrayage.
La solution finale est exprimée par les tâches se trouvant en bas du schéma. Cette succession
de tâches s’appelle un algorithme mais il est ici exprimé dans un langage non formel.
La situation initiale : individu, et voiture ouverte (non verrouillée).
La situation finale : individu dans la voiture et voiture en état de marche.
L’algorithme a besoin de certains renseignements externes pour pouvoir fonctionner
correctement (voyants, bruit que fait la voiture…etc.)
La solution est donnée dans le cas où il n’y a aucun problème, supposons maintenant que la
voiture ne veut pas démarrer où qu’une fois démarrée, le conducteur cale ! Que faire ? Il est
clair que notre algorithme ne répond plus à la question, et qu’il faut l’améliorer pour qu’il
marche dans toutes les situations possibles.
Nous allons réécrire notre algorithme.
Entrer dans la voiture
Démarrer la voiture
Ouvrir la portière
Monter
Fermer la portière
Faire fonctionner la voiture
Démarrer la voiture
Si le conducteur a la clé alors
Tant que la voiture n’est pas en état de fonctionnement normal il faut
Début
Mettre la clé dans le contact
Faire un quart de tour, les voyants doivent s’activer
Continuer à tourner la clé jusqu’à ce que la voiture émette un
bruit indiquant l’état de marche normal
Si la voiture ne démarre pas alors
Retourner la clé dans le sens contraire
Reprendre à : Mettre clé dans contact
Fin
Appuyer sur la pédale d’embrayage
Enclencher la première vitesse
Désactiver le frein à main
Actionner doucement le démarreur et relâcher progressivement
l’embrayage.
Si la voiture cale alors
Retourner la clé dans le sens contraire
Reprendre à : Mettre clé dans contact
Fin si
Sinon
A.BENHARI 6
Reprendre à : Mettre clé dans contact
Fin si.
Ce nouvel algorithme permet de refaire certaines actions si elles ne fonctionnent pas
correctement.
I.2. Algorithme
Définition
Un algorithme est rédigé dans un pseudo-langage et destiné à une machine abstraite
(virtuelle). Il permet de décrire formellement toutes les étapes nécessaires qui à partir d’une
situation initiale, permettent d’aboutir à une situation finale. Cette dernière constitue la
solution qui résout un problème donné.
Le langage algorithmique est précis, et suit des règles qui seront décrites tout au long de ce
document.
Démarche : Problème, analyse, algorithme
Pour illustrer la démarche qui permet d’écrire un algorithme nous allons traiter des exemples
concrets
1
erexemple : Somme de deux entiers
Soit le problème formulé dans les termes suivants : écrire un algorithme qui calcule la somme
de deux entiers, et affiche le résultat à l’écran.
Le problème ici est simple, il s’agit de calculer la somme de 2 entiers. Le problème ne précise
pas où trouver les deux entiers, il est alors possible de supposer que les deux entiers seront
donnés par l’utilisateur, ce dernier dialogue avec la machine par l’intermédiaire du clavier.
On dit alors que les deux entiers seront saisis au clavier. L’énoncé ne précise pas non plus que
faire du résultat, on suppose alors que ce dernier sera affiché sur l’écran.
Voici le schéma qui résume notre problème.
Figure Erreur ! Il n'y a pas de texte répondant à ce style dans ce document.-1
Deux données seront à l’entrée d’une boîte qui réalise le calcul et fournit en sortie la somme
de ces deux données.
En algorithmique, il est fréquent de parler d’entrée et de sortie.
o
Les données d’un algorithme sont appelées entrées : elles sont à la base du traitement
des algorithmes.
o
Les résultats d’un algorithme sont appelés sorties : elles sont le fruit des traitements
faits par les algorithmes et fournissent une réponse au problème posé.
Donnée
2
Résultat Calcul de Somme
A.BENHARI 7
La boîte de la figure
Figure Erreur ! Il n'y a pas de texte répondant à ce style dans ce document.-1représente ce que nous allons appeler par la suite un processus de calcul. Ce processus réalise
un traitement simple, qui est le calcul de Donnée 1 + Donnée 2. Une fois le résultat obtenu il
sera affiché sur l’écran.
La totalité du schéma est le processus général et c’est ce qu’il faut concrétiser par un
algorithme.
Pour écrire cet algorithme nous avons besoin de :
1.
Accepter Donnée 1 et la stocker,
2.
Accepter Donnée 2 et la stocker,
3.
Calculer Donnée 1 + Donnée 2,
4.
Stocker le résultat,
5.
Afficher le résultat sur l’écran.
Nous avons ainsi décomposé le problème comme expliqué dans la section 0, les tâches
numérotées de 1 à 5 sont en fait l’algorithme écrit en langage non formel. Il est possible de
noter ici, que chaque problème possède la solution dans sa décomposition.
Nous allons le traduire dans un langage algorithmique formel, et nous expliquerons les
différents mots-clés utilisés au fur et à mesure.
Algorithme Somme Variables
Donnée1, Donnée2, Résultat : entier Début
Ecrire (Donner la donnée numéro 1 ) Lire Donnée1
Ecrire (Donner la donnée numéro 2 ) Lire Donnée2
Résultat = Donnée1+Donnée2 Ecrire (La somme est : Résultat) Fin
I.3. Squelette d’un algorithme
Algorithme NomDeLAlgorithme VAR
//Déclaration de variables manipulés par l’algorithme Donnée1, Donnée2, Résultat : entier
Début
//Corps de l’algorithme constitué par les expressions Fin
Un algorithme est défini par un entête donnant le nom de l’algorithme, généralement
explicite. L’entête est suivie par une partie déclarative permettant de définir toutes les
données qui seront utilisées par l’algorithme. Par la suite entre deux mots-clé Début et Fin,
nous retrouvons le corps de l’algorithme qui sera constitué par les différentes expressions
permettant de résoudre le problème.
I.4. Eléments de base
Types
Les types permettent de donner un domaine de définition aux objets manipulés par un
algorithme, par exemple des données nécessaires pour un calcul seront définies dans le
domaine des réels ou des entiers, un message affiché sera défini dans le domaine des
caractères alphanumériques…etc.
A.BENHARI 8
Il existe 5 types de base en langage algorithmique de programmation :
Les entiers : définis dans le domaine des entiers naturels et les entiers relatifs.
Les réels
Les caractères : définit tout ce qui est caractère alphanumérique, « a ».. « z », « 1 ».. « 9 »
ainsi que les caractères spéciaux, caractères de ponctuation, etc…
Les chaînes de caractères : un assemblage de caractères forme une chaîne.
Les booléens : un booléen permet de définir une donnée qui ne peut prendre qu’un avaleur
entre deux : vrai ou faux, ou bien 0 ou 1.
Variables
Les variables servent à déclarer des objets nécessaires au bon fonctionnement d’un
algorithme. Les variables doivent être définies avant leur utilisation, en général en dessous de
l’entête de l’algorithme dans une partie qui peut être distinguée par le mot clé VAR. Elles sont
définies grâce à l’un des cinq types de base et peuvent accepter une valeur de début appelée
valeur initiale.
Exemple :
Algorithme Exemple VAR Donnée1 : entier Donnée2 : entier Car : caractèreMessage : Chaîne de caractères VraiOuFaux : booléen
Début
// Initialisation des différentes variables Car ‘A’ VraiOuFaux Faux Donnée1 10 Donnée2 20 . . . Fin
L’initialisation des variables permet de donner à ces dernières une première valeur. Il n’est
pas interdit de changer cette valeur par la suite que ce soit par l’intermédiaire :
o
d’une autre affectation,
o
d’une expression de calcul,
o
d’une lecture au clavier.
Constantes
Les constantes sont des données initialisées qui ne changent jamais de valeur pendant toute la
durée de l’algorithme. Elles peuvent seulement être lues, utilisées pour un traitement,
affichées mais jamais modifiées
Algorithme Circonférence Constantes PI = 3,14 VAR Circonférence : réel Rayon : réel
A.BENHARI 9
Début
Ecrire (Donner le rayon du cercle) Lire Rayon
Circonférence PI * (Rayon)²
Ecrire (La circonférence de votre cercle est : Circonférence) Fin.
Dans cet algorithme PI ne peut qu’être utilisée telle quelle, elle ne peut pas être modifiée
d’une façon quelconque.
Déclaration
La déclaration sert à introduire la donnée (variable ou constante)qui sera utilisée par
l’algorithme. Lors de la déclaration d’une donnée il est nécessaire de lui donner un type, et il
est parfois possible de lui affecter une valeur de départ. Pour les constantes, la valeur de
départ est obligatoire.
Il existe deux manières de déclarer une variable en pseudo-langage.
NomDeLaVariable [: type de la variable]Ou bien
[Type de la variable] NomDeLaVariable < Valeur de départ>
Remarque : Il est conseillé de garder le même type de déclaration dans le même algorithme.
Exemples :
V1 : entier
//Déclaration de V1 de type entier
Entier V2
0
//Déclaration de V2 de type entier avec une valeur initiale égale à 0
Entier V3
//Déclaration de V3 de type entier sans valeur initiale
Il est aussi possible de faire des déclarations « groupées ».
Entier V1, V2, V3
// Déclaration de trois variables de type entier par le biais d’une même
instruction.
Initialisation
L’initialisation d’une variable revient à une affectation d’une première valeur avant toute
autre utilisation de cette variable. Les instructions d’initialisation peuvent figurer n’importe
où dans l’algorithme, et pas nécessairement au début.
Opérateurs
Les opérateurs permettent de modifier des valeurs de données à l’intérieur des expressions.
Nous allons distinguer entre trois types d’opérateurs en algorithmique. Le type d’une donnée
détermine le type des opérateurs qui peuvent lui être appliqués.
Remarque : certains langages de programmation possèdent des opérateurs spéciaux.
Opérateurs arithmétiques
Les opérateurs arithmétiques sont tous utilisés en algorithmique pour écrire des expressions
arithmétiques pouvant être affectées à des variables numériques. Par exemple pour modifier
certaines valeurs il est nécessaire d’utiliser des opérateurs.
Remarque : Il est aussi possible d’utiliser l’opérateur + pour modifier des chaînes de
caractères.
+ : permet les additions
- : permet les soustractions.
* : permet la multiplication
/ : permet la division
A.BENHARI 10
Opérateurs logiques
Les opérateurs logiques sont utilisés pour affecter ou modifier les valeurs des données de type
booléen. Il en existe trois :
o
NON : appelé Non logique, c’est un opérateur unaire,
o
OU : opérateur binaire appelé Ou logique,
o
ET : opérateur binaire appelé Et logique.
Les trois tableaux ci-dessous résument les tables de vérité des opérateurs logiques :
Et
Vrai
Faux
Vrai
Vrai
Faux
Faux
Faux
Faux
Ou
Vrai
Faux
Vrai
Vrai
Vrai
Faux
Vrai
Faux
Non
Vrai
Faux
Faux
Vrai
Opérateurs relationnels
Les opérateurs relationnels permettent de comparer des expressions entre elles, le résultat sera
une expression logique : vraie ou fausse. Ces opérateurs peuvent comparer entre les types
numériques, les types caractères et les types chaînes de caractères.
<
<=
=
>
>=
<>
Opérateur
Type numérique Type alphanumérique
Type chaîne
<=
2 <= 3
vrai
‘a’ <= ‘b’
vrai
« abc » <= « acc »
vrai
<=
32.5<=1
faux ‘9’ <= ‘a’
vrai
« zze » <= « azerty »
faux
>=
3 > 2
vrai
‘9’ >= ‘a’
faux
« aaaaa » >= « bbbbbbb »
faux
=
0 = 0
vrai
‘a’ = ‘b’
faux
« aaaa » = « fffe »
faux
<>
<
>
Expressions
Les expressions constituent la base de toute instruction algorithmique. Ils existent des
expressions simples et des expressions complexes. Toutes seront étudiées dans les sections
suivantes sous la dénomination de schémas algorithmiques.
Définition
Une variable ou une constante est une expression.
Les expressions peuvent être combinées grâce aux opérateurs et donnent ainsi une nouvelle
expression.
A.BENHARI 11
Les expressions comme nous le verrons plus loin peuvent aussi contenir des appels de
fonctions, ou constituer des appels de procédure.
Les expressions constituent les instructions algorithmiques.
I.5. Schémas algorithmiques
Schéma algorithmique simple
Affectation
L’affectation est l’expression de base en algorithmique, elle permet d’associer une valeur
quelconque à une variable de l’algorithme. Il est clair que la valeur doit être du même type
que la variable.
L’affectation comprend 2 parties séparées par le symbole d’affectation «
» :
o
une partie gauche appelée aussi valeur de gauche et constituée par une variable,
c'est-à-dire un objet qui peut prendre une valeur,
o
une partie droite ou valeur droite constituée par une « expression » pouvant être
évaluée.
… VAR V1 : entier V2 : réel … Début V1 10.5 // Affectation erronéeV1 10 // Affectation correcte, on dit que V1 reçoit la valeur 10 V2 32.5 // Affectation correcte, V2 reçoit 32.5
V2 10 // Affectation correcte, les réels englobent les entiers naturels
V2 25/2 // Affectation correcte, V2 recevra le résultat du calcul de 25 divisé par 2 Fin
Lecture de données
Une autre manière d’accorder des valeurs à des variables est de faire ce qu’on appelle une
lecture de données. La lecture se fait à partir d’un dispositif d’entrée, en l’occurrence un
clavier. On l’appelle aussi saisie ou entrée de données. Ce procédé est utilisé à chaque fois
qu’une valeur est requise par l’algorithme et que cette valeur ne peut être donnée que par
l’utilisateur, c'est-à-dire la personne qui utilise le programme. Bien sûr dans un algorithme il
n’y aura pas de véritable saisie à partir du clavier mais seulement une simulation de la saisie.
L’algorithme simule une demande de donnée à l’utilisateur et l’accepte pour la stocker dans
une variable.
Plus tard, l’algorithme sera traduit par un programme, le programme sera compilé et les
instructions qui seront exécutables par une machine demanderont une saisie réelle de la part
de l’utilisateur. Ce dernier devra taper une donnée du type requis au clavier et valider sa
réponse par un retour chariot.
La syntaxe permettant de lire une donnée est la suivante :
Lire NomDeLaVariableEcriture de données
L’écriture de données permet un autre type d’interaction avec l’utilisateur : la sortie de
messages ou de résultats à l’attention de ce dernier. L’écriture se fait sur un dispositif de sortie
tel que l’écran ou l’imprimante par exemple.
A.BENHARI 12
La syntaxe communément adoptée est la suivante :
Ecrire « Message »Ecrire Valeur
Incrémentation
L’incrémentation est une expression particulière qui permet d’augmenter la valeur d’une
variable d’une certaine quantité à la fois.
V1 V1 + 1 V2 V2 + 2
Décrémentation
La décrémentation permet de réduire la valeur d’une variable.
V1 V1 - 1V2 V2 - 2