Commissariat Régional de l’Éducation de Mahdia
Épreuve : Algorithmique et Programmation
Correction Section : Sciences de l’Informatique Niveau : 4ème année
Date : Mardi 02 Avril 2024 Durée : 3h
Exercice 1 : (3 points)
a. Quel est l’ordre de récurrence de cette fonction ? justifier votre réponse.
Le premier résultat toujours dépend de la valeur d’indice et la 2eme c’est la concaténation avec la
première et ainsi de suite donc cette fonction est récurent d’ordre 1
b. Exécuter manuellement inconnu ("245")
"101" ="101"
"100" +inconnu ("5") ="100101"
"010" +inconnu ("45") ="010100101"
inconnu ("245")
inconnu ("245")= "010100101"
c. Déduire le rôle de cette fonction sachant que CH est une chaine numérique de la base 8.
Fonction inconnu permet de convertir un nombre de la base 8 vers base 2
Exercice 2 : (4 points)
Fonction addition(N1,N2 :chaine,B :entier) :chaine R1
Début Sinon
Ch "" R0
Tant que long(N1)<long(N2) faire Finsi
N1"0"+N1 Si Z<=10 alors
Fintantque Chconvch(Z)+Ch
Sinon
Tant que long(N1)<long(N2) faire
ChCHR(Z+55)+ch
N1"0"+N1
Finsi
Fintantque
Finpour
R0
Si R !=0 alors
Pour i de long(N1)-1 a 0 faire (pas-1)
Ch "1"+Ch
Zadd(N1[i],N2[i],R)
Retourner Ch
Si Z>=B alors
Fin
ZZ-B Fonction add(a,b :caractère,r :entier) :entier
Début
Si "0"<=a<="9" alors
Xvaleur(a)
Sinon
Xord(a)-55
Finsi
Si "0"<=b<="9" alors
yvaleur(a)
Sinon
yord(a)-55
finsi
retourner x+y+r
fin
- Page 1 / 4 -
Exercice 3 : (5 points)
Réponse :
1) Fonction SommeChiffre(N :entier) :Entier 2) Fonction SMITH (N : Entier) : chaine
Début Début
Si N<10 alors i2
Retourner N ch""
Sinon s0
Retourner N mod 10 +SommeChiffre(N Div Tant que N ≠ 1 faire
10) Si N Mod i=0 alors
Fin Ch=Ch+convch(i)+"*"
N=N Div i
Si i<10 alors
TDOL
ss+i
objet T/N sinon
i,s Entier ss+sommeChiffre(i)
ch chaine Sinon
ii+1
finsi
fintantque
si s=sommeChiffre(N) alors
retourner ""
sinon retourner sous_chaine(ch,0,long(ch)-
1)
fin
3) procédure Generer (@G : texte ; D, F : entier)
Début
Ouvrir(«[Link]» ,G, «w» )
Pour i de D a F faire
TDOL
Si SMITH(i)≠"" alors
Ecrire_nl(convch(i)+ "facteur premier= "+SMITH(i)) objet T/N
Finsi i entier
Finpour
Fermer(G)
Fin
- Page 2 / 4 -
Exercice 4 : (8 points)
Algorithme P_P TDNT
Début Type
Nph1 "[Link]" eleve = enregistrement
Nph2 "Ré[Link]" NP_E :chaine
Transfert(Nph1,T,n) A :tableau de 8 entier
Calcul(T,n) Nb_ab :entier
modifier(Nph1,T,n) fin
Remplir(M,Nph1,n1) Tab=tableau de 40 eleve
Former(Nph2,Nph1,M,n2) Mat= tableau de 40*8 entier
Afficher(Nph2)
Fin TDOG
objet T/N
Nph1,Nph2 Chaine
T Tab
M Mat
n Entier
Transfert, Calcul, modifier, procédure
Remplir, Former, Afficher
Procédure Procédure modifier(Nph1 :chaine,T :tab,n :entier)
Transfert(Nph1 :chaine,@T :tab,@n :entier) Début
Début Ouvrir(Nph1,F,"wb")
Ouvrir(Nph1,F,"rb") Pour i de 0 a n-1 faire
n0 Ecrire(F,T[i])
TDOL
Tantque NON(fin_fichier(F)) faire Finpour objet T/N
Lire(F,T[n]) Fermer(F) I Entier
TDOL F Fichier eleve
nn+1 objet T/N
Fin
Fintantque I Entier
Fermer(F) F Fichier eleve
Fin
Procédure Calcul(@T :tab, n :entier) Fonction somme(t :tableau de 8 entier) :entier
Début Début
Pour i de 0 a n-1 faire S0
T[i].Nb_absomme(T[i].A) Pour i de 0 a 7 faire
Finpour SS+t[i]
Fin TDOL Finpour
TDOL
objet T/N Retourner S objet T/N
i Entier Fin i,S entier
somme Fonction
Procédure Remplir(@M :Mat,Nph1 :chaine, Procedure
@n :entier) former(Nph2,Nph1 :chaine,M :Mat,n :entier)
Début Début
- Page 3 / 4 -
Ouvrir(Nph1,F, "rb") Ouvrir(Nph1,Fb, "rb")
n0 Ouvrir(Nph1,Ft, "w")
Tant que NON(Fin_fichier(F)) faire i0
Lire(F,E) tantque NON(Fin_fichier(Fb)) faire
Si E.Nb_ab≠0 faire lire(Fb,E)
Pour j de 0 a 7 faire si E.Nb_ab≠0 faire
M[n,j]E.A[ j] ch""
Finpour pour j de 0 a 7 faire
nn+1 TDOL chch+convch(m[i,j])
objet T/N
finsi j Entier finpour
fintantque E eleve codeconv2_10(
fermer(F) F Fichier eleve ch1E.NP_E+ " *****
TDOL "+code
fin ecrire_nl(Ft,ch1) objet T/N
j Entier
ii+1 E eleve
finsi Fb Fichier eleve
Ft Texte
fintantque
Conv2_10 Fonction
fermer(Ft)
fermer(Fb)
fin
Fonction conv2_8(chb :chaine) :chaine Si chx[i] = "1" alors
Début ss+p
Ch "" Fin si
Tant que long(chb) mod 3 ≠ 0 faire p p * 2
chb "0" + chb Fin pour
Fin tant que Ch ch + convch(s)
Répéter Jusqu’à chb = ""
Chx sous_chaine(chb, 0, 3) Retourner ch
Chb effacer(chb, 0, 3) Fin
S 0 p 1
Pour i de 2 à 0 (pas = -1) faire
- Page 4 / 4 -