Tableau à dimension variable

youssefmahdia Messages postés 25 Date d'inscription dimanche 30 mars 2008 Statut Membre Dernière intervention 12 juin 2011 - 19 avril 2008 à 10:44
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 - 19 avril 2008 à 13:39
bonjour les amis,
j'ai un problème en C, en fait, je veux créer un tableau à deux dimensions dont une est variable.
voila, je veux obtenir quelque chose qui ressemble à ça:
tab[????][???]={{0},{11,12,13,14},{22,23,24,25,26,27,28},{33,34,35,336,37,38,39,40,41,42},{55,56,57,58,59,60,61,62,63,64,65,67,68,69,70},,,,,}
en fait, si vous avez remarqué, je veux que chaque sous tableau contient 4*(son indice).
j'ai essayé avec for, switch, pourtant, j'ai pas arrivé.
voila, merci pour vos aides.

4 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 avril 2008 à 11:03
int *pints = (int*) malloc(nlins * ncols * sizeof(int));
if(!pints) return;
pints[idxCalculPerso] = valeur;

ciao...
BruNews, MVP VC++
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
19 avril 2008 à 11:25
Bonjour,

On ne peut pas créer un tableau triangulaire ! Il faut le "linéariser" et créer un indice unique pour accéder à une case mais encore faut-il que la progression de la longueur des lignes soit connue car dans l'exemple proposé, la longueur des lignes ne correspond pas à 4 fois l'indice : 4*0=0 et non 1, 4*1=4 ok, 4*2=8 et non 7, 4*3=12 et non 10, 4*4=16 et non 15.

Jean-François
0
youssefmahdia Messages postés 25 Date d'inscription dimanche 30 mars 2008 Statut Membre Dernière intervention 12 juin 2011
19 avril 2008 à 13:04
merci monsieur,
mais pouvez vous m'écrire le programme complet, c'est à dire le remplissage du tableau et son affichage.
j'arrive pas à comprendre le fonctionnement de votre programme.
merci beaucoup
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
19 avril 2008 à 13:39
Voilà un exemple qui permet de traiter un tableau statique avec des lignes de longueur quelconque :

#include <stdio.h>
#include <stdlib.h>



int tab
(
    int iLigne   // E:indice de la ligne (à partir de 0)
   ,int iColonne // E:indice de la colonne (à partir de 0)
)                // S:valeur en (ligne,colonne) ou -1 si erreur
{
   // --- Tableau des valeurs (une seule ligne de valeurs
   // --- mais traité comme plusieurs pseudo-lignes)
   static const int aiValeurs[] =
   {
       0
      ,11,12,13,14
      ,22,23,24,25,26,27,28
      ,33,34,35,36,37,38,39,40,41,42
      ,55,56,57,58,59,60,61,62,63,64,65,67,68,69,70
   };
  
   // --- Nombre de pseudo-lignes dans le tableau
   static const int iNombreLignes = 5;




   // --- Tableau des longueurs des lignes
   static const int aiLongueurLignes[iNombreLignes] = {1,4,7,10,15};




   // --- Tableau des indices des débuts des lignes
   // --- (pour un accès rapide à chaque ligne)
   static const int aiDebutLignes[iNombreLignes] = {0,1,5,12,22};






   // --- Test des indices
   if (iLigne < 0  ||  iLigne >= iNombreLignes)
      return -1;
   if (iColonne < 0  ||  iColonne >= aiLongueurLignes[iLigne])
      return -1;




   // --- Retour de la valeur en (ligne,colonne)
   return aiValeurs[aiDebutLignes[iLigne] + iColonne];
}



int main(void)
{
   printf("tab(0, 0) = %d\n",tab(0,0));
   printf("tab(3, 6) = %d\n",tab(3,6));
   printf("tab(4, 3) = %d\n",tab(4,3));
   printf("tab(4,99) = %d\n",tab(4,99)); // erreur
   return EXIT_SUCCESS;
}




ce qui donne :

tab(0, 0) = 0
tab(3, 6) = 39
tab(4, 3) = 58
tab(4,99) = -1



Jean-François
0
Rejoignez-nous