Vous êtes sur la page 1sur 10

M.

Yassine ELGHARBI 4 SI

Problème 1 :
On se propose d’écrire une application informatique permettant de vérifier si un entier
N naturel non nul est divisible par 8 ou non en utilisant la règle de divisibilité suivante :
N est divisible par 8 si l’un des cas suivants est vérifié :
- Si le chiffre des centaines est pair et le nombre formé par les 2 derniers chiffres est
multiple de 8.
- Si le chiffre des centaines est impair et le nombre formé par les 2 derniers chiffres
diminué de 4 est multiple de 8.
Exemple :
71432 est divisible par 8 car 4 est pair et 32 est divisible par 8.
65128 est divisible par 8 car 1 est impair et 28-4=24 qui est divisible par 8.
Questions
1. Analyser le problème et donner l’algorithme du programme principal.
2. Analyser chaque module et donner son algorithme.
Pré-Analyse
1ère cas
Pour N=71432
On a 71432 Il faut extraire à partir de N le chiffre de centaine
et le nombre formé par les deux derniers chiffres
4 32 . les deux
4 représente le chiffre de centaine
32 représente le nombre formé de deux derniers chiffres
4 est un nombre pair => il faut tester la divisibilité de 32 par 8

32 est divisible par 8, alors, 71432 est divisible par 8


ère
2 cas
Pour N=65128
On a 65128 Il faut extraire à partir de N le chiffre de centaine
et le nombre formé par les deux derniers chiffres
1 28 . les deux
1 représente le chiffre de centaine
28 représente le nombre formé de deux derniers chiffres
1 est un nombre impair => il faut tester la divisibilité de ( 28 - 4) par 8

( 28 - 4)=24, 24 est divisible par 8, alors, 65128 est divisible par 8


Analyse
Analyse du problème
Nom : Divisibilite_par_8
Résultat= Ecrire(N, msg)
Msg= [ ]msg Fn Test ( n )
N= [ ] Proc Saisie ( n )
FIN Divisibilite_par_8
T.D.O.G
Objet Type/Nature
Test Fonction
Saisie Procédure
Msg chaine
n mot

Algorithmique et Programmation en Pascal 1


M. Yassine ELGHARBI 4 SI

Analyse de la procédure Saisie


DEF Proc Saisie ( Var n :mot )
Résultat = n
N = [ ] Répeter
n=donnée("Saisir un entier positif supérieur à 0 ")
jusqu’à (n>0)
FIN Saisie
Analyse de la fonction Test
DEF Fn Test ( n : mot ) : chaine
Résultat = Test
Test ch
Ch = [ ] Si Fn Div_8( N, C, NB ) alors
Ch " est divisible par 8 "
Sinon
Ch " n’est pas divisible par 8 "
Fin si
C, NB = Proc extraire( N, C, NB )
FIN Test
T.D.O.L
Objet Type/Nature
ch chaine
Analyse de la fonction Div_8
DEF Fn Div_8 ( n,c :mot ; nb : octet ) : booleen
Résultat = div_8
Div_8 aux
aux = [ ] Si (Fn parite (c) ET Fn Div1 (nb)) OU (Non Fn parite ( c ) ET Fn Div2 ( nb )) Alors
aux vrai
sinon
aux faux
fin si
FIN Div_8
T.D.O.L
Objet Type/Nature
aux booleen
Analyse de la procédure Extraire
DEF Proc Extraire( N :mot ; Var C : mot ; Var NB : octet )
Résultat = (C, NB)
C=[]C ( N DIV 100) MOD 10
NB = [ ] NB N MOD 100
FIN Extraire
Analyse de la fonction Parite
DEF Fn Parite ( C : mot )
Résultat = Parite
Parite C MOD 2 = 0
FIN Parite

Algorithmique et Programmation en Pascal 2


M. Yassine ELGHARBI 4 SI

Analyse de la fonction Div1


DEF Fn Div1 ( nb : mot )
Résultat = Div1
Div1 Nb MOD 8 = 0
FIN Div1
Analyse de la fonction Div2
DEF Fn Div2 ( nb : mot )
Résultat = Div2
Div2 ( (Nb – 4 ) MOD 8 ) = 0
FIN Div2
Les Algorithmes
Algorithme du PP
0) Début Divisibilite_par_8
1) Proc Saisie ( n )
2) Msg Fn Test ( n )
3) Ecrire(N, msg)
4) FIN Divisibilite_par_8
Algorithme de la procédure Saisie
0) DEF Proc Saisie ( Var n :mot )
1) Répeter
Saisir("Saisir un entier positif supérieur à 0 ")
Lire( N )
jusqu’à (n>0)
2) FIN Saisie
Algorithme de la fonction Test
0) DEF Fn Test ( n : mot ) : chaine
1) Proc extraire( N, C, NB )
2) Si Fn Div_8( N, C, NB ) alors
Ch " est divisible par 8 "
Sinon
Ch " n’est pas divisible par 8 "
Fin si
3) Test ch
4) FIN Test
Algorithme de la fonction Div2
0) DEF Fn Div2 ( nb : mot )
1) Div2 ( (Nb – 4 ) MOD 8 ) = 0
2) FIN Test
Algorithme de la fonction Div1
0) DEF Fn Div1 ( nb : mot )
1) Div1 Nb MOD 8 = 0
2) FIN Div1

Algorithmique et Programmation en Pascal 3


M. Yassine ELGHARBI 4 SI

Algorithme de la fonction Parite


0) DEF Fn Parite ( C : mot )
1) Parite C MOD 2 = 0
2) FIN Parite
Algorithme de la procédure Extraire
0) DEF Proc Extraire ( N :mot ; Var C : mot ; Var NB : octet )
1) NB N MOD 100
2) C ( N DIV 100) MOD 10
3) FIN Extraire
Algorithme de la fonction Div_8
0) DEF Fn Div_8 ( n,c :mot ; nb : octet ) : booleen
1) Si (Fn parite ( c ) ET Fn Div1 ( nb )) OU (Non Fn parite ( c ) ET Fn Div2 ( nb )) Alors
aux vrai
sinon
aux faux
fin si
2) Div_8 aux
3) FIN Div_8

Problème 2 :
On se propose d’écrire une application informatique permettant de vérifier si un entier N
naturel non nul est divisible par 13 ou non en utilisant la règle de divisibilité suivante:
Il faut ajouter à N amputé de son chiffre des unités, le chiffre supprimé multiplié par 4 et
recommencer avec le nombre obtenu jusqu'à avoir un nombre inférieur ou égal à 13
Exemple :
Soit le nombre224185

224185

22418 + (4 × 5) = 22438

22438

2243 + (4 × 8) =2275

2275

227 + (4 × 5) = 247

247

24 + (4 × 7) = 52

52
Nous obtenons 13 donc 224185 est divisible par 13.
5 + (4 × 2) = 13
Questions
1. Analyser le problème et donner l’algorithme du programme principal.
2. Analyser chaque module et donner son algorithme.

Algorithmique et Programmation en Pascal 4


M. Yassine ELGHARBI 4 SI

Analyse
Analyse du problème
Nom : Divisibilite_par_13
Résultat= Ecrire(N, msg)
Msg= [ ]msg Fn Test ( n )
N= [ ] Proc Saisie ( n )
FIN Divisibilite_par_13
T.D.O.G
Objet Type/Nature
Test Fonction
Saisie Procédure
Msg chaine
n mot

Analyse de la procédure Saisie


DEF Proc Saisie ( Var n :mot )
Résultat = n
N = [ ] Répeter
n=donnée("Saisir un entier positif supérieur à 0 ")
jusqu’à (n>0)
FIN Saisie
Analyse de la fonction Test
DEF Fn Test ( n : mot ) : chaine
Résultat = Test
Test ch
Ch = [ ] Si Fn Div_13( N ) alors
Ch " est divisible par 13 "
Sinon
Ch " n’est pas divisible par 13 "
Fin si
FIN Test
Analyse de la fonction Div_13
DEF Fn Div_13 ( N : mot ) : booleen
Résultat = div_13
Div_13 N MOD 13 = 0
N = [ ] Répeter
Proc Extraire ( N, NB, U )
N NB + 4 * U
Jusqu’à ( N ≤ 13 )
FIN Div_13
Analyse de la procédure Extraire
DEF Proc Extraire( N : mot ; Var NB : mot ; Var U : octet )
Résultat = ( U, NB )
NB = [ ] NB N DIV 10
U=[]U N MOD 10
FIN Extraire

Algorithmique et Programmation en Pascal 5


M. Yassine ELGHARBI 4 SI

Les Algorithmes
Algorithme du PP
0) Début Divisibilite_par_13
1) Proc Saisie ( n )
2) Msg Fn Test ( n )
3) Ecrire(N, msg)
4) FIN Divisibilite_par_13
Algorithme de la procédure Saisie
0) DEF Proc Saisie ( Var n :mot )
1) Répeter
Saisir("Saisir un entier positif supérieur à 0 ")
Lire( N )
jusqu’à (n>0)
2) FIN Saisie
Algorithme de la fonction Test
0) DEF Fn Test ( n : mot ) : chaine
1) Proc extraire( N, NB, U )
2) Si Fn Div_13( N, NB, U ) alors
Ch " est divisible par 13 "
Sinon
Ch " n’est pas divisible par 13 "
Fin si
3) Test ch
4) FIN Test
Algorithme de la procédure Extraire
0) DEF Proc Extraire ( N :mot ; Var NB : mot ; Var U : octet )
1) NB N DIV 10
2) U N MOD 10
3) FIN Extraire
Algorithme de la fonction Div_13
0) DEF Fn Div_13 ( n :mot ) : booleen
1) Répeter
Proc Extraire ( N, NB, U )
N NB + 4 * U
Jusqu’à ( N ≤ 13 )
2) Div_13 N MOD 13 = 0
3) FIN Div_13

Problème 3 :
On se propose d’écrire une application informatique permettant de vérifier si un entier N
naturel non nul est divisible par 13 ou non en utilisant la règle de divisibilité suivante:
Il faut ajouter à N amputé de son chiffre des unités, le chiffre supprimé multiplié par 4 et
recommencer avec le nombre obtenu jusqu'à avoir un nombre inférieur ou égal à 13
L’application doit sauvegarder dans un fichier texte la traçabilité jusqu’à avoir le nombre
inférieur ou égal à 13. Le fichier admet pour non physique « c:\tarce.txt »

Algorithmique et Programmation en Pascal 6


M. Yassine ELGHARBI 4 SI

Analyse
Analyse du problème
Nom : Divisibilite_par_13
Résultat= Proc Affiche ( F )
F = [ ] Proc Remplir ( n, F )
N= [ ] Proc Saisie ( n )
F= [ ] Proc Association ( F )
FIN Divisibilite_par_13
T.D.O.G
Objet Type/Nature
Test Fonction
Saisie Procédure
Msg chaine
N mot
F Texte
Analyse de la procédure Association
DEF Proc Association (Var F : texte)
Résultat = F
f = [ ] Associer (f, "c:\trace.txt")
FIN Association
Analyse de la procédure Saisie
DEF Proc Saisie ( Var n :mot )
Résultat = n
N = [ ] Répeter
n=donnée( "Saisir un entier positif supérieur à 0 ")
jusqu’à (n>0)
FIN Saisie
Analyse de la procédure Remplir
DEF Proc Remplir ( n : mot ; Var F : texte )
Résultat = F
Fermer ( F )
F = Ecrire_nl ( F, Ch )
Ch= Ch Concat ( ‘’Donc la divisibilité de ‘’,chn,’’par 13 est ’’, Div_13 ( N ) )
F = [ ] Répeter
Proc Extraire ( N, NB, U )
N Fn Calculer ( NB, U )
Proc Composer ( N, NB, U, Ch )
Ecrire_nl ( F, Ch )
Jusqu’à ( N ≤ 13 )
Ecrire_nl( F, ‘’Pour ‘’+Chn)
Chn = convCh ( N, chn )
ReCreer( F )
FIN Remplir
Analyse de la fonction Calcul
DEF Fn Calcul ( NB : mot ; U : octet ) : mot
Résultat = calcul

Algorithmique et Programmation en Pascal 7


M. Yassine ELGHARBI 4 SI

Calcul NB + 4 * U
FIN calcul
Analyse de la procédure Extraire
DEF Proc Extraire( N : mot ; Var NB : mot ; Var U : octet )
Résultat = ( U, NB )
NB = [ ] NB N DIV 10
U=[]U N MOD 10
FIN Extraire
Analyse de la procédure Composer
DEF Proc Composer ( N, NB : Mot ; U : octet ; Var Ch : chaine )
Résultat = Ch
Ch = [ ] Ch concat ( chnb, " + 4 * ", chu, " = ",chn )
Chu = [ ] ConvCh (u, Chu)
Chnb = [ ] ConvCh (NB, Chnb)
Chn = [ ] ConvCh (N, Chn)
FIN Composer
Analyse de la fonction Div_13
DEF Fn Div_13 ( N : mot ) : booleen
Résultat = div_13
Div_13 N MOD 13 = 0
N = [ ] Répeter
Proc Extraire ( N, NB, U )
N Fn Calculer ( NB, U )
Jusqu’à ( N ≤ 13 )
FIN Div_13
Analyse de la procédure Afficher
DEF Proc afficher ( Var F : texte )
Résultat = Aff
Fermer ( F )
[ Ouvrir( F ) ] Tant que ( Non Fin_fichier( F) )
Lire_nl( F, Ch )
Ecrire( Ch )
Fin tant que
FIN afficher
Les Algorithmes
Algorithme du PP
0) Début Divisibilite_par_13
1) Proc Association ( F )
2) Proc Saisie ( n )
3) Proc Remplir ( n, F )
4) Proc Affiche ( F )
5) FIN Divisibilite_par_13

Algorithmique et Programmation en Pascal 8


M. Yassine ELGHARBI 4 SI

Algorithme de la procédure Association


0) DEF Proc Association (Var f : Texte)
1) Associer (f, "c:\trace.txt")
2) FIN Association
Algorithme de la procédure Saisie
0) DEF Proc Saisie ( Var n :mot )
1) Répeter
Saisir("Saisir un entier positif supérieur à 0 ")
Lire( N )
jusqu’à (n>0)
2) FIN Saisie
Algorithme de la procédure Extraire
0) DEF Proc Extraire( N : mot ; Var NB : mot ; Var U : octet )
1) U N MOD 10
2) NB N DIV 10
3) FIN Extraire
Algorithme de la procédure Composer
0) DEF Proc Composer ( N, NB : Mot ; U : octet ; Var Ch : chaine )
1) ConvCh (N, Chn)
2) ConvCh (NB, Chnb)
3) ConvCh (u, Chu)
4) Ch concat ( chnb, " + 4 * ", chu, " = ",chn )
5) FIN Composer
Algorithme de la fonction Calcul
0) DEF Fn Calcul ( NB : mot ; U : octet ) : mot
1) Calcul NB + 4 * U
2) FIN calcul
Algorithme de la fonction Remplir
0) DEF Proc Remplir ( n : mot ; Var F : texte )
1) ReCreer( F )
2) ConvCh ( N, chn )
3) Ecrire_nl( F, ‘’Pour ‘’+Chn)
4) Répeter
Proc Extraire ( N, NB, U )
N Fn Calculer ( NB, U )
Proc Composer ( N, NB, U, Ch )
Ecrire_nl ( F, Ch )
Jusqu’à ( N ≤ 13 )
5) Ch Concat ( ‘’Donc la divisibilité de ‘’,chn,’’par 13 est ’’, Div_13 ( N ) )
6) Ecrire_nl ( F, Ch )
7) Fermer ( F )
8) FIN Remplir

Algorithmique et Programmation en Pascal 9


M. Yassine ELGHARBI 4 SI

Algorithme de la fonction Div_13


0) DEF Fn Div_13 ( n :mot ) : booleen
1) Répeter
Proc Extraire ( N, NB, U )
N NB + 4 * U
Jusqu’à ( N ≤ 13 )
2) Div_13 N MOD 13 = 0
3) FIN Div_13
Algorithme de la procédure Afficher
0) DEF Proc afficher ( Var F : texte )
1) Ouvrir( F )
2) Tant que ( Non Fin_fichier( F) )
Lire_nl( F, Ch )
Ecrire( Ch )
Fin tant que
3) Fermer ( F )
4) FIN afficher

D’autres solutions modulaires


Algorithme de la procédure Extraire
0) DEF Proc Extraire( N : mot ; Var NB : mot ; Var U : octet )
1) Convch( N, Chn )
2) Chu Sous-chaine ( chn, Long(chn), 1 )
3) chnb Sous-chaine ( chn, 1, Long(chn)-2 )
4) Val( chu, u, e)
5) Val( chnb, nb, e)
6) FIN Extraire
Algorithme de la fonction Div_13
0) DEF Fn Div_13 ( n : mot ) : booleen
1) Si ( n < 13 ) alors
Proc Extraire ( N, NB, U )
Div_13 Fn Div_13( NB + 4 * U )
sinon
Div_13 N MOD 13 = 0
Fin si
2) FIN Div_13

Algorithmique et Programmation en Pascal 10

Vous aimerez peut-être aussi