LYCÉE PILOTE DU DEVOIR DE SYNTHESE ENSEIGNANT : SAMAALI C
KEF N°1
Épreuve : INFORMATIQUE Classe : 4ème Sc
Durée : 1h :30
Nom et Prénom :---------------------------------------------------- Classe :………………………………n° :……….
Exercice 1 : (3.5 points)
Soit la fonction suivante :
Fonction diviser_par_2(x :entier):entier
début
nb 0
Répéter
x x div 2
nbnb+1
jusqu'à(x = 1)
retourner (nb)
Fin
Question 1 : Quel type de valeur la fonction diviser_par_2 accepte en argument ?
entier
Question 2 : Quel est le rôle de la variable nb ?
Compter le nombre de division par 2
Question 3 : Que produit l'exécution de la fonction diviser_par_2(8) ?
3
Question 3 : Que produit l'exécution de la fonction diviser_par_2(1) ?
Boucle infinie
Question 4 : Que produit l'exécution de la fonction diviser_par_2(-1) ?
Boucle infinie
Question 5 : Comment modifieriez-vous le code pour garantir qu'il s'arrête correctement si la
valeur initiale de x est égale à 1 ?
Remplacer repeter…jusqu’à par Tant que … Faire
……………………………………………………………………………………………………………………………………………………
Question 6: En supposant que l'on modifie la condition d'arrêt dans la boucle pour x <= 1 au
lieu de x == 1, quel changement cela entraînerait-il dans le comportement du programme ?
Une itération en plus
…………………………………………………………………………………………………………………………………………………
Question 7 : Si x = 16, combien d'itérations la fonction devrait-elle effectuer avant
d'atteindre 1 ?
4 fois
Exercice 2 : (8 points)
Un village organise un festival avec plusieurs activités :
Une activité sportive qui se répète tous les S jours.
Une activité culturelle qui se répète tous les C jours.
Une activité musicale qui se répète tous les M jours.
Pour résoudre les questions suivantes, vous pouvez utiliser le PPCM (Plus Petit Commun
Multiple) des périodes indiquées.
Indication : Vous n'avez pas besoin d'implémenter la fonction PPCM dans votre solution. On
suppose qu'elle existe déjà et qu'elle peut être utilisée directement. Sa signature est la suivante :
PPCM(a, b : entier) : entier
Question 1 :
Ecrire un module qui permet de trouver après combien de jours les trois activités auront lieu
ensemble (jour commun) pour la première fois.
Exemple : si S=15, C=20 Et M=60, Les trois activités auront lieu ensemble pour la première
fois au 60ᵉ jour qui est le PPCM(15,20,60).
Fonction jour_commun(x,y,z :entier):entier
debut
retourner PPCM(PPCM(x,y),z)
Fin
Question 2 :
Ecrire un module qui permet de calculer combien de fois chaque activité (sportive, culturelle,
musicale) sera organisée avant ce jour commun.
Conseil : Divisez le jour commun obtenu à la question précédente par l'intervalle de
répétition de chaque activité.
Exemple :
Si S=15, C=20 Et M=60
1. Activité sportive : 60/15=4 fois.
2. Activité culturelle : 60/20=3 fois.
3. Activité musicale : 60/60=1 fois.
procédure activites_avant_jour_commun(s,c,m :entier)
debut
jour jour_commun (s,c,m)
Ecrire("Activité sportive : ", jour div s," fois")
Ecrire("Activité Culturelle: ", jour div c," fois")
Ecrire("Activité Musicale : ", jour div m," fois")
Fin
Question 3 :
Pour des raisons logistiques, le village décide de regrouper deux activités spécifiques
lorsqu'elles tombent le même jour. Écrire un module qui permet de trouver les jours où ces deux
activités coïncident parmi les 100 jours à venir.
Conseil : Calculez le PPCM des intervalles des deux activités. Les jours communs seront
les multiples de ce PPCM.
Exemple :
Activité sportive et culturelle (S=15 et C=20).
le seul jour où les deux activités coïncident parmi les 100 jours à venir est le 60ᵉ jour.
Procédure coincide(a,b:entier)
Debut
p PPCM(a,b)
Pour i de 1 a 100 faire
Si i mod p =0 Alors
Ecrire(i)
Fin si
Fin pour
Fin
Question 4 :
Un villageois souhaite réserver 6 jours pour participer aux 6 premières activités organisées,
indépendamment de leur nature. Ecrire un module qui détermine quels sont ces 6 jours.
Conseil : Sélectionnez les 6 premiers jours distincts où les différentes activités ont lieu en
fonction de leurs intervalles de répétition.
Procedure reservation(x,y,z :entier)
Debut
Nb 0
x1=x
y1=y
z1=z
Pour i de 1 à 6 faire
M min3(x,y,z)
Ecrire(M)
Si M =x1 Alors x1=x1+x fin si
Si M =y1 Alors y1=y1+y fin si
Si M =z1 Alors z1=z1+z fin si
Fin pour
Fin
Fonction min3(a,b,c :entier) :entier Fonction min2(a,b :entier) :entier
Debut Debut
Retourner(min2-min2(a,b),c) Si a>b Alors
Fin Retourner(b)
Sinon
Retourner(a)
Fin si
Fin
Problème : (8.5 points)
Une entreprise souhaite récompenser ses clients en attribuant des points bonus en fonction de
leur numéro d’identification (ID). Les points sont calculés selon des critères spécifiques :
1. Règles d’attribution des points :
o Si l’ID est un nombre premier (un nombre divisible uniquement par 1 et lui-
même), attribuer 200 points.
o Si l’ID est un nombre parfait (un nombre égal à la somme de ses diviseurs propres,
par exemple 28 = 1 + 2 + 4 + 7 + 14), attribuer 100 points.
o Si l’ID appartient à la suite de Fibonacci (une suite où chaque terme est la somme
des deux précédents, par exemple 0, 1, 1, 2, 3, 5, 8, ...), attribuer 50 points
supplémentaires.
2. Traitement des résultats :
o L’algorithme doit indiquer si l’ID est un nombre premier, parfait ou appartient à la
suite de Fibonacci, et afficher les résultats correspondants.
o Ensuite, il calcule le total des points attribués et les convertit en représentation
binaire.
Méthode de conversion en binaire :
Pour convertir un nombre en binaire :
1. Divisez successivement le nombre par 2 en notant le reste à chaque étape (0 ou 1).
2. Continuez jusqu’à ce que le quotient soit égal à 0.
3. Lisez les restes de bas en haut pour obtenir la représentation binaire.
Exemple de déroulement :
ID saisi : 28
o Nombre premier : Non.
o Nombre parfait : Oui (+100 points).
o Appartient à Fibonacci : Non.
o Total des points : 100 points.
o Conversion en binaire :
100÷2=50 (reste 0)
50÷2=25 (reste 0)
25÷2=12 (reste 1)
12÷2=6 (reste 0)
6÷2=3 (reste 0)
3÷2=1 (reste 1)
1÷2=0 (reste 1)
En lisant les restes de bas en haut : 1100100.
o Résultat final : 100 points en décimal = 1100100 en binaire.
Travail demandé :
1) Ecrire un algorithme du programme principal, solution a ce problème en le décomposant en
modules
2) Ecrire un algorithme pour chaque module envisagé
Algorithme recompense
Debut
Lire (id)
Total 0
Si Premier(id) Alors
Ecrire(“Nombre Premier : Oui”)
Total total + 200
Sinon
Ecrire(“ Nombre Premier : Non”)
Fin Si
Si Parfait(id) Alors
Ecrire(“Nombre Parfait : Oui”)
Total total + 100
Sinon
Ecrire(“ Nombre Parfait : Non”)
Fin Si
Si Fibonacci(id) Alors
Ecrire(“Nombre Fibonacci : Oui”)
Total total +50
Sinon
Ecrire(“ Nombre Fibonacci : Non”)
Fin Si
Ecrire(“Résultat final “, total, “=“, binaire(total))
Fin
Fonction Premier(x :entier) :booléen
Debut
Nb 0
Pour i de 1 a x Faire
Si x mod i=0 Alors
Nb Nb+1
Fin Si
Fin Pour
Retourner Nb=2
Fin
Fonction Parfait(x :entier) :booléen
Debut
Nb 0
Pour i de 1 a x-1 Faire
Si x mod i=0 Alors
Nb Nb+i
Fin Si
Fin Pour
Retourner Nb=x
Fin
Fonction Fibonacci(x :entier) :booléen
Debut
t=0
u00
u11
Tant que t< x Faire
t u0+u1
u0u1
u1 t
Fin Tant que
Retourner x=t
Fin
Fonction Binaire(x :entier) :Chaine
Debut
Ch=""
Tant que x>0 Faire
Ch convch(x mod 2) +Ch
x x div 2
Fin Pour
Retourner ch
Fin