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.

https://eds-p-ebscohost-com.bnf.idm.oclc.org/eds/results?sid=0098f5b8-3586-4afe-bc01-42b775ba1cb5@redis&vid=0&sdb=edspub&tid=3000EP&bquery=algorithmique+techniques&bdata=JmRiPWVkc3B1YiZsYW5nPWZyJnR5cGU9NDQmc2VhcmNoTW9kZT1BbmQmc2l0ZT1lZHMtbGl2ZQ==

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.
Exemple d’algorithme, on peut remarquer les indentations

Le principe de base

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

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

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 ou 10 > 7 ⇒ true
  • date - date : (2024, 9, 24)

Donc on affecte une valeur à une variable

  • pain_nom“baguette”
  • pain_tarif1.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 :

  1. Définir un nombre secret (par exemple 7).
  1. Demander à l'utilisateur de proposer un nombre.
  1. Tant que le nombre proposé n'est pas égal au nombre secret, redemander un nouveau nombre.
  1. 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 boucleDescriptionSyntaxeQuand l'utiliser ?Exemple
forBoucle 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
whileExé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...whileSimilaire à 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...ofParcourt 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...inParcourt 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.forEachMé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
mapCré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

Aspectforwhiledo...whilefor...offor...in
Connaissance du nombre d'itérationsOuiNonNonNonNon
Type d'éléments manipulésToutToutToutValeurs (éléments itérables)Clés (objets ou indices)
S'exécute au moins une foisNonNonOuiNonNon
Facilité de lectureMoyenneMoyenneMoyenneFacileMoyenne
Applications courantesBoucles généralesBoucles dépendant d'une conditionBoucles nécessitant une exécution initialeParcourir des tableaux ou chaînesParcourir les clés d'objets ou indices de tableaux

Conseils pour choisir la boucle

  1. for : Utilisez-le lorsque le nombre d'itérations est connu ou facile à calculer.
  1. while : Utilisez-le lorsque vous travaillez avec des conditions dynamiques et inconnues à l'avance.
  1. do...while : Choisissez-le si une action doit s'exécuter au moins une fois avant de vérifier la condition.
  1. for...of : Idéal pour parcourir les valeurs d'un tableau ou d'une chaîne de manière simple et lisible.
  1. 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/