Définir une Matrice en C

Résolu
Ashretor
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009
- 13 nov. 2009 à 10:25
Ashretor
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009
- 13 nov. 2009 à 15:29
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 ^^
A voir également:

13 réponses

cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
13 nov. 2009 à 10:55
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;
}
2
cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
13 nov. 2009 à 10:32
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}
 };
1
cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
13 nov. 2009 à 10:34
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}
 };
0
Ashretor
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

13 nov. 2009 à 10:38
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
13 nov. 2009 à 10:42
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");
  }
}
0
Ashretor
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

13 nov. 2009 à 10:48
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;
}
0
Ashretor
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

13 nov. 2009 à 11:01
ça marche, merci bien Cap'taine Pingu
0
yoatho
Messages postés
2
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

13 nov. 2009 à 11:05
je fait le même exercice et j'étais bloqué également.
Donc merci bien pour ton aide !!!
0
cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
13 nov. 2009 à 11:08
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".
0
Ashretor
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

13 nov. 2009 à 11:12
C'est fait, merci du conseil.
0
yoatho
Messages postés
2
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

13 nov. 2009 à 11:17
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
0
cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
13 nov. 2009 à 11:20
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
0
Ashretor
Messages postés
6
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
13 novembre 2009

13 nov. 2009 à 15:29
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.
0