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 , C2On 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.