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 :

Déclarer une matrice


Sujet :

C

  1. #1
    joy
    joy est déconnecté
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Déclarer une matrice
    Salut, j'ai un gros probleme. Je travaille sur un projet à coder en C, et dedans il y a les matrices, seulement le seul hic c'est que je n'ai jamais programmé de matrice.

    L'utilisateur doit pouvoir rentrer le nbre de colonne et de ligne qu'il veut. Je pensais passer par une structure de type Matrice mais vu que l'utilisateur doit aussi rentrer les valeurs qu'il veut, je voyais plutot une declatration dynamique avec utilisation de pointeurs.

    Quelqu'un pourrait il me donner un programme exemple qui me montre comment on déclare une matrice (même en statique je m'en fous le tout c'est pour avoir un exemple pour ne pas partir sur un truc un peu trop acrobatique) ou me dire où est ce que je peux en trouver.
    Merci d'avance... : : :

  2. #2
    Futur Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Peut être qu'un tableau suffirait pour representer une matrice (d'entiers par exemple) :

    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
     
    int main(void)
    {
     
    int ** matrice;
    int i,j, nombre_de_lignes,nombre_de_colonnes;
     
     
    // l'utilisateur entre le nombre de lignes
    printf("nombre_de_lignes : ");
    scanf("%d", &nombre_de_lignes);
     
    matrice = (int ** )malloc(nombre_de_lignes);
     
    // l'utilisateur entre le nombre de colonnes
    printf("nombre_de_colonnes : ");
    scanf("%d", &nombre_de_colonnes);
     
    for(i=0;i<nombre_de_lignes;i++)
    matrice[i] = (int * )malloc(nombre_de_colonnes);
     
    for(i=0;i<nombre_de_lignes;i++)
    	for(j=0;j<nombre_de_colonnes;j++)
    		scanf("%d", &matrice[i] [j]);
     
    for(i=0;i<nombre_de_lignes;i++)
    {	for(j=0;j<nombre_de_colonnes;j++)
    		printf("%d\t",matrice[i] [j]);
    	printf("\n");}
     
    return 0;}

  3. #3
    joy
    joy est déconnecté
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup

    Pourquoi utiliser un pointeur de pointeur ? Je pensais à un pointeur avec une allocation de memoire de la taille ligne*colonne.

    Crois tu que je puisse utiliser une structure matrice contenant 3 champ:
    - nombre de colonnes
    - nomres de lignes
    - un pointeur m qui pointera les données
    Ai je le droit de faire ça ?

  4. #4
    Futur Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    L'utilisation du int ** permet d'addresser facilement :
    matrice[numero_de_ligne][numero_de_colonne]
    car matrice est alors un tableau de tableaux.

    Avec int * on obtient un unique tableau "linéaire" de longueur
    nombre_de_lignes * nombre_de_colonnes.
    C'est bon aussi mais pour addresser l'élément colonne i ligne j on est obligé d'utiliser une expression moins lisible à mon avis du type
    matrice[numero_de_ligne*nombre_de_colonnes+numero_de_colonne]

    Sinon pour la structure proposée, je ne vois aucun empêchement.

  5. #5
    joy
    joy est déconnecté
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    J'ai essayé avec ma struct j'ai un peit problème de remplissage mais il devrait être resolu aujourd'hui
    En fait j'ai une question sur ton exemple:
    c'est qoi matrice[i]?
    tu fais un malloc avec un cast en int * alors que y'a déjà un malloc en int **.
    Je pense comprendre que matrice [i] est un pointeur de colonne mais je préfère être sure; Pourrais tu me dire la différence entre les deux(matrice et matrice[i])?
    Merci beaucoup

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Oui, oui je pense que tu as bien compris :
    matrice est un int** donc un pointeur sur pointeur
    matrice pointe sur un tableau de taille nombre_de_lignes qui contient des pointeurs matrice[numero_de_ligne]
    chaque matrice[numero_de_ligne] pointe sur un tableau de taille nombre_de_colonnes (ie une ligne de la matrice).

    En résumé:
    matrice --->matrice[0](usigned long int) -----> tableau de ints
    (usigned long int) matrice[1](usigned long int) -----> tableau de ints
    matrice[2](usigned long int) -----> tableau de ints
    .......................................
    matrice[nombre_de_lignes-1] -----> tableau de ints

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Je recommence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    En résumé: 
               matrice --->matrice[0](usigned long int) -----> tableau de ints 
    (usigned long int)     matrice[1](usigned long int) -----> tableau de ints 
                           matrice[2](usigned long int) -----> tableau de ints 
                           ....................................... 
                           matrice[nombre_de_lignes-1]  -----> tableau de ints

  8. #8
    Membre averti

    Inscrit en
    Juin 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 97
    Points : 307
    Points
    307
    "J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone."-Bjarne Stroustrup
    www.stroustrup.com

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

Discussions similaires

  1. [JTable] remplir avec une matrice
    Par ybdz dans le forum Composants
    Réponses: 3
    Dernier message: 08/12/2004, 21h03
  2. Recherche des coefficients d'une matrice 3x3
    Par colorid dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/11/2004, 16h52
  3. [Property] Comment déclarer une chaine par defaut ?
    Par Clorish dans le forum Composants VCL
    Réponses: 8
    Dernier message: 07/09/2004, 22h11
  4. déclarer une nouvelle version de Tomcat
    Par keopsk dans le forum JBuilder
    Réponses: 9
    Dernier message: 02/07/2004, 22h28
  5. Comment déclarer une DataSource dans server.xml
    Par guillaume06 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 16/06/2004, 14h27

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