1
Algorithmique TOUHTOUH Samira Ecole Nationale des Sciences Appliquées d’El Jadida
[email protected]
2
Plan Introduction Informatisation d’un problème : Langage algorithmique Les variables Les constantes Fonctions d’entrée-sortie Les structures Les tableaux Les fonctions
Les fichiers
3
Plan Introduction Informatisation d’un problème : Langage algorithmique Les variables Les constantes Fonctions d’entrée-sortie Les structures de contrôle Les fonctions Les tableaux
Les fichiers
4
I. Introduction Introduction à l’algorithme • Histoire Le mot algorithme vient du mot latinisé du mathématicien « AlKhawarismi », après la traduction du livre « kitâb- aljabr wa almuqâbala » par Gherardo di cremona sous le titre « Dixit Algorismi ».
• Définition générale Une séquences d’instructions logique à suivre pour obtenir un résultat donné.
5
Exemple 1 : Comment accéder à L’ENSA? 1. 2. 3. 4. 5.
Réussir le bac Candidater Passer le concours Réussir le concours Déposer un dossier d’inscription
Exemple 2 : Préparer un café au lait 1. 2. 3.
Préparer le café Préparer le lait Mélanger les deux
6
L’ordre des opérations a son importance, mais dans certains cas plusieurs ordres sont possibles. Parfois, il faut décomposer les actions trop complexes. Exemple : Préparer un café au lait 1. 2. 3.
Préparer le café Préparer le lait Mélanger les deux
Etape élémentaire : Préparer le café 1. Préparer la cafetière 2. Remplir d’eau 3. Mettre le filtre 4. Mettre le café 5. Brancher la cafetière 6. Lancer la cafetière
7
En informatique : Procédure de calcul bien défini qui prend en entrée une valeur, ou un ensemble de valeurs, et qui donne en sortie une valeur, ou un ensemble de valeurs.
Exemple :
Algorithme d’Euclide Calculer le PGCD de deux entiers a et b.
1.
Ordonner a et b tel que a≥b
2.
Calculer leur différence
3.
Remplacer a par c c
a-b
8
Exécuter avec a=40 et b=12 Etape1:a40
b12
Etape2:ca b 28 Etape3: a28
b 12
Etape4:ca b 16 Etape5:a16
b 12
Etape6 :ca b 4 Etape7:a12
b 4
Etape8:ca b 8 Etape9:a8
b 4
Etape9:ca b 4 Etape10:a4
b4
Etape11:a b 4
Fin
9
Exemple 2 Exécuter avec a=100 et b=40
10
Un algorithme est dit correct si, pour chaque instance en entrée, il se termine en produisant la bonne sortie.
Un algorithme incorrect risque de ne pas se terminer pour certaines instances en entrée, voire de se terminer sur une réponse autre que celle désirée.
Un algorithme peut être spécifié en langage humain ou en langage informatique. L’unique obligation est que la spécification fournisse une description précise de la procédure de calcul à suivre.
11
Plan Introduction Informatisation d’un problème : Langage algorithmique Les variables
Algorithme Les constantes Les structures Les fonctions
12
II. Langage algorithmique
Énoncé du problème
Langage naturel
Algorithme
Langage algorithmique
Programme
Langage de programmation
13
Le langage algorithmique est différent du langage de programmation. Langage de programmation
Langages de bas niveau Liés au processeur
CC++
Langages de haut niveau Langages évolués
Java
14
Le langage algorithmique exprime les instructions résolvant un problème donné indépendamment des particularités d’un langage de programmation. En générale on utilise deux types de notations pour représenter les algorithmes:
• L’organigramme • Le pseudo-code
15
L’organigramme est un schéma fonctionnel qui présente les différentes parties d’un algorithme les unes à la suite des autres en utilisant des symboles graphiques pour visualiser l’exécution de l'algorithme et le cheminement des données.
16
Exemple : somme de deux nombres A et B
L’écriture d’un algorithme avec un organigramme est rapidement abandonnée. La lisibilité devient rapidement difficile pour les algorithmes assez long.
17
le pseudo-code est purement conventionnel, aucune machine n’est censée le reconnaître. Exemple : Somme de deux nombres A et B
Algorithme somme_de_deux_nombres Variables A, B, somme en entier Début Lire A Lire B somme A+B Ecrire ‘’ La somme de A et B est : ’’, somme Fin
18
Les différents éléments d’un algorithme sont :
• Données : ce qui doit être donné à l’algorithme • Résultats : ce que doit produire l’algorithme • L’algorithme : les grandes étapes des traitements et calculs
19
Exemple : Calculer le PGCD de a et b.
Données
Données : a et b deux entiers positifs
Algorithme
Résultats
Résultat : PGCD de a et b
20
Structure d’un algorithme Nom de l’algorithme
// partie en-tête qui précise le nom de l’algorithme
Déclaration des variables // partie déclaration des variables
Début
// partie traitement des données
Algorithme (définir les actions à suivre pour résoudre un problème donné) Fin
21
Exemple 1 : Ecrire un algorithme qui permet d’afficher « Bonjour ». Algorithme algo-bonjour
Début écrire ( ‘’bonjour‘’ ); Fin
22
Exemple 2 : Ecrire un programme qui demande un nombre à l’utilisateur, puis qui calcule et affiche le carré de ce nombre, Algorithme carré-de-deux-nombres Variables nb, carr en Entier Début Ecrire ‘’Entrez un nombre:’ ’ Lire nb carr nb*nb Ecrire ‘’son carré est :’’ , carr Fin
1
Algorithmique TOUHTOUH Samira Ecole Nationale des Sciences Appliquées d’El Jadida
[email protected]
2
Plan Introduction Informatisation d’un problème : Langage algorithmique Les variables
Les constantes Les structures Les fonctions Les tableaux Les fichiers
3
II. Les variables • Dans un programme informatique, on va avoir en permanence besoin de stocker provisoirement des valeurs. • Il peut s’agir de données issues du disque dur, fournies par l’utilisateur (frappées au clavier), etc..
• Ces données peuvent être de plusieurs types des nombres, du texte, etc. • Pour stocker une information au cours d’un programme, on utilise une variable.
• Pour employer une image, une variable est une boîte, que le programme (l’ordinateur) va repérer par une étiquette. • Une variable désigne un emplacement mémoire désigner par une adresse binaire qui permet de stocker une valeur.
4
Déclaration et utilisation des variables (les données) • La première chose à faire avant de pouvoir utiliser une variable est de créer la boîte et de lui coller une étiquette. Ceci se fait tout au début de l’algorithme, avant même les instructions proprement dites. C’est ce qu’on appelle la déclaration des variables. Une variable est désignée par : Un nom unique qui la désigne Un type de définition unique Une valeur attribuée et modifiée au cours du déroulement de l’algorithme.
5
Le nom-le type-la valeur Nom d’une variable. • Le nom d’une variable permet de l’identifier de manière unique au cours de l’algorithme. Les règles à respecter pour nommer les variables : • Le nom d’une variable commence par une minuscule. • Le nom d’une variable ne comporte pas d’espace, • Si le nom de la variable est composé de plusieurs mots, il faut faire commencer chacun deux par une majuscule et ne pas faire figurer de traits d’union.
6
Les variables utilisées au cours de l’exécution de l’algorithme sont déclarées après le nom de l’algorithme. Il suffit d’indiquer le nom de la variable suivi de son type, séparés par deux points « : », La structure d’un algorithme (déclarant une variable nommé indice et de type entier) est la suivante :
Algorithme nom-de-l’algorithme
// partie en-tête
Variables : indice : entier
// partie des déclarations des variables
Début
// partie traitement
Bloc d’instructions Fin
7
Exemple : Calculer et écrire le double d’un nombre réel donné (exemple : 7). • L’algorithme nous informe qu’un nombre réel est donné (exemple 7) et que un autre nombre réel sera calculé (7x2 = 14) puis affiché. • Introduisons donc deux variables associées respectivement à la donnée et au résultat. La structure de l’algorithme est la suivante :
Algorithme double Variables : nombre, résultat : réel Début nombre résultat écrire résultat Fin
7 nombrex2
8
• Déroulement de l’exemple : Algorithme double Variables : nombre, résultat : réel
nombre = ?
résultat =?
Début
nombre =?
résultat=?
nombre
7
nombre = 7
résultat = ?
résultat
nombrex2
nombre = 7
résultat = 14
écrire résultat Fin
résultat = 14 Les variables n’existent plus
9
• L’algorithme se déroule de manière séquentielle et ligne après ligne.
• Au départ, lors de la déclaration, les valeurs sont inconnues : leur valeur est indiquée par « ? ».
• L’existence des variables n’a de sens que le temps de l’exécution de l’algorithme.
10
Types des variables Type réel - le type entier • Les variables de types numériques utilisées en algorithme ont comme domaine usuels ceux fournis par les mathématiques : réel et entier. • Le type de codage choisi pour un nombre va déterminer :
- Les valeurs maximales et minimales des nombres pouvant être stockés dans la variable. - La précision de ces nombres (dans le cas de nombres (décimaux)
11
• Les langages offrent plusieurs types numériques, le tableau cidessous présente les plus rencontrés : Type numérique
Plage
Byte (octet)
O à 255
Entier simple
-32 768 à 32 767
Entier long
-2 62 147 483 à 2 147 483 647
Réel simple
-3,4x1038 à -1,4x1045 pour les valeurs négatives 1,4x10-45 à 3,4x1038 pour les valeurs positives
Réel double
1,79x10308 à -4,95x10-324 pour les valeurs négatives 4,94x10-324 à 1,79x 10308 pour les valeurs positives
• Pourquoi ne pas déclarer toutes les variables numériques en réel
double?
12
Expressions et opérateurs
• Une expression est un ensemble de valeurs, reliées par des opérateurs, et équivalent à une seule valeur. • Un opérateur est un symbole d’opération • Une expression est soit : une constante une variable une opération
13
• Une opération est l'association d'un operateur avec ses opérandes qui permet d'effectuer un calcul.
• Les opérations utilisables sur les éléments de type entier ou réel les opérations arithmétiques classiques : l’addition (+), la soustraction (), le produit (x) et la division (/).
• On pourra aussi utiliser les opérateurs de comparaison classiques : < > # = ≥ ≤
14
• Deux opérations sont spécifiques aux entiers : la division entière DIV et le modulo MOD.
• L’opération DIV entre deux entiers retourne le résultat entier de leur division.
• L’opération MOD entre deux entiers retourne le reste de leur division.
• Exemple : 15 DIV 2 vaut 7 et 15 MOD 2 vaut 1, en effet, 15 = 7x2+1.
15
Exemple : Algorithme type réel
Algorithme type-réel Variables : nombre1, nombre2, résultat : réel var1:entier Début nombre1 1.5 nombre2 15 var1 2 résultat nombre1 / nombre2 x var1 Fin
16
Conversion : • Convertir un entier en réel est possible : cette opération n’entraine pas de perte d’information. Par exemple, l’entier 15 deviendra 15,0.
• Convertir un réel en entier entraîne une perte d’information : Les chiffres décimaux sont perdus. Par exemple, le réel 15,75 deviendra 15. Algorithme conversion-numérique
Variables : nombre1 : entier nombre2 : réel Début nombre Nombre2 nombre1 Fin
15 nombre1 nombre2 + 0.5
// nombre2 vaut 15.0 // erreur : impossible
17
Le type caractère • Il s’agit du domaine constitué des caractères alphabétiques, numériques et de ponctuation. • On devra pas confondre le signe ‘3’ (noté entre deux « simples quotes » en tant que caractère et l’entier 3. • En pseudo-code une chaîne de caractères est toujours notée entre guillemets. • A chaque caractère est associé une unique valeur numérique ( le code ASCII, établie cette correspondance : par exemple, la lettre A correspond a la valeur 65 ). • http://www.table-ascii.com/
18
19
20
Expressions et opérateurs • Les seules opérations élémentaires pour les éléments de type caractère sont les opérations de comparaison.
<
>
#
=
≤
≥
Conversion • La conversion de type caractère vers entier : pour convertir le caractère ‘3’ en une valeur entière 3, il suffit de calculer la différence entre les deux caractères : ‘3’ –’0’, qui vaut 3.
21
Exemple :
Algorithme conversion-caractère-entier Variables : car : caractère nombre : entier Début car ‘3’ nombre ‘3’ - ‘0’ nombre nombre + 2 car ‘0’ + nombre Fin
// nombre vaut 3 // nombre vaut 5 // car vaut ‘5’
22
Le type logique booléen • Le domaine des booléens est l’ensemble formé des deux seules valeurs (vrai, faux).
• Les opérations admissibles sur les éléments de ce domaine sont réalisées à l’aide de tous les connecteurs logiques, notés : ET : pour le « et logique »; OU : il est vrai si l’un des deux booléens testés vaut vrai; NON : pour le « non logique »
23
Exemple1 : Algorithme type-booleen
Algorithme Variables : Début booléen1 booléen2 booléen Fin
type-booléen booleen1, booléen2 : booléen 5< 6
// booléen1 prend la valeur Vrai
(5<7) OU (3>8) // booléen2 prend la valeur Vrai vrai // booléen prend la valeur Vrai
24
Exemple 2: Ecrire un algorithme qui demande à l’utilisateur d’entrer une température de l’eau pour il indique son état physico-chimique. Variable Temp en Entier Variables A, B : Booléen Début Ecrire “Entrez la température de l’eau :” Lire Temp A ← Temp =< 0 B ← Temp < 100 Si A Alors Ecrire “C’est de la glace“ Sinon Si B Alors Ecrire “C’est du liquide” Sinon Ecrire “C’est de la vapeur” Fin
25
Valeur d’une variable • La valeur de la variable est la seul caractéristique qui soit modifiée au cours de l’algorithme. Au début de l’algorithme, toutes les variables ont des valeurs inconnues. • Les variables changent de valeur grâce à l’opération d’affectation.
Affectation : • L’affectation est une opération qui fixe une nouvelle valeur à une variable. Le symbole de l’affectation est
26
Exemple 1 :
A B
2 A+1
Exemple 2 : Début Caractère Type Fin
Début ‘’chaîne’’ ‘’caractère’’
caractère Type Fin
‘’chaîne’’ caractère
27
L’ordre des instructions • L’ordre dans lequel les instructions sont écrites joue un rôle essentiel dans le résultat final. Exemple 3 : Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ? Variables A, B en Entier Début A←1 B←A+3 A←3 Fin
28
Plan Introduction Informatisation d’un problème : Langage algorithmique Les variables
Les constantes Les structures de contrôle Les fonctions Les tableaux Les fichiers
29
IV. Les constantes • Valeurs utilisées mais non modifiées par l’algorithme. Une constante ne change jamais dans le temps. • Les constantes sont placés avant le lexique des variables. • Les constantes sont définies par : Nom référence de la constante (en majuscule).
Type nature de la valeur Valeur la valeur de la constante, Description un texte indiquant ce que représente la constante, Exemple : CONST MAX=10
30
Plan Introduction
Informatisation d’un problème : Langage algorithmique Les variables Les constantes Fonctions d’entrée-sortie Les structures de contrôle Les tableaux Les fonctions Les fichiers
31
V. Fonctions d’entrée-sortie
• Les programmes utilisent fréquemment des instructions permettant l’affichage à l’écran et la saisie de valeurs au clavier par l’utilisateur. • Nous avons deux opérations analogues permettant de simuler : • L’affichage d’une phrase avec l’instruction écrire • La saisie d’une valeur par l’utilisateur avec l’instruction lire
32
La fonction lire L’instruction de saisie de données par l’utilisateur est : • Lire nomDeVariable
• L’exécusion de cette instruction consiste à : 1. Demander à l’utilisateur de saisir une valeur sur le périphérique d’entrée; 2. Modifier la valeur de la variable passé entre parenthèses; Avant l’exécution de cette instruction, la variable de la liste avait ou n’avait pas de valeur. Après, elle a la valeur lue au clavier ( le périphérique d’entrée).
33
La fonction écrire L’instruction d’affichage à l’écran (le périphérique de sortie) d’une expression est : • Ecrire expression
Cette instruction réalise simplement l’affichage de l’expression Cette expression peut être :
• Une variable • Des commentaires écrits sous la forme d’une suite de caractère entre guillemets. • A la fois des phrases et des valeurs séparés par une virgule.
34
Algorithme exemple-lire-écrire Variables : nb: réel Début lire nb
// l’utilisateur saisie le nombre au clavier
écrire ‘’la valeur de nb’’ écrire nb
// une phrase est affichée à l’écran // une valeur est affichée à l’écran
écrire (« la valeur de nb est : » , nb) // une phrase suivie de la valeur est affichée à l’écran
Fin
35
Exemple :
• Ecrire un algorithme qui demande à l’utilisateur de saisir au clavier trois nombres réels et qui affiche à l’écran la somme de ces trois nombres.
36
Algorithme somme-de-3 réels Variables : nb1, nb2,nb3, somme: réel
Début lire nb1
// l’utilisateur saisit le premier nombre au clavier
lire nb2 lire nb3 Somme écrire somme Fin
nb1 + nb2+ nb3 // la somme est affichée à l’écran
1
Algorithmique TOUHTOUH Samira Ecole Nationale des Sciences Appliquées d’El Jadida
[email protected]
2
Plan Introduction Informatisation d’un problème : Langage algorithmique Les variables Les constantes Fonctions d’entrée-sortie Les structures de contrôle Les tableaux Les fonctions
Les fichiers
3
VI. Les structures de contrôle
Instruction conditionnelle • Un algorithme est constitué d’une suite d’instructions qui s’exécutent les unes après les autres de la première à la dernière.
• L’instruction conditionnelle va nous permettre de concevoir un algorithme qui n’exécutera pas certains blocs d’instructions. La conditionnelle
• L’instruction conditionnelle détermine si le bloc d’instructions suivant est exécuté ou non. La condition est une expression booléenne dont la valeur détermine le bloc d’instructions.
4
Exemple avec un organigramme :
• Lors de la manipulation d’un distributeur de café, on utilise souvent les sélecteurs « sucré/non sucré » et « chaud /froid). Ensuite on voit apparaitre de la poudre de café, du sucre, puis de l’eau chaude ou froide en fonction de nos demandes.
• Voici un organigramme qui représente l’algorithme enregistré dans l’appareil :
5 Distribuer un gobelet
// L’action « fournir un gobelet » doit être effectuée à chaque exécution de l’algorithme. La poudre de café doit aussi être toujours fournie
Verser le café
Sucré ? // L’action « verser du sucre » n’est Verser le sucre
effectuée que si l’utilisateur a choisi un café sucré
chaud ? Verser l’eau froide
Verser l’eau chaude
// Une seule des deux actions « verser de l’eau chaude » et « verser de l’eau froide » est effectuée.
6
• La syntaxe de cette instruction est : Si (condition)
alors
{ Bloc d’instructions n°1 ;
// exécuté si la condition égale vrai
}
sinon { Bloc d’instructions n°2; }
// exécuté si la condition égale Faux
7
• L’algorithme de la machine à café se présentera ainsi :
Distribuer un gobelet Verser le café en poudre Si le café doit être sucré Alors verser du sucre Si le café doit être chaud Alors verser de l’eau chaude
Sinon verser de l’eau froide
8
Exemple1 : Ecrire un algorithme qui lit deux entiers et affiche le plus grand des deux.
Exécuter avec x = 5 et y = 7
9
Exemple 2 : (avec une variable caractère) Ecrire un algorithme qui prend en compte la réponse d’un utilisateur qui doit répondre à une question par oui ou par non, La question est « Peut-on passer au feu rouge clignotant? » Variable réponse : caractère Début Ecrire « Peut-on passer au feu rouge clignotant? » Ecrire « Répondez par O ou N » Lire réponse Si réponse ‘’O’’ alors { écrire ‘’ ajourné’’ } Si réponse ‘’N’’ alors { écrire ‘’admis’’ } Fin
10
Applications La condition simple
• Une version plus simple est utilisée si l’alternative n’a pas lieu. La syntaxe de cette instruction est alors : Si
(condition)
{ Instructions; }
alors
11
Exemple : Ecrire un algorithme qui lit un entier et qui affiche sa valeur positive.
12
La présentation Les décalages dans l’écriture d’un algorithme sont nécessaires à sa bonne lisibilité.
13
Exemple1 : La différence entre les deux algorithmes identiques suivants : Algorithme Max-de-deux-entiers Variables : x, y, max : entier Début Lire x Lire y Si x>y alors { Max }
Algorithme Max-de-deux-entiers Variables : x, y, max : entier Début Lire x Lire y Si x>y alors {
x
Max
x
}
Sinon
Sinon
{ Max }
{
y
Ecrire (‘’ le maximum est : ‘’, max) Fin
Max
y
} Ecrire (‘’ le maximum est : ‘’, max) Fin
14
Exemple2 : Comparons les deux algorithmes : Variables X, Y, Z : nombres Début Y 2 Lire X Si X > 10 Alors X Y Z X*Y Ecrire Z
Fin
X – 10 1
Variables X, Y, Z : nombres Début Y 2 Lire X Si X > 10 Alors X Y 1 Z X*Y Ecrire Z Fin
X – 10
15
Conditionnelles imbriquées • Il est possible d’imbriquer des blocs de programme les uns dans les autres. Exemple : Ecrire un algorithme qui demande à l’utilisateur une note et affiche le commentaire associé à la note : Note de 0 à 8 inclus : « insuffisant »; Note de 8 à 12 inclus : « moyen » Note de 12 à 16 inclus : » bien »; Note de 16 à 20 inclus : « très bien ».
16 La première solution utilise l’instruction conditionnelle classique : Algorithme commentaires-notes
Variables : note : entier Début Lire note Si note ≤ 8 alors Ecrire (‘’insuffisant ‘’) Si note>8 ET note ≤12 alors Ecrire (‘’moyen’’) Si note > 12 ET note ≤16 alors Ecrire (‘’bien’’) Si note > 16 alors Ecrire (‘’très bien’’) Fin
17
Instruction de répétition
La boucle • L’instruction de répétition, appelée boucle, permet d’exécuter plusieurs fois consécutives un même bloc d’instructions. La répétition s’effectue tant que la valeur de l’expression booléenne est égale à Vrai.
• On dispose de trois structures de contrôle différentes :
18
tant que…………faire : • Cette structure de contrôle fait répéter une séquence d’instructions, aussi longtemps qu’une condition a la valeur Vrai. • Son fonctionnement précis est décrit par l’organigramme :
non
Condition
oui
suite
Séquence D’instructions
19
Exemple 1 : Ecrire un algorithme qui permet d’afficher à l’écran les entiers de 1 à 5.
Algorithme affichage-des-entiers-1-à-5 Variables:
compteur : entier
Début Compteur 1 tant-que compteur ≤ 5 faire { écrire compteur compteur compteur + 1 } Fin
// initialisation // condition de poursuite // début du bloc // traitement // incrémentation du compteur // fin du bloc
20
Remarques :
• Les variables intervenant dans la condition doivent avoir reçu une valeur avant l’évaluation de cette condition : initialiser la condition de la boucle.
• Cette valeur peut être complètement arbitraire, et n’avoir qu’un seul intérêt : forcer l’entrée dans le boucle.
21
Exemple :
Ecrire un algorithme qui prend en compte la réponse d’un utilisateur qui doit répondre à une question par oui ou par non, La question est « Peut-on passer au feu rouge clignotant? » Rep
‘’Z’’
Tant Que Rep # ‘’O ‘’ et Rep # ‘’N’’ Faire Ecrire ‘’Répondez O pour oui, N pour Non’’ Lire Rep
22
• Si la première évaluation de la condition fournit la valeur Faux, le corps de la boucle n’est pas exécuté, la condition ne sera plus évalué et on passe directement à la suite.
• Si la séquence ne change pas la valeur de la condition et si celle-ci a la valeur Vrai, la séquence sera répétée sans que l’on passe jamais à la suite : une boucle infinie.
23
Structure
pour
Lorsque la répétition ne porte que sur le nombre d’itérations et qu’il est connu avant de commencer la boucle, il est pratique d’utiliser la boucle :
pour
de
à
faire
24
Exemple1 : Ecrire un algorithme qui permet d’afficher les entiers de 1 à 5.
Algorithme boucle-pour-faire Variables : compteur : entier Début Pour compteur { écrire compteur } Fin
1
jusqu’au 5 faire
25
Exemple 2 : Ecrire un algorithme qui permet d’afficher la table de multiplication par 7, présentée à l’ancienne : 7 fois 1 font 7 7 fois 2 font 14 …… 7 fois 10 font 70
26
La boucle faire-tant que • La boucle faire-tant que effectue l’évaluation de la condition booléenne après avoir effectué le premier tour de boucle. Dans certains cas, des algorithmes s’écrivent avec moins de lignes en utilisant ce type de boucle. Compteur
1
Faire
// initialisation
// condition de poursuite
{ écrire compteur compteur compteur + 1
//traitement // incrémentation du compteur
} tant-que (compteur ≤ 4)
// condition
27
Exemple 2 :
Soit l’algorithme Variable x : nombre entier Début Ecrire ‘’donnez l’entier de départ’’ Lire x Tant que x<100 Faire Ecrire x x x+20 Fin Que produit cet algorithme lorsque x vaut 43, 195 ou -7? L’écrire à l’aide de Faire Tant que ….. et Si…
Alors….
28
Les boucles imbriquées • Quand un bloc d’instructions à répéter lors d’une boucle est composé de plusieurs boucles , on parle de boucles imbriquées.
Exemple :
• Ecrire un algorithme qui permet de saisir 5 notes, et extrait la meilleure de ces 5 notes. La note doit être comprise entre 0 et 20. Si ce n’est pas le cas l’algorithme doit prévenir l’utilisateur pour qu’il recommence la saisie.
1
Algorithmique TOUHTOUH Samira Ecole Nationale des Sciences Appliquées d’El Jadida
[email protected]
2
Plan Introduction Informatisation d’un problème : Langage algorithmique Les variables Les constantes Fonctions d’entrée-sortie Les structures Les tableaux Les fonctions
Les fichiers
3
Plan Introduction Informatisation d’un problème : Langage algorithmique Les variables Les constantes Fonctions d’entrée-sortie Les structures de contrôles Les tableaux Les fonctions
Les fichiers
4
VII. Les tableaux Introduction • Dans certains conditions, les variables que nous connaissons sont très mal adaptées aux traitements à effectuer. • Lorsqu’il s’agit d’un grand nombre de valeurs de même types qui se répète, le traitement est lourd. • Imaginons, que nous avons plusieurs traitements à effectuer sur des consommations mensuelles d’eau. Pour conserver ces valeurs en mémoire, nous pouvons prendre 12 variables numériques que nous appellerons, par exemple, Eau1, Eau2,…..,Eau12. • Pour calculer la consommation mensuelle moyenne sur l’année nous pouvons écrire la longue formule : • Moyenne = (eau1 + eau2 + eau3+ eau4 + eau5+ eau6+ eau7 + eau8+ eau9+eau10 + eau11+ eau12)/12
5
• Les températures à 16 heures de chacun des jours d’une semaine seront les 7 valeurs de la variable Temp qui est un tableau de 7 variables de type nombre qui sont désignées par Temp[1], Temp[2],… Temp[7] Temp 1
8
2
6
3
7
4
11
5
6
6
8
7
9
Le nom Temp désigne l’ensemble du tableau
Cette case du tableau représente la variable Temp[5] dont la valeur est 6
6
Exemple : Ecrire un algorithme qui permet de calculer la moyenne des températures de la semaine : Algorithme calcul de la moyenne des températures de la semaine Variables : Temp : tableau [7] d’entiers k : entier Somme : entier Début somme 0 Pour k de 1 jusqu’au 7 faire somme somme + Temp[k] moyenne somme/7 Fin
7
• Le principe d'un tableau est très simple : on stocke les éléments dans des cases, chaque case étant étiquetée d'un numéro(généralement appelé indice). Pour accéder à un élément particulier d'un tableau, on donne son indice. • Le nombre maximal d’éléments du tableau, qui est précisé à la définition, s’appelle sa dimension. • Le type de ses éléments s’appelle le type du tableau.
• Pour accéder aux éléments d’un tableau, un indice indique le rang de l’élément.
8
Déclaration d’un tableau
1) T: Tableau [6] de réels
// liste de notes ou de températures
2) T: Tableau [1,6] de réels
3) T: Tableau [0,5] de réels
• Réels : Type des éléments du tableau • [6] : Nombre d’éléments dans le tableau. • Chaque élément est repéré dans le tableau par un indice varie de 0 à taille-1 ou de 1 à taille. • On accède à la case 2 par T[2]. (c’est la 3e case ou la 2e case)
9
Utilisation d’un tableau Tableau à une dimension • La manipulation des éléments du tableau (notes) est décrite dans l’exemple suivant : une seule variable permet de stocker 4 notes entières. Algorithme utilisation d’un tableau Variables : notes : tableau[4] d’entiers; Début notes[0] notes[1] notes[2] notes[3] Fin
12; : on peut fixer la valeur de l’élément d’indice 0 14; 10; 18;
10
L’état de mémoire
12
14
10
18
11
Manipulation de tous les éléments d’un tableau Exemple 1 : Lire les valeurs des éléments d’un tableau T de N
nombres entiers.
12
Tableau à deux dimensions • L’informatique nous offre la possibilité de déclarer des tableaux dans lesquels les valeurs ne sont pas repérées par une seule, mais par deux coordonnées. Tableau cases [7,7] en Entier
13
Exemple :
Ecrire un algorithme remplissant un tableau de 6 sur 13, avec des zéros.
14
Plan Introduction Informatisation d’un problème : Langage algorithmique Les variables Les constantes Fonctions d’entrée-sortie Les structures de contrôles Les tableaux Procédures et fonctions
Les fichiers
15
Procédures Nous voulons poser plusieurs questions aux quelles nous attendons une réponse sous la forme O ou N. Un compteur nous permettra de compter le nombre de réponse positive.
‘’Peut-on passer au feu rouge clignotant?‘’ ‘’Doit-on marquer un arrêt au STOP? ‘’
Pour prendre en compte la réponse de l’utilisateur qui doit répondre seulement par OUI ou par NON
Ceci nécessite l’utilisation de plusieurs instructions en particulier l’utilisation de la boucle tant que,
16 Algorithme : réponseOuiNon Variables : rep : caractère Début : Compteur 0 Ecrire ‘’Peut-on passer au feu rouge clignotant‘’ Lire rep Tant que rep # ‘’O’’ ET rep # ‘’N’’ { Ecrire ‘’ répondez O pour oui et N pour non’’ Lire rep } Si Rep ‘‘N’’ alors compteur compteur + 1 Ecrire ‘’Doit-on marquer un arrêt au STOP ‘’ Lire rep Tant que rep # ‘’O’’ ET rep # ‘’N’’ { Ecrire ‘’ répondez O pour oui et N pour non’’ Lire rep } Si Rep ‘‘O’’ alors compteur compteur + 1 Ecrire ‘’points marqués : ‘’, compteur Fin
17
Pour ne pas avoir à recopier plusieurs fois les mêmes lignes dans l’algorithme, nous pouvons créer une procédure qui est une partie d’algorithme, écrite à part, désigné par un nom, et que l’on fait exécuter plusieurs fois, en citant son nom.
18
Définition d’une procédure :
Procédure maProcédure ( ) // déclaration des variables
Variables var1 : entier Début instructions 1 instructions 2 Fin procédure
19
Variables Question : chaîne de caractères Rep : caractère; Compteur: nombre entier Procédure ReponseOuiNon ( ) Début Ecrire Question Lire Rep Tant que (rep # ‘O’) et (Rep # ‘N’) Faire Ecrire ‘’répondez par O ou par N’’ Lire Rep Fin
20
Début Compteur 0 Question ‘’peut-on passer au feu rouge clignotant?’’ PeponseOuiNon Si Rep ‘‘N’’ alors compteur compteur + 1 Question ‘’doit-on marquer un arrêt au STOP?’’ PeponseOuiNon Si Rep ‘‘O’’ alors compteur compteur + 1 Ecrire ‘’points marqués : ‘’, compteur Fin
21
Les variables locales et globales
Les variables déclarées dans l’algorithme appelant ne sont pas utilisables dans les procédures. Chaque algorithme et sous algorithme a son propre espace de variables, inaccessible par les autres.
Les variables sont dites LOCALES. Il peut exister des variables GLOBALES, mais leur usage est déconseillé.
22
Paramètres Un paramètre est une variable particulière sert à la communication entre algorithme appelant et sous-algorithme. Deux types de communication de valeurs par paramètres apparaissent : La valeur du paramètre effectif est affectée avant l’exécution de la procédure au paramètre formel qui est une variable appartenant à la procédure : on dit que le paramètre est en entrée. Le paramètre formel est une autre désignation du paramètre effectif, valable pendant la durée de la procédure, il ne lui correspond aucune variable propre à la procédure : Le paramètre est en sortie.
23
Paramètres en entrée : transmission par valeur
Dans l’exemple 1, on peut déclarer une nouvelle variable quest, qui va service d’un variable locale à la procédure.
24
Procédure ReponseOuiNon (Quest : chaîne de caractères) Début Ecrire Quest Lire Rep Tant que (rep # ‘O’) et (Rep # ‘N’) Faire Ecrire ‘’répondez par O ou par N’’ Lire Rep Fin Début BonnesReponses 0 ReponseOuiNon(‘’peut-on passer au feu rouge?’’) Si Rep = ‘’N’’ Alors BonnesReponses BonnesReponses + 1 ReponseOuiNon(‘’Doit-on marquer un arrêt au STOP?’’) Si Rep = ‘’O’’ Alors BonnesReponses BonnesReponses + 1 Fin
25
Le paramètre est écrit entre parenthèses, on le qualifie de paramètre formel dans la déclaration, de paramètre effectif lors de chaque appel.
Lors du premier appel à la procédure, le texte « Peut-on passer au feu rouge clignotant? » est automatiquement affecté au paramètre Quest, Il sera remplacé par « doit-on marquer un arrêt au STOP? » lors du deuxième appel. On n’a plus à s’occuper de la variable Question qui peut disparaitre du programme, mais seulement à fournir, lors de chaque appel, le paramètre effectif qui correspond au paramètre formel.
26
Paramètre en sortie : transmission par adresse Exemple : Nous voulons stocker les réponses successives dans le tableau R de [1..20] caractères pour permettre un traitement ultérieur. Début lectureOuiNon(‘’peut-on passer au feu rouge clignotant?’’) R[1] Rep LectureOuiNon(‘’doit-ont marquer un arrêt u STOP’’?) R[2] Rep Nous préférons créer un second paramètre : la variable effective dans laquelle la procédure doit lire la réponse. L’algorithme devient :
27
Procédure ReponseOuiNon (Quest : chaîne de caractères, Rep : caractère) Début Ecrire Quest Lire Rep Tant que (Rep # ‘’O’’) et (Rep # ‘’N’’) Faire Ecrire ‘’répondez par OUI ou par NON’’ Lire REP Fin Début ReponseOuiNon(‘’peut-on passer au feu rouge?’’, R[1]) ReponseOuiNon(‘’Doit-on marquer un arrêt au STOP?’’, R[2]) Fin
28
• La correspondance entre la variable R[1] et le paramètre Rep ne peut pas fonctionner comme pour le paramètre quest, • On ne souhaite pas voir affecter la valeur de R[1] à Rep, mais on veut au contraire que la valeur finale de Rep se trouve dans R[1], • Le nom Rep, défini comme paramètre formel de la procédure est un nom provisoire désignant le paramètre effectif pour la durée de l’exécution de la procédure.
• R[1] désigne pendant la première exécution et R[2] pendant la deuxième.
29
• Pour distinguer dans l’écriture, nous choisirons de faire procéder, chaque nom de paramètre formel de l’indication du type de transmission, suivant le modèle : Procédure Deux Paramètres ( ParamètreEnEntrée, ParamètreEnSortée)
• Les paramètres en Entrée/Sortie, ils sont également transmis par adresse et notés par la double flèche
30
Les fonctions • Certains traitements ne peuvent être effectués par un algorithme, exemple le cas du calcul du sinus d’un angle.
• Tout langage de programmation propose un certain nombre de fonctions; certains sont indispensables, car elles permettent d’effectuer des traitements qui seraient sans elles impossibles. D’autres servent à faciliter la programmation.
31
Structure générale des fonctions • Reprenons l’exemple du sinus. Les langages informatiques, proposent généralement une fonction SIN. Si nous voulons stocker le sinus de 35 dans la variable A, nous écrirons :
A
sin(35)
32
Une fonction est donc constituée de trois parties : - Le nom de la fonction. Le nom d’une fonction commence par une minuscule. Le nom d’une fonction ne comporte pas d’espace. Si le nom de la fonction est composé de plusieurs mots, faire commencer chacun d’eux par une majuscule (par exemple : sommeDeDeuxEntiers,) et ne pas faire figurer de traits d’union. - Deux parenthèses, une ouvrante, une fermante.
- Une liste de valeurs, indispensables à la bonne exécution de la fonction. Ces valeurs s’appellent des arguments, ou des paramètres. Certaines fonctions exigent un seul argument, d’autres deux, etc. et d’autres aucun.
33
L’utilité des fonctions : • Le programmeur doit penser à concevoir et écrire des fonctions pour améliorer son programme. Il y gagnera sur plusieurs points : • Le code des algorithmes est plus simple, plus clair et plus court. Dans un algorithme, appeler une fonction se fait en une seule ligne et la fonction peut être appelée à plusieurs reprises. • Une seule modification dans la fonction sera automatiquement répercutée sur tous les algorithmes qui utilisant cette fonction. • L’utilisation de fonctions génériques dans des algorithmes différents permet de réutiliser son travail et de gagner du temps.
34
Les fonctions sont comparables aux procédures : • Leur appel ne constitue pas à lui seul une instruction, mais figure dans une expression. • Leur exécution produit un résultat qui prend la place de la fonction lors de l’évaluation de l’expression.
• L’instruction retourne,
35
Trois étapes sont toujours nécessaires à l’exécution d’une fonction :
1.
Le programme appelant interrompt son exécution.
2.
La fonction appelée effectue son bloc d’instructions. Dès qu’une instruction retourne est exécutée, la fonction s’arrête.
3.
Le programme appelant reprend alors son exécution.
36
L’arrêt de la fonction • Une fonction s’arrête lorsque son exécution atteint la fin du bloc d’instructions, ou lorsque l’instruction retourne est exécutée (avec ou sans valeur).
37
Fonction sans valeur retournée Ecrire et utiliser une fonction simple qui doit afficher « bonjour ». Cette fonction ne retourne pas de valeur : ceci est signalé en précisant qu’elle retourne vide. Fonction afficheBonjour () : vide Début écrire (‘’bonjour’’) retourne Fin Une fonction se termine toujours par l’instruction retourne. Cette fonction effectuera les instructions entre Debut et Fin.
38
Ecrire un algorithme qui appelle la fonction afficheBonjour (). Algorithme utilise-fonction Début afficheBonjour () Fin
39
La suite des instructions exécutées au cours du temps :
40
Exemple : Ecrire un algorithme qui appelle 10 fois la fonction afficheBonjour ().
41
Fonction avec une valeur retournée Définition La valeur de retour
Une fonction peut retourner une valeur au programme appelant. Cette valeur est unique. Le retour de la valeur signifie l’arrêt de la fonction. Exemple : Ecrire une fonction qui permet de lire une note entre 0 et 20.
42
Fonction lireNote() : entier Variables : note: entier Debut ecrire(‘’Entrez une note : ‘’) lire(note); // l’utilisateur entre la note tant_que ((note<0) OU (note>20)) faire { ecrire (‘’vous avez fait une erreur, essayez encore : ‘’) message d’erreur affiché lire(note); // on recommence la saisie } retourne(note) Fin
//
43
Fonctions récursives Construire la solution d’un problème en utilisant la solution du même problème dans un contexte différent (plus simple). La suite des contextes doit tendre vers une solution directe (cas terminal). Les fonctions récursives sont adaptées à une certaine classe de problèmes. Exemple : la factorielle