Está en la página 1de 18

Programacin y Algoritmia

Un enfoque prctico y didctico para el diseo de algoritmos

1 Conceptos bsicos Lic. Oscar Ricardo Bruno, MDU

Contenido
Conceptos bsicos _____________________________________________________ 3 Introduccin:_______________________________________________________ 3 Informtica ________________________________________________________ 3 Programacin ______________________________________________________ 3 Partes de un programa_______________________________________________ 4 Dato ______________________________________________________________ 4 Abstraccin ________________________________________________________ 5 Modelizacion _______________________________________________________ 5 Precondicin _______________________________________________________ 5 Poscondicin _______________________________________________________ 5 Especificacin ______________________________________________________ 5 Lenguaje de programacin ___________________________________________ 5 Del problema real a su solucin por computadoras _______________________ 5 Caractersticas de un algoritmo _______________________________________ 8 Propiedades de los algoritmos _________________________________________ 9 Eficiencia de un algoritmo ____________________________________________ 9 Complejidades ms comunes_________________________________________ 10 Lxico y algoritmo _________________________________________________ 10 Estructura de un algoritmo __________________________________________ 10 Proceso Computacional _____________________________________________ 11 Representaciones grficas de algoritmos__________________________________ 16 Diagrama de Nassi-Sneiderman ______________________________________ 16 Diagramas de Jackson ______________________________________________ 16 Diagramas de Lindsay.______________________________________________ 17 Llaves de Warniel __________________________________________________ 18 Notacin Algoritmica _______________________________________________ 18

Conceptos bsicos
Objetivos de aprendizaje Dominando los temas del presente capitulo Usted podr. 1. Conocer la terminologa propia de la disciplina. 2. Definir y comprender claramente conceptos especficos muchas veces mal definidos 3. Comprender el valor de la abstraccin. 4. Dar valor a la eficiencia en las soluciones 5. Introducirse en la notacin algortmica y a la forma e encarar los problemas de programacin Introduccin: Se introducen conceptos fundamentales de algoritmia y programacin, los que servirn de base para el desarrollo de los temas a trataren materias de algoritmos y estructurad e datos. Informtica Disciplina del estudio sistematizado de los procesos algortmicos que describen y transforman informacin, su teora, anlisis, diseo, eficiencia, implementacin y aplicacin. La informtica es una disciplina cientfica, matemtica y una ingeniera; tiene tres formas de pensar propias: Teora, abstraccin y diseo. Las tres se complementan para la resolucin de la mayora de los problemas. Teora: Con el pensamiento terico se describen y prueban relaciones. Abstraccin: Recoleccin de datos y formulacin de un modelo, se eliminan los detalles irrelevantes. Diseo: se tienen en cuenta requisitos, especificaciones y se disean o analizan mecanismos para resolver problemas. Supone llevar a la prctica los resultados tericos. Programacin La programacin es una actividad transversal asociada a cualquier rea de la informtica, aunque es la ingeniera del software el rea especfica que se ocupa de la creacin del software. En principio la programacin se vea como un arte, solo era cuestin de dominar un lenguaje de programacin y aplicar habilidades personales a la resolucin de problemas, casi en forma artesanal. El software era visto como algo desarrollado a travs de la intuicin sin la utilizacin de mtodos de diseo con tcnicas para proceder en forma sistemtica y sin ningn control de su desarrollo. Con el reconocimiento de la complejidad del desarrollo del software naci la ingeniera del software. Se considero que al igual que cualquier otra disciplina la creacin de software deba ser reconocida como una actividad de ingeniera que requera la aplicacin de slidos principios cientficos. La ingeniera del software es la disciplina que se ocupa de la aplicacin del conocimiento cientfico al diseo y construccin de programas de computacin y a todas las actividades asociadas de documentacin, operacin y mantenimiento, lo que proporciona un enfoque sistemtico. La programacin es una actividad en la que la creatividad juega un rol primordial

Programa: Conjunto de instrucciones, ejecutables sobre una computadora, que permite cumplir una funcin especifica. Se asocia al programa con una determinada funcin o requerimiento a satisfacer por la ejecucin del conjunto de instrucciones que lo forman. En general alcanzan su objetivo en tiempo finito, aunque hay excepciones, por ejemplo los programas de control de un sistema de alarma poseen requerimiento de tiempo infinito. Un programa sin errores que se ejecuta puede no ser correcto si no cumple con los requerimientos. Definicin Programa: conjunto de instrucciones no activas almacenadas en un computador, se vuelve tarea a partir de que se selecciona para su ejecucin y permite cumplir una funcin especfica. Un proceso es un programa en ejecucin. En principio las tareas ms importantes a la que se enfrenta quien debe escribir programas en computadoras son: 1. Definir el conjunto de instrucciones cuya ejecucin ordenada conduce a la solucin. 2. Elegir la representacin adecuada de los datos del problema. La funcin esencial del especialista informtico es explotar el potencial de las computadoras para resolver situaciones del mundo real. Para esto debe analizar los problemas del mundo real, ser capaz de sintetizar sus aspectos principales y poder especificar la funcin objetivo que se desee. Posteriormente debe expresar la solucin en forma de programa, manejando los datos del mundo real mediante una representacin valida para una computadora. Partes de un programa Los componentes bsicos son las instrucciones y los datos. Las instrucciones o sentencias representan las operaciones que se ejecutaran al interpretar el programa. Todos los lenguajes de programacin tienen un conjunto mnimo de operaciones que son las de asignacin, seleccin e iteracin. Un lenguaje con solo estas tres instrucciones permite escribir cualquier algoritmo. Los datos son valores de informacin de los que se necesita disponer, en ocasiones transformar para ejecutar la funcin del programa. Los datos estn representados simblicamente por un nombre que se asocia con una direccin nica de memoria. El contenido de la direccin de memoria correspondiente a un dato constante se asigna solo una vez y solo puede ser modificado en una nueva compilacin. En cambio el contenido o valor de la direccin de memoria correspondiente a un dato variable puede ser asignado o modificado en tiempo de ejecucin. Un programa se corresponde con una transformacin de datos. A partir de un contexto determinado por las precondiciones. El programa transforma la informacin debiendo llegar al resultado esperado produciendo el nuevo contexto caracterizado por las poscondiciones. Dato Representacin de un objeto el mundo real mediante el cual se pueden modelizar aspectos de un problema que se desea resolver con un programa en una computadora.

Definicin Dato representacin de un objeto el mundo real mediante el cual se pueden modelizar aspectos de un problema que se desea resolver con un programa en una computadora. <dato> -> <objeto><atributo><valor> Abstraccin Proceso de anlisis del mundo real con el propsito de interpretar los aspectos esenciales de un problema y expresarlo en trminos precisos. Modelizacion Abstraer un problema del mundo real y simplificar su expresin, tratando de encontrar los aspectos principales que se pueden resolver, requerimientos, los datos que se han de procesar y el contexto del problema. Precondicin Informacin conocida como verdadera antes de iniciar el programa. Poscondicin Informacin que debiera ser verdadera al cumplir un programa, si se cumple adecuadamente el requerimiento pedido. Especificacin Proceso de analizar problemas del mundo real y determinar en forma clara y concreta el objetivo que se desea. Especificar un problema significa establecer en forma univoca el contexto, las precondiciones el resultado esperado, del cual se derivan las poscondiciones. Lenguaje de programacin Conjunto de instrucciones permitidas y definidas por sus reglas sintcticas y su valor semntico para la expresin de soluciones de problemas. Del problema real a su solucin por computadoras Analizando un problema del mundo real se llega a la modelizacin del problema por medio de la abstraccin. A partir del modelo se debe elaborar el anlisis de la solucin como sistema, esto significa la descomposicin en mdulos. Estos mdulos deben tener una funcin bien definida. La modularizacin es muy importante y no solo se refiere a los procesos a cumplir, sino tambin a la distribucin de los datos de entrada, salida y los datos intermedios necesarios para alcanzar la solucin. Estudio de los datos del problema. Cada mdulo debe tener un proceso de refinamiento para expresar su solucin en forma ordenada, lo que llevara a la construccin del algoritmo correspondiente. A partir de los algoritmos se pueden escribir y probar programas en un lenguaje determinado y con un conjunto de datos significativos. Etapas de resolucin de problemas con computadoras. 1. Anlisis del problema: en su contexto del mundo real.

2. Diseo de la solucin: Lo primero es la modularizacin del problema, es decir la descomposicin en partes con funciones bien definidas y datos propios estableciendo la comunicacin entre los mdulos. 3. Especificacin del algoritmo: La eleccin adecuada del algoritmo para la funcin de cada modulo es vital para la eficiencia posterior. 4. Escritura del programa: Un algoritmo es una especificacin simblica que debe convertirse en un programa real sobre un lenguaje de programacin concreto. 5. Verificacin: una vez escrito el programa en un lenguaje real y depurado los errores sintcticos se debe verificar que su ejecucin conduzca al resultado deseado con datos representativos del problema real. Programacin modular programacin estructurada Se dice modular porque permite la descomposicin del problema en mdulos y estructurada solo permite la utilizacin de tres estructuras: Asignacin, seleccin, repeticin. Algoritmo El termino algoritmo es en honor del matemtico rabe del siglo IX, Abu Jafar Mohamed ibn Musa Al Khowrizm. Refiere conjunto de reglas, ordenadas de forma lgica, finito y preciso para la solucin de un problema, con utilizacin o no de un computador. En la actualidad al trmino se lo vincula fuertemente con la programacin, como paso previo a la realizacin de un programa de computacin aunque en realidad es una metodologa de resolucin presente en muchas de las actividades que se desarrolla a lo largo de la vida. Desde los primeros aos de escuela se trabaja con algoritmos, en especial en el campo de las matemticas. Los mtodos utilizados para sumar, restar, multiplicar y dividir son algoritmos que cumplen perfectamente las caractersticas de precisin, finitud, definicin y eficiencia. Para que el algoritmo pueda ser fcilmente traducido a un lenguaje de programacin y luego ser ejecutado la especificacin debe ser clara, precisa, que pueda ser interpretada con precisin y corresponda a pocas acciones, si esto no ocurre ser necesario acudir a desarrollar un mayor nivel de refinamiento. La utilizacin de refinamientos sucesivos es lo que permite alcanzar la solucin modular que se propone. Diseo modular, entonces, es la aplicacin del criterio de refinamientos sucesivos, partiendo de un plan de accin, determinando que hacer, por aplicacin de los conocimientos estratgicos de resolucin pasando luego al como hacerlo con los conocimientos tcticos para la realizacin del algoritmo. La programacin de algoritmos representa un caso de resolucin de problemas que requiere representacin mental del mundo real, adaptacin para tener una solucin computable y criterio para elegir una alternativa eficiente de implementacin. Cuando se analiza un problema, particularmente de programacin, y ste es difcil de describir, el plan de accin recomendable para alcanzar la solucin es comenzar trazando un esbozo de las formas ms gruesas, para que sirvan de andamio a las dems; aunque algunas de ellas se deban cambiar posteriormente. Despus, se agregan los detalles, (obtenindose el algoritmo refinado), para dotar a estos esqueletos de una estructura ms realista.

Durante la tarea de integracin final, se descartan aquellas primeras ideas provisionales que ya no encajan en la solucin. Por lo que, hasta que no se haya visto el conjunto global es imposible encontrarle sentido a ninguna de las partes por s solas. Siempre es mejor explicar un misterio en trminos de lo que se conoce, pero cuando esto resulta difcil de hacer, se debe elegir entre seguir tratando de aplicar las antiguas teoras, o de descartarlas y probar con otras nuevas. Siguiendo este anlisis, se define como reduccionistas a aquellas personas que prefieren trabajar sobre la base de ideas existentes, y como renovadores a los que les gusta impulsar nuevas hiptesis. En programacin debe encontrarse un equilibrio entre ambas posturas. La programacin como toda actividad que requiere creatividad necesita que se produzca un salto mental que se puede sintetizar como seala David Perkins en: 1. Larga bsqueda, se requiere esfuerzo en analizar y buscar. 2. Escaso avance aparente: el salto mental sobreviene tras un avance que parece escaso o no muy evidente, pero sobreviene. 3. Acontecimiento desencadenante: El tpico proceso de hacer clic comienza con un acontecimiento que lo desencadena. 4. Chasquido cognitivo: De pronto aparece la solucin la que sobreviene con rapidez que hace que las piezas encajen con precisin, aun cuando sea necesario todava ajustar algunos detalles. Pero la idea generadora apareci. 5. Transformacin. Este avance nos va modificando nuestro mundo mental. En sntesis, la practica del salto de pensamiento requiere en primer lugar de buscar analogas, en segundo lugar juegan un papel importante las conexiones lgicas, formulacin de una pregunta crucial ocupa un papel decisivo. El repertorio de acciones tras el salto del pensamiento se expande para incluir no solo la analoga sino una extrapolacin lgica y la formulacin de la pregunta adecuada Para encontrar una solucin muchas veces se necesita desplazarse bastante por el entorno adecuado. Conforme a esto Thomas Edison declaro que la invencin significa 99% de transpiracin y 1% de inspiracin, en contraposicin con Platn que sostena que las soluciones aparecen por inspiracin divina. Muchos problemas son razonables, cabe razonarlos paso a paso para alcanzar la solucin. Otros son irrazonables no se prestan a un a reflexin por etapas. Definicin Algoritmo Especificacin rigurosa (debe expresarse en forma univoca) de la secuencia de pasos, instrucciones, a realizar sobre un autmata para alcanzar un resultado deseado en un tiempo finito. Esto ltimo supone que el algoritmo empieza y termina, en el caso de los que no son de tiempo finito (ej. Sistemas en tiempo real) deben ser de nmero finito de instrucciones. En definitiva un algoritmo es una especificacin ordenada de la solucin a un problema de la vida real. Son el fundamento de la programacin de computadores en el paradigma de programacin imperativo. Bajo este paradigma desarrollar un programa significa indicarle al computador, con precisin, sin ambigedad y en un lenguaje que este pueda entender, todos y cada uno de los pasos que debe ejecutar para lograr el objetivo propuesto. Previo a la traduccin en un lenguaje de programacin es necesario poder entender el problema, conocer las pre condiciones, establecer cual debe ser la pos condicin, o aquello que debe ser cierto al finalizar la ejecucin del algoritmo, en definitiva entender claramente Que es lo que se debe hacer para luego avanzar en Como hacerlo. Aqu

debe utilizarse todas las herramientas al alcance de la mano para el desarrollo del algoritmo como paso previo a la solucin del problema por el computador. Existen varias tcnicas para representar formalmente un algoritmo, una descriptiva llamada pseudo cdigo, y otras graficas como los diagrama de flujo, diagrama Nassi Sneiderman, Diagramas de Lindsay, diagramas de Jackson, entre otros, en este caso se presentara una notacin algortmica similar a la presentada por Piere Scholl en el texto Esquemas algortmicos fundamentales: Secuencia e iteracin.

Definicin Algoritmo: Secuencia finita de instrucciones, reglas o pasos que describen en forma precisa las operaciones que una computadora debe realizar para llevar a cabo una tarea en tiempo finito [Knuth, 1968]. Descripcin de un esquema de comportamiento expresado mediante un repertorio finito de acciones y de informaciones elementales, identificadas, bien comprendidas y realizables a priori. Este repertorio se denomina lxico[Scholl, 1988]. Esta formado por reglas, pasos e instrucciones. Las reglas especifican operaciones. La computadora es el agente ejecutor. La secuencia de reglas y la duracin de la ejecucin son finitas. Caractersticas de un algoritmo Un algoritmo debe tener al menos las siguientes caractersticas: 1. Ser preciso: esto significa que las operaciones o pasos del algoritmo deben desarrollarse en un orden estricto, ya que el desarrollo de cada paso debe obedecer a un orden lgico. 2. Ser definido. Ya que en el rea de programacin, el algoritmo es el paso previo fundamental para desarrollar un programa, es necesario tener en cuenta que el computador solo desarrollar las tareas programadas y con los datos suministrados; es decir, no puede improvisar y tampoco inventar o adivinar el dato que necesite para realizar un proceso. Por eso, el algoritmo debe estar plenamente definido; esto es, que cuantas veces se ejecute, el resultado depende estrictamente de los datos suministrados. Si se ejecuta con un mismo conjunto de datos de entrada, el resultado deber ser siempre el mismo. 3. Ser finito: esta caracterstica implica que el nmero de pasos de un algoritmo, por grande y complicado que sea el problema que soluciona, debe ser limitado. Todo algoritmo, sin importar el nmero de pasos que incluya, debe llegar a un final. Para hacer evidente esta caracterstica, en la representacin de un algoritmo siempre se incluyen los pasos inicio y fin. 4. Presentacin formal: para que el algoritmo sea entendido por cualquier persona interesada es necesario que se exprese en alguna de las formas comnmente aceptadas; pues, si se describe de cualquier forma puede no ser muy til ya que solo lo entender quien lo dise. Las formas de presentacin de algoritmos son: el pseudo cdigo, diagrama de flujo y diagramas de Nassi/Schneiderman, entre otras. En esta publicacin se propondr una notacin algortmica y se darn las equivalencias entre la propuesta y las existentes y tambin con las sentencias de los lenguajes de programacin, en particular Pascal y C. 5. Correccin: el algoritmo debe ser correcto, es decir debe satisfacer la necesidad o solucionar el problema para el cual fue diseado. Para garantizar que el

algoritmo logre el objetivo, es necesario ponerlo a prueba; a esto se le llama verificacin o prueba de escritorio. 6. Eficiencia: hablar de eficiencia o complejidad de un algoritmo es evaluar los recursos de cmputo que requiere para almacenar datos y para ejecutar operaciones frente al beneficio que ofrece. En cuanto menos recursos requiere ser ms eficiente el algoritmo. La vida cotidiana est llena de soluciones algortmicas, algunas de ellas son tan comunes que no se requiere pensar en los pasos que incluye la solucin. La mayora de las actividades que se realizan diariamente estn compuestas por tareas ms simples que se ejecutan en un orden determinado, lo cual genera un algoritmo. Muchos de los procedimientos utilizados para desarrollar tareas cotidianas son algortmicos, sin embargo, esto no significa que todo lo que se hace est determinado por un algoritmo. El primer paso en el diseo de un algoritmo es conocer la temtica a tratar, el segundo ser pensar en las actividades a realizar y el orden en que deben ejecutarse para lograr el objetivo, el tercero y no menos importante es la presentacin formal. Propiedades de los algoritmos 1. Especificacin precisa de la entrada: El algoritmo debe dejar claro el nmero y tipo de datos de entrada y las condiciones iniciales que deben cumplir esos valores de entrada para conseguir que las operaciones tengan xito. 2. Especificacin precisa de cada instruccin: cada etapa del algoritmo debe estar definida con precisin, no debe haber ambigedades sobre las acciones que se deben ejecutar en cada momento. 3. Un algoritmo debe ser exacto y correcto: Un algoritmo se espera que resuelva un problema y se debe poder demostrar que eso ocurre. Si las condiciones de entrada se cumplen y se ejecutan todos los pasos el algoritmo entonces debe producir la salida deseada. 4. Un algoritmo debe tener etapas bien definidas y concretas, un nmero finito de pasos, debe terminar y debe estar claro la tarea que el algoritmo debe ejecutar. 5. Debe ser fcil de entender, codificar y depurar. 6. Debe hacer uso eficiente de los recursos de la computadora Finitud: en longitud y duracin. Precisin: Determinar sin ambigedad las operaciones que se deben ejecutar. Efectividad: las reglas pueden ejecutarse sin el ordenador obtenindose el mismo resultado. Generalidad: Resolver una clase de problema y no un problema particular. Entradas y salidas: puede tener varias entradas pero una sola salida, el resultado que se debe obtener. Eficiencia de un algoritmo Se pueden tener varias soluciones algortmicas para un mismo problema, sin embargo el uso de recursos y la complejidad para cada una de las soluciones puede ser muy diferente. La eficiencia puede definirse como una mtrica de calidad de los algoritmos asociada con la utilizacin optima de los recursos del sistema de cmputo donde se ejecutara el algoritmo, su claridad y el menor grado de complejidad que se pueda alcanzar. Hacer todo tan simple como se pueda, no ms (Albert Einstein). La eficiencia como factor espacio temporal debe estar estrechamente relacionada con la buena calidad, el funcionamiento y la facilidad del mantenimiento.

Medidas de eficiencia para N = 10.0000 Eficiencia Logartmica Log 2 N Lineal N Logartmica lineal N * Log 2 N Cuadrtica N2 Poli nmica Nk Exponencial 2N

Iteraciones 14 10.000 140.000 10.000 2 10.000 K 2 10.000

Tiempo estimado Microsegundos 0.1 segundo 2 segundos 15-20 minutos Horas Inmedible

Complejidades ms comunes 1. Complejidad constante: se expresa como O(1). Se encuentra en algoritmos sin ciclos, por ejemplo en un intercambio de variables. 2. Complejidad logartmica: Es una complejidad eficiente, la bsqueda binaria tiene esta complejidad. 3. Complejidad lineal: se encuentra en los ciclos simples. 4. Complejidad logartmica lineal: Los mejores algoritmos de ordenamiento tienen esta complejidad. 5. Complejidad cuadrtica: Aparece en el manejo de matrices de dos dimensiones, generalmente con dos ciclos anidados. 6. Complejidad cbica: Aparece en el manejo de matrices de tres dimensiones, generalmente con tres ciclos anidados. 7. Complejidad exponencial: es la complejidad de algoritmos recursivos. Lxico y algoritmo Para escribir un algoritmo deben seguirse un conjunto de pasos bsicos 1. Comprender el problema 2. Identificar los elementos a incluir en el lxico: constantes, tipos, variables y acciones. 3. Encontrar la forma de secuenciar las acciones para obtener el resultado, esto es, alcanzar las poscondiciones a partir de un estado inicial que cumple con la precondicin. Para establecer el orden de las acciones los lenguajes de programacin proporcionan mecanismos de composicin: Secuenciacin, anlisis de casos, iteracin y recursion. 4. Al organizar las acciones en el tercer paso puede ocurrir que se detecte que faltan elementos en el lxico o que algn aspecto del problema no ha sido bien comprendido lo cual requerira volver a los pasos anteriores. 5. Nunca la solucin aparece en el primer intento, en general aparece en un proceso cclico, entonces se debe: 6. Escribir el lxico, a. escribir la primera versin, b. incluir en el lxico nuevos elementos que faltaban, c. escribir la nueva versin del algoritmo y as sucesivamente Estructura de un algoritmo LEXICO {Lxico Global del algoritmo} {Declaracin de tipos, constantes, variables y acciones} Accin 1 PRE {Precondicin de la accin 1} POS {Poscondicin de la accin 1} LEXICO {Lxico local, propio de la accin 1}

Declaraciones locales ALGORITMO {Implementacin de la accin 1} {Secuencia de instrucciones de la accin 1} FIN {Fin implementacin algoritmo de la accin 1} ALGORITMO PRE {Precondicin del algoritmo principal} POS {Poscondicin del algoritmo principal} {Secuencia de instrucciones del algoritmo principal} FIN {Fin del algoritmo principal} Proceso Computacional Se refiere a un algoritmo en ejecucin. La ejecucin de las instrucciones origina una serie de acciones sobre elementos de memoria que representan informacin manejada por el algoritmo. A nivel algortmico se asigna un nombre a cada informacin de modo de manejar un par nombre-valor para cada informacin. Una variable representa alguna entidad del mundo real, relevante para el problema que se quiere resolver. El efecto que producen las acciones del proceso sobre las variables produce cambio de estados o de sus valores. Definiciones Programa: Algoritmo escrito en un lenguaje cuyas instrucciones son ejecutables por una computadora y que estn almacenados en un disco. Tarea: Un programa se vuelve tarea a partir del momento que se lo selecciona para su ejecucin y hasta que esta termina. Proceso: programa en ejecucin, se ha iniciado pero an no ha finalizado. Lenguajes de programacin: notacin que permite escribir programas a mayor nivel de abstraccin que los lenguajes de mquina. Sus instrucciones deben ser traducidas a lenguaje de mquina. Lenguaje de mquina: Instrucciones que son ejecutables por el hardware de una computadora. Paradigmas de programacin Paradigma: Coleccin de conceptos que guan el proceso de construccin de un programa. Estos conceptos controlan la forma en que se piensan y formulan los programas. Imperativo Procedural Objetos. Declarativo Funcional Lgico. Dato Informacin Conocimiento Dato: <objeto><atributo><valor> sin interpretar. Informacin: aade significado al dato. Conocimiento: Aade propsito y capacidad a la informacin. Potencial para generar acciones. Problema Enunciado con una incgnita, la solucin es encontrar el valor de esa incgnita. Problema computacional o algortmico: tarea ejecutada por una computadora con una especificacin precisa de los datos de entrada y de los resultados requeridos en funcin de estos. Clase de problemas No computables: No existe un algoritmo.

Computables Tratables: Existe un algoritmo eficiente. Intratable: No existe algoritmo eficiente. Expresiones Sentencias Lxico Expresiones: secuencia de operadores y operandos que se reduce a un solo valor. Sentencias: accin produce un efecto, puede ser primitiva o no primitiva. Lxico: Descripcin del conjunto de acciones e informaciones a partir de la cual se expresa el esquema de comportamiento del algoritmo. Pasos para resolver un algoritmo Comprender el problema. Identificar informacin y acciones a incluir en el lxico (constantes, tipos, variables y acciones). Encontrar un camino de secuenciar las acciones para obtener el resultado, es decir para alcanzar la poscondicin a partir del estado inicial que cumple con la precondicin. Acciones primitivas y derivadas Acciones primitivas: Incorporadas por el lenguaje. Acciones derivadas: realizadas mediante la combinacin de acciones primitivas con el objeto de desarrollar una tarea en particular. Son complementarias y pueden ser desarrolladas por el programador. Estructura de un algoritmo LEXICO {Lxico Global del algoritmo} {Declaracin de tipos, constantes, variables y acciones} Accin 1 PRE {Precondicin de la accin 1} POS {Poscondicin de la accin 1} LEXICO {Lxico local, propio de la accin 1} Declaraciones locales ALGORITMO {Implementacin de la accin 1} {Secuencia de instrucciones de la accin 1} FIN {Fin implementacin algoritmo de la accin 1} ALGORITMO PRE {Precondicin del algoritmo principal} POS {Poscondicin del algoritmo principal} {Secuencia de instrucciones del algoritmo principal} FIN {Fin del algoritmo principal}

Resumen: En el presente capitulo se introdujeron trminos y frases de la disciplina en estudio. Se abordo el problema desde un punto de vista conceptual definiendo con precisin trminos y frases para evitar ambigedades. Se puso especial nfasis en la necesidad de pensar las soluciones antes de escribir cdigo. Se establecieron cuales son los pasos que deben seguirse para una solucin correcta de problemas y cuales son los problemas que pueden tratarse en forma algortmica. Se defini cuales son las caractersticas deseables de los algoritmos y se introdujo el concepto de eficiencia de modo de hacer, tal como recomendaba Albert Enstein, las cosas tan simple como se pueda. Se introdujo, adems una representacin sem. formal para la descripcin de los algoritmos

Representaciones grficas de algoritmos


Diagrama de Nassi-Sneiderman

Condicin 1 T Accin 1 Accin 2 Condicin 2 T Accin 3 Accin 4 Accin 10 Accin 11 Accin 12 Repetir hasta condicin 4 F F Accin 5 Mientras condicin 3 Accin 6 Accin 7 Accin 8 Accin 9

Diagramas de Jackson

Diagramas de Lindsay.
PASCAL
Variable = expresin

DIAGRAMA DE DETALLE
Variable expresin

READ (var1, var2,....var n)

var1, var2,....

WRITELN var 1 var 2 ( , ..... ) WRITE liter1 liter2

var 1 liter1

var 2 ,.... liter2

IF condicin THEN sentencia 1 ELSE sentencia 2 WHILE condicin DO sentencia REPEAT sentencia; : : sentencia n UNTIL condicin FOR variable: expres1 DO sentencia CASE expresin OF const1....... const n : instruccin1 : : const1...... const p : instruccin m END Cualquier sentencia puede ser reemplazada por un bloque: BEGIN sentencias 1; : : sentencias n END TO DOWNTO expres2

Condicin Instruccin 1 Instruccin 2

Condicin Instruccin

Instruccin 1 : : Instruccin n Condicin

Var: exp1, exp2

Instruccin

Expresin Const1... Const n Instruccin1 Const1... Const p Instruccin m

Correspondiendo en el diagrama de detalle la secuencia: instruccin 1; : : instruccin n

Llaves de Warniel HacerUnaCosa) Si Condicin No 1 Case Ordinal Mientras Condicin

HacerOtraCosa Exclusin Vacio

Algoritmo

2 HacerUnaCosa; HacerOtraCosa; HacerAlgoMas

Notacin Algoritmica LEXICO {Lxico Global del algoritmo} {Declaracin de tipos, constantes, variables y acciones} Accin 1 PRE {Precondicin de la accin 1} POS {Poscondicin de la accin 1} LEXICO {Lxico local, propio de la accin 1} Declaraciones locales ALGORITMO {Implementacin de la accin 1} {Secuencia de instrucciones de la accin 1} FIN {Fin implementacin algoritmo de la accin 1} ALGORITMO PRE {Precondicin del algoritmo principal} POS {Poscondicin del algoritmo principal} {Secuencia de instrucciones del algoritmo principal} FIN {Fin del algoritmo principal}