Cours d'Algorithmique Niveau 1 et 2
Cours d'Algorithmique Niveau 1 et 2
Durée : 2 heures
Définition :
Un algorithme est une suite finie et ordonnée d'instructions permettant
de résoudre un problème ou d'accomplir une tâche. Il est indépendant
de tout langage de programmation et décrit une méthode pour
atteindre un objectif.
Exemple : Une recette de cuisine est un algorithme qui décrit les
étapes pour préparer un plat.
Importance :
o Les algorithmes sont au cœur de l'informatique et de la
technologie moderne.
o Ils permettent d'automatiser des tâches complexes, de traiter
des données, de prendre des décisions et de résoudre des
problèmes de manière efficace.
o Ils sont utilisés dans divers domaines : intelligence artificielle,
réseaux sociaux, moteurs de recherche, médecine, finance, etc.
Algorithme :
o Description abstraite et conceptuelle des étapes pour résoudre
un problème.
o Peut être exprimé en langage naturel, en pseudo-code ou sous
forme de schémas (organigrammes).
o Exemple : Algorithme pour trier une liste de nombres.
Programme :
o Implémentation concrète d'un algorithme dans un langage de
programmation spécifique (Python, Java, C++, etc.).
o Utilise des syntaxes et des règles propres au langage choisi.
o Exemple : Code Python pour trier une liste.
Logiciel :
o Ensemble de programmes et de ressources (interfaces, bases de
données, etc.) qui fonctionnent ensemble pour offrir une solution
complète à un utilisateur.
o Exemple : Une application de gestion de bibliothèque (composée
de plusieurs programmes).
3. Notions de problème et de solution algorithmique
Problème :
Une situation ou une question nécessitant une réponse ou une
résolution.
Exemple : Comment trouver le plus court chemin entre deux points sur
une carte ?
Solution algorithmique :
Une méthode systématique pour résoudre le problème, décrite sous
forme d'étapes claires et précises.
o Caractéristiques d'une bonne solution algorithmique :
Correcte : Elle résout le problème de manière exacte.
Efficace : Elle utilise les ressources (temps, mémoire) de
manière optimale.
Compréhensible : Elle est claire et facile à suivre.
Exemple : Algorithme de Dijkstra pour trouver le plus court
chemin dans un graphe.
Faire du thé :
1. Faire bouillir de l'eau.
2. Mettre un sachet de thé dans une tasse.
3. Verser l'eau bouillante dans la tasse.
4. Attendre 3 minutes.
5. Retirer le sachet de thé.
6. Ajouter du sucre ou du lait si désiré.
Trouver un livre dans une bibliothèque :
1. Aller à la section correspondante (roman, science, etc.).
2. Chercher le livre par ordre alphabétique (auteur ou titre).
3. Vérifier si le livre est disponible.
4. Emprunter ou noter la référence.
Trier des vêtements par couleur :
1. Prendre un vêtement.
2. Identifier sa couleur.
3. Le placer dans le tas correspondant (rouge, bleu, vert, etc.).
4. Répéter jusqu'à ce que tous les vêtements soient triés.
Rechercher un contact dans un répertoire téléphonique :
1. Ouvrir le répertoire.
2. Parcourir les noms par ordre alphabétique.
3. Trouver le nom recherché.
4. Lire le numéro associé.
5. Conclusion
Durée : 4 heures
Séquence :
Une séquence est une suite d'instructions exécutées les unes après les
autres, dans l'ordre où elles sont écrites.
Exemple :
Exemple
1. Allumer l'ordinateur.
2. Ouvrir un navigateur web.
3. Accéder à un site internet.
Décision :
Une décision permet de choisir entre plusieurs actions en fonction
d'une condition.
Exemple :
Exemple
Exemple
Exemple
Pour i allant de 1 à 5 :
Afficher "Bonjour".
Différence entre "tant que" et "pour" :
o "Tant que" est utilisé lorsque le nombre d'itérations n'est pas
connu à l'avance.
o "Pour" est utilisé lorsque le nombre d'itérations est fixe.
Exemple
age = 25
nom = "Alice"
Types de données :
o Entier (int) : Nombre entier (exemple : 42, -3).
o Réel (float) : Nombre à virgule flottante (exemple : 3.14, -0.5).
o Chaîne de caractères (string) : Texte (exemple : "Bonjour",
"Python").
o Booléen (bool) : Valeur vraie (True) ou fausse (False).
Exemple :
Exemple
age = 30 # Entier
prix = 19.99 # Réel
nom = "Jean" # Chaîne de caractères
est_connecte = True # Booléen
5. Notion de constante
Définition :
Une constante est une valeur fixe qui ne change pas pendant
l'exécution du programme. Elle est souvent utilisée pour des valeurs
connues et immuables.
Exemple :
Exemple
PI = 3.14159
TAUX_TVA = 0.20
Différence entre variable et constante :
o Une variable peut changer de valeur.
o Une constante conserve la même valeur tout au long du
programme.
6. Exemples pratiques
Exemple
note1 = 15
note2 = 12
moyenne = (note1 + note2) / 2
Afficher "La moyenne est :", moyenne
Exemple 2 : Vérification d'un mot de passe
Exemple
mot_de_passe = "1234"
Si (mot_de_passe == "1234") alors :
Afficher "Accès autorisé."
Sinon :
Afficher "Accès refusé."
Exemple 3 : Boucle pour afficher les nombres de 1 à 10
Exemple
Pour i allant de 1 à 10 :
Afficher i
7. Conclusion
Durée : 4 heures
Objectif :
Décrire un algorithme de manière claire et structurée, en utilisant une
syntaxe simple et compréhensible.
Éléments clés :
o Instructions : Actions à exécuter (exemple : "Afficher", "Lire",
"Calculer").
o Variables : Espaces mémoire pour stocker des données
(exemple : nom, âge).
o Conditions : Structures de décision (exemple : si...alors...sinon).
o Boucles : Structures de répétition (exemple : tant que, pour).
Exemple de syntaxe :
Exemple
Début
Afficher "Entrez votre nom :"
Lire nom
Si (nom == "Alice") alors :
Afficher "Bonjour Alice !"
Sinon :
Afficher "Bonjour étranger !"
Fin
a) Pseudocode
Définition :
Le pseudocode est une description informelle d'un algorithme, proche
d'un langage de programmation mais sans respecter une syntaxe
stricte.
Avantages :
o Facile à comprendre.
o Indépendant des langages de programmation.
Exemple :
Exemple
Début
Afficher "Entrez un nombre :"
Lire nombre
Si (nombre > 0) alors :
Afficher "Le nombre est positif."
Sinon si (nombre < 0) alors :
Afficher "Le nombre est négatif."
Sinon :
Afficher "Le nombre est nul."
Fin
Définition :
Un organigramme est une représentation visuelle d'un algorithme,
utilisant des symboles standardisés pour décrire les étapes et les
décisions.
Symboles courants :
o Ovale : Début ou fin de l'algorithme.
o Rectangle : Action ou traitement.
o Losange : Condition ou décision.
o Flèches : Flux d'exécution.
Exemple d'organigramme :
o Début → "Entrez un nombre" → Condition "nombre > 0 ?" → Oui →
"Positif" → Fin.
o Condition "nombre > 0 ?" → Non → Condition "nombre < 0 ?" →
Oui → "Négatif" → Fin.
o Condition "nombre < 0 ?" → Non → "Nul" → Fin.
Énoncé :
Créez un organigramme pour vérifier si un mot de passe entré par
l'utilisateur est correct.
Solution :
1. Début.
2. Afficher "Entrez le mot de passe :".
3. Lire mot_de_passe.
4. Si (mot_de_passe == "1234") alors :
Afficher "Accès autorisé."
5. Sinon :
Afficher "Accès refusé."
6. Fin.
Énoncé :
Créez un organigramme pour trouver le plus grand de deux nombres
entrés par l'utilisateur.
Solution :
1. Début.
2. Afficher "Entrez le premier nombre :".
3. Lire nombre1.
4. Afficher "Entrez le deuxième nombre :".
5. Lire nombre2.
6. Si (nombre1 > nombre2) alors :
Afficher "Le maximum est :", nombre1.
7. Sinon :
Afficher "Le maximum est :", nombre2.
8. Fin.
4. Conclusion
Durée : 4 heures
Addition (+):
Permet d'ajouter deux valeurs.
Exemple :
Exemple
résultat = 5 + 3 # résultat = 8
Soustraction (-):
Permet de soustraire une valeur d'une autre.
Exemple :
Exemple
résultat = 10 - 4 # résultat = 6
Multiplication (*):
Permet de multiplier deux valeurs.
Exemple :
Exemple
résultat = 7 * 2 # résultat = 14
Division (/):
Permet de diviser une valeur par une autre.
Exemple :
Exemple
résultat = 20 / 5 # résultat = 4
Division entière (//) et modulo (%):
o Division entière : Retourne le quotient entier d'une division.
Exemple :
Exemple
résultat = 10 // 3 # résultat = 3
o Modulo : Retourne le reste d'une division.
Exemple :
Exemple
résultat = 10 % 3 # résultat = 1
2. Les opérations logiques
ET (AND):
Retourne Vrai si toutes les conditions sont vraies.
Exemple :
Exemple
Règles de priorité :
L'ordre d'évaluation des opérations est déterminé par leur priorité.
o Parenthèses () : Priorité la plus élevée.
o Multiplication *, Division /, Division entière //, Modulo %.
o Addition +, Soustraction -.
o Opérateurs logiques : NON > ET > OU.
Exemple :
Exemple
Exemple
Début
Afficher "Entrez un nombre :"
Lire nombre
carré = nombre * nombre
Afficher "Le carré de", nombre, "est", carré
Fin
5. Exercices pratiques
Énoncé :
Écrivez un algorithme qui demande à l'utilisateur trois notes et affiche
leur moyenne.
Solution :
Exemple
Début
Afficher "Entrez la première note :"
Lire note1
Afficher "Entrez la deuxième note :"
Lire note2
Afficher "Entrez la troisième note :"
Lire note3
moyenne = (note1 + note2 + note3) / 3
Afficher "La moyenne est :", moyenne
Fin
Énoncé :
Écrivez un algorithme qui demande un nombre à l'utilisateur et affiche
s'il est pair ou impair.
Solution :
Exemple
Début
Afficher "Entrez un nombre :"
Lire nombre
Si (nombre % 2 == 0) alors :
Afficher "Le nombre est pair."
Sinon :
Afficher "Le nombre est impair."
Fin
Énoncé :
Écrivez un algorithme qui demande un prix HT et un taux de TVA à
l'utilisateur, puis calcule et affiche le prix TTC.
Solution :
Exemple
Début
Afficher "Entrez le prix HT :"
Lire prix_ht
Afficher "Entrez le taux de TVA (en %) :"
Lire taux_tva
tva = prix_ht * (taux_tva / 100)
prix_ttc = prix_ht + tva
Afficher "Le prix TTC est :", prix_ttc
Fin
6. Conclusion
Durée : 6 heures
1. Algorithmes de calcul
a) Somme
Début
somme = 0
Pour i allant de 1 à 5 :
Afficher "Entrez le nombre", i, ":"
Lire nombre
somme = somme + nombre
Afficher "La somme est :", somme
Fin
b) Moyenne
Début
somme = 0
compteur = 0
Répéter :
Afficher "Entrez un nombre (ou 0 pour terminer) :"
Lire nombre
Si (nombre != 0) alors :
somme = somme + nombre
compteur = compteur + 1
Jusqu'à (nombre == 0)
Si (compteur > 0) alors :
moyenne = somme / compteur
Afficher "La moyenne est :", moyenne
Sinon :
Afficher "Aucun nombre saisi."
Fin
c) Maximum
Début
maximum = -∞ // Initialisation à une valeur très petite
Répéter :
Afficher "Entrez un nombre (ou 0 pour terminer) :"
Lire nombre
Si (nombre != 0 ET nombre > maximum) alors :
maximum = nombre
Jusqu'à (nombre == 0)
Afficher "Le maximum est :", maximum
Fin
d) Minimum
Début
minimum = +∞ // Initialisation à une valeur très grande
Répéter :
Afficher "Entrez un nombre (ou 0 pour terminer) :"
Lire nombre
Si (nombre != 0 ET nombre < minimum) alors :
minimum = nombre
Jusqu'à (nombre == 0)
Afficher "Le minimum est :", minimum
Fin
2. Problèmes classiques
Début
Afficher "Entrez la valeur de A :"
Lire A
Afficher "Entrez la valeur de B :"
Lire B
temp = A // Variable temporaire
A=B
B = temp
Afficher "Après échange, A =", A, "et B =", B
Fin
Début
Afficher "Entrez un nombre :"
Lire nombre
Si (nombre % 2 == 0) alors :
Afficher "Le nombre est pair."
Sinon :
Afficher "Le nombre est impair."
Fin
Objectif : Trouver si une valeur donnée est présente dans une liste.
Exemple :
Exemple
Début
liste = [5, 10, 15, 20, 25]
Afficher "Entrez un nombre à rechercher :"
Lire nombre_recherché
trouvé = Faux
Pour chaque élément dans liste :
Si (élément == nombre_recherché) alors :
trouvé = Vrai
Sortir de la boucle
Si (trouvé) alors :
Afficher "Le nombre est dans la liste."
Sinon :
Afficher "Le nombre n'est pas dans la liste."
Fin
Énoncé :
Écrivez un algorithme pour calculer la factorielle d'un nombre N (N! = 1
× 2 × 3 × ... × N).
Solution :
Exemple
Début
Afficher "Entrez un nombre N :"
Lire N
factorielle = 1
Pour i allant de 1 à N :
factorielle = factorielle * i
Afficher "La factorielle de", N, "est", factorielle
Fin
Énoncé :
Écrivez un algorithme pour vérifier si un mot est un palindrome (se lit
de la même manière à l'endroit et à l'envers).
Solution :
Exemple
Début
Afficher "Entrez un mot :"
Lire mot
inversé = ""
Pour i allant de la longueur(mot) - 1 à 0 :
inversé = inversé + mot[i]
Si (mot == inversé) alors :
Afficher "Le mot est un palindrome."
Sinon :
Afficher "Le mot n'est pas un palindrome."
Fin
Énoncé :
Écrivez un algorithme pour calculer le PGCD de deux nombres en
utilisant l'algorithme d'Euclide.
Solution :
Exemple
Début
Afficher "Entrez le premier nombre :"
Lire A
Afficher "Entrez le deuxième nombre :"
Lire B
Tant que (B != 0) :
temp = B
B=A%B
A = temp
Afficher "Le PGCD est :", A
Fin
4. Conclusion
Durée : 6 heures
a) Définition
c) Déclaration et initialisation
En pseudocode :
Exemple
a) Parcours simple
Début
notes = [15, 12, 18, 10, 14]
Pour i allant de 0 à 4 :
Afficher "Note", i + 1, ":", notes[i]
Fin
Début
notes = [15, 12, 18, 10, 14]
i=0
Tant que (i < 5) :
Afficher "Note", i + 1, ":", notes[i]
i=i+1
Fin
a) Calcul de la somme
Début
notes = [15, 12, 18, 10, 14]
somme = 0
Pour i allant de 0 à 4 :
somme = somme + notes[i]
Afficher "La somme des notes est :", somme
Fin
b) Calcul de la moyenne
Début
notes = [15, 12, 18, 10, 14]
somme = 0
Pour i allant de 0 à 4 :
somme = somme + notes[i]
moyenne = somme / 5
Afficher "La moyenne des notes est :", moyenne
Fin
4. Boucles imbriquées pour des tableaux simples
a) Définition
Une boucle imbriquée est une boucle à l'intérieur d'une autre boucle.
Utile pour parcourir des structures multidimensionnelles ou effectuer
des opérations complexes.
Début
tableau = [5, 10, 15, 10, 20]
doublon = Faux
Pour i allant de 0 à 4 :
Pour j allant de i + 1 à 4 :
Si (tableau[i] == tableau[j]) alors :
doublon = Vrai
Sortir des boucles
Si (doublon) alors :
Afficher "Le tableau contient des doublons."
Sinon :
Afficher "Le tableau ne contient pas de doublons."
Fin
Début
Pour i allant de 1 à 10 :
Pour j allant de 1 à 10 :
Afficher i, "x", j, "=", i * j
Afficher "" // Saut de ligne après chaque ligne de la table
Fin
Énoncé :
Écrivez un algorithme pour trouver la valeur maximale dans un tableau.
Solution :
Exemple
Début
tableau = [15, 12, 18, 10, 14]
maximum = tableau[0]
Pour i allant de 1 à 4 :
Si (tableau[i] > maximum) alors :
maximum = tableau[i]
Afficher "La valeur maximale est :", maximum
Fin
Énoncé :
Écrivez un algorithme pour inverser l'ordre des éléments d'un tableau.
Solution :
Exemple
Début
tableau = [15, 12, 18, 10, 14]
Pour i allant de 0 à 2 : // Échanger les éléments jusqu'au milieu
temp = tableau[i]
tableau[i] = tableau[4 - i]
tableau[4 - i] = temp
Afficher "Tableau inversé :", tableau
Fin
Énoncé :
Écrivez un algorithme pour vérifier si un élément donné est présent
dans un tableau.
Solution :
Exemple
Début
tableau = [15, 12, 18, 10, 14]
Afficher "Entrez un nombre à rechercher :"
Lire nombre_recherché
trouvé = Faux
Pour i allant de 0 à 4 :
Si (tableau[i] == nombre_recherché) alors :
trouvé = Vrai
Sortir de la boucle
Si (trouvé) alors :
Afficher "Le nombre est dans le tableau."
Sinon :
Afficher "Le nombre n'est pas dans le tableau."
Fin
6. Conclusion
Durée : 4 heures
a) Définition
Fonction :
Un sous-programme qui effectue une tâche spécifique et retourne une
valeur.
Exemple : Une fonction pour calculer la somme de deux nombres.
Procédure :
Un sous-programme qui effectue une tâche spécifique mais ne retourne
pas de valeur.
Exemple : Une procédure pour afficher un message.
a) Paramètres d’entrée
Fonction Additionner(a, b) :
Retourner a + b
b) Paramètres de sortie
Procédure AfficherMessage(message) :
Afficher message
a) Appel simple
Début
x=5
y=3
somme = Additionner(x, y)
Afficher "La somme est :", somme
Fin
b) Appel de procédure
Début
AfficherMessage("Bonjour le monde !")
Fin
Énoncé :
Écrivez une fonction qui prend trois nombres en entrée et retourne leur
moyenne.
Solution :
Exemple
Fonction CalculerMoyenne(a, b, c) :
Retourner (a + b + c) / 3
Début
Afficher "La moyenne est :", CalculerMoyenne(10, 15, 20)
Fin
Énoncé :
Écrivez une procédure qui prend un tableau en entrée et affiche ses
éléments.
Solution :
Exemple
Procédure AfficherTableau(tableau) :
Pour chaque élément dans tableau :
Afficher élément
Début
notes = [15, 12, 18, 10, 14]
AfficherTableau(notes)
Fin
Énoncé :
Écrivez une fonction qui vérifie si un nombre est premier.
Solution :
Exemple
Fonction EstPremier(n) :
Si (n < 2) alors :
Retourner Faux
Pour i allant de 2 à n - 1 :
Si (n % i == 0) alors :
Retourner Faux
Retourner Vrai
Début
Afficher "7 est premier ?", EstPremier(7)
Afficher "10 est premier ?", EstPremier(10)
Fin
Énoncé :
Écrivez une fonction pour calculer la factorielle d'un nombre N (N! = 1
× 2 × 3 × ... × N).
Solution :
Exemple
Fonction Factorielle(n) :
Si (n == 0) alors :
Retourner 1
résultat = 1
Pour i allant de 1 à n :
résultat = résultat * i
Retourner résultat
Début
Afficher "5! =", Factorielle(5)
Fin
5. Conclusion
Durée : 6 heures
Objectif :
Créer une calculatrice qui effectue des opérations de base (addition,
soustraction, multiplication, division).
Fonctionnalités :
o Demander à l'utilisateur de choisir une opération.
o Lire deux nombres en entrée.
o Afficher le résultat de l'opération choisie.
Exemple de structure :
Exemple
Début
Afficher "Choisissez une opération :"
Afficher "1. Addition"
Afficher "2. Soustraction"
Afficher "3. Multiplication"
Afficher "4. Division"
Lire choix
Afficher "Entrez le premier nombre :"
Lire a
Afficher "Entrez le deuxième nombre :"
Lire b
Si (choix == 1) alors :
résultat = a + b
Sinon si (choix == 2) alors :
résultat = a - b
Sinon si (choix == 3) alors :
résultat = a * b
Sinon si (choix == 4) alors :
Si (b != 0) alors :
résultat = a / b
Sinon :
Afficher "Erreur : division par zéro."
Fin
Afficher "Le résultat est :", résultat
Fin
Objectif :
Implémenter un algorithme de tri (ex. : tri à bulles) pour ordonner une
liste d'entiers.
Fonctionnalités :
o Lire une liste d'entiers en entrée.
o Trier la liste en ordre croissant.
o Afficher la liste triée.
Exemple de structure :
Exemple
Début
Afficher "Entrez le nombre d'éléments :"
Lire n
Déclarer liste[n]
Pour i allant de 0 à n - 1 :
Afficher "Entrez l'élément", i + 1, ":"
Lire liste[i]
// Tri à bulles
Pour i allant de 0 à n - 1 :
Pour j allant de 0 à n - i - 2 :
Si (liste[j] > liste[j + 1]) alors :
temp = liste[j]
liste[j] = liste[j + 1]
liste[j + 1] = temp
Afficher "Liste triée :", liste
Fin
Objectif :
Créer un programme pour convertir des unités (température, monnaie,
etc.).
Fonctionnalités :
o Demander à l'utilisateur de choisir le type de conversion.
o Lire la valeur à convertir.
o Afficher le résultat de la conversion.
Exemple de structure :
Exemple
Début
Afficher "Choisissez une conversion :"
Afficher "1. Celsius vers Fahrenheit"
Afficher "2. Fahrenheit vers Celsius"
Afficher "3. Euros vers Dollars"
Afficher "4. Dollars vers Euros"
Lire choix
Si (choix == 1 ou choix == 2) alors :
Afficher "Entrez la température :"
Lire température
Si (choix == 1) alors :
résultat = (température * 9/5) + 32
Afficher température, "°C =", résultat, "°F"
Sinon :
résultat = (température - 32) * 5/9
Afficher température, "°F =", résultat, "°C"
Sinon si (choix == 3 ou choix == 4) alors :
Afficher "Entrez le montant :"
Lire montant
Si (choix == 3) alors :
résultat = montant * 1.18 // Taux de change fictif
Afficher montant, "€ =", résultat, "$"
Sinon :
résultat = montant / 1.18
Afficher montant, "$ =", résultat, "€"
Sinon :
Afficher "Choix invalide."
Fin
a) Objectifs de la présentation
c) Évaluation
Clarté de la présentation.
Fonctionnalité du projet.
Qualité du code (structure, commentaires, etc.).
4. Conclusion
Durée : 2 heures
Objectif :
Vérifier la compréhension des concepts théoriques abordés dans le
cours.
Exemples de questions :
1. Qu'est-ce qu'un algorithme ?
a) Un langage de programmation
b) Une suite d'instructions pour résoudre un problème
c) Un type de donnée
2. Quelle structure permet de répéter une action plusieurs fois ?
a) Condition
b) Boucle
c) Variable
3. Quel est le résultat de l'opération 5 % 2 ?
a) 2
b) 1
c) 0
4. Quelle boucle est utilisée lorsque le nombre d'itérations est
connu à l'avance ?
a) tant que
b) pour
c) si
5. Quelle est la différence entre une fonction et une procédure ?
a) Une fonction retourne une valeur, une procédure non
b) Une procédure retourne une valeur, une fonction non
c) Aucune différence
Objectif :
Tester la capacité à appliquer les concepts algorithmiques pour
résoudre des problèmes concrets.
Exemples de problèmes :
1. Écrivez un algorithme pour calculer la somme des nombres pairs
entre 1 et 100.
2. Écrivez une fonction qui prend un tableau en entrée et retourne
son élément maximum.
3. Créez un algorithme pour vérifier si une chaîne de caractères est
un palindrome.
4. Écrivez un programme qui convertit une température de Celsius
en Fahrenheit.
2. Synthèse du cours
Algorithmique :
o Définition et importance des algorithmes.
o Structures de contrôle (séquence, décision, répétition).
o Variables, types de données et constantes.
Tableaux et boucles :
o Manipulation des tableaux unidimensionnels.
o Utilisation des boucles imbriquées.
Fonctions et procédures :
o Définition et appel de sous-programmes.
o Paramètres d'entrée et de sortie.
Projets pratiques :
o Application des concepts à des problèmes réels.
o Présentation et communication des résultats.
Pratique régulière :
o Résoudre des problèmes sur des plateformes comme LeetCode,
HackerRank ou CodinGame.
o Participer à des défis de programmation.
Apprentissage de langages de programmation :
o Python, Java, C++ pour mettre en pratique les algorithmes.
Approfondissement des concepts :
o Structures de données avancées (listes chaînées, arbres,
graphes).
o Algorithmes de tri et de recherche avancés (tri rapide, recherche
binaire).
o Complexité algorithmique (notation Big O).
Projets personnels :
o Développer des applications simples (gestion de tâches,
calculatrice scientifique).
o Contribuer à des projets open source.
3. Conclusion
Ce cours a permis de poser les bases de l'algorithmique, en couvrant
les concepts essentiels et en les appliquant à des problèmes concrets.
La pratique continue et l'exploration de sujets avancés sont
essentielles pour maîtriser l'algorithmique et la programmation.
Les compétences acquises ouvrent la voie à des opportunités dans des
domaines variés, tels que le développement logiciel, la science des
données et l'intelligence artificielle.
PROGRAMME DE COURS
D'ALGORITHME NIVEAU 2
Module 1 : Rappel et consolidation des bases
Durée : 3 heures
a) Variables
Définition :
Une variable est un espace mémoire nommé qui stocke une valeur
pouvant changer pendant l'exécution d'un programme.
Types de données courants :
o Entier (int) : Exemple : age = 25
o Réel (float) : Exemple : prix = 19.99
o Chaîne de caractères (string) : Exemple : nom = "Alice"
o Booléen (bool) : Exemple : est_connecte = True
b) Conditions
Structure si...alors...sinon :
Permet d'exécuter des actions en fonction d'une condition.
Exemple :
Exemple
c) Boucles
Boucle pour :
Répète une action un nombre précis de fois.
Exemple :
Exemple
Pour i allant de 1 à 5 :
Afficher "Bonjour"
Boucle tant que :
Répète une action tant qu'une condition est vraie.
Exemple :
Exemple
Tant que (somme < 100) :
Ajouter 10 à somme
a) Définition
Pour i allant de 0 à 4 :
Afficher notes[i]
d) Opérations courantes
Exemple
somme = 0
Pour i allant de 0 à 4 :
somme = somme + notes[i]
Recherche d'un élément :
Exemple
trouvé = Faux
Pour i allant de 0 à 4 :
Si (notes[i] == 18) alors :
trouvé = Vrai
Sortir de la boucle
Énoncé :
Écrivez un algorithme qui calcule la moyenne des notes d'un tableau.
Solution :
Exemple
Début
notes = [15, 12, 18, 10, 14]
somme = 0
Pour i allant de 0 à 4 :
somme = somme + notes[i]
moyenne = somme / 5
Afficher "La moyenne est :", moyenne
Fin
Énoncé :
Écrivez un algorithme pour trouver la valeur maximale dans un tableau.
Solution :
Exemple
Début
notes = [15, 12, 18, 10, 14]
maximum = notes[0]
Pour i allant de 1 à 4 :
Si (notes[i] > maximum) alors :
maximum = notes[i]
Afficher "La valeur maximale est :", maximum
Fin
Énoncé :
Écrivez un algorithme qui vérifie si un nombre est pair ou impair.
Solution :
Exemple
Début
Afficher "Entrez un nombre :"
Lire nombre
Si (nombre % 2 == 0) alors :
Afficher "Le nombre est pair."
Sinon :
Afficher "Le nombre est impair."
Fin
Énoncé :
Écrivez un algorithme pour inverser l'ordre des éléments d'un tableau.
Solution :
Exemple
Début
notes = [15, 12, 18, 10, 14]
Pour i allant de 0 à 2 : // Échanger les éléments jusqu'au milieu
temp = notes[i]
notes[i] = notes[4 - i]
notes[4 - i] = temp
Afficher "Tableau inversé :", notes
Fin
4. Conclusion
Durée : 3 heures
a) Définition
Si (condition1) alors :
Si (condition2) alors :
Action1
Sinon :
Action2
Sinon :
Action3
b) Exemple pratique
Énoncé :
Écrivez un algorithme pour déterminer si un nombre est positif, négatif
ou nul.
Solution :
Exemple
Début
Afficher "Entrez un nombre :"
Lire nombre
Si (nombre > 0) alors :
Afficher "Le nombre est positif."
Sinon :
Si (nombre < 0) alors :
Afficher "Le nombre est négatif."
Sinon :
Afficher "Le nombre est nul."
Fin
a) Opérateurs logiques
ET (AND) :
Retourne Vrai si toutes les conditions sont vraies.
Exemple :
Exemple
b) Exemple pratique
Énoncé :
Écrivez un algorithme pour vérifier si un nombre est compris entre 10
et 20.
Solution :
Exemple
Début
Afficher "Entrez un nombre :"
Lire nombre
Si (nombre >= 10 ET nombre <= 20) alors :
Afficher "Le nombre est compris entre 10 et 20."
Sinon :
Afficher "Le nombre n'est pas compris entre 10 et 20."
Fin
3. Études de cas
Objectif :
S'assurer que les données entrées par l'utilisateur sont valides.
Exemple :
Exemple
Début
Répéter :
Afficher "Entrez un nombre entre 1 et 100 :"
Lire nombre
Jusqu'à (nombre >= 1 ET nombre <= 100)
Afficher "Nombre valide :", nombre
Fin
b) Calculs conditionnels
Objectif :
Effectuer des calculs en fonction de conditions spécifiques.
Exemple :
Exemple
Début
Afficher "Entrez votre âge :"
Lire age
Si (age < 18) alors :
tarif = 10
Sinon si (age >= 18 ET age <= 60) alors :
tarif = 20
Sinon :
tarif = 15
Afficher "Le tarif est :", tarif
Fin
Énoncé :
Écrivez un algorithme pour calculer la note finale d'un étudiant en
fonction de ses notes de contrôle continu et d'examen.
o Si la moyenne est supérieure ou égale à 16, afficher "Très bien".
o Si la moyenne est entre 12 et 15, afficher "Bien".
o Si la moyenne est entre 10 et 11, afficher "Passable".
o Sinon, afficher "Insuffisant".
Solution :
Exemple
Début
Afficher "Entrez la note de contrôle continu :"
Lire cc
Afficher "Entrez la note d'examen :"
Lire exam
moyenne = (cc + exam) / 2
Si (moyenne >= 16) alors :
Afficher "Très bien"
Sinon si (moyenne >= 12 ET moyenne < 16) alors :
Afficher "Bien"
Sinon si (moyenne >= 10 ET moyenne < 12) alors :
Afficher "Passable"
Sinon :
Afficher "Insuffisant"
Fin
Énoncé :
Écrivez un algorithme pour gérer les droits d'accès en fonction du rôle
de l'utilisateur (admin, utilisateur, invité).
o Un admin a accès à toutes les fonctionnalités.
o Un utilisateur a accès à certaines fonctionnalités.
o Un invité a un accès limité.
Solution :
Exemple
Début
Afficher "Entrez votre rôle (admin, utilisateur, invité) :"
Lire rôle
Si (rôle == "admin") alors :
Afficher "Accès complet."
Sinon si (rôle == "utilisateur") alors :
Afficher "Accès partiel."
Sinon si (rôle == "invité") alors :
Afficher "Accès limité."
Sinon :
Afficher "Rôle non reconnu."
Fin
Énoncé :
Écrivez un algorithme pour calculer une réduction en fonction du
montant d'achat.
o Si le montant est supérieur à 100 €, appliquer une réduction de
10 %.
o Si le montant est entre 50 € et 100 €, appliquer une réduction de
5 %.
o Sinon, aucune réduction.
Solution :
Exemple
Début
Afficher "Entrez le montant d'achat :"
Lire montant
Si (montant > 100) alors :
réduction = montant * 0.10
Sinon si (montant >= 50 ET montant <= 100) alors :
réduction = montant * 0.05
Sinon :
réduction = 0
montant_final = montant - réduction
Afficher "Montant final :", montant_final
Fin
5. Conclusion
Durée : 4 heures
a) Définition
matrice = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
c) Initialisation
En pseudocode :
Exemple
Déclarer matrice[lignes][colonnes]
Exemple :
Exemple
matrice = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
Pour i allant de 0 à 2 :
Pour j allant de 0 à 2 :
Afficher matrice[i][j]
Pour i allant de 0 à 2 :
Pour j allant de 0 à 2 :
matrice[i][j] = i + j
a) Matrices
Début
matrice1 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
matrice2 = [
[9, 8, 7],
[6, 5, 4],
[3, 2, 1]
]
résultat = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
Pour i allant de 0 à 2 :
Pour j allant de 0 à 2 :
résultat[i][j] = matrice1[i][j] + matrice2[i][j]
Afficher résultat
Fin
Les tableaux 2D sont utilisés pour représenter des grilles, comme dans
un jeu de morpion.
Exemple : Initialisation d'une grille de morpion.
Exemple
Début
grille = [
[" ", " ", " "],
[" ", " ", " "],
[" ", " ", " "]
]
Afficher grille
Fin
4. Exercices
Énoncé :
Écrivez un algorithme pour calculer la somme de chaque ligne et de
chaque colonne d'une matrice.
Solution :
Exemple
Début
matrice = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
Pour i allant de 0 à 2 :
somme_ligne = 0
Pour j allant de 0 à 2 :
somme_ligne = somme_ligne + matrice[i][j]
Afficher "Somme de la ligne", i + 1, ":", somme_ligne
Pour j allant de 0 à 2 :
somme_colonne = 0
Pour i allant de 0 à 2 :
somme_colonne = somme_colonne + matrice[i][j]
Afficher "Somme de la colonne", j + 1, ":", somme_colonne
Fin
Début
matrice = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
Afficher "Entrez l'élément à rechercher :"
Lire élément
trouvé = Faux
Pour i allant de 0 à 2 :
Pour j allant de 0 à 2 :
Si (matrice[i][j] == élément) alors :
Afficher "Élément trouvé à la position (", i + 1, ",", j + 1, ")"
trouvé = Vrai
Sortir des boucles
Si (NON trouvé) alors :
Afficher "Élément non trouvé."
Fin
Énoncé :
Écrivez un algorithme pour transposer une matrice (échanger les lignes
et les colonnes).
Solution :
Exemple
Début
matrice = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
transposée = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
Pour i allant de 0 à 2 :
Pour j allant de 0 à 2 :
transposée[j][i] = matrice[i][j]
Afficher "Matrice transposée :", transposée
Fin
5. Conclusion
Durée : 6 heures
Principe :
Sélectionner le plus petit élément et l'échanger avec le premier, puis
répéter pour le reste du tableau.
Exemple :
Exemple
Début
Pour i allant de 0 à n - 2 :
min_index = i
Pour j allant de i + 1 à n - 1 :
Si (tableau[j] < tableau[min_index]) alors :
min_index = j
Échanger tableau[i] et tableau[min_index]
Fin
Complexité : O(n²) dans tous les cas.
Principe :
Insérer chaque élément à sa place dans la partie déjà triée du tableau.
Exemple :
Exemple
Début
Pour i allant de 1 à n - 1 :
clé = tableau[i]
j=i-1
Tant que (j >= 0 ET tableau[j] > clé) :
tableau[j + 1] = tableau[j]
j=j-1
tableau[j + 1] = clé
Fin
Complexité : O(n²) dans le pire cas, O(n) dans le meilleur cas (tableau
déjà trié).
Début
Pour i allant de 0 à n - 2 :
Pour j allant de 0 à n - i - 2 :
Si (tableau[j] > tableau[j + 1]) alors :
Échanger tableau[j] et tableau[j + 1]
Fin
Complexité : O(n²) dans le pire cas, O(n) dans le meilleur cas (tableau
déjà trié).
2. Algorithmes de recherche
a) Recherche linéaire
Principe :
Parcourir le tableau élément par élément jusqu'à trouver la valeur
recherchée.
Exemple :
Exemple
Début
trouvé = Faux
Pour i allant de 0 à n - 1 :
Si (tableau[i] == valeur) alors :
trouvé = Vrai
Sortir de la boucle
Si (trouvé) alors :
Afficher "Élément trouvé à l'indice", i
Sinon :
Afficher "Élément non trouvé."
Fin
Complexité : O(n) dans le pire cas.
Principe :
Diviser le tableau en deux parties et éliminer la moitié qui ne contient
pas la valeur recherchée.
Exemple :
Exemple
Début
gauche = 0
droite = n - 1
trouvé = Faux
Tant que (gauche <= droite) :
milieu = (gauche + droite) // 2
Si (tableau[milieu] == valeur) alors :
trouvé = Vrai
Sortir de la boucle
Sinon si (tableau[milieu] < valeur) alors :
gauche = milieu + 1
Sinon :
droite = milieu - 1
Si (trouvé) alors :
Afficher "Élément trouvé à l'indice", milieu
Sinon :
Afficher "Élément non trouvé."
Fin
Complexité : O(log n) dans le pire cas.
Énoncé :
Écrivez un algorithme pour trier un tableau en utilisant le tri par
sélection.
Solution :
Exemple
Début
Pour i allant de 0 à n - 2 :
min_index = i
Pour j allant de i + 1 à n - 1 :
Si (tableau[j] < tableau[min_index]) alors :
min_index = j
Échanger tableau[i] et tableau[min_index]
Fin
b) Exercice 2 : Implémentation du tri par insertion
Énoncé :
Écrivez un algorithme pour trier un tableau en utilisant le tri par
insertion.
Solution :
Exemple
Début
Pour i allant de 1 à n - 1 :
clé = tableau[i]
j=i-1
Tant que (j >= 0 ET tableau[j] > clé) :
tableau[j + 1] = tableau[j]
j=j-1
tableau[j + 1] = clé
Fin
Énoncé :
Écrivez un algorithme pour trier un tableau en utilisant le tri à bulles.
Solution :
Exemple
Début
Pour i allant de 0 à n - 2 :
Pour j allant de 0 à n - i - 2 :
Si (tableau[j] > tableau[j + 1]) alors :
Échanger tableau[j] et tableau[j + 1]
Fin
Énoncé :
Écrivez un algorithme pour rechercher un élément dans un tableau en
utilisant la recherche linéaire.
Solution :
Exemple
Début
trouvé = Faux
Pour i allant de 0 à n - 1 :
Si (tableau[i] == valeur) alors :
trouvé = Vrai
Sortir de la boucle
Si (trouvé) alors :
Afficher "Élément trouvé à l'indice", i
Sinon :
Afficher "Élément non trouvé."
Fin
Énoncé :
Écrivez un algorithme pour rechercher un élément dans un tableau trié
en utilisant la recherche dichotomique.
Solution :
Exemple
Début
gauche = 0
droite = n - 1
trouvé = Faux
Tant que (gauche <= droite) :
milieu = (gauche + droite) // 2
Si (tableau[milieu] == valeur) alors :
trouvé = Vrai
Sortir de la boucle
Sinon si (tableau[milieu] < valeur) alors :
gauche = milieu + 1
Sinon :
droite = milieu - 1
Si (trouvé) alors :
Afficher "Élément trouvé à l'indice", milieu
Sinon :
Afficher "Élément non trouvé."
Fin
5. Conclusion
Durée : 5 heures
a) Définition
Une fonction récursive est une fonction qui s'appelle elle-même pour
résoudre un problème.
Elle se compose de deux parties :
o Cas de base : Condition d'arrêt qui termine la récursion.
o Cas récursif : Appel de la fonction avec un problème plus petit.
b) Exemple simple
Calcul de la factorielle :
Exemple
Fonction Factorielle(n) :
Si (n == 0) alors :
Retourner 1
Sinon :
Retourner n * Factorielle(n - 1)
a) Calcul de factorielle
Définition :
La factorielle d'un nombre entier positif n (notée n!) est le produit de
tous les entiers de 1 à n.
Exemple :
Exemple
Fonction Factorielle(n) :
Si (n == 0) alors :
Retourner 1
Sinon :
Retourner n * Factorielle(n - 1)
b) Suite de Fibonacci
Définition :
La suite de Fibonacci est une séquence où chaque nombre est la
somme des deux précédents (0, 1, 1, 2, 3, 5, 8, ...).
Exemple :
Exemple
Fonction Fibonacci(n) :
Si (n == 0) alors :
Retourner 0
Sinon si (n == 1) alors :
Retourner 1
Sinon :
Retourner Fibonacci(n - 1) + Fibonacci(n - 2)
3. Applications pratiques
Définition :
La récursivité est souvent utilisée pour parcourir des structures
arborescentes (ex. : arbres binaires).
Exemple :
Exemple
Fonction ParcoursArbre(noeud) :
Si (noeud != NULL) alors :
Afficher noeud.valeur
ParcoursArbre(noeud.gauche)
ParcoursArbre(noeud.droite)
Définition :
Le backtracking est une technique de résolution de problèmes qui
explore toutes les solutions possibles en revenant en arrière si une
solution partielle est invalide.
Exemple :
Exemple
Fonction RésoudreSudoku(grille) :
Si (grille est complète) alors :
Retourner Vrai
Pour chaque case vide :
Pour chaque nombre de 1 à 9 :
Si (nombre est valide dans la case) alors :
grille[case] = nombre
Si (RésoudreSudoku(grille)) alors :
Retourner Vrai
grille[case] = 0 // Annuler l'affectation
Retourner Faux
a) Avantages
b) Inconvénients
5. Exercices pratiques
Énoncé :
Écrivez une fonction récursive pour calculer abab.
Solution :
Exemple
Fonction Puissance(a, b) :
Si (b == 0) alors :
Retourner 1
Sinon :
Retourner a * Puissance(a, b - 1)
Énoncé :
Écrivez une fonction récursive pour rechercher un élément dans un
tableau trié en utilisant la recherche dichotomique.
Solution :
Exemple
Énoncé :
Écrivez une fonction récursive pour calculer le PGCD de deux nombres
en utilisant l'algorithme d'Euclide.
Solution :
Exemple
Fonction PGCD(a, b) :
Si (b == 0) alors :
Retourner a
Sinon :
Retourner PGCD(b, a % b)
Énoncé :
Écrivez une fonction récursive pour parcourir un arbre binaire en ordre
infixe (gauche, racine, droite).
Solution :
Exemple
Fonction ParcoursInfixe(noeud) :
Si (noeud != NULL) alors :
ParcoursInfixe(noeud.gauche)
Afficher noeud.valeur
ParcoursInfixe(noeud.droite)
6. Conclusion
Durée : 6 heures
a) Listes
Définition :
Une liste est une collection ordonnée d'éléments qui peuvent être
accédés par leur position (indice).
Caractéristiques :
o Accès direct aux éléments via un indice.
o Taille dynamique (peut augmenter ou diminuer).
Définition :
Une file est une structure de données où le premier élément ajouté est
le premier à être retiré.
Opérations principales :
o Enfiler : Ajouter un élément à la fin.
o Défiler : Retirer l'élément au début.
Définition :
Une pile est une structure de données où le dernier élément ajouté est
le premier à être retiré.
Opérations principales :
o Empiler : Ajouter un élément au sommet.
o Dépiler : Retirer l'élément au sommet.
a) Listes
Ajout :
Exemple
liste = [1, 2, 3]
liste.append(4) # Ajoute 4 à la fin
Suppression :
Exemple
b) Files
Enfiler :
Exemple
file = []
file.append(1) # Ajoute 1 à la fin
file.append(2) # Ajoute 2 à la fin
Défiler :
Exemple
c) Piles
Empiler :
Exemple
pile = []
pile.append(1) # Ajoute 1 au sommet
pile.append(2) # Ajoute 2 au sommet
Dépiler :
Exemple
3. Applications pratiques
Objectif :
Utiliser une pile pour gérer une liste de tâches à effectuer.
Exemple :
Exemple
tâches = []
tâches.append("Tâche 1") # Ajouter une tâche
tâches.append("Tâche 2")
tâche_actuelle = tâches.pop() # Retirer la dernière tâche ajoutée
Afficher "Tâche en cours :", tâche_actuelle
Objectif :
Utiliser une file pour gérer une file d'attente.
Exemple :
Exemple
file_attente = []
file_attente.append("Personne 1") # Ajouter une personne à la file
file_attente.append("Personne 2")
personne_actuelle = file_attente.pop(0) # Retirer la première personne
Afficher "Personne traitée :", personne_actuelle
Énoncé :
Écrivez un algorithme pour simuler une file d'attente à une caisse. Les
clients arrivent et sont servis dans l'ordre d'arrivée.
Solution :
Exemple
Début
file_attente = []
Répéter :
Afficher "Entrez le nom du client (ou 'fin' pour terminer) :"
Lire nom
Si (nom != "fin") alors :
file_attente.append(nom)
Jusqu'à (nom == "fin")
Tant que (file_attente n'est pas vide) :
client = file_attente.pop(0)
Afficher "Client traité :", client
Fin
Énoncé :
Écrivez un algorithme pour simuler une pile de documents à traiter. Le
dernier document ajouté est le premier à être traité.
Solution :
Exemple
Début
pile_documents = []
Répéter :
Afficher "Entrez le nom du document (ou 'fin' pour terminer) :"
Lire document
Si (document != "fin") alors :
pile_documents.append(document)
Jusqu'à (document == "fin")
Tant que (pile_documents n'est pas vide) :
doc_actuel = pile_documents.pop()
Afficher "Document traité :", doc_actuel
Fin
Énoncé :
Écrivez un algorithme pour gérer une liste de courses. L'utilisateur peut
ajouter, supprimer et afficher les éléments de la liste.
Solution :
Exemple
Début
liste_courses = []
Répéter :
Afficher "1. Ajouter un article"
Afficher "2. Supprimer un article"
Afficher "3. Afficher la liste"
Afficher "4. Quitter"
Lire choix
Si (choix == 1) alors :
Afficher "Entrez l'article à ajouter :"
Lire article
liste_courses.append(article)
Sinon si (choix == 2) alors :
Afficher "Entrez l'article à supprimer :"
Lire article
Si (article dans liste_courses) alors :
liste_courses.remove(article)
Sinon :
Afficher "Article non trouvé."
Sinon si (choix == 3) alors :
Afficher "Liste de courses :", liste_courses
Jusqu'à (choix == 4)
Fin
5. Conclusion
Durée : 3 heures
a) Découpage
Définition :
Le découpage permet d'extraire une sous-chaîne à partir d'une chaîne
de caractères.
Exemple :
Exemple
b) Recherche
Définition :
La recherche permet de trouver la position d'une sous-chaîne dans une
chaîne.
Exemple :
Exemple
c) Remplacement
Définition :
Le remplacement permet de remplacer une sous-chaîne par une autre.
Exemple :
Exemple
a) Voyelles et consonnes
Définition :
Les voyelles sont les lettres a, e, i, o, u. Les consonnes sont toutes les
autres lettres de l'alphabet.
Exemple :
Exemple
voyelles = "aeiouAEIOU"
Pour caractère dans chaîne :
Si (caractère dans voyelles) alors :
Afficher "Voyelle :", caractère
Sinon si (caractère est une lettre) alors :
Afficher "Consonne :", caractère
Définition :
Les espaces et autres caractères (ponctuation, chiffres) peuvent être
analysés séparément.
Exemple :
Exemple
3. Exercices
Énoncé :
Écrivez un algorithme pour vérifier si une chaîne de caractères est un
palindrome (se lit de la même manière à l'endroit et à l'envers).
Solution :
Exemple
Début
Afficher "Entrez une chaîne :"
Lire chaîne
chaîne_inversée = chaîne[::-1] # Inverse la chaîne
Si (chaîne == chaîne_inversée) alors :
Afficher "La chaîne est un palindrome."
Sinon :
Afficher "La chaîne n'est pas un palindrome."
Fin
Début
Afficher "Entrez une phrase :"
Lire phrase
Afficher "Entrez un mot :"
Lire mot
occurrences = 0
Pour chaque mot_phrase dans phrase.split() :
Si (mot_phrase == mot) alors :
occurrences = occurrences + 1
Afficher "Le mot", mot, "apparaît", occurrences, "fois."
Fin
Énoncé :
Écrivez un algorithme pour compter le nombre de voyelles et de
consonnes dans une chaîne de caractères.
Solution :
Exemple
Début
Afficher "Entrez une chaîne :"
Lire chaîne
voyelles = "aeiouAEIOU"
nb_voyelles = 0
nb_consonnes = 0
Pour caractère dans chaîne :
Si (caractère dans voyelles) alors :
nb_voyelles = nb_voyelles + 1
Sinon si (caractère est une lettre) alors :
nb_consonnes = nb_consonnes + 1
Afficher "Nombre de voyelles :", nb_voyelles
Afficher "Nombre de consonnes :", nb_consonnes
Fin
Énoncé :
Écrivez un algorithme pour remplacer tous les espaces dans une chaîne
par des tirets.
Solution :
Exemple
Début
Afficher "Entrez une chaîne :"
Lire chaîne
nouvelle_chaîne = chaîne.replace(" ", "-")
Afficher "Nouvelle chaîne :", nouvelle_chaîne
Fin
4. Conclusion
Durée : 6 heures
Définition :
Le problème du voyageur de commerce consiste à trouver le chemin le
plus court pour visiter un ensemble de villes une seule fois et revenir à
la ville de départ.
Approche :
o Force brute : Essayer toutes les permutations possibles
(complexité : O(n!)).
o Algorithmes d'approximation : Utiliser des heuristiques pour
trouver une solution proche de l'optimum.
Exemple :
Exemple
Début
villes = ["A", "B", "C", "D"]
distances = {
("A", "B"): 10,
("A", "C"): 15,
("A", "D"): 20,
("B", "C"): 35,
("B", "D"): 25,
("C", "D"): 30
}
chemin_optimal = TSP_ForceBrute(villes, distances)
Afficher "Chemin optimal :", chemin_optimal
Fin
Définition :
Le problème des tours de Hanoï consiste à déplacer une pile de disques
d'une tour à une autre en respectant les règles suivantes :
o Un seul disque peut être déplacé à la fois.
o Un disque ne peut être placé sur un disque plus petit.
Approche récursive :
o Déplacer n-1 disques de la tour source à la tour intermédiaire.
o Déplacer le dernier disque de la tour source à la tour destination.
o Déplacer les n-1 disques de la tour intermédiaire à la tour
destination.
Exemple :
Exemple
Début
ToursDeHanoï(3, "A", "C", "B")
Fin
Définition :
Le PGCD (Plus Grand Commun Diviseur) de deux nombres est le plus
grand entier qui divise les deux nombres sans laisser de reste.
Algorithme d'Euclide :
o Si b = 0, alors PGCD(a, b) = a.
o Sinon, PGCD(a, b) = PGCD(b, a % b).
Exemple :
Exemple
Fonction PGCD(a, b) :
Si (b == 0) alors :
Retourner a
Sinon :
Retourner PGCD(b, a % b)
Début
Afficher "PGCD de 48 et 18 :", PGCD(48, 18)
Fin
Énoncé :
Écrivez un algorithme pour résoudre une variante du TSP où certaines
villes doivent être visitées avant d'autres.
Solution :
Exemple
Début
villes = ["A", "B", "C", "D"]
distances = {
("A", "B"): 10,
("A", "C"): 15,
("A", "D"): 20,
("B", "C"): 35,
("B", "D"): 25,
("C", "D"): 30
}
contraintes = [("A", "B"), ("C", "D")] # A doit être visité avant B, C avant D
chemin_optimal = TSP_Contraintes(villes, distances, contraintes)
Afficher "Chemin optimal avec contraintes :", chemin_optimal
Fin
Énoncé :
Écrivez un algorithme pour résoudre le problème des tours de Hanoï
avec 4 tours au lieu de 3.
Solution :
Exemple
Début
ToursDeHanoï4(3, "A", "D", "B", "C")
Fin
Énoncé :
Écrivez un algorithme pour calculer le PGCD de plusieurs nombres en
utilisant l'algorithme d'Euclide.
Solution :
Exemple
Fonction PGCD_Multiple(nombres) :
pgcd_temp = nombres[0]
Pour i allant de 1 à longueur(nombres) - 1 :
pgcd_temp = PGCD(pgcd_temp, nombres[i])
Retourner pgcd_temp
Début
nombres = [48, 18, 24]
Afficher "PGCD de", nombres, ":", PGCD_Multiple(nombres)
Fin
d) Exercice 4 : Tours de Hanoï avec affichage graphique
Énoncé :
Écrivez un algorithme pour résoudre le problème des tours de Hanoï et
afficher chaque étape sous forme graphique.
Solution :
Exemple
Fonction AfficherTours(tours) :
Pour chaque tour dans tours :
Afficher "Tour", tour, ":", tours[tour]
Début
tours = {
"A": [3, 2, 1],
"B": [],
"C": []
}
ToursDeHanoïGraphique(3, "A", "C", "B", tours)
Fin
3. Conclusion
Durée : 6 heures
Objectif :
Créer une base de données fictive (par exemple, une liste de livres ou
d'étudiants) et implémenter des fonctionnalités de tri et de recherche.
Fonctionnalités :
o Ajouter, supprimer et afficher des éléments.
o Trier les éléments par un critère (ex. : titre, auteur, année).
o Rechercher un élément spécifique (ex. : par titre ou ID).
Exemple de structure :
Exemple
Début
base_de_données = [
{"id": 1, "titre": "Livre A", "auteur": "Auteur X", "année": 2000},
{"id": 2, "titre": "Livre B", "auteur": "Auteur Y", "année": 1995},
{"id": 3, "titre": "Livre C", "auteur": "Auteur Z", "année": 2010}
]
Fonction TrierParAnnée(base) :
Retourner trier(base, clé="année")
Fonction RechercherParTitre(base, titre) :
Pour élément dans base :
Si (élément["titre"] == titre) alors :
Retourner élément
Retourner NULL
Fin
Objectif :
Implémenter un jeu simple comme le morpion ou un jeu de devinette.
Fonctionnalités :
o Morpion :
Afficher une grille 3x3.
Permettre à deux joueurs de jouer à tour de rôle.
Vérifier les conditions de victoire.
o Devinette :
Générer un nombre aléatoire.
Permettre à l'utilisateur de deviner le nombre en un
nombre limité de tentatives.
Donner des indices (trop grand, trop petit).
Exemple de structure (Morpion) :
Exemple
Début
grille = [
[" ", " ", " "],
[" ", " ", " "],
[" ", " ", " "]
]
joueur = "X"
Tant que (non Victoire(grille)) :
AfficherGrille(grille)
Afficher "Tour du joueur", joueur
Lire ligne, colonne
Si (grille[ligne][colonne] == " ") alors :
grille[ligne][colonne] = joueur
joueur = "O" si joueur == "X" sinon "X"
Sinon :
Afficher "Case déjà occupée."
Afficher "Le joueur", joueur, "a gagné !"
Fin
Objectif :
Implémenter un simulateur pour gérer une file d'attente ou une pile de
tâches.
Fonctionnalités :
o File d'attente :
Ajouter des éléments à la fin.
Retirer des éléments du début.
Afficher l'état actuel de la file.
o Pile de tâches :
Ajouter des tâches au sommet.
Retirer des tâches du sommet.
Afficher l'état actuel de la pile.
Exemple de structure (File d'attente) :
Exemple
Début
file = []
Répéter :
Afficher "1. Ajouter un élément"
Afficher "2. Retirer un élément"
Afficher "3. Afficher la file"
Afficher "4. Quitter"
Lire choix
Si (choix == 1) alors :
Afficher "Entrez l'élément à ajouter :"
Lire élément
file.append(élément)
Sinon si (choix == 2) alors :
Si (file n'est pas vide) alors :
élément = file.pop(0)
Afficher "Élément retiré :", élément
Sinon :
Afficher "La file est vide."
Sinon si (choix == 3) alors :
Afficher "File actuelle :", file
Jusqu'à (choix == 4)
Fin
a) Objectifs de la présentation
c) Évaluation
Clarté de la présentation.
Fonctionnalité du projet.
Qualité du code (structure, commentaires, etc.).
3. Conclusion
Durée : 2 heures
a) Objectif :
b) Exercices proposés :
Énoncé :
Écrivez un algorithme pour trier un tableau d'entiers en utilisant le tri
par insertion, puis recherchez un élément spécifique en utilisant la
recherche dichotomique.
Solution attendue :
Exemple
Début
tableau = [34, 7, 23, 32, 5, 62]
// Tri par insertion
Pour i allant de 1 à longueur(tableau) - 1 :
clé = tableau[i]
j=i-1
Tant que (j >= 0 ET tableau[j] > clé) :
tableau[j + 1] = tableau[j]
j=j-1
tableau[j + 1] = clé
// Recherche dichotomique
Fonction RechercheDichotomique(tableau, valeur) :
gauche = 0
droite = longueur(tableau) - 1
Tant que (gauche <= droite) :
milieu = (gauche + droite) // 2
Si (tableau[milieu] == valeur) alors :
Retourner milieu
Sinon si (tableau[milieu] < valeur) alors :
gauche = milieu + 1
Sinon :
droite = milieu - 1
Retourner -1
Afficher "Tableau trié :", tableau
Afficher "Position de 32 :", RechercheDichotomique(tableau, 32)
Fin
Énoncé :
Écrivez un algorithme pour simuler une pile de documents. L'utilisateur
peut ajouter, retirer et afficher les documents.
Solution attendue :
Exemple
Début
pile = []
Répéter :
Afficher "1. Ajouter un document"
Afficher "2. Retirer un document"
Afficher "3. Afficher la pile"
Afficher "4. Quitter"
Lire choix
Si (choix == 1) alors :
Afficher "Entrez le document à ajouter :"
Lire document
pile.append(document)
Sinon si (choix == 2) alors :
Si (pile n'est pas vide) alors :
document = pile.pop()
Afficher "Document retiré :", document
Sinon :
Afficher "La pile est vide."
Sinon si (choix == 3) alors :
Afficher "Pile actuelle :", pile
Jusqu'à (choix == 4)
Fin
Exercice 3 : Palindrome
Énoncé :
Écrivez un algorithme pour vérifier si une chaîne de caractères est un
palindrome.
Solution attendue :
Exemple
Début
Afficher "Entrez une chaîne :"
Lire chaîne
chaîne_inversée = chaîne[::-1]
Si (chaîne == chaîne_inversée) alors :
Afficher "La chaîne est un palindrome."
Sinon :
Afficher "La chaîne n'est pas un palindrome."
Fin
2. Réflexion sur les applications concrètes de l’algorithmique
a) Introduction à la programmation
Langages recommandés :
o Python : Facile à apprendre, largement utilisé en algorithmique.
o Java : Orienté objet, utilisé dans de nombreuses applications.
o C++ : Performant, utilisé pour les applications système.
Ressources :
o Cours en ligne (Coursera, edX, OpenClassrooms).
o Livres ("Apprendre à programmer avec Python", "Algorithmes en
C++").
Listes chaînées :
o Permettent des insertions et suppressions efficaces.
Arbres :
o Utilisés pour les recherches hiérarchiques (ex. : arbres binaires
de recherche).
Graphes :
o Représentent des relations complexes entre des éléments.
Tables de hachage :
o Permettent des recherches rapides.
4. Conclusion