IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Affichage d'une matrice


Sujet :

C

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    En recherche d’emploi
    Inscrit en
    Février 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : En recherche d’emploi

    Informations forums :
    Inscription : Février 2014
    Messages : 62
    Points : 36
    Points
    36
    Par défaut Affichage d'une matrice
    Bonjour,

    Dans mon code je n'arrive pas à afficher ma matrice et je ne trouve pas l'erreur.
    Aidez-moi s'il vous plait

    Merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 500
     
    /******************************************************************************/
    void affiche(double **matrice,int m,int n)
    {
        int i,j;
     
        /*Affichage de la matrice*/
        for(i=0; i<m; i++)
        { 
             printf("\n");
             for(j=0; j<n; j++)
             {
                 printf("%2.2lf\t", matrice[i][j]); 
             }
             printf("\n");
        }
    }
     
    /******************************************************************************/
    void saisie(double **matrice,int m,int n)
    { 
         int i,j; 
     
         matrice = (double **)malloc(m*sizeof(double *));
     
        if(!matrice)
        {
            printf("Erreur, pas assez de memoire");
            exit(-1);
        }
         for (i=0; i<m; i++)
         { 
             matrice[i]= (double *)malloc(n*sizeof(double));
     
             if(!matrice[i])
            {
                printf("Erreur, pas assez de memoire");
                exit(-1);
            }
         }
     
         /*Saisie des elements de la matrice*/
         for(i=0; i<m; i++)
         { 
             for(j=0; j<n; j++)
             { 
                 printf("Element[%d][%d] = ", i, j);
                 scanf("%lf", &matrice[i][j]);
             } 
        }
    }
     
    /******************************************************************************/
    /*fonction principale*/
    int main (void)
    { 
        double **matriceA, **matriceB;
        int m1,n1,m2,n2;
     
        printf("\nMatrice A:\n");
        printf("Nombre de lignes: ");
        scanf("%d",&m1); 
        printf("Nombre de colonnes: ");
        scanf("%d",&n1);
     
       /*APPEL DE LA FONCTION SAISIE*/
        saisie(matriceA,m1,n1);
       /*APPEL DE LA FONCTION AFFICHE*/
        affiche(matriceA,m1,n1);
     
        return 0;
    }

  2. #2
    Membre éprouvé
    Avatar de f-k-z
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 403
    Points : 928
    Points
    928
    Par défaut
    Yopyop,

    Il faut que tu sauvegardes l'adresse de ton allocation depuis ton saisie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matriceA=saisie(matriceA,m1,n1);
    et donc changer ton prototype aussi ainsi que le return qui va bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double ** saisie(double **matrice,int m,int n)
    cordialement,

    Fiki

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Et même, matrice n'a pas à être un paramêtre de la fonction saisie() : un paramêtre sert à transmettre une valeur à une fonction, or ici la première ligne de code de la fonction est matrice = ... donc la valeur transmise à la fonction par ce paramêtre n'est pas utilisée et est détruite. Cela signifie clairement que matrice doit être une variable locale ordinaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    double ** saisie(int m,int n)
    { 
       int i,j; 
       double ** matrice = malloc(m*sizeof(double *));
    ...
       return matrice;
    }
    Le code du main() montre aussi qu'il ne peut marcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        double **matriceA, **matriceB;
    ...
       /*APPEL DE LA FONCTION SAISIE*/
       saisie(matriceA,m1,n1);
    ...
    En aucun cas, cet appel ne peut modifier la valeur de matriceA qui reste après l'appel ce qu'elle était avant (c'est à dire n'importe quoi). Il faut se souvenir qu'en C les arguments sont toujours passés par valeur et que la fonction ne travaille qu'à partir d'une copie de cette valeur.

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    En recherche d’emploi
    Inscrit en
    Février 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : En recherche d’emploi

    Informations forums :
    Inscription : Février 2014
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par f-k-z Voir le message
    Yopyop,

    Il faut que tu sauvegardes l'adresse de ton allocation depuis ton saisie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matriceA=saisie(matriceA,m1,n1);
    et donc changer ton prototype aussi ainsi que le return qui va bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double ** saisie(double **matrice,int m,int n)
    cordialement,

    Fiki
    Merci énormément pour la réponse!!
    Cela m'aide beaucoup.

Discussions similaires

  1. Problème d'affichage d'une matrice
    Par zicoadis dans le forum Débuter
    Réponses: 4
    Dernier message: 26/01/2008, 17h36
  2. Affichage d'une matrice dans un edit
    Par harris_macken dans le forum Interfaces Graphiques
    Réponses: 15
    Dernier message: 22/11/2007, 21h35
  3. Réponses: 5
    Dernier message: 10/11/2007, 10h20
  4. [TP] Affichage d'une matrice
    Par williamdunord dans le forum Turbo Pascal
    Réponses: 19
    Dernier message: 28/05/2007, 20h46
  5. Affichage d'une matrice
    Par ypascal dans le forum Pascal
    Réponses: 7
    Dernier message: 24/04/2006, 20h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo