Matlab - ordenamiento Matlab

   
Vista:
Imágen de perfil de Miguel Angel

ordenamiento Matlab

Publicado por Miguel Angel miguel_angel_alcgnz@yahoo.com (1 intervención) el 04/04/2015 22:29:30
Buenas tardes este tema es esperando alguien me pueda ayudar a encontrar el error en este código se supone que debe contar el numero de veces que se repite en carácter en un archivo de texto plano .txt y lo hace bien pero la segunda cosa que debe hacer es ordenarlo de mayor a menor respecto al numero de repeticiones del carácter use la función sort pero me ordena toda la matriz y en esta se imprime el carácter con su numero de repeticiones lo cual al usar esta función se desordena puse un ordenamiento externo tomando de la matriz Datos e intente ordenarla y lo hace mi problema es que me repite datos en el ordenamiento no lo esta haciendo del todo bien espero me puedan ayudar a solucionar este problema. de ante mano gracias.
clc
clear
fid = fopen('bio.txt');
cadena = fscanf(fid,'%c');
biografia=char(lower(cadena));
p=length(cadena);
Datos=zeros(122,3);
B=zeros(122,3);
A=zeros(p,3);
num=0;
disp(cadena)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf('ascii Caracter repeticion porcentaje\n')
for i=32:122
dat=char(i);
total=length(strfind(biografia,dat));
if total~=0
num=num+1;
Datos(num,1)=double(dat);
Datos(num,2)=total;
Datos(num,3)=(total*100)/p;
end
end
B=sort(Datos,'descend');
for i=1:122
for j=1:121
if B(i,2)==Datos(j,2)
B(i,1)=Datos(j,1);
B(i,3)=Datos(j,3);
end
end
end
for i=1:122
if Datos(i,1)>0
c=char(Datos(i,1));
fprintf('%d \t\t %c \t\t\t %d \t\t\t %10.2f \n',B(i,1),c,B(i,2),B(i,3));
end
end
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JESUS

ordenamiento Matlab

Publicado por JESUS (742 intervenciones) el 04/04/2015 23:55:15
Hola Miguel Angel no entendí muy bien lo que quieres hacer pero según lo que entiendo quieres extraer de un String , los carácteres y ordenarlo de mayor a menor de acuerdo al número de repeticiones , puedes hacerlo así:
1
2
3
4
5
6
7
8
9
10
11
12
cadena='aaabbbacdffe'; %este es un ejemplo
cadena2=double(cadena);
carac=unique(cadena);
carac2=double(carac);
for i=1:length(carac2)
    A(i,1)=carac2(i);
    A(i,2)=length(find(cadena2==carac2(i)));
end
A=sort(A,1,'descend');
A={char(A(:,1)) A(:,2)};
disp(A{1})
disp(A{2})
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar