Pagina 1 di 1

[JAVA] Stampa di una matrice con numeri a "spirale"

MessaggioInviato: 12 nov 2011, 16:56
da alex0211
Salve a tutti, sto combattendo con questo esercizio da giorni ormai senza avere una benchè minima illuminazione e senza nemmeno capire la soluzione proposta!!
Allego il testo :

Scrivere un metodo che, dato un numero positivo N, crea e restituisce una matrice quadrata NxN di interi che memorizza i numeri da 1 a N2disposti “a spirale”

http://www.uniroma2.it/didattica/POJ/de ... rcizio.pdf

e qui c'è anche la soluzione, ma che onestamente non riesco a comprendere!
http://www.uniroma2.it/didattica/POJ/de ... rale2.java

Qualcuno riesce a decifrarmi come si svolge una cosa del genere?

Grazie a Tutti!

Alex

Re: [JAVA] Stampa di una matrice con numeri a "spirale"

MessaggioInviato: 12 nov 2011, 19:03
da angus
Il PDF con la spiegazione punto per punto (e anche i disegnini) mi sembra molto chiaro.
Cosa non ti convince? Il metodo o il codice?

Re: [JAVA] Stampa di una matrice con numeri a "spirale"

MessaggioInviato: 12 nov 2011, 19:06
da alex0211
Si perdonami, forse sono stato poco chiaro.

Ho capito bene o male la logica dietro all'algoritmo (il cambio di direzione cioe), quello che non ho capito è il codice che è stato usato e la logica dietro la quale sono state create quelle operazioni..

ho provato a rileggere piu e piu volte il codice, senza capire perche però sono state fatte QUELLE operazioni per otterene quel risultato..
Spero di essermi spiegato un po' meglio :)

Alex

Re: [JAVA] Stampa di una matrice con numeri a "spirale"

MessaggioInviato: 12 nov 2011, 19:36
da angus
Scusami ma continuo a non capire.
Il codice, che è anche ben commentato, rispecchia l'algoritmo... se hai capito quello, non dovresti avere problemi.

Puoi postare il ragionamento che fai per analizzare il codice, punto per punto, ed indicare dove trovi delle difficoltà o delle discrepanze rispetto all'algoritmo?

Re: [JAVA] Stampa di una matrice con numeri a "spirale"

MessaggioInviato: 12 nov 2011, 20:15
da alex0211
Ok allora, partendo dal metodo

Codice: Seleziona tutto
public static int aggiornaDirezione(int direzione, int i, int j, int n)


Che indici sono i,j e n?

Codice: Seleziona tutto
/* se ci si trova sulla diagonale
      la direzione viene aggiornata e 1 e 3 */
      if (i+j == n-1)

if (i+j == n-1) rappresenta la diagonale? perche?

in generale, nonostante siano commentate a dovere, non riesco a ben capire la logica dietro le operazioni presenti negli if-else e come essi possano rappresentare le "diagonali" o i cambi di direzione.

gli altri due metodi, aggiorna riga e aggiorna colonna sono abbastnza intuitivi.

anche l'ultimo ora che lo riguardo sembra essere abbastanza intuitivo, si tratta solo di incastrare i vari risultati ottenuti prima...magari dopo lo riguardo e provo a ricrearlo e vedo se ci sono delle discrepanze!
non c'è un metodo meno macchinoso ad ogni modo?

Re: [JAVA] Stampa di una matrice con numeri a "spirale"

MessaggioInviato: 12 nov 2011, 21:39
da angus
alex0211 ha scritto:Che indici sono i,j e n?

riga, colonna, numero di righe (o colonne)
alex0211 ha scritto:if (i+j == n-1) rappresenta la diagonale? perche?

pagina 5 del pdf che spiega l'algoritmo. Non ti è molto chiaro quello allora...

esempio. Se sei nella prima riga i=0 e sei nell'ultima colonna j=3, incroci la diagonale secondaria... infatti 0+3==4-1
esempio2. Se sei nella seconda riga i=1 la stessa diagonale la incroci nella penultima colonna j=2.. 1+2=4-1
alex0211 ha scritto:non c'è un metodo meno macchinoso ad ogni modo?

Trovare un altro algoritmo è un problema diverso dal capire come tradurre in codice un certo algoritmo. No?

Re: [JAVA] Stampa di una matrice con numeri a "spirale"

MessaggioInviato: 13 nov 2011, 15:11
da alex0211
Ah ecco...molto piu chiaro cosi! Quello che mi chiedo: c'e un metodo pratico per arrivare a una relazione di questo tipo o è per cosi dire, immaginazione?

Per gli altri due if-else il prOcedimento analogo?

Grazie in ogni caso!