Acceder au elemen d'1e matrice en c

rimounatn Messages postés 107 Statut Membre -  
rimounatn Messages postés 107 Statut Membre -
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
:((((
Configuration: Windows 7 Internet Explorer 8.0

6 réponses

  1. Pacorabanix Messages postés 4122 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
  2. rimounatn Messages postés 107 Statut Membre 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
    1. Pacorabanix Messages postés 4122 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
      1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > Pacorabanix Messages postés 4122 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
  3. rimounatn Messages postés 107 Statut Membre 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
  4. rimounatn Messages postés 107 Statut Membre 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Pacorabanix Messages postés 4122 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
  7. rimounatn Messages postés 107 Statut Membre 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