Question matrice "indéfini"

cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 19 janv. 2005 à 21:27
otofraise Messages postés 66 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 4 novembre 2010 - 20 janv. 2005 à 21:54
Bonjour a tous,
voila je me pose une question, j'aimerais pourquoi quand j'ecris une fonction, je peux faire:
Type MaFonction(int Tab[])

mais je ne peux pas faire:
Type MaFonction(int Mat[][])

et comment faire pour y remedier.
Merci par avance...
Bob...

"La chance accorde ses faveur aux esprits avertis..."

16 réponses

otofraise Messages postés 66 Date d'inscription vendredi 4 avril 2003 Statut Membre Derniè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 :

| Tab[0][0] || Tab[0][1] || Tab[1][0] || Tab[1][1] |

Donc si tu veux que ton programme puisse determiner à quelle ligne appartient tel element, tu dois indiquer le nombre de colonnes de chaque ligne.

En esperant avoir ete clair dans ma reponse

Oto
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
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..."
0
otofraise Messages postés 66 Date d'inscription vendredi 4 avril 2003 Statut Membre Derniè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.

Reponse un peu meilleure ?

Oto
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
20 janv. 2005 à 18:36
ok je vais donc essayer avec un double pointeur... merci pour votre aide !
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
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..."
0
otofraise Messages postés 66 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 4 novembre 2010
20 janv. 2005 à 21:17
Quel probleme rencontres tu exactement ? c a la compile ou durant l'execution ? Comment defini tu ta matrice dans la fonction appelante ?

Oto
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
20 janv. 2005 à 21:24
bah en fait c'est pas lors de la compil kil y a une erreur c'est a l'execution, voici la definition de la matrice:


// matrice1



int matrice1[4][6] = {{0, 0, 1, 1, 0, 0},


{0, 1, 1, 1, 1, 0},


{0, 1, 1, 1, 1, 0},


{1, 0, 1, 1, 0, 1}};



// algo pour matrice1


PrintMat(matrice1, 4, 6);
// affichage de matrice
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
otofraise Messages postés 66 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 4 novembre 2010
20 janv. 2005 à 21:34
Et a l'execution il se passe koi : plantage ou ce ne sont pas les bonne valeur qui s'affichent ?

Sinon essaye de definir ta matrice comme ca :

int ** Matrice1 = new int*[4];
for(int i = 0; i < 4; ++i)
Matrice1[i] = new int[6];

J'ai essaye et la ca passe

Oto
0
otofraise Messages postés 66 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 4 novembre 2010
20 janv. 2005 à 21:38
Personnellement, j'ai un pb de compil si j'essaye de refiler un int Mat[4][6] pour un parametre en int**
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
20 janv. 2005 à 21:39
oui, mais la taille de ma matrice est indéfinie, donc avec ta solution, je dois connaitre la taille de la matrice !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
otofraise Messages postés 66 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 4 novembre 2010
20 janv. 2005 à 21:40
Lorsque tu initialise ta matrice tu en connais bien la taille ou tout du moins des variable en possede la taille, non ?
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
20 janv. 2005 à 21:41
bah en fait je dois ecrire la fonction de facon, a ce ke n'importe kel matrice puisse etre accepté !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
otofraise Messages postés 66 Date d'inscription vendredi 4 avril 2003 Statut Membre Derniè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.

Le but du prog c koi exactement ?
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
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..."
0
otofraise Messages postés 66 Date d'inscription vendredi 4 avril 2003 Statut Membre Derniè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 :

int Matrice[NbLigne][NbColonne];

Oto
0
Rejoignez-nous