GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 14 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Etienne Rousee
Le #21523702
for ( i = 0 ; i <= lig ; i++ )
for ( j = 0 ; j <= i ; j++ )



Tu débordes.

En plus, la transposée d'une 3x2 est une 2x3.

--

Etienne
Samuel DEVULDER
Le #21523922
a écrit :

for ( i = 0 ; i <= lig ; i++ )


^^^^^^^^

heu "<=" ???

for ( j = 0 ; j <= i ; j++ )
{
aide = Mat[i][j] ;



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.
Antoine Leca
Le #21524212
écrivit :
int Mat[3][2] = {1, 4, 2, 5, 3, 6 } ;



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
bpascal123
Le #21525481
J'ai oublié de dire que j'ai essayé le code ci-dessous qui reprend ce
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
Manuel Pégourié-Gonnard
Le #21525771
scripsit :

printf("nAFFICHAGE MATRICE TRANSPOSEE: n") ;
for ( i = 0 ; i < col ; i++ )
{
for ( j = 0 ; j < lig ; j++ )
{
printf("%d", Mat[i][j]) ;


Ici : Mat[j][i].

--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Publicité
Suivre les réponses
Poster une réponse
Anonyme