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
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 …
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 ?
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
Le Tout est souvent plus grand que la somme de ses parties.
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.
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.
Le Tout est souvent plus grand que la somme de ses parties.