Tin học Giải mã thông điệp trong pascal

Dũng8a7

Học sinh mới
Thành viên
10 Tháng hai 2020
10
1
6
17
Bình Phước
Trường TH & THCS Lương Thế Vinh
[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

#include <iostream>
#include <string.h>
using namespace std;
string a,s;
string ans[51];
string giaima()
{
int dem=1;
for (int i=0;i<=s.length()-1;i++)
{
ans[dem]+=s;
if (s==' ')
{
dem++;
ans[dem-1].erase(ans[dem-1].length()-1);
}
}
}
int main() {
getline (cin,s);
getline (cin,a);
giaima();
for (int i=0;i<=a.length()-1;i+=2)
{
cout << ans[(int)(a-48)] << " ";
}
return 0;
}
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
Mình không thể hiểu thuật toán này muốn viết cái gì....chạy trên Dev C++ cũng lỗi liên tục, nhưng mình có thể giúp bạn chuyển code.
(PS: giải thích giúp mình xem thuật toán này dùng để làm gì)
Mã:
uses crt;
var a,s: string;
      ans: array[1..51] of string;
function giaima: string;
var dem,i: integer;
begin
          dem := 1;
          for i := 1 to length(s) do
          begin
                    ans[dem] := ans[dem] + s;
                    if (s = ' ') then
                    begin
                              inc(dem);
                              delete(ans[dem-1],length(ans),1);
                    end;
          end;
end;

var i: integer;
BEGIN
           readln(s,a);
           giaima;
           i := 1;
           while i < length(a) do
           begin
                     write(ans[ord(a[i])-48] + ' ');
                     i := i + 2;
           end;
END.
 
  • Like
Reactions: 02-07-2019.

Dũng8a7

Học sinh mới
Thành viên
10 Tháng hai 2020
10
1
6
17
Bình Phước
Trường TH & THCS Lương Thế Vinh
Trong thời đại ngày nay, thông tin cá nhân của mỗi người dễ dàng bị xâm nhập bởi rất nhiều công nghệ hiện đại nghe lén. Chính vì vậy, một đôi bạn muốn bảo mật thông tin cho nhau đã có sáng kiến nghĩ ra cách trao nhau những thông điệp mà người khác đọc hoặc nghe được thì không hiểu gì. Thông điệp của họ là một câu với nhiều từ được phân biệt bởi ký tự trống (dấu cách) và được sắp xếp lộn xộn để trở thành câu vô nghĩa. Để hiểu nội dung một thông điệp của người bạn gởi cho mình, hai người bạn đã quy ước trước một bộ mã là một dãy số nguyên dương có số lượng số tương ứng với số từ của thông điệp nhằm giải mã thành câu có ý nghĩa.
Yêu cầu: Lập trình để giúp đôi bạn giải mã một thông điệp cho trước.
- Dữ liệu vào: File văn bản GIAIMA.INP gồm 2 dòng.
+ Dòng đầu ghi một câu có không quá 255 kí tự là thông điệp được gởi đi. Trong câu này có không quá 50 từ, mỗi từ có không quá 30 kí tự.
+ Dòng thứ hai ghi bộ mã gồm một dãy các số nguyên dương đôi một khác nhau dùng để giải mã thông điệp trên.
- Dữ liệu ra: File văn bản GIAIMA.OUT gồm một dòng ghi câu đã được giải mã từ thông điệp đã cho.
Ví dụ:


GIAIMA.INP

luon chuc hoc ban gioi luon
2 4 1 6 3 5
[TBODY] [/TBODY]


GIAIMA.OUT

chuc ban luon luon hoc gioi
[TBODY] [/TBODY]
[TBODY] [/TBODY]
thank you anh dep zai
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
Trong thời đại ngày nay, thông tin cá nhân của mỗi người dễ dàng bị xâm nhập bởi rất nhiều công nghệ hiện đại nghe lén. Chính vì vậy, một đôi bạn muốn bảo mật thông tin cho nhau đã có sáng kiến nghĩ ra cách trao nhau những thông điệp mà người khác đọc hoặc nghe được thì không hiểu gì. Thông điệp của họ là một câu với nhiều từ được phân biệt bởi ký tự trống (dấu cách) và được sắp xếp lộn xộn để trở thành câu vô nghĩa. Để hiểu nội dung một thông điệp của người bạn gởi cho mình, hai người bạn đã quy ước trước một bộ mã là một dãy số nguyên dương có số lượng số tương ứng với số từ của thông điệp nhằm giải mã thành câu có ý nghĩa.
Yêu cầu: Lập trình để giúp đôi bạn giải mã một thông điệp cho trước.
- Dữ liệu vào: File văn bản GIAIMA.INP gồm 2 dòng.
+ Dòng đầu ghi một câu có không quá 255 kí tự là thông điệp được gởi đi. Trong câu này có không quá 50 từ, mỗi từ có không quá 30 kí tự.
+ Dòng thứ hai ghi bộ mã gồm một dãy các số nguyên dương đôi một khác nhau dùng để giải mã thông điệp trên.
- Dữ liệu ra: File văn bản GIAIMA.OUT gồm một dòng ghi câu đã được giải mã từ thông điệp đã cho.
Ví dụ:

GIAIMA.INP
luon chuc hoc ban gioi luon
2 4 1 6 3 5
[TBODY] [/TBODY]
GIAIMA.OUT
chuc ban luon luon hoc gioi
[TBODY] [/TBODY]
[TBODY] [/TBODY]
thank you anh dep zai
vậy thì có lẽ mình đã dịch sai khá nhiều rồi đó, hoặc là thuật toán bạn gửi nó sai khá nhiều.....
Mình chạy thử nhưng kết quả không như ý lắm :p
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
Dựa vào code người ta mình chỉnh sửa lại một xíu thôi....và chạy thấy nó cũng ổn nên bạn test thử nha (Tham khảo) :D
Mã:
uses crt;
var a,s: string;
        ans: array[1..50] of string;

function giaima: string;
var dem,i: integer;
        anst: array[1..50] of string;
begin
        dem := 1;
        for i := 1 to length(s) do
        begin
                anst[dem] := anst[dem] + s[i];
                if (s[i] = ' ') then
                begin
                        delete(anst[dem],length(anst[dem]),1);
                        dem := dem+1;
                end;
        end;
        i := 1;
        dem := 1;
        while i <= length(a) do
        begin
                ans[ord(a[i])-48] := anst[dem];
                i:= i + 2;
                dem := dem+1;
        end;
end;

var i,dem: integer;
BEGIN
        clrscr;
        readln(s);
        readln(a);
        giaima;
        dem := 1;
        i := 1;
        while i <= length(a) do
        begin
                write(ans[dem] + ' ');
                i := i + 2;
                dem := dem + 1;
        end;
        readln;
END.
 
  • Like
Reactions: Hồng Minh

Dũng8a7

Học sinh mới
Thành viên
10 Tháng hai 2020
10
1
6
17
Bình Phước
Trường TH & THCS Lương Thế Vinh
cảm ơn anh nhưng chạy ko đc nha anh ơi
anh very đẹp zai như newtonc40b89b85251aa0ff340.png

nếu có thể thì anh làm dạng tệp luôn dùm e nha anh kiểu
f:text;
assign(f,'giaima.inp');
reset(f);
readln(f,s);
readln(f,a);
assign(f,'giaima.out');
rewrite(f);
thank anh nhìu
 
Last edited by a moderator:

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
nếu có thể thì anh làm dạng tệp luôn dùm e nha anh kiểu
f:text;
assign(f,'giaima.inp');
reset(f);
readln(f,s);
readln(f,a);
assign(f,'giaima.out');
rewrite(f);
thank anh nhìu
làm tệp mình lười cực....viết ra viết vào, in đi in lại :D
mình chạy được nha, còn bạn thế nào thì mình không biết
upload_2020-2-11_13-31-41.png
 

Dũng8a7

Học sinh mới
Thành viên
10 Tháng hai 2020
10
1
6
17
Bình Phước
Trường TH & THCS Lương Thế Vinh
anh ơi anh test hộ em câu
{luon chuc hoc ban gioi luon
2 4 1 6 3 5} xem chay đc ko nhé
 

bùi thị xuân mai

Học sinh
Thành viên
28 Tháng bảy 2019
42
13
31
18
Quảng Nam
thcs võ thị sáu
anh ơi anh test hộ em câu
{luon chuc hoc ban gioi luon
2 4 1 6 3 5} xem chay đc ko nhé
test này sai rồi bạn ạ lúc trước mình cũng làm bài này nhưng thầy mình nói là test này sai rồi
test đúng là: luon chuc ban hoc gioi luon
3 1 2 4 5 3
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
test này sai rồi bạn ạ lúc trước mình cũng làm bài này nhưng thầy mình nói là test này sai rồi
test đúng là: luon chuc ban hoc gioi luon
3 1 2 4 5 3
test của bạn cũng bị "nhầm" thì phải
khi có tới 2 số "3" trong bản test kìa, còn số 6 không thấy đâu :)
 

ĐứcNhật!

Học sinh tiêu biểu
Thành viên
17 Tháng mười một 2017
1,525
3,788
529
Quảng Nam
Trung Học Phổ Thông Chuyên Nguyễn Bỉnh Khiêm
Mã:
Const Fi='GIAIMA.INP';
      Fo='GIAIMA.OUT';
Var f,g: text;
    St: String;
    A: array[1..255] of longint;
    B: array[1..255] of string;
    S,i,k: longint;
Begin
        Assign(f,Fi); Reset(f);
        Assign(g,Fo); Rewrite(g);
        Readln(f,St);
        While St[1]=#32 do Delete(St,1,1);
        While St[length(St)]=#32 do Delete(St,length(St),1);
        While pos(#32#32,St)<>0 do Delete(St,pos(#32#32,St),1);

        s:=1;
        For i:=1 to length(St) do
                If St[i]=#32 then inc(s);
        For i:=1 to s do
                Read(f,A[i]);

        k:=1;
        For i:=1 to length(St) do
                If St[i]<>#32 then B[k]:=B[k]+St[i]
                Else inc(k);
        For i:=1 to s do
                Write(g,B[A[i]],' ');
        Close(f);
        Close(g);
End.
 
Top Bottom