14 de octubre de 2016

Ejercicios selectos (estructuras de control).

Primera Parte.
  1. Escriba el Ejemplo 3.1 eliminando los delimitadores de bloque para cada una de las estructuras de selección if, y compruebe que que sigue funcionando igual. Tome en cuenta que ésto es cierto cuando la estructura de control se compone únicamente de una única sentencia.
  2. Escriba un programa que determine si un número entero positivo es par o impar. Un número par es aquel que es divisible por dos.
  3. Escriba un programa que utilice una estructura de selección if-else y los operadores relacionales para determinar el menor de tres números enteros (asuma que los números son distintos). Para este ejercicio, no debe utilizar operadores lógicos, si no sabe qué son, mucho mejor, en su momento se presentarán en el blog.
  4. Escriba un programa que utilice una estructura de selección if-else y los operadores relacionales para determinar el mayor de tres números enteros (asuma que los números son distintos). Para este ejercicio, no debe utilizar operadores lógicos, si no sabe qué son, mucho mejor, en su momento se presentarán en el blog.
  5. Escriba un programa que utilice una estructura de selección if-else y los operadores relacionales para determinar el número central (en función de su ordinalidad) de tres números enteros (asuma que los números son distintos). Para este ejercicio, no debe utilizar operadores lógicos, si no sabe qué son, mucho mejor, en su momento se presentarán en el blog.
  6. Reescriba el Ejemplo 3.6 usando la simplificación de líneas descrita para el operador ternario (vea el penúltimo párrafo de la entrada El operador ternario ? :) y compruebe su equivalencia, ¿cuál es mejor y por qué?, ¿en qué casos convendría utilizar una u otra?
  7. Reescriba el Ejemplo 3.6 utilizando una estructura de selección if-else en lugar del operador ternario.
  8. Escriba un programa que utilice el operador ternario para determinar el menor de dos números enteros. Este programa es similar al del Ejemplo 3.6.
  9. Extienda el Ejemplo 3.7 para que el rango de conversión de números a palabras sea más amplio: agregue las sentencias necesarias de tal forma que el programa considere al menos números del uno al diez, ¿qué sucede si al ejecutar el programa en lugar de un número escribe una letra?
  10. Escriba un programa que convierta lo siguientes números a su correspondiente número romano: 1, 5, 9, 14, 20, 26, 40, 50, 90, 99, 100, 500 y 1000. Para cualquier otro número se deberá reportar: "No existe traducción disponible".
  11. Convierta el Ejemplo 3.7 y el ejercicio anterior a su correspondiente representación con una estructura de selección if-else anidada. Para este ejercicio, asuma que no existe la estructura de control switch; la idea es obtener la misma funcionalidad cambiando la estructura switch por una estructura if-else.
  12. Reescriba el Ejemplos 3.8 y el Ejemplo 3.9 utilizando el operador de incremento como prefijo.
  13. Reescriba los Ejemplos 3.8 y 3.9 utilizando el operador de incremento como postfijo.
  14. Para el Ejemplo 3.10 sustituya el operador de incremento (++) por el operador de decremento (--), analice lo que sucederá, determine su respuesta y compruébela con la ejecución correspondiente.
  15. Escriba un programa que imprima en la salida estándar los números del uno al diez, uno por renglón pero en orden inverso; es decir: 10, 9, 8, 7, . . . , 1. No utilice el operador de decremento.
  16. Escriba un programa que imprima los números del uno al diez uno por renglón pero en orden inverso; es decir: 10, 9, 8, 7, . . . , 1. Utilice el operador de decremento.
  17. Reescriba el Ejemplo 3.9 utilizando la estructura de repetición do-while.
  18. Reescriba el Ejemplo 3.12 utilizando la estructura de repetición while.
  19. Repita el Ejercicio 16 utilizando ahora la estructura de repetición do-while.
  20. Escriba un programa que imprima en la salida estándar los números del 1 a n, donde n es un valor proporcionado por el usuario de su programa. Así por ejemplo, si n es 6, su programa imprimirá los números del 1 al 6.
  21. Considere el Ejemplo 3.13 y coloque al final de la línea 12 un “;”, compile el programa y ejecútelo. Lo único que verá en la salida estándar es: “i = 11” ¿Por qué?
  22. Reescriba todos los ejemplos y ejercicios que utilizan la estructura de repetición while utilizando ahora la estructura de repetición for.
  23. Reescriba el Ejemplo 3.14 cambiando la estructura de repetición for por la estructura de repetición while.
  24. Reescriba el Ejemplo 3.16 con una estructura de repetición while.
  25. Modifique el Ejemplo 3.16 para que imprima en la salida estándar varias palabras (n) de longitud (línea 8). Pruebe con varias combinaciones de n y m, e imprima en varias columnas utilizando la secuencia de escape '\t'; la idea es reconocer una palabra de las que se generan; tome en cuenta que mientras más larga sea la palabra, la probabilidad de reconocer una será menor. Sugerencias:
    1. Utilice un ciclo externo que contenga al ciclo for del Ejemplo 3.16 para que controle el número de palabras (n) a generar.
    2. Defina a n y m como variables para un mayor dinamismo e interacción y no olvide validarlas.
    3. Coloque el inicializador de semilla de números aleatorios (función srand) afuera y antes de los ciclos.


 

Segunda Parte.

  1. Escriba un programa que, siguiendo la idea del Ejemplo 3.17 y considerando un esquema de calificaciones basado en letras (A, B, C, D y F), procese un conjunto de dichas calificaciones desde la entrada estándar y determine cuántas calificaciones hay de cada una. Si se procesa una calificación no considerada, se deberá indicar dicha irregularidad (no existe la calificación E por ejemplo).
  2. Escriba un programa que lea dos números enteros:
    1. Si los números son iguales, su programa reporta dicha situación y termina.
    2. Si el primer número (num1) es menor que el segundo (num2), su programa deberá imprimir en la salida estándar la sucesión ascendente de números de num1 a num2; es decir: num1, num1+1, num1+2, . . . num2.
    3. Si el primer número (num1) es mayor que el segundo (num2), su programa deberá imprimir en la salida estándar la sucesión descendente de números de num1 a num2; es decir: num1, num1-1, num1-2, . . . num2.
  3. Escriba un programa que determine si un número entero positivo n es o no un número primo. Un número primo es aquel que sólo es divisible por sí mismo y la unidad. Sugerencia: intente con un ciclo todos los posibles divisores de n, si tiene más de dos, no es primo. Otro enfoque es descartar los divisores obvios (1 y n) y buscar algún divisor entre 2 y n/2 (para n > 2), si existe alguno, no es primo.
  4. Modifique el Ejemplo 3.21_1. Cambie la sentencia break por continue y determine su salida sin ejecutarlo en la computadora; después corrobore su respuesta con la salida real.
  5. Considere el programa del Ejemplo 3.22 y determine su salida sin ejecutarlo en la computadora; después corrobore su respuesta con la salida real.
  6. Considere el programa del Ejemplo 3.23 y determine su salida sin ejecutarlo en la computadora; después corrobore su respuesta con la salida real.
  7. Para el programa del Ejemplo 3.23 agregue una llave izquierda ({) al final de la línea 11 y una llave derecha (}) en la línea 15, de tal forma que se delimite el bloque del ciclo for más externo para que las sentencias de las líneas 12-14 pertenezcan a él ¿Cambia en algo la salida del programa? Determine su respuesta sin ejecutarlo en la computadora, después ejecútelo, y analice lo que sucede.
  8. Para el programa modificado con base en lo expuesto en el ejercicio anterior, cambie la i por j en la línea 13 y determine la salida sin ejecutarlo en la computadora; después corrobore su respuesta con la salida real.
  9. Considere el programa del Ejemplo 3.24 y determine su salida sin ejecutarlo en la computadora; después corrobore su respuesta con la salida real.
  10. Modifique el Ejemplo 3.25 par que funcione exactamente igual que el Ejemplo 3.21, es decir, ambos programas deben generar la misma salida. Para este ejercicio, asuma que no existe la sentencia break y no modifique el CENTINELA ni el valor de las variables. Sugerencia: intente dos versiones, una utilizando un continue en el if original, y otra utilizando una estructura if-else sin tener que hacer uso del continue.
  11. Pruebe con más datos el Ejemplo 3.17, proporcionados tanto del teclado como de un archivo siguiendo los mecanismos de re direccionamiento.
    12. Reescriba el Ejemplo 3.18 con una estructura de repetición do-while y asegúrese de que sea lógica y funcionalmente equivalente.
    13. Reescriba el Ejemplo 3.18 con una estructura de repetición for y asegúrese de que sea lógica y funcionalmente equivalente.
    14. Modifique el Ejemplo 3.18 para que lea el número de calificaciones a procesar. Tanto el número de calificaciones (mayor que cero), como las calificaciones (entre 0 y 10) deberán ser validados. Utilice la estructura de repetición while para la repetición controlada por contador.
    15. Modifique el Ejemplo 3.18 para que lea el número de calificaciones a procesar. Tanto el número de calificaciones (mayor que cero), como las calificaciones (entre 0 y 10) deberán ser validados. Utilice la estructura de repetición do-while para la repetición controlada por contador.
    16. Modifique el Ejemplo 3.18 para que lea el número de calificaciones a procesar. Tanto el número de calificaciones (mayor que cero), como las calificaciones (entre 0 y 10) deberán ser validados. Utilice la estructura de repetición for para la repetición controlada por contador.
    17. Reescriba el Ejemplo 3.19 con una estructura de repetición do-while y asegúrese de que sea lógica y funcionalmente equivalente.
Reescriba el Ejemplo 3.19 con una estructura de repetición for y asegúrese de que sea lógica y funcionalmente equivalente.
    18. Modifique el Ejemplo 3.19 para que las calificaciones sean validadas (que estén entre cero y diez). Utilice la estructura de repetición while para la repetición controlada por centinela.
    19. Repita el ejercicio anterior pero utilice la estructura de repetición do-while para la repetición controlada por centinela.
    20. Repita el ejercicio anterior pero utilice la estructura de repetición for para la repetición controlada por centinela.
    21. Escriba un programa que realice la suma de los números del uno al diez:
                (a) Utilice la estructura de repetición while.
                (b) Utilice la estructura de repetición do-while.
    22. Escriba una programa que realice la suma de números enteros procesados desde la entrada estándar. La suma se detiene cuando el número leído sea igual a cero.
                (a) Utilice la estructura de repetición while.
                (a) Utilice la estructura de repetición do-while.
    23. Escriba un programa que permita determinar el mayor de n números proporcionados desde el teclado, donde n >1.
    24. Escriba un programa que permita determinar la suma de los primeros n números enteros positivos proporcionados desde el teclado, donde n >1. Para este programa, si el usuario introduce números negativos se deberán ignorar, y el programa deberá considerar únicamente la suma de números positivos.
    25. Escriba un programa que permita determinar por selección la suma de los primeros n números pares (n > 1). Su programa no debe generar los números pares, debe seleccionarlos.
    26. Escriba un programa que permita determinar por selección la suma de números pares contenidos entre 1 y n, donde n > 1.  Su programa no debe generar los números pares, debe seleccionarlos.
    27. Escriba un programa que permita determinar por selección la suma de números pares contenidos entre m y n, donde m > 1 y n > m.  Su programa no debe generar los números pares, debe seleccionarlos.
    28. Escriba un programa que permita identificar los números primos entre 1 y n, donde n > 1.
    29. Escriba un programa que permita determinar los números primos contenidos entre m y n, donde m > 1 y n > m.
    30. Dada una lista de números enteros positivos proporcionados desde la entrada estándar, determine el mayor y el menor de ellos. La lista termina al proporcionar cualquier número negativo o cero.
    31. ¿Qué conclusiones puede determinar de la realización de los seis ejercicios anteriores?, ¿qué tipo de estructura de repetición es más natural, desde su perspectiva, para una repetición controlada por contador y por qué? En este mismo sentido, ¿qué tipo de estructura de repetición es más natural para una repetición controlada por centinela?
    32. Reescriba el programa del Ejemplo 3.20 utilizando una estructura de repetición while y determine lo que pasa. ¿Funciona de la misma manera?, ¿se genera algún tipo de problema?, ¿se mantiene la equivalencia lógica y funcional?
    33. Reescriba el programa del Ejemplo 3.20 utilizando una estructura de repetición do-while y determine lo que pasa. ¿Funciona de la misma manera?, ¿se genera algún tipo de problema?, ¿se mantiene la equivalencia lógica y funcional?
    34. Reescriba el programa del Ejemplo 3.21 utilizando una estructura de repetición while y determine lo que sucede. ¿Funciona de la misma manera?, ¿se genera algún tipo de problema?, ¿se mantiene la equivalencia lógica y funcional?
    35. Reescriba el programa del Ejemplo 3.21 utilizando una estructura de repetición do-while y determine lo que sucede. ¿Funciona de la misma manera?, ¿se genera algún tipo de problema?, ¿se mantiene la equivalencia lógica y funcional?
    36. Escriba un programa que lea un número que representará una cantidad de dinero. El número debe estar entre 1 y 4000. Su programa deberá determinar la menor cantidad de billetes de $500, $200, $100, $50 y $20 así como de monedas de $10, $5 y $1 que debe entregar un empleado a una persona que solicita dicha cantidad.