Está en la página 1de 12

SENTENCIAS ITERATIVAS ( REPETITIVAS/BUCLES)

Las estructuras repetitivas, son sentencias que permitan repetir varias veces una
porción de código, una cantidad finita. Estas estructuras podrán aprovechar mejor los
recursos del computador, ya que permitirá repetir sentencias tantas veces que
podríamos hacer sentir los tiempos de demora al usuario, ya que la demora podría
darse en minutos, horas o días para terminar las veces programada. Usualmente estas
estructuras se detienen porque se dio una cantidad de veces fija o una cantidad de
veces que dependen de condiciones lógicas. Las aplicaciones son infinitas, en diversos
campos como la inteligencia artificial, procesamiento masivo de datos, etc. Para los
principiantes, deberían tener mucho cuidado con los bucles infinitos ya que podría
provocar hasta el congelamiento del computador.

Sentencia 1;

• for
Sentencia 2;
Sentencia 3;
……
Sentencia n;

• while

ESTRUCTURA FOR
El formato de la serie que se genera en el for es:
a:c(el incremento es 1) o a:b:c (el incremento es b)
1:4 ➔1 2 3 4 2:5 ➔2 3 4 5 1.2:4 ➔1.2 2.2 3.2 4:3 ➔(ningún valor)
1:2:5 ➔1 3 5 0.5:0.2:0.7 ➔0.5 0.7 20:7:40➔20 27 34 4:-1:2➔4 3 2

E1: Muestre 4 veces la palabra E2: Muestre los 4 primeros E3: Muestre los 4 primeros números
hola. números naturales. naturales y sus cuadrados.
Solución Solución Solución
clear;clc; clc;clear; clc;clear;
for i=1:4 % 1 2 3 4 for i=1:4 % 1 2 3 4 for i=1:4 % 1 2 3 4
fprintf('Hola'); fprintf('%d\n',i); fprintf('%d^2 = %d\n',i,i^2);
end end end
Nota: Se obtiene el mismo resultado
en pantalla si cambiamos i=1:4 por:
• i=2:5
• i=7000:7003
• i=-3:0
• i=2:5.3
• i=2.8:5.99

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 21


E4: Lea 4 notas y muestre la suma y E5: Lea 4 notas y muestre la cantidad de alumnos desaprobados.
promedio de notas. Solución
Solución clc;clear;
clc;clear; na=4;
na=4; con=0;%contador
s=0;%sumador for i=1:na %1 2 3 4
for i=1:na nota=input('Ingrese nota:');
nota=input('Ingrese nota:'); if nota<10
s=s+nota; con=con+1;
end end
fprintf('La suma de nota es %d\n',s); end
fprintf('El promedio es %.2f\n',s/na); fprintf('La cantidad de desaprobados es %d\n',con);
E6: Lea n notas y muestre la cantidad de alumnos E7: Lea n notas numerándolas y muestre la cantidad de
desaprobados. alumnos desaprobados.
Solución Solución
clc;clear;
clc;clear; na=input('Ingrese la cantidad de alumnos:');
na=input('Ingrese la cantidad de alumnos:'); con=0;%contador
con=0;%contador for i=1:na %1 2 3 4
for i=1:na %1 2 3 4 fprintf('\tIngrese nota %d:',i);
nota=input('Ingrese nota:'); nota=input('');
if nota<10 if nota<10
con=con+1; con=con+1;
end end
end end
fprintf('La cantidad de desaprobados es %d\n',con); fprintf('La cantidad de desaprobados es %d\n',con);

E8: Lea n notas numerándolas y muestre la cantidad E9: Lea 4 lanzamientos de un dado y muestre cuantas
de alumnos que tienen nota par y la suma de esas veces salió el número 5.
notas. Solución
Solución clc;clear;
clc;clear; na=4;
n=input('Ingrese la cantidad de alumnos:');%4 con=0;%contador
con=0;%contador for i=1:na % 2 3 4 5
sum=0; dado=input('Ingrese valor del dado:');
for i=1:n % if dado==5
fprintf('\tIngrese nota %d:',i); con=con+1;
nota=input(''); end
if mod(nota,2)==0 end
con=con+1; fprintf('Las veces de 5 es %d\n',con);
sum=sum+nota;
end
end
fprintf('La cantidad de nota par es %d\n',con);
fprintf('La suma de las notas par es %d\n',sum);

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 22


E10: Lea n lanzamientos de un dado y muestre E11: Lea n lanzamientos de un dado, mostrando el número
cuantas veces salió valores mayores a 4 y cuantas del lanzamiento y muestre cuantas veces salió valores
veces salió valores menores a 3. mayores a 4 y cuantas veces salió valores menores a 3.
Solución Solución
clc;clear; clc;clear;
n=input('Ingrese el numero de lanzamientos:'); n=input('Ingrese el numero de lanzamientos:');
con1=0;con2=0;%contadores con1=0;con2=0;%contadores
for i=1:n for i=1:n
dado=input('Ingrese valor del dado:'); fprintf('\tLanzamiento %d:',i);
if dado>4 dado=input('');
con1=con1+1; if dado>4
end con1=con1+1;
if dado<3 end
con2=con2+1; if dado<3
end con2=con2+1;
end end
fprintf('Las veces mayores a 4 es %d\n',con1); end
fprintf('Las veces menores a 3 es %d\n',con2); fprintf('Las veces mayores a 4 es %d\n',con1);
fprintf('Las veces menores a 3 es %d\n',con2);
E12: Mostrar todos los factores de un número n con for E13: Mostrar la suma de todos los factores de un número n
Solución con for
clc;clear all; Solución
n=input('Ingrese n:'); clc;clear all;s=0;
fprintf('Factores:'); n=input('Ingrese n:');
for i=1:n fprintf('Factores:');
if mod(n,i)==0 for i=n:-1:1
fprintf('%d ',i); if mod(n,i)==0
end fprintf('%d ',i);
end s=s+i;
end
end
fprintf('\nLa suma de factores es:%d\n',s);

E14: Mostrar el promedio de edades de n alumnos. E15: Lea las edades de n alumnos y cuente cuantas
Solución edades fueron pares y cuantas impares.
clc;clear; Solución
n=input('Ingrese la cantidad de alumnos:'); clc;clear;
s=0; n=input('Ingrese la cantidad de alumnos:');
for i=1:n c=0;
e=input('Ingrese la edad:'); for i=1:n
s=s+e; a=input('Ingrese la edad:');
end if mod(a,2)==0
p=s/n; c=c+1;
fprintf('El promedio de edades es: %.2f\n',p); end
end
fprintf('La cantidad de edades pares son:%d\n',c);
fprintf('La cantidad de edades impares son:%d\n',n-c);

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 23


E16: Simule el lanzamiento de un dado n veces, con E17: Simule el lanzamiento de un dado n veces, con rand,
rand, mostrando el número del lanzamiento, el valor mostrando el número del lanzamiento, el valor del
del lanzamiento y cuantas veces salió cada valor. lanzamiento y cuantas veces salió cada valor. Usar switch
Usar if múltiple. Solución
Solución clc;clear;
clc;clear; n=input('Ingrese el numero de lanzamientos:');
n=input('Ingrese el numero de lanzamientos:'); c1=0;c2=0;c3=0;c4=0;c5=0;c6=0;
c1=0;c2=0;c3=0;c4=0;c5=0;c6=0; for i=1:n
for i=1:n dado=round(rand*5)+1;
dado=round(rand*5)+1; fprintf('\tLanzamiento %d:%d\n',i,dado);
fprintf('\tLanzamiento %d:%d\n',i,dado); switch dado
if dado==1 case 1
c1=c1+1; c1=c1+1;
elseif dado==2 case 2
c2=c2+1; c2=c2+1;
elseif dado==3 case 3
c3=c3+1; c3=c3+1;
elseif dado==4 case 4
c4=c4+1; c4=c4+1;
elseif dado==5 case 5
c5=c5+1; c5=c5+1;
else case 6
c6=c6+1; c6=c6+1;
end end
end end
fprintf('Dado 1:%d\n',c1); fprintf('*****REPORTE******\n');
fprintf('Dado 2:%d\n',c2); fprintf('\tDado 1:%d\n',c1);
fprintf('Dado 3:%d\n',c3); fprintf('\tDado 2:%d\n',c2);
fprintf('Dado 4:%d\n',c4); fprintf('\tDado 3:%d\n',c3);
fprintf('Dado 5:%d\n',c5); fprintf('\tDado 4:%d\n',c4);
fprintf('Dado 6:%d\n',c6); fprintf('\tDado 5:%d\n',c5);
fprintf('\tDado 6:%d\n',c6);

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 24


BREAK Y CONTINUE
Estas instrucciones con modificadores de las iterativas.

break: Interrumpir una iterativa. continue: Cancela todas líneas que están
después de continue dentro de la iterativa.

Sentencia 1; Sentencia 1;
Sentencia 2; Sentencia 2;
break; continue;
Sentencia 3; Sentencia 3;
…… ……
Sentencia n; Sentencia n;

E1: Ejemplo básico de break E2: Ejemplo básico de continue


Solución clear;clc;
clear;clc; for i=1:4 % 1 2 3 4
for i=1:4 % 1 2 3 4 fprintf('Hola juan\n');
fprintf('Hola juan\n'); continue
break fprintf('Hola jose\n');
fprintf('Hola jose\n'); end
end Resultado
Resultado Hola juan
Hola juan Hola juan
Hola juan
Hola juan
E3: Mostrar 6 valores leídos o hasta que ingrese 0. E4: Mostrar 6 valores leídos diferentes a 0
Solución Solución
clc;clear; clc;clear;
for i=1:6 for i=1:6
n=input('Ingrese un numero:'); n=input('Ingrese un numero:');
if n==0 if n==0
break; continue;
end end
fprintf('\tValor leido=%d\n',n); fprintf('\tValor leido=%d\n',n);
end end
Resultados Resultados
Ingrese un numero:3 Ingrese un numero:5
Valor leido=3 Valor leido=5
Ingrese un numero:5 Ingrese un numero:4
Valor leido=5 Valor leido=4
Ingrese un numero:0 Ingrese un numero:0
Ingrese un numero:2
Valor leido=2
Ingrese un numero:0
Ingrese un numero:0

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 25


E5: Analice la siguiente codificación, en que partes el if d<=5
break o continue esta demás, es decir si no estuviera, el fprintf('El puntaje es bajo\n');
programa funcionaria igual. if d==3
fprintf('El puntaje es 3\n');
Programa: continue;
clc;clear; end
for i=1:6 end
d=round(rand*5+1); end
fprintf('\n Dado %d:%d\n',i,d);
if d==6 Resultados
fprintf('Gano con 100 puntos\n'); Dado 1:5
break Se obtiene 5 puntos
end
if d==5 Dado 2:4
fprintf('Se obtiene 5 puntos\n'); El puntaje es bajo
continue;
Dado 3:4
end
El puntaje es bajo

Dado 4:6
Gano con 100 puntos

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 26


VARIABLES BOOLEANAS(LOGICAS)
Las variables booleanas(lógicas) pueden contener 2 valores posibles que son falso(false) o verdadero(true) debiendo
usar siempre la palabra en inglés, sin embargo, este tipo de variables se suelen combinar con las variables numéricas,
es decir una variable numérica puede ser interpretada como variable booleana y viceversa.
Situación 1: Cuando un valor booleano es interpretado Situación 2: Cuando un valor numérico es interpretado
como número. como booleano.
• true=>1 • 0=>false
• false=>0 • diferente a 0 =>true

Expresiones booleanas
Operadores Comparadores
&& y > mayor
|| o >= mayor o igual
~ negación < menor
<=menor o igual
== igual (comparación)
~= diferente

Ejemplo de sentencias con expresiones lógicas


La sentencia: Es equivalente a: La sentencia: Es equivalente a:
true+true 2 2>1&&2 1
3==3 1 2>1&&-0.001 1
3==3&&5>4 1 2>1&&0 0
true==true 1 (2<4&&true)+3 4
esprimo==1 (*) esprimo==true ((2<4&&5.6)+true)||0 1
esprimo==1 (*) esprimo ((2<4&&5.6)+true)&&(1-1) 0
esprimo==0 (*) ~esprimo true+true+esprimo==0
mod(5,2)==0 0
mod(n,2)==0 (**) Si n es par será 1, sino 0
mod(n,2)==1 (**) ¿n es impar?
mod(n,7)==0 (**) ¿n es divisible por 7?

(*) esprimo, para el ejemplo es una variable booleana.

(**) n, para el ejemplo es un numero entero

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 27


E1: Leer un número n e indicar si es primo o no con for. Solución Forma2 (variante 3)
n=input('Ingrese un número: ');
Solución Forma1 esprimo=true;
clc;clear; for i=2:n^0.5
n=input('Ingrese un número: '); if mod(n,i)==0
c=0; esprimo=false;
for i=1:n end
if mod(n,i)==0 end
c=c+1; if esprimo==true &&n >1
end fprintf('Es primo\n');
end else
if c==2 fprintf('No es primo\n');
fprintf('Es primo\n'); end
else
fprintf('No es primo\n');
end Solución Forma3 (variante 1)
n=input('Ingrese un número: ');
Solución Forma2 (variante 1) esprimo=n>1;% variable booleana
n=input('Ingrese un número: '); for i=2:n^0.5
c=1; if mod(n,i)==0
for i=2:n^0.5 esprimo=0;
if mod(n,i)==0 break;
c=0; end
end end
end if esprimo==true
if c==1 &&n >1 fprintf('Es primo\n');
fprintf('Es primo\n'); else
else fprintf('No es primo\n');
fprintf('No es primo\n'); end
end
Solución Forma3 (variante 2)
Solución Forma2 (variante 2) n=input('Ingrese un número: ');
n=input('Ingrese un número: '); esprimo=n>1;% variable booleana
esprimo=1; for i=2:n^0.5
for i=2:n^0.5 if mod(n,i)==0
if mod(n,i)==0 esprimo=0;
esprimo=0; break;
end end
end end
if esprimo==1 &&n >1 if esprimo
fprintf('Es primo\n'); fprintf('Es primo\n');
else else
fprintf('No es primo\n'); fprintf('No es primo\n');
end end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 28


APLICACIÓN DE LAS ITERATIVAS SOBRE LAS FUNCIONES MATEMÁTICAS
(Método de los pasos)
Este método plantea una división del intervalo [a,b] en subintervalos de tamaño h
llamado paso, es decir se hace un análisis en cada uno de los intervalos:
• El primer intervalo será: [a; a+h]
• El segundo intervalo será: [a+h; a+2h]
• El tercer intervalo será: [a+2h; a+3h]
• Y así sucesivamente
Esta partición en subintervalos se puede realizar mediante una iterativa.

Usemos la siguiente función matemática definida en un intervalo [a;b]


Para el ejemplo podemos considerar un paso de 0.5 y un intervalo de [1;5], esto
significa que a=1 b=5 h=0.5

ezplot('sin(1/(x+2)+x^2)*x^0.1',[1,5]);grid;

E1: Hallar todas las raíces aproximadas en el intervalo E2: Hallar los máximos y mínimos.
[1,5]. Solución
Solución clc;clear;a=1;b=5;h=1e-3;
a=1;b=5;h=1e-4; f=inline('sin(1/(x+2)+x^2)*x^0.1');
f=inline('sin(1/(x+2)+x^2)*x^0.1'); for x=a+h:h:b-h
for x=a:h:(b-h) y1=f(x-h);
y1=f(x); y2=f(x);
y2=f(x+h); y3=f(x+h);
%if y1>=0 &&y2<=0 || y1<=0 &&y2>=0 if y2<y1 && y2<y3
if y1*y2<=0 fprintf('minimo=%.3f\n',x)
fprintf('raiz=%.3f\n',x+h/2) end
end if y2>y1 && y2>y3
end fprintf('maximo=%.3f\n',x)
end
end
Ejemplo propuesto
Usando el método de los pasos, halle lo siguiente:
• Hallar la integral aproximada.
• Hallar la longitud de curva.

Pruebe con otras funciones como esta:


ezplot('exp(-0.1*x)*sin(cos(5*x))',[10 16]);

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 29


PROBLEMA PROPUESTOS
E1: Mostrar los números enteros desde E2: Leer n números y mostrar e indicar si
n hasta 1, con sus respectivos cubos, cada número es divisible por d, así mismo
usar solo for. deberá mostrar la suma de los divisibles,
Ejemplo: usar solo for.
Ingrese n: 5 Ejemplo:
5==>125 Ingrese n:3
4==>64 Ingrese d:7
3==>27 Ingrese n1:5
2==>8 El número no es divisible por 7
1==>1 Ingrese n2:14
El número es divisible por 7
Ingrese n3:21
El número es divisible por 7
La suma total de los divisibles es: 35
E3: Leer un número n y mostrar la E4: Leer n notas y mostrar el número de
división entera y el residuo cuando se notas aprobadas (>=10) y el número de
divide k por 3, donde k varia de 1 hasta notas desaprobadas, usar solo for.
n, usar solo for. Ejemplo:
Ejemplo: Ingrese n:4
Ingrese n:7 Ingrese nota 1:15
1/3=0 resto=1 Ingrese nota 2:9
2/3=0 resto=2 Ingrese nota 3:17
3/3=1 resto=0 Ingrese nota 4:2
4/3=1 resto=1 Reporte final
5/3=1 resto=2 Desaprobados:2
6/3=2 resto=0 Aprobados:2
7/3=2 resto=1

E5: Mostrar todos los primos que E6: Estime el número pi mediante una
están en el intervalo [a,b] cantidad de términos de la serie:
Ejemplo:
Ingrese a:10
Ingrese b:20
Los primos son: 11 13 17 19
E7: Estime el número pi mediante la E8: Estime el valor de √7mediante la
serie: secuencia:
(𝑖+1)
𝑥 (𝑖) 7
𝑥 = + (𝑖)
2 2𝑥
y con una cantidad de decimales Partiendo de 𝑥 (0)

exactos. y con una cantidad n de decimales


exactos.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 30


E9: Estime el valor de √11mediante la secuencia:
(𝑖+1)
𝑥 (𝑖) 11
𝑥 = + (𝑖)
2 2𝑥
Partiendo de 𝑥 (0) y con una cantidad n de decimales exactos.
E10: Calcule los n primeros términos de las siguientes series

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 31


MAS PROBLEMA PROPUESTOS
Problema 1: Calcular la suma de n primeros números naturales
Problema 2: Mostrar los primos comprendidos entre a y b.
Problema 3: Calcular la suma de n primeros primos
Problema 4: Calcule el factorial de n
Problema 5: Mostrar la coordenada cartesiana de los vértices de un polígono regular de n lados cuyo centro se encuentra
en el origen de coordenadas.
Problema 6: Calcule el número e= 2.718281828…, a partir de la siguiente serie, usando los n primeros términos.
1 1 1 1 1 1 1
𝑒 = + + + + + + +⋯
0! 1! 2! 3! 4! 5! 6!

Problema 7: Calcule el número π= 3.1415926…, a partir de la siguiente serie, usando los n primeros términos.
4 4 4 4 4 4
𝜋= − + − + − +⋯
1 3 5 7 9 11

Problema 8: Calcule el seno(x) considerando los n primeros términos de la siguiente expresión:


𝑥3 𝑥5 𝑥7 𝑥9 𝑥 11
𝑠𝑒𝑛(𝑥) = 𝑥 − + − + − 11! + ⋯
3! 5! 7! 9!

Problema 9: Calcule el coseno(x) tomando los n primeros términos de la siguiente expresión:


𝑥2 𝑥4 𝑥6 𝑥8 𝑥 10
𝑐𝑜𝑠(𝑥) = 1 − + − + − 10! + ⋯
2! 4! 6! 8!

Problema 10: Dentro de las maravillosas expresiones que se pueden construir en las matemáticas, se tiene la siguiente
𝑥 1
fórmula de recurrencia: 𝑥 = 𝑓(𝑥) = 2 + 𝑥 , que nos permite calcular la √2 usando solamente sumas y divisiones. Lo
interesante de esta expresión es que empieza con un valor de x0 cualquiera, con la cual obtenemos f(x0), la cual viene
a ser x1, luego evalúas f(x1) para obtener x2, luego f(x2) para obtener x3 y así sucesivamente.
Por ejemplo:
X0=5 =>f(x0)=2.7 (el valor de x0=5 es un valor cualquiera diferente de 0)
x1=2.7 =>f(x1)=1.72
x2=1.72=>f(x2)=1.44

Observa que el número se va aproximando a √2 = 1.4142 …
Desarrolle un programa que lea como dato de entrada x0 y n, y muestre la √2 después de n iteraciones y compare este
resultado con el valor exacto.
Problema 11: Usando el procedimiento anterior, considerando n iteraciones y partiendo de un x0 cualquiera:
2𝑥 1
Calcule √3, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) = 3 + 𝑥 2

3𝑥 1
Calcule √4, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) = + 𝑥3
4

4𝑥 1
Calcule √5, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) = + 𝑥4
5
Calcule √𝑎 por deducción de las fórmulas anteriores.

Problema 12: En todos los problemas anteriores que usan una serie o una fórmula de recurrencia, se ha usado como
criterio de parada la cantidad de iteraciones. Intente ahora usar el error aparente como criterio de parada, la cual está
definido por:
𝐄𝐫𝐫𝐨𝐫 𝐚𝐩𝐚𝐫𝐞𝐧𝐭𝐞 = |𝐮𝐥𝐭𝐢𝐦𝐚 𝐚𝐩𝐫𝐨𝐱𝐢𝐦𝐚𝐜𝐢ó𝐧 − 𝐩𝐞𝐧ú𝐥𝐭𝐢𝐦𝐚 𝐚𝐩𝐫𝐨𝐱𝐢𝐦𝐚𝐜𝐢ó𝐧|
Entonces las iteraciones se deben realizar hasta que este error sea menor que un error máximo, que previamente se
ha tenido que leer como dato de entrada.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 32

También podría gustarte