1 Introducción a la programación de computadoras
Introducción
Una computadora es una máquina que ejecuta automáticamente secuencias de instrucciones tales como cálculos aritméticos y operaciones lógicas, entre otras. Un conjunto de instrucciones orientado a la resolución de un problema específico mediante una computadora se denomina programa. La programabilidad de las computadoras permite que su funcionamiento pueda modificarse sin alterar sus componentes físicos, lo que las hace mucho más versátiles que otros tipos de máquinas y posibilita que ayuden a resolver una gran variedad de problemas.
Las computadoras se programan mediante lenguajes de dos niveles: lenguajes de máquina y lenguajes de programación. En este capítulo, se describe el papel de los lenguajes de programación y el modelo Entrada - Procesamiento - Salida en el que se basa la estructura de los programas. También se detallan los componentes principales de la arquitectura de computadoras más popular en la actualidad.
1.1 Lenguajes para programar computadoras
Las computadoras pueden programarse mediante lenguajes de varios niveles. En esta sección, se describen el lenguaje de máquina, el más cercano al hardware de la computadora, y los lenguajes de programación, los cuales abstraen detalles técnicos y de hardware para lograr que la programación sea más intuitiva, más rápida y menos propensa a errores.
1.1.1 Lenguajes de máquina
Las computadoras modernas son electrónicas y utilizan circuitos integrados para procesar y almacenar información en forma de señales eléctricas. Esta representación de la información se basa en un sistema binario (de dos estados): 0 (voltaje bajo) y 1 (voltaje alto).
En el nivel más básico, las computadoras pueden programarse introduciendo directamente combinaciones de unos y ceros, conocidas como lenguaje de máquina en la Unidad Central de Procesamiento (CPU), el componente de hardware encargado de ejecutar las instrucciones.
Por ejemplo, la Figura 1.1 muestra el programa Hola mundo (Hello World) en lenguaje de máquina. Este programa simplemente imprime la hilera de texto “Hola mundo” en la pantalla. Suele ser usado como introducción al estudio de la programación de computadoras.
/* PROGRAMA "Hola mundo" EN LENGUAJE C */
int main void()
{
("hello, world\n");
printfreturn 0;
}
Internamente, el lenguaje de máquina ejecuta un conjunto de instrucciones muy básicas como, por ejemplo:
- Sumar dos números.
- Comprobar si un número es igual a cero.
- Copiar datos de una sección a otra de la memoria de la computadora.
Los lenguajes de máquina son específicos para cada tipo de CPU. Así, por ejemplo, el lenguaje de máquina de un procesador Intel, uno de los más usados en computadoras personales, es diferente al lenguaje de máquina de un procesador PowerPC, utilizado tanto en computadoras personales (como antiguas Macintosh), como en consolas de videojuegos y sistemas incrustados (ej. en dispositivos electrónicos).
1.1.2 Lenguajes de programación
Debido a que el lenguaje de máquina es poco amigable para las personas, actualmente es más común utilizar lenguajes de programación para resolver problemas mediante computadoras. Los lenguajes de programación consisten de instrucciones compuestas por palabras y expresiones similares a las de los lenguajes humanos como, por lo general, el idioma inglés. Existe una gran variedad de lenguajes de programación, debido a los diferentes fines para los que fueron creados y a su evolución histórica, entre otras razones.
Las instrucciones de los lenguajes de programación deben ser traducidas al lenguaje de máquina para que puedan ser ejecutados por la computadora. Esta traducción se realiza mediante programas llamados compiladores (para lenguajes compilados como C y C++) o interpretadores (para lenguajes interpretados como Python y R). Mientras que los lenguajes de máquina son específicos para cada CPU, algunos lenguajes de programación pueden ser ejecutados en diferentes plataformas, con el compilador o interpretador adecuado.
Como ejemplo, considere problema del cálculo del índice de masa corporal (IMC). El IMC indica si una persona tiene una masa (peso) saludable en relación con su estatura. Se obtiene mediante la fórmula:
\[ imc = \frac{masa}{estatura^2} \]
El resultado se interpreta de la siguiente manera:
- IMC menor que 18.5: Peso bajo.
- IMC mayor o igual que 18.5 y menor que 25: Peso normal.
- IMC mayor o igual que 25: Sobrepeso.
El siguiente programa en el lenguaje Python calcula e interpreta el IMC de una persona.
# CÁLCULO E INTERPRETACIÓN DEL IMC DE UNA PERSONA
# ENTRADA
# Datos de masa (kg) y estatura (m) de una persona
= 65
masa = 1.7
estatura
# PROCESAMIENTO
# Cálculo del IMC
= masa / estatura**2
imc
# Interpretación del IMC
if (imc < 18.5):
= "Peso bajo"
interpretacion_imc elif (imc < 25):
= "Peso normal"
interpretacion_imc else:
= "Sobrepeso"
interpretacion_imc
# SALIDA
# Impresión de los resultados
print("El valor del IMC es:", imc)
print("Corresponde a:", interpretacion_imc)
A manera de ejercicio, puede escribir y ejecutar el programa anterior en una consola de Python. Modifique los datos de entrada de masa y estatura y observe los cambios en los resultados.
En el ejemplo anterior puede observarse como el programa sigue un modelo conocido como “Entrada - Procesamiento - Salida”, el cual se describe en detalle en la sección siguiente.
1.2 Modelo Entrada - Procesamiento - Salida
Las computadoras trabajan con un modelo de “Entrada - Procesamiento - Salida”: reciben datos de entrada (ej. números), los procesan (ej. realizan cálculos aritméticos) y generan salidas (ej. resultados de los cálculos).
El modelo “Entrada - Procesamiento - Salida” es un concepto fundamental en análisis de sistemas de información y desarrollo de programas. Su esquema se presenta en la Figura 1.2.
- La Entrada se refiere a los datos que se introducen en un sistema o programa para ser procesados. Pueden ingresarse a través de diferentes medios como teclados, ratones, cámaras, sensores, archivos y servicios web, entre otros.
- El Procesamiento es el conjunto de instrucciones que generan salidas a partir de las entradas. Estas intrucciones pueden incluir cálculos matemáticos, operaciones lógicas y operaciones de control, entre muchas posibilidades.
- Por último, la Salida es el resultado del procesamiento como, por ejemplo, resultado de cálculos aritméticos.
El modelo “Entrada - Procesamiento - Salida” se implementa en los componentes físicos mediante la arquitectura de computadoras, como se explica a continuación.
1.3 Arquitectura de computadoras
La arquitectura de computadoras es un área de estudio enfocada en el diseño de los componentes principales de un sistema informático.
1.3.1 Evolución histórica
La arquitectura de las computadoras modernas es el resultado de un proceso que ha tomado varios siglos, incluyendo la fabricación de calculadoras mecánicas en el siglo XVII, con capacidades para realizar operaciones aritméticas básicas, y el diseño en el siglo XIX de la máquina analítica de Charles Babbage, una computadora mecánica que incorporaba algunas características de las computadoras modernas.
En 1936, el matemático inglés Allan Turing (1912 - 1954) propuso la máquina de Turing, un modelo matemático que manipula símbolos en una cinta según un conjunto de reglas y que funcionó como un modelo teórico de gran importancia para desarrollos posteriores, como los dispositivos eletromecánicos Bombe y Colossus en el Reino Unido, de uso específico para criptografía durante la II Guerra Mundial. Algunos años después, en 1946, el ejército de los Estados Unidos desarrolló ENIAC (Electronic Numerical Integrator And Computer), considerada por algunos como la primera computadora de uso general y que fue inicialmente diseñada para calcular tablas de tiro de artillería.
1.3.2 Arquitectura de von Neumann
En 1945, el matemático húngaro-estadounidense John von Neumann (1903-1957) propuso un concepto conocido como programa almacenado, en el cual los datos y los programas se almacenan en una estructura llamada memoria, separada de los componentes físicos que ejecutan las instrucciones. Este modelo permite que las computadoras sean más fáciles de programase y reprogramarse y es conocido actualmente como arquitectura de von Neumann. La arquitectura de von Neumann se ilustra en la Figura 1.3.
1.3.2.1 Componentes de la arquitectura de von Neumann
1.3.2.1.1 Memoria principal
Almacena las instrucciones de los programas y los datos que utilizan estos programas. Es común denominarla como RAM (Random Access Memory, Memoria de Acceso Aleatorio), lo que significa que toma el mismo tiempo acceder a cualquier posición de la memoria. Cada posición de memoria tiene una dirección a la que se hace referencia cuando se desea leer o escribir.
1.3.2.1.2 Unidad Central de Procesamiento
También se le conoce como CPU (Central Processing Unit, Unidad Central de Procesamiento). Ejecuta las instrucciones de los programas en lenguaje de máquina. Está compuesta por dos partes:
- Unidad de Control: determina cuál es la siguiente instrucción a ejecutar. Contiene memorias temporales de alta velocidad y poca capacidad llamadas registros, para almacenar los operandos y el resultado de las instrucciones.
- Unidad de Aritmética y Lógica o ALU (Arithmetic and Logic Unit): ejecuta las operaciones aritméticas y lógicas.
1.3.2.1.3 Sistemas de entrada y salida
Permiten que la computadora interactúe con el usuario y, en general, con el mundo exterior. Algunos ejemplos son el teclado y el ratón, como sistemas de entrada, y la pantalla y la impresora, como sistemas de salida.