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 :

Fonctions manipulant des matrices


Sujet :

C

  1. #21
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par fearyourself
    Pas forcément, tu peux passer le tableau et les tailles du tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void Tab(double **Mat, int l, int c);
    Vu que tu veux une taille dynamique, c'est ce qu'il y a de mieux (ou la structure)



    Il suffit d'avoir :


    Pour une matrice, ce serait plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct matd
    {
       size_t nb_colonnes;
       size_t nb_lignes;
       double **tab;
    };

    Si tu veux garder ce système d'une ligne, tu fais le calcul que j'ai montré plus haut...

    Jc
    Donc, je peux faire avec la structure que tu définis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct matd
    {
       size_t nb_colonnes;
       size_t nb_lignes;
       double **tab;
    };
    un appel de fonction comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    type_retour fonction(matd * matrice);
    ?

    ensuite pour avoir la cellule (i,j), je fais matrice->tab[i][j] ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par panda31
    Pour passer une matrice de double en paramètre d'une fonction, je procède par un passage d'une structure c'est ça ?
    On passe l'adresse d'un objet du bon type... Si c'est un TAD, on ne connait pas le détail...
    size_t est défini comment ? C'est un type inclus par défaut dans le C ?
    C'est un type du C défini depuis 1989... C'est pas un scoop...

    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 matd
    {
       size_t nb_colonnes;
       size_t nb_lignes;
       double *tab;
    };
    double *tab contient une seule ligne je me trompe ?
    Oui ! En fait il contient l'adresse d'un bloc linéaire de colonnes x lignes objets consécutifs de double. (Je rappelle que la notion de n dimensions est humaine, mais vue de la machine, il n'y en a qu'une...)
    Comment on parcourt les différents éléments...?
    à l'aide d'une fonction qui calculent l'emplacement de la donnée en fonction de ses coordonnées (i, j).

    Mais tout ça fait partie du TAD. L'utilisateur n'a pas à connaitre le détail de la structure qui, vue de l'extérieur est
    Relis bien mon article sur les TAD...

  3. #23
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    C'est un type du C défini depuis 1989... C'est pas un scoop...
    Ouis saf que je fais du C que depuis 2005 !

  4. #24
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par panda31
    Donc, je peux faire avec la structure que tu définis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct matd
    {
       size_t nb_colonnes;
       size_t nb_lignes;
       double **tab;
    };
    un appel de fonction comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    type_retour fonction(matd * matrice);
    ?

    ensuite pour avoir la cellule (i,j), je fais matrice->tab[i][j] ?
    Oui et si c'est bien alloué, cela marchera sans problème...

    Jc

  5. #25
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    J'ai modifié en correspondance avec le TAD d'Emmanuel Delahaye ma fonction principale en attendant les autres :

    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
    POINTEUR2 matcr_createMatrix(matd_s * mat , size_t nb_lignes, size_t nb_colonnes) /*A MODIFIER COMPLETEMENT*/
    {
        /*matcr_createMatrix : 
        *Input : 
            num_line corresponds au numéro de ligne de la matrice simple 
                     que l'on veut traduire en vecteur creux
            ptr_line est un pointeur vers la ligne ne question
            nectRow est un pointeur vers la prochaine ligne dans la matrice creuse
        *Output :
            res est la traduction de la ligne n° num_line en vecteur creux
        */
        POINTEUR2 res = NULL;
        POINTEUR Une_ligne = NULL;
        double * vect = NULL; //Ajout de ce pointeur afin de manipuler chaque ligne de la matrice indépendamment
        vect=malloc(sizeof(double)*nb_colonnes);
        size_t i,k  ;/*indices*/
     
     
        for (i=nb_lignes;i>=0;i--){
            for(k=0;k<nb_colonnes;k++){
                matd_get(matd_s * mat, i, k, vect);
                printf("%lf \n",vect[i]);
                vect++;
            }
            print("\n");
            printf("TEST MAT1, %d ieme iteration\n\n",i);
            Une_ligne = vecteur_creux(vect, nc);
            if (Une_ligne  != NULL)
                res = nouveau_maillon2(i, Une_ligne, res) ;
        }
        return res ;
    }
    Cela vous paraît-il correct ?

    L'approche du TAD me paraît bonne ! Je vais essayer de l'appliquer aux matrices creuses. Merci vraiment pour tous les conseils précieux que vous m'avez offert. J'ai beaucoup appris avec ce projet de gestion des matrices creuses, même si vous devez trouver cela trivial à implémenter

    Enfin, avant de devenir chêne, il faut commencer gland !

Discussions similaires

  1. Manipulation des matrices
    Par drimong dans le forum MATLAB
    Réponses: 5
    Dernier message: 02/03/2013, 04h59
  2. manipulation des matrices
    Par amanichennoufi dans le forum Simulink
    Réponses: 3
    Dernier message: 15/02/2012, 19h21
  3. Manipulation des matrices ?
    Par maker dans le forum WinDev
    Réponses: 5
    Dernier message: 15/02/2010, 10h03
  4. Manipulation des Matrices en VB .NET
    Par ziados dans le forum VB.NET
    Réponses: 1
    Dernier message: 27/07/2009, 12h02
  5. manipulation des matrices sous SSRS
    Par linram dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/07/2007, 12h31

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