Algorithm I Que
Algorithm I Que
Algorithmique et
Structures de Données
Cours complet avec exercices et corrections
Document généré pour l'étude personnelle - Progression validée chapitre par chapitre
Table des Matières
CHAPITRE 1
Introduction à l'algorithmique
DÉFINITION
Un algorithme est une suite finie d'instructions claires et non ambiguës qui,
lorsqu'on les exécute dans l'ordre, permet de résoudre un problème donné ou
d'accomplir une tâche spécifique. On peut voir un algorithme comme une recette
de cuisine : une liste d'étapes à suivre dans un ordre précis pour obtenir un
résultat souhaité.
3
Chapitre 1 : Introduction à l'algorithmique
OBJECTIFS PÉDAGOGIQUES
4
Chapitre 1 : Introduction à l'algorithmique
Imaginons que vous vouliez expliquer à quelqu'un comment faire des crêpes.
Voici un algorithme de préparation des crêpes :
1. DÉBUT
2. Prendre un saladier
16. FIN
Cette recette est un algorithme ! Elle possède toutes les caractéristiques : un début,
une fin, des étapes claires dans un ordre précis, des conditions (étape 15) et un
résultat (des crêpes prêtes).
5
Chapitre 1 : Introduction à l'algorithmique
Qu'est-ce qui fait qu'une suite d'instructions est un algorithme ? Voici les cinq critères
fondamentaux :
Entrées Données nécessaires au départ Farine, oeufs, lait pour les crêpes
Définitude Chaque étape est claire et non ambiguë "Ajouter 250g de farine" (précis)
Algorithme Programme
6
Chapitre 1 : Introduction à l'algorithmique
ALGORITHME Nom_De_L_Algorithme
// Ceci est un commentaire : il explique mais n'est pas exécuté
// DÉCLARATION DES VARIABLES
VARIABLES
nom_variable : Type // On déclare ce dont on a besoin
DÉBUT
// Corps de l'algorithme : les instructions à exécuter
Instruction_1 // Chaque instruction se termine
normalement
Instruction_2 // Les instructions s'exécutent de haut
en bas
...
FIN
7
Chapitre 1 : Introduction à l'algorithmique
ALGORITHME Calcul_Moyenne
// ============================================================
// But : Calculer la moyenne arithmétique de deux nombres
// Entrées : Deux nombres réels
// Sortie : La moyenne de ces deux nombres
// ============================================================
VARIABLES
nombre1 : REEL // Premier nombre à saisir
nombre2 : REEL // Deuxième nombre à saisir
moyenne : REEL // Résultat du calcul
DÉBUT
// ÉTAPE 1 : Demander les valeurs à l'utilisateur
AFFICHER "Entrez le premier nombre : "
LIRE nombre1 // On stocke la saisie dans nombre1
FIN
8
Chapitre 1 : Introduction à l'algorithmique
TANT QUE ... FAIRE ... FIN TANT QUE Boucle non bornée Chapitre 7
Exécutons l'Algorithme 1.2 pas à pas avec les valeurs nombre1 = 10 et nombre2 = 20 :
nombre1 = ?, nombre2 = ?,
1 Déclaration des variables (rien)
moyenne = ?
9
Chapitre 1 : Introduction à l'algorithmique
Écrire des étapes trop vagues : "Traiter les données" n'est pas un
algorithme. Il faut détailler chaque opération.
10
Chapitre 1 : Introduction à l'algorithmique
AFFICHER sert à sortir des informations, LIRE sert à recevoir des données.
Exercices du Chapitre 1
Pour valider ce chapitre, résolvez au moins 8 exercices sur 12. Les exercices 11 et 12 sont des
mini-projets de validation.
11
Chapitre 1 : Introduction à l'algorithmique
Correction
12
Chapitre 1 : Introduction à l'algorithmique
Correction
13
Chapitre 1 : Introduction à l'algorithmique
Identifier les composantes : Pour l'algorithme de la recette des crêpes (section 1.3),
identifiez : les entrées, la sortie, et au moins deux conditions de finitude.
Correction
Conditions de finitude :
14
Chapitre 1 : Introduction à l'algorithmique
Correction
ALGORITHME Routine_Matinale
DÉBUT
// Phase 1 : Réveil
Se_réveiller
Éteindre_le_réveil
// Phase 2 : Toilette
Se_lever_du_lit
Aller_dans_la_salle_de_bain
Se_laver_le_visage
Se_brosser_les_dents
// Phase 3 : Habillage
Choisir_des_vêtements
S'habiller
// Phase 4 : Petit-déjeuner
Aller_dans_la_cuisine
Préparer_le_petit_déjeuner
Manger
// Phase 5 : Départ
Vérifier_les_affaires_nécessaires
Mettre_les_chaussures
Sortir_de_la_maison
Fermer_la_porte_à_clé
FIN
15
Chapitre 1 : Introduction à l'algorithmique
ALGORITHME Mystere
VARIABLES
a, b, c : ENTIER
DÉBUT
LIRE a
LIRE b
c <- a + b
a <- c - a
b <- c - b
AFFICHER a
AFFICHER b
FIN
Correction
Étape Instruction a b c
1 Déclaration ? ? ?
2 LIRE a (4) 4 ? ?
3 LIRE b (6) 4 6 ?
4 c <- a + b 4 6 10
5 a <- c - a (10-4) 6 6 10
6 b <- c - b (10-6) 6 4 10
Méthode : Créer une colonne par variable et suivre chaque affectation ligne
par ligne sans anticiper.
16
Chapitre 1 : Introduction à l'algorithmique
Correction
Si on écrit naivement :
Instruction a b
(initial) 4 6
a <- b 6 6
b <- a 6 6
Résultat : les deux valent 6 ! La valeur 4 est perdue. D'où la nécessité d'une
variable temporaire (ici c ) pour stocker la valeur intermédiaire.
17
Chapitre 1 : Introduction à l'algorithmique
Correction
ALGORITHME Comptage_Monnaie
VARIABLES
x, y, z, w, v : ENTIER // Nombre de chaque type de
pièce
total_pieces : ENTIER // Nombre total de pièces
montant_total : REEL // Montant total en EUR
DÉBUT
// Saisie des quantités
AFFICHER "Nombre de pièces de 2 EUR : "
LIRE x
AFFICHER "Nombre de pièces de 1 EUR : "
LIRE y
AFFICHER "Nombre de pièces de 50 centimes : "
LIRE z
AFFICHER "Nombre de pièces de 20 centimes : "
LIRE w
AFFICHER "Nombre de pièces de 10 centimes : "
LIRE v
18
Chapitre 1 : Introduction à l'algorithmique
Correction
ALGORITHME Conversion_Temps
VARIABLES
duree_totale : ENTIER // Durée en secondes (entrée)
heures : ENTIER // Résultat en heures
minutes : ENTIER // Résultat en minutes
secondes : ENTIER // Résultat en secondes
reste : ENTIER // Variable intermédiaire
DÉBUT
AFFICHER "Entrez la durée en secondes : "
LIRE duree_totale
// 1 minute = 60 secondes
minutes <- reste DIV 60
secondes <- reste MOD 60
Version Python :
19
Chapitre 1 : Introduction à l'algorithmique
# Conversion temps
duree_totale = int(input("Entrez la duree en secondes : "))
20
Chapitre 1 : Introduction à l'algorithmique
ALGORITHME Calcul
VARIABLES
n, resultat : ENTIER
DÉBUT
LIRE n
resultat <- n * n
resultat <- resultat + n
resultat <- resultat DIV 2
AFFICHER resultat
FIN
Correction
Avec n = 5 :
Instruction n resultat
Initial 5 ?
Résultat affiché : 15
n×(n+1)
Observation mathématique : Cet algorithme calcule 2 , c'est-à-dire la
somme des entiers de 1 à n. C'est la célèbre formule de Gauss !
21
Chapitre 1 : Introduction à l'algorithmique
Correction
ALGORITHME Permutation_Circulaire
VARIABLES
a, b, c : ENTIER
temp : ENTIER // Variable temporaire unique
DÉBUT
// Saisie
AFFICHER "Entrez a : " ; LIRE a
AFFICHER "Entrez b : " ; LIRE b
AFFICHER "Entrez c : " ; LIRE c
Étape a b c temp
Initial 1 2 3 ?
temp <- a 1 2 3 1
a <- c 3 2 3 1
c <- b 3 2 2 1
22
Chapitre 1 : Introduction à l'algorithmique
b <- temp 3 1 2 1
Résultat : a=3, b=1, c=2. Les valeurs ont tourné dans le sens inverse des
aiguilles d'une montre.
23
Chapitre 1 : Introduction à l'algorithmique
5. Indiquer combien de billets de 10, 5 et pièces de 1, 50c, 20c, 10c sont à rendre
(rendre le minimum de pièces/billets)
Correction complète
24
Chapitre 1 : Introduction à l'algorithmique
ALGORITHME Caisse_Automatique
VARIABLES
prix : REEL // Prix de l'article
billet : ENTIER // Billet donné (20, 50 ou 100)
monnaie : REEL // Monnaie à rendre
DÉBUT
// ÉTAPE 1 : Saisie
AFFICHER "=== CAISSE AUTOMATIQUE ==="
AFFICHER "Prix de l'article (max 100 EUR) : "
LIRE prix
AFFICHER "Billet donné (20, 50, 100) : "
LIRE billet
// ÉTAPE 2 : Vérification
SI billet < prix ALORS
AFFICHER "ERREUR : Le billet est insuffisant !"
SINON
// ÉTAPE 3 : Calcul de la monnaie
monnaie <- billet - prix
AFFICHER "Monnaie à rendre : ", monnaie, " EUR"
25
Chapitre 1 : Introduction à l'algorithmique
Méthode de résolution :
Version Python :
26
Chapitre 1 : Introduction à l'algorithmique
27
Chapitre 1 : Introduction à l'algorithmique
i
5. Affiche la mention : Très Bien (>=16), Bien (>=14), Assez Bien (>=12), Passable
(>=10), Insuffisant (<10)
Correction
28
Chapitre 1 : Introduction à l'algorithmique
ALGORITHME Moyenne_Ponderee
VARIABLES
// Notes (sur 20)
note1, note2, note3, note4, note5 : REEL
// Coefficients
coef1, coef2, coef3, coef4, coef5 : ENTIER
// Calculs
somme_ponderee : REEL // Somme de (note * coef)
somme_coefs : ENTIER // Somme des coefficients
moyenne : REEL // Résultat final
DÉBUT
AFFICHER "=== CALCUL DE MOYENNE PONDEREE ==="
// Affichage de la moyenne
AFFICHER "Votre moyenne est : ", moyenne, "/20"
// Détermination de la mention
SI moyenne >= 16 ALORS
AFFICHER "Mention : TRES BIEN"
SINON SI moyenne >= 14 ALORS
AFFICHER "Mention : BIEN"
SINON SI moyenne >= 12 ALORS
AFFICHER "Mention : ASSEZ BIEN"
SINON SI moyenne >= 10 ALORS
AFFICHER "Mention : PASSABLE"
29
Chapitre 1 : Introduction à l'algorithmique
FIN SI
FIN
Version Python :
print(f"\nMoyenne : {moyenne:.2f}/20")
Méthode : La moyenne pondérée n'est pas une simple moyenne. Chaque note
est "importée" selon son coefficient. On calcule d'abord toutes les contributions
(note x coef), on les additionne, puis on divise par la somme des coefficients.
Les conditions imbriquées pour les mentions utilisent la structure SI/SINON SI
que nous verrons en détail au Chapitre 6.
30
Chapitre 1 : Introduction à l'algorithmique
Validation du Chapitre 1
Lorsque vous êtes prêt, écrivez "Chapitre suivant" pour passer au Chapitre 2.
31
Chapitre 2 : Variables et constantes
CHAPITRE 2
Variables et constantes
DÉFINITIONS
Une constante est également un espace de stockage nommé, mais dont la valeur
est fixée une fois pour toutes et ne peut jamais être modifiée. C'est comme le
nombre pi (π ≈ 3.14159) : c'est une valeur qui ne change jamais.
32
Chapitre 2 : Variables et constantes
OBJECTIFS PÉDAGOGIQUES
Constantes (règles fixes) : Sur le mur de l'atelier est affichée la règle "1
pouce = 2.54 centimètres". Cette valeur ne change jamais, quelle que soit la
situation. On peut la consulter autant de fois que nécessaire, mais on ne la
modifie pas.
Dans un algorithme, les variables stockent des données qui évoluent (résultats
intermédiaires, compteurs, saisies utilisateur), tandis que les constantes stockent
des valeurs immuables (taux de TVA, conversions d'unités, messages fixes).
33
Chapitre 2 : Variables et constantes
Quand vous déclarez une variable, l'ordinateur réserve un emplacement en mémoire RAM
et lui associe un nom.
+-------+ +-------+
| age | -----> | 20 |
+-------+ +-------+
(nom de la (contenu dans
variable) la mémoire)
L'affectation est l'opération fondamentale qui modifie la valeur d'une variable. Elle se note
<- (flèche vers la gauche).
Opération : x <- 10
34
Chapitre 2 : Variables et constantes
Exemple Exemple
Règle Explication
valide invalide
Utiliser le CamelCase ou
Pas d'espaces prixTotal prix total
underscore
Pas de mot réservé sinonValeur SINON , ALORS On évite les mots-clés du langage
prixHorsTax
Nom significatif pht , x Le nom doit décrire le contenu
e
35
Chapitre 2 : Variables et constantes
36
Chapitre 2 : Variables et constantes
ALGORITHME Exemple_Variables
// ============================================================
// But : Montrer la déclaration, l'initialisation et
// la modification de variables
// ============================================================
VARIABLES
// --- Déclarations simples ---
age : ENTIER // Variable entière (pas de décimale)
taille : REEL // Variable réelle (avec décimale)
prenom : CHAINE // Variable texte
estMajeur : BOOLEEN // Variable logique (VRAI ou FAUX)
DÉBUT
// --- Affectation de valeurs ---
age <- 20 // La variable 'age' contient
maintenant 20
taille <- 1.75 // La variable 'taille' contient 1.75
prenom <- "Alice" // La variable 'prenom' contient
"Alice"
estMajeure <- (age >= AGE_MAJORITE) // VRAI car 20 >= 18
37
Chapitre 2 : Variables et constantes
ALGORITHME Variable_Vs_Constante
VARIABLES
prix : REEL <- 100.0 // Variable : peut changer
CONST TAUX : REEL <- 0.20 // Constante : ne change JAMAIS
prixTTC : REEL
DÉBUT
// On peut modifier une variable
prix <- 150.0 // CORRECT : prix est une variable
1 Déclaration ? ? ? ? 0 -
2 age <- 20 20 ? ? ? 0 -
38
Chapitre 2 : Variables et constantes
9 AFFICHER TAUX_TVA 20 1.75 "Alice" VRAI 2 "Le taux de TVA est : 20%"
ERREURS À ÉVITER
39
Chapitre 2 : Variables et constantes
Une variable est un espace mémoire nommé dont le contenu peut changer.
Une constante a une valeur fixe définitive.
Exercices du Chapitre 2
40
Chapitre 2 : Variables et constantes
Correction
Règles de nommage : (1) Commencer par une lettre, (2) Pas d'espaces, (3)
Utiliser des noms significatifs.
41
Chapitre 2 : Variables et constantes
Identifiez les erreurs : Trouvez toutes les erreurs dans les déclarations suivantes.
Correction
42
Chapitre 2 : Variables et constantes
ALGORITHME Trace
VARIABLES a, b, c : ENTIER
DÉBUT
a <- 5
b <- a + 3
c <- a + b
a <- c - a
b <- a * 2
FIN
Correction
Instruction a b c
Début ? ? ?
a <- 5 5 ? ?
b <- a + 3 (= 5 + 3) 5 8 ?
c <- a + b (= 5 + 8) 5 8 13
a <- c - a (= 13 - 5) 8 8 13
b <- a * 2 (= 8 * 2) 8 16 13
43
Chapitre 2 : Variables et constantes
Correction
ALGORITHME Declaration_Etudiant
VARIABLES
nomEtudiant : CHAINE
anneeNaissance : ENTIER
moyenneGenerale : REEL // Peut avoir des décimales
(ex: 13.5)
semestreValide : BOOLEEN // VRAI ou FAUX
Choix des types : Nom → CHAINE (texte), Année → ENTIER (nombre entier),
Moyenne → REEL (peut être 13.5), Validation → BOOLEEN (VRAI/Faux).
44
Chapitre 2 : Variables et constantes
Correction
L'instruction chaînée a <- b <- c <- 0 n'est pas standard car elle mêle
affectations et expressions de manière ambiguë. Chaque affectation doit être
une instruction distincte :
a <- 0
b <- 0
c <- 0
VARIABLES
a : ENTIER <- 0
b : ENTIER <- 0
c : ENTIER <- 0
45
Chapitre 2 : Variables et constantes
Correction
ALGORITHME Compteur_Passages
VARIABLES
compteur : ENTIER <- 0
DÉBUT
// 3 clients entrent
compteur <- compteur + 3 // compteur = 3
// 2 clients sortent
compteur <- compteur - 2 // compteur = 1
// 5 clients entrent
compteur <- compteur + 5 // compteur = 6
Python :
compteur = 0
compteur += 3 # équivalent à compteur = compteur + 3
compteur -= 2 # équivalent à compteur = compteur - 2
compteur += 5
print(f"Personnes dans le magasin : {compteur}") # Affiche 6
46
Chapitre 2 : Variables et constantes
Correction
ALGORITHME Calculateur_IMC
VARIABLES
poids : REEL // en kilogrammes
taille : REEL // en mètres
imc : REEL
// Calcul de l'IMC
imc <- poids / (taille * taille)
// Détermination de la catégorie
SI imc < SEUIL_MAIGREUR ALORS
AFFICHER "Catégorie : Maigreur"
SINON SI imc < SEUIL_SURPOIDS ALORS
AFFICHER "Catégorie : Poids normal"
SINON SI imc < SEUIL_OBESITE ALORS
AFFICHER "Catégorie : Surpoids"
SINON
AFFICHER "Catégorie : Obésité"
FIN SI
FIN
47
Chapitre 2 : Variables et constantes
Python :
SEUIL_MAIGREUR = 18.5
SEUIL_SURPOIDS = 25.0
SEUIL_OBESITE = 30.0
48
Chapitre 2 : Variables et constantes
Correction
ALGORITHME Compteur_Caracteres
VARIABLES
phrase : CHAINE <- "Bonjour le monde"
nbCaracteres : ENTIER
nbEspaces : ENTIER
nbMots : ENTIER
i : ENTIER // Indice pour parcourir la chaîne
car : CARACTERE // Caractère courant
DÉBUT
// Nombre de caractères total
nbCaracteres <- LONGUEUR(phrase)
49
Chapitre 2 : Variables et constantes
ALGORITHME Evolution
VARIABLES x, y, z : ENTIER
DÉBUT
x <- 2
y <- x * 3 // y = ?
z <- x + y // z = ?
x <- z - y // x = ?
y <- y + x // y = ?
z <- x * y * z // z = ?
AFFICHER x, y, z
FIN
Correction
Instruction x y z
Début ? ? ?
x <- 2 2 ? ?
y <- x * 3 (= 2*3) 2 6 ?
z <- x + y (= 2+6) 2 6 8
x <- z - y (= 8-6) 2 6 8
y <- y + x (= 6+2) 2 8 8
50
Chapitre 2 : Variables et constantes
Correction
ALGORITHME Echange_Sans_Temp
VARIABLES a, b : ENTIER
DÉBUT
AFFICHER "Entrez a : " ; LIRE a
AFFICHER "Entrez b : " ; LIRE b
Instruction a b
Initial 7 4
a <- a + b (= 7+4) 11 4
b <- a - b (= 11-4) 11 7
a <- a - b (= 11-7) 4 7
51
Chapitre 2 : Variables et constantes
1. Définit des constantes pour les postes de dépenses fixes (loyer, internet,
assurance)
Correction
52
Chapitre 2 : Variables et constantes
ALGORITHME Gestionnaire_Budget
// --- CONSTANTES (dépenses fixes) ---
CONST LOYER : REEL <- 650.00
CONST INTERNET : REEL <- 29.99
CONST ASSURANCE : REEL <- 45.00
CONST NB_POSTES : ENTIER <- 6
VARIABLES
nourriture : REEL
transport : REEL
loisirs : REEL
revenu : REEL
totalFixes : REEL
totalVariables : REEL
totalDepenses : REEL
epargne : REEL
pourcentageEpargne : REEL
DÉBUT
// Saisie des variables
AFFICHER "=== GESTIONNAIRE DE BUDGET ==="
AFFICHER ""
AFFICHER "--- Dépenses variables ---"
AFFICHER "Nourriture (EUR) : " ; LIRE nourriture
AFFICHER "Transport (EUR) : " ; LIRE transport
AFFICHER "Loisirs (EUR) : " ; LIRE loisirs
AFFICHER ""
AFFICHER "--- Revenus ---"
AFFICHER "Revenu du mois (EUR) : " ; LIRE revenu
// Calculs
totalFixes <- LOYER + INTERNET + ASSURANCE
totalVariables <- nourriture + transport + loisirs
totalDepenses <- totalFixes + totalVariables
epargne <- revenu - totalDepenses
pourcentageEpargne <- (epargne / revenu) * 100
// Affichage du bilan
AFFICHER ""
AFFICHER "========== BILAN MENSUEL =========="
AFFICHER "--- Dépenses fixes ---"
AFFICHER "Loyer : ", LOYER, " EUR"
AFFICHER "Internet : ", INTERNET, " EUR"
AFFICHER "Assurance : ", ASSURANCE, " EUR"
AFFICHER "Sous-total fixes : ", totalFixes, " EUR"
AFFICHER ""
AFFICHER "--- Dépenses variables ---"
AFFICHER "Nourriture : ", nourriture, " EUR"
53
Chapitre 2 : Variables et constantes
54
Chapitre 2 : Variables et constantes
Correction
55
Chapitre 2 : Variables et constantes
ALGORITHME Interets_Composes
// Formule : Cf = Ci * (1 + t/100)^n
// On suppose disposer de la fonction PUISSANCE(x, n)
VARIABLES
capitalInitial : REEL
tauxAnnuel : REEL // En pourcentage (ex: 3.5 pour
3.5%)
dureeAnnees : ENTIER
capitalFinal : REEL
gain : REEL
facteur : REEL // (1 + taux/100)
DÉBUT
AFFICHER "=== SIMULATEUR D'INTÉRÊTS COMPOSÉS ==="
AFFICHER "Capital initial (EUR) : " ; LIRE capitalInitial
AFFICHER "Taux annuel (%) : " ; LIRE tauxAnnuel
AFFICHER "Durée (années) : " ; LIRE dureeAnnees
// Calcul
facteur <- 1 + (tauxAnnuel / 100)
capitalFinal <- capitalInitial * PUISSANCE(facteur,
dureeAnnees)
gain <- capitalFinal - capitalInitial
// Résultats
AFFICHER ""
AFFICHER "--- RÉSULTAT ---"
AFFICHER "Capital initial : ", capitalInitial, " EUR"
AFFICHER "Taux : ", tauxAnnuel, "% sur ", dureeAnnees, "
ans"
AFFICHER "Capital final : ", ARRONDIR(capitalFinal, 2), "
EUR"
AFFICHER "Gain total : ", ARRONDIR(gain, 2), " EUR"
AFFICHER "Rendement : ",
ARRONDIR((gain/capitalInitial)*100, 2), "%"
FIN
Version Python :
56
Chapitre 2 : Variables et constantes
Validation du Chapitre 2
Bravo ! Vous maîtrisez maintenant les variables et constantes. Vérifiez vos acquis :
Règles de nommage
57
Chapitre 3 : Types de données
CHAPITRE 3
Types de données
DÉFINITION
Un type de donnée définit la nature des valeurs qu'une variable peut contenir,
ainsi que les opérations que l'on peut effectuer sur ces valeurs. C'est comme les
catégories de rangement dans une armoire : on ne range pas les chaussettes de la
même façon que les vestes. Chaque type a ses propres règles et ses propres
opérations valides.
58
Chapitre 3 : Types de données
OBJECTIFS PÉDAGOGIQUES
Si vous écrivez votre nom dans le champ "Année de naissance", le système refuse :
c'est une erreur de type !
59
Chapitre 3 : Types de données
CARACTÈR Comparaison,
Un seul caractère alphanumérique 'A', 'z', '7', '@'
E concaténation
+------------------------------------------------+
| REPRÉSENTATION EN MÉMOIRE |
+------------------------------------------------+
60
Chapitre 3 : Types de données
CARACTÈRE → 65 (code
'A' devient 65 Aucun
ENTIER ASCII)
61
Chapitre 3 : Types de données
ALGORITHME Types_Donnees
VARIABLES
// --- Déclarations avec types explicites ---
age : ENTIER <- 20
prix : REEL <- 19.99
initiale : CARACTERE <- 'A'
nom : CHAINE <- "Alice"
estActif : BOOLEEN <- VRAI
DÉBUT
// Conversion RÉEL → ENTIER (troncature)
prixEntier <- CONVERTIR_ENTIER(prix) // 19.99 devient 19
AFFICHER "Prix entier : ", prixEntier // Affiche 19
// Concaténation de chaînes
nom <- nom + " Dupont" // "Alice" + " Dupont"
AFFICHER "Nom complet : ", nom // Affiche "Alice
Dupont"
62
Chapitre 3 : Types de données
prixEntier <-
2 prixEntier=19 -
CONVERTIR_ENTIER(prix)
"Prix entier :
3 AFFICHER prixEntier (inchangé)
19"
ageChaine <-
4 ageChaine="20" -
CONVERTIR_CHAINE(age)
codeAscii <-
5 codeAscii=65 -
CONVERTIR_ENTIER('A')
"Longueur :
7 AFFICHER LONGUEUR(nom) (inchangé)
12"
63
Chapitre 3 : Types de données
ERREURS À ÉVITER
Oublier les guillemets pour les chaînes : nom <- Alice cherche une
variable nommée Alice. Il faut nom <- "Alice" .
64
Chapitre 3 : Types de données
Exercices du Chapitre 3
Type approprié : Pour chaque donnée, indiquez le type le plus adapté (ENTIER,
RÉEL, CARACTÈRE, CHAÎNE, BOOLÉEN) : le numéro de téléphone, la température
corporelle, la civilité (M./Mme), si un étudiant est présent, le nombre de pages d'un
livre.
Correction
65
Chapitre 3 : Types de données
Vrai ou Faux : (1) Un ENTIER peut stocker 3.14. (2) Un CARACTÈRE peut être un
chiffre. (3) Une CHAÎNE vide "" a une longueur de 0. (4) Un BOOLÉEN peut valoir 0
ou 1. (5) CONVERTIR_ENTIER(3.9) donne 4.
Correction
4. Faux : Un BOOLÉEN vaut VRAI ou FAUX, pas 0 ou 1 (ce sont des entiers).
Déclarations : Écrivez les déclarations correctes pour : le numéro INE d'un étudiant
(11 caractères), son année de naissance, sa mention au bac (chaîne), et s'il a
redoublé (oui/non).
VARIABLES
numeroINE : CHAINE // Ex: "09876543210"
anneeNaissance : ENTIER // Ex: 2005
mentionBac : CHAINE // Ex: "Bien", "Tres Bien"
aRedouble : BOOLEEN // VRAI ou FAUX
66
Chapitre 3 : Types de données
Correction
Correction
Ou directement : resultat <- "A" + "BC" si on écrit 'A' comme chaîne "A".
67
Chapitre 3 : Types de données
Durée en secondes : Écrivez un algorithme qui lit une durée en secondes (ENTIER)
et la convertit en heures, minutes, secondes. Utilisez uniquement des opérations
ENTIÈRES (DIV et MOD).
Correction
ALGORITHME Convertir_Duree
VARIABLES
dureeSec : ENTIER
heures : ENTIER
minutes : ENTIER
secondes : ENTIER
reste : ENTIER
DÉBUT
AFFICHER "Durée en secondes : " ; LIRE dureeSec
Python :
68
Chapitre 3 : Types de données
Code de vérification : Un code à 4 chiffres est stocké sous forme d'ENTIER (ex:
4729). Écrivez un algorithme qui extrait chaque chiffre (unités, dizaines, centaines,
milliers) en utilisant DIV et MOD.
Correction
ALGORITHME Extraire_Chiffres
VARIABLES
code : ENTIER // Ex: 4729
u, d, c, m : ENTIER // unités, dizaines, centaines,
milliers
DÉBUT
AFFICHER "Code à 4 chiffres : " ; LIRE code
69
Chapitre 3 : Types de données
Correction
10 DIV 4 ENTIER 2
10 / 4 RÉEL 2.5
LONGUEUR("ABC") ENTIER 3
70
Chapitre 3 : Types de données
Correction
ALGORITHME Conversion_Temperature
VARIABLES
celsius : REEL
fahrenheit : REEL
kelvin : REEL
DÉBUT
AFFICHER "Température en °C : " ; LIRE celsius
fahrenheit <- celsius * (9.0/5.0) + 32.0
kelvin <- celsius + 273.15
AFFICHER celsius, "°C = ", ARRONDIR(fahrenheit, 2), "°F"
AFFICHER celsius, "°C = ", ARRONDIR(kelvin, 2), "K"
FIN
Python :
c = float(input("Temperature en °C : "))
f = c * 9/5 + 32
k = c + 273.15
print(f"{c}°C = {f:.2f}°F = {k:.2f}K")
71
Chapitre 3 : Types de données
Correction
ALGORITHME Inverser_Nombre
VARIABLES
n : ENTIER // Nombre initial (ex: 527)
inverse : ENTIER // Résultat (ex: 725)
u, d, c : ENTIER // Chiffres
DÉBUT
AFFICHER "Nombre à 3 chiffres : " ; LIRE n
Python :
72
Chapitre 3 : Types de données
Correction
ALGORITHME Convertisseur_Unites
CONST POUCE_CM : REEL <- 2.54
CONST PIED_CM : REEL <- 30.48
CONST YARD_CM : REEL <- 91.44
VARIABLES
metres : REEL
cm : REEL
DÉBUT
AFFICHER "Longueur en mètres : " ; LIRE metres
cm <- metres * 100.0
73
Chapitre 3 : Types de données
Correction
74
Chapitre 3 : Types de données
ALGORITHME Decoder_Securite_Sociale
VARIABLES
num : CHAINE // 15 chiffres
sexeCode : CHAINE // "1" ou "2"
anneeCode : CHAINE // "85"
moisCode : CHAINE // "12"
deptCode : CHAINE // "76"
sexe : CHAINE
annee : ENTIER
mois : ENTIER
dept : ENTIER
DÉBUT
AFFICHER "Numéro SS (15 chiffres) : " ; LIRE num
// Conversions et interprétation
SI sexeCode = "1" ALORS sexe <- "Homme"
SINON sexe <- "Femme" FIN SI
Python :
75
Chapitre 3 : Types de données
Validation du Chapitre 3
76
Chapitre 4 : Entrées et sorties
CHAPITRE 4
Entrées et sorties
DÉFINITIONS
Les entrées (LIRE) sont les moyens par lesquels un algorithme reçoit des données
de l'extérieur, typiquement via le clavier. C'est comme quand on vous pose une
question et que vous répondez : l'algorithme "demande" et l'utilisateur "répond".
Les sorties (AFFICHER) sont les moyens par lesquels un algorithme communique
ses résultats à l'utilisateur, typiquement via l'écran. C'est comme quand on vous
donne un résultat ou une information.
77
Chapitre 4 : Entrées et sorties
OBJECTIFS PÉDAGOGIQUES
78
Chapitre 4 : Entrées et sorties
Exemple concret :
+------------+ +------------------+ +------------+
| Taper: 20 | ==> LIRE age ==> | age <- 20 | ==> AFFICHER ==> | "Vous avez"|
| | | calcul... | "Age: 20" | "20 ans" |
+------------+ +------------------+ +------------+
79
Chapitre 4 : Entrées et sorties
ALGORITHME Dialogue_Utilisateur
VARIABLES
prenom : CHAINE
age : ENTIER
taille : REEL
DÉBUT
// --- ENTRÉES avec messages d'invite clairs ---
80
Chapitre 4 : Entrées et sorties
"Taille?" (ambigu : cm ?
Indiquer l'unité attendue "Taille en mètres :"
m ?)
AFFICHER r (sans
Formater les sorties clairement "Résultat : " + r
contexte)
Sauter une ligne entre sections AFFICHER "" (ligne vide) Tout collé sans séparation
Exécution de l'Algorithme 4.1 avec l'utilisateur qui tape "Alice", "20", "1.65" :
AFFICHER "Quelle
5 Taille en mètres ? (attend)
taille..."
81
Chapitre 4 : Entrées et sorties
ERREURS À ÉVITER
Lire dans le mauvais type : Si age : ENTIER mais l'utilisateur tape "vingt",
l'algorithme plante.
Exercices du Chapitre 4
82
Chapitre 4 : Entrées et sorties
Correction
83
Chapitre 4 : Entrées et sorties
Correction
84
Chapitre 4 : Entrées et sorties
Correction
ALGORITHME Questionnaire
VARIABLES nom, ville, plat : CHAINE
DÉBUT
AFFICHER "Votre nom : " ; LIRE nom
AFFICHER "Votre ville préférée : " ; LIRE ville
AFFICHER "Votre plat préféré : " ; LIRE plat
AFFICHER nom, " aime ", ville, " et les ", plat, "."
FIN
85
Chapitre 4 : Entrées et sorties
Correction
ALGORITHME Km_Vers_Miles
CONST MILE_EN_KM : REEL <- 1.60934
VARIABLES km, miles : REEL
DÉBUT
AFFICHER "Distance en kilomètres : "
LIRE km
miles <- km / MILE_EN_KM
AFFICHER km, " km = ", ARRONDIR(miles, 2), " miles"
FIN
Python :
86
Chapitre 4 : Entrées et sorties
Bulletin de notes simplifié : Lire le nom d'un étudiant et ses 3 notes sur 20.
Afficher ses notes et leur moyenne avec le format : "Alice : 12, 15, 8 | Moyenne :
11.67/20".
Correction
ALGORITHME Bulletin
VARIABLES nom : CHAINE
n1, n2, n3, moy : REEL
DÉBUT
AFFICHER "Nom : " ; LIRE nom
AFFICHER "Note 1/20 : " ; LIRE n1
AFFICHER "Note 2/20 : " ; LIRE n2
AFFICHER "Note 3/20 : " ; LIRE n3
moy <- (n1 + n2 + n3) / 3
AFFICHER nom, " : ", n1, ", ", n2, ", ", n3,
" | Moyenne : ", ARRONDIR(moy, 2), "/20"
FIN
87
Chapitre 4 : Entrées et sorties
Correction
ALGORITHME Facture_Restaurant
CONST TVA_RESTO : REEL <- 0.10
VARIABLES
prixEntree, prixPlat, prixDessert, prixCafe : REEL
nbConvives : ENTIER
totalHT, totalTTC, montantTVA, parPersonne : REEL
DÉBUT
AFFICHER "=== FACTURE RESTAURANT ==="
AFFICHER "Prix entrée (EUR) : " ; LIRE prixEntree
AFFICHER "Prix plat (EUR) : " ; LIRE prixPlat
AFFICHER "Prix dessert (EUR) : " ; LIRE prixDessert
AFFICHER "Prix café (EUR) : " ; LIRE prixCafe
AFFICHER "Nombre de convives : " ; LIRE nbConvives
AFFICHER ""
AFFICHER "--- DÉTAIL ---"
AFFICHER "Total HT : ", ARRONDIR(totalHT, 2), " EUR"
AFFICHER "TVA (10%) : ", ARRONDIR(montantTVA, 2), " EUR"
AFFICHER "Total TTC : ", ARRONDIR(totalTTC, 2), " EUR"
AFFICHER "Par personne : ", ARRONDIR(parPersonne, 2), "
EUR"
FIN
88
Chapitre 4 : Entrées et sorties
Correction
Mauvaise invite : AFFICHER "Age?" puis LIRE age . L'utilisateur peut répondre
"15 ans" ou "quinze" au lieu de "15", provoquant une erreur de type.
Invite encore meilleure : AFFICHER "Age (entier entre 0 et 120) : " . Les
contraintes sont claires.
89
Chapitre 4 : Entrées et sorties
Correction
ALGORITHME Tableau_Formate
VARIABLES
produit : CHAINE <- "Livre"
quantite : ENTIER <- 3
prixUnitaire : REEL <- 12.50
total : REEL
DÉBUT
total <- quantite * prixUnitaire
// Lignes de séparation
AFFICHER "+-----------+----------+-------------+----------
+"
AFFICHER "| Produit | Quantité | Prix unit. | Total
|"
AFFICHER "+-----------+----------+-------------+----------
+"
AFFICHER "| ", produit, " | ", quantite,
" | ", prixUnitaire,
" | ", total, " |"
AFFICHER "+-----------+----------+-------------+----------
+"
FIN
90
Chapitre 4 : Entrées et sorties
Correction
ALGORITHME Pourboire
VARIABLES
addition, pourcentage, pourboire, total : REEL
DÉBUT
AFFICHER "Montant de l'addition (EUR) : " ; LIRE addition
AFFICHER "Pourcentage de pourboire (%) : " ; LIRE
pourcentage
AFFICHER ""
AFFICHER "Addition : ", ARRONDIR(addition, 2), " EUR"
AFFICHER "Pourboire (", pourcentage, "%) : ",
ARRONDIR(pourboire, 2), " EUR"
AFFICHER "TOTAL : ", ARRONDIR(total, 2), " EUR"
FIN
91
Chapitre 4 : Entrées et sorties
Simulateur de remise : Un magasin fait une promotion : 5% de remise dès 100 EUR
d'achat, 10% dès 200 EUR, 15% dès 500 EUR. Écrivez un algorithme qui lit le
montant des achats et affiche : montant initial, taux de remise appliqué, montant de
la remise, et prix final à payer.
Correction
ALGORITHME Simulateur_Remise
VARIABLES
montant, remise, prixFinal : REEL
tauxRemise : REEL
DÉBUT
AFFICHER "Montant des achats (EUR) : " ; LIRE montant
AFFICHER ""
AFFICHER "Montant initial : ", ARRONDIR(montant, 2), " EUR"
AFFICHER "Taux remise : ", tauxRemise * 100, "%"
AFFICHER "Remise : ", ARRONDIR(remise, 2), " EUR"
AFFICHER "PRIX FINAL : ", ARRONDIR(prixFinal, 2), " EUR"
FIN
92
Chapitre 4 : Entrées et sorties
Fiche de paie simplifiée : Écrivez un algorithme complet qui simule une fiche de
paie. Entrées : nom, salaire brut horaire, nombre d'heures travaillées. Calculs :
salaire brut = horaire x heures, cotisations sociales = 23% du brut, salaire net = brut
- cotisations. Affichez une fiche complète et formatée.
Correction
ALGORITHME Fiche_Paie
CONST TAUX_COTISATIONS : REEL <- 0.23
VARIABLES
nom : CHAINE
horaire : REEL
heures : REEL
brut, cotisations, net : REEL
DÉBUT
AFFICHER "=== FICHE DE PAIE ==="
AFFICHER "Nom : " ; LIRE nom
AFFICHER "Salaire brut horaire (EUR) : " ; LIRE horaire
AFFICHER "Heures travaillées : " ; LIRE heures
AFFICHER ""
AFFICHER "========================================"
AFFICHER " FICHE DE PAIE - ", nom
AFFICHER "========================================"
AFFICHER " Salaire brut : ", ARRONDIR(brut, 2), " EUR"
AFFICHER " Cotisations (23%): ", ARRONDIR(cotisations, 2),
" EUR"
AFFICHER " --------------------------------------"
AFFICHER " SALAIRE NET : ", ARRONDIR(net, 2), " EUR"
AFFICHER "========================================"
FIN
93
Chapitre 4 : Entrées et sorties
Correction
94
Chapitre 4 : Entrées et sorties
ALGORITHME Calculateur_Pret
// Formule de mensualité standard
VARIABLES
capital, tauxAnnuel, dureeAnnees : REEL
tauxMensuel, mensualite : REEL
capitalRestant, interets, capitalRembourse : REEL
mois : ENTIER
nbMoisTotal : ENTIER
DÉBUT
AFFICHER "=== CALCULATEUR DE PRÊT ==="
AFFICHER "Capital (EUR) : " ; LIRE capital
AFFICHER "Taux annuel (%) : " ; LIRE tauxAnnuel
AFFICHER "Durée (années) : " ; LIRE dureeAnnees
AFFICHER ""
AFFICHER "Mensualité : ", ARRONDIR(mensualite, 2), " EUR"
AFFICHER ""
95
Chapitre 4 : Entrées et sorties
AFFICHER ""
AFFICHER "Coût total du crédit : ",
ARRONDIR(mensualite * nbMoisTotal - capital, 2), "
EUR"
FIN
Python :
taux_m = taux / 12
n = annees * 12
if taux > 0:
mensualite = (capital * taux_m) / (1 - (1 + taux_m)**(-n))
else:
mensualite = capital / n
# Tableau annee 1
cr = capital
print("\nAmortissement (Annee 1):")
print("Mois | Capital du | Interets | Cap. remb.")
for mois in range(1, 13):
interets = cr * taux_m
cap_remb = mensualite - interets
cr -= cap_remb
print(f"{mois:4} | {cr+cap_remb:10.2f} | {interets:8.2f} |
{cap_remb:10.2f}")
96
Chapitre 4 : Entrées et sorties
Validation du Chapitre 4
Super progrès ! Vous savez maintenant gérer les interactions utilisateur. Vérifiez :
97
Chapitre 5 : Opérateurs arithmétiques
CHAPITRE 5
Opérateurs arithmétiques
DÉFINITION
Les opérateurs arithmétiques sont les symboles qui permettent d'effectuer des
calculs mathématiques de base sur des nombres. Ce sont les fondements de tout
traitement numérique en informatique : addition, soustraction, multiplication,
division, ainsi que le reste de division (modulo) et la division entière.
OBJECTIFS PÉDAGOGIQUES
98
Chapitre 5 : Opérateurs arithmétiques
Vous organisez une soirée avec 17 amis (soit 18 personnes au total) et vous
commandez 5 pizzas. Chaque pizza est coupée en 8 parts.
99
Chapitre 5 : Opérateurs arithmétiques
+----------------------------------------------------------+
| ORDRE DE PRIORITÉ DES OPÉRATIONS |
+----------------------------------------------------------+
| |
| 1. Parenthèses (les plus internes d'abord) |
| (a + b) * c ==> a+b d'abord, puis *c |
| |
| 2. Puissances |
| 2 + 3^2 ==> 3^2=9, puis 2+9=11 |
| |
| 3. Multiplications, Divisions, MOD, DIV (gauche-droite)|
| 10 / 2 * 3 ==> (10/2)=5, puis 5*3=15 |
| |
| 4. Additions, Soustractions (gauche-droite) |
| 10 - 3 + 2 ==> (10-3)=7, puis 7+2=9 |
| |
+----------------------------------------------------------+
La division entière (DIV) et le modulo (MOD) sont deux opérations complémentaires issues
de la division euclidienne. Pour tout couple d'entiers (a, b) avec b > 0 :
a = b × (a DIV b) + (a MOD b)
100
Chapitre 5 : Opérateurs arithmétiques
Division de 17 par 5 :
17 | 5
-15 +----
--- | 3 <--- 17 DIV 5 = 3 (quotient)
2 <--- 17 MOD 5 = 2 (reste)
Vérification : 17 = 5 * 3 + 2 = 15 + 2 = 17 CORRECT !
101
Chapitre 5 : Opérateurs arithmétiques
ALGORITHME Operateurs_Arithmetiques
VARIABLES
a, b : ENTIER <- 17, 5
quotient, reste : ENTIER
divisionReelle : REEL
DÉBUT
// Division entière (quotient)
quotient <- a DIV b // 17 DIV 5 = 3
AFFICHER a, " DIV ", b, " = ", quotient
// Division réelle
divisionReelle <- CONVERTIR_REEL(a) / CONVERTIR_REEL(b)
// 17.0 / 5.0 = 3.4
AFFICHER a, " / ", b, " = ", divisionReelle
a,b = 17,5 ? ? ? -
102
Chapitre 5 : Opérateurs arithmétiques
ERREURS À ÉVITER
103
Chapitre 5 : Opérateurs arithmétiques
Exercices du Chapitre 5
Calcul mental : Donnez le résultat de : (1) 25 DIV 4, (2) 25 MOD 4, (3) 25 / 4, (4) 100
DIV 10, (5) 7 MOD 2, (6) 7 DIV 2.
Correction
2. 25 MOD 4 = 1 (reste : 25 - 24 = 1)
4. 100 DIV 10 = 10
6. 7 DIV 2 = 3
104
Chapitre 5 : Opérateurs arithmétiques
Correction
1. 3 + (4 * 2) = 3 + 8 = 11
2. 7 * 2 = 14
3. 10 - (6 DIV 2) = 10 - 3 = 7
5. 8 + 9 = 17
105
Chapitre 5 : Opérateurs arithmétiques
Pair ou impair : Écrivez un algorithme qui lit un entier et détermine s'il est pair ou
impair en utilisant MOD.
Correction
ALGORITHME Pair_Impair
VARIABLES n : ENTIER
DÉBUT
AFFICHER "Entrez un entier : " ; LIRE n
SI n MOD 2 = 0 ALORS
AFFICHER n, " est pair."
SINON
AFFICHER n, " est impair."
FIN SI
FIN
Python :
n = int(input("Entier : "))
if n % 2 == 0: print(f"{n} est pair")
else: print(f"{n} est impair")
106
Chapitre 5 : Opérateurs arithmétiques
Correction
ALGORITHME Decomposer_Monnaie
VARIABLES
centimes, reste : ENTIER
nb2e, nb1e, nb50c, nb20c, nb10c, nb5c, nb2c, nb1c : ENTIER
DÉBUT
AFFICHER "Montant en centimes : " ; LIRE centimes
reste <- centimes
nb2e <- reste DIV 200; reste <- reste MOD 200
nb1e <- reste DIV 100; reste <- reste MOD 100
nb50c <- reste DIV 50; reste <- reste MOD 50
nb20c <- reste DIV 20; reste <- reste MOD 20
nb10c <- reste DIV 10; reste <- reste MOD 10
nb5c <- reste DIV 5; reste <- reste MOD 5
nb2c <- reste DIV 2; reste <- reste MOD 2
nb1c <- reste
107
Chapitre 5 : Opérateurs arithmétiques
Moyenne pondérée : Lire trois notes (REEL) et leurs coefficients (ENTIER). Calculer
et afficher la moyenne pondérée avec 2 décimales.
Correction
ALGORITHME Moyenne_Ponderee
VARIABLES
n1, n2, n3 : REEL
c1, c2, c3 : ENTIER
moyenne : REEL
DÉBUT
AFFICHER "Note 1 : " ; LIRE n1
AFFICHER "Coef 1 : " ; LIRE c1
AFFICHER "Note 2 : " ; LIRE n2
AFFICHER "Coef 2 : " ; LIRE c2
AFFICHER "Note 3 : " ; LIRE n3
AFFICHER "Coef 3 : " ; LIRE c3
moyenne <- (n1*c1 + n2*c2 + n3*c3) / (c1 + c2 + c3)
AFFICHER "Moyenne pondérée : ", ARRONDIR(moyenne, 2), "/20"
FIN
108
Chapitre 5 : Opérateurs arithmétiques
Correction
ALGORITHME Inverser_Nombre
VARIABLES n, c, d, u, inverse : ENTIER
DÉBUT
AFFICHER "Nombre à 3 chiffres : " ; LIRE n
c <- n DIV 100 // centaines (4)
d <- (n DIV 10) MOD 10 // dizaines (7)
u <- n MOD 10 // unités (2)
inverse <- u * 100 + d * 10 + c // 2*100 + 7*10 + 4 = 274
AFFICHER "Inversé : ", inverse
FIN
Méthode : DIV 100 isole les centaines, DIV 10 puis MOD 10 isole les dizaines,
MOD 10 isole les unités. On reconstruit en inversant l'ordre.
109
Chapitre 5 : Opérateurs arithmétiques
Correction
ALGORITHME Minutes_Vers_Heures
VARIABLES minutes, h, m : ENTIER
DÉBUT
AFFICHER "Minutes : " ; LIRE minutes
h <- minutes DIV 60
m <- minutes MOD 60
AFFICHER minutes, " min = ", h, "h", m, "min"
// Vérification
AFFICHER "Vérif : ", h * 60 + m, " min"
FIN
110
Chapitre 5 : Opérateurs arithmétiques
Correction
ALGORITHME Rectangle
VARIABLES L, l, perimetre, aire : REEL
DÉBUT
AFFICHER "Longueur : " ; LIRE L
AFFICHER "Largeur : " ; LIRE l
perimetre <- 2 * (L + l)
aire <- L * l
AFFICHER "Périmètre : ", perimetre
AFFICHER "Aire : ", aire
SI L = l ALORS
AFFICHER "C'est un carré !"
FIN SI
FIN
111
Chapitre 5 : Opérateurs arithmétiques
Correction
ALGORITHME Format_Heure
VARIABLES sec, h, m, s : ENTIER
DÉBUT
AFFICHER "Secondes : " ; LIRE sec
h <- sec DIV 3600
m <- (sec MOD 3600) DIV 60
s <- sec MOD 60
AFFICHER h, ":", m, ":", s
FIN
Python :
112
Chapitre 5 : Opérateurs arithmétiques
Somme des chiffres : Lire un nombre ENTIER à 4 chiffres (ex: 4729). Calculer la
somme de ses chiffres (4+7+2+9 = 22) en utilisant uniquement DIV et MOD.
Correction
ALGORITHME Somme_Chiffres
VARIABLES n, somme, chiffre : ENTIER
DÉBUT
AFFICHER "Nombre à 4 chiffres : " ; LIRE n
somme <- 0
113
Chapitre 5 : Opérateurs arithmétiques
Convertisseur d'unités complet : Lire une température et son unité ('C', 'F', ou 'K').
Convertir dans les deux autres unités. Formules : F = C × 9/5 + 32, K = C +
273.15, C = (F − 32) × 5/9, C = K − 273.15.
Correction
ALGORITHME Convertisseur_Temperature
VARIABLES
temp, celsius, fahrenheit, kelvin : REEL
unite : CARACTERE
DÉBUT
AFFICHER "Température : " ; LIRE temp
AFFICHER "Unité (C/F/K) : " ; LIRE unite
114
Chapitre 5 : Opérateurs arithmétiques
Correction
ALGORITHME Date_Paques
VARIABLES
annee, a, b, c, d, e, f, g, h, i, k, l, m : ENTIER
mois, jour : ENTIER
DÉBUT
AFFICHER "Année : " ; LIRE annee
Python :
115
Chapitre 5 : Opérateurs arithmétiques
Méthode : Cet algorithme, publié par l'astronome Jean Meeus, calcule la date
de Pâques gr&e226;ce à une série de divisions euclidiennes. Il illustre
parfaitement l'usage intensif de DIV et MOD. Chaque variable intermédiaire
sert à isoler un aspect du calendrier lunaire.
Validation du Chapitre 5
116
Chapitre 6 : Conditions (SI, SINON, SINON SI)
CHAPITRE 6
Structures conditionnelles
DÉFINITION
117
Chapitre 6 : Conditions (SI, SINON, SINON SI)
OBJECTIFS
LE DISTRIBUTEUR DE BILLETS
SI votre solde >= 200 ALORS le distributeur vous donne les billets
= Égal à x = 5 VRAI
118
Chapitre 6 : Conditions (SI, SINON, SINON SI)
Table de vérité de ET :
+-------+-------+----------+
| A | B | A ET B |
+-------+-------+----------+
| VRAI | VRAI | VRAI |
| VRAI | FAUX | FAUX |
| FAUX | VRAI | FAUX |
| FAUX | FAUX | FAUX |
+-------+-------+----------+
Table de vérité de OU :
+-------+-------+----------+
| A | B | A OU B |
+-------+-------+----------+
| VRAI | VRAI | VRAI |
| VRAI | FAUX | VRAI |
| FAUX | VRAI | VRAI |
| FAUX | FAUX | FAUX |
+-------+-------+----------+
119
Chapitre 6 : Conditions (SI, SINON, SINON SI)
+------------------+
| CONDITION ? |
+------------------+
VRAI / \ FAUX
/ \
+------+ +------+
| Bloc | | Bloc |
| Vrai | | Faux |
+------+ +------+
\ /
+------+
| Suite|
+------+
SINON SI (multiple) :
6.5 Pseudo-code
120
Chapitre 6 : Conditions (SI, SINON, SINON SI)
ALGORITHME Conditions
VARIABLES age, revenus : ENTIER
DÉBUT
AFFICHER "Age : " ; LIRE age
AFFICHER "Revenus mensuels : " ; LIRE revenus
121
Chapitre 6 : Conditions (SI, SINON, SINON SI)
ERREURS À ÉVITER
Comparer des réels avec = : x = 0.1 peut être faux à cause des
imprécisions flottantes.
Parenthèses oubliées : age >= 18 ET revenus >= 1500 peut être ambigu.
Préférer (age >= 18) ET (revenus >= 1500) .
6.8 Résumé
122
Chapitre 6 : Conditions (SI, SINON, SINON SI)
POINTS CLÉS
SI ... ALORS ... SINON ... FIN SI : choix entre deux blocs
SI ... ALORS ... SINON SI ... SINON ... FIN SI : choix multiple
Exercices du Chapitre 6
ALGORITHME Max2
VARIABLES a, b : REEL
DÉBUT
AFFICHER "a : " ; LIRE a
AFFICHER "b : " ; LIRE b
SI a > b ALORS AFFICHER "Max : ", a
SINON AFFICHER "Max : ", b FIN SI
FIN
123
Chapitre 6 : Conditions (SI, SINON, SINON SI)
Signe d'un nombre : Lire un nombre. Afficher s'il est positif, négatif ou nul.
ALGORITHME Signe
VARIABLES x : REEL
DÉBUT
AFFICHER "x : " ; LIRE x
SI x > 0 ALORS AFFICHER "Positif"
SINON SI x < 0 ALORS AFFICHER "Négatif"
SINON AFFICHER "Nul" FIN SI
FIN
Mention au bac : Lire une moyenne sur 20. Afficher la mention : Très Bien (>=16),
Bien (>=14), Assez Bien (>=12), Passable (>=10), Refus (<10).
ALGORITHME Mention_Bac
VARIABLES moy : REEL
DÉBUT
AFFICHER "Moyenne /20 : " ; LIRE moy
SI moy >= 16 ALORS AFFICHER "Très Bien"
SINON SI moy >= 14 ALORS AFFICHER "Bien"
SINON SI moy >= 12 ALORS AFFICHER "Assez Bien"
SINON SI moy >= 10 ALORS AFFICHER "Passable"
SINON AFFICHER "Refus" FIN SI
FIN
124
Chapitre 6 : Conditions (SI, SINON, SINON SI)
Année bissextile : Une année est bissextile si divisible par 4, sauf si divisible par
100 mais pas par 400. Tester avec 2024, 1900, 2000.
ALGORITHME Bissextile
VARIABLES annee : ENTIER
DÉBUT
AFFICHER "Année : " ; LIRE annee
SI (annee MOD 400 = 0) OU ((annee MOD 4 = 0) ET (annee MOD
100 <> 0)) ALORS
AFFICHER annee, " est bissextile."
SINON
AFFICHER annee, " n'est pas bissextile."
FIN SI
FIN
Python :
125
Chapitre 6 : Conditions (SI, SINON, SINON SI)
Maximum de trois nombres : Lire trois nombres et afficher le plus grand sans
utiliser de fonction max.
ALGORITHME Max3
VARIABLES a, b, c, max : REEL
DÉBUT
AFFICHER "a b c : " ; LIRE a ; LIRE b ; LIRE c
max <- a
SI b > max ALORS max <- b FIN SI
SI c > max ALORS max <- c FIN SI
AFFICHER "Maximum : ", max
FIN
126
Chapitre 6 : Conditions (SI, SINON, SINON SI)
Calculateur d'impôt simplifié : Les tranches d'imposition sont : jusqu'à 11294 EUR
= 0%, 11295-28797 = 11%, 28798-82341 = 30%, 82342-177106 = 41%, au-delà = 45%.
Calculer l'impôt dû sur le revenu entré.
ALGORITHME Impot
VARIABLES revenu, impot : REEL
DÉBUT
AFFICHER "Revenu annuel : " ; LIRE revenu
SI revenu <= 11294 ALORS
impot <- 0
SINON SI revenu <= 28797 ALORS
impot <- (revenu - 11294) * 0.11
SINON SI revenu <= 82341 ALORS
impot <- (28797-11294)*0.11 + (revenu-28797)*0.30
SINON SI revenu <= 177106 ALORS
impot <- (28797-11294)*0.11 + (82341-28797)*0.30 +
(revenu-82341)*0.41
SINON
impot <- (28797-11294)*0.11 + (82341-28797)*0.30 +
(177106-82341)*0.41 + (revenu-177106)*0.45
FIN SI
AFFICHER "Impôt : ", ARRONDIR(impot, 2), " EUR"
FIN
Python :
127
Chapitre 6 : Conditions (SI, SINON, SINON SI)
Jeu : deviner un nombre : Le nombre à deviner est 42. Lire un essai. Afficher "Trop
grand", "Trop petit" ou "Gagné !".
ALGORITHME Deviner
CONST CIBLE : ENTIER <- 42
VARIABLES essai : ENTIER
DÉBUT
AFFICHER "Devinez le nombre : " ; LIRE essai
SI essai = CIBLE ALORS
AFFICHER "Gagné !"
SINON SI essai > CIBLE ALORS
AFFICHER "Trop grand !"
SINON
AFFICHER "Trop petit !"
FIN SI
FIN
128
Chapitre 6 : Conditions (SI, SINON, SINON SI)
Valider une date : Lire un jour, un mois, une année. Vérifier que c'est une date
valide (tenir compte des années bissextiles pour février).
ALGORITHME Valider_Date
VARIABLES j, m, a, maxJours : ENTIER
estBissextile : BOOLEEN
valide : BOOLEEN <- VRAI
DÉBUT
AFFICHER "Jour Mois Annee : " ; LIRE j ; LIRE m ; LIRE a
129
Chapitre 6 : Conditions (SI, SINON, SINON SI)
ALGORITHME Equation_Premier_Degre
VARIABLES a, b : REEL
DÉBUT
AFFICHER "a : " ; LIRE a
AFFICHER "b : " ; LIRE b
SI a <> 0 ALORS
AFFICHER "Solution : x = ", -b / a
SINON SI b = 0 ALORS
AFFICHER "Infinité de solutions"
SINON
AFFICHER "Pas de solution"
FIN SI
FIN
130
Chapitre 6 : Conditions (SI, SINON, SINON SI)
Tri de trois nombres : Lire trois nombres et les afficher dans l'ordre croissant sans
utiliser de tableau.
ALGORITHME Tri3
VARIABLES a, b, c, temp : REEL
DÉBUT
AFFICHER "a b c : " ; LIRE a ; LIRE b ; LIRE c
SI a > b ALORS temp <- a; a <- b; b <- temp FIN SI
SI b > c ALORS temp <- b; b <- c; c <- temp FIN SI
SI a > b ALORS temp <- a; a <- b; b <- temp FIN SI
AFFICHER "Ordre : ", a, " <= ", b, " <= ", c
FIN
131
Chapitre 6 : Conditions (SI, SINON, SINON SI)
ALGORITHME Machine_Calculer
VARIABLES a, b, resultat : REEL
op : CARACTERE
DÉBUT
AFFICHER "Nombre 1 : " ; LIRE a
AFFICHER "Opérateur (+,-,*,/,D,M) : " ; LIRE op
AFFICHER "Nombre 2 : " ; LIRE b
132
Chapitre 6 : Conditions (SI, SINON, SINON SI)
ALGORITHME Equation_Second_Degre
VARIABLES a, b, c, delta, x1, x2 : REEL
DÉBUT
AFFICHER "a : " ; LIRE a
AFFICHER "b : " ; LIRE b
AFFICHER "c : " ; LIRE c
SI a = 0 ALORS
AFFICHER "Ce n'est pas une équation du second degré."
SINON
delta <- b*b - 4*a*c
AFFICHER "Delta = ", delta
Python :
133
Chapitre 6 : Conditions (SI, SINON, SINON SI)
import math
a = float(input("a : "))
b = float(input("b : "))
c = float(input("c : "))
if a == 0:
print("Ce n'est pas un polynome du 2nd degre")
else:
delta = b**2 - 4*a*c
print(f"Delta = {delta}")
if delta > 0:
x1 = (-b - [Link](delta)) / (2*a)
x2 = (-b + [Link](delta)) / (2*a)
print(f"x1 = {x1:.4f}, x2 = {x2:.4f}")
elif delta == 0:
x = -b / (2*a)
print(f"Solution double : x = {x:.4f}")
else:
print("Solutions complexes")
print(f"x1 = {-b/(2*a):.4f} - {[Link](-
delta)/(2*a):.4f}i")
print(f"x2 = {-b/(2*a):.4f} + {[Link](-
delta)/(2*a):.4f}i")
134
Chapitre 6 : Conditions (SI, SINON, SINON SI)
Validation du Chapitre 6
Conditions imbriquées
135
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
CHAPITRE 7
Structures itératives
DÉFINITION
Une boucle est une structure qui permet de répéter un bloc d'instructions
plusieurs fois. Au lieu d'écrire 100 fois la même instruction, on écrit une boucle
qui s'exécute 100 fois. C'est le concept le plus puissant de l'algorithmique :
résoudre des problèmes de taille arbitraire avec un code de taille fixe.
7.2 Objectif
136
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
OBJECTIFS
137
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
138
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
// Exemple : afficher 1 à 5
POUR i DE 1 A 5 FAIRE
AFFICHER i // Affiche 1, 2, 3, 4, 5
FIN POUR
// Exemple : confirmation
REPETER
AFFICHER "Voulez-vous continuer (O/N) ? "
LIRE reponse
JUSQU'A (reponse = 'O') OU (reponse = 'N')
139
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
140
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
ALGORITHME Boucles_Demo
VARIABLES
i, somme, n, factorielle : ENTIER
saisie : REEL
DÉBUT
// --- POUR : Somme de 1 à 100 ---
somme <- 0
POUR i DE 1 A 100 FAIRE
somme <- somme + i // Accumulateur
FIN POUR
AFFICHER "Somme 1..100 = ", somme // 5050
141
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
Initial - - 0
1 1 0 0+1=1
2 2 1 1+2=3
3 3 3 3+3=6
4 4 6 6+4=10
5 5 10 10+5=15
ERREURS À ÉVITER
7.8 Résumé
142
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
POINTS CLÉS
TANT QUE : test avant. Peut ne pas s'exécuter. Risque de boucle infinie si la
condition ne change jamais.
Exercices du Chapitre 7
ALGORITHME Table_Multiplication
VARIABLES n, i : ENTIER
DÉBUT
AFFICHER "n : " ; LIRE n
POUR i DE 1 A 10 FAIRE
AFFICHER n, " x ", i, " = ", n * i
FIN POUR
FIN
143
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
Compteur pair : Afficher tous les nombres pairs de 2 à 20 avec POUR PAS 2.
ALGORITHME Compteur_Pair
VARIABLES i : ENTIER
DÉBUT
POUR i DE 2 A 20 PAS 2 FAIRE
AFFICHER i
FIN POUR
FIN
Saisie contrôlée : Lire un nombre entre 1 et 100. Re-demander tant que la valeur
est invalide (TANT QUE).
ALGORITHME Saisie_Controlee
VARIABLES n : ENTIER
DÉBUT
n <- -1
TANT QUE (n < 1) OU (n > 100) FAIRE
AFFICHER "Nombre (1-100) : " ; LIRE n
FIN TANT QUE
AFFICHER "Vous avez saisi : ", n
FIN
144
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
Somme des entiers jusqu'à n : Lire n. Calculer 1 + 2 + ... + n avec POUR. Vérifier
avec la formule n(n+1)/2.
ALGORITHME Somme_JusquaN
VARIABLES n, i, somme : ENTIER
DÉBUT
AFFICHER "n : " ; LIRE n
somme <- 0
POUR i DE 1 A n FAIRE
somme <- somme + i
FIN POUR
AFFICHER "Somme boucle : ", somme
AFFICHER "Formule : ", n * (n + 1) DIV 2
FIN
145
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
ALGORITHME Nombre_Chiffres
VARIABLES n, compteur : ENTIER
DÉBUT
AFFICHER "n : " ; LIRE n
compteur <- 0
TANT QUE n > 0 FAIRE
n <- n DIV 10
compteur <- compteur + 1
FIN TANT QUE
AFFICHER "Nombre de chiffres : ", compteur
FIN
146
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
Jeu deviner avec compteur : Le nombre à deviner est 42. Lire des essais jusqu'à
trouver. Afficher "Gagné en X essais !". Comptez les essais.
ALGORITHME Deviner_Compteur
CONST CIBLE : ENTIER <- 42
VARIABLES essai, nbEssais : ENTIER
DÉBUT
nbEssais <- 0
REPETER
AFFICHER "Votre essai : " ; LIRE essai
nbEssais <- nbEssais + 1
SI essai > CIBLE ALORS AFFICHER "Trop grand"
SINON SI essai < CIBLE ALORS AFFICHER "Trop petit" FIN
SI
JUSQU'A essai = CIBLE
AFFICHER "Gagné en ", nbEssais, " essais !"
FIN
147
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
ALGORITHME Premier
VARIABLES n, i : ENTIER
estPremier : BOOLEEN <- VRAI
DÉBUT
AFFICHER "n : " ; LIRE n
SI n <= 1 ALORS estPremier <- FAUX
SINON
POUR i DE 2 A RACINE(n) FAIRE
SI n MOD i = 0 ALORS
estPremier <- FAUX
i <- RACINE(n) // Sortie anticipée
FIN SI
FIN POUR
FIN SI
SI estPremier ALORS AFFICHER n, " est premier"
SINON AFFICHER n, " n'est pas premier" FIN SI
FIN
Python :
import math
n = int(input("n : "))
est_premier = n > 1
for i in range(2, int([Link](n)) + 1):
if n % i == 0:
est_premier = False
break
print(f"{n} est premier : {est_premier}")
148
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
ALGORITHME Factorielle_Validee
VARIABLES n, i, fact : ENTIER
DÉBUT
REPETER
AFFICHER "n (>=0) : " ; LIRE n
JUSQU'A n >= 0
fact <- 1
POUR i DE 1 A n FAIRE
fact <- fact * i
FIN POUR
AFFICHER n, "! = ", fact
FIN
149
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
1, Fn = Fn−1 + Fn−2 .
ALGORITHME Fibonacci
VARIABLES f0, f1, f2, i : ENTIER
DÉBUT
f0 <- 0; f1 <- 1
AFFICHER f0, " ", f1, " "
POUR i DE 2 A 19 FAIRE
f2 <- f0 + f1
AFFICHER f2, " "
f0 <- f1
f1 <- f2
FIN POUR
FIN
Python :
f0, f1 = 0, 1
print(f0, f1, end=" ")
for i in range(2, 20):
f2 = f0 + f1
print(f2, end=" ")
f0, f1 = f1, f2
150
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
ALGORITHME Puissance
VARIABLES x, resultat : REEL
n, i, exp : ENTIER
DÉBUT
AFFICHER "x : " ; LIRE x
AFFICHER "n : " ; LIRE n
resultat <- 1
POUR i DE 1 A exp FAIRE
resultat <- resultat * x
FIN POUR
151
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
ALGORITHME Calculatrice_Menu
VARIABLES a, b, resultat : REEL
choix : ENTIER
DÉBUT
REPETER
AFFICHER "\n=== CALCULATRICE ==="
AFFICHER "1. Addition"
AFFICHER "2. Soustraction"
AFFICHER "3. Multiplication"
AFFICHER "4. Division"
AFFICHER "5. Quitter"
AFFICHER "Choix : " ; LIRE choix
choix vaut
1: resultat <- a + b
2: resultat <- a - b
3: resultat <- a * b
4: SI b <> 0 ALORS resultat <- a / b
SINON AFFICHER "Div par 0 !" FIN SI
5: AFFICHER "Au revoir !"
SINON: AFFICHER "Choix invalide"
152
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
153
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
ALGORITHME Dessin_Formes
VARIABLES n, i, j : ENTIER
DÉBUT
AFFICHER "n : " ; LIRE n
// Triangle rectangle
AFFICHER "--- Triangle rectangle ---"
POUR i DE 1 A n FAIRE
POUR j DE 1 A i FAIRE
AFFICHER_SANS_RETOUR "* "
FIN POUR
AFFICHER "" // Saut de ligne
FIN POUR
// Carré
AFFICHER "--- Carré ---"
POUR i DE 1 A n FAIRE
POUR j DE 1 A n FAIRE
AFFICHER_SANS_RETOUR "* "
FIN POUR
AFFICHER ""
FIN POUR
// Triangle isocèle
AFFICHER "--- Triangle isocèle ---"
POUR i DE 1 A n FAIRE
// Espaces
POUR j DE 1 A (n - i) FAIRE
AFFICHER_SANS_RETOUR " "
FIN POUR
// Étoiles
POUR j DE 1 A (2*i - 1) FAIRE
AFFICHER_SANS_RETOUR "* "
FIN POUR
AFFICHER ""
FIN POUR
FIN
Python :
154
Chapitre 7 : Boucles (POUR, TANT QUE, RÉPÉTER)
n = int(input("n : "))
# Triangle rectangle
for i in range(1, n+1):
print("* " * i)
# Carre
for i in range(n):
print("* " * n)
# Triangle isocele
for i in range(1, n+1):
print(" " * (n-i) + "* " * (2*i-1))
Validation du Chapitre 7
Boucles imbriquées
155
Chapitre 8 : Fonctions et procédures
CHAPITRE 8
Fonctions et procédures
DÉFINITIONS
Une fonction est un bloc d'instructions nommé qui effectue une tâche et retourne
une valeur. C'est comme une machine : on lui donne des ingrédients (paramètres),
elle travaille et nous rend un résultat. Exemple : la fonction "maximum" prend
deux nombres et retourne le plus grand.
Une procédure est un bloc d'instructions nommé qui effectue une tâche mais ne
retourne rien. C'est comme une instruction : on l'appelle et elle fait son travail.
Exemple : une procédure "afficherMenu" affiche un menu à l'écran sans retourner
de valeur.
8.2 Objectif
156
Chapitre 8 : Fonctions et procédures
OBJECTIFS
LA PIZZERIA
157
Chapitre 8 : Fonctions et procédures
+----------------------------------+
| ALGORITHME PRINCIPAL |
| |
| r <- maximum(10, 20) ------->+---------+ +---------+
| afficherResultat(r) ------> | Fonction| |Procedure|
| afficherMenu() ------> | maximum | |afficherR|
| | a, b | | val |
+----------------------------------+---------+ +---------+
| Appels | | |
| | v v
| retourne Affichage
v max(a,b) à l'écran
+----------------------------------+
| Fonction maximum(a, b) |
| SI a > b ALORS retourne a |
| SINON retourne b |
+----------------------------------+
Paramètre effectif Valeur passée lors de l'appel maximum(10, 20) → a=10, b=20
8.5 Pseudo-code
158
Chapitre 8 : Fonctions et procédures
159
Chapitre 8 : Fonctions et procédures
160
Chapitre 8 : Fonctions et procédures
3 RETOURNE b 15 22 22
ERREURS À ÉVITER
8.8 Résumé
161
Chapitre 8 : Fonctions et procédures
POINTS CLÉS
Exercices du Chapitre 8
Fonction carré : Écrivez une fonction carre(x : REEL) : REEL qui retourne x2 .
Appelez-la pour calculer le carré de 5 et de 3.14.
// Appel
ALGORITHME Test
AFFICHER "Carré de 5 : ", carre(5) // 25
AFFICHER "Carré de 3.14 : ", carre(3.14) // 9.8596
FIN
162
Chapitre 8 : Fonctions et procédures
ALGORITHME Test
ligne(30)
AFFICHER " TITRE CENTRE"
ligne(30)
FIN
Fonction estPair : Écrivez une fonction booléenne qui retourne VRAI si un entier
est pair.
// Appels
AFFICHER estPair(4) // VRAI
AFFICHER estPair(7) // FAUX
163
Chapitre 8 : Fonctions et procédures
Fonction PGCD (Euclide) : Écrivez une fonction qui calcule le PGCD de deux entiers
par l'algorithme d'Euclide.
Python :
164
Chapitre 8 : Fonctions et procédures
// Version itérative
FONCTION fact(n : ENTIER) : ENTIER
VARIABLES i, resultat : ENTIER
resultat <- 1
POUR i DE 1 A n FAIRE
resultat <- resultat * i
FIN POUR
RETOURNE resultat
FIN FONCTION
// Version récursive
FONCTION factRec(n : ENTIER) : ENTIER
SI n <= 1 ALORS
RETOURNE 1
SINON
RETOURNE n * factRec(n - 1)
FIN SI
FIN FONCTION
165
Chapitre 8 : Fonctions et procédures
Fonction estPremier : Écrivez une fonction booléenne qui teste si un nombre est
premier. Optimisez avec RACINE(n).
166
Chapitre 8 : Fonctions et procédures
Fonction puissance rapide : Écrivez une fonction récursive qui calcule xn par
exponentiation rapide.
Python :
167
Chapitre 8 : Fonctions et procédures
168
Chapitre 8 : Fonctions et procédures
Fonction conversion base : Écrivez une fonction qui convertit un entier en chaîne
représentant sa forme dans une base (2 à 16).
Python :
169
Chapitre 8 : Fonctions et procédures
170
Chapitre 8 : Fonctions et procédures
choix vaut
1: LIRE a, b; AFFICHER somme(a, b)
2: LIRE a, b; AFFICHER difference(a, b)
3: LIRE a, b; AFFICHER produit(a, b)
4: LIRE a, b; AFFICHER quotient(a, b)
5: LIRE a, b; AFFICHER puissance(a, b)
6: LIRE a; AFFICHER factorielle(a)
7: LIRE a; AFFICHER estPremier(a)
8: AFFICHER "Au revoir !"
SINON: AFFICHER "Choix invalide"
171
Chapitre 8 : Fonctions et procédures
Tours de Hanoï récursif : Écrivez une procédure récursive qui résout les tours de
Hanoï (déplacer n disques de la tour A à la tour C en utilisant B comme
intermédiaire). Afficher chaque mouvement.
Python :
hanoi(3)
172
Chapitre 8 : Fonctions et procédures
Validation du Chapitre 8
Récursivité de base
173
Chapitre 9 : Tableaux à une dimension
CHAPITRE 9
DÉFINITION
Un tableau (ou array en anglais) est une structure de données qui permet de
stocker plusieurs valeurs du même type sous un seul nom, en les organisant de
manière séquentielle. C'est comme une armoire avec des cases numérotées :
chaque case contient une valeur, et on accède à une valeur grâce à son numéro de
case (indice).
9.2 Objectif
174
Chapitre 9 : Tableaux à une dimension
OBJECTIFS
175
Chapitre 9 : Tableaux à une dimension
Indice : 0 1 2 3 4
+------+------+------+------+------+
| 12.5 | 15.0 | 8.5 | 14.0 | 11.0 |
+------+------+------+------+------+
notes[0] = 12.5
notes[1] = 15.0
notes[2] = 8.5
notes[3] = 14.0
notes[4] = 11.0
TAILLE(notes) = 5
9.5 Pseudo-code
176
Chapitre 9 : Tableaux à une dimension
ALGORITHME Tableaux_Demo
// Déclaration
notes : TABLEAU[5] DE REEL
i : ENTIER
somme, moyenne : REEL
max, indiceMax : ENTIER
DÉBUT
// --- REMPLISSAGE (saisie) ---
AFFICHER "=== Saisie des 5 notes ==="
POUR i DE 0 A 4 FAIRE // Indices de 0 à 4
AFFICHER "Note ", i+1, " : "
LIRE notes[i]
FIN POUR
177
Chapitre 9 : Tableaux à une dimension
Initial - [12,15,8,14,11] 0 12 0
Calcul somme 0 12 12 - -
Calcul somme 1 15 27 15 1
Calcul somme 2 8 35 - -
Calcul somme 3 14 49 - -
Calcul somme 4 11 60 - -
ERREURS À ÉVITER
9.8 Résumé
178
Chapitre 9 : Tableaux à une dimension
POINTS CLÉS
Exercices du Chapitre 9
ALGORITHME Remplir_Afficher
tab : TABLEAU[5] DE ENTIER
i : ENTIER
DÉBUT
POUR i DE 0 A 4 FAIRE
AFFICHER "valeur ", i, " : " ; LIRE tab[i]
FIN POUR
POUR i DE 0 A 4 FAIRE
AFFICHER tab[i]
FIN POUR
FIN
179
Chapitre 9 : Tableaux à une dimension
ALGORITHME Somme_Moyenne
tab : TABLEAU[10] DE REEL
i : ENTIER; somme, moy : REEL
DÉBUT
// saisie
POUR i DE 0 A 9 FAIRE LIRE tab[i] FIN POUR
// calcul
somme <- 0
POUR i DE 0 A 9 FAIRE somme <- somme + tab[i] FIN POUR
moy <- somme / 10
AFFICHER "Somme=", somme, " Moy=", moy
FIN
180
Chapitre 9 : Tableaux à une dimension
ALGORITHME Max_Min
tab : TABLEAU[8] DE ENTIER
i, max, min, iMax, iMin : ENTIER
DÉBUT
POUR i DE 0 A 7 FAIRE LIRE tab[i] FIN POUR
max <- tab[0]; min <- tab[0]; iMax <- 0; iMin <- 0
POUR i DE 1 A 7 FAIRE
SI tab[i] > max ALORS max <- tab[i]; iMax <- i FIN SI
SI tab[i] < min ALORS min <- tab[i]; iMin <- i FIN SI
FIN POUR
AFFICHER "Max=", max, " (", iMax, ") Min=", min, " (",
iMin, ")"
FIN
181
Chapitre 9 : Tableaux à une dimension
ALGORITHME Comptage_Superieur_Moyenne
tab : TABLEAU[10] DE REEL
i, compteur : ENTIER; somme, moy : REEL
DÉBUT
POUR i DE 0 A 9 FAIRE LIRE tab[i]; somme <- somme + tab[i]
FIN POUR
moy <- somme / 10
compteur <- 0
POUR i DE 0 A 9 FAIRE
SI tab[i] > moy ALORS compteur <- compteur + 1 FIN SI
FIN POUR
AFFICHER compteur, " éléments > ", moy
FIN
182
Chapitre 9 : Tableaux à une dimension
Recherche d'un élément : Lire un tableau de 6 entiers, puis lire une valeur à
chercher. Afficher si elle est présente et à quel(s) indice(s).
ALGORITHME Recherche
tab : TABLEAU[6] DE ENTIER
i, val : ENTIER; trouve : BOOLEEN
DÉBUT
POUR i DE 0 A 5 FAIRE LIRE tab[i] FIN POUR
AFFICHER "Valeur à chercher : " ; LIRE val
trouve <- FAUX
POUR i DE 0 A 5 FAIRE
SI tab[i] = val ALORS
AFFICHER "Trouvé à l'indice ", i
trouve <- VRAI
FIN SI
FIN POUR
SI NON trouve ALORS AFFICHER "Non trouvé" FIN SI
FIN
183
Chapitre 9 : Tableaux à une dimension
Inversion : Inverser un tableau en place (le premier devient dernier, etc.). Afficher
avant et après.
ALGORITHME Inverser
tab : TABLEAU[6] DE ENTIER
i, temp, milieu : ENTIER
DÉBUT
POUR i DE 0 A 5 FAIRE LIRE tab[i] FIN POUR
milieu <- TAILLE(tab) DIV 2
POUR i DE 0 A milieu - 1 FAIRE
temp <- tab[i]
tab[i] <- tab[TAILLE(tab) - 1 - i]
tab[TAILLE(tab) - 1 - i] <- temp
FIN POUR
POUR i DE 0 A 5 FAIRE AFFICHER tab[i] FIN POUR
FIN
Méthode : On échange tab[0] avec tab[N-1], tab[1] avec tab[N-2], etc. jusqu'au
milieu du tableau.
184
Chapitre 9 : Tableaux à une dimension
ALGORITHME Palindrome
tab : TABLEAU[5] DE CARACTERE
i : ENTIER; estPalindrome : BOOLEEN
DÉBUT
POUR i DE 0 A 4 FAIRE LIRE tab[i] FIN POUR
estPalindrome <- VRAI
POUR i DE 0 A 2 FAIRE
SI tab[i] <> tab[4 - i] ALORS
estPalindrome <- FAUX
FIN SI
FIN POUR
AFFICHER "Palindrome : ", estPalindrome
FIN
185
Chapitre 9 : Tableaux à une dimension
ALGORITHME Decalage_Circulaire
tab : TABLEAU[6] DE ENTIER
i, dernier : ENTIER
DÉBUT
POUR i DE 0 A 5 FAIRE LIRE tab[i] FIN POUR
dernier <- tab[TAILLE(tab) - 1]
POUR i DE TAILLE(tab) - 1 A 1 (PAS -1) FAIRE
tab[i] <- tab[i - 1]
FIN POUR
tab[0] <- dernier
POUR i DE 0 A 5 FAIRE AFFICHER tab[i] FIN POUR
FIN
186
Chapitre 9 : Tableaux à une dimension
ALGORITHME Fusion
A : TABLEAU[4] DE ENTIER <- [1, 3, 5, 7]
B : TABLEAU[3] DE ENTIER <- [2, 4, 6]
C : TABLEAU[7] DE ENTIER
i, j, k : ENTIER
DÉBUT
i <- 0; j <- 0; k <- 0
TANT QUE i < TAILLE(A) ET j < TAILLE(B) FAIRE
SI A[i] < B[j] ALORS
C[k] <- A[i]; i <- i + 1
SINON
C[k] <- B[j]; j <- j + 1
FIN SI
k <- k + 1
FIN TANT QUE
// Copier le reste
TANT QUE i < TAILLE(A) FAIRE C[k] <- A[i]; i <- i+1; k <-
k+1 FIN TANT QUE
TANT QUE j < TAILLE(B) FAIRE C[k] <- B[j]; j <- j+1; k <-
k+1 FIN TANT QUE
POUR k DE 0 A 6 FAIRE AFFICHER C[k] FIN POUR
FIN
187
Chapitre 9 : Tableaux à une dimension
Tri par sélection : Trier un tableau par ordre croissant par la méthode du tri par
sélection (chercher le min, le placer au début, recommencer).
ALGORITHME Tri_Selection
tab : TABLEAU[6] DE ENTIER
i, j, minIndex, temp : ENTIER
DÉBUT
POUR i DE 0 A 5 FAIRE LIRE tab[i] FIN POUR
Python :
188
Chapitre 9 : Tableaux à une dimension
Gestion des notes d'une classe : Tableau de 20 notes. Menu : 1=Saisir, 2=Afficher,
3=Moyenne, 4=Max/Min, 5=Nombre au-dessus de 10, 6=Trier, 7=Quitter.
ALGORITHME Gestion_Notes
notes : TABLEAU[20] DE REEL
choix, i, compteur : ENTIER
somme, moy : REEL
DÉBUT
REPETER
AFFICHER "\[Link] [Link] [Link] [Link] 5>10
[Link] [Link]"
AFFICHER "Choix : " ; LIRE choix
choix vaut
1: POUR i DE 0 A 19 FAIRE
AFFICHER "Note ", i+1, " : " ; LIRE notes[i]
FIN POUR
2: POUR i DE 0 A 19 FAIRE AFFICHER notes[i], " "
FIN POUR
3: somme <- 0
POUR i DE 0 A 19 FAIRE somme <- somme + notes[i]
FIN POUR
AFFICHER "Moy : ", somme/20
4: // Max et Min avec leurs indices
// (code similaire à l'exercice 9.3)
5: compteur <- 0
POUR i DE 0 A 19 FAIRE
SI notes[i] >= 10 ALORS compteur <- compteur
+ 1 FIN SI
FIN POUR
AFFICHER compteur, " élèves ont la moyenne"
6: // Tri par sélection
// (code similaire à l'exercice 9.10)
7: AFFICHER "Au revoir"
SINON: AFFICHER "Choix invalide"
JUSQU'A choix = 7
FIN
189
Chapitre 9 : Tableaux à une dimension
N
190
Chapitre 9 : Tableaux à une dimension
ALGORITHME Statistiques_Temperatures
tab : TABLEAU[20] DE REEL
i, j, minIdx : ENTIER
somme, moy, variance, ecartType : REEL
temp : REEL
DÉBUT
// Saisie
POUR i DE 0 A 19 FAIRE
AFFICHER "Temp ", i+1, " : " ; LIRE tab[i]
FIN POUR
N <- TAILLE(tab)
// Moyenne
somme <- 0
POUR i DE 0 A N-1 FAIRE somme <- somme + tab[i] FIN POUR
moy <- somme / N
// Médiane
med <- (tab[N DIV 2 - 1] + tab[N DIV 2]) / 2 // pour N
pair
// Ecart-type
variance <- 0
POUR i DE 0 A N-1 FAIRE
variance <- variance + (tab[i] - moy) * (tab[i] - moy)
FIN POUR
variance <- variance / N
ecartType <- RACINE(variance)
191
Chapitre 9 : Tableaux à une dimension
Python :
import math
Validation du Chapitre 9
192
Chapitre 10 : Chaînes de caractères
CHAPITRE 10
Chaînes de caractères
DÉFINITION
10.2 Objectif
OBJECTIFS
193
Chapitre 10 : Chaînes de caractères
Indice : 0 1 2 3 4 5 6
+------+------+------+------+------+------+------+
| 'B' | 'o' | 'n' | 'j' | 'o' | 'u' | 'r' |
+------+------+------+------+------+------+------+
LONGUEUR(message) = 7
CARACTERE_A(message, 0) = 'B'
CARACTERE_A(message, 3) = 'j'
SOUS_CHAINE(message, 0, 3) = "Bon" (indice 0, longueur 3)
SOUS_CHAINE(message, 3, 4) = "jour" (indice 3, longueur 4)
194
Chapitre 10 : Chaînes de caractères
10.5 Pseudo-code
195
Chapitre 10 : Chaînes de caractères
ALGORITHME Chaines_Demo
VARIABLES
prenom, nom, complet : CHAINE
i, nbVoyelles : ENTIER
c : CARACTERE
inverse : CHAINE
DÉBUT
// Concaténation
prenom <- "Alice"
nom <- "DUPONT"
complet <- prenom + " " + nom // "Alice DUPONT"
AFFICHER complet
// Longueur
AFFICHER "Longueur : ", LONGUEUR(complet)
// Parcours et comptage
nbVoyelles <- 0
POUR i DE 0 A LONGUEUR(complet) - 1 FAIRE
c <- CARACTERE_A(complet, i)
SI c = 'a' OU c = 'e' OU c = 'i' OU c = 'o' OU c = 'u' OU
c = 'A' OU c = 'E' OU c = 'I' OU c = 'O' OU c = 'U'
ALORS
nbVoyelles <- nbVoyelles + 1
FIN SI
FIN POUR
AFFICHER "Voyelles : ", nbVoyelles
// Inversion
inverse <- ""
POUR i DE LONGUEUR(complet) - 1 A 0 (PAS -1) FAIRE
inverse <- inverse + CARACTERE_A(complet, i)
FIN POUR
AFFICHER "Inversé : ", inverse // "TNOPUD ecilA"
FIN
196
Chapitre 10 : Chaînes de caractères
Chaîne = "Alice" :
i c Voyelle ? nbVoyelles
0 'A' OUI 1
1 'l' non 1
2 'i' OUI 2
3 'c' non 2
4 'e' OUI 3
ERREURS À ÉVITER
10.8 Résumé
197
Chapitre 10 : Chaînes de caractères
POINTS CLÉS
Concaténation : +
Exercices du Chapitre 10
ALGORITHME NomComplet
prenom, nom : CHAINE
DÉBUT
AFFICHER "Prénom : " ; LIRE prenom
AFFICHER "Nom : " ; LIRE nom
AFFICHER "Complet : ", prenom + " " + nom
AFFICHER "Longueur : ", LONGUEUR(prenom + " " + nom)
FIN
198
Chapitre 10 : Chaînes de caractères
ALGORITHME Initialles
prenom, nom : CHAINE
DÉBUT
LIRE prenom ; LIRE nom
AFFICHER CARACTERE_A(prenom, 0), CARACTERE_A(nom, 0)
FIN
ALGORITHME CompterVoyelles
ch : CHAINE; i, compteur : ENTIER; c : CARACTERE
DÉBUT
AFFICHER "Texte : " ; LIRE ch
compteur <- 0
POUR i DE 0 A LONGUEUR(ch) - 1 FAIRE
c <- CARACTERE_A(ch, i)
SI c DANS "aeiouAEIOU" ALORS compteur <- compteur + 1
FIN SI
FIN POUR
AFFICHER "Voyelles : ", compteur
FIN
199
Chapitre 10 : Chaînes de caractères
ALGORITHME InverserChaine
ch, inv : CHAINE; i : ENTIER
DÉBUT
AFFICHER "Texte : " ; LIRE ch
inv <- ""
POUR i DE LONGUEUR(ch) - 1 A 0 (PAS -1) FAIRE
inv <- inv + CARACTERE_A(ch, i)
FIN POUR
AFFICHER "Inversé : ", inv
FIN
200
Chapitre 10 : Chaînes de caractères
Vérifier palindrome : Lire un mot. Déterminer s'il se lit identiquement dans les
deux sens (radar, kayak).
ALGORITHME Palindrome
ch : CHAINE; i : ENTIER; estPal : BOOLEEN
DÉBUT
AFFICHER "Mot : " ; LIRE ch
estPal <- VRAI
POUR i DE 0 A LONGUEUR(ch) DIV 2 - 1 FAIRE
SI CARACTERE_A(ch, i) <> CARACTERE_A(ch,
LONGUEUR(ch)-1-i) ALORS
estPal <- FAUX
FIN SI
FIN POUR
AFFICHER "Palindrome : ", estPal
FIN
201
Chapitre 10 : Chaînes de caractères
ALGORITHME Remplacer
ch, resultat : CHAINE; ancien, nouveau : CARACTERE
i : ENTIER; c : CARACTERE
DÉBUT
AFFICHER "Chaîne : " ; LIRE ch
AFFICHER "Ancien : " ; LIRE ancien
AFFICHER "Nouveau : " ; LIRE nouveau
resultat <- ""
POUR i DE 0 A LONGUEUR(ch) - 1 FAIRE
c <- CARACTERE_A(ch, i)
SI c = ancien ALORS
resultat <- resultat + nouveau
SINON
resultat <- resultat + c
FIN SI
FIN POUR
AFFICHER "Résultat : ", resultat
FIN
202
Chapitre 10 : Chaînes de caractères
Compter les mots : Lire une phrase. Compter le nombre de mots (séparés par des
espaces).
ALGORITHME CompterMots
phrase : CHAINE; i, compteur : ENTIER
DÉBUT
AFFICHER "Phrase : " ; LIRE phrase
compteur <- 1
POUR i DE 0 A LONGUEUR(phrase) - 1 FAIRE
SI CARACTERE_A(phrase, i) = ' ' ALORS
compteur <- compteur + 1
FIN SI
FIN POUR
AFFICHER "Mots : ", compteur
FIN
203
Chapitre 10 : Chaînes de caractères
ALGORITHME ExtraireChiffres
ch, resultat : CHAINE; i : ENTIER; c : CARACTERE
DÉBUT
AFFICHER "Texte : " ; LIRE ch
resultat <- ""
POUR i DE 0 A LONGUEUR(ch) - 1 FAIRE
c <- CARACTERE_A(ch, i)
SI c >= '0' ET c <= '9' ALORS
resultat <- resultat + c
FIN SI
FIN POUR
AFFICHER "Chiffres : ", resultat
FIN
204
Chapitre 10 : Chaînes de caractères
ALGORITHME FormaterNom
ch, resultat : CHAINE; i : ENTIER; c : CARACTERE
majusculeSuivante : BOOLEEN
DÉBUT
AFFICHER "Nom : " ; LIRE ch
resultat <- ""
majusculeSuivante <- VRAI
POUR i DE 0 A LONGUEUR(ch) - 1 FAIRE
c <- CARACTERE_A(ch, i)
SI majusculeSuivante ET c >= 'a' ET c <= 'z' ALORS
// Convertir en majuscule (ASCII)
c <- CARACTERE_A("ABCDEFGHIJKLMNOPQRSTUVWXYZ",
CONVERTIR_ENTIER(c) -
CONVERTIR_ENTIER('a'))
majusculeSuivante <- FAUX
SINON SI c = ' ' ALORS
majusculeSuivante <- VRAI
FIN SI
resultat <- resultat + c
FIN POUR
AFFICHER "Formaté : ", resultat
FIN
205
Chapitre 10 : Chaînes de caractères
ALGORITHME ValiderEmail
email : CHAINE; i, arobase, pointApres : ENTIER
valide : BOOLEEN
DÉBUT
AFFICHER "Email : " ; LIRE email
arobase <- 0; pointApres <- 0
POUR i DE 0 A LONGUEUR(email) - 1 FAURE
SI CARACTERE_A(email, i) = '@' ALORS
arobase <- arobase + 1
SINON SI arobase = 1 ET CARACTERE_A(email, i) = '.'
ALORS
pointApres <- pointApres + 1
FIN SI
FIN POUR
valide <- (arobase = 1) ET (pointApres >= 1)
AFFICHER "Valide : ", valide
FIN
206
Chapitre 10 : Chaînes de caractères
ALGORITHME CodeCesar
texte, chiffre : CHAINE; decalage, i, pos : ENTIER
c : CARACTERE
DÉBUT
AFFICHER "Texte : " ; LIRE texte
AFFICHER "Décalage : " ; LIRE decalage
chiffre <- ""
POUR i DE 0 A LONGUEUR(texte) - 1 FAIRE
c <- CARACTERE_A(texte, i)
SI c >= 'a' ET c <= 'z' ALORS
pos <- (CONVERTIR_ENTIER(c) - CONVERTIR_ENTIER('a')
+ decalage) MOD 26
c <- CARACTERE_A("abcdefghijklmnopqrstuvwxyz", pos
+ 1)
SINON SI c >= 'A' ET c <= 'Z' ALORS
pos <- (CONVERTIR_ENTIER(c) - CONVERTIR_ENTIER('A')
+ decalage) MOD 26
c <- CARACTERE_A("ABCDEFGHIJKLMNOPQRSTUVWXYZ", pos
+ 1)
FIN SI
chiffre <- chiffre + c
FIN POUR
AFFICHER "Chiffré : ", chiffre
FIN
Python :
207
Chapitre 10 : Chaînes de caractères
208
Chapitre 10 : Chaînes de caractères
209
Chapitre 10 : Chaînes de caractères
ALGORITHME FrequenceLettres
texte : CHAINE
frequences : TABLEAU[26] DE ENTIER // a=0, b=1, ..., z=25
i, total, maxFreq, echelle : ENTIER
c : CARACTERE; ligne : CHAINE
DÉBUT
AFFICHER "Texte : " ; LIRE texte
// Initialiser à 0
POUR i DE 0 A 25 FAIRE frequences[i] <- 0 FIN POUR
// Compter
total <- 0
POUR i DE 0 A LONGUEUR(texte) - 1 FAIRE
c <- CARACTERE_A(texte, i)
SI c >= 'a' ET c <= 'z' ALORS
frequences[CONVERTIR_ENTIER(c) -
CONVERTIR_ENTIER('a')] <-
frequences[CONVERTIR_ENTIER(c) -
CONVERTIR_ENTIER('a')] + 1
total <- total + 1
SINON SI c >= 'A' ET c <= 'Z' ALORS
frequences[CONVERTIR_ENTIER(c) -
CONVERTIR_ENTIER('A')] <-
frequences[CONVERTIR_ENTIER(c) -
CONVERTIR_ENTIER('A')] + 1
total <- total + 1
FIN SI
FIN POUR
// Afficher histogramme
AFFICHER "\n=== FRÉQUENCES === (total lettres : ", total,
")"
POUR i DE 0 A 25 FAIRE
c <- CARACTERE_A("abcdefghijklmnopqrstuvwxyz", i + 1)
AFFICHER c, " : ", frequences[i], " "
POUR j DE 1 A frequences[i] FAIRE
AFFICHER_SANS_RETOUR "*"
FIN POUR
AFFICHER ""
FIN POUR
FIN
210
Chapitre 10 : Chaînes de caractères
Python :
Validation du Chapitre 10
Concaténation et construction
Comparaison et recherche
211
Chapitre 11 : Recherche séquentielle
CHAPITRE 11
Recherche séquentielle
DÉFINITION
11.2 Objectif
212
Chapitre 11 : Recherche séquentielle
OBJECTIFS
Vous cherchez le livre "Algorithmique" sur une étagère de 50 livres non classés :
Vous prenez le 1er livre : ce n'est pas le bon → vous passez au suivant
Dans le meilleur cas, le livre est en 1re position (1 comparaison). Dans le pire cas,
il est en dernière position ou absent (50 comparaisons). En moyenne, il faut
environ 25 comparaisons.
213
Chapitre 11 : Recherche séquentielle
11.5 Pseudo-code
214
Chapitre 11 : Recherche séquentielle
215
Chapitre 11 : Recherche séquentielle
216
Chapitre 11 : Recherche séquentielle
1 0 3 FAUX Continuer
2 1 7 VRAI Retourner 1
ERREURS À ÉVITER
Continuer après avoir trouvé : Utiliser RETOURNE ou break pour sortir dès
qu'on trouve.
11.8 Résumé
217
Chapitre 11 : Recherche séquentielle
POINTS CLÉS
Exercices du Chapitre 11
218
Chapitre 11 : Recherche séquentielle
Présence : Écrivez une fonction booléenne qui dit si un élément est présent.
219
Chapitre 11 : Recherche séquentielle
220
Chapitre 11 : Recherche séquentielle
Recherche dans tableau trié : Améliorer la recherche en s'arrêtant dès que tab[i] >
x.
221
Chapitre 11 : Recherche séquentielle
ALGORITHME MinEtPositions
tab : TABLEAU[8] DE ENTIER; i, minVal : ENTIER
DÉBUT
POUR i DE 0 A 7 FAIRE LIRE tab[i] FIN POUR
minVal <- tab[0]
POUR i DE 1 A 7 FAIRE
SI tab[i] < minVal ALORS minVal <- tab[i] FIN SI
FIN POUR
AFFICHER "Min : ", minVal, " aux indices : "
POUR i DE 0 A 7 FAIRE
SI tab[i] = minVal ALORS AFFICHER i, " " FIN SI
FIN POUR
FIN
Correction
222
Chapitre 11 : Recherche séquentielle
ALGORITHME SupprimerOccurrences
tab : TABLEAU[10] DE ENTIER
resultat : TABLEAU[10] DE ENTIER
x, i, j : ENTIER
DÉBUT
POUR i DE 0 A 9 FAIRE LIRE tab[i] FIN POUR
AFFICHER "x à supprimer : " ; LIRE x
j <- 0
POUR i DE 0 A 9 FAIRE
SI tab[i] <> x ALORS
resultat[j] <- tab[i]
j <- j + 1
FIN SI
FIN POUR
AFFICHER "Résultat (", j, " éléments) : "
POUR i DE 0 A j - 1 FAIRE AFFICHER resultat[i], " " FIN
POUR
FIN
223
Chapitre 11 : Recherche séquentielle
224
Chapitre 11 : Recherche séquentielle
ALGORITHME Comparaison
tab : TABLEAU[10000] DE ENTIER
i, cpt1, cpt2, cpt3 : ENTIER
DÉBUT
// Remplissage aléatoire
POUR i DE 0 A 9999 FAIRE
tab[i] <- ALÉATOIRE(0, 100000)
FIN POUR
// Recherche standard de 42
cpt1 <- 0
POUR i DE 0 A 9999 FAIRE
cpt1 <- cpt1 + 1
SI tab[i] = 42 ALORS i <- 99999 FIN SI // sortie
FIN POUR
225
Chapitre 11 : Recherche séquentielle
226
Chapitre 11 : Recherche séquentielle
ALGORITHME CarnetAdresses
noms : TABLEAU[50] DE CHAINE
telephones : TABLEAU[50] DE CHAINE
nbContacts, choix, i, indice : ENTIER
nom, tel, recherche : CHAINE
trouve : BOOLEEN
DÉBUT
nbContacts <- 0
REPETER
AFFICHER "\[Link] [Link] [Link]
[Link] [Link] [Link]"
AFFICHER "Choix : " ; LIRE choix
choix vaut
1: SI nbContacts < 50 ALORS
AFFICHER "Nom : " ; LIRE noms[nbContacts]
AFFICHER "Tel : " ; LIRE
telephones[nbContacts]
nbContacts <- nbContacts + 1
SINON AFFICHER "Carnet plein !" FIN SI
227
Chapitre 11 : Recherche séquentielle
Python :
228
Chapitre 11 : Recherche séquentielle
noms = [""] * 50
tels = [""] * 50
nb = 0
while True:
choix = input("\[Link] [Link] [Link] [Link] [Link] [Link]
: ")
if choix == "1" and nb < 50:
noms[nb] = input("Nom : ")
tels[nb] = input("Tel : ")
nb += 1
elif choix == "2":
r = input("Nom : ")
for i in range(nb):
if noms[i] == r: print(tels[i])
elif choix == "3":
r = input("Tel : ")
for i in range(nb):
if tels[i] == r: print(noms[i])
elif choix == "4":
for i in range(nb): print(f"{noms[i]} : {tels[i]}")
elif choix == "5":
r = input("Nom à supprimer : ")
idx = -1
for i in range(nb):
if noms[i] == r: idx = i; break
if idx >= 0:
for i in range(idx, nb-1):
noms[i] = noms[i+1]; tels[i] = tels[i+1]
nb -= 1
elif choix == "6": break
229
Chapitre 11 : Recherche séquentielle
Validation du Chapitre 11
Retour de l'indice ou de -1
Complexité O(N)
230
Chapitre 12 : Introduction aux structures de données
CHAPITRE 12
DÉFINITION
Une structure de données est une façon d'organiser et de stocker des données
pour faciliter leur accès et leur modification. C'est comme choisir un type de
rangement : une étagère (accès direct), une pile d'assiettes (dernier arrivé premier
servi), ou une file d'attente (premier arrivé premier servi). Le choix de la structure
impacte l'efficacité des opérations.
12.2 Objectif
231
Chapitre 12 : Introduction aux structures de données
OBJECTIFS
LA VIE QUOTIDIENNE
Pile (LIFO = Last In First Out) : Une pile d'assiettes. On dépose par le dessus, on
prend par le dessus. La dernière posée est la première prise. Comme le bouton
"Annuler" d'un logiciel.
File (FIFO = First In First Out) : Une file d'attente au supermarché. Le premier
arrivé est le premier servi. Comme une liste d'impression.
Liste chaînée : Une chasse au trésor avec des indices. Chaque indice mène au
suivant. On peut insérer un nouvel indice n'importe où sans déplacer les autres.
232
Chapitre 12 : Introduction aux structures de données
EMPILER (PUSH) 10 :
+-----+
| 10 | <--- sommet
+-----+
EMPILER 20 :
+-----+
| 20 | <--- sommet
+-----+
| 10 |
+-----+
EMPILER 30 :
+-----+
| 30 | <--- sommet
+-----+
| 20 |
+-----+
| 10 |
+-----+
233
Chapitre 12 : Introduction aux structures de données
ENFILER (ENQUEUE) 10 :
Tête Queue
+-----+
| 10 |
+-----+
ENFILER 20 :
Tête Queue
+-----+ +-----+
| 10 |--> | 20 |
+-----+ +----+
ENFILER 30 :
Tête Queue
+-----+ +-----+ +-----+
| 10 |--> | 20 |--> | 30 |
+-----+ +-----+ +-----+
234
Chapitre 12 : Introduction aux structures de données
// Empiler
PROCEDURE empiler(x : ENTIER)
SI sommet < CAPACITE - 1 ALORS
sommet <- sommet + 1
pile[sommet] <- x
SINON
AFFICHER "Pile pleine !"
FIN SI
FIN PROCEDURE
// Dépiler
FONCTION depiler() : ENTIER
SI sommet >= 0 ALORS
sommet <- sommet - 1
RETOURNE pile[sommet + 1]
SINON
AFFICHER "Pile vide !"
RETOURNE -1
FIN SI
FIN FONCTION
// Est vide
FONCTION estVide() : BOOLEEN
RETOURNE sommet = -1
FIN FONCTION
DÉBUT
empiler(10); empiler(20); empiler(30)
AFFICHER depiler() // 30
AFFICHER depiler() // 20
AFFICHER sommet() // 10
FIN
235
Chapitre 12 : Introduction aux structures de données
ALGORITHME File
CONST CAPACITE : ENTIER <- 100
file : TABLEAU[CAPACITE] DE ENTIER
tete, queue, nbElements : ENTIER
// Initialisation
tete <- 0; queue <- 0; nbElements <- 0
// Enfiler
PROCEDURE enfiler(x : ENTIER)
SI nbElements < CAPACITE ALORS
file[queue] <- x
queue <- (queue + 1) MOD CAPACITE
nbElements <- nbElements + 1
SINON
AFFICHER "File pleine !"
FIN SI
FIN PROCEDURE
// Défiler
FONCTION defiler() : ENTIER
VARIABLES resultat : ENTIER
SI nbElements > 0 ALORS
resultat <- file[tete]
tete <- (tete + 1) MOD CAPACITE
nbElements <- nbElements - 1
RETOURNE resultat
SINON
AFFICHER "File vide !"
RETOURNE -1
FIN SI
FIN FONCTION
DÉBUT
enfiler(10); enfiler(20); enfiler(30)
AFFICHER defiler() // 10
AFFICHER defiler() // 20
enfiler(40)
AFFICHER defiler() // 30
AFFICHER defiler() // 40
FIN
236
Chapitre 12 : Introduction aux structures de données
LISTE CHAÎNÉE :
Insertion de 25 entre 20 et 30 :
1. Créer nouvel élément : [ 25 | pointeur ]
2. Faire pointer 20 vers 25
3. Faire pointer 25 vers 30
Annuler,
Pile Sommet seul O(1) au sommet O(1) au sommet
expressions
File Tête seule O(1) en queue O(1) en tête File d'attente, BFS
237
Chapitre 12 : Introduction aux structures de données
238
Chapitre 12 : Introduction aux structures de données
ALGORITHME ParenthesesEquilibrees
expression : CHAINE
i : ENTIER; c : CARACTERE
// Pile pour les parenthèses ouvrantes
CONST MAX : ENTIER <- 100
pile : TABLEAU[MAX] DE CARACTERE
sommet : ENTIER <- -1
equilibre : BOOLEEN <- VRAI
DÉBUT
AFFICHER "Expression : " ; LIRE expression
239
Chapitre 12 : Introduction aux structures de données
ERREURS À ÉVITER
Confondre pile et file : Pile = LIFO (dernier entré sort en 1er), File = FIFO
(premier entré sort en 1er).
12.8 Résumé
240
Chapitre 12 : Introduction aux structures de données
POINTS CLÉS
Exercices du Chapitre 12
241
Chapitre 12 : Introduction aux structures de données
Correction
empiler(5) [5]
empiler(3) [5, 3]
empiler(8) [5, 3, 8]
empiler(2) [5, 3, 2]
242
Chapitre 12 : Introduction aux structures de données
enfiler(A) [A]
enfiler(B) [A, B]
enfiler(C) [A, B, C]
enfiler(D) [B, C, D]
Reste : [D]
243
Chapitre 12 : Introduction aux structures de données
Implémenter une pile complète : Écrivez toutes les opérations (empiler, depiler,
sommet, estVide, taille) avec un tableau et un sommet.
244
Chapitre 12 : Introduction aux structures de données
ALGORITHME PileComplete
CONST CAPA : ENTIER <- 50
pile : TABLEAU[CAPA] DE ENTIER
sommet : ENTIER <- -1
DÉBUT
empiler(10); empiler(20); empiler(30)
AFFICHER taille() // 3
AFFICHER depiler() // 30
AFFICHER sommetVal() // 20
AFFICHER estVide() // FAUX
FIN
245
Chapitre 12 : Introduction aux structures de données
Inverser avec une pile : Lire 5 nombres, les empiler, puis les dépiler pour les
afficher dans l'ordre inverse.
ALGORITHME InverserPile
// Utilise la pile définie ci-dessus
i, x : ENTIER
DÉBUT
POUR i DE 1 A 5 FAIRE
AFFICHER "Nombre : " ; LIRE x
empiler(x)
FIN POUR
AFFICHER "Ordre inverse : "
TANT QUE NON estVide() FAIRE
AFFICHER depiler(), " "
FIN TANT QUE
FIN
246
Chapitre 12 : Introduction aux structures de données
Vérification de palindrome avec pile : Lire un mot. Utiliser une pile pour vérifier
s'il est un palindrome.
ALGORITHME PalindromePile
mot : CHAINE; i, milieu : ENTIER
c : CARACTERE; estPal : BOOLEEN
DÉBUT
AFFICHER "Mot : " ; LIRE mot
// Empiler la première moitié
milieu <- LONGUEUR(mot) DIV 2
POUR i DE 0 A milieu - 1 FAIRE
empilerChar(CARACTERE_A(mot, i))
FIN POUR
// Si longueur impaire, sauter le milieu
SI LONGUEUR(mot) MOD 2 = 1 ALORS milieu <- milieu + 1 FIN
SI
// Comparer avec la deuxième moitié
estPal <- VRAI
POUR i DE milieu A LONGUEUR(mot) - 1 FAIRE
SI depilerChar() <> CARACTERE_A(mot, i) ALORS
estPal <- FAUX
FIN SI
FIN POUR
AFFICHER "Palindrome : ", estPal
FIN
247
Chapitre 12 : Introduction aux structures de données
Conversion décimal vers binaire avec pile : Lire un entier positif. Le convertir en
binaire en empilant les restes de divisions par 2, puis les dépiler pour afficher.
ALGORITHME DecimalVersBinaire
n : ENTIER
DÉBUT
AFFICHER "n : " ; LIRE n
SI n = 0 ALORS AFFICHER "0" SINON
TANT QUE n > 0 FAIRE
empiler(n MOD 2)
n <- n DIV 2
FIN TANT QUE
TANT QUE NON estVide() FAIRE
AFFICHER_SANS_RETOUR depiler()
FIN TANT QUE
AFFICHER ""
FIN SI
FIN
Explication : Les restes sont générés du poids faible au poids fort. La pile les
inverse naturellement.
248
Chapitre 12 : Introduction aux structures de données
Implémenter une file complète : Écrivez toutes les opérations (enfiler, defiler, tete,
estVide, taille) avec un tableau circulaire.
249
Chapitre 12 : Introduction aux structures de données
ALGORITHME FileComplete
CONST CAPA : ENTIER <- 50
file : TABLEAU[CAPA] DE ENTIER
tete, queue, nb : ENTIER
PROCEDURE initialiser()
tete <- 0; queue <- 0; nb <- 0
FIN PROCEDURE
250
Chapitre 12 : Introduction aux structures de données
Simuler une file d'attente : Simuler un guichet : les clients arrivent (enfiler) et sont
servis (defiler) aléatoirement. Afficher l'état de la file après 10 opérations.
ALGORITHME FileAttente
i, choix, clientNum : ENTIER
DÉBUT
initialiser()
clientNum <- 1
POUR i DE 1 A 10 FAIRE
choix <- ALÉATOIRE(1, 2) // 1=arrivée, 2=départ
SI choix = 1 ALORS
AFFICHER "Client ", clientNum, " arrive"
enfiler(clientNum)
clientNum <- clientNum + 1
SINON SI NON estVideFile() ALORS
AFFICHER "Client ", defiler(), " servi"
SINON
AFFICHER "Personne à servir"
FIN SI
AFFICHER "File (", tailleFile(), " personnes)"
FIN POUR
FIN
251
Chapitre 12 : Introduction aux structures de données
Deux piles pour faire une file : Implémenter une file en utilisant deux piles
(pileEntree et pileSortie). Enfiler = empiler sur pileEntree. Defiler = si pileSortie
vide, transférer tous les éléments de pileEntree vers pileSortie, puis dépiler de
pileSortie.
ALGORITHME FileAvecDeuxPiles
pileE, pileS : // deux piles standard
Principe : On inverse deux fois (avec les deux piles), ce qui revient à l'ordre
original FIFO.
252
Chapitre 12 : Introduction aux structures de données
ALGORITHME EvalPostfixe
expression : CHAINE; i : ENTIER
operande1, operande2, resultat : ENTIER
c : CARACTERE
DÉBUT
AFFICHER "Expression postfixe : " ; LIRE expression
POUR i DE 0 A LONGUEUR(expression) - 1 FAIRE
c <- CARACTERE_A(expression, i)
SI c >= '0' ET c <= '9' ALORS
empiler(CONVERTIR_ENTIER(c) -
CONVERTIR_ENTIER('0'))
SINON SI c = '+' ALORS
operande2 <- depiler(); operande1 <- depiler()
empiler(operande1 + operande2)
SINON SI c = '-' ALORS
operande2 <- depiler(); operande1 <- depiler()
empiler(operande1 - operande2)
SINON SI c = '*' ALORS
operande2 <- depiler(); operande1 <- depiler()
empiler(operande1 * operande2)
SINON SI c = '/' ALORS
operande2 <- depiler(); operande1 <- depiler()
empiler(operande1 DIV operande2)
FIN SI
FIN POUR
AFFICHER "Résultat : ", depiler()
FIN
Python :
253
Chapitre 12 : Introduction aux structures de données
def eval_postfixe(expr):
pile = []
for c in [Link](" ", ""):
if [Link](): [Link](int(c))
elif c == '+': b, a = [Link](), [Link]();
[Link](a+b)
elif c == '-': b, a = [Link](), [Link]();
[Link](a-b)
elif c == '*': b, a = [Link](), [Link]();
[Link](a*b)
elif c == '/': b, a = [Link](), [Link]();
[Link](a//b)
return pile[0]
print(eval_postfixe("34+2*")) # 14
254
Chapitre 12 : Introduction aux structures de données
255
Chapitre 12 : Introduction aux structures de données
ALGORITHME GestionnaireImpression
CONST MAX : ENTIER <- 50
noms : TABLEAU[MAX] DE CHAINE
pages : TABLEAU[MAX] DE ENTIER
tete, queue, nb : ENTIER
i, j : ENTIER
PROCEDURE imprimer()
i : ENTIER
SI nb > 0 ALORS
POUR i DE 1 A pages[tete] FAIRE
AFFICHER "Impression de ", noms[tete],
" : page ", i, "/", pages[tete]
FIN POUR
tete <- (tete + 1) MOD MAX; nb <- nb - 1
AFFICHER noms[tete], " terminé !"
FIN SI
FIN PROCEDURE
DÉBUT
tete <- 0; queue <- 0; nb <- 0
ajouterDocument("[Link]", 3)
ajouterDocument("[Link]", 2)
ajouterDocument("[Link]", 5)
TANT QUE nb > 0 FAIRE
imprimer()
FIN TANT QUE
FIN
256
Chapitre 12 : Introduction aux structures de données
257
Chapitre 12 : Introduction aux structures de données
ALGORITHME Navigateur
// --- Historique (Pile) ---
CONST HISTO_MAX : ENTIER <- 100
historique : TABLEAU[HISTO_MAX] DE CHAINE
sommetHisto : ENTIER <- -1
pageActuelle : CHAINE <- "accueil"
PROCEDURE pagePrecedente()
SI sommetHisto >= 0 ALORS
pageActuelle <- historique[sommetHisto]
sommetHisto <- sommetHisto - 1
AFFICHER "Page : ", pageActuelle
SINON AFFICHER "Pas de page précédente" FIN SI
FIN PROCEDURE
DÉBUT
teteDL <- 0; queueDL <- 0; nbDL <- 0
choix : ENTIER; url, fichier : CHAINE
REPETER
AFFICHER "\[Link] [Link] [Link] [Link]
[Link]"
AFFICHER "Choix : " ; LIRE choix
choix vaut
1: AFFICHER "URL : " ; LIRE url; visiterPage(url)
258
Chapitre 12 : Introduction aux structures de données
Python :
class Navigateur:
def __init__(self):
[Link] = []
[Link] = "accueil"
self.dl_file = []
def precedent(self):
if [Link]:
[Link] = [Link]()
print(f"Page : {[Link]}")
else: print("Pas de precedent")
def voir_dl(self):
print(f"Downloads : {self.dl_file}")
nav = Navigateur()
[Link]("[Link]")
[Link]("[Link]")
[Link]() # Retour à [Link]
259
Chapitre 12 : Introduction aux structures de données
Vous êtes prêt pour la Licence 2 ! Faites tous les exercices pour consolider vos
acquis.
260