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

Resultado = 3,14285714285714285714

 

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. Para el ejemplo:

 

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

 

Problema 7 (Problema 2, Control 1 1998)

 

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; ...}