Boletín de problemas 5: Ejercicios de secuencias

Anuncio
FUNDAMENTOS DE PROGRAMACIÓN
BOLETÍN DE PROB LEMAS 5: EJ ERCICIOS DE S ECUENCIAS
Curso: 2011/12
Versión: 1.0.0
OBJETIVOS
Aprender a implementar métodos e invocarlos (paso de parámetros).
Afianzar los diferentes usos del for clásico y el for extendido.
Reforzar la declaración, inicialización y operaciones con arrays, listas y cadenas.
EJERCICIO 1: CLASE ENTEROS
En este ejercicio vamos a incorporar nuevos métodos públicos y estáticos en la clase
Enteros del paquete fp.utiles creada en el EJERCICIO-2 del boletín 3. Los métodos
serán los siguientes:
a) public static Integer[] iniArray (Integer tam)
que devuelva un array de tamaño tam donde cada elemento es igual a su
posición natural (índice+1). Advierta que debe: 1º declarar y dimensionar un
array llamado result con capacidad para tam elementos; 2º usar el for clásico
de tal forma que en cada iteración se le de valor al i-ésimo elemento de result
(result[i]=i+1); y 3º devolver el array (return result).
b) public static Double sumaElementos(List<Double> numeros)
que devuelva la suma de todos los elementos de la lista numeros. Advierta que
debe usar el for extendido de forma que en cada iteración se sume un elemento
de la lista a una variable local inicializada a 0.
c) public static Double media(List<Double> numeros)
que devuelva la media aritmética de todos los elementos de la lista numeros.
Utilice el método sumaElementos anterior y el método size del tipo List.
d)
Observe el siguiente bloque de código:
{
List<Integer> lista = Arrays.asList(arrayInicial);
Collections.reverse(lista);
Integer[] arrayAlReves = lista.toArray();
}
Tras dichas sentencias, arrayAlReves equivale al inverso de arrayInicial (los
mismos elementos en orden inverso). Utilice el for clásico para llevar a cabo un
procedimiento equivalente, implementando el siguiente método:
public static Integer[] arrayInverso(Integer[] numeros)
e) public static List<Double> listaInversa(List<Double> numeros)
que como análogo al método anterior devuelva una lista equivalente la lista
numeros pero “al revés”. Utilice ahora el for extendido y el método add(p,e)
del tipo List que añade el elemento e en la posición p.
Bolet ín de problemas 5: Ejercicios de secuencias
2
f) public static List<Integer> primosMenores(Integer n)
que devuelva una lista con todos los números primos menores que n. Utilice el
for clásico y el método implementado en el apartado d) del ejercicio 2 de l
boletín 3.
EJERCICIO 2: CLASE CADENAS
En este ejercicio vamos a crear la clase de utilidad Cadenas dentro del paquete
fp.utiles y añadirle los métodos públicos y estáticos siguientes:
a) public static Integer cuentaVocales(String cad)
que devuelva el número de vocales que aparecen en cad. Puede usar tanto un for
clásico como un for extendido para recorrer los caracteres. Advierta que las
vocales pueden aparecer tanto en mayúsculas como en minúsculas. Considere
los métodos siguientes de la clase String : length, contains, subSequence,
toCharArray, toUpperCase/toLowerCase.
b) public static String invierteCadena(String cad)
que invierta la cadena cad pasada como parámetro. Declare una variable local
result de tipo String inicializada a la cadena vacía ("") y utilice el operador de
concatenación (+) para ir añadiéndole caracteres.
c) public static Integer cuentaApariciones(String cad, char c)
que cuenta el número de apariciones del carácter c en la cadena cad. Utilice los
métodos indexOf y lastIndexOf de la clase String para acotar la búsqueda.
EJERCICIO 3: CLASE FOTOS
En este ejercicio vamos a crear la clase de utilidad Fotos dentro del paquete
fp.utiles y añadirle los métodos públicos y estáticos siguientes:
d) public static
Double cal)
List<Foto>
fotosConCalificacion(List<Foto>
lf,
que devuelve una lista con todas las fotos de lf cuya calificación es cal.
e) public static Foto fotoMasVisitada(List<Foto> lf)
que devuelve la foto de lf con más visitas.
f) public
static
List<Foto>
fotosResolucion(List<Foto>
Integer[] intervaloAncho, Integer[] intervaloAlto)
lf,
que devuelve una lista con todas las fotos de lf con un ancho mayor o igual que
intervaloAncho[0] y menor o igual que intervaloAncho[1] y con un alto
mayor o igual que intervaloAlto[0] y menor o igual que intervaloAlto[1].
Bolet ín de problemas 5: Ejercicios de secuencias
3
Advierta que debe usar un for extendido con un if simple interno el cual tenga
un expresión lógica que represente la condición anterior (operador &&).
EJERCICIO 4: CLASES TEST
a)
Añada en el método main de una clase TestEnteros (en el paquete test)
sentencias que prueben la corrección de los métodos anteriores de la clase
Enteros mostrando el resultado de su invocación en la consola. Por ejemplo las
líneas referentes al primer y último apartado podrían ser:
…
Integer[] miArray = Enteros.iniArray(10);
mostrar("El contenido del array es "+Arrays.toString(miArray));
…
List<Integer> miLista = Enteros.primosMenores(50);
mostrar("El contenido de la lista es "+miLista);
b)
Análogamente, añada ahora en el método main de una clase TestFotos
(también en el paquete test) sentencias que prueben la corrección de los
métodos anteriores de la clase Fotos mostrando el resultado de su invocación en
la consola. Por ejemplo:
…
List<Foto> fotos =
Persona fotografo1
Persona fotografo2
Persona fotografo3
new LinkedList<Foto>();
= new PersonaImpl( …);
= new PersonaImpl( …);
= new PersonaImpl( …);
…
Fecha fecha1 = new FechaImpl(…);
Fecha fecha2 = new FechaImpl(…);
…
Foto
Foto
Foto
Foto
foto1
foto2
foto3
foto4
=
=
=
=
new
new
new
new
FotoImpl("Sevilla",fotografo1,fecha1,…);
FotoImpl("Granada",fotografo2,fecha2,…);
FotoImpl("Córdoba",fotografo3,fecha1,…);
FotoImpl("Almeria",fotografo1,fecha2,…);
…
fotos.add(foto1);
fotos.add(foto2);
fotos.add(foto3);
fotos.add(foto4);
…
List<Foto> mejoresFotos= Fotos.fotosConCalificacion(fotos,10);
mostrar("Hay "+mejoresFotos.size()+" con máxima calificación");
c)
…
Por último, compruebe en una clase TestCadenas los métodos de la clase
Cadenas.
Descargar