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 initialisation matrice


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut probleme initialisation matrice
    bonjour j ai un probleme d initiation de matrice.Je vous explique le but est de faire saisir à l utilisateur une matrice en console.Pendant qu il saisit on affiche la matrice qui prend progressivement les valeur qu il entre(ainsi l utilisateur sait ou il entre sa valeur).La matrice est initialisé à 0 . le problème est que lorsque j affiche la matrice initialisé à 0 le programme m affiche n importe quoi.Voici les deux fichier le matrice.h qui contient les operations sur les matrices et le saisi.c qui execute ces fonction.SI vous voulez plus de details precisez moi mais je pense etre clair:

    matrice.h:

    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
    76
    77
     
    #include <stdio.h>
    #include <stdlib.h>
    #define NB_ELEM 20
     
    struct  matrice
    {
           int tab[NB_ELEM][NB_ELEM];
           int nbl;
           int nbc;
    };
     
    typedef struct matrice matrice;
     
     
     
     
     
     void init_mat(matrice *mat)
     {   
            int i,j,l,c;
     
        printf("saisir le nombre de ligne\n");
         scanf("%d",&l);
         printf("saisir le nombre de colonne\n");
         scanf("%d",&c);
          printf("%d\n",l);
          (*mat).nbl=l;
          (*mat).nbc=c;
     
         for(i=0;i<(*mat).nbl;i++)
         {
     
     
                         for (j=0;j<(*mat).nbc;j++)
                         {
     
                          (*mat).tab[i][j]=0;
                          }
     
         }
     
     
    }
     
    void affiche_mat(matrice * mat)
    {
         int i,j;
     
     
                     for(i=0;i<(*mat).nbl;i++)
     
         {
                         for (j=0;j<(*mat).nbc;j++)
                         {
                          printf("%d",mat->tab[i][j]);
                          }
                          printf("\n");
         } 
    }
     
     void saisir_mat(matrice  *mat)
    {
    int i,j;
    for(i=0;i<(*mat).nbl;i++)
    {
                      for (j=0;j<(*mat).nbc;j++)
                         {
                          scanf("%d",&(*mat).tab[i][j]);
                          printf("à saisi");
                          system("cls");
                          affiche_mat(mat);
     
                          }                      
     
    }
    }

    saisi.c

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #define NB_ELEM 20
     
    #include "matrice.h"
     
     
     
     
    main()
    {
    matrice  mat;
         init_mat(&mat);
         printf("fin init\n");
         system("pause");
         affiche_mat(&mat);
         saisir_mat(&mat);
         affiche_mat(&mat);
         system("pause");
     
    }

  2. #2
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    il faudrai passer un pointeur sur mat aux fonctions qui modifient la matrice !
    dans ton cas, elles font une copie de mat et modifient la copie !

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut
    ah zut j ai deja bouffé plein de tuto sur les pointeur et je comprend pas trop je fais comment?

    En C++ je sais qu il faut mettre un & devant les variable modifiable mais la ça a pas l air de marcher:-(

  4. #4
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    oui:
    mais il faut changer la fonction d'initialisation en concequence....
    dans la declaration deja:
    et à chaque utilisation de mat, tu remplace mat par (*mat) ou alors remplacer mat. par mat->

    tu pe aussi le faire pour les autres fonctions, c'est meme mieux, y'aura mon de copies

    mais revoies les poiteurs !!!! si tu veux apprendre le C, c'est indispensable de BIEN comprendre leur fonctionnement...

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut
    voila j ai fait les modifes mais gros plantage la je crois que j ai pas trop compris.j ai fais les modifs dansd le premiers post.

  6. #6
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    dans ta fonction saisir mat....
    c'est pas
    mais:
    vu que tu a passé en argument de saisir mat un ponteur sur mat....
    ecoutes, tu ferais mieux de revoir tes cours sur les pointeurs avant hein !

    tu as aussi declaré deux NB_ELEM deifferents !

  7. #7
    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 sneb5757
    matrice.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     void init_mat(matrice *mat)
     {   
            int i,j,l,c;
    On ne met pas de définition d'objets ni de code (sauf inline) dans un header. Jamais.

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

    En plus, si c'est avoir de genre d'incohérences
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
    #include <stdlib.h>
    #define NB_ELEM 3
     
    #include <stdio.h>
    #include <stdlib.h>
    #define NB_ELEM 20
    ça craint vraiment...



    Il faudrait aussi corriger ça :
    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
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:71: warning: return type defaults to `int'
    main.c:71: warning: function declaration isn't a prototype
    main.c: In function `main':
    main.c:72: warning: unused variable `i'
    main.c:72: warning: unused variable `j'
    main.c:88: warning: control reaches end of non-void function
    Linking console executable: C:\dev\forums2\console.exe
    Process terminated with status 0 (0 minutes, 6 seconds)
    0 errors, 5 warnings
    Pour le reste, c'est simple. Pour qu'une fonction puisse modifier un objet, il faut lui passer son adresse via un pointeur du même type. C'est tout.
    avec
    Ah, j'avais pas vu encore vu le main(). Tu veux une taille programmable ?. OK. Il faut utiliser malloc(). C'est une FAQ (tableau dynamique à 2 dimensions). La structure devient (je recommande size_t pour cet usage) :

    http://emmanuel-delahaye.developpez....tes.htm#size_t
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct matrice
    {
       int **tab;
       int nbl;
       int nbc;
    };
    Fait de ton mieux et poste ton code si tu es en panne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/10/2006, 22h41
  2. [win32]Problème initialisation slider
    Par pj69100 dans le forum MFC
    Réponses: 1
    Dernier message: 02/05/2006, 17h20
  3. Réponses: 2
    Dernier message: 09/01/2006, 16h53
  4. [Debutant] Probleme initialisation de references
    Par kiroukou dans le forum Débuter
    Réponses: 17
    Dernier message: 02/03/2005, 13h55
  5. Probleme de matrice
    Par Johngame dans le forum DirectX
    Réponses: 1
    Dernier message: 07/02/2005, 18h53

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