Apprendre les concepts de base de l'algorithmique et de la programmation.Etre capable de mettre en oeuvre ces concepts pour analyser des problèmes simples et écrire les programmes correspondants
cours algorithme et structure de données 1er année
1. Algorithme I
2018/2019Algorithme I,1ère année LM
1
Département de Technologies du multimédia et du Web
1ère année LM
Semestre 1
Par Mr: Abdelbaki MISSAOUI
missaoui_isitc@yahoo.fr
2. Objectif et plan du cours
2018/2019Algorithme I,1ère année LM
2
Objectif:
Apprendre les concepts de base de l'algorithmique et de la
programmation
Etre capable de mettre en oeuvre ces concepts pour analyser des
problèmes simples et écrire les programmes correspondants
Plan:
les notions fondamentales de l’algorithmique : types de base, instructions
simples, structures conditionnelles et itératives, procédures et fonctions, etc.
C (un outil de programmation)
3. Algorithmique
Leçon 1 : Introduction à la programmation
Objectifs:
Connaître le vocabulaire de base en programmation
Comprendre la démarche de programmation
4. Notion de programme
2018/2019Algorithme I,1ère année LM
4
La programmation consiste à «expliquer» en détails à une machine ce
qu'elle doit faire, en sachant qu'elle ne peut pas véritablement «
comprendre » un langage humain, mais seulement effectuer un
traitement automatique sur des séquences de caractères.
Un programme n'est rien d'autre qu'une suite d'instructions, codées en
respectant de manière stricte un ensemble de conventions fixées à
l'avance que l'on appelle un langage informatique.
5. Langages informatiques (1)
2018/2019Algorithme I,1ère année LM
5
Supposons qu’un enseignant dispose d’un ordinateur et d’un programme de
calcul de la moyenne des étudiants. Pour s’exécuter, ce programme
nécessite qu’on lui fournisse pour chaque étudiant, les notes de contrôle
continu, de T.P et de l’examen final : ce sont les données. En retour, le
programme va fournir la moyenne cherchée : c’est le résultat.
De la même manière, un programme de paie nécessite des informations
données : noms des employés, grades, numéros de sécurité sociale,
situations familiales, nombre d’heure supplémentaires, etc.
6. Langages informatiques (2)
2018/2019Algorithme I,1ère année LM
6
Les résultats seront imprimés sur les différents bulletins de paie :
identification de l’employé, salaire brut, retenue sécurité sociale, etc.
Pour éviter de saisir à chaque fois les mêmes données, certaines
informations doivent être ”archivées” sur une mémoire de masse. Le
programme y accèdera alors directement (figure 1).
7. Langages informatiques (3)
2018/2019Algorithme I,1ère année LM
7
Pour « parler » à un ordinateur, il nous faudra
utiliser des systèmes de traduction automatiques,
capables de convertir en nombres binaires des
suites de caractères formant des mots-clés (anglais
en général) qui seront plus significatifs pour nous.
8. Compilation et interprétation (1)
2018/2019Algorithme I,1ère année LM
8
Ce que nous écrirons … Ce que l’on utilisera à chaque
fois que l’on voudra exécuter le
code source :
traduction/exécution ligne par
ligne.
Affichage
ligne par ligne
9. Compilation et interprétation (2)
2018/2019Algorithme I,1ère année LM
9
traduit la totalité du
texte source en une
fois
Programme prêt à être exécuté
10. Compilation et interprétation (3)
2018/2019Algorithme I,1ère année LM
10
Compilateur:
+ plus rapide à l’exécution
+ sécurité du code source
- il faut recompiler à chaque modification
Interpréteur:
+ exécution instantanée appréciable pour les débutants
- exécution lente par rapport à la compilation
11. Langages de programmation
2018/2019Algorithme I,1ère année LM
11
Deux types de langages:
Langages procéduraux
Langages orientés objets
Exemples de langages:
Fortran, Cobol, Pascal, C, …
C++, Java, Python,……
Choix d’un langage?
12. Etapes de réalisation d’un programme
2018/2019Algorithme I,1ère année LM
12
Spécification
Analyse
Traduction en langage
Compilation
Tests et modifications
Enoncé du problème
Cahier des charges
Algorithme
Programme source
Programme exécutable
Version finale et résultats
La réalisation de programmes passe par l’écriture d’algorithmes
D’où l’intérêt de l’Algorithmique
13. Algorithmique
2018/2019Algorithme I,1ère année LM
13
Le terme algorithme vient du nom du mathématicien arabe Al-Khawarizmi
(820 après J.C.)
Un algorithme est une description complète et détaillée des actions à effectuer
et de leur séquencement pour arriver à un résultat donné
Intérêt: séparation analyse/codage (pas de préoccupation de syntaxe)
Qualités: exact (fournit le résultat souhaité), efficace (temps d’exécution, mémoire
occupée), clair (compréhensible), général (traite le plus grand nombre de cas
possibles), …
L’algorithmique désigne aussi la discipline qui étudie les algorithmes et leurs
applications en Informatique
Une bonne connaissance de l’algorithmique permet d’écrire des algorithmes
exacts et efficaces
14. Représentation d’un algorithme
2018/2019Algorithme I,1ère année LM
14
Historiquement, deux façons pour représenter un algorithme:
L’Organigramme: représentation graphique avec des symboles (carrés,
losanges, etc.)
offre une vue d’ensemble de l’algorithme
représentation quasiment abandonnée aujourd’hui
Le pseudo-code: représentation textuelle avec une série de conventions
ressemblant à un langage de programmation (sans les problèmes de syntaxe)
plus pratique pour écrire un algorithme
représentation largement utilisée
15. Notion de variable
2018/2019Algorithme I,1ère année LM
15
Dans les langages de programmation une variable sert à stocker la
valeur d’une donnée
Une variable désigne en fait un emplacement mémoire dont
le contenu peut changer au cours d’un programme (d’où le nom variable)
Règle : Les variables doivent être déclarées avant d’être utilisées, elle
doivent être caractérisées par :
un nom (Identificateur)
un type (entier, réel, caractère, chaîne de caractères, …)
16. Choix des identificateurs (1)
2018/2019Algorithme I,1ère année LM
16
Le choix des noms de variables est soumis à quelques règles qui varient
selon le langage, mais en général:
Un nom doit commencer par une lettre alphabétique
exemple valide: A1 exemple invalide: 1A
doit être constitué uniquement de lettres, de chiffres et du soulignement _
(Eviter les caractères de ponctuation et les espaces) valides: SMIP2018,
SMP_2018 invalides: SMP 2005,SMI-2007,SMP;2007
doit être différent des mots réservés du langage (par exemple en Java: int,
float, else, switch, case, default, for, main, return, …)
La longueur du nom doit être inférieure à la taille maximale spécifiée par le
langage utilisé
17. Choix des identificateurs (2)
2018/2019Algorithme I,1ère année LM
17
Conseil: pour la lisibilité du code choisir des noms significatifs qui
décrivent les données manipulées
exemples: TotalVentes2019, Prix_TTC, Prix_HT
Remarques:
en pseudo-code algorithmique, on va respecter les règles citées,
même si on est libre dans la syntaxe
certains langages comme C, C++ et Java font la différence
entre lettres minuscules et majuscules alors que d’autres
comme Turbo Pascal n’en font aucune distinction.
18. Notion de constante
2018/2019Algorithme I,1ère année LM
18
Contrairement aux variables, les constantes sont des
données dont la valeur reste fixe durant l’exécution
du programme.
Exemples : Pi = 3.14 g = 9.80 etc.
19. Notion de Type
2018/2019Algorithme I,1ère année LM
19
Le type d’une variable détermine l’ensemble des valeurs qu’elle peut prendre,
En pseudo-code, on va adopter la forme suivante pour la déclaration de
variables
Variables liste d'identificateurs : type
Les principaux types utilisés en algorithmique sont :
- le type entier
- le type réel
- le type caractère
- le type chaîne de caractères
- le type logique ou booléen.
21. Notion de Type : réel
2018/2019Algorithme I,1ère année LM
21
le type réel ou décimal
Il existe plusieurs types de réels représentant
chacun un ensemble particulier de valeurs prises
dans R (ensemble des nombres réels). Cette
distinction se justifie par le mode de stockage des
informations dans le langage de programmation.
22. Notion de Type : réel (2)
2018/2019Algorithme I,1ère année LM
22
la forme usuelle avec le point comme symbole
décimal
Exemples : -3.2467 12.7 36.49
Les opérations définies sur les réels sont :
23. Notion de Type :caractère
2018/2019Algorithme I,1ère année LM
23
La comparaison entre les caractères se fait selon leur
codes ASCII
24. Notion de Type :booléen(1)
2018/2019Algorithme I,1ère année LM
24
le type logique ou booléen
Une variable logique ne peut prendre que les valeurs
”Vrai” ou ”Faux”.Elle intervient dans l’évaluation
d’une condition. Les principales opérations définies sur
les variables de type logique sont :
la négation (NON), l’intersection (ET) et l’union (OU).
L’application de ces opérateurs se fait conformément
à la table de vérité suivante :
25. Notion de Type :booléen(2)
2018/2019Algorithme I,1ère année LM
25
26. Les expressions
2018/2019Algorithme I,1ère année LM
26
Ce sont des combinaisons entre des variables et des
constantes à l’aide d’opérateurs. Elles expriment un
calcul (expressions arithmétiques) ou une relation
(expressions logiques).
31. Algorithmique
Leçon 2 : Les instructions simples
Objectifs:
Comprendre les actions algorithmiques simples
Connaître la structure générale d’un algorithme
32. Les instructions simples
2018/2019Algorithme I,1ère année LM
32
l’affectation consiste à attribuer une valeur à une variable (ça consiste en fait à
remplir où à modifier le contenu d'une zone mémoire)
En pseudo-code, l'affectation se note avec le signe ←
Var← e: attribue la valeur de e à la variable Var
- e peut être une valeur, une autre variable ou une expression
- Var et e doivent être de même type ou de types compatibles
- l’affectation ne modifie que ce qui est à gauche de la flèche
Ex valides: i ←1 j ←i k ←i+j
x ←10.3 OK ←FAUX ch1 ←"SMI"
ch2 ←ch1 x ←4 x ←j
(voir la déclaration des variables dans le transparent précédent)
non valides: i ←10.3 OK ←"SMI" j ←x
33. Les instructions simples: remarques
2018/2019Algorithme I,1ère année LM
33
Beaucoup de langages de programmation (C/C++, Java, …) utilisent le
signe égal = pour l’affectation ←. Attention aux confusions:
l'affectation n'est pas commutative : A=B est différente de B=A
l'affectation est différente d'une équation mathématique :
A=A+1 a un sens en langages de programmation
A+1=2 n'est pas possible en langages de programmation et n'est pas
équivalente à A=1
Certains langages donnent des valeurs par défaut aux variables déclarées.
Pour éviter tout problème il est préférable d'initialiser les variables
déclarées
36. Les instructions d'entrées-sorties: lecture et
écriture (1)
2018/2019Algorithme I,1ère année LM
36
Les instructions de lecture et d'écriture permettent à la machine de
communiquer avec l'utilisateur
La lecture permet d'entrer des donnés à partir du clavier
En pseudo-code, on note: lire (var)
la machine met la valeur entrée au clavier
dans la zone mémoire nommée var
Remarque: Le programme s'arrête lorsqu'il rencontre une instruction Lire et
ne se poursuit qu'après la frappe d’une valeur au clavier et de la touche
Entrée
37. Les instructions d'entrées-sorties: lecture et
écriture (2)
2018/2019Algorithme I,1ère année LM
37
L'écriture permet d'afficher des résultats à l'écran (ou de les écrire dans un
fichier)
En pseudo-code, on note: écrire (var)
la machine affiche le contenu de la
zone mémoire var
Conseil: Avant de lire une variable, il est fortement conseillé d’écrire des
messages à l’écran, afin de prévenir l’utilisateur de ce qu’il doit frapper
39. Exemple 1 (lecture et écriture)
2018/2019Algorithme I,1ère année LM
39
Ecrire un algorithme qui demande un nombre entier à l'utilisateur, puis qui
calcule et affiche le double de ce nombre
Algorithme Calcul_double
variables A, B : entier
Début
écrire("entrer le nombre ")
lire(A)
B ← 2*A
écrire("le double de ", A, "est :", B)
Fin
40. Exemple2 (lecture et écriture)
2018/2019Algorithme I,1ère année LM
40
Ecrire un algorithme qui vous demande de saisir votre nom puis votre
prénom et qui affiche ensuite votre nom complet
Algorithme AffichageNomComplet
variables Nom, Prenom, Nom_Complet : chaîne de caractères
Début
écrire("entrez votre nom")
lire(Nom)
écrire("entrez votre prénom")
lire(Prenom)
Nom_Complet ← Nom + Prenom
écrire("Votre nom complet est : ", Nom_Complet)
Fin
42. 2018/2019Algorithme I,1ère année LM
42
Exercice 2
Ecrire un algorithme qui lit deux entiers au clavier
et qui affiche ensuite leur somme et leur produit.
Exercice 3
Ecrire un algorithme qui lit le rayon d’un cercle
et qui affiche ensuite son périmètre et sa
surface.
43. Algorithmique
Leçon 3 : les structures conditionnelles
Objectifs:
Construire des algorithmes comportant des traitements
conditionnels.
44. Instructions conditionnelles (1)
2018/2019Algorithme I,1ère année LM
44
Les instructions conditionnelles servent à n'exécuter une instruction ou une
séquence d'instructions que si une condition est vérifiée
On utilisera la forme suivante: Si condition alors
instruction ou suite d'instructions1
Sinon
instruction ou suite d'instructions2
Finsi
la condition ne peut être que vraie ou fausse
si la condition est vraie, se sont les instructions1 qui seront exécutées
si la condition est fausse, se sont les instructions2 qui seront exécutées
la condition peut être une condition simple ou une condition composée de plusieurs
conditions
45. Instructions conditionnelles (2)
2018/2019Algorithme I,1ère année LM
45
L’exécution de cette instruction se déroule
selon l’organigramme suivant:
46. Instructions conditionnelles (3)
2018/2019Algorithme I,1ère année LM
46
La partie Sinon n'est pas obligatoire, quand elle n'existe pas et que la
condition est fausse, aucun traitement n'est réalisé
On utilisera dans ce cas la forme simplifiée suivante:
Si condition alors
instruction ou suite d'instructions1
Finsi
47. Instructions conditionnelles (4)
2018/2019Algorithme I,1ère année LM
47
L’exécution de cette instruction se déroule
selon l’organigramme suivant:
48. Exemple (Si…Alors…Sinon)
2018/2019Algorithme I,1ère année LM
48
Algorithme AffichageValeurAbsolue (version1)
Variable x : réel
Début
Ecrire (" Entrez un réel : “)
Lire (x)
Si (x < 0) alors
Ecrire ("la valeur absolue de ", x, "est:",-x)
Sinon
Ecrire ("la valeur absolue de ", x, "est:",x)
Finsi
Fin
49. Exemple (Si…Alors)
2018/2019Algorithme I,1ère année LM
49
Algorithme AffichageValeurAbsolue (version2)
Variable x,y : réel
Début
Ecrire (" Entrez un réel : “)
Lire (x)
y← x
Si (x < 0) alors
y ← -x
Finsi
Ecrire ("la valeur absolue de ", x, "est:",y)
Fin
50. Exemple (Si…Alors Sinon )
2018/2019Algorithme I,1ère année LM
50
Ecrire un algorithme qui demande un nombre entier à l'utilisateur, puis qui
teste et affiche s'il est divisible par 3
Algorithme Divsible_par3
Variable n : entier
Début
Ecrire " Entrez un entier : "
Lire (n)
Si (n%3=0) alors
Ecrire (n," est divisible par 3")
Sinon
Ecrire (n," n'est pas divisible par 3")
Finsi
Fin
51. Conditions composées
2018/2019Algorithme I,1ère année LM
51
Une condition composée est une condition formée de plusieurs conditions
simples reliées par des opérateurs logiques:
ET, OU, OU exclusif (XOR) et NON
Exemples :
x compris entre 2 et 6 : (x > 2) ET (x < 6)
n divisible par 3 ou par 2 : (n%3=0) OU (n%2=0)
deux valeurs et deux seulement sont identiques parmi a, b et c :
(a=b) XOR (a=c) XOR (b=c)
L'évaluation d'une condition composée se fait selon des règles présentées
généralement dans ce qu'on appelle tables de vérité
53. Structure de sélection multiple
Selon <sélecteur> Faire
Liste de valeurs 1 : < Séquence d’instructions 1>
Liste de valeurs 2 : < Séquence d’instructions 2>
…
Liste de valeurs n : < Séquence d’instructions n>
Sinon
<Autre Séquence d’instructions>
FinSelon
La séquence d’instructions numéro i sera exécuté si la valeur du sélecteur
appartient à la ième liste de valeurs. Le sélecteur est une variable ou une
expression de type scalaire (le résultat est un entier ou un caractère).
2018/2019Algorithme I,1ère année LM
53
54. Exemple simple sur la sélection multiple
2018/2019Algorithme I,1ère année LM
54
55. Tests imbriqués
2018/2019Algorithme I,1ère année LM
55
Les tests peuvent avoir un degré quelconque d'imbrications
Si condition1 alors
Si condition2 alors
instructionsA
Sinon
instructionsB
Finsi
Sinon
Si condition3 alors
instructionsC
Finsi
Finsi
56. Tests imbriqués: exemple (version 1)
2018/2019Algorithme I,1ère année LM
56
ÉCRIRE "Température de l'eau? "
LIRE Temp
SI Temp <= 0 ALORS Est-ce de la glace?
ÉCRIRE "C'est de la glace"
FINSI
SI Temp > 0 ET Temp < 100 ALORS Est-ce du
liquide?
ÉCRIRE "C'est du liquide"
FINSI
SI Temp >= 100 ALORS Est-ce de la vapeur?
ÉCRIRE "C'est de la vapeur"
FINSI
57. Exemple simple sur tests imbriqués(version 2)
2018/2019Algorithme I,1ère année LM
57
Notez que cet algorithme est assez laborieux. Les conditions se ressemblent
plus ou moins, mais surtout on oblige le flux d'exécution à examiner trois
conditions successives alors que toutes portent sur un même thème, soit la
température (la valeur de la variable Temp). Il est cependant plus rationnel
d'imbriquer les structures :
ÉCRIRE "Température de l'eau? "
LIRE Temp
SI Temp <= 0 ALORS Est-ce de la glace?
ÉCRIRE "C'est de la glace"
SINON
SI Temp > 0 ET Temp < 100 ALORS Est-ce du liquide?
ÉCRIRE "C'est du liquide"
SINON C'est donc de la vapeur
ÉCRIRE "C'est de la vapeur"
FINSI
FINSI
59. Exercices d’application
2018/2019Algorithme I,1ère année LM
59
Ecrire un algorithme permettant de résoudre dans R une équation du second
degré de la forme ax2+bx+c = 0.
Exercice 2
Ecrire un algorithme pemettant de simuler une calculatrice à 4 opérations
(+, -, *, et /). Utiliser la structure « selon » pour le choix de l’opération à
effectuer.
Exercice 3
Ecrire un algorithme qui lit un caractère au clavier puis affiche s’il s’agit
d’une lettre minuscule, d’une lettre majuscule, d’un chiffre ou d’un caractère
spécial.
Exercice 1
64. Algorithmique
Leçon 4 : Les structures itératives
Objectifs:
Construire des algorithmes comportant des traitements
itératifs.
65. Instructions itératives: les boucles
2018/2019Algorithme I,1ère année LM
65
Les boucles servent à répéter l'exécution d'un groupe d'instructions un certain
nombre de fois
On distingue trois sortes de boucles en langages de programmation :
Les boucles pour ou avec compteur : on y répète des instructions en faisant évoluer
un compteur (variable particulière) entre une valeur initiale et une valeur finale
Les boucles tant que : on y répète des instructions tant qu'une certaine condition est
réalisée
Les boucles Répéter…. jusqu'à : on y répète des instructions jusqu'à ce qu'une
certaine condition soit réalisée
66. La structure « Pour… Faire »
2018/2019Algorithme I,1ère année LM
66
67. Boucle Pour : exemple1
2018/2019Algorithme I,1ère année LM
67
Calcul de x à la puissance n où x est un réel non nul et n un entier
positif ou nul
Variables x, puiss : réel
n, i : entier
Debut
Ecrire (" Entrez la valeur de x ")
Lire (x)
Ecrire (" Entrez la valeur de n ")
Lire (n)
puiss ← 1
Pour i allant de 1 à n
puiss← puiss*x
FinPour
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
68. Boucle Pour : exemple1 (version 2)
2018/2019Algorithme I,1ère année LM
68
Calcul de x à la puissance n où x est un réel non nul et n un entier positif ou nul
(version 2 avec un pas négatif)
Variables x, puiss : réel
n, i : entier
Debut
Ecrire (" Entrez respectivement les valeurs de x et n ")
Lire (x, n)
puiss ← 1
Pour i de n à 1 par pas -1
puiss← puiss*x
FinPour
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
69. Boucle Pour : remarques
2018/2019Algorithme I,1ère année LM
69
Il faut éviter de modifier la valeur du compteur (et de finale) à
l'intérieur de la boucle. En effet, une telle action :
perturbe le nombre d'itérations prévu par la boucle Pour
rend difficile la lecture de l'algorithme
présente le risque d'aboutir à une boucle infinie
Exemple : Pour i de 1 à 5
i i -1
écrire(" i = ", i)
Finpour
79. Lien entre Pour et TantQue
2018/2019Algorithme I,1ère année LM
79
La boucle Pour est un cas particulier de Tant Que (cas où le nombre d'itérations est connu
et fixé) . Tout ce qu'on peut écrire avec Pour peut être remplacé avec TantQue (la
réciproque est fausse)
Pour compteur allant de initiale à finale par pas valeur du pas
instructions
FinPour
peut être remplacé par : compteur ← initiale
(cas d'un pas positif) TantQue compteur <= finale
instructions
compteur ← compteur+pas
FinTantQue
80. Lien entre Pour et TantQue: exemple
2018/2019Algorithme I,1ère année LM
80
Calcul de x à la puissance n où x est un réel non nul et n un entier positif ou nul (version
avec TantQue)
Variables x, puiss : réel
n, i : entier
Debut
Ecrire (" Entrez la valeur de x ")
Lire (x)
Ecrire (" Entrez la valeur de n ")
Lire (n)
puiss ← 1
i ← 1
TantQue (i<=n)
puiss← puiss*x
i ← i+1
FinTantQue
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
81. Boucles imbriquées
2018/2019Algorithme I,1ère année LM
81
Les instructions d'une boucle peuvent être des instructions itératives. Dans ce
cas, on aboutit à des boucles imbriquées
Exemple: Exécution
Pour i allant de 1 à 5 OX
Pour j allant de 1 à i OOX
écrire("O") OOOX
FinPour OOOOX
écrire("X") OOOOOX
FinPour
83. Choix d'un type de boucle
2018/2019Algorithme I,1ère année LM
83
Si on peut déterminer le nombre d'itérations avant l'exécution de la boucle,
il est plus naturel d'utiliser la boucle Pour
S'il n'est pas possible de connaître le nombre d'itérations avant l'exécution
de la boucle, on fera appel à l'une des boucles TantQue ou répéter jusqu'à
Pour le choix entre TantQue et Répéter ….jusqu'à :
Si on doit tester la condition de contrôle avant de commencer les instructions de
la boucle, on utilisera TantQue
Si la valeur de la condition de contrôle dépend d'une première exécution des
instructions de la boucle, on utilisera répéter jusqu'à
85. Les boucles : exercices
2018/2019Algorithme I,1ère année LM
85
Exercice 1
Ecrire un algorithme permettant de :
- Lire un nombre fini de notes comprises entre 0 et 20
- Afficher la meilleure note, la mauvaise note et la moyenne de toutes
les notes.
Exercice 2
Calculer ab avec a réel et b entier par multiplications successives.
Exercice 3
Ecrire un algorithme qui lit un entier positif et vérifie si ce nombre est
premier ou non.
Remarque : un nombre premier n’est divisible que par 1 ou par lui-
même.