Unidad 3 Programación Orientada a Objetos. Programación...
Transcript of Unidad 3 Programación Orientada a Objetos. Programación...
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 1
Unidad 3
Programación Orientada a Objetos. Programación
JAVA. Parte I (7.5p)
85% [Parte I (___/9.75p-max(7.5p)) + Parte II (___/3.75p-max(2.5p))] + 15%[Parte III WEB (___)]
Alumno: ____________________________________________
Apartado 1 Ejercicio 1-2
0.5p/ejer 1p
9.75p
Apartado 2 Ejercicio 3-5
0.25p/ejer 0.75p
Apartado 3 Ejercicio 6-7
0.5p/ejer 1p
Apartado 4 Ejercicio 8-13
(11 métodos - 0.5p/m) 5.5p
Apartado 5 Ejercicio 14 1.5p
Apartado 6 Ejercicio 15-16
(15 métodos - 0.25p/m) 3.75p 3.75p
Apartado 1.- Corrige los errores sintácticos/semánticos que se plantean en las siguientes cuestiones. (1p)
1. Corregir los errores del siguiente código JAVA. (0.5p):
// Obtener el menor divisible por n proporcionado por el usuario public class Ejercicio1 {
public static void main(String[] args) throws IOException { int vector[]; int numero=0; int mayor= Integer.MIN_VALUE; int menor= Integer.MAX_VALUE; BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); System.out.println("¿Dime la longitus del vector?"); int longitud=Integer.valueOf(in.readLine()).intValue(); System.out.println("¿Dime el n divisible?"); numero=Integer.valueOf(in.readLine()); vector=new int[longitud]; for(int i=0 ; i<vector.length ;) {
System.out.println("......................:"); vector[i] = Integer.valueOf(in.readLine()).intValue(); if ((vector[i] % numero) == 0) || (vector[i] < menor))
menor= vector[i]; } System.out.println("....: "+mayor); System.out.println("....: "+menor);
}
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 2
}
2. Corregir los errores del siguiente código JAVA. (0.5p):
import java.io.*; public class Ejercicio2 {
public static void factorial(int num){ int producto = 0; for (; num>1 ; num++) { producto = producto * num; } return(producto);
} public static void main(String[] args) throws IOException{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); System.out.println("Introduce un numero: "); int num = Integer.valueOf(in.readLine().trim()).intValue(); System.out.println("………… "+num+" es "+ factorial(num));
} }
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 3
Apartado 2.- Analiza el código con el fin de determinar el enunciado asociado al flujo de control. (0.75p)
3. ¿Qué resuelve el método? (0.25p):
public boolean z(int h) {
int d=1; int w=0; while(d < h) { w+= h%d==0?d:0; d++; } return h==w?true:false;
}
4. ¿Qué resuelve el método? (0.25p):
public int z(int [] h) {
Arrays.sort(h); return h[0]+h[h.lenght-1];
}
5. ¿Qué resuelve el método? (0.25p):
public int z(int [] h) {
int x=0; for(int i=0; i<h.length; x+=h[i++]); return x/h.length;
}
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 4
Apartado 3.- Ejercicios para mejorar la calidad del código java proporcionado. (1.5p)
6. Qué se añadiría para mejorar -robustez- el código que se proporciona (0.5p):
public class Dispositivo {
private Instruccion[] cola; // vector de instrucciones private int numInstrucciones; // número de instrucciones en el dispositivo // Constructor con tamaño inicial proporcionado por el usuario public Dispositivo (int limite)
{ this.cola=new Instrucción[limite]; this.numInstrucciones=-1; }
7. Qué se añadiría para mejorar -robustez- el código que se proporciona (0.5p):
public class Usuario Atributos:
public String email; public double [] aficiones;
Métodos: void Usuario(String correo) {…} public void setAficion (double aficion, int indice) {…} public double getAficion (int indice) {…} public double grado_afinidad(Usuario a) public Usuario pedir_amistad(Usuario a[])
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 5
private double calcular_medio_aficion(Usuario a[],int indice_afi) { /* devuelve el valor medio que tienen unos usuarios respecto a una determinada afición. Las aficiones se representan con un vector double[20].*/
double vm=0.0; for(int i=0;i<a.length;i++) {
vm+=a[i].aficiones[indice_afi]; } return vm/a.length;
}
Recordatorio para la creación de Excepciones: public class Error01Exception extends Exception {
public Error01Exception(String mensaje) {
super(mensaje); }
}
Para lanzarlo: throw new Error01Exception("XXXXXXXXXXXXXX");
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 6
Apartado 4.- Rellena el cuerpo de los siguientes métodos nuevos y resueltos de proyectos Netbeans de cursos
anteriores. (5.5p)
8. Clase Java que represente un Dispositivo:
public class Instrucción {
private String codigo; // nombre de la instrucción public int prioridad; // prioridad de la instrucción public long tiempo; // instante en el que se invoca la instrucción // Contructor de inicializar cada uno de los atributos de una instrución public Instruccion (String codigo, int prioridad, long tiempo) { ... } // Devuelve el código/nombre de la insrtucción. Por ejemplo podría devolver “SUM” public String getCodigo () {…. } // Método que compara dos instrucciones devolviendo true si ambas tienen el mismo código/nombre de acción public boolean compareToIntruccion (Instrucción aux){…}
} public class Dispositivo {
private Instruccion[] cola; // vector de instrucciones private int numInstrucciones; // número de instrucciones en el dispositivo // Constructor tamaño inicial de 100 public Dispositivo () { this.cola=new Instrucción[100]; this.numInstrucciones=-1; } // Constructor con tamaño inicial proporcionado por el usuario public Dispositivo (int tama_max) { …}; // Método que se ejecuta cuando se quiere introducir una instrucción public void putInstruccion (Instruccion i) { ... } // Método que determina cuantas instrucciones son del nombre/código “XX” public int count_codigo (String codigo) { ... } // Método que ejecuta una instrucción. public void ejecutarInstruccion(){….} public int pos_mayor prioridad () {/* Devuelve la posición de la instrucción con mayor prioridad. Si el sistema está vacío devuelve -1} public void ejecutarInstruccion(int pos){ /*Método que ejecuta la instrucción que ocupa la posición p. La ejecución de la instrucción cola[p] implica simularlo mostrando por pantalla las instrucción y a continuación desplazando todas la siguientes una posición a la izquierda y actualizando el valor de numInstrucciones. Si no hay instrucciones debe aparecer por pantalla “dispositivo vacío” */} public Dispositivo mayor_carga (Dispositivo [] aux) {/*Método que devuelve el dispositivo con mayor número de instrucciones a ejecutar */}
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 7
public void exec_MAX_Prioridad(){ Ejecutar la instrucción de máxima prioridad} public void exec_DISPOSITIVO_Mcarga(Dispositivo [] aux){ } // Ejecutar la instrucción del dispositivo de mayor carga!!!! public Dispositivo count_Mcodigo (String codigo, Dispositivo [] aux) { } // Método que determina qué dispositivo tiene el mayor número de instrucciones son “XX”.
}
public Dispositivo mayor_carga (Dispositivo [] aux) { (0.5p) M1 /*Método que devuelve el dispositivo con mayor número de instrucciones a ejecutar */ } // Fin del new método
public int ejecutarCodigoInstruccion (String codigo) { (0.5p) M2 // Método que ejecuta la instrucción perteneciente a la primera aparición de la instrucción con código “XX”. S el dispositivo está vaco devuelve -1, sino se ha encontrado una instrucción con está características devuelve -2 y si ha podido realizar el proceso devuelve 0. } // Fin del new método
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 8
9. Implementa los métodos de la clase CajeroAutomático:
public class Operacion {
private String nTarjeta; // número de la tarjeta public String operacion; // tipo de operación por ejemplo VERSALDO public int cantidad; // Cantidad monetaria retirada en una operación de RETIRAR // Contructor de inicializar cada uno de los atributos de una instrución public Operacion (String nt, String op) { ... } // En este caso la cantidad tendrá un valor de -1 euros public Operacion (String nt, String op, int cantidad) { ... } // Devuelve el código de la operación. public String getOperacion () {…. }
} public class CajeroAutomatico {
public Operacion[] cola; // vector de operaciones private int numTransacciones; // número de instrucciones en el dispositivo // Constructor tamaño inicial de 100 public CajeroAutomatico () { this.cola=new Operacion[100]; this. numTransacciones =0; } // Constructor con tamaño inicial proporcionado por el usuario public CajeroAutomatico (int tama_max) { …}; // Método que incorpora una operación al sistema public void putTransacciones (Operacion i) { ... } // Método que determina cuantas operaciones ha realizado una trajeta public int count_operaciones(String nt) { ... } // Método que dado una tarjeta determina la cantidad total de dinero retirada.
public int cantidadRetirado(String nt){….} public String mayorRetirada(String [] nt) { ... } /*Método que dado un vector de tarjetas de crédito determina y devuelve aquella que ha retirado más efectivo. */
}
public int cantidadRetirada(){….}// (0.5p) M3 /*Método que devuelve la cantidad de dinero retirado y por tanto la suma de las cantidades en operaciones RETIRADA. */
{
} // Fin del new método
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 9
public CajeroAutomatico cajeroMaximaRetirada(CajeroAutomatico [] banco)// (0.5p) M4 /*Método que devuelve el cajero automático donde se ha retirado una total mayor cantidad monetaria. */ {
} // Fin del new método
10. Escriba los métodos que se proponen de la clase Usuario:
Cada usuario se representará mediante un objeto, que contiene su dirección de correo electrónico y un array de 20 números reales entre 0.0 y 1.0, que indican el interés del usuario respecto a 20 aficiones diferentes.
Atributos:
public String email; public double [] aficiones;
Métodos: void Usuario(String correo) {…} public void setAficion (double aficion, int indice) {…} public double getAficion (int indice) {…} public double grado_afinidad(Usuario a) public Usuario pedir_amistad(Usuario a[]) private double calcular_medio_aficion(Usuario a[],int i) public Usuario usuario_medio(Usuario a[])
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 10
public Usuario pedir_amistad(Usuario a[]) { // (0.5p) M5 /* Devuelve el Usuario que tiene mayor afinidad conmigo. La afinidad es una valor entre 0.0 y 1.0, determinamos que la mayor afinidad en cuanto más cercano es el valor calculado a 0.0*/
} // Fin del new método
public double grado_afinidad_usuario_medio(Usuario a[]) { // (0.5p) M6 // Determina el grado de afinidad entre yo y el usuario medio de un grupo de personas
} // Fin del new método
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 11
11. Implementa los métodos de laclase Paquete y de la clase Router:
Clase Ip: Atributos:
public int x: 0..255 // x.168.1.250 public int y: 0..255 // 192.y.1.250 public int w: 0..255 // 192.168.w.250 public int z: 0..255 // 192.168.1.z
Métodos public Ip (int ax,int by,int cw,int dz) {…} public boolean compareToIp (Ip aux) {…}
Clase Paquete que modela el datagrama a nivel ip: Atributos:
public Ip ip_origen: ip de origen del datagrama public Ip ip_destino: ip de destino del paquete de información public int QoS: factor de calidad del servicio -0,1..5- public int saltosmax: número máximo de saltos o router transitados
Métodos public Paquete(Ip origen,Ip destino,int calidad,int saltos) {…} public boolean compareToPaquete(Paquete aux) {…} private boolean es_claseABC(int cod) {…} // int cod [1: clase A, 2: clase B, 3: clase C] public int cantidad_paquetes_Clase_ABC (Paquete []a, int clase) {…} //Determina cuantos paquetes son de la clase a la que se pregunta
public int cantidad_paquetes_saltos (Paquete []a, int nsaltos) { // (0.5p) M7 //Determina cuantos paquetes tienen un número menor en el atributo this.saltosmax respecto al propocionado como parámetro.
} // Fin del new método
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 12
Clase que modela un Router: Atributos: public String marca_route; public Ip ip_route; public Paquete [] in: // Buffer de entrada de paquetes public Paquete [] out: // Buffer de salida de paquetes public int np_int: //número de paquetes ip que están a la espera de entrar public int np_out: //número de paquetes ip que están a la espera de salir La clase Router tendrán las método: un constructor : se definir un buffer de un buffer in/out con tamaño máximo de 20 public boolean llenoRouterIn() {…} public boolean vacioRouterIn() {…} public void put_int(Paquete a) {…} public Paquete get_int() {…} // Obtiene el in[0] despalzando los siguientes una pos public int numero_paquetes_Iporigen_in(Ip origen) {…} public int numero_paquetes_QoS_in(int q) {…} public int [] numero_paquetes_tipos_QoS_in(){…} // numero de paquetes para cada tipo de valores QoS 0,1..5 public Router mayor_paquetes_QoS_in(Router [] a, int q) { // Devuelve el router con mayor número de paquetes in (entrada) de calidad q proporcionada por parámetro public int vaciosRouterIn(Router [] a) { // Devuelve cuantos router están vacios en la entrada de su sistema
public Router mayor_paquetes_QoS_in(Router [] a, int q) { // (0.5p) M8 // Devuelve el router con mayor número de paquetes in (entrada) de calidad q proporcionada por parámetro
} // Fin del new método
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 13
12. Implementa los métodos para la Clase ExamenTest que permita la corrección de los exámenes tipo test de los alumnos del curso de 2ºASIR (1.5p)
package examen_2016_2017;
/*
Clase que representa las respuesta de un examen
tipo test.
*/
public class ExamenTest
{
//Atributos:
public String dni; // El dni del alumno
public int quita; // n mal quitan 1 bien
public int [] respuestas;
/* [0] guarda la respuesta de la primera pregunta,
[1] guarda la respuesta de la segunda respuesta, ......
Las respuestas pueden ser 1,2,3 o 4 (si es 1 equivale a seleccionar A ....)
Si no se contesta una cuestión de almacenará un -1
*/
public ExamenTest(String d, int [] res) { // para la quita pondremos 0 }
public ExamenTest(int q, int [] res) { // para el dni será null y quita 0 }
public int n_preguntas_mal(ExamenTest alumno) { // Cuantas preguntas del examen
pasado como parámetro están mal respecto a this }
public int n_preguntas_bien(ExamenTest alumno) { // Cuantas preguntas del
examen pasado como parámetro están bien respecto a this }
public double nota (ExamenTest alumno) { // Nota que ha sacado el alumno pasado
como parámetro }
public String mejorAlumno (ExamenTest [] alumnos) { // Se devuelve el alumno con
mejor calificación
}
}
public double notaMedia (ExamenTest [] alumnos) { (0.5p) M9 // Devuelve la nota media de los alumnos para el examen tipo test
} // Fin del new método
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 14
Suponemos que tenemos este método: public ExamenTest mejorExamenTest (ExamenTest [] alumnos) { // Se devuelve el examen con mejor calificación }
public double notaMejorExamen(ExamenTest [] alumnos) { (0.5p) M10 // Devuelve la nota del mejor examen realizado
} // Fin del new método
13. Implementa los nuevos métodos a la clase InterpreteComandos que permite simular la ejecución de comandos Ubuntu
package examen_2016_2017;
public class Comando
{
//Atributos:
public String cmd; // es el comando como por ejemplo ls
public String parameter; // parámetros del comando
public int modo; // modo de ejecución
public int n_parameter; // número de parámetros que se pasan al comando
public Comando (String c, String p, int m, int np) (0.25p) //método 1 { }
public boolean compareToComando (Comando aux) (0.25p) //método 2 { }
}
package examen_2016_2017;
/* Clase que representa una secuencia de
comandos enviados al sistema para ser ejecutados.*/
public class InterpreteComando
{
//Atributos:
public Comando [] buffercmd; // Lista de comandos a ejecutar
public int pos; // Posición del último comando a ejecutar
public InterpreteComando() (0.25p) //método 1 { // Por dejecto la capacidad del Interprete será de 10 comandos y pos=0
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 15
}
public InterpreteComando(int capacidad) (0.25p) //método 2 { // La capacidad del Interprete la proporciona el usuario y pos=0
}
public boolean llenoInterprete() (0.25p) //método 3 { // Devuelve true si no puede almacenar más comandos
}
public boolean vacioInterprete() (0.25p) //método 4 { // Devuelve true si no hay comando para ejecutar
}
public boolean ejecutarComando(Comando aux) (0.25p) //método 5 { // Añade el comando proporcionado al final del interprete devolviebndo true. Sino
// puede añadirse por estar lleno se devolverá un false
}
public Comando buscarComando(String cmd) (0.25p) //método 6 { // Devuelve el primer comando donde coincida su cmd y el cmd pasado por parámetro.
// Sino existe dicho comando devolverá null
}
public int numero_comando_modo(int modo) (0.25p) //método 7 { // Devuelve la cantidad de comando del modo indicado
}
}
public int numeroInterpretesVacios (InterpreteComando [] cmds) (0.5p) M11 { // Devuelve el número de interpretes que no tienen comando para ejecutar
} // Fin del new método
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 16
Apartado 5.- Cuestionario Tipo Test
14. Cuestionario tipo test (2 mal quitan 1 bien): (1.5 puntos)
1) ¿ Qué ocurre cuando se compila y ejecuta la siguiente clase ?
class MiClase { public static void main (String[] args) { String s1[] = new String[5]; String str = s1[0].toUpperCase(); System.out.println(str); } }
a. Imprime NULL. b. Da un error al compilar. c. Imprime null. d. Da una excepción NullPointerException al ejecutar.
2) Qué se escribe por pantalla con la siguiente línea de código: System.out.println ((int)
Math.PI); a. 3.1415926 b. 3 c. nada, hay un error al compilar. d. nada, hay un error durante la ejecución.
3) Dada la siguiente definición: ¿Cuál debería ser el contenido del constructor?
class Temperatura {
double t; Temperatura(double t) { ¿? } }
a. t=t;
b. double t=t; c. this.t=t; d. No se puede llamar igual el parámetro del constructor que el atributo de la clase
4) "for (x= 5; x <100; x*= 2) { cosas; }" es equivalente a ...
a. x= 5; do { cosas; x*= 2; } while (x <100); b. x= 5; while (x <100) { cosas; x*= 2; }
5) 2. Dado el siguiente fragmento de programa: Indique que afirmación es cierta:
int k; for (k=5 ; k>0 ; k--)
System.out.print(k); System.out.print(k);
a. Se imprime 543210 b. Se imprime 5432100 c. Se imprime 554433221100 d. Se imprime 543210-1
6) Indique el elemento que no es obligatorio en una declaración de variable:
a. La asignación del valor inicial. b. El identificador o nombre. c. El punto y coma.
d. El tipo.
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 17
7) Indique la salida de:
int a= 7, b= 3; System.out.println ((++a) * b);
a. 24 b. 21
c. 10
d. 73
8) Evalúe el valor final que toma la variable "s":
int n= 1; s= 0;
while (n <= 9) s+=n;
a. 45 b. 0 c. 9 d. el programa no termina nunca
9) ¿ Qué imprime este programa ? int metodo (int v1) { return v1*v1; }
……… int v = 3; System.out.print (metodo (metodo (v))); ...
a. Tiene errores que impiden su compilación b. 9 c. 81
d. Compila; pero tiene errores que impiden su ejecución
10) ¿Qué se imprimirá al ejecutar el siguiente bucle? for (int i=0; i < 5; i++) { if (i==3) { i=5; } System.out.println (i + " ");
}
a. 0 1 2 3 4 b. 0 1 2 5 c. 0 1 2 4 d. 0 1 2
11) Indique qué ocurre con el siguiente código:
int a[] = new int[10]; for (int i=0 ; i<=a.length ; i++) System.out.print(a[i]);
a. Error de ejecución: índice fuera de rango. b. Error de compilación: no se asignaron valores al array. c. Escribe los 10 valores almacenados en a. d. Escribe 10 ceros.
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 18
12) Indique qué escribe una llamada al método m() void m() { int x = 0; try { System.out.print(x++); if (x>0) throw new Exception();
System.out.print(x++); } catch (Exception e) { System.out.print(x++); } finally { System.out.print(x++); } }
a. 012 b. 0 c. 01
d. 0123
13) Dados los siguientes fragmentos de código: class ClaseC { public void fmet (int i) { ... }
public int fmet (int i) { ... } } ... ClaseC c = new ClaseC(); c.fmet(4);
Se produce:
a. la llamada al primer método fmet. b. la llamada a ningún método porque hay sobrecarga. c. un error al compilar. d. un error al ejecutar.
14) Dado el método "imprime": void imprime (boolean ok) { System.out.println ("La respuesta " + (ok?"NO":"") + " está mal"); } ¿qué imprime la llamada imprime(false)?
a. La respuesta está mal
b. La respuesta NO está mal c. Se produce un error de compilación
15) En una sentencia try-catch-finally:
a. Los bloques catch se pueden repetir tantas veces como excepciones de distinto
tipo se desee atrapar. El bloque finally debe aparecer al menos una vez y se ejecuta siempre.
b. Los bloques catch se pueden repetir tantas veces como excepciones de distinto tipo se desee atrapar. El bloque finally no es opcional y se ejecuta siempre.
c. Los bloques catch se pueden repetir tantas veces como excepciones de distinto tipo se desee atrapar. El bloque finally es opcional y solo puede aparecer una vez. Este bloque se ejecuta siempre.
d. Todas las afirmaciones son falsas
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 19
Unidad 3
Programación Orientada a Objetos. Programación
JAVA. Parte II (2.5p)
15. Implementa la Clase ProgramaJava(1.50p)
package examen_2017_2018.programacion;
/*
Clase que representa un programa Java.
*/
public class ProgramaJava // (1.50p) 6 métodos
{
//Atributos:
public String [] lineas_codigo;
public int numero_lineas;
public int modo_ejecucion;
public String path;
public String [] argumentos;
public int numero_argumentos;
//---------------------------------------------------------------------------------------
//Métodos: Constructor
//---------------------------------------------------------------------------------------
public ProgramaJava (int modo,String path) // (0.25p) método 1
{
/* Se inicializa los atributos y se considera que la longitud del vector
de líneas de codigo es 10 y el vector de argumentos es 3.
numero_lineas=0 y numero_argumentos=0
*/
}
//---------------------------------------------------------------------------------------
// Otros métodos
//---------------------------------------------------------------------------------------
public void insertar_linea(String l) // (0.25p) método 2
{ // Añade al final del vector de líneas de código una nueva.
}
public int contar_tokens(String inst) // (0.25p) método 3
{
/* Determina por ejemplo cuantos for hay en nuestro programa ¿Cuántas líneas hay un for??.
Utiliza el método contains de la clase String.
Ejemplo: aux.contains("int") dada la variable String aux,
esta expresión es true si contiene el String literal "int".
*/
}
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 20
public void sustituir_linea_codigo(String l,int pos) // (0.25p) método 4
{ /* Reemplaza la linea que se encuentra en [pos] por la
que se ha pasado como parámetro.
Se valorará la robustez del método.*/
}
@SuppressWarnings("empty-statement")
public boolean compareToProgramaJava(ProgramaJava aux)// (0.25p) método 5
{ /*
2 programas son iguales si tienen el mismo
número de líneas, así como su contenidos.
Recuerdo que para comparar dos String tenemos el método compareTo() que
devuelve un 0 se son String son iguales.*/
}
@Override
public String toString() // (0.25p) método 6
{ /* Devolver para println() las líneas que componen el programa en MAYÚSCULAS
Utiliza la clase StringBuffer y su método append. Véase el método ejecutar
en el examen del Dispositivo.*/
StringBuffer resul=new StringBuffer();
resul.append("VISUALIZACIÓN:").append("\n");
}
/* Al ejecutar el main debe obtenerse:
VISUALIZACIÓN:
BUFFEREDREADER IN=NEW BUFFEREDREADER(NEW INPUTSTREAMREADER(SYSTEM.IN));
SYSTEM.OUT.PRINTLN("INTRODUCE UN NUMERO: ");
INT NUM = INTEGER.VALUEOF(IN.READLINE().TRIM()).INTVALUE();
INT PRODUCTO = 1;
FOR (; NUM>1 ; NUM--)
{
PRODUCTO = PRODUCTO * NUM;
}
SYSTEM.OUT.PRINTLN("………… "+NUM+" ES "+ PRODUCTO);
VISUALIZACIÓN:
BUFFEREDREADER IN=NEW BUFFEREDREADER(NEW INPUTSTREAMREADER(SYSTEM.IN));
SYSTEM.OUT.PRINTLN("INTRODUCE UN NUMERO: ");
INT NUM = INTEGER.VALUEOF(IN.READLINE().TRIM()).INTVALUE();
INT PRODUCTO = 1;
FOR (; NUM>1 ; NUM--)
{
PRODUCTO *= NUM;
}
SYSTEM.OUT.PRINTLN("………… "+NUM+" ES "+ PRODUCTO);
El número de tokens es: 1
El número de tokens es: 2
SON IGUALES
NO SON IGUALES
*/
}
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 21
Implementa la CalculadoraAsir(2.25p) package examen_2017_2018.estadistica;
public class ExpresionAritmetica // (0.75p) 3 métodos
{
//Atributos:
public String expresion; // "3+5*5-4"
public int numero_operadores; // sería para el caso anterior 3 [+,*,-]
public int numero_operandos; // sería para el caso anterior 4 [3,5,5,4]
public static final String [] OPERADORES_NO_VALIDOS={"/","%"};
//Métodos:
public ExpresionAritmetica (String expre, int n_operadores, int n_operandos) // (0.25p) método 1
{ // Inicializa los atributos, menos la constante de operadores no validos.
}
public boolean compareToExpresion (ExpresionAritmetica a) // (0.25p) método 2
{ // determina si la expresion pasada como parámetro es igual a la this.expresion
}
@SuppressWarnings("empty-statement")
public boolean es_expresion_valida () // (0.25p) método 3
{ /* Devuelve false si contiene al menos un operador no válido.
Utiliza el método de los String aux.contains(String) de devuelve true si
la secuencia o String proporcionado no está en el texto/String contenido
en la variable aux.
Para referenciar al vector constante de operadores no validos hay que
hacerlo así: ExpresionAritmetica.OPERADORES_NO_VALIDOS[i] i:0..length-1
y su longitud sería así: ExpresionAritmetica.OPERADORES_NO_VALIDOS.length
*/
}
}
package examen_2017_2018.estadistica;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/*
Clase que representa una secuencia de comandos enviados al sistema para ser ejecutados.
*/
public class CalculadoraAsir // (0.75p) 3 métodos + (1.5p) 6 métodos = (2.25p) 9 métodos
{
//Atributos:
public ExpresionAritmetica [] buffercalculadora; // Lista de expresiones a evaluar
public int pos; // Posición de la última expresion a evaluar
//Métodos:
Profesor: Juan Antonio López Quesada.
Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 22
public CalculadoraAsir() // (0.25p) método 1
{ // Por defecto la capacidad de la calculadora será de 10 y pos=0
}
public CalculadoraAsir(int capacidad) // (0.25p) método 2
{ // La capacidad de la calculadora la proporciona el usuario y pos=0
}
public int estadoCalculadoraAsir() // (0.25p) método 3
{ // Devuelve 1 si está lleno, 2 si está vacio, 3 en otro caso.
}
public boolean agregarExpresion(ExpresionAritmetica aux) // (0.25p) método 4
{ // Añade una nueva expresion al final devolviendo true. Sino
// puede añadirse por estar lleno se devolverá un false
}
public void evaluarExpresion(int pos) throws ScriptException // (0.25p) método 5
{ /* Visualiza el resultado de evaluar la expresion
que se encuentra en [pos] -se considerará la robustez-.
Si dicha expresión no es válida de mostrará el mensaje pertinente.
Para evaluar expresiones engine.eval("3+5");
*/
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
}
@SuppressWarnings("empty-statement")
public boolean existeEqualExpresion(ExpresionAritmetica aux) throws ScriptException // (0.25p)
método 6
{ /* Devuelve true si existe al menos una expresion
en la calculadora cuya evaluación coincida con la evaluacion
del parámetro proporcionado.
No vamos a tener en cuenta la validez de las expresiones en la calculadora.
*/
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
}
/* Al ejecutar el main debe obtenerse:
Las dos expresiones son iguales
Las dos expresiones son diferentes
La expresión es válida
La expresión no es válida
El resultado de evaluar la expresion [3+3*5] es:18
El resultado de evaluar la expresion [3/140*5] es:Expresión no válida
El resultado de evaluar la expresion [10+3*5+3] es:28
El resultado de evaluar la expresion [4+3*5] es:19
El valor de la expresion no existe en la calculadora.
El valor de la expresion si existe en la calculadora.
*/
}