Ðề: Anh chị giúp mình với
May quá gặp lập trình viên: Bạn ơi bạn có thể dịch giúp mình đoạn code này ko nhỉ: Cod của Foxpro:
Cho giá trị M.view như sau:
M.VIEW = TRANSFORM(MOD(VAL(SYS(2007, SYS(3))), 20), "@L 99")+TRANSFORM(MOD(VAL(SYS(2007, SYS(3))), 30), "@L 99")+TRANSFORM(MOD(VAL(SYS(2007, SYS(3))), 40), "@L 99")+TRANSFORM(MOD(VAL(SYS(2007, SYS(3))), 50), "@L 99")+ALLTRIM(STR(VAL(SYS(2007, SYS(3)))*2001))+TRANSFORM(MOD(VAL(SYS(2007, SYS(3))), 60), "@L 99")
Tính các giá trị sau theo M.view
CNODE1 = SUBSTR(M.VIEW, 4, 1)
CNODE2 = ALLTRIM(STR(MOD(VAL(CNODE1)*VAL(SUBSTR(M.VIEW, 3, 1))+1, 10)))
CNODE3 = ALLTRIM(STR(MOD(VAL(CNODE2)*VAL(SUBSTR(M.VIEW, 5, 1))+7, 10)))
CNODE4 = ALLTRIM(STR(MOD(VAL(CNODE3)*VAL(SUBSTR(M.VIEW, 6, 1))+9, 10)))
CNODE5 = ALLTRIM(STR(MOD(VAL(CNODE4)*VAL(SUBSTR(M.VIEW, 7, 1))+1, 10)))
CNODE6 = RIGHT(M.VIEW, 1)
nó như thế nào nhỉ??
nói thật đây là cách tính mã cài đặt cho 1 PM kế toán
Mình ko hỏi để Cr@ck mà để xem tính thế nào, còn Cr@ck thì chỉ cần thay giá trị = những con số cụ thể '123456....' hoặc thay đổi == thành khác hoặc >< hoặc thay đổi các giá trị .T. = .F. hoặc disable nó đi là ok. Bạn giúp mình nha, Thanks
m.view chỉ là 1 biến, công thức dài nhằng để tính ra giá trị của m.view thì bạn cũng không cần quan tâm lắm đâu vì thực ra nó không quan trọng lắm; mục đích chỉ là để hiện ra 1 dãy số ngẫu nhiên dựa vào thời gian hệ thống hiện tại của máy tính. Kết quả của đoạn công thức trên sẽ gán cho m.view 1 giá trị gồm từ 17-> 19 chữ số với định dạng kiểu "ký tự";
Bạn chỉ cần quan tâm đến việc tính các biến CNODE1 -> CNODE6
VD : mình chạy ra được giá trị m.view là : 0217273712363578747 (chú ý mỗi lần chạy thì m.view sẽ cho ra 1 dãy chữ số khác nhau)
CNODE1 = SUBSTR(M.VIEW, 4, 1) => bắt đầu lấy ký tự thứ 4 của chuỗi m.view, số ký tự cần lấy là 1 ==>
ta có giá trị của CNODE1 = 7
CNODE2 = ALLTRIM(STR(MOD(VAL(CNODE1)*VAL(SUBSTR(M.VIEW, 3, 1))+1, 10))) => lấy giá trị CNODE1 * giá trị ký tự thứ 3 của chuỗi m.view rồi cộng thêm 1; sau đó thực hiện phép chia & lấy phần dư còn lại gán cho giá trị của CNODE2 ==> mod(7*1+1,10)==> mod(8,10) ==>
ta có giá trị của CNODE2 = 8
CNODE3 = ALLTRIM(STR(MOD(VAL(CNODE2)*VAL(SUBSTR(M.VIEW, 5, 1))+7, 10))) => làm tương tự như trên ta có CNODE3 = mod(8*2+7,10) = mod(23,10) = 3 ==>
ta có giá trị của CNODE3 = 3
CNODE4 = ALLTRIM(STR(MOD(VAL(CNODE3)*VAL(SUBSTR(M.VIEW, 6, 1))+9, 10))) => CNODE4 = mod(3*7+9,10) = mod(30,10) = 0 ==>
ta có giá trị của CNODE4 = 0
CNODE5 = ALLTRIM(STR(MOD(VAL(CNODE4)*VAL(SUBSTR(M.VIEW, 7, 1))+1, 10))) => CNODE5 = mod(0*3+1,10) = mod(1,10) = 1 ==>
ta có giá trị của CNODE5 = 1
CNODE6 = RIGHT(M.VIEW, 1) => đếm chuỗi m.view từ bên phải qua trái, lấy 1 ký tự ==>
ta có giá trị của CNODE6 = 7
==> dãy số CNODE1 -> CNODE6 sẽ là 783017
Giải thích các hàm sử dụng để tính toán :
SUBSTR(M.VIEW, m, n) : Trích chuỗi m.view, bắt đầu trích từ vị trí m với số lượng ký tự cần trích là n
VAL(<bien>) : chuyển giá trị <bien> từ kiểu ký tự sang kiểu số => phục vụ công tác tính toán
STR(<bien>) : ngược lại với hàm Val(), hàm này chuyển giá trị <bien> từ kiểu số sang kiểu ký tự
ALLTRIM(<bien>) : cắt bỏ các khoảng trắng(trống) ở 2 đầu của <bien>
MOD(m,n) : phép chia lấy phần dư, trong đó m là số bị chia, n là số chia
vd : mod(8,5) = 3 ; mod(5,8) = 5 ; mod (15,8) = 7 ; mod (15,5) = 0
có chỗ nào khó hiểu bạn cứ hỏi lại tại đây hoặc liên hệ trực tiếp với mình nhé