FUNDAMENTOS DE PROGRAMACION

Si buscas hosting web, dominios web, correos empresariales o crear páginas web gratis, ingresa a PaginaMX
Por otro lado, si buscas crear códigos qr online ingresa al Creador de Códigos QR más potente que existe



P r o g r a m a c i ó n    E s t r u c t u r a d a
 

La programación estructurada es una técnica para escribir programas (programación de computadora). Para ello se utilizan únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).

Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las necesidades de programación existentes en los años 1960, principalmente debido a las aplicaciones gráficas, por lo que las técnicas de programación estructurada no son suficientes. Ello ha llevado al desarrollo de nuevas técnicas, tales como la programación orientada a objetos y el desarrollo de entornos de programación que facilitan la programación de grandes aplicaciones.

Orígenes de la programación estructurada

A finales de los años 1970 surgió una nueva forma de programar que no solamente daba lugar a programas fiables y eficientes, sino que además estaban escritos de manera que facilitaba su comprensión posterior.


El teorema del programa estructurado, propuesto por Böhm-Jacopini, demuestra que todo programa puede escribirse utilizando únicamente las tres instrucciones de control siguientes:

  • Secuencia
  • Instrucción condicional.
  • Iteración (bucle de instrucciones) con condición al principio.

Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles. Si bien los lenguajes de programación tienen un mayor repertorio de estructuras de control, éstas pueden ser construidas mediante las tres básicas citadas.

Estructura secuencial

Una estructura de programa es secuencial si las instrucciones se ejecutan una tras otra, a modo de secuencia lineal, es decir que una instrucción no se ejecuta hasta que finaliza la anterior, ni se bifurca el flujo del programa.

Ejemplo:

   
INPUT x
   INPUT y
   auxiliar= x
   x= y
   y= auxiliar
   PRINT x
   PRINT y

Esta secuencia de instrucciones permuta los valores de x e y, con ayuda de una variable auxiliar, intermedia.

  • 1º Se guarda una copia del valor de x en auxiliar.
  • 2º Se guarda el valor de y en x, perdiendo su valor anterior, pero se mantiene una copia del contenido en auxiliar.
  • 3º Se copia a y el valor de auxiliar, que es el valor inicial de x.
  • El resultado es el intercambio de los valores entre x e y, en tres operaciones secuenciales.


Estructura selectiva o de selección

La estructura selectiva permite que la ejecución del programa se bifurque a una instrucción (o conjunto) u otra/s, según un criterio o condición lógica establecida, sólo uno de los caminos en la bifurcación será el tomado para ejecutarse.


Ejemplo:

   
IF a > b THEN
      PRINT a ; " es mayor que " ; b
   ELSE
      PRINT a ; " no es mayor que " ; b
   END IF


La instrucción selectiva anterior puede presentar uno de dos mensajes: a es mayor que b o a no es mayor que b, según el resultado de la comparación entre a y b; si el resultado de a > b es verdadero, se presenta el primer mensaje, si es falso se exterioriza el segundo. Las palabras clave IF, THEN, ELSE, y END IF; constituyen la propia estructura de la instrucción condicional (palabra reservadas), proporcionada por el lenguaje, el usuario no debe utilizar sus nombres salvo para este fin.

El caso ejemplo se ha codificado en BASIC.

  • IF señala el comienzo de la instrucción condicional, y se espera que después siga la condición lógica de control de la instrucción.
  • THEN señala el fin de la condición, y después estará la instrucción a ejecutar si la condición es verdadera.
  • ELSE es opcional, le sigue la instrucción que se ejecutará si la condición es falsa.
  • END IF indica el final de la estructura, luego de ésta el programa seguirá su curso.


Ampliando un poco el ejemplo anterior, con estructuras anidadas:

   
IF a > b THEN
      PRINT a ; " es mayor que " ; b
   ELSEIF a < b THEN
      PRINT a ; " es menor que " ; b
   ELSE
      PRINT a ; " es igual que " ; b
   END IF

Este ejemplo permite considerar situaciones en las que se tiene más de dos alternativas. En este caso se ha considerado tres, pero hay situaciones en las que deben considerarse más casos y para ellos se puede repetir las veces que sea necesario la opcional ELSEIF.


Estructura iterativa

Un bucle iterativo o iteración de una secuencia de instrucciones, hace que se repita su ejecución mientras se cumpla una condición, el número de iteraciones normalmente está determinado por el cambio en la condición dentro del mismo bucle, aunque puede ser forzado o explícito por otra condición.

Ejemplo:

   a= 0
   b= 7
   DO WHILE b > a
      PRINT a
      a= a + 1
   LOOP


Esta instrucción tiene tres palabras reservadas WHILE, DO y LOOP.

  • DO WHILE: señala el comienzo del bucle ("haga mientras") y después de estas palabras se espera la condición lógica de repetición, si la condición es verdadera pasa el control al cuerpo del bucle, en caso contrario el flujo salta directamente al final de la estructura, saliendo de la misma.
  • LOOP: señala el final del cuerpo de la estructura de bucle.

El bucle mientras, se repite mientras la condición sea verdadera, esta condición se comprueba o chequea antes de ingresar al cuerpo del bucle, por lo que el mismo puede que no se ejecute nunca (cuando la condición es falsa desde un principio) o bien que se repita tantas veces como resulte y mientras la condición sea cierta.


En el ejemplo se tienen definidas dos variables a y b, que al iniciarse el bucle contienen los valores a=0 y b=7.


La condición del bucle es b > a.

Si a=0 y b=7. la condición es verdadera, en el cuerpo del bucle se escribe el valor de a en pantalla y luego se incrementa esa variable en una unidad. Entonces pasa a ser a=1 y b=7.
... (se repite la secuencia)
...
Cuando a=6 y b=7. la condición sigue siendo verdadera, se escribe el valor de a en pantalla y se incrementa en una unidad.
Cuando se llega a que a=7 y b=7. Entonces la condición ya resulta falsa y la instrucción WHILE finaliza, saliendo por LOOP.
La salida por pantalla de este ejemplo es 0 1 2 3 4 5 6, y se iteró 7 veces.

El lenguaje utilizado en el ejemplo (BASIC), además de tener otras del tipo iterativas, permite utilizar la misma estructura indicada, pero de la siguiente forma:

   a= 0
   b= 7
   WHILE b > a
      PRINT a
      a= a + 1
   WEND


Que es absolutamente análoga, en éste formato la palabra reservada WEND marca el fin del bucle y no se utiliza ni DO ni LOOP.


 Anidamiento

El cuerpo de cualquier estructura puede ser instrucciones simples u otras estructuras, que a su vez pueden contener a otras.

Ejemplo:

   
CLS
   INPUT "Valor entero para a:"; a
   INPUT "Valor entero para b:"; b
   IF a > b THEN
      REM hacer intercambio de variables
      auxiliar = a
      a = b
      b = auxiliar
      REM imprimir diferencia en escala de uno en uno
      DO WHILE auxiliar > a
         auxiliar = auxiliar - 1
         PRINT auxiliar
      LOOP
   ELSE
      REM no hacer nada
   END IF
   PRINT
   PRINT a; b



En el ejemplo la sentencia o instrucción CLS sólo tiene el efecto de "limpiar" la pantalla al inicio de la ejecución del programa. Las instrucciones INPUT permiten que el operador ingrese, desde teclado y con un mensaje previo acorde, los valores deseados para las variables a y b. La instrucción no ejecutable REM permite la inserción de comentarios en cualquier parte del programa, donde el programador lo considere necesario; constituye una buena práctica de programación comentar adecuadamente todos los programas, de este modo se clarifica notablemente su lectura, durante su desarrollo y posterior para modificación o mantenimiento.


En la anterior estructura IF bien se puede omitir la porción ELSE, ya que no hay cuerpo allí, de modo que lo siguiente es completamente equivalente:

   
CLS
   INPUT "Valor entero para a:"; a
   INPUT "Valor entero para b:"; b
   IF a > b THEN
      REM hacer intercambio de variables
      auxiliar = a
      a = b
      b = auxiliar
      REM imprimir diferencia en escala de uno en uno
      DO WHILE auxiliar > a
         auxiliar = auxiliar - 1
         PRINT auxiliar
      LOOP
   END IF
   PRINT
   PRINT a; b



 Caracteristicas de la programación estructurada

1. Los programas son más fáciles de entender, pueden ser leídos de forma secuencial, no hay necesidad de hacer engorrosos seguimientos en saltos de línea (GOTO) dentro de los bloques de código para intentar entender la lógica.

2. La estructura de los programas es clara, puesto que las instrucciones están más ligadas o relacionadas entre sí.

3. Reducción del esfuerzo en las pruebas y depuración. El seguimiento de los fallos o errores del programa ("debugging") se facilita debido a su estructura más sencilla y comprensible, por lo que los errores se pueden detectar y corregir más fácilmente.

4. Reducción de los costos de mantenimiento. Análogamente a la depuración, durante la fase de mantenimiento, modificar o extender los programas resulta más fácil.

5. Programas son más sencillos y más rápidos de confeccionar (y se facilita su optimización).

6. Los bloques de código son casi auto-explicativos, lo que reduce y facilita la documentación.

7. Las instrucciones de salto, GOTO, quedan reservadas para construir las instrucciones básicas, si fuera realmente imprescindible. Aunque no se usan de forma directa, por estar prohibida su utilización, están incluidas implícitamente en las instrucciones de selección e iteración.

8. Un programa escrito de acuerdo a los principios de programación estructurada no solamente tendrá una mejor estructura sino también una excelente presentación.

9. Se incrementa el rendimiento de los programadores, comparada con la forma tradicional que utiliza GOTO.

La programación estructurada ofrece estos beneficios, pero no se la debe considerar como una panacea ya que el desarrollo de programas es, esencialmente, una tarea de dedicación, esfuerzo y creatividad; programar es casi un arte.
 

Inconvenientes de la programación estructurada

El principal inconveniente de este método de programación es que se obtiene un único bloque de programa, que cuando se hace demasiado grande puede resultar problemático el manejo de su código fuente; esto se resuelve empleando conjuntamente la programación modular, es decir, si es necesario, se definen módulos independientes, programados y compilados por separado (en realidad esto no es necesario, pero sí es recomendable para su mejor mantenimiento y depuración).

En realidad, cuando se programa hoy en día (inicios del siglo XXI) se utilizan normalmente, tanto las técnicas de programación estructurada como las de programación modular, de forma conjunta y por lo tanto es muy común que cuando se hace referencia a la programación estructurada muchos entiendan que ella incluye también las técnicas modulares, estrictamente no es así.

Un método un poco más sofisticado es la programación por capas, en la que los módulos tienen una estructura jerárquica en la que se pueden definir funciones dentro de funciones o de procedimientos.

Si bien las metodologías en cuestión ya son de antigua data ("en plazos informáticos"), aun en la actualidad la conjunción "Programación estructurada" y "programación modular" es una de la más utilizadas, juntamente con un más moderno paradigma, en pleno auge, completamente distinto, llamado programación orientada a objetos.





 

Estructura de un programa en C

 

                   


El programa más sencillo que se puede escribir en C es el siguiente:
 

main()
{

}



Como podemos imaginar, este programa no hace nada, pero contiene la parte más importante de cualquier programa C y además, es el más pequeño que se puede escribir y que se compila correctamente. En él se define la función main, que es la que ejecuta el sistema operativo al llamar a un programa C. El nombre de una función C siempre va seguida de paréntesis, tanto si tiene argumentos como si no. La definición de la función está formada por un bloque de sentencias, que esta encerrado entre llaves {}.

Un programa algo más complicado, pero que hace algo, es el siguiente:

#include 

main()
{
	/* Este es mi primer programa en C*/

	printf("Bienvenido a la programación en lenguaje Cn");

	return 0;

}


Con él visualizamos el mensaje Bienvenido a la programación en lenguaje C en el terminal.


La primera línea indica que se tengan en cuenta las funciones y tipos definidos en la biblioteca stdio (standard input/output). Estas definiciones se encuentran en el fichero de encabezado (header) stdio.h.


En la función main se incluye una primera sentencia que llama a la función printf. Ésta toma como argumento (encerrado entre paréntesis) una cadena de caracteres limitados por dobles comillas " " y la imprime en la salida habitual, que generalmente es el terminal en el que trabajamos. El símbolo n indica un cambio de línea.


La segunda sentencia, return 0, termina el programa y devuelve un valor (cero) al sistema operativo (por lo general es cero si la ejecución fue correcta y se usan valores distintos de cero para indicar diversos errores que pudieron ocurrir). Si bien no es obligatorio terminar el programa con un return, es conveniente indicarle a quien lo haya invocado, sea el Sistema Operativo o algún otro programa, si la finalización ha tenido éxito o no. De cualquier manera, en este caso, si sacamos esa sentencia el programa, éste funcionará exactamente igual, pero al ser compilado, el compilador nos advertirá de la falta de retorno.


La inclusión de comentarios en un programa es una saludable práctica, como lo reconocerá cualquiera que haya tratado de leer un listado hecho por otro programador o por sí mismo, varios meses atrás. Para el compilador, los comentarios son inexistentes, por lo que no generan líneas de código, permitiendo abundar en ellos tanto como se desee. En el lenguaje C se toma como comentario todo carácter entre los símbolos: /* */.


Cada sentencia de programa queda finalizada por el terminador ";", que indica al compilador el fin de la misma. Esto es necesario ya que sentencias complejas pueden llegar a tener más de un renglón, y habrá que avisar al compilador donde terminan. Es perfectamente lícito escribir cualquier sentencia abarcando los renglones que la misma necesite; por ejemplo podría ser:

	
printf("Bienvenido a la programación
                            	en lenguaje Cn");


Un programa en C es simplemente un fichero de caracteres que contiene un conjunto de instrucciones que un programa especial, el compilador o traductor, se encarga de transformar en un código que la computadora puede ejecutar (código objeto). En general, un programa suele estar compuesto de tres partes:

  • el encabezamiento, que especifica las declaraciones globales de los datos y sus tipos, que vamos a manejar a lo largo del programa;
  • la función principal, que se suele llamar main, y define la estructura del programa.
  • las funciones o subrutinas auxiliares, que realizan las operaciones necesarias; son llamadas por la rutina principal, la función main. Se suelen colocar después de esta función.
Encabezamiento

main( )
{
	variables locales
	sentencias
}

f1( )
{
	variables locales
	sentencias
}

...
...
...

fn( )
{
	variables locales
	sentencias
}


Cuando la envergadura del programa es grande se suele fragmentar el programa en varias partes, incluyendo cada parte en un fichero separado. El lenguaje C define el método que debemos seguir para separar las diferentes partes del programa. Normalmente colocaremos en cada fichero todas las subrutinas y funciones que se encarguen de una tarea del programa. Por tanto, un programa C puede estar formado por diferentes módulos o fuentes. Es conveniente mantener los fuentes de un tamaño no muy grande, para que la compilación sea rápida. También, al dividirse un programa en partes, se puede facilitar la legibilidad del programa y su estructuración. Los diferentes fuentes son compilados de forma separada -únicamente los fuentes que han sido modificados desde la última compilación-, y después enlazados o combinados entre ellos y con las bibliotecas necesarias para formar el programa en su versión ejecutable, mediante un programa denominado enlazador (linker).


Los comandos necesarios para compilar, enlazar  los diferentes módulos y ejecutar un programa dependen del sistema operativo, y debemos dirigirnos a los manuales correspondientes para conocer la sintaxis exacta. Como forma más común podemos dar la siguiente:

compilar:         cc prog
            cc modulo1, modulo2


enlazar:           link prog, modulo1, modulo2

ejecutar:          prog
 


Creación de un programa en C











 

© 2024 FUNDAMENTOS DE PROGRAMACION