Cas particulier d'un tableau à 2 (ou n) dimensions en paramètre d'entrée ou de sortie

Dans le cas du tableau à (au moins) deux dimension se pose un problème: La procédure ou la fonction recoit un pointeur sur un tableau mais rien ne lui permet de savoir comment est structuré ce tableau (nombre de colonnes et de lignes)

extrait de l'algorithme de l'appelant
extrait de l'algorithme de la procédure  saisirTab
Variables:
en entrée:
  int tailleL= 15;
  int tailleC= 10;
  int tab[tailleL][tailleCol];
  int nbEffL = 4;
  int nbEffC = 5;

Corps de l'algorithme détaillé:

  saisirTab(tab, nbEffL, nbEffC);
Titre de la procédure:
  saisirTab

Prototype de la procédure:

  saisirTab(<> int t[][], >int l, >int c)


Description du problème:

  Saisie les valeurs et initialise les n éléments d'un tableau tab.

corps de l'algorithme détaillé:

for (i=0; i < l; i++)  
/* début de la boucle de saisie */
   for (j=0; j<c, j++)
      demander("\nEntrer une valeur entière:", t[i][j]);


Le problème dans cet exemple: dans la procédure il est impossible de savoir dans la procédure quelle est la taille d'une ligne ou d'une colonne donc de savoir où commence la deuxième ligne par exemple.

 C'est comme si on vous disait qu'un tableau contient 1000 cases et quon vous demande combien y a t-il de lignes et de colonnes?!!!!


La solution consiste à indiquer le nombre de lignes ou le nombre de colonnes (ou les deux) dans la procédure, ce qui se traduit en C par:
/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 * Nom du programme : 
   initTab
  *  Nom du fichier source : initTab.c
 * Auteur :  Pascal Coupey
 * Date de création :  23/09/04
 * Description : initialise un certain nombre fixé d'élément d'un tableau
                                                              
 * Historique des révisions: version 0
 *----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 */

/* Les includes */
#include <stdio.h>


/* Les defines */
#define TAILLEL 15
#define TAILLEC 10


/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 * Nom de la fonction : 
  saisirTab
 * Description :  
Saisie les valeurs et initialise les n éléments d'un tableau tab à deux dimensions.                                                               
 *----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

*/
void saisirTab (int t[TAILLEL][], int l, int c)
{
 int i;
 int j;

 for (i=0; i < l; i++)  /* début de la boucle de saisie */
   for
(j=0; j < c; i++)
  
{
    printf("\nEntrer une valeur entière:");
    scanf("%f", &t[i][j]);
   }  /* fin du for j */
  /* fin du for i */
}
/* fin de la procédure saisirTab */
/*-------------------------------------------------------------------------------------------------------------------------------------------------------*/

/* Programme principal */
int main(void)
{
  int tab[TAILLEL][TAILLEC];
  int nbEffL = 4;
  int nbEffC = 5;

  saisirTab(tab, nbEffL,nbEffC);
  return(0);
}

suivant                plan