Вы находитесь на странице: 1из 42

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Captulo 2. El paradigma de la programacin estructurada


En el captulo 1 se introdujo el primer ejemplo del cdigo y la forma general de trabajo.. En este captulo abordaremos las reglas que debe cubrir la codificacin. Por qu estamos trabajando en la forma descrita? En algunos sentidos, codificar se asemeja a jugar un deporte. Se deben conocer las reglas que rigen el juego. No obstante, eso sera insuficiente sino hubiera estrategias para ganar el partido y jugadas prefabricadas. La sintaxis son las reglas; la lgica de programacin conforma la estrategia. Por eso es primordial que el estudiante logre desarrollar y aplicar los conceptos de condicionales y ciclos, incluyendo la prueba del algoritmo. Prosiguiendo con esta analoga, prcticamente nadie esperara poder jugar bien un deporte sin practicar cotidianamente. No obstante, un gran nmero de estudiantes aspira a aprender a programar estudiando dos das antes del examen. Adentrmonos, pues, en la lgica de la programacin.

Reflexin 2-1. La necesidad de desarrollar la abstraccin en los estudiantes La mitad del trabajo de programacin se hace fuera del equipo de cmputo. Gran cantidad de algoritmos, componentes de software y arquitecturas de sistemas se expresan en diagramas, sin tener en acceso al cdigo fuente. Por ello es importante desarrollar conceptos de manera abstracta. De all la relevancia de la interpretacin de pseudocdigo y diagramas de flujo, adems de realizar pruebas de escritorio. Pero es igualmente necesario el saber prctico, manifestado en los programas que se ejecutan directamente en el equipo de cmputo. No es claro la forma de lograr ambos propsitos, sobre todo en esta poca

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

en que los estudiantes estn tan acostumbrados a sistemas interactivos, grficos y de respuesta rpida. Estamos ante un problema generalizado que no tiene ninguna respuesta obvia ni sencilla.

El desarrollo de software tiene poco ms de seis dcadas, tomando como referencia el nacimiento de la ENIAC, en 1946. Se trata de un rea joven si la comparamos con ciencias como la fsica, qumica o matemticas, que adquirieron una madurez desde hace siglos. En sus primeros aos, la programacin se basaba en instrucciones muy cercanas al cdigo mquina y necesitaba un conocimiento del hardware sobre el cual se trabajaba. Realizar una multiplicacin o alguna instruccin de complejidad similar- requera de al menos una docena de instrucciones. Era la poca del lenguaje ensamblador, que hoy se sigue empleando en microprocesadores y cdigo embebido. Posteriormente se agruparon instrucciones y se inventaron programas que traducan estos comandos a lenguaje ensamblador. Nacieron de esta forma Fortran en 1957 (para aplicaciones cientficas), COBOL en 1959 (para aplicaciones administrativas) y BASIC en 1964, como lenguaje de uso general. Sin embargo, el estilo de programar en estos lenguajes presentaba un problema: el salto incondicional, representado sobre todo por la instruccin goto de BASIC, la cual permita ir directamente a cualquier lnea de cdigo. El empleo continuo del salto incondicional se convirti en un gran dolor de cabeza para dar mantenimiento a los programas. Para solucionar ese problema naci la programacin estructurada, cuyos representantes ms notorios fueron Pascal y C. La programacin estructurada propugnaba porque todos los programas se basaran en tres estructuras bsicas:

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

a) Secuencia.- el cdigo se ejecutaba de arriba hacia abajo. La secuencia queda implcita a la hora de leer, compilar y ejecutar los programas. b) Condicionales- elementos de decisin que permitan realizar un bloque de instruccin si se cumpla una condicin y, opcionalmente, llevar a cabo otro conjunto de comandos si no se cumpla. c) Ciclos.- repetir una secuencia de instrucciones mientra se cumpliera una condicin. Aunque conservaban el salto incondicional hacan hincapi en que ste no se empleara. El avance natural en esta lnea fue el nacimiento de la Programacin Orientada a Objetos (POO), cuyo representante ms famoso es Java. La POO retoma los tipos de datos y las rutinas de la programacin estructurada y crea con ellos una estructura de mayor potencia: las clases. Este breve recorrido intenta contextualizar a la programacin estructurada, aunque resulta demasiado simplificado y deja fuera de manera injusta a lenguajes de propsito especfico como el ya mencionado COBOL y a otros paradigmas, entre ellos los dedicados al campo de Inteligencia Artificial. Tampoco describe lo sucedido con lenguajes para modo grfico como Visual Basic (basado en la programacin estructurada), que posteriormente se transformara en Visual .NET (basado en la Programacin Orienta a Objetos - POO). En cuanto a la programacin WEB, sta se basa parcialmente en la programacin estructurada (ASP clsico, PHP, JavaScript, etc.) y en la Programacin Orientada a Objetos (J2EE, tecnologa .NET, etc). En sntesis, la programacin estructurada sigue siendo vigente en dos sentidos: varios lenguajes todava la aplican y su conocimiento es base para el aprendizaje de la Programacin Orientada a Objetos.

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

2.1. Qu es un algoritmo?
Como ya se mencion, los ciclos y las condicionales son las estructuras bsicas de la programacin estructurada y sobre stas deben fincarse la creacin de algoritmos bsicos. Un algoritmo es un conjunto de pasos debidamente ordenados y sin ambigedades, que en un tiempo finito dan la solucin a un problema claramente planteado. Un algoritmo puede plantearse de diversas formas, desde la palabra escrita hasta mecanismos formales. Entre los ms conocidos estn: Pseudocdigo: se escriben en el idioma nativo (el espaol, en nuestro caso) palabras cercanas a las instrucciones de un lenguaje de programacin. Es muy recomendable como paso intermedio entre el problema y la codificacin de la solucin en un lenguaje de programacin (Pascal, C, Java, etc.). Diagrama de flujo: establece de manera grfica la solucin del problema, utilizando conos para cada estructura de programacin (ciclos, decisiones, etc.). Sumamente utilizado para aspectos didcticos. UML (Unified Modeling Languaje): la forma de diagramacin utilizada para programacin orientada a objetos. Su conjunto de smbolos se aplica para todas etapas del proceso de desarrollo de software.

Elementos bsicos para expresar el algoritmo en pseudocdigo La gran ventaja y, al mismo tiempo, la gran desventaja del pseudocdigo es que no existen reglas formales para escribirlo. Cada persona puede establecer sus propios criterios. Ciertamente, esto puede dar lugar a ambigedades. Para evitarlo, deber orientarse al alumno hacia las estructuras bsicas de control y establecer claramente los pasos a seguir. Sugerimos al inicio limitar el pseudocdigo a las siguientes convenciones.

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Variables. Una variable es un lugar de memoria que puede guardar un valor, el cual puede cambiar a lo largo del programa, considerando siempre que cuando se asigna un nuevo valor, el valor anterior se pierde. Debe ser identificado por un nombre determinado, el cual slo se utilizar para esa variable. Todas las variables a utilizar deben ser declaradas al inicio del programa. Nombres de identificadores. Los identificadores son nombres que ubican a los diferentes elementos de los programas: el nombre del propio, programa, las variables, etc. Reglas de prioridad. La ejecucin de los operadores aritmticos se realiza con las mismas reglas de lgebra. Primero se harn las multiplicaciones y divisiones, y posteriormente las sumas y restas. De esta forma 8 + 3 * 4 ser igual a 20. Se pueden utilizar parntesis al igual que en matemticas para forzar a que en primer lugar se haga lo que est dentro de ellos. Cabe aclarar que en programacin slo se usan los parntesis circulares. Leer se utilizar para recibir un dato del teclado. Por ejemplo: leer x significar que se recibir el valor de la variable x del teclado. Desplegar se manejar para mostrar un mensaje textual o el valor de una variable en la pantalla. Condicionales. Indican una decisin. Ciclos. Indica que una accin se realizar mientras se cumpla la instruccin sealada. A manera de ejemplo, suponga el ejercicio que fue presentado en el captulo 2: Hacer un programa que reciba el precio normal de un producto y su correspondiente descuento. Como salida, entregue el precio final (con el descuento incluido).

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

El algoritmo que lo soluciona, expresado en pseudocdigo, queda como sigue: declarar precio, descuento y preciofinal como decimales desplegar "Bienvenido" desplegar "Este programa le ayuda a calcular el precio " desplegar " con descuento de un producto" desplegar "Teclee el precio normal y su porcentaje de descuento" leer precio y descuento preciofinal = (precio - precio * descuento / 100) desplegar "El precio final " desplegar preciofinal

Elementos bsicos para expresar el diagrama de flujo Como ya se coment, el pseudocdigo no es la nica forma de representar los algoritmos. Los diagramas de flujo son una forma ms didctica y ampliamente recomendable al iniciar un curso de programacin estructurada, aunque no se aplican mucho en la programacin a nivel profesional por el tiempo que consumen. En los libros de texto suelen haber variaciones entre la forma de representacin, aunque todos guardan el propsito general de forma coherente. Nosotro utilizaremos la versin que se muestra en la figura 2-1. Seala el inicio y el final del diagrama de flujo Entrada de datos del teclado Seala el flujo del algoritmo (el sentido de la secuenciacin) Operacin de asignacin clculo. Despliegue de resultados o

Expresa una decisin a tomar segn la condicin expresada

Figura 2-1. Elementos iniciales de los diagramas de flujo

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

2.2. Elementos bsicos de programacin: condicionales y ciclos


Condicionales Las condicionales establecen una decisin con la estructura siguiente: si (condicin obligatoria) bloque 1 de instrucciones en caso contrario (opcional) bloque 2 de instrucciones termina si La condicin puede llevar inmersa ms de una condicin que al final se evala en su conjunto. El caso calificacin >= 6 y calificacin <= 8 dar al final un nico resultado: verdadero si se cumplen ambas condiciones y falso si una o ambas no se cumplen. Tambin existe el caso en el cual basta con que una condicin sea verdadera para que la expresin en su conjunto se juzgue verdadera (por ejemplo: calificacionparcial =10 calificacionfinal >=9). En diagrama de flujo se identificara como lo muestra la figura 2-2.:

instrucciones

instrucciones

no (opcional)

Figura 2-2. La representacin de condicionales en diagrama de flujo

En prcticamente todos los lenguajes de programacin el si se identifica con un if y en caso contrario con un else. El si (condicin) es obligatorio, mientras

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

en caso contrario (bloque 2 de instrucciones) es opcional. Existen diversas formas para indicar sin ambigedades hasta donde abarca cada bloque de instrucciones: llaves en lenguaje C, begin-end en Pascal, endif en SQL, etc. A manera de ejemplo, suponga que se desea recibir tres calificaciones, desplegar el promedio e indicar si la calificacin es o no es aprobatoria. La calificacin mnima aprobatoria es 8. El algoritmo en diagrama de flujo se muestra en la figura 2-3 y a continuacin se proporciona el pseudocdigo: declarar a, b,c y promedio como decimales desplegar Por favor, teclee sus tres calificaciones leer a, b y c promedio = (a + b + c) / 3 desplegar El promedio es desplegar promedio si promedio >= 8 desplegar APROBADO en caso contrario desplegar REPROBADO termina si

declara a, b, c y promedio como decimales

leer a, b y c promedio = (a + b + c) / 3 desplegar promedio

promedio >= 8 desplegar "aprobado" desplegar "reprobado"

Figura 2-3. Algoritmo del prueba de 3 nmeros empleando diagrama de flujo

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Ciclos Los ciclos Indican que una accin se realizar mientras se cumpla la instruccin sealada. Tienen la estructura mostrada en la figura 2-4: mientras (condicin) instrucciones termina mientras

no

instrucciones

Figura 2-4. La representacin de ciclos en diagrama de flujo Hay que hacer hincapi que la condicin significa mientras que. Por lo tanto, una condicin que siempre se cumpla generara un ciclo infinito. Por el contrario, una condicin que nunca se cumpla implicara que no se ejecutaran las instrucciones del cuerpo del ciclo ni una sola vez. Un error muy frecuente es no identificar claramente aqullo que es repetitivo (va a ir dentro del ciclo) con lo que debe hacerse una sola vez antes o despus del ciclo (debe ir fuera del ciclo). El resultado de este error suele dar resultados equivocados o generar ciclos infinitos. La condicin mientras que se identifica con la palabra while en casi todos los lenguajes.

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Al igual que en condicionales, existen diversas formas para indicar sin ambigedades hasta donde abarca cada bloque de instrucciones: llaves, beginend, endWhile, etc., segn el lenguaje de programacin. Aparte del ciclo mencionado existen otras variantes, cuya conceptualizacin vara un poco segn el lenguaje de programacin. En lenguaje C y Java se manejan tres posibilidades: while, for y do-while. A manera de ejemplo, suponga el mismo ejemplo ya planteado pero con ms calificaciones: se desea recibir ocho calificaciones y desplegar el promedio. Obviamente, podramos declarar 8 variables, pero es ms fcil hacerlo a travs de ciclos. El algoritmo expresado en diagrama de flujo se encuentra en la figura 2-5:

declarar dato, suma y promedio como decimales declarar a como entero suma = 0, a = 0

desplegar "Por favor, teclee sus ocho calificaciones" s

a < 8 ?
leer dato

suma = suma + dato a = a + 1 promedio = suma / 8

desplegar "El promedio es"

Figura 2-5. Algoritmo del promedio de 8 nmeros en diagrama de flujo

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

10

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

declarar dato, suma y promedio como decimales declarar i como entera suma = 0 desplegar Por favor, teclee sus ocho calificaciones mientras (i < 8) leer dato suma = suma + dato termina mientras promedio = suma / 8 desplegar El promedio es desplegar promedio

2.3. Prueba de escritorio


La prueba de escritorio consiste en tratar de seguir paso a paso lo que hace el algoritmo. En otras palabras, tratar de actuar como si uno fuera el equipo de cmputo. Hay que hacer hincapi en ello: no debe pensarse lgicamente ni como se supone que debe ser; es menester desprenderse de la condicin humana y "tratar de actuar como mquina", siguiendo instruccin por instruccin lo que sucede en el cdigo. No hay una representacin formal de la prueba de escritorio. Sugerimos poner una casilla por cada variable e ir anotando su valor. En el caso de ciclos, realizar un cuadrado y utilizar una columna por cada iteracin. Para ejemplificar, suponga que se tiene la siguiente definicin del problema: o Realizar un programa que lea un nmero y despliegue su factorial. El factorial de un nmero n est dada por la siguiente serie: 1 * 2 * 3 * * (n1) * n. El factorial de 0 es 1 y no existen factoriales de nmeros negativo.
Este programa obtendr el factorial de un nmero. Teclee el nmero, por favor 5 Su sumatoria es 120

El lote de pruebas es el siguiente:

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

11

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

valores 5 0 -3

resultados 120 1 No existen factoriales de nmeros negativos

Pas la prueba?

El pseudocdigo que se presenta est descrito a continuacin. variables a utilizar: i, suma, despliegue Bienvenido despliegue Este programa obtendr el factorial de un nmero. despliegue Teclee el nmero, por favor leer dato si dato < 0 despliega No existen factoriales de nmeros negativos en caso contrario i=1 acumula = 1 mientras i <= dato acumula = acumula * i i=i+1 despliegue Su factorial es despliegue acumula despliegue Oprima cualquier tecla para continuar Y la prueba de escritorio se coloca a continuacin:
Antes del ciclo i acumula dato Durante el ciclo Nmero de repeticin Valor de acumula Valor de i ___1___ ___1___ ___5___

1 1 2

2 2 3

3 6 4

4 24 5

5 120 6

Observe que se sale del ciclo cuando ya no se cumple la condicin. El valor final de acumula fue 120, que era el resultado esperado.

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

12

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

2.4. Ejercicios de construccin de lgica a partir del problema


Reflexin 2-2. Sobre los ejercicios de construccin de lgica Algunos docentes suelen comenzar con ejercicios de lgica del tipo: cmo se hacen huevos con jamn?. Consideramos que una primera analoga de este tipo es til para resaltar su parecido con algunos elementos de un algoritmo, pero sin ir ms all, pues son actividades lejanas a la formalidad de un lenguaje de programacin. Qu es vlido y qu no en ejemplos como ste? Con qu criterios establecer esta diferenciacin? Existe un riesgo latente de que el estudiante quede con la impresin de que se trabajar a contentillo del profesor.

Con las descripciones vistas hasta este punto tenemos los elementos suficientes para iniciar ejercicios de construccin de lgica. Un primer bloque de ejercicios puede partir de una descripcin general de un requerimiento que debe ser llevado a detalle. En este bloque pueden incorporarse todas las sugerencias de los estudiantes que sean viables con la aplicacin de secuencias y ciclos. La estrategia sugerida es formar tres equipos de trabajo, conformados por un "usuario final", un "programador" y un "tester". El "usuario final" deber recibir del profesor la especificacin de requerimientos y realizar un ejemplo de clculo con datos reales, as como el lote de pruebas que debe pasar su sistema (pudiera darse la pantalla desde un inicio o que el mismo usuario la definiera). El "programador" realizar el algoritmo expresado en pseudocdigo y/o diagrama de flujo, nicamente partiendo de los elementos vistos (se omitir por el momento el uso de arreglos, archivos y subrutinas). Finalmente, el "tester" har la prueba de escritorio. La prueba definitiva se har en el captulo relativo a la codificacin de condicionales y ciclos

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

13

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

La siguiente es una lista de ejercicios propuestos, con los dos primeros elementos: especificacin de requerimientos del usuario y diseo preliminar de la pantalla. Por razones de espacio, se omiti en la pantalla las palabras de bienvenida y despedida, que s deberan estar en el programa definitivo. o Una librera ofrece descuentos por volumen: 3% a partir de tres libros; 5% si son ms de 3 libros y 10% si son ms de 10. Los descuentos no se acumulan. Realice un programa que reciba el costo del libro, el nmero de libros y despliegue el total a pagar.
Seale el costo unitario del libro: 120 Indique el nmero de libros: 3 El total a pagar es 349.20

o Realice un programa que calcule el promedio de varias calificaciones. Al inicio se le preguntar al usuario cuantos nmeros va a capturar (suponga que el usuario capturar los datos adecuadamente). Cuntas calificaciones se van a capturar? 3
Captrelas: 7 6 4 El promedio es 5.7

o Realice un programa que calcule el promedio de varios nmeros. El usuario capturar datos y al final pondr un -1 para sealar que ya no existen ms datos (suponga que el usuario capturar los datos adecuadamente).
Capture las calificaciones (indique un -1 para finalizar): 7 6 4 -1 El promedio es 5.7

o Un trabajador tiene un salario por hora (el salario diario supone 8 horas laboradas). Si que trabaja ms de 8 horas recibe pago por horas extras. De la novena a la undcima percibe el doble; de la dcimo segunda en adelante es el triple. Las horas pueden ser fraccionadas. Realice un programa que

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

14

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

reciba el salario diario y las horas trabajadas; a partir de esos datos seale el monto a recibir por el salario normal, las horas extras y el total.
Indique el sueldo diario: 200 Indique las horas trabajadas: 9.5 Sus percepciones en el da son: 275.00

A continuacin se varios ejercicios sencillos en donde los estudiantes tienen que iniciar el trabajo desde la elaboracin de las pantallas. o Capturar los tres lados de un tringulo y desplegar si es issceles, escaleno o equiltero. o Capturar 3 nmeros y desplegar el mayor de ellos. o Realizar un programa que lea la altura del agua, el dimetro y la longitud de un tanque cilndrico completamente horizontal. A partir de esos datos se desea saber el volumen de agua que tiene en litros1. Enseguida se sealan varios ejercicios para realizar la prueba de escritorio. La intencin es que el estudiante visualice que un problema puede solucionarse de diferentes formas y que existen errores clsicos escondidos, independientemente del procedimiento utilizado. o Dado el siguiente cdigo: mayor = b si (b > a) y (b > c) mayor = b if (c > a) y (c > b) mayor = c despliega "El resultado es: despliega mayor Indique el resultado de la tradas sealadas a continuacin, tal y como est escrito.
La solucin a este ejercicio tiene que ver ms con elementos bsicos de trigonometra y lgebra. Y ese es, justamente, el motivo de ponerlo aqu: que el estudiante viva situaciones en que el clculo es lo ms difcil. Dejamos al docente la valoracin si hacerlo opcional u obligatorio.
1

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

15

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Datos de prueba 7 8 9 8 9 8 8 9 9 9 8 7

Resultado

o Qu mensaje desplegar el siguiente pseudocdigo tal y como est escrito suponiendo que el usuario responde 5.5 cuando se le pide el dato? x = calificacin proporcionada por el usuario si (x > 5) Desplegar aprobado termina si si (x < 6) Desplegar reprobado termina si

o El siguiente pseudocdigo est en orden alfabtico. Acomdelo para obtener el promedio de 3 nmeros adecuadamente. declarar dato, suma y promedio como decimales declarar i como entera desplegar El promedio es desplegar Por favor, teclee sus tres calificaciones desplegar promedio i=0 i=i+1 leer dato mientras (i < 3) promedio = suma / 3 suma = 0 suma = suma + dato termina mientras o Qu desplegar en pantalla el siguiente pseudocdigo tal y como est escrito? Suponga que el usuario teclea: 5 6 7 8

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

16

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

suma = 0 n=4 i=1 mientras i <= n despliega Teclee los 4 datos: leer dato suma = suma + dato i=i+1 fin de mientras despliega El promedio es: despliega suma / i o Qu valor tendr x y w despus de las siguientes instrucciones? x=1 w=x mientras (x <=5) w=w*x x=x+1 termina mientras

2.5. Condicionales: un proceso de decisin sencillo


En la figura 2-6 se presenta el diagrama bsico de la decisin, empleado por primera vez en pginas anteriores.

s
instrucciones

no (opcional)
instrucciones

Figura 2-6. La representacin de condicionales en diagrama de flujo

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

17

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Todas las condiciones preguntan acerca de una condicin (if). Una respuesta afirmativa provocar que se realice el bloque de instrucciones indicada; en caso contrario se ejecuta un segundo bloque de instrucciones (else). El if es obligatorio, mientras el else es opcional. Para indicar el inicio y final de cada bloque se emplean llaves, aunque pueden omitirse si el bloque est compuesto por una sola instruccin. La condicional en pseudocdigo se expresa de la siguiente forma: si (condicin) bloque 1 de instrucciones en caso contrario bloque 2 de instrucciones termina si A nivel cdigo la instruccin quedara como la siguiente:
if (calificacion >= 6) printf("aprobado); else printf("reprobado");

Tcnicamente, una condicin verdadera "devuelve" el valor de 1; una condicin falsa retorna el valor de 0. Por eso, la instruccin z = (a > b) es perfectamente vlida: z valdr 1 si a es mayor que b, o valdr 0 si la condicin no se cumple. El operador ? es una forma abreviada de if-else, que se emplea cuando se trata de una asignacin con base en un if. La instruccin
z = (a > b) ? a : b;

es equivalente a
if (a > b) z = a; else z = b;

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

18

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Reflexin 2-3. Cuidados bsicos al utilizar else Aunque la estructura bsica de una condicial es sencilla debe tenerse cuidado en algunos aspectos: a) La condicin debe ser precisa. Por ejemplo: if (calificacion >= 6) es equivalente a if (calificacion > 5) nicamente si la variable calificacion es de tipo entero, pero no son equiparables si calificacion es de tipo decimal. b) Cuidado con la sintaxis: la condicin se pone entre parntesis y no lleva coma despus de la misma. c) Debe de evitarse "duplicar" la condicin en lugar de emplear else. El siguiente cdigo es vlido:
if (calificacion >= 6) printf("aprobado); if (calificacion < 6) printf("reprobado");

pero dificultara el mantenimiento del cdigo. Si la calificacin mnima aprobatoria cambiara a 8, entonces habra que modificar el dato en dos lugares y podra dar pie a errores de mantenimiento en el cdigo.

Reflexin 2-4. Utilizar condicionales para validar datos Es muy buena idea utilizar las condicionales para validar la consistencia de la informacin. Por ejemplo: si se pide una fecha, verificar que no se est proporcionando un dato equivocado (Vg. 30 de febrero).

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

19

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

A continuacin, un ejemplo para determinar el rea de un tringulo (programa 2-1). Observe que la condicional se utiliz para validar que el tringulo s puede ser construido.

Requerimiento: Hacer un programa que reciba los tres lados de un tringulo y devuelva su rea. El rea queda determinada bajo la siguiente frmula: s = (a + b + c) / 2 ____________________ rea = s * (s a) * (s b) * (s-c) , donde a, b y c son las longitudes de los lados. Ejemplo: si los lados valieran 6, 8 y 10, s valdra 16 y el rea valdra 24.

Cdigo:
// Programa 2-1 recibe los 3 lados de un tringulo y devuelve su rea. #include <conio.h> #include <stdio.h> #include <math.h> int main() { float a, b, c, s, area; printf("Bienvenido.\n\n"); printf("Este programa obtiene el rea de un tringulo.\n"); printf("Teclee el valor de los lados separados por un espacio.\n\n"); scanf("%f %f %f", &a, &b, &c); // previamente se validar que sea posible construir el tringulo if ( (a > b + c) || (b > a + c) || (c > a + b)) printf("No puede formarse un triangulo de esas dimensiones.\n"); else { s = (a + b + c ) / 2; area = sqrt( s * (s - a) * (s - b) * (s - c)); printf("\n"); printf("El area del tringulo es: %4.1f \n", area); } printf("\n\n Oprima cualquier tecla para terminar..."); getch(); }

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

20

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Pruebas aplicadas:
Datos del usuario 6 8 10 3 5 9 Resultado esperado El rea del tringulo es de 24.0. No puede formarse un tringulo de esas dimensiones.

Pantalla final:

Aspectos a cuidar en el uso de condicionales Las condicionales pueden anidarse. Las condicionales se pueden escribir de manera anidada, como en el programa 2-2 (hay que tener especial cuidado con la anidacin):
// Programa 2-2: // promedio de 3 calificacines con condicionales anidadas #include <conio.h> #include <stdio.h> int main(void) { int a, b, c; float promedio; printf("Por favor, teclee sus tres calificaciones: "); scanf("%d %d %d", &a, &b, &c); promedio = (a + b + c) / 3; printf("El promedio es: %6.1f", promedio); if (promedio == 10) printf(" EXCELENTE"); else if (promedio >= 8) { printf(" MUY BIEN. "); printf("FELICITACIONES."); } else printf(" REPROBADO"); printf("\nOprime cualquier tecla.."); getch(); }

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

21

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Cuidar el alcance de los bloques. En todo momento se debe tener presente que los bloques quedan delimitados por las llaves. Si stas no se colocan se asume el bloque abarca una sola instruccin. Como ejemplo, observe el cdigo del programa 2.3:
// Programa 2-3: condicionales con mal manejo de llaves #include <conio.h> #include <stdio.h> int main () { int x; x = 8; if (x >= 6) printf("Aprobado.\n"); else printf("Reprobado.\n"); printf("A estudiar ms.\n"); printf("\nOprime cualquier tecla para continuar..."); getch(); }

La frase A estudiar ms se desplegar siempre. El programa asume a falta de llaves- que el else abarca slo a una instruccin. La correccin sera como sigue:
else { printf("Reprobado.\n"); printf("A estudiar ms.\n"); }

No utilizar el operador de asignacin (=) en lugar del de comparacin (==). Es muy comn que en las condiciones se requiera comparar una variable o una operacin con un valor determinado, Por ejemplo: si x es igual a 8. En este caso hay que recordar que el operador de comparacin es ==. Observe el cdigo del programa 2-4.

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

22

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

// Programa 2-4: condicionales con comparacin mal aplicada #include <stdio.h> #include <conio.h> int main () { int opcion; printf("Bienvenido al cine.\n\n"); printf("1) Amores Perros\n"); printf("2) Babel\n"); printf("\nElija una opcin: "); scanf("%d", &opcion); if (opcion = 1) printf("\nUsted desea ver Amores Perros"); else printf("\nUsted desea ver Babel"); printf("\n\nOprima cualquier tecla para continuar..."); getch(); }

En este programa siempre aparecer el letrero Usted desea ver Amores Perros. La razn es la siguiente: la instruccin if (opcion = 1) indica que se asigne un 1 a la variable opcin, si esto es posible (lo cual es obvio en este caso), se desplegar Usted desea ver Amores Perros. La instruccin en realidad se debi haber manejado como if (opcion == 1)2. Este error es tan comn y tan difcil de rastrear que el lenguaje Java (basado en la sintaxis de C) ya no permite la instruccin if (opcion = 1).

Problemas propuestos para decisiones sencillas Los siguientes problemas -extrados de problemas reales- pueden resolverse con decisiones sencillas. Son ejercicios que a esta altura el estudiante debe poder resolver. o Realizar un programa que lea tres calificaciones, despliegue el promedio final y diga si el alumno aprob o no. La calificacin final ser el promedio ponderado de las 3 calificaciones, las cuales valen 20%, 30% y 50%, respectivamente. La calificacin mnima aprobatoria es 8.
2

Cabe aclarar que ZinjaI hace una advertencia (warning) cuando se compila el cdigo.

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

23

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

o Realice un programa que obtenga el promedio entero de 3 calificaciones. Se redondea al entero ms cercano si el promedio es cuando menos de 6. En caso contrario, la calificacin bajar al entero inferior. o Realice un programa que reciba 3 calificaciones de tipo entero e indique cual fue la calificacin ms alta. Por ejemplo: si el usuario captura los datos 8 9 10, el programa desplegar que el dato ms grande es 10. o Simulemos un volado en la computadora. La computadora solicita la apuesta y genera al azar la suya. Si coincide, el usuario gana; en caso contrario, pierde.
Qu crees que salga (S=sol; A=aguila)? S La moneda cay guila. Usted perdi! Gracias por participar!

o Realice un programa que reciba los coeficientes de una ecuacin cuadrtica y despliegue sus races. o Realice un programa que reciba dos datos para realizar una divisin y despliegue el resultado a dos decimales. Por ejemplo: si el usuario captura 9 y 4, el programa indicar como resultado 4.25. Nota importante: debe validarse que el programa no intente realizar una divisin entre cero. o Realice un programa que reciba los 3 lados de un tringulo e indique si es equiltero (tres lados iguales), issceles (dos lados iguales) o escaleno (tres lados diferentes). o Dado el siguiente cdigo:
1 2 3 4 5 6 mayor = b; if ((b > a) && (b > c)) mayor = b; if ((c > a) && (c > b)) mayor = c; printf("El resultado es: %d\n", mayor);

a) Asuma que el programa va a correr tal y como est escrito. Cul sera el resultado bajo las condiciones siguientes? Datos de prueba a b c Resultado

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

24

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

7 8 8 9

8 9 9 8

9 8 9 7

b) Coloque los parntesis que hagan falta para que el programa pueda ejecutarse correctamente (slo hay errores en algunas lneas):
No. de nea Correccin

2.7. Casos de decisin mltiple


Es muy comn que en diversas ocasiones se tenga que seleccionar alguna opcin con base en un valor determinado. Por ejemplo, desplegar el nombre del mes. Esto podra realizarse a travs de condicionales mltiples, como en el programa 2-5, que despliega el nmero de das transcurridos del 1 de enero del ao 2000 a la fecha capturada. En este caso, dejaremos que el estudiante "descifre" el programa con base en los siguientes puntos clave: o se suman los aos completos multiplicndolos por 365 o se suman los das que corresponden a los meses completos del ao en curso. Por ejemplo: si estamos en febrero, ya transcurri enero en su totalidad, es decir, hay 31 das por meses completos transcurridos. o se suman los das que corresponden por aos bisiestos: 29 de febrero de 2004, 29 de febrero de 2004, etc. Se suma un da por cada cuatro aos. Cuando es un ao bisiesto, se tiene cuidado en contar el da bisiesto slo si se est marzo o mes posterior. o finalmente, se suman los das del mes en curso.

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

25

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Reflexin 2-5. Empleando Excel para corroborar un programa de fechas Un programa de manejo de fechas puede corroborarse a travs de una hoja de clculo. Excel almacena las fechas como los das transcurridos entre el 1o. de enero de 1900 y la fecha indicada. Este aspecto puede

aprovecharse para comprobar el programa. Si quiere comprobar su cdigo, puede poner en una celda la fecha elegida y en otra el 1/enero/2000. Si se hace una resta de ambas celdas, se obtendr -justamente- los das transcurridos. Sirva este ejemplo para una recomendacin general: siempre verifique que su algoritmo d los resultados correctos y cuando sea conveniente recurra a otras herramientas que pueden ayudarle.

// Programa 2-5: das transcurridos del 01/01/2000 a la fecha indicada #include <conio.h> #include <stdio.h> int main(void) { int anio, mes, dia, suma; printf("Por favor, indique una fecha posterior al ao 2000"); printf(" (dd mm aaaa).\n"); scanf("%d", &dia); scanf("%d", &mes); scanf("%d", &anio); suma = (anio - 2000 ) * 365; // das por aos completos // das por meses completos del ao en curso switch (mes) { case 1: suma += 0; break; case 2: suma += 31; break; case 3: suma += 59; break; case 4: suma += 90; break; case 5: suma += 120; break; case 6: suma += 151; break; case 7: suma += 181; break; case 8: suma += 212; break; case 9: suma += 243; break; case 10: suma += 273; break; case 11: suma += 304; break; case 12: suma += 334; break; }

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

26

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

suma += (anio - 2000) / 4 + 1; // das por aos bisiestos if ((anio % 4 == 0) && (mes < 3)) suma--; suma += dia; // das del mes en curso printf("\nEl resultado es: %d", suma); printf("\n\nOprime cualquier tecla.."); getch(); }

Al final se obtendr una pantalla como la siguiente:

Como se puede observar, los das del mes dependen del valor de la variable mes. Este el caso en que se aplica una instruccin switch: diferentes acciones en razn del valor de una variables. Su estructura general es la siguiente:
switch (variable) case valor: {bloque de instrucciones} break; // el break es opcional /* pueden repetirse tantos case como se deseen */ default: {bloque de instrucciones}

El break indica que ya no siga explorando los siguientes casos. En la mayora de las situaciones se desea un break para cada opcin, pero en otras ocasiones es deseable que adems de lo realizado en el caso anterior- se lleven a cabo otras instrucciones, en cuyo caso no se coloca ningn break en la opcin que est finalizando. Finalmente, si ninguna de las opciones se cumpli, se ejecutar el bloque de comandos sealado por default.

Problemas propuestos para decisiones mltiples

Una tienda comercializadora maneja un nivel de descuentos con base en el monto total de la compra, segn la siguiente tabla:

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

27

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Monto de compra $ 2,990.00 $ 7, 490.00 $ 13,990.00 $ 54,990.00

% de descuento 3% 5% 7% 10%

Elabore un programa que reciba el monto de compra original. En razn de ese dato, localice el porcentaje de descuento y lo aplique. Finalmente, desplegar el monto final a pagar. o Realice un programa que "juegue" piedra, papel o tijera. El usuario elige una opcin de las tres y la computadora genera al azar una de ellas. Posteriormente, el resultado se dar bajo las siguientes reglas; la piedra le gana a la tijera; la tijera le gana al papel; el papel le gana a la piedra;si ambos casos son iguales, resulta un empate3 o Realice un programa que reciba dos datos enteros: el da y el mes. Con base en ellos despliegue el da y el mes. Por ejemplo: si recibe como datos 19 12, desplegar 19 de diciembre.

2.8. Uso de ciclos


En lenguaje C todos los ciclos indican que un determinado bloque de instrucciones se repita mientras se cumpla determinada condicin. Existen tres tipos, como se sintetiza en el cuadro 2-1.

Cuadro 2-1. Los ciclos en lenguaje C y Java while Mientras que, se valida al inicio por lo cual el bloque de instrucciones puede no ejecutarse ni una sola vez.

Existe una versin menos conocida, pero un poco ms divertida, con base en conejo, flecha y muro.

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

28

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

do-while

Mientras que, se valida al final por lo cual el bloque de instrucciones se ejecuta al menos una vez.

for

Por lo general se aplica cuando se conoce de antemano las veces que se repetir un conjunto de instrucciones. Aunque en lenguaje C tiene la misma potencialidad que el while: la condicin se coloca al principio y se ejecuta el bloque de instrucciones mientras se cumpla la condicin.

El ciclo while En el while se repite un bloque de instrucciones mientras se cumple una determinada condicin. La condicin se verifica al inicio, como lo muestra la figura 2-7.
s no

instrucciones

Figura 2-7. La representacin del ciclo while en diagrama de flujo En resumen: mientras (condicin) bloque de instrucciones termina mientras Hay que hacer hincapi que la condicin significa mientras que. Una condicin que siempre se cumpla generara un ciclo infinito; por el contrario, una condicin

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

29

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

que nunca se cumpla implicara que no se ejecutaran las instrucciones del cuerpo del ciclo ni una sola vez. Un error muy frecuente es no identificar claramente aquello que es repetitivo (va a ir dentro del ciclo) con lo que debe hacerse una sola vez antes o despus del ciclo (debe ir fuera del ciclo). El resultado de este error suele dar resultados equivocados o generar ciclos infinitos. A manera de ejemplo, suponga que desea obtener el promedio de varios nmeros proporcionados por el usuario. La pantalla que desea es similar a la siguiente.
Este programa obtiene el promedio de calificaciones. Cuntas calificaciones se van a introducir? 3 Capture las calificaciones, por favor. 8 9 10 El promedio es 9.00 Oprima cualquier tecla para terminar...

Qu debe ir dentro del ciclo (color amarillo)? Resulta obvio que la lectura de las calificaciones. Como el valor de una variable se pierde al recibir un segundo valor, entonces se requiere ir sumando las calificaciones en otra variable. Las dems partes del programa irn fuera del ciclo. El cdigo finalmente quedara como lo indica el programa 2-6 y en la figura 2-8 se muestra el diagrama de flujo correspondiente producido automticamente por ZinjaI a travs del men de Herramientas.
// Programa 2-6: promedio de calificaciones con while #include <conio.h> #include <stdio.h> int main() { int i, n; float suma = 0.0, promedio, dato; printf ("Este programa obtiene el promedio calificaciones.\n"); printf ("Cuntas calificaciones se van a introducir?\n"); scanf("%d",&n); if (n > 0) { printf("Capture las calificaciones, por favor.\n"); i = 1;

de

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

30

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

while (i <= n) { scanf("%f", &dato); suma += dato; i++; } promedio = suma / n; printf("El promedio es: %5.2f\n", promedio); } else printf("No puedo sacar el promedio de 0 calificaciones.\n"); printf("\nOprima cualquier tecla para terminar...\n"); getch(); }

Figura 2-8. Diagrama de flujo de un programa que obtiene el promedio de varios nmeros, obtenido automticamente en el compilador ZinJai

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

31

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

El ciclo for En lenguaje C, en realidad el ciclo for es otra forma de expresar la misma funcionalidad que el ciclo while, por lo cual su diagrama es el mismo. Sin embargo, en otros lenguajes su sintaxis les permite nicamente hacer un ciclo cuando ya se conoce exactamente el nmero de veces que se repetir algo. Su sintaxis es la siguiente:
for (sentencias antes del ciclo; condicin; ltimas sentencias a repetir)

Cabe aclarar que cualquiera de las tres partes que constituyen el for puede omitirse. En un caso exagerado, un ciclo podra expresarse como for (;;). Como recomendacin general, hay que evitar este tipo de instrucciones poco entendibles. Como ejemplo de un for bien aplicado, el programa 2-7 despliega cuatro veces hola:
// Programa 2-7: despliegue de hola con ciclo for #include <stdio.h> #include <conio.h> int main() { int i; printf(Este programa ejemplifica un for desplegando hola); for (i=0; i<4; i++) printf(hola); printf("\nOprima cualquier tecla para terminar...\n"); getch(); }

veces

El ejemplo desarrollado en pginas anteriores quedara como lo muestra el programa 2-8:


// Programa 2-8: promedio de calificaciones con for #include <stdio.h> #include <conio.h> int main() { int i, n; float suma = 0.0, promedio, dato; printf ("Este programa obtiene"); prinff(" el promedio de calificaciones.\n"); printf ("Cuntas calificaciones se van a introducir?\n");

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

32

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

scanf("%d",&n); if (n > 0) { printf("Capture las calificaciones, por favor.\n"); for (i=1; i <= n; i++) { scanf("%f", &dato); suma += dato; } promedio = suma / n; printf("El promedio es: %5.2f\n", promedio); } else printf("No puedo sacar el promedio de 0 calificaciones.\n"); printf("\nOprima cualquier tecla para terminar...\n"); getch(); }

El siguiente cuadro resume las diferencias entre ambos programas, es decir, entre el promedio obtenido a travs de un while y utilizando un for.
Caso while i = 1; while (i <= n) { scanf("%f", &dato); suma += dato; i++; } Caso for for (i=1; i <= n; i++) { scanf("%f", &dato); suma += dato; }

El ciclo do-while Tanto el while como el for validan la condicin antes de ejecutar el bloque de instrucciones la primera vez, con lo cual abren la posibilidad de que dicho bloque de instrucciones no se ejecute ni una sola vez. El do-while valida la condicin al final, por lo cual existe la garanta de que dicho bloque se ejecute al menos una vez. En los tres casos, se seguir repitiendo mientras que la condicin se cumpla. La estructura del do-while queda como sigue. Por su parte, la figura 2-9 muestra el ciclo do-while en diagrama de flujo y el programa 2-9 muestra el promedio de varios nmeros, ahora empleando do-while. realiza bloque de instrucciones mientras (condicin)

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

33

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

instrucciones

no

Figura 2-9. El ciclo do-while en diagrama de flujo

// Programa 2-9: promedio de calificaciones con do-while #include <conio.h> #include <stdio.h> int main() { int i, n; float suma = 0.0, promedio, dato; printf ("Este programa obtiene el promedio de calificaciones.\n"); printf ("Cuntas calificaciones se van a introducir?\n"); scanf("%d",&n); if (n > 0) { printf("Capture las calificaciones, por favor.\n"); i=1; do { scanf("%f", &dato); suma += dato; i++; } while (i<=n); promedio = suma / n; printf("El promedio es: %5.2f\n", promedio); } else printf("No puedo sacar el promedio de 0 calificaciones.\n"); printf("\nOprima cualquier tecla para terminar...\n"); getch(); }

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

34

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Cuando usar cada tipo de ciclo En muchas ocasiones un problema puede resolverse por cualquiera de los tres ciclos existentes. Sin embargo, conviene recalcar algunos puntos para facilitar su seleccin: o En todos los lenguajes, el while puede hacer lo que realice el for y el dowhile. o Especficamente en lenguaje C y Java, el for tiene la funcionalidad de un while. o Aunque el for es tan potente como el while, se recomienda usarlo solamente cuando se conoce exactamente el nmero de veces que se va a repetir un bloque de instrucciones. Aplicarlo a otras situaciones traer como consecuencia cdigos confusos. o En el do-while, el bloque de instrucciones al menos se ejecuta una vez. El ejemplo anterior se prestaba, de una u otra manera, para todos los tipos de ciclos. Ahora suponga que el requerimiento cambia al siguiente:
Este programa obtiene el promedio de calificaciones. Capture las calificaciones. Digite -1 para terminar. 8 9 10 -1 El promedio es 9.00 Oprima cualquier tecla para terminar...

El cdigo utilizando un while queda como lo muestra el programa 2-10:


// Programa 2-10: promedio de datos con while #include <conio.h> #include <stdio.h> int main() { int i; float suma = 0.0, promedio, dato; printf ("Este programa obtiene calificaciones.\n");

el

promedio

de

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

35

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

printf ("Capture las calificaciones. Digite -1 para terminar.\n"); i = 0; scanf ("%f", &dato); while (dato >= 0) { suma+=dato; i++; scanf("%f",&dato); } if (i > 0) { promedio = suma / i; printf("El promedio es: %5.2f\n", promedio); } else printf("No es posible obtener el promedio si no teclea ningn nmero."); printf("\n\nOprima cualquier tecla para terminar...\n"); getch(); }

Como ya mencion, se puede realizar ese mismo programa con un for, pero el cdigo pierde claridad, independientemente de cmo quede. El programa 2-11 muestra una de las distintas posibilidades:
// Programa 2-11: promedio de datos con un for nada claro #include <conio.h> #include <stdio.h> int main() { float suma = 0.0, promedio, dato; int i; printf("Este programa obtiene el promedio de calificaciones. "); printf( "Capture -1 para terminar.\n"); i = 0; for ( ; dato >= 0 ; ) { scanf("%f", &dato); if (dato >= 0) { suma += dato; i++; } } if (i > 0) { promedio = suma / i; printf("El promedio es: %5.2f\n", promedio); } else printf ("No se proporcion ninguna calificacin.\n"); printf ("\nOprima cualquier tecla para terminar...\n"); getch(); }

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

36

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

2.9. Ejercicios sobre ciclos a nivel cdigo


A continuacin se enlistan diversos ejercicios. Algunos de ellos estn en el contexto de un programa con una finalidad orientada hacia el usuario final; otros pretenden nicamente que el estudiante practique la codificacin a travs de la correcta aplicacin de ciclos. o Realice un programa que despliegue 4 veces hola utilizando: a) while; b) for; c) do-while. Cmo obtendra el siguiente despliegue?
Cuntas veces deseas desplegar hola? 3 hola hola hola

o Cmo obtendra el siguiente despliegue?


hola hola hola a todos a todos a todos

o Cmo obtendra el siguiente despliegue?


hola a todos a todos a todos hola a todos a todos a todos

o Cmo obtendra el siguiente despliegue?


Cuntas veces deseas desplegar hola? 3 Cuntas veces deseas a todos? 2 hola a todos a todos hola a todos a todos hola a todos a todos

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

37

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Transforme el siguiente cdigo a un for


i = 0; while (i<5) { printf(hola); i++; }

o Corrija el siguiente programa sin tener a la vista el programa correcto.


#include <stdio.h> #include <conio.h> int main () { float suma, dato, promedio; int numDatos, i; printf("Este programa despliega"); printf(" el promedio de varios nmeros.\n\n"); printf("Indique la cantidad de nmeros: "); scanf("%d", &numDatos); i = 1; suma = 0.0; printf("Teclee los datos:\n "); while (i < numDatos) { scanf("%f", &dato); suma += dato; i++; promedio = suma / numDatos; printf("El promedio es: %6.1f\n", promedio); } printf("\n\nOprima cualquier tecla para continuar..."); getch(); }

El siguiente programa pretende obtener el promedio de 4 nmeros. Analcelo e indique lo que desplegara en pantalla al ejecutarlo suponiendo que cuando el programa pide Teclee los datos el usuario responde 2 5 9 14.
#include <stdio.h> #include <conio.h> int main () { float suma, dato, promedio; int numDatos, i; printf("Este programa despliega el promedio de 4 nmeros.\n\n"); numdatos = 4; i = 1; suma = 0.0; printf("Teclee los datos:\n "); while (i < numDatos) {

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

38

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

scanf("%f", & dato); suma += dato; i++; promedio = suma / numDatos; printf("El promedio es: %6.1f\n", promedio); } printf("\n\nOprima cualquier tecla para continuar..."); getch(); }

o Un usuario desea obtener la siguiente pantalla:


Este programa calcula el promedio de varias calificaciones: Cuntas calificaciones va a capturar? 3 Teclee las calificaciones 6.6 7.2 9.9 El promedio es 7.9 Oprima cualquier tecla para continuar...

Elija las siguientes instrucciones en el orden correcto para llegar al resultado deseado. Las instrucciones pueden utilizarse ms de una vez, sobran algunas y usted debe darles la sangra adecuada. Hay ms de una solucin correcta.
i++; while (i < n) { float i, n; i = 0; getch(); printf(Oprima cualquier tecla para continuar...); i = 1; } while (i <= n) scanf(%d, &n); suma = 0; promedio = suma / n; float suma, promedio; int i, n; float suma = 0, promedio; #include <conio.h> int main()

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

39

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

#include <stdio.h> printf(Este programa calcula...); float dato; printf(Teclea las calificaciones); suma = suma + dato; suma += dato; scanf(%f%, &dato); printf(Cuntas calificaciones va a capturar); printf(El promedio es %5.1f, promedio);

o Realice el programa que responda al siguiente requerimiento.


Voy a contar las calificaciones aprobadas. Teclea las calificaciones (termina con -1) 7 4 8 10 -1 Obtuviste 3 calificacin(es) aprobatoria(s) y 1 calificacin(es) reprobatoria(s). Tu promedio fue: 7.25

El siguiente programa debe obtener la multiplicacin de x * n. Codifique la parte que haga falta para obtener el resultado sin emplear la multiplicacin, es decir, con base en sumas sucesivas:
int main() { float x, resultado; int n, i; scanf(%f, x); scanf(%d, n); /* poner cdigo */ printf(Resultado=%f, resultado); }

o Realice un programa que calcule el factorial de un nmero indicado por el usuario. No existen factoriales de nmeros negativos; el factorial de 0 es uno. Para guardar el factorial se requiere de un tipo de dato que guarde rango de valores mayores que el int. La pantalla ser similar a la siguiente:

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

40

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

Bienvenido. Este programa calcula el factorial de un nmero. Qu nmero es? 5 Resultado: 1 * 2 * 3 * 4 * 5 = 120

o Realice un programa que obtenga la divisin de dos nmeros enteros sin utilizar el operador de divisin (a travs de restas sucesivas) o Un apostador asiduo tiene la costumbre de apostar si atina al nmero que resulta al tirar un dado. Si lo logra gana $5.000; en caso contrario, pierde $1.00. l comienza con $7.00 y el juego termina cuando gana $6.00 o pierde todo su capital.
Qu nmero saldr en el dado? 5 El dado arroj un 4. Acaba de perder $1.00 Su saldo es $6.00 Qu nmero saldr en el dado? 5

o Juguemos a menor-mayor. Usted tiene que apostar un peso a alguna de las siguientes opciones: Menor 2-6 7 7 Mayor 8-12

despus tira dos dados. Si le apost a menor y la suma de los dados est en el rango de 2 a 6 gana un peso. Algo similar sucede con el caso de mayor. Si le apost a 7 y la suma de los dados coincide con 7, entonces gana 5 pesos. Arranca con 5 pesos y termina su participacin cuando tiene 10 pesos o pierde todo su capital. Partiendo del siguiente cdigo, indique cual sera el resultado si el usuario tecla 3 para el valor de n:
#include <conio.h> #include <stdio.h>

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

41

Jos Luis Lpez Goytia - ngel Gutirrez Gonzlez

#include <math.h> int main() { /* las iteraciones se declararan flotantes porque pueden exceder el rango de enteros */ float i, numiteraciones; double sumatoria=0.0, resultado; printf("Este programa obtendr un valor muy cercano a PI "); printf("aplicando la frmula\n PI = 1 / 2 * raz "); printf("cuadrada(sumatoria(1..n de 24/(i*i)))."); printf("\n\nTeclee el valor de n, por favor.\n"); scanf("%f", &numiteraciones); for (i = 1.0; i <= numiteraciones; i += 1.0) sumatoria += 24 / (1.0 * i * i); resultado = sqrt(sumatoria) / 2; printf("\nEl valor obtenido es: %8.4f", resultado); printf("\nEl error absoluto es: %8.4f", fabs(resultado-3.1416)); printf("\nEl error relativo es: %8.4f", fabs(resultado-3.1416) / 3.1416 * 100.0); printf ("\nOprima cualquier tecla para terminar...\n"); getch(); }

Programacin Estructurada y Orientada a Objetos. Un acercamiento interdisciplinario.

42

Вам также может понравиться