Cours D'algorithmique
Cours D'algorithmique
LA LOGIQUE ALGORITHMIQUE
DEFINTION :
L’expression algorithmique permet de dégager
les principes de construction d’un programme
Cours d’Algorithmique quel que soit l’environnement logiciel de sa mise
en œuvre.
OBJECTIFS :
⚫ Identifier les données utilisées dans un
algorithme (type, constante, variable)
⚫ Identifier la structure d’un algorithme
(séquence alternative, répétitive)
1
Pourquoi un cours d’ "Algo" ?
Objectif
⚫ Objectif : Apprendre les concepts de base de ⚫ Etre capable de mettre en œuvre les
l'algorithmique et de la programmation concepts pour analyser des problèmes et
écrire les programmes correspondants
⚫ Problème : expliquer à la «machine» comment elle ⚫ savoir expliciter son raisonnement
doit s'y prendre
Mais... comment le lui dire ? ⚫ savoir formaliser son raisonnement
Comment le lui apprendre ? ⚫ concevoir et écrire des algorithmes :
Comment s'assurer qu'elle fait ce travail aussi - séquence d’instructions qui décrit comment résoudre
bien que nous ? un problème particulier
Mieux que nous? - Algorithme = suite d’actions que devra effectuer un
automate pour arriver à partir d’un état initial, en un
temps fini et afficher un résultat
Objectif
Plan du cours
➢ Un algorithme sert à transmettre un savoir faire.
➢ Il décrit les étapes à suivre pour réaliser un travail. • Généralités (matériel Informatique,
systèmes d’exploitation, langages de
➢ Il permet d'expliciter clairement les idées de solution programmation, …)
d'un problème indépendamment d'un langage de
programmation.
➢ L'utilisateur d'un algorithme n'aura qu'à suivre • Algorithmique (variables, affectations,
toutes les instructions, dans l'ordre pour arriver au instructions conditionnelles, instructions
résultat que doit donner l'algorithme. itératives, tableaux, fonctions, procédures,
structures, fichiers…)
2
Domaines de l’informatique
⚫ Domaine du matériel (hardware) Informatique?
• partie physique de l’ordinateur ⚫ Techniques du traitement automatique de l’information au
• composants constituant un ordinateur moyen des ordinateurs (Science de Traitement automatique de
l’Information)
(microprocesseur …)
• support du traitement de l’information (disque dur …) ⚫ Éléments d’un système informatique
Applications
⚫ Domaine du logiciel (software) (Word, Excel, PowerPoint, Jeux, Maple, etc.)
• instructions expliquant à l’ordinateur comment traiter Langages
un problème (Java, C/C++, Fortran, Cobol, PL/1, Pascal, MatLab etc.)
• Cela nécessite de décrire des : algorithmes et Système d’exploitation
représentations informatiques de ces instructions pour (DOS, Windows, OS, Unix, Linux, IOS, etc.)
aboutir à un programme Matériel
(PC HP, IBM, Macintosh, Bull, station SUN, etc.)
⚫Computer Science
⚫ Machine qui permet de traiter de l’information :
⚫INFORMATIQUE ? (en anglais) • d’acquérir et de conserver de l’information
(acquisition, stockage)
• d’effectuer des traitements (calcul),
⚫INFORMATION ⚫AUTOMATIQUE
• de restituer les informations stockées (restitution)
⚫Science de l’information
⚫Art d’entraîner automatiquement des actions ⚫ Permet de lier «information» «données» (0
ou 1)
⚫Traitement automatique de l’information ⚫ Différents types d’informations : valeurs
⚫Machine automatique
⚫ORDINATEUR
numériques, textes, images, sons, …: tout cela
avec des 0 ou 1
3
Informatique : Traitement de l’information Informatique : L’ordinateur / l’homme
⚫ Raison du remplacement :
⚫Schéma de principe du traitement de l’information • Vitesse (pour des opérations « bas niveau »)
• Fiabilité (répétitivité)
⚫Données à l’état brut
• Mémoire
⚫ENTREE
• Coût
⚫Données Traitées
Résultats ⚫ 2 types d’ « informaticiens »
⚫TRAITEMENT
⚫Par ordinateur • les utilisateurs des outils informatiques
⚫SORTIE
• les concepteurs de ces outils
Informatique
⚫Instructions
⚫UC ⚫Résultats
⚫Données
⚫Mémoire
Conception Utilisation
⚫Périphériques d’entrée
Matériel Logiciel Technologie Processus ⚫Périphériques de sortie
⚫Mémoires auxiliaires
Développement ⚫Carte
⚫Scanner ⚫Micro ⚫Souris ⚫DVDR
Architectures Méthodologies Données Utilisateurs perforée ⚫Disquette ⚫Clé USB ⚫Ecran
⚫Modem
& Langages
⚫CD-ROM
⚫Modem ⚫Caméra ⚫Bande
⚫Clavier ⚫Disque dur Magnétique
⚫Imprimante
⚫Haut parleur
4
Structure de l’ordinateur Schéma d’une configuration informatique
⚫Carte vidéo ⚫Unité Centrale
(cerveau)
⚫Unité de Traitement
⚫Disque
⚫Ecran ⚫Mémoire ⚫Unité de Commande
⚫Dur
⚫et de Contrôle
⚫Centrale
⚫Clavier
⚫Unité Arithmétique
⚫Unité de ⚫Disquette
⚫et Logique
⚫Souris ⚫traitement
⚫Mémoire
⚫CDROM ⚫Périphériques Centrale
⚫Haut- ⚫Périphériques
d’Entrées de Sorties
⚫parleurs ⚫Unité Centrale
⚫USB
⚫Carte
graphique ⚫Slot AGP ⚫Pile
(carte graphique) (alimente l’horloge)
5
L’unité centrale Le processeur (CPU)
⚫Supports de barrettes ⚫Séquenceur d ’instructions
⚫Connecteurs de souris et clavier ⚫de mémoires ⚫Interface du bus d ’instructions
⚫Connecteurs de contrôleur
⚫de disquettes et disque dur ⚫Décodeur d ’instructions
⚫Unité de traitement
⚫Emplacements de
⚫Unité arithmétique et logique
⚫cartes d ’extensions
⚫Registres:
⚫Batterie
Les bus
⚫ Périphériques
• Moniteur (l'écran), clavier, souris
• Modem, imprimante, scanner, …
6
Les bus
⚫Ecran ⚫Mémoire ⚫Disque
Quelques types de microprocesseurs
⚫Centrale ⚫Dur
⚫Clavier Intel: Core, Pentium, Celeron, Xeon, Itanium …
⚫Disquette
⚫Souris
⚫Unité de AMD: Athlon, Opteron, Turion …
⚫traitement
Motorola
⚫CDROM
⚫Haut- Aeroflex
⚫Unité Centrale ⚫DVDROM
⚫parleurs
Atmel
⚫ Permettent de faire le lien entre les Microchip
différentes unités d’un ordinateur etc.
⚫ représente le chemin utilisé par les
informations pour aller d’une unité à l’autre
Unités de Mesure
Types de Mémoire Principale
ROM Fréquence du processeur
◼ mémoire morte (ne peut pas être modifiée) ◼ Nombre d’opérations effectuées en une
◼ utilisée pour le BIOS (basic input output seconde par le processeur exprimée en hertz
system): programme de base pour lancer (Ghertz, Giga hertz)
l’ordinateur Unités d’Affichage
RAM ◼ Nombre de pixels par pouce pour l’affichage
◼ mémoire vive (peut être modifiée) sur écran. 1 pouce=2,54 cm. La qualité est
◼ SDRAM meilleure si le nombre d’affichage par pouce
est élevè.
◼ DDR
◼ DR-SDRAM
7
Unités de Mesure Qu’est ce qu’un système d’exploitation SE
ou operating system OS ?
Unités FPS ⚫ Ensemble de programmes qui dirige l'utilisation
des ressources matériel d'un ordinateur par
◼ Nombre d’images affichés par seconde FPS des logiciels applicatifs:
(Frames per second sur un écran d’ordinateur . • Gestion des périphériques (affichage à l'écran, lecture du
clavier, pilotage d’une imprimante, …)
Unités d’impression
◼ Nombre de pages imprimés par minutes (ppm). • Gestion des utilisateurs et de leurs données (comptes,
partage des ressources, gestion des fichiers et répertoires, …)
Unités de transfert
◼ Transfert des volumes des données dans le
• Interface avec l’utilisateur (textuelle ou graphique):
Interprétation des commandes
domaine des réseaux et connexions internet
bit/s (bits par seconde ou bps) • Contrôle des programmes (découpage en taches, partage
du temps processeur, …)
◼ Mac OS
◼ OS/2
◼ MS-DOS
pourquoi un système d’exploitation?
◼ sans système d’exploitation, on ne peut charger et exécuter qu’un
seul programme à la fois
Le système d'exploitation est un intermédiaire entre les logiciels
d'application et le matériel. ◼ si on n’a pas de système d’exploitation, chaque programme doit
avoir toutes les routines nécessaires pour accéder aux
composantes matérielles de l’ordinateur
8
Systèmes d’Exploitation Systèmes d’Exploitation
trois composantes
◼ le noyau: interagit avec les composantes matérielles
accès aux disques durs, CD, etc. quelques considérations …
gestion de la mémoire
ordonnancement des tâches
◼ convivialité
accès réseau
◼ robustesse, stabilité et fiabilité
◼ librairies de fonctions qui peuvent être appelées par d’autres
programmes ◼ gestion des tâches en temps réel
créer des fenêtres à l’écran
détecter un mouvement de souris
envoyer un fichier à une imprimante
etc.
◼ programmes de base pour gérer des fichiers et configurer le
système
Internet Explorer: une partie du système d’exploitation Windows ou
non?
9
Langage machine : Codage Langage machine
⚫ Langage binaire: l’information est exprimée et manipulée sous
forme d’une suite de bits
• Le code ASCII (American Standard Code for Information Interchange) donne les
correspondances entre les caractères alphanumériques et leurs
représentation binaire, Ex. A= 01000001, ?=00111111
10
Information Binarisée: Ecriture,
Organisation de la Mémoire Nombres, Images, Sons
par convention … ⚫ La valeur d’un mot binaire dépend du contexte
d’utilisation: mot, images, sons,...
◼ 1 octet (O) 8 Bits 1 Caractère
⚫ On vise la standardisation
◼ 1 kilo-octet (Ko) 103 octet = 1000 Octets
⚫ Ecriture = Code ASCII
◼ 1 méga-octet (Mo) 106 octets = 1000 Ko
◼ 1 giga-octet (Go) 109 octets = 1000 Mo
• Sur 7 bits --> 128 caractères, Sur 8 bits --> 256
caractères, par ex. «a» = 1100001
1 Téra-octet (To) 1012 octets = 1000 Go
◼
• Equivalence Bytes (8 bits) --> Texte
• 1.4 MBytes = 500 pages (1 page = 3000 char)
11
les nombres entiers les nombres entiers
8 = 00001000
+ 9 = 00001001
----------------
= 17 = 00010001
12
les nombres entiers: Conversion d'un les nombres entiers: Conversion d'un
nombre décimal (entier) en binaire nombre décimal (entier) en binaire
⚫ Méthode par soustraction : par exemple N=73 ⚫ Exercice : par exemple N=172
73 9
-64 -8
____ ____
09 1
73 (10) = 0100 1001 (2)
13
les nombres entiers :Opérations les nombres entiers : arithmétique
usuelles en binaire
élémentaire
Travaillons avec 4 bits
les deux opérations binaires de base sont
0011(3) 1010(10)
⚫ l'addition
+0010(2) +1100(12)
⚫ la multiplication ______ _________________
= 0101 = 0110
14
les nombres entiers les nombres entiers : Codage des
entiers relatifs -code complément à 1
⚫ Le bit le plus significatif est utilisé pour
représenter le signe du nombre :
➢ si le bit le plus fort = 1 alors nombre négatif
➢ si le bit le plus fort = 0 alors nombre positif
⚫ Les autres bits codent la valeur absolue du
nombre
⚫ Exemple : Sur 8 bits, codage des nombres -24
et -128 en (bs)
➢ -24 est codé en binaire signé par : 1 0 0 1 1 0 0 0 (bs)
➢ -128 hors limite ➔ nécessite 9 bits au minimum
les nombres entiers : Codage des les nombres entiers : Codage des
entiers relatifs -code complément à 2 entiers relatifs -code complément à 2
Exemples:
1-Comment écrit-on N = -15 (5 bits + 1 bit de signe) ?
⚫ |N| = 15 = 001111(2) => 110000 (Cà1) =>
-15 ≡ 110000(Cà1) +000001(2) = 110001 (2)
15
les nombres entiers : Codage des les nombres entiers : Codage des
entiers relatifs en Binaire entiers relatifs -code complément à 2
⚫ Les nombres sont codés sur 8 bits
⚫ On veut coder -50 sur 8 bits, la plage des nombres est de - 27 à 27 -1 Addition avec retranchement de la retenue :
soit de -128 à 127. ⚫ Considérons un exemple un peu plus élaboré que le lecteur est
Première méthode : - 50 + 28 = -50 + 256 = 206 invité à détailler : Termes Écriture binaire sur 16 bits Complément à 2
on code 206 en binaire : 11001110 au nombre - 50 on fait correspondre
11001110
Deuxième méthode : c'est la méthode qu'utilisent les ordinateurs
au niveau langage machine
16
Conversion réel décimal en base B Codage et calcul de nombres à
virgule flottante (floating-point)
⚫Exemple : conversion de 14,375 en binaire 1 8 23
➢ Conversion de 14 : 32 bits
➢ Conversion de 0,375:
signe
➢Conversion de 14 : donne (1110)2
➢ Conversion de 0,375 Exposant Mantisse
Codage des nombre réels en virgule Codage des nombres réels en virgule
flottante flottante
⚫ Principe et intérêts ⚫ Exemple : 1234,5 en base 10
⚫ Avoir une virgule flottante et une précision limitée
⚫ Ne coder que des chiffres significatifs ➢On normalise pour n'avoir que des chiffres après la virgule
:
N = nombre codé
➢ ➢Mantisse codée = 12345, exposant = 4, signe = +
M = mantisse : nombre de X chiffres de la base B
➢
➢ E = exposant : nombre de Y chiffres de la base B ⚫Standard IEEE 754 : codage binaire de réels en virgule
➢ +/- = codage du signe : positif ou négatif
flottante
➢ Précision simple : 32 bits:
⚫ Le nombre est présenté sous forme normalisée pour
déterminer la mantisse et exp. 1 bit de signe, 8 bits exposant, 23 bits mantisse
➢ Pas de chiffre avant la virgule : ➢ Précision double : 64 bits :
1 bit de signe, 11 bits exposant, 52 bits mantisse
17
Codage hexadécimal Codage hexadécimal
⚫La manipulation des nombres écrits en binaire ⚫Les règles sont ici aussi les mêmes que pour le
est une opération fastidieuse en raison de la taille décimal
des codes obtenus. Il serait donc judicieux
d'utiliser un autre système qui permet de réduire
la longueur de ces codes. C'est pourquoi nous
utilisons de préférence le système hexadécimal
(base 16).
18
Correspondance entre binaire et Les langages de programmation:
hexadécimal Assembleur
⚫ Problème: le langage machine est difficile à comprendre par l'humain
⚫ Exemple : N = 7254
⚫ Idée: trouver un langage compréhensible par l'homme qui sera
ensuite converti en langage machine
7254 (10) = 1C56 (16) • Assembleur (1er langage): exprimer les instructions élémentaires
de façon symbolique
ADD A, 4
traducteur langage machine
LOAD B
MOV A, OUT
…
• +: déjà plus accessible que le langage machine
• -: dépend du type de la machine (n’est pas portable)
• -: pas assez efficace pour développer des applications complexes
exécution plus ou moins lente selon le traducteur ⚫ Interpréteur: traduire au fur et à mesure les instructions du
programme à chaque exécution
Code source Compilateur ou Interprétation+exécution
Langage machine [Link]
en langage évolué fichier source
interpréteur
• + exécution instantanée appréciable pour les débutants
• - exécution lente par rapport à la compilation
19
Historique de langage de Historique de langage de
programmation programmation
⚫ 3ème génération
⚫ 1ère génération (Code machine) • FORTRAN, COBOL, ALGOL-60, PASCAL, MODULA-2, PL1, C,
• F0 00 A0 B8 20 …. •
ADA, BASIC, SIMULA
Soutiennent la notion d’algorithme
⚫ 4ème génération
• Langage applicatif
⚫ 2ème génération (Assembleur) • SQL, GUI, …
• LDA #$00 5ème génération
• STA $B820
⚫
• I.A.
• PROLOG
20
Classification des Languages de
Programmation III Langages de programmation:
d ’autres fonctions. Le programme renvoie donc un • Fortran, Cobol, PL/ 1, Pascal, Basic, C, …
• Langages orientés objets
seul résultat, qui peut-être assez complexe (exemple: • ADA, C++, Java, MatLab
une nouvelle fonction). • Langages de programmation Evénementielle
⚫ Programmation Logique: Un programme consiste • Visual Basic, Visual C++, DELPHI, Visual J++
en une série d ’axiomes, de règles de déduction et
en un théorème a prouver. Le programme renvoie la ⚫ Choix d’un langage?
valeur « vrai » si les axiomes supporte le théorème. Il
renvoie la valeur « fausse » autrement.
81
21
Etapes de réalisation d’un programme
Enoncé du problème
Spécification
Algorithmique
Cahier des charges
Analyse
Algorithme
Traduction en langage
Programme source
Compilation
Programme exécutable
Tests et modifications
Version finale et résultats
22
Passage de l'algorithme au programme
Représentation d’un algorithme
⚫ L'algorithme décrit la logique nécessaire pour Historiquement, deux façons pour représenter un algorithme:
résoudre un problème • L’Organigramme: représentation graphique avec des symboles
⚫ Le programme implante l'algorithme dans un (carrés, losanges, etc.)
• offre une vue d’ensemble de l’algorithme
langage cible • représentation quasiment abandonnée aujourd’hui
⚫ Éléments à considérer lors du passage de la
• Le pseudo-code: représentation textuelle avec une série de
structure d'algorithme au programme conventions ressemblant à un langage de programmation (sans
• Déclaration des variables et des constantes les problèmes de syntaxe)
• plus pratique pour écrire un algorithme
• Lecture des données • représentation largement utilisée
• Écriture de l'algorithme
• Affichage des résultats
Algorithmique
23
⚫L’ALGORITHME
⚫L’algorithme est l’outil normalisé de l’analyse. Il permet de décrire précisément la succession logique
Algorithme
des actions nécessaires au traitement, en vue de programmations en langages appropriés.
⚫ Le "langage algorithmique" que nous utilisons est un
⚫Déclaration de l’algorithme.
⚫Déclaration
constantes.
des variables et des compromis entre un langage naturel et un langage de
⚫Début.
⚫Traitements avec structure alternative : d'instructions dans l'ordre des traitements. Ils sont
⚫Ils permettent d’exécuter des actions
⚫
obéissant à une ou plusieurs conditions
déterminées.
toujours accompagnés d'un lexique qui indique, pour
⚫Les conditions font intervenir des opérateurs chaque variable, son type et son rôle.
de comparaison : < <= = > >= <>
⚫ Nous manipulerons les types couramment rencontrés
⚫Le symbole représente l’opérateur
d’affectation.
⚫Sorties : Elles ont pour but d’afficher des dans les langages de programmation : entier, réel,
résultats de traitements précédés de messages
explicatifs. Il est possible d’y inclure des
données entrées que l’on désire retrouver telles booléen, caractère, chaîne, tableau et type composite.
quelles en sorties.
⚫Fin.
⚫ 6/8
Formalisme
⚫ Un algorithme doit être lisible et compréhensible
⚫ Il doit donc suivre des règles. Il est composé d'une Introduction à l’Algorithmique
entête et d'un corps. ⚫ Un algorithme, c’est une suite d’instructions, qui une fois exécutée
✓L'entête comprend : correctement, conduit à un résultat donné.
- Nom : le nom de l'algorithme ⚫ un algorithme doit donc contenir uniquement des instructions
compréhensibles par celui qui devra l’exécuter.
- Rôle : ce que fait l'algorithme
⚫ Enfin, les ordinateurs ne sont capables de comprendre que quatre
- Données : les données fournies à l'algorithme familles d'instructions sont :
- Résultat : ce que l'on obtient à la fin du traitement ➢ l’affectation de variables
- Principe : le principe utilisé dans l'algorithme ➢ la lecture / écriture
✓Le corps : ➢
➢
les tests
les boucles
- il est délimité par les mots clés début et fin.
- il se termine par un lexique, décrivant les variables utilisées
24
Notion de variable Choix des identificateurs
⚫ Dans les langages de programmation une variable sert à stocker Le choix des noms de variables est soumis à quelques règles qui
la valeur d’une donnée varient selon le langage, mais en général:
⚫ Un nom doit commencer par une lettre alphabétique
⚫ Une variable désigne en fait un emplacement mémoire dont exemple valide: A1 exemple invalide: 1A
le contenu peut changer au cours d’un programme (d’où le nom ⚫ doit être constitué uniquement de lettres, de chiffres et du
variable) soulignement _ (Eviter les caractères de ponctuation et les espaces)
valides: SMIP2007, SMP_2007 invalides: SMP 2005,SMI-2007,SMP;2007
⚫ Règle : Les variables doivent être déclarées avant d’être
⚫ doit être différent des mots réservés du langage (par exemple en
utilisées, elle doivent être caractérisées par : Java: int, float, else, switch, case, default, for, main, return, …)
• un nom (Identificateur)
⚫ La longueur du nom doit être inférieure à la taille maximale spécifiée
• un type (entier, réel, caractère, chaîne de caractères, …) par le langage utilisé
25
Déclaration des variables L’instruction d’affectation
⚫ l’affectation consiste à attribuer une valeur à une variable
⚫ Rappel: toute variable utilisée dans un programme doit avoir
(ça consiste en fait à remplir où à modifier le contenu d'une zone mémoire)
fait l’objet d’une déclaration préalable
⚫ En pseudo-code, on va adopter la forme suivante pour la ⚫ En pseudo-code, l'affectation se note avec le signe ←
déclaration de variables Var← e: attribue la valeur de e à la variable Var
Variables liste d'identificateurs : type - e peut être une valeur, une autre variable ou une expression
⚫ Exemple: - Var et e doivent être de même type ou de types compatibles
Variables i, j,k : entier - l’affectation ne modifie que ce qui est à gauche de la flèche
x, y : réel ⚫ Ex valides: i ←1 j ←i k ←i+j
OK: booléen x ←10.3 OK ←FAUX ch1 ←"SMI"
ch1, ch2 : chaîne de caractères ch2 ←ch1 x ←4 x ←j
⚫ Remarque: pour le type numérique on va se limiter aux entiers (voir la déclaration des variables dans le transparent précédent)
et réels sans considérer les sous types ⚫ non valides: i ←10.3 OK ←"SMI" j ←x
26
Exercices simples sur l'affectation Exercices simples sur l'affectation
Donnez les valeurs des variables A et B après exécution des
instructions suivantes ?
Algorithme Calcul_AB ⚫Ecrire un algorithme permettant d’échanger
Variables A, B : Entier les valeurs de deux variables A et B
Début
A←1
B←2
A←B
B←A
Fin
Fin
27
Opérateur, opérande et expression
Exercices simples sur l'affectation
⚫ Quelles seront les valeurs des variables A et B ⚫ Un opérateur est un symbole d’opération qui
après exécution des instructions suivantes ? permet d’agir sur des variables ou de faire des
Algorithme Calcul_AB “calculs”
Variables A, B en Entier
Début ⚫ Une opérande est une entité (variable, constante ou
A←5 expression) utilisée par un opérateur
B←A+4
A←A+1
⚫ Une expression est une combinaison d’opérateur(s)
B←A–4 et d’opérande(s), elle est évaluée durant l’exécution
Fin de l’algorithme, et possède une valeur (son
interprétation) et un type
⚫ L'évaluation de l'expression fournit une valeur unique qui est le • ^ : (élévation à la puissance)
résultat de l'opération • * , / (multiplication, division)
• % (modulo)
⚫ Les opérateurs dépendent du type de l'opération, ils peuvent être : • + , - (addition, soustraction)
• des opérateurs arithmétiques: +, -, *, /, % (modulo), ^ (puissance) exemple: 2+3*7 vaut 23
• des opérateurs logiques: NON, OU, ET, XOR
• des opérateurs relationnels: =, , <, >, <=, >= ⚫ En cas de besoin (ou de doute), on utilise les parenthèses pour
• des opérateurs sur les chaînes: & (concaténation) indiquer les opérations à effectuer en priorité
⚫ Une expression est évaluée de gauche à droite mais en tenant exemple: (2 + 3) * 7 vaut 35
compte de priorités des opérateurs
28
Exercices simples sur l'affectation Exercices simples sur l'affectation
29
Les instructions d'entrées-sorties:
# Ecriture Exemple les instructions E/S
Ecrire un algorithme qui demande un nombre entier à l'utilisateur, puis
⚫ L'écriture permet d'afficher des résultats à l'écran (ou de les écrire qui calcule et affiche le double de ce nombre
dans un fichier)
30
Tests: instructions conditionnelles
⚫ La partie Sinon n'est pas obligatoire, quand elle n'existe pas et que
Algorithme AffichageValeurAbsolue (version1)
la condition est fausse, aucun traitement n'est réalisé
Variable x : réel
• On utilisera dans ce cas la forme simplifiée suivante: Début
Ecrire (" Entrez un réel : “)
Si condition alors Lire (x)
instruction ou suite d'instructions1 Si (x < 0) alors
Finsi Ecrire ("la valeur absolue de ", x, "est:",-x)
Sinon
Ecrire ("la valeur absolue de ", x, "est:",x)
Finsi
Fin
31
Exemple sur instructions conditionnelles Exemple sur instructions conditionnelles
Conditions composées
Tables de vérité
⚫ Une condition composée est une condition formée de plusieurs C1 C2 C1 ET C2 C1 C2 C1 OU C2
conditions simples reliées par des opérateurs logiques:
VRAI VRAI VRAI VRAI VRAI VRAI
ET, OU, OU exclusif (XOR) et NON
VRAI FAUX FAUX VRAI FAUX VRAI
⚫ Exemples : FAUX VRAI FAUX FAUX VRAI VRAI
• x compris entre 2 et 6 : (x > 2) ET (x < 6) FAUX FAUX FAUX FAUX FAUX FAUX
32
Tests imbriqués Exemple Tests imbriqués
Algorithme Nombre_entier
Le prix de photocopies dans une reprographie varie selon le
Variable n : entier
Début nombre demandé: 0,5 DH la copie pour un nombre de copies
Ecrire ("entrez un nombre : ") inférieur à 10, 0,4DH pour un nombre compris entre 10 et 20 et
Lire (n) 0,3DH au-delà.
Si (n < 0) alors Ecrire ("Ce nombre est négatif")
Finsi Ecrivez un algorithme qui demande à l’utilisateur le nombre de
Si (n = 0) alors Ecrire ("Ce nombre est nul") photocopies effectuées, qui calcule et affiche le prix à payer
Finsi
Si (n > 0) alors Ecrire ("Ce nombre est positif")
Finsi
Fin
Remarque : dans la version 2 on fait trois tests systématiquement alors que
dans la version 1, si le nombre est négatif on ne fait qu'un seul test
Conseil : utiliser les tests imbriqués pour limiter le nombre de tests et placer
d'abord les conditions les plus probables
33
Sélection Multiple
Tests imbriqués: corrigé de l'exercice
Algorithme Montant_Copies
Exercice:
Variables copies : entier
prix : réel ➢ Ecrire un algorithme qui lit un chiffre entier compris
Début entre 0 et 9 et qui l’affiche en lettre;
Ecrire ("Nombre de photocopies : ")
Lire (copies)
Si (copies < 10) Alors ➢ Travail demander :
prix ← copies*0.5 ➢ Travail à faire : Lecture d’un chiffre compris entre 0 et 9
Sinon Si (copies) < 20
prix ← copies*0.4
➢ Résultat : Afficher le chiffre en lettre
Sinon ➢ Solution : utiliser les condition
prix ← copies*0.3
Finsi
Finsi
Ecrire (“Le prix à payer est : ”, prix)
Fin
Sélection Multiple
Sélection Multiple
Objectif :
Solution:
Permet d’exécuter un bloc d’instructions selon la valeur
➢ Algorithme Traduction
de la variable ou une expression. Cette solution est
➢ Variable ch : entier
identique à un choix multiple.
➢ Début
Syntaxe:
Ecrire ( ‘’ veuillez saisir un chiffre compris entre 0 et 9 ‘’)
Selon variable (ou Expression) faire
Lire(ch)
Valeur 1 : Bloc Instruction 1
Si (ch=0) alors écrire(‘’Zéro’’) Finsi
Valeur 2 : Bloc Instruction 2
Si (ch=1) alors écrire(‘’un’’) Finsi
Valeur 3 : Bloc Instruction 3
. ..
. Valeur n : Bloc Instruction n
Si (ch=9) alors écrire(‘’Neuf’’) Finsi Sinon : Bloc Instruction par défaut
➢ Fin FinSelon
34
Sélection Multiple
Solution:
➢ Algorithme Traduction
ALGORITHMIQUE
➢ Variable ch : entier
➢ Début
Ecrire ( ‘’ veuillez saisir un chiffre compris entre 0 et 9 ‘’)
Lire(ch)
Selon ch faire Instructions itératives:
les boucles
0 : écrire(‘’Zéro’’)
1 : écrire(‘’un’’)
.
9 : écrire(‘’Neuf’’)
Sinon écrire(‘message d’erreur’’)
FinSelon
➢ Fin
• Les boucles Répéter jusqu'à : on y répète des instructions jusqu'à ce ⚫ la condition (dite condition de contrôle de la boucle) est évaluée avant chaque
qu'une certaine condition soit réalisée itération
• Les boucles pour ou avec compteur : on y répète des instructions en ⚫ si la condition est vraie, on exécute instructions (corps de la boucle), puis, on
faisant évoluer un compteur (variable particulière) entre une valeur initiale retourne tester la condition. Si elle est encore vraie, on répète l'exécution, …
et une valeur finale
⚫ si la condition est fausse, on sort de la boucle et on exécute l'instruction qui
est après FinTantQue
35
Les boucles Tant que : remarques Boucle Tant que : exemple1
⚫ Le nombre d'itérations dans une boucle TantQue n'est pas connu Contrôle de saisie d'une lettre majuscule jusqu’à ce que le caractère
au moment d'entrée dans la boucle. Il dépend de l'évolution de la entré soit valable
valeur de condition
Algorithme Saisie_Lettre
⚫ Une des instructions du corps de la boucle doit absolument changer Variable C : caractère
la valeur de condition de vrai à faux (après un certain nombre Debut
d'itérations), sinon le programme tourne indéfiniment Ecrire (" Entrez une lettre majuscule ")
36
Les boucles Pour Les boucles Pour
Pour compteur allant de valeur initiale à finale par pas ⚫ Remarque : le nombre d'itérations dans une boucle Pour est connu
avant le début de la boucle
instructions
FinPour ⚫ Compteur est une variable de type entier Elle doit être déclarée
i ←initiale ⚫ Pas est un entier qui peut être positif ou négatif. Pas peut ne pas
être mentionné, car par défaut sa valeur est égal à 1. Dans ce cas, le
nombre d'itérations est égal à finale - initiale+ 1
Vrai
i n'a pas atteint finale instructions i ← i + pas ⚫ Initiale et finale peuvent être des valeurs, des variables définies
avant le début de la boucle ou des expressions de même type que
Faux compteur
37
Boucle Pour : exemple1 (version 2) Boucle Pour : remarque
Calcul de x à la puissance n où x est un réel non nul et n un entier ⚫ Il faut éviter de modifier la valeur du compteur (et de finale) à
positif ou nul (version 2 avec un pas négatif) l'intérieur de la boucle. En effet, une telle action :
Algorithme Puissance
• perturbe le nombre d'itérations prévu par la boucle Pour
Variables x, puiss : réel • rend difficile la lecture de l'algorithme
n, i : entier • présente le risque d'aboutir à une boucle infinie
Debut
Ecrire (" Entrez respectivement les valeurs de x et n ") Exemple : Pour i allant de 1 à 5
Lire (x, n) i i -1
écrire(" i = ", i)
puiss ← 1
Finpour
Pour i allant de n à 1 par pas -1
puiss← puiss*x
FinPour
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
38
Boucles imbriquées Les boucles Répéter … jusqu’à …
⚫ Les instructions d'une boucle peuvent être des instructions
Répéter
itératives. Dans ce cas, on aboutit à des boucles imbriquées
instructions instructions
⚫ Exemple: Exécution
Jusqu'à condition
Pour i allant de 1 à 5 OX
Faux
Pour j allant de 1 à i OOX condition
écrire("O") OOOX
Vrai
FinPour OOOOX
écrire("X") OOOOOX ⚫ Condition est évaluée après chaque itération
FinPour
⚫ les instructions entre Répéter et jusqu’à sont exécutées au moins une fois et
leur exécution est répétée jusqu’à ce que condition soit vrai (tant qu'elle est
fausse)
39
Insertion des commentaires
⚫ Syntaxe
⚫ il faut précéder une ligne de commentaires des ALGORITHMIQUE
symboles \\ (deux antéslashs consécutifs) :
tout ce qui suit jusqu'à la fin de la ligne est alors ignoré
lors de la compilation de l'algorithme. Pour prolonger un
commentaire sur plusieurs lignes, il faut commencer
chaque ligne par \\ :
\\ Voici un exemple de commentaire se Exercices
\\ propageant sur plus d'une ligne
DÉBUT
ÉCRIRE "Bonjour tout e monde" \\ Exemple de commentaire en fin de ligne
FIN
Exercice 1 :
⚫Écrire un algorithme permettant de Lire la suite des prix (en Exercice 1 :
Dirhams entiers et terminée par zéro) des achats d’un client, de
Calculer le montant des achats, de lire la somme versée, et de
simuler la remise de la monnaie en affichant les textes " Pièces de
10 Dh", " Pièces de 5 Dh" et " Pièces de 1 Dh" autant de fois qu’il y ⚫Écrire un algorithme permettant de Lire la suite
a de pièces à rendre. des prix (en Dirhams entiers et terminée par zéro)
Exercice 2 : des achats d’un client, de Calculer le montant
⚫Ecrire un algorithme permettant de résoudre une
des achats, de lire la somme versée, et de simuler
équation de seconde degré : la remise de la monnaie en affichant les textes "
ax² + bx + c = 0. Pièces de 10 Dh", " Pièces de 5 Dh" et " Pièces de
1 Dh" autant de fois qu’il y a de pièces à rendre.
40
Solution de l’Exercice 1 : Suite de la solution de l’Exercice 1:
Algorithme guichet ⚫
TantQue Reste >= 10
Variables PA, MontP, MontV, Reste, NP10, NP5 : Entier NP10 ← NP10 + 1
Debut Reste ← Reste – 10
PA ← 1 FinTantQue
MontP ← 0 NP5 ← 0
TantQue PA <> 0 Si Reste >= 5
Ecrire ("Entrez le montant de l’article : " ) NP5 ← 1
Lire (PA) Reste ← Reste – 5
MontP ← MontP + PA FinSi
FinTantQue Ecrire ("la monnaie rendue est :")
Ecrire ("Vous devez payer :", MontP, " dirhams" ) Ecrire ("Les Pièces de 10 Dh : ", NP10)
Ecrire ("Saisir le Montant versé :") Ecrire ("Les Pièces de 5 Dh : ", NP5)
Lire (MontV) Ecrire ("Les Pièces de 1 Dh : ", reste)
Reste ← MontV - MontP Fin
NP10 ← 0
Algorithme Equation
⚫ Écrire un algorithme permettant de résoudre Variables a, b, c, Delta: réel
une équation de seconde degré : Début
ax² + bx + c = 0. Écrire( "Introduisez le coefficient de x2:’’ )
lire (a)
écrire ("Introduisez le coefficient de x:’’ )
lire (b)
écrire ("Introduisez le terme indépendant:’’ )
lire (c)
•
41
Suite de la Solution de l’Exercice 2:
si a=0 alors écrire "Equation du premier degré."
sinon Delta b*b-4a*c
si Delta>0 alors écrire ("2 racines réelles distinctes:")
écrire ("x1=",(-b+ Sqrt(Delta))/(2*a))
ALGORITHMIQUE
écrire ("x2=",(-b- Sqrt( Delta))/(2*a))
sinon si Delta=0 alors écrire ("2 racines réelles égales:")
écrire ("x1=x2=",-b/(2*a))
sinon écrire ("2 racines complexes conjuguées:")
écrire ("x1=",-b/(2*a)," + i", Sqrt( -Delta) /(2*a)) Les tableaux
écrire ("x2=",-b/(2*a)," - i", Sqrt( -Delta)/(2*a))
Finsi
Finsi
Finsi
Fin
•
42
Tableaux : remarques Tableaux : exemples (1)
⚫ L'accès à un élément du tableau se fait au moyen de l'indice. Par exemple, ⚫ Pour le calcul du nombre d'étudiants ayant une note supérieure à
notes[i] donne la valeur de l'élément i du tableau notes 12 avec les tableaux, on peut écrire :
⚫ Selon les langages, le premier indice du tableau est soit 0, soit 1. Le plus Algorithme CalculNote
souvent c'est 0 (c'est ce qu'on va adopter en pseudo-code). Dans ce cas, Variables i ,nbre : entier
notes[i] désigne l'élément i+1 du tableau notes tableau notes[30] : réel
Début
⚫ Il est possible de déclarer un tableau sans préciser au départ sa dimension.
nbre ← 0
Cette précision est faite ultérieurement .
Pour i allant de 0 à 29
• Par exemple, quand on déclare un tableau comme paramètre d'une procédure, Si (notes[i] >12) alors
on peut ne préciser sa dimension qu'au moment de l'appel
nbre ←nbre+1
• En tous cas, un tableau est inutilisable tant qu’on n’a pas précisé le nombre de FinSi
ses éléments FinPour
⚫ Un grand avantage des tableaux est qu'on peut traiter les données qui y écrire ("le nombre de notes supérieures à 12 est : ", nbre)
sont stockées de façon simple en utilisant des boucles Fin
43
Exemple: Tableaux à deux dimensions Exemple: Tableaux à deux dimensions ( Suite)
Exemple d'algorithme qui permet de saisir, d’afficher et de calculer la somme
Pour i allant de 0 à n-1
des éléments de deux matrices :
écrire ("saisie de la ligne ", i + 1)
Algorithme Somme_Matricielle
Pour j allant de 0 à m-1
variables tableau A[ ][ ],B [ ][ ],C [ ][ ] : réel
écrire ("Entrez l'élément de la ligne ", i + 1, " et de la
i, j, n, m : entier colonne ", j+1)
Début lire (B[i][j])
Écrire (" Entrez le nombre de lignes et de colonnes des matrices
A,B et C") FinPour
Lire (n,m) FinPour
Pour i allant de 0 à n-1 Pour i allant de 0 à n-1
écrire ("saisie de la ligne ", i + 1) Pour j allant de 0 à m-1
Pour j allant de 0 à m-1 C[i][j] ← A[i][j]+B[i][j]
écrire ("Entrez l'élément de la ligne ", i + 1, " et de la écrire ("C[",i, "] [",j,"]=", C[i][j])
colonne ", j+1) FinPour
lire (A[i][j]) FinPour
FinPour Fin
FinPour
Solution de l’Exercice:
Exercice : Algorithme notesclasse
Variables Som, Moy, Tableau T() : Réel
44
Suite de la Solution de l’Exercice:
Pour i allant de 0 à Nb - 1
ALGORITHME
Si T(i) > Moy Alors
NbSup NbSup + 1
FinSi
FinPour
Ecrire( NbSup, " étudiants dépassent la moyenne de la
classe" ) Fonctions et procédures
• Fin
Programmation procédurale
Fonctions et procédures
⚫ Certains problèmes complexes conduisent à réaliser des programmes
longs et sophistiqués, difficiles à les écrire et à les comprendre. Et ⚫ Principe:
difficiles à avoir une vision globale sur leurs fonctionnement et à • Il s’agit d’écrire des programmes en utilisant des
localiser les erreurs. sous-programmes
⚫ Forme générale d’un programme
⚫ Solution : décomposer le problème en des
modules cohérents organisés sous forme d’entités Programme P
indépendantes appelées sous-programmes Sous-programme SP1
exécutant une tâche précise:
• Trouver une solution à chacun
…
• La solution partielle donne lieu à un sous-programme Sous-programme SPn
FinP
180
45
Exemple
⚫ Algorithme qui teste si M est la matrice inverse de N Fonctions et procédures
46
Structure générale des fonctions
Fonctions : exemples
⚫ La fonction SommeCarre suivante calcule la somme des carrées de
deux réels x et y :
Fonction SommeCarre (x : réel, y: réel ) : réel
variable z : réel
Début
z ←x^2+y^2
retourne (z)
FinFonction
⚫ La fonction Pair suivante détermine si un nombre est pair :
Fonction Pair (n : entier ) : booléen
retourne (n%2=0)
FinFonction
47
Procèdures
Procédures : structure
⚫ Tout comme les fonctions, une ⚫ Une procédure s'écrit en dehors du programme principal
procédure est un sous-programme qui : sous la forme :
• A un nom Procédure nom_procédure (paramètres et leurs
• Peut avoir des paramètres types)
• Qui peut avoir besoin de variables Déclaration des variables
• Qui est composé d’instructions Début
Instructions
FinProcédure
⚫ Remarque : une procédure peut ne pas avoir de
paramètres
189
192
48
Procédure de saisie
Algorithme de saisie et de tri Procédure saisir(n, tableau T[] :Entiers)
variable i: entier
Algorithme Tri_Tableau Début
Variable n, Tableau T[ ] :Entier Pour i allant de 0 à n-1
Début Lire(T(i))
Fin Pour
Ecrire ( "Entrez le nombre de notes à saisir : ")
Fin Procédure
Lire (n)
Saisir(n,T)
Trier(n,T)
Fin
193 194
195 196
49
Fonction qui retourne l’indice de la
valeur max dans une partie du tableau Paramètres d'une procédure
⚫ Les paramètres servent à échanger des données entre le programme
Fonction IndMax ( n, i: entier, tableau T[] :entiers) : entier
principale (ou la procédure appelante) et la procédure appelée
variable j, Max: entier
Début
⚫ Les paramètres placés dans la déclaration d'une procédure sont appelés
Max i paramètres formels. Ces paramètres peuvent prendre toutes les valeurs
Pour j allant de i à n-1 possibles mais ils sont abstraits (n'existent pas réellement)
Si T(Max) < T(j) Alors
Max j ⚫ Les paramètres placés dans l'appel d'une procédure sont appelés
FinSi paramètres effectifs. ils contiennent les valeurs pour effectuer le
Fin Pour traitement
IndMax Max
⚫ Le nombre de paramètres effectifs doit être égal au nombre de paramètres
Fin Fonction
formels. L'ordre et le type des paramètres doivent correspondre
197
50
Transmission par valeur, par adresse : exemples
Variables locales et globales (1)
Procédure qui calcule la somme et le produit de deux entiers :
Procédure SommeProduit (x,y: entier par valeur, som, prod : entier par adresse) ⚫ On peut manipuler 2 types de variables dans un module (procédure ou
Début fonction) : des variables locales et des variables globales. Elles se
som ← x+y distinguent par ce qu'on appelle leur portée (leur "champ de définition", leur
prod ← x*y "durée de vie")
FinProcédure
Procédure qui échange le contenu de deux variabales : ⚫ Une variable locale n'est connue qu'à l'intérieur du module ou elle a été
définie. Elle est créée à l'appel du module et détruite à la fin de son exécution
Procédure Echange (x : réel par adresse, y : réel par adresse)
variables z : réel
⚫ Une variable globale est connue par l'ensemble des modules et le
Début programme principale. Elle est définie durant toute l’application et peut être
z←x utilisée et modifiée par les différents modules du programme
x←y
y←z
FinProcédure
• En général, les variables déclarées à l'intérieur d'une fonction ou ⚫ Tout module récursif doit posséder un cas limite (cas trivial) qui
procédure sont considérées comme variables locales arrête la récursivité
• En pseudo-code, on va adopter cette règle pour les variables locales et on ⚫ Exemple : Calcul du factorielle
déclarera les variables globales dans le programme principale Fonction fact (n : entier ) : entier
Début
• Conseil : Il faut utiliser autant que possible des variables locales plutôt que Si (n=0) alors
des variables globales. Ceci permet d'économiser la mémoire et d'assurer retourne (1)
l'indépendance de la procédure ou de la fonction Sinon
retourne (n*fact(n-1))
Finsi
FinFonction
51
Fonctions récursives : exercice Fonctions récursives : exercice (suite)
⚫ Ecrivez une fonction récursive (puis itérative) qui calcule le terme n ⚫ Une fonction itérative pour le calcul de la suite de Fib :
de la suite de Fib définie par : U(0)=U(1)=1 Fonction Fib (n : entier ) : entier
U(n)=U(n-1)+U(n-2) Variables i, AvantDernier, Dernier, Nouveau : entier
Début
Fonction Fib (n : entier ) : entier Si (n=1 OU n=0) alors retourne (1)
Début Finsi
Variable res : entier AvantDernier ←1, Dernier ←1
Si (n=1 OU n=0) alors Pour i allant de 2 à n
res ←1 Nouveau← Dernier+ AvantDernier
Sinon AvantDernier ←Dernier
res ← Fib(n-1)+Fib(n-2) Dernier ←Nouveau
Finsi FinPour
retourne (res) retourne (Nouveau)
FinFonction FinFonction
Remarque: la solution récursive est plus facile à écrire
52
LES FONCTIONS PRÉDÉFINIES: exemple
⚫ Les fonctions mathématiques prédéfinies permettent la
LES FONCTIONS PRÉDÉFINIES: exemple réalisation d'un traitement mathématiques sur des données
numériques:
⚫ FONCTIONS DE TEXTE EXEMPLES:
⚫ Abs(x) Retourne la valeur absolue d'un nombre x ← Abs(-12) x = 12
• Len("Bonjour, ça va ?") vaut 16 ⚫ Ent(x) Retourne la partie entière d'un nombre x ← Ent(12.3) x = 12
Len("") vaut 0
⚫ Cos(x) Retourne une valeur spécifiant le cosinus d'un angle x ← Cos(0) x = 1
Mid("Zorro is back", 4, 7) vaut "ro is b"
Mid("Zorro is back", 12, 1) vaut "c" ⚫ Sin(x) Retourne une valeur spécifiant le sinus d'un angle x ← Sin(0) x = 0
Left("Et pourtant…", 8) vaut "Et pourt" ⚫ Tan(x) Retourne une valeur contenant la tangente d'un angle x ← Tan(0) x = 0
Right("Et pourtant…", 4) vaut "t…" ⚫ Sqrt(x) Retourne une valeur spécifiant la racine carrée d'un nombre x ← Sqrt(4) x = 2
Trouve("Un pur bonheur", "pur") vaut 4 ⚫ Alea() Retourne un nombre aléatoire compris entre 0 (inclus) et 1 (exclu)
Trouve("Un pur bonheur", "techno") vaut 0
x ← alea() 0 =< x < 1
La fonction Alea renvoie un nombre réel aléatoire compris entre 0 et 1. Pour obtenir
une valeur entière comprise entre min et max (avec min < max), on utilise la formule
suivante : Ent((max-min+1)*Alea() + min)
Exemple : Générer un nombre aléatoire X compris entre 5 et 10.
Solution :
X ← Ent(6 * Alea() + 5)
53
Tableaux : fonction longueur
Tableaux : exemples d'appel La plus part des langages offrent une fonction longueur qui donne la dimension
du tableau. Les procédures Saisie et Affiche peuvent être réécrites comme suit :
⚫ Algorithme principale qui fait appel aux procédures SaisieTab et Procédure SaisieTab( tableau T : réel par référence )
AfficheTab : variable i: entier
Début
Algorithme Tableaux Pour i allant de 0 à longueur(T)-1
variable p : entier écrire ("Saisie de l'élément ", i + 1)
tableau A[] : réel lire (T[i] )
FinPour
Début
Fin Procédure
Ecrire ( "Entrez la dimension du tableau: ")
Procédure AfficheTab(tableau T : réel par valeur )
Lire (p)
variable i: entier
SaisieTab(p, A) Début
AfficheTab(p,A) Pour i allant de 0 à longueur(T)-1
Fin écrire ("T[",i, "] =", T[i])
FinPour
Fin Procédure
Exercice Exemple d'algorithme principale qui fait appel aux procédures définies
précédemment pour la saisie, l'affichage et la somme des matrices :
Écrire un algorithme qui fait appel aux procédures suivantes:
⚫ saisie de deux matrices ;
Algorithme Matrices
⚫ Affichage de deux matrices
variables tableau A[ ][ ],B [ ][ ],C [ ][ ] : réel
⚫ Somme de deux matrices n, m : Entier
⚫ Affichage de la matrice somme Début
Écrire (" Entrez le nombre de lignes et de colonnes de la matrices")
Lire (n,m)
SaisieMatrice(n, m, A)
SaisieMatrice(n, m, B)
AfficheMatrice(n,m, A)
AfficheMatrice(n,m, B)
SommeMatrice(n, m, A,B,C)
AfficheMatrice(n,m, C)
Fin
54
Exemples : lecture d'une matrice Exemples : affichage d'une matrice
⚫ Procédure qui permet de saisir les éléments d'une matrice : ⚫ Procédure qui permet d'afficher les éléments d'une matrice :
Procédure SaisieMatrice(n : entier par valeur, m : entier par valeur , Procédure AfficheMatrice(n : entier par valeur, m : entier par valeur
tableau T[ ][ ] : réel par référence ) ,tableau T[ ][ ]: réel par valeur )
variables i ,j : entier variables i ,j : entier
Début
Début
Pour i allant de 0 à n-1
écrire ("saisie de la ligne ", i + 1) Pour i allant de 0 à n-1
Pour j allant de 0 à m-1
Pour j allant de 0 à m-1
écrire ("Entrez l'élément de la ligne ", i + 1, " et de la colonne ", j+1) écrire ("T[",i, "] [",j,"]=", T[i][j])
lire (T[i][j]) FinPour
FinPour FinPour
FinPour Fin Procédure
Fin Procédure
55
Recherche séquentielle (version 2)
Recherche séquentielle
⚫ Une fonction Recherche qui retourne un booléen pour indiquer si une valeur
⚫ Recherche de la valeur x dans un tableau T de N éléments : x appartient à un tableau T de dimension N.
Algorithme RechercheValeur x , N et T sont des paramètres de la fonction
Variables i,N: entier, Trouvé : booléen, tableau T[}: réel , X Réel
Debut Fonction Recherche(x : réel par valeur, N: entier par valeur, tableau
Ecrire ("Saisir la dimension du Tableau et la valeur de X ") T : réel par valeur) : booléen
lire (N,x) Variable i: entier
i←0 , Trouvé ← Faux
Début
TantQue (i < N) ET (Trouvé=Faux)
Si (T[i]=x) alors Pour i allant de 0 à N-1
Trouvé ← Vrai Si (T[i]=x) alors
Sinon retourne (Vrai)
i←i+1 FinSi
FinSi FinPour
FinTantQue
retourne (Faux)
Si Trouvé alors // c'est équivalent à écrire Si Trouvé=Vrai alors
FinFonction
écrire ("x appartient au tableau")
Sinon écrire ("x n'appartient pas au tableau")
FinSi
Fin
⚫ Pour évaluer l’efficacité d'un algorithme, on calcule sa complexité ⚫ Pour évaluer l’efficacité de l'algorithme de recherche séquentielle, on va
calculer sa complexité dans le pire des cas. Pour cela on va compter le
⚫ Mesurer la complexité revient à quantifier le temps d'exécution et l'espace nombre de tests effectués
mémoire nécessaire
⚫ Le pire des cas pour cet algorithme correspond au cas où x n'est pas dans
⚫ Le temps d'exécution est proportionnel au nombre des opérations le tableau T
effectuées. Pour mesurer la complexité en temps, on met en évidence ⚫ Si x n’est pas dans le tableau, on effectue 3N tests : on répète N fois les
certaines opérations fondamentales, puis on les compte
tests (i < N), (Trouvé=Faux) et (T[i]=x)
⚫ Le nombre d'opérations dépend généralement du nombre de données à ⚫ La complexité dans le pire des cas est d'ordre N, (on note O(N))
traiter. Ainsi, la complexité est fonction de la taille des données. On
s'intéresse souvent à son ordre de grandeur asymptotique ⚫ Pour un ordinateur qui effectue 106 tests par seconde on a :
N 103 106 109
⚫ En général, on s'intéresse à la complexité dans le pire des cas et à la
complexité moyenne temps 1ms 1s 16mn40s
56
Recherche dichotomique : algorithme
Recherche dichotomique Algorithme RechercheDichotomique
Variables inf, sup, N: entier, Trouvé : booléen, tableau T : réel , X Réel
Debut
Ecrire ("Saisir la dimension du Tableau et la valeur de X ")
⚫ Dans le cas où le tableau est ordonné, on peut améliorer l'efficacité
lire (N,x)
de la recherche en utilisant la méthode de recherche dichotomique
inf←0 ,Trouvé ← Faux , sup←N-1
TantQue (inf <=sup) ET (Trouvé=Faux)
⚫ Principe : diviser par 2 le nombre d'éléments dans lesquels on milieu←(inf+sup)/2
cherche la valeur x à chaque étape de la recherche. Pour cela on Si (x=T[milieu]) alors Trouvé ← Vrai
compare x avec T[milieu] : Sinon Si (x>T[milieu]) alors inf←milieu+1
Sinon sup←milieu-1
• Si x < T[milieu], il suffit de chercher x dans la 1ère moitié du tableau FinSi
entre (T[0] et T[milieu-1]) FinSi
FinTantQue
• Si x > T[milieu], il suffit de chercher x dans la 2ème moitié du tableau Si Trouvé alors écrire ("x appartient au tableau")
entre (T[milieu+1] et T[N-1])
Sinon écrire ("x n'appartient pas au tableau")
FinSi
Fin
Exemple d'exécution
⚫ Considérons le tableau T : 4 6 10 15 17 18 24 27 30 ⚫ La complexité dans le pire des cas est d'ordre log 2 N
⚫ Si la valeur cherché est 20 alors les indices inf, sup et milieu vont évoluer ⚫ L'écart de performances entre la recherche séquentielle et la recherche
comme suit : dichotomique est considérable pour les grandes valeurs de N
57
Tri d'un tableau Tri à bulles
⚫ Le tri à bulles ou tri par propagation est
un algorithme de tri qui consiste à faire remonter
⚫ Le tri consiste à ordonner les éléments du tableau dans l’ordre progressivement les plus grands éléments
croissant ou décroissant. Le tri en algorithmique est attaché au
processus de classement d'un ensemble d'éléments dans un ordre
d'un tableau, comme les bulles d'air remontent à
donné. Par exemple, trier N entiers dans l'ordre croissant, ou N la surface d'un liquide.
noms dans l'ordre alphabétique. Tout ensemble muni d'un ordre
total peut fournir une suite d'éléments à trier. ⚫ Le tri à bulles est souvent enseigné en tant
qu'exemple algorithmique, car son principe est
⚫ Il existe plusieurs algorithmes connus pour trier les éléments d’un simple
tableau :
• Le tri à bulles
• Le tri par sélection
• Le tri par insertion
• Le tri rapide
58
Animation : Tri à bulles : Exemple version non optimisée de Tri à bulles
procédure tri_bulle(tableau t : réel par référence)
// On échange les éléments de rang j et j+1
Début
n ← longueur(t)
pour i allant de n-1 à 0 pas -1 faire
pour j allant de 0 à i faire
si (t[j] > t[j+1]) alors
tmp ← t[j]
t[j] ← t[j+1]
t[j+1] ← tmp
fin si
fin pour
fin pour
fin procédure
59
Tri par sélection Tri par sélection : Animation
⚫ Principe : Sur un tableau de n éléments (numérotés de 1 à n), le principe
du tri par sélection est le suivant :
• rechercher le plus petit élément du tableau, et l'échanger avec l'élément d'indice 1 ;
• rechercher le second plus petit élément du tableau, et l'échanger avec l'élément
d'indice 2 ;
• continuer de cette façon jusqu'à ce que le tableau soit entièrement trié.
⚫ Exemple :
9 4 1 7 3
• Étape 1: on cherche le plus petit parmi les 5 éléments du tableau. On
l’identifie en troisième position, et on l’échange alors avec l’élément 1 :
1 4 9 7 3
• Étape 2: on cherche le plus petit élément, mais cette fois à partir du
deuxième élément. On le trouve en dernière position, on l'échange
avec le deuxième:
1 3 9 7 4
• Étape 3:
1 3 4 7 9
pour i de 0 à n - 1 ⚫ On effectue N-1 tests pour trouver le premier élément du tableau trié, N-2
min ← i tests pour le deuxième, et ainsi de suite. Soit : (N-1)+(N-2)+…+1 = N(N-1)/2
pour j de i + 1 à n On effectue en plus (N-1) échanges.
si t[j] < t[min], alors
⚫ La complexité du tri par sélection est d'ordre N² à la fois dans le meilleur
min ← j des cas, en moyenne et dans le pire des cas
finpour
si min <> i, alors
échanger (t[i] ,t[min])
finpour
finprocédure
60
Tri par insertion Tri par insertion
⚫ Cette méthode de tri insère (au ième passage) le • Données: un tableau de n éléments à trier
ième élément T[i] à la bonne place parmi • Principe: la partie gauche est triée; on essaie d'insérer chaque
T[1],T[2]...T[i-1]. nouvel élément dans cette liste, en décalant d'un élément la
partie droite restante.
⚫ Après l'étape i, tous les éléments entre la première ⚫place du nouveau
et la ième position sont triés.
⚫ Il existe plusieurs méthode de tri par insertion
⚫liste triée ⚫nouveau
selon le principe qui est utilisé pour rechercher le
rang de l’élément à insérer parmi les éléments du
début de la liste déjà triés ⚫liste triée
⚫reste à trier
4 2 0 5 3 Vecteur de départ
61
Tri par insertion Tri par Insertion : complexité
procédure tri_insertion(tableau T: réel par référence, n:
entier valeur) ⚫ La complexité du tri par insertion est Θ(n2) dans le pire des
Variable i, j, x: entier cas et en moyenne, et linéaire dans le meilleur des cas.
début Plus précisément :
pour i de 1 à n ➢ Dans le pire des cas, atteint lorsque le tableau est trié à
x ← T[i] l'envers, l'algorithme effectue de l'ordre
j←i de n2/2 affectations et comparaisons ;
tant que ( j > 0 et T[j - 1] > x) ➢ Si les éléments sont distincts et que toutes
T[j] ← T[j - 1] leurs permutations sont équiprobables (ie avec
j←j–1 une distribution uniforme), la complexité en moyenne de
fin tant que l'algorithme est de l'ordre de n2/4 affectations et
T[j] ← x comparaisons ;
finpour ➢ Si le tableau est déjà trié, il y a n-1 comparaisons et O(n)
finprocédure affectations.
Tri rapide
Principe de Tri rapide
⚫ Le tri rapide est un tri récursif basé sur l'approche "diviser pour régner"
(consiste à décomposer un problème d'une taille donnée à des sous
problèmes similaires mais de taille inférieure faciles à résoudre) ⚫ La méthode consiste à placer un élément du tableau (appelé pivot) à sa
place définitive, en permutant tous les éléments de telle sorte que tous
⚫ Description du tri rapide : ceux qui sont inférieurs au pivot soient à sa gauche et que tous ceux qui
sont supérieurs au pivot soient à sa droite.
• 1) on considère un élément du tableau qu'on appelle pivot ⚫ Cette opération s'appelle le partitionnement. Pour chacun des sous-
tableaux, on définit un nouveau pivot et on répète l'opération de
• 2) on partitionne le tableau en 2 sous tableaux : les éléments inférieurs
partitionnement. Ce processus est répété récursivement, jusqu'à ce que
l'ensemble des éléments soit trié.
ou égaux à pivot et les éléments supérieurs à pivot. on peut placer
ainsi la valeur du pivot à sa place définitive entre les deux sous ⚫ Concrètement, pour partitionner un sous-tableau :
tableaux ➢on place le pivot à la fin (arbitrairement), en l'échangeant avec le
dernier élément du sous-tableau ;
• 3) on répète récursivement ce partitionnement sur chacun des sous ➢on place tous les éléments inférieurs au pivot en début du sous-
tableaux crées jusqu'à ce qu'ils soient réduits à un à un seul élément tableau ;
➢on place le pivot à la fin des éléments déplacés.
62
Animation: Tri rapide
Procédure Tri rapide
Procédure TriRapide(tableau T : réel par référence, p, d: entier par valeur)
variable q: entier
Début
Si p <d alors
Partition(T,p,d,q)
TriRapide(T,p,q-1)
TriRapide(T,q+1,d)
FinSi
Fin Procédure
Procédure de partition
Procédure Partition(tableau T : réel par référence, p, d: entier par valeur,
q: entier par référence )
Procédure de partition
Variables i, j: entier
pivot: réel
Debut
pivot← T[p], i←p+1, j ← d
TantQue (i<=j)
TantQue (i<=d et T[i] <=pivot) i ← i+1 FinTantQue
TantQue (j>=p et T[j] >pivot ) j ← j-1 FinTantQue
Si i <j alors
Echanger(T[i], T[j]), i ← i+1, j ← j-1
FinSi
FinTantQue
Echanger(T[j], T[p])
q←j
Fin Procédure
63
Comparaison des algorithmes de Tri
Tri rapide : complexité et remarques
⚫ La complexité du tri rapide dans le pire des cas est en O(N²)
Pire des
Nom Cas Optimal Cas Moyen
⚫ La complexité du tri rapide en moyenne est en O(N log N) Cas
n2
⚫ Le choix du pivot influence largement les performances du tri rapide Tri à bulles n n2
⚫ Le pire des cas correspond au cas où le pivot est à chaque choix le plus petit
Tri par n2 n2 n2
élément du tableau (tableau déjà trié) Sélection
Tri par
⚫ différentes versions du tri rapide sont proposés dans la littérature pour rendre n n2 n2
Insertion
le pire des cas le plus improbable possible, ce qui rend cette méthode la plus
rapide en moyenne parmi toutes celles utilisées nlog n n2
Tri Rapide nlog n
[Link]
Présentation
64
Organisation des Fichiers
Les Fichiers
⚫ 3 points essentiels requis pour stocker des informations à long terme : ⚫ 3 Types de fichiers
• Suite d'octets
1. Pouvoir stocker des informations de très grande taille, • Suite d'enregistrements
• Arbre d'enregistrements
2. Les informations ne doivent pas disparaître lorsque le processus
qui les utilise se termine,
65
STRUCTURE DES ENREGISTREMENTS
TYPES D’ACCÈS
INSTRUCTIONS INSTRUCTIONS
⚫Exemples:
⚫ Pour travailler sur un fichier, la première chose à ⚫Ouverture d’un fichier:
faire est de l’ouvrir en précisant le nom du fichier ou Ouvrir "[Link]" sur 4 en Lecture
un numéro de canal
⚫ Les opérations sur le Fichier :lecture, écriture ou Algorithme LectureFichier
ajout. Variables Indiv, Nom, Prénom, Tel, Mail : chaine de Caractères
1. Lecture: on pourra uniquement récupérer les Début
informations qu’il contient, sans les modifier. Ouvrir "[Link]" sur 4 en Lecture
LireFichier 4, Indiv
2. Ecriture: on pourra lire et modifier les informations Nom ← Mid(Indiv, 1, 20)
existantes. Mais les informations précédentes, si Prénom ← Mid(Indiv, 21, 15)
elles existent, seront intégralement écrasées Tel ← Mid(Indiv, 36, 10)
3. Ajout: on ne peut ni lire, ni modifier les Mail ← Mid(Indiv, 46, 20)
informations existantes. Mais on pourra, ajouter de Fermer 4
nouvelles lignes (d’enregistrements). Fin
66
INSTRUCTIONS
Algorithme LectureFichier
Tableaux Nom(), Prénom(), Tel(), Mail(), Etud : chaine de
Caractères INSTRUCTIONS
Variable i : entier ⚫Exemples:
Début
Ouvrir "[Link]" sur 5 en Lecture ⚫Ouverture d’un fichier:
i ← -1
Tantque Non EOF(5) Algorithme OuvFichier
LireFichier 5, Etud
i←i+1 Variable Ch : chaine de Caractères
Redim Nom(i) Début
Redim Prénom(i) Ouvrir "[Link]" sur 5 en Lecture
Redim Tel(i) Tantque Non EOF(5)
Redim Mail(i) LireFichier 5, Ch
Nom(i) ← Mid(Etud, 1, 20) …
Prénom(i) ← Mid(Etud, 21, 15) FinTantQue
Tel(i) ← Mid(Etud, 36, 10) Fermer 5
Mail(i) ← Mid(Etud, 46, 20) Fin
FinTantQue
Fermer 5
Fin
INSTRUCTIONS INSTRUCTIONS
Algorithme permettant de saisir et d’ajouter . Algorithme permettant l’ajout
Algorithme ajout Algorithme ajout
Variables Nom * 20, Prénom * 15, Tel * 10, Mail * 20, Lig : Variable Zone : chaine de Caractères
chaine de Caractères Variables Nom*20, Prénom*15, Tel*10, Mail*20 :
Debut chaine de Caractères
Ecrire "Entrez le nom : " Debut
Lire Nom
Ecrire "Entrez le prénom : " Ouvrir "[Link]" sur 3 en Ajout
Lire Prénom Nom ← " OTMANI"
Ecrire "Entrez le téléphone : " Prénom ← " Hamza"
Lire Tel Tel ← "0537946532"
Ecrire "Entrez le Mail : "
Lire Mail Mail ← " Hotmani@[Link]"
Lig ← Nom & Prénom & Tel & Mail Zone ← Nom & Prénom & Tel & Mail
Ouvrir "[Link]" sur 1 pour Ajout EcrireFichier 3, Zone
EcrireFichier 1, Lig Fermer 3
Fermer 1 Fin
Fin
67
DONNÉES STRUCTURÉES
STRATÉGIES DE TRAITEMENT
Définition :
Deux manières de traiter les fichiers textes: un enregistrement est une structure de données
1. Modifier directement (ou presque) les informations sur le disque dur.
hétérogène ( éléments de types différents) : c’est donc
2. Recopier l’intégralité du fichier de départ en mémoire vive. lorsque un ensemble d’entités hétérogènes mais liées
le traitement est terminé, recopie à nouveau dans l'autre sens, depuis
la mémoire vive vers le fichier d’origine.
logiquement les unes aux autres.
Les avantages de la seconde technique sont nombreux: Déclaration d’une structure:
⚫ Rapidité : les accès en mémoire vive sont plus rapides (nanosecondes) Structure Individu
que les accès aux mémoires de masse (millisecondes au mieux pour un
disque dur). matricule * 6 : chaine de caratères
⚫ Facilité de programmation : largement plus facile de faire des
traitements avec un tableau qu’avec des fichiers. Désignation * 20 : chaine de Caractères
Inconvénient : Quantité en entier
⚫ Recopie de très gros fichier en mémoire vive exige des ressources;
Prix en réel
⚫ fichier contenant des données de type non homogènes (chaînes,
numériques, etc.) Fin Structure
68
I. Données structurées simples II. Tableaux de données structurées
Algorithme de lecture du fichier et de la recopie des données
Accès à un des champs de la variable structurée en mémoire vive, en utilisant un tableau structuré.
En utilisant le point : Algorithme GestEtudiant
[Link] ← " OTMANI" Structure Etudiant
[Link]énom ← " Hamza" Nom * 20 : chaine de Caractères
[Link] ← " 0537946532 " Prénom * 15 : chaine de Caractères
Tel * 10 : chaine de Caractères
[Link] ← " Hotmani@[Link]" Mail * 20 : chaine de Caractères
Fin Structure
L’écriture dans le fichier en utilisant la variable Tableau TabEtudiant[] en Etudiant
Individu Variable i : entier
EcrireFichier 3, Individu Début
Ouvrir "[Link]" sur 3 en Lecture
i←0
Lecture de l’enregistrement du fichier vers la variable Individu: Tantque Non EOF(3)
Redim TabEtudiant[i]
LireFichier 5, Individu LireFichier 3, TabEtudiant[i]
i←i+1
FinTantQue
Fermer 3
Fin
Exercice :
RÉCAPITULATIF
Écrire un algorithme ,en utilisant les procédures ou les
fonctions, qui permet de :
L’utilisation des données d’un fichier nécessite plusieurs choix :
➢Organisation en enregistrements du fichier (choix
➢ saisir des informations sur les étudiants( Nom ;
entre fichier texte ou fichier binaire) prénom ; note en contrôle continu , note en TP , note
➢Type d'accès aux enregistrements du fichier en examen final) sur un fichier.
(direct ou séquentiel ou indexé)
➢ Structure des enregistrements (présence de
➢ Calculer la moyenne générale sachant que le
séparateurs ou champs de largeur fixe) coefficient de chaque note est de : contrôle continu 3 ;
➢Méthode de traitement des informations (recopie TP 2 et note de l’examen final 5.
intégrale du fichier en mémoire vive ou non)
➢Type de variables utilisées (plusieurs tableaux de
➢ Déterminer le nombre des étudiants qui ont la
type simple, ou un seul tableau de type structuré). moyenne générale supérieure à la moyenne de la
classe et afficher les résultats.
Pas de règle de conduite valable. Il faut connaître ces
techniques, et savoir choisir la bonne option selon le problème
à traiter.
69
Solution : Solution :
Algorithme Notesétudiants Procédure Saisicalnote(n : entier par valeur, Tableau Mesnotes : par
Structure etudiant référence )
Nom * 20 : chaine de Caractères variables i : entier
Prénom * 15 : chaine de Caractères Début
Notecc en réel
Ouvrir "[Link]" sur 2 pour Ecriture
Notetp en réel
Pour i allant de 0 à n-1
NoteEF en réel écrire ("Entrez les informations sur l’étudiant ", i + 1, )
Moyeng en réel lire ([Link][i])
Fin Structure
lire ([Link]énom[i])
Tableau Mesnotes[] en etudiant
lire ([Link][i])
Variables n: entier
lire ([Link][i])
Début
lire ([Link][i])
écrire ("Entrez le nombre des etudiants ")
[Link][i] ([Link][i]*3+ [Link][i]*2+
lire (n)
[Link][i]*5)/10
Saisicalnote(n, Mesnotes)
EcrireFichier 2, MesNotes[i]
Afficherésultat(n,Mesnotes)
FinPour
Fin
Fin Procédure
70