Objectifs: 

Ce laboratoire a pour but de vous faire pratiquer:

  • La manipulation de tableaux à deux dimension (déclaration, initialisation et accès au contenu d'un tableau);
  • Le passage de tableaux à deux dimensions par référence à une fonction (rappel: un tableau est toujours passé par référence!);

Fonctionnement du laboratoire: 

  • Ce laboratoire se compose de 7 exercices. Ceux-ci doivent tous être complétés d’ici la prochaine séance de laboratoire.
  • Chaque exercice est accompagné d’indices. Il vous est conseillé de ne consulter l'indice qu'en cas de blocage.

Rappels de cours : 


Pour déclarer un tableau à deux dimensions: 


type identifiant[TAILLLE_LIGNES][TAILLE_COLONNES]; 

Exemple: 

int mon_tableau[10][8]; //Déclare un tableau de 10 lignes et 8 colonnes. 

Pour initialiser un tableau à deux dimensions (uniquement lors de la déclaration!): 

L'initialisation se fait de façon analogue aux tableaux à une dimension, sauf que chaque valeur initialise une ligne, qui elle même comporte autant de valeurs qu'on a de colonnes. Par exemple: 

int mon_tableau[5][4]={ {2,5,2,6}, {7,5,2,1}, {2,4,6,9}, {3} };

Si une valeur n'est pas précisée, celle-ci sera initialisée à la valeur nulle (0). Ainsi, la déclaration ci-dessus permet de créer le tableau ci-dessous: 


2 5 2 6
7 5 2 1
2 4 6 9
3 0 0 0
0 0 0 0


Passer un tableau 2D à une fonction: 

Comme pour un tableau unidimensionnel, on peut passer un tableau bi-dimensionnel à une fonction. Cependant, nous avons l'obligation de spécifier la taille des colonnes du tableau. Par exemple, la fonction suivante affiche tous les éléments d'un tableau d'entiers à deux dimensions. Nous supposons que TAILLE_MAX est  définie comme constante de pré-compilation. 

int afficher_tableau2d( int tab[][TAILLE_MAX], int nb_lignes, int nb_colonnes)
{
   int i,
       j;
   for( i=0; i < nb_lignes; i++)
   {
      for ( j=0; j < nb_colonnes; j++)
      {
         printf("%d ", tab[i][j]);
      }
      printf("\n");
   }
}



Énoncés des exercices :


Note 1: Dans les exercices qui suivent, vous devez définir une constante de précompilation TAILLE_MAX de valeur 100 qui détermine la taille d'un tableau (sur chacune des dimensions).

Note 2: Les exercices ci-dessous vous demandent d'écrire des fonctions. Il est entendu que vous devez tester vos fonctions afin d'en valider le fonctionnement (soit depuis votre main, ou mieux, avec une fonction test). Pour faire vos tests, la fonction afficher_tableau2d, définie ci-dessus, vous sera très utile.

Question 1: 

Écrire une fonction qui calcule la somme des éléments d'un tableau à deux dimensions:

int somme_elements(int tab[][TAILLE_MAX], nb_lignes, nb_colonnes);  

Question 2: 

Écrire une fonction qui calcule la somme des éléments de la diagonale d'une matrice carrée:

int somme_diagonale(int tab[][TAILLE_MAX], taille_matrice);



Question 3:

Écrire une fonction qui compte le nombre d'occurences d'un entier dans un tableau à deux dimensions:

int compter_occurences(int tab[][TAILLE_MAX], nb_lignes, nb_colonnes, int a_trouver);



Question 4:

Écrire une fonction qui additionne deux matrices.

void additionner_matrices(
                double mat1[][TAILLE_MAX],
                double mat2[][TAILLE_MAX],
                double resultat[][TAILLE_MAX],
                int nb_lignes,
                int nb_colonnes);

Note: Pour additionner deux matrices, celles-ci doivent avoir les mêmes dimensions.



Question 5: 

Écrire une fonction qui vérifie si deux matrices sont égales. La fonction renvoie une valeur vraie si elles sont égales, et une valeur fausse sinon.

Note: C'est à vous de déterminer le prototype de la fonction.



Question 6: 

Écrire une fonction qui calcule la transposée d'une matrice. Pour rappel, la transposée d'une matrice A correspond à la matrice, notée AT, où les lignes sont converties en colonnes et les colonnes en lignes. Par exemple:



void calculer_transposee(double mat[][TAILLE_MAX], double transposee[][TAILLE_MAX], int nb_lignes, int nb_colonnes);



Question 7: 
Écrire une fonction qui reçoit un tableau de points (chaque point est défini par sa coordonnées qui composée d'une abscisse et d'une ordonnée) et qui renvoie la distance minimale entre les points du tableau. Le prototype de la fonction est le suivant :

int distance_minimale(int points[][2], int nb_points);

Modifié le: mercredi, 17 octobre 2018, 08:26