Partage
  • Partager sur Facebook
  • Partager sur Twitter

Structure Matrice: tableau de taille variable

Sujet résolu
    26 septembre 2021 à 12:23:39

    Bonjour,

    J'ai découvert les structures hier, et j'ai voulu créer un programme qui propose à l'utilisateur de calculer la somme et/ou la multiplication de deux matrices (lorsque c'est possible !).

    Pour cela j'ai créé la structure suivante:

    1.   struct Matrice

    2.  {

    3.            int ligne;

    4.            int colonne;

    5.            float tab [ligne] [colonne];

    6.  };

    Le compilateur me dit qu'à la ligne 5, "ligne" et "colonne" ne sont pas déclarés. Pourtant, je voudrais créer un tableau à 2 dimensions dont la taille est choisie par l'utilisateur.

    Pensez-vous que cela soit possible ?

    Cordialement,

    Marc CHAMBRÉ

    -
    Edité par MarcChambré 26 septembre 2021 à 12:24:44

    • Partager sur Facebook
    • Partager sur Twitter
      26 septembre 2021 à 12:38:18

      Bonjour,

      réponse courte : oui.

      Comme tu viens d'apprendre ce qu'est une structure en C, je suppose que tu n'as pas encore rencontré le chapitre concernant les allocations dynamiques ?
      Pour faire ce que tu veux faire il faudra en passer par là avant.

      Sinon l'origine du problème est simple et double :

      • quand tu définis une structure, il faut que tous les champs aient une taille connue au moment de la compilation ⇒ donc à moins d'avoir des constantes en nombre de ligne et colonne, cela ne peut pas fonctionner ;
      • les identifiants ligne et colonne n'existent pas au moment où tu les utilises dans la définition de la structure …
      • Partager sur Facebook
      • Partager sur Twitter
        26 septembre 2021 à 12:57:08

        Merci beaucoup !

        Effectivement, on a abordé rapidement l'allocation dynamique en fin de cours, mais je ne pensais pas que ça servait à ça.

        ça me fera un double exercice, c'est très bien !

        De ce que j'ai compris, on alloue de la mémoire au début, et on la restiture quand on en a plus besoin ?

        Alors je dois allouer par exemple 10 lignes et 10 colonnes (ce qui est déjà pas mal), et je restitue ce qui ne me sert pas en fonction de la dimension choisie par l'utilisateur ?

        Merci pour ton aide,

        Marc

        • Partager sur Facebook
        • Partager sur Twitter
          26 septembre 2021 à 19:33:23

          Pour faire des sommes et des produits de matrices, on n'a pas vraiment besoin de structures.
          On définit un tableau dynamique comme suit:
          typedef double type;  // pour définir le type d'éléments.pas essentiel
          type **tableau = malloc(lignes * sizeof(type *));
          for(int i=0; i < lignes; i++) {
              tableau[i] = malloc(colonnes * sizeof(type));
          }
          et tu accèdes au tableau comme suit:
          tableau[i][j] = valeur;   // i est la ligne, j est la colonne
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            26 septembre 2021 à 20:48:16

            Je ne peux que te conseiller de commencer par autre chose que des matrice … pourquoi ne pas implémenter un string buffer, c'est plus simple pour se faire les dents sur l'allocation dynamique.
            • Partager sur Facebook
            • Partager sur Twitter

            Structure Matrice: tableau de taille variable

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown