Matrice a Spirale

di il
4 risposte

Matrice a Spirale

Ciao a tutti,
Ho provato a scrivere questo codice per stampare una matrice a spirale da 0 a 63 (matrice quadrata 8x8) non capisco perchè non funzione, credo ci sia qualche errore nel ciclo while, perchè provando a stampare i 4 cicli for (senza il while) la matrice la stampa correttamente. Non riesco a capire quale sia il problema :'(
#include <iostream>
using namespace std;

int main() {
	int i;
	int j;
	int l_righe=8;
	int l_colonne=8;
	int matrice[l_righe][l_colonne];
	int zero=0;
	int cont=1;
	
	do {
	// prima riga della matrice da sx verso dx
	for(j=zero;j<l_colonne;j++) {
		matrice[zero][j]=cont;
		cont++;
	}
	//ultima colonna della matrice, dall'alto verso il basso
	for(i=zero+1;i<l_righe;i++) {
		matrice[i][l_colonne-1]=cont;
		cont++;
	}
	//ultima riga della matrice, da dx verso sx
	for(j=l_colonne-2;j>=zero;j--) {
		matrice[l_righe-1][j]=cont;
		cont++;
	}
	//prima colonna della matrice, dal basso verso l'alto
	for(i=l_righe-2;i>zero;i--) {
		matrice[i][zero]=cont;
		cont++;
	}

	
	
	zero++;      
	l_colonne--;
	l_righe--;
	
} while (cont==64);

		// stampo la matrice
		for(i=zero;i<l_righe;i++) {
			for(j=zero;j<l_colonne;j++) {
				cout<<matrice[i][j]<<"  ";
			}
			cout<<endl;
		}

	
}

4 Risposte

  • Re: Matrice a Spirale

    Ciao!

    Alcune considerazioni:
    - anche se alcuni compilatori consentono di usare i VLA (Variable-Length Array), va detto che secondo lo standard del C++ la dimensione degli array statici deve essere una costante;
    - se la spirale deve partire da 0, allora la variabile cont va inizializzata a 0;
    - la condizione del while è sbagliata, infatti dopo la prima iterazione sarà cont=28 ed essendo 28!=64 il ciclo viene subito interrotto. La condizione va quindi modificata in while(cont!=64);
    - il motivo invece per cui la matrice non viene stampata correttamente è che all'uscita del while sarà zero!=0, l_righe!=8 e l_colonne!=8.

    Ti invito inoltre a rendere il codice più generico, per esempio quel 64 all'interno della condizione del while può essere sostituito con altro!
  • Re: Matrice a Spirale

    @Nippolo
    Quindi dovrei semplicemente cambiare la condizione del while? Perchè così facendo non stampa nulla, non ho capito cosa intendi nell'ultimo punto.
  • Re: Matrice a Spirale

    @Nippolo

    Nooo, okay, ho capitooo

    Grazie mille per la disponibilità
  • Re: Matrice a Spirale

    Di niente!
Devi accedere o registrarti per scrivere nel forum
4 risposte