Documente Academic
Documente Profesional
Documente Cultură
:
Esta es usada para resolver problemas de procesamiento de información, lo que permite
la comunicación con el computador para aprovechar su vasta memoria y capacidad de
cómputo, con el fin de ejecutar algoritmos que calculen una solución para cada instancia
del problema que se presente. Para que sea inteligible para el computador, un algoritmo
debe ser escrito en un lenguaje de programación, que luego será transformado en un
programa.
Problema, instancia y solución: Un problema computacional no está limitado a una
situación completamente especificada, sino que en su definición contiene elementos
variables que determinan una familia de situaciones posibles llamadas instancias del
problema. Por ejemplo, en el caso de las poblaciones, los valores de X, Y, m y n no son
especificados, lo que sugiere que resolver el problema implica proponer un método que
conduzca a la solución correcta para cada asignación posible de valores a estas variables
Un problema computacional puede entenderse entonces como una función matemática,
esto es, como una relación entre un conjunto de instancias del problema y un conjunto de
soluciones, de forma que a cada instancia le corresponde un único elemento del conjunto
de soluciones. La figura 1 presenta una descripción gráfica del concepto de problema
computacional
Algoritmo: algoritmo como un conjunto de pasos cuya ejecución transforma una instancia
de un problema en su respectiva solución. Un algoritmo debe satisfacer las siguientes
propiedades:
Ser finito: la ejecución de un algoritmo debe tomar una cantidad de tiempo finita, esto
es, debe terminar después de un número limitado de pasos.
Ser ordenado: los pasos que forman el algoritmo deben formar una secuencia
ordenada, de forma que en cada etapa de su ejecución el siguiente paso a seguir está
unívocamente determinado.
Estar bien definido: cada paso del algoritmo debe tener una única interpretación para
quien lo ejecuta; esto es, el lenguaje debe ser preciso y carente de ambigüedad.
Ser correcto: para cada instancia posible del problema, el algoritmo debe calcular su
solución correcta.
Lenguajes de programación y código fuente: Como se mencionó anteriormente, existe una
amplia brecha entre el lenguaje natural usado por los humanos y el lenguaje binario
manejado por los computadores. La solución a este problema es un conjunto de lenguajes
intermedios, denominados lenguajes de programación, los cuales son una combinación de
un subconjunto de un lenguaje natural (generalmente inglés) y el lenguaje algebraico,
suficientemente expresivo para que un programador pueda representar en él, de manera
fácil, sus algoritmos, pero también suficientemente formal para que su traducción a
lenguaje binario sea posible
El proceso de transformación de un algoritmo en un programa consiste en dos o más
pasos de traducción. Primero, el programador debe escribir su algoritmo (originalmente
en pseudocódigo, diagrama de flujo o una simple idea) en un lenguaje de programación. A
esta representación del algoritmo se le conoce como código fuente. Posteriormente, se
realiza el proceso de traducción del código fuente a lenguaje de máquina para ser
ejecutado por el computador.
Compiladores, intérpretes y programas: El proceso de traducción de instrucciones en
código fuente a instrucciones ejecutables para el computador puede ser realizado de dos
maneras distintas: por un compilador o por un intérprete. Un compilador es un programa
que toma el conjunto de instrucciones en su totalidad y genera, a partir de ellas, un
programa. Este programa es almacenado en un archivo en lenguaje binario y puede ser
ejecutado tantas veces como se desee, sin ser requerido nuevamente el código fuente
Por otra parte, un intérprete es un programa que traduce y ejecuta las instrucciones del
código fuente una a una. Los lenguajes interpretados son especialmente útiles cuando se
desea observar algunos de los resultados intermedios rápidamente. Dada la forma como
el código es procesado, la traducción a lenguaje binario ocurre cada vez que un programa
es ejecutado en los lenguajes interpretados, en contraposición a los lenguajes compilados
que crean el programa una sola vez
Los discos ópticos Los DVD, CD, discos Blu-ray y similares conforman el conjunto de
dispositivos de almacenamiento óptico. A diferencia de lo que ocurre en los discos duros,
un disco óptico contiene una única pista en forma de espiral; no obstante, esta no es la
principal diferencia entre los dos tipos de dispositivos. En los discos ópticos, cada una de
las secciones microscópicas que los conforman puede ser de uno de dos tipos, de acuerdo
con su relieve: pozos o llanos. Un lector de estos discos dispara haces de luz sobre las
secciones de interés y mediante un fotorreceptor captura su reflejo. A partir de esto, el
lector puede determinar si al moverse de una sección a la siguiente ocurrió un cambio de
relieve (pozo después de llano o llano después de pozo) o no. La figura 2 muestra un
fragmento de la superficie de un CD donde se observan los pozos (áreas oscuras) y los
llanos (áreas claras) que codifican la información; nótese que las secciones son parte de
una única pista en forma de espiral
Números reales
Para indicar que un número tiene una parte fraccional se usa el punto (.), como sucede en
el sistema decimal. La diferencia está en que cada dígito después del punto debe ser
multiplicado por una potencia negativa de 2 y no de 10. Por ejemplo, el número 3.625 es
representado como:
Tipos de datos en Java
En programación, un dato es la unidad atómica de información. Este puede ser de
diferentes tipos: numérico, lógico, símbolo, entre otros. De acuerdo con su tipo, el
computador asigna una cantidad limitada de memoria para almacenarlo. Esta cantidad de
memoria, denominada el tamaño del tipo, corresponde a la cantidad de bits con que se
cuenta para representar el dato, independientemente del dispositivo de almacenamiento
físico. El tamaño de un tipo de dato limita la cantidad de valores diferentes que puede
tener un dato de dicho tipo. Por ejemplo, si un tipo de dato tiene un tamaño de 8 bits, el
número de valores diferentes que lo conforman es 256. En general, un tipo de tamaño n
bits contiene 2n valores distintos. A continuación, se introducen los tipos de datos
existentes en el lenguaje de programación Java, así como también sus propiedades y las
operaciones sobre ellos. Estos forman el conjunto llamado tipos de datos primitivos.
Tipos de datos para números enteros Java cuenta con cuatro tipos de datos diferentes
para representar números enteros: byte, short, int y long (Oracle Inc., 2015). La diferencia
entre ellos radica en su tamaño y, por tanto, en el rango y la cantidad de valores que
pueden ser usados en cada uno. La tabla 2 presenta las generalidades de cada tipo y la
tabla 3 resume algunos atributos de objetos del mundo real que pueden ser
representados con cada uno.
A pesar de las aplicaciones presentadas en la tabla 3, si la cantidad de datos que debe
mantener en memoria un programa no es muy grande, se prefiere usar el tipo de dato int
aún para valores pequeños.
Literales
Un literal es la representación en código Java de un valor fijo. En el caso de los valores
enteros, estos son representados usando el sistema decimal, no obstante, su
representación interna use el sistema binario. Los siguientes son ejemplos de literales Java
válidos: 123, 0, -10, -123456789, 99999999. Por defecto, todo literal entero es
interpretado como int. Esto es una causa común de errores cuando se desea usar valores
fuera del rango del tipo int esperando que sean tratados como valores de tipo long. En
este caso, debe incluirse, al finalizar el literal, la letra L para indicar que debe interpretarse
como long. Ejemplos de literales de este tipo son 100000000000000L,
98765432109876543L y -9223372036854775808L.
4.1.2. Variables
Una variable es el nombre asignado a un espacio de la memoria para albergar un dato de
un tipo específico. Adicionalmente, y como su nombre lo indica, el valor almacenado en
una variable puede cambiar durante la ejecución del programa. Se denomina declaración
de variable a la instrucción en que se indica al computador el nombre y el tipo de una
variable. La declaración de una variable tiene la siguiente sintaxis:
<tipo> <nombre>;
<tipo> es cualquier de los tipos de datos vistos hasta ahora o que verá más adelante.
<nombre> es el nombre que desea darle a la variable.
El nombre de una variable debe satisfacer las siguientes condiciones:
No puede estar ya asignado a otra variable.
No puede ser una de las palabras reservadas del lenguaje (como por ejemplo byte, short,
int o long).
Puede contener únicamente letras, dígitos, guiones bajos (_) y signos de dólar ($). El
primer símbolo del nombre no puede ser un dígito
Algunos ejemplos de declaraciones de variables (con nombres válidos) son: int salario;
byte edad; short goles_anotados; long numeroMuyGrande;
Es posible también declarar múltiples variables en una misma instrucción separando sus
nombres por comas: int poblacionTomania, poblacionBacteria, PIBTomania, PIBBacteria;
En el lenguaje Java, el punto y coma (;) indica el fin de una instrucción, de manera similar a
como el punto (.) indica el fin de una oración en español. Finalmente, se debe tener en
cuenta que en el lenguaje Java las letras en minúscula son diferentes a las letras en
mayúscula. Por tanto, Numero, numero y NuMeRo corresponden a nombres de variables
diferentes. En el mismo orden de ideas, es posible (aunque no muy recomendable) tener
una variable llamada INT.
Operador de asignación
Para asignar un valor inicial o modificar el valor contenido en una variable se usa el
operador de asignación (=). La sintaxis de este operador es la siguiente:
<nombre> = <expresión>
<nombre> corresponde al nombre de la variable cuyo valor se desea modificar y
<expresión> es cualquier expresión del mismo tipo de la variable. El operador evalúa
<expresión> y, una vez tiene el resultado, lo almacena en la variable <nombre>
Ejemplos de uso del operador de asignación son:
int salarioJuan, salarioDavid;
salarioJuan = 100000;
salarioDavid = 120000;
También es posible combinar la declaración y asignación en una misma línea, por lo que
cada uno de los dos fragmentos de código siguientes es equivalente al anterior:
int salarioJuan = 100000, salarioDavid = 120000;
int salarioJuan, salarioDavid = 120000;
salarioJuan = 100000;
Operadores aritméticos
Los tipos de datos enteros soportan las operaciones aritméticas básicas de negación,
suma, resta, multiplicación, división y residuo (módulo). La notación usada para escribir
expresiones usando estas operaciones es la notación infija, tradicionalmente usada en
matemáticas. Para agrupar fragmentos de la expresión se usa paréntesis; el uso de
corchetes o llaves no es permitido. La tabla 4 presenta las operaciones aritméticas básicas
soportadas por los tipos de datos enteros, así como los símbolos que las representan y un
ejemplo de su uso.
Tenga en cuenta que el operador de división (/) corresponde a división entera, por tanto,
su resultado será siempre entero.
4.1.5. Operadores relacionales
Además de las operaciones aritméticas, también es posible realizar operaciones de
comparación entre enteros. La tabla 5 introduce estas operaciones en el lenguaje Java.
Tipos de datos para números reales Java cuenta con dos tipos de datos para representar
números reales: float y double (Oracle Inc., 2015). La diferencia entre ellos radica en su
tamaño y, por tanto, en el rango y la cantidad de valores que pueden ser usados en cada
uno. Debido a la forma en que los números reales son representados internamente en la
computadora, cada tipo de dato puede garantizar diferente cantidad de cifras
significativas de sus valores. La tabla 6 presenta las generalidades de cada uno de estos
tipos.
Debido a la amplitud de los rangos de valores que pueden ser representados por los dos
tipos, en la gran mayoría de las aplicaciones el rango no es determinante para decidir cuál
tipo de dato usar. Esta decisión depende en general de la cantidad de datos que se desee
almacenar y la precisión de los cálculos realizados. En casos en que no se requiera una
precisión mayor a la ofrecida por el tipo float, pero la cantidad de datos a almacenar sea
pequeña, se recomienda el uso del tipo double
4.2.1. Literales
Al igual que en los enteros, los literales de tipo real en Java se representan usando el
sistema decimal. Para separar la parte entera de la parte fraccional se usa el punto (.). Por
defecto, los literales reales son interpretados como double y, similar a lo que pasa con el
tipo long, si desea que un literal sea interpretado por la máquina como de tipo float, debe
incluir al final del literal la letra F. Aunque no es necesario, por claridad del código,
también es posible incluir al final del literal la letra D para hacer énfasis en que es de tipo
double. Finalmente, cuando los números son muy grandes o muy pequeños es posible
usar notación científica para expresar los valores en forma sucinta. Para esto, se usa el
símbolo E, el cual debe ser leído como “por diez a la”. Algunos ejemplos de literales de
tipo float y double son: 1.2345F, 1.2345D, 12345E-4F, 12345E100.
4.2.2. Variables: declaración y asignación
La declaración de variables de tipos reales sigue las mismas reglas de la declaración de
variables de tipos enteros. Más aún, la sintaxis y tratamiento del operador de asignación
son idénticos.
4.2.3. Operadores aritméticos y relacionales
Los operadores aritméticos y relacionales de los tipos de datos reales son los mismos
presentados para los tipos de datos enteros en las tablas 4 y 5, con una evidente
excepción: la división entre valores reales da un cociente real y, por tanto, no existe el
concepto de residuo. Dicho de otra forma, con excepción del operador de residuo (%),
todos los operadores que existen para números enteros también aplican para números
reales.
4.3. Tipo de datos booleano
Note que las operaciones relaciones de los números no dan como resultado otro número.
Su resultado es un valor booleano. El conjunto de valores booleanos, también conocidos
como valores lógicos, está compuesto por dos elementos: verdadero y falso. Dado que la
computadora solamente es capaz de representar números, internamente un valor
booleano se representa con un número entero que es interpretado por la máquina como
falso o verdadero de acuerdo a si es igual o diferente de 0, respectivamente. El tipo de
dato Java para valores booleanos es boolean (Oracle Inc., 2015). Un dato de tipo boolean
puede ocupar desde 8 hasta 32 bits de memoria. Esto se debe a temas propios del diseño
del lenguaje que están fuera del alcance de esta Lectura fundamental.
4.3.1. Literales Java cuenta con dos palabras reservadas como literales del tipo
boolean:true para verdadero y false para falso. Es importante recordar que Java es
sensible a las minúsculas y mayúsculas y por tanto TRUE y FALSE no son tomados como
literales booleanos.
4.3.2. Variables: declaración y asignación
La declaración de variables de tipo lógico sigue las mismas reglas de la declaración de
variables de tipos numéricos. Más aún, la sintaxis y tratamiento del operador de
asignación son idénticos.
4.3.3. Operadores lógicos
El tipo boolean soporta las operaciones lógicas de conjunción, disyunción, negación,
equivalencia y disyunción exclusiva. En la tabla 7 se exponen estas operaciones lógicas, así
como los símbolos que las representan y un ejemplo de su uso.
Resumen
Independientemente de su estructura física, los dispositivos de almacenamiento y
procesamiento de información comunes representan la información mediante dos
estados: orientación de campo magnético positiva o negativa, cambio o conservación de
relieve, existencia de agujero, existencia de campo o corriente eléctrica, entre otros. El
lenguaje binario permite unificar el esquema de representación de estos dispositivos
reduciendo las parejas de estados a los símbolos 1 y 0.
El sistema binario representa cantidades tanto enteras como reales de manera similar a
como se hace en el sistema decimal. Cada dígito de una secuencia binaria es llamado bit,
palabra que resulta de abreviar el término inglés binary digit. Java cuenta con un conjunto
amplio de tipos de datos que incluyen los conjuntos numéricos básicos y el conjunto de
valores booleanos:
Los tipos de datos enteros son: byte, short, int y long. La principal diferencia entre
ellos radica en el espacio que ocupan en memoria y, por tanto, en el rango de valores
diferentes que pueden representar.
Los tipos de datos reales son: float y double. Además de la extensión del rango de
valores que manejan, una diferencia fundamental entre estos dos tipos de datos es la
cantidad de cifras significativas que mantienen del número.
El nombre del tipo de dato booleano en Java es boolean. Dado que, por su
arquitectura física, el computador solamente puede representar números, un
booleano internamente no es más que un número que representa falso o verdadero
de acuerdo a si es igual o diferente de cero, respectivamente.
Los datos en un programa Java pueden ser valores fijos explícitos en el código fuente,
llamados literales o variables. Una variable es el nombre asignado a un espacio de la
memoria para albergar un dato de un tipo específico. El valor almacenado en una variable
puede ser modificado durante la ejecución del programa mediante el operador de
asignación