%% TALLER 2 BUCLES EN MATLAB
%% EJEMPLOS DEL TALLER
%% Modifique el programa del ejemplo anterior para que determine si el número
digitado por el usuario es mayor, igual o menor a 5.
clc, clear, clear all
nn = input('Digite un número: ');
if nn > 5
sprintf('El número %d es mayor que 5.',nn)
elseif nn < 5
sprintf('El número %d es menor que 5.',nn)
else
sprintf('El número %d igual a 5.',nn)
end
%% Modifique el programa para que incluya los colores secundarios (amarillo,
magenta, cyan)
clc, clear, clear all
nn = input('Digite un color: ','s');
switch lower(nn)
case 'rojo'
strcat(nn,' es un color primario.')
case 'azul'
strcat(nn,' es un color primario.')
case 'verde'
strcat(nn,' es un color primario.')
case 'amarillo'
strcat(nn,' es un color secundiario.')
case 'magenta'
strcat(nn,' es un color secundiario.')
case 'cyan'
strcat(nn,' es un color secundiario.')
otherwise
strcat(nn,' NO es un color primario ni secundario.')
end
%% CICLO FOR
%% Ejemplo: Generar un vector con los primeros n números naturales
clc, clear, clear all
nn = input('Digite un número natural: ');
for i = 1:nn
mat(1,i) = i
end
mat
%% Dado un número n calcule la suma de ellos (comparar con el comando sum(1:n))
clc, clear, clear all
nn = input('Digite un número natural: ');
for i = 1:nn
mat(1,i) = i
end
x=sum(mat)
%% CICLO WHILE - ejemplo del taller. Generar un vector con los primeros n números
naturales.
clc, clear, clear all
nn = input('Digite un número natural: ');
i = 1;
while i <= nn
mat(1,i) = i;
i = i+1 ; % Contador
end
mat
%% Dado un número n calcule la suma de ellos (comparar con el comando sum(1:n)).
clc, clear, clear all
nn = input('Digite un número natural: ');
i = 1;
while i <= nn
mat(1,i) = i;
i = i+1 ; % Contador
end
disp('muestre el vector')
x=sum(mat)
%% EjERCICIOS TALLER
%% 1. Realice un algoritmo que ordene de menor a mayor tres números ingresados por
el usuario
clc, clear, clear all
A = input('Digite el primer número: ');
B = input('Digite el segundo número: ');
C = input('Digite el tercer número: ');
if A>B & A>C & B>C
fprintf('Los valores de menor a mayor son: %d, %d, %d',C, B, A)
elseif A>B & A>C & C>B
fprintf('Los valores de mayor a menor son: %d, %d, %d',B, C, A)
elseif B>A & B>C & A>C
fprintf('Los valores de mayor a menor son: %d, %d, %d',C, A, B)
elseif B>A & B>C & C>A
fprintf('Los valores de mayor a menor son: %d, %d, %d',A, C, B)
elseif C>A & C>B & A>B
fprintf('Los valores de mayor a menor son: %d, %d, %d',B, A, C)
elseif C>A & C>B & B>A
fprintf('Los valores de mayor a menor son: %d, %d, %d',A, B, C)
else
fprintf('Todos los valores son iguales')
end
%% 2. Diseñe el algoritmo del programa que permita resolver la ecuación de segundo
grado.
clc, clear, clear all
%% 3. Escriba un script que evalue si el número digitado por el usuario es positivo
o negativo. Además debe mostrar un mensaje especificándolo
clc, clear, clear all
A = input('Digite el primer número: ');
if A>0;
fprintf('El número registrado es positivo')
elseif A<0;
fprintf('El número registrado es negativo')
else A=0;
fprintf('El número registrado es cero')
end
%% 4. Escriba un algoritmo que le pregunte al usuario con cual tipo de carga quiere
que se analice una viga simplemente apoyada.
clc, clear, clear all
choice= menu('Que tipo de carga desear emplear: ', 'A. Puntual en el centro de la
luz', 'B. distribuida en el centro de la luz');
%A. Puntual en el centro de la luz
if choice==1;
P= input ('Digite valor de la carga [Ton]: ');
L= input ('Digite longitud entre apoyos [m]: ');
for h=[Link]L;
i = 1;
while i <= (L/2) +1
V1(1,i) = P/2;
i = i+1 ; % Contador
end
V1;
h1=[Link]L/2;
subplot (2, 1, 1)
plot(h1, V1, '-r')
i = 1;
while i <= (L/2)+1
V2(1,i) = P/2-P;
i = i+1 ; % Contador
end
V2;
h2=L/[Link]L;
end
hold on
plot(h2, V2, '-r')
x1=[h1(1,end), h2(1,1)];
y1=[V1(1,end),V2(1,1)];
plot(x1,y1,'-r')
xlim([-1 L+1]);
ylim([(-P/2)-2 (P/2)+2]);
pbaspect([4 1 1]);
fprintf('R1= %d Ton \n',P*L/2 )
fprintf('R2= %d Ton \n',P*L/2 )
%Lineas de referencia
X1= [0 0];
Y1= [0 P/2];
plot(X1, Y1, '-r')
hold on
X2= [0 L];
Y2= [0 0];
plot(X2, Y2, '-r')
X3= [L L];
Y3= [0 -P/2];
plot(X3, Y3, '-r');
CortanteMaxima=plot(L/2, P*L/2,'b*');
legend([CortanteMaxima],{'Cortante Maxima'});
title('Diagrama de cortante')
xlabel('(m)')
ylabel('(Ton)')
hold off
% Diagrama de momento
Mx=[0 L L/2 0];
My=[0 0 (-P*L/4) 0];
subplot(2, 1, 2)
plot(Mx, My)
xlim([-1 L+1]);
ylim([(-P*L/4)-10 (P*L/4)+10]);
pbaspect([4 1 1]);
hold on
MomentoMaximo=plot(L/2, (-P*L/4),'r*');
legend([MomentoMaximo],{'Momento Máximo'});
Mmax= -P*L/4;
fprintf('Mmax= %d Ton-m \n',Mmax )
title('Diagrama de momento')
xlabel('(m)')
ylabel('(Ton-m)')
hold off
% Diagrama deflexión
%E=2188198 %(Ton/m2)
%I=
%y=-(P*(L^3))/(48*E*I)
% B. distribuida en el centro de la luz
elseif choice==2;
P= input ('Digite valor de la carga distribuida [Ton-m]: ');
L= input ('Digite longitud entre apoyos [m]: ');
%Cortante
Ry= P*L/2;
Vcx=[0 0 L/2];
Vcy=[0 Ry 0];
subplot(2, 1, 1)
plot(Vcx, Vcy, '-r');
fprintf('Ry1= %d Ton \n',P*L/2 )
fprintf('Ry2= %d Ton \n',P*L/2 )
Vcx=[L/2 L L];
Vcy=[0 -Ry 0];
hold on
plot(Vcx, Vcy, '-r')
xlim([-1 L+1]);
%axis([-1 L+1 Ry+5 -Ry-5])
%ylim([60 60]);%(P*L/2)+10
pbaspect([4 1 1]);
%Linea de referencia
x=[0 L];
y=[0 0];
plot(x, y, '-r')
title('Diagrama de cortante')
xlabel('(m)')
ylabel('(Ton)')
%Punto maximo de cortante
CortanteMaxima=plot(0, (P*L/2),'*b');
legend([CortanteMaxima],{'Cortante Máxima'});
hold off
% Diagrama de momento
i=0;
for i=[Link]L;
t(1,i+1)=i;
end
t;
x=0;
for x=[Link]L;
MA=((P*x)/2)*(L-x);
Ma(1, x+1)=MA;
end
Ma;
subplot(2, 1, 2)
plot(t, -Ma)
hold on
pbaspect([4 1 1]);
Mmax= -(P*L^2)/8;
fprintf('Mmax= %d Ton-m \n',Mmax )
MomentoMaximo=plot(L/2, Mmax,'r*');
legend([MomentoMaximo],{'Momento Máximo'});
xlim([-1 L+1]);
ylim([Mmax-10 10]);
%Linea referencia
x=[0 L];
y=[0 0];
plot(x, y, '-b')
title('Diagrama de momento')
xlabel('(m)')
ylabel('(Ton-m)')
end
%% 5. Escriba un algoritmo que lea del teclado un número entero y que compruebe si
es menor que 5
clc, clear, clear all
A = input('Digite un número: ');
while A~=5
A = input('Digite un número: ');
end
fprintf('El número registrado es 5')
%% 6. Pedir dos números e indicar cuál es el mayor de los dos números controlando
el caso de iguales.
clc, clear, clear all
A = input('Digite el primer número: ');
B = input('Digite el segundo número: ');
if A>B
fprintf('El número registrado %d es mayor a %d', A, B)
elseif B>A
fprintf('El número registrado %d es mayor a %d', B, A)
else A==B
fprintf('El número registrado %d es igual en ambos casos', A)
end
%% 7. Cómputo del factorial de un número n. Se creará una función para que se lea
desde teclado un número n y se imprima en pantalla el número y el factorial del
mismo.
clc, clear, clear all
A = input('Digite el número que desea calcular su factorial: ');
for i=1:A
mat(1, i)=i;
end
x=prod(mat);
fprintf('El factorial de %d es igual a %d', A, x)
%% 8. Serie de Fibonacci (0, 1, 1, 2, 3, 5, 8, … ). Se debe crear una función
para que se genere la serie de Fibonacci para los primeros n números mediante un
for. Además se debe graficar n vs. la serie.
clc, clear, clear all
n = input('Digite el número limite de la serie de Fibonacci: ');
A=zeros(1, n)
A(2)=1
A(3)=1
for i=[Link]n
A(i)= A(i-1)+A(i-2);
plot(i, A, 'r--*', 'linewidth', 5);
hold on
end
fprintf('La serie de fibonacci de los primeros %d valores es = ', n)
disp(A)
%% 9. Serie de Fibonacci (0, 1, 1, 2, 3, 5, 8, … ). Se debe crear una función
para que se genere la serie de Fibonacci para los primeros n números mediante un
while. Además se debe graficar n vs. la serie.
clc, clear, clear all
n = input('Digite el número limite de la serie de Fibonacci: ');
A=zeros(1, n);
A(2)=1;
A(3)=1;
i=4;
while i<=n
A(i)= A(i-1)+A(i-2);
i=i+1 %contador
plot(i, A, 'b--+', 'linewidth', 5);
hold on
end
fprintf('La serie de fibonacci de los primeros %d valores es = ', n)
disp(A)
%% 10. Ordenamiento de un arreglo de manera ascendente empleando el algoritmo de
“ordenamiento tipo burbuja”. Para iniciar con este programa se sugiere utilizar un
arreglo con los siguientes valores en este mismo orden: [9 3 18 25 4 0 17 18 35 6].
El script se debe llamar ascendente.
clc, clear, clear all
V= [9 3 18 25 4 0 17 18 35 6];
disp('El vector')
disp(V);
n=length(V);
for A=[Link]n-1;
for B=[Link]n-1;
if V(B)>V(B+1);
temp=V(B);
V(B)=V(B+1);
V(B+1)=temp;
end
end
end
disp('Tiene como secuencia ascendente')
disp(V)
%% 11. Búsqueda de un elemento en un arreglo. Basado en un arreglo ordenado de
manera ascendente, se debe buscar uno de sus elementos y se imprime la posición en
la que se localiza si está incluido en el arreglo. Se usará el algoritmo de
búsqueda binaria para tal fin
clc, clear, clear all
I= 1;
F= 10;
V= [0 3 4 6 9 17 18 18 25 35];
A= false;
disp('Sea el vector: ')
disp(V)
X= input('Ingrese alguno de los valores dados: ')
while (~A&&I <= F)
mitad=int32((I+F)/2);
if (X== V(mitad))
A= true;
else if (X< V(mitad));
F= mitad-1;
else I= mitad+1;
end
end
end
if(A)
fprintf('el valor registrado está en la posición %d', mitad)
else
disp('El dato no se encuentra')
end