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 :

Gestion de matrices


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Par défaut Gestion de matrices
    Bonjour à tous!!
    Tout d'abord je ne sais plus comment on fait pour allouer de la memoire à une matrice.
    Ensuite lié à ce probleme :
    Je veux que l'utilisateur saisit un nbre inconnu de valeur(coefficient), et je voudrais les mettre dans une matrice!!
    Comment faire!!
    Merci pour votre aide!!

  2. #2
    Membre confirmé Avatar de Topeur
    Profil pro
    Inscrit en
    Février 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 91
    Par défaut
    Bonjour,

    Tu dois sans doute déjà savoir qu'une matrice est un énorme tableau.
    il y a 2 façons de le représenter, soit un tableau de n lignes ou chaque ligne contient un tableau de m colonnes, soit un tableau de taille ligne*colonne
    Tout dépend avec quoi tu visualise mieux les choses

    Sinon pour allouer de la mémoire, soit statique, soit dynamique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char tab[ ligne * colonne ]
     
    char *tab;
    tab = malloc(ligne * colonne * sizeof(char));
    NB : sizeof char retourne 1 donc pas indispensable mais plus clair


    Sinon ton programme doit avoir la forme suivante :
    - Demander le nombre de lignes, puis de colonnes a l'utilisateur (pour connaitre les conditions de fin de tes boucles)
    - Ensuite tu alloue dynamiquement ton ou tes tableaux
    - Tu demande a l'utilisateur des valeurs tant que tu n'as pas obtenu ligne * colonne valeurs

    Bon courage

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 60
    Par défaut
    tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #define IMAX 100
    #define JMAX 100
     
    int matrice[IMAX][JMAX] //déclaration statique de la matrice
    sinon si tu veux utiliser une allocation dynamique, il faut que tu utilises un double pointeurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int **matrice;
    matrice=(int**)malloc(sizeof(int*)*IMAX);
    for(i=0;i<IMAX;i++)
    {
      matrice[i]=(int*)malloc(sizeof(int)*JMAX);
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Par défaut
    merci beaucoup pour vos reponse ce qui ma permis de revoir allocation memoire d'une matrice!!
    Mais j'ai toujours un probleme. Car je veux saisir un nombre inconnu de valeur que je met dans la matrice.
    Voici mon code pour que vous me compreniez :

    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
     
    #include <stdio.h> 
    #include <stdlib.h>
    #define k 10 
    #define IMAX 5
    #define JMAX 3
    int tab [k][k]; 
    int matrice[IMAX][JMAX];
    void saisir(int a,int b) 
    { 
         int degre,val,i,j;
         int ** matrice;
    matrice=(int**)malloc(sizeof(int*)*IMAX); 
    for(i=0;i<IMAX;i++)
    {
    matrice[i]=(int*)malloc(sizeof(int)*JMAX);
    }
    printf ("Veuillez saisir le degré du polynome (nbre compris entre 0 et 5!!:"); 
    scanf("%d",&degre); 
    getchar(); 
    printf ("Veuillez choisir la valeur :"); 
    scanf("%d",&val); 
    getchar(); 
    if (degre>5) 
    { 
    printf ("IMPOSSIBLE"); 
    } 
    else 
    { 
         degre=degre+1;
    for (i=0;i<degre;i++) 
    { 
     
    printf ("Veuillez saisir les coeff de votre polynome!"); 
    scanf("%d",matrice[IMAX][JMAX]+i); 
    getchar(); 
    } 
    } 
     
    for (i=0;i<degre;i++)
    { 
        //for(j=0;j<degre;j++)
        //{
    printf("%d",matrice[IMAX][JMAX]); 
     
    getchar();
    }
    matrice[0][1]=5;
    //printf("%d",tableau[0][1]);
    getchar();
    } 
     
     
     
     
    int main() 
    {saisir(3,3);}

    Merci encore

  5. #5
    Membre confirmé Avatar de Topeur
    Profil pro
    Inscrit en
    Février 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 91
    Par défaut
    alors quelques remarques comme ca assez rapide, juste en lisant ton code

    Deja, le prototype de ta fonction utilise a et b, mais dans ton code, tu ne les utilises pas, est ce normal ?

    ensuite tu a melangé deux petites choses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int matrice[IMAX][JMAX];
     
    int ** matrice;
    matrice=(int**)malloc(sizeof(int*)*IMAX);
    ceci doit te provoquer forcement des erreurs
    en variables globales, tu a declaré un tableau portant le nom matrice avec sa taille, puis dans ta fonction, tu declare un nouveau pointeur portant le meme nom que le tableau (ce qui ne veut pas dire que ce pointeur pointe sur ce tableau) et tu alloue de la memoire pour ce tableau.

    De plus, tu a choisi de faire un tableau de tableau donc tu va devoir faire une boucle dans laquelle pour chaque case de tab[i], tu fais un malloc de tab[j] de manier a avoir un tab[i][j] correct.

    Enfin petit warning : utilisation du scanf (beaucoup te diront que c'est assez dangereux d'utiliser cette fonction, mais pour ton cas, cela peut peut etre suffire)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Par défaut
    alors je pense que g un peu prés compris mais pour mon scanf et l'aafichage je ne vois pas du tout!!!
    en fait ce que j'essai de programmer c la methode d'Hörner!!!
    je sais comment faire mais je n'arrive pas à programmer!!
    revoici mon code et dite moi si j'ai bien compris ce que vous m'avez expliqué :



    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
    #include <stdio.h> 
    #include <stdlib.h>
    #define k 10 
    #define IMAX 5
    #define JMAX 3
    int tab [k][k]; 
    void saisir(int a,int b) 
    { 
      int degre,val,i,j;
      int ** matrice;
      matrice=(int**)malloc(sizeof(int*)*IMAX); 
      for(i=0;i<IMAX;i++)
      {
         matrice[i]=(int*)malloc(sizeof(int)*JMAX);
      }
     
      printf ("Veuillez saisir le degré du polynome (nbre compris entre 0 et 5!!:"); 
      scanf("%d",&degre); 
      getchar(); 
      printf ("Veuillez choisir la valeur :"); 
      scanf("%d",&val); 
      getchar(); 
      if (degre>5) 
      { 
         printf ("IMPOSSIBLE"); 
      } 
      else 
      { 
         degre=degre+1;
         for (i=0;i<degre;i++) 
         { 
            printf ("Veuillez saisir les coeff de votre polynome!"); 
            scanf("%d",matrice);  
            getchar(); 
         } 
      } 
     
      for (i=0;i<degre;i++)
      { 
         for(j=0;j<3;j++)
         {
     
            printf("%d",matrice[i][j]); 
     
            getchar();
         }
        matrice[0][1]=5;
        //printf("%d",tableau[0][1]);
        getchar();
      } 
    }
     
     
     
     
    int main() 
    {
      saisir(3,3);
    }
    encore merci pour votre aide

  7. #7
    Membre confirmé Avatar de Topeur
    Profil pro
    Inscrit en
    Février 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 91
    Par défaut
    Ca me semble beaucoup mieux oui, apres je ne suis pas suffisament expert pour dire Ici y'a une erreur

    Libre a toi désormais d'exécuter ce code et je l'espère pas, mais c'est rarement le cas, de revenir nous voir pour demander pourquoi ca ne marche pas

    Bon courage

Discussions similaires

  1. Introduction à la gestion des matrices
    Par Jerome Briot dans le forum MATLAB
    Réponses: 5
    Dernier message: 07/01/2014, 09h55
  2. gestion de matrice d'objet
    Par DrDam dans le forum C++
    Réponses: 2
    Dernier message: 02/06/2008, 19h15
  3. A propos du tutoriel sur la gestion des matrices
    Par Pierre845 dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/04/2008, 13h32
  4. Gestion de matrice
    Par bzd dans le forum C
    Réponses: 4
    Dernier message: 12/08/2002, 18h19

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