Introducción a la algoritmia
Los fundamentos de la informática
1. Arquitectura Von Neumann
Un ordenador es un conjunto de circuitos electrónicos para manipular información conocida como datos y capaz de "ejecutar" programas, es decir, una secuencia de instrucciones programadas de antemano que llevará a cabo de principio a fin para obtener resultados. Para entender cómo un ordenador puede ejecutar un programa, tenemos que ver cómo funciona con un poco más de detalle.
En 1944, fue Von Neumann quien definió la arquitectura de los ordenadores modernos, que aún se utiliza ampliamente en la actualidad (aunque con variaciones). La arquitectura de Von Neumann (que surgió del trabajo de Turing, del que se habla más adelante) divide el ordenador en cuatro partes distintas:
-
La unidad aritmética lógica o UAL (ALU en inglés) es la parte del ordenador que realiza los cálculos: sumas, restas, multiplicaciones, divisiones, módulos, gestión de signos (positivo, negativo), operaciones lógicas (booleanas), comparaciones, a veces rotaciones y desplazamientos de valores (siempre en el marco de la lógica booleana). Hay UAL especializadas en números de coma flotante, y otras especializadas en procesos complejos como logaritmos, inversiones, raíces, vectores, cálculos trigonométricos, etc. Algunos documentos añaden algunos registros (pequeñas celdas de memoria integradas en la UAL) y lo denominan procesador (CPU).
-
La unidad de control o UC (CU en inglés), que no se debe confundir con la unidad central de proceso (CPU), controla la secuenciación de las operaciones, es decir, el flujo del programa. Recibe las instrucciones de la memoria y da las órdenes a la UAL. Los resultados obtenidos pueden influir en la secuencia. A continuación, la CPU pasa a la instrucción siguiente o a otra instrucción, según le indique el programa.
-
Lamemoria se puede describir como una serie de pequeñas celdas numeradas, cada una de las cuales puede contener una pequeña cantidad de información (pequeña en el sentido de que el tamaño de cada celda es fijo). Esta información puede ser una instrucción o parte de una instrucción del programa (una instrucción puede ocupar varias celdas) o datos (número, carácter o parte de éstos)....
Algoritmos
1. La programación es un arte
Para obtener un resultado determinado, generalmente hay que seguir un método, una cierta lógica. A menos que sea un gran pastelero con un conocimiento innato de cómo mezclar los ingredientes (o fruto de una larga práctica), nunca conseguirá un delicioso pastel de chocolate, aunque tenga los mejores ingredientes y accesorios de repostería, si no conoce las proporciones adecuadas, el orden en el que añadir los ingredientes, el tiempo de horneado, la temperatura: en resumen, la receta.
Lo mismo ocurre con la programación. Hay varios lenguajes de programación muy sencillos, a veces extremadamente simples, que pueden dar la ilusión durante un tiempo de que se sabe programar. Incluso en las empresas, algunos empleados son bombardeados con el título de desarrollador por sus confusos conocimientos de Visual Basic, Delphi o Windev. El resultado puede ser catastrófico. La publicidad es tentadora pero engañosa. Todos los buenos programadores, incluidos los autodidactas, han tenido que lidiar alguna vez con algoritmos, porque en programación hay multitud de formas de conseguir un resultado, pero muy pocas de conseguir el mejor resultado posible, lo que explica que muchos programas con la misma función parezcan iguales (en términos de programación) aunque no hayan sido desarrollados por los mismos programadores. Los principiantes que se embarcan en atrevidos proyectos de programación a veces se quedan atascados, al no dominar una determinada técnica de lógica de programación. Algunos se rinden, otros encuentran una solución.
Los segundos podrían leer un libro de algoritmia como éste que, aunque no les proporcione una solución completa a su problema, les dará las nociones básicas y las técnicas para salir adelante.
Todos los ordenadores personales de principios de los 80 se entregaban con un lenguaje BASIC incluido directamente en la máquina (en ROM) o en un cartucho, casete o disquete. El Basic de Microsoft (Qbasic, Quickbasic) se suministraba con el DOS del PC. Los Amstrads tenían Locomotive Basic, los Atari ST tenían Atari Basic y sobre todo GFA Basic, un lenguaje de primer nivel, etc. Toda una generación de usuarios se lanzó a la programación utilizando estos lenguajes...
Lenguajes de implementación
1. ¿En qué lenguaje?
Existen varios cientos de lenguajes de programación si se tienen en cuenta todas las variantes posibles de un mismo lenguaje. Como ha leído al principio de este capítulo, los ordenadores sólo tienen un lenguaje nativo: el lenguaje máquina. ¿De verdad cree que va a implementar el programa de lanzamiento de dados directamente en binario (o incluso en hexadecimal)? La elección del lenguaje merece una pequeña demostración. En los círculos informáticos, es costumbre probar un lenguaje haciendo que muestre un mensaje para saludar, en este caso el famoso "¡Hello world! He aquí cómo mostrar este texto en varios idiomas:
En ensamblador x86 bajo DOS
Cseg segment
assume cs:cseg, ds:cseg
org 100h
main proc
jmp inicio
mess db 'Hello world!$'
inicio:
mov dx, offset mess
mov ah, 9
int 21h
ret
main endp
cseg ends
end main
En shell Unix
echo "Hello world!"
En Basic original
10 PRINT "Hello world!"
20 END
En COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY "Hello world!".
STOP RUN.
En lenguaje C
#include <stdio.h>
int main(int argc, char **argv)
{
printf("Hello world!\n");
return 0;
}
En lenguaje C++
#include <iostream>
int main()
{
std::cout << "Hello world!" << std::endl;
return 0;
}
En PHP
<?php
print ("Hello world!");
?>
En Java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
En Visual Basic
Sub Main()
MsgBox("Hello world!") ...
Ejercicios
Ejercicio 1
Para convertir un número binario en decimal, ¿qué hacemos?:
-
Agregar números
-
Utilizar potencias de 2 en función del peso
-
Convertir grupos de 4 bits
-
Sumar los números y dividirlos por 2
Ejercicio 2
¿Cuál es el valor máximo de un número codificado en 16 bits sin tener en cuenta el signo? Indique cómo calcular este valor y exprese el resultado en decimal y hexadecimal.
Ejercicio 3
Convierta el número decimal 3407 en binario y hexadecimal.
Ejercicio 4
¿Cuál de los siguientes lenguajes no es correcto aquí? Explíquelo, por favor.
-
PHP
-
Java
-
HTML
-
C++