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

Ashretor 6 Messages postés vendredi 13 novembre 2009Date d'inscription 13 novembre 2009 Dernière intervention - 13 nov. 2009 à 10:25 - Dernière réponse : Ashretor 6 Messages postés vendredi 13 novembre 2009Date d'inscription 13 novembre 2009 Dernière intervention
- 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 ^^
Afficher la suite 

13 réponses

Répondre au sujet
cptpingu 3784 Messages postés dimanche 12 décembre 2004Date d'inscription 18 avril 2018 Dernière intervention - 13 nov. 2009 à 10:32
+3
Utile
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}
 };
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cptpingu
cptpingu 3784 Messages postés dimanche 12 décembre 2004Date d'inscription 18 avril 2018 Dernière intervention - 13 nov. 2009 à 10:55
+1
Utile
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;
}
Commenter la réponse de cptpingu
cptpingu 3784 Messages postés dimanche 12 décembre 2004Date d'inscription 18 avril 2018 Dernière intervention - 13 nov. 2009 à 10:34
0
Utile
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}
 };
Commenter la réponse de cptpingu
Ashretor 6 Messages postés vendredi 13 novembre 2009Date d'inscription 13 novembre 2009 Dernière intervention - 13 nov. 2009 à 10:38
0
Utile
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...
Commenter la réponse de Ashretor
cptpingu 3784 Messages postés dimanche 12 décembre 2004Date d'inscription 18 avril 2018 Dernière intervention - 13 nov. 2009 à 10:42
0
Utile
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");
  }
}
Commenter la réponse de cptpingu
Ashretor 6 Messages postés vendredi 13 novembre 2009Date d'inscription 13 novembre 2009 Dernière intervention - 13 nov. 2009 à 10:48
0
Utile
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;
}
Commenter la réponse de Ashretor
Ashretor 6 Messages postés vendredi 13 novembre 2009Date d'inscription 13 novembre 2009 Dernière intervention - 13 nov. 2009 à 11:01
0
Utile
ça marche, merci bien Cap'taine Pingu
Commenter la réponse de Ashretor
yoatho 2 Messages postés vendredi 13 novembre 2009Date d'inscription 13 novembre 2009 Dernière intervention - 13 nov. 2009 à 11:05
0
Utile
je fait le même exercice et j'étais bloqué également.
Donc merci bien pour ton aide !!!
Commenter la réponse de yoatho
cptpingu 3784 Messages postés dimanche 12 décembre 2004Date d'inscription 18 avril 2018 Dernière intervention - 13 nov. 2009 à 11:08
0
Utile
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".
Commenter la réponse de cptpingu
Ashretor 6 Messages postés vendredi 13 novembre 2009Date d'inscription 13 novembre 2009 Dernière intervention - 13 nov. 2009 à 11:12
0
Utile
C'est fait, merci du conseil.
Commenter la réponse de Ashretor
yoatho 2 Messages postés vendredi 13 novembre 2009Date d'inscription 13 novembre 2009 Dernière intervention - 13 nov. 2009 à 11:17
0
Utile
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
Commenter la réponse de yoatho
cptpingu 3784 Messages postés dimanche 12 décembre 2004Date d'inscription 18 avril 2018 Dernière intervention - 13 nov. 2009 à 11:20
0
Utile
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
Commenter la réponse de cptpingu
Ashretor 6 Messages postés vendredi 13 novembre 2009Date d'inscription 13 novembre 2009 Dernière intervention - 13 nov. 2009 à 15:29
0
Utile
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.
Commenter la réponse de Ashretor

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.