Está en la página 1de 6

Guía de Estudio, Taller de Java

Si quieres complementar tus conocimientos, puedes hacerlo utilizando el apunte adjunto de Java o
visitar el sitio http://www.javaya.com.ar.

PROBLEMA
Escribir un inversor de textos y que verifique si la frase es palíndrome. Palíndrome es una estructura
que se escribe al derecho y al revés de la misma manera. Por ejemplo:
Dabale arroz a la zorra el abad
Es una frase palíndrome si eliminamos los espacios (“dabalearrozalazorraelabad”). Escriba la
siguiente interfaz.
Ingrese su frase? Dabale arroz a la zorra el abad
Inverso: daba le arroz al a zorra elabaD
ES PALINDROME

SOLUCIÓN
import java.util.Scanner;

public class EjemploPalindrome {


public static void main(String[] args) {
// Objeto para la lectura de elementos desde el teclado
Scanner input = new Scanner(System.in);

// Solicitud de ingreso de frase


System.out.print("Ingresa una frase?");
String frase = input.nextLine();

// Inversor
String fraseInversa = "";
for(int i=0; i<frase.length(); i++) {
fraseInversa = frase.charAt(i) + fraseInversa;
}
System.out.println("Inverso: " + fraseInversa);

// Eliminador de espacios
frase = frase.replaceAll(" ", "");
fraseInversa = fraseInversa.replaceAll(" ", "");

// Verificador de palíndrome
if (frase.equalsIgnoreCase(fraseInversa)) {
System.out.println("ES PALINDROME");
}
else {
System.out.println("NO ES PALINDROME");
}
}
}
PROBLEMA
El siguiente código calcula el valor del factorial de un número:
public static long factorial(long n) {
return (n-1)*factorial(n);
}

Pero no funciona (se queda colgado). Corrijalo y compruebe que funciona con el siguiente programa
principal:
Scanner input = new Scanner(System.in);
int n = Integer.parseInt(input.nextLine());
System.out.println("El factorial de " + n + " es " + factorial(n));

SOLUCIÓN
import java.util.Scanner;

public class EjemploFactorial {


public static long factorial(long n) {
if (n==0) {
return 1;
}
return n * factorial(n-1);
}

public static void main(String args[]) {


Scanner input = new Scanner(System.in);
System.out.print("Ingrese n?");
int n = Integer.parseInt(input.nextLine());
System.out.println("El factorial de " + n + " es " + factorial(n));
}
}

PROBLEMA
En Timbuktú, existe una tradición para el nombrado de los hijos y corresponde a una regla sencilla
relacionada con el nombre del padre: su apellido utilizar el nombre del padre, con el sufijo -boluna.
Por ejemplo:
Mgere Mgoloboluna (Mgere hijo de Mgolo)

Escriba un programa que dado el nombre del hijo, le entregue el nombre del padre, es decir, que
reproduzca el siguiente diálogo:
Ingrese el nombre del niño? Mgere Mgoloboluna
Mgere es hijo de Mgolo

SOLUCIÓN
import java.util.Scanner;
public class EjemploApellidos {

public static void main (String[] args) {


Scanner input = new Scanner(System.in);

System.out.print("Ingrese el nombre del bebe?");


String nombreCompleto = input.nextLine();

String[] nombre = nombreCompleto.split(" ");


String padre = nombre[1].substring(0, nombre[1].indexOf("boluna"));

System.out.println(nombre[0] + " hijo de " + padre);


}

PROBLEMA
Se quiere ordenar arreglos. Para ello se escribe el siguiente programa:
public class EjemploOrdenamiento {

public static void ordenarArreglo(int arreglo[], int nEls) {


for (int i = nEls - 1; i > 0; i--) {
for (int j = 0; j < i - 1; j++) {
if (arreglo[j] > arreglo[j + 1]) {
arreglo[j] = arreglo[j + 1];
}
}
}
}

public static void main (String[] args) {


int[] arreglo = new int[6];
arreglo[0] = 6; arreglo[1] = 2; arreglo[2] = 9;
arreglo[3] = 1; arreglo[4] = 4; arreglo[5] = 7;

System.out.print("-");
for (int i=0; i<arreglo.length; i++)
System.out.print(arreglo[i] + " - ");
System.out.println();

ordenarArreglo(arreglo, arreglo.length);

System.out.print("-");
for (int i=0; i<arreglo.length; i++)
System.out.print(arreglo[i] + " - ");
System.out.println();

}
El resultado obtenido al ejecutarlo es:
- 6 - 2 - 9 - 1 - 4 - 7 -
- 1 - 1 - 1 - 1 - 4 - 7 –

Indique cuál es el error y corrija el código.

SOLUCIÓN
El problema ocurre en el intercambio de valores del método de burbuja. La solución es:
public static void ordenarArreglo(int arreglo[], int nEls) {
for (int i = nEls - 1; i > 0; i--) {
for (int j = 0; j < i - 1; j++) {
if (arreglo[j] > arreglo[j + 1]) {
int auxiliar = arreglo[j];
arreglo[j] = arreglo[j + 1];
arreglo[j+1] = auxiliar;
}
}
}
}

DESAFÍO PROPUESTO
Realice el intercambio de variables sin utilizar la variable auxiliar.

PROBLEMA
Construir un programa que permita calcular el total de una votación y que simule la siguiente
interfaz de usuario.
Ingrese la cantidad de candidatos? 3
Candidato 1? Bachelet
Candidato 2? Mathei
Candidato 3? MEO

Ingrese la cantidad de mesas? 10

Mesa 1:
Cantidad de votos candidato Bachelet? 10
Cantidad de votos candidato Mathei? 3
Cantidad de votos candidato MEO? 6

Mesa 2:
...

Resultados:
Bachelet: 43,2%
Mathei: 37,1%
MEO: 19,7%
Total de votos emitidos: 353

SOLUCIÓN
import java.util.Scanner;

public class EjemploVotaciones {


public static void main (String[] args) {
Scanner input = new Scanner(System.in);

System.out.print("Ingrese la cantidad de candidatos?");


int cantidadCandidatos = input.nextInt();
input.nextLine();

String[] candidatos = new String[cantidadCandidatos];


int[] votos = new int[cantidadCandidatos];

for (int i=0; i<cantidadCandidatos; i++) {


System.out.print("Candidato " + (i+1) + "?");
candidatos[i] = input.nextLine();
votos[i] = 0;
}

System.out.print("\nIngrese la cantidad de mesas?");


int cantidadMesas = input.nextInt();

for (int i=0; i<cantidadMesas; i++) {


System.out.println("\nMesa " + (i+1) + ":");
for (int j=0; j<cantidadCandidatos; j++) {
System.out.print("Cantidad de votos candidato " +
candidatos[j] + "?");
votos[j] += input.nextInt();
}
}

int totalVotos = 0;
for (int i=0; i<cantidadCandidatos; i++) {
totalVotos += votos[i];
}

System.out.println("\nResultados: ");
for (int i=0; i<cantidadCandidatos; i++) {
System.out.println(candidatos[i] + ": " +
(100*votos[i]/totalVotos) + "%");
}
System.out.println("Total de votos emitidos " + totalVotos);
}
}
DESAFÍO PROPUESTO
Si utilizó un arreglo bi-dimensional (matriz) trate de buscar una forma elegante para usar solo
arreglos unidimensionales (uno para los candidatos y otro para las votaciones).

¿Por qué los % no salen con decimales por más que la operación no de un entero?

Mejore este programa para que luego de ingresada la información, esta se almacene en un archivo
(de texto).

PROBLEMA PROPUESTO
Leonardo de Pisa (1170-1250), mejor conocido como Fibonacci, que significa hijo de Bonaccio, fue
uno de los más grandes matemáticos en la Europa de la edad media, Fibonacci creció en el norte de
África, donde adquirió los conocimientos de las matemáticas avanzadas de los estudiosos árabes.
En 1202 escribe Liber Abaci, el libro del ábaco, texto donde defiende el uso de los números arábigos,
que usamos hoy en día, y explica como sumar, restar, multiplicar y dividir en este sistema, así como
la resolución de otros tipos de problemas sobre algebra y geometría, uno de los cuales es el
siguiente: El problema de los conejos.

”En un patio cerrado, se coloca una pareja de conejos, recién nacidos, para ver cuantos
descendientes produce en el curso de un año, y se supone que cada mes a partir del segundo mes
de su vida, cada pareja de conejos da origen a una nueva pareja".

Para resolver este problema se supondrá adicionalmente, que en este periodo de tiempo, ningún
conejo muere y que la hembra siempre produce una nueva pareja formada por un macho, y una
hembra. También y como la primer parea es recién nacida, y no se reproduce hasta el segundo mes
de vida, al finalizar el primer mes tenemos solo una pareja, pero al finalizar el segundo, se produce
una nueva pareja (f(0) = f(1) = 1).

Con estas premisas y un análisis matemático se llega a la sucesión de Fibonacci:

f(n+2) = f(n+1) + f(n)

Escriba un programa que dada una cantidad de meses (entregada por el usuario), pueda calcular
cuántos conejos habrán al final del perıodo.

También podría gustarte