Section : Sciences de l’informatique | Épreuve : Algorithmique et Programmation | Durée : 3h
Exercice 1 (3,25 points)
Soit l’algorithme de la fonction Inconnue suivant :
Fonction Inconnue (a, b: Entier): Entier
DEBUT
Si b = 0 Alors
Retourner 0
Sinon
Si b Mod 2 = 0 Alors
Retourner Inconnue (2*a, b Div 2)
Sinon
Retourner a + Inconnue (a, b - 1)
FinSi
FinSi
FIN
NB : a et b sont deux entiers positifs.
Travail demandé :
Pour chacun des deux cas suivants, donner le résultat retourné par la fonction Inconnue :
En déduire le rôle de la fonction Inconnue.
Soit Ft un fichier texte déjà rempli, contenant dans chaque ligne deux entiers positifs A et B séparés par un espace. À partir du fichier Ft, on se propose de créer et de remplir un fichier d’enregistrements Fb où chaque enregistrement est composé des champs A, B et R (le résultat de Inconnue(A, B)).
On donne l’algorithme de la procédure Remplir comportant des erreurs :
Procédure Remplir (ch1, ch2: Chaine de caractères)
DEBUT
Ouvrir (ch1, Ft, "r")
Ouvrir (ch2, Fb, "rb")
Tant que Fin_fichier (Ft) Faire
Lire (Ft, ch)
p ← Pos(" ", ch)
V.A ← Valeur(Sous_chaine (ch, 0, p))
V.B ← Valeur(Effacer (ch, 0, p+1))
V.R ← Inconnue (A, B)
Ecrire (V, Fb)
Fin Tant que
Fermer (Ft)
Fermer (Fb)
FIN
a- Reproduire et corriger les lignes erronées dans un tableau.
b- Dresser le tableau de déclaration des objets locaux (TDOL) et des nouveaux types (TDNT).
Corrigé & Barème — Exercice 1 (Total : 6,5 pts)
1) Résultats (2 pts) :
– Cas 1 (a=8, b=7) : 56
– Cas 2 (a=10, b=6) : 60
2) Rôle (1 pt) : La fonction Inconnue retourne le résultat de la multiplication de deux entiers.
3) Correction de la procédure Remplir (2,5 pts) :
Ligne erronée
Correction
Ouvrir (ch2, Fb, "rb")
Ouvrir (ch2, Fb, "wb")
Tant que Fin_fichier (Ft) Faire
Tant que Non (Fin_fichier (Ft)) Faire
Lire (Ft, ch)
Lire_ligne (Ft, ch)
V.R ← Inconnue (A, B)
V.R ← Inconnue (V.A, V.B)
Ecrire (V, Fb)
Ecrire (Fb, V)
TDNT & TDOL (1 pt) :
Nouveau type
Enreg = Enregistrement
A: Entier
B: Entier
R: Entier
Fin
Fiche = Fichier d'Enreg
Objet | Type/Nature
Ft | Fichier texte
Fb | Fiche
ch | Chaine de caractères
p | Entier
V | Enreg
Exercice 2 (2,75 points)
Un bureau d’étude classe des compagnies aériennes selon les appréciations des clients (« Satisfait » ou « Insatisfait », nombre ≤ 10000) à partir d’un fichier d’enregistrements Fa (Champs : Comp, NSat, Ninsat).
Travail demandé :
Écrire une procédure Tri(Ch1, Ch2) qui permet de créer et de remplir un fichier texte Fc trié selon l’ordre décroissant du champ NSat.
Corrigé & Barème — Exercice 2 (Total : 5,5 pts)
Procédure Tri (Ch1, Ch2: Chaîne de caractères)
DEBUT
Ouvrir (Ch1, Fa, "rb")
Ouvrir (Ch2, Fc, "w")
n ← 0
Tant que Non (Fin_fichier (Fa)) Faire
Lire (Fa, e)
T[n] ← e
n ← n + 1
Fin Tant que
Répéter
Test ← Vrai
Pour i de 0 à n-2 Faire
Si T[i].NSat < T[i+1].NSat Alors
e ← T[i]
T[i] ← T[i+1]
T[i+1] ← e
Test ← Faux
Fin Si
Fin Pour
Jusqu'à Test
Pour i de 0 à n-1 Faire
Ch ← T[i].Comp + " " + Convch(T[i].NSat) + " " + Convch(T[i].Ninsat)
Ecrire (Fc, Ch)
Fin Pour
Fermer (Fa)
Fermer (Fc)
FIN
Exercice 3 (5 points)
Soit N un entier strictement supérieur à 10. On note b la somme des facteurs premiers distincts de N. L’entier N est dit nombre fort si la somme, calculée en base 10, des chiffres de sa représentation en base b est égale à b.
On rappelle que dans une base b, les chiffres utilisés vont de 0 à b-1. Lorsque la base est supérieure à 10 et inférieure ou égale à 16, les valeurs 10, 11, 12, 13, 14 et 15 sont représentées respectivement par A, B, C, D, E et F.
Travail demandé :
Écrire un algorithme d’un module NbreFort(N) qui permet de créer et de remplir un fichier d’enregistrements nommé "NF.dat" par tous les nombres forts de l’intervalle [10..N] et tel que la somme de leurs facteurs premiers distincts soit inférieure ou égale à 16. Chaque enregistrement du fichier est composé des champs suivants :
Nbre : le nombre fort écrit dans la base décimale.
Base : la base b (la somme des facteurs premiers distincts de Nbre).
Corrigé & Barème — Exercice 3 (Total : 10 pts)
Procédure NbreFort (N: Entier)
DEBUT
Ouvrir ("D:\Travail\NF.dat", F, "wb")
Pour i de 10 à N Faire
b ← SommeFacteurs (i)
Si b ≤ 16 et Somme (Conversion (i, b)) = b Alors
e.Nbre ← i
e.Base ← b
Ecrire (F, e)
Fin Si
Fin Pour
Fermer(F)
FIN
Fonction Somme (ch: Chaine de caractères): Entier
DEBUT
s ← 0
Pour i de 0 à Long(ch)-1 Faire
Si (ch[i] ≥ "0") Et (ch[i] ≤ "9") Alors
s ← s + Valeur(ch[i])
Sinon
s ← s + Ord(ch[i]) - 55
Fin Si
Fin Pour
Retourner s
FIN
Fonction Conversion (n, b: Entier): Chaine de caractères
DEBUT
Ch ← ""
Répéter
Si n Mod b < 10 Alors
C ← Convch (n Mod b)
Sinon
C ← Chr((n Mod b) + 55)
Fin Si
Ch ← C + Ch
n ← n Div b
Jusqu'à n = 0
Retourner Ch
FIN
Exercice 4 (9 points)
En se basant sur le triangle de Pascal, déterminer les termes de la suite de Fibonacci et de la suite diatomique de Stern, puis traiter un jeu promotionnel à partir d’un fichier de matricules "Fidele.txt" pour générer "Gagnants.txt".
Travail demandé :
Procédure TrianglePascal (@M: Mat, N: Entier).
Procédure Remplir (M, N, @TFS: Tab).
Programme principal avec gestion des fichiers "Fidele.txt" et "Gagnants.txt".
Corrigé & Barème — Exercice 4 (Total : 18 pts)
1) Procédure Triangle Pascal (2,5 pts) :
Procédure TrianglePascal (@M: Mat, N: Entier)
DEBUT
Pour i de 0 à N-1 Faire
M[i, 0] ← 1
M[i, i] ← 1
Pour j de 1 à i-1 Faire
M[i, j] ← M[i-1, j-1] + M[i-1, j]
Fin Pour
Fin Pour
FIN
2) Procédure Remplir (7 pts) :
Procédure Remplir (M: Mat, N: Entier, @TFS: Tab)
DEBUT
Pour d de 0 à N-1 Faire
Fi ← 0
St ← 0
j ← 0
Pour i de d à (d+1) Div 2 (Pas -1) Faire
Fi ← Fi + M[i, j]
Si (M[i, j] Mod 2) = 1 Alors
St ← St + 1
Fin Si
j ← j + 1
Fin Pour
e.Fib ← Fi
e.Ste ← St
TFS[d+1] ← e
Fin Pour
FIN
3) Programme principal et modules associés (8,5 pts) :
Algorithme Genere
DEBUT
Saisir(N)
TrianglePascal (M, N)
Remplir (M, N, TFS)
Ouvrir ("D:\Fidele.txt", Fa, "r")
Ouvrir ("D:\Gagnants.txt", Fg, "w")
Tant que (Non Fin_fichier(Fa)) Faire
Lire (Fa, Matr)
S ← 0
Pour i de 0 à 3 Faire
S ← S + Valeur(Matr[i])
Fin Pour
Si Recherche (S, N, TFS, "Fib") Et Recherche (S, N, TFS, "Ste") Alors
ch ← Matr + " Super gagnant"
Ecrire (Fg, ch)
SinonSi Recherche (S, N, TFS, "Fib") Ou Recherche (S, N, TFS, "Ste") Alors
ch ← Matr + " Gagnant"
Ecrire (Fg, ch)
Fin Si
Fin Tant que
Fermer(Fa)
Fermer(Fg)
FIN
Procedure Saisir(@N: Entier)
DEBUT
Répéter
Ecrire ("Donner un entier N: ")
Lire (N)
Jusqu'à (N ≥ 5) Et (N ≤ 100)
FIN
Fonction Recherche (nb, N: Entier, TFS: Tab, ch: Chaine de caractères): Booléen
DEBUT
i ← -1
test ← Faux
Répéter
i ← i + 1
Si (ch = "Fib" et TFS[i].Fib = nb) ou (ch = "Ste" et TFS[i].Ste = nb) Alors
test ← Vrai
Fin Si
Jusqu'à (i = N) ou test
Retourner test
FIN