introducci on a los computadores (cnm-130) estructuras … · estructuras de control repetitivas en...
TRANSCRIPT
Introduccion Ciclo para Ciclo mientras
Introduccion a los Computadores (CNM-130)Estructuras de control repetitivas en FreeMat
Alejandro Piedrahita H.
Instituto de MatematicasFacultad de Ciencias Exactas y Naturales
Universidad de Antioquia
Copyleft «2012. Reproduccion permitida bajo los
terminos de la licencia de documentacion libre GNU.
Introduccion Ciclo para Ciclo mientras
Contenido
1 Introduccion
2 Estructura repetitiva para
3 Estructura repetitiva mientras
Introduccion Ciclo para Ciclo mientras
Estructuras de control repetitivas
Las estructuras de control permiten modificar el flujo de ejecucionde las instrucciones de un algoritmo o programa
Se utilizan cuando en el desarrollo de la solucion de un problema sehace necesario ejecutar una serie de instrucciones un numero repetidode veces
El conjunto de instrucciones que se ejecuta repetidamente se llamaciclo o bucle
Cada vez que se ejecuta el bucle se dice que se ha producido unaiteracion
Los bucles constituyen, junto con las sentencias condicionales, lospilares de la programacion estructurada.
Caracterısticas de los ciclos
Deben incluir una condicion de parada
Deben finalizar luego de un numero finito de veces
Introduccion Ciclo para Ciclo mientras
Tipos de estructuras repetitivas
Ciclo para (for)
Se conoce a priori el numero de veces que se debe repetir el conjunto deinstrucciones
El numero de repeticiones no depende de las sentencias contenidas en elciclo
Ciclo mientras (while)
No se conoce a priori el numero de veces que se debe repetir el conjuntode instrucciones
La condicion de parada se evalua antes de ejecutarse el ciclo
El numero de repeticiones puede depender de las sentencias contenidasen el ciclo
Ciclo repetir (do)
No se conoce a priori el numero de veces que se debe repetir el conjuntode instrucciones
Se ejecuta primero el ciclo y luego se evalua la condicion de parada
El numero de repeticiones puede depender de las sentencias contenidasen el ciclo
Introduccion Ciclo para Ciclo mientras
Estructura repetitiva para
El ciclo para es una estructura de control en la que se puede indicar elnumero maximo de iteraciones
Elementos del bucle:
V: variable de control del ciclo
VI: valor inicial
VF: valor final
ID: incremento o decremento
Figura: General Figura: DFD
Sintaxis en FreeMat
for V=VI:ID:VF
sentencias
end
Introduccion Ciclo para Ciclo mientras
Ejemplo 2.1
Ejemplo 2.1
Realice una algoritmo (FreeMat) que imprima los enteros desde el 1 hastael 10. No utilice estructuras repetitivas.
Solucion
naturales1.m
disp(1);disp(2);disp(3);disp(4);disp(5);disp(6);disp(7);disp(8);disp(9);disp(10);
Introduccion Ciclo para Ciclo mientras
Ejemplo 2.2
Ejemplo 2.2
Resuelva el ejemplo (2.1) utilizando estructuras repetitivas. Implementelo enFreeMat.
Solucion
naturales2.m
for i=1:10
disp(i);
end
Introduccion Ciclo para Ciclo mientras
Ejemplo 2.3
Ejemplo 2.3
Realice una algoritmo (FreeMat) que imprima los enteros impares desde el1 hasta el 10.
Solucion
naturales2.m
for i=1:2:10
disp(i);
end
Introduccion Ciclo para Ciclo mientras
Ejemplo 2.4
Ejemplo 2.4
Realice una algoritmo (FreeMat) que imprima los enteros desde el 10 hastael 1.
Solucion
naturales2.m
for i=10:-1:1
disp(i);
end
Introduccion Ciclo para Ciclo mientras
Contadores
Contador: variable que se incrementa o decrementa de formaconstante cada vez que se ejecuta la instruccion que lo contiene
Utilizacion:
Cuentan las veces que ocurre un determinado suceso
Controlan la ejecucion de un bucle que se realiza un determinadonumero de veces.
Inicializacion: todo contador debe tomar un valor inicial antes de serusado
Sintaxis de un contador:
Variable Contador ← Variable Contador + constante
Variable Contador ← Variable Contador - constante
o tambien
Variable Contador = Variable Contador + constante
Variable Contador = Variable Contador - constante
Introduccion Ciclo para Ciclo mientras
Ejemplo 2.5
Ejemplo 2.5
Realice un algoritmo (FreeMat) que lea N numeros enteros desde el tecladoy cuente cuantos de ellos son ceros.
Solucion
Datos:
N: variable de tipo entero que representa el numero de datos que seingresan
NUM: variable de tipo entero, se utilizara para almacenar los valores delos enteros ingresados.
Variables de salida:
NUMCEROS: variable de tipo entero que actuara de contador, cuenta elnumero de ceros
Introduccion Ciclo para Ciclo mientras
Ejemplo 2.5
cuenta ceros.m
N = input("Ingrese el numero de datos: ");
NUMCEROS = 0; % inicializa el contador
for i=1:N
NUM = input("Ingrese numero: ");
if NUM == 0
NUMCEROS = NUMCEROS + 1;
end
end
disp(NUMCEROS)
Introduccion Ciclo para Ciclo mientras
Acumuladores
Acumulador: variable que almacena un valor que se incrementa odecrementa de forma variable durante un proceso repetitivo.
Sintaxis de un acumulador:
Variable Acumulador ← Variable Acumulador + variable
Variable Acumulador ← Variable Acumulador - variable
Variable Acumulador ← Variable Acumulador * variable
Inicializacion: todo acumulador debe tomar un valor inicial antes de serusado
Cuando el acumulador varıa por suma sucesiva de variables se inicializaa 0:
Variable Acumulador ← 0
Cuando el acumulador varıa por producto sucesiva de variables seinicializa a 1:
Variable Acumulador ← 1
Introduccion Ciclo para Ciclo mientras
Ejemplo 2.6
Ejemplo 2.6
Realice un algoritmo (FreeMat) que sume los numeros enteros desde 1 hastaN .
Solucion
Datos:
N: variable de tipo entero que representa el entero hasta donde serealiza la suma
SUMA: variable de tipo entero que actuara de acumulador; almacena lasuma de los primeros N numeros naturales
1 + 2 + · · · + N
Variables de salida:
SUMA
Introduccion Ciclo para Ciclo mientras
Ejemplo 2.5
sumaN.m
N = input("Ingrese enteros a sumar: ");
SUMA = 0; % inicializa acumulador
for i=1:N
SUMA = SUMA+i;
end
disp(SUMA);
Introduccion Ciclo para Ciclo mientras
Ejemplo 2.7
Ejemplo 2.7
El factorial de un numero entero no negativo n se define como
n! = 1 · 2 · · · (n− 1) · n , con 0! = 1 y 1! = 1
Escriba un algoritmo que calcule el factorial de un entero N ≥ 1 eimplementelo en FreeMat.
Solucion
Datos:
N: variable de tipo entero que representa el entero hasta donde serealiza el producto
PROD: variable de tipo entero que actuara de acumulador; almacena elproducto de los primeros N numeros naturales
1 * 2 * · · · * N
Variables de salida:
PROD
Introduccion Ciclo para Ciclo mientras
Ejemplo 2.7
factorial.m
N = input("Ingrese enteros a multiplicar: ");
PROD = 1; % inicializa acumulador
for i=1:N
PROD = PROD*i;
endfor
disp(PROD);
Introduccion Ciclo para Ciclo mientras
Estructura repetitiva mientras
La estructura repetitiva mientras (while) es utilizada en un ciclocuando no sabemos el numero de veces que este se ha de repetir
Elementos del bucle:
EXPRESION: sentencia booleana que determina si se ejecuta el bucle
INSTRUCCIONES: sentencias a ejecutar si EXPRESION es verdadera
Figura: General Figura: DFD
Sintaxis en FreeMat
while EXPRESION
INSTRUCCIONES
endwhile
Introduccion Ciclo para Ciclo mientras
Ejemplo 3.1
Ejemplo 3.1
Realice un algoritmo en FreeDFD que le solicite al usuario un entero; cuandoel numero proporcionado sea 666 se debe imprimir el mensaje “adivinaste”.
Solucion
NUM: variable de tipo real
Mientras NUM sea distinto a 666, lapregunta continua
numero.m
NUM = input("Ingrese un numero: ");
while NUM 6= 666
NUM = input("Ingrese un numero: ");
end
printf("Adivinaste!");
Introduccion Ciclo para Ciclo mientras
Ejemplo 3.2
Ejemplo 3.2
Realice un algoritmo (FreeMat) que calcule el promedio de los primeros N
numeros naturales. Utilice las estructurtas repetitivas mientras y para.
Solucion
Variables:
N: variable de tipo entero, almacena el ultimo entero
NUM: variable de tipo entero, almacena uno a uno cada numero a sumar
SUM: variable de tipo entero que actuara de acumulador, almacena lasuma de los naturales
PROM: variable de tipo real, almacena almacena el promedio de losdatos
Introduccion Ciclo para Ciclo mientras
Ejemplo 3.2
promedio mientras.m
N = input("Ingrese N: ");
NUM = 1;
SUM = 0;
while NUM <= N
SUM = SUM + NUM;
NUM = NUM + 1;
end
PROM = SUM/N;
printf("Promedio = %g \n", PROM);
promedio para.m
N = input("Ingrese N: ");
SUM = 0;
for i=1:N
SUM = SUM + i;
end
PROM = SUM/N;
printf("Promedio = %g \n", PROM);
Introduccion Ciclo para Ciclo mientras
Dato Centinela
Centinela: valor particular que no pertenece al rango de valoresadmitidos como validos para una variable
Permiten finalizar un proceso de entrada de datos
Ejemplos:
1 Proceso: leer numeros positivos; Centinela = -1
2 Proceso: leer los 10 primeros enteros pares positivos; Centinela = 22
3 Proceso: leer nombres de personas; Centinela = "FIN"
Introduccion Ciclo para Ciclo mientras
Ejemplo 3.3: dato centinela
Ejemplo 3.3
Realice un algoritmo (FreeMat) que reciba por teclado enteros positivos ysume los pares.
Solucion
Datos:
NUM: variable de tipo entero, se utilizara para almacenar los enterosingresados
-1: dato centinela que se utilizara para finalizar el algoritmo
Variables de salida:
SUMAPARES: variable de tipo entero que actuara de acumulador,almacena la suma de los pares
Introduccion Ciclo para Ciclo mientras
suma pares.m
NUM = input("Ingrese numero: ");
SUMAPARES = 0; % inicializa acumulador
while NUM != -1
if rem(NUM,2) == 0
SUMAPARES = SUMAPARES + NUM;
endif
NUM = input("Ingrese numero: ");
end
disp(SUMAPARES)
Introduccion Ciclo para Ciclo mientras
Variables tipo bandera o “switche”
Banderas: variables booleanas; determinan dos alternativas a seguirdentro del algoritmo
Posibles valores de las banderas:
"VERDADERO" o "FALSO"
"SI" o "NO"
1 o 0
Usos de las banderas:
Controlan el flujo logico de un programa
Permiten variar la secuencia de ejecucion del algoritmo dependiendo desu valor en cada instante
Dependiendo de su valor, determinan si el algoritmo ha pasado por undetermnado punto
Salir de un ciclo
Ejecutar una u otra accion dependiendo de su valor
Introduccion Ciclo para Ciclo mientras
Ejemplo 3.4: variable bandera
Ejemplo 3.4
Realice un algoritmo (FreeMat) que genere los primeros N terminos de lasucesion
17 , 15 , 18 , 16 , 19 , 17 , 20 , 18 , 21 , . . .
Solucion
Variables:
NT: variable de tipo entero; numero de terminos a generar
CONT: variable de tipo entero que actuara de contador para controlar elciclo
TER: variable de tipo entero, almacena cada termino de la sucesion
BAN: variable de tipo bandera, selecciona si se suma -2 o +3 a TER
Introduccion Ciclo para Ciclo mientras
sucesion mientras.m
NT = input("Ingrese numero de terminos: ");
TER = 17; % primer termino
CONT = 1; % inicializa contador
BAN = 1; % inicializa bandera
while CONT <= NT
disp(TER);
if BAN == 1
TER = TER - 2;
BAN = 2;
else
TER = TER + 3;
BAN = 1;
end
CONT = CONT + 1;
end
sucesion para.m
NT = input("Ingrese numero de terminos: ");
TER = 17; % primer termino
BAN = 1; % inicializa bandera
for CONT=1:NT
disp(TER);
if BAN == 1
TER = TER - 2;
BAN = 2;
else
TER = TER + 3;
BAN = 1;
end
end
Introduccion Ciclo para Ciclo mientras
Ejemplo 3.5: variable bandera
Ejemplo 3.5
Realice un algoritmo (FreeMat) que lea desde el teclado enteros positivos ysume los multiplos de 3. El algoritmo debe finalizar al ingresar un numeronegativo.
Solucion
Variables:
CONTINUAR: variable de tipo bandera, determina cuando finaliza elalgoritmo
NUM: variable de tipo entero; almacena el entero ingresado en cadaiteracion
SUMA: variable de tipo entero que actuara de acumulador, almacena lasuma de los multiplos de 3
Introduccion Ciclo para Ciclo mientras
multiplos3.m
CONTINUAR = "si"; % inicializa bandera
SUMA = 0; % inicializa acumulador
while strcmp(CONTINUAR,"si")
NUM = input("Ingrese entero: ");
if NUM < 0
CONTINUAR = "no";
elseif rem(NUM,3) == 0
SUMA = SUMA + NUM;
end
end
disp(SUMA);
Introduccion Ciclo para Ciclo mientras
Ejemplo 3.6: ruptura de ciclos
Ejemplo 3.6
Realice un algoritmo (FreeMat) que lea desde el teclado N enteros y sedetenga cuando al menos uno de los numeros leidos sea cero.
Solucion
Variables:
N: variable de tipo entero, almacena el numero de enteros a ingresar
k: variable de tipo entero que actuara de contador del ciclo
ENCONTRADO: variable de tipo bandera, determina cuando finaliza elalgoritmo; si ENCONTRADO==F el algoritmo continua, si ENCONTRADO==V elalgoritmo llega a su fin
NUM: variable de tipo entero; almacena el entero ingresado en cadaiteracion
Introduccion Ciclo para Ciclo mientras
ruptura ciclo.m
N = input("Numero de terminos a ingresar: ");
ENCONTRADO = "F"; % inicializa bandera
k = 1; % inicializa contador del ciclo
while (k<=N) & strcmp(ENCONTRADO,"F")
NUM = input("Ingrese entero: ");
if NUM == 0
ENCONTRADO = "V";
else
k = k + 1;
end
end
if strcmp(ENCONTRADO,"V")
disp("Al menos uno es cero");
else
disp("Ninguno es cero");
end
Introduccion Ciclo para Ciclo mientras
Ejemplo 3.7: maximo y mınimo
Ejemplo 3.7
Como parte de un experimento un biologo requiere tomar la temperaturaexterior de un lugar cada hora por un perıodo de 6 horas. Realice unalgoritmo (FreeMat) que reciba como datos las temperaturas tomadas ydetermine la mayor y la menor.
Solucion
Variables:
TEMP: variable de tipo real, almacena la temperatura medida en cadahora
MAX: variable de tipo real, almacena la mayor temperatura leida
MIN: variable de tipo real, almacena la menor temperatura leida
Introduccion Ciclo para Ciclo mientras
max min.m
TEMP = input("Ingrese temperatura: ");
k = 2; % inicializa contador del bucle
MAX = TEMP; % inicializa MAX
MIN = TEMP; % inicializa MIN
while k <= 6
TEMP = input("Ingrese temperatura: ");
if TEMP > MAX
MAX = TEMP;
elseif TEMP < MIN
MIN = TEMP;
end
k = k + 1;
end
printf("El maximo es %g y el mınimo...es %g \n", MAX, MIN);
Introduccion Ciclo para Ciclo mientras
Referencias
O. CairoMetodologıa de la programacionSegunda edicion. Alfaomega Grupo Editor, S.A., 2005
M.A. CriadoProgramacion en lenguajes estructuradosAlfaomega Grupo Editor, S.A. de C.V. Primera Edicion, 2006
J.W. EatonGNU Octave: A high-level interactive language for numericalcomputationsNetwork Theory Ltd., 2002