You are on page 1of 36

www.monografias.

com

Introduccin a los algoritmos


Higinio Belln Corvo - hbcsoft@gmail.com

1. Algoritmo para hallar el valor de la hipotenusa de un tringulo rectngulo por el teorema de 2. 3. 4. 5. 6. 7. 8.


Pitgoras Seleccin del mejor algoritmo Caractersticas de los algoritmos El algoritmo como sistema informtico Anlisis del costo-beneficio de un sistema informtico Diagramas de bloques Algoritmos bsicos Anexo

Si hiciramos una bsqueda en los diferentes tipos de Diccionarios podemos encontrar el concepto de algoritmo enfocado de distintas maneras. Veamos a continuacin algunos ejemplos: En el Pequeo LAROUSSE de Ciencias y Tcnicas (Edicin cubana tomada de la mexicana de 1975) se plantea que algoritmo es el conjunto de smbolos y de procedimientos usados en los clculos: el algoritmo de la raz cbica es el mtodo empleado para extraerla de un nmero. En el Pequeo LAROUSSE Ilustrado (Edicin Revolucionaria 1968) aparece el concepto definido como procedimiento de clculo. Ciencia del clculo aritmtico o algebraico, mtodo y notacin en las distintas formas del clculo. Las definiciones anteriores no nos dan una idea clara de lo que significan los algoritmos dentro del mundo informtico. Este concepto surge dentro de las matemticas, se dice que se deriva del nombre de un matemtico del siglo IX, que vivi en lo que hoy es la Repblica de Uzbekistn, llamado Al-Jwarizmi, el cual escribi un libro que trataba sobre las reglas para realizar operaciones aritmticas. A partir de entonces se han creado gran variedad de algoritmos para resolver los distintos problemas matemticos. Veamos como ejemplo uno de ellos:

Algoritmo para hallar el valor de la hipotenusa de un tringulo rectngulo por el teorema de Pitgoras
Hallamos el cuadrado de la longitud del cateto a y el valor lo guardamos en A1. Hallamos el cuadrado de la longitud del cateto b y el valor lo guardamos en B1. Sumamos A1 y B1, guardamos el resultado en C. Hallamos la raz cuadrada de C y el resultado lo guardamos en C1. Al trmino de la ejecucin, vamos a encontrar que en C1 se encuentra la longitud de la hipotenusa. Muchsimo antes de que se formulara el concepto de algoritmo ya el hombre los ejecutaba en su quehacer diario. En la antigedad los hombres primitivos se transmitan de generacin en generacin los mtodos usados para realizar sus actividades fundamentales que eran la caza y la pesca. Estos mtodos eran comunicados en forma de pasos que deban seguir para alcanzar su objetivo, que ya bien poda ser atrapar pjaros en el agua, empujar algn animal grande hacia una trampa preparada con anterioridad o muchos otros ms. Todo esto estaba en dependencia de sus hbitos y costumbres. En la literatura sobre temas de especficos de computacin podemos encontrar dicho concepto de muchas maneras diferentes, aunque todas al final significan lo mismo. En el libro INTRODUCCION A LA PROGRAMACION EN PL/1 (Editorial Pueblo y Educacin, segunda reimpresin 1988) se define como: Conjunto finito de reglas, pasos u rdenes que indican una secuencia de operaciones a ejecutar para alcanzar un resultado que soluciona un problema dado, esta secuencia de pasos debe poder ejecutarse por cualquier persona aunque no tenga conocimiento del problema que se resuelve. En FUNDAMENTOS DE PROGRAMACION (Editorial Pueblo y Educacin, edicin 1990) de forma bastante sencilla lo plantean como la lista, detallada y ordenada, de los pasos que necesitamos ejecutar para resolver un problema. Seguidamente se expone de una forma clara y simple lo que se considera constituye un significado bastante completo dado al algoritmo dentro del lenguaje informtico: 1234Algoritmo: Conjunto finito de pasos a ejecutar, agrupados y ordenados segn una estructura y lgica establecidas de antemano, con el objetivo de alcanzar un resultado que da solucin a un determinado problema planteado. - 1 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Analizando la definicin anterior podemos llegar a la conclusin de que el algoritmo nos sirve para resolver cualquier problema. Casi siempre nos vamos a encontrar con que puede existir ms de una variante de solucin a un mismo tipo de problema (podemos plantear que la cantidad de variantes es directamente proporcional al tamao y nivel de complejidad del problema) o sea, que podemos llegar a un mismo resultado de maneras diferentes. En otras palabras se puede plantear que, para una misma solucin, se pueden disear algoritmos diferentes. Esto nos va a dar la posibilidad de poder seleccionar el mejor algoritmo, pero Cul es el mejor?

Seleccin del mejor algoritmo


La idea de seleccionar el mejor algoritmo entre un grupo mayor o menor de variantes posibles, es relativa. Los principiantes suelen irse por la va del que menor cantidad de pasos tiene, buscando una mayor velocidad de ejecucin. Este aspecto aunque importante, no es el nico a tener en cuenta, adems se puede afirmar que no siempre el ms pequeo es el ms rpido. En computacin existe una regla que se cumple generalmente y es que cuando se ahorra tiempo se gasta ms espacio y viceversa. Ilustremos esta afirmacin a travs de un ejemplo. Se muestran dos fragmentos de programas elaborados en el lenguaje de programacin Turbo Pascal, los cuales realizan un clculo con 100 valores diferentes:

Podemos apreciar que el fragmento B duplica al A (en cuanto a la cantidad de lneas), sin embargo se ejecuta mucho ms rpido ya que calcula 800*A y 20*B una sola vez en lugar de las 100 que lo hace el fragmento A. No obstante, a continuacin se relacionan algunos consejos muy tiles y que de modo general nos permitirn encontrar sino el mejor, al menos un buen algoritmo de solucin: Escoger uno que no sea ni muy grande ni muy lento. Que sea claro y se puedan entender fcilmente las operaciones que se realicen (no se puede olvidar que ms tarde tendremos nosotros mismos que darle mantenimiento a estos algoritmos). Escoger uno que d el resultado correcto (criterio este considerado como el nico que tiene que cumplirse de forma absoluta). Si despus de la seleccin, encontramos varios algoritmos que cumplen los puntos anteriores y tenemos dudas de cual elegir, podemos hacer lo siguiente: los ponemos a trabajar (entindase esto por entrarle valores a los datos primarios y evaluar los datos finales o de salida) a todos bajo situaciones similares a las que realmente se enfrentar el que nosotros determinemos. Durante esta prueba pasaremos a medir las caractersticas cuantitativas y evaluar las cualitativas de cada uno por separado. Al final de esta tarea, cuando confrontemos los resultados, estaremos mejor preparados para tomar una decisin. Se nos puede dar el caso tambin que dentro del conjunto a seleccionar, uno de los algoritmos haya sido confeccionado por nosotros. Es aconsejable aqu acogernos siempre a nuestra creacin, incluso aunque esta posea pequeas desventajas con respecto a los otros. En el caso de que las desventajas fueran muy notables, entonces habra que empezar a pensar en un rediseo de nuestro algoritmo u optar por desechar el nuestro y seleccionar otro mejor. Es recomendable escoger un algoritmo diseado y confeccionado por nosotros, ya que es una solucin que le hemos dado a un problema producto de un estudio y anlisis realizado por nosotros mismos. Por lo tanto, a la hora de trabajar con l, de ejecutarlo, o de hacerle pequeas o grandes modificaciones, vamos a estar ms familiarizados y ms seguros que si nos encontrramos en presencia de un algoritmo hecho por cualquier otra persona. Si nos viramos obligados a seleccionar un algoritmo que no haya sido confeccionado por nosotros, debemos estudiarlo a fondo y tratar de entender cual fue el anlisis que se hizo. En caso de que podamos interpretar bien cada paso y sepamos el por qu de cada dato usado, habremos aprendido algo y estaramos en una situacin muy parecida a como si lo hubisemos diseado nosotros mismos. Muchos programadores hacen de esto una tcnica para adquirir experiencia y aumentar sus conocimientos. Despus de leer estos anlisis vemos como la seleccin del mejor algoritmo es relativa y es un criterio que podr variar mucho dentro de un grupo de diseadores y programadores.

- 2 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Caractersticas

de los algoritmos

La confeccin de algoritmos es un trabajo de creacin. No existen procedimientos estrictos que nos permitan elaborar algn algoritmo necesario. Todo, empezando por la eleccin de las palabras a utilizar y terminando por la estructura, depende completamente de las capacidades, gustos y habilidades creadoras del individuo. Lgicamente, esta libertad de creacin presenta un nmero grande de ventajas y desventajas. No nos detendremos ahora a realizar un anlisis detallado de cada una de ellas puesto que este es un tema muy discutido y sobre el cual los criterios difieren mucho. Slo se expondrn dos ejemplos (una ventaja y una desventaja) donde la balanza de criterios se ha inclinado ms a favor que en contra. 1- La falta de procedimientos generales y de reglas a la hora de confeccionar cualquier algoritmo tiene una importante ventaja y es que, todo el que desee puede plantear su solucin a un problema determinado sin necesidad de estudiar un lenguaje de programacin en especfico y sin tener que memorizar una serie de palabras (muchas de ellas llamadas dentro de estos lenguajes como palabras reservadas) y reglas estrictas. Esto permite tambin que el que confecciona pueda concentrarse ms en determinados aspectos del problema a solucionar y no pierda tiempo estructurando su trabajo ni adentrndose en los detalles del lenguaje empleado. 2- Como desventaja notable se plantea la poca (en algunos casos ninguna) universalidad y el muy mal entendimiento del algoritmo creado, o sea que lo que hacen unos muchas veces no lo entienden otros. Para evitar este problema se han desarrollado los llamados lenguajes de descripcin de algoritmos. Los lenguajes de descripcin de algoritmos son muy fciles de aprender ya que se basan en esquemas o smbolos que combinados con palabras y frases del lenguaje natural conforman la secuencia de pasos. Ejemplo de esto tenemos el llamado diagrama de bloques o como tambin se conoce diagrama de flujos, en el cual se va a representar cada operacin con un smbolo diferente (cada uno recibe el nombre de bloque) en cuyo interior van a estar los datos con que se opera. Los bloques estn conectados entre s por flechas que indican el flujo de la ejecucin. En el Captulo III se estudian de forma detallada las caractersticas de este lenguaje. Otro ejemplo de lenguaje simblico lo constituyen los estructugramas. Estos son empleados para describir pequeos mdulos puesto que su estructura se complicara demasiado al tratar de resolver un problema grande. No presentan flechas ni lneas de flujo y todos sus pasos se encierran dentro de un mismo paralelogramo donde son separados segn correspondan. Para resolver problemas largos se han creado lenguajes de descripcin que emplean rdenes similares a algn lenguaje de programacin de computadoras, pero donde no se siguen todas las rigurosas reglas y adems se emplean frases del lenguaje natural. Estos son muy utilizados en la prctica debido a su fcil conversin cuando van a ser ejecutados en una computadora. Cada lenguaje de descripcin ha sido adaptado por los propios programadores segn sea el lenguaje de programacin con que trabajen, por eso podemos ver lenguajes con una estructura que tiende al Turbo Pascal, otros al C++ y as. El destino de todo algoritmo confeccionado en cualquier lenguaje de descripcin ser siempre su traduccin a un lenguaje de programacin para que pueda ser ejecutado por una mquina computadora. Estos algoritmos despus de traducidos reciben el nombre de programas, los cuales tampoco son ejecutados directamente por la computadora, sino que esta ltima convierte todas esas instrucciones en cdigos directamente entendibles por ella. Una utilidad muy importante que se les ha dado a estos lenguajes de descripcin es en los programas de educacin, ya que estos han sido incorporados a asignaturas de introduccin a la programacin con el acertado propsito de ensear a programar a los alumnos antes de que puedan trabajar con los lenguajes de programacin. Todos los algoritmos, independientemente del objetivo con que fueron diseados y construidos, nos van a permitir distinguir en su interior tres partes, las cuales no siempre las podremos delimitar con claridad, estas son: Introduccin de la informacin (Entrada de datos): Constituida por todas aquellas instrucciones que toman datos de un dispositivo externo, almacenndolos para que puedan ser procesados. Procesamiento de la informacin: Est formado por las diferentes instrucciones que modifican los objetos a partir de su estado inicial hasta el estado final. Presentacin de la informacin (Salida de los resultados): Es el conjunto de instrucciones que toman los datos finales y los envan a los diferentes dispositivos externos de salida. A la hora de construir un algoritmo tenemos que tener en cuenta algunas caractersticas propias que siempre tienen que estar presentes, ellas son: Objetividad o Finalidad: Cada algoritmo elaborado tiene como objetivo dar solucin a un tipo de problema determinado y su resultado tiene que constituir dicha solucin.

- 3 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Precisin: Consiste en obtener siempre el mismo resultado, aplicando al algoritmo el mismo juego de datos iniciales. Por esta razn se dice que son unvocos. Orden: La secuencia de pasos del algoritmo tiene un orden establecido para ejecutarse, en el caso de que dicho orden sea modificado casi siempre se deja de obtener el resultado esperado. Efectividad: Un algoritmo es efectivo cuando todas sus operaciones puedan ser desarrolladas por una persona utilizando lpiz y papel. Finitud: Todo algoritmo tiene que ser finito, o sea, que cuando lo ejecutemos, despus de una x cantidad de operaciones, este debe finalizar. Es lgico pensar lo absurdo que sera elaborar un algoritmo cuya ejecucin no terminase nunca. Entrada y Salida: Podemos afirmar que los algoritmos pueden tener datos de entrada o pueden prescindir de ellos. Para ejecutar un algoritmo que permita calcular si un nmero determinado es primo necesitaramos entrarle dicho nmero, sin embargo, si quisisemos elaborar otro algoritmo que halle los primeros 200 nmeros pares positivos no tendramos entonces la presencia de los datos de entrada. No pasa lo mismo con los datos de salida, pues estos siempre tendrn que estar presentes en mayor o menor medida ya que mostrarn la solucin del problema resuelto. Cabe sealar aqu que los datos de salida de un programa pueden estar representados de diferentes formas y formatos, as vamos a poder encontrar salidas en forma de textos, de grficos (estos ltimos pueden ser de barras, de lnea, del tipo pie, u otros, en dependencia de lo que se quiera informar), salidas esquematizadas o agrupadas en forma de tablas. El diseo de los datos de salida va a estar en correspondencia con el nivel de anlisis que se desee realizar. Al estudio de la presentacin de los datos se le llama diseo de salidas y se puede decir que ha alcanzado un gran desarrollo en los ltimos tiempos puesto que antes, los usuarios slo podan ver los resultados de sus algoritmos en formatos estticos. En cambio, hoy da se confeccionan programas donde, a la hora de imprimir, el usuario final puede personalizar de forma muy variada el formato con el cual se mostrarn sus datos finales. Las entradas y salidas van a permitir el flujo de informacin existente entre el exterior y el algoritmo, constituyendo adems un elemento de suma importancia para la comunicacin entre el hombre y la mquina, donde ste brinda la informacin necesaria para obtener de esta ltima la respuesta requerida. Este flujo se realiza a travs de los datos, los cuales, atendiendo a la variacin de la informacin que contienen se pueden clasificar en: - Datos constantes: Aquellos cuyo contenido, tomado una sola vez dentro de la secuencia de pasos del algoritmo, nunca va a variar durante la ejecucin de este. Todas las veces que ejecutemos el algoritmo estos datos brindarn la misma informacin. Ejemplo de dato constante lo podemos encontrar en un algoritmo que resuelva algn problema de clculo matemtico donde se haga uso del valor de Dicho . dato, que aproximadamente es 3,1415... nunca va a variar su valor ya que constituye una constante matemtica. - Datos variables: Estos son los ms usados dentro del anlisis y solucin de problemas, ya que nos permiten utilizar juegos de datos diferentes para un mismo programa o algoritmo. Estos pueden variar su contenido cuantas veces se necesite. Los datos dentro de los algoritmos van a estar representados por un nombre en lugar de su valor explcito. Este nombre no va a ser ms que la direccin simblica de una localizacin de la memoria de la computadora en la cual se van a guardar dichos datos. Aunque los diferentes lenguajes de programacin tienen sus reglas estrictas y particulares para que los programadores creen estos nombres, normalmente estarn compuestos por una combinacin de caracteres alfabticos o alfanumricos. Un lenguaje que presentaba grandes limitaciones con los nombres dados a las variables y a las constantes lo constituy el FORTRAN. Este fue un lenguaje de mucha utilizacin en clculos cientficos y de ingeniera, su nombre proviene de FORmula TRANslation (traduccin de frmulas) y tena gran parecido con la notacin matemtica comn. En FORTRAN los caracteres que conformaban el nombre de los datos slo podan ser las letras maysculas del alfabeto ingls y en el caso de que se usaran caracteres alfanumricos entonces dicho nombre deba comenzar siempre con una letra. Cabe destacar aqu la extraordinaria limitante en cuanto a la longitud del nombre ya que no poda exceder los 6 caracteres. Tambin se establecan reglas segn el valor almacenado, por ejemplo, si era un dato numrico entero (nmeros que no tienen parte fraccionaria) el nombre deba empezar con una de las letras I, J, K, L, M N. Ambos tipos de datos, los variables y los constantes, ya vistos anteriormente, podrn encontrarse en cualquier parte del algoritmo realizando diferentes funciones. Atendiendo a estas ltimas vamos a poder dividirlos en tres grandes grupos funcionales, que son: - Primarios: Aquellos que de una forma u otra son suministrados al algoritmo para su procesamiento. Van a ser los encargados de brindarle la informacin del exterior que necesita la mquina para dar solucin al problema planteado. Dichos datos pueden ser entrados de formas muy variadas, la ms usual es que

- 4 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

sean introducidos por el hombre o pueden ser tomados directamente por la computadora desde algn dispositivo autmata conectado a ella. - Temporales: Datos auxiliares que se necesitan para completar la tarea a realizar. La mayora de las veces van a ser tiles slo para la propia computadora y van a contener informacin que no se conoca al inicio del programa pero que tampoco constituye el resultado que se pide. Son usados algunas veces para simplificar clculos matemticos complejos, aunque tambin algunos programadores los usan con el objetivo de hacer ms claras y legibles las operaciones ejecutadas dentro del algoritmo. - Finales: Son aquellos que representan el resultado del procesamiento de la informacin. Siempre van a ser calculados o elaborados por la computadora y van a tener la funcin de mostrar al exterior el resultado para lo cual se confeccion el programa. Existen otras caractersticas que aunque no son obligatorias nos pueden ayudar a disear algoritmos ms potentes y eficaces. El uso de estas por parte de los programadores demuestra la experiencia y maestra adquiridas durante el ejercicio de sus labores, a la vez que denotan buenos hbitos de programacin. A continuacin se mencionan y se les da explicacin a un grupo de ellas. Validacin: Consiste en chequear el contenido del dato y ver si se ajusta al rango pre-establecido por el programador. Todos los lenguajes de programacin tienen sus variados tipos de datos y controlan por ejemplo, que en una variable declarada como cadena de caracteres no se almacene un valor numrico y viceversa. Estos chequeos son ejecutados de forma automtica por dichos lenguajes, pero muchas veces necesitamos restringir la validacin a un grupo ms selecto dentro de un mismo tipo de dato. Supongamos que en nuestro algoritmo queremos pedir el sexo de X cantidad de personas. Todos conocemos que esta informacin tiene dos estados posibles (Femenino o Masculino) y que no es necesario almacenar la palabra completa sino que bastara con entrar las iniciales F M. En este caso podemos restringir la entrada por parte del usuario a estas dos letras. En el caso que por descuido u otra causa, sea entrada otra letra diferente, entonces mandaramos un mensaje de error (es opcional) y volveramos a preguntar por la informacin. Hoy da los potentes lenguajes visuales y orientados a objetos brindan a sus programadores fuertes herramientas para realizar estos trabajos, ya que la validacin nos permite reducir en gran medida la cantidad de errores posibles contenidos en los datos de entrada. Por ltimo cabe aadir que estos chequeos tambin se aplican a las operaciones y clculos efectuados durante el proceso algortmico. Modularidad: No es ms que la fragmentacin de un algoritmo en varios mdulos (algoritmos ms pequeos) y que estarn relacionados entre s. Existe un viejo refrn que dice Divide y vencers y se ajusta perfectamente a lo que tenemos que aplicarle a la estructura de los algoritmos. Hay que reconocer que todas las secuencias de pasos para resolver un problema podemos unirlas en un solo bloque, logrando un funcionamiento perfecto a la hora de ejecutarlo. Tambin podemos dividir el bloque en varios fragmentos (llamados en programacin mdulos) bien escogidos, relacionarlos unos con otros segn convenga y obtener un igual resultado con su ejecucin. Esta ltima forma presenta un nmero grande de ventajas respecto a la primera, siendo unas de las ms importantes la facilidad de su posterior estudio y de hacerle modificaciones al algoritmo. La modularidad se aplica tambin a la estructura de las Bases de Datos utilizadas por nosotros. Esta caracterstica va a ser un elemento de mucha utilidad dentro del grupo que desarrolla un producto informtico, pues nos va a permitir poder dividir el trabajo entre varios programadores. De esta manera se puede lograr una mayor especializacin y calidad en el trabajo, ya que los programadores siempre se van a inclinar por algunos aspectos de la programacin ms que por otros y esto se debe aprovechar para repartir las tareas segn las habilidades de cada cual. Descripcin: Es todo comentario, aclaracin o algn otro tipo de nota que se puede poner en cualquier parte del programa con el fin de explicar algo. Todo algoritmo debe llevar un comentario al inicio donde se detallan, entre otras cosas, nombre dado por quien lo dise, fecha de su ltima actualizacin, nombre del autor y una breve descripcin sobre el problema que resuelve. Tambin, a todo lo largo del algoritmo se le deben poner comentarios a determinadas operaciones o grupos de estas para aumentar su comprensin a la hora del estudio y mantenimiento, mxime si estas tareas sern realizadas por alguna persona que no particip en la confeccin inicial del algoritmo. Tambin se puede dar el caso, por ejemplo, que hagamos un algoritmo y al cabo de un ao se nos presente la tarea de modificarlo. Durante este tiempo es muy probable que se nos olviden muchos anlisis hechos al principio. Aqu, en este caso nos pudieran auxiliar muy bien todos los comentarios y textos que escribimos con anterioridad describiendo los pasos dentro del algoritmo. Los lenguajes de programacin implementan de una forma u otra la va por la cual adicionar comentarios dentro del cdigo. Por supuesto, a la hora de ejecutar dicho programa todas las lneas de cdigo son ignoradas. En muchas de las metodologas usadas para servir de gua en el diseo y construccin de sistemas informticos, es posible encontrar algunos pasos dedicados a la confeccin de documentaciones que ayudan tambin al entendimiento del cdigo elaborado.

- 5 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Redundancia: Se le llama a la repeticin intil de una o ms operaciones. Esta es una caracterstica negativa que los programadores van eliminando en la misma medida en que van adquiriendo experiencia, conocimientos y habilidades. Estas repeticiones innecesarias no slo se pueden ver en las operaciones que conforman al programa sino tambin durante el almacenamiento, procesamiento y presentacin de los datos. Se han visto programas que solicitan al usuario una cantidad determinada de informacin primaria, algunas de las cuales no necesitan ser pedidas y mucho menos guardadas ya que pueden ser calculadas u obtenidas durante la ejecucin del algoritmo. Supongamos, para ejemplificar lo anterior, que tenemos almacenado un grupo de datos sobre X cantidad de personas donde se encuentra la fecha de nacimiento de cada una. Sera una redundancia en este caso, guardar tambin la edad de dichas personas ya que esta puede ser calculada en cualquier momento partiendo de su fecha de nacimiento y la fecha actual. Otros ejemplos de redundancia los podemos encontrar en las presentaciones de los datos, ya sean a travs del monitor del ordenador o mediante una impresora. Tomemos como ejemplo el listado de todos los trabajadores de una empresa donde laboran hombres y mujeres, de los cuales se tiene almacenado el nombre, los apellidos y el sexo de cada uno. Vamos a suponer que queremos sacar un listado de todos los hombres con que cuenta dicho centro. Para eso pondramos en el encabezamiento de la hoja un ttulo que indique el contenido de la relacin, el cual podra ser: RELACION DE TRABAJADORES DE SEXO MASCULINO. Como el ttulo aclara bien que no aparecern en la lista los nombres de las mujeres, sera redundante tambin en este caso mostrar el dato del sexo al lado de cada nombre dentro de la relacin. Nivel o grado de automatizacin: El objetivo de todo algoritmo en computacin es automatizar una determinada tarea o parte de ella. Cuando nos proponemos disear un programa para que sea ejecutado por una computadora debemos tratar de que este realice todas las operaciones posibles. Mientras mayor sea el nivel de automatizacin, mayor ser tambin la cantidad de usuarios que podr hacer uso de este programa. Expliquemos esto a travs de un ejemplo. Supongamos que somos usuarios de un programa que como dato final nos brinda la produccin real de una empresa X y se desea saber si cumpli el plan o incumpli. Solamente los usuarios que conozcan el Plan de Produccin de la empresa podrn dar esta respuesta. Sin embargo, si el programa trabajara entre sus datos con el valor de dicho plan, entonces despus de una comparacin automtica este nos podra dar como dato final si la empresa X cumple o incumple, logrando as que cualquier persona que se siente frente a la mquina pueda ver fcilmente el cumplimiento o incumplimiento de dicha empresa. Con el grado de automatizacin hay que tener en cuenta un aspecto muy importante y que pasa muchas veces inadvertido y es que a mayor cantidad de tareas automatizadas menores seran los conocimientos que necesitara tener el usuario sobre dichas tareas, ya que con oprimir 2 3 teclas se estaran ejecutando un grupo de operaciones que pasaran transparentes para l. Todo esto hace que cobre una especial importancia la capacitacin de los usuarios finales de las computadoras, no slo desde el punto de vista de las nuevas tecnologas sino tambin respecto a las operaciones automatizadas que ocurren dentro del ordenador y que de no ser por estos ltimos habra que hacerlas de forma manual. Todo esto es muy usual apreciarlo en los sistemas dedicados a automatizar los procesos contables en las empresas, donde los econmicos y contadores operan una computadora a travs de opciones programadas de antemano y con el tiempo olvidan los asientos contables correspondientes, lo que provoca la incapacidad de estos a la hora de hallar diferencias en la contabilizacin y realizar los correspondientes ajustes. Generalidad: Esta caracterstica nos permite aumentar el radio de aplicacin de un algoritmo as como su potencia. Tenemos, por ejemplo, que es bueno poseer un algoritmo que permita calcular slo las potencias de 3, pero sera mejor tener uno que calculara las potencias de cualquier nmero natural que pueda ser entrado. A esta propiedad que presentan los algoritmos de poder trabajar en una cantidad grande de situaciones se le denomina tambin carcter masivo. Esta caracterstica requiere un gran conocimiento por parte del diseador de toda el rea que se pretenda automatizar. A la hora de generalizar nuestro algoritmo tendremos que tener en cuenta un numeroso grupo de aspectos, de los cuales a continuacin, relacionamos y explicamos algunos de ellos: Uso de datos variables: Los datos variables permiten que nuestro algoritmo pueda trabajar con diferentes juegos de valores, aumentando as la flexibilidad de este y su fcil adaptabilidad a otras reas afines donde se desee ejecutar en el futuro. El diseador tiene que tener bien presente cuando realiza su trabajo, que la incorporacin de datos constantes provoca zonas rgidas e inalterables en el interior del algoritmo, las cuales se van a comportar siempre de la misma forma, independientemente de los valores que puedan tomar los datos variables. Los datos que estn contenidos en el interior de estas zonas solamente podrn ser cambiados a travs de una nueva codificacin de nuestro algoritmo.

- 6 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Incluir caractersticas ausentes: Cuando se desean automatizar las tareas de un rea determinada no podemos limitarnos a realizar un estudio de sus particularidades, sino que debemos remitirnos tambin a estudiar otras reas afines. Todo esto con el objetivo de poder incluir en nuestro programa la mayor cantidad de elementos posibles, incluso aunque estos no aparezcan en nuestra rea, creando as un camino mucho ms fcil para una futura generalizacin del programa. Optimizacin: A un mismo problema podemos casi siempre darle algortmicamente, ms de una solucin. Es por eso que despus de tener elaborado un programa, nunca debemos conformarnos con su construccin, sino que debemos estudiarlo y hallar otras vas de confeccin ms ptimas. A medida que pasa el tiempo, el programador va adquiriendo mayor dominio tcnico de su especialidad, por eso es que cuando hayan pasado 1 2 aos de haber creado un algoritmo, dicho programador estar en condiciones de volver a confeccionarlo, pero esta vez dndole una mayor optimizacin. El anlisis y optimizacin de algoritmos ya creados con anterioridad es una de las vas prcticas de aprendizaje ms recomendada a la vez que constituye un mtodo de auto superacin idneo. Dentro de las caractersticas que normalmente se tratan de optimizar existen tres a las cuales los programadores le prestan mucha atencin, ellas son: Rapidez de ejecucin de las operaciones. Tamao del algoritmo. Cantidad de datos variables y constantes a utilizar. Esta caracterstica es la que dio origen a la famosa palabra HACKER, actualmente utilizada incorrectamente para llamar a todos aquellos intrusos y piratas de las redes informticas. Todo comenz a finales de los aos 50 y principio de los 60 donde un grupo de programadores se traz la meta de resolver problemas pero utilizando la menor cantidad posible de lneas de cdigo. A todas las soluciones ingeniosas que ahorraban lneas o permitan que algo se hiciera ms rpido le empezaron a llamar hacks (significa algo as como un golpe hbil dado con un hacha) y de ah que todo aquel que demostrara su habilidad en esto se le empezara a llamar hacker. En algunas literaturas como por ejemplo ESTRUCTURA DE DATOS EN PASCAL de los autores Aaron M. Tenenbaum y Moshe J. Augenstein es posible encontrar criterios tales como Un programador debe siempre preocuparse por la facilidad de lectura del cdigo que ha generado. Este es un aspecto que resulta un tanto relativo en cuanto a lo que cada diseador, analista o programador segn su nivel y experiencia alcanzado, entienda por facilidad de lectura. Cuando un especialista en programacin de mquinas computadoras, con bastante experiencia en su labor, confecciona un algoritmo, el mismo podra ser muy difcil de entender por parte de aquellos que dan sus primeros pasos por el mundo de la informtica. No obstante, tanto el que lo dise, como otros con suma experiencia tambin, lo podran entender perfectamente, a la vez que lo pudieran encontrar incluso sencillo.

El algoritmo como sistema informtico


El objetivo de todos los algoritmos confeccionados va a ser casi siempre su preparacin y posterior ejecucin en una computadora. Estos se van a unir y constituir lo que se puede llamar un sistema automatizado. En la actualidad existen numerosas metodologas para el anlisis y diseo de sistemas automatizados, los criterios de cuales son las mejores o las peores discrepan mucho entre aquellos que hacen uso de ellas ya que cada cual defiende la suya (no obstante se pueden ver muchas cosas en comn entre todas ellas, incluso algunas se elaboran a partir de otras ya existentes). Lo que si se hace necesario es guiarse por una metodologa determinada a la hora de llevar a cabo cualquier proyecto por muy pequeo que este pueda ser. A estas metodologas tambin se les suele conocer como ciclo de vida del sistema. En la presente obra explicaremos los pasos o etapas de una pequea y sencilla metodologa que permitir al lector contar con una herramienta capaz de ayudarlo a resolver problemas usando algoritmos, as como tambin le servir de base para estudios posteriores de otras metodologas mucho ms complejas. Este tema debe ser muy bien estudiado y profundizado por todos aquellos que pretendan dirigir a un grupo de especialistas en la construccin de sistemas automatizados, tarea donde no se necesitan grandes conocimientos de programacin pero s son imprescindibles tcnicas organizativas, metodolgicas y de direccin. A continuacin se describen los pasos para resolver cualquier problema con el auxilio de una computadora: 1- Anlisis y descripcin matemtica del problema: Lo primero que debemos hacer es determinar los intereses de automatizacin que desea el usuario, as como las condiciones existentes donde se desarrolla el trabajo actual. Hecho esto se procede al importante paso del entendimiento de forma correcta del problema planteado. Est de ms decir lo obvio que resulta el no poder dar solucin a ningn problema sin haberlo entendido previamente.

- 7 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

2-

3-

4-

5-

6-

7-

Despus de la lectura y entendimiento del problema pasamos a extraer todos los datos con los cuales disponemos, ya sean primarios, temporales o finales. Muchas veces para lograr esto es necesario profundizar en libros, consultas con especialistas en ese tema u otra va que sea aplicable, todo esto en dependencia del tipo de problema y su nivel de complejidad. Esto se hace con los objetivos siguientes: Agrupar los datos para un mejor anlisis del algoritmo. Conocer si con los datos primarios que poseemos, es posible llegar a los datos finales (o sea comprobar que el problema tiene solucin a travs de un algoritmo). Hacer un eficiente diseo de entradas de datos. Hacer un eficiente diseo de salidas de datos. Durante este paso encontraremos el problema matemtico que describe el problema actual. Una vez analizado el problema a fondo debemos encontrar las formas y vas generales para resolverlo, estudiando las variantes de solucin ms factibles, eficientes y ptimas. Algunas veces nos vamos a encontrar en la situacin de que se puede derivar la proyeccin de varios sistemas. Si se nos diera este caso entonces cada uno de ellos recorrer a partir de ahora (y de forma independiente) los pasos que siguen. Al finalizar se elaborar una propuesta general de automatizacin donde se incorporar un estudio de factibilidad del proyecto (el cual deber estar muy bien fundamentado tcnica y econmicamente) y se presentar para ser aprobada por el usuario. Elaboracin del esquema lgico: Aqu se encontrarn los mtodos algortmicos que nos permitan hallar la solucin al problema matemtico elaborado en el paso anterior. Esto no es ms que esquematizar el procedimiento lgico a seguir, tomando en consideracin las caractersticas y posibilidades de trabajo de la computadora. En este paso entra a jugar un papel muy importante los conocimientos adquiridos por la persona encargada de confeccionar el algoritmo. En la confeccin de muchos sistemas informticos pequeos es comn encontrarnos con personas que omiten por completo este paso para realizar la tarea directamente dentro de la computadora. Convertir el algoritmo en programa: Despus de esquematizado el procedimiento mediante un algoritmo, estamos en disposicin de hacerlo entendible por la computadora. Para ello es necesario traducir toda la secuencia elaborada en un lenguaje comprensible por esta ltima. Para lograr esta traduccin es necesario disponer de un programa compilador. Hoy en da existe gran variedad de estos programas, pudindose hacer mencin aqu de los ms usados, que son: C++, Turbo Pascal y BASIC. Tambin contamos con sus versiones ms modernas desarrolladas para trabajar en un ambiente grfico visual, entre ellas tenemos Visual Basic, Borland Delphi, etc. Ejecucin y prueba del programa: Despus de finalizado el paso anterior ya estamos listos para ejecutar nuestro programa en una computadora. Durante este proceso se pueden detectar algunos errores, los que deben ser corregidos antes de continuar hacia el paso siguiente. Es usual encontrar durante el diseo de algunos programas como muchos diseadores y programadores tienden a confundir este paso con el que sigue, llegando incluso a unirlos y aceptarlos como uno solo. Anlisis y comprobacin de los resultados: Cuando han finalizado los arreglos y ajustes al cdigo del programa, pasamos entonces a comprobar la veracidad de los datos que nos brinda como resultado. Las primeras pruebas que se deben hacer se realizan con datos primarios cuyo resultado final es conocido de antemano. Esto se hace con el objetivo de comprobarlos y ver si ambos son iguales. Hecho esto se pasa a realizar algunas pruebas con datos reales y dentro de un entorno idntico a donde va a ser explotado. En algunas metodologas es posible encontrar este paso dividido en varias etapas de pruebas. Una forma recomendable para hacer pruebas reales con el sistema automatizado es llevar, durante algn tiempo y de forma paralela, el uso de este junto con el sistema manual antiguo. Explotacin del programa: En este paso se ejecutarn todos los cambios necesarios en el rea a automatizar. Debemos tener en cuenta que muchas veces estos cambios se expanden a otras reas, que aunque no se adentran directamente en la automatizacin, influyen de una forma u otra en el problema que ha sido objeto de estudio. Es en este paso donde el programa le es til al hombre. Aqu es donde se va a producir el intercambio de datos reales as como su procesamiento. No se puede descartar la aparicin de errores en este paso, la experiencia nos dice que la gran mayora de los programas una vez que son puestos en explotacin y aunque hayan pasado todas las etapas de prueba, presentan algn que otro problemita. Todas las eventualidades ocurridas en este paso deben ser documentadas y archivadas para que se puedan usar como material de trabajo en el paso siguiente. Mantenimiento del programa: Este paso se nutre de la experiencia acumulada durante el tiempo de explotacin del programa. Aqu se le hacen modificaciones al cdigo del programa o a la estructura de las bases de datos teniendo en cuenta algunos aspectos fundamentales que son: Errores ocurridos y que no fueron detectados durante las pruebas.

- 8 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Adiciones de opciones nuevas al programa. Cambios ocurridos en el rea automatizada y que generen modificaciones al programa. Modificaciones internas del cdigo del programa producto de alguna optimizacin. Hay metodologas que incluso clasifican los mantenimientos teniendo en cuenta los tipos de modificaciones que realizan estos a los sistemas, bases de datos o a la propia lgica y filosofa del proyecto. De todas formas cabe decir que se tiene que tener mucho cuidado a la hora de hacer arreglos y adiciones a los programas en esta etapa, pues se corre el riesgo de crear errores o problemas en partes donde antes funcionaban de lo ms bien. Todo aquel, que en algn momento de su vida ha estado vinculado de una forma u otra al trabajo de implantacin de sistemas automatizados, podr darse cuenta de que al finalizar el paso nmero 7 no ha concluido su tarea, sino que, a partir de aqu se establece una repeticin necesaria de los ltimos dos pasos. Entonces es cuando nuestro sistema comienza a crecer y a desarrollarse nutrindose con la experiencia de la prctica diaria, adquiriendo de esta forma mayor fuerza y realismo. En algunas metodologas podremos encontrar un paso independiente dedicado a la confeccin de la documentacin del proyecto. En realidad en cada etapa o paso se deber generar una informacin propia (que no entraremos a detallar aqu). Toda esta documentacin que se va generando a lo largo de la ejecucin del programa se va recopilando y pasar a formar parte del llamado Expediente del proyecto. Toda la documentacin que se genera se va a dividir de forma general en dos grandes grupos, que son: Orientada al proyecto: Es creada en el primer paso y desarrollada en cada uno de los siguientes. Va a contener informacin interna del sistema as como la descripcin del desarrollo del trabajo en general. Orientada al usuario: Es confeccionada en el paso 3 y puede sufrir modificaciones en los que le siguen. Debe contener toda la descripcin de como trabajar con el sistema incluyendo su instalacin y explotacin. El grupo de trabajo puede incluso, teniendo en cuenta la complejidad del sistema en estudio, omitir algunos pasos durante su desarrollo. Hoy en da se hace necesario que el perodo de confeccin de un programa (ciclo de vida) sea lo ms corto posible. El acelerado desarrollo de las tcnicas informticas nos obliga prcticamente a no demorar mucho el tiempo invertido en cada fase del ciclo de vida de nuestro algoritmo, ya que lo que hoy es nuevo y novedoso, maana puede ser viejo, e incluso obsoleto. Una muestra de esto lo constituyen los nuevos lenguajes de programacin visuales orientados a objetos, tambin llamados RAD (Diseo Rpido de Aplicaciones). En ellos podemos ver mecanismos y herramientas que nos permiten realizar, de forma muy rpida, tareas que en los lenguajes ms antiguos nos tomaran mucho ms tiempo.

Anlisis del costo-beneficio de un sistema informtico


Las personas o entidades que se dedican al diseo y desarrollo de sistemas informticos necesitarn cobrar por esta tarea ya que en realidad lo que estn haciendo es vendiendo un producto. El cobro que se efecte estar en dependencia del costo del proyecto en general y lo podremos dividir en: Costo Directo: Aqu se tendr en cuenta el costo de la fuerza de trabajo, el consumo que se haya hecho de materiales y el costo de uso de los medios tcnicos empleados. Costo Indirecto: Se contemplar aqu todos aquellos costos que influyen de una manera u otra sobre el desarrollo de la confeccin del software pero que no lo hacen de forma directa. Al implementar cualquier proyecto nos vamos a poder encontrar con los beneficios que este reporta, estos podrn ser clasificados de la forma siguiente: Tangibles: Son aquellos que pueden ser calculados, por ejemplo: - Reduccin del personal que realizaba la tarea. - Disminucin de todo tipo de errores imputables a los seres humanos. - Rapidez en el procesamiento y presentacin de la informacin. - Disminucin de algunos gastos. Intangibles: Son aquellos que resultan difciles de calcular, entre ellos tenemos: - Humanizacin del trabajo. - Rapidez en el anlisis de los resultados.

Diagramas de bloques
Los diagramas de bloques (tambin llamados Diagramas de flujos) son lenguajes de descripcin de algoritmos. Estos son reconocidos en muchas literaturas como los ms universales de su tipo, debindose este xito a la reduccin en gran medida del uso del lenguaje natural para describir los pasos a seguir.

- 9 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Las operaciones a realizar van a estar representadas por smbolos, los cuales van a contener en su interior los datos utilizados en dichas operaciones as como las variables que se van a usar. En este captulo se va a explicar detalladamente el diseo y confeccin de algoritmos mediante el empleo de los diagramas de bloques. Se le recomienda al lector que repase y estudie cuidadosamente cada pgina de este captulo y no pase a la siguiente hasta tanto no se comprenda el contenido de la anterior, ya que cada leccin nueva lleva implcita la comprensin de las lecciones anteriores a ella. Comencemos a dar los primeros pasos utilizando un pequeo y sencillo problema planteado a continuacin: 1- Se desea conocer el resultado de la suma de dos nmeros entrados al programa. Despus de leer el problema 1 pasamos a extraer y agrupar los datos que utilizaremos, esto nos quedara ms o menos as: Datos primarios (de entrada) Datos finales (de salida) A- Primer nmero S A+B B- Segundo nmero Como podemos ver se pide un solo dato como salida y para su obtencin contamos con valores existentes, por lo que llegamos a la conclusin de que dicho problema es algortmicamente soluble. En este ejemplo no hace falta el uso de datos temporales. Pasemos ahora a la construccin del diagrama. Todo algoritmo debe llevar algo que indique donde empieza y donde termina, en los diagramas de bloques esta funcin la va a asumir el smbolo siguiente:

En su interior podr llevar slo un texto de dos posibles. Este texto ser Inicio, para indicar por donde se tiene que empezar a ejecutar el algoritmo, o Fin que nos dir donde termina la ejecucin del mismo. Conociendo lo anterior podemos empezar nuestro algoritmo como sigue: La lnea terminada en flecha nos indica la direccin a seguir en la ejecucin de los pasos del diagrama.

Para poder darle la solucin al ejercicio 1 necesitamos introducir en la computadora los datos que nos permitan ejecutar las operaciones, los smbolos usados para la lectura de datos desde el exterior pueden ser de dos formas diferentes las cuales se muestran a continuacin:

Nosotros en el transcurso del libro trabajaremos con el de la izquierda por ser este el ms ampliamente usado. En el interior de dichos smbolos podremos poner el identificador del dato que vamos a leer, pudindose poner tambin ms de uno, cada cual separado por una coma. En el ejercicio 1 tenemos que leer dos valores numricos, completando nuestro diagrama con lo hasta ahora aprendido pudiramos hacerlo de cualquiera de las formas representadas en el esquema 3.1.

- 10 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Slo nos falta realizar la suma y mostrar el resultado para acabar de resolver el problema. La ejecucin de operaciones aritmticas y asignaciones se representan con el smbolo:

Dentro de este smbolo podemos poner una o ms asignaciones, segn nuestra conveniencia. Poniendo como ejemplo la suma del ejercicio 1 tendramos:

Cabe hacer notar que en los diagramas de bloques la asignacin de un determinado valor a cualquier variable se representa con una flecha, la cual va a ir de la operacin o valor a la variable, siempre de derecha a izquierda por lo tanto es una regla aqu que el nombre o identificador de dicha variable se encuentre siempre a la izquierda de la asignacin. Para poder conocer el resultado producido por nuestro programa necesitamos decirle a la computadora que muestre a este ya sea a travs de un monitor o una impresora que son los perifricos de salida ms comunes. Esta orden de salida se representa con el smbolo:

Dentro de este podemos imprimir ms de un resultado. Con lo visto hasta ahora podemos concluir la confeccin del algoritmo para el ejercicio 1, el cual se muestra, completo en el esquema 3.2.

- 11 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

A la hora de confeccionar un programa en cualquier lenguaje, ya sea Pascal, C++, etctera, partiendo de este algoritmo y ejecutndolo en una computadora, veramos como nos pide la entrada de dos valores numricos y despus nos mostrara un valor que sera la suma de dichos nmeros entrados anteriormente por nosotros. Cuando estamos enfrascados en la construccin de algoritmos hay que tener en cuenta el evitar la confeccin de posibles partes ilgicas. Veamos esto a travs de los dos ejemplos mostrados en el esquema 3.3.

En el ejemplo del esquema 3.3.a se realiza una operacin de resta de dos valores (A y B) antes de que estos sean conocidos por la computadora (como se aprecia la instruccin de lectura aparece aqu despus de la de resta). En el otro ejemplo, el del esquema 3.3.b, se pueden ver dos asignaciones de un valor a una misma variable, esto funcionalmente no est mal, pero la asignacin tiene un carcter destructivo (o sea cuando a una variable cualquiera se le asigna cualquier valor se destruye el que esta tena) y en la instruccin que seguira en este ejemplo se trabajara la F con valor 0 y se perdera el resultado de la suma. En el esquema 3.4 se reproduce una variante correcta de cada uno de los ejemplos anteriores.

- 12 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Pasemos ahora a resolver otro problema muy parecido al anterior, dice as: 2- Dadas las tres notas de un estudiante (Matemtica, Fsica y Biologa), se desea obtenido. La agrupacin de los datos nos quedara como:

conocer el promedio

En el esquema 3.5.a podemos apreciar el diagrama de bloques correspondiente a este ejercicio. Debido a la sencillez de este problema, podramos darle tambin otras soluciones en las cuales no usaramos datos temporales sino solamente un dato final e incluso prescindir de este ltimo. Para la variante que se representa en el esquema 3.5.b se parti de la agrupacin de datos siguiente:

- 13 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

La otra solucin posible representada en 3.5.c no hace uso ms que de datos primarios, ya que el resultado se imprime directamente. Razonamiento Automatizado. Condiciones. En computacin podemos encontrar el razonamiento en dos formas diferentes. Una, contenido en el interior de las bases de datos (dinmico) y otra en el interior de nuestros programas (esttico). En este libro nos dedicaremos solamente a estudiar la forma de programar el razonamiento desde el interior del algoritmo. Los programas se proveen normalmente de datos primarios simples, dichos datos pueden ser suministrados directamente por el operador de la computadora (llamada entrada interactiva), pueden ser recibidos de algn equipo perifrico que se encuentre conectado al ordenador (medidores de temperatura, cmaras de televisin, sensores, robots, etc.) o pueden ser obtenidos por el programa desde el interior de una o varias bases de datos. Estos datos simples van a suministrar a su vez una informacin simple o atmica con la cual el programa tendr que trabajar para poder ofrecer una respuesta procesada y acorde a las necesidades para las cuales fue diseado y construido. Como ejemplos de informacin atmica podemos mencionar los siguientes: A- Ral es un hombre. B- Juana es una mujer. C- Ral es joven. Podemos apreciar que los datos A, B y C nos dan elementos bien sencillos (tambin llamados proposiciones simples) de un determinado universo, en los cuales no se aprecia razonamiento alguno, as como tampoco informacin procesada. El razonamiento general se representa en el interior de los algoritmos como un conjunto de reglas cuya forma elemental es: Si C, entonces A Donde C es alguna proposicin simple que de cumplirse podr dotar a nuestro algoritmo del conocimiento A. Veamos esto a travs de un ejemplo, supongamos que estamos trabajando con personas y tenemos lo siguiente: Si persona es hombre, entonces persona no es mujer Con esta proposicin ms compleja la computadora podr razonar que toda persona es hombre o mujer y que no podr existir ninguna persona con las dos caractersticas a la vez. Existen algunos operadores (llamados operadores lgicos) que nos permiten a la hora de escribir proposiciones, aumentar el nivel de complejidad de estas. Por ejemplo: Si B y C, entonces A Aqu podemos apreciar como se tienen que cumplir las proposiciones B y C para que pueda existir el conocimiento A. Cuando en cualquier proposicin compleja nos encontramos el operador lgico y (en muchas literaturas sobre este tema se le hace mencin por su equivalente en ingls AND aunque dichos textos estn escritos en espaol) entre dos o ms proposiciones, siempre ser necesario que todas se cumplan para poder hacer vlido el conocimiento A.

- 14 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Otro operador lgico lo constituye el o (tambin usado con su traduccin al ingls como OR), con la diferencia de que cuando se encuentra entre dos o ms proposiciones, slo bastara con que se cumpliera una sola para que se haga vlido el conocimiento. Es decir: Si B o C o D, entonces A Dado este razonamiento con el operador o, se puede dar el caso de que una sola proposicin se cumpla, ya sea B o bien puede ser alguna de las otras, en dicho caso se aplicara el conocimiento A. Para que no pueda aplicarse A tendran que no cumplirse ninguna de las tres proposiciones ya que si se cumplieran las tres proposiciones tambin se aplicara el conocimiento A. En los textos de matemtica que aborden el tema de la lgica, as como en otros de computacin que profundicen ms en cuanto a operadores lgicos, el lector interesado podr encontrar mucha ms informacin. Tambin conocer otros operadores de la lgica que no se han tratado aqu por no ser objetivo del libro. Esta forma de representar conocimiento tambin es usada dentro de los algoritmos para dada una determinada condicin, se ejecute una tarea especfica. La sintaxis sera la misma, o sea: Si C, entonces A Donde C seguira siendo una proposicin, o grupo de ellas separadas por operadores lgicos y A una instruccin (o grupo de ellas) a ejecutar. Expliquemos un poco ms esto a travs de un ejemplo. Supongamos que se nos plantea el siguiente problema: 3- Conocida la nota de matemtica de un alumno, decir si est aprobado o suspenso (el mnimo de aprobado es 60 puntos). La lnea de algoritmo que hara esta operacin sera: Si (Nota>60) o (Nota=60) entonces Decir Est aprobado Como puede observarse, el algoritmo nos dira Est aprobado en el caso de que la nota sea mayor o igual que 60, pero en caso contrario, que la nota fuera menor que 60, entonces no nos brindara ninguna informacin. Para hacer un uso ms eficiente de la instruccin Si...entonces... podemos usarla en una forma ms compleja: Si C entonces A sino B Vemos ahora que si se cumple la proposicin C entonces se ejecutara A, pero en caso de que C no se cumpla entonces se ejecutara B. Despus de ver esto podemos remitirnos al ejercicio 3 cuya lnea de cdigo nos quedara de forma ms completa de la siguiente forma: Si (Nota>60) o (Nota=60) entonces Decir Est aprobado sino Decir Est suspenso Como se plante anteriormente en el captulo I, podemos llegar a la solucin de un problema por diferentes vas y mtodos. Dejamos las dos siguientes soluciones para que el lector las analice y compruebe que devuelven el mismo resultado que la que hemos planteado como ejemplo en el ejercicio 3. El primer caso asume las notas como un valor numrico entero solamente, o sea sin parte fraccionaria, de lo contrario no servira. Si Nota>59 entonces Decir Est aprobado sino Decir Est suspenso Si Nota<60 entonces Decir Est suspenso sino Decir Est aprobado La instruccin Si...entonces...sino tambin tiene un smbolo (llamado smbolo de decisin, estructura condicional o alternativa simple) que la representa dentro de los diagramas de bloques de la siguiente manera:

- 15 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Dentro del smbolo se coloca la condicin a cumplir. Las flechas que salen indican los caminos a seguir segn sea evaluada dicha condicin, si se evala como verdadera entonces, seguiramos por la flecha SI y en caso contrario, o sea, que sea evaluada como falsa seguiramos por la flecha NO. En este smbolo la posicin de las flechas no es obligatoriamente de la forma que se muestra, por lo que se podr poner la flecha SI saliendo para el lado o para abajo segn convenga. Nos encontramos ahora en disposicin de darle solucin al problema 3 mediante un algoritmo de diagramas de bloques. Este se muestra en el esquema 3.6. En el proceso algortmico las condiciones se determinan, en general, partiendo de la comparacin entre datos, los cuales deben haber tomado valores antes de efectuarse la misma. Debemos destacar que una vez que estemos situados en un smbolo de decisin podremos escoger un solo camino a la vez.

Variables indicadoras o Banderas. Las banderas (conocidas tambin por su significado en ingls como flags) son datos variables cuyo valor no lo va a constituir el resultado de una operacin aritmtica, sino que va a ser puesto automticamente en determinados lugares del algoritmo con el fin de indicar algo. Estas variables indicadoras van a tener dos funciones muy importantes, que son: servir de informacin al usuario en forma de dato final y/o ser utilizadas en otras partes dentro del algoritmo con el propsito de segn su valor tomar determinadas decisiones. Hay que saber distinguir entre un dato variable normal y una bandera. Las variables normales se usan para trabajar con su valor y usarlo en operaciones matemticas, para imprimir textos, etc. Las variables indicadoras se van a usar para analizar su valor, el cual puede variar en cualquier paso del algoritmo. Son muy tiles para conocer las partes que fueron ejecutadas dentro de un algoritmo ramificado. En algunas literaturas a estas variables se les reconoce como Interruptores o switches. Contadores y acumuladores.

- 16 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Un contador no va a ser ms que una variable cuyo valor se va incrementar o decrementar en una cantidad fija. En el trabajo con las iteraciones o ciclos es muy comn (y en algunos casos es hasta obligado) la necesidad de efectuar conteos en el interior de los mismos. Podemos citar como ejemplo el caso del ciclo por conteo donde la instruccin que efecta la cuenta forma parte incluso de la sintaxis del bloque. Esto se debe a que la culminacin del ciclo va a estar en estrecha dependencia con el valor que obtenga la variable contenida en el interior del contador. Por otro lado tenemos que el acumulador (tambin llamado sumador) va a ser una variable cuyo valor se va incrementar varias veces pero en cantidades variables. Va a ser preciso que se inicialice con el valor 0 ya que va a ser utilizado en los casos en que se desee obtener el total acumulado de un determinado conjunto de cantidades. Iteraciones. Es muy comn a la hora de disear un algoritmo encontrarnos con la necesidad de repetir un grupo especfico de pasos durante una determinada cantidad de veces. A esta parte del proceso es a lo que se llama iteracin o ciclo (tambin es conocido por muchos como bucle o lazo). La iteracin la vamos a poder encontrar en la inmensa mayora de los algoritmos, ya sean estos ms simples o ms complejos. Esto nos da una muestra de lo importante que se hace su estudio y aprendizaje, ya que el dominio de esta tcnica de programacin dota a los algoritmos de robustez y eficiencia. El no hacer uso de los ciclos podra convertir la tarea de diseo de algoritmos en algo verdaderamente tedioso, as como que aumentara considerablemente el tamao de nuestros programas. Existen diferentes tipos de ciclos, pero todos tienen en comn un mismo aspecto y es que la cantidad de veces que se repite va a estar controlada por una condicin. Este detalle es ignorado muchas veces por los desarrolladores de aplicaciones que trabajan a un alto nivel de abstraccin, ya que estos lenguajes proporcionan instrucciones que realizan la tarea de forma transparente al programador. Atendiendo a si se conoce o no la cantidad de veces que va a ser ejecutado un ciclo, este se puede clasificar en: Ciclo por condicin: Es aquel que se caracteriza por presentar la particularidad de que nunca se sabe con antelacin cuantas veces se va a ejecutar. Van a existir 2 tipos de ciclos por condicin y su principal diferencia va a estar dada por el lugar donde ser ubicada dicha condicin. Ciclo por conteo: Es usado cuando se conoce de antemano la cantidad de veces que se desea repetir determinado grupo de operaciones. Es mucho ms sencillo que todos los dems y es el ms utilizado dentro del anlisis y solucin de problemas. Cuando se imparten clases de programacin directamente con un lenguaje de programacin, este ciclo es el primero que se estudia debido a su fcil comprensin comparado con el de condicin. En los diagramas de bloques el esquema bsico del ciclo por conteo es como se representa en el fragmento de algoritmo mostrado en el esquema 3.7. Como se puede apreciar este tipo de ciclo hace uso de una variable para controlar la cantidad de veces que es ejecutado, a dicha variable se le llama variable controladora de ciclo y en este esquema de ejemplo se identifica con la letra I. El primer paso que se realiza es inicializar esta variable controladora con el valor 0. Se puede observar que esta operacin, aunque es parte fundamental del ciclo, queda fuera de l y no se repite. Esto se hace con el objetivo de que se comience el conteo de repeticin con el nmero 1, de lo contrario, si no hacemos la inicializacin de la variable, la computadora le dara cualquier valor a la hora de usarla en la instruccin siguiente. En el paso siguiente se incrementa en uno el valor de I. Esta instruccin (explicada ya anteriormente y conocida con el nombre de contador) es la que controla la ejecucin del ciclo, permitiendo as contar cada repeticin que se haga. Despus de esto y como tercer paso vienen las operaciones que se desean repetir.

- 17 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

El ltimo paso consiste en la condicin. Aqu se compara el valor de la variable controladora (en este caso I) con la cantidad total de repeticiones deseadas (CANT), si son iguales, se termina dicho ciclo y se contina con la ejecucin del programa, sino (en el caso de que I sea menor que CANT) entonces se siguen repitiendo las instrucciones en el interior del ciclo. Cuando se ha adquirido experiencia con el trabajo de anlisis y diseo de algoritmos vamos a ver como podemos entonces hacer pequeas modificaciones a esta estructura. Se van a presentar casos en que por ejemplo el contador ser necesario ubicarlo despus de las operaciones a repetir y no antes, vase el esquema 3.8. En numerosos casos podremos aprovechar el valor de la variable controladora de ciclo para usarlo en nuestras operaciones y clculos desarrollados en el interior del ciclo, tambin nos encontraremos con algunos ciclos donde la variable es inicializada con un valor distinto de cero. As podremos ver tambin otros casos donde se podr incrementar a la variable controladora de ciclo en ms de 1 y en el contador en vez de sumarle 1, le sumaramos 2, 3, 4, 5..., en dependencia de lo que necesitemos usar segn las exigencias del problema planteado.

- 18 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Todas las modificaciones que se hagan dependern de las exigencias que tenga el problema a resolver. Hay una forma de usar este tipo de ciclo donde, en vez de incrementar a la variable controladora, lo que se hace es decrementarla. Esto se hace muchas veces con el propsito de usar el valor de dicha variable como dato en las operaciones a repetir. Para poder hacer esto tendramos que cambiar la inicializacin de la variable controladora en el primer paso y en vez de asignarle el valor 0 le pondramos el total de repeticiones (en este ejemplo est representada como CANT), y el contador nos quedara como:

Al final, donde se ejecuta la condicin, en vez de comparar a la variable I con CANT, la compararamos con el valor 0. Aqu podemos destacar una caracterstica muy importante del ciclo por conteo y es que siempre se va a ejecutar completo, ya que no posee ninguna condicin que afecte su funcionamiento. Esto lo va a diferenciar mucho de los restantes ciclos existentes. En los lenguajes de programacin la instruccin del ciclo por conteo es una de las ms conocidas y aunque sufre ligeros cambios de sintaxis de un lenguaje a otro, siempre es fcil de identificar, ya que casi siempre va a comenzar con la palabra reservada for. En Turbo Pascal la podemos encontrar de estas dos formas:

En el ejemplo 1 vemos el uso normal del ciclo por conteo mientras que en el ejemplo 2 vamos a ver la forma que toma el ciclo cuando en vez de incrementar a la variable controladora lo que hace es decrementarla. Cabe hacer notar que cuando diseamos este tipo de ciclo con algunos lenguajes de programacin, no hace falta que nosotros mismos incrementemos o decrementemos a la variable controladora, ya que la instruccin for que nos brindan dichos lenguajes se encarga de esto de forma automtica. En otros lenguajes como el C++ s se hace necesario que nos hagamos cargo nosotros de alterar el valor de la variable controladora de ciclo ya sea para incrementarla o decrementarla. El mismo ejemplo 1, pero en C++, nos quedara as: Ejemplo 1 (C++) for (i=1; i<=200; i++) printf(%d, i); Hay ejemplos de lenguajes de programacin donde este tipo de ciclo no comienza con la palabra for. Uno de ellos es el FORTRAN, antiguo lenguaje como ya se explic en el captulo I, donde podremos identificar a este ciclo con la palabra DO. A continuacin retomamos de nuevo el ejemplo 1 pero esta vez programado en FORTRAN: Ejemplo 1 (FORTRAN) DO 32 I=1, 200 32 WRITE (06, 3) I Es bueno destacar que algunos lenguajes de programacin presentan instrucciones que s permiten interrumpir la ejecucin de este tipo de ciclo. El primer ciclo por condicin que vamos a ver es aquel que posee dicha condicin al final de su sintaxis. Su diagrama bsico se representa en el esquema 3.9.

- 19 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Este ciclo va a tener la particularidad de que siempre se va a ejecutar aunque sea una vez, debido a que primero procesa las operaciones y despus pregunta. En el siguiente ejemplo veremos como las instrucciones en el interior del ciclo se van a repetir hasta que el valor entrado (y almacenado en la variable Z) sea igual a 0. Aqu tambin podremos hacer ligeros cambios en cuanto a la obtencin del valor de Z, segn sean las caractersticas del problema planteado. La variable controladora de ciclo lo constituye en este ejemplo la Z, ella es la que nos va a permitir terminar o no la repeticin de las instrucciones. La forma de darle valor a Z en este caso es a travs de la entrada por teclado, pero esto puede variar y, por ejemplo, sustituir la lectura por una operacin aritmtica u otra. Hay que tener mucho cuidado a la hora de definir la forma en que va a tomar valores la variable controladora de ciclo ya que podemos crear un lazo infinito en su ejecucin.

El segundo ciclo por condicin que vamos a estudiar es aquel que posee dicha condicin al inicio de su sintaxis. Una particularidad que lo distingue de los dems ciclos es que este no siempre se va a ejecutar (esto estar en dependencia del cumplimiento de su condicin). El esquema 3.10 nos muestra dos formas diferentes de representarlo. Como se puede apreciar a simple vista, en el esquema 3.10.a se hace una redundancia en la lectura de la variable Z (que en este caso es la que controla la ejecucin o no del ciclo). Esto nos puede parecer innecesario ya que vemos en el ejemplo diseado en 3.10.b que se puede lograr el mismo resultado de una forma ms ptima. Sin embargo, esta ltima solucin solamente se puede aplicar en los algoritmos de diagramas de bloques debido a que su estructura lo permite y tiene una lgica razonable desde el punto de vista de la programacin. La solucin dada en 3.10.a se estudia porque es la forma ms cercana a como nos quedara la estructura de este ciclo por condicin si la confeccionramos en un lenguaje de programacin.

- 20 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Variables con subndices. Mientras los datos primarios entrados a nuestros algoritmos no sean numerosos podremos declarar diferentes variables para almacenar cada uno de ellos. Pero, qu pasara si furamos a trabajar con volmenes grandes de estos datos? Para trabajar con listas grandes de datos de un mismo tipo tendramos que usar el tipo de dato llamado arreglo (en ingls: array), el cual permite almacenar una coleccin de elementos del mismo tipo, bajo un mismo identificador, y que podemos tratar dicha coleccin como un todo, as como tambin acceder a cada uno de sus elementos por separado. Cada uno de los elementos de un arreglo se diferencia de los restantes por la posicin que va a ocupar dentro del mismo, la cual se va a expresar a travs de uno o ms subndices.

Los subndices podrn estar constituidos por una constante o una variable numrica, por ejemplo: A[2] B[x] A[15]

Tambin podremos usar expresiones ms o menos complejas dentro del subndice a la hora de identificar un elemento dentro de un arreglo, por ejemplo: Lista[x+3] A[x*y]

Subprogramas o mdulos. Hasta ahora hemos podido ver como todas las instrucciones de cada uno de los algoritmos representados se han encontrado siempre agrupadas en un mismo diagrama de bloques. Esto se debe a que la complejidad de los mismos no ha requerido el empleo de otras tcnicas de diseo por parte del programador. Sin embargo, cuando nos enfrentemos a la resolucin de un problema de ndole mayor, vamos a vernos en la necesidad de emplear una tcnica de programacin conocida como modularidad. La modularidad aplicada a la programacin de mquinas computadoras consiste en fragmentar el programa principal en pedazos ms pequeos e independientes llamados mdulos o subprogramas (en algunas literaturas se les puede encontrar tambin con el nombre de subrutinas). Cada uno de los subprogramas va a estar constituido por un grupo de instrucciones especficas para realizar una tarea determinada y van a ser llamados por el programa cada vez que sean necesarios. Algunas de las ventajas de la divisin del algoritmo principal en subprogramas son: - Facilitan el trabajo en grupo de los diseadores y programadores. - Mejoran considerablemente la legibilidad del cdigo de los algoritmos. - Permiten hacer modificaciones dentro de los algoritmos sin necesidad de que se toquen o afecten todas sus partes. - Facilita enormemente la realizacin de pruebas al algoritmo.

- 21 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Se logra la portabilidad, que no es ms que el uso de un mismo subprograma en varios algoritmos principales. Esta portabilidad a su vez va a permitir que un programador pueda hacer uso de un subprograma que ha sido desarrollado por otro programador. - En el caso particular de que estos subprogramas sean llamados repetidamente dentro de un algoritmo van a permitir el ahorro de lneas de cdigo. En algunas literaturas se pueden encontrar a diferentes autores nombrando y explicando una serie de criterios para el buen diseo y construccin de los mdulos. Existen dos tipos de subprogramas: Funciones: Son subprogramas diseados para realizar una determinada tarea y que siempre tendr que devolver un valor como resultado, el cual se entregar a travs de su identificador. Aunque nosotros podemos disear nuestras propias funciones, vamos a encontrar que los lenguajes de programacin cuentan con un grupo de estas previamente implementadas. Las funciones dentro de los algoritmos son llamadas por su nombre y siempre como parte de una expresin. Procedimientos: Son subprogramas diseados solamente con el objetivo de realizar una determinada tarea. Estos, al contrario de las funciones, no van a devolver ningn valor. Tambin los lenguajes de programacin van a contar con un amplio nmero de procedimientos previamente implementados. Los procedimientos dentro de los algoritmos son llamados por su nombre como si fuera una instruccin. A pesar de ser bloques de cdigo independientes, ambos tipos de subprogramas van a mantener una comunicacin con el algoritmo principal. Esta va a ser posible a travs de los parmetros. Los parmetros de los subprogramas van a permitir el flujo de informacin entre estos y el algoritmo principal, dicho flujo podr ser en ambas direcciones. Por lo tanto en dependencia de la direccin en que viaje la informacin los parmetros se podrn clasificar en: Parmetros de entrada: Estos van a ser los datos que le son suministrados por el algoritmo principal al subprograma, este ltimo har uso de ellos durante su ejecucin. Parmetros de salida: Estos van a ser suministrados por el subprograma al algoritmo principal. En el caso de una funcin estos parmetros se utilizan para aumentar el nmero de salidas, ya que esta normalmente slo tiene una y es por su nombre. Parmetros de entrada-salida: Este tipo de parmetro es un caso especial de los de salida. El algoritmo principal aprovecha un parmetro de salida para enviar datos al subprograma, este ltimo lo procesa y altera su valor, producindose as el flujo en ambas direcciones. El smbolo utilizado en los diagramas de bloques para la representacin de los subprogramas dentro de un algoritmo es:

Ejercicios propuestos. Solucin lineal 1- Confeccione un algoritmo donde dada una cantidad X de naranjas imprima cuantas quedaran despus de extraerle Y. 2- Se asume que una caja tiene 5 caramelos. Elabore un algoritmo que calcule e imprima cuantos caramelos se vendieron en X cajas. 3- Construya un algoritmo que pida al usuario que piense un nmero y que le realice una serie de operaciones matemticas que se le irn indicando. Al final dicho algoritmo debe pedir el nmero resultante y ser capaz de mostrar el nmero pensado por el usuario. 4- Elabore un algoritmo que pida un nmero e imprima su antecesor y su sucesor. Solucin condicionada 1- Haga un algoritmo que entrado un nmero cualesquiera imprima si es positivo o negativo. 2- Confeccione un algoritmo donde entrado un nmero cualquiera imprima si es par o impar. 3- Dado tres nmeros, elabore un algoritmo que imprima si pueden ser valores de los ngulos internos de un tringulo. (Tenga en cuenta que la suma de los ngulos interiores de todo tringulo es de 180o) 4- Conocidas las longitudes de los tres lados de un tringulo, elabore un algoritmo que diga su clasificacin teniendo en cuenta lo siguiente: Escaleno: Todos sus lados son diferentes. Issceles: Dos lados iguales y uno diferente. Equiltero: Los tres lados iguales. 5- Conocidas las notas A y B de un estudiante, haga un algoritmo que:

- 22 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

a) Si A>B calcule y muestre el promedio. b) Si A<B calcule y muestre su diferencia. c) Si A=B calcule y muestre su producto. 6- Elabore un algoritmo que entrados dos nmeros imprima el mayor. 7- Confeccione un algoritmo que dados tres nmeros cualesquiera: a) Calcule e imprima la suma de ellos si son iguales. b) Calcule e imprima el producto de ellos si solamente dos de ellos son iguales. c) Si los tres son diferentes imprima el texto Son diferentes. Solucin con estructuras repetitivas 1- Elabore un algoritmo que imprima los primeros N nmeros pares. 2- Confeccionar un algoritmo que imprima los productos de la tabla del 5. 3- Entradas las seis notas de un alumno haga un algoritmo que imprima cual fue la mejor y cual la peor. 4- Se tiene una cantidad x de nmeros enteros comprendidos en el intervalo de 0 a 100. Se desea hacer un algoritmo que imprima el menor y el mayor. 5- Dada una cantidad de 80 nmeros disee un algoritmo que imprima cuantos de ellos son positivos y cuantos negativos. Solucin utilizando variables con subndices 1- Dada una lista con 50 nmeros, elabore un algoritmo que diga cuantos de ellos son positivos. 2- Conocidas dos listas, una con los nombres de los alumnos de una escuela y otra con sus respectivas notas de matemtica. Disee un algoritmo que muestre los nombres de los suspensos. 3- Se tiene una lista ordenada ascendentemente que contiene 20 nmeros. Confeccione un algoritmo que obtenga otra lista con los mismos nmeros pero ordenada descendentemente. 4- Tenemos una lista con x cantidad de nmeros positivos. Construya un algoritmo que nos muestre la diferencia entre el mayor y el menor de ellos. 5- Dada una lista de 100 nmeros positivos, construya un algoritmo que cree dos listas ms, una con los nmeros que sean menores que 10 y otra con los mayores de 10. 6- Se tiene una lista con 50 nmeros. Elabore un algoritmo que permita separar los que sean negativos en una lista y los positivos en otra.

Algoritmos bsicos
Durante el estudio de la programacin de mquinas computadoras, es muy til el conocimiento y el anlisis de algunos algoritmos bsicos que dan soluciones a pequeos problemas y que aunque a veces dichas soluciones no sean de las ms ptimas, por lo menos nos ayudan a comprender el principio de funcionamiento necesario. Contar con una biblioteca llena de estos pequeos mdulos es de mucha utilidad para todos los programadores, pues esto les permitir ir estudindolos a fondo as como podrn transformarlos con el fin de optimizarlos y lograr mejores rendimientos. En muchos casos veremos que se obtendrn varias versiones a partir de un mismo algoritmo, las cuales darn respuesta a las diferentes exigencias que se puedan presentar durante la solucin de nuestros problemas. Intercambio de valores entre dos variables. El primer algoritmo bsico que vamos a ver en este captulo es el elaborado para intercambiar el valor de dos variables. A continuacin tenemos las variables A y B y queremos cambiar entre s sus valores. Esto se muestra en el esquema 4.1 y como se puede ver, constituye un pequeo fragmento de algoritmo muy simple que nos muestra a simple vista como, para poder realizar esta tarea, tenemos que hacer uso de una tercera variable auxiliar (en este caso llamada AUX) debido al carcter destructivo que posee la asignacin de valores. Antes de asignar a la variable A el valor de B, es necesario haber guardado previamente el valor de esta primera ya que de lo contrario se perdera.

- 23 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Clculo de la media o promedio. Cuando trabajamos con listas de nmeros, muchas veces nos vamos a ver en la necesidad de realizar una serie de operaciones rutinarias. Una de ellas, muy utilizada, es la de hallar el valor promedio o media, que no es ms que sumar todos los valores y dividir este resultado por la cantidad total de ellos. El algoritmo bsico para el clculo del promedio va a variar en dependencia de cmo se obtengan los datos desde el exterior. Vamos a presentar como ejemplo para este clculo el caso de que los nmeros ya estn almacenados en memoria a travs de una variable con subndices. El fragmento de diagrama de bloques correspondiente se encuentra representado, de tres variantes diferentes, en el esquema 4.2.

Para poder calcular el valor promedio o media de un grupo de datos numricos es necesario conocer la cantidad de estos que van a ser procesados. En determinadas situaciones nos vamos a encontrar con el caso de que contamos ya de antemano con dicha cantidad o, al menos, tenemos la posibilidad de leerla desde algn dispositivo e incluso calcularla nosotros mismos. En los fragmentos del esquema 4.2 la cantidad de elementos almacenados se asume que est almacenada en la variable CANT. Bsqueda de valores extremos. Otra de las operaciones que se podrn ver muy a menudo con determinadas agrupaciones de datos numricos es la de hallar sus valores mximo y mnimo. Los algoritmos para cada una de estas operaciones van a ser muy sencillos y prcticamente iguales. El algoritmo del esquema 4.3.a permite hallar el valor mximo, mientras que el representado en 4.3.b permite hallar el valor mnimo. Se puede observar que la nica diferencia entre ambos lo constituye el signo de comparacin en la instruccin alternativa o de condicin que aparece en el interior del ciclo repetitivo.

- 24 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Ordenamiento. El ordenamiento de los datos constituye un proceso muy comn no slo desde el punto de vista de la programacin, sino tambin en la vida real. A diario nos vamos a poder encontrar con innumerables casos en los cuales se hace necesaria la tarea de presentar un grupo mayor o menor de datos de forma ordenada con el fin de realizar sobre estos alguna accin. El ordenamiento puede ser de muchas formas. Segn facilite la accin que se vaya a efectuar, puede ser por orden alfabtico (en el caso de que se trate de palabras), ascendente o descendente, agrupado, y dems. Un ejemplo prctico que podemos observar es la gua de telfonos. En ella aparecen todos los nmeros telefnicos ordenados segn varios criterios. En la informtica tambin nos vamos a ver en determinados momentos obligados a realizar ordenamientos a grupos especficos de datos. Aunque durante el procesamiento de la informacin sea necesario a veces efectuar dicha tarea, va a ser en la presentacin de los datos donde se har ms comn el uso del ordenamiento

- 25 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Para el ordenamiento de los datos vamos a poder contar con algunas variantes de algoritmos. El esquema 4.4 nos muestra el mtodo ms ampliamente conocido por todos los programadores, el llamado mtodo de ordenamiento de burbuja (bubble). Este mtodo de ordenamiento presenta como caracterstica principal su fcil comprensin as como lo sencillo de su programacin, constituyendo esto una gran ventaja con relacin a todos los dems mtodos existentes. No obstante presenta la notable desventaja de que es considerado probablemente el ms deficiente de todos ellos. Aqu su diseo se basa en dos ciclos repetitivos anidados, o sea, uno dentro de otro. El ciclo de afuera es por condicin y el de adentro es por conteo.

- 26 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

En el esquema 4.5 se puede apreciar el mismo ordenamiento de tipo burbuja pero con alguna mejora. Se adiciona la variable T que va a permitir interrumpir la bsqueda cuando la lista est ordenada y todava falten comparaciones por ejecutarse. Otro mtodo de ordenamiento lo podemos ver en el fragmento de algoritmo del esquema 4.6. Este es el llamado mtodo de insercin simple, el cual es mejor que el de burbuja y su eficiencia va a ser directamente proporcional al nivel de ordenamiento que presenten los datos.

- 27 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

El esquema 4.7 nos muestra el fragmento de algoritmo que representa otro tipo de ordenamiento, este es el llamado ordenamiento de seleccin o de empuje hacia abajo. En este mtodo de ordenamiento los elementos sucesivos se van a seleccionar y colocar en una posicin apropiada. El nmero ms grande de la lista es colocado en la posicin final, despus acto seguido, se coge al segundo ms grande y se coloca en el final menos uno y as sucesivamente.

- 28 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Bsqueda. La bsqueda de uno o varios elementos dentro de una lista de datos es una actividad muy comn dentro del campo de la computacin. Para el programador va a ser de mucha importancia el estudio, anlisis y comprensin de los diferentes mtodos y tcnicas existentes. El algoritmo de bsqueda ms simple es el definido como bsqueda secuencial, el cual despus de definido el argumento a buscar, recorre la lista completa comenzando por el primer elemento. En el esquema 4.8 podemos ver uno de los algoritmos bsicos que representan a este tipo de bsqueda. Este diseo se basa en el uso de un ciclo repetitivo por condicin donde se usan dos variables controladoras que son I y E. La cantidad de elementos contenidos en la lista donde se realiza la bsqueda est almacenada en N y el elemento a buscar lo guarda la variable K. En el caso de que dicho elemento buscado sea encontrado entonces en la variable B se guardara el valor del subndice o lo que es lo mismo, la posicin que ocupa este dentro de la lista ya que como se puede apreciar los datos se encuentran almacenados dentro de una variable con subndices.

- 29 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Para realizar una bsqueda secuencial en una lista cualquiera de datos no es necesario que estos estn ordenados. Este mtodo no es muy eficiente ya que la cantidad de comparaciones que se harn estar en correspondencia con la posicin que ocupe dentro de la lista el elemento buscado. En el caso de que dicho elemento no exista o se encuentre al final de la lista entonces el algoritmo realizar tantas comparaciones como elementos contenga la misma. Otro mtodo mucho ms eficiente que el anterior lo constituye el de bsqueda binaria que est representado en el esquema 4.9. Este algoritmo s necesita de forma obligatoria para su ejecucin que los datos se encuentren de forma ordenada dentro de la lista.

- 30 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Implementacin de una pila esttica. La pila (conocida en muchas literaturas con su nombre en ingls stack) constituye una estructura simple de datos y desempea un importantsimo papel en todos los lenguajes de programacin a la vez que es considerado su concepto como uno de los ms tiles dentro de la ciencia de la computacin. Al igual que las variables con subndices, la pila es una coleccin de datos ordenados. Aunque los datos dentro de la pila se organicen de forma anloga a las variables con subndices, la forma de operar con ellos no va a ser igual. En ella solamente se podrn realizar dos operaciones: insercin y extraccin de datos, las cuales se efectuarn nicamente por uno de los extremos llamado parte o extremo superior de la pila. Veamos el esquema 4.10 donde se ha tratado de representar la estructura de una pila conteniendo cinco valores. Para que resulte ms fcil el entendimiento de la estructura y funcionamiento de una pila podemos hacernos la idea de que tenemos un grupo de libros colocados unos encima de otros. Para agregar ms libros al grupo tendramos que irlos colocando en el extremo superior uno a uno y en caso de querer extraer alguno habra que ir quitando libros, tambin de dicho extremo, hasta llegar al que queremos coger. Como podemos ver, para realizar ambas operaciones siempre ser necesario utilizar un solo extremo de la pila, mientras el otro permanece inmvil. El extremo de la pila que no se mueve se llama parte o extremo inferior.

- 31 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Pasemos ahora a representar de forma grfica las operaciones de insercin y extraccin que pueden ocurrir en una pila y utilizaremos para esto el esquema 4.11.

En el esquema 4.11.a podemos ver una pila conteniendo 3 datos, en este caso el extremo superior (representado por una flecha) est indicando el ltimo elemento que ha entrado a dicha estructura el cual est representado por la letra C. Si seguimos agregando ms datos (esquemas 4.11.b y 4.11.c) vemos entonces que la pila crece y su extremo superior se desplaza hacia arriba para mantenerse indicando al ltimo dato que haya entrado. El esquema 4.11.d nos muestra la operacin inversa o sea, la extraccin de un dato (en este caso el representado por E). Ah se puede observar como ahora el extremo superior ha bajado hacia el dato siguiente. Hasta ahora se ha podido apreciar como funcionan las operaciones de insercin y extraccin en la pila cuando adicionamos un dato o cuando extraemos el ltimo que ha entrado. Qu pasara si quisiramos extraer un dato entrado con anterioridad? El esquema 4.11.e ilustra el resultado de este proceso ya que se puede ver como, para poder extraer el dato representado por C, hemos tenido que extraer tambin el representado por D. Si en vez de querer la extraccin de C hubisemos deseado el dato representado por A, entonces hubisemos tenido que extraer los datos D, C y B. Aunque la pila es realmente de naturaleza dinmica (o sea que su tamao va a variar de acuerdo a las acciones de insercin y extraccin) tambin es posible implementarla en nuestros algoritmos de forma esttica para un mejor estudio y comprensin de su funcionamiento. Para ello vamos a utilizar la variable con subndice o variable de tipo arreglo con longitud fija. En la prctica los programadores utilizan las variables de tipo puntero y las estructuras de listas enlazadas para crear las pilas ya que esto les permite ir ocupando realmente los espacios de memoria a medida que guardan los datos y liberando dichos espacios a medida que los sacan. Lo primero que tenemos que hacer para crear nuestra pila esttica es definir el tamao que tendr, este siempre estar en dependencia de las necesidades reales de nuestro problema a resolver. En este caso, para nuestro pequeo ejemplo demostrativo con una variable de arreglo de longitud de 10 nmeros ser ms que suficiente. Como se explic anteriormente, en una pila solamente podemos realizar dos operaciones que son insertar y extraer un elemento, veamos entonces como se implementa la primera de dichas operaciones.

- 32 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

En el esquema 4.12 se puede apreciar el algoritmo que nos va a permitir poder insertar un elemento nuevo en nuetra pila demostrativa. Aqu la pila se ha representado por la variable con subndice A, el valor nuevo a guardarcon la variable N y la parte o extremo superior se ha decidido representar con la variable I. La primera operacin es leer el valor que se quiere guardar (como se mencion anteriormente representado por la variable N), acto seguido se realiza un chequeo para ver si es posible realizar esta operacin y es que como la capacidad con que definimos nuestra pila esttica es de 10 elementos lo que se hace no es ms que ver si su extremo superior es igual a dicha capacidad predefinida. De cumplirse lo anterior entonces no nos quedara otra opcin que abortar la operacin de insercin y comunicar que la misma no se puede realizar por estar la pila llena. En el caso contrario, o sea, que la variable indicadora del extremo superior sea menor que la capacidad de la pila entonces se incrementara en 1 dicho extremo y guardaramos el valor en la nueva posicin obtenida. Cabe mencionar aqu que cuando nos encontremos trabajando con pilas dinmicas, como estas no tienen un tamao fijo en cuanto al nmero de elementos a guardar se refiere, el chequeo tambin es posible realizarlo, el cual se har comprobando la capacidad de memoria disponible para este fin. Tcnicas de optimizacin de algoritmos. Lo que ms desean los usuarios que se enfrentan a trabajar frente a las computadoras con nuestros programas es que estos se ejecuten da tras da sin ningn tipo de fallo. Pero esto no va a ser suficiente ya que muchas veces van a exigir que dicha ejecucin sea tambin con rapidez. Para lograr la perfeccin en nuestros algoritmos es necesario conocer y dominar las tcnicas de optimizacin existentes, las cuales nos van a permitir que los programas se ejecuten ms rpido y ocupen menos espacio en los diferentes medios de almacenamientos a usar. Todo esto, por supuesto, sin que afecte para nada las funciones que realizan. Hay autores que plantean la necesidad de optimizar solamente cuando el usuario ve la mejora y de no ser as ven el proceso como un gasto intil de esfuerzo. Es por eso que recomiendan ante todo, a la hora de optimizar, que el programador aprenda a seleccionar los fragmentos de cdigo que valga la pena. Pensando y viendo las cosas desde otro punto de vista, es bueno decir que todas las tareas que se realicen a favor de mejorar un algoritmo requieren un estudio y anlisis muy grande por parte del programador y aunque el usuario no note o no se percate de los cambios, la actividad realizada nunca ser intil. No se puede ver la confeccin de un algoritmo solamente desde la perspectiva de que va a ser til solo a aquellos que harn uso de l como usuarios finales, hay que ver tambin la importancia que representa esto para los programadores como una va de capacitacin y superacin. Ante cada nuevo programa al que se enfrenta un programador se presenta la oportunidad de adquirir nuevos conocimientos, de mejorar su estilo de disear y programar algoritmos, de ir pudiendo optimizar fragmentos de cdigos anteriormente confeccionados. Recordemos que la tarea de optimizacin de los algoritmos ha sido siempre obra de personal con experiencia pues es ms difcil que la programacin convencional ya que consiste en teniendo la solucin a un problema determinado buscar otra ms rpida o ms corta (a veces ambas a la vez). Las optimizaciones aritmticas son muy comunes y a veces resultan ser las ms fciles de lograr ya que para los programadores principiantes basta con tener conocimiento y dominio de algunas reglas elementales, estas son: 1- Las operaciones aritmticas de suma y resta se ejecutan ms rpido que las de multiplicacin y divisin. 2- La operacin aritmtica de divisin es la ms lenta de todas las operaciones. 3- Las operaciones aritmticas donde intervienen nmeros enteros se ejecutan ms rpido que aquellas donde intervienen nmeros con lugares decimales (siempre que sean las mismas operaciones), o sea que el tipo de datos influye en la velocidad de los clculos. 4- La operacin aritmtica de multiplicacin con nmeros decimales se ejecuta ms rpido que la operacin de divisin con nmeros enteros.

- 33 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

5- La operacin aritmtica ms lenta de todas es la divisin con nmeros decimales. 6- En las operaciones aritmticas donde intervengan varias constantes numricas seguidas se pueden calcular y presentar como una sola. En muchos casos que usamos operaciones aritmticas y clculos de diferentes tipos dentro de nuestros algoritmos es posible hacer sencillas optimizaciones solamente haciendo uso de las reglas anteriores. Veamos esto con un ejemplo, supongamos que dentro de un algoritmo tenemos la siguiente operacin matemtica:

Aplicando las reglas 2 y 4 tratemos de cambiar esta operacin de divisin por otra que se ejecute ms rpido pero que no nos altere el resultado. Lo anterior, formulado matemticamente, nos quedara de la siguiente forma:

Convirtiendo esto en una multiplicacin se obtendra:

Ahora que ya est convertido en una operacin aritmtica de ms rpida ejecucin por la mquina lo llevamos nuevamente al algoritmo quedando de la siguiente forma:

Ahora podemos aplicar la regla 6 para resolver la operacin de divisin de constantes numricas y nos quedara el resultado final que sustituiramos en nuestro algoritmo:
Marca el inicio o fin del algoritmo.

Aqu se aplic la regla de las matemticas que plantea: dividir un nmero por otro nmero entero es lo Conectores que enlazan los diferentes smbolos. Nos mismo que multiplicar al primero por la inversa del segundo. El proceso de optimizacin es posible aplicarlo tambin en las diferentes instrucciones de nuestro algoritmo. del algoritmo. indican el sentido de ejecucin

Anexo
Representa la lectura de datos entrados al algoritmo. ANEXO A Simbologa de los diagramas de bloques Representa la lectura de datos entrados al algoritmo.

Indica una o ms operaciones realizadas dentro del algoritmo. Representa la impresin de los datos que son usados como salida.

Simboliza un punto condicional dentro del algoritmo.

Representa la ejecucin de un subprograma.

- 34 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com
Conector

www.monografias.com

ANEXO B Respuestas comentadas a 2 de los ejercicios propuestos del captulo 3 Soluciones lineales Ejercicio 1 Este es un ejercicio sumamente fcil donde solamente interviene una operacin matemtica que es la resta. De esto nos damos cuenta ya que en el ejercicio se menciona la palabra extraerle. Una posible solucin es la siguiente:

Ejercicio 2 Este ejercicio se parece mucho al anterior con la diferencia de que solamente cuenta con un dato primario y la operacin matemtica que es necesario utilizar es la multiplicacin.

- 35 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com

www.monografias.com

Obsrvese que aqu se hace uso de un dato de tipo constante que es el nmero 5. Para que se tenga una clara comprensin de como se maneja este tipo de dato dentro de los algoritmos, mostramos dos posibles soluciones: Anlisis de los datos para la solucin (a)

Autor: Higinio Belln Corvo hbcsoft@gmail.com

- 36 -Para ver trabajos similares o recibir informacin semanal sobre nuevas publicaciones, visite www.monografias.com