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

Messages postés
2
Date d'inscription
jeudi 19 novembre 2009
Dernière intervention
19 novembre 2009
- - Dernière réponse : 69Vincent
Messages postés
2
Date d'inscription
jeudi 19 novembre 2009
Dernière intervention
19 novembre 2009
- 19 nov. 2009 à 22:40
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.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
968
Date d'inscription
samedi 3 avril 2004
Dernière intervention
4 mars 2010
3
Merci
dans la fonction Transitive :
for(i=0;i<N;j++) => tu voulais sûrement mettre i++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_juju12
Messages postés
2
Date d'inscription
jeudi 19 novembre 2009
Dernière intervention
19 novembre 2009
0
Merci
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 =)
Commenter la réponse de 69Vincent

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.