Algorithmique – Cours 1

publicité
Algorithmique – Cours 1
Algorithmique – Cours 1
1. Introduction.
Un ordinateur est une machine électronique programmable servant au traitement de
l’information codée sous forme binaire
Un ordinateur manipule exclusivement des informations binaires.
Un ordinateur n'est qu'une machine capable d'exécuter automatiquement une série
d'opérations simples qu'on lui a demandé de faire.
L'intérêt d'un ordinateur est sa capacité à manipuler rapidement et sans erreur un grand
nombre d'informations, mémoriser des quantités numériques ou alphabétiques, rechercher
une quantité mémorisée, comparer ou classer des informations.
Pour donner des ordres à l’ordinateur, il est nécessaire de pouvoir communiquer avec lui.
Cette communication passe par un langage de programmation, dans lequel est écrit le
programme.
Un programme est un assemblage et un enchaînement d’instructions élémentaires
écrit dans un langage de programmation, et exécuté par un ordinateur afin de traiter
les données d’un problème et renvoyer un ou plusieurs résultats.
Un algorithme représente l’enchaînement des actions (instructions) nécessaires
pour faire exécuter une tâche à un ordinateur(résoudre un problème).
Un algorithme s’écrit le plus souvent en pseudo-langage de programmation
(appelé langage algorithmique)
Pour réaliser un traitement exécutable sur ordinateur, il faut distinguer deux
étapes :

Définir la logique du traitement en vue d’obtenir le résultat souhaité.

Traduire cette logique à l’aide d’un langage de programmation compréhensible de
l’ordinateur (formules de calcul sur tableur, langage de macro-commandes des
logiciels, outils ou langage de programmation).
1
Algorithmique – Cours 1
2. Le Codage
Les ordinateurs ne son capables que d’une seule chose : faire des calculs,
et uniquement cela.
Lorsqu’un ordinateur traite du texte, du son, de l’image, de la vidéo, il traite
en réalité des nombres.
Un ordinateur manipule exclusivement des informations binaires.
Qu’est-ce qu’une information binaire ?
C’est une information qui ne peut avoir que deux états que l’on symbolise
sous la forme de 1 et de 0.
Les ordinateurs ont été conçus pour manier ces informations par paquets de
0 et de 1. Et la taille de ces paquets a été fixée à 8 informations binaires.
Une information binaire (symbolisée couramment par 0 ou 1) s’appelle un bit.
Un groupe de huit bits s’appelle un octet (en anglais, byte)
Combien d’états différents un octet possède-t-il ? Le calcul est assez
facile (mais il faut néanmoins savoir le refaire). Chaque bit de l’octet peut
occuper deux états. Il y a donc dans un octet :
2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 28 = 256 possibilités
2
Algorithmique – Cours 1
3. Définition et représentation d’un algorithme
Définition
Un algorithme c’est « l’ensemble des règles opératoires et des procédés
définis en vue d’obtenir un résultat déterminé au moyen d’un nombre
fini d’opérations » (selon l’ AFNOR).
Il faut donc définir une succession logique de tâches à automatiser.
L’algorithmique exprime les instructions résolvant un problème donné
indépendamment des particularités de tel ou tel langage
Les ordinateurs ne sont capables de comprendre que quatre catégories
d'instructions. Ces quatre familles d'instructions sont :
 l’affectation de variables
 la lecture / écriture
 les tests
 les boucles
 L’algorithmique est la technique des algorithmes
 Un algorithme décrit un traitement selon une logique et un formalisme rigoureux.
 L’algorithmique prépare la programmation
o L’algorithmique est une étape préalable indispensable à la réalisation d’un bon
programme
o C’est une méthode de découpage d’un traitement en instructions élémentaires
3
Algorithmique – Cours 1
4. Structure d'un algorithme
Pour représenter un algorithme, on peut recourir à 2 méthodes :
 organigramme de programmation
 Langage structuré (pseudo code)
Exemple :
Organigramme
Langage structuré
VARIABLES
Caff : Réel
Rist : Réel
DEBUT
SAISIR Caff
SI Caff >12000
ALORS Rist<-Caff*0,12
SINON Rist <- 0
FIN SI
AFFICHER ‘’La ristourne est
de ‘’, Rist
FIN
Afficher
Tester
Calculer
Avantages : Visualisation du traitement
Avantage :
Cette forme est adaptée aux
Inconvénients : devient vite fouillis si n’est pas langages
de
programmation
découpé en plusieurs niveaux d’abstraction. Ne structurée (langage C) ou au langage
correspond plus aux exigences de la programmation de macro-commandes inclus dans les
structurée actuelle.
suites bureautiques (exemple : VBA
pour MS Office). L’algorithme peut
également être utilisé pour des
formules de calcul tableur complexe.
4
Algorithmique – Cours 1
Structure générale d’un algorithme
Un algorithme comprend deux parties :

l’entête : qui contient la déclaration des variables : pour chaque variable utilisée,
on définit le type de données qu’elle contient: entier, réel, logique ou
alphanumérique (pour éviter tout problème, les variables doivent être déclarées
préalablement à leur utilisation).

le corps : contient l’ensemble des actions.
D'une manière générale, un algorithme :
a. Commence toujours par le mot programme suivi du nom du programme
b. Possède un bloc de déclaration de variables, repéré par le mot Var et qui contient la
liste des variables utilisées dans l'algorithme.
c. Possède un bloc d'instructions encadré par les mots Début et Fin (le programme
commence son instruction sur le mot Début et se termine sur le mot Fin).
Ainsi, nous obtenons :
Programme NomDuProgramme
Var
Déclaration des variables
Liste des variables : Type
Début
Instructions
Fin
5
Algorithmique – Cours 1
5. Les Variables et Constantes
Les variables et les constantes correspondent à des zones de stockage de la
mémoire vive. Elles permettent de conserver des valeurs en vue d’ un traitement.
Une constante, en revanche, est définie une fois pour toute à l’intérieur du
« programme » (avant les déclarations de variables) et ne peut pas être modifiée
par l’utilisateur. Une constante correspond à un paramètre.
Une variable permet de stocker une information au cours d’un programme..
Une variable est une boîte, que le programme (l’ordinateur) va repérer par une étiquette.
Pour avoir accès au contenu de la boîte, il suffit de la désigner par son étiquette.
La déclaration d'une variable va permettre au programme, en cours d'exécution, de
réserver une zone mémoire (physiquement, c'est un emplacement dans la mémoire vive
repéré par une adresse binaire) d'une certaine taille et de lui associer un nom pour pouvoir
y accéder ultérieurement.
Une variable se caractérise par :
 Une Etiquette (un nom ).
 Un Emplacement mémoire. L’adresse en mémoire est associée au non de la
variable. Manipuler le nom de la variable, c’est faire référence à son adresse
mémoire. Rassurez-vous, c’est le compilateur qui réalise cette association, pas le
programmeur ;
 Une Taille mémoire déterminée par le type de la variable.
 Elle ne possède aucune valeur initiale a priori. Attention, il ne faut jamais partir du
principe qu’une variable est initialisée automatiquement à zéro. Certains langages
de programmation le font, d’autres pas. Prenons donc le principe général qu’elle
n’est jamais initialisée à zéro, cela peut éviter bien des surprises.
 Un Type de données.
Les données manipulées par un programme peuvent être de natures différentes
(entiers, réels, chaînes de caractères, booléen… ).
Les types de données utilisables sont les suivants :
 Réel : nombre à virgule
 Entier
 Chaîne : texte de longueur fixe (CHAINE DE 15 CARACTERES) ou de longueur
variable (mot clé CHAINE utilisée sans rien)
 Caractère : Un seul caractère ‘0’, ‘1’,…, ‘a’, ‘A’ par exemple
 Booléen : valeur logique pouvant être .VRAI. ou .FAUX.
6
Algorithmique – Cours 1
Le type des données est défini dans la section « Déclaration de variable »s. Lorsque
plusieurs variables sont de même type, on peut les regrouper sur une même ligne.
Exemple
Programme TestDéclaration
Var
LaValeur : Entier
LeCaractere : Caractere
Début
Instructions
Fin
Remarques :
 Par convention, le nom d’une variable doit avoir la première lettre de chaque mot
important la composant en majuscule ;
Exemple : LaValeur et non pas lavaleur ni la_valeur
 Le nom des variables doit être significatif (parlant). Evitez d’appeler une variable «s»
pour Somme ou « t » pour TotalAchat ;
 Il faut toujours déclarer une variable, même si certains langages de programmation
peuvent les déclarer pour vous. Le type pris par défaut ne sera pas forcément le
plus adapté ;
 Les variables se déclarent toujours en début de programme, même si, encore une
fois, certains langages de programmation sont permissifs. E n effets, lors des
recherches d’erreurs (bugs) ou lors des phases de maintenance, la définition des
variables est plus facilement localisée.
7
Algorithmique – Cours 1
6. Affectation d’une variable
Affecter une variable, c’est lui attribuer une valeur.
En pseudo-code, l'instruction d'affectation se note avec le signe 
Ainsi :
Toto: Entier
Toto 24
Attribue la valeur 24 à la variable Toto.
On peut en revanche sans aucun problème attribuer à une variable la valeur d’une autre
variable, telle quelle ou modifiée. Par exemple :
Tutu  Toto
Signifie que la valeur de Tutu est maintenant celle de Toto.
Une instruction d’affectation ne modifie que ce qui est situé à gauche de la flèche.
Tutu Toto + 4
Si Toto contenait 12, Tutu vaut maintenant 16. De même que précédemment, Toto
vaut toujours 12.
Exemple n°1
Exemple n°2
Début
Début
Riri "Loulou"
Riri "Loulou"
Fifi "Riri
Fifi Riri
Fin
Fin
La seule différence entre les deux algorithmes consiste dans la présence ou dans
l’absence des guillemets lors de la seconde affectation. Et l'on voit que cela change tout !
Dans l'exemple n°1, ce que l'on affecte à la variable Fifi, c'est la suite de caractères
R – i – r - i. Et à la fin de l’algorithme, le contenu de la variable Fifi est donc « Riri ».
Dans l'exemple n°2, en revanche, Riri étant dépourvu de guillemets, n'est pas considéré
comme une suite de caractères, mais comme un nom de variable.
Le sens de la ligne devient donc : « affecte à la variable Fifi le contenu de la variable
Riri ». A la fin de l’algorithme n°2, la valeur de la variable Fifi est donc « Loulou ». Ici,
l’oubli des guillemets conduit certes à un résultat, mais à un résultat différent.
8
Algorithmique – Cours 1
7. Expressions et opérateurs
Dans une instruction d’affectation, on trouve :
 à gauche de la flèche, un nom de variable,
 à droite de la flèche, ce qu’on appelle une expression
Une expression est un ensemble de valeurs, reliées par des opérateurs, et
équivalent à une seule valeur.
Un opérateur est un signe qui relie deux valeurs, pour produire un résultat.
Opérateurs numériques :
+ : addition
- : soustraction
* : multiplication
/ : division
^ : puissance
( ) : parenthèses
Opérateur alphanumérique : &
Cet opérateur permet de concaténer, autrement dit d’agglomérer, deux chaînes de
caractères
Exemple
Var A, B, C : Caractère
Début
A ← “Gloubi”
B ← “Boulga”
C← A&B
Fin
La valeur de C à la fin de l’algorithme est “GloubiBoulga”
Opérateurs logiques (ou booléens)
Il s’agit du ET, du OU, du NON et du mystérieux
9
Algorithmique – Cours 1
8. Les instructions d’écriture et de lecture
Instructions d’écriture : instructions qui permettent au programme de communiquer
des valeurs à l’utilisateur en les affichant à l’écran.
Ecrire pour fournir de l'info au monde extérieur.
Permet d'écrire quelque chose à l’écran
Ecrire “Entrez votre nom : ”
Instructions de lecture : instructions qui permettent à l’utilisateur de rentrer des
valeurs au clavier pour qu’elles soient utilisées par le programme.
Lire pour recevoir de l'info du monde extérieur.
Dès que le programme rencontre une instruction Lire, l’exécution s’interrompt,
attendant la frappe d’une valeur au clavier
Programme LireEcrire
Var NomFamille : Caractère
Début
Ecrire “Entrez votre nom : ”
Lire NomFamille
Ecrire "Bonjour : " , NomFamille
Fin
Affiche: Bonjour : suivi du nom saisie par l'utilisateur
Exemple complet
Nous allons écrire un algorithme qui calcule l'âge de l'utilisateur en fonction de son année
de naissance.
Programme Age
CONST
année ← 2000
VAR
ddn : entier // date de naissance
DEBUT
Ecrire “Entrez votre année de naissance sur 4 chiffres : ”
Lire ddn
Ecrire "Vous avez, ou aurez dans l'année : " , année – ddn
, " ans"
FIN
10
Algorithmique – Cours 1
Opérations sur les données de type numérique
Opérateurs : Division entière : div et Reste de la division entière : mod
L’opération de division entière est la division euclidienne telle qu’on l’apprend à l’école primaire :
on ne va pas "derrière la virgule", le reste de la division entière (mod, qui signifie modulo) est
l’opération complémentaire de la division entière.
Elle récupère le reste de la division entière.
Exemples :
7 div 4 = 1
7 mod 4= 3
car 7 divisé par 4 égal 1 et il reste 3
l2 div 2 = 6
12 mod 6 = 0
car 12 divisé par 2 égal 6 et il reste 0
Fonctions : Partie entière d’un nombre : ent et partie décimale d’un nombre : dec
Ces 2 opérations sont également complémentaires l’une de l’autre.
Exemples:
ent(12.5) = 12
dec(12.5) = 0.5
ent(-6) = -6
dec(-6) = 0
Ces deux opérations sont des opérations unaires, ou plutôt ce sont des fonctions, c’est à
dire qu’elles s’utilisent sous la forme :
NomDeLaFonction (ValeurQueL’onVeutFaireTraiterParLaFonction).
Dans un programme, et donc dans un algorithme, le résultat d’une fonction s’utilise
comme une variable, c’est à dire qu’on peut écrire des choses du genre :
Var
Nb1, PartDec : Réel
PartEnt: Entier
Début
Ecrire “Saisir un nombre :”
Lire Nb1
PartEnt ← ent(Nb1)
PartDec ← dec(Nb1)
Ecrire “La partie entière de Nb1 est : ”, PartEnt
Ecrire “La partie décimale de Nb1 est : ”, PartDec
Fin
11
Algorithmique – Cours 1
9. Les Tests (ou structure alternative)
Elles permettent d’exécuter des actions obéissant à une condition déterminée.
Si « condition »
Alors
Exécuter les actions si la condition est VRAIE
Sinon
Exécuter les conditions si la condition est FAUSSE
FinSi
Il n’y a que deux formes possibles pour un test ; la forme de gauche est la forme
complète, celle de droite la forme simple.
Si condition Alors
Si condition Alors
Instructions 1
Instructions
Sinon
Finsi
Instructions 2
Finsi
Les opérateurs de comparaison sont :
=
égal à…
<> différent de…
<
strictement plus petit que…
>
strictement plus grand que…
=< plus petit ou égal à…
>= plus grand ou égal à…
A noter que ces opérateurs de comparaison peuvent tout à fait s’employer avec des
caractères. Ceux-ci sont codés par la machine dans l’ordre alphabétique (rappelez vous le
code ASCII vu dans le préambule), les majuscules étant systématiquement placées avant
les minuscules. Ainsi on a :
“t” < “w”
VRAI
“Maman” > “Papa“
FAUX
“maman” > “Papa”
VRAI
12
Algorithmique – Cours 1
Les opérateur logique sont :

On peut combiner les conditions avec les opérateurs ET ou OU

Il est possible d’imbriquer les SI.
ET : il faut impérativement que Condition1 soit VRAI et que Condition2 soit VRAI.
Condition1 ET Condition2
OU : il suffit que Condition1 soit VRAIE ou que Condition2 soit VRAIE
Condition1 OU Condition2
NON : le NON inverse une condition
NON(Condition1)
XOR (ou OU exclusif) : Pour que
Condition1 XOR Condition2
soit VRAI, il faut que Condition1 soit VRAI, ou bien que Condition2 soit VRAI. Mais
si toutes les deux sont fausses, ou que toutes les deux sont VRAI, alors le résultat
global est considéré comme FAUX.
On représente fréquemment tout ceci dans des tables de vérité (C1 et C2 représentent
deux conditions, et on envisage à chaque fois les quatre cas possibles) :
C1 et C2
C2 Vrai
C2 Faux
C1 Vrai
Vrai
Faux
C1 Faux
Faux
Faux
C1 ou C2
C2 Vrai
C2 Faux
C1 Vrai
Vrai
Vrai
C1 Faux
Vrai
Faux
C1 xor C2
C2 Vrai
C2 Faux
C1 Vrai
Faux
Vrai
C1 Faux
Vrai
Faux
Non C1
C1 Vrai
Faux
C1 Faux
Vrai
13
Algorithmique – Cours 1
10.
Tests imbriqués
Les structures de tests imbriqués sont donc un outil indispensable à la simplification et à
l’optimisation des algorithmes.
Si « condition1 » Alors
Instructions 1
Sinon
Si « condition2 » Alors
Instructions 2
Sinon
Instructions 3
FinSi
FinSi
Ou
Si « condition1 » Alors
Instructions 1
SinonSi « condition2 » Alors
Instructions 2
Sinon
Instructions 3
FinSi
11.
Le choix multiple
Les Si imbriqués par rapport à une même valeur deviennent vite lourds à gérer et à
présenter.
Pour remplacer avantageusement la structure alternative (SI..ALORS…SINON…), quand
il y a un grand nombre de cas possibles selon les valeurs que peut prendre une variable,
on peut utiliser la structure SELON CAS :
Selon Cas <variable>
Cas <expression>
<action1>
Cas <expression>
<action2>
…
Cas Sinon
<action3>
Fin selon
14
Algorithmique – Cours 1
Exemple : Choix Menu
Var
choix : entier
Début
Ecrire " Choix 1 : Saisie"
Ecrire " Choix 2 : Modification"
Ecrire " Choix 3 : Suppression"
Ecrire " Choix 4 ou Choix 5: Impression"
Ecrire " Choix 6 : Quitter"
Ecrire " Choisir un menu :"
Lire choix
Selon Cas choix
Cas 1
Ecrire "On saisie"
Cas 2
Ecrire "On modifie"
Cas 3
Ecrire "On supprime"
Cas 4 à 5
Ecrire "On imprime"
Cas 6
Ecrire "On quitte"
Cas Sinon
Ecrire "Choix incorrect"
Fin selon
15
Algorithmique – Cours 1
12.
Les structures répétitives (les boucles)
L'intérêt d'utiliser un ordinateur n'apparaît clairement que lors de la manipulation de
données nombreuses ou traitées de manière répétitive.
Exemple 1: Chercher dans une liste de noms et d'adresses, l'adresse d'une personne à
partir de son nom. Le nombre de fois qu'il faudra comparer le nom donné aux noms de la
liste est dans ce cas inconnu.
Une structure répétitive permet de faire répéter un ensemble d’actions, un certain
nombre de fois dans un ordre préalablement défini.
Il existe plusieurs types de structures itératives :

la structure « TantQue - FinTantQue » :
Le nombre de répétitions n’est pas connu et peut être nul : 0 à n répétitions

la structure « Répéter - Jusqu’à » :
Le nombre de répétitions n’est pas connu mais ne peut pas être nul : 1 à n
répétitions

la structure « Pour - Suivant » :
Le nombre de répétitions est connu (i= 1 à 20)
Comme pour les tests, les boucles peuvent être imbriquées.
16
Algorithmique – Cours 1
13.
structure TantQue… FinTantQue
TantQue booléen ou
…
Instructions
…
FinTantQue
condition
Le principe est simple :

le programme arrive sur la ligne du TantQue.

Il examine alors la valeur du booléen (qui, je le rappelle, peut être une variable
booléenne ou, plus fréquemment, une condition).

Si cette valeur est VRAI, le programme exécute les instructions qui suivent, jusqu’à
ce qu’il rencontre la ligne FinTantQue. Il retourne ensuite sur la ligne du TantQue,
procède au même examen, et ainsi de suite. Le manège enchanté ne s’arrête que
lorsque le booléen prend la valeur FAUX.
On entre dans la boucle uniquement si la condition est vraie.
Exemple :
Var Rep : Caractère
Début
Ecrire “Voulez vous un café ? (O/N)“
Lire Rep
TantQue Rep <> “O“ ET Rep <> “N“
Ecrire “Vous devez répondre par O ou N. Recommencez“
Lire Rep
FinTantQue
Ecrire “Saisie acceptée“
Fin
17
Algorithmique – Cours 1
14.
structure Répéter… Jusqu’à
Répéter
…
Instructions
…
Jusqu'à booléen ou
condition
Exemple :
Var Rep : Caractère
Début
Ecrire “Voulez vous un café ? (O/N)“
Lire Rep
Repéter
Lire Rep
Jusqu'à Rep = “O“
Ecrire “Saisie acceptée“
Fin
Contrairement à la boucle TantQue où la condition est une condition d’entrée dans la
boucle, la condition pour est une condition de sortie : on sort si la condition est vraie.
On évalue la condition après avoir exécuté le bloc d'instructions. Ainsi le bloc
d'instructions est exécuté au moins une fois.
18
Algorithmique – Cours 1
15.
structure Pour … Suivant
la structure « Pour - Suivant » est un cas particulier de TantQue : celui où le
programmeur peut dénombrer à l’avance le nombre de tours de boucles nécessaires.
Le seul intérêt du « Pour » est d’épargner un peu de fatigue au programmeur, en lui
évitant de gérer lui-même la progression de la variable qui lui sert de compteur (on parle
d’incrémentation).
Pour Compteur = Initial à Final Pas ValeurDuPas
…
Instructions
…
Compteur suivant
Mais si vous souhaitez une progression plus spéciale, de 2 en 2, ou de 3 en 3, ou en
arrière, de –1 en –1, ou de –10 en –10, ce n’est pas un problème : il suffira de le préciser
à votre instruction « Pour » en lui rajoutant le mot « Pas » et la valeur de ce pas (Le
« pas » dont nous parlons, c’est le « pas » du marcheur, « step » en anglais).
Exemple : Afficher la table de multiplication par 2
VAR
N , i : Entier
Debut
N ← 2
Pour i ← 1 à 10
Ecrire " x ",i, " = ", n*i
i Suivant
Fin
19
Téléchargement