Datos numéricos Curso de Programación galia.fc.uaslp.mx/~medellin/IntProg.htm.
-
Upload
maria-victoria-araya-san-segundo -
Category
Documents
-
view
219 -
download
0
Transcript of Datos numéricos Curso de Programación galia.fc.uaslp.mx/~medellin/IntProg.htm.
Datos numéricos
Curso de Programacióngalia.fc.uaslp.mx/~medellin/IntProg.htm
OBJETIVOS
• Seleccionar los tipos apropiados para los datos numéricos.• Escribir expresiones aritméticas en Java.• Evaluar expresiones aritméticas usando las reglas de precedencia.• Describir cómo trabaja la asignación de memoria para los objetos y las
primitivas de valores de datos.• Escribir expresiones matemáticas usando métodos de la clase Math.• Escribir programas que usan datos de entrada y de salida mediante las
clases• CuadroEntrada y CuadroSalida del paquete Javabook.• Aplicar una técnica de desarrollo incremental para escribir los
programas.• (Opcional) Describir cómo se representan en memoria los números
enteros y reales.
Introducción
Cuando se escriben programas de computadora, es útil para los novatos visualizar tres tare entrada, computación y salida.
Los programas de computadora se visualizan como un proceso consistente en obtener una entrada, llevar a cabo la entrada en la computación sobre los datos de entrada y mostrar los resultados de la computación.
Variables
Una variable tiene tres propiedades:
Una posición de memoria para almacenar el valor
El tipo de datos almacenado en la posición de memoria
El nombre usado para referirse a esa posición de memoria.
La sintaxis general para declarar variables es
<tipo de datos> <variables>;
EjemploSe puede declarar x e y por separado o en una sola línea
int x;int y;
O
int x, y;
No se puede declarar el mismo nombre de variable más de una vez.
int x, y, z;int y;
Tipos de datos numéricos de Java y sus precisiones
Tipo ContenidoValor Valor mínimo Valor máximode dato por defecto*
byte entero 0 -128 127
short entero 0 -32768 32767
int entero 0 -2147483648 2147483647
long entero 0 -9223372036854775808 9223372036854775807
float real 0.0 -3.40282347E+38** 3.40282347E+38
double real 0.0 -1,79769313486231570E+308 1,79769313486231570E+308
* No hay valor por defecto asignado a una variable local.
**El carácter E indica que un número se expresa en notación científica.
Otro ejemploA continuación se muestra un ejemplo de declaración de variables de distintos tipos de datos:
int i, j, k ;float numeroUno, numeroDos;long enteroGrande;double numeroGrande;
Una variable también puede ser iniciada cuando se declara. Por ejemplo, se puede dar valor inicial a las variables enteras contador y altura a 10 y 34, respectivamente, de la siguiente for
int contador = 10, altura = 34;
Declaración de objetos
De la misma forma que se pueden iniciar las variables cuando se declaran, se pueden declarar y crear un objeto ai mismo tiempo, por ejemplo, la declaración
MainWindow ventanaPrincipal = new MainWindow( );
es equivalente a
MainWindow ventanaPrincipal;ventanaPrincipal = new MainWindow( );
Sentencia de asignaciónSe asigna un valor a un número usando una sentencia de asignación.
La sintaxis para la sentencia de asignación es
<variable> = <expresion>;
donde <expresion> es una expresión aritmética y el valor de <expresion> se asigna a <variable>.
A continuación se muestran ejemplos de sentencias de asignación válidas:
suma = primerNumero + segundoNumero;solución = x*x-2*x+l;media = (x+y+z) / 3,0;
Punto importante
Antes de usar una variable, es necesario declararla y asignarle un valor en primer lugar.
Asignación a variables
int primerNumero, segundoNumero;
Estado de la memoria
PrimerNumero = 234;segundoNumero = 87;
después de ejecutar A
primerNumero
Las variables primerNumero y segundoNumero se declaran e indican en memoria.
Asignación de valores a las variables primerNumero y segundoNumero.
A
B
segundoNumero
int primerNumero, segundoNumero;
PrimerNumero = 234;segundoNumero = 87;
después de ejecutar B
primerNumero 234
segundoNumero 87
Diferencia entre declaración de objetos y dato numérico
int numero;
numero = 237;
numero = 35;
Custumer cliente;
cliente = new Custumer();
cliente = new Custumer();
numero cliente
Diferencia entre declaración de objetos y dato numérico
int numero;
numero = 237;
numero = 35;
Custumer cliente;
cliente = new Custumer();
cliente = new Custumer();
numero 237 cliente
Costumer
Diferencia entre declaración de objetos y dato numérico
int numero;
numero = 237;
numero = 35;
Custumer cliente;
cliente = new Custumer();
cliente = new Custumer();
numero 35 cliente
Costumer Costumer
Efecto de asignar el contenido de una variable a otra
int numero, numero1;
numero1 = 237;
numero2 = numero1;
Custumer cliente, cliente 2;
cliente1 = new Custumer();
cliente2 = cliente1;
numero1cliente1
numero2cliente2
Efecto de asignar el contenido de una variable a otra
int numero, numero1;
numero1 = 237;
numero2 = numero1;
Custumer cliente, cliente 2;
cliente1 = new Custumer();
cliente2 = cliente1;
numero1 237cliente1
numero2cliente2
Costumer
Efecto de asignar el contenido de una variable a otra
int numero, numero1;
numero1 = 237;
numero2 = numero1;
Custumer cliente, cliente 2;
cliente1 = new Custumer();
cliente2 = cliente1;
numero1 237cliente1
numero2cliente2
Costumer
237
Preguntas rápidas
Preguntas rápidas
1. ¿Por qué no son válidas las declaraciones siguientes?
int a, b, a;float x, int;float w, int, x;numeroGrande double;
2. Asumiendo que las declaraciones siguientes se ejecutan en secuencia, ¿por qué son inválidas la segunda y tercera declaración?int a, b;int a;float b;
Preguntas rápidas
3. Nombre seis tipos de datos para valores numéricos.
4. ¿Cuáles de las siguientes sentencias de asignación son inválidas (asumiendo que las variables están declaradas correctamente)?x = 12;12 = x;y + y = x;y = x + 12;
5. Dibuje el diagrama de estado de memoria para el siguiente código:Cuenta cuentaLeche, cuentaExpreso;cuentaLeche = new Cuenta ();cuentaExpreso = new Cuenta ();cuentaLeche = cuentaExpreso;
Expresiones aritméticasOperadores Aritméticos
Operador Valor Operación Java Ejemplo (x=10,y=7,z=2,5)
Suma + x + y 17
Resta - x - y 3
Multiplicación * x * y 70
División / x / y 1
x / z 4.0
Modulo(resto) % x % y 3
Reglas de precedencia para operadores aritméticos y paréntesis
subexpresión ( )
operadores unarios -, +
operadores de multiplicación * / %
operadores de suma y resta +, -
Ejemplo de precedencia
a * (b + - (c / d) / e) + (f - g % h)1
2
3
4
5
6
7
8
Conversión de tipo
Cuando una expresión aritmética está formada por variables y constantes del mismo de datos, entonces el resultado de la expresión será también de ese tipo de datos.
Cuando los tipos de datos de las variables y constantes en una expresión aritmética son distintos, es necesario llevar a cabo una conversión.
Una conversión de tipo es un proceso que convierte el valor de un tipo de datos a otro tipo de datos.
Reglas para promoción aritmética
Tipo de operador Regla de promoción
Unario 1. Si el operando es de tipo byte o short, se convierte a int.2. En cualquier otro caso, el operando sigue siendo del mismo tipo
Binario 1. Si el operando es de tipo double, entonces el otrooperando convierte a double.2. En cualquier otro caso, si cualquier operando es de tipofloat entonces el otro operando se convierte a float.3. En cualquier otro caso, si uno de los operandos es detipo long entonces el otro operando se convierte a long.4. En cualquier otro caso, ambos operandos se convierten a int.
Operador de conversión de tipoLa sintaxis es para conversión de tipo es:
(<tipo de datos>) <expresion>
El operador de conversión de tipos es un operador unario y tiene una precedencia mayor que cualquier operador binario.
Es necesario usar paréntesis para hacer conversión de tipo de una subexpresión.
Por ejemplo, la expresión
a + (double) (x + y * z)
dará como resultado que la subexpresión x + y * z se convertirá a double.
Operadores en cascadaSi se desea asonar un valor a múltiples varíales, se pueden usar operadores de asignación en cascada de la forma siguiente:
x = y = 1;
que es equivalente a decir.
y = 1;
x = 1;
El símbolo de asignación = es realmente un operador y su orden de precedencia es más bajo que el de ningún otro operador.
Los operadores de asignación se evalúan de izquierda a derecha.
Preguntas rápidas1. Evalúe las siguientes expresiones:a. 3 + 5 / 7b. 3 * 3 + 3 % 2c. 3 + 2 / 5 + - 2 * 4d. 2 * (1 + -(3 / 4) / 2) * (2 - 6 % 3)
2. ¿Cuál es el tipo de datos resultante de las siguientes expresiones?
a. (3 + 5) / 7b. (3+5) / (float) 7c. (float) ( (3+5) / 7 )
3. ¿Cuál de las siguientes expresiones es equivalente a
a. - b * (c + 34) / 2 * ab. - b * (c + 34) / (2 * a)c. - b * c + 34 / (2 * a)
a
cb
2
)34(
Constantes
Una constante se declara forma similar a una variable, pero añadiendo la palabra reservada final.
Una constante dede tener un valor asignado cuando se declara.
final double PI =3.14159
final short CONSTANTE_DE_FARADAY = 23060;
final double CM_POR_PULGADA = 2.54;
final int MESES_EN_UN_AÑO = 12;
Constantes
La constante PI se denomina nombrada o constante simbólica.
Las referencias a las constantes simbólicas se llevan a cabo con identificadores, como PI y CONSTANTE_DE_FARADAY.
El segundo tipo de constante se denomina constante literal y se referencia usando un valor real.
final double PI = 3.14159;
double area;
área = 2 * PI * 345.79;
Error comúnPuesto que una constante numérica, como 345.79 representa un valor double, las siguientes sentencias
float numero;
numero = 345.79;
por ejemplo, darían un error de compilación.Los tipos de datos no coinciden y la variable (float) tiene menor precisión que la constante (double).
Para corregir este error, tenemos oue escribir la sentencia de asignación como:
numero = 345.79f;
o
numero = (float) 345.79;
Este es uno de los errores más frecuentes que comete la gente cuando escñbe programas de Java, especialmerte aquellos que tienen experiencia en programación anterior en otros lenguajes.
Notación científica
También se pueden expresar las constantes literales float y double en notación científica:
número X 10exponente
lo que en Java se expresa como:
<numero> E <exponente>
donde <numero> es una constante literal que puede o no contener un punto decimal y <exponente> es un entero con o sin signo.
EjemplosSeguidamente, se muestran algunos ejemplos:
12.40E+20923E3329.0098E-102234E+5D4.45E2
A continuación se muestran algunos ejemplos de declaración de constantes:
final double VELOCIDAD_DE_LA_LUZ=3.0E+10D; //la unidad es // cm/sfinal short MAX PESO PERMITIDO = 400;
La clase Math
La clase Math en el paquete java.lang contiene los métodos de clases frecuentemente usados en las funciones matemáticas.
Por ejemplo:
abs(a), acos( a ), asin(a), atan(a), ceil(a), cos(a), exp(a), floor(a), log(a), max(a,b), min(a,b), pow(a,b), random(), round(a), sin8a),sqrt(a), tan(a).
Ejemplo
(1.0/2.0)*Math.sin(x-Math.PI/Math.sqrt(y))
yxsen
2
1
Observe cómo se hace referencia a los métodos y las constantes de la clase en la expresión. La sintaxis es:
<nombre de clase>.<nombre de método> (<argurnentos>)
o
<nombre de clase>.<constante de clase>
Preguntas rápidas
1. ¿Qué está equivocado en lo siguiente?
a. y = (1/2) * Math.sqrt( X );b. y = sqrt(38.0);c. y = Math.exp(2, 3);d. y = math.sqrt(b*b - 4*a*c)/(2*a);
2. Si otro programador escribe la siguiente sentencia, ¿sospecharía que hay algún error por parte de este programador? ¿Cuál sería el valor de y?
a. y = Math.sin(360);b. y = Math.cos(45);
InputBox
Un objeto CuadroEntrada es un diálogo, lo que significa que debe especificar un marco propietario y después crear el objeto. Como antes, se usará ventanaPrincipal como propietario.
InputBox CuadroEntrada;CuadroEntrada = new InputBox(ventanaPrincipal);
Para introducir un entero se envía un mensaje getInteger a un objeto
CuadroEntrada de la forma siguiente
CuadroEntrada.getInteger( );
Métodos de InputBox
Los métodos deBox aceptan una cadena de caracteres y permiten leer números enteros, float y double.
getDouble - Perimte introducir un número double.
getFloat - Perimte introducir un número float.
getInteger - Perimte introducir un número integer.
ejemplo
import javabook.*;
public class Test0{ public static void main(String[] args) { MainWindow ventanaPrincipal = new MainWindow(); InputBox cuadroEntrada; cuadroEntrada = new InputBox(ventanaPrincipal); ventanaPrincipal.show(); int x; x = cuadroEntrada.getInteger(“Teclee un entero:”); }}
Preguntas rápidas1. ¿Qué está equivocado en el siguiente código?
final double x = 123.444;x = cuadroEntrada.getDouble();
2. ¿Qué código de los siguientes es válido?
a.
double numero;numero = cuadroEntrada.getFloat();
b.
float numero;numero = cuadroEntrada.getDouble();
OutputBoxEn la programación orientada a objetos, e\ desarrollo eficiente y efectivo de programas radica en el uso apropiado de las clases.
Las clases se deben usar para lograr el propósito para el o\ue fueron disenadas igual o\ye se elige la herramienta más adecuada para una determinada tarea.
Cuando se quiere construir una mesa, se debería usar una sierra circular para cortar, pero cuando quiere construir una casa de pajaros probablemente será necesario usar una herramienta de corte más precisa.
Una clave para obtener el éxito en la programación orientada a objetos es aprender a seleccionar la clase más apropiada para cada tarea.
Más tarde aprenderá a diseñar clases nuevas, si no encuentra ninguna clase apropiada para lo que desea.
OutputBox
A continuación se muestra cómo se crea y se declara un objeto OutputBox cuyo propietario es un objeto ventanaPrincipal:
OutputBox cuadroSalida;cuadroSalida = new OutputBox(ventanaPrincipal);
El método print muestra un argumento en un objeto cuadroSalida.
cuadroSalida.print("Hola, Dr. Cafeína.");
ejemploimport javabook.*;public class Test{ public static void main(String[] args){ MainWindow ventanaPrincipal = new MainWindow();
OutputBox cuadroSalida; cuadroSalida = new OutputBox(ventanaPrincipal); ventanaPrincipal.show(); cuadroSalida.show(); int x, y; x = 123; y = x + x; cuadroSalida.printLine(“Hola, Dr. Cafeína.”); cuadroSalida.print (“x = “) ; cuadroSalida.printLine(x); cuadroSalida.print (“x + x = “) ; cuadroSalida. printLine(y); cuadroSalida. printLine (“FIN.”); }}
ejemploimport javabook.*;public class Test2{ public static void main(String[] args){ MainWindow ventanaPrincipal = new MainWindow();
OutputBox cuadroSalida; cuadroSalida = new OutputBox(ventanaPrincipal); ventanaPrincipal.show(); cuadroSalida.show(); int x, y; x = 123; y = x + x; cuadroSalida.printLine(“Hola, Dr. Cafeína.”); cuadroSalida.print (“x = “ + x); cuadroSalida.print (“x + x = “ + y) ; cuadroSalida. printLine (“FIN.”); }}
Calculador de préstamos
Escriba un programa calculador de préstamos que calcule los pagos mensuales y totales para una determinada cuantía del préstamo, la tasa de interés anual y el período del préstamo.
Plan global
1. Obtener tres valores de entrada: cuantiaPrestamo, tasaInteres y duracionPrestamo.
2. Calcular los pagos mensuales y totales.
3. Mostrar los resultados.
N
R
RLmensualPago
11
1
donde L es la cuantía del préstamo, R es la tasa de interés mensual y N es el número de pagos.
Documento de diseño: CalculadorDePrestamos
CalculadorDePrestamos - La clase principal del programa.
MainWindow - La ventana principal del programa. El título se define como Calculador De Prestamos. Ésta es una clase de javabook.
InputBox - Un objeto InputBox se usa en el programa para usar los tres valores de entrada: cuantía del préstamo, tasa de interés anual y duración del préstamo. Esta clase también es de javabook.
OutputBox - Se usa un objeto OutputBox para mostrar los valores de entrada y los dos valores calculados: pagos mensuales y pago total. Esta clase es de javabook.
Math -Se usa el método pow para evaluar la exponenciación en la fórmula que nos permite calcular el pago mensual. Esta clase es del programa |ava.lang. Nota: no es necesario importar java.lang. Las clases en java.lang están disponibles a todos los programas sin necesidad de importarlas.
Diagrama de objetos
show
getFloat
getInteger skipLine
printLineshow
cuadroEntrada
InputBox
cuadroSalida
OutputBox
ventanaPrincipal
MainWindow
Math
pow
main
CalculadorDePrestamos