Diferència entre revisions de la pàgina «M3 - Programació estructurada / Exercicis UF2: Exercicis mètodes»

De wikiserver
Dreceres ràpides: navegació, cerca
 
(Hi ha 20 revisions intermèdies del mateix usuari que no es mostren)
Línia 2: Línia 2:
 
:*retornar el valor màxim del vector.
 
:*retornar el valor màxim del vector.
 
:*retornar el valor mínim del vector.
 
:*retornar el valor mínim del vector.
 
+
<!--
 
<source lang="java">
 
<source lang="java">
package exercicismetodes;
+
package metodes;
  
 
import java.util.Scanner;
 
import java.util.Scanner;
Línia 14: Línia 14:
 
         int vector[] = {5, 6, 67, 76, 34, 28 };
 
         int vector[] = {5, 6, 67, 76, 34, 28 };
 
         int valor;
 
         int valor;
         final String missatgeEntrada = "Inútil, introdueix un valor entre 1 i 8";
+
         final String missatgeEntrada = "Si us plau, introdueix un valor entre 1 i 8";
 
         final String missatgeNumero = "Has d'introduir un valor numèric";
 
         final String missatgeNumero = "Has d'introduir un valor numèric";
 
         final String menu = "1. Trobar el valor més gran d'un vector d'enters\n"
 
         final String menu = "1. Trobar el valor més gran d'un vector d'enters\n"
Línia 55: Línia 55:
  
 
             }
 
             }
         }
+
         }                      
       
 
       
 
       
 
 
     }
 
     }
 +
 
     public static  int mayor(int[] vectorEnters){
 
     public static  int mayor(int[] vectorEnters){
 
         int maxValor=Integer.MIN_VALUE;
 
         int maxValor=Integer.MIN_VALUE;
Línia 83: Línia 81:
 
}
 
}
 
</source>
 
</source>
 +
-->
 +
 +
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
 +
<!--
 +
<source lang="java">
 +
package metodes;
 +
 +
import java.util.Scanner;
  
  
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
+
public class Ex2 {
 +
    public static void main(String[] args) {
 +
                   
 +
        int numDia=0;
 +
        boolean numCorrecte=false;
 +
        Scanner lector = new Scanner(System.in);
 +
     
 +
 
 +
        while (!numCorrecte) {
 +
            System.out.println("Introdueix el número de dia de la setmana (1 a 7):");
 +
            if(lector.hasNextInt()){
 +
                numDia = lector.nextInt();
 +
                numCorrecte = (numDia >= 1 && numDia <= 7);
 +
                if (!numCorrecte) {
 +
                  lector.nextLine();
 +
                  System.out.println("No és un valor vàlid!");
 +
               
 +
                }             
 +
            }     
 +
            else{
 +
                  lector.nextLine();
 +
                  System.out.println("No és un valor vàlid!"); 
 +
            }     
 +
        }
 +
        String nomDia=diasetmana(numDia);
 +
        System.out.println("El dia de la setmana que correspon al número "+numDia+" és: "+nomDia);
 +
    }
 +
   
 +
    public static String diasetmana(int dia){
 +
        String nomDia[]={"Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte","Diumenge"};
 +
        return nomDia[dia-1];
 +
    }
 +
}
 +
</source>
 +
-->
  
 
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.
 
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.
 +
<!--
 +
<source lang="java">
 +
package metodes;
 +
 +
public class Ex3 {
 +
    public static void main(String[] args) {
 +
        int taula[] = {3, 6, 1, -12, 4, 33, -23, 9, 10};
 +
        int taulainv[]= invertir(taula);
 +
        System.out.print("Els valors en ordre invers són: ");
 +
       
 +
        for (int i =0;i<taulainv.length;i++){
 +
            System.out.print(taulainv[i]+" ");
 +
        }
 +
        System.out.println("");
 +
    }
 +
 +
   
 +
    public static int[] invertir(int[] taula){
 +
        int taulainv[]=new int[taula.length] ;
 +
        for (int i = 0; i <=(taula.length/2); i++) {
 +
            taulainv[i]=taula[taula.length-i-1];
 +
            taulainv[taula.length-i-1]=taula[i];
 +
        }
 +
        return taulainv;
 +
    }
 +
}
 +
</source>
 +
-->
  
 
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
 
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
 +
<!--
 +
<source lang="java">
 +
package metodes;
 +
 +
import java.util.Scanner;
 +
 +
public class Ex3 {
 +
    public static void main(String[] args) {
 +
        Scanner teclat = new Scanner(System.in);
 +
        System.out.print("Introdueix el número de línies: ");
 +
        int lin = teclat.nextInt();
 +
        dibuix(lin);
 +
 +
    }
 +
    public static void dibuix(int lin){
 +
        for (int i = 1; i <=lin; i++) {
 +
            for (int j = 1; j <=i; j++) {
 +
                System.out.print("* ");
 +
               
 +
            }
 +
            System.out.println("");
 +
           
 +
        }
 +
    }
 +
}
 +
</source>
 +
-->
  
 
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.
 
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.
 +
<!--
 +
<source lang="java">
 +
package metodes;
 +
 +
import java.util.Scanner;
 +
 +
 +
public class Caracter {
 +
 +
    public int llegirOpcio() {
 +
        String menu = "1. Mostrar els n primers caràcters d’una cadena\n"
 +
                + "2. Mostrar els n últims caràcters d’una cadena (d’esquerra a dreta)\n"
 +
                + "3. Eliminar els espais en blanc que hi hagi al final de la cadena\n"
 +
                + "4. Eliminar els espais en blanc que hi hagi al principi de la cadena\n"
 +
                + "5. Eliminar d’una cadena els n caràcters que apareixen a partir de la posició p\n"
 +
                + "6. Inserir una cadena dins d’una altra a partir de la posició p\n"
 +
                + "7. Comptar el nombre de vegades que apareix una cadena dins d’una altra\n"
 +
                + "8. Esborrar totes les aparicions d’una cadena dins d’una altra\n"
 +
                + "Tria una opció: ";
 +
        System.out.println(menu);
 +
        Scanner teclat = new Scanner(System.in);
 +
        int op = teclat.nextInt();
 +
        return op;
 +
 +
    }
 +
 +
    public String Opcio1(String text, int numCaracters) {
 +
 +
        return "\"" + text.substring(0, numCaracters) + "\"";
 +
 +
    }
 +
 +
    public String Opcio2(String text, int numCaracters) {
 +
 +
        return "\"" + text.substring(text.length() - numCaracters, text.length()) + "\"";
 +
    }
 +
 +
    public String Opcio3(String text) {
 +
        int i = text.length() - 1;
 +
        while (text.charAt(i) == ' ') {
 +
            i--;
 +
        }
 +
        return "\"" + text.substring(0, i + 1) + "\"";
 +
    }
 +
 +
    public String Opcio4(String text) {
 +
 +
        int i = 0;
 +
        while (text.charAt(i) == ' ') {
 +
            i++;
 +
        }
 +
        return "\"" + text.substring(i) + "\"";
 +
    }
 +
 +
    public String Opcio5(int pos, int num, String text) {
 +
        return "\"" + text.substring(0, pos) + text.substring(pos + num) + "\"";
 +
    }
 +
 +
    public String Opcio6(int pos, String cad, String text) {
 +
        return "\"" + text.substring(0, pos) + cad + text.substring(pos) + "\"";
 +
    }
 +
 +
    public int Opcio7(String text, int pos, String cad) {
 +
        int compt = 0;
 +
        while (pos != -1) {
 +
            compt++;
 +
            pos = text.indexOf(cad, pos + 1);
 +
        }
 +
        return compt;
 +
 +
    }
 +
 +
    public String Opcio8(String text, String cad) {
 +
        return text.replace(cad, "");
 +
    }
 +
}
 +
 +
Principal:
 +
 +
public static void main(String[] args) {
 +
        // TODO code application logic here
 +
        Caracter car = new Caracter();
 +
        Scanner lector = new Scanner(System.in);
 +
         
 +
        String missatgeNumero = "Aquest valor no és vàlid!";
 +
        int num;
 +
 +
        int opc = car.llegirOpcio();
 +
        while (opc!=9){
 +
        switch (opc) {
 +
            case 1:
 +
                System.out.print("Introdueix el nombre de caràcters a mostrar: ");
 +
                    if (lector.hasNextInt()) {
 +
                        num = lector.nextInt();
 +
                        lector.nextLine();
 +
                        System.out.print("Introdueix una cadena de text: ");
 +
                        String text = lector.nextLine();
 +
                       
 +
                        String cadRes = car.opcio1(text,num);
 +
                        System.out.println(("Caràcters cadena: " + cadRes));
 +
 +
                    } else {
 +
                        System.out.println(missatgeNumero);
 +
                    }
 +
               
 +
                break;
 +
                case 2:
 +
                break;
 +
                case 3:
 +
                break;
 +
                case 4:
 +
                break;
 +
                case 5:
 +
                break;
 +
                case 6:
 +
                break;
 +
                case 7:
 +
                break;
 +
                case 8:
 +
                break;
 +
                default:
 +
                System.out.println("Opció incorrecte");
 +
               
 +
        }
 +
        opc = car.llegirOpcio();
 +
        }
 +
        System.out.println("Adéu!");
 +
    }
 +
   
 +
}
 +
 +
 +
</source>
 +
-->
  
 
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.
 
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.
Línia 98: Línia 327:
 
:*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 sortim per dalt, entrem per baix.
 
:*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
+
:*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:
que puja dos posicions (i-2, j ).Un exemple de quadrat màgic per a N=5 seria:
 
  
 
[[Imatge:m3uf2_ex_disseny_modular_1.png |300px|center| Exercicis Disseny modular]]
 
[[Imatge:m3uf2_ex_disseny_modular_1.png |300px|center| Exercicis Disseny modular]]
Línia 120: Línia 348:
 
posicio=calculaPosicioInicial(dim);
 
posicio=calculaPosicioInicial(dim);
 
limit=dim*dim;
 
limit=dim*dim;
for (valor=0;valor<limit;valor++){
+
for (valor=1;valor<=limit;valor++){
 
   assignaValor(posicio,valor);
 
   assignaValor(posicio,valor);
   posicio =calcularNovaPosicio( ) ;
+
   posicio =calcularNovaPosicio(posicio) ;
 
}
 
}
 
imprimirQuadrat( )
 
imprimirQuadrat( )
 
</source>
 
</source>
 +
 +
 +
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("");
 +
        }
 +
 +
    }
 +
 +
}
 +
<!---->
 +
<!---->

Revisió de 17:33, 10 abr 2024

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:
Exercicis Disseny modular

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("");
       }
   }

}