In questo numero di KULT voglio parlarvi di quadrati magici. Forse già li conoscete: per quadrato magico si intende una matrice n*n (n è detto “ordine”del quadrato) in cui la somma degli elementi di ciascuna riga, di ciascuna colonna e delle due diagonali è sempre uguale ad una costante
(detta costante magica).
Un classico esempio di quadrato magico che probabilmente avete già visto è il seguente:
8 1 6
3 5 7
4 9 2
ma come si fa a costruirlo (senza usare la nota tecnica per tentativi)?
Un modo molto semplice è il seguente che funziona sempre per quadrati di ordine dispari. Consideriamo il quadrato dell’ esempio, esso è stato costruito utilizzando i numeri da 1 a n*n, cioè da 1 a 9, inserendoli a partire dalla posizone (x=2,y=1) e modificando la posizone in queso modo:
se, come avviene già per il secondo numero da inserire, cade in una casella al di fuori della matrice allora si rientra dal lato opposto
(è praticamente una struttura toroidale), ecco qua:
0 1 0 0 1 0 0 1 0
0 0 0 —-> 0 0 0 —> 3 0 0
0 0 0 0 0 2 0 0 2
quando arriviamo a questo punto dovremmo inserire il numero 4 ancora nella (2,1) ma questa è già occupata, così ci si sposta nella casella sottostante e si continua a riempire la matrice fino ad esaurire i 9 numeri a disposizione:
0 1 0 0 1 0 0 1 6
3 0 0 —-> 3 5 0 —> 3 5 0
4 0 2 4 0 2 4 0 2
la casella da riempire sarebbe ancora la (1,3), già riempita col 4, così si passa alla (3,2) e si va avanti:
0 1 6 8 1 6 8 1 6
3 5 7 —-> 3 5 7 —> 3 5 7
4 0 2 4 0 2 4 9 2
La costante magica di questo quadrato è 15. E’ importante, affinchè il quadrato sia magico, scegliere opportunamente la posizione di partenza, nell’ esempio si è partiti dalla (2,1), cioè dalla prima riga e dalla colonna di mezzo. La posizione che funziona sempre è la
(n div 2+1,1).
Si può cambiare la posizione iniziale, ma non sempre si ottiene un quadrato magico (magari la costante magica la si ritrova per le diagonali, ma non per tutte le righe e le colonne). Un altro cambiamento si può fare variando lo spostamento durante il riempimento della matrice, invece di usare lo spostamento :
si possono usare
al variare di sx e sy si possono ottenere altri quadrati magici:
Con spostamenti sx=1 e sy=2 si ottiene una particolare classe di quadrati magici detti addirittura quadrati diabolici: in questi quadrati se si scompone in due blocchi la matrice e li si riaffianca si riottiene un altro quadrato magico. Altri quadrati magici particolari sono scorniciabili, cioè togliendo la cornice di numeri esterna quello che rimane è ancora un quadrato magico.
Il programma in questione è in Turbo Pascal e fa quello che ho descritto sopra: c’è anche un piccolo menu che permette di modificare comodamente i parametri principali, eccolo qua, ora vi saluto, ciao.