M3 - Programació estructurada / Exercicis UF2: Exercicis mètodes
1. Escriu un programa que donat un vector numèric (de qualsevol mida) amb valors no negatius, permeti fer les següents opcions (cada opció serà un mètode):
- retornar el valor màxim del vector.
- retornar el valor mínim del vector.
2. Fes un mètode que donat un número passat com a paràmetre que representi el dia de la setmana retorni un String amb el nom d'aquest dia
3. Escriu un mètode que donada una taula de números passada com a paràmetre retorni una altra taula amb els valors invertits.
4. Escriu un mètode per realitzar l'exercici 13 dels "exercicis amb for". EL nombre de línies serà el paràmetre del mètode
5. Crea una classe caràcter que realitzi els 8 punts que es demanen a l’exercici 10 de cadenes. Ha d’haver-hi un mètode per a cada problema. En cap cas el mètode demanarà dades a l’usuari ni imprimirà res per consola. Tot s’ha de fer a través de paràmetres. Cal fer també un programa en un altre fitxer que mitjançant un menú permeti executar aquest mètodes.
6. 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 n 2 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:
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
Per a fer-ho primer crearem la classe posicio que simplement contindrà els valors de fila i columna i els mètodes per a poder accedir a aquests valors. El programa serà semblant a aquest:
dim=llegirDimensio();
inicialitzarQuadrat();
posicio=calculaPosicioInicial(dim);
limit=dim*dim;
for (valor=1;valor<=limit;valor++){
assignaValor(posicio,valor);
posicio =calcularNovaPosicio(posicio) ;
}
imprimirQuadrat( )
package metodes;
public class Posicio {
public int fila; public int columna;
}
package metodes;
import java.util.Scanner;
public class QuadratMagic {
public static void main(String[] args) { QuadratMagic q = new QuadratMagic();
int dim = q.llegirDimensio(); int qm[][] = new int[dim][dim]; q.inicialitzarQuadrat(qm); Posicio pos = q.calculaPosicioInicial(dim); for (int valor = 1; valor <= dim * dim; valor++) { q.assignaValor(pos, valor, qm); pos = q.calcularNovaPosicio(qm, pos);
} q.imprimirQuadrat(qm);
}
public int llegirDimensio() { int d; System.out.print("Dona la dimensio del quadrat actual: "); Scanner lector = new Scanner(System.in); d = lector.nextInt(); while (d % 2 == 0) { System.out.print("Valor incorrecte introdueix de nou : "); d = lector.nextInt(); } return (d); } public void inicialitzarQuadrat(int qm[][]) { int i, j;
for (i = 0; i < qm.length; i++) { for (j = 0; j < qm.length; j++) { qm[i][j] = 0; } } }
public Posicio calculaPosicioInicial(int dim) { Posicio pos = new Posicio(); pos.columna = (dim / 2); pos.fila = pos.columna - 1; return pos; }
public void assignaValor(Posicio p, int valor, int qm[][]) { qm[p.fila][p.columna] = valor; }
public Posicio calcularNovaPosicio(int qm[][], Posicio pos) { int fila, columna; columna = (pos.columna + 1)%qm.length; fila = pos.fila - 1; if (fila < 0) { fila = qm.length - 1; }
if (qm[fila][columna] != 0) { /* lloc ja ocupat */ fila--; if (fila < 0) { fila = qm.length - 1; } columna=pos.columna;
} pos.columna = columna; pos.fila = fila; return pos; }
public void imprimirQuadrat(int qm[][]) { System.out.println(""); for (int[] qm1 : qm) { for (int j = 0; j < qm.length; j++) { System.out.printf("%-5d", qm1[j]); } System.out.println(""); }
}
}