Exercice 1. Etant donné la déclaration suivante :
type machine
integer :: numero
character (len =20) :: marque
real, dimension(4) :: serie
end type machine
type (machine), dimension(19) :: TM
TM , TM(13) , TM(1)%serie , TM(4)%serie(3)
TM(5:6), TM(13)%marque , TM(19)%numero, TM(10)%marque(4:10)
Exercice 2. Soient les déclarations suivantes :
real, dimension (5) , target :: x
real, dimension(3,2), target :: A
real, dimension (:) , pointer :: p
maxval(abs(x)) ; maxloc(abs(A))
sum(abs(x)) ; sqrt(sum(x*x))
x = (/ 1.1, 2.2, 3.3, 4.4 , 5.5 /)
print*,(' x(',i,') = ', x(i), i = 1,5)
A(:,1) = (/1.1, 2.2, 3.3 /)
A(:,2) = (/4.4 , 5.5, 6.6 /)
print*,((' A(',i,',',j,') = ', A(i,j), j = 1,2),i=1,3)
p => x(2:3)
p = (/ 7.7, 8.8 /)
print*,'px = ', p ; print*,'x =',x
p => A(:,2)
p = (/ -7., -8., -9. /)
print*,'A = ', A
Exercice 3. On considère le type suivant
type cercle
real, dimension(2) :: centre
real :: rayon
end type cercle
type (cercle) :: C , C1 , C2
On souhaite definir :
- la somme de deux cercles comme étant un cercle de centre la somme des deux centres et de rayon la somme des deux rayons
- la somme d'un cercle et d'un réel comme étant un cercle de même centre et de rayon la somme du rayon et du réel.
Ecrire alors une 'interface operator (+)' qui permet de supporter les opérations suivantes
C = C1 + C2
C = C1 + 2.
Avec cette interface l'instruction
Exercice 4.
Soit
une matrice symétrique creuse telle que
pour
. On stocke alors uniquement
la partie supérieure de la matrice sous la forme
| real(kind = 8), dimension(n,3) :: A |
et on désigne par
| A(i,1) | la diagonale | (A(i,i), i=1,n ) |
| A(i,2) | la sur-diagonale | (A(i,i+1), i=1,n-1 ) |
| A(i,3) | la sur-sur-diagonale | (A(i,i+2), i=1,n-2) |
Ecrire un programme qui produit cet algorithme.