Hỏi đápGiải Tin có thưởng :3

Được viết bởi: Daniel


(300 magots ~)
Mã hoá và giải mã văn bản.

Bài toán sau mô tả một thuật toán mã hoá đơn giản.
Tập hợp các chữ cái tiếng Anh bao gồm 26 chữ cái được đánh số thứ tự từ 0 đến 25 như sau:

012345678910111213141516171819202122232425
ABCDEFGHIJKLMNOPQRSTUVWXY
Z


Quy tắc mã hoá một ký tự như sau (lấy ví dụ ký tự Z):


- Tìm số thứ tự tương ứng của ký tự ta được 25
- Tăng giá trị số này lên 7 ta được 32
- Tìm số dư trong phép chia số này cho 26 ta được 6
- Tra ngược bảng chữ cái ta thu được G.


Thí dụ:



Sử dụng quy tắc trên để mã hoá dòng chữ

TIN HOC thành APU OVJ

Sử dụng quy tắc trên để giải mã các dòng chữ

JOBJ JHJ LT SHT IHP AOHA AVA thành
CHUC CAC EM LAM BAI THAT TOT*

Hãy xây dựng 2 hàm mã hóa và giải mã. Viết chương trình cho phép người dùng có thể chọn để thực hiện một trong hai công việc là mã hóa hoặc giải mã. Yêu cầu người dùng nhập trực tiếp và báo kết quả trên màn hình.



Đáp án Pascal (coded by hotamago)


program encode_base;
uses crt;
var a,b,c:string;
n,aa:integer;
function encode(strd,bang:string;add:integer):string;
var ab,bb,cb:integer;
begin
for ab:=1 to length(strd) do begin
cb:=0;
for bb:=1 to length(bang) do begin
if strd[ab]=bang[bb] then begin
cb:=bb;
break;
end;
end;
if cb<>0 then begin
if (cb+add)<=length(bang) then strd[ab]:=bang[cb+add] else strd[ab]:=bang[(cb+add) mod length(bang)];
end;
end;
encode:=strd;
end;
function decode(strd,bang:string;add:integer):string;
var ab,bb,cb:integer;
begin
for ab:=1 to length(strd) do begin
cb:=0;
for bb:=1 to length(bang) do begin
if strd[ab]=bang[bb] then begin
cb:=bb;
break;
end;
end;
if cb<>0 then begin
if (cb-add)>0 then strd[ab]:=bang[cb-add] else strd[ab]:=bang[cb + length(bang) - add];
end;
end;
decode:=strd;
end;
begin
aa:=7;
a:='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
writeln('Chon ma hoa hay giai ma bro? encode/decode => ');
readln(b);
if b='encode' then begin
writeln('nhap ky tu can ma hoa bro => ');
readln(c);
writeln('encode => ',encode(c,a,aa));
end else begin
if b='decode' then begin
readln(c);
writeln('decode => ',decode(c,a,aa));
end else writeln('toi da noi la dien encode hoac decode, toi ve nha ong khong nghiem tuc ti nao ca');
end;
readln
end.

Posted on September 14, 2019 08:56:58 AM


12
Donate free




Đăng nhập để tham gia thảo luận! Hoặc bạn có thể bình luận bằng facebook ở dưới.