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 :

structure, matrice et pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut structure, matrice et pointeurs
    Bonjour
    je n'arrive pas à me sortir d'un exo de C
    Voici le sujet et ce que j'ai essayé de faire:
    La finalité est de faire des multiplications de matrice en manipulant des pointeurs.

    Je dois utiliser la structure suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct MatriceStruct{
    	float **valeurs;
    	int nbreLignes;
    	int nbreColonnes;};
     
    typedef struct MaticeStruct Matrice;
    typedef Matrice* MatriceP;
    Je dois également créer (entre autre) 2 fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void intialiserLigne (float valeurInitiale, int NumLigne, MatriceP matriceP)
    MatriceP creer (float valeurInitiale, int nbreLignes, int nbreColonnes)
    Je n'arrive pas à commencer car je ne vois pas comment allouer de la mémoire pour une variable de type MatriceStruct ...
    (c'est le float **valeurs qui me perturbe)

    J'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Matrice matrice = (Matrice*) calloc( nbreColonnes, sizeof(Matrice) );
    mais c'est faux ...

    si vous aviez un ou 2 conseils pour que je puisse démarrer ...

    Merci d'avance
    Matthieu

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut
    je ne vois pas ce que signifie le * dans:
    typedef Matrice* MatriceP;

    .. ? ..

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    tu définis juste un nouveau type MatriceP qui est un pointeur sur Matrice.

    et tu ne vois pas comme une contradiction ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Matrice matrice = (Matrice*) calloc...
    ??

    alloc retourne un void *.
    Tu le castes en Matrice *.

    ...

    Et tu l'affectes à une variable Matrice ...

  4. #4
    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
    Une trame pour la création d'une matrice :

    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
    MatriceP creer (float valeurInitiale, int nbreLignes, int nbreColonnes)
    {
      MatriceP matrice;
    // - allouer de la place pour la Matrice (malloc) et mettre l'adresse obtenue dans matrice
    // - Tester si la place a été allouée (matrice != NULL)
    // - Si oui :
    //    - Ranger nbreLignes dans matrice->nbreLignes et nbreColonnes dans matrice->nbreColonnes
    //    - Créer un tableau (par allocation dynamique) qui contiendra l'adresse des nbreLignes lignes  et mettre son adresse dans matrice->valeurs
    //    - Si l'allocation a échoué : détruire la Matrice déjà allouée (free) et mettre matrice à NULL
    //      - Sinon, pour chaque ligne :
    //          - Allouer nbreColonnes éléments. Mettre l'adresse obtenue dans le tableau matrice->valeurs
    //          - si les éléments sont  alloués, les initialiser avec valeurInitiale
    //          - En cas d'échec d'une des demandes d'allocation, détruire les lignes déjà allouée, détruire le tableau matrice->valeurs, détruire la Matrice et mettre matrice à NULL
    //   - retourner matrice
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut
    merci Diogene, je vais suivre ta trame

    Pourrais tu m'expliquer le * dans la ligne:
    typedef Matrice* MatriceP;

    ?

  6. #6
    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
    Si tu as un type de donnée, disons int, mais ça marche pour n'importe quel type de donnée, alors int * est le type adresse de int
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef Matrice* MatriceP;
    typedef : définition d'un nouveau type de donnée nommé MatriceP. Ce type MatriceP est équivalent au type Matrice* qui signifie adresse de (à cause de *) d'un objet de type Matrice

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut
    ok, c plus clair.

    Juste pour bien comprendre, pourquoi je ne peux pas écrire &Matrice à la place de Matrice* ?

    (pour moi, le & veut dire "adresse de")
    (comme &ma_variable correspond à l'adresse de ma variable ...)

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/01/2007, 16h40
  2. Structure, union et pointeur
    Par kikoo.plop dans le forum C
    Réponses: 10
    Dernier message: 18/12/2006, 19h21
  3. structure matrice en C
    Par pedro7 dans le forum C
    Réponses: 8
    Dernier message: 17/12/2006, 15h28
  4. structure, tableau et pointeur
    Par Phil' dans le forum GTK+ avec C & C++
    Réponses: 16
    Dernier message: 26/05/2006, 17h47
  5. Matrice de pointeurs de fonctions
    Par sebduth dans le forum C
    Réponses: 15
    Dernier message: 18/07/2003, 14h03

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