sábado, 27 de agosto de 2011

Tipos de datos.

Tipos de datos simples
Es uno de los conceptos fundamentales de cualquier lenguaje de programación. Estos definen los métodos de almacenamiento disponibles para representar información, junto con la manera en que dicha información ha de ser interpretada.
Para crear una variable (de un tipo simple) en memoria debe declararse indicando su tipo de variable y su identificador que la identificará de forma única. La sintaxis de declaración de variables es la siguiente:
TipoSimple Identificador1, Identificador2;
Esta sentencia indica al compilador que reserve memoria para dos variables del tipo simple TipoSimple con nombres Identificador1 e Identificador2.
Los tipos de datos en Java pueden dividirse en dos categorías: simples y compuestos. Los simples son tipos nucleares que no se derivan de otros tipos, como los enteros, de coma flotante, booleanos y de carácter. Los tipos compuestos se basan en los tipos simples, e incluyen las cadenas, las matrices y tanto las clases como las interfaces, en general.
Cada tipo de datos simple soporta un conjunto de literales que le pueden ser asignados, para darles valor. En este apartado se explican los tipos de datos simples (o primitivos) que presenta Java, así como los literales que soporta (sintaxis de los valores que se les puede asignar).
 Tipos de datos enteros
Se usan para representar números enteros con signo. Hay cuatro tipos: byte, short, int y long.
Tipo
Tamaño
byte
1Byte (8 bits)
short
2 Bytes (16 bits)
int
4 Bytes (32 bits)
long
8 Bytes (64 bits)
Tabla 5: Tipos de datos enteros
Literales enteros
Son básicos en la programación en Java y presentan tres formatos:
  • Decimal: Los literales decimales aparecen como números ordinarios sin ninguna notación especial.
  • Hexadecimal: Los hexadecimales (base 16) aparecen con un 0x ó 0X inicial, notación similar a la utilizada en C y C++.
  • Octal: Los octales aparecen con un 0 inicial delante de los dígitos.
Por ejemplo, un literal entero para el número decimal 12 se representa en Java como 12 en decimal, como 0xC en hexadecimal, y como 014 en octal.
Los literales enteros se almacenan por defecto en el tipo int, (4 bytes con signo), o si se trabaja con números muy grandes, con el tipo long, (8 bytes con signo), añadiendo una L ó l al final del número.
La declaración de variables enteras es muy sencilla. Un ejemplo de ello sería:
long numeroLargo = 0xC; // Por defecto vale 12
 Tipos de datos en coma flotante
Se usan para representar números con partes fraccionarias. Hay dos tipos de coma flotante: float y double. El primero reserva almacenamiento para un número de precisión simple de 4 bytes y el segundo lo hace para un numero de precisión doble de 8 bytes.
Tipo
Tamaño
float
4 Byte (32 bits)
double
8 Bytes (64 bits)
Tabla 6: Tipos de datos numéricos en coma flotante
Literales en coma flotante
Representan números decimales con partes fraccionarias. Pueden representarse con notación estándar (563,84) o científica (5.6384e2).
De forma predeterminada son del tipo double (8 bytes). Existe la opción de usar un tipo más corto (el tipo float de 4 bytes), especificándolo con una F ó f al final del número.
La declaración de variables de coma flotante es muy similar a la de las variables enteras. Por ejemplo:
double miPi = 314.16e-2 ; // Aproximadamente
float temperatura = (float)36.6; // Paciente sin fiebre
Se realiza un moldeado a temperatura, porque todos los literales con decimales por defecto se consideran double.
Tipo de datos boolean
Se usa para almacenar variables que presenten dos estados, que serán representados por los valores true y false. Representan valores bi-estado, provenientes del denominado álgebra de Boole.
Literales Booleanos
Java utiliza dos palabras clave para los estados: true (para verdadero) y false (para falso). Este tipo de literales es nuevo respecto a C/C++, lenguajes en los que el valor de falso se representaba por un 0 numérico, y verdadero cualquier número que no fuese el 0.
Para declarar un dato del tipo booleano se utiliza la palabra reservada boolean:
boolean reciboPagado = false; // ¡¿Aun no nos han pagado?!
Tipo de datos carácter
Se usa para almacenar caracteres Unicode simples. Debido a que el conjunto de caracteres Unicode se compone de valores de 16 bits, el tipo de datos char se almacena en un entero sin signo de 16 bits.
Java a diferencia de C/C++ distingue entre matrices de caracteres y cadenas.
Literales carácter
Representan un único carácter (de la tabla de caracteres Unicode 1.1) y aparecen dentro de un par de comillas simples. De forma similar que en C/C++. Los caracteres especiales (de control y no imprimibles) se representan con una barra invertida ('\') seguida del código carácter.
Descripción
Representación
Valor Unicode
Caracter Unicode
\udddd

Numero octal
\ddd

Barra invertida
\\
\u005C
Continuación
\
\
Retroceso
\b
\u0008
Retorno de carro
\r
\u000D
Alimentación de formularios
\f
\u000C
Tabulación horizontal
\t
\u0009
Línea nueva
\n
\u000A
Comillas simples
\’
\u0027
Comillas dobles
\"
\u0022
Números arábigos ASCII
0-9
\u0030 a \u0039
Alfabeto ASCII en mayúsculas
A.-Z
\u0041 a \u005A
Alfabeto ASCII en minúsculas
a.-z
\u0061 a \u007A
Tabla 7: Caracteres especiales Java
Las variables de tipo char se declaran de la siguiente forma:
char letraMayuscula = 'A'; // Observe la necesidad de las ' '
char letraV = '\u0056'; // Letra 'V'

viernes, 19 de agosto de 2011

Datos curiosos con números.

Los NUEVES dan mucho juego.
Comprobemos que ocurre cuando multiplicamos este número 12345679 (observa que no está el 8) por otro cuyas dos cifras sumen 9
1234567918=222222222 `
1234567927=333333333`
1234567936=444444444`
1234567945=555555555`
1234567954=666666666`
1234567963=777777777`
1234567972=888888888`
1234567981=999999999`


Sigamos con el NUEVE pero ahora dividiendo
1/9 =0.111111111….`
`2/ 9=0.222222222….`                         
       Volvemos a encontrarnos con cifras que se repiten.
      Observa la coincidencia del numerador con la cifra del periodo.
`3/ 9=0.333333333….`
`4/ 9=0.444444444….`
….
`8/ 9=0.888888888

Cambiemos ahora al ONCE

1/11 =0.0909090909….
2/11 =0.1818181818….
3/11 =0.27272727….
4/11 =0.36363636….
5/11 =0.45454545….
8/11 =0.72727272….
También ahora encontrarnos repeticiones, pero de dos cifras.
Observa que la primera cifra del periodo es menor en una unidad, al numerador de la fracción, y que la suma de las dos cifras del periodo suman NUEVE.

¿Por qué no probar con todos los números?
Elijamos dos cualesquiera, y esta vez si queremos grandes, aunque aquí no nos vamos a pasar.
Tomemos los números 314 y 42.
314                    42 
156 +1  ←        84
78                    168
38 +1  ←         336
18 +1  ←         672
8 +1  ←          1344
4                     2688
2                     5376
1                    10752

Puedes comprobar que en la primera columna, partiendo de 314 hemos ido colocando la mitad del anterior; y si resultaba impar, el número natural anterior, que aquí hemos desglosado  en este número más la unidad (`←`),  para utilizar en el paso siguiente.
En la segunda, partiendo de 42, hemos ido poniendo en columna el doble del que tiene arriba.
Vamos a fijarnos en los impares de la primera columna, y tomemos los que estan a su altura en la columna de la derecha:
84        336        672    1344    10752
Sumemos estos números:
84 + 336 + 672 + 1344 + 10752=13188
¿Que tiene de particular este resultado?
Lo puedes averiguar con facilidad si haces la multiplicación de los dos números escogidos
 31442=13.188