probleme Affichage matrice

quentinh390
probleme Affichage matrice

Bonjour et déjà merci à ceux qui prendront la peine de m'aider:

Voila je dois afficher une matrice à l'aide de pointeur. J'ai créé deux fonctions qui sont les suivantes :

La première sert à demander a l'utilisateur combien il veut de lignes et de colonnes dans sa matrice et la seconde sert à la remplir cette matrice de facon aleatoire.

void Intro_Dim_Matrice ( int MaxL, int MaxC,int *l, int *c )
{
int DimL, DimC;
DimL=0; // (*l)=0;
DimC=0;

do
{

printf("Nombre de lignes de la matrice: \n");
scanf("%d",&DimL);
}
while (DimL<1 || DimL>MaxL);

do
{
printf("Nombre de colonnes de la matrice:\n");
scanf("%d",&DimC);
}
while (DimC<1 || DimC>MaxC);

(*l)=DimL;
(*c)=DimC;
}

void Intro_Matrice_Aleatoire( int DimL, int DimC, int * tab, int max, int min)

{ int i,j;
j=0;

srand((unsigned) time(NULL) + rand());

for(i=0; i {
for (j=0; j {
*((tab+i*DimC)+j) = rand() % (max - min + 1) + min;
printf("%d ",*((tab+(i*DimC))+j));
}

}

printf("\n");
}

Il n'y a pas d'erreur de compilation et mon programme me demande bien combien je veux de lignes et de colonnes mais il ne m'affiche rien.

Quelqun aurait-il une idée d'ou se trouve ma faute??

j'ai appelé mes fonctions de la facon suivante :


Intro_Dim_Matrice (Maxl, Maxc, &l, &c);

Intro_Matrice_Aleatoire ( diml, dimc, *tab, 10, 1);

D'avance merci

fredericmazue

Ah un bon vieux exercice d'école à base de pointeurs comme au bon vieux temps. :)

Bon tu as une première grosse erreur ici lors de l'appel

Intro_Matrice_Aleatoire ( diml, dimc, *tab, 10, 1);

c'est

Intro_Matrice_Aleatoire ( diml, dimc, tab, 10, 1);

que tu as voulu écrire :)

Avec tab, tu passes le pointeur, c'est à dire l'adresse du tableau, c'est à dire ce qu'il faut. Si tu écris *tab tu déréférences le pointeur, ce qui signifie que tu donnes la valeur pointée, le contenu autrement dit. A prioiri une valeur non initialisée qui plus est.

En fait ton programme devrait planter méchamment déjà....

J'ai un peu réorganisé ton code à l'attention de ceux qui veulent suivre le débat.

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

void Intro_Dim_Matrice ( int MaxL, int MaxC, int *l, int *c ) 
{ 
	int DimL, DimC; 
	DimL=0; // (*l)=0; 
	DimC=0; 

	do 
	{
		printf("Nombre de lignes de la matrice: \n");
		scanf("%d",&DimL);
	} 
	while (DimL<1 || DimL>MaxL); 

	do 
	{ 
		printf("Nombre de colonnes de la matrice:\n"); 
		scanf("%d",&DimC); 
	}	
	while (DimC<1 || DimC>MaxC); 

	(*l)=DimL; 
	(*c)=DimC; 
} 


void Intro_Matrice_Aleatoire( int DimL, int DimC, int *tab, int max, int min) 
{
	int i,j; 
	j=0; 
	
	srand((unsigned) time(NULL) + rand()); 
	
	for(i=0; i<DimL; i++) 
	{ 
		for (j=0; j<DimC; j++) 
		{ 
			*((tab+i*DimC)+j) = rand() % (max - min + 1) + min; 
			printf("%d ",*((tab+(i*DimC))+j)); 
		}	
	}	 

	printf("\n"); 
} 


int main(int argc, char** argv)
{
	int lignes, colonnes;
	int maxl = 3;
	int maxc = 3;
	int tab[27];

	Intro_Dim_Matrice (maxl, maxc, &lignes, &colonnes); 
	Intro_Matrice_Aleatoire (lignes, colonnes, tab, maxl, maxc); 
	
	return 0;
}

Ce code affiche quelque chose. ATTENTION je dis qu'il affiche, je dis pas qu'il marche. Les résultats vont te surprendre et tu vas voir que tu va devoir te battre encore un peu avec les pointeurs C, leurs mystères et autres traquenards :)

Mais bon, tu as déjà de quoi avancer un petit peu. N'hésite pas à revenir ici poursuivre la discussion :)

quentinh390

Merci j'ai réussi en chipotant un petit peu... Ton explication sur les pointeurs m'a bien aidée.
Encore merci

fredericmazue

C'était avec plaisir. N'hésite pas à revenir si tu as encore besoin, pour ta matrice, ou pour toute autre chose :)