Réduction d'un tableau

Réduction d'un tableau - C - Programmation

Marsh Posté le 14-03-2007 à 19:28:19    

Bonjour,
 
j'ai un tableau de 150 lignes et de 150 colonnes.
Vu comme une image : (x,y) indique les coordonnées
coin supérieur gauche : (0,0)
coin supérieur droit : (150,0)
coin inférieur droit : (150,150)
coin inférieur gauche : (0,150)
 
Je souhaiterai écrire une fonction permettant de réduire ce tableau pour ne récupérer que la partie que l'on désire.
Les coins sont donnés en parametres.
int ** tableau_reduit(int csgX, int csgY, int csdX, int csdY, int cidX, int cidY, int cigX, int cigY)
 
Merci

Reply

Marsh Posté le 14-03-2007 à 19:28:19   

Reply

Marsh Posté le 14-03-2007 à 19:46:08    

deja,au passage, si tu as 150 lignes, tu ne peux pas addresser la case 150...sinon ca part en javel.
et qu'entends tu par 'reduire' ? tu veux extraires un tableau plus petit tout en conservant l'original ou tu veux redimensionner (donc perdre) l'original ?

Reply

Marsh Posté le 14-03-2007 à 19:50:58    

pfuitt a écrit :

deja,au passage, si tu as 150 lignes, tu ne peux pas addresser la case 150...sinon ca part en javel.
et qu'entends tu par 'reduire' ? tu veux extraires un tableau plus petit tout en conservant l'original ou tu veux redimensionner (donc perdre) l'original ?


Bonjour,
 
je souhaite extraire un tableau plus petit tout en conservant l'original.

Reply

Marsh Posté le 14-03-2007 à 20:12:29    

allocation dynamique d'un tableau avec malloc(), et ta fonction doit retourner un pointeur sur la zone mémoire nouvellement créée.
 
Plus d'information ici : http://mapage.noos.fr/emdel/notes.htm#pointeurs

Reply

Marsh Posté le 14-03-2007 à 20:16:33    

bon, deja, tu n'as pas besoin des 4 coins de ton tableau final (ppFoo). Tu as juste besoin du (i_0,y_0) la case de ton ppFoo[0][0], de L ne nombre de colones et H le nombre de lignes à extraires.
 
si tes valeurs sont coherentes (i_0+ L_final > 0 et i_0 + L_final< L_init et idem pour H_final) il suffit d'allouer un tableau de sortie à la bonne dimension, de positionner les ppFoo[i][] sur la colones qui t'interesses et de recopier le nombre de cellule qui va bien
 
en gros, en virant les '...' et en les remplacant par les bonnes variables

Code :
  1. int ** tab_reduit(int ** tab_init, L_init, H_init,i_0, y_0, L, H)
  2. {
  3. /*validation des nouvelles largeurs et hauteurs*/
  4. if(L_fin<1)
  5. return NULL;
  6. ...
  7. /*validation du point initial*/
  8. if(L_init<0)
  9. return NULL;
  10. ...
  11. /*allocation du tableau final*/
  12. int **ppFoo;
  13. pFoo = (int **)malloc(...)
  14. if (!ppFoo)
  15. return NULL;
  16. ...
  17. /*recopie*/
  18. for(int j =0 ; j < H ; j++)
  19. memcpy(&tab_init[...][...], &ppFoo[...][...] ,sizeof(...)*L);
  20. }

Message cité 1 fois
Message édité par pfuitt le 14-03-2007 à 20:19:12
Reply

Marsh Posté le 14-03-2007 à 22:11:14    

pfuitt a écrit :


Code :
  1. ...
  2. /*allocation du tableau final*/
  3. int **ppFoo;
  4. ppFoo = (int **)malloc(...)
  5. if (!ppFoo)
  6. return NULL;
  7. ...
  8. /*recopie*/
  9. ...



Déjà le cast du malloc est inutile. Mais si t'alloues pas quand-même la mémoire pour stocker les lignes du tableau ça partira aussi en javel...

Code :
  1. for (i=0; i < ...; i++)
  2.     ppFoo[i]=malloc(...);

Message cité 1 fois
Message édité par Sve@r le 14-03-2007 à 22:12:58

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

Marsh Posté le 15-03-2007 à 19:40:20    

Sve@r a écrit :

Déjà le cast du malloc est inutile. Mais si t'alloues pas quand-même la mémoire pour stocker les lignes du tableau ça partira aussi en javel...

 


c est un embryon e code, le but c'etait de lui montrer le how too, pas de lui pondre la routine qui vabien, mais sinon tu as raison...j'aurai du mettre au moins des '...'

 

et pour le cast... j'ignorai, donc merci

Message cité 1 fois
Message édité par pfuitt le 15-03-2007 à 19:41:27
Reply

Marsh Posté le 17-03-2007 à 21:53:00    

pfuitt a écrit :

et pour le cast... j'ignorai


Ben c'est depuis que le malloc est passé de "char*" à "void*". Le type "void*" étant synonyme de "universel", plus la peine de caster un malloc. Son pointeur renvoyé s'adapte à tout...
 


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

Sujets relatifs:

Leave a Replay

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