PDA

View Full Version : [C] Stampa matrice da albero tramite puntatori


L\'Esecutore
17-04-2009, 12:08
Premetto che uso gcc da ubuntu e che non ci sono errori di compilazione ne di esecuzione.
fatto sta che quando invoco la stampa mi butta fuori caratteri incomprensibili e anche in quantità sbagliata.
Qui c'è tutto il codice, non capisco cosa non va . Grazie dell'aiuto

mosaico è di tipo tree
Queste funzioni praticamente non fanno altro che ricreare come matrice un albero a quadranti. ordine() calcola il lato della matrice + piccola che possa contenere tutto, cx e cy fungono da coordinate cartesiane

typedef struct qtnode {
int cx;
int cy;
struct qtnode *nord; // north quadrant
struct qtnode *sud; // south quadrant
struct qtnode *ovest; // west quadrant
struct qtnode *est; // east quadrant
}qtnode;

typedef struct qtnode* tree;

void completa(tree RADICE, char * tavola, int ord){
if (!(Is_Empty(RADICE))) {
Valore(RADICE);
int cx,cy;

if(minY<0) cy = abs(minY)-ret[1];
else cy = abs(minY)+ret[1];

if(minX<0) cx = abs(minX)-ret[0];
else cx = abs(minX)+ret[0];

*(tavola+cx*ord+cy)='X';

completa(Nord(RADICE), tavola, ord);
completa(Ovest(RADICE), tavola, ord);
completa(Est(RADICE), tavola, ord);
completa(Sud(RADICE), tavola, ord);
}
return;
}

void disegna(tree RADICE, char *tavola){
int i,j;
int o = ordine();
tavola = (char *) calloc (o*o, sizeof(char));
for(i=0;i<o;i++)
for(j=0;j<o;j++)
*(tavola + i*o + j) = ' ';
completa(RADICE, tavola, o);
*(tavola+abs(minX)*o+abs(minY))='O';

return;
}

void stampa(char *tavola, int o){
int i,j;

for(i=0;i<o;i++)
for(j=0;j<o;j++)
printf("%c",(*(tavola + i*o + j)));
printf("\n");

return;

}



Chiamante:
char *tav;
disegna(mosaico,tav);
stampa(tav,o);