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

69Vincent 2 Messages postés jeudi 19 novembre 2009Date d'inscription 19 novembre 2009 Dernière intervention - 19 nov. 2009 à 18:07 - Dernière réponse : 69Vincent 2 Messages postés jeudi 19 novembre 2009Date d'inscription 19 novembre 2009 Dernière intervention
- 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
cs_juju12 968 Messages postés samedi 3 avril 2004Date d'inscription 4 mars 2010 Dernière intervention - 19 nov. 2009 à 19:50
3
Merci
dans la fonction Transitive :
for(i=0;i<N;j++) => tu voulais sûrement mettre i++

Merci cs_juju12 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

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