![]() |
|
|
#1 |
|
Rìu Sắt
![]() |
Một bạn học sinh THCS vừa tạo ra một phần mềm máy tính. Bạn ấy cũng chưa có phương án tạo ra một bộ mã sao cho gọn nhẹ, thuận tiện nhằm khóa mã và giải mã cho chương trình tránh bị đánh cắp phần mềm. Để tạo ra được bộ mã khóa như thế, một chuyên gia lập trình đã đề nghị lập một bộ mã mà nền tảng của nó dựa trên các nguyên tắc sau:
1- Mã khóa có 2 ký tự đầu là chữ in hoa trong bộ mã ASCII (có 25 ký tự từ A,B,C,...,V,W,X và Y); 2- Ba ký tự tiếp theo là ba con số từ 001->999. Rõ ràng với gợi ý đó thì chúng ta có một bộ mã khóa rất đơn giản, nhiều và dễ tạo ra nó. Ví dụ với mã khóa AA001 có thứ tự là 1, còn số thứ tự 26.065 là của mã khóa BB091. Yêu cầu: Dựa vào nguyên tắc trên, em hãy lập trình tạo ra bộ mã khóa để sử dụng. Khi cho số thứ tự thì bạn cho biết mã khóa và ngược lại khi biết mã khóa thì cho hiển thị số thứ tự của nó. Dữ liệu vào: Cho bởi file có tên MAKHOA.INP, chỉ có một dòng có thể là số thứ tự hoặc mã khóa. Dữ liệu ra: Là file văn bản có tên MAKHOA.OUT, chỉ một dòng trả lời kết quả của yêu cầu từ dữ liệu vào. Lập trình trên PASCAL, ai làm xong post lên đây cho mình với. |
|
|
|
|
|
#2 |
|
Rìu Bạc
![]() Tham gia: Dec 2007
Bài: 319
VZD: 4.992
Điểm: 83/54 bài viết
|
Input: thì bạn có thể cho nhập một chuỗi ký tự thỏa mãn điều kiện,
- string[5] với mã hóa, dk st[1] và st[2] từ #65 đến #90 , còn từ st[3],4,5 thì từ #48 đến #57 - Quá trình giải mã ra thứ tự, 2 kí tự đầu thì (ord(st[1])-65)*26000 và (ord(st[2])-65)*1000 và cộng với dùng hàm val đổi 3 chữ cuối thành số (có 2 cách đổi đó), Nhưng của tôi thì BB091 có thứ tự là 27 091 cơ, cái này để xem lại Cái đổi ngược lại khi khác nghĩ, dỗi tỗi sẽ thử làm hoàn tất xem sao. Bạn cứ dùng cái khung trên nghĩ đi nhé!
__________________
-_::Tin Học là chia sẻ ::_- http://cnttk1a.hnsv.comChào mừng các bạn đến diễn đàn lớp tui! thay đổi nội dung bởi: Mr_Dolphin, 04-04-2008 lúc 20:49 |
|
|
|
|
|
#3 |
|
Rìu Bạc
![]() Tham gia: Dec 2007
Bài: 319
VZD: 4.992
Điểm: 83/54 bài viết
|
Code:
uses crt;
var st:string;thutu,tam:longint;
begin
clrscr;
repeat
write('Nhap ma khoa: ');readln(st);
if (length(st)=5) and (st[1] >= #65) and (st[1] <= #90) and (st[2] >= #65) and (st[2] <= #90)
and (st[3] >= #48) and (st[3] <= #57) and (st[4] >= #48) and (st[4] <= #57)
and (st[4] >= #48) and (st[4] <= #57) then break;
write('Ma ban nhap khong chinh xac, enter de nhap lai.');
readln;
clrscr;
until false;
thutu:=(ord(st[1])-65)*26000 + (ord(st[2])-65)*1000 + (ord(st[3])-48)*100 + (ord(st[4])-48)*10 + (ord(st[5])-48);
write('Thu tu cua ma nhap vao la: ',thutu);
readln;
clrscr;
repeat
write('Nhap so thu tu: ');readln(thutu);
if (thutu <= 0) and (thutu <= 675999) then break;
clrscr;
until false;
st[1]:=chr(thutu div 26000 + 65);
tam:=thutu mod 26000;
st[2]:=chr(tam div 1000 + 65);
tam:=tam mod 1000;
st[3]:=chr(tam div 100 + 48);
tam:=tam mod 100;
st[4]:=chr(tam div 10 + 48);
tam:=tam mod 10;
st[5]:=chr(tam + 48);
write('Ma hoa tuong ung la: ',st);
readln
end.
__________________
-_::Tin Học là chia sẻ ::_- http://cnttk1a.hnsv.comChào mừng các bạn đến diễn đàn lớp tui! |
|
|
|
|
|
#4 | |
|
Rìu Sắt
![]() |
Trích:
1- Đề ra yêu cầu số ở sau là từ 001-999, bài của bạn có sử dụng số 000. 2- Ở dòng lệnh : if (thutu <= 0) and (thutu <= 675999) then break; Phải là If (thutu>=0)and(thutu<=675999)then break; |
|
|
|
|
|
|
#5 |
|
Rìu Bạc
![]() Tham gia: Dec 2007
Bài: 319
VZD: 4.992
Điểm: 83/54 bài viết
|
À uh, nó có khá nhiều lỗi đó, và cũng không đúng như mong muốn của đề, như bài tôi thì tôi tính cả Z, nhiều nhiều sai lắm, bạn làm lại rồi post lên cho mọi người tham khảo nhé.
__________________
-_::Tin Học là chia sẻ ::_- http://cnttk1a.hnsv.comChào mừng các bạn đến diễn đàn lớp tui! |
|
|
|
|
|
#6 | |
|
Rìu Sắt
![]() |
Bài giải:
Trích:
|
|
|
|
|