Université de Montpellier II — DEUG MASS — niveau 1 — période 2 — Informatique

Contrôle Continu d’Informatique — mai 2004 — 1h30

 

NOM                                                         PRENOM                                              Numéro d’étudiant

 

Écrire les trois algorithmes sur cette feuille. Les trois questions sont sur 6, 8 et 6 pts (soit 20 !)

 

On souhaite implémenter une fonction d’addition de deux matrices. Une matrice est un tableau à deux dimensions. Soit une matrice A, un élément de A est noté A[i,j] avec 0≤i≤largeur(A)-1 et 0≤j≤hauteur(A)-1. Si C = A+B (A de dimensions N*P, B de dimensions N*P, et C de dimensions N*P) alors :

C[i,j] = A[i,j]+B[i,j]

 

Q1          Définir et écrire la procédure                   add_matrice(A,B,C : matrice)

 

 

On souhaite implémenter une fonction de multiplication de deux matrices. Si C = A*B (A de dimensions N*P, B de dimensions P*N, et C de dimensions P*P) alors :

C[i,j] = A[0,j]*B[i,0] + A[1,j]*B[i,1] + … + A[N-1,j]*B[i,N-1]

 

Q2          Définir et écrire la procédure,                                    calculer_case(A,B,C :matrice ; i,j : entier)

qui calcule le contenu de la case C[i,j] ;

 

Q3           Définir et écrire la procédure                   mult_matrice(A,B,C : matrice)

 

°°°°°°°°°°°°°°°°°°°°


Correction

Les fonctions ne renvoient rien, elles se contentent d’écrire dans la bonne case de C le résultat.

 

Q1 :

Fonction add_matrice(A,B,C : matrice)  -->  rien

                  Pour i de 0 à N-1 faire

                                   Pour j de 0 à N-1 faire

                                                     C[i,j] <-- A[i,j] + B[i,j]

                                   Fin pour

                  Fin pour

Fin

 

Q2 :

Fonction calculer_case(A,B,C :matrice ; i,j : entier) --> rien

                  C[i, j] <-- 0

                  Pour k de 0 à N-1 faire

                                   C[i,j] <-- C[i,j] + A[k,j]*B[i,k]

                  Fin pour

Fin

 

 

Q3 :

Fonction mult_matrice(A,B,C : matrice) --> rien

Pour i de 0 à N-1 faire

                                   Pour j de 0 à N-1 faire

                                                     calculer_case(A, B, C,  i, j)

                                   Fin pour

                  Fin pour

Fin