otofraise
Messages postés66Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention 4 novembre 2010 19 janv. 2005 à 21:59
Salut LordBob,
Si je me souviens bien de mes cours de C, les tableaux a deux dimensions sont geres comme des tableaux a une dimension en memoire, c'est a dire que tous les elements du tableau se suivent de cette facon pour un Tab[2][2] par exemple :
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 19 janv. 2005 à 22:57
en fait j'ai pas trop compris ta reponse, vu comment tu le dis il me semble que le problème pour Tab[] et Matrince[][] serait donc le meme... bref de toute facon a premiere vue, il me'est impossible de faire Matrice[][]...
donc comment puis-je y parvenir?
mon probleme et que, je veux ecrire une fonction qui va recevoir un tableau, mais donc la taille est variable... comment puis-je y parvenir?
Bob...
"La chance accorde ses faveur aux esprits avertis..."
otofraise
Messages postés66Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention 4 novembre 2010 20 janv. 2005 à 09:13
Re Bob,
En fait pour ce qui est du tableau a 2 dimensions, en memoire il est gere comme un tableau a une dimension ou toute les ligne sont mises bout a bout. Pour que ton programme puisse recomposer "virtuellement" ton tableau a deux dimensions a partir d'un tableau à une dimension, il doit connaitre le nombre de colonne de ce tableau a 2D.
Sinon pour passer un tableau a 2D variable en parametre, un Pointeur de pointeur devrais faire l'affaire. Par exemple pour un tableau d'entier : void MaFonction(int** Tab);
Ce qui, en fait, correcpond a un tableau de tableau et donc a un tableau en 2D.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 20 janv. 2005 à 09:40
lorsque l'on passe un tableau en paramètre, seule une des dimensions peut être omise (celle de gauche), les autres doivent êtres fournie pour que le compilo s'y retrouve.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 20 janv. 2005 à 21:04
ok voila donc un exemple de fonction:
L est le nombre de ligne de la matrice
C le nombre de colone
// affichage des matrices
void PrintMat(
int **matrice,
int L,
int C)
{
int i, j;
// variables pour boucle for
// affichage de la matrice
for(i = 0; i < L; i++)
{
for(j = 0; j < C; j++)
printf("%d", matrice[i][j]);
printf("\n");
}
}
le code suivant ne marche pas, comment faire pour faire un truc dans le meme style, mais qui marche, sachant que l'on ne connait pas la taille de la matrice :)
Merci par avance
Bob...
"La chance accorde ses faveur aux esprits avertis..."
otofraise
Messages postés66Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention 4 novembre 2010 20 janv. 2005 à 21:46
Si tu remplace les constante (4, 6) par des variables (NbLigne, NbColonne) qui seront determine au moment voulu dans ton programme, tu gere bien n'importe quel type de matrice.
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 20 janv. 2005 à 21:48
bah pour l'instant y en a pas... je veux juste afficher une matrice quelconque, avec une fonction qui contient la matrice "indefinie, le nombre de ligne, et le nombre de colone"
Bob...
"La chance accorde ses faveur aux esprits avertis..."
otofraise
Messages postés66Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention 4 novembre 2010 20 janv. 2005 à 21:54
Alors ton parametre de fonction doit bien etre un int**, suivi de deux int indiquant le nb de ligne et de colonne ce qui donne comme tu l'as marque plus haut :
void AfficherMatrice(int** Matrice, int NbLigne, int NbColonne);
Par contre la creation de la matrice doit se faire via le petit bout de code que je t'ai donne plus haut et non de cette facon :
int Matrice[4][6];
Surtout que le compilo n'accepte dans ce cas que des constante (ou au moins une pour le nombre de colonne). Tu ne peux donc pas ecrire :