Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lectura Fundamental-01 PDF
Lectura Fundamental-01 PDF
Lectura fundamental
Introducción a la programación
de computadores
Contenido
4 Resumen
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 2
2.1. Problema, instancia y solución
El Diccionario de la Real Academia Española (2014) define un problema como un “conjunto de hechos o
circunstancias que dificultan la consecución de algún fin.”
A partir de esta definición analice el problema de “tener una rueda de la bicicleta pinchada”. Por supuesto,
esto puede ser un problema sino contamos con otro medio de transporte, ya que no permite a su usuario
conseguir el fin de llegar a su destino. Un segundo ejemplo de problema, un poco más complejo, se
describe a continuación:
En un momento cero en el tiempo, Tomania tiene una población de X millones de habitantes, mientras
que Bacteria1 tiene una población de Y millones, donde X es mayor que Y. Las tasas de crecimiento de la
población son de m % y n % respectivamente, donde n es mayor que m. ¿Cuántos años pasarán para que
la población de Bacteria sea más numerosa que la población de Tomania?
En este caso, el problema radica en la necesidad de información, específicamente sobre los años en que
la población de un país superará en número a la población de otro. Esta información podría ser requerida,
por ejemplo, en estudios y proyectos de análisis y prevención de pobreza, dispersión de enfermedades,
distribución de la tierra, entre otros.
A pesar de ajustarse a una misma definición, estos dos problemas son de naturaleza muy diferente.
El primero es un problema más cotidiano y práctico, cuya solución involucra la ejecución de unas
acciones simples y de naturaleza motriz; el segundo es un problema de naturaleza matemática y con
una definición más formal.
A lo largo de este Módulo, y algunos de los Módulos siguientes, se hablará con frecuencia de resolver
problemas; sin embargo, es importante señalar que, al menos en la gran mayoría de los casos, al usar este
término no se está refiriendo a problemas como el del segundo ejemplo, que involucran la realización de
cálculos numéricos y/o lógicos. En particular, se discutirán problemas computacionales.
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. En ese sentido, la asignación X
= 50’000.000 (habitantes), Y = 40’000.000 (habitantes), m = 10(%) y n = 15(%) es una instancia del
problema (cuya solución es 6 ‘años’).
1. Nombres de países ficticios tomados de la película El gran dictador de Charles Chaplin, Estados Unidos, 1940.
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 3
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.
Instancias Soluciones
Figura 1. Las líneas entre conjuntos definen la correspondencia entre instancias y soluciones
Fuente: elaboración propia
2.2. Algoritmo
• 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.
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 4
• 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.
A continuación, se presentan ejemplos de algoritmos para los dos problemas anteriormente enunciados:
Tabla 1. Algoritmo que resuelve el problema de tener una rueda de la bicicleta pinchada
1. Inicio
11. Fin.
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 5
Tabla 2. Algoritmo que resuelve el problema de las poblaciones
1.
Inicio
2.
Inicializar años transcurridos en 0
3.
Mientras que X ≥ Y
a.
Incrementar X en m %
b.
Incrementar Y en n %
c.
Incrementar años_transcurridos en 1
1.
Reportar años_transcurridos como solución
2.
Fin.
Cómo mejorar...
Verifique que los algoritmos presentados en las tablas 1 y 2 satisfacen las propiedades
enunciadas anteriormente.
Note que estos algoritmos son fácilmente ejecutados por una persona que entienda el idioma. Sin embargo,
¿qué pasa si quien debe ejecutar el algoritmo es una máquina?
Existen múltiples razones por las que una máquina no es capaz de comprender el lenguaje natural de
los humanos. Un ejemplo es la ambigüedad del idioma, que contradice una de las propiedades de los
algoritmos. Considere la frase:
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 6
Seguramente, la mayoría de los lectores considerarán que esta frase es falsa y que se debe a una falta
de ortografía. No obstante, note que esto no es necesariamente cierto ya que de hecho la palabra
termina sí comienza con la letra t. Este es un claro ejemplo de la ambigüedad del lenguaje natural, en
el que una misma frase puede ser interpretada de maneras distintas por interlocutores diferentes.
Dada nuestra capacidad de englobar la información en un contexto, nos es posible descubrir el
significado que asignó a la frase su autor original, capacidad con la que no cuentan actualmente las
máquinas. El área de las ciencias de la computación conocida como Procesamiento de Lenguaje
Natural estudia este y otros problemas del lenguaje y métodos computacionales para mejorar la
capacidad de comprensión de las máquinas.
Los computadores digitales, dada su estructura física, hacen uso de un lenguaje muy sencillo llamado
el lenguaje binario (sobre esto hablaremos en mayor detalle más adelante), el cual está compuesto por
solamente dos símbolos: 1 y 0, pero es suficiente para expresar todas las acciones que el computador
puede hacer. Infortunadamente, dar instrucciones al computador en este lenguaje no es una tarea
sencilla e implica un conocimiento detallado de la arquitectura física de la máquina.
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. Los primeros lenguajes de
programación fueron creados en la década de los 50, siendo los más importantes Fortran, Cobol y Lisp,
aún usados por algunas compañías. Varias décadas de desarrollo en este campo han permitido tener cada
vez mejores lenguajes, siendo los más populares hoy en día Java, C, C++ y Python (Tiobe, 2017).
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 7
2.4. Compiladores, intérpretes y programas
The compiler ... and generates You execute the ... and the result
reads the object code. program (one way appears on
source code... or another)... the screen.
Figura 2. Esquema general del proceso de compilación de código fuente a lenguaje de máquina
Fuente: elaboración propia
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. La figura 3 presenta el esquema general del
proceso de traducción realizado por un intérprete.
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 8
source interpreter
code
• Es robusto: los programas creados en Java son altamente confiables debido a las herramientas de
detección de errores con que cuenta su plataforma.
• Es seguro: la tecnología Java no permite que otros programas maliciosos se adhieran a sus programas
y afecten su comportamiento.
• Es rápido: el código Java es traducido a una versión muy eficiente de sí en el lenguaje de máquina, lo
que hace que los programas Java sean rápidos comparados con programas escritos en otros lenguajes.
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 9
3.1. Proceso de compilación e interpretación de un programa Java
Anteriormente, se dijo que el proceso de conversión de código fuente a código de máquina puede ser
realizado por un compilador o por un intérprete. En el caso particular de Java, este proceso requiere
de los dos tipos de programas.
Inicialmente, el programador debe escribir su programa en uno o más archivos de código fuente
usando cualquier herramienta de edición de texto. Estos archivos deben tener extensión .java.
Posteriormente, el código fuente es procesado por el compilador Java, el cual lo traduce no
directamente a código de máquina, sino a un código intermedio llamado bytecode. Este código
bytecode es almacenado en archivos del mismo nombre pero de extensión .class. El bytecode es
un lenguaje intermedio que permite a Java mantener una versión, mucho más fácil de procesar,
del programa independiente de la arquitectura física de la máquina para ser convertida a código
fuente. Finalmente, el bytecode es procesado por un intérprete, la máquina virtual de Java, el cual
lo transforma en instrucciones en lenguaje de máquina, que son inteligibles y realizables para el
computador. La figura 4 presenta el esquema general del proceso de compilación e interpretación de
un programa Java.
Compiler
Java 0100101...
VM
MyProgram.java MyProgram.class
MyProgram
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 10
4. Resumen
Un problema computacional puede definirse como una relación entre un conjunto de instancias del
problema y el conjunto de sus correspondientes soluciones.
Cada instancia consiste de una asignación de valores a las variables que definen el problema. El
cálculo de la solución de cualquier instancia del problema es detallado por un algoritmo.
El lenguaje de programación Java es el más usado hoy en día por los desarrolladores de todo el
mundo; esto se debe a que es un lenguaje simple, robusto, seguro, portable y rápido; hace parte
de la plataforma de desarrollo Java, la cual también incluye herramientas para facilitar y permitir el
desarrollo y ejecución de sus programas. El lenguaje Java es tanto compilado como interpretado.
El código fuente Java es traducido por un compilador al lenguaje bytecode y, posteriormente, el
intérprete convierte las instrucciones bytecode en instrucciones de máquina que son ejecutadas por
el computador.
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 11
Referencias
Gosling, J. y McGilton, H. (1995). The Java Language Environment: A White Paper. California: Sun
Microsystems, Inc.
Real Academia Española. (2014). Diccionario de la lengua española (23a. ed.). Recuperado de http://
www.rae.es/
TIOBE Software. (2017). TIOBE Index for May 2017. Recuperado de https://www.tiobe.com/tiobe-index/
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 12
INFORMACIÓN TÉCNICA
POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 13