Problemas
Para el Control 1
Problema 1 (Problema 1, Control 1 1998)
Un alumno de la escuela de
ingeniería quiere tener un programa para entretenerse cuando esté frente al
computador pero no tenga nada que hacer. Así es como se le ocurrió que podía
escribir un programa sencillo para jugar al ca-chi-pun contra el computador. El
diálogo que debe tener el jugador con la máquina debe ser el siguiente:
Significado:
1-papel,2-tijeras,3-piedra
ca-chi-pun? 2
computador juega 3
Cuenta:
persona 0 computador 1
ca-chi-pun? 2
computador juega 1
Cuenta :persona 1 computador
1
ca-chi-pun? 3
computador juega 3
Cuenta:
persona 1 computador 1
Como puede ver, el principio el
computador debe indicar que significan los números (sólo 1 vez) luego debe
pedir la jugada de la persona y generar ALEATORIAMENTE su jugada escribiendo un
número entre 1 y 3 y esa es su jugada. Con ambas jugadas se debe actualizar la
cuenta. En caso de empate no se le da un punto a nadie. El juego termina cuando
uno de los jugadores (la persona o la máquina) llega a 10 puntos. Se le pide a Ud. que escriba en JAVA el programa que permita jugar de
esta manera.
Indicación: recuerde que el método Math.ramdom()
devuelve un valor real entre [0 y1[
Problema 2 (Problema 1, Control 1 1999)
El juego de las piedras consiste en
que dos jugadores contrincantes extraen de un montón de piedras hasta acabar
con él. Pierde el jugador que extrae la última piedra. La regla es que un
jugador sólo puede extraer 1, 2 o 3 piedras cada vez. El montón tiene
inicialmente entre 10 y 40 piedras.
Escriba un programa que arbitre el
juego de las piedras. Inicialmente debe generar aleatoriamente
el número de piedras con la función random y mostrar
el tamaño del montón colocando un * por cuantas piedras saca, mostrando a
continuación en una línea de la pantalla el tamaño del nuevo montón. El
programa debe señalar quién es el vencedor cuando se extrae la última piedra.
Un ejemplo del diálogo que debe mantener el
programa con los jugadores es el siguiente:
***********
Cuantas piedras
saca el jugador 1? 3
********
Cuantas
piedras saca el jugador 2? 1
*******
Cuantas piedras saca el jugador 1? 6
No puede sacar más de 3 piedras.
Cuantas
piedras saca el jugador 1? 3
****
Cuantas
piedras saca el jugador 2? 3
*
Cuantas piedras saca el jugador 1? 0
Tiene que sacar al menos 1 piedra.
Cuantas piedras saca el jugador 1? 1
El ganador es el jugador 2. Felicitaciones!
Durante el
juego, su programa debe verificar:
· Que un jugador no saque más de 3
piedras.
· Que un jugador saque al menos una
piedra.
· Que un jugador no saque más piedras
de las que hay.
Problema 3 (Problema 1, Control 1 2001)
Tres
números enteros positivos a, b y c se consideran pitagóricos si cumplen con la
relación a2+b2=c2. Por ejemplo 3, 4 y 5 son
pitagóricos puesto que 32+42=52. Nótese que si
los números representan las longitudes de los lados de un triángulo, entonces
forman un triángulo rectángulo de catetos a y b e hipotenusa c.
Al
respecto, escriba un programa que lea el valor de la hipotenusa y busque los
valores de los catetos del triángulo rectángulo correspondiente, siguiendo el
diálogo indicado en el siguiente ejemplo:
Determinar
catetos de triangulo rectángulo
Ingrese
valor de hipotenusa: 10
Catetos
= 6 8
En
caso que no se puedan obtener valores enteros para los catetos debe responderse
"Catetos no son enteros".
Problema 4 (Problema 2, Control 1 2001)
a) Escribir un método (función) de encabezamiento
static public String borrar(String x, String y)
que elimine todas las apariciones de x en y. Por
ejemplo, la invocación borrar("bra","abracadabra") entrega el string "acada".
b) Utilice el método anterior en un programa que
lea todas las líneas de un archivo y las grabe en otro archivo eliminando todas
las apariciones de los strings ":-)" y ":-(". El programa debe obtener el
nombre del archivo de entrada siguiendo el diálogo indicado en el siguiente
ejemplo:
Nombre
de archivo de entrada ? carta
El resultado quedará en el
archivo carta.out
Problema 5 (Problema 1, Control 1 2002)
Al dividir dos números enteros
positivos se puede obtener un resultado con una cantidad determinada de
decimales. Al respecto, escriba un programa que siga el diálogo siguiente:
Ingrese el dividendo : 22
Ingrese el divisor : 7
Ingrese la
cantidad de decimales del resultado : 20
Nota. Los
dígitos de la parte decimal se obtienen sucesivamente del resultado de la
división entera entre el resto o residuo anterior (multiplicado por 10) y el
divisor.
|
dividendo |
22 |
10 |
30 |
20 |
60 |
40 |
50 |
10 |
30 |
20 |
60 |
40 |
50 |
10 |
30 |
20 |
60 |
40 |
50 |
10 |
30 |
|
cuociente |
3 |
1 |
4 |
2 |
8 |
5 |
7 |
1 |
4 |
2 |
8 |
5 |
7 |
1 |
4 |
2 |
8 |
5 |
7 |
1 |
4 |
|
resto |
1 |
3 |
2 |
6 |
4 |
5 |
1 |
3 |
2 |
6 |
4 |
5 |
1 |
3 |
2 |
6 |
4 |
5 |
1 |
3 |
2 |
Problema 6 (Problema 2, Control 1 2002)
a) Escribir la función (método) static public String eliminar(String X,String Y,String Z) que
elimine del string X todos los substrings comprendidos entre
los delimitadores Y y Z. Por
ejemplo, eliminar("a]b[cd]e[f]g[h","[","]")
entrega "a]beg[h".
En caso que el segundo delimitador sea un string
vacío, se deben eliminar todos los caracteres a partir del primer delimitador.
Por ejemplo, eliminar("ab--cd","--","") entrega "ab".
b) Utilice la función eliminar
en un programa que lea líneas y las escriba eliminando los substrings
de la forma <caracteres>
y %caracteres.
Por ejemplo,
"ana
<maria>rios%gonzalez" debe escribirse "ana rios". El fin de los datos
se indica con una línea que contiene sólo </html>.
Archivos
Un periodista que cuenta con el texto de un
diario almacenado en un archivo (llamado diario.txt) quiere saber en cuantas
líneas y en qué contexto esta citado algún personaje que le interesa (como por
ejemplo, algún Salas o Ríos). Para eso se le pide a usted que escriba en
programa que primero lea de la consola un string y luego
imprima para cada línea donde aparece ese string lo
siguiente: la línea anterior, la línea donde aparece y la línea posterior, cada
una precedida por un número que indica el número de línea dentro del archivo.
Ej. en la columna de la izquierda se ve el contenido
del archivo y en la derecha el diálogo en la consola.
Nota: Tenga presente que si el string se encuentra en la 1º o última línea entonces sólo
deben mostrarse 2 líneas.
Indicación: Tome el chequeo de la primera y
última línea como casos particulares. Para el resto use un ciclo.
En
el último partido de la selección Ingrese
palabra a buscar: Zamorano
chilena en la cual la selección
uruguaya 3no clasificada para el
mundial, empató a 2
no clasificada para el mundial, empató a 2 4goles, Zamorano, sin estar en uno
de sus
goles, Zamorano, sin estar en uno de sus 5mejores días hizo el primer gol de
nuestra
mejores días hizo el primer gol de
nuestra 7indicar que el
resultado del partido favorecería
selección, momento en el cual todo
parecía 8ampliamente a Chile
recordemos que Zamorano
indicar que el resultado del
partido favorecería 9había perdido un
penal en el partido anterior contra
ampliamente a Chile. Recordemos que
Zamorano 9había perdido un penal en el
partido anterior contra
había perdido un penal en el partido anterior
contra 10Argentina, así que seguramente
Zamorano se
Argentina,
así que seguramente Zamorano se 11
sentía obligado a hacer por lo menos un gol.
sentía obligado a hacer por lo menos un gol.
Problema 8 (Problema 3, Control 1 1998)
Siguiendo con el tema del fútbol, un canal de
televisión que va a transmitir los partidos del mundial necesita disponer de la
siguiente tabla que muestra los promedios de edad de los jugadores de los
países participantes.
Nº
del país País(en orden alfabético) Promedio de edad(en años)
1 Alemania xx
... ... ...
32 Zaire xx
Escriba un programa que muestre la tabla
anterior en la pantalla, obteniendo la información desde los siguientes
archivos:
·
“paises.txt”: 32 líneas ordenadas alfabéticamente, cada una con el nombre de un
país.
· “jugadores.txt”:
cantidad indeterminada de líneas, ordenadas alfabéticamente, cada una con la
siguiente información:
- Columnas
1 a 20: nombre del jugador
- Columnas
21 a 28: fecha de naciemiento (en la forma DD/MM/AA)
- Columnas
29 a 30: números del país(entero entre 1 y 32, por
ejemplo 1= Alemania, ..., 32= Zaire).
Indicación: La edad debe calcularse en años al
1 de junio de 1998.
Problema 9 (Problema 2, Control 1 1999)
El archivo notas.txt contendrá los nombres y
las notas de los alumnos en este control, en la forma indicada en los
siguientes ejemplos:
Patricia Fernandez, P1=40, P2=52
Juan Perez,P2=48
Gloria Hernandez, P2=51,P1=50
Jose Urrutia
Hector Gonzalez, P1=70
Observe que la información viene separada por
comas y que el nombre viene siempre en primer lugar.
La nota de cada pregunta del alumnoestá expresada en la forma “Px=nn”, en que x es 1 o 2 y nn es un
número entero entre 10 y 70 (la nota multiplicada por 10). Por ejemplo “P1=55”
o “P2=30”. Estas notas pueden aparecer en cualquier orden. Si la nota de una
pregunta no aparece, entonces se considera con el valor 10.
Escriba un programa que lea el archivo
notas.txt. Cada línea debe contener nombre:xx.yy:zz;
en que xx e yy representan
las notas de las preguntas 1 y 2, y zz debe
calcularse como el promedio redondeado de ambas. Para los ejemplos anteriores,
el archivo producido debe ser:
Patricia
Fernandez:40:52:46
Juan
Perez:10:48:29
Gloria
Hernandez:50:51:51
Jose Urrutia:10:10:10
Hector Gonzalez:70:10:40
Clases
Problema 10 (Problema 3, Control 1 2001)
Para operar con un número
secreto generado por el computador se dispone de la clase Secreto con los
métodos indicados en la siguiente tabla:
|
encabezamiento |
significado |
ejemplo |
|
Secreto(int x,int y) |
Constructor
que calcula y guarda un Nº secreto (entero entre x e y generado al azar) |
Secreto s = new Secreto(10,20) |
|
int comparar(int x) |
-1 si Nº
secreto < x, 0 si Nº secreto = x, 1 si Nº secreto > x |
s.comparar(15) |
|
int menorMasCerca() |
Entrega
el Nº menor más cercano que ha sido comparado con el Nº secreto |
s.menorMasCerca() |
|
int mayorMasCerca() |
Entrega
el Nº mayor más cercano que ha sido comparado con el Nº secreto |
s.mayorMasCerca() |
a) escribir un programa que utilice la clase
anterior para implementar un juego en que el usuario tenga que adivinar un Nº
secreto generado por el computador, siguiendo las reglas y el diálogo indicado
en el siguiente ejemplo:
adivine un Nº X entre 1 y 100
X ?
27 pregunta
X
< 27 respuesta
X ? 15
X
> 15
X ?
0 solicitar ayuda
15
< x < 27 responder con menor y mayor más cercanos
..
X ? 25
X
= 25 Felicitaciones
b) Escriba las instrucciones del método comparar,
considerando la siguiente declaración de la clase Secreto:
class Secreto {
private int secreto, menor,
mayor;
public Secreto(int x,int y) { //constructor
secreto = x + (int)(Math.random()*(y-x+1));
menor = x - 1;
mayor = y + 1;
}
public int menorMasCerca(){ return menor; }
public int mayorMasCerca(){ return mayor; }
public int comparar(int x){ . . .}
}
Problema 11 (Problema 3, Control 1 2002)
. La siguiente tabla muestra los
métodos de una clase (Dia) que permite realizar
operaciones con los días de una semana:
|
Encabezamiento |
ejemplo |
resultado |
|
Dia(int x) // 1 £ x £ 7 |
Dia a = new Dia(1); |
objeto
que representa el día lunes |
|
Dia mañana() |
a.mañana() |
objeto
que representa el día de mañana |
|
int comparar(Dia x) |
a.comparar(b) |
1 si
los objetos son iguales (0 si distintos) |
|
String nombre() |
a.nombre() |
“lunes”
o “martes” o ... “domingo” |
A)Utilice la clase anterior en un programa que muestre el calendario de un mes
siguiendo el diálogo:
B) Escriba la clase Dia, suponiendo la declaración: class Dia{ private int d; ...}