Unidad 6 - Sentencias Repetitivas - Para

12
2015 UNIDAD VI: Sentencias Repetitivas - Para PROGRAMACION DE COMPUTADORAS

description

devc++

Transcript of Unidad 6 - Sentencias Repetitivas - Para

Page 1: Unidad 6 - Sentencias Repetitivas - Para

2015

UNIDAD VI: Sentencias Repetitivas - Para

PROGRAMACION DE COMPUTADORAS

Page 2: Unidad 6 - Sentencias Repetitivas - Para

Unidad VI: Sentencias Repetitivas - Para

2

UNIDAD VI: Sentencias Repetitivas - Para

5.1 INTRODUCCIÓN

Un ciclo es una estructura que nos permite representar un conjunto de instrucciones que debe repetirse

una cantidad limitada de veces, normalmente dependiente de una condición o de una cantidad

determinada de repeticiones o iteraciones. Los ciclos permiten iterar todo un proceso tantas veces

como el programador (ó el usuario) lo determine.

Es común, que en la solución de muchos problemas algorítmicos, se requiera realizar la repetición de

cierto bloque de instrucciones, con el fin de obtener el objetivo buscado por el algoritmo. Como se vio

con la Sentencia Repetitiva Mientras, para implementar repetición de bloques de instrucciones se

utilizan las estructuras de control llamadas ciclos o estructuras repetitivas. En esta Unidad entraremos a

ver otra Estructura Repetitiva, en este caso la Sentencia Para.

5.2 Concepto General

Un Sentencia Repetitiva Para puede definirse como una estructura que nos permite repetir o iterar un

conjunto de instrucciones y que tiene las siguientes características:

• El conjunto de instrucciones a repetir dentro del ciclo debe ser finito

• La cantidad de veces que se repita dicho conjunto de instrucciones también debe ser finita. En

algunos casos esta cantidad de veces va a depender de una condición explícita y en otros casos

va a depender de una condición implícita. Una condición es explícita cuando depende solamente

de la misma ejecución del programa sin que sea importante la participación del usuario.

Asimismo una condición es implícita cuando depende solamente de la voluntad del usuario y

por lo tanto la cantidad de iteraciones o repeticiones del ciclo podría llegar a ser diferente cada

vez pues sería posible que cambiara con cada usuario.

• Deben estar claramente demarcados el inicio y el fin del ciclo. En los casos en los cuales solo

exista una instrucción a iterar, no serán necesarias dichas marcas.

• Dentro de un ciclo podrá ir cualquiera de las otras estructuras, incluyendo otros ciclos.

Al revisar detenidamente las definiciones vistas aquí y al hacer inferencia con lo que aprendimos en la

Sentencia Mientras, se puede concluir que las dos estructuras son iguales en su conceptualización.

Ahora que veamos la declaración del Para, vamos a darnos cuenta que son distintas en su sintaxis, pero

en su forma de operar prácticamente son iguales.

La forma de usar la Sentencia Repetitiva Para es la siguiente:

Para variable_numerica<-valor_inicial Hasta valor_final Con Paso paso Hacer

secuencia_de_acciones

Fin Para

Page 3: Unidad 6 - Sentencias Repetitivas - Para

Unidad VI: Sentencias Repetitivas - Para

3

Donde:

Variable_numerica: Corresponde a la variable que se utilizará para controlar las repeticiones del ciclo

Para.

Valor_inicial: Es el valor con el cual se iniciará el ciclo de repeticiones.

Valor_final: Corresponde al número de iteraciones que se llevarán a cabo por parte del ciclo Para.

Paso: Indica la forma en que el ciclo se comporta, esto es, si el ciclo se ejecutará en orden ascendente

(incremento) o en orden descendente (decremento). Este incremento o decremento afectará el valor de

la variable_numerica con el fin de alcanzar el valor_final.

Si se necesita repetir un grupo de acciones un número conocido de veces la mejor opción es la sentencia

repetitiva Para. Esto último es la diferencia radical en la forma de usar una Sentencia Para y una

Sentencia Mientras. Cuando se tiene una condición explícita, se usará el Para.

La sentencia repetitiva Para es una de las estructuras más usadas en los lenguajes de programación, esta

sentencia inicializa una variable, evalúa una condición y luego realiza una operación sobre una variable.

Modo de uso:

1. Se inicializa la variable.

2. Se evalúa la condición.

3. Si la condición se cumple, se realizan las acciones especificadas, si no se cumple, no se ejecuta

ninguna acción y se salta a la próxima línea.

4. Se realiza una operación sobre una variable (incremento, decremento).

5. Se repiten los pasos 2, 3 y 4 mientras se cumpla la condición.

Para entender bien el uso, desarrollemos un ejemplo muy sencillo.

Ejemplo:

1.- Escriba un programa que solicite el ingreso de dos números (valor inicial y un valor final) y que

muestre por pantalla los números que pertenecen al intervalo dado.

Pseudocódigo:

1 Proceso Ejemplo_Para 2 Definir inicial, contador, limite Como Entero; 3 Escribir "De valor inicial: "; 4 Leer inicial; 5 Escribir "De valor final: "; 6 Leer limite; 7 Para contador<-inicial Hasta limite Con Paso 1 H acer 8 Escribir contador; 9 FinPara 10 FinProceso

Page 4: Unidad 6 - Sentencias Repetitivas - Para

Unidad VI: Sentencias Repetitivas - Para

4

Explicación del algoritmo

Lo que se hace hasta la línea 6 se conoce muy bien. Sin embargo quiero resaltar el sentido de pedir al

usuario el valor inicial que será almacenado en la variable inicial. Esa variable va a almacenar el valor

con que arrancará el intervalo de números que queremos mostrar. La variable limite contendrá el último

valor del intervalo.

Entendiendo estos dos valores, podremos entender cómo se comporta la sentencia Para de la línea 7.

Esta sentencia es un ciclo repetitivo que se hará hasta que la variable contador alcance el valor que

tiene la variable limite, arrancando contador en el valor inicial. Cuando el ciclo alcance el valor de la

variable limite, terminará.

En la línea 8, se imprime el valor que va tomando la variable contador. Note que aunque nosotros no

cambiamos el valor de la variable contador, la salida a la pantalla muestra que la variable si está

cambiando. Note que la variable se incrementa de 1 en 1. Este valor de incremento lo da el valor que

coloquemos en el parámetro Paso de la sentencia Para.

¿Qué pasa si introducimos un valor menor en limite del que le demos a inicial?

¿Se produce algún cambio en la salida por pantalla si Ud. cambia el valor de Paso? Por ejemplo pruebe

con dos. Pruebe otros valores.

Revisando el Pseudocódigo, Ud. Puede deducir donde termina el ciclo Para?

Diagrama de flujo

Page 5: Unidad 6 - Sentencias Repetitivas - Para

Unidad VI: Sentencias Repetitivas - Para

5

Resultado de la ejecución

Con inicial en 1 y limite en 12

Con inicial en 15 y limite en 25

Como en este momento ya tenemos que escribir nuestros programas en C++, pasaremos el código de

Pseudocódigo a C++.

Page 6: Unidad 6 - Sentencias Repetitivas - Para

Unidad VI: Sentencias Repetitivas - Para

6

Código Fuente en C++

1 // ejemplopara.cpp 2 // Programa básico para mostrar 3 // como funciona un ciclo Para (for) en C++ 4 // 5 6 #include <cstdio> 7 #include <iostream> 8 9 using namespace std; 10 11 int main() 12 { 13 int inicial, contador, limite; 14 15 cout << "De valor inicial:"; 16 cin >> inicial; 17 cout << "De valor final:"; 18 cin >> limite; 19 20 for (contador=inicial; contador<=limite; contad or++){ 21 cout << contador << "\n"; 22 } 23 24 return 0; 25 }

Revise el código fuente y compárelo con el Pseudocódigo:

¿Puede identificar el ciclo Para? ¿Dónde empieza y dónde termina?

Dentro de la sentencia for hay tres parámetros separados por “;”. Qué significa cada parámetro

comparado contra el Para en Pseudocódigo?

¿Qué parámetro representa el Paso del Para dentro del for?

Explique cómo se comporta la sentencia contador++.

Intente hacer este mismo ejercicio con una Sentencia Repetitiva Mientras (while). ¿Se podría?

La principal diferencia de un bucle PARA con respecto a los bucles MIENTRAS

Y REPETIR, es que puede determinarse desde el comienzo del bucle cuántas

veces se iterará el mismo, lo cual muchas veces puede redundar en una

optimización del código por parte de los compiladores.

Page 7: Unidad 6 - Sentencias Repetitivas - Para

Unidad VI: Sentencias Repetitivas - Para

7

Ejemplo:

2.- Escribir un programa que imprima los números impares entre 1 y 100.

Pseudocódigo:

1 Proceso Impares 2 Definir contador Como Entero; 3 4 Para contador<-1 Hasta 100 Con Paso 1 Hacer 5 si ((contador%2)=1) Entonces 6 Escribir contador; 7 FinSi 8 FinPara 9 FinProceso

Explicación del algoritmo

En la línea 4 se encuentra la Sentencia Repetitiva Para. Inicia el contador en 1, después del inicio, el

programa valida en la misma sentencia si el contador no ha alcanzado el límite que en este caso es 100.

Si no ha alcanzado el límite indicado, el programa continúa en la línea 5, donde se evalúa la condición

(contador%2)= 1. En este sentencia, contador%2 valdrá cero (0) cuando el número sea par ó uno (1)

cuando el valor sea impar. Dado lo anterior, la condición será igual a 1 en los impares, entrando a la

línea 6.

Como dijimos atrás, a la línea 6, solo entrará el programa cuando contador sea impar, de lo contrario

regresará a la línea 4, incrementando contador en el valor que tenga Paso, luego contador se

incrementa en 1. Luego del incremento se vuelve a validar si no ha alcanzado el límite, para permitir el

paso a la línea 5. Cuando el límite se alcance, el programa continuará en la siguiente línea del FinPara,

que en este caso es la línea 9, terminando así el programa.

Diagrama de flujo

Page 8: Unidad 6 - Sentencias Repetitivas - Para

Unidad VI: Sentencias Repetitivas - Para

8

Resultado de la ejecución

Page 9: Unidad 6 - Sentencias Repetitivas - Para

Unidad VI: Sentencias Repetitivas - Para

9

Código Fuente en C++

1 // Impares.cpp 2 // Programa básico para mostrar 3 // como funciona un ciclo Para (for) en C++ 4 // 5 6 #include <cstdio> 7 #include <iostream> 8 9 using namespace std; 10 11 int main() 12 { 13 int contador; 14 15 for (contador=1; contador<=100; contador++){ 16 if ((contador%2)==1){ 17 cout << contador << "\n"; 18 } 19 } 20 21 return 0; 22 }

Compile y ejecute el programa en C++ y asegúrese que los resultados son los mismos.

Encuentre similitudes y diferencias entre escribir el código en Pseudocódigo y C++. Entienda cada

diferencia.

En este programa la selección de los impares se hace en la sentencia condicional al comparar el módulo

de 2 del contador. Plantee el programa sin usar el módulo de 2, modificando el Paso en el ciclo Para.

Luego que lo tenga funcionando en Pseudocódigo, pase el nuevo programa a C++.

Ejemplo:

3.- Escriba un algoritmo que solicite 20 números enteros y que cuente cuantos ceros se ingresaron.

Variables a utilizar

- contador: Variable que llevará el control de las iteraciones, en este caso serán 20 iteraciones.

- num: Esta variable almacena el número ingresado por parte del usuario.

- ceros: Será la variable que llevará el control de la cantidad de ceros ingresados

Datos de entrada:

- El usuario va a introducir una serie de números, cada uno de los cuales se irá almacenando en la

variable num.

Page 10: Unidad 6 - Sentencias Repetitivas - Para

Unidad VI: Sentencias Repetitivas - Para

10

Datos de salida:

- Presentar en pantalla el valor de la variable ceros que contendrá la cantidad de ceros ingresados

por el usuario. Al inicio esta variable empezará con el valor 0.

Procedimiento:

- Darle un valor inicial a la variable ceros.

- Por medio del ciclo Para solicitar al usuario ingrese una serie de 20 valores.

- Verificar si el valor ingresado es cero, si la comparación resulta ser verdadera se incrementará

en uno el valor de la variable ceros.

Pseudocódigo:

1 Proceso ceros 2 Definir contador, num, ceros Como Entero; 3 4 ceros<-0; 5 6 Para contador<-1 Hasta 20 Con Paso 1 Hacer 7 Escribir Sin Saltar "Ingrese el elemento ", conta dor; 8 Leer num; 9 10 Si num = 0 Entonces 11 ceros<-ceros+1; 12 FinSi 13 FinPara 14 15 Escribir "Se ingresaron un total de: ", ceros, " c eros"; 16 FinProceso

Explicación del algoritmo

Línea 2, Se define las variables a utilizar.

Línea 4, La variable ceros toma el valor inicial 0, indicando que no se han ingresados elementos con el

valor cero.

Línea 6, Inicia el ciclo Para, con la variable contador con un valor inicial de 1 y cuyo valor final será 20.

Además se indica que la variable contador irá aumentando su valor en uno

Línea 7 y 8, se le solicita al usuario ingrese un número y se captura su valor almacenado dicho valor en la

variable num.

Línea 10, se verifica si el número ingresado es igual a cero, si esto es verdadero se incrementa en uno el

valor de la variable ceros (esto de hace en el línea 11).

Línea 15, Se presente en pantalla el total de números creso ingresados.

Page 11: Unidad 6 - Sentencias Repetitivas - Para

Unidad VI: Sentencias Repetitivas - Para

11

Diagrama de flujo

Resultado de la ejecución

Page 12: Unidad 6 - Sentencias Repetitivas - Para

Unidad VI: Sentencias Repetitivas - Para

12

Pase el programa de Pseudocódigo a C++, compílelo y ejecútelo.

5.3 Ejercicios Propuestos

1. Escribir un programa que calcule la suma de los n primeros números naturales.

2. Escribir un programa que calcule la suma de los cuadrados de los n primeros números naturales:

1 + 22 + 3

2 + 4

2 + n

2.

3. Escribir la media aritmética, de un grupo de números leídos.

4. Escribir un programa que calcule la suma de los números enteros desde n hasta m (m>n).

5. Diseñar un programa que calcule el cociente y el resto de la división entera de dos números

mediante restas y sumas.

6. Leer una lista de números positivos y emitir el valor mínimo de la lista.

7. Escribir un programa que calcule el factorial de un número positivo n: n! = n * (n-1) * (n-2) * . . .

Nota : Observar el buen funcionamiento del programa para n=0 y para n<0.

8. Escribir un programa que calcule el cuadrado de un número, haciéndolo sólo por sumas. Ayuda:

El cuadrado de un número n es la suma de los n primeros números impares. Ejm: 32

= 1+3+5 = 9.

9. Los términos de la serie de Fibonacci se calculan así:

a1=1; a2=1; a3=2; a4=3; a5=5; a6=8; . . . an=an-1+an-2. Diseñar un programa que calcule el n-ésimo

término de la serie de Fibonacci.