simple et sans pointeurs, transposer une matrice
Le
bpascal123
Bonjour-soir,
Le code ci-dessous pour transposer une matrice ne fonctionne pas bien
que la compilation a lieu voir le message d'erreur après le code ci-
dessous qui se produit lors de l'exécution. Je voudrais comprendre, ça
fait pas mal de temps que je cherche pourquoi mais je n'ai pas assez
de temps pour aller en profondeur.
#include <stdio.h>
int main(void)
{
int Mat[3][2] = {1, 4, 2, 5, 3, 6 } ;
int i, j ;
int lig = 3 ;
int col = 2 ;
int aide ;
printf("AFFICHAGE MATRICE AVANT TRANSPOSITION: ") ;
for ( i = 0 ; i < lig ; i++ )
{
for ( j = 0 ; j < col ; j++ )
printf("%d", Mat[i][j]) ;
printf("") ;
}
/*Permutation : */
for ( i = 0 ; i <= lig ; i++ )
for ( j = 0 ; j <= i ; j++ )
{
aide = Mat[i][j] ;
Mat[i][j] = Mat[j][i] ;
Mat[j][i] = aide ;
}
/*Fin permutation */
printf("AFFICHAGE MATRICE TRANSPOSEE: ") ;
for ( i = 0 ; i < col ; i++ )
{
for ( j = 0 ; j < lig ; j++ )
{
printf("%d", Mat[i][j]) ;
}
printf("") ;
}
printf("") ;
return 0 ;
}
c:>gcc monprog.c -o monprog.exe
fonctionne
c:>monprog
ne fonctionne pas!
Exiting due to signal SIGSEGV
Stack Fault at eip=00088c47
eax=00000063 ebx=00000001 ecx=00000256 edx=00000000 esi=00000054 =
edi=0
000ff3e
ebp=0008ff30 esp=000002da program=C:\CODE_C\MONPROG~3.EXE
cs: sel=01a7 base=029d0000 limit=0009ffff
ds: sel=01af base=029d0000 limit=0009ffff
es: sel=01af base=029d0000 limit=0009ffff
fs: sel=017f base=0000f9c0 limit=0000ffff
gs: sel=01bf base=00000000 limit=0010ffff
ss: sel=01af base=029d0000 limit=0009ffff
App stack: [0008ff3c..0000ff3c] Exceptn stack: [0000fe9c..0000df5c]
Call frame traceback EIPs:
0x00088c47
0x00001ac6
Merci
Pascal
Le code ci-dessous pour transposer une matrice ne fonctionne pas bien
que la compilation a lieu voir le message d'erreur après le code ci-
dessous qui se produit lors de l'exécution. Je voudrais comprendre, ça
fait pas mal de temps que je cherche pourquoi mais je n'ai pas assez
de temps pour aller en profondeur.
#include <stdio.h>
int main(void)
{
int Mat[3][2] = {1, 4, 2, 5, 3, 6 } ;
int i, j ;
int lig = 3 ;
int col = 2 ;
int aide ;
printf("AFFICHAGE MATRICE AVANT TRANSPOSITION: ") ;
for ( i = 0 ; i < lig ; i++ )
{
for ( j = 0 ; j < col ; j++ )
printf("%d", Mat[i][j]) ;
printf("") ;
}
/*Permutation : */
for ( i = 0 ; i <= lig ; i++ )
for ( j = 0 ; j <= i ; j++ )
{
aide = Mat[i][j] ;
Mat[i][j] = Mat[j][i] ;
Mat[j][i] = aide ;
}
/*Fin permutation */
printf("AFFICHAGE MATRICE TRANSPOSEE: ") ;
for ( i = 0 ; i < col ; i++ )
{
for ( j = 0 ; j < lig ; j++ )
{
printf("%d", Mat[i][j]) ;
}
printf("") ;
}
printf("") ;
return 0 ;
}
c:>gcc monprog.c -o monprog.exe
fonctionne
c:>monprog
ne fonctionne pas!
Exiting due to signal SIGSEGV
Stack Fault at eip=00088c47
eax=00000063 ebx=00000001 ecx=00000256 edx=00000000 esi=00000054 =
edi=0
000ff3e
ebp=0008ff30 esp=000002da program=C:\CODE_C\MONPROG~3.EXE
cs: sel=01a7 base=029d0000 limit=0009ffff
ds: sel=01af base=029d0000 limit=0009ffff
es: sel=01af base=029d0000 limit=0009ffff
fs: sel=017f base=0000f9c0 limit=0000ffff
gs: sel=01bf base=00000000 limit=0010ffff
ss: sel=01af base=029d0000 limit=0009ffff
App stack: [0008ff3c..0000ff3c] Exceptn stack: [0000fe9c..0000df5c]
Call frame traceback EIPs:
0x00088c47
0x00001ac6
Merci
Pascal

Poser une question


Tu débordes.
En plus, la transposée d'une 3x2 est une 2x3.
--
Etienne
^^^^^^^^
heu "<=" ???
Tu n'as pas l'impression que tu va taper dans Mat[3][machin] à un
moment, donc taper à l'exterieur?? Et boom segmentation violation!
Du reste je me demande comment tu peux représenter la transposée d'une
matrice 3x2 dans une matrice 3x2 aussi. Il te faut un autre tableau 2x3
si tu veux t'y retrouver.
sam.
Prend l'habitude d'écrire cela sous la forme
int Mat[3][2] = { {1, 4}, {2, 5}, {3, 6} } ;
D'abord c'est plus lisible (à mon sens) ; ensuite cela t'évitera des
avertissements inutiles; il viendra peut-être même un jour où ta version
ne sera plus acceptée. Mais surtout, si tu as besoin ultérieurement de
modifier la taille des lignes (passer de 2 à 4, par exemple), avec ta
méthode c'est une galère pas possible.
Antoine
que vous pensez être l'erreur mais ça ne convient pas mais alors pas
du tout:
printf("nAFFICHAGE MATRICE TRANSPOSEE: n") ;
for ( i = 0 ; i < col ; i++ )
{
for ( j = 0 ; j < lig ; j++ )
{
printf("%d", Mat[i][j]) ;
}
printf("n") ;
}
Voilà le résultat :
AFFICHAGE MATRICE AVANT TRANSPOSITION:
14
25
36
AFFICHAGE MATRICE TRANSPOSEE:
123
356
Ca ne devrait pas être :
AFFICHAGE MATRICE TRANSPOSEE:
123
456
ou bien j'ai oublié les cours sur les matrices, ça doit faire 4-5 ans
et pourtant je m'en sortais bien...j'avoue que ce n'était qu'une
introduction.
Merci,
Pascal
Ici : Mat[j][i].
--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/