Solution Fiche de TP n°3 – (suite2)
Exo7_Fiche3
Algorithme Exo7_Fiche3
Calcule de la somme d'une matrice avec un vecteur.
Variables
Entier M, N, i, j
Tableau d’Entier (1..20,1..10) A
Tableau d’ Entier (1..20) B
Début
Ecrire (‘' Donner le nombre de lignes et colonnes de A ')
Lire (M, N)
Ecrire (' Donner les éléments de la matrice colonne par colonne')
Pour i = 1, N, 1 faire
Pour j = 1, M, 1 faire
Ecrire ("A(", j, ",", i, ") = ")
Lire (A[j,i])
F.F.P
F.F.P
Ecrire (' Donner les éléments du vecteur')
Pour i = 1, M, 1 faire
Ecrire ("B(",i,") = ")
Lire (B[i])
F.F.P
Pour i = 1, N, 1 faire
Pour j = 1, M, 1 faire
A[j,i] A[j,i] + B[j]
F.F.P
F.F.P
Ecrire (' affichage des éléments de la matrice ligne par ligne')
Pour i = 1, M, 1 faire
Pour j = 1, N, 1 faire
Ecrire (A[i,j])
F.F.P
F.F.P
Si (M < > N) alors
Ecrire ("matrice non carrée")
Sinon
Ecrire ('affichage des éléments diagonaux')
Pour i = 1, M, 1 faire
Ecrire (A[i,i])
F.F.P
Ecrire (' affichage des éléments anti-diagonaux')
Pour i = 0, M-1, 1 faire
Ecrire (A(i+1,M-i])
F.F.P
Fin si
Fin
Programme Exo7_Fiche3
!*************************************************
!programme qui calcule la somme d'une matrice avec
!un vecteur
!*************************************************
integer M, N, i, j
integer, dimension(20,10) :: A
integer, dimension(20) :: B
write(*,*) ' Donner le nombre de lignes et colonnes de A '
read(*,*) M, N
write(*,*) ' Donner les elements de la matrice colonne par colonne'
do i = 1, N, 1
do j = 1, M, 1
write(*,"(a3,i1,a1,i1,a3,$)") "A(",j,",",i,")= " !voir cours no5 pour Format affichage
read(*,*) A(j,i)
end do
end do
write(*,*) ' Donner les elements du vecteur'
do i = 1, M, 1
write(*,"(a3,i1,a2,$)") "B(",i,")= " !voir cours no5 pour Format affichage
read(*,*) B(i)
end do
do i = 1, N, 1
do j = 1, M, 1
A(j,i) = A(j,i) + B(j)
end do
end do
write(*,*) ' affichage des elements de la matrice ligne par ligne'
do i = 1, M, 1
print*, A(i,1:N) ! 1:N veut dire de la colonne 1 à la colonne N
end do
if(M .ne. N)then
write(*,*) "matrice non carree"
else
write(*,*) ' affichage des elements diagonaux' ! ici l'indice de ligne égale l'indice de colonne
do i = 1, M, 1
print*, A(i,i)
end do
write(*,*) ' affichage des elements anti-diagonaux' ! ici l'indice de ligne s'incrémente de 1 vers M
do i = 0, M-1, 1 ! l'indice de colonne décrémente de M vers 1
print*, A(i+1,M-i)
end do
end if
End
Exo8_Fiche3
Algorithme Exo8_Fiche3
Calcul du remplissage d'un réservoir avec deux pompes.
Variables
Entier D1, D2
Réel V, V1, V2, V1T, V2T, Vd, VT, Vs ! Vd :volume débité, Vs : volume seuil test
Caractère[1] p ! variable pompe
Début
Ecrire (' Donner le Volume du reservoir')
Lire (V)
Ecrire (' Donner le Volume debite par la pompe P1')
Lire (V1)
Ecrire (' Donner le Volume debite par la pompe P2')
Lire (V2)
Ecrire (' Donner le Volume seuil de test')
Lire (Vs)
D1 0
D2 0
V1T 0
V2T 0
VT 0
p '1'
Tant que (VT < V) faire
Si (p=='1') alors ! test démarrage pompe1
p '2'
Vd 0
D1 D1 + 1
Tant que ((Vd < V1) ET (VT < V)) faire ! cycle pompe 1
Vd Vd + Vs
VT VT + Vs
V1T V1T + Vs
F.F.T
sinon ! test démarrage pompe2
p '1'
Vd 0
D2 D2 + 1
Tant que ((Vd < V2) ET (VT < V)) faire ! cycle pompe 2
Vd Vd + Vs
VT VT + Vs
V2T V2T + Vs
F.F.T
Fin si
F.F.T
Ecrire ( 'D1= ',D1, ' D2= ', D2)
Ecrire ( 'V1T= ',V1T, ' V2T= ', V2T)
Fin
Programme Exo8_Fiche3
!*************************************************
!programme qui calcule le remplissage d'un réservoir
! avec deux pompes
!*************************************************
integer D1, D2
real V, V1, V2, V1T, V2T, Vd, VT, Vs ! Vd : volume débité, Vs : volume seuil test
Character(1) :: p ! p : variable pompe
write(*,*) ' Donner le Volume du reservoir'
read(*,*) V
write(*,*) ' Donner le Volume debite par la pompe P1'
read(*,*) V1
write(*,*) ' Donner le Volume debite par la pompe P2'
read(*,*) V2
write(*,*) ' Donner le Volume seuil de test'
read(*,*) Vs
D1 = 0
D2 = 0
V1T = 0
V2T = 0
VT = 0
p = '1'
do while(VT < V)
if(p=='1')then ! test démarrage pompe1
p = '2'
Vd = 0
D1 = D1 + 1
do while ((Vd < V1) .and. (VT < V)) ! cycle pompe 1
Vd = Vd + Vs
VT = VT + Vs
V1T = V1T + Vs
end do
else ! test démarrage pompe2
p = '1'
Vd = 0
D2 = D2 + 1
do while ((Vd < V2) .and. (VT < V)) ! cycle pompe 2
Vd = Vd + Vs
VT = VT + Vs
V2T = V2T + Vs
end do
end if
end do
write(*,*) 'D1= ',D1, ' D2= ', D2
write(*,*) 'V1T= ',V1T, ' V2T= ', V2T
End
Pompe2 V2 Pompe1
Vs V1
puit
Schéma illustratif