Utilización de la clase math

9
Utilización de la clase Math Se puede usar la clase java.lang.Math para ejecutar muchas operaciones Matemáticas. Las constantes y métodos de la clase son: double E: El número 'e' (2.7 1828 18284590452354) double PI: La constante pi (3.14159265358979323846) double sin(doub1e a): Seno double cos(doub1e a): Coseno double tan(doub1e a): Tangente double asin(doub1e a): Arcoseno double acos(doub1e a): Arcocoseno double atan(doub1e a): Arcotangente double atan2(double a): Arcotangente (versión 2 del operando) double exp(doub1e a): Eleva el número 'e' a la potencia 'a' double log(doub1e a): Logaritmo del valor 'a' double sqrt(doub1e a): Raíz cuadrada del valor 'a' double pow(doub1e a, double b): Elevar el valor 'a' a la potencia 'b' double cell(doub1e a): Método ceiling: Devuelve el número entero más pequeño mayor o igual que el número especificado double floor(doub1e a): Métodofloor es el entero mayor o igual al mismo numero double rint(doub1e a): Entero aleatorio int round(doub1e a): Redondea un double long round(float a): Redondea unfloat double random( ): Número aleatorio int abs(int a): Valor absoluto de un entero long abs(1ong a): Valor absoluto de un long float abs(float a): Valor absoluto de unfloat double abs(doub1e a): Valor absoluto de un double int min(int a, int b): Mínimo de los dos enteros long min(1ong a, long b): Mínimo de dos long float min(float a,float b): Mínimo de dosfloat double min(doub1e a, double b): Mínimo de dos double int max(int a, int b): Máximo de dos enteros long max(1ong a, long b): Máximo de dos long float max(float a,float b): Máximo de dosfloat double max(doub1e a, double b): Máximo de dos doublé int a=9.55; S.O.P( Math.round(a) ); :::::::::::::::::::::: double base =5; double exponente=3;

description

Utilización de la clase math

Transcript of Utilización de la clase math

Page 1: Utilización de la clase math

Utilización de la clase Math

Se puede usar la clase java.lang.Math para ejecutar muchas operaciones Matemáticas.Las constantes y métodos de la clase son:double E: El número 'e' (2.7 1828 18284590452354)double PI: La constante pi (3.14159265358979323846)double sin(doub1e a): Senodouble cos(doub1e a): Coseno

double tan(doub1e a): Tangentedouble asin(doub1e a): Arcosenodouble acos(doub1e a): Arcocosenodouble atan(doub1e a): Arcotangentedouble atan2(double a): Arcotangente (versión 2 del operando)double exp(doub1e a): Eleva el número 'e' a la potencia 'a'double log(doub1e a): Logaritmo del valor 'a'double sqrt(doub1e a): Raíz cuadrada del valor 'a'double pow(doub1e a, double b): Elevar el valor 'a' a la potencia 'b'double cell(doub1e a): Método ceiling: Devuelve el número entero más pequeño mayor o igual que el número especificadodouble floor(doub1e a): Métodofloor es el entero mayor o igual al mismo numerodouble rint(doub1e a): Entero aleatorioint round(doub1e a): Redondea un doublelong round(float a): Redondea unfloatdouble random( ): Número aleatorioint abs(int a): Valor absoluto de un enterolong abs(1ong a): Valor absoluto de un longfloat abs(float a): Valor absoluto de unfloatdouble abs(doub1e a): Valor absoluto de un doubleint min(int a, int b): Mínimo de los dos enteroslong min(1ong a, long b): Mínimo de dos longfloat min(float a,float b): Mínimo de dosfloatdouble min(doub1e a, double b): Mínimo de dos doubleint max(int a, int b): Máximo de dos enteroslong max(1ong a, long b): Máximo de dos longfloat max(float a,float b): Máximo de dosfloatdouble max(doub1e a, double b): Máximo de dos doublé

int a=9.55;S.O.P( Math.round(a) );

::::::::::::::::::::::

double base =5;double exponente=3;double potencia =0;potencia = Math.pow(base, exponente);System.out.println("potencia =" +potencia);

Math.___(variable)

Page 2: Utilización de la clase math

C. Entrada/Salida por archivo

a.) Tipos de archivos

En Java es posible utilizar dos tipos de archivos (de texto o binarios) y dos tipos de acceso a los archivos (secuencial o aleatorio).

Los archivos de texto están compuestos de caracteres legibles, mientras que los binarios pueden almacenar cualquier tipo de datos (int, float, boolean,...).

Una lectura secuencial implica tener que acceder a un elemento antes de acceder al siguiente, es decir, de una manera lineal (sin saltos). Sin embargo los archivos de acceso aleatorio permiten acceder a sus datos de una forma aleatoria, esto es indicando una determinada posición desde la que leer/escribir.

b.) Clases a estudiar

En el paquete java.io existen varias clases de las cuales podemos crear instancias de clases para tratar todo tipo de archivos.

En este tutorial sólo vamos a trata las tres principales:

FileOutputStream: Archivo de salida de texto. Representa archivos de texto para escritura a los que se accede de forma secuencial.FileInputStream: Archivo de entrada de texto. Representa archivos de texto de sólo lectura a los que se accede de forma secuencial.RandomAccessFile: Archivo de entrada o salida binario con acceso aleatorio. Es la base para crear los objetos de tipo archivo de acceso aleatorio. Estos archivos permiten multitud de operaciones; saltar hacia delante y hacia atrás para leer la información que necesitemos en cada momento, e incluso leer o escribir partes del archivo sin necesidad de cerrarlo y volverlo a abrir en un modo distinto.c.) Generalidades

Para tratar con un archivo siempre hay que actuar de la misma manera:

1. Se abre el archivo.

Para ello hay que crear un objeto de la clase correspondiente al tipo de archivo que vamos a manejar, y el tipo de acceso que vamos a utilizar:

TipoDeArchivo obj = new TipoDeArchivo( ruta );

Donde ruta es la ruta de disco en que se encuentra el archivo o un descriptor de archivo válido.

Este formato es válido, excepto para los objetos de la clase RandomAccessFile (acceso aleatorio), para los que se ha de instanciar de la siguiente forma:

RandomAccessFile obj = new RandomAccessFile( ruta, modo );

Donde modo es una cadena de texto que indica el modo en que se desea abrir el archivo; "r" para sólo lectura o "rw" para lectura y escritura.

2. Se utiliza el archivo.

Para ello cada clase presenta diferentes métodos de acceso para escribir o leer en el archivo.

Page 3: Utilización de la clase math

3. Gestión de excepciones (opcional, pero recomendada)

Se puede observar que todos los métodos que utilicen clases de este paquete deben tener en su definición una cláusula throws IOException. Los métodos de estas clases pueden lanzar excepciones de esta clase (o sus hijas) en el transcurso de su ejecución, y dichas excepciones deben de ser capturadas y debidamente gestionadas para evitar problemas.

4. Se cierra el archivo y se destruye el objeto.

Para cerrar un archivo lo que hay que hacer es destruir el objeto. Esto se puede realizar de dos formas, dejando que sea el recolector de basura de Java el que lo destruya cuando no lo necesite (no se recomienda) o destruyendo el objeto explícitamente mediante el uso del procedimiento close() del objeto:

obj.close()

d.) La clase FileOutputStream

Mediante los objetos de esta clase escribimos en archivos de texto de forma secuencial.

Presenta el método write() para la escritura en el archivo. Presenta varios formatos:

int write( int c ): Escribe el carácter en el archivo.int write( byte a[] ): Escribe el contenido del vector en el archivo.int write( byte a[], int off, int len ): Escribe len caracteres del vector a en el archivo, comenzando desde la posición off.El siguiente ejemplo crea el archivo de texto "/carta.txt" a partir de un texto que se le introduce por teclado:

import java.io.*;

class CreaCarta {

public static void main(String args[]) throws IOException{

int c;

FileOutputStream f=new FileOutputStream("/carta.txt");

while( ( c=System.in.read() ) != -1 )

f.write( (char)c );

f.close();

}

Page 4: Utilización de la clase math

}

e.) La clase FileInputStream

Mediante los objetos de esta clase leemos de archivos de texto de forma secuencial.

Presenta el método read() para la lectura del archivo. Este método se puede invocar de varias formas.

int read(): Devuelve el siguiente carácter del archivo.int read( byte a[] ): Llena el vector a con los caracteres leídos del archivo. Devuelve la longitud del vector que se ha llenado si se realizó con éxito o –1 si no había suficientes caracteres en el archivo para llenar el vector.int read( byte a[], int off, int len ): Lee len caracteres del archivo, insertándolos en el vector a.Todos ellos devuelven -1 si se ha llegado al final del archivo (momento de cerrarle).

El siguiente ejemplo muestra el archivo de texto "/carta.txt" en pantalla:

import java.io.*;

class MuestraCarta {

public static void main(String args[]) throws IOException {

int c;

FileInputStream f=new FileInputStream("/carta.txt");

while( ( c=f.read() ) != -1 )

System.out.print( (char)c );

f.close();

}

}

f.) La clase RandomAccessFile

Mediante los objetos de esta clase utilizamos archivos binarios mediante un acceso aleatorio, tanto para lectura como para escritura. En estos archivos hay un índice que nos dice en qué posición del archivo nos encontramos, y con el que se puede trabajar para posicionarse en el archivo.

Page 5: Utilización de la clase math

Métodos de desplazamiento

Cuenta con una serie de funciones para realizar el desplazamiento del puntero del archivo. Hay que tener en cuenta que cualquier lectura o escritura de datos se realizará a partir de la posición actual del puntero del archivo.

long getFilePointer();Devuelve la posición actual del puntero del archivo.void seek( long l ); Coloca el puntero del archivo en la posición indicada por l. Un archivo siempre empieza en la posición 0.int skipBytes( int n ); Intenta saltar n bytes desde la posición actual.long length(); Devuelve la longitud del archivo.void setLength( long l); Establece a l el tamaño de este archivo.FileDescriptor getFD(); Devuelve el descriptor de este archivo.Métodos de escritura

La escritura del archivo se realiza con una función que depende el tipo de datos que se desee escribir.

void write( byte b[], int ini, int len ); Escribe len caracteres del vector b.void write( int i ); Escribe la parte baja de i (un byte) en el flujo.void writeBoolean( boolean b ); Escribe el boolean b como un byte.void writeByte( int i ); Escribe i como un byte.void writeBytes( String s ); Escribe la cadena s tratada como bytes, no caracteres.void writeChar( int i ); Escribe i como 1 byte.void writeChars( String s ); Escribe la cadena s.void writeDouble( double d ); Convierte d a long y le escribe como 8 bytes.void writeFloat( float f ); Convierte f a entero y le escribe como 4 bytes.void writeInt( int i ); Escribe i como 4 bytes.void writeLong( long v ); Escribe v como 8 bytes.void writeShort( int i ); Escribe i como 2 bytes.void writeUTF( String s ); Escribe la cadena s utilizando la codificación UTF-8.Los métodos que escriben números de más de un byte escriben el primero su parte alta.

Métodos de lectura

La lectura del archivo se realiza con una función que depende del tipo de datos que queremos leer.

boolean readBoolean(); Lee un byte y devuelve false si vale 0 o true sino.byte readByte(); Lee y devuelve un byte.char readChar(); Lee y devuelve un caracter.double readDouble(); Lee 8 bytes, y devuelve un double.float readFloat(); Lee 4 bytes, y devuelve un float.void readFully( byte b[] ); Lee bytes del archivo y los almacena en un vector b.void readFully( byte b[], int ini, int len ); Lee len bytes del archivo y los almacena en un vector b.int readInt(); Lee 4 bytes, y devuelve un int.long readLong(); Lee 8 bytes, y devuelve un long.short readShort(); Lee 2 bytes, y devuelve un short.int readUnsignedByte(); Lee 1 byte, y devuelve un valor de 0 a 255.int readUnsignedShort(); Lee 2 bytes, y devuelve un valor de 0 a 65535.String readUTF(); Lee una cadena codificada con el formato UTF-8.int skipBytes(int n); Salta n bytes del archivo.Si no es posible la lectura devuelven –1.

Ejemplo

Page 6: Utilización de la clase math

Vamos a crear un pequeño programa que cree y acceda a un archivo binario, mediante acceso aleatorio.

El siguiente ejemplo crear un archivo binario que contiene los 100 primeros números (en orden):

// Crea un archivo binario con los 100 primeros numeros

static void creaFichBin( String ruta ) throws IOException {

RandomAccessFile f=new RandomAccessFile(ruta,"rw"); // E/S

for ( int i=1; i <= 100 ; i++ )

{

try{

f.writeByte( i );

} catch( IOException e){

// Gestion de excepcion de ejemplo

break; // No se puede seguir escribiendo

}

f.close();

}

}

El siguiente método accede al elemento cual de un archivo binario, imprimiendo la longitud del archivo, el elemento cual y su 10 veces siguiente elemento:

static void imprimeEltoN(String ruta, long cual)

Page 7: Utilización de la clase math

throws IOException{

RandomAccessFile f=new RandomAccessFile(ruta,"r"); // E/

System.out.print( "El archivo " + ruta );

System.out.println( " ocupa " + f.length() + " bytes." );

f.seek( cual-1 ); // Me posiciono (-1 porque empieza en 0)

System.out.print(" En la posicion " + f.getFilePointer() );

System.out.println(" esta el numero " + f.readByte() );

f.skipBytes( 9 ); // Salto 9 => Elemento 10 mas alla

System.out.print(" 10 elementos más allá, esta el ");

System.out.println( f.readByte() );

f.close();

}

Si incluimos ambos métodos en una clase, y les llamamos con el siguiente programa principal (main()):

public static void main(String args[]) throws IOException {

String ruta="numeros.dat"; // Archivo

creaFichBin( ruta ); // Se crea

imprimeEltoN( ruta, 14 ); // Accedo al elemento 14.

}

Page 8: Utilización de la clase math

Obtendremos la siguiente salida:

El archivo numeros.dat ocupa 100 bytes.

En la posicion 13 esta el numero 14

10 elementos más allá, esta el 24