Algoritmos y Estructuras de Datos Unidad 1 UNIVERSIDAD TECNOLÓGICA NACIONAL INGENIERIA EN SISTEMAS Cátedra: "ALGORITMOS Y ESTRUCTURAS DE DATOS” UNIDAD Nº 1 CONCEPTOS BÁSICOS SOBRE PROGRAMACIÓN Ing. Esp. Rosanna M. MAINIERI Ing. Esp. Rosanna M. MAINIERI – Página 1 de 10 Algoritmos y Estructuras de Datos Unidad 1 UNIDAD 1: CONCEPTOS BASICOS SOBRE PROGRAMACION Objetivo General de la Materia ........................................................ 3 Conceptos básicos sobre programación.......................................... 3 Lenguajes de Programación............................................................ 5 Resolución de un Problema............................................................. 6 Diagramación................................................................................... 6 Programación .................................................................................. 7 Programación Estructurada ............................................................. 7 o Programación Modular.......................................................... 7 o Diseño Descendente............................................................. 8 o Programación Estructurada .................................................. 9 Bibliografía..................................................................................... 10 Ing. Esp. Rosanna M. MAINIERI – Página 2 de 10 Algoritmos y Estructuras de Datos Unidad 1 Objetivo General de la materia: “Desarrollar la destreza o habilidad en los alumnos de crear programas para resolver problemas, no solo funcionalmente efectivos, sino fundamentalmente correctos desde un punto de vista metodológico, en procura de la eficiencia durante todo su ciclo de vida”. CONCEPTOS BASICOS SOBRE PROGRAMACION Contenidos: Algoritmo, acción, autómata, programa, lenguaje de programación, sentencia, codificación, diagramación, programación, Programación Estructurada. A diario nos enfrentamos, ya sea en la vida como en la carrera universitaria, con problemas. Qué debemos hacer con ellos? Resolverlos. Para ello se necesita una serie de pasos que lo resuelvan. Esa serie de pasos o acciones se llama algoritmo. Este término, como se ve, es el primer término del nombre de la asignatura. Algoritmo: es una serie de pasos o acciones necesarios para resolver un problema. PROBLEMA ALGORITMO Por ejemplo, una receta de cocina es un algoritmo, ya que contiene una serie de pasos que hay que ejecutar para preparar un plato de comida. En estas recetas además figuran los ingredientes, que son los objetos que se deben procesar para preparar el plato. En nuestra materia, los datos (información) serán los objetos a “procesar” para llegar a obtener la solución del problema. En el nombre de la materia aparece en segundo lugar el término “estructura de datos”, que hace referencia a la forma en que se debe manejar a los datos, que serán los objetos con los que se trabajará. Acción: es un hecho que se desarrolla en un lapso finito. Ing. Esp. Rosanna M. MAINIERI – Página 3 de 10 Algoritmos y Estructuras de Datos Unidad 1 Ahora bien, en nuestra materia ¿quién será el encargado de ejecutar esas acciones? La computadora o autómata. Necesitamos entonces, darle al autómata una serie de órdenes para que pueda ejecutar las acciones en respuesta a esas órdenes y así resolver el problema. Autómata: máquina o instrumento que produce acciones en respuestas a órdenes para resolver un problema. Estas acciones surgen como respuesta a órdenes, estas órdenes o instrucciones componen el programa que le será dado al autómata para que pueda trabajar. El autómata no es el autor, sino el ejecutante de la acción. Acción <> Orden Programa: es un texto compuesto por un conjunto de órdenes que al ser ejecutadas por un autómata produce una secuencia de acciones que resuelven un problema. Una acción produce un resultado, es decir, se obtiene una modificación del entorno del sistema en estudio. Hay un estado inicial del sistema, luego de ejecutarse la acción o conjunto de acciones, hay un estado final del sistema, que es distinto al inicial. Por ejemplo, si la acción fuera ABRIR LA PUERTA : Estado inicial: Puerta cerrada Estado final: Puerta abierta Existen dos tipos de acciones: 1) Primitivas o Simple 2) Compuestas 1) Acción primitiva, elemental o simple: Acontecimiento ejecutable por un instrumento en respuesta a una única orden. 2) Acción compuesta o proceso: es una secuencia de acciones, organizadas en el tiempo El hombre debe informarle a la máquina cómo resolver un problema, esto lo hace por medio de un programa, como ya se dijo, es un texto, y debe estar escrito en un lenguaje que la máquina entienda. Lenguaje de Programación: Conjunto de elementos y reglas que deben tenerse en cuenta para escribir un programa, para un cierto autómata. Sentencia: es una orden escrita en un lenguaje de programación. El algoritmo es entendido por los hombres, pero para que pueda ser entendido por el autómata se lo debe traducir mediante un lenguaje que la máquina comprenda, es decir, mediante un lenguaje de programación y así se obtiene un programa. Ing. Esp. Rosanna M. MAINIERI – Página 4 de 10 Algoritmos y Estructuras de Datos Unidad 1 PROBLEMA ALGORITMO PROGRAMA LENGUAJES DE PROGRAMACION Los lenguajes se clasifican en lenguajes de Bajo Nivel y de Alto Nivel. Lenguajes de Bajo Nivel Lenguaje de Máquina: Es el lenguaje que entiende la computadora y está compuesto por instrucciones codificadas en binario, es decir por 0 y 1. Es el primer lenguaje que se empleó en la programación de ordenadores. Lenguaje Ensamblador: Fue el primer intento de sustituir el lenguaje de máquina por un lenguaje parecido al utilizado por las personas. Se utilizan conjuntos de caracteres para representar las instrucciones del lenguaje de máquina, para una computadora en particular. Para este lenguaje se necesita un programa llamado ensamblador que traduce las instrucciones escritas en lenguaje ensamblador a lenguaje de máquina. Lenguajes de Alto Nivel Son posteriores a los de bajo nivel. Las instrucciones se escriben con palabras específicas, con significado para el hombre, y se crearon con los siguientes objetivos: Lograr la independencia del ordenador Aproximar aún más sus instrucciones al lenguaje humano. Utilizan palabras en lugar de cadenas de símbolos sin aparente significado Suministran librerías de rutinas con las funciones de uso frecuente (entrada, salida, etc.) Traductores Los programas que no están escritos en lenguaje de máquina deben ser traducidos a código binario para que puedan ser comprendidos por el autómata. Existen dos tipos de traductores: los intérpretes y los compiladores. Intérprete: Es un programa que toma al programa escrito en lenguaje de alto nivel y lo traduce y ejecuta, línea por línea. Compilador: Es un programa que traduce todo el programa escrito en lenguaje de alto nivel (Programa Fuente) y obtiene un programa escrito en código de máquina (Programa Objeto). Luego, el programa objeto es el que se ejecuta. RESOLUCION DE UN PROBLEMA Ing. Esp. Rosanna M. MAINIERI – Página 5 de 10 Algoritmos y Estructuras de Datos Unidad 1 Al encarar la resolución de un problema debe diferenciarse dos etapas: 1) Obtención del algoritmo 1.1) Estudio del enunciado 1.2) Creación del algoritmo 2) Codificación del algoritmo La primera es la de mayor importancia y la más delicada, la codificación puede incluso resultar un trabajo rutinario y hasta existen herramientas que lo resuelven automáticamente. Obtener un algoritmo: es inventar la resolución de un problema, sin tener en cuenta el lenguaje con el cual se va a programar, por lo tanto, la actividad principal es pensar en el problema Codificar: es aplicar sistemáticamente las definiciones y reglas de un lenguaje de programación a las acciones especificadas en el algoritmo. De las dos partes de ‘Obtención del algoritmo’ la primera, el ‘Estudio del enunciado’, es la prioritaria, pues si el problema no está perfectamente definido y comprendido, cualquier algoritmo que se obtenga va a ser incorrecto, con él no se resolverá nada, o se resolverá un problema distinto al deseado. El estudio del enunciado es conocer perfectamente cuál es el problema que se debe resolver, a este punto se le debe dedicar todo el tiempo que sea necesario. Se deberá determinar muy claramente: ¿Qué se pretende obtener como resultado? ¿Cuáles son los datos de los que se dispone? DIAGRAMACION Al crear un algoritmo, éste debe ser entendido por las personas, no por las máquinas, por lo cual no requieren serias restricciones sintácticas ni semánticas para ser entendidas, pero es conveniente usar una representación generalizada para representarlos, esto es diagramar. Diagramar: representar un algoritmo sobre un soporte físico La diagramación puede ser: Esquemática: se representa al algoritmo como un texto (pseudocódigo). Gráfica: se representa al algoritmo como un gráfico. (Diagrama de Chapin o Nassi-Schneiderman, de Flujo, de Jackson) Ing. Esp. Rosanna M. MAINIERI – Página 6 de 10 Algoritmos y Estructuras de Datos Unidad 1 PROGRAMACION Entendemos a la programación como la planificación, proyección, desarrollo e implementación de la resolución de un problema, la que abarca obviamente a la creación del algoritmo. Un profesional en la programación debe encarar la solución del problema de forma tal que su producto sea útil ahora y en el futuro, estando o no él en el centro de cómputos. Para lograr esto debe tener muy presentes las futuras posibles modificaciones del mismo. Las características, entonces, que debe tener un programa son: 1) Claridad algorítmica 2) Legibilidad 3) Modificabilidad 1) Que sea claro significa, que su resolución algorítmica sea sencilla, que esté correctamente estructurado, resultando de fácil comprensión. 2) Que sea legible significa que cuando se codificó se eligió bien los nombres de los objetos utilizados, se agregaron comentarios para indicar lo que se va haciendo y se diagramó bien el texto para resaltar el contenido semántico sobre lo sintáctico. 3) Que sea fácilmente modificable, implica que cualquier modificación del problema que genere un agregado, supresión o cambio de alguna de sus partes, no debe obligar a cambiar todo el programa, sino sólo una parte. PROGRAMACIÓN ESTRUCTURADA Para entender el concepto de programación estructurada debemos antes tener en claro dos conceptos previos: Programación Modular y Diseño Descendente. Programación Modular La programación modular es uno de los métodos de diseño más flexible y potentes para mejorar la productividad de un programa. En programación modular el programa se divide en módulos (partes independientes), cada una de las cuales ejecuta una única actividad o tarea y se codifican independientemente de otros módulos. Cada uno de estos módulos se analizan, codifican y ponen a punto por separado. Módulo, Acción Compuesta, Proceso, Subprograma o Subalgoritmo:: Es un conjunto de acciones (sentencias), agrupadas bajo un nombre, que resuelven una tarea o subproblema. Ing. Esp. Rosanna M. MAINIERI – Página 7 de 10 Algoritmos y Estructuras de Datos Unidad 1 Cada programa contiene un módulo denominado programa principal que controla todo lo que sucede. Este programa principal es el que transfiere el control a los otros módulos (subprogramas), de modo que ellos pueden ejecutar sus funciones. Cuando el módulo haya completado su tarea devuelve el control al módulo principal. Si la tarea asignada a un módulo es demasiada compleja, éste deberá romperse en otros módulos más pequeños. Los módulos son unidades estancas, es decir son independientes entre sí, en el sentido en que ningún módulo puede tener acceso directo a cualquier otro módulo excepto a sus propios submódulos. Diseño Descendente (Metodo Descendente, Top Dwn o de Refinamientos Sucesivos) El diseño descendente consiste en encontrar la solución de un problema mediante la aplicación sistemática de descomposición en subproblemas cada vez más simples. Aplicando la máxima de divide para vencer. En este proceso se descompone al problema en subproblemas, cada uno de los cuales debe resolverse mediante un subprograma. Se determinan una serie de niveles o pasos sucesivos de refinamientos (subproblemas). Se establecen etapas o estructuras jerárquicas, de forma que se puede considerar cada estructura desde dos puntos de vista: ¿qué hace? y ¿cómo lo hace? Se debe encarar la resolución de un problema en una primera instancia, como una secuencia de pocos y sencillos pasos (procesos o subproblema) que abarquen todo el problema, sin entrar en detalles. Esto, sin tener en cuenta quién o cómo los va a ejecutar. Se debe proponer una buena definición para cada uno de esos pasos para transformarlos en nuevos subproblemas independientes, con las correctas especificaciones de sus datos y sus resultados. Luego, en una segunda instancia, se trata a cada uno de ellos en mayor profundidad, aplicándole a su vez el mismo método. Es decir, se toma a cada subproblema como un nuevo problema y se lo resuelve en pocos pasos. Este proceso continúa, tomando a cada nuevo subproblema como un nuevo problema, el cual hay que resolver encontrando nuevamente una serie de pasos. Se sigue así hasta que todos los sub-algoritmos estén compuestos por acciones primitivas. Lo más interesante del método, es que mediante este proceso reiterativo, se trata en forma separada lo global de los detalles. Resulta más sencillo resolver al problema subdividiéndolo en subproblemas siendo así más fácil llegar a la solución y además es conveniente aplicar este método ya que habitualmente se trabaja en equipo y cada grupo del equipo, entonces, puede encargarse de resolver una parte, ensamblando luego todas las soluciones de estos subproblemas. Ing. Esp. Rosanna M. MAINIERI – Página 8 de 10 Algoritmos y Estructuras de Datos Unidad 1 Programación Estructurada La programación estructurada es una técnica de programación, que se introdujo en la segunda mitad de la década del sesenta, y significa escribir un programa de acuerdo a las siguientes reglas: El programa tiene un diseño modular Los módulos son diseñados de modo descendente Cada módulo utiliza sólo las tres estructuras básicas de control: secuencia, selección y repetición Estas técnicas aumentan considerablemente la productividad del programa reduciendo en elevado grado el tiempo requerido para escribir, verificar, depurar y mantener los programas. La programación estructurada es el conjunto de técnicas que incorporan: Recursos abstractos Diseño Descendente Estructuras Básicas de control Esta programación se auxilia de los recursos abstractos en lugar de los recursos concretos de que dispone un determinado lenguaje de programación. Ing. Esp. Rosanna M. MAINIERI – Página 9 de 10 Algoritmos y Estructuras de Datos Unidad 1 BILBIOGRAFÍA DALE Nell, WEEMS Chip, (1989), PASCAL, Ed. Mc. Graw Hill, España DE GIUSTI Armando, (2001), Algoritmos, Datos y programas, Ed. Prentice Hall, Fac. de Informática, Univ. Nac. La Plata, Argentina. JENSEN Kathleen, WIRTH Niklaus, (1987), PASCAL Manual del usuario e informe, Ed. El Ateneo, Argentina. JOYANES AGUILAR Luis, (1996), Fundamentos de Programación, Ed. Mc GrawHill, España. Ing. Esp. Rosanna M. MAINIERI – Página 10 de 10