Estructuras Repe@@vas - fio - unicen

Existen dos Fpos de estructuras repeFFvas: • Aquella en donde se Fene perfectamente establecido el número de veces que un grupo de acciones se van a e...

473 downloads 610 Views 1MB Size
Estructuras  Repe,,vas   Se  solicita  al  operador  que  ingrese  tres  números  enteros  cualesquiera.   En  base  a  estos  números,  mostrar  por  pantalla  cual  es  el  mayor  de  todos.   Diag.  De  Flujos                                                Pseudocódigo  

 

 Matlab  

Inicio      variable1ß0      variable2ß0      Imprimir  “Ingrese  tres  números  enteros  “      Desde  1  a  3            Leer  variable1            si  (variable1>variable  2)  entonces                variable2ßvariable1              Fin  si      Fin  Desde        imprimir  “El  mayor  valor  ingresado  es  ”      imprimir  variable2   Fin            

  v1=0;   v2=0;   disp(‘Ingrese  tres  números  enteros’);     for  i=[1..3]        v1=input(‘ingrese  un  entero  ‘);        if  (v1  >  v2)                v2=v1;        end   End   disp(‘El  mayor  valor  es’);   disp(v2);  

Estructuras  Repe,,vas   •  La  estructura  repeNNva  se  uNliza  cuando  se   quiere  que  un  conjunto  de  instrucciones  se   ejecuten  un  cierto  número  finito  de  veces.   •   Llamamos  bucle  o  ciclo  al  proceso  que  se   repite.  

Estructuras  Repe,,vas   Existen  dos  Npos  de  estructuras  repeNNvas:   •  Aquella  en  donde  se  Nene  perfectamente   establecido  el  número  de  veces  que  un  grupo   de  acciones  se  van  a  ejecutar  .   •  Aquella  en  la  que  el  número  de  repeNciones   es  desconocido  y  se  hará  hasta  que  se  cumpla   o  no  cierta  condición.    

Estructuras  Repe,,vas    “Desde  o  Para”   •  Cuando  conocemos  de  antemano  el  número   de  veces  en  que  se  desea  ejecutar  una  acción   o  grupo  de  acciones.   •  Esta  estructura  ejecuta  las  acciones  del  cuerpo   del  bucle  un  número  especificado  de  veces.   •   Controla  en  modo  automáNco  el  valor  de  una   variable  que  cuenta  la  canNdad  de  ciclos   ejecutados.  

Estructuras  Repe,,vas    “Desde  o  Para”  -­‐  SINTAXIS   para    variableß  Vi  hasta  Vf  [incremento]  hacer    acción  o  acciones   fin-­‐desde  

   variable:  variable  índice   Vi:  valor  inicial  de  la  variable  indice   Vf:  valor  final  de  la  variable  indice   [incremento]:  el  número  que  se   incrementa  (o    decrementa)  a  la   variable  indice  en  cada  iteración  del    bucle,  si  se  omite  es  1.    

Estructuras  Repe,,vas    “Desde  o  Para”  -­‐  EJEMPLO   Imprimir  todos  los  números  del  1  al  100.  

Inicio                      para  I  ß  1  hasta  100                                  imprimir  I                  fin-­‐desde   fin    

 for  l=1:100,      disp(l);    end  

1)  I  es  la  variable  índice  con  un  valor  inicial  de  1,  se  incrementa  uno  en  cada  paso  hasta  100.   2)  La  estructura  desde  comienza  con  un  valor  inicial  de  la  variable  indice  y  las  acciones  se   ejecutan  hasta  que  su  valor    sea  MAYOR  que  el  que  el  Valor  final.   3)  La  variable  indice  se  incremente  en  uno  y  si  este  nuevo  valor  del  indice  no  es  mayor  que   el  valor  final,  se  ejecuta  de  nuevo  la  acción  imprimir.   En  este  caso  se  visualizará  los  números  1,  2,  3,  4,  5,  6,  7,  8,  9,  10  ....97,  98,  99,  100  

Estructuras  Repe,,vas    “Desde  o  Para”  -­‐  EJEMPLO   Imprimir  todos  los  números    pares  desde  2  hasta  300.  

Inicio                      desde  I  ß  2  hasta  300  incremento  2                                  imprimir  I                  fin-­‐desde   fin    

 for  l=2:2:300,      disp(l);    end  

1)  La  variable  indice  comienza  en  2,  se  imprime  2  y  en  el  siguiente  paso  se  incrementa    en  2   2)  l  pasa  a  valer  4;  se  imprime  el  4  y  como  4  es  menor  que  300  (valor  final)  ,  se  pasa  a  una   nueva  iteración  incrementando  nuevamente  l  en  2,  que  ahora  vale  6;  y  así   sucesivamente...   3)  Aquí  se  visualiza:  2,  4,  6,  8,  10,  12,  14,  16,  18,  .....  296,  298,  300    

Estructuras  Repe,,vas    “Desde  o  Para”  -­‐  EJEMPLO   Imprimir  todos  los  números    IMPARES  desde  1  hasta  300.  

Inicio                      para  I  ß  1  hasta  300  incremento  2                                  imprimir  I                  fin-­‐desde   fin    

 for  l=1:2:300,      disp(l);    end  

1)  Vemos  los  valores:  1,  3,  5,  7,  9,  11,  13,  ....  ,  299     2)  El  ciclo  termina  mostrando  299  puesto  que  en  el  siguiente  paso,  la  variable  I  valdría  301  y   es  mayor  al  límite  establecido  de  300.     3)  I  pasa  a  valer  realmente  301  en  el  úlNmo  paso,  solo  que  la  instrucción  de  imprimir  no  se   ejecuta.   4)  Si  diéramos  la  instrucción  de  imprimir  el  valor  de  I,  inmediatamente  después  del  fin-­‐ desde,  veríamos  301.    

Estructuras  Repe,,vas    “Desde  o  Para”  -­‐  EJEMPLO   Imprimir  los  valores  comprendidos  entre  el  460  y  500  en  orden  inverso.  

Inicio                    para  I  ß  500  hasta  460  incremento  -­‐1                                  imprimir  I                  fin-­‐desde   fin    

   for  l=500:-­‐1:460,      disp(l);    end  

Como  salida  tenemos,  entonces:          500,  499,  498,  497,  496,  495,  494,  ....  464,  463,  462,  461,  460.  

Ciclos  con  Numero  Indeterminado  de  Iteraciones   •  Se  diferencia  de  la  PARA/DESDE  en  que  no  se   conoce  el  número  de  repeNciones  o  iteraciones   en  que  se  va  a  ejecutar  una  instrucción  o  un   bloque  de  instrucciones.   •  Estas  estructuras  son  básicamente  dos:     –  mientras....fin-­‐mientras     –  repeNr....  hasta.    

•  Estas  dos  se  diferencian  en  que  la  verificación  de   la  condición  para  repeNr  el  ciclo  se  hace  al  inicio   con  mientras  y  al  final  con  repeNr.    

HACER-­‐MIENTRAS   El  cuerpo  del  bucle  se  cumple  mientras  se  cumple  una  determinada   condición.  Por  esta  razón  se  los  denomina  BUCLES  CONDICIONALES.    

mientras  {condición}    acción  1   acción  2   acción  3   .....   acción  n     fin  mientras   instrucción  X  

while  condición,        comando;        …   end  

HACER-­‐MIENTRAS   Lo  primero  que  el  computador  hace  es  examinar  la  condición,  lo  que   puede  dar  como  resultado  dos  posibilidades:     •  La  condición  se  cumple:  Se  ejecutan  acción  1,  acción  2,  acción  3,  ...,   acción  n.   Las  estará  repiNendo  hasta  que  la  condición  no  se  cumpla,   entonces  se  sale  del  ciclo  y  se  siguen  ejecutando  la  o  las   instrucciones  que  vienen  a  conNnuación  y  están  fuera  del  bucle;   instrucción  X.     •  La  condición  no  se  cumple:  No  entrará  en  el  ciclo.  Se  ejecutan  las   instrucciones  que  vienen  después  del  bucle,  instrucción  X,  por   ejemplo.     De  esto  se  deduce  que  el  cuerpo  del  bucle  de  una  estructura   mientras  puede  repePrse  cero  o  más  veces.  

Matlab  

Pseudocódigo  

HACER-­‐MIENTRAS   (EJEMPLO)  

leer  contraseña   mientras  contraseña  <  >  "josua"      imprimir  "La  contraseña  es  incorrecta  !“    leer  contraseña   fin-­‐mientras   imprimir  "Ha  ingresado  la  contraseña  correcta“     contraseña=input(‘Ingrese  su  contraseña  ’);   while(contraseña  <>  ‘josua’),    disp(‘contraseña  incorrecta’);    contraseña=input(‘Ingrese  su  contraseña  ’);   End   disp(‘Ha  ingresado  la  contraseña  correcta’);  

REPETIR-­‐HASTA   La  estructura  repeNr  cumple  la  misma  función   que  la  estructura  mientras.  La  diferencia  está   en  que  la  estructura  mientras  comprueba  la   condición  al  inicio  y  repeNr  lo  hace  al  final;  por   eso  la  estructura  repeNr  se  ejecuta  por  lo   menos  una  vez.  

REPETIR-­‐HASTA   SINTAXIS  

repeEr      intrucción  1   instrucción  2   instrucción  3   ......   hasta  {condición}   instrución  X    

Lo  que  la  computadora  hace  al  ejecutar  la  estructura  repeNr  es:   1)  Se  ejecutan:  instrucción  1,  instrucción  2,  instrucción  3,  ......   2)  Se  evalúa  la  condición.     •  Si  esta  es  FALSA  se  vuelve  a  repeNr  el  ciclo  y  se   ejecutan  instrucción  1,  instrucción  2,  instrucción  3,  .     •  Si  la  condición  es  VERDADERA  se  sale  del  ciclo  y  se   ejecuta  instrucción  X.  

Comparación   mientras  -­‐  repeNr   MIENTRAS Comprobación de la condición al inicio, antes de entrar al bucle

REPETIR Comprobación de la condición al final, después de haber ingresado una vez al bucle

Las instrucciones del cuerpo del bucle se

Las instrucciones del cuerpo del

ejecutan en forma repetitiva si la

bucle se ejecutan si la condición es

condición es verdadera

falsa

Las acciones del bucle se pueden

Las acciones del bucle se ejecutan

ejecutar 0 o más veces

por lo menos una vez

PROBLEMAS  DE  ESTRUCTURAS   CÍCLICAS   Calcular  el  promedio  de  un  alumno  que  Nene  7  calificaciones  en  una  materia.   HACER  PARA   Inicio      Sumß0      para  c  desde  1  hasta  7  hacer          Leer  calif          Sum  ß  sum  +  calif      Fin-­‐para      prom  ß  sum  /7      Imprimir  prom   Fin.          

HACER  MIENTRAS   Inicio      Sumß0      cß1      Mientras  (c<=7)  hacer            Leer  calif            Sum  ß  sum  +  calif            cß  c+1      Fin-­‐mientras      prom  ß  sum  /7      Imprimir  prom   Fin.      

REPETIR  HASTA   Inicio      Sumß0      cß1      RepeNr          Leer  calif          Sum  ß  sum  +  calif          cß  c+1      Hasta  (c>7)      prom  ß  sum  /7      Imprimir  prom   Fin.  

PROBLEMAS  DE  ESTRUCTURAS   CÍCLICAS   Leer  10  números  y  obtener  su  cubo  y  su  cuarta  potencia   HACER  PARA   HACER  MIENTRAS   Inicio   Inicio      para  n  desde  1  hasta  10  hacer      cß1          Leer  num      Mientras  (c<=10)  hacer          cubo  ß  num  *  num  *  num          Leer  num          cuarta  ß  cubo  *  num          cubo  ß  num  *  num  *  num          Imprimir  cubo,  cuarta          cuarta  ß  cubo  *  num      Fin-­‐para          Imprimir  cubo,  cuarta   Fin.          cß  c+1          Fin-­‐mientras     Fin.              

REPETIR  HASTA   Inicio      cß1      RepeNr          Leer  num          cubo  ß  num  *  num  *  num          cuarta  ß  cubo  *  num          Imprimir  cubo,  cuarta          cß  c+1      Hasta  (c>10)   Fin.  

PROBLEMAS  DE  ESTRUCTURAS   CÍCLICAS   Calcular  la  suma  y  el  promedio  de  números  ingresados  .  La  canNdad  de  números  a  ingresar  es   desconocida  al  momento  de  ejecutar  el  algoritmo  y  todos  los  números  a  ingresar  se  encuentran   en  el  entorno  [0,100].  La  carga  finaliza  cuando  se  ingresa  un  número  fuera  de  rango.   HACER  MIENTRAS   Inicio   HACER  PARA   No  puede  resolverse  con  esta      Sumß0   estructura   NO   se   conoce   el      Cuentaß0      Leer  Num   número  de  iteraciones.      Mientras  Num>=0  y                                        Num<=100  hacer          SumßSum+Num          Leer  Num          Cuentaß  Cuenta+1      Fin-­‐mientras      Si  Cuenta>0  entonces          Promß  sum/cuenta          Imprimir  Sum,  Prom      Fin-­‐Si   Fin.  

REPETIR  HASTA   No   puede   resolverse   con   esta   estructura   ya   que   si   el   primer   número   ingresado   se   encuentra   fuera   de   rango   igual   ejecutaría   el   bucle,  ya  que  en  el  RepeNr-­‐ hasta   al   menos   una   vez   se   ejecuta  el  bucle.  

¿CUANDO  EMPLEAR  CADA   ESTRUCTURA  REPETITIVA?