next up previous contents
Next: Examen de Janvier 2001-LMA Up: Exercices Previous: Exercices   Contents

Examen de Janvier 2000-LMA-MM1

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
  1. Donnez la nature de ces objets :
            TM     , TM(13)  , TM(1)%serie ,   TM(4)%serie(3)
            TM(5:6), TM(13)%marque , TM(19)%numero, TM(10)%marque(4:10) 
        
  2. Donner dans chaque cas un exemple d'affectation de ces objets.

Exercice 2. Soient les déclarations suivantes :

          real, dimension (5) , target  :: x
          real, dimension(3,2), target  :: A
          real, dimension (:) , pointer :: p
  1. Que font les instructions suivantes
              maxval(abs(x)) ;  maxloc(abs(A))
              sum(abs(x))    ;  sqrt(sum(x*x))
    
  2. Effectuer les 'print' suivants :
           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 $ C = 3.4 + C1$ est-elle valide? pourquoi?


Exercice 4. Soit $ A$ une matrice symétrique creuse telle que $ (A(i,j) = 0 $ pour $ j \ne i,i\mp 1,i\mp 2)$. 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)

  1. Ecrire une fonction ( nommée mv(A,x)) qui effectue le produit de la matrice A par un vecteur x ( notez que seul $ A$ et $ x$ sont transmis en arguments).
  2. Ecrire une 'interface operator(*)' permettant de rendre l'opération $ A*x $ possible.
  3. Pour résoudre le système linéaire $ Ax =b$ , on considère l'algorithme suivant :

    $\displaystyle \left\{
\begin{tabular}{l}
$x_0, r_0 =p_0= b-Ax_0$\\
pour k= 0,...
..._k\Vert^2_2}$ \\
$p_{k+1} = r_{k+1} +\beta_{k+1}p_k$
\end{tabular}
\right .
$

    avec $ (\cdot,\cdot)$ désigne le produit scalaire euclidien et $ \Vert \cdot \Vert^2_2 = (\cdot,\cdot)$.

    Ecrire un programme qui produit cet algorithme.


next up previous contents
Next: Examen de Janvier 2001-LMA Up: Exercices Previous: Exercices   Contents
Mazen Saad 2002-12-12