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 :

probleme programme C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Par défaut probleme programme C
    bonjour,
    j'ai un problème avec ce programme, je voudrais remplir une matrice et l'afficher.
    est-ce que quelqu'un pourrait corriger ce code pour qu'il fonctionne, svp ?
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int a, b;
    int i,j;     
     
    int remplir_mat(int *l, int *c)
    {
         int **mat;
         for(i=0;i<*l;i++)
         {for(j=0;j<*c;j++)
         {printf("ligne %d, colonne %d : ", i+1, j+1);
         scanf("%d", &mat[i][j]);
         }
         }
         return mat;
    }
     
    void affiche_mat(int **mat, int l, int c)
    {
     
         for(i=0;i<l;i++){
         for(j=0;j<c;j++)
         { printf("%d ", &mat[i][j]);
         }
         printf("\n");
         }
    }
     
    int main()
    {
        int mat[10][10];
        N=2;
        M=2;
         printf("%d %d", a, b);
        remplir_mat(&a, &b);
        affiche_mat(mat, a, b);
    }

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par space_56 Voir le message
    j'ai un problème avec ce programme, je voudrais remplir une matrice et l'afficher.
    Beaucoup de fautes dans ce code... Tu devrais déjà revoir comment on passe un tableau à 2 dimensions à une fonction :

    http://emmanuel-delahaye.developpez.....htm#param_tab

    est-ce que quelqu'un pourrait corriger ce code pour qu'il fonctionne, svp ?
    Euh, non. Ca, c'est ton boulot... Commence par supprimer ces globales inutiles et par bien configurer ton compilateur :

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Par défaut
    tu peux me dire où sont les erreurs de ligne, stp ?
    dans ce code les tableaux sont-ils bien transmis ?

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par space_56 Voir le message
    tu peux me dire où sont les erreurs de ligne, stp ?
    dans ce code les tableaux sont-ils bien transmis ?
    Tu ne vois pas que int **mat n'a aucun sens ici ? Il faut utiliser ce que j'ai indiqué, c'est à dire int mat[10][10] ou int mat[][10] et ne pas oublier de passer les dimensions aux fonctions.

  5. #5
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Je m'étais amusé à gérer des matrices avec un programme c. On m'avait aidé sur HFR. Je peux toujours poster le code auquel j'étais arrivé, ça pourra toujours aider. Mais je sais pas si c'est dans l'esprit du forum. Donc si ça peut t'aider space_56

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Par défaut
    je ne comprends pas, ça ne marche toujours pas.

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int N, M;
    int i,j;     
     
    int remplir_matrice(int *l, int *c)
    {
         int mat[10][10];
         /*scanf("%d %d", l, c);
         printf("%d %d", *l, *c);*/
         //mat = (int**) malloc((*l) * sizeof(int*)); 
         for(i=0;i<*l;i++)
         {for(j=0;j<*c;j++)
         {printf("ligne %d, colonne %d : ", i+1, j+1);
         scanf("%d", &mat[i][j]);
         }
         }
         return mat;
    }
     
    void affiche_mat(int mat[][], int l, int c)
    {
     
         for(i=0;i<l;i++){
         for(j=0;j<c;j++)
         { printf("%d ", 1);
         }
         printf("\n");
         }
    }
     
    int main()
    {
        int mat[10][10];
        N=2;
        M=2;
        printf("%d %d", N, M);
        remplir_matrice(&N, &M);
        affiche_mat(mat, N, M);
    }

  7. #7
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Pourquoi tu déclares tes variables N,M,i,j en globale? Surtout i, j c'est bizzare.

    Ta fonction remplir_matrice doit renvoyer un int alors que tu renvoies un pointeur mat. Il faut donc rajouter un *après le int du prototype de ta fonction pour lui indiquer qu'elle doit renvoyer un pointeur vers un int et non pas un int.

    Pourquoi tu passes tes paramètres (N,M) par pointeurs?

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par space_56 Voir le message
    je ne comprends pas, ça ne marche toujours pas.
    Parce que tu codes au hasard. Premièrement, tu devrais enlever tes globales. Puis, dans ta fonction remplir_matrice(), mat est tableau de 10 tableaux de 10 ints (ou plus simplement dit une matrice de 10 x 10 ints). Tu ne peux pas retourner mat comme ça, et pour deux raisons.

    1. Le type de retour est faux! Ce n'est pas int, mais un pointeur sur un tableau de 10 ints. Ce qui nous donnerait le prototype suivant:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
       
      int (*(remplir_matrice(int *l, int *c)))[10];
      cryptique, non?
    2. mat est un tableau local à ta fonction. La mémoire allouée est libérée dès la sortie de la fonction. Ainsi, l'adresse retournée par la fonction devient aussitôt invalide.


    De plus, le prototype de affiche_mat() doit être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void affiche_mat(int mat[][10], int l, int c);
    où mat est de type pointeur sur tableau de 10 ints.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/03/2009, 21h10
  2. Probleme programme d'une Liaison RS232 Série en C
    Par dawud dans le forum Réseau
    Réponses: 4
    Dernier message: 02/03/2009, 22h08
  3. Probleme programme java
    Par G4uthier dans le forum Applets
    Réponses: 4
    Dernier message: 13/01/2008, 08h50
  4. probleme programme structuré.
    Par argon dans le forum C
    Réponses: 10
    Dernier message: 31/01/2007, 10h11
  5. Slider problème programmation
    Par Bizarroide63 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 27/07/2006, 03h43

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