Besoin d'une astuce - C - Programmation
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.
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
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 .
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 ^^
Marsh Posté le 29-04-2005 à 15:56:52
ah sinon pour la construire, ta matrice, un double malloc et le tour est joué !
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 |
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.
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
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?
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é
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 |
Bon, je fais encore plus vite: M[i][j]=(i + j) % 26 + 'a'
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.
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
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.
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
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.
Marsh Posté le 30-04-2005 à 16:51:08
Ce forum est bien plus interessant et plus instructif que mon cours !
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...
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 !