Partage
  • Partager sur Facebook
  • Partager sur Twitter

remplir un tableau dynamique à deux dimensions

    16 janvier 2013 à 22:23:07

    Bonjour à tous,

    dans une structure appelée "Grille", j'ai créé un double pointeur "matrice" qui me sert à créer un tableau à deux dimensions.

    une fois ce tableau créé dans le main, je cherche à remplir ce tableau. Comment faire svp? J'ai beau faire deux boucles, ça ne marche pas.

    • Partager sur Facebook
    • Partager sur Twitter
      16 janvier 2013 à 22:38:08

      #include<stdio.h>
      #include<stdlib.h>
      #include<math.h>
      #include"jeudelavie.h"
      
      int main()
      {
      	int i,j;
      	Grille matrice;
      	matrice.tab=(int**)malloc(3 * sizeof(int*));
      	
      	for(i=1;i<3;i++)
      	{
      		/*allocation d'un tableau de tableau*/
      	matrice.tab[i]= (int *) calloc ( 3, sizeof(int) );
      	}
      	
      return 0;
      }
      


      • Partager sur Facebook
      • Partager sur Twitter
        16 janvier 2013 à 22:41:40

        matrice.tab[i][j] = un_int;

        • Partager sur Facebook
        • Partager sur Twitter

        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

          16 janvier 2013 à 22:59:26

          Ca marche mais lorsque je demande d'afficher tout le tableau, je n'obtiens pas une matrice. Pire, toutes les valeurs ne s'affiche pas. Comment faire svp?

          #include<stdio.h>
          #include<stdlib.h>
          #include<math.h>
          #include"jeudelavie.h"
          
          int main()
          {
          	int i,j;
          	Grille matrice;
          	matrice.tab=(int**)malloc(3 * sizeof(int*));
          	
          	for(i=0;i<3;i++)
          	{
          		/*allocation d'un tableau de tableau*/
          	matrice.tab[i]= (int *) calloc ( 3, sizeof(int) );
          	}
          	/*remplissage d'une matrice diagonale*/
          	matrice.tab[0][0]=1;
          	matrice.tab[0][1]=2;
          	matrice.tab[1][0]=3;
          	matrice.tab[1][1]=4;
          	
          	for (i=0;i<3;i++)
          	{
          		for(j=1;j<3;j++)
          		{
          			printf("%d\n", matrice.tab[i][j]);
          		}
          	}
          		
          return 0;
          }
          


          modif: j démarre de 0 et non de 1.

          • Partager sur Facebook
          • Partager sur Twitter
            16 janvier 2013 à 23:01:56

            for(j=0;j<3;j++)

            Merde j'avais pas vu la modif x)

            La tes valeurs tu les aura comme ca

            1
            2
            3
            4
                for (i=0;i<3;i++)
                {
                    for(j=0;j<3;j++)
                    {
                        printf("%d ", matrice.tab[i][j]);
                    }
                    printf("\n");
                }
                     

            la comme ca

            1 2 
            3 4 
            




            • Partager sur Facebook
            • Partager sur Twitter
              16 janvier 2013 à 23:03:52

              Il n'y a pas plus simple avec des boucles simples? Je n'ai pas vu en cours ce qu'il y a dans ta boucle
              • Partager sur Facebook
              • Partager sur Twitter
                16 janvier 2013 à 23:09:37

                C'est a dire ?

                Tu n'as pas vu quoi ?

                • Partager sur Facebook
                • Partager sur Twitter
                  17 janvier 2013 à 0:31:11

                  Si mais tu as rééditer ton message plus vite. Ca marche niquel

                  Il y a un autre soucis, tout à l'heure j'ai affecté les valeurs que je souhaitais mettre dans le tableau 2D.

                  Maintenant je chercher à ce que le tableau 2D se remplisse tout seul. je fais donc 2 boucles, une pour remplir les lignes et une autre pour les colonnes. Seulement là ça ne marche pas. pouvez m'aider svp?

                  #include<stdio.h>
                  #include<stdlib.h>
                  #include<math.h>
                  #include"jeudelavie.h"
                  #include<time.h>
                  
                  int MORT=0, VIE=1;
                  int main()
                  {
                  	/* Permet de générer un nombre aléatoire compris entre MAX et MIN//
                  	const int MAX=100; int MIN=3;
                  	srand(time(NULL));
                  	nombrealeatoire=( rand() % (MAX-MIN+1))+MIN;*/
                  
                  
                  	int i,j,b;
                  	Grille matrice;
                  	
                  	//pour créer un tableau dynamique à 2 dimensions
                  	matrice.tab=(int**)malloc(b * sizeof(int*));
                  	for(i=0;i<3;i++)
                  	{
                  		/*allocation d'un tableau de tableau*/
                  	matrice.tab[i]= (int *) calloc (b , sizeof(int) );
                  	}
                  	printf("ok");
                  	matrice=creergrille();
                  	
                  return 0 ;
                  }
                  	
                  Grille creergrille()
                  {
                  	int i,j;
                  	Grille matrice;
                  	//tableau dynamique à 2 dimensions de taille matrice.taille
                  	matrice.tab=(int**)malloc(matrice.taille * sizeof(int*));
                  	for(i=0;i<3;i++)
                  	{
                  		/*allocation d'un tableau de tableau*/
                  	matrice.tab[i]= (int *) calloc (matrice.taille , sizeof(int) );
                  	}
                  	
                  	const int MAX=100; int MIN=3;
                  	srand(time(NULL));
                  	int nombrealeatoire=( rand() % (MAX-MIN+1))+MIN;
                  	
                  	printf("Saisir la taille de ma grille\n");
                  	scanf("%d",&matrice.taille);	
                  	
                  	//initialisation aléatoire
                  	for (i=0; i<matrice.taille; i++)
                  	{
                  		for(j=0; j<matrice.taille; j++)
                  		{
                  		nombrealeatoire=( rand() % (MAX-MIN+1))+MIN;
                  		matrice.tab[i][j]=nombrealeatoire;	
                  		}
                  	}
                  return matrice;
                  }
                  
                  

                  Dès que je supprime la dernière boucle, il n'y a plus de segmentation fault

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 janvier 2013 à 0:39:11

                    Forcément, là, tu changes la taille de ta matrice entre son allocation et son parcours, donc la matrice que tu ârcours, n'a pas la même taille que celle que tu alloues...

                    tes lignes 48 49 devraient être au début de ta fonction.

                    Sinon, deux remarques:

                    • pourquoi allouer deux matrices?
                    • en l'occurence, tu a des méchantes fuites mémoires...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 mars 2017 à 13:10:12

                      /* fonction permet de créer et remplir un tableau de deux dimention*/  
                      int** remplir(int n )
                      {
                      int **m,i,j,x ;
                      m=(int**) malloc (n*sizeof(int*)) ; 
                      for (i=0 ; i<n ;i++) 
                      m[i]=  malloc (n*sizeof(int)) ;
                       for (i=0 ; i<n ;i++) 
                        { for (j=0 ; j<n ;j++) 
                            { printf("donner M[%d][%d]",i,j) ;
                              scanf ("%d",&x) ;
                              m[i][j]= x ;
                               }
                        }
                      return m;
                      }
                      \\by hamma khadraoui 

                      -
                      Edité par HammaKadraoui 27 mars 2017 à 13:27:04

                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 mars 2017 à 13:55:15

                        Pourquoi caster un malloc et pas l'autre, ou les deux, ou bien aucun ??:diable:
                        • Partager sur Facebook
                        • Partager sur Twitter

                        remplir un tableau dynamique à deux dimensions

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown