24
UNIDAD I UNIDAD I Algoritmos

Infomática II

Embed Size (px)

DESCRIPTION

Bloque I -Informática II. Nivel bachillerato - SEV

Citation preview

Page 1: Infomática II

UN

IDA

DI

UN

IDA

DI

Algoritmos

Page 2: Infomática II

El estudiante:

• Desarrollará algoritmos,mediante el empleo de len-guajes algorítmicos en lasolución de problemas ele-mentales del ámbito esco-lar y de la vida cotidiana,propiciando solucionescreativas y eficientes.

INTRODUCCIÓN

Las soluciones a los problemas más comunes, en su mayoría, son métodostan mecanizados por los seres humanos que no los notamos. Podemosmencionar diferentes situaciones cotidianas que ameritan una soluciónmecánica. Por ejemplo, piense en cómo prender una estufa, imagínese queen vez de verificar primero que el piloto esté encendido y después abrir lallave de paso del gas se hiciera de manera inversa, indudablemente termi-naría en tragedia. Podemos señalar ejemplos más complicados como elsistema de semáforos que controlan el tráfico, la comunicación telefónica(alámbrica e inalámbrica) o incluso la forma en como se manejan las cali-ficaciones en el ámbito escolar que dan como resultado la aprobación deuna materia o incluso de un semestre.

Todas estas tareas y muchas otras se pueden resolver de una manera orde-nada y definida, donde no se dé lugar a los errores y se pueda minimizaraccidentes. Claro que los estudiosos de las ciencias se han dado a la tareade crear una serie de reglas para resolver cualquier problema, dependien-do del área que se trate se le llama de distinta forma (método, procedi-miento, etc.).

En el ambiente de la informática la solución a este tipo de situaciones se lellama algoritmo, pero esta notación no es por puro capricho de los infor-máticos, sino que proviene, como muchos otros procesos informáticos,de una denotación matemática que a continuación explicaremos.

Page 3: Infomática II

11A L G O R I T M O S

1. ¿Qué es un algoritmo?

2. Describe los pasos que se deben llevar a cabo para enviar un correo electrónico.

3. ¿Cuáles son las características de los algoritmos?

4. ¿Qué es un diagrama de flujo?

5. ¿Qué es un pseudocódigo?

1.1 TERMINOLOGÍA EMPLEADA EN ALGORITMOS

La mayoría de los problemas informáticos tiene la tendencia de ocupar la mismaterminología. De esta forma podemos enumerar cronológicamente lo que sucedecuando queremos resolver un problema a través de recursos informáticos.

Identi ficación del problema

Generalmente se debe identificar cuál es el problema que se pretende resolver através de medios informáticos y con qué se pretende darle solución. Los informá-ticos llaman a este paso análisis.

Todas las situaciones que rodean a un problema que puede ser resuelto mediante lainformática pueden ser representadas por datos, inclusive hasta las condiciones enque se presentan. En esta parte del proceso es donde podemos identificar los si-guientes tipos de datos:

• Datos numéricos. Es todo tipo de información que se puede expresar por mediode números. Aquí encontramos los enteros (8, -3, 23, etc.) y los reales (o depunto flotante 1.5, -3.85, etcétera).

• Datos alfanuméricos. Son un conjunto de caracteres que representan algún tipo dedato. Están compuestos por todo el conjunto de caracteres alfabéticos (a-z, A-Z), numéricos (0-9) y algunos caracteres especiales (+, -, *, /, <, >).

• Datos lógicos. Son los que podemos representar mediante dos estados: falso y ver-dadero. También se les conoce como datos boleanos.

• Constantes. Son datos que dentro del problema en sí nunca cambiarán; por ejem-plo, si el problema es calcular el área de un círculo, ? = 3.141592 será una cons-tante para cualquier caso.

• Variables. Son datos que cambian dependiendo de las condiciones del problemaque se desea resolver. Tomando el mismo ejemplo del cálculo del área de uncírculo, la variable podría ser el radio ya que, dependiendo del tamaño del círcu-lo, cambiará ese valor.

Page 4: Infomática II

12 U N I D A D I

• Expresiones lógicas. Son un conjunto de condiciones que sólo pueden tomar dosestados lógicos: falso y verdadero. Están compuestos por variables, constantes,operadores lógicos y operadores relacionales. Los operadores lógicos son: NOT(no), AND (y) y OR (o). Los relacionales pueden ser: <, >, =, <=, >=, <>.Dependiendo del lenguaje de programación que se desee utilizar para resolver elproblema puede o no cambiar la forma en que se representan estos operadores.Por ejemplo, en lenguajes de programación basados en ANSI como C, C++ y JAVA

la negación se representa por el símbolo de admiración (¡).• Expresiones aritméticas. Son expresiones que se usan para el cálculo de valores arit-

méticos. Son muy útiles y fáciles de entender ya que se representan de formamuy parecida a las expresiones matemáticas. Los operadores aritméticos sonlos siguientes: +, -, *, /, ^, (, ), etc. Al igual que las expresiones lógicas, depen-diendo del lenguaje de programación es la forma en como se representan algu-nos de los operadores aritméticos y, en ocasiones, hasta la jerarquía que tienenunos sobre otros.

I. Realiza una consulta bibliográfica o en la Internet acerca de los tipos de variablesque existen en los siguientes lenguajes.

Lenguaje Variables Constantes Operadores Aritméticos Jerarquía lógicos

C

JAVA

.NET

PASCAL

II. De acuerdo con la consulta anterior menciona en cuál de ellos existen coinciden-cias y diferencias.

Diseño de una solución

Una vez definido el problema y con qué se quiere o se puede resolver, se planea laforma de hacerlo, creando un algoritmo de solución. Usualmente a este proceso sele l lama diseño.

Page 5: Infomática II

13A L G O R I T M O S

Aplicando la solución

Cuando ya se definió cómo se va a resolver el problema, todo lo que implica susolución a través de diferentes mecanismos, es hora de aplicarlo. Los informáticosle l laman a este proceso implementación.

Supervisar la solución

Sería excelente que al aplicar una solución a un problema, ésta resulte correcta alprimer intento. Desafortunadamente no es así, muchas veces el hecho de aplicar unasolución nos lleva a más problemas que no estaban previstos. En la informática hayque ser muy precisos en los casos que se presentan como problemas y tratar deprever cualquier tipo de inconveniente o caso especial que se pueda presentar, paraello se lleva a cabo un proceso llamado prueba o mantenimiento. Es aquí donde elciclo se puede llegar a repetir: tratando de solucionar los nuevos problemas queintervienen en la solución nos puede llevar de nuevo al análisis y volver a comenzarel ciclo. ¿Dónde se romperá el ciclo? Se romperá cuando el problema sea resueltosatisfactoriamente y todos los casos particulares estén cubiertos.

Dicho de otra forma, podemos ver el proceso de solución como un ciclo de vida,por eso muchos autores manejan este proceso como el ciclo de vida del software.Pero, muchas veces aplicar Tecnologías de la Información y la comunicación noslleva a implementar soluciones que no precisamente se refieran a la creación de unnuevo software. Por ejemplo, si el problema es la vigilancia en una tienda de aba-rrotes entonces no es completamente necesario crear un software que vigile las acti-vidades de los clientes para asegurarnos de que no se roben la mercancía, bastaríaun sistema de cámaras que graben las actividades de los clientes dentro del estable-cimiento.

1.1.1 Definición de problema

El Diccionario de la Real Academia Española (DRAE) define problema como:

Planteamiento de una situación cuya respuesta desconocida debe obtenerse através de métodos científicos.

Hay ciertos problemas que no pueden ser resueltos por métodos científicos, porejemplo, la existencia del amor, lo bueno y lo malo, predecir el futuro, de esta ma-nera sólo nos enfocaremos a problemas que tienen una solución a través de méto-dos científicos, los cuales deben tener básicamente las siguientes características:

1. El problema debe expresar una relación entre dos o más variables.2. El problema debe estar formulado claramente y sin ambigüedad.

Page 6: Infomática II

14 U N I D A D I

3. El planteamiento implica la posibilidad de prueba empírica. Es decir, de poderobservarse en la realidad.

1.1.2 Definición de algoritmo

La última edición del Diccionario de la Real Academia Española (DRAE) define de lasiguiente forma el algoritmo:1

1. Conjunto ordenado y finito de operaciones que permite hallar la solución aun problema; 2. Método y notación en las distintas formas del cálculo.

De esta manera podemos decir que un algoritmo es la creación de un método oprocedimiento para resolver un problema. Además, podemos asumir que este pro-ceso es generalmente iterativo. Por consiguiente, el estudio del concepto, diseño yconstrucción de algoritmos será una necesidad ineludible en numerosos aspectos dela vida y esencialmente en el mundo científico y de la ingeniería.

1.1.3 Características de algoritmos

El concepto de algoritmo no es nada nuevo ya que desde la antigüedad ha existidola necesidad de resolver problemas de forma ordenada. Este tipo de solucionesgeneralmente conviene a problemas matemáticos. Si nos remontarnos a la ciudad deBagdad del siglo IX, durante el reinado de Al-Mamun, sabio gobernante protectorde las artes, astrónomo e hijo del legendario califa Harún al-Rashid, el cual conoce-mos a través del l ibro de Las Mil y una Noches; encontraremos que ya se habíaescrito un tratado de matemáticas que habría de ejercer enorme inf luencia en todoel mundo árabe y también en la Europa medieval, donde se tradujo al latín cuatrosiglos más tarde. El l ibro lo escribió el bibliotecario de Al-Mamun, Mohammed ibnMusa al-Khwarizm (Mohammed, el hijo de Moisés de Khwarizm), y tenía el títulode Hisab al-jabr w’ al muqabalah (Ciencia de la reunión y la oposición). En él seexplicaban las reglas para realizar las cuatro operaciones aritméticas elementales uti-lizando la notación decimal, así como algunos procedimientos para resolver ecua-ciones de primer y segundo grado. Este tratado sirvió como base para los trabajosde muchos matemáticos medievales, e introdujo en Europa la numeración indoará-biga, cuyos métodos se popularizaron entre los matemáticos hasta casi extinguir eluso del ábaco en occidente. De la corrupción de los nombres del l ibro y de su autorse originaron, además, las palabras álgebra y algoritmo.

En la actualidad, el término algoritmo denota uno de los conceptos fundamentalesde la matemática. De esta manera, el l ibro describe que un procedimiento para serlegítimamente llamado algoritmo, debe reunir las características siguientes:

1 Del árabe al-Khowârizmî, sobrenombre del célebre matemático árabe Mohamed ben Musa.

Page 7: Infomática II

15A L G O R I T M O S

1. Estar descrito por una lista finita de instrucciones.2. Contener sólo instrucciones efectivamente realizables.3. Aplicarse en la misma forma a todos los casos particulares del problema que

resuelva.4. Terminar después de ejecutarse cada instrucción a lo más un número finito de

veces.

1.2 METODOLOGÍA DE SOLUCIÓN DE PROBLEMAS

Muchos autores manejan diferentes tipos de metodologías para dar solución a pro-blemas, pero básicamente todos emplean los mismos pasos aunque los l lamen deforma diferente. Podemos apoyarnos en diferentes disciplinas informáticas comoson la ingeniería de software, la algoritmia, la programación, etc., para acordarcuáles son los pasos más importantes en la resolución de un problema utilizando lasTecnologías de la Información y la Comunicación.

No olvidemos que los algoritmos no son exclusivos para resolver problemas desoftware, sino también para resolver problemas en general. Aunque su mayor usoes en la construcción de software, donde interviene la tecnología.

1.2.1 Identificación del problema

Lo primero que debemos hacer es identificar el problema ya que si este paso en lasolución está mal hecho, puede darnos como resultado una mala solución que even-tualmente nos cause más problemas que antes de aplicar la propuesta.

Las consideraciones que debemos seguir, en general, para identificar un problemason las siguientes:

Identi ficar las variables

En cualquier problema están en juego ciertas condiciones que se dan a través decasos específicos, a estos casos les podemos llamar variables. Por ejemplo, si elproblema a resolver es el control escolar, las variables que afectan nuestro proble-ma serían el nombre del alumno, el grado, el grupo, las materias, las calificaciones,etcétera. Es importante identificar todas y cada una de las variables que afectan anuestro problema, ya que trabajaremos con ellas y si se omite una podría, depen-diendo del problema, causar una tragedia. Imagínese que el problema es entregar lanómina de una empresa grande y que al hacer el análisis no se tuvieron en cuenta lasvariables antigüedad y horas extras trabajadas. Sin estas dos variables el cálculo de lanómina sería incorrecto, lo que terminaría seguramente en una huelga o algo pareci-do; de ahí la importancia de incluir todas las variables que intervienen en nuestroproblema.

Page 8: Infomática II

16 U N I D A D I

Delimitar la solución

Es importante definir qué parte del problema se pretende resolver a través de lasTecnologías de la Información y la Comunicación, ya que aunque son muy útilespara la vida cotidiana no son instrumentos de magia que resuelvan y automaticencualquier actividad. Por ejemplo, si nuestro problema es llevar el control de ventasde una ferretería, sólo nos interesará saber las características que tienen los artículosy su precio. Pero existen factores que rodean a estos artículos que no nos interesa-rían, por ejemplo, el estado de los artículos, el tamaño, quién es el distribuidor, laexistencia del mismo, etcétera. Este tipo de datos serían los indicados si el proble-ma se vuelve más grande y deseamos llevar lo que los administradores llaman uncontrol de inventarios, pero nuestro problema sólo consiste en llevar un control decuánto se vende. Así que delimitar nuestro problema nos sirve para crear una solu-ción más concreta y eficiente.

Los recursos

Ésta es una de las partes más importantes que hay que considerar para la soluciónde problemas. Se debe tener en cuenta con qué recursos contamos para solucionarlos problemas que se presentan. Por ejemplo, equipo de cómputo, redes, bases dedatos, clientes, recursos económicos. Todo el conjunto de recursos debe conside-rarse para resolver el problema, ya que si falta alguno es posible que la solución nosea la más adecuada y simplemente dé más problemas de los que resuelve.

1.2.2 Planteamiento de alternativas de solución

En todos los aspectos de la vida nos tenemos que enfrentar a una toma de decisio-nes sean grandes o pequeños los problemas a solucionar. Existe un refrán muy po-pular que se puede aplicar en esta parte de la solución de un problema: “Cadacabeza es un mundo”. Esta aseveración es muy cierta ya que para cada problemaexiste más de una forma de resolverse.

Para poder formular alternativas de solución eficientes que puedan llevarse a cabo,éstas deben contener características como las siguientes:

1. Efectos futuros. Es importante que la duración de la solución de una alternativa seala mayor posible, ya que mientras más tiempo dure funcionando se considerauna mejor opción. Por ejemplo: cuando el problema es controlar la asistencia delos empleados de una fábrica para saber cuánto se le debe pagar a cada uno deellos, este tipo de problemas se puede resolver con un sistema informático através de una tarjeta con cinta magnética o un lector de huellas digitales. Estasolución puede durar mucho tiempo y ser más eficiente que cualquier otra solu-ción típica, como un reloj checador y tarjetas.

Page 9: Infomática II

17A L G O R I T M O S

2. Reversibi lidad. Se refiere a la velocidad con que una decisión puede revertirse y ladificultad que implica llevarla a cabo. Por ejemplo: rentar equipo de cómputo auna empresa o comprarlo, esto implica analizar el costo que tendrá el equipo y eltiempo de vida del mismo.

3. Impacto. Esta característica se refiere a la medida en que otras áreas se beneficiande la implementación de la alternativa. Por ejemplo: cuando hablamos de imple-mentar un centro de impresión en una empresa grande, llevar el control de quées lo que se imprime y en qué tipo de papel y tinta se necesita, repercute eneconomizar los consumibles como hojas y tintas. Esto ayuda a otras áreas comocompras, almacén, etcétera.

4. Calidad. Esta característica se refiere a los valores éticos, principios básicos deconducta, imagen, etc. De esta manera se requiere que la implementación de unasolución no provoque más problemas de los que intenta solucionar. Por ejemplo:la construcción de un edificio con los materiales inadecuados por el simple he-cho de ser baratos.

5. Periodicidad. Esta característica se refiere a que si el problema es único o si sepresenta muy seguido. Hay que tener en cuenta su periodicidad para poder justi-ficar el hecho de aplicar tecnologías de la información y la comunicación. Porejemplo: elaborar un complejo sistema de alerta para detectar terremotos en unazona volcánica con alta actividad sísmica como California, en los Estados Uni-dos, tiene sentido, pero aplicarla en lugares donde no son comunes los terremo-tos acabaría por ser inútil y se desperdiciarían los recursos económicos y humanos.

1.2.3 Elección de una alternativa de solución

En esta parte nos encontramos con que ya tenemos varias alternativas de solución,ahora nos toca tratar de elegir la más adecuada. Hay ciertos aspectos que se necesi-tan tener en cuenta para la elección de una alternativa de solución, como son:

1. Determinar la necesidad de una solución. Primero hay que reconocer que se tiene lanecesidad de resolver un problema. Muchas veces los problemas son excepcio-nales y simplemente ocurren una sola vez y no se tiene control de cuándo suce-den; por ejemplo, un tsunami; sin embargo, hay problemas que sí se presentancon mucha frecuencia como la comunicación mediante documentos en algunaempresa o dependencia de gobierno, esto se podría resolver con un sistema decorreo electrónico que permita ahorrar consumibles de cómputo.

2. Identi ficar los criterios de decisión. Es necesario considerar todos los aspectos queimplica implementar una alternativa de solución para poder elegirla. Por ejem-plo: el recurso humano, el recurso económico, el tiempo de solución, etc.

3. Asignar peso a los criterios. De nada sirven las características de una solución si nopodemos medir cuál es la alternativa más adecuada para solucionar un proble-ma. Muchas veces los criterios en sí pueden definir su peso sin necesidad deponderarlo, por ejemplo, el costo, el tiempo que se necesita para llevar a cabo lasolución, etc.

Page 10: Infomática II

18 U N I D A D I

4. Desarrollar todas las alter nati vas. Para poder comparar las alternativas hay que de-sarrollarlas. Así que este paso simplemente consiste en enlistar todas las alternati-vas que podrían util izarse para la solución del problema. Por ejemplo: el Sistemade Posicionamiento Global (GPS, por sus siglas en inglés) algunas veces es util i-zado para trazar el camino más corto entre un punto y otro, pero qué sucedecuando existe más de un camino y se necesita llegar en el menor tiempo; tendría-mos que evaluar la distancia, el tráfico, el clima, etcétera. Además, deben tenerse encuenta todos los aspectos que implican implementar cada una de las soluciones.

5. Evaluar las alter nati vas. Ya que se identificaron las alternativas hay que evaluar demanera crítica cada una de ellas. Las ventajas y desventajas de cada alternativason más evidentes cuando se comparan unas con otras.

6. Seleccionar la mejor alternativa. Si se siguen los pasos de una forma adecuada esteproceso no es más que implementar la alternativa que obtuvo la puntuación másalta en el paso 5.

1.2.4 Desarrollo de la solución

Dependiendo de las condiciones específicas de cada problema es como se le puededar solución. Los expertos en la informática han creado una serie de técnicas quenos pueden ayudar a desarrollar nuestro algoritmo.

Método de fuerza bruta

Comenzamos el estudio de esquemas algorítmicos con un método sencillo, peroque debe evitarse siempre que se pueda, dada su ineficacia; la fuerza bruta. En rea-lidad, no es un esquema algorítmico si no más bien calificativo para una forma dediseñar algoritmos: tomar una solución directa, poco ref lexionada. En principio,esto no es malo, pero dado que no se ha analizado apenas el problema, es muyprobable que no se hayan aprovechado propiedades deducibles del mismo y que lasolución sea terriblemente ineficiente. Una solución por fuerza bruta también puederesultar adecuada como primera aproximación a la solución final, porque su desa-rrollo puede permitir profundizar más sobre el problema y conocer propiedadesque sean util izadas para obtener otra versión más eficiente.

Por ejemplo, podemos citar algunos algoritmos de búsqueda de un elemento en unconjunto de datos. Uno de ellos realizaba una búsqueda secuencial teniendo en cuentael número de elementos del conjunto de datos y podía usarse con cualquier conjun-to. Otro algoritmo realizaba una búsqueda binaria, éste sólo se podía usar cuando elconjunto de datos estuviese ordenado. El algoritmo primero responde a un razona-miento más sencillo, por lo que uno puede sentirse tentado a usar siempre. Ésta esla solución de fuerza bruta: una solución directa, pero poco reflexionada. Lo másrazonable es comprobar si el vector está ordenado y, en caso positivo, aprovecharesta circunstancia para usar el algoritmo más eficiente: el de búsqueda binaria.

Page 11: Infomática II

19A L G O R I T M O S

Método voraz

Este método trata de producir el mejor resultado a partir de conjunto de opcionescandidatas. Para ello, se va procediendo paso a paso realizándose la mejor elecciónde entre las posibles. Puede emplearse en problemas de optimización, como en labúsqueda de caminos mínimos sobre grafos, la planificación en el orden de la ejecu-ción de unos programas en una computadora, etc.

Un ejemplo sería dar un cambio utilizando el menor número de monedas. Considé-rese ahora el problema de la devolución del cambio al realizar una compra (porejemplo, en una máquina expendedora de café). Suponiendo que se tenga la canti-dad suficiente de ciertos tipos diferentes de monedas, se trata de dar como cambiola menor cantidad posible de monedas con las que cuenta la máquina. La estrategiavoraz 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 restapor dar), continúa aplicándose el mismo criterio para la segunda moneda más valio-sa y así sucesivamente. El proceso finaliza cuando se ha devuelto todo el cambio.

Divide y vencerás

Consiste en descomponer un problema en subproblemas, resolviendo independien-temente los subproblemas para luego combinar sus soluciones y obtener la solucióndel problema original. Esta técnica se puede aplicar con éxito a problemas como lamultiplicación de matrices, la ordenación de vectores, la búsqueda en estructurasordenadas, etcétera.

Como ejemplo sencillo de aplicación de esta estrategia puede considerarse la bús-queda de una palabra en un diccionario de acuerdo con el siguiente criterio: se abreel diccionario por la página central (quedando dividido en dos mitades) y se com-prueba si la palabra aparece all í o si es léxico gráficamente anterior o posterior. Sino ha encontrado y es anterior se procede a buscarla en la primera mitad., si esposterior, se buscará en la segunda mitad. El procedimiento se repite sucesivamentehasta encontrar la palabra o decidir que no aparece.

Otros tipos de métodos algorítmicos se basan en este principio, como el método deprocesamiento en paralelo, donde el problema es resuelto por varias computadorasal mismo tiempo y una última junta toda la información para dar una solución.

Método de vuelta atrás

Dentro de las técnicas de diseño de algoritmos, el método de Vuelta Atrás (delinglés Backtracking) es uno de los de más amplia util ización, en el sentido de quepuede aplicarse en la resolución de un gran número de problemas, especialmente enaquellos de optimización.

Page 12: Infomática II

20 U N I D A D I

La construcción de este tipo de algoritmos se asemeja a la construcción de un árbol,donde el nodo inicial representa el problema en sí y cada una de sus ramas es unposible camino de solución. Cabe mencionar que para poder aplicar este tipo detécnicas de construcción de algoritmos, el problema debe poder descomponerse enproblemas más pequeños que estén sujetos a condiciones particulares.

Ejemplo: Supóngase que se quiere encontrar un algoritmo que dado el sistema nu-mérico binario se busca el conjunto que sume 11 (3 en decimal) en el menor númerode pasos.

De esta forma podemos llegar a más de una solución al problema, sólo basta elegircuál es la más óptima dependiendo de nuestros recursos o de cómo se quiere resol-ver el problema. Así, la solución más corta puede o no ser la más óptima. Estatécnica se denomina de vuelta atrás porque si l legamos a un punto donde no pode-mos resolver el problema lo único que tenemos que hacer es regresar al nodo ante-rior y elegir otro camino. Se dice que si ningún nodo del árbol l lega a resolver elproblema quiere decir que no tiene solución algorítmica.

Los programadores avanzados utilizan esta técnica de programación para aplicacio-nes que se resuelven fácilmente mediante recursión; otros utilizan este tipo de técnicaspara resolver problemas de optimización y también para inteligencia artificial.

Busca en la Internet los siguientes ejemplos de problemas que se resuelven con larecursividad. Trata de explicar en dónde se encuentra la recursividad y por qué senecesita usarla en ellos.

• Factorial — n! = n × (n-1)!• Sucesión de Fibonacci — f(n) = f(n-1) + f(n-2)

Page 13: Infomática II

21A L G O R I T M O S

• Números de Catalan — C(2n, n)/(n+1)• Las Torres de Hanoi• Función de Ackermann

1.2.5 Evaluación de la solución

Ahora que tenemos una o varias soluciones algorítmicas para resolver algún problemaque se nos haya planteado, hay que evaluarlas. En este momento tendremos que con-siderar si es factible o no llevar a cabo ciertas soluciones. Pero es un hecho que hayque evaluar cada una de ellas. Los aspectos que hay que tener en cuenta se explicaronanteriormente; ahora nos toca ver si en realidad el algoritmo planteado alcanza elobjetivo de resolver el problema.

Generalmente se usa una prueba que se denomina Prueba de Escritorio, que no esmás que seguir el algoritmo paso a paso y tabular qué es lo que sucede con lasvariables y anotar sus cambios. Si el algoritmo llega a una solución óptima, se tomacomo correcto. Si el algoritmo tiene un amplio rango de valores se puede util izaruna muestra para determinar si es correcto o no.

1.3 LENGUAJES ALGORÍTMICOS

Hasta este momento todo lo que hemos visto es prácticamente teoría, llegó la horade plasmar nuestros algoritmos de alguna forma que sean claros para cualquier per-sona que necesite leerlos. Muchas veces los informáticos se saltan este paso y llegandirectamente a la implementación en algún lenguaje de programación; para ello senecesita tener mucha práctica y memoria fotográfica, ya que muchas veces se omi-ten pasos que a la hora de implementarlos en algún lenguaje producen que el pro-grama no llegue a la solución que habíamos planteado como óptima.

De esta manera se han creado lenguajes que puedan representar nuestros algoritmosy que de esa manera se construya una solución correcta sin omitir algunos pasos.Imagínese que si se desea crear un algoritmo para que un robot solde una pieza enuna ensambladora de automóviles y la persona encargada de implementar el algo-ritmo olvida, por muy obvio que sea, comprobar si las piezas están en su lugar,obviamente podría terminar en una tragedia.

Así que la gente que se encarga de los estándares en cuanto a lo que se refiere a lastecnologías de la información vio la necesidad de representar algoritmos sin tenerque referirse a un lenguaje de programación en específico. Aunque es una prácticamuy común el hecho de representar alguna expresión en ellos tiene en cuenta lasintaxis de algún lenguaje de programación.

Page 14: Infomática II

22 U N I D A D I

1.3.1 Gráficos

Este tipo de lenguaje tiende a representar los algoritmos de una forma gráfica. Deesta manera se hace más fácil la representación de cada uno de los procesos quedebe llevar a cabo una computadora para resolver problemas.

Diagramas de Flujo

Sin lugar a duda el lenguaje algorítmico gráfico más común son los Diagramas deflujo. Éstos pueden definirse como esquemas usados para representar gráficamenteun proceso. Pero no sólo se utilizan para representar procesos informáticos, tam-bién en otras áreas como la economía, la administración, procesos industriales, etc.

Para hacer comprensibles los diagramas de flujo para cualquier persona que desearaleerlos se sometieron a una estandarización, aunque cabe mencionar que su simbo-logía puede adaptarse al área específica en la cual se trabaja. En informática losdiagramas de flujo se encuentran estandarizados por la norma ISO 5807.

A continuación explicaremos los símbolos más comunes que se utilizan en la infor-mática para representar diagramas de flujo.

Terminal Sirve para especificar el inicio o el fin de nuestro algoritmo.

Flecha Sirve para indicar el sentido en el que se lleva a cabo cadauno de los pasos de nuestro algoritmo.

Proceso Representa una operación que debe realizarse dentro deldiagrama. Es el símbolo más usado porque cada opera-ción que debe hacer la máquina se representa mediante éste.

Documento Existe en informática una variación del rectángulo o pro-ceso. Para indicar que existe una salida hacia un documen-to, como un reporte o proceso similar se utiliza este símbolo.

Teclado Otra variación del proceso es la entrada de datos por te-clado. En muchas ocasiones es necesario que nuestro algo-ritmo obtenga valores mediante algún dispositivo externoy se usa este símbolo para representar dicha entrada.

Símbolo Función

Page 15: Infomática II

23A L G O R I T M O S

Decisión Cuando nuestro algoritmo debe tomar un camino deter-minado por las condiciones del problema se usa este sím-bolo, generalmente el f lujo entra por arriba y sale por losextremos, uno para indicar que la condición se cumplió yotro para indicar si la condición no es satisfactoria.

Conector Cuando nuestro algoritmo es algo extenso y tiene muchoscaminos, a veces es necesario, por problemas de espacio, elhecho de conectar la continuidad de nuestro algoritmo me-diante este tipo de símbolos, los cuales hacen que el diagra-ma no se pierda por med io del cruce de la s f lechasexplicadas anteriormente.

Conector de hoja En ocasiones los algoritmos se vuelven muy complejos ycomo generalmente son representados en papel, se tiene lanecesidad de continuarlos en una hoja diferente. Este sím-bolo es muy parecido al anterior y tiene la misma funcio-nalidad.

Existen otros símbolos más específicos para otro tipo de procesos, pero en sumayoría ya no se usan porque representaban procesos en dispositivos que hoy endía son obsoletos, como grabar en cinta magnética o leer una tarjeta perforada.

Investiga algunos símbolos de diagramas de flujo que se usen en la informática para represen-tar funciones específicas como ciclos, decisiones específicas, etcétera.

Otros lenguajes gráficos

Los diagramas de f lujo no son los únicos lenguajes algorítmicos gráficos. Gracias ala creación de nuevas tecnologías como son las bases de datos, las redes de compu-tadoras, la inteligencia artificial, el internet, etc., se han creado diferentes tipos delenguajes.

El más común es el Lenguaje de Modelado Unificado (UML por sus siglas en inglésUnified Modeling Language). Actualmente es el lenguaje algorítmico gráfico másutil izado porque permite representar más procesos que los diagramas de f lujo ypermite definir qué es lo que le sucede a los datos cuando pasan a través de un

Símbolo Función

Page 16: Infomática II

24 U N I D A D I

estado a otro. Por ejemplo, cuando en un banco se cae el sistema, por algún problemacomo el sistema eléctrico, ¿qué sucede con las transacciones que se quedaron a la mi-tad? UML es capaz de definir qué es lo que sucede con estos datos y cómo regresar a eseestado anterior a que sucediera el problema. También sirven para especificar estructu-ras de datos complejas como son los objetos y sus características.

Cabe mencionar que los diagramas UML no están estandarizados, se encuentran res-paldados por organizaciones como la OMG (Object Management Group) que regu-lan cuáles son los diferentes tipos de diagramas que se usan en este tipo de lenguaje.

Actualmente UML se encuentra en su versión 2.0, la cual define tres clases de diagra-mas y sus diferentes variantes.

• Diagramas de estructura. Se usan para definir los datos dentro de un algoritmo, eninformática existe una materia específica que se l lama estructura de datos, loscuales les sirven a los informáticos para representar las variables de una formamás útil para el proceso en una computadora. Por ejemplo, los objetos, los pa-quetes, las clases, etcétera.

• Diagramas de comportamiento. Se utilizan para definir el comportamiento de las di-ferentes estructuras de datos. Generalmente los algoritmos no son tan sencilloscomo para describir que simplemente se va a realizar una suma o una resta, gene-ralmente representan problemas más complejos como lo que le sucede a unabase de datos cuando cambias un dato dentro de ella; generalmente para cadaproceso específico sucede que un cambio en un dato provoca cambios en otros.Por ejemplo, si un empleado llega a tener cierta antigüedad en una empresa y lanómina se calcula automáticamente mediante computadora, los algoritmos de-ben prever que no sólo se modifica el dato de su antigüedad, sino también susalario, categoría, ISR, etcétera.

• Diagramas de interacción. Es una variación de los diagramas de comportamientoque sirven para indicar cuándo existe una interacción entre varios procesos, len-guajes de programación o programas previamente elaborados.

Encuentra ejemplos de los diferentes tipos de diagramas UML. Busca en Internet otros tipos delenguajes algorítmicos y para qué son utilizados, no tan sólo en la informática sino también enotras áreas como en la administración (manuales de procedimientos).

1.3.2 No gráficos

Los lenguajes algorítmicos no gráficos generalmente son utilizados para representarprocesos informáticos ya más específicos. Dicho de otra forma, para representar lacodificación de un programa sin la necesidad de conocer un lenguaje de programa-ción específico.

Page 17: Infomática II

25A L G O R I T M O S

Pseudocódigo

Sin lugar a duda, el pseudocódigo es el lenguaje algorítmico no gráfico más util iza-do hasta la fecha. Cualquier persona que se diga que tiene experiencia como progra-mador, alguna vez se ha visto en la necesidad de representar sus programas enpseudocódigo.

El pseudocódigo significa que vas a convertir tu algoritmo en un lenguaje escritoque se entienda sin utilizar la sintaxis y la gramática de un lenguaje de programaciónen específico. Existen diferencias entre las normas de cómo debe realizarse correc-tamente un pseudocódigo debido a que, como no es necesariamente un lenguaje deprogramación, debe adaptarse a las necesidades del algoritmo en sí; por esto variosautores definen su propia sintaxis y gramática de forma diferente.

Nuestro objetivo es tratar de definir una forma que nos sirva para construir demanera unificada un pseudocódigo. Así definiremos las operaciones más comunesque se pueden representar mediante un pseudocódigo.

Datos

En un pseudocódigo los datos se dan por creados desde el momento en el que sonutil izados, así que no es necesario avisar qué variables vamos a ocupar a lo largo denuestro algoritmo, ni qué tipo de dato es el que se va a almacenar dentro de él; pero,una vez que se ha util izado una variable para almacenar cierto tipo de dato debeseguir siendo usada para ese tipo. Por ejemplo, si al inicio de nuestro pseudocódigodeclaramos que vamos a usar una variable que llamaremos “A” y le asignamos unvalor numérico entero como 8, la variable “A” en el resto del algoritmo deberásolamente poder almacenar datos numéricos enteros.

Estructuras de control

En los diagramas de flujo utilizamos los rectángulos que definían un proceso y de-finimos que era el símbolo más usado dentro de nuestros diagramas. En el pseudo-código a este tipo de procesos se le denomina estructuras de control, donde puedecontener uno o varios pasos a seguir. Podemos decir que una estructura de controlpuede contener varios pasos que representábamos con más de un símbolo en losdiagramas de flujo. Las estructuras más util izadas son:

• Asignación. Sirve para darle valores a las variables que usaremos dentro de nues-tro algoritmo. Existen varias formas de representar una asignación debido a quemuchas personas usan la gramática y sintaxis de un lenguaje de programación enespecífico. De esta forma, si queremos asignar el valor de 8 a la variable “A”,podemos hacerlo de la siguiente manera:

Page 18: Infomática II

26 U N I D A D I

Asigne a “A” el valor de 8A 8A:=8A=8

• Secuencia. El conjunto de operaciones que determina un proceso se le conocecomo instrucción; en la mayoría de los lenguajes de programación las instruccio-nes llevan una secuencia lógica. En los diagramas de flujo esta secuencia era re-presentada por las f lechas. En el pseudocódigo son representadas a través deinstrucciones que generalmente ocupan un renglón. A continuación mostraremosla forma en que debe darse la secuencia en un pseudocódigo:

Instrucción1Instrucción2Instrucción3….InstrucciónN

• Selectiva. Comúnmente denominada decisión, en los diagramas de flujo se usa elrombo para representar una decisión que debe tomar nuestro algoritmo median-te una condición lógica. En el pseudocódigo se puede representar de la siguientemanera:

Si Condición entoncesInstrucciones

Fin si

• Selectiva doble. La estructura de control selectiva sólo representa condiciones ver-daderas; de esta forma si el algoritmo arroja una condición falsa, las instruccionesno son llevadas a cabo y se salta hasta después de terminar la instrucción selectivao el Fin si. Pero la selectiva doble prevé que sea necesario ejecutarse una serie deinstrucciones si la condición resulta falsa. La selectiva doble se puede representarde la siguiente manera:

Si Condición entoncesInstrucciones

Si noInstrucciones

Fin si

• Select iva múltiple. Algunos autores utilizan el término de decisiones anidadas, estoes porque la consecuencia de una decisión puede desembocar otra decisión. Di-cho de otra forma; una decisión puede contener otra decisión que a su vez con-tenga otra decisión y así sucesivamente hasta que de alguna forma se acabe el

Page 19: Infomática II

27A L G O R I T M O S

ciclo de decisiones. En los pseudocódigos podemos representar estas decisionesanidadas de la siguiente forma:

Si Condición1 entoncesInstrucciones1

Si no Si Condición2 entoncesInstrucciones2

….Si no Si CondicionN entonces

Instrucciones NFin Si

• Select iva múltiples casos. En algunos lenguajes de programación pensaron que tenermuchas instrucciones selectivas múltiples entorpecían la comprensión del código,aunque la máquina las interpretara de forma correcta por ello se crearon lasinstrucciones selectivas de múltiples casos; cabe mencionar que no todos los len-guajes de programación soportan este tipo de representación de instruccionesselectivas por lo que se recomienda tener cuidado en su uso en los pseudocódi-gos. La forma de representar las instrucciones selectivas múltiples en los pseudo-códigos es la siguiente:

Seleccionar IndicadorCaso Valor1:

Instrucciones1Caso Valor2:

Instrucciones2….Caso ValorN

InstruccionesNFin Seleccionar

• Iterativa. Este tipo de estructuras es usada con frecuencia en los algoritmos, re-presentan ciclos que debe cumplir el algoritmo hasta alcanzar una condición querompa el ciclo. Por ejemplo, cuando tratamos de imprimir una tabla de multipli-car. En el pseudocódigo se usan generalmente dos formas las cuales podemosdefinir como MIENTRAS y PARA. Las estructuras iterativas MIENTRAS tienen diferen-tes variantes que sirven específicamente para ciertos lenguajes de programación;de esta forma se recomienda tener cuidado en el uso de este tipo de estructuras.Por otra parte, las instrucciones PARA generalmente son usadas por casi todos loslenguajes de programación (al menos los que utilizan los paradigmas de progra-mación estructurada y programación orientada a objetos). En el pseudocódigopodemos representar las instrucciones iterativas de la siguiente forma:

Page 20: Infomática II

28 U N I D A D I

Mientras Condición hacerInstrucciones

Fin MientrasHacer

InstruccionesMientras condición

Nota: La Variable que es usada en esta estructura PARA se denomina variable decontrol y se sobreentiende que existe un incremento de dicha variable cada vez queregresa a la instrucción Para y no saldrá de ese ciclo hasta que la variable de controlalcance el valor final. En el pseudocódigo, como en los lenguajes de programación,no se recomienda manipular el contenido de la variable de control, pero sí se puedeusar su valor dentro del conjunto de instrucciones.

Recomendaciones

En el pseudocódigo, como en cualquier lenguaje de programación, se dan ciertasrecomendaciones para que el conjunto de instrucciones que lo forman pueda serentendido más fácilmente.

• Nombres de variables. Algunas estructuras tienen instrucciones que son específicaspara determinar dónde empieza y dónde termina dicha estructura. Se recomien-da no usar los nombres de este tipo de estructuras como variables dentro delpseudocódigo. De esta forma no podremos util izar las palabras Si, Mientras,Entonces, Para, Fin, etc. para representar nuestras variables. En un lenguaje algo-rítmico no gráfico es una simple recomendación, pero para el caso de los len-guajes de programación es una regla ya que a este tipo de instrucciones se lesdenomina Palabras Reservadas. Existen, según varios autores, nomenclaturas (con-junto de reglas) para nombrar a nuestras variables; éstas son recomendacionespara no confundir las variables y saber en todo momento qué tipo de dato es elque puede almacenar dicha variable.

• Identación. Es común que tanto en los pseudocódigos como en los códigos de loslenguajes de programación se vuelvan muy extensos ya que la secuencia del con-junto de instrucciones se encuentra definida por los renglones. Esto provoca quecuando tratamos de seguir un pseudocódigo (generalmente cuando se hace unaprueba de escritorio como mencionamos anteriormente) se pierda entre las dife-rentes estructuras de control. La solución que proponen los autores de los len-guajes de programación es incrementar unos cuantos espacios (a decisión delprogramador) para especificar que un conjunto de instrucciones forma parte oestá dentro de una estructura de control.

Page 21: Infomática II

29A L G O R I T M O S

Investiga algunas reglas para la construcción del nombre de las variables que se usan común-mente en la programación y cuáles son las reglas que debemos seguir para identar de formaadecuada un programa.

1.3.3 Ejemplos de usos y aplicación

Como se mencionó anteriormente, los lenguajes algorítmicos nos sirven para re-presentar nuestros algoritmos de forma que podamos entenderlos no sólo como unconcepto de diagrama de entrada – proceso – salida sino que construyamos cadauno de los pasos que debe llevar nuestro algoritmo para resolver el problema quese nos haya planteado.

En el mundo del software se han creado varias aplicaciones que nos permiten cons-truir nuestros algoritmos de una forma gráfica. Como ejemplos podemos citar lossiguientes:

Software Tipo

Microsoft Visio PropietarioBorland TogetherCorel iGrafxMagicDraw

FreeDFD LibreArgoUML

TCM

Para el caso de los lenguajes algorítmicos no gráficos, la única forma de construc-ción de un pseudocódigo es mediante un procesador de texto y la forma de com-probar que nuestro pseudocódigo funciona (aparte de la prueba de escritorio antesmencionada) es traducir nuestro pseudocódigo a algún lenguaje de programación yprobarlo mediante un compilador.

Page 22: Infomática II

30 U N I D A D I

I. Relaciona ambas columnas.

( ) Son expresiones que se usan para el cálculode valores aritméticos. Son muy útiles y fá-ciles de entender ya que se representan deforma muy parecida a las expresiones mate-máticas. Los operadores aritméticos son lossiguientes: +, -, *, /, ^, (, ), etc.

( ) Son un conjunto de condiciones que sólo pue-den tomar dos estados lógicos: falso y ver-dadero. Están compuestos por variables,constantes, operadores lógicos y operado-res relacionales. Los operadores lógicos sonlos siguientes: NOT (no), AND (y) y OR (o). Losoperadores relacionales pueden ser: <, >, =,<=, >=, <>.

( ) Son un conjunto de caracteres que represen-tan algún tipo de dato. Están compuestos portodo el conjunto de caracteres alfabéticos (a-z, A-Z), numéricos (0-9) y algunos caracte-res especiales (+, -, *, /, <, >, etc.).

( ) Son los que podemos representar mediantedos estados: falso y verdadero. También seles conoce como datos boleanos.

( ) Son datos que dentro del problema en sí nun-ca cambiarán.

( ) Es todo tipo de información que se puedeexpresar por medio de números.

( ) Son datos que cambian dependiendo de lascondiciones del problema que se desea re-solver.

1. Datos numéricos

2. Expresiones aritméticas

3. Datos lógicos

4. Variables

5. Datos alfanuméricos

6. Expresiones lógicas

7. Constantes

Page 23: Infomática II

31A L G O R I T M O S

II. Define los siguientes conceptos.

1. Algoritmo.

2. Recursividad.

3. ¿Cuáles son los métodos más comunes para resolver un problema en forma dealgoritmos?

Page 24: Infomática II