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 en C


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut structure matrice en C
    Voici mon code (j'imagine qu'il doit y avoir pas mal d'erreur....)
    Je voulais juste savoir comment faire pour utiliser moncarre.m[i] (dans mes procédures) si je declare dans ma structure T_carre int* m au lieu de int m[100]. Car ca a l'air de bloquer sur ca...


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
     
     
    /*structures*/
    typedef struct
    {
    int* m; //matrice
    int taille;
    } T_carre;
     
     
    /*declarations fcts*/
    void affiche_carre (T_carre moncarre);
    void initialisation_carre (T_carre moncarre);
     
     
     
    /*********************MAIN************************/
    main()
    {
    int taille;
    T_carre zecarre;
     
    do {printf("Entre une taille impaire de carre magique : ");  //juska ce quecarre impair !!
        scanf("%d",&zecarre.taille);
       }
     
    while ((zecarre.taille%2)!=1);
     
    initialisation (zecarre);
    affiche_carre (zecarre);
     
    }
     
    /*---------------------------FONCT/PROC-------------------------*/
     
    void affiche_carre (T_carre moncarre)
    {
    int i;
     
    for (i=0;i<(moncarre.taille*moncarre.taille);i++)
       {printf("%d ",&moncarre.m[i]);
           if (i!=0 && (i+1)%3==0) {printf("\n");}
       }
    }
     
     
     
     
    T_carre initialisation_carre (T_carre moncarre)
    {
    int i;
     
    for (i=0;i<(moncarre.taille*moncarre.taille);i++)
       {moncarre.m[i]=0;}
     
    return moncarre;
    }
    merci de m'avoir lu

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je ne vois d'allocation nulle part...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut
    d'allocation de memoire?
    pour afficher le carre on m'avait dit que c'etait pas la peine...
    Je dois ajouter :
    zecarre.m=(int*)malloc((zecarre.taille*zecarre.taille)*sizeof(int));
    dans le main?

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par pedro7
    d'allocation de memoire?
    pour afficher le carre on m'avait dit que c'etait pas la peine...
    Je dois ajouter :
    zecarre.m=(int*)malloc((zecarre.taille*zecarre.taille)*sizeof(int));
    dans le main?
    Pas dans le main (qui est de mauvais prototype au passage), mais dans la fonction d'initialisation (le cast (int*) est inutile). Tu devrais passer ta matrice par pointeur dans tes fonction d'initialisation et d'affichage.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut
    ok merci pour les conseils
    je devrais pouvoir a peu pres y arriver (du moins je l'espere )

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Au passage, tu dois avoir une fonction matrice_detruire(T_carre*); qui liberera la mémoire.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut
    Ok, on peut pas liberer la memoire en faisant un free a la fin de la fonction intialisation? Je dois creer une nouvelle fonction?

    Et juste une question :
    J'ai vu que pour les pointeurs dans mes printf ou autres je pouvait ecrire :
    ("%d",*(moncarre.m+i))

    mais si par exemple je veux pointer sur la case 3 et lui entrer un nombre (4 par exemple comment dois je faire ??

    je peux pas ecrire :
    *(moncarre.m+i)=4; ?

  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par pedro7
    Ok, on peut pas liberer la memoire en faisant un free a la fin de la fonction intialisation? Je dois creer une nouvelle fonction?
    Je crois qu'il y en a un qui doit revoir son chapitre sur les allocations dynamiques :

    http://rperrot.developpez.com/articles/c/allocationC/



    J'ai vu que pour les pointeurs dans mes printf ou autres je pouvait ecrire :
    ("%d",*(moncarre.m+i))

    mais si par exemple je veux pointer sur la case 3 et lui entrer un nombre (4 par exemple comment dois je faire ??

    je peux pas ecrire :
    *(moncarre.m+i)=4; ?
    Et bien là, tu sais clairement que tu utilises un tableau, alors autant utiliser la notation tableau :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    moncarre->m[i] = 4;
     
    ou :
     
    moncarre.m[i] = 4;
    Suivant que moncarre est un pointeur sur T_carre ou un T_carre.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut
    ben c'est que je commence a peine et qu'on a jamais vu encore tout ca en detail... bref
    mais je vais m'ameliorer avec le temps

    En tout cas merci pour toutes vos reponses.

    bonne fin de week end

Discussions similaires

  1. Passer une structure matrice en parametre
    Par Fooshi dans le forum C
    Réponses: 3
    Dernier message: 14/07/2009, 06h45
  2. [Débutant] Initialisation de structure, matrice de structure
    Par huguette dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/03/2009, 19h35
  3. structure, matrice et pointeurs
    Par Margatthieu dans le forum C
    Réponses: 15
    Dernier message: 13/01/2008, 23h17
  4. Afficher les valeurs d'une structure dans une matrice
    Par yabbiyou dans le forum MATLAB
    Réponses: 1
    Dernier message: 22/02/2007, 12h26
  5. TAD matrice (structure + tableau dynamique)
    Par supermanu dans le forum C
    Réponses: 10
    Dernier message: 13/11/2004, 20h04

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