
Algorithmique
Cours de Julie Chaumard 30/09/2024
Ressources
Algorithmique - Techniques fondamentales de programmation - Exemples en Python (nombreux exercices corrigés) - BTS, DUT informatique
Algorithmique : techniques fondamentales de programmation, exemples en Python : nombreux exercices corrigés
By: CREPIN, Ludivine. Editions ENI. ISBN: 978-2-409-04184-6, 978-2-409-04202-7.
C’est quoi l’algorithmique ?
- L’algorithmique est la base de la programmation, mais aussi de l'intelligence et de l'analyse, de la compréhension, de la résolution de problème dans tous les domaines.
- L’algorithmique est la science qui s’occupe de tous les calculs.
- En arithmétique on distingue 4 opérations fondamentales : l’addition, la soustraction, la multiplication et la division; les autres opérations ne sont que des combinaisons de celles-ci.
- ⇒ Si un calcul vous parait difficile vous pouvez repérer chaque opérations simples qui se trouvent dans le calcul et voir comment chacune de ses opérations sont reliées entre elles : c’est comprendre la succession d’opération, c’est donc retrouver l’algorithme.
- L'algorithme, tout comme la programmation c'est de la création, il faut être créatif. Donc un algorithme ou un programme fait par une personne ne sera pas le même que fait par une autre personne.
Alors, si chacun a le sien, s'il peut y avoir plusieurs solutions, laquelle est la bonne laquelle choisir ? Quelles sont les critères :- la rapidité d'exécution,
- le fait que ça fonctionne dans plusieurs cas d’usage,
- le fait que si ça tombe en panne le programme à la capacité de se remettre tout seul à fonctionner,
- le fait qu'il ne prend pas de ressources mémoire
- le fait qu'il soit lisible, c'est-à-dire que si une autre personne que vous doit faire des modifications, il faut pas que ce soit complètement incompréhensible.

Le principe de base
- Identifier les informations à manipuler
- données initiales
- résultats attendus
- Quel mode de calcul (ou comment) va permettre d’obtenir le résultat à partir d’un paramètre (données initiales)
- Coût d’exécution du calcul
- ressources en mémoire
- ressources en temps : le nombre d’opérations de base effectuées par l’ordinateur pour calculer le résultat

Exemple d’algorithme : le sudoku
La résolution des sudokus peut se faire à l'aide d'algorithmes simples. Il faut disposer de deux tableaux : l'un pour les cases du sudoku, l'autre pour noter les chiffres qu'il est possible de placer dans une case donnée de la grille.

Exemple d’algorithme : le fil d’actualité d’un réseau social
L’algorithme de placement dans le fil d’actualité d’un réseau social détermine l’ordre d’affichage des publications. Il analyse les interactions des utilisateurs (likes, commentaires, partages) et donne priorité aux contenus des comptes avec lesquels les utilisateurs interagissent souvent. Il prend en compte le temps de publication pour privilégier les contenus récents. Il évalue également la diversité des types de contenus (photos, vidéos, articles) pour offrir une expérience équilibrée. Enfin, il peut intégrer des paramètres de personnalisation pour ajuster l’affichage en fonction des intérêts spécifiques de chaque utilisateur.
Pourquoi faire un algorithme ?
Créer un algorithme avant d’écrire un programme est une étape essentielle dans le processus de développement.
1. Clarification du problème
Un algorithme permet de bien comprendre le problème à résoudre. Il aide à :
- Décomposer le problème en étapes claires et logiques.
- Identifier les données d’entrée et les résultats attendus.
Exemple : Si on veut créer un programme pour calculer la moyenne de notes, l’algorithme aide à comprendre qu’il faut additionner les notes et diviser par le nombre total de notes.
2. Planification
Un algorithme sert de plan détaillé pour le programme. Comme un plan de construction pour un bâtiment, il aide à :
- Organiser les étapes du programme.
- Définir l’ordre des opérations.
Exemple : Planifier comment gérer les erreurs (par exemple, si une note est négative, elle doit être rejetée).
3. Simplification du développement
En créant un algorithme, il devient plus facile d’écrire le code. On sait déjà quelles étapes sont nécessaires, donc :
- Le temps de développement est réduit.
- On peut se concentrer sur la syntaxe du langage de programmation sans se perdre dans la logique.
4. Facilite la détection d’erreurs
L’algorithme aide à repérer les erreurs logiques avant même de passer à l’écriture du code. C’est plus facile de corriger un problème dans un algorithme que dans un programme déjà écrit.
Exemple : Si une boucle risque d’être infinie, on le verra plus facilement dans l’algorithme.
5. Communication et collaboration
Un algorithme est un langage compréhensible par tous, même sans connaître un langage de programmation spécifique. Il permet de :
- Communiquer la logique à d’autres développeurs, collègues ou enseignants.
- Partager le raisonnement et la structure du programme avec les membres d’une équipe.
6. Réutilisabilité et modularité
L’algorithme permet de définir des étapes qui peuvent être réutilisées dans d’autres parties du programme ou dans d’autres projets :
- On peut créer des algorithmes modulaires pour des tâches spécifiques (par exemple, un algorithme de tri).
7. Réduction des coûts
Corriger des erreurs logiques dans un algorithme coûte beaucoup moins cher (en temps et en argent) que de corriger ces mêmes erreurs une fois le programme codé et testé.
En résumé, créer un algorithme avant de coder permet de gagner du temps, d’éviter des erreurs coûteuses, de mieux structurer son projet et d’améliorer la collaboration. C’est une étape indispensable pour réussir un projet informatique, quel que soit le niveau de complexité.
Entrée-sortie, variables
Dans un algorithme il y a des données entrées dans le programme et des données qui sortent du programme. Les données ont permis au programme de faire des choses avec et il nous donne le résultat.
Variable
- elle a un nom qui ne change pas
- elle a un type qui ne change pas
- elle a une valeur qui peut éventuellement changer en évoluant au cours de l’exécution du programme
- par exemple une boulangerie où on achète du pain
- nom du pain :
pain_nom / chaîne de caractère / baguette
- prix fixe du pain :
pain_tarif / nombre entier / 1
- coefficient appliqué en fonction des saisons :
coef_hiver / nombre flotant / 0.5
- le nombre de pain acheté :
achat_nombre / nombre flottant / 1.5
- le montant total des achats :
achat_total / nombre flottant / 1.5
- le porte monnaie de l’acheteur :
wallet_acheteur / nombre flottant / 10 / 10 - 1.3 = 8.7
- la date de l’achat :
achat_date / date / 20240923
- nom du pain :
- par exemple une boulangerie où on achète du pain
Type d’une variable
- int / entier - nombre entier :
0 / -5 / 222
- float / reel - nombre flottant :
0,2 / -3.14
- string / chaine- chaîne de caractère :
“Bonjour et bienvenue”
- liste ou un tableau :
[chat, chien, oiseau, poisson]
ou[2, 4, 6, 8, 10]
ou[1.3, -3.6, 4]
- bouléen / booleen : elle n’a que 2 valeurs possibles : true (vrai) ou false (faux)
- par exemple
2 > 7 ⇒ false
ou10 > 7 ⇒ true
- par exemple
- date - date :
(2024, 9, 24)
Donc on affecte une valeur à une variable
pain_nom
←“baguette”
pain_tarif
←1.3
Les instructions ou opérations d’entrée-sortie
On décrit le comportement de l’ordinateur et non celui de l’utilisateur
- LIRE()
achat_nombre
(saisir)
- ECRIRE()
achat_total
(afficher)
Opérations
PROGRAMME Nom_du_programme
CONST //(ici on mettra toutes les variables constantes nécessaires au programme)
pain_tarif <- 1 : ENTIER
VAR //(ici on mettra toutes les variables nécessaires au programme)
pain_nom : CHAINE
DEBUT
ECRIRE (”Saisissez le nom du pain que vous souhaitez acheter”)
pain_nom <- LIRE()
ECRIRE (”Vous avez choisi le pain “, pain_nom, ". Tarif : ", pain_nom x pain_tarif," euros")
FIN
Opérations arithmétiques de bases
addition, soustraction, multiplication
PROGRAMME operations
VAR
a <- 17 : ENTIER
b <- 2 : ENTIER
c <- 2.5 : REEL
resultat : REEL
DEBUT
resultat <- a + b
ECRIRE (”L'addition de a et b vaut : ”, resultat)
resultat <- a - b
ECRIRE (”La soustraction de a et b vaut : ”, resultat)
resultat <- a x c
ECRIRE (”La multiplication de a et c vaut : ”, resultat)
resultat <- a / c
ECRIRE (”La division de a par c vaut : ”, resultat)
FIN
Opérations de comparaison
PROGRAMME comparaison
VAR
a <- 17 : ENTIER
b <- 2 : ENTIER
resultat : REEL
DEBUT
resultat <- a = b
ECRIRE (”a est-il égal à b ? ”, resultat) // FAUX
resultat <- a ? b // différence
ECRIRE (”a est-il différent de b ? ”, resultat) // VRAI
resultat <- a < b
ECRIRE (”a est-il inférieur à b ? ”, resultat) // FAUX
resultat <- a > b
ECRIRE (”a est-il supérieur à b ? ”, resultat) // VRAI
resultat <- a <= b
ECRIRE (”a est-il inférieur ou égal à b ? ”, resultat) // FAUX
resultat <- a >= b
ECRIRE (”a est-il supérieur ou égal à b ? ”, resultat) // VRAI
FIN
Opérations sur les chaînes
PROGRAMME chaines
VAR
sujet : CHAINE <- "Le chat"
verbe : CHAINE <- "ronronne"
resultat : CHAINE
DEBUT
//Concaténation
resultat <- CONCATENER(sujet, verbe)
ECRIRE (resultat) // Le chatronronne
resultat <- CONCATENER(sujet," ", verbe)
ECRIRE (resultat) // Le chat ronronne
//Extraction
resultat <- EXTRAIRE(sujet, 5, 3)
ECRIRE (resultat) //hat
//Longueur
resultat <- LONGUEUR(verbe)
ECRIRE (resultat) //8
FIN
Hello World
Exercices
#1
Donnez l’algorithme pour calculer le volume d’un rectangle dont la largeur et la longueur soit données par l’utilisateur.
Volume = Longueur × Largeur × Hauteur
#2
Donnez deux algorithmes différents qui inversent les valeurs de deux variables. Ces valeurs sont données par l’utilisateur.
Quizz
- L’algorithmie est-elle la base commune de tous les langages de programmation ?
- oui
- non
- Est-ce qu'une variable peut être un entier et un réel à la fois ?
- Oui
- Non
- Quel est le type de résultat d’une comparaison ?
- Entier
- Réel
- Caractère
- Booléen
- Chaîne de caractères
Conditions
D’après vous c’est quoi une condition ?
Si, alors, sinon
PROGRAMME Entier_positif
VAR
un_nombre : ENTIER
DEBUT
ECRIRE("Entrez un entier de votre choix")
un_nombre <- LIRE()
SI un_nombre > 0
ALORS
ECRIRE("Votre entier est positif")
SINON
ECRIRE("Votre entier est négatif")
FINSI
FIN
Et la valeur zéro ?
PROGRAMME Entier_positif
VAR
un_nombre : ENTIER
DEBUT
ECRIRE("Entrez un entier de votre choix")
un_nombre <- LIRE()
SI un_nombre > 0
ALORS
ECRIRE("Votre entier est positif")
SINON
SI un_nombre < 0
ALORS
ECRIRE("Votre entier est négatif")
SINON
ECRIRE("Votre entier est nul")
FINSI
FINSI
FIN
Cas parmi
PROGRAMME Mois_cas_parmi
VAR
mois : ENTIER
DEBUT
ECRIRE("Entrer un chiffre entre 1 et 6 compris")
mois <- LIRE()
CAS mois PARMI :
CAS : 1
ECRIRE("Janvier")
CAS : 2
ECRIRE("Février")
CAS : 3
ECRIRE("Mars")
CAS : 4
ECRIRE("Avril")
CAS : 5
ECRIRE("Mai")
PARDEFAUT
ECRIRE("Juin")
FINCASPARMI
FIN
Conditions multiples
- ET
- Vérifier si une personne a entre 18 et 30 ans.
PROGRAMME age_personne
VAR
age : ENTIER
DEBUT
ECRIRE("Entrez votre âge :")
LIRE(age)
SI age >= 18 ET age <= 30 ALORS
ECRIRE("Vous avez entre 18 et 30 ans.")
SINON
ECRIRE("Vous n'avez pas entre 18 et 30 ans.")
FINSI
FIN
- OU
- Vérifier si une personne est soit mineure, soit âgée de plus de 65 ans.
PROGRAMME age_personne
VAR
age : ENTIER
DEBUT
ECRIRE("Entrez votre âge :")
LIRE(age)
SI age < 18 OU age > 65 ALORS
ECRIRE("Vous êtes soit mineur, soit âgé de plus de 65 ans.")
SINON
ECRIRE("Vous avez entre 18 et 65 ans.")
FINSI
FIN
Exercices
Exercice du feu tricolore
- Si le feu est vert alors je peux passer sinon j’attends
- Si le feu est (ou orange ou rouge) alors j’attends sinon je peux passer
- 3 cas
- Cas le feu est vert : je passe
- Cas le feu est orange : j’attends
- Cas le feu est rouge : j’attends
Exercice calcul d’une remise
Écrivez l’algorithme qui calcule la remise suivante à un montant de type réel entré par l’utilisateur : il est accordé une remise de 5 % pour tout montant compris entre 100 et 500 € et 8 % au-delà. Pensez à tester votre script avec tous les cas possibles.
Attention si on doit utiliser
= ou >= ou <=
Exercice de tri
Écrivez l’algorithme faisant saisir à l’utilisateur trois entiers, i, j et k, et les triant par ordre croissant et les afficher pour vérifier votre tri.
Vérifier si nombre est positif ou négatif
Écrivez l’algorithme qui calcule le signe du produit de deux réels entrés par l’utilisateur sans utiliser la multiplication ni aucun autre calcul.
Boucle
D’après vous c’est quoi une boucle ?
Par exemple quand on a une liste de produit pour calculer le montant à payer on lit le prix de chaque produit et on l’ajoute à la somme.
Tant que
Nous pouvons comparer le TANT QUE à un SI ALORS qui se répète tant que la condition est valide. Cette structure réalise un nombre indéfini d’itérations qui va dépendre de la validité de la condition. Ces itérations ne s’arrêtent que lorsque la condition n’est plus validée.
Jeu de déplacement d'un personnage
PROGRAMME deplacement_personnage
VAR
position, distance_max : ENTIER
DEBUT
position <- 0 // La position de départ du personnage
distance_max <- 10 // La position finale que le personnage doit atteindre
ECRIRE("Le personnage commence à avancer...")
TANTQUE position < distance_max FAIRE
position <- position + 1
ECRIRE("Le personnage est à la position :", position)
FINTANTQUE
ECRIRE("Le personnage a atteint la fin du parcours !")
FIN
Répéter
Quelle que soit la validité de la condition, les instructions du bloc sont forcément exécutées une fois.
Jeu du nombre mystère avec la boucle REPETER
Deviner un nombre
Écris un algorithme qui demande à l'utilisateur de deviner un nombre secret compris entre 1 et 10. Tant que l'utilisateur ne donne pas le bon nombre, l'algorithme doit continuer à lui demander de deviner. Une fois que l'utilisateur a trouvé le bon nombre, affiche un message de félicitations.
Étapes :
- Définir un nombre secret (par exemple 7).
- Demander à l'utilisateur de proposer un nombre.
- Tant que le nombre proposé n'est pas égal au nombre secret, redemander un nouveau nombre.
- Si l'utilisateur trouve le nombre secret, afficher "Bravo, tu as trouvé le nombre !"
PROGRAMME jeu_nombre_mystere
VAR
nombre_mystere, nombre_saisie : ENTIER
DEBUT
nombre_mystere <- 7 // Le nombre mystère est 7 (ou on peut utiliser une valeur aléatoire)
ECRIRE("Bienvenue au jeu du nombre mystère !")
REPETER
ECRIRE("Devinez un nombre entre 1 et 10 :")
nombre_saisie <- LIRE
SI nombre_saisie < nombre_mystere ALORS
ECRIRE("C'est plus grand ! Essayez encore.")
SINON SI nombre_saisie > nombre_mystere ALORS. // ici on répète une condition pour le cas où le nombre deviné serait égal au nombre mystère
ECRIRE("C'est plus petit ! Essayez encore.")
FINSI
JUSQUA nombre_saisie = nombre_mystere
ECRIRE("Félicitations ! Vous avez deviné le nombre mystère :", nombre_mystere)
FIN
Pour
Quand on connait le nombre d’itérations à faire
Nous allons afficher à l’utilisateur la table de multiplication de son choix.
PROGRAMME Table_multiplication
i : ENTIER
entree_utilisateur : ENTIER
DEBUT
ECRIRE("Quelle table de multiplication voulez-vous afficher ?
(entier entre 1 et 10)")
entree_utilisateur <- LIRE()
POUR i ALLANT de 1 à 10 AU PAS DE 1
FAIRE
ECRIRE(i," x ", entree_utilisateur," = ", entree_utilisateur x i)
FINPOUR
FIN
Pour toutes les tables de multiplications
PROGRAMME Tables_multiplication
i, j : ENTIER
DEBUT
POUR i ALLANT de 1 à 10 AU PAS DE 1
FAIRE
ECRIRE("Table de ", i)
POUR j ALLANT de 1 à 10 AU PAS DE 1
FAIRE
ECRIRE(i," x ",j," = ",j x i)
FINPOUR
FINPOUR
FIN
Exercices
BOULANGERIE
Afficher tous les produits en vente de la boulangerie en ligne er si le produit commence par un C, le signaler
Inventer un exercice
Calcul de la somme des valeurs des cases d’un tableau.
1- on demande à l’utilisateur d’entrer les chiffres à additionner
2- on en fait la somme
Comparaisons des boucles avec JavaScript
Voici un tableau comparatif des principales boucles en JavaScript : for
, while
, do...while
, et les boucles spécifiques comme for...of
et for...in
.
Type de boucle | Description | Syntaxe | Quand l'utiliser ? | Exemple |
for | Boucle classique, idéale lorsque le nombre d'itérations est connu à l'avance. | for (initialisation; condition; incrémentation) { ... } | - Parcourir un tableau.<br>- Répéter une action un nombre précis de fois. | javascript<br>for (let i = 0; i < 5; i++) { console.log(i); }<br>// Résultat : 0, 1, 2, 3, 4 |
while | Exécute tant qu'une condition est vraie. | while (condition) { ... } | - Lorsque vous ne savez pas combien d'itérations sont nécessaires.<br>- Condition plus complexe que les boucles for . | javascript<br>let i = 0;<br>while (i < 5) { console.log(i); i++; }<br>// Résultat : 0, 1, 2, 3, 4 |
do...while | Similaire à while , mais s'exécute au moins une fois avant de vérifier la condition. | do { ... } while (condition); | - Exécuter une action au moins une fois, indépendamment de la condition. | javascript<br>let i = 0;<br>do { console.log(i); i++; } while (i < 5);<br>// Résultat : 0, 1, 2, 3, 4 |
for...of | Parcourt les valeurs d'un tableau, d'une chaîne ou d'un objet itérable. | for (const valeur of tableau) { ... } | - Pour récupérer directement les valeurs d'un tableau ou d'une chaîne. | javascript<br>let fruits = ["pomme", "banane", "orange"];<br>for (const fruit of fruits) { console.log(fruit); }<br>// Résultat : pomme, banane, orange |
for...in | Parcourt les clés d'un objet ou les indices d'un tableau. | for (const clé in objet) { ... } | - Pour récupérer les clés d'un objet ou les indices d'un tableau. | javascript<br>let objet = { a: 1, b: 2, c: 3 };<br>for (const clé in objet) { console.log(clé); }<br>// Résultat : a, b, c |
Array.forEach | Méthode spécifique des tableaux pour exécuter une fonction pour chaque élément. | tableau.forEach(callback) | - Lorsqu'une action doit être effectuée sur chaque élément d'un tableau. | javascript<br>let nombres = [1, 2, 3];<br>nombres.forEach(num => console.log(num));<br>// Résultat : 1, 2, 3 |
map | Crée un nouveau tableau basé sur les valeurs transformées par une fonction donnée. | tableau.map(callback) | - Lorsque vous voulez transformer les valeurs d'un tableau en un nouveau tableau. | javascript<br>let nombres = [1, 2, 3];<br>let doublés = nombres.map(num => num * 2);<br>console.log(doublés);<br>// Résultat : [2, 4, 6] |
Comparaison entre les types de boucles
Aspect | for | while | do...while | for...of | for...in |
Connaissance du nombre d'itérations | Oui | Non | Non | Non | Non |
Type d'éléments manipulés | Tout | Tout | Tout | Valeurs (éléments itérables) | Clés (objets ou indices) |
S'exécute au moins une fois | Non | Non | Oui | Non | Non |
Facilité de lecture | Moyenne | Moyenne | Moyenne | Facile | Moyenne |
Applications courantes | Boucles générales | Boucles dépendant d'une condition | Boucles nécessitant une exécution initiale | Parcourir des tableaux ou chaînes | Parcourir les clés d'objets ou indices de tableaux |
Conseils pour choisir la boucle
for
: Utilisez-le lorsque le nombre d'itérations est connu ou facile à calculer.
while
: Utilisez-le lorsque vous travaillez avec des conditions dynamiques et inconnues à l'avance.
do...while
: Choisissez-le si une action doit s'exécuter au moins une fois avant de vérifier la condition.
for...of
: Idéal pour parcourir les valeurs d'un tableau ou d'une chaîne de manière simple et lisible.
for...in
: Utilisez-le pour parcourir les clés d'un objet ou les indices d'un tableau.
Structure et enregistrement
La structure permet de regrouper et organiser les informations de manière plus efficace et propre.
Programme qui demande au visiteur ce qu’il veut acheter
PROGRAMME achat_boulangerie
STRUCTURE achat
DEBUT
produit : CHAINE
quantite : ENTIER
FINSTRUCTURE
VAR
mon_achat : achat
DEBUT
ECRIRE("Entrez le nom du produit que vous souhaitez acheter")
mon_achat.nom <- LIRE()
ECRIRE("Entrez la quantité du produit")
mon_achat.quantite <- LIRE()
ECRIRE("vous avez choisi : ",mon_achat.nom, " avec une quantité de ", mon_achat.quantite)
FIN
On peut mettre un tableau dans une structure
STRUCTURE livre
DEBUT
titre : CHAINE
editions : TABLEAU[1...5] : CHAINE
FINSTRUCTURE
Fonctions
Les fonctions sont le type de sous-programmes le plus utilisé aujourd’hui en informatique. Ce sont des procédures restreintes :
- Les paramètres sont uniquement en entrée.
- Une fonction renvoie toujours une et une seule valeur au programme qui l’appelle.
OCaml
Agence digitale Parisweb.art
Tout savoir sur Julie, notre directrice de projets digitaux :
https://www.linkedin.com/in/juliechaumard/