Une pénalité de -0.25 point sera appliquée pour toute erreur de syntaxe, d’oubli de passage de paramètre par variable (@), ou d’incohérence dans les tableaux de déclaration (TDNT, TDOG, TDOL).
Exercice 1 : Le numérique et les réseaux (Data Center)
1. Contexte
Dans un centre de données (Data Center), les informations circulent sous forme de paquets à
travers une grille de routeurs. Pour identifier, sécuriser et optimiser ce trafic, chaque routeur est
doté d’un identifiant hexadécimal de 2 caractères. L’administrateur doit extraire ces identifiants à
partir d’une matrice, calculer des clés de routage à l’aide de calculs arithmétiques, trier les routeurs
par priorité, puis évaluer la fiabilité globale du réseau via une approximation mathématique.
On définit le type enregistrement Routeur :
Id_Hex : chaîne (identifiant hexadécimal du routeur).
Id_Dec : entier (identifiant converti en base 10).
Cle_Routage : entier (clé de priorité calculée).
2. Contraintes de validité (contrôles de saisie)
Dimensions de la matrice : 3 ≤ L ≤ 10 et 3 ≤ C ≤ 10.
Élément de la matrice : chaîne de taille exacte 2, composée exclusivement de chiffres (0-9) ou de lettres majuscules (A-F).
Clé réseau maître K : entier positif vérifiant K ≥ 2.
3. Travail demandé
Écrire un module pour saisir et contrôler les dimensions L et C, puis remplir la matrice M(L, C) par des identifiants valides.
Transférer les éléments de M vers un tableau d’enregistrements T de taille N = L × C.
Saisir la clé K, puis calculer Cle_Routage = PGCD(Id_Dec, K).
Trier le tableau T dans l’ordre décroissant selon le champ Cle_Routage.
Effectuer une recherche dichotomique d’une clé cible X.
Calculer et afficher une valeur approchée de la constante e jusqu’à ce que 1/n! < 10-4.
4. Simulateur interactif
🧪 Simulateur pas à pas : Matrice M(3,3) → Tableau T → Tri → Recherche → e
✅ Barème sur 20 & Correction : Exercice 1
[2.5 pts] Programme principal
[1.0 pt] TDNT
[1.0 pt] TDOG
[1.0 pt] Procédure SaisieDims
[1.5 pts] Fonction ValideHex
[1.5 pts] Procédure RemplirMat
[1.5 pts] Fonction HexVersDec
[1.0 pt] Procédure TransfertEtConversion
[1.5 pts] Fonction PGCD
[1.0 pt] Procédure CalculerCles
[2.0 pts] Procédure TriDecroissant
[2.0 pts] Fonction RechDichoDecroissant
[1.5 pts] Fonction ApproxE (incluant Fact)
[1.0 pt] Ensemble des TDOL
1. Programme Principal
Début AlgoPrincipal
SaisieDims(L, C)
RemplirMat(M, L, C)
N ← L * C
TransfertEtConversion(M, L, C, T)
Répéter
Ecrire("Clé K (≥ 2) : ")
Lire(K)
Jusqu'à (K ≥ 2)
CalculerCles(T, N, K)
TriDecroissant(T, N)
Ecrire("Clé cible X : ")
Lire(X)
pos ← RechDichoDecroissant(T, N, X)
Si pos ≠ -1 Alors Ecrire("Routeur : ", T[pos].Id_Hex)
Sinon Ecrire("Introuvable") FinSi
Ecrire("Fiabilité e ≈ ", ApproxE())
Fin
Procédure SaisieDims(@L, @C : Entier)
Début
Répéter Lire(L) Jusqu'à L IN [3..10]
Répéter Lire(C) Jusqu'à C IN [3..10]
Fin
// TDOL : Néant
Fonction ValideHex(ch : Chaîne) : Booléen
Début
Si Long(ch) ≠ 2 Alors retourner Faux FinSi
c1 ← ch[0]; c2 ← ch[1]
retourner (c1 IN ["0".."9","A".."F"]) ET (c2 IN ["0".."9","A".."F"])
Fin
// TDOL : c1, c2 : Caractère
Procédure RemplirMat(@M : MatHex, L, C : Entier)
Début
Pour i de 0 à L - 1 faire
Pour j de 0 à C - 1 faire
Répéter Lire(M[i, j]) Jusqu'à ValideHex(M[i, j])
FinPour
FinPour
Fin
// TDOL : i, j : Entier
Fonction HexVersDec(ch : Chaîne) : Entier
Début
val ← 0
Pour i de 0 à Long(ch) - 1 faire
Si ch[i] IN ["0".."9"] Alors chiffre ← Ord(ch[i]) - Ord("0")
Sinon chiffre ← Ord(ch[i]) - Ord("A") + 10 FinSi
val ← val * 16 + chiffre
FinPour
retourner val
Fin
// TDOL : val, i, chiffre : Entier
Procédure TransfertEtConversion(M:MatHex, L,C:Entier, @T:TabR)
Début
k ← 0
Pour i de 0 à L - 1 faire
Pour j de 0 à C - 1 faire
T[k].Id_Hex ← M[i, j]
T[k].Id_Dec ← HexVersDec(M[i, j])
T[k].Cle_Routage ← 0
k ← k + 1
FinPour
FinPour
Fin
// TDOL : i, j, k : Entier
Fonction PGCD(a, b : Entier) : Entier
Début
Tant que b ≠ 0 faire
r ← a MOD b; a ← b; b ← r
FinTantQue
retourner a
Fin
// TDOL : r : Entier
Procédure CalculerCles(@T : TabR, N, K : Entier)
Début
Pour i de 0 à N - 1 faire
T[i].Cle_Routage ← PGCD(T[i].Id_Dec, K)
FinPour
Fin
// TDOL : i : Entier
Procédure TriDecroissant(@T : TabR, N : Entier)
Début
Pour i de 1 à N - 1 faire
tmp ← T[i]; j ← i - 1
Tant que (j ≥ 0) ET (T[j].Cle_Routage < tmp.Cle_Routage) faire
T[j + 1] ← T[j]; j ← j - 1
FinTantQue
T[j + 1] ← tmp
FinPour
Fin
// TDOL : i, j : Entier / tmp : Routeur
Fonction RechDichoDecroissant(T:TabR, N, X:Entier) : Entier
Début
deb ← 0; fin ← N - 1; pos ← -1
Tant que (deb ≤ fin) ET (pos = -1) faire
m ← (deb + fin) DIV 2
Si T[m].Cle_Routage = X Alors pos ← m
Sinon Si T[m].Cle_Routage < X Alors fin ← m - 1
Sinon deb ← m + 1 FinSi
FinTantQue
retourner pos
Fin
// TDOL : deb, fin, m, pos : Entier
Fonction ApproxE() : Réel
Début
n ← 0; somme ← 0
Répéter
terme ← 1 / Fact(n)
somme ← somme + terme
n ← n + 1
Jusqu'à (terme < 0.0001)
retourner somme
Fin
// TDOL : n : Entier / terme, somme : Réel
Exercice 2 : Le numérique et les réseaux (NetCarthage)
1. Contexte
L’entreprise NetCarthage supervise un réseau local de postes de travail. Les opérations consistent à
analyser une matrice d’octets relevés sur le réseau, convertir les adresses IPv4 en binaire et
hexadécimal pour diagnostic, gérer les caractéristiques de chaque poste, et enfin évaluer la
capacité d’un canal par une approximation de $\ln(2)$.
On définit le type enregistrement Poste :
Nom : chaîne (nom du poste de travail).
Debit : entier (débit en Mbit/s).
NbPaq : entier (nombre de paquets reçus).
2. Contraintes de validité (contrôles de saisie)
Dimensions de la matrice : 2 ≤ L ≤ 30 et 2 ≤ C ≤ 30.
Octet de la matrice : 0 ≤ valeur ≤ 255.
Nombre de postes n : 1 ≤ n ≤ 30.
Débit : 1 ≤ Debit ≤ 1000.
Nombre de paquets NbPaq : 1 ≤ NbPaq ≤ 100000.
Précision ε : 0 < ε < 1.
3. Travail demandé
Remplir avec contrôle une matrice M(L, C) par des entiers compris entre 0 et 255.
Écrire deux fonctions de conversion d’un entier n (0..255) : DecBin(n) (8 bits) et DecHex(n) (2 car).
Saisir les 4 octets d’une adresse IPv4, puis afficher l’adresse en décimal pointé, en binaire et en hexadécimal.
Remplir un tableau P de n postes (indices 0 à n-1) avec contrôle.
Saisir les indices de deux postes et afficher le PGCD et le PPCM de leurs débits respectifs.
Trier le tableau P dans l’ordre croissant selon le champ Debit par le tri par insertion.
Rechercher par dichotomie un poste ayant un débit d donné.
Calculer et afficher une valeur approchée de $\ln(2)$ par la série alternée, avec arrêt dès que 1/k < ε:
ln(2) = 1 – 1/2 + 1/3 – 1/4 + …
4. Simulateur interactif
.
.
.
✅ Barème sur 20 & Correction : Exercice 2
[2.5 pts] Programme principal
[1.0 pt] TDNT
[0.5 pt] TDOG
[1.0 pt] Procédure SaisieDims
[1.5 pts] Procédure RemplirMat
[1.0 pt] Procédure AfficherIP
[1.5 pts] Fonction DecBin
[1.5 pts] Fonction DecHex
[1.5 pts] Procédure RemplirPostes
[2.0 pts] Procédure AfficherArith & PGCD
[2.0 pts] Procédure TriPostes (Insertion)
[1.5 pts] Fonction RechDicho
[1.5 pts] Fonction ApproxLn2
[1.0 pt] Ensemble des TDOL
1. Programme Principal
Début AlgoPrincipal
SaisieDims(L, C)
RemplirMat(M, L, C)
AfficherIP()
RemplirPostes(P, n)
AfficherArith(P, n)
TriPostes(P, n)
Ecrire("Débit à chercher : "); Lire(d)
pos ← RechDicho(P, n, d)
Ecrire("ln(2) ≈ ", ApproxLn2(0.001))
Fin
Procédure SaisieDims(@L, @C : Entier)
Début
Répéter Lire(L) Jusqu'à L IN [2..30]
Répéter Lire(C) Jusqu'à C IN [2..30]
Fin // TDOL : Néant
Procédure RemplirMat(@M : Mat, L, C : Entier)
Début
Pour i de 0 à L - 1 faire
Pour j de 0 à C - 1 faire
Répéter Lire(M[i, j]) Jusqu'à M[i,j] IN [0..255]
FinPour
FinPour
Fin // TDOL: i, j : Entier
Fonction DecBin(n : Entier) : Chaîne
Début
ch ← ""
Tant que n ≠ 0 faire
ch ← chr(n MOD 2 + 48) + ch; n ← n DIV 2
FinTantQue
Tant que Long(ch) < 8 faire ch ← "0" + ch FinTantQue
retourner ch
Fin // TDOL: ch: Chaîne
Fonction DecHex(n : Entier) : Chaîne
Début
Dig ← "0123456789ABCDEF"
ch ← ""; x ← n
Tant que x ≠ 0 faire
r ← x MOD 16; ch ← Dig[r] + ch; x ← x DIV 16
FinTantQue
Tant que Long(ch) < 2 faire ch ← "0" + ch FinTantQue
retourner ch
Fin // TDOL : Dig, ch: Chaîne / x, r: Entier
Procédure AfficherIP()
Début
Pour i de 1 à 4 faire
Répéter Lire(octet) Jusqu'à octet IN [0..255]
Ecrire(DecBin(octet), " ", DecHex(octet))
FinPour
Fin // TDOL: i, octet : Entier
Procédure RemplirPostes(@P : TabP, @n : Entier)
Début
Répéter Lire(n) Jusqu'à n IN [1..30]
Pour i de 0 à n - 1 faire
Lire(P[i].Nom)
Répéter Lire(P[i].Debit) Jusqu'à P[i].Debit IN [1..1000]
Répéter Lire(P[i].NbPaq) Jusqu'à P[i].NbPaq IN [1..100000]
FinPour
Fin // TDOL : i : Entier
Fonction PGCD(a, b : Entier) : Entier
Début
Tant que b ≠ 0 faire
r ← a MOD b; a ← b; b ← r
FinTantQue
retourner a
Fin // TDOL : r : Entier
Procédure AfficherArith(P : TabP, n : Entier)
Début
Répéter Lire(i, j) Jusqu'à (i ≥ 0) ET (j ≥ 0) ET (i < n) ET (j < n)
a ← P[i].Debit; b ← P[j].Debit
g ← PGCD(a, b); m ← (a * b) DIV g
Ecrire("PGCD = ", g, " / PPCM = ", m)
Fin // TDOL : i, j, a, b, g, m : Entier
Procédure TriPostes(@P : TabP, n : Entier)
Début
Pour i de 1 à n - 1 faire
tmp ← P[i]; j ← i - 1
Tant que (j ≥ 0) ET (P[j].Debit > tmp.Debit) faire
P[j + 1] ← P[j]; j ← j - 1
FinTantQue
P[j + 1] ← tmp
FinPour
Fin // TDOL: i,j : Entier / tmp : Poste
Fonction RechDicho(P:TabP, n, d:Entier) : Entier
Début
deb ← 0; fin ← n - 1; pos ← -1
Tant que (deb ≤ fin) ET (pos = -1) faire
m ← (deb + fin) DIV 2
Si P[m].Debit = d Alors pos ← m
Sinon Si P[m].Debit < d Alors deb ← m + 1
Sinon fin ← m - 1 FinSi
FinTantQue
retourner pos
Fin // TDOL : deb, fin, m, pos : Entier
Fonction ApproxLn2(eps : Réel) : Réel
Début
k ← 1; sum ← 0; signe ← 1
Tant que (1/k) ≥ eps faire
sum ← sum + signe * (1/k)
signe ← -signe; k ← k + 1
FinTantQue
retourner sum
Fin // TDOL: k, signe : Entier / sum : Réel
Exercice 3 : Le numérique et les réseaux (SmartVille)
1. Contexte
La plateforme municipale SmartVille collecte les indices de qualité de l’air transmis par un réseau de capteurs IoT. Les relevés sont stockés dans une matrice, les capteurs sont identifiés numériquement (convertis pour inspection), et un modèle de diffusion atmosphérique nécessite une estimation approchée du nombre e.
On définit le type enregistrement Station :
Nom : chaîne (nom de la station).
Mesure : entier (indice de pollution).
Ident : entier (identifiant 1..255 codé sur un octet).
2. Contraintes de validité (contrôles de saisie)
Dimensions de la matrice : 2 ≤ L ≤ 20 et 2 ≤ C ≤ 20.
Indice de pollution dans la matrice : 0 ≤ valeur ≤ 500.
Nombre de stations n : 1 ≤ n ≤ 20.
Mesure d’une station : 1 ≤ Mesure ≤ 500.
Identifiant d’une station : 1 ≤ Ident ≤ 255.
Précision ε : 0 < ε < 1.
3. Travail demandé
Remplir avec contrôle la matrice M(L, C) par les indices de pollution.
Saisir un identifiant de station (1..255) et afficher sa valeur en décimal, binaire (8 bits) et hexadécimal (2 caractères).
Remplir un tableau P de n stations (indices 0 à n-1).
Saisir deux indices de stations et afficher le PGCD et le PPCM de leurs mesures.
Trier le tableau P dans l’ordre croissant selon le champ Mesure (tri par insertion).
Rechercher par dichotomie une station possédant la mesure d.
Approximer le nombre e par la série des factorielles en utilisant la relation récurrente 1/k! = (1/(k-1)!) / k, jusqu’à ce que 1/k! < ε :
e = 1 + 1/1! + 1/2! + 1/3! + …
4. Exemple d’exécution détaillé
A. Matrice des mesures M (L=3, C=4)
L0: 120, 0, 45, 300
L1: 255, 180, 90, 12
L2: 500, 78, 220, 1
Procédure SaisieDims(@L, @C : Entier)
Début
Répéter Lire(L) Jusqu'à L IN [2..20]
Répéter Lire(C) Jusqu'à C IN [2..20]
Fin // TDOL : Néant
Procédure RemplirMat(@M : MatriceMesures, L, C : Entier)
Début
Pour i de 0 à L - 1 faire
Pour j de 0 à C - 1 faire
Répéter Lire(M[i, j]) Jusqu'à M[i, j] IN [0..500]
FinPour
FinPour
Fin // TDOL : i, j : Entier
Fonction DecBin(n : Entier) : Chaîne
Début
ch ← ""; x ← n
Tant que x ≠ 0 faire
r ← x MOD 2
Si r = 0 Alors ch ← "0" + ch Sinon ch ← "1" + ch FinSi
x ← x DIV 2
FinTantQue
Tant que Long(ch) < 8 faire ch ← "0" + ch FinTantQue
retourner ch
Fin // TDOL : ch: Chaîne / x, r: Entier
Fonction DecHex(n : Entier) : Chaîne
Début
Dig ← "0123456789ABCDEF"
ch ← ""; x ← n
Tant que x ≠ 0 faire
r ← x MOD 16; ch ← Dig[r] + ch; x ← x DIV 16
FinTantQue
Tant que Long(ch) < 2 faire ch ← "0" + ch FinTantQue
retourner ch
Fin // TDOL : Dig, ch: Chaîne / x, r: Entier
Procédure AfficherIdentifiant()
Début
Répéter Lire(ident) Jusqu'à ident IN [1..255]
Ecrire("Décimal : ", ident)
Ecrire("Binaire : ", DecBin(ident))
Ecrire("Hexadécimal : ", DecHex(ident))
Fin // TDOL : ident : Entier
Procédure RemplirStations(@P : TabStations, @n : Entier)
Début
Répéter Lire(n) Jusqu'à n IN [1..20]
Pour i de 0 à n - 1 faire
Lire(P[i].Nom)
Répéter Lire(P[i].Mesure) Jusqu'à P[i].Mesure IN [1..500]
Répéter Lire(P[i].Ident) Jusqu'à P[i].Ident IN [1..255]
FinPour
Fin // TDOL : i : Entier
Fonction PGCD(a, b : Entier) : Entier
Début
Tant que b ≠ 0 faire
r ← a MOD b; a ← b; b ← r
FinTantQue
retourner a
Fin // TDOL : r : Entier
Procédure AfficherArithmétique(P : TabStations, n : Entier)
Début
Répéter Lire(i, j) Jusqu'à (i ≥ 0) ET (j ≥ 0) ET (i < n) ET (j < n)
a ← P[i].Mesure; b ← P[j].Mesure
g ← PGCD(a, b); m ← (a * b) DIV g
Ecrire("PGCD = ", g, " / PPCM = ", m)
Fin // TDOL : i, j, a, b, g, m : Entier
Procédure TriInsertion(@P : TabStations, n : Entier)
Début
Pour i de 1 à n - 1 faire
tmp ← P[i]; j ← i - 1
Tant que (j ≥ 0) ET (P[j].Mesure > tmp.Mesure) faire
P[j + 1] ← P[j]; j ← j - 1
FinTantQue
P[j + 1] ← tmp
FinPour
Fin // TDOL : i, j : Entier / tmp : Station
Fonction RechDicho(P : TabStations, n, d : Entier) : Entier
Début
deb ← 0; fin ← n - 1; pos ← -1
Tant que (deb ≤ fin) ET (pos = -1) faire
m ← (deb + fin) DIV 2
Si P[m].Mesure = d Alors pos ← m
Sinon Si P[m].Mesure < d Alors deb ← m + 1
Sinon fin ← m - 1 FinSi
FinTantQue
retourner pos
Fin // TDOL : deb, fin, m, pos : Entier
Fonction ApproxE(eps : Réel) : Réel
Début
k ← 1; sum ← 1; terme ← 1
Tant que terme ≥ eps faire
terme ← terme / k
sum ← sum + terme
k ← k + 1
FinTantQue
retourner sum
Fin // TDOL: k: Entier / sum, terme: Réel
La startup DeepCarthage développe un réseau de neurones pour la reconnaissance d'images numérisées. Les pixels de chaque image forment une matrice, les modèles d'IA possèdent un identifiant de diagnostic, et l'algorithme d'optimisation utilise le nombre π approché par une série numérique.
On définit le type enregistrement Modele :
Nom : chaîne (nom de la variante du modèle).
Score : entier (score de précision sur 1000).
NbEpoques : entier (nombre de passes d'entraînement).
2. Contraintes de validité (contrôles de saisie)
Dimensions de la matrice : 2 ≤ L ≤ 30 et 2 ≤ C ≤ 30.
Pixel de la matrice : 0 ≤ valeur ≤ 255.
Nombre de modèles n : 1 ≤ n ≤ 30.
Score : 1 ≤ Score ≤ 1000.
NbEpoques : 1 ≤ NbEpoques ≤ 100000.
Identifiant d'un modèle : 1 ≤ Ident ≤ 255.
Précision ε : 0 < ε < 1.
3. Travail demandé
Remplir avec contrôle la matrice de pixels M(L, C).
Saisir un identifiant de modèle (1..255) et afficher sa conversion en binaire et hexadécimal.
Remplir un tableau P de n modèles (indices 0 à n-1).
Saisir deux indices de modèles et afficher le PGCD et le PPCM de leurs scores.
Trier le tableau P dans l'ordre croissant selon le champ Score (tri par insertion).
Rechercher par dichotomie un modèle ayant le score d.
Calculer et afficher une valeur approchée de π par la série de Leibniz, avec arrêt dès que 1/(2k-1) < ε, en multipliant la somme par 4 :
π / 4 = 1 - 1/3 + 1/5 - 1/7 + ...
4. Exemple d'exécution détaillé
A. Matrice des pixels M (L=3, C=4)
L0: 0, 128, 255, 64
L1: 32, 0, 192, 10
L2: 255, 200, 1, 128
Procédure SaisieDims(@L, @C : Entier)
Début
Répéter Lire(L) Jusqu'à L IN [2..30]
Répéter Lire(C) Jusqu'à C IN [2..30]
Fin // TDOL : Néant
Procédure RemplirMatricePixels(@M : MatricePixels, L, C : Entier)
Début
Pour i de 0 à L - 1 faire
Pour j de 0 à C - 1 faire
Répéter Lire(M[i, j]) Jusqu'à M[i, j] IN [0..255]
FinPour
FinPour
Fin // TDOL : i, j : Entier
Fonction DecBin(n : Entier) : Chaîne
Début
ch ← ""; x ← n
Tant que x ≠ 0 faire
r ← x MOD 2
Si r = 0 Alors ch ← "0" + ch Sinon ch ← "1" + ch FinSi
x ← x DIV 2
FinTantQue
Tant que Long(ch) < 8 faire ch ← "0" + ch FinTantQue
retourner ch
Fin // TDOL : ch: Chaîne / x, r: Entier
Fonction DecHex(n : Entier) : Chaîne
Début
Dig ← "0123456789ABCDEF"
ch ← ""; x ← n
Tant que x ≠ 0 faire
r ← x MOD 16; ch ← Dig[r] + ch; x ← x DIV 16
FinTantQue
Tant que Long(ch) < 2 faire ch ← "0" + ch FinTantQue
retourner ch
Fin // TDOL : Dig, ch: Chaîne / x, r: Entier
Procédure AfficherConversionID()
Début
Répéter Lire(ident) Jusqu'à ident IN [1..255]
Ecrire("Binaire : ", DecBin(ident))
Ecrire("Hexadécimal : ", DecHex(ident))
Fin // TDOL : ident : Entier
Procédure RemplirModeles(@P : TabModeles, @n : Entier)
Début
Répéter Lire(n) Jusqu'à n IN [1..30]
Pour i de 0 à n - 1 faire
Lire(P[i].Nom)
Répéter Lire(P[i].Score) Jusqu'à P[i].Score IN [1..1000]
Répéter Lire(P[i].NbEpoques) Jusqu'à P[i].NbEpoques IN [1..100000]
FinPour
Fin // TDOL : i : Entier
Fonction PGCD(a, b : Entier) : Entier
Début
Tant que b ≠ 0 faire
r ← a MOD b; a ← b; b ← r
FinTantQue
retourner a
Fin // TDOL : r : Entier
Procédure AfficherArithmétiqueModeles(P : TabModeles, n : Entier)
Début
Répéter Lire(i, j) Jusqu'à (i ≥ 0) ET (j ≥ 0) ET (i < n) ET (j < n)
a ← P[i].Score; b ← P[j].Score
g ← PGCD(a, b); m ← (a * b) DIV g
Ecrire("PGCD = ", g, " / PPCM = ", m)
Fin // TDOL : i, j, a, b, g, m : Entier
Procédure TriInsertionModeles(@P : TabModeles, n : Entier)
Début
Pour i de 1 à n - 1 faire
tmp ← P[i]; j ← i - 1
Tant que (j ≥ 0) ET (P[j].Score > tmp.Score) faire
P[j + 1] ← P[j]; j ← j - 1
FinTantQue
P[j + 1] ← tmp
FinPour
Fin // TDOL : i, j : Entier / tmp : Modele
Fonction RechDichoModeles(P : TabModeles, n, d : Entier) : Entier
Début
deb ← 0; fin ← n - 1; pos ← -1
Tant que (deb ≤ fin) ET (pos = -1) faire
m ← (deb + fin) DIV 2
Si P[m].Score = d Alors pos ← m
Sinon Si P[m].Score < d Alors deb ← m + 1
Sinon fin ← m - 1 FinSi
FinTantQue
retourner pos
Fin // TDOL : deb, fin, m, pos : Entier
Fonction ApproxPi(eps : Réel) : Réel
Début
k ← 1; sum ← 0; signe ← 1; terme ← 1
Tant que terme ≥ eps faire
terme ← 1 / (2 * k - 1)
sum ← sum + signe * terme
signe ← -signe; k ← k + 1
FinTantQue
retourner 4 * sum
Fin // TDOL: k, signe: Entier / sum, terme: Réel