
ordenamiento Matlab
Publicado por Miguel Angel (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
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


0