Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C]Stampa matrici tramite puntatori

    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

    codice:
    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:
    codice:
    char *tav;
    disegna(mosaico,tav);
    stampa(tav,o);

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    E mosaico ? E il tipo tree ?

    E' meglio che mostri tutto e fornisci un codice compilabile, per evitare incomprensioni e valutare tutte le possibili fonti di errori.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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

    codice:
    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;

  4. #4

  5. #5
    Non riesci proprio a "postare" qualcosa di compilabile con un copia incolla?
    In questo modo le probabiltà che qualcuno posso prendersi la briga di provare a risolvere il tuo problema potrebbero aumentare non credi?
    Ad esempio nella funzione "void completa(tree RADICE, char * tavola, int ord)", che cosa sono "minX" e "minY"? Dove sono definite?

  6. #6
    Non posso postare tutto il codice necessario alla compilazione. minx e miny sono 2 interi che ho usato x calcolare la posizione relativa del nodo (0,0). Il problema sta da qualche parte nell'uso dei puntatori o nell'uso della matrice perchè tutto il resto funziona, le posizioni su cui vado a scrivere sono corrette, l'errore sta su come vi accedo, ma non capisco qual'è

  7. #7
    minX e minY sono variabili globali

  8. #8
    Se non riesci a ridurre ai minimi termini ed in modo riproducibile il tuo problema, e' improbabile che qualcuno possa provare ad aiutarti a risolvere il tuo problema.
    Tra l'altro e' anche molto probabile che nell'opera di riduzione e riproducibilita', tu stesso riesca a trovare la magagna del tuo codice.
    Per ora l'unico consiglio che ti posso dare e': non usare variabili globali.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.