Go Back   VN-Zoom Forum > Chia sẻ kiến thức > Lập trình > Pascal | C/C++

 



Trả lời Gửi Ðề Tài Mới
 
Ðiều Chỉnh Xếp Bài
Old 02-04-2008, 19:18   #1
Rìu Sắt
 
axit's Avatar
 
Tham gia: Oct 2007
Đến từ: Huế
Bài: 140
VZD: 8.462
Điểm: 322/61 bài viết
Send a message via Yahoo to axit
Unhappy Ai pro vào làm giúp cái nào

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.
__________________
Nếu thấy hay, hãy nhấn thay vì Spam!
Mọi ý kiến xin liên hệ về YM: letuduc93.
axit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-04-2008, 18:12   #2
Rìu Bạc
 
Mr_Dolphin's Avatar
 
Tham gia: Dec 2007
Bài: 319
VZD: 4.992
Điểm: 83/54 bài viết
Default

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.com
Chà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
Mr_Dolphin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-04-2008, 22:05   #3
Rìu Bạc
 
Mr_Dolphin's Avatar
 
Tham gia: Dec 2007
Bài: 319
VZD: 4.992
Điểm: 83/54 bài viết
Default

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.
Mình làm đó mọi người test hộ cái. Nhưng cái phần tính số thứ tự nó không nhận longint tức kinh khủng, nên có thế nói là bài này vẫn là sai.
__________________
-_::Tin Học là chia sẻ ::_-
http://cnttk1a.hnsv.com
Chào mừng các bạn đến diễn đàn lớp tui!
Mr_Dolphin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-04-2008, 19:38   #4
Rìu Sắt
 
axit's Avatar
 
Tham gia: Oct 2007
Đến từ: Huế
Bài: 140
VZD: 8.462
Điểm: 322/61 bài viết
Send a message via Yahoo to axit
Default

Trích:
Mr_Dolphin View Post
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.
Mình làm đó mọi người test hộ cái. Nhưng cái phần tính số thứ tự nó không nhận longint tức kinh khủng, nên có thế nói là bài này vẫn là sai.
Cái này mình có 2 góp ý:
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;
__________________
Nếu thấy hay, hãy nhấn thay vì Spam!
Mọi ý kiến xin liên hệ về YM: letuduc93.
axit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-04-2008, 19:54   #5
Rìu Bạc
 
Mr_Dolphin's Avatar
 
Tham gia: Dec 2007
Bài: 319
VZD: 4.992
Điểm: 83/54 bài viết
Default

À 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.com
Chào mừng các bạn đến diễn đàn lớp tui!
Mr_Dolphin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-07-2008, 20:37   #6
Rìu Sắt
 
axit's Avatar
 
Tham gia: Oct 2007
Đến từ: Huế
Bài: 140
VZD: 8.462
Điểm: 322/61 bài viết
Send a message via Yahoo to axit
Default

Bài giải:
Trích:
uses crt;
var s,i,j,n,k:integer;
st,a,b:string;
begin
clrscr;
writeln('1: tim ma biet stt');
writeln('1:tim stt biet ma khoa');
Write('ban chon: ');readln(s);
case s of
1:begin
st:='AA001';
write('nhap n: ');readln(n);
j:=1;
if n=1 then write(st) else
for i:=2 to n do
begin
j:=j+1;
str(j,a);
if j<1000 then
for k:=1 to 3-length(a) do
a:='0'+a;
if j=1000 then
begin
st[2]:=chr(ord(st[2])+1);
j:=1;
a:='001';
end;
if st[3]=#58 then
begin
st[2]:=chr(ord(st[2])+1);
st[3]:=#49;
end;
if st[2]=#90 then
begin
st[1]:=chr(ord(st[1])+1);
st[2]:=#65;
end;
st:=st[1]+st[2]+a;
if st[1]=#90 then
begin
write('Khong co stt nay!');
readln;
halt;
end;
end;
write(st);
readln;
end;
2:begin
write('nhap ma khoa: ');readln(b);
j:=1;
st:='AA001';
i:=1;
repeat
begin
i:=i+1;
j:=j+1;
str(j,a);
if j<1000 then
for k:=1 to 3-length(a) do
a:='0'+a;
if j=1000 then
begin
st[2]:=chr(ord(st[2])+1);
j:=1;
a:='001';
end;
if st[3]=#58 then
begin
st[2]:=chr(ord(st[2])+1);
st[3]:=#49;
end;
if st[2]=#90 then
begin
st[1]:=chr(ord(st[1])+1);
st[2]:=#65;
end;
st:=st[1]+st[2]+a;
end;
until (st=b) or (st[1]='Z');
if st=b then write(i) else write('khong co ma khoa nay');
end;
end;
readln;
end.
Ko biết mình làm đúng ko. Các bạn test thử rồi nêu ý kiến.
__________________
Nếu thấy hay, hãy nhấn thay vì Spam!
Mọi ý kiến xin liên hệ về YM: letuduc93.
axit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời Gửi Ðề Tài Mới

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
Bạn không thể gửi chủ đề mới
Bạn không thể gửi trả lời
Bạn không thể gửi file đính kèm
Bạn không thể tự sửa bài viết của bạn

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt
Trackbacks are Tắt
Pingbacks are Tắt
Refbacks are Tắt
Chuyển đến


Múi giờ GMT +7. Hiện tại là 15:21.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
Từ điển được cung cấp bởi VDict.com - Hosting được tài trợ bởi Rao vặt 123