Algoritmos
El estudiante:
Desarrollar algoritmos,
mediante el empleo de lenguajes algortmicos en la
solucin de problemas elementales del mbito escolar y de la vida cotidiana,
propiciando soluci ones
creativas y eficientes.
INTRODUCCIN
Las soluciones a los problemas ms comunes, en su mayora, son mtodos
tan mecanizados por los seres humanos que no los notamos. Podemos
mencionar diferentes situaciones cotidianas que ameritan una solucin
mecnica. Por ejemplo, piense en cmo prender una estufa, imagnese que
en vez de verificar primero que el piloto est encendido y despus abrir la
llave de paso del gas se hiciera de manera inversa, indudablemente terminara en tragedia. Podemos sealar ejemplos ms complicados como el
sistema de semforos que controlan el trfico, la comunicacin telefnica
(almbrica e inalmbrica) o incluso la for ma en como se manejan las calificaciones en el mbito escolar que dan como resultado la aprobacin de
una materia o incluso de un semestre.
Todas estas tareas y muchas otras se pueden resolver de una manera ordenada y definida, donde no se d lugar a los errores y se pueda minimizar
accidentes. Claro que los estudiosos de las ciencias se han dado a la tarea
de crear una serie de reglas para resolver cualquier problema, dependiendo del rea que se trate se le llama de distinta for ma (mtodo, procedimiento, etc.).
En el ambiente de la informtica la solucin a este tipo de situaciones se le
llama algoritmo, pero esta notacin no es por puro capricho de los informticos, sino que proviene, como muchos otros procesos informticos,
de una denotacin matemtica que a continuacin explicaremos.
A L G O R I T MO S
1. Qu es un algoritmo?
2. Describe los pasos que se deben llevar a cabo para enviar un correo electrnico.
3. Cules son las caractersticas de los algoritmos?
4. Qu es un diagrama de flujo?
5. Qu es un pseudocdigo?
1.1
11
12
U N I DA D
Expresiones lgicas. Son un conjunto de condiciones que slo pueden tomar dos
estados lgicos: falso y verdadero. Estn compuestos por variables, constantes,
operadores lgicos y operadores relacionales. Los operadores lgicos son: NOT
(no), AND (y) y OR (o). Los relacionales pueden ser: <, >, =, <=, >=, <>.
Dependiendo del lenguaje de programacin que se desee utilizar para resolver el
problema puede o no cambiar la forma en que se representan estos operadores.
Por ejemplo, en lenguajes de programacin basados en AN SI como C, C++ y JAVA
la negacin se representa por el smbolo de admiracin ().
Expresiones aritmticas. Son expresiones que se usan para el clculo de valores aritmticos. Son muy tiles y fciles de entender ya que se representan de for ma
muy parecida a las expresiones matemticas. Los operadores aritmticos son
los siguientes: +, -, *, /, ^, (, ), etc. Al igual que las expresiones lgicas, dependiendo del lenguaje de programacin es la for ma en como se representan algunos de los operadores aritmticos y, en ocasiones, hasta la jerarqua que tienen
unos sobre otros.
Variables
Constantes
Operadores Aritmticos
lgicos
Jerarqua
C
JAVA
.NET
PASCAL
II. De acuerdo con la consulta anterior menciona en cul de ellos existen coincidencias y diferencias.
A L G O R I T MO S
Aplicando la solucin
Cuando ya se defini cmo se va a resolver el problema, todo lo que implica su
solucin a travs de diferentes mecanismos, es hora de aplicarlo. Los informticos
le llaman a este proceso implementacin.
Supervisar la solucin
Sera excelente que al aplicar una solucin a un problema, sta resulte correcta al
primer intento. Desafortunadamente no es as, muchas veces el hecho de aplicar una
solucin nos lleva a ms problemas que no estaban previstos. En la informtica hay
que ser muy precisos en los casos que se presentan como problemas y tratar de
prever cualquier tipo de inconveniente o caso especial que se pueda presentar, para
ello se lleva a cabo un proceso llamado prueba o mantenimiento. Es aqu donde el
ciclo se puede llegar a repetir: tratando de solucionar los nuevos problemas que
intervienen en la solucin nos puede llevar de nuevo al anlisis y volver a comenzar
el ciclo. Dnde se romper el ciclo? Se romper cuando el problema sea resuelto
satisfactoriamente y todos los casos particulares estn cubiertos.
Dicho de otra for ma, podemos ver el proceso de solucin como un ciclo de vida,
por eso muchos autores manejan este proceso como el ciclo de vida del software.
Pero, muchas veces aplicar Tecnologas de la Informacin y la comunicacin nos
lleva a implementar soluciones que no precisamente se refieran a la creacin de un
nuevo software. Por ejemplo, si el problema es la vigilancia en una tienda de abarrotes entonces no es completamente necesario crear un software que vigile las actividades de los clientes para asegurarnos de que no se roben la mercanca, bastara
un sistema de cmaras que graben las actividades de los clientes dentro del establecimiento.
1.1.1 Definicin de problema
El Diccionario de la Real Academia Espaola ( DRAE ) define problema como:
Planteamiento de una situacin cuya respuesta desconocida debe obtenerse a
travs de mtodos cientficos.
Hay ciertos problemas que no pueden ser resueltos por mtodos cientficos, por
ejemplo, la existencia del amor, lo bueno y lo malo, predecir el futuro, de esta manera slo nos enfocaremos a problemas que tienen una solucin a travs de mtodos cientficos, los cuales deben tener bsicamente las siguientes caractersticas:
1. El problema debe expresar una relacin entre dos o ms variables.
2. El problema debe estar formulado claramente y sin ambigedad.
13
14
U N I DA D
1 Del rabe al-Khowrizm, sobrenombre del clebre matemtico rabe Mohamed ben Musa.
A L G O R I T MO S
15
16
U N I DA D
Delimitar la solucin
Es importante definir qu parte del problema se pretende resolver a travs de las
Tecnologas de la Informacin y la Comunicacin, ya que aunque son muy tiles
para la vida cotidiana no son instrumentos de magia que resuelvan y automaticen
cualquier actividad. Por ejemplo, si nuestro problema es llevar el control de ventas
de una ferretera, slo nos interesar saber las caractersticas que tienen los artculos
y su precio. Pero existen factores que rodean a estos artculos que no nos interesaran, por ejemplo, el estado de los artculos, el tamao, quin es el distribuidor, la
existencia del mismo, etctera. Este tipo de datos seran los indicados si el problema se vuelve ms grande y deseamos llevar lo que los administradores llaman un
control de inventarios, pero nuestro problema slo consiste en llevar un control de
cunto se vende. As que delimitar nuestro problema nos sirve para crear una solucin ms concreta y eficiente.
Los recursos
sta es una de las partes ms importantes que hay que considerar para la solucin
de problemas. Se debe tener en cuenta con qu recursos contamos para solucionar
los problemas que se presentan. Por ejemplo, equipo de cmputo, redes, bases de
datos, clientes, recursos econmicos. Todo el conjunto de recursos debe considerarse para resolver el problema, ya que si falta alguno es posible que la solucin no
sea la ms adecuada y simplemente d ms problemas de los que resuelve.
1.2.2 Planteamiento de alternativas de solucin
En todos los aspectos de la vida nos tenemos que enfrentar a una toma de decisiones sean grandes o pequeos los problemas a solucionar. Existe un refrn muy popular que se puede aplicar en esta parte de la solucin de un problema: Cada
cabeza es un mundo. Esta aseveracin es muy cierta ya que para cada problema
existe ms de una forma de resolverse.
Para poder formular alternativas de solucin eficientes que puedan llevarse a cabo,
stas deben contener caractersticas como las siguientes:
1. Efectos futuros. Es importante que la duracin de la solucin de una alternativa sea
la mayor posible, ya que mientras ms tiempo dure funcionando se considera
una mejor opcin. Por ejemplo: cuando el problema es controlar la asistencia de
los empleados de una fbrica para saber cunto se le debe pagar a cada uno de
ellos, este tipo de problemas se puede resolver con un sistema infor mtico a
travs de una tarjeta con cinta magntica o un lector de huellas digitales. Esta
solucin puede durar mucho tiempo y ser ms eficiente que cualquier otra solucin tpica, como un reloj checador y tarjetas.
A L G O R I T MO S
17
18
U N I DA D
4. Desarrollar todas las alter nativas. Para poder comparar las alternativas hay que desarrollarlas. As que este paso simplemente consiste en enlistar todas las alternativas que podran utilizarse para la solucin del problema. Por ejemplo: el Sistema
de Posicionamiento Global (GPS, por sus siglas en ingls) algunas veces es utilizado para trazar el camino ms corto entre un punto y otro, pero qu sucede
cuando existe ms de un camino y se necesita llegar en el menor tiempo; tendramos que evaluar la distancia, el trfico, el clima, etctera. Adems, deben tenerse en
cuenta todos los aspectos que implican implementar cada una de las soluciones.
5. Evaluar las alter nativas. Ya que se identificaron las alternativas hay que evaluar de
manera crtica cada una de ellas. Las ventajas y desventajas de cada alternativa
son ms evidentes cuando se comparan unas con otras.
6. Seleccionar la mejor alternativa. Si se siguen los pasos de una forma adecuada este
proceso no es ms que implementar la alternativa que obtuvo la puntuacin ms
alta en el paso 5.
1.2.4 Desarrollo de la solucin
Dependiendo de las condiciones especficas de cada problema es como se le puede
dar solucin. Los expertos en la infor mtica han creado una serie de tcnicas que
nos pueden ayudar a desarrollar nuestro algoritmo.
Mtodo de fuerza bruta
Comenzamos el estudio de esquemas algortmicos con un mtodo sencillo, pero
que debe evitarse siempre que se pueda, dada su ineficacia; la fuerza bruta. En realidad, no es un esquema algortmico si no ms bien calificativo para una forma de
disear algoritmos: tomar una solucin directa, poco reflexionada. En principio,
esto no es malo, pero dado que no se ha analizado apenas el problema, es muy
probable que no se hayan aprovechado propiedades deducibles del mismo y que la
solucin sea terriblemente ineficiente. Una solucin por fuerza bruta tambin puede
resultar adecuada como primera aproximacin a la solucin final, porque su desarrollo puede permitir profundizar ms sobre el problema y conocer propiedades
que sean utilizadas para obtener otra versin ms eficiente.
Por ejemplo, podemos citar algunos algoritmos de bsqueda de un elemento en un
conjunto de datos. Uno de ellos realizaba una bsqueda secuencial teniendo en cuenta
el nmero de elementos del conjunto de datos y poda usarse con cualquier conjunto. Otro algoritmo realizaba una bsqueda binaria, ste slo se poda usar cuando el
conjunto de datos estuviese ordenado. El algoritmo primero responde a un razonamiento ms sencillo, por lo que uno puede sentirse tentado a usar siempre. sta es
la solucin de fuerza bruta: una solucin directa, pero poco reflexionada. Lo ms
razonable es comprobar si el vector est ordenado y, en caso positivo, aprovechar
esta circunstancia para usar el algoritmo ms eficiente: el de bsqueda binaria.
A L G O R I T MO S
Mtodo voraz
Este mtodo trata de producir el mejor resultado a partir de conjunto de opciones
candidatas. Para ello, se va procediendo paso a paso realizndose la mejor eleccin
de entre las posibles. Puede emplearse en problemas de optimizacin, como en la
bsqueda de caminos mnimos sobre grafos, la planificacin en el orden de la ejecucin de unos programas en una computadora, etc.
Un ejemplo sera dar un cambio utilizando el menor nmero de monedas. Considrese ahora el problema de la devolucin del cambio al realizar una compra (por
ejemplo, en una mquina expendedora de caf). Suponiendo que se tenga la cantidad suficiente de ciertos tipos diferentes de monedas, se trata de dar como cambio
la menor cantidad posible de monedas con las que cuenta la mquina. La estrategia
voraz aplicada comienza devolviendo, cuando se pueda, la moneda de mayor valor
(es decir, mientras el valor de dicha moneda sea mayor o igual al cambio que resta
por dar), contina aplicndose el mismo criterio para la segunda moneda ms valiosa y as sucesivamente. El proceso finaliza cuando se ha devuelto todo el cambio.
Divide y vencers
Consiste en descomponer un problema en subproblemas, resolviendo independientemente los subproblemas para luego combinar sus soluciones y obtener la solucin
del problema original. Esta tcnica se puede aplicar con xito a problemas como la
multiplicacin de matrices, la ordenacin de vectores, la bsqueda en estructuras
ordenadas, etctera.
Como ejemplo sencillo de aplicacin de esta estrategia puede considerarse la bsqueda de una palabra en un diccionario de acuerdo con el siguiente criterio: se abre
el diccionario por la pgina central (quedando dividido en dos mitades) y se comprueba si la palabra aparece all o si es lxico grficamente anterior o posterior. Si
no ha encontrado y es anterior se procede a buscarla en la primera mitad., si es
posterior, se buscar en la segunda mitad. El procedimiento se repite sucesivamente
hasta encontrar la palabra o decidir que no aparece.
Otros tipos de mtodos algortmicos se basan en este principio, como el mtodo de
procesamiento en paralelo, donde el problema es resuelto por varias computadoras
al mismo tiempo y una ltima junta toda la informacin para dar una solucin.
Mtodo de vuelta atrs
Dentro de las tcnicas de diseo de algoritmos, el mtodo de Vuelta Atrs (del
ingls Backtracking) es uno de los de ms amplia utilizacin, en el sentido de que
puede aplicarse en la resolucin de un gran nmero de problemas, especialmente en
aquellos de optimizacin.
19
20
U N I DA D
De esta for ma podemos llegar a ms de una solucin al problema, slo basta elegir
cul es la ms ptima dependiendo de nuestros recursos o de cmo se quiere resolver el problema. As, la solucin ms corta puede o no ser la ms ptima. Esta
tcnica se denomina de vuelta atrs porque si llegamos a un punto donde no podemos resolver el problema lo nico que tenemos que hacer es regresar al nodo anterior y elegir otro camino. Se dice que si ningn nodo del rbol llega a resolver el
problema quiere decir que no tiene solucin algortmica.
Los programadores avanzados utilizan esta tcnica de programacin para aplicaciones que se resuelven fcilmente mediante recursin; otros utilizan este tipo de tcnicas
para resolver problemas de optimizacin y tambin para inteligencia artificial.
A L G O R I T MO S
21
22
U N I DA D
1.3.1 Grficos
Este tipo de lenguaje tiende a representar los algoritmos de una forma grfica. De
esta manera se hace ms fcil la representacin de cada uno de los procesos que
debe llevar a cabo una computadora para resolver problemas.
Diagramas de Flujo
Sin lugar a duda el lenguaje algortmico grfico ms comn son los Diagramas de
flujo. stos pueden definirse como esquemas usados para representar grficamente
un proceso. Pero no slo se utilizan para representar procesos infor mticos, tambin en otras reas como la economa, la administracin, procesos industriales, etc.
Para hacer comprensibles los diagramas de flujo para cualquier persona que deseara
leerlos se sometieron a una estandarizacin, aunque cabe mencionar que su simbologa puede adaptarse al rea especfica en la cual se trabaja. En informtica los
diagramas de flujo se encuentran estandarizados por la norma ISO 5807.
A continuacin explicaremos los smbolos ms comunes que se utilizan en la informtica para representar diagramas de flujo.
Smbolo
Funcin
Terminal
Flecha
Proceso
Documento
Teclado
Existe en infor mtica una variacin del rectngulo o proceso. Para indicar que existe una salida hacia un documento, como un reporte o proceso similar se utiliza este smbolo.
Otra variacin del proceso es la entrada de datos por teclado. En muchas ocasiones es necesario que nuestro algoritmo obtenga valores mediante algn dispositivo externo
y se usa este smbolo para representar dicha entrada.
A L G O R I T MO S
Smbolo
Funcin
Decisin
Cuando nuestro algoritmo debe tomar un camino determinado por las condiciones del problema se usa este smbolo, generalmente el flujo entra por arriba y sale por los
extremos, uno para indicar que la condicin se cumpli y
otro para indicar si la condicin no es satisfactoria.
Conector
Conector de hoja
Investiga algunos smbolos de diagramas de flujo que se usen en la informtica para representar funciones especficas como ciclos, decisiones especficas, etctera.
23
24
U N I DA D
estado a otro. Por ejemplo, cuando en un banco se cae el sistema, por algn problema
como el sistema elctrico, qu sucede con las transacciones que se quedaron a la mitad? UML es capaz de definir qu es lo que sucede con estos datos y cmo regresar a ese
estado anterior a que sucediera el problema. Tambin sirven para especificar estructuras de datos complejas como son los objetos y sus caractersticas.
Cabe mencionar que los diagramas UM L no estn estandarizados, se encuentran respaldados por organizaciones como la OM G (Object Management Group) que regulan cules son los diferentes tipos de diagramas que se usan en este tipo de lenguaje.
Actualmente UM L se encuentra en su versin 2.0, la cual define tres clases de diagramas y sus diferentes variantes.
Diagramas de estructura. Se usan para definir los datos dentro de un algoritmo, en
informtica existe una materia especfica que se llama estructura de datos, los
cuales les sirven a los infor mticos para representar las variables de una for ma
ms til para el proceso en una computadora. Por ejemplo, los objetos, los paquetes, las clases, etctera.
Diagramas de comportamiento. Se utilizan para definir el comportamiento de las diferentes estructuras de datos. Generalmente los algoritmos no son tan sencillos
como para describir que simplemente se va a realizar una suma o una resta, generalmente representan problemas ms complejos como lo que le sucede a una
base de datos cuando cambias un dato dentro de ella; generalmente para cada
proceso especfico sucede que un cambio en un dato provoca cambios en otros.
Por ejemplo, si un empleado llega a tener cierta antigedad en una empresa y la
nmina se calcula automticamente mediante computadora, los algoritmos deben prever que no slo se modifica el dato de su antigedad, sino tambin su
salario, categora, ISR , etctera.
Diagramas de interaccin. Es una variacin de los diagramas de comportamiento
que sirven para indicar cundo existe una interaccin entre varios procesos, lenguajes de programacin o programas previamente elaborados.
Encuentra ejemplos de los diferentes tipos de diagramas UML . Busca en Internet otros tipos de
lenguajes algortmicos y para qu son utilizados, no tan slo en la informtica sino tambin en
otras reas como en la administracin (manuales de procedimientos).
1.3.2 No grficos
Los lenguajes algortmicos no grficos generalmente son utilizados para representar
procesos informticos ya ms especficos. Dicho de otra forma, para representar la
codificacin de un programa sin la necesidad de conocer un lenguaje de programacin especfico.
A L G O R I T MO S
Pseudocdigo
Sin lugar a duda, el pseudocdigo es el lenguaje algortmico no grfico ms utilizado hasta la fecha. Cualquier persona que se diga que tiene experiencia como programador, alguna vez se ha visto en la necesidad de representar sus programas en
pseudocdigo.
El pseudocdigo significa que vas a convertir tu algoritmo en un lenguaje escrito
que se entienda sin utilizar la sintaxis y la gramtica de un lenguaje de programacin
en especfico. Existen diferencias entre las normas de cmo debe realizarse correctamente un pseudocdigo debido a que, como no es necesariamente un lenguaje de
programacin, debe adaptarse a las necesidades del algoritmo en s; por esto varios
autores definen su propia sintaxis y gramtica de for ma diferente.
Nuestro objetivo es tratar de definir una for ma que nos sir va para construir de
manera unificada un pseudocdigo. As definiremos las operaciones ms comunes
que se pueden representar mediante un pseudocdigo.
Datos
En un pseudocdigo los datos se dan por creados desde el momento en el que son
utilizados, as que no es necesario avisar qu variables vamos a ocupar a lo largo de
nuestro algoritmo, ni qu tipo de dato es el que se va a almacenar dentro de l; pero,
una vez que se ha utilizado una variable para almacenar cierto tipo de dato debe
seguir siendo usada para ese tipo. Por ejemplo, si al inicio de nuestro pseudocdigo
declaramos que vamos a usar una variable que llamaremos A y le asignamos un
valor numrico entero como 8, la variable A en el resto del algoritmo deber
solamente poder almacenar datos numricos enteros.
Estructuras de control
En los diagramas de flujo utilizamos los rectngulos que definan un proceso y definimos que era el smbolo ms usado dentro de nuestros diagramas. En el pseudocdigo a este tipo de procesos se le denomina estructuras de control, donde puede
contener uno o varios pasos a seguir. Podemos decir que una estructura de control
puede contener varios pasos que representbamos con ms de un smbolo en los
diagramas de flujo. Las estructuras ms utilizadas son:
Asignacin. Sir ve para darle valores a las variables que usaremos dentro de nuestro algoritmo. Existen varias formas de representar una asignacin debido a que
muchas personas usan la gramtica y sintaxis de un lenguaje de programacin en
especfico. De esta forma, si queremos asignar el valor de 8 a la variable A,
podemos hacerlo de la siguiente manera:
25
26
U N I DA D
Asigne a A el valor de 8
A 8
A:=8
A=8
Secuencia. El conjunto de operaciones que determina un proceso se le conoce
como instruccin; en la mayora de los lenguajes de programacin las instrucciones llevan una secuencia lgica. En los diagramas de flujo esta secuencia era representada por las flechas. En el pseudocdigo son representadas a travs de
instrucciones que generalmente ocupan un rengln. A continuacin mostraremos
la for ma en que debe darse la secuencia en un pseudocdigo:
Instruccin1
Instruccin2
Instruccin3
.
InstruccinN
Selectiva. Comnmente denominada decisin, en los diagramas de flujo se usa el
rombo para representar una decisin que debe tomar nuestro algoritmo mediante una condicin lgica. En el pseudocdigo se puede representar de la siguiente
manera:
Si Condicin entonces
Instrucciones
Fin si
Selectiva doble. La estructura de control selectiva slo representa condiciones verdaderas; de esta forma si el algoritmo arroja una condicin falsa, las instrucciones
no son llevadas a cabo y se salta hasta despus de terminar la instruccin selectiva
o el Fin si. Pero la selectiva doble prev que sea necesario ejecutarse una serie de
instrucciones si la condicin resulta falsa. La selectiva doble se puede representar
de la siguiente manera:
Si Condicin entonces
Instrucciones
Si no
Instrucciones
Fin si
Selectiva mltiple. Algunos autores utilizan el trmino de decisiones anidadas, esto
es porque la consecuencia de una decisin puede desembocar otra decisin. Dicho de otra for ma; una decisin puede contener otra decisin que a su vez contenga otra decisin y as sucesivamente hasta que de alguna forma se acabe el
A L G O R I T MO S
27
28
U N I DA D
A L G O R I T MO S
Investiga algunas reglas para la construccin del nombre de las variables que se usan comnmente en la programacin y cules son las reglas que debemos seguir para identar de forma
adecuada un programa.
Tipo
Microsoft Visio
Borland Together
Corel iGrafx
MagicDraw
Propietario
FreeDFD
Libre
Argo UML
T CM
Para el caso de los lenguajes algortmicos no grficos, la nica for ma de construccin de un pseudocdigo es mediante un procesador de texto y la forma de comprobar que nuestro pseudocdigo funciona (aparte de la prueba de escritorio antes
mencionada) es traducir nuestro pseudocdigo a algn lenguaje de programacin y
probarlo mediante un compilador.
29
30
U N I DA D
1. Datos numricos
2. Expresiones aritmticas
( ) Son un conjunto de caracteres que representan algn tipo de dato. Estn compuestos por
todo el conjunto de caracteres alfabticos (az, A-Z), numricos (0-9) y algunos caracteres especiales (+, -, *, /, <, >, etc.).
3. Datos lgicos
6. Expresiones lgicas
4. Variables
5. Datos alfanumricos
7. Constantes
A L G O R I T MO S
2. Recursividad.
31