Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Transposée de matrice algo? [ Algorithme / Maths ] (YOOP)

mercredi 16 juillet 2008 à 09:59:28 | Transposée de matrice algo?

YOOP

Bonjour,

Le contexte :
-------------
Je travaille sur un programme embarqué en C sur PIC (µC). (Compilateur MCC18 du constructeur)
Je suis soucieux de la rapidité de traitement de l'opération ainsi que d'éviter un stack overflow.... La taille de la matrice étant 6*10...

Les critères :
-------------
Un algorithme qui réalise la transposée d'une matrice... Simple sauf si :
Je cherche a le faire (sans savoir si c'est possible) sur un même espace mémoire... c'est a dire sur une seul matrice! Donc, pas de :
for(i)
for(j)
matrice1[j][i]=matrice_source[i][j].

Avez-vous déjà vu,entendu parler de ce genre d'algo?

D'avance je vous remercie,

YOOP




mercredi 16 juillet 2008 à 11:50:06 | Re : Transposée de matrice algo?

laurent1024

Bonjour vu que ta matrice n'est pas carré ca risque d'être du de faire ça sur le même espace mémoire.
Sinon tu peux essaye de faire un
for (i=0; ...
    for j= i + 1
      a = matrice[i][j]
      b = matrice[j][i]
      matrice[i][j] = b
      matrice[j][i] = a

Cdt

mercredi 16 juillet 2008 à 13:28:49 | Re : Transposée de matrice algo?

YOOP

Re,

En fait j'y avait pensé, mais cela ne fonctionne pas ...
si on a :
[1    2   3   4]
[11 12 13 14]
[21 22 23 24]
[31 32 33 34]
[41 42 43 44]
[51 52 53 54]

cela devient:
[1 11 21 31 2 12]
...

et non :
[1 11 21 31 41 51]
....

Merci quand même.

Si il a d'autre solution je reste preneur!

YOOP.

mercredi 16 juillet 2008 à 13:33:45 | Re : Transposée de matrice algo?

luhtor

La suggestion de Laurent est correct. Ce qui ne l'est pas, c'est ton code. Faut pas travailler avec un tableau 2D, mais 1D et calculer toi meme la position des coefficients. En faisant la transposée, tu changes la forme du tableau, or c'est impossible de faire ca à la compilation.

mercredi 16 juillet 2008 à 14:10:01 | Re : Transposée de matrice algo?

YOOP

Bonjour Luhtor,

A moins que je me sois mal exprimé ou que je me suis fait mal comprendre voir que je n'ai pas donné suffisamment de précision, c'est possible!
typedef union
{
unsigned char tab1[6][10];
unsigned char tab1[10][6];
}==>C'est deux tableau occupent le même espace mémoire et ont la même taille en mémoire...

Ceci pour l'acces au même espace mémoire, mais de façon différente.

Sinon, pour réaliser la transposée, je l'aurait fait avec des pointeurs.. sur qui mon compilateur ne fait pas de contrôle...

Voici le code que j'ai testé : (peut-être m'y suis-je mal pris?)



void test(void)
{
/*Pour inverser matrice non carré sur un mm espace mémoire PAS OK*/
    signed char a,b;
    int i,j;
    static signed char matrice[6][4]=
        {
            {1,2,3,4},
            {11,12,13,14},
            {21,22,23,24},
            {31,32,33,34},
            {41,42,43,44},
            {51,52,53,54}       
        };       
for (i=0; i<6;i++)
    for(j= i + 1;j<4;j++)
    {
      a = matrice[i][j];
      b = matrice[j][i];
      matrice[i][j] = b;
      matrice[j][i] = a;
    }
    a=0; 
}



mercredi 16 juillet 2008 à 14:18:51 | Re : Transposée de matrice algo?

laurent1024

Le principe que je t'ai donnée ne fonctionnait que dans le cas de matrice carré.


mercredi 16 juillet 2008 à 14:23:02 | Re : Transposée de matrice algo?

YOOP

En effet,

Merci quand même

D'autres proposition?


mercredi 16 juillet 2008 à 21:56:58 | Re : Transposée de matrice algo?

luhtor

Ah oui autant pour moi, je n'avais pas penser au union pour ca.

J'ai réfléchi à ton pb un petit quart d'heure, et c'est finalement loin d'etre évident. La solution existe surement. Qd on regarde ca sur papier on voit des enchainements de permutations mais difficile d'étendre le truc à un cas général.



Cette discussion est classé dans : algo, for, matrice, transposée


Répondre à ce message

Sujets en rapport avec ce message

inverser une matrice non carrée [ par civata ] est ce que quelqu'un peut me dire comment on inverse une matrice non carrée ?ou plutot où je pourrais trouver un algo qui le fait, pour les matrices c prob d'algorithme dans matrice [ par gregorian ] Bonjour, Voila je dois écrire un prg en C qui joue avec des matrices booléennes.J'ai déjà fait la partie addition, multiplication, je suis entrain d'i compilation mai au lancement "erreur la memoire ne peu pas pas etre read" [ par touny23 ] je maitrise pas tro le C.mai comme j ai un projet a faire dessus pour la rentré , je sui obligé de m y mettre .j arrive a compiler sous dev-cpp mai lo compilation mai erreur a l execution [ par touny23 ] bon j ai fai une amélioration de mon programme . je galere un peu avec le C mai bon  c est un projet , soit disan la base de la methode num.(je croi q URGENT!!!!! SVP moindres carrés [ par CeNedra83 ] salut, je suis en stage et je code en C++. j'ai trouvé ce code qui fait exactement la fonction que je veux, je l'ai donc transformé en C++. Sub Moin probleme dans l'algorithme de jacobi [ par mino1001 ] voila mon programme ,et je ne c pas pourquoi il ne calcule pas les solutions du systeme Ax=b telles que:        5   -1 -1 -1                  -4       Aide sur la construction d'une fonction [ par iamor ] Bonsoir, je souhaite améliorer un programme que j'ai codé pour qu'il soit plus clean, mais pour se faire j'aurai besoin d'avoir une petite aide sur la Besoin d'aide en C - Fonction [ par bugs2600 ] Voici mon programme quelqu'un pourrait-il m'aider je dois faire une fonction et je ne vois pas comment la faire le non de ma fonction doit etre PRODMA quadrillage matrices [ par Gaston0510 ] Notre prof d cours nous a demand¨¦ de saisir et afficher des matrices .Les matrices affich¨¦ doivent etr entour¨¦ avec un double qudrillage on utilisa exercice matrice [ par sporta01 ] Salut à toutes et à tous ,j'ai pas bien compris un exercice de matrice en C,l'exercice consite à changer la forme d'une matrice cad les lignes horizon


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.