Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/09/2014, à 17:23

quentino18

[Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.

Bonjour,
J'ai vu pas mal de choses sur les tableaux , notamment le remplissage préalable ou avec le découpage d'un autre tableau , mais je n'arrive pas a l'adapter a mon problème : j'essaye de créer 2 tableaux séparés puis de les concaténer dans un 3ème , ligne par ligne ( donc en 2 dimensions dans le cas de 2 tableaux).
Tout ce que j'essaye se conclut systématiquement par des erreurs  de segmentation ...
Je vous poste mon code , si j'ai le droit a des indices ...  smile

#include <stdio.h>
#include <stdlib.h>
int main ()
{	
	#define taille 2
	int *tab1, *tab2, **tab3;
	int i,t[taille];
	printf("taille tableau 1 =");
	scanf("%i", &t[0]);
	tab1 = (int*)malloc(t[0]*sizeof(int));
	for (i=0;i<t[0];i++)
	{
		printf("tab1[%i] = ",i);
		scanf("%i",&tab1[i]);
	}
	printf("taille tableau 2 =");
	scanf("%i", &t[1]);
	tab2 = (int*)malloc(t[1]*sizeof(int));
	for (i=0;i<t[1];i++)
	{
		printf("tab2[%i] = ",i);
		scanf("%i",&tab2[i]);
	}
	tab3 = (int**)malloc(2*sizeof(int*));

	 //???????????
		
	return 0;
}
		
	

Merci d'avance .

Dernière modification par quentino18 (Le 27/09/2014, à 19:10)

Hors ligne

#2 Le 27/09/2014, à 18:21

pingouinux

Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.

Bonsoir,
Je pense qu'il faut faire ceci :

        tab3 = (int**)malloc(2*sizeof(int*));
        for(i=0;i<taille;i++)
        {
           tab3[i]=(int*)malloc(t[i]*sizeof(int));
        }

Hors ligne

#3 Le 27/09/2014, à 18:28

quentino18

Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.

d'accord , donc je peut pas pointer directement dessus genre : 

tab3[i]=tab2

Il faut redéfinir tab3 comme tu l'as fait et réassocier une a une chaque valeur des tableaux précédents , c'est ça ?

Hors ligne

#4 Le 27/09/2014, à 18:32

pingouinux

Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.

Ah si, ce que tu proposes doit être possible, mais il faut voir ce que tu fais ensuite. Peux-tu montrer le programme qui plante ?

Ajouté :
C'est bien ça que tu as fait ?

tab3[0]=tab1;
tab3[1]=tab2;

Dernière modification par pingouinux (Le 27/09/2014, à 18:34)

Hors ligne

#5 Le 27/09/2014, à 18:37

quentino18

Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.

Exactement , c'est censé marcher ?
Dès que je rentre la dernière valeur de mon deuxième tableau , j'ai core dumped...

J'ai essayé en faisant ce que je viens de dire , et j'ai pareil :

#include <stdio.h>
#include <stdlib.h>
int main ()
{	
	#define taille 2
	int *tab1, *tab2, **tab3;
	int i,t[taille];
	printf("taille tableau 1 =");
	scanf("%i", &t[0]);
	tab1 = (int*)malloc(t[0]*sizeof(int));
	for (i=0;i<t[0];i++)
	{
		printf("tab1[%i] = ",i);
		scanf("%i",&tab1[i]);
	}
	printf("taille tableau 2 =");
	scanf("%i", &t[1]);
	tab2 = (int*)malloc(t[1]*sizeof(int));
	for (i=0;i<t[1];i++)
	{
		printf("tab2[%i] = ",i);
		scanf("%i",&tab2[i]);
	}
	tab3 = (int**)malloc(2*sizeof(int*));
	for(i=0;i<taille;i++)
	{
		tab3[i]=(int*)malloc(t[i]*sizeof(int));
	}
	for(i=0;i<t[1];i++)
		tab3[0][i] = tab1[i] ;
	for(i=0;i<t[2];i++)
		tab3[1][i] = tab2[i] ;
	return 0;
}
		

Edit : dans les deux cas , j'ai :

taille tableau 1 =3
tab1[0] = 1
tab1[1] = 2
tab1[2] = 3
taille tableau 2 =3
tab2[0] = 1
tab2[1] = 2
tab2[2] = 3
Erreur de segmentation ( core dumped)

Dernière modification par quentino18 (Le 27/09/2014, à 18:46)

Hors ligne

#6 Le 27/09/2014, à 18:44

pingouinux

Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.

	for(i=0;i<t[1];i++)
		tab3[0][i] = tab1[i] ;
	for(i=0;i<t[2];i++)
		tab3[1][i] = tab1[i] ;

Dans les 2 commandes for, les indices de t doivent être respectivement 0 et 1.

Ajouté : D'ailleurs, à mon avis, ces 2 boucles sont inutiles, tab3[0] et tab1 pointant sur la même chose

Dernière modification par pingouinux (Le 27/09/2014, à 19:12)

Hors ligne

#7 Le 27/09/2014, à 19:10

quentino18

Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.

ahh oui ... mince , j'ai pas fait assez attention aux indices   :-)
Tu as donc résolu mon problème
J'ai finalement :

#include <stdio.h>
#include <stdlib.h>
int main ()
{	
	#define taille 2
	int *tab1, *tab2, **tab3;
	int i,t[taille];
	printf("taille tableau 1 =");
	scanf("%i", &t[0]);
	tab1 = (int*)malloc(t[0]*sizeof(int));
	for (i=0;i<t[0];i++)
	{
		printf("tab1[%i] = ",i);
		scanf("%i",&tab1[i]);
	}
	printf("taille tableau 2 =");
	scanf("%i", &t[1]);
	tab2 = (int*)malloc(t[1]*sizeof(int));
	for (i=0;i<t[1];i++)
	{
		printf("tab2[%i] = ",i);
		scanf("%i",&tab2[i]);
	}
	tab3 = (int**)malloc(2*sizeof(int*));
	for(i=0;i<taille;i++)
	{
		tab3[i]=(int*)malloc(t[i]*sizeof(int));
	}
	tab3[0]=tab1;
	tab3[1]=tab2;
	for(i=0;i<t[0];i++)
		printf("%d  ",tab3[0][i]);
	printf("\n");
	for(i=0;i<t[1];i++)
		printf("%d  ",tab3[1][i]);
	printf("\n");
	return 0;
}
		
	

Et mon Beau tableau qui s'affiche a la fin .
Merci Beaucoup.  :-)

Dernière modification par quentino18 (Le 27/09/2014, à 19:12)

Hors ligne

#8 Le 27/09/2014, à 19:13

pingouinux

Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.

J'ai complété mon message #6.

Ajouté : Tu peux aussi supprimer ceci

	for(i=0;i<taille;i++)
	{
		tab3[i]=(int*)malloc(t[i]*sizeof(int));
	}

Dernière modification par pingouinux (Le 27/09/2014, à 19:19)

Hors ligne

#9 Le 27/09/2014, à 19:37

quentino18

Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.

Parfait :-)

Hors ligne