Clase 5 - FOR y WHILE - Preuniversitario| Ciudad de San Felipe

Anuncio
– PRE-Universitario Ciudad de San Felipe –
Informática
6to Ingeniería
Clase 5 - Bucles, Loops, repeticiones, o ciclos
Los bucles o loops son varias secuencias que se ejecutan repetidas veces. Separamos en dos
casos, cuando sabemos exactamente la cantidad de veces que se repite el bucle, o cuando no
sabemso cuantas veces pero tenemos una condición que se debe cumplir para seguir
trabajando. Para lo primero se usa el FOR, y para lo segundo el WHILE.
Bucle FOR
Hay ocasiones en las que es necesario repetir el mismo conjunto de instrucciones muchas
veces, cambiando algunos detalles. Pongamos un caso. Sumar los primeros 20 naturales.
Eso se puede hacer haciendo a=1+2+3+4+5+…..+18+19+20. Pero seria imposible pensar en
hacer esto si queremos sumar los 500000 primeros naturales. O si bien no imposible, por lo
menos demaisado laaaargo.
Para este tipo de problemas se usa el bucle for, pues de antemano sabemos cuantas veces
queremos repetir una operación.
La sintaxis del for es
for contador=inicio:paso:fin,
sentencias
end
Las palabras claves son for y end. Este bucle pone en marcha una variable llamada contador
que va desde inicio hasta fin de paso en paso. Cada vez que las sentencias se ejecutan,
contador aumenta en un valor paso (que si se omite, se le asigna automáticamente el valor 1).
Cuando contador llega al valor fin, el bucle se acaba y el programa continúa con las sentencias
que haya más allá de end.
Ejemplos
La siguiente construcción ejecuta sentencias con valores de i de 1 a n, variando de uno en uno
for i=1:n
sentencias
end
Informática
– PRE-Universitario Ciudad de San Felipe –
6to Ingeniería
En el siguiente ejemplo se presenta el caso más general para la variable del bucle
(valor_inicial: incremento: valor_final); el bucle se ejecuta por primera vez con i=n, y luego i se
va reduciendo de 0.2 en 0.2 hasta que llega a ser menor que 1, en cuyo caso el bucle se
termina:
for i=n:-0.2:1
sentencias
end
En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles anidados. La
variable j es la que varía más rápidamente (por cada valor de i, j toma todos sus posibles
valores):
for i=1:m
for j=1:n
sentencias
end
end
Ahora un programa que le pida al usuario un natural y escriba en pantalla todos los naturales
desde 1 a ese número.
nro = input('Ingrese un número natural > que 1: ');
for i=1:nro
disp(i)
end
Calculemos
20
2i 420
i= 1
El código para esto es el siguiente:
suma=0;
for i=1:20
suma=suma+i;
end
suma
Otro ejemplo de ciclo for es el cálculo del factorial de n:
n=20
fact=1;
for i=1:20
fact=fact*i;
end
fact
Ahora podemos cambiar el programa para que pregunte el número del cual podemos calcular
el factorial
n=input(‘factorial de que numero?:’)
fact=1;
for i=1:n
fact=fact*i;
end
fact
Informática
– PRE-Universitario Ciudad de San Felipe –
6to Ingeniería
Es importante ver en los ejemplos las variables marcadas con rojo. Estas variables se usan
para ir guardando resultados de las operaciones que se repiten. Es algo muy usado en
programación tener este tipo de variables en bucles, pues todas las operaciones que se hacen
deben quedar guardadas en alguna variable, que debe ser siempre la misma. Por eso se usa
una “recursión” ya que la variable se usa a si misma. Es fundamental que dicha variable
arranque con algún valor antes de entrar al ciclo sino da un error.
Bucle While
Si se pide calcular los primeros 20 naturales, uno piensa en usar un FOR de esta manera:
suma=0;
for i=1:20
suma=suma+i;
end
Un bucle como el indicado se implementa un número fijo de veces: desde inicio hasta fin de
paso en paso. En este ejemplo se hace desde i=1 a i=20 y termina. En ocasiones, sin embargo,
no se sabe de antemano cuántas veces habrá que ejecutar las sentencias del bucle. Por
ejemplo: si es necesario repetir una serie de sentencias hasta que se cumpla una determinada
condición, y no se sabe a priori cuántas veces será necesario realizar esas operaciones. En
ese caso se emplea un bucle while:
while (condición),
sentencias
end
Este bucle ejecuta las sentencias mientras la condición sea verdadera.
En el siguiente ejemplo usamos un ciclo while para hacer la misma suma que en el primer
ejemplo del ciclo for.
Informática
– PRE-Universitario Ciudad de San Felipe –
6to Ingeniería
i=1;
suma=0;
while i <= 20
suma=suma+i;
i=i+1;
end
Este ejemplo va sumando i mientras que i sea menor o igual que 20, cuando se pasa de 20 no
suma más.
Diagrama de flujo de un bucle while
Atención: es fácil caer en bucles infinitos. Si en las sentencias no se modifican el valor de
alguna variable, la "condición" siempre será cierta (pues y el programa nunca saldrá del bucle:
ejecutará una y otra vez las sentencias. El programa se "cuelga", y hay que interrumpirlo desde
el teclado apretando las teclas Ctrl+C.
Por ejemplo si quiero ir dividiendo a x entre 2 mientras que este sea mayor que 10 lo puedo
hacer con este código.
x=100
while x>10
x=x/2
end
El renglón marcado en rojo es el que cambia a la variable principal, si esta línea no estuviera se
entraría en un ciclo infinito. El programa se "cuelga", y hay que interrumpirlo desde el teclado
apretando las teclas Ctrl+C.
Es posible sustituir la condición por una variable. En efecto: una variable que toma el valor cero
corresponde a una condición falsa. Si la variable toma un valor diferente de cero, es
equivalente a una condición verdadera. Así, se puede escribir
x=10;
while(x)
sentencias
x=x-1;
end
Para x=10, la "condición" es verdadera puesto que x es diferente de cero. Nótese que el
contador x hay que modificarlo manualmente (línea x=x-1) puesto que, al revés que lo que
ocurre con el bucle for, este no gestiona ningún contador. En cuanto x tome el valor cero, la
"condición" es falsa y el bucle acaba.
En el ejemplo anterior, si falta la línea x=x-1 y las sentencias no modifican el valor de x, la
"condición" siempre será cierta (pues x=10) y el programa nunca saldrá del bucle: ejecutará
una y otra vez las sentencias. Este es otro ejemplo de un ciclo infinito.
Otros ejemplos:
Una sucesión numérica clásica: tome un entero. Si es par se divide entre 2, si es impar
se multiplica por 3 y se suma uno y se repite.
n= input('Un entero, por favor : ') ;
while n > 1
if rem(n,2)==0,
n = n/2,
else n = 3*n+1,
Informática
– PRE-Universitario Ciudad de San Felipe –
end
end
Algoritmo de Euclides para máximo común divisor
m = input('insertar primer numero: ')
n = input('insertar segundo numero: ')
while (n>0)
resto=mod(m,n);
m=n;
n=resto;
end
mcd=m
Trancar la computadora
x=0;
while x~=10
x=x+0.1
end
6to Ingeniería
Descargar