Mathematics">
Initiation À L'algorithmique
Initiation À L'algorithmique
Initiation À L'algorithmique
l’algorithmique
2
Objectifs opérationnels
• Connaître les étapes de résolution d’un
problème.
• Stocker et traiter des données simples
• Communiquer avec l’algorithme.
• Contrôler le flux d’exécution des instructions.
• Traiter des données composites.
• Définir et utiliser des procédures et des
fonctions.
3
Sommaire
1. Algorithme 7. Opérateurs
2. Étapes de résolution d’un 8. Affectation
problème 9. Entrées/sorties
3. Notion d’identificateur 10. Structures de contrôle
4. Notion de variable 11. Tableaux
5. Types simples 12. Sous-programmes
6. Notion de constante 13. Enregistrements
4
Algorithme
présentation
• L’algorithmique est la science qui étudie l’application des
algorithmes à l’informatique
• L’algorithme est une suite finie d’instructions que l’on applique
à un nombre fini de données pour résoudre un problème.
• En informatique, l’algorithme est écrit dans un langage proche
du langage humain appelé pseudo langage.
• L’algorithme n'est donc exécutable directement par aucune
machine, mais il a l'avantage d'être traduit facilement dans
tous les langages de programmation.
réflexion traduction
programme
algorithme
problème
5
Algorithme
exemple : "préparation du thé à la sénégalaise"
• Les ingrédients : thé, sucre, eau.
• Le résultat : verres de thé.
• Le matériel : théière, verres à thé, plateau, réchaud, allume-gaz.
• Les actions à réaliser
1. Mettre de l’eau dans la théière
2. Mettre du thé dans la théière
3. Allumer le réchaud à l’aide de l’allume-gaz
4. Poser la théière sur le réchaud
5. Attendre jusqu’à l’ébullition
6. Eteindre le réchaud
7. Poser la théière sur le plateau
8. Mettre du sucre dans la théière
9. Faire de la mousse de thé avec les verres Raffinement de la 9ème instruction
10. Si le thé est très refroidi alors 9.1. Poser les verres sur le plateau
10.1. Rallumer le réchaud 9.2. Remplir un verre de thé au 3/4
10.2. Réchauffer le thé 9.3. Transvaser ce thé d’un verre à un autre
10.3. Éteindre le réchaud jusqu’à l’obtention de la mousse dans
11. Remplir les verres de thé tous les verres
12. Servir le thé
6
Algorithme
caractéristiques
Un algorithme doit être :
• lisible : compréhensible (même par un non-informaticien) ;
• de haut niveau : pouvoir être traduit en n’importe quel langage de
programmation ;
• précis : aucun élément de l’algorithme ne doit porter à confusion ;
• concis : un algorithme ne doit pas dépasser une page ; si c’est le
cas, il faut décomposer le problème en plusieurs sous-problèmes ;
• structuré : un algorithme doit être composé de différentes parties
facilement identifiables.
7
Algorithme
structure(1/2)
Un algorithme est composé d’une entête et d’un corps
L'entête spécifie :
le nom de l'algorithme annoncé par le mot « Programme »
la définition de types annoncée par le mot « Type » ;
la déclaration de constantes, annoncée par le mot « Constante » ;
la déclaration de variables, annoncée par le mot « Variable » ;
les définitions de sous programmes.
le corps est composé :
du mot-clé « Début » ;
d'une suite d'instructions indentées ;
du mot-clé « Fin ».
Les commentaires sont entre (* et *).
8
Algorithme
structure (2/2)
10
Résolution d’un problème
compréhension de l'énoncé
11
Résolution d’un problème
décomposition
• Cette étape est basée sur la stratégie « diviser pour régner ».
• Commencer par décomposer le problème initial en sous-
problèmes, puis chaque sous-problème en de nouveaux sous-
problèmes et ainsi de suite jusqu’aux problèmes que l’on peut
résoudre à partir d’opérations primitives.
• Question à se poser :
quelles sont les grandes étapes à réaliser ?
12
Résolution d’un problème
spécification
Pour chaque problème simple, déterminer :
1. les données d’entrée : venant de l’extérieur et étant
nécessaires au problème ;
2. les données de sortie ou résultat attendu du problème par
l’extérieur ;
3. le traitement à faire :
formules, équations, fonctions, constantes et autres outils
nécessaires à l’obtention des données de sortie ou du résultat
attendu à partir des données d’entrée.
13
Résolution d’un problème
algorithme logique
14
Résolution d’un problème
algorithme de programmation
15
Notion d’identificateur
Nom donné aux diverses composantes (types, constantes,
variables et sous-programmes) d'un programme.
Formé de lettres alphabétiques et de chiffres ainsi que du
caractère _ (espace souligné).
Le 1er caractère ne doit pas être un chiffre.
L’identificateur doit être suffisamment explicite.
• Les variables et les sous-programmes commencent toujours
par une minuscule.
• Les types commencent toujours par une majuscule.
• Les constantes ne sont composées que de majuscules.
Lorsque l’identifiant contient plusieurs mots, on articule ces
mots avec des majuscules ou avec le caractère _.
Exemples : note1, fin_de_fichier, finDeFichier, TVA, PI
Contre-exemples : 4eme, x#y, note-1, note 1.
16
Notion de variable
• Une variable permet de désigner un emplacement mémoire et possède :
• une valeur ou contenu « provisoire » ;
• un type décrivant un ensemble de valeurs et un ensemble
d'opérateurs sur ces valeurs ;
• un identificateur ou nom permettant l’accès au contenu.
18
Types simples
numériques
Naturel : entiers non signés (sous-ensemble de IN)
Entier : positifs et négatifs (sous-ensemble de Z)
Réel : sous-ensemble de IR
exemples : 0.1, -1.2 (attention utilisation du . à la place de la ,)
19
Types simples
booléen, caractère et chaîne de caractères
Exemples
Variable masculin : booléen
initiale : caractère
nom : chaîne de caractères
20
Notion de constante
Une constante représente une donnée qui ne change jamais durant
tout le programme
• Leurs opérandes peuvent être des entiers ou des réels hormis ceux
des deux derniers qui agissent uniquement sur des entiers.
22
Les opérateurs
relationnels
• Six opérateurs relationnels
–< inférieur à
–≤ inférieur ou égal à
–> supérieur à
–≥ supérieur ou égal à
–= égal à
–≠ différent de
23
Les opérateurs
logiques
25
Les opérateurs
Associativité et priorités par ordre décroissant
27
tp1
Les entrées/sorties
• Un algorithme peut avoir des interactions avec l'utilisateur.
L’outil ecrire() permet d’afficher du texte ou des valeurs.
Syntaxe : ecrire("à écrire telle quelle", à_evaluer)
L’outil lire() permet d’enregistrer, dans une variable, une donnée
saisie par l'utilisateur.
Syntaxe : lire(nomVar1 [,nomVar2, …])
• Exemple :
ecrire("Quel est votre age ?")
lire(age)
ecrire("Vous avez ",age," ans")
Tp2&3
28
Structures de contrôle
présentation
Tp4
30
Structures de contrôle
structure conditionnelle alternative
Tp5
31
Structures de contrôle
structure conditionnelle alternative multiple
• La structure conditionnelle alternative multiple permet d'exécuter
plusieurs traitements différents en fonction de valeurs booléennes de
plusieurs conditions.
• Sa syntaxe :
Si (condition_1) Alors
traitement_1
Sinon si (condition_2) Alors
traitement_2
…
Sinon (*Si aucune des n-1 conditions n’est vraie*)
traitement_n
FinSi
Tp6
32
Structures de contrôle
structure conditionnelle de choix
Tp9
35
Structures de contrôle
structure itérative « Pour »
Tp11
37
Les tableaux
tableaux à deux dimensions
• Un tableau à deux dimensions est un tableau (à une dimension) qui
contient des tableaux (à une dimension).
• Chaque donnée est repérée par deux indices (entiers naturels)
• Déclaration :
nom_tab : tableau[DIM1][DIM2] de type_des_données
• Notation d’une donnée :
nom_tab[indice1][indice2]
avec 0 ≤ indice1 < DIM1 et 0 ≤ indice2 < DIM2
• Exemples :
voyelles : tableau[2][3] de caractères
'a' 'e' 'i' 'o' 'u' 'y'
0 1 2 0 1 2
0 1
la donnée 'e' est notée par voyelles[0][1] 38
Les tableaux
tableaux à deux dimensions (suite et fin)
Tp12
39
Les sous-programmes
présentation
• Les sous-programmes permettent de
– décomposer un problème en sous-problèmes ;
– découper le programme pour facilité la lisibilité et le débogage ;
– réutiliser du code qui revient souvent.
• Comme le programme principal, tout sous-programme possède un
nom, des variables, des instructions, un début et une fin.
• Mais un sous-programme n’est exécuté que lorsqu’il est appelé par un
autre (sous-)programme.
• Il existe deux types de sous-programmes :
la procédure faisant une certaine tâche ;
la fonction renvoyant en plus une valeur résultat.
• L'appel d'une procédure constitue une instruction en lui-même.
• L'appel d'une fonction est remplacé à l'exécution par la valeur
retournée par celle-ci. Il doit forcément se trouver dans un calcul, une
affectation, un affichage, un test, etc.
40
Les sous-programmes
visibilité des variables
• Une variable déclarée dans un sous-programme est dite locale et n’est
utilisable que par ce sous-programme.
• Une variable globale est déclarée à l’extérieur des sous-programmes et
est visible partout dans le programme.
• Le même nom de variable peut désigner plusieurs variables locales
différentes.
• En revanche, une variable globale n'existe qu'en un seul exemplaire
pour tous les sous-programmes.
• Lorsque le nom d'une variable locale est identique à une variable
globale, la variable globale est localement masquée; dans ce sous-
programme la variable globale devient inaccessible.
41
Les sous-programmes
les paramètres
Paramètre en entrée
Paramètre en sortie Sous programme
Clé USB
CD vierge
CDROM
43
Les sous-programmes
passage de paramètres en entrée
• Les instructions du sous-programme appelé ne peuvent pas modifier le
paramètre effectif.
• En fait c'est uniquement la valeur du paramètre effectif qui est copiée
dans le paramètre formel
• C'est le seul passage de paramètre qui admet l'utilisation d'une
constante comme paramètre effectif.
• Exemple :
le sous-programme écrire() qui permet d'afficher des informations
admet des paramètres en entrée.
44
Les sous-programmes
passage de paramètres en sortie
• Les instructions du sous-programme appelé affectent obligatoirement
une valeur au paramètre formel (valeur qui est donc aussi affectée au
paramètre effectif associé)
• Eviter d’utiliser des constantes comme paramètre effectif pour ce type
de passage de paramètres.
• La valeur que pouvait posséder le paramètre effectif n'est pas utilisée
par le sous-programme appelé.
• Exemple :
Le sous-programme lire() qui permet de mettre dans des variables des
valeurs entrés par l'utilisateur admet des paramètres en sortie
45
Les sous-programmes
passage de paramètres en entrée/sortie
• Passage de paramètre qui combine les deux précédents
• A utiliser lorsque le sous-programme appelée doit utiliser puis modifier
la valeur du paramètre effectif.
• Comme pour le passage de paramètre en sortie, on ne peut pas utiliser
une constante comme paramètre effectif
• Exemple :
Le sous-programme échanger() qui permet d'échanger les valeurs de
deux variables admet des paramètres en entrée/sortie
46
Les sous-programmes
les fonctions
• Une fonction est un sous-programme admettant des paramètres et
retournant un seul résultat (comme en Maths y=f(a,b,c,…)).
• Une fonction possède un type qui est celui de la valeur retournée
• Le passage de paramètres est uniquement en entrée
• Les paramètres effectifs peuvent être des variables, des constantes mais
aussi des résultats de fonctions
• Syntaxe de la définition d’une fonction:
Fonction nomFonction( nomParam1:typeParam1[,…] ):typeRslt
Variable
Déclaration des éventuelles variables locales
Début
instruction(s)
retourne rslt
FinFonction
Tp13
47
Les sous-programmes
les procédures
• Une procédure est un sous-programme qui ne retourne aucun résultat
• Par contre elle peut admettre des paramètres avec des passages :
– en entrée, préfixés par E (ou →)
– en sortie, préfixés par S (ou ←)
– en entrée/sortie, préfixés par E/S (ou ↔)
• Syntaxe de la définition d’une procédure :
Procédure nomProcedure([ modeDePassage nomParam1:typeParam1[,…] ])
Variable
Déclaration d’éventuelles variables locales
Début
instruction(s)
finProcédure
Tp14&15
48
Les enregistrements
présentation
• Un enregistrement est une structure de données dont les éléments
(ou champs) peuvent être de types différents.
• Il permet ainsi de regrouper des informations qui vont ensemble
sous un seul nom afin de les manipuler plus facilement.
• Syntaxe de la déclaration d’un enregistrement:
Variable nom_enregistrement : nom_type
• La déclaration du type structuré doit précéder celle de
l’enregistrement correspondant.
• Syntaxe de la déclaration d’un type structuré:
TYPE nom_type=structure
nom_champ1 : type_champ1
…
nom_champN : type_champN
finStructure
• Syntaxe de l’accès à un champ d’un enregistrement:
nom_enregistrement.nom_champ
• Le champs s’utilise comme une variable simple
Tp16
49