Vous êtes sur la page 1sur 8

Solution Fiche de TP n°3 – (suite)

Exo5_Q1_Fiche3

Rappel : En système de numération, pour déterminer la représentation en base 3 d’un nombre


décimal donné, il faut procéder à des divisions entières successives du nombre décimal et de ses
quotient sur 3 jusqu’à obtention d’un quotient nul, et à chaque division entière en reporte le reste
de la division en commençant la notation à droite. La combinaison des restes donne la
représentation en base 3 d’un nombre décimal donné. Si le nombre décimal est inférieur à 3, sa
représentation est le nombre même.

Ex. (14)10 = (112)3

Algorithme Exo5_Q1_Fiche3

Variables
Entier N, Q, R, p, m, i, j
Début
Ecrire (' Donner le Nombre decimal ')
Lire (N)
Ecrire (' la représentation en base 3 est :’)
Si (N < 3) alors
Ecrire (N) ! en cas M < 3
Sinon
m0
p1
QN
Répéter ! détermination de la puissance 3^m
p  p*3
mm+1
Q  Q Div p ! Div est l’opération de la division entière
Jusqu’à (Q == 0)
m  m-1
pp/3
Q  N Div p
Ecrire (Q) ! affichage du dernier Reste de la division
! qui est ici le dernier Quotient non nul

Pour i = m, 1, -1 faire ! boucle pour déterminer les autres


QN ! Restes de la division sur 3

Pour j = 1, i-1, 1 Faire ! boucle pour déterminer chaque Reste


Q  Q Div 3
F.F.P
R  Q mod 3
Ecrire ( R ) ! affichage des Restes de la division sur 3
F.F.P
Fin si
Fin
Algorithme Exo5_Q2_Fiche3

Variables
Entier N, Q, R, p, m, i, j
Début
Ecrire (' Donner le Nombre decimal ')
Lire (N)
Ecrire ( ' la représentation en base 3 est :’)
Si (N < 3) alors
Ecrire (N) ! en cas M < 3
Sinon
m0
p1
QN
Tanque (Q < > 0) Faire ! détermination de la puissance 3^m
p  p*3
mm+1 ! Div est l’opération de la division entière
Q  Q Div p
F.F.T
m  m-1
pp/3
Q  N Div p
Ecrire (Q) ! affichage du dernier Reste de la division
! qui est ici le dernier Quotient non nul

Pour i = m, 1, -1 faire ! boucle pour déterminer les autres


QN ! Restes de la division sur 3
Pour j = 1, i-1, 1 Faire ! boucle pour déterminer chaque Reste
Q  Q Div 3
F.F.P
R  Q mod 3
Ecrire ( R ) ! affichage des Restes de la division sur 3
F.F.P
Fin si
Fin
Programme Exo5_Q2_Fiche3

!*****************************************
!programme qui affiche la représentation en base 3
!d'un nombre en base 10
!*****************************************

integer N, Q, R, p, m, i,j
write(*,*) ' Donner le Nombre decimal '
read(*,*) N

write(*,*) ' la représentation en base 3 est :’


if (N < 3) then
write(*,*) N ! en cas M < 3
Else
m=0
p=1
Q=N

do while (Q .ne. 0) ! détermination de la puissance 3^m


p = p*3
m=m+1
Q=Q/p
end do

m = m-1
p=p/3
Q=N/p
write(*,"(i2,$)") Q ! affichage du dernier Reste de la division
! qui est ici le dernier Quotient non nul
! le symbole $ supprime le retour à la ligne

do i = m,1,-1 ! boucle pour déterminer les autres


Q=N ! Restes de la division sur 3

do j = 1,i-1 ! boucle pour déterminer chaque Reste


Q=Q/3
end do
R = mod(Q,3)
write(*,"(i1,$)") R ! affichage des Restes de la division sur 3
! avec suppression des retours à la ligne
end do
end if
End

Réponse :
On ne peut pas utiliser la boucle ‘ pour …faire’ pour déterminer la puissance 3m parce qu’on ne
sait pas à l’avance le nombre d’itérations nécessaire pour calculer m.
Remarque 1:
Pour une représentation du nombre N dans une autre base b <= 9, il suffit de remplacer le nombre
3 par b.
!*********************************************
!programme qui affiche la représentation en base b <=9
!d'un nombre en base 10
!*********************************************
integer N, Q, R, p, m, i, j, b
write(*,*) ' Donner le Nombre decimal '
read(*,*) N
write(*,*) ' Donner la base '
read(*,*) b
write(*,*) ' la représentation en base ', b, ‘ est :’
if (N < b) then
write(*,*) N ! en cas M < b
Else
m=0
p=1
Q=N
do while (Q .ne. 0) ! détermination de la puissance b^m
p = p*b
m=m+1
Q=Q/p
end do

m = m-1
p=p/b
Q=N/p
write(*,"(i2,$)") Q ! affichage du dernier reste de la division
! qui est ici Q = N/p pour une division entière
! le symbole $ supprime le retour à la ligne

do i = m, 1, -1 ! boucle pour déterminer les autres


Q=N ! Restes de la division sur b

do j = 1, i, -1 ! boucle pour déterminer chaque Reste


Q=Q/b
end do
R = mod(Q,b)
write(*,"(i1,$)") R ! affichage des Restes de la division sur b
! avec suppression des retours à la ligne
end do
End if
End
Remarque 2:
L’utilisation de la notion des tableaux facilitera d’avantage la solution de l’exercice.

Algorithme Exo5_Fiche3

Variables
Entier N, Q, i, j, b
Tableau d’entier(1..100) R ! la dimension de R est choisie de manière arbitraire
Début
Ecrire (' Donner le Nombre decimal ')
Lire (N)
Ecrire (' Donner la base ')
Lire (b)
Ecrire (‘la représentation en base ‘, b, ‘ est :’ )
Si(N < b) alors
ecrire (N) ! en cas M < b
sinon
i0
QN

Répéter ! détermination des restes de la division Tanque (Q < > 0)


ii+1 ii+1
R[i]  Q mod b R(i)  Q mod b
Q = Q Div b Q = Q Div b
Jusqu’à (Q == 0) F.F.T

Pour j = i, 1, -1 Faire ! affichage de la représentation en base b


Ecrire (R[i])
F.F.P
Fin si
Fin
!*********************************************
!programme qui affiche la représentation en base b <= 9
!d'un nombre en base 10
!*********************************************

integer N, Q, i, j, b
integer, dimension (100) :: R
write(*,*) ' Donner Nombre decimal '
read(*,*) N
write(*,*) ' Donner base '
read(*,*) b

write(*,*) "la representation en base ",b, " est: "


if (N < b) then
write(*,*) N ! en cas N < M
else
i=0
Q=N
do while (Q .ne. 0) ! détermination de la puissance b^m
i=i+1
R(i) = mod(Q,b)
Q= Q/b
end do

do j = i, 1,-1 ! affichage des Restes de la division sur b


write(*,"(i2,$)") R(j) ! avec suppression des retours à la ligne
end do
end if
End
Algorithme Exo6_Fiche3
Calcule les nombres et des moyennes des éléments positifs, négatifs et nuls d'un vecteur.

Variables
Entier N, i, Nbp, Nbn, Nbz
Réel Mp, Mn
Tableau de réel(1..100) V
Début
Ecrire (' Donner la longueur du vecteur ')
Lire (N)
Nbp  0
Nbn  0
Nbz  0
Mp  0
Mn  0
Ecrire (' Donner les elements du vecteur')
Pour i = 1, N, 1
Ecrire ("V(", i, ")= ")
Lire (V[i])
Si(V[i] > 0 ) alors
Nbp  Nbp + 1
Mp  Mp + V[i]
Fin si
Si(V[i] < 0 ) alors
Nbn  Nbn + 1
Mn  Mn + V[i]
Fin si
Si(V[i] == 0 ) alors
Nbz  Nbz + 1
Fin si
F.F.P

Si(Nbp == 0)alors
Ecrire "pas d'éléments positif"
Sinon
Mp  Mp / Nbp
Ecrire ('le nombre des éléments positifs est :', Nbp)
Ecrire ('la moyenne des éléments positifs est :', Mp)
Fin si

Si(Nbn == 0)alors
Ecrire ("pas d'éléments négatifs")
Sinon
Mn  Mn / Nbn
Ecrire ('le nombre des éléments négatifs est :', Nbn)
Ecrire ('la moyenne des éléments négatifs est :', Mn)
Fin si
Ecrire ('le nombre des éléments nuls est :', Nbz)
Fin
Programme Exo6_Fiche3
!*************************************************
!programme qui calcule les nombres et les moyennes
!des éléments positifs, négatifs et nuls d'un vecteur
!*************************************************
integer N, i, Nbp, Nbn, Nbz
real Mp, Mn
real, dimension (100) :: V
write(*,*) ' Donner la longueur du vecteur '
read(*,*) N
Nbp = 0
Nbn = 0
Nbz = 0
Mp = 0
Mn = 0

write(*,*) ' Donner les elements du vecteur'


do i = 1, N, 1
write(*,"(a3,i1,a2,$)") "V(",i,")= " ! ce format permet d'afficher V(i)=
read(*,*) V(i) ! et de lire sur la même ligne (voir cours no5)
if(V(i) > 0 ) then
Nbp = Nbp + 1
Mp = Mp + V(i)
elseif(V(i) < 0 ) then
Nbn = Nbn + 1
Mn = Mn + V(i)
else
Nbz = Nbz + 1
end if
end do

if(Nbp == 0)then
write(*,*) "pas d'elements positif"
else
Mp = Mp / Nbp
write(*,*) 'le nombre des elements positifs est :', Nbp
write(*,*) 'la moyenne des elements positifs est :', Mp
end if

if(Nbn == 0)then
write(*,*) "pas d'elements negatifs"
else
Mn = Mn / Nbn
write(*,*) 'le nombre des elements negatifs est :', Nbn
write(*,*) 'la moyenne des elements negatifs est :', Mn
end if

write(*,*) 'le nombre des elements nuls est :', Nbz


End

Vous aimerez peut-être aussi