Está en la página 1de 57

FUNCIONES MATEMÁTICAS: CLASE MATH

INTRODUCCIÓN

La clase Math, es una clase que viene incorporada en el lenguaje de


programación Java, incluida en el paquete java.lang, la cual nos proporciona
métodos y atributos, para implementar diversas funciones mátemáticas.

JERARQUÍA DE CLASES Y HERENCIA

java.lang.Object

java.lang.Math

El paquete java.lang es el paquete principal del lenguaje Java por lo cual no se


necesita importar ninguna clase incluida en dicho paquete. En consecuencia, no
será necesario importar el paquete java.lang cada vez que se necesite utilizar la
clase Math de Java.

La clase Math contiene métodos de cálculo básico, como exponencial, logaritmo,


raiz cuadrada y funciones trigonométricas. La clase Math a diferencia de otras
1
clases es una clase final . Esto significa que no puede ser instanciada (es decir;
no se pueden crear objetos de la clase Math). Los métodos de la clase Math son
métodos estáticos (llamados también métodos de clase) y para poder utilizarlos
solo se debe colocar el nombre de la clase, el operador punto y el nombre del
método a utilizar.

Ejemplo:
Math.pow (a, b) ;

1
Clase Final: No puede ser una superclase.
Una clase final o declarada como final es una clase que no puede ser una superclase. Es decir, las clases
finales no pueden heredarse. Todos los métodos de una clase final son implícitamente finales.

Pag. 763
MÉTODOS

La clase Math presenta los siguientes atributos y métodos de clase:

Atributos de clase:
1. E.
2. PI.

Métodos de clase:

1. abs( ).
2. acos( ).
3. asin( ).
4. atan( ).
5. ceil( ).
6. cos( ).
7. exp( ).
8. floor( ).
9. log( ).
10. max( ).
11. min( ).
12. pow( ).
13. random( ).
14. round( ).
15. sin( ).
16. sqrt( ).
17. tan( ).
18. toDegrees( ).
19. toRadians( ).

Para trabajar con los métodos de clase, de la clase Math, no será necesario
crear previamente un objeto de dicha clase (esto se cumple para todas las
clases que implementen métodos de clase).

Para ejecutar un método de clase, de la clase Math, es necesario colocar la


palabra Math (que es el nombre de la clase), el operador punto (.) y el nombre
del método de clase que desea ejecutar.

Asimismo; para ejecutar un método de la clase Math debemos tener en cuenta


que si, el método necesita algunos datos, estos deben ser necesariamente
proporcionados en la cantidad y tipos requeridos. En caso que el método
devuelva un resultado deberá almacenarlo en una variable del mismo tipo que el
resultado proporcionado o mostrarlo a través de la pantalla.

A continuación se presenta una breve descripción del uso de cada uno de los
métodos de la clase Math:
CLASE Math

ATRIBUTOS DE
DESCRIPCIÓN USO
CLASE
double e = Math.E ;
Almacena el valor de E. Es decir, nos
System.out.print( e) ;
proporciona la base de un logaritmo
E
natural. El valor es equivalente a
Resultado:
2.718281828459045.
e = 2.718281828459045.

double pi = Math.PI ;
Almacena el valor de PI. Es decir, System.out.print( pi) ;
PI almacena el valor equivalente a
3.141592653589793. Resultado:
pi = 3.141592653589793.

MÉTODOS DE
DESCRIPCIÓN USO
CLASE

abs (float)

int x = -5 ;
abs (double)
Retorna el valor absoluto de un System.out.print( Math.abs( x)) ;
número (que puede ser float, double,
int, long) dado como parámetro. Resultado:
abs (int) x = 5.

abs (long)

double angulo = 45.0 * Math.PI/180.0;


double result ;
Retorna un valor double con el result = Math.acos( angulo ) ;
arcocoseno de un ángulo expresado System.out.print( result ) ;
acos (double) en radianes. El ángulo expresado en
radianes debe ser un valor double Resultado :
enviado al método como parámetro.
result = 0.6674572160283838

double angulo = 45.0 * Math.PI/180.0 ;


Retorna un valor double con el double result ;
arcoseno de un ángulo expresado en result = Math.asin( angulo ) ;
System.out.print( result ) ;
asin (double) radianes. El ángulo expresado en
radianes debe ser un valor double Resultado :
enviado al método como parámetro.
result = 0.9033391107665127

Retorna un valor double con el


double angulo = 45.0 * Math.PI/180.0 ;
arcotangente de un ángulo expresado double result ;
atan (double)
en radianes. El ángulo expresado en result = Math.atan( angulo ) ;
radianes debe ser un valor double System.out.print( result ) ;

Pag. 765
MÉTODOS DE
DESCRIPCIÓN USO
CLASE
enviado al método como parámetro.
Resultado :

result = 0.6657737500283538

double n = 0.65 , result ;


Retorna un valor double con el valor result = Math.ceil( n ) ;
más corto no menor que el parámetro System.out.print( result ) ;
ceil (double)
dado. El parámetro dado debe ser
double. Resultado:

result = 1.0

double angulo = 30.0 * Math.PI/180.0 ;


Retorna un valor double con el coseno double result ;
de un ángulo expresado en radianes. result = Math.cos( angulo ) ;
cos (double) El ángulo expresado en radianes debe System.out.println( result ) ;
ser un valor double enviado al método Resultado :
como parámetro.
result = 0.8660254037844387

double exponente=1.0 , result ;


result = Math.exp(exponente) ;
Retorna un valor double con el valor
System.out.println(result) ;
exponencial de Euler del parámetro
exp (double)
dado. El parámetro dado sebe ser
Resultado:
double.
result = 2.7182818284590455

double n = 5.65 , result ;


result = Math.floor(n) ;
Retorna un valor double con el valor
System.out.print(result) ;
floor (double) más grande no mayor que el
parámetro dado. El parámetro dado
Resultado:
debe ser double.
resutl = 5.0

double logaritmo = 3.0 , result ;


Retorna un valor double con el result = Math.log(logaritmo) ;
logaritmo natural (base e) de un System.out.println( result ) ;
log (double)
parámetro dado. El parámetro dado
Resultado:
sebe ser double.
result = 1.0986122886681096

Retorna el valor del número mayor


max (float, float) (que puede ser float, double, int, long) double x = 10 , y = 15 , mayor ;
de dos números dados como mayor = Math.max( x , y ) ;
parámetros. System.out.print ( mayor ) ;
max (double, double)
Resultado:
MÉTODOS DE
DESCRIPCIÓN USO
CLASE

max (int, int) mayor = 15.

max (long, long)

min (float, float)


double x = 10 , y = 15 , menor ;
menor = Math.min( x , y ) ;
min (double, double) Retorna el valor del número menor System.out.print ( menor ) ;
(que puede ser float, double, int, long)
de dos números dados como Resultado:
min (int, int) parámetros.
menor = 10.

min (long, long)

double x = 2 , y = 4 , result ;
Retorna un valor double con la result = Math.pow( x , y ) ;
potencia de un número (dado como System.out.print ( result ) ;
primer parámetro) elevado a otro
pow (double, double)
número (dado como segundo Resultado:
parámetro). Los dos parámetros
dados deben ser double. result = 16.

Retorna un valor double con un double num ;


número generado aleatoriamente (al num = Math.random( ) ;
random ()
azar) mayor o igual que 0.0 y menor System.out.print ( num ) ;
que 1.0.

round (float)

double x = 10.53 , result ;


Retorna un valor (que puede ser float result = Math.round( x ) ;
o double) con el valor redondeado del System.out.print ( result ) ;
parámetro dado. El parámetro dado
puede ser un valor float o double. Resultado:
round (double)
result = 11.

Retorna un valor double con el seno


de un ángulo expresado en radianes.
El ángulo expresado en radianes debe double angulo = 37.0 *
sin (double)
ser un valor double enviado al método Math.PI/180.0; double result ;
como parámetro. result = Math.sin(angulo) ;
System.out.println(result) ;

Pag. 767
MÉTODOS DE
DESCRIPCIÓN USO
CLASE
Resultado:

result = 0.6018150231520483

double x = 16 , result ;
result = Math.sqrt( x ) ;
Retorna un valor double con la raiz
cuadrada del parámetro dado. El System.out.print ( result ) ;
sqrt (double)
parámetro dado debe ser un valor
Resultado:
double.
result = 4.

double angulo = 53.0 * Math.PI/180.0 ;


Retorna un valor double con la double result ;
tangente de un ángulo expresado en result = Math.tan(angulo);
tan (double) radianes. El ángulo expresado en System.out.println( result ) ;
radianes debe ser un valor double Resultado:
enviado al método como parámetro.
result = 1.3270448216204098

double angulo = Math.PI/3, result ;


Retorna un valor double. Permite result = Math.toDegrees(angulo) ;
convertir un ángulo expresado en System.out.println(result) ;
toDegrees (double) radianes (enviado como parámetro
double) en un ángulo expresado en Resultado:
sexagesimal.
result = 59.99999999999999

double angulo = 60, result ;


Retorna un valor double. Permite result = Math.toRadians(angulo) ;
convertir un ángulo expresado en System.out.println( result ) ;
toRadians (double) sexadecimal (enviado como parámetro
double) en un ángulo expresado en Resultado:
radianes.
result = 1.0471975511965976

A continuación, con la finalidad de mejorar la comprensión del tema tratado, se


presentan algunas soluciones a problemas planteados utilizando algunos de los
métodos de la clase Math. Analice cada una de las siguientes soluciones.
Problema 167

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar 3 números enteros a través


del teclado. Determinar y mostrar cuál de ellos es el número mayor.

Etapa 04 - Desarrollo de la codificación.

Clase PrgNumeroMayor

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgNumeroMayor {

public static void main ( String arg [ ] ) {

int num1, num2, num3, resultado ;

System.out.println ( “ Ingresar el primer número: ” ) ;


num1 = Lectura.leerInt( ) ;

System.out.println ( “ Ingresar el segundo número: ” ) ;


num2 = Lectura.leerInt( ) ;

System.out.println ( “ Ingresar el tercer número: ” ) ;


num3 = Lectura.leerInt( ) ;

resultado = Math.max ( num1, Math.max ( num2, num3 ) ) ;

System.out.println ( “ El número mayor es: ” + resultado ) ;


}
}

¿Que hay de nuevo en la codificación?

Observe el uso del método max ( ) de la clase Math:

Math.max ( num2, num3 )

Parámetros.

Nombre del método.

Operador punto.

Nombre de la Clase.

Pag. 769
El método max ( ) nos permite determinar el número mayor entre dos números (en nuestro caso el
número mayor entre num2 y num3).

Observe que en esta solución se emplea una estrategia mas simple para determinar el número mayor
entre tres números. El método max ( ) de la clase Math, retorna el valor del número mayor (puede ser
un número float, double, int o long) de dos números dados como parámetros. En nuestro ejemplo
determinamos el mayor de los dos últimos números ingresados y en la misma línea de código
evaluamos el mayor de estos dos números con el primer número ingresado, tal y como se muestra a
continuación:

resultado = Math.max ( num1, Math.max ( num2, num3 ) ) ;

Es importante tener presente que el método max ( ) es un método que solo podemos utilizar con la
clase Math y su función es determinar el número mayor entre dos números dados como parámetros.
Problema 168

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar 3 números enteros a través


del teclado. Determinar y mostrar cuál de ellos es el número menor.

Etapa 04 - Desarrollo de la codificación.

Clase PrgNumeroMenor

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgNumeroMenor {

public static void main ( String arg [ ] ) {

int num1, num2, num3, resultado ;

System.out.println ( “ Ingresar el primer número: ” ) ;


num1 = Lectura.leerInt( ) ;

System.out.println ( “Ingresar el segundo número: ” ) ;


num2 = Lectura.leerInt( ) ;

System.out.println ( “Ingresar el tercer número: ” ) ;


num3 = Lectura.leerInt( ) ;

resultado = Math.min ( num1, Math.min ( num2, num3 ) ) ;

System.out.println ( “ El número menor es: " + resultado ) ;


}
}

¿Que hay de nuevo en la codificación?

Observe el uso del método min ( ) de la clase Math: En la codificación de esta solución se emplea una
nueva estrategia para hallar el menor de tres números ingresados por teclado (anteriormente se
utilizaban sentencias if anidadas).

Observe que Math.min ( ) retorna el valor del número menor (que puede ser float, double, int, long) de
dos números dados como parámetros. En nuestro ejemplo hallamos el menor de los dos últimos
números ingresados, y en la misma línea evaluamos el menor de estos dos números con el primer
número ingresado, tal y como se muestra a continuación:

resultado = Math.min ( num1, Math.min ( num2, num3 ) ) ;

Pag. 771
Problema 169

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita generar una cantidad determinada


de números aleatorios. Los números aleatorios generados deberán estar entre 1 y
6. Mostrar el número generado aleatoriamente y la suma de dichos números.

Etapa 04 - Desarrollo de la codificación.

Clase PrgNumerosAleatorios

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgNumerosAleatorios {

public static void main ( String arg [ ] ) {

int x, cant, num, suma=0 ;

System.out.print ( “Ingresar la cantidad de números aleatorios a generar: ” ) ;


cant = Lectura.leerInt( ) ;

for ( x = 1; x <= cant; x++) {

num = 1 + (int) ( Math.random( ) * 6 ) ;


System.out.println ( “El número aleatorio generado es: ” + num ) ;

suma = suma + num ;


}

System.out.println ( “La suma de los números aleatorios es: ” + suma ) ;


}
}

¿Que hay de nuevo en la codificación?

Observe el uso del método random ( ) de la clase Math:

num = 1 + (int) (Math.random ( ) * 6 ) ;

En la codificación de esta solución se utiliza una sentencia for con la finalidad de generar la cantidad
de números aleatorios (al azar) que el usuario desee. Cada vez que se ejecuta la sentencia for, se
genera y muestra un número aleatorio (un número entre 1 y 6), el cual es acumulado en la variable
suma. Finalizada la ejecución de la sentencia for se muestra el contenido de dicha variable (es decir,
se muestra la suma de los números aleatorios generados).

Recuerde que para generar números aleatorios entre dos números (entre un intervalo o rango),
utilizando el método random ( ) de la clase Math, se emplea la siguiente fórmula:

min + (int) ( Math.random( ) * (max – min + 1 ) ) ;


Para nuestro ejemplo tenemos:

1 + (int) ( Math.random( ) * ( 6 – 1 + 1 ) ) ;

1 + (int) ( Math.random( ) * ( 6 ) ) ;

Pag. 773
Problema 170

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita generar una cantidad determinada


de números aleatorios. Los números aleatorios generados deberán estar entre 1 y
10. Mostrar los números aleatorios que son números pares.

Etapa 04 - Desarrollo de la codificación.

Clase PrgNumAleatoriosPares

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgNumAleatoriosPares {

public static void main ( String arg [ ] ) {

int x, cant, num, cont = 0 ;

System.out.print ( “Ingresar la cantidad de números aleatorios a generar: ” ) ;


cant = Lectura.leerInt( ) ;

do {
num = 1 + (int) ( Math.random( ) * 10 ) ;

if (num % 2 == 0) {
cont++;
System.out.print ( num + “ \t ” ) ;
}

} while (cant != cont) ;


}
}

¿Que hay de nuevo en la codificación?

En la codificación de esta solución se utiliza una sentencia do con la finalidad de generar números
aleatorios. Si el número generado es par se le aumenta uno a la variable cont (que esta trabajando
como contador de números pares generados al azar) y se muestra el número generado.
Problema 171

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita generar una cantidad determinada


de números aleatorios. Los números aleatorios generados deberán estar entre 1 y
10. Mostrar los números aleatorios que son números impares.

Etapa 04 - Desarrollo de la codificación.

Clase PrgNumAleatoriosImpares

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgNumAleatoriosImpares {

public static void main ( String arg [ ] ) {

int x, cant, num, cont = 0 ;

System.out.print ( “Ingresar la cantidad de números aleatorios a generar: ” ) ;


cant = Lectura.leerInt( ) ;

do {
num = 1 + (int) ( Math.random( ) * 10 ) ;

if ( num % 2 == 1 ) {
cont ++;
System.out.print ( num + “ \t ” ) ;
}

} while ( cant != cont ) ;


}
}

¿Que hay de nuevo en la codificación?

En la codificación de esta solución se utiliza una sentencia do con la finalidad de generar números
aleatorios. Si el número generado es impar se le aumenta uno a la variable cont (que esta trabajando
como contador de números impares generados al azar) y se muestra el número generado.

Pag. 775
Problema 172

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar por teclado el radio de una
esfera. Calcular y mostrar el volumen de dicha esfera.

Etapa 04 - Desarrollo de la codificación.

Clase PrgRadioEsfera

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgRadioEsfera {

public static void main ( String arg [ ] ) {

double radio, volume ;

System.out.println ( “Ingresar el radio de la esfera: ” ) ;


radio = Lectura.leerDouble();

volume = (4 / 3) * Math.PI * Math.pow ( radio, 3 ) ;

System.out.println ( “El volumen de la esfera es: ” + volume ) ;


}
}

¿Que hay de nuevo en la codificación?

Observe el uso del método pow ( ) y del atributo PI de la clase Math:

volume = (4 / 3) * Math.PI * Math.pow ( radio, 3 ) ;

El método pow ( ) retorna un valor double con la potencia de un número (dado como primer parámetro)
elevado a otro número (dado como segundo parámetro). En nuestro caso el método pow ( ) eleva a la
potencia 3 el radio del círculo.

Para hallar el volumen de la esfera se tendrá que utilizar la fórmula v=4/3*PI*R 3. La clase Math define
un atributo (constante) muy útil, que contiene en valor del número PI (Math.PI).
Problema 173

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar un número decimal.


Mostrar el número ingresado redondeado.

Etapa 04 - Desarrollo de la codificación.

Clase PrgNumRedondeado

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgNumRedondeado {

public static void main ( String arg [ ] ) {

double num, resultado ;

System.out.println ( “Ingrese un número decimal: ” ) ;


num = Lectura.leerDouble( ) ;

resultado = Math.round(num) ;

System.out.println ( “El número redondeado es: ” + resultado ) ;

}
}

¿Que hay de nuevo en la codificación?

Observe el uso del método round ( ) de la clase Math:

resultado = Math.round(num) ;

El método round ( ) permite redondear un número dado como parámetro.

En esta solución se ingresa un número y se almacena en la variable num. Luego, dicho número es
redondeado utilizando el método round ( ) y se almacena en la variable resultado.

Pag. 777
Problema 174

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar un número entero y un


exponente. Mostrar el resultado de calcular la potencia de todos los números
menores que el número ingresado elevado al exponente ingresado.

Etapa 04 - Desarrollo de la codificación.

Clase PrgNumPotencia

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgNumPotencia {

public static void main ( String arg [ ] ) {

int cant, expo ;


double rpta ;

System.out.println ( “Ingresar un número entero: ” ) ;


cant = Lectura.leerInt( ) ;

System.out.println ( “Ingresar el exponente: ” ) ;


expo = Lectura.leerInt( ) ;

for ( int x = 1; x < cant; x++) {

rpta = Math.pow ( x, expo ) ;


System.out.println ( “El Exponencial de ” + x + “ es: ” + rpta ) ;
}
}
}

¿Que hay de nuevo en la codificación?

Observe el uso del método pow ( ) de la clase Math:

rpta = Math.pow ( x, expo ) ;

El método pow ( ) permite elevar a la potencia un número determinado. En la presente solución se


utiliza una sentencia for con la finalidad de elevar a la potencia todos los números menores que la
variable cant y mostrarlos por pantala. La variable cant y el exponente expo se ingresan por el teclado.

Recuerde y siempre tenga presente que el método pow ( ) de la clase Math, retorna un valor double,
por lo que dicho valor deberá ser almacenado en una variable del mismo tipo o deberá mostrarse por
la pantalla.
Problema 175

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar un número entero. Mostrar


el resultado de calcular la raíz cuadrada de todos los números menores que el
número ingresado.

Etapa 04 - Desarrollo de la codificación.

Clase PrgNumRaiz

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgNumRaiz {

public static void main ( String arg [ ] ) {

int cant ;
double rpta ;

System.out.println ( “Ingrese un número entero: ” ) ;


cant = Lectura.leerInt( ) ;

for ( int x = 1; x < cant; x++ ) {

rpta = Math.sqrt (x) ;


System.out.println ( “La raíz cuadrada de ” + x + “ es: ” + rpta ) ;
}
}
}

¿Que hay de nuevo en la codificación?

Observe el uso del método sqrt ( ) de la clase Math:

rpta = Math.sqrt ( x ) ;

El método sqrt ( ) permite obtener la raíz cuadrada de un número determinado.

En la presente solución se utiliza una sentencia for con la finalidad de obtener la raíz cuadrada de
todos los números menores que la variable cant y mostrarlos por pantalla. La variable cant se ingresa
por el teclado.

Recuerde y siempre tenga presente que el método sqrt ( ) de la clase Math, retorno un valor double,
por lo que dicho valor deberá ser almacenado en una variable del mismo tipo o deberá mostrarse por
la pantalla.

Pag. 779
Problema 176

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita generar una cantidad determinada


de números aleatorios. Los números aleatorios generados deberán estar entre 1 y
10. Mostrar los números generados aleatoriamente elevados al cuadrado.

Etapa 04 - Desarrollo de la codificación.

Clase PrgNumAleatorioCuad

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgNumAleatorioCuad {

public static void main ( String arg [ ] ) {

int cant, num ;


double rpta ;

System.out.print ( “Ingresar la cantidad de números aleatorios a generar: ” ) ;


cant = Lectura.leerInt( ) ;

for ( int x = 1; x <= cant; x++ ) {

num = (int) ( 1 + ( Math.random() * 10 ) ) ;


rpta = Math.pow (num, 2) ;
System.out.println ( num + “ elevado al cuadrado es: ” + rpta ) ;
}
}
}

¿Que hay de nuevo en la codificación?

Observe el uso de los métodos random ( ) y sqrt ( ) de la clase Math:

num = (int) ( 1 + ( Math.random() * 10 ) ) ;


rpta = Math.pow (num, 2) ;

En la presente solución se utiliza una sentencia for con la finalidad de obtener números aleatorios,
elevarlos al cuadrado y mostrarlos por pantalla. La variable cant se ingresa por el teclado.
Problema 177

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita determinar y mostrar el área de un


tríangulo en base a las longitudes de sus lados. Considerar el valor absoluto de la
diferencia entre el semiperimetro y cada uno de los lados. Utilizar las siguientes
fórmulas:
area = ( p * (|p-a|)*(|p-b|)*(|p-c|)) RAIZ (2).
p = (a+b+c) / 2.
Donde:
p = Semiperímetro.
a, b, c = Lados del triángulo.

Etapa 04 - Desarrollo de la codificación.

Clase PrgTriangulo

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgTriangulo {

public static void main ( String arg [ ] ) {

double a, b, c, p, tmp, area ;

System.out.println ( “Ingrese el valor del primer lado del triángulo (a): ” ) ;


a = Lectura.leerDouble( ) ;

System.out.println ( “Ingrese el valor del segundo lado del triángulo (b): ” ) ;


b = Lectura.leerDouble( ) ;

System.out.println ( “Ingrese el valor del terecr lado del triángulo (c): ” ) ;


c = Lectura.leerDouble( ) ;

p = (a + b + c) / 2 ;
tmp = ( p * (Math.abs(p - a)) * (Math.abs(p - c)) * (Math.abs(p - b) ) ) ;
area = Math.sqrt ( tmp ) ;

System.out.println ( “El área del triángulo es: ” + area ) ;


}
}

Pag. 781
¿Que hay de nuevo en la codificación?

Observe el uso de los métodos abs ( ) y sqrt ( ) de la clase Math:

tmp = ( p * (Math.abs(p - a)) * (Math.abs(p - c)) * (Math.abs(p - b) ) ) ;


area = Math.sqrt ( tmp ) ;

En esta solución se ingresan los valores de los tres lados de un triángulo y se obtiene el valor del
semiperímetro del triángulo.

Luego, se procede a calcular el área del triángulo en base a la siguiente fórmula:

area = ( p * (|p-a|)*(|p-b|)*(|p-c|)) RAIZ (2)

Primero, se hace uso del método abs ( ) de la clase Math para calcular el valor absoluto de la
diferencia entre el semiperímetro y cada uno de los lados del triángulo. Luego, se multiplican los
valores resultantes con el valor del semiperímetro del triángulo y finalmente, se obtiene la raíz
cuadrada del valor resultante utilizando el método sqrt ( ) de la clase Math.
Problema 178

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita determinar y mostrar el perímetro y


el área de un círculo. Utilizar las siguientes fórmulas:

perimetro = 2 * PI * radio.
area = PI * radio * radio.

Etapa 04 - Desarrollo de la codificación.

Clase PrgCirculo

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgCirculo {

public static void main ( String arg [ ] ) {

double radioCirculo, areaCirculo, perimetroCirculo ;

System.out.println ( “ Ingrese el valor del radio del círculo: ” ) ;


radioCirculo = Lectura.leerDouble( ) ;

areaCirculo = Math.PI * Math.pow (radioCirculo, 2) ;


perimetroCirculo = 2 * Math.PI * radioCirculo ;

System.out.println ( “ El área del círculo es: ” + areaCirculo ) ;


System.out.println ( “ El perímetro del círculo es : ” + perimetroCirculo ) ;
}
}

Pag. 783
Problema 179

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar un ángulo expresado en


grados. Deeterminar el tipo de ángulo ingresado y su equivalente en radianes. Los
ángulos expresados en grados se clasifican de la siguiente manera:
0 grados. = Nulo.
Entre 0 y 90 grados. = Agudo.
90 grados. = Recto.
Entre 90 y 180 grados. = Obtuso.
180 grados. = Llano.
Entre 180 grados y 360 grados. = Cóncavo.
360 grados. = Completo.

Etapa 04 - Desarrollo de la codificación.

Clase PrgConversionAngulo

package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgConversionAngulo {
public static void main ( String arg [ ] ) {
double anguloGrados, anguloRadianes ;
String tipoAngulo = “” ;

System.out.println ( “ Ingrese un ángulo en grados (entre 0 y 360): ” ) ;


anguloGrados = Lectura.leerDouble( ) ;
if (anguloGrados == 0)
tipoAngulo = “Nulo” ;
if (anguloGrados > 0 && anguloGrados < 90)
tipoAngulo = “Agudo” ;
if (anguloGrados == 90)
tipoAngulo = “Recto” ;
if (anguloGrados > 90 && anguloGrados < 180)
tipoAngulo = “Obtuso” ;
if (anguloGrados == 180)
tipoAngulo = “Llano” ;
if (anguloGrados > 180 && anguloGrados < 360)
tipoAngulo = “Concavo” ;
if (anguloGrados == 360)
tipoAngulo = “Completo” ;
anguloRadianes = Math.toRadians (anguloGrados) ;
System.out.println ( “ Tipo de ángulo: ” + tipoAngulo ) ;
System.out.println ( “ Ángulo expresado en radianes: ” + anguloRadianes ) ;
}
}
¿Que hay de nuevo en la codificación?

Observe el uso del método toRadians ( ) de la clase Math:

anguloRadianes = Math.toRadians (anguloGrados) ;

Para el desarrollo de esta solución se hace uso de sentencias if múltiples con la finalidad de
determinar el tipo de ángulo ingresado por teclado. El tipo de ángulo es almacenado en una variable
String (tipoAngulo) y mostrado por pantalla.

Para realizar la conversión del ángulo ingresado en el sistema sexagesimal al sistema radial se utiliza
el método toRadians ( ) de la clase Math.

Pag. 785
Problema 180

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita determinar y mostrar las raíces de


una ecuación de segundo grado. Tipo:
2
Ax + Bx + C = 0

Considerar que la solución puede tener raíces imaginarias. Utilizar la siguiente


fórmula:

x = ( - B + - ( ( B ** 2 – 4 * A * C ) RAIZ ( 2 ) ) ) / 2 * A.

Etapa 04 - Desarrollo de la codificación.

Clase PrgEcuacion2Grado

package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgEcuacion2Grado {
public static void main ( String arg [ ] ) {
int a, b, c ;
double tmp, x, x1, x2 ;
System.out.println ( “ Ingrese el coeficiente A: ” ) ;
a = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el coeficiente B: ” ) ;
b = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el coeficiente C: ” ) ;
c = Lectura.leerInt( ) ;
if (a == 0 && b == 0) {
System.out.println ( “ La ecuación no tiene solución ” ) ;
} else {
tmp = Math.pow (b, 2) - (4 * a * c) ;
if (tmp < 0) {
System.out.println ( “ La ecuación tiene raices imaginarias ” ) ;
} else {
if (a == 0) {
x = c / b * (-1) ;
System.out.println ( “ El valor para x es: ” + x ) ;
} else {
x1 = ( - b + Math.sqrt (tmp)) / (2 * a) ;
x2 = ( - b - Math.sqrt (tmp)) / (2 * a) ;
System.out.println ( “ El primer valor para x es: ” + x1 ) ;
System.out.println ( “ El segundo valor para x es: ” + x2 ) ;
}
}
}
}
}
¿Que hay de nuevo en la codificación?

Observe el uso de los métodos pow ( ) y sqrt ( ) de la clase Math:

En esta solución se ingresan los coeficientes de una ecuación de segundo grado (a, b y c). Si los
coeficientes a y b son iguales a cero, se muestra un mensaje por la pantalla; “La ecuación no tiene
solución”. Caso contrario, se determina el valor de la discriminante, el cual se almacena en la variable
tmp utilizando la siguiente formula:

tmp = Math.pow (b, 2) - (4 * a * c) ;

En caso que el valor de tmp sea igual a cero, se muestra el siguiente mensaje por pantalla; “La
ecuación tiene raices imaginarias”. Caso contrario, si el coeficiente a es igual a cero la ecuación
tendría una sola solución, la cual se calcularía utilizando:

x = c / b * (-1) ;

Si el coeficiente a es diferente de cero la ecuación tendría dos soluciones, las cuales se calcularían
utilizando:

x1 = ( - b + Math.sqrt (tmp)) / (2 * a) ;
x2 = ( - b - Math.sqrt (tmp)) / (2 * a) ;

Pag. 787
Problema 181

Etapa 01 - Descripción del problema.

Desarrollar un juego en Java que permita generar un número aleatorio. Se debe


intentar adivinar que número es el que generó la computadora. El rango de
números válidos en el juego es de 1 a 100, y cada vez que intente adivinar le
indicará si el número buscado es menor o es mayor.

Etapa 04 - Desarrollo de la codificación.

Clase PrgJuego

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgJuego {
public static void main ( String arg [ ] ) {
int maximo = 100, num, numAzar, inten = 1 ;
double tmp;
System.out.println ( “ Bienvenido al juego: ¿Que número es? ” ) ;
System.out.println ( “ ----------------------------------------------------” ) ;
System.out.println ( “ - La computadora genera un -” ) ;
System.out.println ( “ - numero aleatorio y ud. tratara -” ) ;
System.out.println ( “ - de adivinar que número es -” ) ;
System.out.println ( “ - Trate de adivinar el número en -” ) ;
System.out.println ( “ - el menor número de intentos -” ) ;
do {
System.out.println ( “ Ingrese un número entre 0..100: ” ) ;
num = Lectura.leerInt( ) ;
} while (num < 0 || num > 100 ) ;
tmp = maximo * Math.random( ) ;
numAzar = (int) Math.round(tmp) ;
while (num != numAzar) {
inten++ ;
if (num < numAzar)
System.out.println ( “ El número buscado es mayor ” ) ;
else
System.out.println ( “ El número buscado es menor ” ) ;
do {
System.out.println ( “ Ingrese otro número entre 0..100: ” ) ;
num = Lectura.leerInt( ) ;
} while (num < 0 || num > 100) ;
}
System.out.println ( “ Ud. encontró el número en: ” + inten + “ intento(s) ” ) ;
}
}
¿Qué hay de nuevo en la codificación?

Observe el uso de los métodos random ( ) y round ( ) de la clase Math:

Utilizando el método random ( ) generamos un número aleatorio (al azar) entre el número 0 y el
número 100, utilizando la siguiente fórmula:

tmp = maximo * Math.random( ) ;

El número generado aleatoriamente es almacenado en la varable tmp. Luego es redondeado utilizando


el método round ( ) y convertido a un número entero utilizando la siguiente sentencia:

numAzar = (int) Math.round(tmp) ;

Este número generado al azar, almacenado en la variable numAzar, es comparado con un número
previamente ingresado por teclado y almacenado en la variable num. Si ambos son iguales, se
mostrará un mensaje indicando que el número numAzar fue encontrado. Si no son iguales, se
mostrará un mensaje, indicando si el número buscado es mayor o es menor (en relación al número
ingresado) y se solicitará otro número hasta encontrar el número que se generó en forma aleatoria.

Intente modificar la codificación de la solución. Utilice la sentencia do y optimice el código.

Pag. 789
Problema 182

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar 6 números a traves del


teclado. Determinar y mostrar cuál de ellos es el número mayor y cuál es el
número menor.

Etapa 04 - Desarrollo de la codificación.

Clase PrgNumeroMayorMenor

package dominioDeLaAplicacion ;
import biblioteca.Lectura ;
class PrgNumeroMayorMenor {
public static void main ( String arg [ ] ) {
int n1, n2, n3, n4, n5, n6 ;
double mayor, meno r;
System.out.println ( “ Ingrese el primer número: ” ) ;
n1 = Lectura.leerInt();
System.out.println ( “ Ingrese el segundo número: ” ) ;
n2 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el tercer número: ” ) ;
n3 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el cuarto número: ” ) ;
n4 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el quinto número: ” ) ;
n5 = Lectura.leerInt( ) ;
System.out.println ( “ Ingrese el sexto número: ” ) ;
n6 = Lectura.leerInt( ) ;
mayor = Math.max (n1,n2) ;
mayor = Math.max (mayor,n3) ;
mayor = Math.max (mayor,n4) ;
mayor = Math.max (mayor,n5) ;
mayor = Math.max (mayor,n6) ;
menor = Math.min (n1,n2) ;
menor = Math.min (menor,n3) ;
menor = Math.min (menor,n4) ;
menor = Math.min (menor,n5) ;
menor = Math.min (menor,n6) ;
System.out.println ( “ El mayor número es: " + mayor ) ;
System.out.println ( “ El menor número es: " + menor ) ;
}
}

Modificar la codificación de la solución de tal forma que pueda optimizar el código. Utilice una
sentencia for.
Problema 183

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar las notas de todos los
alumnos de un determinado salon de clase. Calcular y mostrar el promedio final de
cada alumno en base a la siguiente fórmula:

pf = ( pp + ep + ( ef * 2 ) ) / 4.
Donde:
pf = Promedio final.
pp = Promedio de prácticas.
Son 4 prácticas de las cuales se elimina la más baja
pp = ( p1 + p2 + p3 + p4 – notaMenor ) / 3
ep = Examen parcial.
ef = Examen final.

Etapa 04 - Desarrollo de la codificación.

Clase PrgPromedioNotas

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgPromedioNotas {

public static void main ( String arg [ ] ) {


double pf, pp, ep, ef, p1, p2, p3, p4, notaMenor ;
char opc ;

do {

System.out.println ( “ Ingrese la nota de la práctica 1: ” ) ;


p1 = Lectura.leerDouble( ) ;
System.out.println ( “ Ingrese la nota de la práctica 2: ” ) ;
p2 = Lectura.leerDouble( ) ;
System.out.println ( “ Ingrese la nota de la práctica 3: ” ) ;
p3 = Lectura.leerDouble( ) ;
System.out.println ( “ Ingrese la nota de la práctica 4: ” ) ;
p4 = Lectura.leerDouble( ) ;
System.out.println ( “ Ingrese la nota del examen parcial: ” ) ;
ep = Lectura.leerDouble( ) ;
System.out.println ( “ Ingrese la nota del examen final: ” ) ;
ef = Lectura.leerDouble( ) ;

notaMenor = Math.min (p1,p2) ;


notaMenor = Math.min (notaMenor,p3) ;
notaMenor = Math.min (notaMenor,p4) ;

Pag. 791
Continúa… Etapa 04 - Desarrollo de la codificación.

Clase PrgPromedioNotas

pp = ( p1 + p2 + p3 + p4 – notaMenor ) / 3 ;

pf = ( pp + ep + ef ) / 3 ;
pf = Math.round (pf) ;

System.out.println ( “ El promedio final del alumno es: ” + pf ) ;


System.out.println ( “ Desea continuar (si=s/ no=n)?: ” ) ;

opc=Lectura.leerChar( ) ;

} while ( opc=='s' || opc=='S' ) ;

}
}

Modificar la codificación de la solución de tal forma que se elimine la práctica con la nota más baja y se
duplique la nota de la práctica más alta. Muestre el promedio de las notas redondeado a dos
decimales.
Problema 184

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar un número cualquiera con


parte decimal y muestre la parte entera del número, el número redondeado sin
decimales, y el número redondeado a uno, dos y tres decimales.

Etapa 04 - Desarrollo de la codificación.

Clase PrgRedondearNumero

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgRedondearNumero {

public static void main ( String arg [ ] ) {

double numero ;

System.out.println ( “ Ingrese un número con decimales: ” ) ;


numero=Lectura.leerDouble( ) ;

System.out.println ( “ -----------------------------------” ) ;
System.out.println ( “ La parte entera del número es: ” ) ;
System.out.println ( Math.floor (numero) ) ;

System.out.println ( “ El número redondeado es: ” ) ;


System.out.println ( Math.floor (numero+0.5) ) ;

System.out.println ( “ El número redondeado a un decimal es: ” ) ;


System.out.println ( Math.floor (numero * 10 + 0.5 ) / 10 ) ;

System.out.println ( “ El número redondeado a dos decimales es: ” ) ;


System.out.println ( Math.floor (numero * 100 + 0.5 ) / 100 ) ;

System.out.println ( “ El número redondeado a tres decimales es: ” ) ;


System.out.println ( Math.floor (numero * 1000 + 0.5 ) / 1000 ) ;
}
}

¿Qué hay de nuevo en la codificación?

Observe el uso del método floor ( ) de la clase Math:

El método floor ( ) retorna un valor double con el valor más grande no mayor que el parámetro dado. El
parámetro dado debe ser double. Nótese que si ingresamos un numero cuya parte decimal es mayor
que 5 sólo retorna la parte entera para tal caso se le agrega 0.5 para que en el segundo cálculo tenga
efecto de redondeo perfecto. Observe como se redondea un número con uno, dos y tres decimales
utilizando el método floor ( ).

Pag. 793
Problema 185

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permite realizar un sorteo en base a un


número determinado de boletos.

Sugerencia:
Utilice el método random ( ) de la clase Math para
generar el número del boleto ganador.

Etapa 04 - Desarrollo de la codificación.

Clase PrgSorteo

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgSorteo {

public static void main ( String arg [ ] ) {

double num ;
int boletos, ganador ;

do {

System.out.println ( “ Ingrese el total de boletos: ” ) ;


boletos = Lectura.leerInt( ) ;

if (boletos > 0) {

do {

num = boletos * Math.random( ) ;


ganador = (int) Math.round(num) ;

} while (ganador == 0) ;

System.out.println ( “ El número ganador es: ” + ganador ) ;


}

} while ( boletos < 0 ) ;


}
}
Problema 186

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita calcular la suma de cuadrados y la


suma de cubos de los “n” primeros números. Se deberá ingresar un número por
teclado y mostrar los resultados.

Etapa 04 - Desarrollo de la codificación.

Clase PrgSumaCuadradosCubos

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgSumaCuadradosCubos {

public static void main ( String arg [ ] ) {

long num, sumaCuad = 0, sumaCubos = 0 ;

System.out.println ( “ Ingrese un numero cualquiera: ” ) ;


num = Lectura.leerLong( ) ;

for ( int i=1; i <= num; i++ ) {

sumaCuad += Math.pow (i,2) ;


sumaCubos += Math.pow (i,3) ;

System.out.print ( “ La suma de cuadrados de 1 hasta ” + num + “ es: ” ) ;


System.out.println ( sumaCuad ) ;

System.out.print ( “ La suma de cubos de 1 hasta ” + num + “ es: ” ) ;


System.out.println ( sumaCubos ) ;
}
}

Pag. 795
Problema 187

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar un ángulo no mayor de 360


grados ni menor de 0 grados. Mostrar como resultado el seno y el coseno del
ángulo ingresado.

Etapa 04 - Desarrollo de la codificación.

Clase PrgSenCos

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgSenCos {

public static void main ( String arg [ ] ) {

double anguloGrados, anguloRadianes, seno = 0, coseno = 0 ;

do{

System.out.println ( “ Ingrese un ángulo en grados entre 0 y 360: ” ) ;


anguloGrados = Lectura.leerDouble( ) ;

if (anguloGrados < 0 || anguloGrados > 360 ){

System.out.println ( “El dato ingresado es incorrecto, intente otra vez: ” );


}

}while(anguloGrados < 0 || anguloGrados > 360) ;

anguloRadianes = Math.toRadians( anguloGrados ) ;

seno = Math.sin( anguloRadianes ) ;


coseno = Math.cos( anguloRadianes ) ;

System.out.println ( “ El sen [” + anguloGrados + “ ] = ” + seno ) ;


System.out.println ( “ y el cos [” + anguloGrados + “ ] = ” + coseno ) ;

}
}

¿Qué hay de nuevo en la codificación?

Observe el uso de los métodos toRadians ( ), sin ( ) y cos ( ) de la clase Math:

Es importante mencionar que Java trabaja con el sistema radial y para obtener las razones
trigonométricas, seno y coseno, de un ángulo ingresado por teclado hay que convertirlo primero al
sistema radial. Para esto, utilizamos el método toRadians ( ) de la clase Math. Este método retorna un
valor double y permite convertir un ángulo expresado en el sistema sexagesimal (enviado como
parámetro double) en un ángulo expresado en radianes. Una vez convertido el ángulo en radianes
podemos utilizar los métodos sin ( ) y cos ( ) de la clase Math para obtener el seno y el coseno del
ángulo ingresado por teclado.

Pag. 797
Problema 188

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar un ángulo de inclinación de


la recta con respecto al eje x. Mostrar como resultado la pendiente de la recta.

Etapa 04 - Desarrollo de la codificación.

Clase PrgTangente

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgTangente {

public static void main ( String arg [ ] ) {

double anguloGrados, anguloRadianes, tangente = 0 ;

System.out.println ( “ Ingrese el ángulo de inclinación de la recta: ” ) ;


anguloGrados = Lectura.leerDouble( ) ;

anguloRadianes = Math.toRadians(anguloGrados) ;

tangente = Math.tan(anguloRadianes) ;
System.out.println ( “ La pendiente de la resta es = ” + tangente ) ;

}
}

¿Qué hay de nuevo en la codificación?

Observe el uso del método tan ( ) de la clase Math:

El método tan ( ) permite hallar la pendiente de una recta con respecto al eje X. Para ello, utiliza el
ángulo de inclinación de la recta, expresado en el sistema radial, tal y como se muestra:

tangente = Math.tan(anguloRadianes) ;
Problema 189

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar los catetos de un triángulo


perpendicular. Calcular y mostrar la hipotenusa del tríangulo.

Etapa 04 - Desarrollo de la codificación.

Clase PrgHipotenusa

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgHipotenusa {

public static void main ( String arg [ ] ) {

double cateto1, cateto2, hipotenusa ;

System.out.println ( “ Ingrese el primer cateto: ” ) ;


cateto1 = Lectura.leerDouble( ) ;

System.out.println ( “ Ingrese el segundo cateto: ”) ;


cateto2 = Lectura.leerDouble( ) ;

hipotenusa = Math.sqrt ( Math.pow (cateto1, 2) + Math.pow (cateto2, 2) ) ;

System.out.println ( “ La hipotenusa del triángulo es: ” + hipotenusa) ;

}
}

La fórmula para este caso sería: (hipotenusa)2 = (cateto1)2 + (cateto2)2 . Se ingresan los catetos por el
teclado y son elevados al cuadrado con Math.pow ( ). El resultado obtenido, al elevar al cuadrado cada
uno de los catetos, se suman. Luego se obtiene la raíz cuadrada con Math.sqrt ( ) y finalmente se
muestra el resultado almacenado en la variable hipotenusa. Ejemplo:

Ingrese el primer cateto: 2


Ingrese el segundo cateto: 3

La hipotenusa del triángulo es: 3.605551275463989

Pag. 799
Problema 190

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar la ordenada y la abscisa de


un punto. Calcular y mostrar el ángulo de las coordenadas del punto en grados.

Etapa 04 - Desarrollo de la codificación.

Clase PrgPunto

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgPunto {

public static void main ( String arg [ ] ) {

double ordenada, abscisa, anguloGrados, anguloRadianes ;

System.out.println ( “ Ingrese la ordenada(y) del punto: ” ) ;


ordenada = Lectura.leerDouble( ) ;

System.out.println ( “ Ingrese la abscisa(x) del punto: ” ) ;


abscisa = Lectura.leerDouble( ) ;

anguloRadianes = Math.atan2(ordenada, abscisa) ;


anguloGrados = Math.toDegrees(anguloRadianes) ;

System.out.print ( “ El ángulo en grados de [” + ordenada + “,” ) ;


System.out.println ( abscisa + “] es: ” + anguloGrados) ;

}
}

¿Qué hay de nuevo en la codificación?

Observe el uso de los métodos atan2 ( ) y toDegress ( ) de la clase Math:

anguloRadianes = Math.atan2(ordenada, abscisa) ;


anguloGrados = Math.toDegrees(anguloRadianes) ;

Sabemos que Math.atan ( ) retorna un valor double con el arcotangente de un ángulo expresado en
radianes. Dicho ángulo expresado en radianes debe ser un valor double enviado al método como
parámetro.

Pero en este caso, se ingresan por teclado la ordenada y la abcisa de un punto cualquiera en el
sistema de coordenadas, por lo que el método atan ( ) de la clase Math no nos serviría (este método
necesita el valor de un ángulo expresado en radianes y no los valores de las coordenadas de un
punto).

En este caso, se utiliza el método atan2 ( ) de la clase Math. Este método nos permite obtener el valor
del arcotangente de un par ordenado.

Es importante mencionar que el método atan2 ( ) nos devuelve el arcotangente de un ángulo


expresado en radianes por lo cual se tendrá que convertir dicho ángulo al sistema sexagesimal,
utilizando el método toDegrees ( ) de la clase Math.

Pag. 801
Problema 191

Etapa 01 - Descripción del problema.

Desarrollar un programa en Java que permita ingresar un número cualquiera.


Calcular y mostrar el número e elevado al número ingresado y el logaritmo natural
(de base e) del número ingresado.

Etapa 04 - Desarrollo de la codificación.

Clase PrgExpLog

package dominioDeLaAplicacion ;

import biblioteca.Lectura ;
class PrgExpLog {

public static void main ( String arg [ ] ) {

double num, exponencial, logaritmo ;

System.out.println ( “ Ingrese un número: ” ) ;


num=Lectura.leerDouble();

exponencial = Math.exp(num) ;
logaritmo = Math.log(num) ;

System.out.print ( “ El valor del número [e] elevado a [” + num ) ;


System.out.println ( “] es: ” + exponencial ) ;

System.out.print ( “ El valor del logaritmo [en base e] del número [” ) ;


System.out.println ( num + “] es: ” + logaritmo) ;
}
}

¿Qué hay de nuevo en la codificación?

Observe el uso de los métodos exp ( ) y log ( ) de la clase Math:

exponencial = Math.exp(num) ;
logaritmo = Math.log(num) ;

En esta solución se hace necesario el uso del método exp ( ) para obtener el número e elevado al
número ingresado por teclado:

enum

También se hace necesario el uso del método log ( ) para obtener el logaritmo natural del número
ingresado en base e:

logenum
Tenga presente que Java sólo resuelve logaritmos en base e y no en base 10.

A continuación se presentan algunas soluciones a problemas utilizando básicamente el


método random ( ) de la clase Math, desarrollados con la finalidad de mejorar su
comprensión del tema y sus capacidades lógicas.

Analizar cada uno de las soluciones y desarrolle sus propias conclusiones.

Pag. 803
Problema 192

Etapa 01 - Descripción del problema.

Un jugador lanza dos dados, cada uno de los cuales tiene 6 caras, las caras
contienen 1, 2, 3, 4 ,5 y 6 puntos. Una vez que los dados quedan en reposo, se
suman los puntos de las dos caras que quedan hacia arriba. Si la suma es 7 o 11
en el primer lanzamiento, el jugador gana. Si la suma es 2, 3 o 12 en el primer
lanzamiento (resultado que en los casinos reciben el nombre de “craps”), el
jugador pierde (es decir, la casa gana). Si la suma es 4, 5, 6, 8, 9, 10 en el primer
lanzamiento, esto suma se convierte en el punto del jugador. Para ganar, el
jugador debe seguir tirando los dados hasta “lograr su punto”. El jugador perderá
si tira un 7 antes de lograr su punto.

Etapa 04 - Desarrollo de la codificación.

Clase PrgLanzarDados1

package dominioDeLaAplicacion ;

import biblioteca.* ;

class PrgLanzarDados1 {

public static void main ( String arg [ ] ) {

double n1, n2, n3, nf ;


int dado1 = 0, dado2 = 0, suma1 = 0, suma2 = 0, estado = 0 ;
String opc1 = “ ”, opc2 = “ ” ;

do {

System.out.println ( “Lanzar dados” ) ;


Lectura.leerString ( ) ;

dado1 = ( int ) (1 + ( Math.random ( ) * 6 ) ) ;


dado2 = ( int ) (1 + ( Math.random ( ) * 6 ) ) ;

suma1 = dado1 + dado2 ;

System.out.println ( “Dado1 : ” + dado1 ) ;


System.out.println ( “Dado2 : ” + dado2 ) ;

if ( suma1 == 7 || suma1 == 11 ) {
opc1 = “s” ;
estado = 1 ;
Continúa… Etapa 04 - Desarrollo de la codificación.

Clase PrgLanzarDados1

} else
if ( suma1 == 2 || suma1 == 3 || suma1 == 12 ) {
opc1 = “s” ;
estado = 0 ;
} else {

do {
System.out.println ( “Lanzar dados” ) ;
Lectura.leerString ( ) ;

dado1 = ( int ) (1 + ( Math.random ( ) * 6 ) ) ;


dado2 = ( int ) (1 + ( Math.random ( ) * 6 ) ) ;

suma2 = dado1 + dado2 ;

System.out.println ( “Dado1 : ” + dado1 ) ;


System.out.println ( “Dado2 : ” + dado2 ) ;

if ( suma1 == suma2 ) {
estado = 1 ;
opc1 = “s” ;
opc2 = “s” ;
} else
if ( suma2 == 7 ) {
estado = 0 ;
opc1 = “s” ;
opc2 = “s” ;
}

} while ( opc2 != “s” ) ;

}
}while ( opc1 != “s” ) ;

if ( estado == 1 )
System.out.println ( “El jugador gana” ) ;
else
System.out.println ( “El jugador pierde ” ) ;

}
}

Pag. 805
Problema 193

Etapa 01 - Descripción del problema.

Modificar el programa del problema anterior, de tal forma que se muestre un


mensaje preguntando si desea volver a tirar los dados.

Etapa 04 - Desarrollo de la codificación.

Clase PrgLanzarDados2

package dominioDeLaAplicacion ;

import biblioteca.* ;

class PrgLanzarDados2 {

public static void main ( String arg [ ] ) {

int dado1 = 0, dado2 = 0, suma1 = 0, suma2 = 0, estado = 0 ;


String opc1 = “ ”, opc2 = “ ” ;
char opc3 = ‘n’ ;

do {
opc1 = “ ” ;
opc2 = “ ” ;

do {

System.out.println ( “Lanzar dados” ) ;


Lectura.leerString ( ) ;

dado1 = ( int ) (1 + ( Math.random ( ) * 6 ) ) ;


dado2 = ( int ) (1 + ( Math.random ( ) * 6 ) ) ;

suma1 = dado1 + dado2 ;

System.out.println ( “Dado1 : ” + dado1 ) ;


System.out.println ( “Dado2 : ” + dado2 ) ;

if ( suma1 == 7 || suma1 == 11 ) {
opc1 = “s” ;
estado = 1 ;
} else
if (suma1 == 2 || suma1 == 3 || suma1 == 12) {
opc1 = “s” ;
estado = 0 ;
} else {

Continúa… Etapa 04 - Desarrollo de la codificación.


Clase PrgLanzarDados2

do {
System.out.println ( “Lanzar dados” ) ;
Lectura.leerString ( ) ;

dado1 = ( int ) (1 + ( Math.random ( ) * 6 ) ) ;


dado2 = ( int ) (1 + ( Math.random ( ) * 6 ) ) ;

suma2 = dado1 + dado2 ;

System.out.println ( “Dado1 : ” + dado1 ) ;


System.out.println ( “Dado2 : ” + dado2 ) ;

if ( suma1 == suma2 ) {
estado = 1 ;
opc1 = “s” ;
opc2 = “s” ;
} else
if ( suma2 == 7 ) {
estado = 0 ;
opc1 = “s” ;
opc2 = “s” ;
}

} while ( opc2 != “s” ) ;

}
} while ( opc1 != “s” ) ;

if ( estado == 1 )
System.out.println ( “ El jugador gana ” ) ;
else
System.out.println ( “ El jugador pierde ” ) ;

System.out.println ( “Desea volver a jugar [s/n] ” ) ;

opc3 = Lectura.leerChar ( ) ;

} while ( opc3 != ‘n’ ) ;

}
}

Pag. 807
Problema 194

Etapa 01 - Descripción del problema.

Elaborar un programa que simule el lanzamiento de una moneda. Solicitar el


número de veces que se lanzará la moneda. Cuentar el número de veces que
aparece cada lado de la moneda. Mostrar los resultados.

Etapa 04 - Desarrollo de la codificación.

Clase PrgLanzarMoneda

package dominioDeLaAplicacion ;

import biblioteca.* ;

class PrgLanzarMoneda {

public static void main ( String arg [ ] ) {

int moneda, cont1 = 0, cont2 = 0, cant ;

System.out.println ( “Cuántas veces desea Lanzar moneda ? ” ) ;


cant = Lectura.leerInt ( ) ;

for ( int x = 1; x <= cant; x++ ) {

moneda = ( int ) (1 + ( Math.random ( ) * 2 ) ) ;

if (moneda == 1)
cont1 ++ ;
else
cont2 ++ ;

System.out.println ( “La cantidad de veces que a salido la cara es : ” + cont1 ) ;


System.out.println ( “La cantidad de veces que a salido el sello es : ” + cont2 ) ;
}
}
Problema 195

Etapa 01 - Descripción del problema.

Elaborar un programa que simule el juego de tragamonedas, los números son: 1,


2, 3, 4, 5 ,6 y 7 opciones de ganar. El jugador gana cuando el número se repita
tres veces. Los números deberán ser generados aleatoriamente. El premio mayor
se obtiene con el número 7.

Etapa 04 - Desarrollo de la codificación.

Clase PrgTragamoneda1

package dominioDeLaAplicacion ;

import biblioteca.* ;

class PrgTragamoneda1 {

public static void main ( String arg [ ] ) {

int valor1 = 0, valor2 = 0, valor3 = 0, monto = 0 ;


char s, opc1 ;

do {

System.out.println( “Presionar enter para empezar” ) ;


Lectura.leerString ( ) ;

valor1 = ( int ) (1 + ( Math.random ( ) * 7 ) ) ;


valor2 = ( int ) (1 + ( Math.random ( ) * 7 ) ) ;
valor3 = ( int ) (1 + ( Math.random ( ) * 7 ) ) ;

System.out.println ( valor1 + “ ” + valor2 + “ ” + valor3 ) ;

if ( valor1 == valor2 && valor1 == valor3 ) {

s = (char) valor1 ;
switch (s) {
case 1 :
monto = 100 ;
break ;
case 2 :
monto = 200 ;
break ;
case 3 :
monto = 300 ;
break ;

Pag. 809
Continúa… Etapa 04 - Desarrollo de la codificación.

Clase PrgTragamoneda1

case 4 :
monto = 400 ;
break ;
case 5 :
monto = 500 ;
break ;
case 6 :
monto = 600 ;
break ;
case 7 :
monto = 1000 ;
break ;
}
System.out.println ( “Usted gana : ” + monto + “Soles ” ) ;
} else
System.out.println ( “La casa gana” ) ;

monto = 0 ;
System.out.println ( “Desea volver a jugador [s/n] : ” ) ;
opc1 = Lectura.leerChar ( ) ;

} while ( opc1 != ‘n’ ) ;


}
}
Problema 196

Etapa 01 - Descripción del problema.

Modificar el programa del problema anterior, de tal forma que se muestre la


cantidad acumulada del dinero ganado en el tragamoneda.

Etapa 04 - Desarrollo de la codificación.

Clase PrgTragamoneda2

package dominioDeLaAplicacion ;

import biblioteca.* ;

class PrgTragamoneda2 {

public static void main ( String arg [ ] ) {

int valor1 = 0, valor2 = 0, valor3 = 0, monto = 0, acumonto = 0 ;


char s,opc1 ;

do {

System.out.println ( “Presionar enter para empezar” ) ;


Lectura.leerString ( ) ;

valor1=( int ) (1 + ( Math.random ( ) * 7 ) ) ;


valor2=( int ) (1 + ( Math.random ( ) * 7 ) ) ;
valor3=( int ) (1 + ( Math.random ( ) * 7 ) ) ;

System.out.println ( valor1 + “ ” + valor2 + “ ” + valor3 ) ;

if ( valor1 == valor2 && valor1 == valor3 ) {

s= (char) valor1 ;
switch ( s ) {
case 1 :
monto=100 ;
break ;
case 2 :
monto=200 ;
break ;

Pag. 811
Continúa… Etapa 04 - Desarrollo de la codificación.

Clase PrgTragamoneda2

case 3 :
monto=300 ;
break ;
case 4 :
monto=400 ;
break ;
case 5 :
monto=500 ;
break ;
case 6 :
monto=600 ;
break ;
case 7 :
monto=1000 ;
break ;
}

acumonto = acumonto + monto ;


System.out.println ( “Usted gana : ” + monto ) ;
System.out.println ( “El dinero acumulado ganado es : ” + acumonto ) ;

} else
System.out.println ( “La casa gana” ) ;

monto = 0 ;
System.out.println ( “Desea volver a jugador [s/n] : ” ) ;
opc1=Lectura.leerChar ( ) ;

} while ( opc1! = ‘n’ ) ;


}
}
Problema 197

Etapa 01 - Descripción del problema.

Las computadoras están desempeñando un papel cada vez más importante en la


educación. Desarrolle un programa que ayude a un estudiante de primaria a
aprender a multiplicar. Utilice números aleatorios para producir dos enteros
positivos de un solo digito. El programa deberá preguntar ¿Cuánto es 6 por 7?, El
estudiante deberá ingresar la respuesta. El programa verificara si la respuesta es
correcta. Si es correcta mostrará un mensaje ¡Muy bien! y si es incorrecto
mostrará el mensaje ¡No es correcto, por favor intente otra vez!.

Etapa 04 - Desarrollo de la codificación.

Clase PrgMultiplicacion

package dominioDeLaAplicacion ;

import biblioteca.* ;

class PrgMultiplicacion {

public static void main ( String arg [ ] ) {


int valor1 = 0, valor2 = 0, resul1 = 0, resul2 = 0 ;
char s, opc1 ;
do {
System.out.println ( “Aprendiendo a Multiplicar” ) ;
Lectura.leerString ( ) ;

valor1 = ( int ) (1 + ( Math.random() * 9 ) ) ;


valor2 = ( int ) (1 + ( Math.random() * 9 ) ) ;
resul1 = valor1 * valor2 ;

System.out.println ( “¿Cuánto es ” + valor1 + “ por ” + valor2 + “ ?” ) ;


System.out.println ( “Ingresar resultado de la multiplicación : ” ) ;
resul2 = Lectura.leerInt ( ) ;

if ( resul1 == resul2 )
System.out.println ( “Respuesta correcta… Muy bien” ) ;
else
System.out.println ( “No es la respuesta correcta… Vuelva a intentarlo” ) ;

System.out.println ( “Desea volver a intentarlo [s/n] : ” ) ;


opc1 = Lectura.leerChar ( ) ;

} while ( opc1 != ‘n’ ) ;


}
}

Pag. 813
Problema 198

Etapa 01 - Descripción del problema.

Modificar el programa del problema anterior, de tal forma que se muestre un menú
de opciones donde permita sumar, restar, multiplicar y dividir dos números
generados al azar. Se permitirá al estudiante contestar la misma pregunta una y
otra vez hasta que responda correctamente.

Etapa 04 - Desarrollo de la codificación.

Clase PrgMenuOperaciones1

package dominioDeLaAplicacion ;

import biblioteca.* ;

class PrgMenuOperaciones1 {

public static void main ( String arg [ ] ) {

int valor1 = 0, valor2 = 0, resul1 = 0, resul2 = 0, op ;


String operacion = “ ” ;
char opc, signo = ‘ ’ ;

do {

System.out.println ( “Menú de operaciones” ) ;


System.out.println ( “-----------------------------” ) ;
System.out.println ( “[1] Sumar ”);
System.out.println ( “[2] Restar ”);
System.out.println ( “[3] Multiplicar ” ) ;
System.out.println ( “[4] Dividir ”);
System.out.println ( “[5] Salir ”);

System.out.println ( “Elegir opcion : ” ) ;


op=Lectura.leerInt ( ) ;

valor1=( int ) (1 + ( Math.random ( ) * 9 ) ) ;


valor2=( int ) (1 + ( Math.random ( ) * 9 ) ) ;
switch ( op ) {

case 1 :
resul1 = valor1 + valor2 ;
operacion = “Suma” ;
signo = ‘+’ ;
break ;
Continúa… Etapa 04 - Desarrollo de la codificación.

Clase PrgMenuOperaciones1

case 2 :
resul1 = valor1 - valor2 ;
operacion = “Resta” ;
signo = ‘-’ ;
break ;
case 3 :
resul1 = valor1 * valor2 ;
operacion = “Multiplicación” ;

signo = ‘*’ ;
break ;
case 4 :
resul1 = valor1 / valor2 ;
operacion = “División” ;

signo = ‘/’ ;
break ;
case 5 :
System.exit (0) ;
break ;
}

System.out.println ( “¿Cuánto es ” + valor1 + “ ” + signo + “ ” + valor2 + “ ?” ) ;

do {

System.out.println ( “Ingresar resultado de la ” + operacion + “ :” ) ;


resul2 = Lectura.leerInt ( ) ;

if ( resul1 != resul2 )
System.out.println ( “No es, por favor trata otra vez” ) ;

} while ( resul1 != resul2 ) ;


System.out.println ( “Muy bien” ) ;

} while ( op != 5 ) ;
}
}

Pag. 815
Problema 199

Etapa 01 - Descripción del problema.

Modificar el programa del problema anterior, de tal forma que se muestre un menú
de opciones donde permita sumar, restar, multiplicar y dividir dos números al azar.
Mostrar la cantidad de preguntas correctas y la cantidad de preguntas incorrectas.

Etapa 04 - Desarrollo de la codificación.

Clase PrgMenuOperaciones2

package dominioDeLaAplicacion ;

import biblioteca.* ;

class PrgMenuOperaciones2 {

public static void main ( String arg [ ] ) {

int valor1 = 0, valor2 = 0, resul1 = 0, resul2 = 0 ;


int op, cont1 = 0, cont2 = 0 ;
String operacion = “ ” ;
char opc, signo = ‘ ’ ;

do {

System.out.println ( “Menú de operaciones” ) ;


System.out.println ( “-----------------------------” ) ;
System.out.println ( “[1] Sumar ”);
System.out.println ( “[2] Restar ”);
System.out.println ( “[3] Multiplicar ” ) ;
System.out.println ( “[4] Dividir ”);
System.out.println ( “[5] Salir ”);

System.out.println ( “Elegir opcion : ” ) ;


op = Lectura.leerInt ( ) ;

valor1 = ( int ) (1 + ( Math.random ( ) * 9 ) ) ;


valor2 = ( int ) (1 + ( Math.random ( ) * 9 ) ) ;
switch ( op ) {

case 1 :
resul1 = valor1 + valor2 ;
operacion = “Suma” ;
signo = ‘+’ ;
break ;
Continúa… Etapa 04 - Desarrollo de la codificación.

Clase PrgMenuOperaciones2

case 2 :
resul1 = valor1 - valor2 ;
operacion = “Resta” ;
signo = ‘-’ ;
break ;
case 3 :
resul1 = valor1 * valor2 ;
operacion = “Multiplicación” ;
signo = ‘*’ ;
break ;
case 4 :
resul1 = valor1 / valor2 ;
operacion = “División” ;
signo = ‘/’ ;
break ;
case 5 :
System.exit (0) ;
break ;
}

System.out.println ( “¿Cuánto es ” + valor1 + “ ” + signo + “ ” + valor2 + “ ?” ) ;

System.out.println ( “Ingresar resultado de la ” + operacion + “: ” ) ;


resul2 = Lectura.leerInt ( ) ;

if ( resul1 != resul2 ) {
System.out.println ( “No es, por favor trata otra vez” ) ;
cont1 ++ ;
} else {
System.out.println ( “Muy bien” ) ;
cont2 ++ ;
}

} while ( op != 5 ) ;

System.out.println ( “La cantidad de respuesta correctas fueron : ” + cont1 ) ;


System.out.println ( “La cantidad de respuestas incorrectas fueron : ” + cont2 ) ;

}
}

Pag. 817
Problema 200

Etapa 01 - Descripción del problema.

Elaborar un programa que permita adivinar cuál es el número entero generado al


azar entre 1 y 1000. El jugador ingresará una primera estimación, si la estimación
del jugador es incorrecta, el programa deberá indicar si el número ingresado fue
más grande o fué más pequeño que el número generado al azar. Cuando la
respuesta sea correcta se mostrará un mensaje de felicitaciones.

Etapa 04 - Desarrollo de la codificación.

Clase PrgAdivinarNumero1

package dominioDeLaAplicacion ;

import biblioteca.* ;

class PrgAdivinarNumero1 {

public static void main ( String arg [ ] ) {

int valor = 0, num = 0 ;


char opc = ‘ ’ ;
do {
System.out.println ( “Adivine el número” ) ;
valor = ( int ) (1 + ( Math.random ( ) * 1000 ) ) ;
do {
System.out.println ( “Ingresar número : ” ) ;
num = Lectura.leerInt ( ) ;
if ( num < valor )
System.out.println ( “El número es demasiado chico. Pruebe otra vez” ) ;
else
if ( num > valor )
System.out.println ( “El número es demasiado grande. Pruebe otra vez” ) ;
else
System.out.println ( “Felicidades adivinaste el número ” ) ;

} while (num != valor ) ;


System.out.println ( “Desea Continuar [s/n]: ” ) ;
opc = Lectura.leerChar ( ) ;

} while ( opc != ‘n’ ) ;


}
}
Problema 201

Etapa 01 - Descripción del problema.

Modificar el programa del problema anterior, de tal forma que se pueda ingresar la
cantidad de intentos que se tiene para adivinar el número.

Etapa 04 - Desarrollo de la codificación.

Clase PrgAdivinarNumero2

package dominioDeLaAplicacion ;

Import biblioteca.* ;

class PrgAdivinarNumero2 {

public static void main ( String arg [ ] ) {

int valor = 0, num = 0, intentos, cont = 0 ;


char opc = ‘ ’ ;
do {
System.out.println ( “Adivine el número” ) ;
System.out.println ( “Ingrese la cantidad de intentos : ” ) ;
intentos=Lectura.leerInt ( ) ;
valor = ( int ) (1 + ( Math.random ( ) * 1000 ) ) ;

do {
System.out.println ( “Ingresar número : ” ) ;
num = Lectura.leerInt ( ) ;
if (cont >= intentos ) {
System.out.println ( “Deberías haberlo hecho mejor” ) ;
valor = num ;
}
else if ( num < valor )
System.out.println ( “El número es demasiado chico. Pruebe otra vez” ) ;

else if ( num > valor )


System.out.println ( “El número es demasiado grande. Pruebe otra vez ” ) ;
else
System.out.println ( “Felicidades adivinaste el número” ) ;
cont ++ ;
} while ( num != valor ) ;
System.out.println ( “Desea Continuar [s/n]: ” ) ;
opc=Lectura.leerChar ( ) ;
} while ( opc != ‘n’ ) ;
}
}

Pag. 819

También podría gustarte