Introduction à l'Algorithmique
Introduction à l'Algorithmique
ISTA NTIC
Pr Bendahmane
Enoncé du problème
Spécification
Cahier des charges
Analyse
Algorithme
Traduction en langage
Programme source
Compilation
Programme exécutable
Tests et modifications
Version finale et résultats
1
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é
2
Module M102 - Pr Bendahmane 5
Variables A, B, C: Entier
Début
A←3
B←7
A←B
B ← A+5
C ←A+ B
C ←B –A
Fin
3
Dans les langages de programmation une variable sert à stocker la
valeur d’une donnée
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, …)
4
Conseil: pour la lisibilité du code choisir des noms significatifs qui
décrivent les données manipulées
exemples: TotalVentes2004, Prix_TTC, Prix_HT
Le type d’une variable détermine l’ensemble des valeurs qu’elle peut prendre,
les types offerts par la plus part des langages sont:
Type numérique
Entier
Réel
Type logique ou booléen: deux valeurs VRAI ou FAUX
Type caractère: lettres majuscules, minuscules, chiffres, symboles, …
exemples: ’A’, ’a’, ’1’, ’?’, …
Type chaîne de caractère: toute suite de caractères,
exemples: " Nom, Prénom", "code postale: 1000", …
5
Rappel: toute variable utilisée dans un programme doit avoir fait
l’objet d’une déclaration préalable
En pseudo-code, on va adopter la forme suivante pour la
déclaration de variables
Variables liste d'identificateurs : type
Exemple:
Variables i, j,k : entier
x, y : réel
OK: booléen
ch1, ch2 : chaîne de caractères
Remarque: pour le type numérique on va se limiter aux entiers et
réels sans considérer les sous types
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
6
Beaucoup de langages de programmation (C/C++, Java, …) utilisent le
signe égal = pour l’affectation ←. Attention aux confusions:
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
Une expression peut être une valeur, une variable ou une opération
constituée de variables reliées par des opérateurs exemples: 1, b,
a*2, a+ 3*b-c, …
L'évaluation de l'expression fournit une valeur unique qui est le résultat de
l'opération
Les opérateurs dépendent du type de l'opération, ils peuvent être :
des opérateurs arithmétiques: +, -, *, /, % (modulo), ^ (puissance)
des opérateurs logiques: NON, OU, ET
des opérateurs relationnels: = (égalité) ,≠ , <, >, <=, >=
des opérateurs sur les chaînes: & (concaténation)
Une expression est évaluée de gauche à droite mais en tenant compte de
priorités
7
Pour les opérateurs arithmétiques donnés ci-dessus, l'ordre de priorité
est le suivant (du plus prioritaire au moins prioritaire) :
^ : (élévation à la puissance)
* , / (multiplication, division)
% (modulo)
+ , - (addition, soustraction)
exemple: 2+3*7 vaut 23
Variables A, B : Entier
Début
A←1
B ← A+2
A← 3
Fin
8
Donnez les valeurs des variables A, B et C après exécution des
instructions suivantes ?
Variables A, B, C: Entier
Début
A←3
B←7
A←B
B ← A+5
C ←A +B
C ← B –A
Fin
Variables A, B, C: Entier
Début
A←3
B←A + 4
A ←A +1
B←A - 4
Fin
9
Donnez les valeurs des variables A et B après exécution des instructions
suivantes ?
Variables A, B : Entier
Début
A←1
B←2
A←B
B←A
Fin
10
Que produit l’algorithme suivant ?
L'écriture permet d'afficher des résultats à l'écran (ou de les écrire dans
un fichier)
11
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
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
12
Ecrire un algorithme qui permet de calculer la moyenne générale d’un
étudiant sachant qu’il a passé un examen dans deux matières à
coefficient différent.
13
Ecrire un algorithme qui demande à l’utilisateur le prix hors taxe d’un
article, le taux de TVA et le taux de remise , puis calcule et affiche le
prix TTC.
14
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
La partie Sinon n'est pas obligatoire, quand elle n'existe pas et que la
condition est fausse, aucun traitement n'est réalisé
Si condition alors
instruction ou suite d'instructions1
Finsi
15
Algorithme AffichageValeurAbsolue (version1)
Variable x : réel
Début
Ecrire (" Entrez un réel : “)
Lire (x)
Si (x < 0) alors
Ecrire ("la valeur est négative ")
Sinon
Ecrire ("la valeur est positive ")
Finsi
Fin
16
C1 C2 C1 ET C2 C1 C2 C1 OU C2
VRAI VRAI VRAI VRAI VRAI VRAI
VRAI FAUX FAUX VRAI FAUX VRAI
FAUX VRAI FAUX FAUX VRAI VRAI
FAUX FAUX FAUX FAUX FAUX FAUX
C1 C2 C1 XOR C2 C1 NON C1
VRAI VRAI FAUX VRAI FAUX
VRAI FAUX VRAI FAUX VRAI
FAUX VRAI VRAI
FAUX FAUX FAUX
17
Variable n : entier
Début
Ecrire ("entrez un nombre : ")
Lire (n)
Si (n < 0) alors
Ecrire ("Ce nombre est négatif")
Sinon
Si (n = 0) alors
Ecrire ("Ce nombre est nul")
Sinon
Ecrire ("Ce nombre est positif")
Finsi
Finsi
Fin
Variable n : entier
Début
Ecrire ("entrez un nombre : ")
Lire (n)
Si (n < 0) alors Ecrire ("Ce nombre est négatif")
Finsi
Si (n = 0) alors Ecrire ("Ce nombre est nul")
Finsi
Si (n > 0) alors Ecrire ("Ce nombre est positif")
Finsi
Fin
Remarque : dans la version 2 on fait trois tests systématiquement alors que dans la
version 1, si le nombre est négatif on ne fait qu'un seul test
Conseil : utiliser les tests imbriqués pour limiter le nombre de tests et placer d'abord
les conditions les plus probables
18
Sa syntaxe est la suivante :
Selon variable
cas valeur1 : Action 1
cas Valeur2 : Action2
.
.
.
cas Valeur n : Action n
Sinon : Action 0
Fin Selon
19
Ecrire un algorithme qui, selon que la moyenne est :
Entre 10 et 12, affiche Passable ;
Entre 12 et 14, affiche Assez bien ;
Entre 14 et 16, affiche Bien ;
Supérieure ou égale à 16, affiche T. Bien.
20
Ecrire un algorithme qui permet de résoudre l’équation : Ax2+Bx+C =0
21
Ecrire un algorithme qui demande à l’utilisateur d’entrer un
nombre entre 1 et 7 et qui affiche le jour correspondant.
22
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 tant que : on y répète des instructions tant qu'une certaine
condition est réalisée
instructions
FinPour
i ←initiale
Vrai
i n'a pas atteint finale instructions i ← i + pas
Faux
23
Remarque : le nombre d'itérations dans une boucle Pour est connu avant
le début de la boucle
Compteur est une variable de type entier (ou caractère). Elle doit être
déclarée
Pas est un entier qui peut être positif ou négatif. Pas peut ne pas être
mentionné, car par défaut sa valeur est égal à 1. Dans ce cas, le nombre
d'itérations est égal à finale - initiale+ 1
Initiale et finale peuvent être des valeurs, des variables définies avant le
début de la boucle ou des expressions de même type que compteur
Variables i : entier
Debut
Pour i allant de 1 à 10
Ecrire (" La valeur de i est : ", i)
FinPour
Fin
24
Il faut éviter de modifier la valeur du compteur (et de finale) à
l'intérieur de la boucle. En effet, une telle action :
25
Ecrire un algorithme qui affiche la moyenne générale d’une
classe de 30 étudiants, sachant que chaque étudiant a passé
un examen dans 2 matières différentes.
S= 1+2+3……+100
S=1+2+4+8+16+….+ 128
S=1+ ½ + 3 + ¼ + 1/5 + 1/6 + 1/7+ ….. + 1/20
S=(1*2)+(2*3)+(3*4)+…..+(19*20)
S=(1*2)+(3*4)+(5*6)+…..+(19*20)
26
Calculer et afficher le factoriel d’un nombre entré par
l’utilisateur.
Calculer et Afficher les sommes suivantes :
S= 1! + 2! + ….+ n!
S= 1+ x/1! + x2/2! + …..+ xn/n!
S= 1 +x3/3! + x5/5! + …..+ x2n+1/(2n+1)!
S= 1- x + x2 – x3 + x4 – x5 ….+ x2n
27
Ecrire un algorithme qui demande un nombre à l’utilisateur
et qui indique si ce nombre est premier ou non.
28
Une classe de N élèves a passé un examen dans P
matières différentes à coefficients différents.
Calculer et afficher :
- La moyenne de chaque élève.
- La moyenne de la classe.
TantQue (condition)
instructions condition Vrai instructions
FinTantQue
Faux
29
Le nombre d'itérations dans une boucle TantQue n'est pas connu au
moment d'entrée dans la boucle. Il dépend de l'évolution de la valeur de
condition
Une des instructions du corps de la boucle doit absolument changer la
valeur de condition de vrai à faux (après un certain nombre d'itérations),
sinon le programme tourne indéfiniment
Variable C : caractère
Debut
Ecrire (" Entrez une lettre majuscule ")
Lire (C)
TantQue (C < 'A' ou C > 'Z')
Ecrire ("Saisie erronée. Recommencez")
Lire (C)
FinTantQue
Ecrire ("Saisie valable")
Fin
30
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 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
Répéter
instructions instructions
Jusqu'à condition
Faux
condition
Vrai
Condition est évaluée après chaque itération
les instructions entre Répéter et jusqu’à sont exécutées au moins une fois et leur
exécution est répétée jusqu’à ce que condition soit vrai (tant qu'elle est fausse)
31
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 jusqu'à :
32
Un poissonnier sert un client qui a demandé 1Kg de poisson.
Il pèse successivement différents poissons et s'arrête dès que
le poids total égale ou dépasse 1Kg. Donner le nombre de
poissons servis.
33
Lire un code bancaire d’une carte guichet. Contrôlez ce code
sachant qu’au bout de 3 tentatives non réussies la carte est
retirer.
34
Supposons qu'on veut conserver les notes d'une classe de 30 étudiants pour
extraire quelques informations. Par exemple : calcul du nombre d'étudiants
ayant une note supérieure à 10
Le seul moyen dont nous disposons actuellement consiste à déclarer 30
variables, par exemple N1, …, N30. Après 30 instructions lire, on doit écrire 30
instructions Si pour faire le calcul
nbre ← 0
Si (N1 >10) alors nbre ←nbre+1 FinSi
….
Si (N30>10) alors nbre ←nbre+1 FinSi
c'est lourd à écrire
Heureusement, les langages de programmation offrent la possibilité de
rassembler toutes ces variables dans une seule structure de donnée appelée
tableau
35
L'accès à un élément du tableau se fait au moyen de l'indice. Par exemple, notes[i]
donne la valeur de l'élément i du tableau notes
Selon les langages, le premier indice du tableau est soit 0, soit 1. Le plus souvent
c'est 0 (c'est ce qu'on va adopter en pseudo-code). Dans ce cas, notes[i] désigne
l'élément i+1 du tableau notes
Il est possible de déclarer un tableau sans préciser au départ sa dimension. Cette
précision est faite ultérieurement .
Par exemple, quand on déclare un tableau comme paramètre d'une procédure, on peut
ne préciser sa dimension qu'au moment de l'appel
En tous cas, un tableau est inutilisable tant qu’on n’a pas précisé le nombre de ses
éléments
Un grand avantage des tableaux est qu'on peut traiter les données qui y sont
stockées de façon simple en utilisant des boucles
36
Algorithmes qui permettent de saisir et d'afficher les éléments d'un tableau :
37
Ecrire un algorithme qui demande à l’utilisateur de remplir
un tableau de N nombres et qui affiche la valeur maximale
du tableau ainsi que sa position.
38
Soit un Tableau T de N éléments triés dans l’ordre croissant.
Ecrire un algorithme qui permet d’insérer dans T une valeur
X entrée par l’utilisateur.
39
Ecrire un algorithme permettant de rechercher, dans un
tableau T, une valeur X entrée par l’utilisateur.
40
Considérons le tableau T : 4 6 10 15 17 18 24 27 30
Si la valeur cherché est 20 alors les indices inf, sup et milieu vont évoluer comme
suit :
inf 0 5 5 6
sup 8 8 5 5
milieu 4 6 5
Si la valeur cherché est 10 alors les indices inf, sup et milieu vont évoluer comme
suit :
inf 0 0 2
sup 8 3 3
milieu 4 1 2
41
Le tri consiste à ordonner les éléments du tableau dans l’ordre croissant
ou décroissant
Nous verrons dans la suite l'algorithme de tri par sélection. Le tri sera
effectué dans l'ordre croissant
1 4 9 7 3
Étape 2: on cherche le plus petit élément, mais cette fois à partir du deuxième
élément. On le trouve en dernière position, on l'échange avec le deuxième:
1 3 9 7 4
Étape 3:
1 3 4 7 9
42
Soit un tableau T de taille N. Triez ce tableau en utilisant le tri
par sélection
43
Première étape:
( 5 1 4 2 8 ) ( 1 5 4 2 8 ) Les éléments 5 et 1 sont comparés, et comme 5 > 1,
l'algorithme les intervertit.
( 1 5 4 2 8 ) ( 1 4 5 2 8 ) Interversion car 5 > 4.
( 1 4 5 2 8 ) ( 1 4 2 5 8 ) Interversion car 5 > 2.
( 1 4 2 5 8 ) ( 1 4 2 5 8 ) Comme 5 < 8, les éléments ne sont pas échangés.
Deuxième étape:
( 1 4 2 5 8 ) ( 1 4 2 5 8 ) Même principe qu'à l'étape 1.
(14258) (12458)
(12458) (12458)
À ce stade, la liste est triée, mais pour le détecter, l'algorithme doit effectuer un
dernier parcours.
Troisième étape:
(12458) (12458)
(12458) (12458)
Comme la liste est triée, aucune interversion n'a lieu à cette étape, ce qui
provoque l'arrêt de l'algorithme.
44
Les langages de programmation permettent de déclarer des tableaux
dans lesquels les valeurs sont repérées par deux indices. Ceci est utile
par exemple pour représenter des matrices
Exemple : une matrice A de 3 lignes et 4 colonnes dont les éléments sont réels
45
Algorithme qui permet d'afficher les éléments d'une matrice :
46
Ecrire un algorithme qui permet de calculer :
La moyenne de toutes les cases d’une matrice de L lignes
et C colonnes.
La Somme de chaque ligne
La moyenne et le maximum de chaque colonne
La moyenne de la diagonale principale
La somme des éléments de la partie supérieure par
rapport à la diagonale
47
La grande majorité des langages proposent les fonctions suivantes
de manipulation des chaînes de caractères, même si le nom et la
syntaxe peuvent varier d’un langage à l’autre:
Longueur(chaîne) : renvoie le nombre de caractères d’une chaîne
Chr (valeur) renvoie le caractère dont code ASCII est égal à valeur.
48
Ecrire un algorithme qui demande une chaine de caractères
de longueur impaire et l’affiche sous la forme d’un triangle.
Exp : bonjour
onjou
njo
j
49
Certains problèmes conduisent à des programmes longs, difficiles à écrire
et à comprendre. On les découpe en des parties appelées sous-
programmes ou modules
Les fonctions et les procédures sont des modules (groupe d'instructions)
indépendants désignés par un nom. Elles ont plusieurs intérêts :
permettent de "factoriser" les programmes, càd de mettre en commun les
parties qui se répètent
50
La fonction SommeCarre suivante calcule la somme des carrées de deux
réels x et y :
Fonction SommeCarre (x : réel, y: réel ) : réel
variable z : réel
z ←x^2+y^2
retourne (z)
FinFonction
L'utilisation d'une fonction se fera par simple écriture de son nom dans le
programme principale. Le résultat étant une valeur, devra être affecté ou
être utilisé dans une expression, une écriture, ...
Exepmle : Algorithme exepmleAppelFonction
variables z : réel
Début
z ←5*SommeCarre(7,2)+1
écrire("SommeCarre(3,5)= ", SommeCarre(3,5))
Fin
51
Dans certains cas, on peut avoir besoin de répéter une tache dans plusieurs
endroits du programme, mais que dans cette tache on ne calcule pas de résultats
ou qu'on calcule plusieurs résultats à la fois
Dans ces cas on ne peut pas utiliser une fonction, on utilise une procédure
Une procédure est un sous-programme semblable à une fonction mais qui ne
retourne rien
Une procédure s'écrit en dehors du programme principal sous la forme :
Procédure nom_procédure (paramètres et leurs types)
Instructions constituant le corps de la procédure
FinProcédure
Remarque : une procédure peut ne pas avoir de paramètres
L'appel d'une procédure, se fait dans le programme principale ou dans une autre
procédure par une instruction indiquant le nom de la procédure :
Procédure exemple_proc (…)
…
FinProcédure
Algorithme exepmleAppelProcédure
Début
exemple_proc (…)
…
Fin
Remarque : contrairement à l'appel d'une fonction, on ne peut pas affecter la
procédure appelée ou l'utiliser dans une expression. L'appel d'une procédure est
une instruction autonome
52
Les paramètres servent à échanger des données entre le programme principale
(ou la procédure appelante) et la procédure appelée
Les paramètres placés dans l'appel d'une procédure sont appelés paramètres
effectifs. ils contiennent les valeurs pour effectuer le traitement
Une variable locale n'est connue qu'à l'intérieur du module ou elle a été définie. Elle
est créée à l'appel du module et détruite à la fin de son exécution
Une variable globale est connue par l'ensemble des modules et le programme
principale. Elle est définie durant toute l’application et peut être utilisée et modifiée
par les différents modules du programme
53
La manière de distinguer la déclaration des variables locales et globales diffère
selon le langage
• Conseil : Il faut utiliser autant que possible des variables locales plutôt que des
variables globales. Ceci permet d'économiser la mémoire et d'assurer
l'indépendance de la procédure ou de la fonction
54
Calculer et afficher la somme :
S= a! + b! + c!
Tout module récursif doit posséder un cas limite (cas trivial) qui arrête la
récursivité
Exemple : Calcul du factorielle
Fonction fact (n : entier ) : entier
Si (n=0) alors
retourne (1)
Sinon
retourne (n*fact(n-1))
Finsi
FinFonction
55
Ecrire des fonctions récursives permettant de
calculer les sommes suivantes :
S= xn
S= a+b
S=1 3+23+33….+n3
U(0)=U(1)=1
U(n)=U(n-1)+U(n-2)
56
Module M102 - Pr Bendahmane 132
Structure Nom_structure
Attribut 1 : Type
Attribut 2 : Type
.
.
.
Attribut N : Type
Fin Structure
57
Structure Etudiant
Nom : Chaine
Note: Réel
Fin Structure
Variables e1, e2 : Etudiant
Début
Ecrire « Entrer le nom du premier étudiant »
Lire e1.Nom
e2.Note 18
Fin
58
Définir une structure EMPLOYE constituée des éléments
suivants : Nom(chaine), Salaire(réel) et
DateNaissance(structure). La DateNaissance étant une
structure constituer de : Jour , Mois et Année ( des entiers)
59