[Transfer de donnees d´un tableau bidimensionel vers unidimensione] [c] - C - Programmation
Marsh Posté le 19-12-2012 à 09:29:36
Formule de passage des indices :
si ton tableau 2D est T2d[i][j] avec 0<j<MaxSize, alors T1d[(i*MaxSize)+j]
Marsh Posté le 19-12-2012 à 13:36:42
J'avais pas répondu parce que j'avais oublié, mais a la lecture du post initial, il y avait un truc qui me chiffonnait:
char t[max_index][element];
et
t[0][0] = 12,25
Hem...
C'est pas plutôt
t[0][0] = '1' t[0][1] = '2' t[0][2] = ',' t[0][3] = '2' t[0][4] = '5'
A+,
Marsh Posté le 20-12-2012 à 10:05:41
gilou a écrit : J'avais pas répondu parce que j'avais oublié, mais a la lecture du post initial, il y avait un truc qui me chiffonnait: |
Bonjour et merci pour vos interventions,
tu as vu juste gilou. J´ai tout simplement foire lors de la representation des donnees de Tableau_bi(bidimensionel).. En fait les donnees devront être representees dans Tableau_bi comme dans ta remarque:
|
Puis Copietableau(unidimensionel) recevra sucessivement:
|
J´ai modifie mon programme et apparement je semble obtenir ce que je desire.
Donnez moi votre avis svp!!
A plus tard
Programme:
Code :
|
Marsh Posté le 20-12-2012 à 15:12:50
Citation : char Donnees[] = {"D12,25FD12,55FD11,89FD12,3F"}; |
Si ça marche, ce n'est pas pour une bonne raison:
Ce devrait être char Donnees[] = "D12,25FD12,55FD11,89FD12,3F";
D'autre part, une simple compilation avec le flag -Wall pour les warnings indique que:
- printArray1D est utilisée dans Copietableau sans avoir été déclarée au préalable
- main() n'est pas déclarée avec un type (ce devrait être int main())
Il y a plein d'autres choses à dire sur le code.
Un petit exemple vite fait de comment on aurait pu faire la lecture avec un tableau dynamique:
Code :
|
A+,
Marsh Posté le 20-12-2012 à 21:43:15
Bonsoir gilou,
ta methode est tout simplement incroyable. J´ai tout de même compris le sens de tes codes. Cependant j´ai quelques questions.
Quel est la difference entre **tableau2D et *tableau2D ?
D´apres moi: - **tableau2D pointe sur un tableau 2D
- *tableau2D pointe sur un tableau 1D
Que signifie *cols = (*cols < maxcols) ? maxcols : *cols; ?
Sinon je crois avoir pige le reste.
Merci pour ton aide.
Marsh Posté le 20-12-2012 à 23:24:01
Bonsoir
Citation : ta methode est tout simplement incroyable. |
Non, c'est la technique standard en C pour les tableaux dynamiques.
tableau2D pointe vers un tableau 2D (parce qu'on a construit le tableau de pointeurs sur les lignes)
*tableau2D pointe sur une zone contiguë en mémoire (qu'on peut interpréter comme un tableau 1D)
**tableau2D est le caractère aussi noté tableau2D[0][0]
*cols = (*cols < maxcols) ? maxcols : *cols;
c'est une notation courte pour
if (*cols < maxcols)
*cols = maxcols;
else
*cols = *cols;
A+,
Marsh Posté le 20-12-2012 à 23:45:52
Quand tu utilises *var_ptr, tu fais ce qu'on appelle un déréférencement, tu accèdes à la valeur à l'adresse donnée par var_ptr. Ca revient à faire var_ptr[0], l'opérateur [ ] fait un offset puis un déréférencement.
Donc si tu as un pointeur du style :
int ** Ptr;
Lorsque tu fais *Ptr, tu récupère la valeur à l'adresse de Ptr, celle-ci étant elle-même un pointeur tu peux aussi la déréfencer.
Ensuite, la dernière ligne, c'est l'opérateur ternaire :
var = condition ? valeur_si_vrai : valeur_si_faux;
Ca revient à faire if (condition) var=valeur_si_vrai; else var=valeur_si_faux;
Là c'est pour faire en sorte que la valeur à l'adresse de col soit toujours supérieur à maxcol (si elle est inférieur, tu lui assigne maxcols sinon tu lui assigne elle-même, bref elle change pas)
Ah ben j'ai été grillé
Marsh Posté le 21-12-2012 à 00:02:15
Ah oui, sinon, deux détails:
Dans le scan et la lecture, je saute ce qui n'est pas entre un D et un F (début et fin je suppose), d'ou mon flag insideDF
D'autre part, mon stockage dans tableau_bi est optimisé: les lignes de taille maximum sont stockées sans '\0' final (pour les autres, il y en a un car j'ai initialisé à 0 les lignes en les construisant avec calloc)
En faisant tableau_bi = make_tableau2D(lines, cols+1); toutes mes lignes seraient des suites de caractères avec un '\0' final ie des chaines de caractère C ce qui peut être utile éventuellement selon l'usage qu'on en a.
A+,
Marsh Posté le 21-12-2012 à 14:53:20
Bonjour,
Merci pour vos explications. Je crois avoir tout compris.
A+
Marsh Posté le 16-12-2012 à 21:19:02
Bonsoir,
Avec la fonction readandparse, je lis et ecris le contenu de la variable info dans un tableau bidimensionel. Dans le tableau bidimensionel,les donnees doivent être structurees comme ceci:
t[0][0] = 12,25
t[1][0] = 12,55
t[2][0] = 11,89
t[3][0] = 12,3
Jusqu´ici sa va.
Dans la suite j´aimerais passer progressivement le contenu du tableau bidimensionel vers un tableau unidimensionel. Helas je bloque !! Bref, j´aimerais que le tableau unidimensionel command[max_size] receptione sucessivement 12,25 puis 12,55 puis 11,89 et 12,3.
Mais je coince.
Merci d´avance.
Mon programme: