Problemas y Algoritmos en Matlab
Problemas y Algoritmos en Matlab
ALGORITMO DE INSERCIÓN
% Algoritmo de inserción
function algoritmo_insercion
v=[2 5 6 9 11 13];
x=input('x= ');
v=inserta(v,x);
disp(v);
end
function v=inserta(v,x)
L=length(v);
i=1;
% Búsqueda del punto de inserción
while i<=L && x>v(i) % Mientras no me salga del vector y comparamos
con el valor de x cada valor del vector
i=i+1;
end
% Desplazamos componentes remanentes una posición hacia abajo.
Empezamos
% por el últmo valor
j=L;
while j>=i
v(j+1)=v(j);
j=j-1;
end
v(i)=x;
end
ALGORITMO DE BÚSQUEDA
%Algoritmo de búsqueda
function algoritmos_busqueda
v=[5 7 9 -2 8 6];
x=input('x= ');
r=busqueda_lineal_todos(v,x);
%r=posicion del elemento buscado en el vector v. =0 si no lo
encuentra
disp(r);
end
function r=busqueda_lineal(v,x)
L=length(v);
r=0;
for i=1:L
if v(i)==x
r=i;
end
end
end
%Esta función busca un determinado valor dentro de un vector; si lo
%encuentra, r tomará el valor de la posición en la que se halla
dicho valor
%dentro del vector. En caso contrario, r seguirá siendo 0.
function r=busqueda_lineal_todos(v,x)
%Devuelve en r un ector con todas las posiciones donde haya
coincidencia.
%r=1 si no hay ninguna
L=length(v);
r=[];%vector vacío inicialmente
cont=1;
for i=1:L
if v(i)==x
%r=[r i]; %añadimos una componente más al vector (esta sería una
%forma de hacerlo)
r(cont)=i;
cont=cont+1; %Segunda forma de hacerlo
end
end
end
BUSCA-CADENA
%Ejercicio 3.6: Búsqueda de una cadena dentro de otra
function [pos]=busca_cadena(buscada,texto)
N=length(texto);
M=length(buscada);
r=0;
cont=0;
i=1;
pos=[];
while i<=N && r==0
k=i;
for j=1:M
if buscada(j)==texto(i)
cont=cont+1;
pos=[pos,i];
end
if cont==M
r=1;
else
pos=[];
end
i=k+1;
end
end
BÚSQUEDA N-NÚMERO ENTERO
% Ejericio 1.9: contar cuantas veces aparece n entre 1 y 100
function aparicion_cifran
n=input('Introduzca cifra buscada: ');
%Hallamos el número de cifras
N=input('Introduzca valor límite: ');
contador=0;
for i=1:N
c=cont_n(i,n);%función que cuenta cuántas veces aparece n en un
vector
contador=contador+c;
end
disp(contador);
end
function c=cont_n(i,n)
v=zeros;
v=transf_vect(i); %Función que nos transforma el número i en un
vector
N=length(v);
c=0;
for i=1:N
if n==v(i)
c=c+1;
end
end
end
function v=transf_vect(i)
m=10;
cont=1;
while fix(i/m)~=0
cont=cont+1;
m=m*10;
end
N=cont; %Dimensión del vector que queremos crear
m=(10^(N-1));
v=zeros;
j=0;
while m>=1
j=j+1;
if j<=N
v(j)=fix(i/m);
i=i-v(j)*m;
end
m=m/10;
end
end
CONTADOR DE EVENTOS (EJEMPLO VBLE. PERSISTENTE)
%Ejemplo de contador de eventos
function contador_eventos
for i=1:5 %llamadas consecutivas
c=contador; %contador no recibe parámetros
fprintf('llamada %d--c=%d\n',i,c);
end
end
function c=contador
persistent r;
if isempty(r); %si r no existe
r=0; %inicializamos r a cero
end
r=r+1;
c=r;
end
CONVERTIR A MAYÚSCULAS
% Pasar una cadena de caracteres a mayúsculas
function convertir_mayusculas
cad=input('Introduce cadena: ','s');
cadmay=mayusc(cad);
fprintf('Cadena en mayúsculas:%s\n',cadmay);
end
function cadmay=mayusc(cad);
N=length(cad);
for i=1:N
if cad(i)>='a'& cad(i)<='z'
cadmay(i)=cad(i)+'A'-'a';
else
cadmay(i)=cad(i);
end
end
end
CONTADOR DE PALABRAS
%Ejercicio 3.1: Cuenta el número de palabras en una frase
function [n]=cuenta_palabras(cad)
cad=input('Introduzca frase: ','s');
L=length(cad);
n=0;
for i=1:L
if cad(i)==' '
n=n+1;
end
end
n=n+1;
end