Ejercicio
1: Iniciación a Java
Plazo de
entrega: 2ª semana
Sumérjase
Asegúrese,
antes de empezar a programar, de haber seguido
las instrucciones del material de herramientas entregado,
concernientes al directorio de instalación y
a la utilización de Java. Las lecturas
para todos los boletines de problemas van desde el capítulos
1 hasta el 5 de la 3ª edición del Tutorial
de Java. Las lecturas para los problemas individuales
están indicadas en cada problema.
Si hace supuestos para solucionar
cualquier problema del ejercicio, asegúrese de
que quedan expuestos con claridad en las soluciones.
Los supuestos deben ser coherentes y razonables.
Problema 1: Elementos básicos
del lenguaje [10 puntos]
Lecturas: Elementos básicos
del lenguaje: variables, operadores, expresiones, sentencias
y bloques.
Échele un vistazo al código
que se muestra a continuación bajo en el que
se calcula el radio de un círculo en pies y pulgadas,
teniendo en cuenta que el círculo tiene un área
determinada. Descargue
el código fuente
public class MathCalc
{
public static void main(String[] args)
{
double radius (radio) = 0.0;
double circleArea (área círculo) = 100.0;
int feet (pies)= 0;
int inches (pulgadas) = 0;
radius (radio) = Math.sqrt(circleArea(Área círculo)/Math.PI);
feet (pies) = (int)Math.floor(radius)(radio);
inches (pulgadas) = (int)Math.round(12.0*(radius - feet)(radio-pies));
System.out.println("The radius of a circle with area" + circleArea
+ " square feet is\n " + feet + " feet " + inches + " inches");
System.out.println("El radio de un círculo con un área de " + areaCirculo + " pies cuadrados es:\n " + pies + " pies y " + pulgadas + " pulgadas");
}
}
El Sol tiene un diámetro de unas 865.000 millas
aproximadamente. El diámetro de la Tierra es
de aproximadamente 7.600 millas. Emplee los métodos
de la clase de Math para calcular,
(a) el volumen de la tierra en
millas cúbicas;
(b) el volumen del sol en millas cúbicas;
(c) la relación entre el volumen del sol y el
volumen de la tierra.
y luego saque los tres valores. Considere que tanto
la tierra como el sol son esferas. El volumen de una
esfera se calcula mediante la formula 4 pi r^3/3, donde
r es el radio.
Ejecute el código que ha
escrito y entregue tanto el código como la salida
del programa. La salida debería leerse como:
El volumen de la tierra es de X millas cúbicas,
el del sol es de Y millas cúbicas, y la relación
entre el volumen del sol y el de la tierra es de Z.
Problema 2: Elementos básicos del lenguaje [10
puntos]
Lecturas: elementos básicos
del lenguaje: sentencias de control de flujo.
public class Primes (Primos)
{
public static void main(String[] args)
{
int nValues (nValores) = 50;
boolean isPrime (esPrimo) = true;
for(int i = 2; i <= nValues (nValores); i++)
{
isPrime (esPrimo) = true;
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
isPrime (esPrimo) = false;
break;
}
}
if (isPrime) (esPrimo)
System.out.println(i);
}
}
}
Elabore un nuevo programa que tenga
las siguientes características.
Descargue el código fuente.
(a) Que utilice la sentencia continue
en vez de la sentencia break.
(b) Que no necesite la variable isPrime (esPrimo).
(c) Que cuando analice si un número entero es
primo, baste con probar y dividir por números
enteros hasta la raiz cuadrada del número que
se está analizando.
Entregue la nueva versión de su código.
Problema 3: Elementos básicos de un objeto [15
puntos]
Lecturas: Elementos básicos
de un objeto y objetos de datos simples, el ciclo de
vida de un objeto, caracteres y cadenas
de caracteres (strings).
En el siguiente código,
el soliloquio se analiza carácter a carácter
para definir las vocales, los espacios y las letras
que se han usado. Complete el código que computa
el número de espacios, vocales y consonantes.
Descargue
el código fuente.
public class StringCharacters
{
public static void main(String[] args)
{
String texto= "Ser o no ser; he aquí el problema."
+" ¿Qué es más elevado para el espíritu: sufrir"
+" los golpes y dardos de la insultante fortuna,"
+" o armarnos contra un piélago de calamidades,"
+" y, haciéndoles frente, acabar con ellas?";
int espacios= 0,
vocales= 0,
letras= 0;
//INTRODUZCA AQUÍ SU CÓDIGO
System.out.println("El texto contiene:\n" + vocales + " vocales\n"
+ (letras - vocales) + " consonantes\n" + espacios + " espacios");
}
}
Ejecute el programa una vez que
haya escrito el código. Entregue su código
y la salida que se obtiene al ejecutar el código.
Problema 4: Elementos básicos de un objeto [25
puntos]
Lecturas: Elementos básicos
de un objeto y objetos de datos simples.
Números
Arrays (matrices)
Escriba un programa que inicialice
una variable de tipo string,
almacenando en ella el soliloquio del problema anterior,
para, posteriormente, extraer las palabras del texto
y ordenarlas por orden alfabético. Sin embargo,
puede definir las "palabras" como quiera (dentro
de lo razonable), pero facilítenos su definición
en la solución. Puede usar el método de
ordenación que desee. El más sencillo
es el método burbuja, que funciona de la siguiente
manera:
- Comenzando con el primer elemento
del array, compare los elementos consecutivos
(0 y 1, 1 y 2, 2 y 3, y así sucesivamente).
- Si el primer elemento de cualquier
par es mayor que el segundo, intercambie los dos elementos.
- Repita el proceso para la totalidad
del array hasta que no haga falta hacer ningún
intercambio más. Los elementos del array
estarán ahora en orden ascendente.
- Ejecute el programa una vez
que haya escrito el código. Entregue su código
y la salida generada al ejecutarlo.
Problema 5: Clases y herencia
[25 puntos]
Lecturas: Clases y herencia: creación
de clases.
Definimos una clase básica
de objetos Punto: Descargue
el código fuente.
class Point
{
double x;
double y;
// Create a point from coordinates (Crear un punto a partir de unas coordenadas)
Point(double xVal, double yVal)
{
x = xVal;
y = yVal;
}
}
Use los objetos Point
para definir una clase Line. Incluya
un constructor para crear una línea a partir
de dos puntos, un método para calcular la longitud
de una línea y otro para convertir una línea
en cadena, que se pueda imprimir de forma legible.
Finalmente, cree un método
intersección, invocado desde el objeto Line,
que devuelva un punto como intersección de dos
líneas. (Observe el recurso sobre
el punto de intersección
de las dos líneas).
Entregue el código que ha
escrito, y asegúrese de que compila.
Problema 6: Clases y herencia [15 puntos]
Lecturas: Clases y herencia: administración
de la herencia.
Imagine que hemos definido una
clase para representar a un animal de la siguiente manera:
Descargue
el código.
public class Animal
{
public Animal(String aType)
{
type (tipo) = new String(aType);
}
public String toString()
{
return "This is a " ("Esto es un") + type (tipo);
}
private String type (tipo);
}
A continuación, defina otra
clase basada en la clase Animal, que defina a perros.
Incluya variables
de instancia de tipo String para
el nombre y la raza del perro.
Defina dos constructores para la
subclase Perro, uno que acepte como único argumento
el nombre de un perro, y otro que acepte tanto el nombre
como la raza del objeto Perro. Asegúrese de que
el miembro privado de la clase base (objeto principal
de la superclase), Type (Tipo), se ha inicializado
de manera adecuada.
Entregue el código que ha
escrito.
Preguntas
y respuestas
En esta sección se darán
una serie de aclaraciones y respuestas a las típicas
preguntas que surgen en relación con los boletines
de problemas. Intentaremos mantenerla lo más
actualizada posible, así que debería ser
este el primer sitio que consultara (después
de haber releído detenidamente el boletín
de problemas y las especificaciones) cuando tuviera
algún problema.
Pregunta: Problema 2, comentario
anónimo acerca de si resulta acertado introducir
"código espaguetti" en lo que se refiere
al enunciado continue (goto). Muchas gracias
por hacer que esto llegue a oidos del personal, que
podrá tratar el tema.
Respuesta:
- En Java, las sentencias de salto
y las de ramificación (continue, exit, return,
exceptions) no son iguales a las de otros lenguajes
de programación (goto). Observe la Java
Language Specification (Especificación
del Lenguaje de Java) sobre Blocks
and Statements (Bloques y sentencias), o échele
un vistazo a la información sobre Unconditional
Branch (Ramificación incondicional),
en la cual se expone que "Java sólo permite
la utilización de sentencias de control de
flujo estructuradas y por tanto, no hay lugar para
el Unconditional Branch".
- Continue y exit
suelen mejorar la estructura del código, y
bastante mejor que añadiendo gran cantidad
de flags (indicadores), que hacen que el programa
resulte incomprensible y con frecuencia, menos eficaz.
- Lea Go
To Statement Considered Harmful (La sentencia
go to considerada peligrosa), Edsger
W. Dijkstra, y luego la refutación de Donald
Knuth, Structured Programming with go to Statements
(Programación estructurada con sentencias
go to), ACM Computing Surveys, 6(4):261--301, diciembre,
1974.
- Observe arguments
against and for GOTOs (argumentos a favor y en
contra de GOTO) y algunos ejemplos de código.
- Java Developer Connection
(JDC) muestra algunos consejos sobre
GOTO Statements and Java Programming (Sentencias
GOTO y programación en Java), entre los
que se incluyen comparaciones de código entre
C++ (mediante el uso goto) y JavaT (mediante
el uso de bloques etiquetados).
Pregunta: ¿Qué convenciones deberíamos
seguir para el código de Java?
Respuesta: Sigan las Code
Conventions for the Java Programming Language
(Convenciones del código del lenguaje de
programación Java). En cualquier caso, no se
restarán puntos por utilizar otras convenciones
que sean razonables.
|