Thuật toán so sánh chuỗi sai lệch năm 2024

Lỗi ở đây là không đọc được file. Dạo này đang chán và mệt nên nhác nghĩ, mình cho bạn coi cái code của mình về bài này hồi ôn.Nhưng chưa chuẩn xác lắm đâu nhưng nhìn đơn giản hơn nhiều.Bạn có gắng tự xử nhé, lúc nào rảnh thì mình làm cho :]

Code:

program chuoi_gan_dung;

uses crt;

var a,b:array[1..100] of string;

s,st:string;

i,n,m,k,p,l,j:integer;

begin

clrscr;

write('Nhap so % :');readln(m);

write('Nhap xau goc :');readln(s);

write('Nhap so xau can xac dinh :');readln(n);

p:=0;

for i:=1 to n do

begin

write('nhap xau a[',i,']=');readln(a[i]);

st:=a[i];

l:=1;

j:=1;

k:=0;

while (l<=length(s))and(j<=length(st)) do

if s[l]=st[j] then

begin

l:=l+1;

j:=j+1;

end else

begin

j:=j+1;

k:=k+1;

end;

if (k/length(st))*100<=m then

begin

p:=p+1;

b[p]:=st;

end;

end;

for i:=1 to p do

writeln(b[i]);

readln

end.

P/s: Bạn sửa lại nội dung ví dụ nhé .Thân !

Bài viết đã được chỉnh sửa nội dung bởi NTL2k1: 13-08-2016 - 15:13

Bình tĩnh - Tự tin - Chiến thắng

Không phải là tôi quá thông minh, chỉ là tôi chịu bỏ nhiều thời gian hơn với rắc rối .

Cứ làm việc chăm chỉ trong im lặng - Hãy để thành công trở thành tiếng nói của bạn .

Đã gửi 13-08-2016 - 22:20

The Dark Hunter

Binh nhất

  • Thành viên mới
  • 20 Bài viết

thuật toán mình làm dc rồi nhưng ko biết phải thao tác với file thế nào thôi

uses crt;

var n:integer;s1,s2:string;

function sai_so(s1,s2:string):integer;

var a:string;k1,k2,i,b,c,S,H:integer;

begin

k1:=length(s1);

k2:=length(s2);

S:=0;a:=s2;

for i:=1 to k1 do

begin

c:=pos(s1[i],a);

b:=k2-length(a)+c;

if c>0 then

begin

S:=S+c-1;

a:=copy(s2,b+1,k2-b);

end

else

begin

S:=0;break;

end;

end;

H:=trunc(S/k2*100);

sai_so:=H;

end;

begin

clrscr;

write('nhap xau:');readln(s1);

write('nhap xau can kiem tra:');readln(s2);

write('% sai so:');readln(n);

if sai_so(s1,s2)<n then writeln('ok')

else writeln(':(');

readln

end.

Đức HD Trần:

AK36 Trường THPT Quang Trung tỉnh Hải Dương

Đã gửi 13-08-2016 - 22:30

The Dark Hunter

Binh nhất

  • Thành viên mới
  • 20 Bài viết
    Lỗi ở đây là không đọc được file. Dạo này đang chán và mệt nên nhác nghĩ, mình cho bạn coi cái code của mình về bài này hồi ôn.Nhưng chưa chuẩn xác lắm đâu nhưng nhìn đơn giản hơn nhiều.Bạn có gắng tự xử nhé, lúc nào rảnh thì mình làm cho :]

Code:

program chuoi_gan_dung;

uses crt;

var a,b:array[1..100] of string;

s,st:string;

i,n,m,k,p,l,j:integer;

begin

clrscr;

write('Nhap so % :');readln(m);

write('Nhap xau goc :');readln(s);

write('Nhap so xau can xac dinh :');readln(n);

p:=0;

for i:=1 to n do

begin

write('nhap xau a[',i,']=');readln(a[i]);

st:=a[i];

l:=1;

j:=1;

k:=0;

while (l<=length(s))and(j<=length(st)) do

if s[l]=st[j] then

begin

l:=l+1;

j:=j+1;

end else

begin

j:=j+1;

k:=k+1;

end;

if (k/length(st))*100<=m then

begin

p:=p+1;

b[p]:=st;

end;

end;

for i:=1 to p do

writeln(b[i]);

readln

end.

P/s: Bạn sửa lại nội dung ví dụ nhé .Thân !

thuật toán dễ hiểu đấy

Đức HD Trần:

AK36 Trường THPT Quang Trung tỉnh Hải Dương

Đã gửi 14-08-2016 - 12:24

NTL2k1

Hạ sĩ

  • Thành viên
  • 99 Bài viết
    thuật toán mình làm dc rồi nhưng ko biết phải thao tác với file thế nào thôi

uses crt;

var n:integer;s1,s2:string;

function sai_so(s1,s2:string):integer;

var a:string;k1,k2,i,b,c,S,H:integer;

begin

k1:=length(s1);

k2:=length(s2);

S:=0;a:=s2;

for i:=1 to k1 do

begin

c:=pos(s1[i],a);

b:=k2-length(a)+c;

if c>0 then

begin

S:=S+c-1;

a:=copy(s2,b+1,k2-b);

end

else

begin

S:=0;break;

end;

end;

H:=trunc(S/k2*100);

sai_so:=H;

end;

begin

clrscr;

write('nhap xau:');readln(s1);

write('nhap xau can kiem tra:');readln(s2);

write('% sai so:');readln(n);

if sai_so(s1,s2)<n then writeln('ok')

else writeln(':(');

readln

end.

Nhận xét:

- Các TH khác thì không biết thế nào nhưng nếu nhập từ kiểm tra là "misspelled" và từ gốc là "mispeld" , sai số là 30. Thì kết quả ra là sai !

Chủ đề