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 :

type pour une matrice cubique d'entiers


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut type pour une matrice cubique d'entiers
    Bonjour,

    Quel est le type simple pour une matrice cubique d'entiers ?

    int** ne va pas, ce serait un tableau de listes d'entiers c'est bien ca ?

    Il faut obligatoirement passer par une structure pour une matrice ? Avec les pointeurs on ne peut pas s'en sortir ?

    Merci
    ++

  2. #2
    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
    bien sûr que si..

    Ce serait soit :

    soit :

    soit

    Personnellement pour du 3D j'aurais tendance à préférer une structure....

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    Alors la je ne comprends pas...
    entre int*** et int* il y a une grosse différence pourtant... et le deuxième c'est un pointeur sur un entier, autrement dit un tableau d'entiers, ou apparait la matrice je ne vois pas ?

    En fait je crois avant de passer à la matrice cubique, faut réfléchir à la matrice carrée dans le plan... lol

    Alors euh la matrice carrée, ce serait int** ? int** x;
    est-ce que ca fait bien comme "dessin" cela :
    x
    | | -> | | | |
    | | -> | | | |
    | | -> | | | |

    Un tableau qui pointe sur des tableaux d'entiers ou bien, c'est un tableaux qui pointe que sur des entiers :
    x
    | | -> | |
    | | -> | |
    | | -> | |


    Du coup si c'est bien le premier dessin qui correspond avec le int** pour la matrice carrée, pour la matrice cubique je comprendrais mieux le int***
    Merci
    ++

  4. #4
    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
    exactement...

    Tu peux faire :

    Tableau = (à chaque ligne une colonne) ou (à chaque colonne une ligne)

    Dans ce cas-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int **matrice = NULL ;
     
    matrice = malloc ( nlignes * sizeof(int *) )
     
    for ( i = 0 ; i < nlignes ; i++ )
      matrice[i] = malloc ( ncolonnes * sizeof(int) );
     
    for ( i = 0 ; i < nlignes : i++ )
      for ( j = 0 ; j < ncolonnes ; j++ )
         matrice[i][j] = 0 ;
    NOTE : ce code est juste un exemple. Pas de sécurité, pas du code propre.

    Mais tu peux aussi faire la même chose avec un seul tableau, mais c'est à toi à calculer les indices :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int *matrice = NULL ;
     
    matrice = malloc ( nlignes * ncolonnes * sizeof(int) )
     
    for ( i = 0 ; i < nlignes : i++ )
      for ( j = 0 ; j < ncolonnes ; j++ )
         matrice[i*ncolonnes+j] = 0 ;

    Voilà...


    Sauf qu'avec 3 dimensions, ça commence à devenir un peu plus compliqué, que ce soit par tableaux de tableaux de tableaux ou par pointeurs et calculs d'indices..

    Donc moi dans ce cas je préfère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct {
     
        int x ;
        int y ;
        int z ;
    } Point ;
     
    Point *Pts=NULL ;
     
    Pts = malloc( nlignes*ncolonnes * sizeof(Point) );

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    oué c'est vrai ca devient compliqué mais logiquement le int *** fonctionnerait alors...

    Merci
    ++

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

Discussions similaires

  1. confilcting types pour une structure ?
    Par Tymk dans le forum C
    Réponses: 5
    Dernier message: 03/07/2008, 08h59
  2. Fonction flip Vertical pour une matrice
    Par romain1986 dans le forum SDL
    Réponses: 5
    Dernier message: 05/04/2007, 11h17
  3. Réponses: 13
    Dernier message: 05/03/2007, 09h29
  4. quel est le type pour une image?
    Par kitiara999 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 06/12/2006, 18h07
  5. [TYPE DE CHAMPS] Quel type pour une primary key ?
    Par guy2004 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 25/03/2006, 12h23

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