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 :

allocation de la mémoire pour un ensemble de matrices (pyramide)


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 101
    Points : 57
    Points
    57
    Par défaut allocation de la mémoire pour un ensemble de matrices (pyramide)
    bonsoir

    à fin de coder un programme qui va me permet d'informatisé le calcule du déterminant d'une matrice donnée de type n*n ; je dois crier une fonction qui va me permet d'allouer des matrices de type n*n selon le principe suivant : si la première matrice est de type n*n la deuxième sera de type (n-1)*(n-1) et ainsi de suite.

    et à la fin de l'exécution de ma fonction , elle aura allouer une pyramide dans la mémoire.

    mais ca fais 2 jours que j'essaye sans résultat, et surtout les structures de données ce n'est ma pointe forte.

    je serai reconnaissant si vous m'aidez à ce sujet

    Merci à l'avance

  2. #2
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    Appelons mon_type, le type des éléments contenus dans ta matrice:
    Tu déclares :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_type*** pyramide=malloc(n*sizeof(type**));
    Chaque case de ce tableau correspondra à pointeur de type mon_type** que l'on peut faire pointer vers une matrice(grâce à malloc()). Avec une boucle for, tu peux aisément remplir ton tableau de matrices de la façon voulue
    (il faut noter que dans mon exemple, les matrices sont représenté par des tableaux de pointeurs, mais ce n'est pas la seule solution)

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 101
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par quetzacoatl Voir le message
    Appelons mon_type, le type des éléments contenus dans ta matrice:
    Tu déclares :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_type*** pyramide=malloc(n*sizeof(type**));
    Chaque case de ce tableau correspondra à pointeur de type mon_type** que l'on peut faire pointer vers une matrice(grâce à malloc()). Avec une boucle for, tu peux aisément remplir ton tableau de matrices de la façon voulue
    (il faut noter que dans mon exemple, les matrices sont représenté par des tableaux de pointeurs, mais ce n'est pas la seule solution)
    Merci quetzacoatl

    j'ai une question : quand vous dites que ce n'est pas la seule solution , pouvez vous me lister les autres méthodes ,comme ca je vais choisir la meilleure pour la gestion des données et pour le traitement

    Merci encore une fois

  4. #4
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    On peut également représenté une matrice de taille n*p par un tableau d'entiers de n*p
    Seul inconvénient, pour se déplacer dans la matrice, on ne pourra pas faire A[i][j], mais on fera A[i*p+j]
    L'avantage est la place mémoire occupée qui est moindre.

  5. #5
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par quetzacoatl Voir le message
    L'avantage est la place mémoire occupée qui est moindre.


    Non..

    L'avantage c'est surtout que l'allocation est plus simple et qu'on peut utiliser un pointeur et donc une boucle continue...


    L'avantage est donc une plus grande vitesse d'excution, sauf pour adresser un élément particulier..


    Si on veut passer à travers toute la matrice :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int  *matrice ;
    int    dimx, dimy ;
     
    for ( i = 0 ; i < dimx*dimy ; i++ )
    {
        *matrice = ... ;
         matrice++ ;
     
        /* 
         * Ou bien 
         *         *matrice++ = ... ;
         */
    }

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 101
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par souviron34 Voir le message


    Non..

    L'avantage c'est surtout que l'allocation est plus simple et qu'on peut utiliser un pointeur et donc une boucle continue...


    L'avantage est donc une plus grande vitesse d'excution, sauf pour adresser un élément particulier..
    Merci les Amis

    donc la 1ere méthode est la bonne pour faire beaucoup de calcules sur ma matrice !! c'est ca ?!

  7. #7
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mechakiss Voir le message
    Merci les Amis

    donc la 1ere méthode est la bonne pour faire beaucoup de calcules sur ma matrice !! c'est ca ?!
    tout dépend du type de calculs..

    Si tu dois passer à travers toutes les cellules de la matrice, ou si tu fais une colonne ou une ligne, il est nettement plus rapide et simple d'utiliser un seul tableau à 1 dimension

    Si tu a des trucs comme des filtres (se servir des N voisins), l'écriture est plus simple avec des tableaux à 2 dimensions.

    Mais de manière générale la vitesse sera légèrement supérieure de toutes façons avec un seul tableau..

    Et l'allocation est plus simple..


    Pour allouer toute ta pyramide de n*n à 1*1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int **matrice ;
     
    matrice = (int **) calloc ( n, sizeof(int*) );
     
    for ( i = n ; i >= 1 ; i-- )
    {
       matrice[n-i] = (int *) calloc ( (i*i), sizeof(int) );
    }

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/02/2015, 10h22
  2. Allocation de mémoire pour fft
    Par Meyoz dans le forum MATLAB
    Réponses: 4
    Dernier message: 24/02/2008, 07h15
  3. Réponses: 28
    Dernier message: 27/05/2007, 15h16
  4. Allocation mémoire pour exécution de code généré
    Par mchk0123 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 06/04/2007, 16h26
  5. Réponses: 6
    Dernier message: 24/03/2006, 18h24

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