Une matrice est-elle transitive ? [Résolu]

Signaler
Messages postés
2
Date d'inscription
jeudi 19 novembre 2009
Statut
Membre
Dernière intervention
19 novembre 2009
-
Messages postés
2
Date d'inscription
jeudi 19 novembre 2009
Statut
Membre
Dernière intervention
19 novembre 2009
-
Bonjour.
Tout d'abord enchanté d'être sur le forum!
Je suis un étudiant à l'IUT A de Lyon et j'ai quelques petits problème en C.
Voilà le problème : On doit créer un programme permettant le remplissage d'une matrice et d'afficher si oui ou non elle est transitive, comme celle là :
0 0 0
1 0 0
1 1 0
Une matrice simple et transitive.
Je crée donc mon programme, avec un peu de mal étant donné que je n'arrive pas très bien à prouver la transitivité en mathématiques ... alors faire un programme dessus devient vite douloureux pour mon cerveau.
Voici donc la bête :
#include <stdio.h>
#define N 3


void remplissage(int *mat) {
int i,j;
printf("Remplissage de la matrice :\n");
for (i=0;i<N;i++) {
printf("Entrez les valeurs de la ligne %d\n",(i+1));
for (j=0;j<N;j++) {
scanf("%d",(mat+i*N+j));
}
}
}

void affichage(int *mat) {
int i,j;
for (i=0;i<N;i++) {
for (j=0;j<N;j++) {
printf("%d ",*(mat+i*N+j));
}
printf("\n");
}
}

int Transitive(int *mat) {
int i,j,k;
for (j=0;j<N;j++) {
for(i=0;i<N;j++) {
if (*(mat+i*N+j)==1) {
for (k=0;k<N;k++) {
if (*(mat+k*N+i)==1) {
if (*(mat+k*N+j)==0) {
return 1;
}
}
}
}
}
}
return 0;
}


int main() {
int mat[N][N];
remplissage(&mat[0][0]);
affichage(&mat[0][0]);
if (Transitive(&mat[0][0])==1) {
printf("Cette matrice n'est pas transitive\n");
}
else printf("Cette matrice est transitive\n");
return 0;
}


Oui je sais, il y a beaucoup de "for" et "if" les uns dans les autres, mais je n'ai pas trouvé d'autre solution ...

J'ai ici 2 problèmes que je n'arrive pas à résoudre :
[*] Tout d'abord, le programme me dit tout le temps que ma matrice n'est pas transitive. C'est assez gênant, étant sur que celle que je propose l'est.
[*] Deuxième problème que j'ai remarqué, lorsque je ne mets que des 0 dans ma matrice, la fonction "void transitive" fait planter le programme. C'est assez gênant, surtout que je ne vois pas pourquoi, normalement elle devrait retourner '0' et donc provoquer l'affichage de "Cette matrice n'est pas transitive".

J'espère avoir des réponses à mes questions !
J'espère aussi avoir été clair.

2 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
dans la fonction Transitive :
for(i=0;i<N;j++) => tu voulais sûrement mettre i++
Messages postés
2
Date d'inscription
jeudi 19 novembre 2009
Statut
Membre
Dernière intervention
19 novembre 2009

Arg ...
merci énormément ... j'ai même pas réussi à voir ça :s
Merci beaucoup, le programme marche très bien !
Bonne soirée =)