Vous êtes sur la page 1sur 5

‫جامعة محمد الصديق بن يحيى – جيجل‬

2021 / 2020 ‫كلية العلوم الدقيقة واإلعالم اآللي‬


( MI ) ‫قسم التعليم األساسي للرياضيات واإلعالم اآللي‬

Examen Algorithmique 1 – Semestre 1


Corrigé type

Exercice 1 (10 points) : Factorielle et plus …


Q1) (2 pts) Algorithme Factorielle
Var N, I, F : Entier
Début
Répéter
Lire(N) (0.25 pt)
Jusqu’à (N ≥ 0) (0.25 pt)
F1 (0.25 pt) // Solution 2
Pour I  1 à N faire (0.50 pt) Pour I  2 à N faire
FF*I (0.50 pt)
FPour
Ecrire( N, " ! = ", F ) (0.25 pt)
Fin
Q2) (3 pts) Algorithme NombreFactoriel
Var N, I, F : Entier
Début
Répéter
Lire( N ) (0.25 pt)
Jusqu’à N > 0 (0.25 pt)
I1 (0.25 pt)
F1 (0.25 pt)
TQ F < N Faire (0.50 pt)
II+1 (0.25 pt)
FF*I (0.25 pt)
FTQ
Si F = N Alors
Ecrire( N, " = ", I, " ! , c’est un nombre factoriel ")
Sinon (1 pt)
Ecrire( N, " n’est pas un nombre factoriel, K = ", I )
FSi
Fin

5 ‫ من‬1 ‫صفحة‬
Q3) (2 pt) // Ce programme vérifie si un entier N est un nombre factoriel.
#include <stdio.h>
int main( )
{ int n, i, f; (0.25 pt)
do {
printf("\nDonner la valeur de N (N Entier > 0). N= ? ") ;
scanf("%d", &n) ; (0.25 pt)
} while (n <= 0);
i = 1;

f = 1; // initialisations (0.25 pt)


while( f < n ) { (0.25 pt)
i++; (0.25 pt)
f *= i; (0.25 pt)}
if( f == n ) // prem != 0 // prem == 1
printf("\n%d = %d !, c'est un nombre factoriel\n", n, i);

else (0.50 pt)


printf("\n%d n'est pas un nombre factoriel, K = %d\n", n, i);
return 0 ; }
Q4) (3 pts) Algorithme NombresFactorions
Var N, NCopie, Chiffre, I, F, S, Cpt : Entier
Début
N1
Cpt  0 // Initialisations (0.25 pt)
Répéter
NCopie  N (0.25 pt)
// Calculer la somme des factorielles des chiffres de N.
S0
TQ N ≠ 0 Faire (0.25 pt)
Chiffre  N Mod 10 (0.25 pt)
N  N Div 10 (0.25 pt)
F1
Pour I  2 à Chiffre Faire
FF*I (0.25 pt)
FPour
SS+F (0.25 pt)
FTQ

5 ‫ من‬2 ‫صفحة‬
Si S = NCopie Alors (0.25 pt)
Ecrire( NCopie ) // Ce n’est pas N, car N est devenu nul. (0.25 pt)
Cpt  Cpt + 1 (0.25 pt)
FSi
N  NCopie + 1 // Passer à l’entier suivant (0.25 pt)
Jusqu’à Cpt = 4 (0.25 pt)
Fin
/* Pour information : les nombres factorions sont : 1, 2, 145 et 40585. */

Exercice 2 (10 Points) : Nombres premiers, …


Q1) (3 pts) Algorithme NombrePremier
Var N, D : Entier
Prem : Booléen (0.25 pt)
Début
Répéter
Lire( N ) // N est un entier > 1 (0.25 pt)
Jusqu’à ( N > 1 ) ET ( N Mod 2 = 1 )
Prem  Vrai // On suppose que N est premier. (0.25 pt)
D  3 // Le premier diviseur impair à tester est le nombre 3. (0.25 pt)
TQ (D  SQRT( N )) ET (Prem = Vrai) Faire // (D*D  N) ET (Prem = Vrai) (0.50 pt)
// SQRT( N ) est une fonction qui fournit la racine carrée de N.
Si N Mod D = 0 Alors // On a trouvé un diviseur !
Prem  Faux // Le nombre N n’est pas premier.
Sinon (1 pt)
D  D + 2 // On passe au nombre impair suivant.
FSi
FTQ
Si Prem = Vrai Alors
Ecrire( N, " est premier ")
Sinon (0.50 pt)
Ecrire( N, " n’est pas premier ")
FSi
Fin

5 ‫ من‬3 ‫صفحة‬
Q2) (2 pts) Si N = 17 alors on a : Si N = 37 alors on a :
N D Prem N D Prem
17 3 Vrai (0.25 pt) 37 3 Vrai
(0.25 pt)
5 5
➔ Message : « 17 est premier » (0.25 pt) 7
Si N = 27 alors on a : ➔ Message : «37 est premier » (0.25 pt)
N D Prem Si N = 47 alors on a :
27 3 Vrai (0.25 pt) N D Prem
Faux 37 3 Vrai
➔ Message : « 27 n’est pas premier » (0.25 pt) 5 (0.25 pt)

7
➔ Message : «47 est premier » (0.25 pt)
Q3) (5 pts) Algorithme NombresPremiers

Const NMin = 1001

NMax = 9999

TAILLE = 100 (0.25 pt)


Var N, D, Cpt, S : Entier
Prem : Booléen
TAB : Tableau[ 1 .. TAILLE ] d’entier (0.25 pt)
Début
Cpt  0 (0.25 pt)
N  NMIN // 1001 est impair (0.25 pt)
Répéter
Prem  Vrai // On suppose que N est premier.
D3
TQ (D  SQRT( N )) ET (Prem = Vrai) Faire
Si N Mod D = 0 Alors
Prem  Faux (0.50 pt)
Sinon
DD+2
FSi
FTQ

5 ‫ من‬4 ‫صفحة‬
Si Prem = Vrai Alors (0.25 pt)
NCopie  N (0.25 pt)
// Calculer la somme des chiffres de NCopie
S0
TQ NCopie ≠ 0 Faire
S  S + NCopie Mod 10 (0.50 pt)
NCopie  NCopie Div 10
FTQ
Si S Mod 2 ≠ 0 Alors // La somme des chiffres est impaire (0.25 pt)
D3
TQ (D  SQRT( S )) ET (Prem = Vrai) Faire
Si S Mod D = 0 Alors
Prem  Faux
Sinon (0.25 pt)
DD+2
FSi
FTQ
Si Prem = Vrai Alors // Compter et sauvegarder le nombre trouvé (0.25 pt)
Cpt  Cpt + 1 (0.25 pt)
TAB[ Cpt ]  N (0.25 pt)
FSi
FSi
FSi
NN+2 // Passer au nombre impair suivant (0.25 pt)
Jusqu’à ( N > NMAX ) OU ( Cpt = TAILLE ) (0.50 pt)
Ecrire(" Il existe ", Cpt, " nombres spéciaux, qui sont : ")
Pour D  1 à Cpt Faire
Ecrire( TAB[ D ] ) // Affichage des cases non-vides du tableau (0.50 pt)
FPour
Fin
*** Fin du corrigé-type ***

5 ‫ من‬5 ‫صفحة‬

Vous aimerez peut-être aussi