Diferència entre revisions de la pàgina «ASIX-M3-UF2-A1.1-Exercicis disseny descendent»

De wikiserver
Dreceres ràpides: navegació, cerca
Línia 8: Línia 8:
 
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).
 
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).
  
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si
+
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.
sortim per dalt, entrem per baix.
 
  
 
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).
 
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).
Línia 24: Línia 23:
 
:*El programa tindrà les següents funcions:
 
:*El programa tindrà les següents funcions:
  
llegirDimensio : Li demanem a l’usuari que ens indiqui la mida N de la matriu.
+
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.
Si el valor és correcte, la funció el retorna.
+
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0
inicialitzarQuadrat : Simplement posem tots els valors a 0
+
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició
calculaPosicioInicial: Segons la dimensió, calculem la primera posició
+
::'''assignaValor''': Posa un valor en una posició
assignaValor : Posa un valor en una posició
+
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.
calcularNovaPosicio : Retorna els valors de fila i columna vàlids per a col·locar
+
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,
el proper valor.
+
 
+
:* El programa serà semblant a aquest :
imprimirQuadrat: Treu per pantalla el quadrat màgic
+
<source lang=python>
Per a fer-ho primer crearem la classe Posicio que simplement contindrà els valors de fila i
+
dim = llegirDimensio()
columna.
+
qm = inicialitzarQuadrat(dim)
El programa serà semblant a aquest :
+
pos = calculaPosicioInicial(dim)
dim=llegirDimensio();
+
limit = dim*dim;
inicialitzarQuadrat();
+
for valor in range(1,limit+1):
posicio=calculaPosicioInicial(dim);
+
  assignaValor(qm,pos,valor)
limit=dim*dim;
+
  pos = calcularNovaPosicio(qm, dim, pos)  
for (valor=0;valor<limit;valor++){
+
imprimirQuadrat(qm)
assignaValor(taula,posicio,valor);
+
</source>
posicio =calcularNovaPosicio(taula,posicio ) ;
 
}
 
imprimirQuadrat(taula)
 

Revisió del 11:45, 2 gen 2021

1. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un nombre senar de files i columnes on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar des de 1 fins a n2 on n és el numero de files i columnes.

Com construir-lo?

  • El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).
  • El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).
  • Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.
  • A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).
  • Un exemple de quadrat màgic per a N=5 seria:
      23  6 19  2 15
      10 18  1 14 22
      17  5 13 21  9
       4 12 25  8 16
      11 24  7 20  3
  • El programa tindrà les següents funcions:
llegirDimensio: Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.
inicialitzarQuadrat: Simplement posem tots els valors a 0
calculaPosicioInicial: Segons la dimensió, calculem la primera posició
assignaValor: Posa un valor en una posició
calcularNovaPosicio: Retorna els valors de fila i columna vàlids per a col·locar el proper valor.
imprimirQuadrat: Treu per pantalla el quadrat màgic,
  • El programa serà semblant a aquest :
dim = llegirDimensio()
qm = inicialitzarQuadrat(dim)
pos = calculaPosicioInicial(dim)
limit = dim*dim;
for valor in range(1,limit+1):
   assignaValor(qm,pos,valor)
   pos = calcularNovaPosicio(qm, dim, pos) 
imprimirQuadrat(qm)