Définir une Matrice en C [Résolu]

Signaler
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009
-
Ashretor
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009
-
Bonjour, je travaille sur DevC++, en C:
Je cherche à créer une matrice contenant et affichant:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

J'ai déjà créé le type de matrice, la seule chose qui me manque c'est comment définir les nombres ci-dessus dans ma matrice.
J'ai fait:
Matrice mat={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

(Matrice est mon type, comme int, char ou float)

Cette solution fonctionne-t-elle ? J'en ai pas l'impression ^^

13 réponses

Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
Oui, ça fonctionne. Il ne te reste qu'à indiquer le type et les dimensions:
int mat[4][4] = 
 {
   {1,2,3,4},
   {5,6,7,8},
   {9,10,11,12},
   {13,14,15,16}
 };
Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
Ceci fonctionne chez moi:
#include <stdio.h>

#define maxM 4
typedef float Matrice[maxM][maxM];

void Affichermat(Matrice val)
{
  int x;
  int y;
  for(x = 0; x < maxM; ++x)
  {
    for(y = 0; y < maxM; ++y)
      printf("%f ", val[x][y]);
    printf("\n");
  }
}

int main(void)
{
  Matrice mat =
    {
      {1,2,3,4},
      {5,6,7,8},
      {9,10,11,12},
      {13,14,15,16}
    };

  Affichermat(mat);
  return 0;
}
Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
A noter que ceci fonctionnerai:
int mat[][4] = 
 {
   {1,2,3,4},
   {5,6,7,8},
   {9,10,11,12},
   {13,14,15,16}
 };

Mais pas ceci:
int mat[][] = 
 {
   {1,2,3,4},
   {5,6,7,8},
   {9,10,11,12},
   {13,14,15,16}
 };
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

Voila ce que j'ai déjà:

#define maxM 4
typedef float Matrice[maxM][maxM];

Matrice mat= {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

Et maintenant, je cherche une solution pour l'afficher.
Je pensais à quelque chose dans le style:

void Affichermat(Matrice val)
{
int x;
for(x =0;x<maxM;x++) printf("%d ", val[x]);
}

C'est ce que j'utilise pour afficher un tableau, et je ne vois pas comment modifier cette solution pour l'adapter à une matrice...
Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
Double boucle:
void Affichermat(Matrice val)
{
  int x;
  int y;
  for(x = 0; x < maxM; ++x)
  {
    for(y = 0; y < maxM; ++y)
      printf("%d ", val[x][y]);
    printf("\n");
  }
}
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

J'ai testé mais cela m'affiche:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

J'ai mis ma fonction au dessus du main, et dans le main j'ai:

int main(int argc, char *argv[])
{
Matrice mat={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

Affichermat(mat);

system("PAUSE");
return 0;
}
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

ça marche, merci bien Cap'taine Pingu
Messages postés
2
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

je fait le même exercice et j'étais bloqué également.
Donc merci bien pour ton aide !!!
Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
Pensez à valider la réponse, pour permettre à quelqu'un qui recherche quelque chose de similaire de pouvoir se dire: "Ah ok, il y a une réponse validée, je suis sur de trouver une solution".
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

C'est fait, merci du conseil.
Messages postés
2
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

J'ai trouver pourquoi je n'avais que des "0" !!!
En fait au lieu de mettre :
for(y = 0; y < maxM; y++) printf("%f ", val[x][y]);
je mettais :
for(y = 0; y < maxM; y++) printf("%d ", val[x][y]);

Une erreur toute bête qui fait perdre énormément de temps!!!

Mais bon c'est finit !!!

Merci encore
Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
Si tu compiles avec les bon flags, ce genre d'erreur t'es indiqué.
Par exemple moi en tapant:
gcc -W -Wall -Wextra -ansi -pedantic mat.c -o mat

J'ai:
mat.c: In function &#8216;Affichermat&#8217;:
mat.c:13: attention : format &#8216;%d&#8217; expects type &#8216;int&#8217;, but argument 2 has type &#8216;double&#8217;

PS: Compilateur gcc sous Linux, doit avoir un équivalent sous Windows
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

Mais avec DevC++, le logiciel a compilé le programme sans détecter d'erreur, puis a exécuté, je verrais dans la soirée si il y a moyen de détecter ce genre d'erreurs avec ce logiciel.
Merci pour ton aide.