Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    problema esercizio con matrice in c

    Salve a tutti.Come da titolo avrei un problema con un programma.In pratica devo considerare una matrice 32x32 inizializzata con tutti caratteri 'X'.Dopo aver suddiviso questa matrice in 4 blocchi 16x16 devo poter mettere su ogni diagonale dei 4 blocchi il carattere 'D' e in alto a destra di ogni blocco il carattere 'A'.Dopo di che devo suddividere i 4 blocchi in altri 4 blocchi 8x8,ripetendo lo stesso procedimento cioè mettendo su ogni diagonale dei blocchi il carattere 'D' e il carattere 'A' in alto a destra.Ovviamente poi dovro dividerli in 4 blocchi ancora più piccoli ripetendo sempre le stesse cose.L'algoritmo esamina 6 volte la matrice e deve essere un semplice algoritmo iterativo.Qualcuno ha qualche idea su come fare????Grazie in anticipo!!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99
    per scrivere in diagonale potresti usare un ciclo for e le posizioni posX e posY, e aumentarle di 1 tutte e due contemporaneamente, se devi partire da più a destra metti posX=16 ad esempio e poi usa lo stesso metodo di prima, potresti usare una funzione che viene richiamata più volte e che invece dei numeri messi da te usi la lunghezza prestabilita e la dividi per 2...
    appena ho un po' di tempo provo a scriverla e la posterò qui,

  3. #3
    Originariamente inviato da glukosio
    per scrivere in diagonale potresti usare un ciclo for e le posizioni posX e posY, e aumentarle di 1 tutte e due contemporaneamente, se devi partire da più a destra metti posX=16 ad esempio e poi usa lo stesso metodo di prima, potresti usare una funzione che viene richiamata più volte e che invece dei numeri messi da te usi la lunghezza prestabilita e la dividi per 2...
    appena ho un po' di tempo provo a scriverla e la posterò qui,
    E' infatti è quello che ho fatto.Però c'è un problema.Dato che i blocchi sono 4 come devo richiamare la funzione nel main per le diagonali del blocco in alto a destra e del blocco in basso a sinistra???...Non so se questo problema provenga da un errore della mia funzione.Se casomai ci fosse un errore se per piacere me lo potreste correggere o dire come aggiustare.Grazie.

    Questa è la mia funzione(la matrice è globale ed è inclusa nel file header.h):

    codice:
    #include"header.h"
    
    void funz(int x,int y){  	
    int i,j;  	  
    
    for(i=x;i<y;i++){ 			
    mat[i][i]='D';}  		
    mat[x][y]='A';   
    		
    for(i=x;i<y;i++){ 		
     for(j=x;j<y;j++){ 			 
     printf("%c|",mat[i][j]); 		
      }printf("\n"); 		
    } printf("\n"); 
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99
    ci proverò in serata, magari mi verrà qualcosa di meglio in mente, ma potresti provare a farlo partire da zero, poi da x=16, poi da y=16, e iterarlo 16 volte (fino alla fine della riga); poi dividere per due e fare x=8 e iteri 8 volte, stesso per x=24, y=8,y=24 e così via... ma non so quanto questa idea sia trasportabile poi ad altre grandezze, potresti usare un valore Z per 32, e dividerlo per 2,4,8 fino ad arrivare all'1

  5. #5
    cerco di fare come hai detto....in serata poi ti dirò se ci sono riuscito....tu comunque appena pensi di aver risolto se per piacere mi faresti vedere un esempio pratico te ne sarei grato.

  6. #6
    Originariamente inviato da glukosio
    ci proverò in serata, magari mi verrà qualcosa di meglio in mente, ma potresti provare a farlo partire da zero, poi da x=16, poi da y=16, e iterarlo 16 volte (fino alla fine della riga); poi dividere per due e fare x=8 e iteri 8 volte, stesso per x=24, y=8,y=24 e così via... ma non so quanto questa idea sia trasportabile poi ad altre grandezze, potresti usare un valore Z per 32, e dividerlo per 2,4,8 fino ad arrivare all'1
    Purtroppo io non sono riuscito a raggiungere nessuna soluzione migliore di quella scritta da me oggi....sapresti aiutarmi????

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99
    ci sto provando, se ci riesco posto il codice qui

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99
    questo qua fa il primo partizionamento, però è meglio se riscrivo la funzione divideM per renderla più portabile e di conseguenza anche la parte del main, in modo da non doversi massacrare ad ogni frazionamento!
    codice:
    #include<stdio.h>
    #define SIZE 32
    void printM(const char matrix[][*]);
    void cleanM(char matrix[][*]);
    void divideM(char matrix[][*]);
    int X=0,Y=0;
    int LIM;
    int main(void)
    {
    	int count=0,temp;
    	char matrix[SIZE][SIZE];
    	cleanM(matrix);
    	//prima divisione
    	LIM=(SIZE/2-1); 
    	temp=0;
    	while(count<4){
    		divideM(matrix);
    		if(X==SIZE/2){
    			Y=temp;
    		}
    		else{
    			X=temp;
    			temp=Y;
    		}
    		count++;
    	}
    	printM(matrix);
    	return 0;
    }
    void cleanM(char matrix[][SIZE])
    {
    	int i,j;
    	for(i=0;i<SIZE;i++){
    		for(j=0;j<SIZE;j++){
    			matrix[i][j]='x';
    		}
    	}
    }
    void printM(const char matrix[][SIZE])
    {
    	int i,j;
    	for(i=0;i<SIZE;i++){
    		for(j=0;j<SIZE;j++){
    			printf("%c|",matrix[i][j]);
    		}
    		printf("\n");
    	}
    }
    void divideM(char matrix[][SIZE])
    {
    	int i=0;
    	matrix[X][Y+LIM]='A';
    	for(;i <=(SIZE/2-1);X++,Y++,i++){
    		matrix[Y][X]='D';
    	}
    	
    	
    }

  9. #9
    è esattamente questo che dicevo...solo che vorre un breve chiarimento se puoi sul codice da te scritto perchè non l'ho capito ancora tanto bene cosa fa...un ultima cosa....mi sapresti dire come fare se vorrei stampare ogni volta i blocchi presi in considerazione e alla fine di ogni ciclo,stampare la matrice e vedere pian piano il suo mutamento?...lo vorrei fare per un numero di 6 volte....avevo pensato a un ciclo do while,ma non so bene come impostarlo e soprattutto dove metterlo...cioè dentro al ciclo do while cosa ci deve andare e la condizione come potrebbe essere????

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99
    in pratica nella funzione while la prima volta si parte con X=0 e Y=0, poi viene eseguita la funzione e ci si ritrova con X=16 e Y=16, viene azzerata la Y da temp=0 e viene eseguito di nuovo il ciclo; poi ci si ritrova con X=32 e Y=16, viene azzerato X da temp e il valore 16 viene salvato in temp, si fa il terzo pezzo, e poi tutti e due i valori saranno 16, ed eseguendo un'ultima volta il ciclo disegna l'ultimo quarto di matrice.
    scusa per la disordinatezza del codice, ma sono praticamente ancora alle prime armi, e per scrivere qualcosa di ordinato mi ci vuole tempo...


    per controllare il processo potresti inserire nel while due printf che ti scrivano i valori di X,Y e temp, richiamare la funzione per disegnare la matrice, bloccare il tutto con system("PAUSE") per darti il tempo di guardare, e poi mettere un system("cls") per cancellare, così avrai sempre una sola matrice su schermo e non 7 una dopo l'altra...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.