Acceder au elemen d'1e matrice en c

rimounatn Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   -  
rimounatn Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Aidez moi SVP, je ss débutante en c .
bon mon probleme c'est que j'ai une matrice que j'ai declaré dans la fonction main() comme suit:
int ** matrice;
maintenant j'ai besoin de cette matrice dans une autre fonction (j'ai besoin de contenu selement , je ne veux pas appliqué des modifications sur cette matrice)
voici l'entete de ma fonction:
int gain ( int a, int b, int ** matrice, int taille_matrice);
en faite je veux faire ca dans cette fonction gain:
int g= matrice [a][b]+matrice[b][a];
return g;
mais le probleme que ca fonctionne pas et je sais dès le depart que ca ne fonction mais je ne sais pas pourquoi et j'ecrit koi poiur ke ca fonctionne ;((((((
SVP AIDEZ MOI C URGENT ET MERCI D'AVANCE
:((((

6 réponses

Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
bon mon probleme c'est que j'ai une matrice que j'ai declaré dans la fonction main() comme suit:
int ** matrice;

non. Ceci est un pointeur vers un endroit où le programme est censé trouver une matrice.

Mais tu n'as jamais crée de matrice.

il faut que tu utilises malloc pour créer un espace mémoire dynamiquement.

Si tu ne connais pas ça, apprend la création dynamique avec malloc, ou alors tu peux faire comme ça aussi :
int matrice[10][12]; // créer véritablement une matrice 10 fois 12.
0
rimounatn Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   15
 
salut , merci de me repondre
dans la fonction main()
g declarée une matrice :
** matrice
puis j'ai fais l'allocation dynamique avec malloc
et j'ai fais une boucle pour la remplire en utilisan matrice[i][j]
et maintenant mon probleeme c'est applé cette matrice et utilisé son contenu dans une fonction que j'ai appelé Gain
mais quand je veu accéder au ellement de la matrice avec matrice [i][j] dans la fonction je ne peu pas
:(((
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
pourtant, ça devrait marcher.
1)Est-ce que tu arrives à afficher ta matrice avant d'appeler la fonction gain(), juste pour voir si tu as bien réussi à la remplir correctement ?
2) comment appelles-tu la fonction gain() depuis ton main() ?
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663 > Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention  
 
pardon, je crois qu'il y a en effet un souci au niveau des passage de tableaux à plusieurs dimension en C.

En effet , il faut toi même parcourir le tableau comme s'il était à une dimension. Voir cette astuce ici : https://c.developpez.com/faq/?page=Les-tableaux#TABLEAUX_tableau_parametre , c'est le deuxième exemple.
0
rimounatn Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   15
 
merciiii Pacorabanix,
au niveau de main ()
je peu affiché ma matrice nomallement
voici mon code compet peu etre ke tu pourra m'aidé :)
#include<stdio.h>
#include<stdlib.h>
int gain ( int a, int b, int ** matrice, int taille_matrice)
{
int g= matrice [a][b]+matrice[b][a]; //que dois je mettre ici pourque ca fonctionne??
return g;
}

int main()
{

int ** matrice;
int i,j, nb, resG;
nb=10;
// Allocation dynamique :
matrice =(int**)malloc( nb* sizeof(int));
for(i=0; i<nb,i++)
{
matrice[i]=(int*)malloc (nb*sizeof(int));
}
// remplissage de la matrice
for (i=0;i<nb;i++)
{
for (j=0;j<nb;j++)
{
matrice[i][i]=i*j
}
}
//affichage de la matrice
for (i=0;i<nb;i++)
{
for (j=0;j<nb;j++)
{
printf("%d,%d", matrice[i][i]);
}
printf("\n");
}
// saisie
printf("donner 1premier entier");
scanf ("%d",&a);
printf("donner le 2eme entier");
scanf("%d",&b);
// appel fonction gain
resG= (a,b, matrice, nb); // mon probleme ici
printf("voici le resultat obtenu: %d\n": resG);
}
voici mon programme simplifié j'espere que vous pouvez m'aider c urgent SVP.
0
rimounatn Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   15
 
merciiii Pacorabanix,
au niveau de main ()
je peu affiché ma matrice nomallement
voici mon code compet peu etre ke tu pourra m'aidé :)
#include<stdio.h>
#include<stdlib.h>
int gain ( int a, int b, int ** matrice, int taille_matrice)
{
int g= matrice [a][b]+matrice[b][a]; //que dois je mettre ici pourque ca fonctionne??
return g;
}

int main()
{

int ** matrice;
int i,j, nb, resG;
nb=10;
// Allocation dynamique :
matrice =(int**)malloc( nb* sizeof(int));
for(i=0; i<nb,i++)
{
matrice[i]=(int*)malloc (nb*sizeof(int));
}
// remplissage de la matrice
for (i=0;i<nb;i++)
{
for (j=0;j<nb;j++)
{
matrice[i][i]=i*j
}
}
//affichage de la matrice
for (i=0;i<nb;i++)
{
for (j=0;j<nb;j++)
{
printf("%d,%d", matrice[i][i]);
}
printf("\n");
}
// saisie
printf("donner 1premier entier");
scanf ("%d",&a);
printf("donner le 2eme entier");
scanf("%d",&b);
// appel fonction gain
resG= (a,b, matrice, nb); // mon probleme ici
printf("voici le resultat obtenu: %d\n": resG);
}
voici mon programme simplifié j'espere que vous pouvez m'aider c urgent SVP.
0

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

Posez votre question
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
bon, alors dans la création :


// Allocation dynamique :
matrice =(int**)malloc( nb* sizeof(int));
for(i=0; i<nb,i++)
{
matrice[i]=(int*)malloc (nb*sizeof(int));
}


il y a un souci je pense. Le premier tableau de base contient des int*, pas des int.
Ce serait plutot : matrice =(int**)malloc( nb* sizeof(int*));

comme ça à vue de nez. Si ça marchait avant sans problème, c'est que tu as beaucoup de chance !

ainsi, ta notation avec les crochets dans ta fonction gain que tu essayais de faire devrait marcher maintenant.
0
rimounatn Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   15
 
merciiii
matrice =(int**)malloc( nb* sizeof(int*));
ca marche mé g une erreur de segmentation je ne sé pas ke dois je faire
en faite je me demande si l'appel à la fonction Gain est correcte ou nn?
resG= (a,b, matrice, nb);???
0