Algoritmos

Introducción a los Problemas. Clases de Algoritmos y Elementos Necesarios. Utilidades. Instrucción de Asignación. Enunciados de Repetición. Sentencias Caso. Sentencias Switch. Sentencias Break

2 downloads 676 Views 48KB Size

Recommend Stories


Algoritmos
Diagramas de Flujo. Pseudocodigos. Ejercicios

ALGORITMOS RESUELTOS
Algoritmos Resueltos programatthew.wordpress.com Roger Matute // ALGORITMOS RESUELTOS --------------------------------------------------------------

Story Transcript

Guía de Aprendizaje Duración: 2 horas Modulo: Programación de Computadores. Tema: LECCIÓN 1, INTRODUCCIÓN A LOS PROBLEMAS Introducción: Por medio de esta guía se describen las etapas para resolver un problema cualquiera usando un computador, afianzando las pocas ideas de programación y solución de problemas usando algoritmos. Objetivos: 1. Describir el enfoque de sistemas para la solución de problemas. 2. Concientizar al alumno sobre el uso de los algoritmos en la solución de problemas de la vida real. • Describir las fases de desarrollo d un sistema de procesamiento de datos. Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: Etimológicamente, la palabra problema deriva del griego proballein y significa algo lanzado hacia delante. Un problema es un asunto o un conjunto de cuestiones que se plantean para ser resueltas. La naturaleza de los problemas varía con el ámbito o con el contexto donde están planteados; así, existen problemas matemáticos, químicos, filosóficos, etc. Consideramos aquí sólo aquellos problemas cuya solución se puede calcular utilizando una serie de reglas introducidas en un computador. Muchas veces, la mitad del trabajo es saber exactamente que problema hay que resolver. Si al abordar un problema no se tiene una descripción simple y precisa de él, resulta complejo modelar, similar o programar una solución en el computador. En este punto, hay que destacar también la importancia de ciertos aspectos relacionados con la solución de problemas: notaciones de representaciones, estrategias, relaciones entre problemas, etc. En general, conviene expresar un problema utilizando algún modelo formal. Por ejemplo, un modelo aritmético puede resultar adecuado para problemas de naturaleza numérica o un modelo basado en gramáticas formales puede servir para problemas de procesamiento simbólico o de textos. Una vez modelado el problema, puede buscarse una solución en forma de algoritmo. Un algoritmo es un conjunto finito, y no ambiguo de etapas expresadas en un cierto orden que, para unas condiciones iniciales, permiten resolver el problema en un tiempo finito. Al plantear una solución algorítmica es importante elegir una representación adecuada de los datos para que dicha solución resulte eficiente. Para convertir un algoritmo, que puede estar expresado en una notación informal o seudolenguaje, en un programa será necesario pasar por varias etapas de formalización o refinamiento progresivo. El objetivo final es describir una solución algorítmica al problema inicialmente planteado mediante el uso de las construcciones formales de un lenguaje de programación. Dicho programa se podrá ejecutar en un 1

computador, y para un conjunto de datos de entrada producirá unos resultados esperados. ASPECTOS DE LA SOLUCIÓN DE PROBLEMAS No existe un método universal que permita resolver cualquier problema. En general, la solución de problemas es un proceso creativo donde el conocimiento, la habilidad y la experiencia tienen un papel importante. El proceder de manera sistemática puede ayudar en la solución. Es muy importante que el problema tratado esté perfectamente definido: se trata en este momento de saber qué es lo que hay que resolver antes de averiguar cómo resolver el problema. Esta etapa de definición lleva consigo eliminar las ambigüedades y la información irrelevante que aparezcan en el enunciado de un problema, y saber exactamente qué elementos constituyen una solución válida. Al comenzar a abordar un problema es necesario tener en cuenta que, para la mayoría de ellos, hay muchas maneras de resolverlos y pueden existir muchas soluciones. Se plantean sin embargo criterios o estrategias generales que se deben tener en cuenta, para ello se pueden seguir ocho etapas, articuladas de tal forma que cada una depende de las anteriores, lo que indica que se trata de proceso complementario y por lo tanto cada paso exige el mismo cuidado en su elaboración. Las etapas son: • Definición y delimitación del problema a solucionar: Por computador se pueden resolver cualquier clase de problema una vez definidos los pasos o instrucciones. • Seudocódigo o diagrama de flujo (algoritmo): Este es en realidad el primer paso que se debe de seguir pues generalmente ya se tiene definido el problema. En esta etapa es donde se determinan los pasos o instrucciones a seguir y el orden lógico de su ejecución para darle una eficiente solución al problema. Aquí es donde radica toda la dificultad para solucionar un problema por computador; el resto de las etapas básicamente se circunscriben a la adaptación para que un computador determinado ejecute los pasos o instrucciones planteados en el seudocódigo y se obtengas los resultados esperados. • Prueba de escritorio: Luego de realizar el seudocódigo viene la prueba de escritorio, la cual consiste en hacer un seguimiento manual de los pasos seguidos que se definieron en el seudocódigo y comprobar, con base en sus datos, si el resultado al cual se llega es el esperado. • Codificación: Es la escritura de las instrucciones o enunciados, determinados en la etapa de la diagramación o la seudocodificación en un lenguaje de alto nivel (Basic, Cobol, Pascal, C, etc.) incluyendo las instrucciones de control adecuadas al computador donde se vayan a ejecutar. • Digitación: Ya codificadas las instrucciones se convierten a un medio legible para el computador. Es pasar las instrucciones al editor del lenguaje de programación a utilizar. • Compilación: Es aquí donde el computador Chequea si todas las instrucciones están escritas correctamente desde el punto de vista de la sintaxis y gramática de cada lenguaje y las transcribe, dentro de la memoria, del lenguaje de alto nivel al lenguaje de máquina para obtener el llamado programa objeto. • Ejecución del Programa: El programa objeto es ejecutado por el computador para llegar a los resultados esperados, utilizando los dispositivos, unidades y memoria necesaria, según cada paso o programa. • Evaluación de Resultados: Obtenidos los resultados se les evalúa para verificar si son correctos. En caso contrario, se revisa en las etapas anteriores para detectar la falla o error, entrar a corregirlo y reiniciar desde este punto los pasos para resolver de nuevo y en forma correcta el problema. Las consideraciones mencionadas hasta ahora corresponden a la solución general de problemas (no necesariamente a problemas informáticos); sin embargo, estas ideas se pueden particularizar para resolver problemas donde se use el computador como herramienta. A veces, la situación más frecuente para mucha gente es comenzar a programar la solución de un problema que no está completamente definido, o pensar en detalles de implementación sin saber cómo abordar el problema independientemente del computador. Es mucho más productivo conocer primero un problema lo suficiente y plantear una estrategia adecuada para su solución, que comenzar prematuramente a programar la solución a un problema incompleto, ambiguo o que no ha sido analizado adecuadamente.

2

Evaluación: Se deben tener presentes todos y cada uno de los conceptos descritos anteriormente, pues cada vez que se desee resolver un problema se tienen que tener recordar y utilizar adecuadamente. Bibliografía: Desarrollo de Algoritmos Y Sus Aplicaciones, Correa Uribe Guillermo, McGraw−Hill. Curso de Programación con C, Francisco Javier Ceballos, Macrobit. Guía de Aprendizaje Duración: 2 horas Modulo: Programación de Computadores. Tema: LECCIÓN 2, CLASES DE ALGORITMOS Y ELEMENTOS NECESARIOS Introducción: Existen varias clases de algoritmos y elementos que le hacen la vida más fácil a los diseñadores de estos, y debido a su simplicidad es de suma importancia el reconocerlos y tenerlos presentes. Objetivos: 1. Utilizar las diferentes clases de algoritmos para la solución de problemas. 2. Reconocer fácilmente cada elemento escrito en un algoritmo. Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: Como hemos mencionado en repetidas ocasiones, un algoritmo es un conjunto de pasos, instrucciones o acciones que se deben seguir ordenadamente para llegar a un fin determinado, (solución de un problema, obtención de una respuesta intermedia o realización de una tarea) de cualquier problema de un mismo tipo. Existen dos clases de algoritmos, las cuales son: • Algoritmos Cualitativos: Son todos aquellos pasos o instrucciones descritos por medio de palabras que sirven para llegar a la obtención de una respuesta o solución de un problema cualquiera. Como ejemplo podemos decir que la utilización de un directorio (Búsqueda de un teléfono). Para poder buscar un teléfono en un directorio, se debe conocer el algoritmo que se va a utilizar, es decir la forma en que están codificados los nombres de las personas, para así lograr encontrarlos y localizar el número telefónico correspondiente. • Algoritmos Cuantitativos: Son aquellos pasos o instrucciones que involucran cálculos numéricos para llegar a un resultado satisfactorio. Como ejemplo podemos citar los pasos para resolver una ecuación de segundo grado, los pasos lógicos y secuenciales para obtener una nomina. Antes de entrar a estudiar lo que es en sí el desarrollo de algoritmos se deben tener claros algunos conceptos, como: 3

Variables: Son todos aquellos valores que pueden o no cambiar en el transcurso de un algoritmo. Usualmente son introducidas como datos. Existen variables simples y variables suscritas (arreglos). Todas las variables se componen de dos partes esenciales: Nombre y Valor. El nombre es quien identifica la variable en todo el transcurso del algoritmo, y son un conjunto de caracteres, letras y números. Dicho nombre debe ser mnemotécnico, es decir, que con solo leer el nombre de la variable se pueda entender o determinar con facilidad lo que ella significa o contiene. Como ejemplo podemos decir la Variable VrHr significa a simple vista Valor de la Hora; pero si fuese X o HH, estos nombres pueden significar muchas cosas o, a la vez, no significar nada. El valor es la cantidad que una variable representa o tiene asociada en un momento determinado. Se debe tener en cuenta que una variable también puede tener asociado un valor lógico como falso o verdadero. Constantes: Son todos aquellos valores que no cambian en el transcurso de un algoritmo y son introducidos en el momento de utilizarse. En determinados casos se puede presentar que el valor de una variable no cambie en el transcurso de un algoritmo; pero por este hecho no se considera constante, sigue siendo una variable, porque su valor puede cambiar y las constantes no lo pueden hacer. Evaluación: Se deben tener presentes todos y cada uno de los conceptos descritos anteriormente, pues cada vez que se desee resolver un problema se deben utilizar adecuadamente. Bibliografía: Guillermo Correa Uribe (1998), Desarrollo de Algoritmos Y Sus Aplicaciones en Basic, Pascal, Cobol y C, McGraw−Hill. Francisco Javier Ceballos (1990), Curso de Programación con C, Macrobit. Manuel Abellanas y Dolores Lodares (1990), Análisis de algoritmos y teoría de grafos, Ra−Ma Guía de Aprendizaje Duración: 2 horas Modulo: Programación de Computadores. Tema: LECCIÓN 3, ELEMENTOS NECESARIOS. Introducción: Existen varios elementos que le hacen la vida más fácil a los diseñadores de algoritmos, y debido a su simplicidad es de suma importancia el reconocerlos y tenerlos presentes. Objetivos: 1. Utilizar las diferentes clases de algoritmos para la solución de problemas. 2. Reconocer fácilmente cada elemento escrito en un algoritmo. Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: 4

DATOS, CONSTANTES, VARIABLES Y OPERADORES Los datos son los objetos sobre los que opera una computadora. Tipos de Datos: datos numéricos: los relativos a diferentes clases de números. Son enteros (sin parte decimal) y reales (con parte entera y decimal). • datos tipo carácter (cadena): son caracteres que puede interpretar la computadora: alfabéticos A − Z, a − z; dígitos 0 − 9; especiales $, *, >, <, . , , ´´,; :,.... Un dato tipo carácter es un solo carácter. Los caracteres se organizan en cadenas (secuencia de caracteres válidos encerrados entre comillas o comillas dobles). • datos lógicos o booleanos: aquellos que sólo pueden tomar dos valores: cierto o falso (true / false) • datos estructurados: arrays, registros, conjuntos y ficheros. • datos enumerados : definidos por el usuario. Constantes: conjunto de caracteres numéricos que no cambian durante la ejecución del programa. Pueden estar precedidos de un signo o un carácter + o − y pueden contener el carácter . (punto). Las hay enteras, reales, caracteres, cadena de caracteres y booleanas. Variables: conjunto de caracteres alfabéticos o alfanuméricos tal que su primer carácter sea alfabético, ejemplos: José, M1, kont. • Pueden cambiar su valor durante la ejecución del programa. • Una variable siempre tendrá asignado un valor de una constante. • Es conveniente utilizar nombres significativos, mnemotécnicos, que sugieran lo que representan para facilitar la lectura y comprensión del algoritmo. Operadores Aritméticos: suma + resta − multiplicación * división / potenciación ^ división entera \ ó div resto de división entera mod Prioridad de las operaciones aritméticas: ^ *, / +, − 5

div, mod • Todas las subexpresiones entre paréntesis se evalúan primero. Las subexpresiones con paréntesis anidados se evalúan de dentro − a fuera; el paréntesis más interno se evalúa primero. • La prioridad de operaciones dentro de una misma expresión o subexpresión, los operadores se evalúan en el siguiente orden: Primero *, /, Div, Mod. Ultimo +, −. • Regla asociativa izquierda. Los operadores de una misma expresión o subexpresión con igual nivel de prioridad (tal como * y /) se evalúan de izquierda a derecha. Operadores Relacionales: se utilizan para expresar condiciones. = igual <> diferente <= menor o igual >= mayor o igual > mayor que < menor que El resultado de la operación expresión1 operador relacional expresión2 será verdadero o falso. Estos operadores de relación se pueden aplicar a cualquiera de los cuatro tipos de datos estándar: entero, real, lógico y carácter. Operadores Lógicos: permiten relaciones lógicas (si/no) y sirven para representar condiciones compuestas. no (not) no p negación de p y (and) p y q conjunción de p y q o (or) p o q disjunción de p y q Teniendo en cuenta los datos anteriores la siguiente expresión tiene como resultado: 3 + 5 * (10 − (2 + 4)) = ¿? Evaluación: Resolver el ejercicio planteado en la forma que usted cree más conveniente. Bibliografía: Guillermo Correa Uribe (1998), Desarrollo de Algoritmos Y Sus Aplicaciones en Basic, Pascal, Cobol y C, McGraw−Hill. Francisco Javier Ceballos (1990), Curso de Programación con C, Macrobit. 6

Manuel Abellanas y Dolores Lodares (1990), Análisis de algoritmos y teoría de grafos, Ra−Ma Guía de Aprendizaje Duración: 2 horas Modulo: Programación de Computadores. Tema: LECCIÓN 4, INTRODUCCIÓN A LOS ALGORITMOS Introducción: Los lenguajes de programación permiten expresar los algoritmos en una notación formal que pueda ser reconocida y ejecutada por el computador. Objetivos: 1. Utilizar los algoritmos para la solución de problemas. 2. Describir las fases de desarrollo de un sistema de procesamiento de datos. Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: Hasta ahora se han realizado algunos comentarios respecto a la necesidad de diseñar algoritmos correctos y eficientes utilizando los elementos de un lenguaje de programación. El acto de diseñar algoritmos puede considerarse como una tarea que difícilmente podrá ser del todo automatizada. Todo problema es un reto para el diseñador: algunos resultan inmediatos de resolver, otros son bastante complejos. La investigación en esta área ha permitido descubrir un conjunto de métodos o esquemas de diseño hacia los cuales puede orientarse la realización de muchos algoritmos. No obstante, y a pesar de que resulta más adecuado en bastantes casos utilizar algunos de estos esquemas que realizar un diseño desde cero, idear un algoritmo continúa siendo una labor bastante creativa donde los conocimientos y la experiencia del propio diseñador tienen un papel fundamental. Dos técnicas de las más usadas en la práctica son divide y vencerás y el método voraz. Divide y vencerás: Consiste en descomponer un problema en subproblemas, resolver independientemente los subproblemas para luego combinar sus soluciones y obtener la solución del problema original. Esta técnica se puede aplicar con éxito a problemas como la multiplicación de matrices, la ordenación de vectores, la búsqueda en estructuras ordenadas, etc. Como ejemplo sencillo de aplicación de esta estrategia puede considerarse la búsqueda de una palabra en un diccionario de acuerdo con el siguiente criterio. Se abre el diccionario por la página central (quedando dividido en dos mitades) y se comprueba si la palabra aparece allí o si lexicográficamente es anterior o posterior. Si no se ha encontrado y es anterior, se procede a buscarla en la primera mitad; si es posterior, se buscará en la segunda mitad. El procedimiento se repite sucesivamente hasta encontrar la palabra o decidir que no aparece. Método Voraz: Este método trata de producir algún tipo de mejor resultado a partir de un conjunto de opciones candidatas. Para ello, se va procediendo paso a paso realizándose la mejor elección (usando una función objetivo que respeta un conjunto de restricciones) de entre las posibles. Puede emplearse 7

en problemas de optimización, como el conocido de la mochila, en la búsqueda de caminos mínimos sobre grafos, la planificación en el orden de la ejecución de unos programas de computador. Consideremos ahora el problemas de la devolución del cambio al realizar una compra. Suponiendo que se disponga de cantidad suficiente de ciertos tipos de monedas de curso legal, se trata dar como cambio la menor cantidad posible usando estos tipos de monedas. La estrategia voraz aplicada comienza devolviendo, cuando se pueda, la moneda de mayor valor (es decir, mientras el valor de dicha moneda sea mayor o igual al cambio que se resta por dar), continúa aplicándose el mismo criterio para la segunda moneda más valiosa, y así sucesivamente. El proceso finaliza cuando se ha devuelto todo el cambio. Evaluación: Se deben tener presentes todos y cada uno de los conceptos descritos anteriormente, pues cada vez que se desee resolver un problema se deben utilizar adecuadamente. Bibliografía: Guillermo Correa Uribe (1998), Desarrollo de Algoritmos Y Sus Aplicaciones en Basic, Pascal, Cobol y C, McGraw−Hill. Francisco Javier Ceballos (1990), Curso de Programación con C, Macrobit. Manuel Abellanas y Dolores Lodares (1990), Análisis de algoritmos y teoría de grafos, Ra−Ma Guía de Aprendizaje Duración: 2 horas Modulo: Programación de Computadores. Tema: LECCIÓN 5, UTILIDAD DE LOS ALGORITMOS Introducción: Los algoritmos los ejecutamos a lo largo de nuestras actividades diarias, como por ejemplo: levantarse para asistir a clase en el SENA, desayunar, ... etc. y tenemos en cuenta un conjunto de instrucciones mínimas y el orden en el cual debemos ejecutarlas. Objetivos: 1. Utilizar las diferentes clases de algoritmos para la solución de problemas. 2. Reconocer fácilmente cada elemento escrito en un algoritmo. Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: Cuando se tiene un problema para el cual debemos especificar un algoritmo solución tendremos en cuenta varios puntos: • Si no se conoce un método para solucionar el problema, debemos hacer un análisis del mismo para llegar a una solución luego de evaluar alternativas, escogencias y excepciones. • Si se conoce un buen método de solución al problema, entonces se debe especificar el método de solución en un lenguaje que se pueda interpretar fácilmente. 8

• Los problemas pueden agruparse en conjuntos de problemas que tienen algo en común. Puede existir un método que dé solución al conjunto. • Hay criterios para determinar qué tan buena es una solución, indiferente de ver si trabaja o no, o hasta qué punto es general la aplicabilidad del método. Estos criterios involucran cosas como eficiencia, elegancia, velocidad, etc. • Al definir con exactitud un método de solución para un problema, éste debe ser capaz de encontrar la solución, si existe y en caso contrario suspender toda acción. • El método de solución debe ser compatible con el dispositivo usado. En nuestro caso el microcomputador o PC. Es decir, la solución debe enunciarse en un lenguaje soportado por el dispositivo a usarse. CARACTERÍSTICAS DE LOS ALGORITMOS • Entrada: todo algoritmo debe tener cero (0) o más elementos de entrada. Como valores, cantidades, condiciones, etc. • Proceso: cálculos necesarios para encontrar la solución del problema. • Salida: todo algoritmo produce uno o más elementos como resultado. • Finito: todo algoritmo tiene un número fijo de pasos. • Hay algoritmos para los cuales el número de pasos es fijo o tiene un máximo estipulado. (se necesita controlar el número de pasos − contador) • Hay algoritmos para los cuales el número máximo de pasos está relacionado con los datos y se puede calcular a priori o predecirlos. • Hay otros algoritmos que el número máximo de pasos está relacionado con los datos pero no podemos predecir el número de pasos. • Precisión: cada paso del algoritmo debe definirse con exactitud, sin ambigüedades. • Validez: el algoritmo debe ser exitoso y producir resultados esperados. Si el número de pasos está condicionado a un dato y este no se da, el proceso nunca terminaría y diremos por tanto que el algoritmo es no−válido. Ejemplos De Algoritmos: • Cambiar una llanta: Juan recibe la siguiente información: su automóvil tiene una llanta pinchada. Juan se dirige al parqueadero con el objeto de cambiar la llanta pinchada. Entonces, debe revisar llantas (subproceso) si están bien, devolverse sino asegurar vehículo colocar gato y aflojar pernos reemplazar llanta asegurar llanta

9

guardar herramienta • Directorio telefónico: supongamos que Juan encontró una llanta pinchada y no sabe repararla. Busca un directorio telefónico para consultar el número telefónico de un amigo y pedirle instrucciones. Entonces, busca primer apellido busca primer nombre busca segundo apellido etc. • El agua y el vino: se tienen dos vasijas, una con agua y otra con vino; la primera es de vidrio y la segunda de madera. Se quiere que el agua quede en la vasija de madera y el vino en la de vidrio. Grafique la solución. • Las latas: suponga que dispone de una cantidad ilimitada de agua y tiene dos potes o latas, una con capacidad para contener 5l y la otra 4l. Cómo obtener 2l de agua en la de 5l si no tiene medidor exacto? De una solución. • Los platillos: se tiene una balanza de 2 brazos y 6 platillos metálicos p1, p2, p3,...p6. Todos los platillos excepto uno tienen el mismo peso y uno es más pesado que los demás. Encontrar el más pesado. Evaluación: Resolver los ejercicios planteados en la forma que usted cree más conveniente, siempre y cuando siga los parámetros dados y se obtengan las respuestas esperadas. Estos ejercicios los pueden resolver en grupo, teniendo en cuenta el criterio personal y grupal. Bibliografía: Guillermo Correa Uribe (1998), Desarrollo de Algoritmos Y Sus Aplicaciones en Basic, Pascal, Cobol y C, McGraw−Hill. Francisco Javier Ceballos (1990), Curso de Programación con C, Macrobit. Manuel Abellanas y Dolores Lodares (1990), Análisis de algoritmos y teoría de grafos, Ra−Ma Guía de Aprendizaje Duración: 2 horas Modulo: Programación de Computadores. Tema: LECCIÓN 6, INSTRUCCIÓN DE ASIGNACIÓN, ENUNCIADOS DE DECISIÓN. Introducción: La importancia de un seudocódigo en la programación de computadores estriba en la facilidad de describir y representar claramente en un lenguaje no formal (casi personal) las instrucciones de un algoritmo, que más tarde, dependiendo del lenguaje formal que se vaya a utilizar, servirá de base para el código o programa fuente. Objetivos: 1. Agilizar y complementar las instrucciones empleadas en los algoritmos. 2. Implementar los algoritmos antes planeados de una manera más lógica y más acorde con el lenguaje a 10

utilizar. Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: Un enunciado o una instrucción de asignación es una acción o proceso por el cual se le asigna un valor (constante o variable) o el resultado de una operación (expresión) a una variable. Los enunciados de asignación se utilizan generalmente para cambiarle de valor a una variable o definirla. Definir una variable consiste en asignarle o darle por primera vez un valor; y puede hacerse de dos maneras: por medio de una lectura de datos o utilizando un enunciado de asignación. Debe tenerse en cuenta que en la parte izquierda de un enunciado de asignación siempre va y debe de ir una variable. Con una flecha (!) podemos definir que es una asignación e indica que el valor de la parte derecha del enunciado (variable, expresión o constante) se le asigna a la parte de la izquierda (variable). Sin embargo muchas personas acostumbran utilizar el signo (=) para indicar la asignación. El enunciado de asignación es asimétrico. Esto quiere decir que la expresión de la derecha es evaluada, para ser asignado el resultado o la variable especificada a la izquierda. De acuerdo con esta definición no sería válida la sentencia: 3.141592 * R * R = Área Lo correcto sería. Área = 3.141592 * R * R REGLAS PRÁCTICAS A TENER EN CUENTA AL MOMENTO DE LA CONSTRUCCIÓN DE ENUNCIADOS: • Toda variable que aparezca al lado derecho de un enunciado de asignación debe estar definida • En un enunciado de asignación la variable de la izquierda es la única que cambia de valor cuando con anterioridad tiene un valor asignado. • Las variables que aparezcan en la parte derecha de un enunciado de asignación, conservan su valor después de ejecutarse el enunciado. • Si la variable de la parte izquierda se encuentra también al lado derecho, ésta variable cambia de valor por aparecer en la izquierda. ENUNCIADOS DE DECISIÓN En el desarrollo de un algoritmo la mayoría de las veces se verá abocado a situaciones de excepción o comparación con el objetivo de aclarar o conocer alguna circunstancia en particular. Para que el algoritmo sea flexible y general se deben tener en cuenta todas las posibilidades o alternativas que puedan presentarse en un momento determinado. De aquí la necesidad de hacer comparaciones y tomar decisiones. Básicamente los enunciados de decisión se utilizan para tomar una acción o conocer el estado de alguna situación en especial.

11

Todo enunciado de decisión generalmente permite como respuestas o salidas dos alternativas, un Si o un No. También pueden expresarse las salidas utilizando operadores relacionales, las palabras CIERTO o FALSO o las palabras ENTONCES o SINO. La composición de un enunciado de decisión podría ser: SI (VARIABLE vs VARIABLE) ENTONCES Enunciado(s)O SINO Enunciado(s) FIN_SI CONDICIONES DE LOS ENUNCIADOS DE DECISIÓN COMPOSICIÓN Se Puede Comparar:

EJEMPLO (NETO <= 200000)

VARIABLE contra CONSTANTE (HRSEXTRAS < HRNORMALES) VARIABLE contra VARIABLE (NETO = (VRHR * HRTRA) VARIABLE contra EXPRESIÓN ((SALARIO − DESCTOS) = 200000) EXPRESIÓN contra CONSTANTE ((DEVENGADO − ISS) = NETO) EXPRESIÓN contra VARIABLE ((SALARIO − DESCTOS) = (NETO − ISS)) EXPRESIÓN contra EXPRESIÓN (200000 > NETO) CONSTANTE contra VARIABLE (200000 >= (DEVENGADO − ISS)) CONSTANTE contra EXPRESIÓN Ejercicios • Imprima el nombre, la edad, sexo y el estado civil de una persona. • Lea de un mismo registro el nombre, sexo y la edad de cualquier persona e imprima tanto el nombre como la edad. • Lea de un mismo registro el nombre y la edad de cualquier persona e imprima, sólo si la persona es mayor de edad, el nombre de la persona. • Lea de un mismo registro el nombre y la edad de cualquier persona e imprima sólo si la persona es mayor de edad, el nombre de la persona, de lo contrario un mensaje que diga : No puede votar. • Lea de un mismo registro el nombre, la edad y el sexo de una persona e imprima, sólo si la persona es de sexo masculino y mayor de edad el nombre de la persona. Nota: Suponga que el registro que se lee tiene grabado, en el campo denominado sexo el número 1 en vez de la palabra masculino o el número 2 en vez de la palabra femenino.

12

• Lea de un mismo registro el nombre, la edad, el sexo y el estado civil de cualquier persona e imprima, sólo si la persona es hombre o mujer menor de edad o es hombre casado de cualquier edad, el nombre de la persona y un mensaje que diga Usted no se manda. En los demás casos imprima el nombre de la persona solamente. Evaluación: Resolver los ejercicios planteados en la forma que usted cree más conveniente, siempre y cuando siga los parámetros dados y se obtengan las respuestas esperadas. Estos ejercicios los pueden resolver en grupo, teniendo en cuenta el criterio personal y grupal. Bibliografía: Guillermo Correa Uribe (1998), Desarrollo de Algoritmos Y Sus Aplicaciones en Basic, Pascal, Cobol y C, McGraw−Hill. Francisco Javier Ceballos (1990), Curso de Programación con C, Macrobit. Manuel Abellanas y Dolores Lodares (1990), Análisis de algoritmos y teoría de grafos, Ra−Ma Selim G. Akl (1989), The Desing and Analysis of Parallel Algorithms, Prentice−Hall. Traducción al castellano (1992): Diseño y Análisis de Algoritmos Paralelos, Ra−Ma Guía de Aprendizaje Duración: 2 horas Modulo: Programación de Computadores. Tema: LECCIÓN 7, ENUNCIADOS DE REPETICIÓN. Introducción: La ventaja fundamental que tiene un computador es el de hacer las operaciones supremamente rápido. Debido a esta circunstancia el computador se utiliza para ejecutar un conjunto de enunciados repetitivamente para así aprovechar su velocidad. Los enunciados de repetición permiten como su nombre lo indica repetir varias o muchas veces un conjunto de enunciados según se necesite de acuerdo a una condición. Objetivos: 1. Complementar los algoritmos anteriores de modo que se puedan ejecutar no sólo una vez sino muchas veces. 2. Agilizar la ejecución y eliminar las instrucciones no necesarias, pues con los enunciados de repetición muchas de estas instrucciones sobran. Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: Existen varios tipos de enunciados de repetición a saber: Sentencia Mientras Que (While): En esta sentencia el número de veces que se han de repetir algunas instrucciones no se conoce por anticipado y el interior de la sentencia se repite MIENTRAS se cumple una 13

determinada condición. Por esta razón, esta sentencia se denomina Ciclo o sentencia Condicional. Ejecuta una sentencia, simple o compuesta, cero o más veces, dependiendo del valor de una expresión. MIENTRAS (CONDICIÓN) HAGA SENTENCIA(S) FIN_MIENTRAS Condición es cualquier expresión numérica, relacional o lógica. Sentencia es una instrucción simple o compuesta. Reglas de funcionamiento • La condición se evalúa antes y después de cada ejecución. Si la condición es verdadera, se ejecuta el ciclo, y si es falsa, el control pasa a la sentencia siguiente del ciclo. • Si la condición es falsa cuando se ejecuta el ciclo por primera vez, el cuerpo del ciclo no se ejecutara nunca. En este caso se dice que el ciclo se ha ejecutado cero veces. • Mientras la condición sea verdadera el ciclo se ejecutara. Esto significa que se ejecutara indefinidamente a menos que algo en su interior modifique la condición haciendo que su valor cambie a falso. Si la expresión nunca cambia de valor entonces el ciclo no termina nunca y se define como un ciclo infinito o sin fin (que no es lo más deseable). PRECAUCIONES • La condición lógica de un ciclo Mientras debe tener un valor la primera vez que se evalúa; en caso contrario, el programa abortará al ejecutarse el ciclo Mientras. • La condición lógica de un ciclo Mientras, debe ser modificada por una sentencia en el cuerpo (interior) del ciclo; en caso contrario, el ciclo se hace infinito. • Es posible que el cuerpo del ciclo no se ejecute nunca. Esto sucederá si la condición lógica es falsa la primera vez que se evalúa. Ciclos controlados por un contador Son aquellos ciclos cuyas iteraciones o repeticiones son controladas por una variable cuyo valor representa a un contador. Este ciclo consta de tres (3) partes , además del cuerpo y de la condición de salida. • Inicialización de una variable de control. • Comprobación del valor de la variable de control. • Incremento del valor de la variable de control. Se utiliza un ciclo controlado por contadores cuando se puede anticipar con antelación cuantas repeticiones se deben ejecutar exactamente. Cada vez que se ejecute el cuerpo del ciclo, el contador se incrementa en un número programado por el usuario (cuando incrementa la variable de control). Ejemplo:

I=0 14

MIENTRAS (I < 10) HAGA IMPRIMA (I) I=I+1 FIN_MIENTRAS Salida: 0, 1, 2, 3, ..., 9 Se ejecuta 10 veces I=0 MIENTRAS (I < 10) HAGA I=I+1 IMPRIMA (I) FIN_MIENTRAS Salida: 1, 2, 3, ..., 10 Se ejecuta 10 veces

I=1 MIENTRAS (I < 10) HAGA IMPRIMA (I) I=I+1 FIN_MIENTRAS Salida: 1, 2, 3, ..., 9 Se ejecuta 9 veces I=1 MIENTRAS (I < 10) HAGA I=I+1 IMPRIMA (I) FIN_MIENTRAS 15

Salida: 2, 3, 4, ..., 10 Se ejecuta 9 veces

I=0 MIENTRAS (I <= 10) HAGA IMPRIMA (I) I=I+1 FIN_MIENTRAS Salida: 0, 1, 2, 3, ..., 10 Se ejecuta once veces I=0 MIENTRAS (I <= 10) HAGA I=I+1 IMPRIMA (I) FIN_MIENTRAS Salida: 1, 2, 3, 4, ..., 10 Se ejecuta diez veces

Ejercicio Escriba un programa que genere los primeros N múltiplos de 3 y calcule e imprima: la suma y el promedio. INICIO LEA NUMAX SUMA = 0 VARCON = 1 MIENTRAS (VARCON <= NUMAX) HAGA MULTIPLO = 3 * VARCON

16

SUMA = SUMA + MULTIPLO VARCON = VARCON + 1 FIN_MIENTRAS PROMEDIO = SUMA / NUMAX IMPRIMA (SUMA, PROMEDIO) FIN_INICIO NUMAX Número hasta el cual se generarán los múltiplos de 3 VARCON Variable de control Resolver • Imprima los 100 primeros números naturales. • Imprima los números pares comprendido entre 1 y 1000 • Lea un número entero positivo y obtenga los múltiplos de tres (3) comprendidos entre 1 y el número leído. • Leer varios registros cada uno de los cuales contiene un nombre. Imprima los nombres. • Imprima la tabla de multiplicar de un número leído por teclado, y con el multiplicador de 1 a 15. Evaluación: Resolver los ejercicios planteados en la forma que usted cree más conveniente, siempre y cuando siga los parámetros dados y se obtengan las respuestas esperadas. Estos ejercicios los pueden resolver en grupo, teniendo en cuenta el criterio personal y grupal. Se entregará un taller con los ejercicios más representativos de esta clase de ciclos, para luego realizar un examen individual, donde se medirán los conocimientos adquiridos durante las anteriores secciones de clase. Bibliografía: Guillermo Correa Uribe (1998), Desarrollo de Algoritmos Y Sus Aplicaciones en Basic, Pascal, Cobol y C, McGraw−Hill. Francisco Javier Ceballos (1990), Curso de Programación con C, Macrobit. Manuel Abellanas y Dolores Lodares (1990), Análisis de algoritmos y teoría de grafos, Ra−Ma Selim G. Akl (1989), The Desing and Analysis of Parallel Algorithms, Prentice−Hall. Traducción al castellano (1992): Diseño y Análisis de Algoritmos Paralelos, Ra−Ma Duración: 2 horas Modulo: Programación de Computadores. Tema: LECCIÓN 8, CICLO MIENTRAS CONTROLADOS CON UNA CONDICIÓN. Introducción: En la sección anterior se describió la forma en como trabajan los ciclos controlados por un contador, en donde vimos su eficacia y eficiencia, pero no solo de esa forma son controlados los ciclos, aquí veremos que también se pueden controlar por medio de una condición.

17

Objetivos: 1. Utilizar las maneras más eficientes (no sólo una) para resolver cualquier clase de problema que tenga que ver con repeticiones. 2. Agilizar la ejecución y eliminar las instrucciones no necesarias, pues con los enunciados de repetición muchas de estas instrucciones sobran. Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: Ciclos controlados por una condición Estas instrucciones son utilizadas cuando no se conoce por anticipado el número de veces que se han de repetir las instrucciones dentro de un ciclo. Hay diferentes maneras de realizar el control, como son: • Solicitar al usuario la continuación del ciclo, el cual sólo continua si el usuario decide si hay más entradas. Ejemplo SUMA = 0 IMPRIMA (DESEA CONTINUAR S / N:) LEA RESPUESTA MIENTRAS (RESPUESTA = `S') HAGA IMPRIMA (INTRODUZCA UN NÚMERO....) LEA NUM SUMA = SUMA + NUM IMPRIMA (DESEA CONTINUAR S / N:) LEA RESPUESTA FIN_MIENTRAS • Dato O Valor Centinela Centinela es un valor utilizado para señalar el final de una lista de datos, el valor elegido debe ser totalmente distinto de los posibles valores de la lista para que este se pueda ser utilizado. Si la lista son números enteros positivos, un número negativo quedaría bien como dato centinela. El siguiente ejemplo suma una lista de números negativo únicamente, y termina cuando entra un solo dígito 18

positivo. Ejemplo SUMA = 0 LEA NUMERO MIENTRAS (NUMERO <= 0) HAGA SUMA = SUMA + NUMERO LEA NUMERO FIN_MIENTRAS • Uso de banderas o interrupciones: (Flag) son unas variables lógicas que se utilizan para conservar el estado (verdadero o falso) de una condición. El valor del interruptor debe inicializarse antes de comenzar el ciclo y debe cambiar su estado (valor) dentro del cuerpo del ciclo para preparar la siguiente repetición. Estos Flag se representan con variables lógicas, las cuales se inicializan en uno de los dos posibles valores (Verdadero o falso) y toma el otro valor cuando sucede el evento que se esta verificando. Evaluación: Con base a los conocimientos ya adquiridos, estamos en capacidad de resolver cualquier problema utilizando las técnicas adecuadas de programación Bibliografía: Guillermo Correa Uribe (1998), Desarrollo de Algoritmos Y Sus Aplicaciones en Basic, Pascal, Cobol y C, McGraw−Hill. Francisco Javier Ceballos (1990), Curso de Programación con C, Macrobit. Manuel Abellanas y Dolores Lodares (1990), Análisis de algoritmos y teoría de grafos, Ra−Ma Selim G. Akl (1989), The Desing and Analysis of Parallel Algorithms, Prentice−Hall. Traducción al castellano (1992): Diseño y Análisis de Algoritmos Paralelos, Ra−Ma Duración: 2 horas Modulo: Programación de Computadores. Tema: LECCIÓN 9, CICLO REPETITIVO PARA Introducción: Cuando se desea ejecutar una sentencia simple o compuesta, repetidamente un número de veces conocido, la construcción adecuada es la sentencia PARA. Objetivos: 1. Utilizar las maneras más eficientes (no sólo una) para resolver cualquier clase de problema que tenga que ver con repeticiones. 2. Agilizar la ejecución y eliminar las instrucciones no necesarias, pues con los enunciados de repetición muchas de estas instrucciones sobran. 19

Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: Este ciclo requiere que se conozca por anticipado el número de veces que se han de ejecutar las sentencias en el interior del ciclo. Si se desea que las sentencias controladas se ejecuten hasta que ocurra una determinada situación y no se conoce de antemano el número de repeticiones, entonces lo más viable para utilizar en el ciclo Mientras o Repita en lugar de Para. Composición del Ciclo Para PARA (VBLEINI = VALOR HASTA VALORFIN) HAGA ENUNCIADO A REPETIR ENUNCIADO A REPETIR FIN_PARA ENUNCIADO ENUNCIADO VBLEINI Representa una variable que será inicializada con un VALOR determinado. La ejecución de la expresión o sentencia PARA sucede de la siguiente forma: • Se inicializa la variable con un valor determinado. • Se evalúa la expresión del Valor final. • Si el resultado es distinto de cero (verdadero), se ejecuta la sentencia, se evalúa la expresión que da lugar al Valor final. • Si el resultado de 2, es cero (falso), la ejecución de la sentencia PARA se por finalizada y se continúa en la siguiente sentencia del programa. Ejemplo PARA (I = 1; I <= 100; I++) IMPRIMA (I) FIN_PARA Este ejemplo imprime los números del 1 al 100. Literalmente dice: desde I igual a 1, mientras I sea menor o igual que 100, con incremento de 1, imprima el valor de I. PARA (I = 1; I <= 10; I += 05) IMPRIMA (%G,I) 20

FIN_PARA Este ejemplo imprime los números del 1 al 10 con incremento de 0.5. PARA (K = 7; K <= 112; K += 7) IMPRIMA (%D,K) FIN_PARA Este ejemplo imprime los múltiplos de 7 que hay entre 7 y 112. CICLOS ANIDADOS Un ciclo PARA puede colocarse dentro de otro ciclo PARA y entonces se dice que están anidados. En este caso el ciclo interno se ejecutará totalmente, por cada valor del ciclo que lo contiene. Ejemplo Escribir un programa que imprima un triángulo construido con caracteres consecutivos del código ASCII, como el que aparece a continuación. ¡ # $%& `()* +,−./ 012345 #include "stdio.h" #include "conio.h" /* Este ejemplo construye un triángulo de N filas con caracteres */ void main (void) { clrscr(); char car; unsigned int filas, columnas; unsigned int nfilas;

21

printf ("N−mero de Filas del Triangulo: "); scanf ("%d",&nfilas); for (filas = 1, car = '\x20'; filas <= nfilas; filas ++) { for (columnas = 1; columnas <= filas; columnas ++) { car ++; printf ("%3c", car); /* 3c Espacios entre caracteres */ } printf ("\n"); } getche(); } imprimir un tablero de ajedrez y sobre el marcar con un * las celdas a las que se puede mover un alfil desde una posición dada. Desarrollo del problema: • Leer Fila y Columna en la que se coloca el alfil. • Partiendo de la Fila 1, Columna 1 y recorriendo por Filas el tablero imprimir un(a): • * Si se cumple, que la suma o diferencia de la fila y la columna actuales, coincide con la suma o diferencia de la fila y columna donde se coloca el alfil. • N Si se cumple, que la fila más columna actual es par. • B Si se cumple, que la fila más columna actual es impar. #include "stdio.h"#include "conio.h" /* Este ejemplo construye un tablero de ajedrez con la posición de un alfil */void main (void){ clrscr(); int falfil, calfil; /* Posición del alfil */ int fila, columna; /* Posición actual */ printf ("Posición del alfil (fila, columna): "); scanf ("%d %d", &falfil, &calfil); for (fila = 1; fila <= 8; fila ++) { for (columna = 1; columna <= 8; columna ++) { if ((fila + columna == falfil + calfil) || (fila − columna == falfil − calfil)) printf (" * "); 22

else if ((fila + columna) %2 ==0) printf ("NNN"); /* Alt + 219 */ else printf ("BBB"); /* Alt + 176 */ } printf ("\n"); /* Cambiar la Fila */ } getche(); } ejercicio • Elaborar un algoritmo que lea N registros donde cada uno tiene el valor de X, y encontrar su suma total. (Utilizando el ciclo PARA). El número de registros será indicado por un registro identificador. • Elaborar un algoritmo que encuentre e imprima los números impares comprendidos entre cero y cuarenta. Además hallar la suma de ellos. • Elaborar un algoritmo que imprima el nombre y la edad de 20 personas. • Elaborar un algoritmo que lea 40 números e imprima sólo los números negativos. • Elaborar un algoritmo que lea 80 registros, donde cada uno tenga un numero y determine: • La cantidad de números impares. • La cantidad de números pares (Excluya el Cero). • La cantidad de ceros. Evaluación: Realizar los algoritmos propuestos con el fin de afianzar conocimientos y destrezas en el uso de los ciclos PARA, tanto sencillos como anidados. Bibliografía: Guillermo Correa Uribe (1998), Desarrollo de Algoritmos Y Sus Aplicaciones en Basic, Pascal, Cobol y C, McGraw−Hill. Francisco Javier Ceballos (1990), Curso de Programación con C, Macrobit. Manuel Abellanas y Dolores Lodares (1990), Análisis de algoritmos y teoría de grafos, Ra−Ma Selim G. Akl (1989), The Desing and Analysis of Parallel Algorithms, Prentice−Hall. Traducción al castellano (1992): Diseño y Análisis de Algoritmos Paralelos, Ra−Ma Guía de Aprendizaje Duración: 2 horas Modulo: Programación de Computadores. 23

Tema: LECCIÓN 10, SENTENCIAS CASO. Introducción: Las sentencias CASO se le aplica a una variable que en su contenido pueda guardar un valor de 3 o más posibles valores. No es conveniente aplicar la sentencia CASO a la variable sexo, porque sólo puede guardar un valor de entre dos posibles valores, ya que con sólo preguntar por uno de su valores se concluye también el otro. Objetivos: Evitar el nido exagerado de preguntas (SI anidados). Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: La sentencia CASO se utiliza para elegir entre diferentes alternativas. Una sentencia CASO se compone de varias sentencias simples. Cuando CASO se ejecuta, una (y sólo una) de las sentencias simples se selecciona y ejecuta. CASO (SELECCIÓN) HAGA LISTA CONSTANTES 1: SENTENCIA 1; LISTA CONSTANTES 2: SENTENCIA 2; . . LISTA CONSTANTES N: SENTENCIA N; [SINO SENTENCIAS X] FIN_CASO REGLAS • La expresión SELECCIÓN se evalúa y se compara con las listas de constantes; las listas de constantes son listas d uno o más posibles valores de SELECCIÖN separadas por comas. Sólo se ejecuta una sentencia. Si el valor de SELECCIÓN esta en la lista de constantes 1, se ejecutará la sentencia 1. El control se pasa seguidamente a la primera sentencia a continuación del FIN_CASO. Cada sentencia puede ser a su vez una sentencia simple o compuesta. • la cláusula SINO es opcional como en la sentencia SI. • Si el valor de SELECCIÓN no esta comprendido en ninguna lista de constantes y no existe la cláusula SINO, no sucede nada y sigue el flujo del programa; si el valor de SELECCIÓN no coincide con alguna constante, se ejecutan las sentencias a continuación de la cláusula SINO. • La Selección debe ser un tipo (Integer, Char, Boolean o enumerado). Los números reales no pueden ser utilizados ya que no son ordinales. Los valores ordinales de los limites inferiores y superiores deben estar 24

entre los limites del rango −32768 a 32767. Por consiguiente, los tipos String, Longint y Word no son validos. • Todas las constantes CASO deben ser únicas y de un tipo ordinal compatible con el tipo de SELECCIÓN. • Toda sentencia, excepto la última, deben ir seguidas de punto y coma. Ejemplo LEA CARÁCTER CASO CARÁCTER HAGA `0'..'9' : IMPRIMA (NUMERO) `A'..'Z' : IMPRIMA (MAYUSCULA) `a'..'z' : IMPRIMA (MINUSCULA) FIN_CASO Las sentencias CASO son utilizados también en aquellos programas que deben presentar con mucha frecuencia menús. Un menú son un conjunto de opciones que se le presentan al usuario, para los cuales se debe elegir una opción de ellas, dependiendo de la decisión se realizará una serie de opciones. Un menú podría ser: N : Nombre D : Dirección T : Teléfono C : Ciudad F : Fin El programa debe permitir elegir una de las 5 opciones presentadas. La opción se debe asignar una variable SELECCIÓN de tipo char. El usuario podrá introducir el carácter en minúsculas o en mayúsculas. LEA CARÁCTER CASO CARÁCTER HAGA `N', `n' : INICIO IMPRIMA (DIGITE SU NOMBRE: ) LEA NOMBRE FIN `D', `d' : INICIO

25

IMPRIMA (DIGITE SU DIRECCIÓN: ) LEA DIRECCION FIN `T', `t' : INICIO IMPRIMA (DIGITE SU TELÉFONO: ) LEA TELÉFONO FIN `C', `c' : INICIO IMPRIMA (DIGITE LA CIUDAD: ) LEA CIUDAD FIN `F', `f' : [ FIN ] ELSE IMPRIMA (OCION NO VALIDA) FIN_CASO El siguiente ejercicio lee una fecha representada por dos enteros, mes y año y da como resultado los días totales correspondientes al mes y al año solicitado. También tiene en cuenta que Febrero puede tener 28 o 29 días si el año es bisiesto. Un año es bisiesto cuando es múltiplo de 4 y no de 100 o cuando es múltiplo de 400. #include "stdio.h"#include "conio.h"/* Días correspondientes a un mes de un año dado */void main (void){ unsigned int dd, mm, aa; clrscr(); printf ("Introduzca Mes (mm) y Año (aaaa): "); scanf ("%d %d",&mm, &aa); switch (mm) { case 1: case 3: case 5: case 7: case 8:

26

case 10: case 12: dd = 31; break; case 4: case 6: case 9: case 11: dd = 30; break; case 2: if ((aa %4 == 0) && (aa %100 != 0) || (aa %400 == 0)) dd = 29; else dd = 28; break; default: printf ("\nEl Mes No Es Valido \n"); } if (mm >= 1 && mm <= 12) printf ("\nEl Mes %2d del Año %4d Tiene %2d Días \n", mm, aa, dd); getche(); } El siguiente ejemplo calcula el importe a pagar por un vehículo al circular por una autopista. Se utilizará un tipo enumerado. Las variables de un tipo enumerado son tratadas como si fueran de tipo INT. A cada elemento d un tipo ordinal se le asigna el número de orden partiendo del 0. Este número de orden puede ser alterado, como se hace en el ejemplo.

27

#include "conio.h" #include "stdio.h" /* Calcula el impuesto a pagar por un vehículo al circular por una autopista(Peajes) */ void main (void) { enum tipo_vehículo { bicicleta = 1, moto, automóvil, camión }; enum tipo_vehiculo vehiculo; int km, tm, importe; clrscr(); printf ("\t1 − bicicleta \n"); printf ("\t2 − moto \n"); printf ("\t3 − automóvil \n"); printf ("\t4 − camión \n"); printf ("\n\tPulse la Opci¢n Deseada: "); scanf ("%d", &vehiculo); switch (vehículo) { case bicicleta: importe = 100; break; case moto:

28

case automovil: printf ("\nKilometros?: "); scanf ("%d", &km); importe = 30 * km; break; case camion: printf ("\nKilometros y Toneladas?: "); scanf ("%d %d", &km, &tm); importe = 30 * km + 25 * tm; break; default: printf ("\nLa opci¢n no es correcta \n"); } if (vehículo >= bicicleta && vehículo <= camión) printf ("\nImporte = %d\n", importe); getche(); } Ejercicio Elabore un algoritmo para que lea un carácter cada vez hasta que llegue un *, si el carácter leído corresponde a la letra del nombre de un día de la semana, que imprima el nombre de dicho día y si no, que imprima un mensaje de error. Al final del proceso debe mostrar cuantas repeticiones hubo de cada día, y los errores cometidos. Evaluación: Realizar el algoritmos propuesto con el fin de afianzar conocimientos y destrezas en el uso de las sentencias CASO. Bibliografía: Guillermo Correa Uribe (1998), Desarrollo de Algoritmos Y Sus Aplicaciones en Basic, Pascal, Cobol y C, McGraw−Hill. Francisco Javier Ceballos (1990), Curso de Programación con C, Macrobit. Manuel Abellanas y Dolores Lodares (1990), Análisis de algoritmos y teoría de grafos, Ra−Ma Selim G. Akl (1989), The Desing and Analysis of Parallel Algorithms, Prentice−Hall. Traducción al castellano (1992): Diseño y Análisis de Algoritmos Paralelos, Ra−Ma 29

Guía de Aprendizaje Duración: 2 horas Modulo: Programación de Computadores. Tema: LECCIÓN 11, SENTENCIAS SWITCH. Introducción: Cuando se plantea la necesidad de examinar varios casos correspondientes a diversos valores de una variable, según los cuales en necesario emprender tareas diferentes, es más fácil utilizar una sentencia SWITCH que alguna combinación más o menos compleja de sentencias SI − SINO. Objetivos: Evitar el nido exagerado de preguntas (SI anidados). Permitir ejecutar una de varias acciones, en función del valor de una expresión. Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: La estructura de una sentencia SWITCH es la siguiente: SWITCH (EXPRESIÓN) { [DECLARACIONES] CASO CONSTANTE 1: [SENTENCIAS 1;] [CASO CONSTANTE 2:] [SENTENCIAS 2;] . . [DEFAULT:] [SENTENCIAS N] } EXPRESIÓN Es una constante de caracteres o una expresión constante. El valor es convertido a tipo int.

30

SENTENCIA: puede ser simple o compuesta. Al principio del cuerpo de la sentencia SWITCH, puede aparecer DECLARACIONES. Las inicializaciones, si las hay, son ignoradas. La sentencia SWITCH evalúa la expresión entre paréntesis y compara su valor con las constantes de cada CASO. La ejecución de las sentencias del cuerpo de la sentencia SWITCH, comienza en el CASO cuya constante coincida con el valor de la EXPRESIÓN y continua hasta el final del cuerpo o hasta una sentencia que transfiera el control fuera del cuerpo (por ejemplo BREAK). La sentencia SWITCH puede incluir cualquier número de cláusulas CASO. Si no existe un valor igual al valor de la EXPRESION, entonces se ejecutan las sentencias a continuación de FEFAULT, si esta cláusula ha sido especificada. La cláusula DEFAULT puede colocarse en cualquier parte del cuerpo y no necesariamente al final. Ejercicio Supongamos que el horario de consultas de un médico está condicionado según el día de la semana de acuerdo con las siguientes pautas: lunes y jueves atiende de 10 a 12 de la mañana, miércoles atiende de 2 a 4 de la tarde, martes y viernes la consulta es de 2 a 5 de la tarde y los demás días no atiende. Elabore un algoritmo que le informe el día y el horario cuando se introduzca el número del día, entendiendo que el lunes es el primero, y así sucesivamente. Evaluación: Realizar el algoritmo propuesto con el fin de afianzar conocimientos y destrezas en el uso de las sentencias SWITCH. Bibliografía: Guillermo Correa Uribe (1998), Desarrollo de Algoritmos Y Sus Aplicaciones en Basic, Pascal, Cobol y C, McGraw−Hill. Francisco Javier Ceballos (1990), Curso de Programación con C, Macrobit. Manuel Abellanas y Dolores Lodares (1990), Análisis de algoritmos y teoría de grafos, Ra−Ma Selim G. Akl (1989), The Desing and Analysis of Parallel Algorithms, Prentice−Hall. Traducción al castellano (1992): Diseño y Análisis de Algoritmos Paralelos, Ra−Ma Varios autores (1999), Curso Práctico de Programación de Computadores, CEKIT S.A., Tomo I. Guía de Aprendizaje Duración: 2 horas Modulo: Programación de Computadores. Tema: LECCIÓN 12, SENTENCIA BREAK. Introducción: Esta sentencia finaliza la ejecución de la sentencia DO (HAGA), FOR (PARA), SWITCH o WHILE (MIENTRAS) en la cual aparece. Cuando varias sentencias se encuentran anidadas, la sentencia BREAK solamente finaliza la ejecución de la sentencia donde está incluida..

31

Objetivos: Recordar que si en una sentencia SWITC no se incluye la sentencia BREAK, el proceso seguirá ejecutando cada una de las restantes cláusulas CASO. Permitir ejecutar una de varias acciones, en función del valor de una expresión. Recursos Tablero Acrílico. Didácticos Marcadores borrables. Material textual de apoyo. Desarrollo: Si después de una cláusula CASO se escribe un BREAK, en caso de ser ejecutada se produce la salida de la sentencia CASO. Ejemplo El siguiente ejemplo ilustra la forma más acostumbrada de construir un menú mediante la utilización de las sentencias SWITCH y BREAK. #include "conio.h"#include "ctype.h"#include "stdio.h"/* Construccion de un Menu */#define VERDADERO 1#define FALSO 0 void main (void) { int a, b, salir; float c; char opcion; char *mensaje; mensaje = "1. SUMA\n\ 2. RESTA\n\ 3. PRODUCTO\n\ 4. DIVISION\n\ 5. SALIR\n\ ESCOJA SU OPCION: "; salir = FALSO; do

32

{ clrscr(); printf ("Primer Numero: "); scanf ("%d", &a); printf ("Segundo Numero: "); scanf ("%d", &b); puts (mensaje); opcion = getch(); switch (opcion) { case '1': c = a + b; break; case '2': c = a − b; break; case '3': c = a * b; break; case '4': c = (float)a / b; break; case '5': printf ("Esta usted seguro (s/n)? "); if (toupper (getch()) == 'S') salir = VERDADERO; break; default:

33

puts ("Opcion Inavlida"); c = 0.0; } printf ("\nResultado = %6.2f", c); getche(); } while (!salir); } La sentencia SWITCH (OPCION) indica comparar el valor que tiene la variable OPCION con cada uno de los valores selectos `1', `2', `3', `4' y `5', que son algunos de los caracteres posibles. En cada caso se opta por una determinada operación matemática. El caso DEFAULT corresponde a la situación en que OPCIÓN no reciba del teclado ninguno de estos valores. La declaración CHAR *MENSAJE, se lee textualmente: el valor al cual la variable MENSAJE es de tipo CHAR. Vale la pena hacer aquí una pequeña digresión sobre el tema de los punteros o apuntadores. El operador unario asterisco (*) es llamado de indirección o desreferencia y equivale al universo del operador ampersand (&). El primero indica el valor hacia donde apunta la variable a la cual afecta (que debe ser un puntero o dirección). El segundo indica la dirección donde está contenido el valor de la variable. Por ejemplo, en las instrucciones SCANF, para indicar dónde se debe almacenar el valor introducido por el teclado, se expresa por medio de &A y &B respectivamente, con lo cual se quiere decir: en las direcciones de las variables A y B. Evaluación: Investigar o profundizar sobre estas estructuras, su manera adecuada de funcionar, bajo que medio como funciona y en sí todo lo relacionado con ella. Bibliografía: Guillermo Correa Uribe (1998), Desarrollo de Algoritmos Y Sus Aplicaciones en Basic, Pascal, Cobol y C, McGraw−Hill. Francisco Javier Ceballos (1990), Curso de Programación con C, Macrobit. Manuel Abellanas y Dolores Lodares (1990), Análisis de algoritmos y teoría de grafos, Ra−Ma Selim G. Akl (1989), The Desing and Analysis of Parallel Algorithms, Prentice−Hall. Traducción al castellano (1992): Diseño y Análisis de Algoritmos Paralelos, Ra−Ma Varios autores (1999), Curso Práctico de Programación de Computadores, CEKIT S.A., Tomo I. Un programa objeto es aquel programa que se encuentra en lenguaje de máquina (Unos y Ceros). En algunos lenguajes como PASCAL, estos operadores tienen prioridad sobre +, −.

34

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.