En código no estructurado, quedaría algo más extraño, pero igualmente valido.
En programas más grandes, esto es muchísimo más complicado, pero puede aprender.
Ahora conocemos la ejecución de los algoritmos. Sin embargo, un programa se compone tanto de algoritmos como de una estructura de datos sobre la cual operar. Así que veamos primero algunas cosas importantes:
Antes de empezar un programa
Estructura de un programa
En la programación estructurada hay un inicio y un fin perfectamente bien definido de acuerdo al diagrama de flujo que se planteó al concebir la idea del programa.
Un programa bien estructurado debería tener algún subprograma que
capture cualquier error dentro del programa principal o de cualquier
subprograma dentro de la aplicación de tal modo que el subprograma que
captura los errores genere un registro de datos que describa el error
generado y/o en qué subprograma se generó el error para posteriormente
corregirlo. Para facilitar la corrección de estos errores se hace uso de
los comentarios agregados en el código fuente.
Variables y constantes
Como hemos visto, el ordenador sigue una serie de instrucciones. Pero
esas instrucciones tienen que operar sobre una serie de datos. El
ordenador típico sólo procesa una instrucción a la vez, por lo que
necesita 'espacios de memoria' donde guardar o depositar, a modo de
cajones, por usar un símil conocido, los diversos datos con los que
trabaja. Aquí es donde entran en juego las variables y constantes.
En los inicios, con el ensamblador, se podía decir al ordenador, por
ejemplo: 'Ejecuta la instrucción de esa posición de memoria' o también
'En esa posición de memoria está guardada mi edad, imprímela por
pantalla'. Todo esto se deriva del hecho de que los programas también
son datos. Esta ambigüedad presenta numerosos inconvenientes cuando se
producen errores, como imaginarás fácilmente: de ahí que, a medida que
los lenguajes promocionan hacia niveles superiores, se impida el
tratamiento indistinto de los datos. A partir de entonces, un programa
tiene que decirle al sistema operativo los cajones que necesita y éste
se los proporciona independientemente de cuáles sean. Es decir, como
quizá hallas leido en algún lado, se deben declarar las variables y/o
constantes y su tipo.
Quizás suene más complicado de lo que es. Un ejemplo: Queremos sumar
dos números. Nuestro programa tendrá que tener tres cajones: Uno para
cada número y otro para el resultado. Cada cajón tiene un nombre en vez
de una posición de memoria, de manera que sólo hay que nombrarlo:
He aquí nuestro programa. Como cabe pensar, un procesador no tiene la
instrucción "Imprime por pantalla"; esto es una llamada a otra porción
de código que, gracias a la abstracción, nosotros no hemos escrito, o
hemos escrito una sola vez; a partir de lo cual podemos imprimir todo el
texto que queramos en la pantalla.
Las posiciones de memoria A y B son Variables. Si queremos leerlas o
escribirlas, podemos hacerlo. Típicamente, existirán datos que no
pensamos modificar; no querremos que el usuario tenga que introducirlos
cada vez, pues son de naturaleza más constante que otros (como puede ser
el valor Pi para calcular el perímetro o área de un círculo). Para
evitar modificarlos por error, podemos pedir al sistema variables
especiales, que no puedan ser reescritas. Son las Constantes. Un
ejemplo:
El uso de variables y constantes se asemeja al uso que se les da en el álgebra o en otras ramas matemáticas.
Nótese también la clara separación entre estructuras de datos y
algoritmos. Según los lenguajes, esto puede ser o no obligatorio, pero
es recomendable en aras de una mayor claridad del trabajo.
Comentarios
El útil concepto del comentario: son líneas de texto que el
compilador o el intérprete no consideran como parte del código, con lo
cual no están sujetas a restricciones de sintaxis y sirven para aclarar
partes de código en posteriores lecturas y, en general, para anotar
cualquier cosa que el programador considere oportuno.
Uno como programador debe tener como prioridad documentar nuestro
código fuente ya que al momento de depurar nos ahorrará mucho tiempo de
analisis para su corrección o estudio.
Los programadores profesionales tienen la buena costumbre de
documentar sus programas con encabezados de texto(encabezados de
comentarios) en donde describen la función que va a realizar dicho
programa, la fecha de creación, el nombre del autor y en algunos casos
las fechas de revisión y el nombre del revisor.
Por lo general algunos programas requieren hacer uso de llamadas a
subprogramas dentro de una misma aplicación por lo que cada subprograma
debería estar documentado, describiendo la función que realizan cada uno
de estos subprogramas dentro de la aplicación.
Estructuras de datos y de control
Estructuras de control
Las estructuras de control pueden dividirse en dos: Estructuras de control Condicional y Estructuras de control Repetitivo.
Las estructuras de control condicional son las que incluyen
alternativas de selección en base al resultado de una operación
booleana(El resultado de una operación booleana es siempre verdadero o
falso), como por ejemplo, una comparación (A=B). Según la expresión sea
cierta o falsa, se ejecutará un trozo de código u otro. Es el caso de la
sentencia IF(Si) THEN(Entonces) ELSE(Sino) de Pascal o Basic:
Otra sentencia de control son las de tipo SWITCH CASE. En este tipo de
sentencias se especifica la variable a comparar y una lista de valores
con lo que comparar. Aquel que sea el verdadero, se ejecutará:
Otras herramientas imprescindibles del control de la ejecución de
nuestro código son los BUCLES o CICLOS. Consisten en un método que
permite repetir un trozo de código varias veces.
Hay básicamente dos tipos:
- Bucle FOR:
El bucle FOR (Para) consiste en una sentencia que engloba un grupo de
instrucciones y tiene una variable(normalmente llamada i, de tipo
entero) cuyo valor se va modificando en cada vuelta.
- Bucle WHILE:
El bucle WHILE (Mientras) consiste en un bucle en el que el código se
repite hasta que se cumpla alguna condición booleana (es decir, una
expresión que dé como resultado verdadero o falso). Hay variaciones,
como el REPEAT...UNTIL, que se diferencia en el momento de comprobar si
se hace verdadera o no la condición.
Estructuras de datos
Estructura de una aplicación
Cualquier programa que se realices debe de llevar una estructura para
disminuir la tarea de depuración ya que esta labor lleva más tiempo del
estimado.
Si eres principiante en el área de programación debes definir el
programa a realizar, documentar cada uno de los pasos que realizas en tu
programa, debes de considerar algún metodo de captura de errores, etc.
En esta subsección abarcaremos el cómo estructurar una aplicación
para eficientar o disminuir el tiempo en depuración, así como localizar
más rápidamente los errores.
Puedes buscar en Internet el concepto "pseudocódigo",
que no es más que la escritura de un algoritmo en un lenguaje más
cercano al natural. Es decir, la orden en lenguaje Javascript que
repetiría el proceso de quitar suciedad añadiendo agua y jabón mientras
se frota sería la siguiente:
Mientras que el algoritmo o pseudocódigo quedaría así:
En primer lugar, es muy recomendable hacer un esquema sobre el papel
con toda clase de datos que se vayan a utilizar. Por ejemplo, si
queremos hacer un programa para controlar una empresa dedicada al
alquiler de coches, podríamos necesitar:
* Matrícula del coche
* Marca del coche
* Modelo del coche
* Color del coche
* Estado del coche (si está alquilado, en reparación o disponible)
* Situación del coche (en qué lugar del garaje o en qué localidad está)
* Kilometraje del coche
* Precio por hora del coche
por un lado, y:
* Nombre del cliente
* Apellidos del cliente
* Dirección del cliente
* DNI del cliente
* Permiso de conducir del cliente
* Número de cuenta del cliente
.... etc. por otro.
Ahora a programar.
“Primero resuelve el problema. Entonces, escribe el código.”
— John Johnson