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 :

Plusieurs erreurs que je n'ai pas comprises


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut Plusieurs erreurs que je n'ai pas comprises
    bonjour

    je suis en train de développer un programme qui lit une matrice ( selon la définition mathématiques et non la définition informatique) et qui affiche son transposé .

    j'utilise code blocks , et en essayant de compiler mon programme il m'a affiché plusieurs codes d'erreurs que je n'ai pas compris .

    alors je demande votre aide ( compilez le chez vous et dites moi quelles sont mes fautes)

    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
    78
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
    /* définition de la structure */
    typedef struct mat
    { int nbl; /* nombre de lignes */
    int nbc; /* nombre de colonnes */
    float **t; /* les éléments */ } matrice;
     
     
    /* la fonction permettant la lecture */
     
    matrice lecture()
    {
        matrice *m;
        printf("entrez le nombre de lignes de votre matrice");
        scanf("%d",m.nbl);
        printf("entrez le nombre de colonnes de votre matrice");
        scanf("%d",m.nbc);
        for (int i=0;i<m.nbl;i++)
        {(t+i)=(float*) malloc (nbc * sizeof(float));}
     
        for (i=0;i<(*m).nbl;i++)
        {
            for (j=0;j<(*m).nbc;j++)
            { printf("donner l'element %d de la ligne %d",i,j);
            scanf("%lf",m.((t+i)+j));
            }}
            return (m);
     
    }
     
     
    /* la fonction permettant l'affichage */
    void affichage( matrice m)
    {
        int i,j;
        for(i=0; i< m.nbl ; i++)
        {
            for (j=0 ; j<m.nbc ; j++)
            { printf("%f",m.(**((t+i)+j))); }
        }
    }
     
     
    /* la fonction permettant d'obtenir le transposé d'une matrice */
     
    matrice transpose (matrice m)
    { int i,j;
     
    matrice *tr;
    tr=(matrice*)malloc(sizeof(m));
     
    (*tr).nbl = m.nbc;
    (*tr).nbc = m.nbl;
     
    for (i=0 ; i<(*tr).nbl ; i++)
    {
        for (j=0 ; j<(*tr).nbc ; j++)
        {
            (*tr).(*((t+i)+j)) = M.(*((t+i)+j)) ;
        }}
     
        return(*tr);
    }
     
     
    void main()
     
    {
        matrice m,a;
        m=lecture();
        a=transpose(m);
        affichage(a);
        getch();
     
    }

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    D:\fred\essai\main.c||In function `lecture'
    D:\fred\essai\main.c|18|error: request for member `nbl' in something not a structure or union|
    D:\fred\essai\main.c|20|error: request for member `nbc' in something not a structure or union|
    D:\fred\essai\main.c|21|error: 'for' loop initial declaration used outside C99 mode|
    D:\fred\essai\main.c|21|error: request for member `nbl' in something not a structure or union|
    D:\fred\essai\main.c|22|error: `t' undeclared (first use in this function)|
    D:\fred\essai\main.c|22|error: (Each undeclared identifier is reported only once|
    D:\fred\essai\main.c|22|error: for each function it appears in.)|
    D:\fred\essai\main.c|22|error: `nbc' undeclared (first use in this function)|
    D:\fred\essai\main.c|26|error: `j' undeclared (first use in this function)|
    D:\fred\essai\main.c|28|error: syntax error before '(' token|
    D:\fred\essai\main.c|30|error: incompatible types in return|
    D:\fred\essai\main.c||In function `affichage'
    D:\fred\essai\main.c|42|error: syntax error before '(' token|
    D:\fred\essai\main.c||In function `transpose'
    D:\fred\essai\main.c|62|error: syntax error before '(' token|
    D:\fred\essai\main.c|71|warning: return type of 'main' is not `int'|
    ||=== Build finished: 13 errors, 1 warnings ===|
    Hou là il faut y aller doucement.
    Ecrire un peu de code, le faire fonctionner puis l'améliorer.

    Là: d'entrée de jeu,

    1) Il y a une fonction sans paramètre :

    2) Un pointeur vers une structure est déclaré mais non initialisé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        matrice *m;
        scanf("%d",m.nbl);
    Merci de commencer par créer une matrice (structure) est de faire pointer m vers elle.

    Heureusement que cela ne compile pas....

    Bon courage et bon week-end

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut re
    je suis ok pour le 2ème partie mais je n'ai pas compris le problème de la 2ème !!


    je trouve que c'est normal d'avoir une fonction sans paramètres


    exemple : pour la création d'une liste chainée vide on peut faire

    liste *creation()
    { return NULL ; }


    est ce faux ??

  4. #4
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    pas de paramètre -> void
    Par ailleurs, il y a deux façons de gérer des variables la gestion statique de mémoire (tout est alloué au démarrage) et dynamique (il faut allouer sur demande).

    Je vous conseille de commencer par la gestion statique de mémoire: donc de créer une matrice en tant que variable au démarrage de votre programme.

  5. #5
    Expert confirmé
    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
    Par défaut
    Beaucoup d'erreurs :
    Fonction lecture() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    matrice lecture()
    {
        matrice *m;
        printf("entrez le nombre de lignes de votre matrice");
        scanf("%d",m.nbl);.......
    A ce niveau il n'y a pas d'objet matrice, juste un pointeur (m) non initialisé. Pour remplir une matrice, il faut ... une matrice !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    matrice lecture()
    {
        matrice m;
    ...
    dans un scanf, il faut fournir l'adresse de destination :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        scanf("%d",&m.nbl);.......
    ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        for (int i=0;i<m.nbl;i++)
        {(t+i)=(float*) malloc (nbc * sizeof(float));}
    i, t, nbc ne sont pas définis. Au lieu de t, peut être s'agit-il de m.t. Même dans ce cas, l'allocation est fausse. Il faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1- Allouer pour m.t un tableau de nbl float* 
    2- Pour chaque élément de ce tableau, allouer un tableau de nbc float
     - ou allouer un tableau de nbc*nbl float et mettre les bonnes adresses de début de lignes dans le tableau de float*
    Alors seulement, on peut remplir le tableau par un scanf correctement écrit (ce qui n'est pas du tout le cas dans ton code) et pendant qu'on y est, rédiger le code en respectant bien l'indentation ce qui le rendra plus lisible.

    Je n'ai pas lu la suite.

  6. #6
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut re
    j'ai plusieurs problèmes certes

    mais le prob majeur est avec les pointeurs !

Discussions similaires

  1. Réponses: 20
    Dernier message: 08/06/2006, 10h12
  2. Réponses: 12
    Dernier message: 11/04/2006, 17h36
  3. std ::vector [erreur que je ne comprend pas]
    Par aaronw dans le forum SL & STL
    Réponses: 8
    Dernier message: 05/03/2006, 21h00
  4. [Débutant] Message d'erreur que je ne comprends pas
    Par Le Furet dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2006, 17h37
  5. [PostGreSQL] une erreur que je ne comprends pas
    Par flo78 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2006, 10h18

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