Вы находитесь на странице: 1из 12

1

FUNDAMENTOS DE ALGORITMOS Y PROGRAMACION ESTRUCTURADA


Ing. Braulio Barrios Zúñiga

La Computación es una forma de arte, Algunos programas son elegantes, algunos son
exquisitos, algunos son brillantes,
Mi afirmación es que es posible escribir programas grandiosos, nobles, realmente magníficos.
Donald E. Knuth

Objetivo de este artículo: Trazar las pautas que nos permitan entender los fundamentos del
diseño de Algoritmos y de la Programación estructurada como base fundamental para adquirir
destrezas en la elaboración de Soluciones de software a problemas que se planteen
2

I.- ALGORITMOS

Comencemos definiendo un ALGORITMO como una serie de pasos finitos los cuales partiendo de
unas condiciones iniciales y expresados estos pasos sin ambigüedad, al ejecutarse, produce unos
resultados en determinado tiempo. Según esta definición, los algoritmos no están limitados a
expresar soluciones a problemas de índole computacional sino que abarcan la representación de
una multitud de problemas de diversos campos.

Ejemplo1: La preparación de un medicamento en suspensión parte de la utilización de 25


gramos de Ampicilina en polvo a los cuales hay que agregar agua hervida hasta alcanzar el nivel
indicado por una flecha impresa en la etiqueta del frasco lo cual permite obtener 50 mililitros de
medicamento para el consumo humano. Escriba un algoritmo que exprese la solución al problema
consistente en preparar el medicamento en cuestión.

Solución:
Paso 1 : Hervir 50 c.c. de agua en un recipiente durante 5 minutos
Paso 2 : Verter una porción mínima de agua en el frasco que contiene
el polvo de la suspensión.
Paso 3: Agitar muy bien hasta obtener una solución espesa.
Paso 4: Si el volumen de medicamento obtenido es inferior a 50 ml entonces
Volver al paso número 2, de lo contrario finalizar la preparación

Ejemplo2: Se requiere leer desde el teclado una serie de caracteres. El proceso debe terminar
cuando se introduzca el carácter ‘#’, hecho lo cual debe entonces indicar cuantas vocales fueron
introducidas durante el proceso.

Solución:

CARACTERES
/* Variables: car: tipo carácter ; cuantas: tipo entero */
cuantas  0; Lea (Car)
MQ ( Car <> ‘#’) Haga
SI ( car=’a’ OR car=’e’ OR car=’i’ OR car=’o’ OR car=’u’) Entonces
cuantas  cuantas + 1
FSI
SI ( car=’A’ OR car=’E’ OR car=’I’ OR car=’O’ OR car=’U’) Entonces
cuantas  cuantas + 1
FSI
Lea (Car)
FMQ
Escriba(“El total de Vocales introducidas fue “, cuantas)
FIN CARACTERES
3

Cual es la diferencia entre los algoritmos de los ejemplos 1 y 2?

R/ La diferencia consiste en que el segundo se ha escrito utilizando lógica y sintaxis de


computación mientras que el primero no.

Como enfrentar la solución de un problema mediante la elaboración de


un algoritmo computacional?

R/ Comencemos indicando que por más veloz y exacta que sea una computadora, lo normal es
que su utilidad se resuma en: Recibir datos, Procesarlos y Producir resultados. Es necesario
entender esto puesto que los Algoritmos se elaboran para luego ser representados (decimos
codificados) en un Lenguaje de Programación de manera que pueda este programa ser
introducido a la máquina y ejecutado para comprobar si resuelve el problema para el cual fue
diseñado el algoritmo.

Ahora bien, entendido lo anterior, le sugiero que considere el problema que va a resolver
mediante algoritmos computacionales, como si este fuera un ENFERMO que necesita ser llevado a
la EPS para ser tratado. Una vez que nuestro enfermo llega de urgencias es necesario que nos
planteemos y resolvamos los siguientes interrogantes:

• Cuales son los datos de Entrada?


• Cuales son los Procesos que se requiere hacer con estos datos?
• Cuales son los resultados, es decir, la Salida que debe obtenerse?

Si usted considera necesario volver a leer detenidamente una o más veces el problema, no dude
en hacerlo hasta que lo haya entendido perfectamente. ¿ Como saber si lo ha entendido?, pues
sencillamente, lo habrá entendido si está en capacidad de contestar las tres (3) preguntas
anteriores. Una vez que esto suceda entonces aplique usted su lógica y comience a elaborar su
algoritmo. No existen formulas para esto; Escriba El nombre del Algoritmo o simplemente la
palabra INICIO, trace una línea Vertical debajo de esta palabra y comience….
Por ultimo, conviene escribir en un recuadro cuales son las VARIABLES que su algoritmo
utilizará (Cada dato leído y también cada dato que se calcule en el proceso de la información
requiere de una VARIABLE en memoria para ser almacenado).
Una VARIABLE no es mas que el nombre que le damos a ciertas posiciones de memoria en el
computador para almacenar en ellas un dato de algún tipo (Numérico, alfanumérico, etc.)

Cuales son los métodos habituales para representar los algoritmos?

R/ Comúnmente los algoritmos se escriben utilizando bien sea LENGUAJE NATURAL, ó


mediante DIAGRAMAS DE FLUJO ó también por medio de instrucciones en PSEUDOCODIGO.

La solución del Ejemplo1 está dada en LENGUAJE NATURAL mientras que la del Ejemplo2 lo
está en PSEUDOCODIGO

El caso particular de la representación mediante DIAGRAMA DE FLUJO es muy útil cuando se


están dando los primeros pasos en el campo de la elaboración de algoritmos computacionales.
4
En esta representación se utilizan unos SIMBOLOS para expresar las operaciones y el flujo de los
procesos que plantea el algoritmo, como se muestra a continuación:

SIMBOLO DE INICIO Y FIN DEL ALGORITMO

SIMBOLO DE CALCULOS U OPERACIONES

SIMBOLO DE CONDICIONES

SIMBOLO DE PROCESOS REPETITIVOS

SIMBOLO DE LECTURA (ENTRADA) DE DATOS

SIMBOLO DE ESCRITURA (SALIDA) DE DATOS

SIMBOLO CONECTOR DENTRO DE LA PÁGINA

SIMBOLO CONECTOR A OTRA PÁGINA

A manera de ilustración, representemos inmediatamente la solución al problema planteado en el


Ejemplo1 pero ahora representemos el algoritmo mediante un DIAGRAMA DE FLUJO:
5

INICIO

HERVIR AGUA

VERTER AGUA EN EL FRASCO

AGITAR LA SOLUCION

SI Volumen <
50 Ml

NO

Medicamento
PREPARADDO

FIN

 EJERCICIO PARA EL ESTUDIANTE: Escriba una solución algorítmica al


Ejercicio2 expresada mediante un Diagrama de Flujo
6

II.- QUE ES PROGRAMACIÓN ESTRUCTURADA.


Podemos concebir la P.E. como una tendencia en el desarrollo de soluciones de programación. Se
trata de un conjunto de técnicas que han ido evolucionando desde los primeros trabajos de Edsgar
Dijkstra. Dichas técnicas aumentan la productividad del programa haciendo que el tiempo que se
dedica a escribir, verificar y mantener un programa sea el menor posible contribuyendo de paso a
un aspecto que es fundamental en el desarrollo de software: La minimización de los errores.

La programación estructurada tiene su sustento matemático en dos teoremas que fueron


demostrados por Böhm y Jacopini en 1966 y que se fundamentan en los denominados “Programas
Propios” y “las Estructuras básicas”.

Teorema 1 : PROGRAMA PROPIO: Sea P = {P1, P2, P3, …,Pn} Un conjunto de programas.
Diremos que un programa Pi de este conjunto es “PROPIO” SI y SOLO SI satisface las siguientes
características:

• Tiene una sola entrada y una sola salida


• No existen partes por las cuales nunca pase el control del programa (innecesarias)
• No existen Bucles o Lazos ”Infinitos”.

Teorema 2 : Sea S={S1, S2, S3, ..., Sn}, un Conjunto de Estructuras denominadas “Básicas” ó
“Privilegiadas”; y sea Pi un programa Propio, según el teorema 1 enunciado anteriormente.
Diremos pues, que Pi es “ESTRUCTURADO en S” SI y SOLO SI se escribe utilizando UNICAMENTE
las estructuras del conjunto S.

De acuerdo con este par de teoremas, si queremos desarrollar aplicaciones de software de


manera óptima, simplificada y que garanticen que el producto que se obtiene sea fácilmente
mantenible, legible, etc. Entonces basta con aplicar la metodología descrita anteriormente, es
decir, la Programación Estructurada.

Veamos entonces cuales son esas ESTRUCTURAS “BASICAS” ó “PRIMITIVAS” ó “PRIVILEGIADAS”


de la programación estructurada:

2.1.- ESTRUCTURAS BASICAS DE LA PROGRAMACIÓN


ESTRUCTURADA.

A.- ESTRUCTURA SECUENCIAL


B.- ESTRUCTURA CONDICIONAL O DE SELECCIÓN
C.- ESTRUCTURA REPETITIVA O ITERATIVA
7

A.- ESTRUCTURA SECUENCIAL Aquella que de manera lógica determina el orden o


secuencia en el cual deben ejecutarse las sentencias en el algoritmo o programa.

Ejemplo:

.
.
.
LEA (SUELDO)
RETE  (SUELDO*0.15)
NETO  SUELDO – RETE
.
.
.

B.- ESTRUCTURA CONDICIONAL (ó de SELECCIÓN) Aquella que


permite al desarrollador escoger, de manera lógica, entre distintas alternativas resultantes de la
evaluación de una determinada condición.

1.- CONDICIONAL SIMPLE (Sencillo ó Símple)


Lo utilizamos cuando únicamente estamos interesados en qué hacer en caso de que la condición
resulte VERDADERA al evaluarse.

El esquema para representar esta estructura es el siguiente

SI (CONDICION) ENTONCES
ACCION
FINSI

Ejemplo1:

SI (SUELDO > 900.000) Entonces


RETE  (SUELDO*0.15)
NETO  SUELDO – RETE
FINSI

Ejemplo2:

SI (CALIFICACION < 3.0) Entonces


ESCRIBA(“Perdió la asignatura”)
FINSI
8

2.- CONDICIONAL DOBLE


Lo utilizamos cuando estamos interesados en tomar una determinación si la condición resulta
VERDADERA al evaluarse y otra determinación en caso de que al evaluarse la condición resulte
FALSA.

El esquema para representar esta estructura es el siguiente

SI (CONDICION) ENTONCES
ACCION1
SINO
ACCION2
FINSI

Ejemplo1:

SI (SUELDO > 900.000) Entonces


RETE  (SUELDO*0.15)
NETO  SUELDO – RETE
SINO
NETO  SUELDO – 20.000
FINSI

Ejemplo2:

SI (CALIFICACION < 3.0) Entonces


ESCRIBA(“Perdió la asignatura”)
SINO
ESCRIBA(“Aprobó la asignatura”)
FINSI

3.- CONDICIONAL ANIDADO


Lo utilizamos cuando para tomar una decisión se requiere evaluar mas de una condición

El esquema para representar esta estructura es el siguiente

SI (CONDICION1) ENTONCES
SI (CONDICION2) ENTONCES
SI (CONDICION3) ENTONCES

ACCION

FINSI
FINSI
FINSI
9

Ejemplo:

SI (ESTRATO <3 ) ENTONCES


SI (EDAD>50) ENTONCES
SI (HIJOS>2) ENTONCES

SUBSIDIO  (10*SALBASICO)/100
BONO  10.000

FINSI
FINSI

FINSI

Observe que las condiciones anidadas se CIERRAN de la más interna hasta la mas externa

Por supuesto, la anterior solución también se puede representar como sigue:

SI (ESTRATO <3 ) AND (EDAD>50) AND (HIJOS>2) ENTONCES

SUBSIDIO  (10*SALBASICO)/100
BONO  10.000

FINSI

Note usted el uso del OPERADOR LOGICO AND , lo cual implica que las tres (3) condiciones
enlazadas mediante este operador deben cumplirse para que se realicen los cálculos de
SUBSIDIO y BONO.

 EJERCICIO PARA EL ESTUDIANTE: Asuma usted que en las variables X, Y,


Z, W se encuentran almacenados unos valores numéricos enteros(4).
Escriba una solución algorítmica en pseudo código que encuentre y
muestre cual es el MAYOR y cual el MENOR de los cuatro valores.

C.- ESTRUCTURAS REPETITIVAS (ó ITERATIVAS)

Las utilizamos en los algoritmos cuando del análisis de EPS que hemos hecho al problema
deducimos que alguna(s) tarea(s) deben procesarse cierto número de veces. Estas estructuras
son:

• HACER HASTA ( Estructura PARA )


• HACER MIENTRAS (Estructura MIENTRAS QUE)
• REPITA
10

1.- HACER HASTA (Estructura PARA)

La utilizamos siempre y cuando conozcamos el NUMERO DE VECES que el (los) proceso (s)
deben repetirse. Es claro entonces que NO siempre es posible conocer de antemano este dato.

El esquema para representar esta estructura es el siguiente:

PARA asignación inicial HASTA valor final HAGA


ACCION1
ACCION2
.
.
ACCION n
FINPARA

Ejemplo: ALGORITMO PARA MOSTRAR EN PANTALLA LOS 100 PRIMEROS NUMEROS ENTEROS
Y SU SUMA TOTAL.

Nota: Observe que hasta ahora no hemos escrito ningún algoritmo completo en pseudos código
sino únicamente “Trozos” de este. Ahora si hagamos un algoritmo completo para resolver el
problema planteado y para ello comenzaremos por darle un nombre al algoritmo.

ENTRADA : No se requieren datos de entrada


PROCESO : Calcular la Suma de los números
SALIDA : Cada número entre 1 y 100 y al final la Suma total de ellos.

NUMEROS1
Suma  0
Para I  1 Hasta 100 Haga
Suma  Suma + I
ESCRIBA ( I )
Fin Para
Escriba (“ Resultado de la suma de los 100 números=”,Suma)
FIN NUMEROS1

2.- HACER MIENTRAS (Estructura MIENTRAS QUE)


La utilizamos en las mismas situaciones de la estructura PARA y además cuando NO conocemos
el NUMERO DE VECES que el (los) proceso (s) deben repetirse, es decir, cuando sabemos que la
tarea debe repetirse pero la cantidad de repeticiones depende de cierta condición y no es una
constante.
11
El esquema para representar esta estructura es el siguiente:

MQ (Condición se cumpla) HAGA


ACCION1
ACCION2
.
.
ACCION n
Modificar la Condición

FIN MQ

Nota: Observe que primero debe INICIALIZAR la condición, es decir asignarle a esta un valor
tal que garantice que ingresa al ciclo por lo menos una vez y luego, dentro del ciclo se requiere
también MODIFICAR de alguna manera la condición para garantizar que en algún momento deja
de cumplirse y finaliza el ciclo. Si usted no tiene en cuenta estas dos características
(Inicializar la Condición Y Modificar la Condición) entonces con seguridad su algoritmo
“VIOLA” el teorema 1 de la Programación estructurada ya que obtendrá un CICLO INFINITO.

Ejemplo: ALGORITMO PARA MOSTRAR EN PANTALLA LOS 100 PRIMEROS NUMEROS ENTEROS
Y SU SUMA TOTAL.

ENTRADA : No se requieren datos de entrada


PROCESO : Calcular la Suma de los números
SALIDA : Cada número entre 1 y 100 y al final la Suma total de ellos.

NUMEROS2
Suma  0; I  1
MQ ( I <= 100) Haga
Suma  Suma + I
ESCRIBA ( I )
II+1
Fin MQ
Escriba (“ Resultado de la suma de los 100 números=”,Suma)
FIN NUMEROS2

3.- REPITA

La utilizamos en las mismas situaciones de la estructura MQ, solo que ahora en el REPITA la
Condición para saber si continúa o no se evalúa al FINAL de la estructura y no al COMIENZO
como sucede en el MIENTRAS.

El esquema para representar esta estructura es el siguiente:


12

Inicializar la Condicion
REPITA
ACCION1
ACCION2
.
.
ACCION n
Modificar la Condición

HASTA QUE (condición)

Nota: Observe que al igual que el MQ, primero debe INICIALIZAR la condición, es decir
asignarle a esta un valor tal que garantice que ingresa al ciclo por lo menos una vez y luego,
dentro del ciclo se requiere también MODIFICAR de alguna manera la condición para garantizar
que en algún momento deja de cumplirse y finaliza el ciclo. Si usted no tiene en cuenta estas
dos características (Inicializar la Condición Y Modificar la Condición) entonces con
seguridad su algoritmo “VIOLA” el teorema 1 de la Programación estructurada ya que obtendrá
un CICLO INFINITO.

Ejemplo: ALGORITMO PARA MOSTRAR EN PANTALLA LOS 100 PRIMEROS NUMEROS ENTEROS
Y SU SUMA TOTAL.

ENTRADA : No se requieren datos de entrada


PROCESO : Calcular la Suma de los números
SALIDA : Cada número entre 1 y 100 y al final la Suma total de ellos.

NUMEROS3
Suma  0; I  1
REPITA
Suma  Suma + I
ESCRIBA ( I )
II+1
HASTA QUE (I = 100)
Escriba (“ Resultado de la suma de los 100 números=”,Suma)
FIN NUMEROS3

Вам также может понравиться