Besoin d'une astuce

Besoin d'une astuce - C - Programmation

Marsh Posté le 29-04-2005 à 14:32:11    

C'est vrai que j'ai quand meme du mal.lol enfin bon 4 td c'est un peu chaud .
J'aimerai également fabriquer une matrice  
 
 a b c d....z
 b c d .....a
 c
 .
 .
 z          a
 
Si quelqu'un à une idée ?
Je pensais utiliser un pointeur de pointeur mais comme je vous le disais c'est encor tres flou dans ma tete !

Reply

Marsh Posté le 29-04-2005 à 14:32:11   

Reply

Marsh Posté le 29-04-2005 à 15:03:51    

Ca depend un peu de ce que tu compte faire avec ta matrice. Si tu connais par avance la taille de ta matrice tu peux eviter le pointeur de pointeur en declarant un tableau (par exemple char matrice[26][26] pour celle que tu montre sur ton post). Tu peux alors te deplacer dans ta matrice en utilisant matrice[i][j].
Si tu ne connais pas la taille de ta matrice a la base tu es oblige de passer par un pointeur de pointeur du type char **matrice et apres tu alloues la taille avec des malloc lorsque tu connais les dimensions. Si en plus tu veux faire grossir ta matrice au fur et a mesure dans ton programme il va falloir que tu fasses des listes chainees.

Reply

Marsh Posté le 29-04-2005 à 15:37:25    

pas de liste chainee mais une bibliotheque pour gere un objet matrice qui s'occupe des reallocation d'une zone (MxN) et de l'indexation (ligne,colonne), mais vu son niveau ce serais stupide
utilises char matrice[26][26] et te fais pas chier avec des pointeur de pointeur qui ne permettent surement pas d'allouer une matrice

Reply

Marsh Posté le 29-04-2005 à 15:40:16    

non non  je connais sa taille c en effet 26,26 mais c pour la construire que je cherche une astuce plutot que de  taper a la bourrain 26*26 cases ! lol
C a d trouvé une relation entre matrice[i][j] et les lettres de l'alphabet .

Reply

Marsh Posté le 29-04-2005 à 15:50:57    

considere ta matrice M[i,j] et le tableau a de taille 26 sachant que a[0] = a, a[1] = b .... a[25] = z et est donc statique  
 
dans ta matrice en vraiment pseudo code, je fais vite ^^
 
pour i de 0 à 25 :  
  if (i+j)<26 then M[i,j] = a[i+j]
 
  if (i+j)>=26 then M[i,j] = a[(i+j)-26)]
 
voilà je crois que comme ça c bon ^^


Message édité par zombinette le 29-04-2005 à 19:56:57
Reply

Marsh Posté le 29-04-2005 à 15:56:52    

ah sinon pour la construire, ta matrice, un double malloc et le tour est joué !

Reply

Marsh Posté le 29-04-2005 à 16:09:03    

d'jo a écrit :

non non  je connais sa taille c en effet 26,26 mais c pour la construire que je cherche une astuce plutot que de  taper a la bourrain 26*26 cases ! lol
C a d trouvé une relation entre matrice[i][j] et les lettres de l'alphabet .


 
Relation ?
 
Tu as 26 lettres dans l'alphabet.
Tu dois faire un décalage de 1 lettre par ligne jusqu'à faire tous les décalages à gauche possibles => 26 décalages possibles.
 
Donc : ta matrice doit faire 26 x 26 en taille, et elle ne changera pas de taille tant que tu resteras sur l'alphabet français.
 
A partir de là, pourquoi tu trouves ça bourrin de taper "char matrice[26][26];", mais que tu cherches une "astuce" quand même ?
Ou mieux encore, tu tapes "char matrice[26*26]" et tu n'utilises ainsi qu'un tableau à 1 dimension.
 
Je ne te comprends pas.
 
Sinon pour la remplir, je verrais bien l'utilisation du modulo 26 sur 'a'.
 
EDIT : j'avais mis le code, puis j'ai réalisé que c'était dans le cadre d'un TP... donc la solution tu dois la chercher seul.


Message édité par Elmoricq le 29-04-2005 à 16:11:22
Reply

Marsh Posté le 29-04-2005 à 16:27:46    

ouai merci je c , j aime bien trouver seul mais je rechigne pas sur les indications ;)

Reply

Marsh Posté le 29-04-2005 à 19:12:52    

tu n as pas reussi a transformer mes indications en code?
c'est pas très compliqué une fois les relations trouvées, non?

Reply

Marsh Posté le 29-04-2005 à 19:41:31    

non non c bon merci beaucoup g pu avancé mais j 'avou je reste bouche bée devant ta rapidité

Reply

Marsh Posté le 29-04-2005 à 19:41:31   

Reply

Marsh Posté le 30-04-2005 à 12:10:47    

zombinette a écrit :

considere ta matrice M[i,j] et le tableau a de taille 26 sachant que a[0] = a, a[1] = b .... a[25] = z et est donc statique  
 
dans ta matrice en vraiment pseudo code, je fais vite ^^
 
pour i de 0 à 25 :  
  if (i+j)<26 then M[i,j] = a[i+j]
 
  if (i+j)>=26 then M[i,j] = a[(i+j)-26)]
 
voilà je crois que comme ça c bon ^^


 
Bon, je fais encore plus vite: M[i][j]=(i + j) % 26 + 'a'  :D


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 30-04-2005 à 12:27:33    

C'est ce que j'avais marqué avant mon edit, mais au final je voulais pas lui donner la solution de son TD. ;)


Message édité par Elmoricq le 30-04-2005 à 12:27:46
Reply

Marsh Posté le 30-04-2005 à 14:33:45    

merci beaucoup j'avais trouvé aussi mais en beaucoup plus compliqué j'avoue que je ne comprend pas ton expression ??
le % et le + 'a' ?? g encore jamais vu ca  mais bravo


Message édité par d'jo le 30-04-2005 à 14:34:03
Reply

Marsh Posté le 30-04-2005 à 15:22:33    

Le % te donne le reste dans une division : 5%2 te renvoie 1. Cela permet de regrouper en une seule expression les deux cas précédents i+j<26 et i+j>=26.
'a' est le code ASCII de a : il vaut 97 en décimal. En effet, il faut savoir que dans ton tableau tu ne stockes pas les caractères, mais leur code ASCII.
edit : comme cela, tu n'as plus besoin de ton tableau a qui te donnait la lettre de l'alphabet correspondant à l'indice du tableau.


Message édité par jercmoi le 30-04-2005 à 15:24:36
Reply

Marsh Posté le 30-04-2005 à 16:35:43    

'a' est une constante (type int) dont la valeur depend du jeu de caractere qui n'est pas forcement l'ascii

Reply

Marsh Posté le 30-04-2005 à 16:42:31    

jercmoi a écrit :

Le % te donne le reste dans une division : 5%2 te renvoie 1. Cela permet de regrouper en une seule expression les deux cas précédents i+j<26 et i+j>=26.


 
C'est ce qu'on appelle courament le modulo ;)
 
Très pratique pour faire cycler n'importe quoi comme, ici, des lettres.

Reply

Marsh Posté le 30-04-2005 à 16:50:21    

ok merci je comprend mieux

Reply

Marsh Posté le 30-04-2005 à 16:51:08    

Ce forum est bien plus interessant et plus instructif que mon cours !
;)


Message édité par d'jo le 30-04-2005 à 16:51:24
Reply

Marsh Posté le 30-04-2005 à 17:38:55    

d'jo a écrit :

Ce forum est bien plus interessant et plus instructif que mon cours !
;)


Normal, les gens qui contribuent sont des spécialistes, des passionés et souvent des professionels. C'est rarement le cas d'un prof...


Message édité par Emmanuel Delahaye le 30-04-2005 à 17:39:19

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed