PRÁCTICA INSTRUCCIONES DE REPETICIÓN Objetivos a) El alumno conocerá las tres formas básicas existentes en C para realizar iteraciones y aprenderá a manejar las sentencias while, do-while y for. b) El alumno comprenderá la importancia que tienen estas instrucciones para resolver problemas de programación y podrá distinguir cuál instrucción es más apropiada para enfrentar un problema específico. Al final de esta práctica el alumno podrá: 1. Realizar exitosamente programas que involucren procesos que requieran iteraciones. Antecedentes 1. Conocer y manejar los diversos tipos de datos. 2. Saber realizar un programa básico en C. Introducción Un número considerable de programas requieren efectuar iteraciones o ciclos que permiten repetir un bloque de instrucciones mientras se conserve verdadera alguna condición de continuación. Las instrucciones que se repiten forman lo que se llama el cuerpo del ciclo. Para elaborar un bloque de código iterativo se requieren cuatro elementos, el primero es una instrucción de repetición que delimita la sección repetitiva de código y controla su ejecución. Existen tres formas de instrucción de repetición que son permitidas en la programación en C, que son: while, for y do-while. Cada una de estas instrucciones requieren de una condición que debe evaluarse; esta condición es el segundo elemento necesario para construir las secciones repetitivas de código. Las condiciones válidas son semejantes a las utilizadas en las instrucciones de selección, donde el código se ejecuta solamente si la condición es verdadera. El tercer elemento requerido es una expresión que establece inicialmente la condición y que debe colocarse antes de que ésta sea evaluada por primera vez para asegurar la correcta ejecución del código iterativo la primera vez que se evalúa. Finalmente, dentro de la sección de código iterativo debe existir una instrucción que permita que la condición se vuelva falsa, esto es necesario para garantizar que en algún momento la iteración se detenga. Elaborada por: M.C. Vicente Fuentes Gea [email protected] M.C. Cintia Quezada Reyes [email protected] Ing. Alejandra Vargas E. De los M. [email protected] Con la colaboración de: Ing. Aurelio Sánchez Vaca 1 PRÁCTICA INSTRUCCIONES DE REPETICIÓN Cada uno de los ciclos mencionados requiere además de dos elementos básicos de programación: un acumulador y un contador. 1. Contador: es una variable que permite incrementar y/o decrementar el índice durante el ciclo. Un contador puede ser declarado de tipo int, float, long, etc. 2. Acumulador: es una variable que permite almacenar resultados parciales durante el ciclo. En C se manejan dos tipos de repeticiones, la repetición controlada por un contador que se le conoce comúnmente como repetición definida, ya que antes de que inicie la ejecución del ciclo, el número de iteraciones es conocido. Y la repetición controlada por un centinela que se conoce a menudo como repetición indefinida, debido a que el número de iteraciones no es conocido. Ciclo while La forma general de escribir una sentencia while es la siguiente: while (expresión) { secuencia de instrucciones } El funcionamiento de la sentencia while se explica a continuación: Mientras que la expresión tenga un valor verdadero, representado por un valor numérico diferente de cero, se ejecutará repetidamente la secuencia de instrucciones, evaluando en cada iteración el valor de la expresión. Si la expresión toma un valor falso, representado por un valor numérico igual a cero, la ejecución de la sentencia while finalizará. Observar que la expresión asociada al while debe ir encerrada entre paréntesis. La secuencia de instrucciones inicia con una llave que abre {, y termina con una llave que cierra }. /* Ejemplo 1: Programa que ilustra el uso del bucle while. */ # include <stdio.h> int main(void) { int contador; Elaborada por: M.C. Vicente Fuentes Gea [email protected] M.C. Cintia Quezada Reyes [email protected] Ing. Alejandra Vargas E. De los M. [email protected] Con la colaboración de: Ing. Aurelio Sánchez Vaca 2 PRÁCTICA INSTRUCCIONES DE REPETICIÓN contador = 0; while (contador < 6) { printf ("El valor de contador es %d\n", contador); contador = contador + 1; } return 0; } Este programa empieza con un comentario y el punto de entrada main(), después se define una variable de tipo entero llamada contador dentro del cuerpo del programa. Esta variable es inicializada en cero para después entrar en el bucle while. A la palabra clave while le sigue una expresión entre paréntesis y luego una serie de enunciados encerrados entre llaves. Mientras la condición sea verdadera, los enunciados entre llaves se ejecutarán repetidamente. En este caso, debido a que la variable contador es incrementada en 1 cada que los enunciados entre llaves son ejecutados, eventualmente se alcanzará el valor de 6. En este punto los enunciados no se ejecutarán más porque la variable contador ya no es menor que 6, finalizando así el bucle. El programa continuará entonces con los enunciados que siguen a las llaves. Es importante notar que si la variable contador es inicializada con un valor mayor que 5, los enunciados dentro de las llaves podrían no ejecutarse, por lo que es posible tener un bucle que jamás se ejecute. También obsérvese que si la variable no se incrementa dentro del bucle, éste jamás terminaría y por ende tampoco el programa. Ciclo do-while La forma general de un ciclo do-while es la siguiente: do { secuencia de instrucciones } while (expresión); Los enunciados entre llaves se ejecutan iterativamente en tanto que la expresión entre paréntesis sea verdadera. Cuando la expresión es falsa, la ejecución del bucle termina y el control del programa pasa a los enunciados siguientes. Conviene notar que en el bucle do-while debido a que la condición verdadero-falso se hace al final del bucle, los enunciados dentro de las llaves se ejecutan al menos una vez. Es importante observar la Elaborada por: M.C. Vicente Fuentes Gea [email protected] M.C. Cintia Quezada Reyes [email protected] Ing. Alejandra Vargas E. De los M. [email protected] Con la colaboración de: Ing. Aurelio Sánchez Vaca 3 PRÁCTICA INSTRUCCIONES DE REPETICIÓN existencia de un punto y coma al finalizar la condición impuesta después de la palabra clave while. El siguiente ejemplo es una variación del ciclo while, para este caso, el programa es casi idéntico al anterior, excepto que el bucle inicia con la palabra clave do seguida por una serie de enunciados compuestos entre llaves, después viene la palabra clave while y finalmente la expresión de evaluación entre paréntesis. /*Ejemplo 2: Programa que ilustra el uso del bucle do-while.*/ # include <stdio.h> int main(void) { int i; i = 0; do { printf ( "El valor de i es ahora %d\n", i ); i = i + 1; } while (i < 5); return 0; } Ciclo for El bucle for consiste de la palabra clave for seguida de un conjunto de expresiones entre paréntesis. Estas expresiones se componen de tres campos, cada uno separado por un punto y coma, así como se observa a continuación: for (valor inicial; expresión; incremento/decremento) { secuencia de instrucciones } Al igual que en los ciclos anteriores, la secuencia de instrucciones a iterar se encuentran encerradas entre llaves lo que permite determinar dónde inicia y dónde termina el ciclo. /*Ejemplo 3. Programa que ilustra el uso del bucle for */ #include <stdio.h> int main(void) { int indice; Elaborada por: M.C. Vicente Fuentes Gea [email protected] M.C. Cintia Quezada Reyes [email protected] Ing. Alejandra Vargas E. De los M. [email protected] Con la colaboración de: Ing. Aurelio Sánchez Vaca 4 PRÁCTICA INSTRUCCIONES DE REPETICIÓN for(indice = 0 ; indice < 6 ; indice = indice + 1) { printf ( "El valor de indice es %d\n", indice); } return 0; } El primer campo contiene la expresión indice = 0 y se le llama campo de inicialización. Cualquier expresión en este campo se ejecuta antes del inicio del bucle. En términos generales se puede decir que no existe límite en el contenido del primer campo, ya que es posible contener varios enunciados separados por comas. El segundo campo, que en este caso contiene la expresión indice<6 es la prueba que se hace al principio de cada ciclo del bucle y puede ser cualquier expresión que resulte en un valor verdadero o falso. La expresión del tercer campo se utiliza para incrementar el valor del índice en una unidad cada vez que se ejecute el cuerpo del for. Es importante notar como el ejemplo anterior, proporciona los mismos resultados que los dos primeros ejemplos. Errores más comunes que se pueden cometer al programar ciclos: 1. Colocar después del paréntesis del ciclo while o del ciclo for un punto y coma. 2. Olvidar encerrar entre llaves las sentencias que contiene el ciclo cuando se tiene más de una. 3. Olvidar declarar la variable que se utiliza dentro del ciclo. 4. Suposiciones erróneas en los valores de las variables utilizadas dentro del ciclo. 5. Ciclos infinitos, donde no se controla bien la condición de paro del ciclo. 6. Confusiones en el criterio de comparación al momento de indicar la condición en el ciclo. 7. Suponer que el compilador asignará un valor de inicio a la variable utilizada para controlar el ciclo. 8. Utilizar la misma variable para diferentes fines dentro de un mismo ciclo. 9. Intentar utilizar anidamientos muy complicados dentro de un ciclo, es mejor hacer varios ciclos. 10. Usar mal las condiciones compuestas para controlar un ciclo. Ejercicios propuestos Nota: No olvidar realizar el algoritmo antes de elaborar el programa Elaborada por: M.C. Vicente Fuentes Gea [email protected] M.C. Cintia Quezada Reyes [email protected] Ing. Alejandra Vargas E. De los M. [email protected] Con la colaboración de: Ing. Aurelio Sánchez Vaca 5 PRÁCTICA INSTRUCCIONES DE REPETICIÓN 1. Desarrollar un programa que calcule el interés compuesto anual desde 1 a 30 años. El usuario debe introducir el capital invertido y la tasa de interés. La relación matemática es la siguiente: Y = A (1 + N )T donde Y = Interés compuesto anual. A = El capital invertido. N = La tasa de interés. T = El número de años. 2. Desarrollar un programa que eleve un número a cualquier potencia sin utilizar la biblioteca math.h. El usuario debe introducir la base y la potencia. 3. Escribir un programa que reciba como dato de entrada un número, el cual será el que indique hasta qué número se desea calcular la serie de Fibonacci. La serie de Fibonacci se calcula mediante la suma de 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + ... 4. Escribir un programa que calcule y muestre los valores de un intervalo de temperatura en grados Fahrenheit y grados Centígrados. El usuario seleccionará la temperatura más baja y más alta así como el incremento de temperatura. La relación matemática es F = ( 9/5 ) C + 32 donde F = Temperatura en grados Fahrenheit. C = Temperatura en grados Centígrados. 5. Una compañía de agua está implantando un nuevo sistema de cobro. Para cada casa realiza la siguiente consideración para elaborar la factura: • Los primeros 50 litros son gratis. • Entre 50 y 200 litros se cobra el litro a 10 pesos. • A partir de 200 litros se cobra el litro a 30 pesos. • La cuota mínima es de 1000 pesos, es decir, si el dinero a pagar resulta menor de 1000 pesos, entonces el pago será de 1000 pesos. Realizar un programa que calcule el gasto de agua de una familia en un mes dada la cantidad de litros gastada. 6. Escribir un programa que reciba un número entero y diga si éste es primo o no. 7. La siguiente historia es la del poderoso sultán que quería recompensar a un estudiante que le había prestado un gran servicio: cuando el sultán le preguntó la recompensa que deseaba, éste le señaló un tablero de ajedrez y solicitó simplemente 1 grano de trigo por la primera casilla, 2 por la segunda, 4 por la tercera, 8 por la siguiente, y así sucesivamente. El sultán, que no debía andar muy fuerte en matemáticas, quedó sorprendido por la modestia de la petición, porque estaba dispuesto a otorgarle riquezas mucho mayores: al menos, eso pensaba él. Con base en la historia anterior, realizar el programa que calcule el número total de granos de trigo que corresponden a cada casilla y mostrar la cantidad total. 8. Realizar un programa que obtenga la siguiente numeración y la siguiente posición. Elaborada por: M.C. Vicente Fuentes Gea [email protected] M.C. Cintia Quezada Reyes [email protected] Ing. Alejandra Vargas E. De los M. [email protected] Con la colaboración de: Ing. Aurelio Sánchez Vaca 6 PRÁCTICA INSTRUCCIONES DE REPETICIÓN 1 232 34543 4567654 567898765 9. Realizar un programa que imprima los n primeros números y sus respectivos cuadrados. 10. Escribir un programa que calcule y muestre los valores que se obtienen al realizar sen(x) en un intervalo de valores para x. El usuario deberá introducir seleccionará el valor inicial, el valor final, así como el incremento de la x. 11. Escribir un programa que calcule y muestre los valores que se obtienen al realizar cos(x) en un intervalo de valores para x. El usuario deberá introducir seleccionará el valor inicial, el valor final, así como el incremento de la x. 12. Escribir un programa que calcule y muestre los valores que se obtienen al realizar log(x) en un intervalo de valores para x. El usuario deberá introducir seleccionará el valor inicial, el valor final, así como el incremento de la x. 13. Escribir un programa que calcule y muestre los valores que se obtienen al realizar ln(x) en un intervalo de valores para x. El usuario deberá introducir seleccionará el valor inicial, el valor final, así como el incremento de la x. 14. Escribir un programa que obtenga la siguiente numeración y en la siguiente posición. 1 6 15 20 15 6 1 1 5 10 10 5 1 1 4 6 4 1 1 3 3 1 1 2 1 1 15. Realizar un programa que calcule las potencias de la 2 a la 10 del número π y la raíz cuadrada de dicha potencia. 16. Hacer un programa que calcule el factorial de un número mayor a cero. 17. Según la fórmula de Taylor, es posible expresar la función exponencial ex mediante la siguiente serie: x x2 x3 x4 ex = 1+ + + + + ..... 1! 2! 3! 4! Realizar un programa que permita calcularla. 18. Escribir un programa para calcular sen(x), cuyo desarrollo en serie es: sen( x) = x − x3 x5 x7 + − + ..... 3! 5! 7! Elaborada por: M.C. Vicente Fuentes Gea [email protected] M.C. Cintia Quezada Reyes [email protected] Ing. Alejandra Vargas E. De los M. [email protected] Con la colaboración de: Ing. Aurelio Sánchez Vaca 7 PRÁCTICA INSTRUCCIONES DE REPETICIÓN 19. Realizar un programa que pida al usuario un carácter y con éste dibujar un marco en la pantalla. 20. Elaborar un programa que permita sumar del 1 hasta el 100. 21. Plantear un programa que sume y multiplique los n primeros números enteros. Elaborada por: M.C. Vicente Fuentes Gea [email protected] M.C. Cintia Quezada Reyes [email protected] Ing. Alejandra Vargas E. De los M. [email protected] Con la colaboración de: Ing. Aurelio Sánchez Vaca 8