Procesos e instrucciones

Un autómata es cualquier mecanismo capaz de realizar un trabajo de forma autónoma. Algunos ejemplo pueden ser:

  • Un reloj
  • Una caja de música
  • Un radiador con termostato

Todos estos aparatos tienen en común que, una vez conectados, pueden realizar su función sin mayor intervención externa. También comparten el hecho de que su trabajo es siempre el mismo, y por tanto podríamos decir que son bastante simples. Unos autómatas más flexibles serían un vídeo o una lavadora ya que al menos su repertorio de acciones posibles es más variado. En estos términos, un ordenador es un autómata de cálculo gobernado por un programa, de forma que diferentes programas harán trabajar en el ordenador de forma distinta. Un programa es la codificación de un algoritmo y un algoritmo es la descripción precisa de una sucesión de instrucciones que permiten llevar a cabo un trabajo en un número finito de pasos.

Así un ordenador es probablemente el más flexible de los autómatas, puesto que la tarea a ejecutar puede ser la encomendada por cualquier algoritmo que el usuario esté dispuesto a codificar.

Procesos y su descripción

Un proceso es la ejecución de una instrucción o un conjunto de instrucciones (algoritmo) por parte de un autómata. Vemos un ejemplo:

Ejemplo. 1 Funcionamiento del radiador con termostato

Proceso: mantener el radiador a una temperatura T

Algoritmo:

  • Encender
  • Mantener encendido hasta llegar a T más un margen ε
  • Apagar
  • Mantener apagado hasta llegar a T – ε

Cabe decir que en informática la palabra cómputo se usa a menudo como sinónimo de proceso. La siguiente misión es encontrar una forma precisa y cómoda de describir las diversas modificaciones que el entorno sufre durante un cómputo. En primer lugar debemos determinar qué magnitudes de nuestro entorno son relevantes en el cómputo a efectuar. Estas magnitudes reciben el nombre de coordenadas del proceso.

Ej. Coordenadas del ejemplo del radiador:

a) Temperatura: elemento del intervalo [-60, 60]

b) Estado del radiador. Elemento del conjunto {encendido, apagado}

Diremos que un estado particular de un proceso queda correctamente descrito por el valor de las coordenadas en el momento en que este proceso es observado. Consecuentemente, todo proceso no trivial supone un cambio de estado.

Variables

La ejecución de un programa en un ordenador determina también un proceso. Para describir este almacenamos el valor de sus coordenadas en unos objetos que llamaremos variables. Desde el punto de vista del programador, una variable es una caja en la que se puede almacenar un dato, pero de forma que se pueda ir cambiando su contenido. El valor de la variable es el de la última dato introducido. Evidentemente necesitamos que cada variable tenga un nombre para poder referirnos a ella sin ambigüedad. Además, si queremos delimitar desde el principio qué operaciones pueden realizarse con tal o cual variable o protegernos contra error inadvertidos como por ejemplo, introducir valores numéricos en donde principio sólo debería haber letras, es imprescindible clasificar las variables en tipos.

Declaramos la presencia de una variable con:

  • Su nombre. En principio utilizaremos letras minúsculas
  • Su tipo: conjunto de datos que pueden contener. En estos primeros temas nos limitaremos a conjunto de números, caracteres alfanuméricos, palabras o valores lógicos (también llamados booleanos)

De ahora en adelante una declaración de variables tendrá la forma:

var <nombre_variable_1> : <tipo_variable_1>;
  <nombre_variable_2> : <tipo_variable_2>;
...
fivar

Fases de la resolución de problemas

El proceso de resolución de un problema con un ordenador conduce a la escritura de un programa ya la su ejecución. Aunque el proceso de diseñar programas es un proceso creativo, se pueden considerar una series de fases o pasos comunes, que generalmente deben seguir todos los programadores.

Las fases de resolución de un problema con un ordenador son:

  • Análisis del problema
  • Diseño del algoritmo
  • Codificación
  • Compilación y ejecución
  • Verificación
  • Depuración
  • Mantenimiento
  • Documentación

Constituyen el ciclo de vida del software y las fases o etapas más usuales son:

  • Análisis: el problema se analiza teniendo presente la especificación de los requerimientos dados por los cliente de la empresa o por la persona que encarga el programa
  • Diseño: una vez analizado el problema, se diseña una solución que conducirá a un algoritmo que resuelva el problema.
  • Codificación: la solución se escribe en la sintaxis de un lenguaje de alto nivel (como por ejemplo C) y se obtiene un programa.
  • Compilación, ejecución y verificación: El programa se ejecuta, se comprueba rigurosamente y se eliminan todos los errores que puedan aparecer.
  • Depuración y mantenimiento. El programa se actualiza y modifica cada vez que sea necesario, de forma que se cumplan todas las necesidades de cambio de sus usuarios.
  • Documentación: Escritura de las diferentes fases del ciclo de vida del software esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y de referencia, así como normas para el mantenimiento.

Las dos primeras fases conducen a un diseño detallado escrito en forma de algoritmo. Durante la etapa de codificación se implementará el algoritmo en un código escrito en un lenguaje de programación, reflejando las ideas desarrolladas en las fases de análisis y diseño.

La fase de compilación y ejecución traduce y ejecuta el programa. En las fases de verificación y de depuración el programador busca errores de las etapas anteriores y los elimina. Comprobará que mientras más tiempo se gaste en las etapas de análisis y diseño menos se gastará en las etapas de depuración. Por último es necesario realizar la documentación del programa.

Análisis del problema

La primera fase de la resolución de un problema es el análisis. Esta fase requiere una clara definición, donde se contemple exactamente lo que debe hacer el programa y el resultado o solución deseada. Dado que se busca una solución por ordenador, se precisan especificaciones detalladas de entrada y de salida. Para poder definir un problema es conveniente responder a las siguientes preguntas:

  • ¿Qué entradas se requieren? (tipo y cantidad)
  • ¿Cuál es la salida deseada? (tipo y cantidad)
  • ¿Qué método produce la salida deseada?

Diseño del algoritmo

En la etapa de análisis del proceso de programación se determina que realiza el programa. En la etapa de diseño se determina cómo hace el programa la tarea solicitada. El diseño del algoritmo es independiente del lenguaje de programación en el que se codificará posteriormente.

Codificación del algoritmo

Codificación es la escritura en un lenguaje de programación de la representación del algoritmo desarrollada anteriormente. Dado que el diseño del algoritmo es independiente del lenguaje de programación, el código puede ser escrito con igual facilidad en un lenguaje o con otro.

Compilación y ejecución de un programa

Una vez que el algoritmo se ha convertido en un programa fuente, es preciso almacenarlo en el disco.

El programa fuente debe ser traducido a lenguaje máquina, este proceso se realiza con el compilador. Si después de la compilación se presentan errores (errores de compilación) en el programa fuente, es preciso volver a editar el programa, corregir los errores y compilarlo de nuevo. Este proceso se repite hasta que no hay errores, obteniéndose el programa objeto que todavía no es ejecutable directamente. Suponiendo que no existan errores en el programa fuente, debe instruirse en el sistema operativo para que realice la fase de montaje o enlace del programa objeto con las librerías del programa del compilador. El proceso de montaje produce un programa de ejecución. Cuando un programa ejecutable se ha creado, ya se puede ejecutar desde el sistema operativo. Suponiendo que no existan errores durante la ejecución (llamados errores en tiempo de ejecución), se obtendrá la salida de resultados del programa.

Verificación y depuración de un programa

La verificación de un programa es el proceso de ejecución del programa con una amplia variedad de datos de entrada, que determinarán si el programa tiene errores. Para realizar la verificación se debe desarrollar una amplia gama de datos de test: valores normales de entrada, valores extremos de entrada que comprueben los límites del programa y valores de entrada que comprueben aspectos esenciales del programa. La depuración es el proceso de encontrar errores del programa y corregir o eliminar esos errores.

En un programa se pueden producir tres tipos de errores:

  • Errores de compilación. Se producen normalmente por un uso incorrecto de las reglas del lenguaje de programación y suelen ser errores de sintaxis.
  • Errores de ejecución. Estos errores se producen por instrucciones que el ordenador entiende sin embargo no puede ejecutar. Ejemplos típicos son: división por cero y raíces cuadradas de números negativos. En estos casos se detiene la ejecución del programa y se imprime un mensaje de error.
  • Errores lógicos. Se producen en la lógica del programa y la fuente de error suele ser el diseño de el algoritmo. Estos errores son los más difíciles de detectar, puesto que el programa puede funcionar y no producir errores de compilación ni de ejecución y sólo puede advertirse por el error por la obtención de resultados incorrectos. En este caso se puede volver a la fase de diseño de el algoritmo, modificarlo, cambiar el código fuente y compilar y ejecutar de nuevo.

Documentación y mantenimiento

La documentación de un problema consta de las descripciones de los pasos a dar en el proceso de resolución de un problema. La importancia de la documentación debe ser destacada por su decisiva influencia en el producto final. Programas pobremente documentados son difíciles de leer, más difíciles de depurar y casi imposibles de mantener y modificar.

La documentación de un programa puede ser interna y externa. La documentación interna es la contenida en las líneas de comentarios. La documentación externa incluye análisis, diagramas de flujo o pseudocódigo, manuales de usuario con instrucciones para ejecutar el programa y para interpretar los resultados.

La documentación es vital cuando se desea corregir posibles errores futuros o cambiar el programa. Estos cambios se llaman mantenimiento del programa. Después de cada cambio la documentación debe ser actualizada para facilitar cambios posteriores.

Características de los algoritmos

El pseudocódigo es un lenguaje que utilizamos para escribir el algoritmo de una manera comprensible, utilizando palabras de nuestro lenguaje. Ahora bien, existen algunas palabras clave de obligada utilización y que se consideran reservadas, es decir, algunas no se pueden utilizar para otra cosa que para al uso que tienen asignado.

En la realización de un algoritmo en seudocódigo se siguen las siguientes reglas:

  1. Las palabras clave se escriben diferenciándolas del resto de palabras de alguna manera como, por ejemplo, subrayándolas.
  2. En los algoritmos se utiliza el concepto de bloque para agrupar un conjunto de instrucciones del mismo nivel. Pues bien, el texto interior de un blog, lo escribiremos sangrado respecto al margen de la cabecera. De esta forma se pueden  distinguir visualmente los diferentes blogs que contiene el programa.
  3. Toda instrucción debe acabar con un punto y coma (;).

Un programa en seudocódigo debe tener, como mínimo, la siguiente estructura:

Programa <nombre>
  <cuerpo del programa principal>
fiPrograma

Las expresiones enmarcadas entre los símbolos < y > indican que corresponden a palabras que puede decidir el programador, sin utilizar ninguna de las palabras reservadas. Bien, hacemos el típico programa que se suele diseñar en el aprendizaje de todos los lenguajes y que consiste en conseguir que el ordenador nos dé el mensaje “¡Hola, mundo!”. Para conseguir esto, necesitamos una manera de obligar al ordenador que haga lo que nosotros queremos, que no es otra cosa que dar un mensaje. Esto se logra mediante lo que en programación se llama instrucción de salida.

A partir de ahora dispondremos en seudocódigo de la siguiente instrucción de salida:

escribir ("<texto del mensaje>");

Por tanto, ya podemos escribir el algoritmo:

Programa primer_programa
    escribir ("Hola, mundo!");
fiPrograma
Pin It