Desarrollo de Fundamentos de Programación
T004: Algoritmos condicionales
Los programas de modo secuencial, se ejecutan una sentencia después de otra. La ejecución comienza con la primera sentencia y prosigue hasta la Última sentencia, cada una de las cuales se ejecuta una sola vez. Esta forma de programación es adecuada para resolver problemas sencillos. Sin embargo, para la resolución de problemas de tipo general se necesita la capacidad de controlar cuáles son las sentencias que se ejecutan, en qué momentos. Las estructuras o construcciones de control controlan la secuencia o flujo de ejecución de las sentencias. Las estructuras de control se dividen en tres grandes categorías en función del flujo de ejecución: secuencia, selección y repetición. En este apartado se considera las estructuras selectivas o condicionales. Estructuras de control Las estructuras de control controlan el flujo de ejecución de un programa o función. Las estructuras de control permiten combinar instrucciones o sentencias individuales en una simple unidad lógica con un punto de entrada y un punto de salida. La Sentencia Si o if La estructura de control de selección principal es una sentencia "Si" (if). La sentencia "Si" tiene dos alternativas o formatos posibles. El formato más sencillo tiene la sintaxis siguiente:
La sentencia if o si funciona de la siguiente manera. Cuando se alcanza la sentencia if dentro de un programa, se evalúa la expresión entre paréntesis que viene a continuación de if. Si Expresión es verdadera, se ejecuta Acción; en caso contrario no se ejecuta Acción (en su formato más simple, Acción es una sentencia simple y en los restantes formatos es una sentencia compuesta). En cualquier caso la ejecución del programa continúa con la siguiente sentencia del programa. Sentencia if o si de dos alternativas if-else Un segundo formato de la sentencia if es la sentencia if-else, Esta formato de la sentencia If tiene la siguiente sintaxis: if (Expresion) then Acción1 else Acción2 Expresión: Expresión lógica que determina la acción a ejecutar Acción1: Acción que se realiza si la expresión lógica es verdadera Acción2: Acción que se ejecuta si la expresión lógica es falsa Acción 1 y 2 son sentencias individuales o compuestas Sentencia if-else Anidadas Hasta este punto, las sentencias if implementan decisiones que implican una o dos alternativas. En esta sección, se mostrará como se puede utilizar la sentencia if para implementar decisiones que impliquen diferentes alternativas. Una sentencia if es anidada cuando la sentencia de la rama verdadera o la rama falsa, es a su vez una sentencia if. Una sentencia if anidada se puede utilizar para implementar decisiones con varias alternativas o multi-alternativas. Sintaxis
Ejemplo: Incrementar contadores de números positivos, números negativos o ceros. Formato 1 Si (x>0) entonces numpos=numpos+1 caso contrario si (x<0) entonces numneg=numneg+1 caso contrario numcero=numcero+1 Formato 2 Si (x>0) entonces numpos=numpos+1 caso contrario si (x<0) entonces numneg=numneg+1 caso contrario numceros=numceros+1 La sentencia if anidada tiene tres alternativas. Se incrementa una de las tres variables (numpos,numneg y numceros) en 1, dependiendo de que x sea mayor que cero, menor que cero o igual a cero, respectivamente. Las cajas muestran la estructura lógica de la sentencia if anidada; la segunda sentencia if es la acción o tarea falsa (a continuación de else) de la primera sentencia if. La ejecución de la sentencia if anidada se realiza como sigue: se comprueba la primera condición (x > O); si es verdadera, numpos se incrementa en 1 y se salta el resto de la sentencia if. Si la primera condición es falsa, se comprueba la segunda condición (x < O); si es verdadera numneg se incrementa en uno; en caso contrario se incrementa nunceros en uno. Es importante considerar que la segunda condición se comprueba sólo si la primera condición es falsa. |
T002: Conceptos básicos de programación
Algoritmo "Es una secuencia finita de instrucciones, cada una de las cuales tiene un significado preciso y puede ejecutarse con una cantidad finita de esfuerzo en un tiempo finito". (Según el Libro de "Estructuras de datos y algoritmos" de Alfred V. Aho, John E. Hopcroft, Jefrey D. Ullman.) "Un Algoritmo es un método para resolver un problema". (Según el Libro de "Programación en C, metodología, algoritmos y estructuras de datos de Luis Joyanes Aguilar y Ignacio Zahonero Martinez") Características de los algoritmos
Entrada: ingredientes y utensilios empleados. Proceso: elaboración de la receta en la cocina. Salida: terminación del plato (por ejemplo, cordero). Programa Las operaciones que debe realizar el Hardware son especificadas por una lista de instrucciones, llamadas programas, o Software. Un programa se escribe en un lenguaje de programación en base a un algoritmo suministrado. Expresar un algoritmo en forma de programa se llama programación. Lenguaje de programación Programas que sirven para escribir programas que permiten la comunicación usuario/máquina. Unos programas especiales llamados traductores (Compiladores o intérpretes) convierten las instrucciones escritas en lenguajes de programación en instrucciones escritas en lenguaje máquina (0 y 1, bits) que ésta pueda entender. Ejemplo de algoritmo Un cliente ejecuta un pedido a una fábrica. La fábrica examina en su banco de datos la ficha del cliente, si el cliente es solvente entonces la empresa acepta el pedido; en caso contrario, rechazará el pedido. Redactar el algoritmo correspondiente. Los pasos del algoritmo son: 1. Inicio. 2. Leer el pedido. 3. Examinar la ficha del cliente. 4. Si el cliente es solvente, aceptar pedido; en caso contrario, rechazar pedido. 5. Fin. Ejemplo 1.2 Se desea diseñar un algoritmo para saber si un número es primo o no. Un número es primo si sólo puede dividirse por sí mismo y por la unidad (es decir, no tiene más divisores que él mismo y la unidad). Por ejemplo, 9,8,6,4,12,16,20, etc., no son primos, ya que son divisibles por números distintos a ellos mismos y a la unidad. Así, 9 es divisible por 3, 8 lo es por 2, etc. El algoritmo de resolución del problema pasa por dividir sucesivamente el número por 2, 3,4 ..., etc. 1. Inicio. 2. Poner X igual a 2 (X = 2, X variable que representa a los divisores del número que se busca N). 3. Dividir N por X (N/X). 4. Si el resultado de N/X es entero, entonces N no es un número primo y bifurcar al punto 7; en caso contrario, continuar el proceso. 5. Suma 1 a X (X X + 1). 6. Si X es igual a N, entonces N es un número primo; en caso contrario, bifurcar al punto 7. Fin. Por ejemplo, si N es 131, los pasos anteriores serían: 1. Inicio. 2. X = 2. 3. 131/X. Como el resultado no es entero, se continúa el proceso. 5. X 2 + 1, luego X = 3. 6. Como X no es 131, se bifurca al punto 3. 3. 131/X resultado no es entero. 5. X3 + 1, X = 4. 6. Como X no es 131 bifurca al punto 3. 3. 131/X ..., etc. 7. Fin. Ejemplo 1.3. Algoritmo para leer las páginas de un libro: 1. Inicio. 2. Abrir el libro en la 1ª página. 3. Leer la página. 4. ¿Es la última que deseo leer? Sí: Ve al paso 7. No: Ve al paso 5 5. Pasar a la siguiente página. 6. Ve al paso 3. 7. Cerrar el libro. 8. Fin. Fases en la resolución de problemas Las fases de resolución de un problema con computadora son:
Análisis. El problema se analiza teniendo presente la especificación de los requisitos dados por el cliente de la empresa o por la persona que encarga el programa. Diseño. Una vez analizado el problema, se diseña una solución que conducirá a un algoritmo que resuelva el problema. Codificación (implementación). La solución se escribe en la sintaxis del lenguaje de alto nivel (por ejemplo, C) y se obtiene un programa. Ejecución, verificación y depuración. El programa se ejecuta, se comprueba rigurosamente y se eliminan todos los errores que puedan aparecer. Mantenimiento. El programa se actualiza y modifica, cada vez que sea necesario, de modo que se cumplan todas las necesidades de cambio de sus usuarios. Documentación. Escritura de las diferentes fases del ciclo de vida del software, esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y de referencia, así como normas para el mantenimiento. Las dos primeras fases conducen a un diseño detallado escrito en forma de algoritmo. Durante la tercera etapa (codificación) se implementa el algoritmo en un código escrito en un lenguaje de programación, reflejando las ideas desarrolladas en las fases de análisis y diseño. La fase de compilación y ejecución traduce y ejecuta el programa. En las fases de verificación y depuración el programador busca errores de las etapas anteriores y los elimina. Comprobará que mientras más tiempo se gaste en la fase de análisis y diseño, menos se gastará en la depuración del programa. Por último, se debe realizar la documentación del programa. Ejemplos de Algoritmos Análisis del problema La primera fase de la resolución de un problema con computadora es el análisis del problema. Esta fase requiere una clara definición, donde se contemple exactamente lo que debe hacer el programa y el resultado o solución deseada. Dado que se busca una solución por computadora, se precisan especificaciones detalladas de entrada y salida. Para poder definir bien un problema es conveniente responder a las siguientes preguntas:
Análisis del problema El cálculo del área del rectángulo se puede dividir en:
Este método se conoce técnicamente como diseño descendente (top-down) o modular. El proceso de romper el problema en cada etapa y expresar cada paso en forma más detallada se denomina refinamiento sucesivo. Cada subprograma es resuelto mediante un módulo (subprograma) que tiene un solo punto de entrada y un solo punto de salida. Cualquier programa bien diseñado consta de un programa principal (el módulo de nivel más alto) que llama a subprogramas (módulos de nivel más bajo) que a su vez pueden llamar a otros subprogramas. Los programas estructurados de esta forma se dice que tienen un diseño modular y el método de romper el programa en módulos más pequeños se llama programación modular. Los módulos pueden ser planeados, codificados, comprobados y depurados independientemente (incluso por diferentes programadores) y a continuación combinarlos entre sí. El proceso implica la ejecución de los siguientes pasos hasta que el programa se termina: 1. Programar un módulo. 2. Comprobar el módulo. 3. Si es necesario, depurar el módulo. 4. Combinar el módulo con los módulos anteriores. El proceso que convierte los resultados del análisis del problema en un diseño modular con refinamientos sucesivos que permitan una posterior traducción a un lenguaje se denomina diseño del algoritmo. El diseño del algoritmo es independiente del lenguaje de programación en el que se vaya a codificar posteriormente. Ejemplo de diseño para el problema del área del triangulo. Las dos herramientas más utilizadas comúnmente para diseñar algoritmos son: diagramas de flujo, y pseudocódigos. Un diagrama de flujo (flowchart) es una representación gráfica de un algoritmo. Los símbolos utilizados han sido normalizados por el Instituto Norteamericano de Normalización (ANSI). Pseudocódigo El pseudocódigo es una herramienta de programación en la que las instrucciones se escriben en palabras similares al inglés o español, que facilitan tanto la escritura como la lectura de programas. En esencia, el pseudocódigo se puede definir como un lenguaje de especijicaciones de algoritmos. Algunas palabras utilizadas en el pseudocódigo:
Ejemplo de pseudocodigo para el problema del área del triangulo Programa CalculoAreaRectangulo Inicio leer(base, altura) area. base x altura escribir(base,altura,area) Fin |
T001: Introducción
El espacio de Fundamentos de Programación tiene el objetivo de proporcionar conocimientos sobre la creación de Programas de Computador, esta dirigido a todas las personas que se inician en las actividades de programación o personas que desean soluciones de problemas utilizando un computador. Para adquirir las capacidades de programación se publicaran una serie de conocimiento teóricos y ejercicios prácticos. |
1-4 of 4