martes, 20 de mayo de 2014

Clase de Mayo 14 - 21

                                    Estructuras Cíclicas

Son estructuras que permiten repetir un conjunto de instrucciones, si se cumple una condición.

Veamos un ejemplo:

*** Registrar en el cuaderno y probar en Pseint el pseudocodigo y diagrama de flujo del algoritmo que permita calcular y mostrar la tabla de multiplicar de un número.

Pseudocodigo:

Proceso tabla
Escribir 'Digite el numero para hallar su tabla de multiplicar';
Leer n;
contador<-1;
Mientras contador<10 Hacer
valor<-contador*n;
Escribir 'El valor ',contador,' de ',n,' es....',valor;
contador<-contador+1;
FinMientras

FinProceso

Diagrama de Flujo:




Las estructuras de control empleadas son:

Mientras

   La instrucción Mientras ejecuta una secuencia de instrucciones mientras una condición sea verdadera.

   

 Mientras <condición> Hacer 
            <instrucciones> 
      FinMientras 

Al ejecutarse esta instrucción, la condición es evaluada. Si la condición resulta verdadera, se ejecuta una vez la secuencia de instrucciones que forman el cuerpo del ciclo. Al finalizar la ejecución del cuerpo del ciclo se vuelve a evaluar la condición y, si es verdadera, la ejecución se repite. Estos pasos se repiten mientras la condición sea verdadera. 

Note que las instrucciones del cuerpo del ciclo pueden no ejecutarse nunca, si al evaluar por primera vez la condición resulta ser falsa. 

Si la condición siempre es verdadera, al ejecutar esta instrucción se produce un ciclo infinito. A fin de evitarlo, las instrucciones del cuerpo del ciclo deben contener alguna instrucción que modifique la o las variables involucradas en la condición, de modo que ésta sea falsificada en algún momento y así finalice la ejecución del ciclo.

Ejemplo: Adivina Numero

Este ejemplo, le da al usuario 10 intentos para adivinar un número generado aleatoriamente, utilizando esta estructura para verificar si el usuario acierta el número o si se agotan los intentos.


PSEUDOCODIGO:

Proceso Adivina_Numero

intentos<-10;
num_secreto <- azar(100)+1;
Escribir "Adivine el numero (de 1 a 100):";
Leer num_ingresado;
Mientras num_secreto<>num_ingresado Y intentos>0 Hacer
Si num_secreto>num_ingresado Entonces
Escribir "Muy bajo";
Sino 
Escribir "Muy alto";
FinSi
intentos <- intentos-1;
Escribir "Le quedan ",intentos," intentos:";
Leer num_ingresado;
FinMientras
Si intentos=0 Entonces
Escribir "El numero era: ",num_secreto;
Sino
Escribir "Exacto! Usted adivino en ",11-intentos," intentos.";
FinSi
FinProceso


Repetir 

La instrucción Repetir-Hasta Que ejecuta una secuencia de instrucciones hasta que la condición sea verdadera.


      Repetir 
            <instrucciones> 
      Hasta Que <condición> 
  
 Al ejecutarse esta instrucción, la secuencia de instrucciones que forma el cuerpo del ciclo se ejecuta una vez y luego se evalúa la condición. Si la condición es falsa, el cuerpo del ciclo se ejecuta nuevamente y se vuelve a evaluar la condición. Esto se repite hasta que la condición sea verdadera. 

Note que, dado que la condición se evalúa al final, las instrucciones del cuerpo del ciclo serán ejecutadas al menos una vez. 

 Además, a fin de evitar ciclos infinitos, el cuerpo del ciclo debe contener alguna instrucción que modifique la o las variables involucradas en la condición de modo que en algún momento la condición sea verdadera y se finalice la ejecución del ciclo.

  Si se utiliza sintaxis flexible (ver Opciones del PSeudocódigo) se permite opcionalmente utilizar Mientras Que en lugar de Hasta Que, de modo que el conjunto de acciones contenidas en el bucle se ejecuta mientras que la condición sea verdadera. Notar que la palabra Que es la que diferencia el uso de la palabra Mientras en la estructura repetir de la estructura Mientras. Es decir, si se omite la palabra que se considera como el comienzo de un bucle Mientras en lugar de el final de un bucle Repetir.

Para 



   La instrucción Para ejecuta una secuencia de instrucciones un número determinado de veces. 

      Para <variable> <- <inicial> Hasta <final> Con Paso <paso> Hacer 
            <instrucciones> 
      FinPara 

   Al ingresar al bloque, la variable <variable> recibe el valor <inicial> y se ejecuta la secuencia de instrucciones que forma el cuerpo del ciclo. Luego se incrementa la variable <variable> en <paso> unidades y se evalúa si el valor almacenado en <variable> superó al valor <final>. Si esto es falso se repite hasta que <variable> supere a <final>. Si se omite la cláusula Con Paso <paso>, la variable <variable> se incrementará en 1.
   Si se habilita la sintaxis flexible en las configuración del lenguaje se pueden utilizar dos alternativas. La primer variante consiste en reemplazar el operador de asignación por la palabra clave Desde:
      Para <variable> Desde <inicial> Hasta <final> Con Paso <paso> Hacer ... 
De esta forma, la lectura de la sentencia resulta más obvia. Además, con sintaxis flexible, si no se especifica el paso pero el valor final es menor al inicial, el bucle recorrerá los valores en orden inverso como si el paso fuera -1. La segunda variante solo sirve para recorrer arreglos de una o más dimensiones. Se introduce con la construcción Para Cada seguida de un identificador, la palabra clave De y otro identificador:
      Para Cada <elemento> De <Arreglo> Hacer ... 
El segundo identificador debe corresponder a un arreglo. El primero será el que irá variando en cada iteración. El ciclo realizará tantas iteraciones como elementos contenga el arreglo y en cada uno el primer identificador servirá para refererirse al elemento del arreglo en cuestión.

Ejemplo Promedio. Utiliza un bucle de este tipo para leer N valores numéricos con los cuales calcula un promedio.Utiliza las tres variantes de este tipo de bucles para recorrer un arreglo.

PSEUDOCODIGO

Proceso Promedio

Escribir "Ingrese la cantidad de datos:";
Leer n;
acum<-0;
Para i<-1 Hasta n Hacer
Escribir "Ingrese el dato ",i,":";
Leer dato;
acum<-acum+dato;
FinPara
prom<-acum/n;
Escribir "El promedio es: ",prom;
FinProceso


No hay comentarios: