MathTools - máy tính đa năng
( Nhân chương trình: Dùng thuật toán nghịch đảo ba lan để tính giá trị biểu thức )
Các chức năng chính
Các điều căn bản
+ Sử dụng chuổi các chử từ a đến z đặt tên cho hàm và biến
Hàm bắt đầu bằng chử Hoa: ví dụ: Sin, Cos, Tan, Max, Sum, …
Biến bắt đầu bằng chử thường hoặc kí tự & : ví dụ: x,y,z,n,&a,&b ( một số trường hợp đặt biệt cần phải thêm kí tự & vào trước biến để tránh nhầm lẩn khi tên biến là một phần của tên hàm nào đó. Ví dụ : n là một phần của Sin: f(&n)=Sin(&n); f(n)=Sin(n)…
+ Những dấu đóng ngoặc cuối biểu thức có thể bỏ qua
+ Đối với một số hàm một đối số hằng thì có thể bỏ qua cặp dấu ngoặc giửa hàm và đối, ví dụ Sin3.
+ Kết quả với dấu chấm động sẽ đc hiển thị lại theo dạng tự nhiên hơn. ở phần Decimal ( bên phải thanh nhập công thức. ) Nếu chọn giá trị là 00 thì kết quả sẽ hiển thị dạng chấm động. thay đổi giá trị decimal này sẽ có ảnh hưởng toàn cục, ảnh hưởng cả khi giải PT!
+ Kết quả hiển thị ngay trong khi nhập.
Hổ trợ các hàm cơ bản: lượng giác, lũy thừa, …
+ Max()
+ Min()
+Tổ hợp: C(n,k);Nck(n,k) ( ví dụ: C(5,3) hoặc Nck(5,3)).
+ Chỉnh hợp: P(n,k); Npk(n,k).
+ Sum(), ...
+ Dấu "," dùng để chia các phần tử của mãng, dùng dấu [] để truy xuất mãng, ví dụ:
a=(1,2,4),a[2]
dùng // để viết phần chú thích
+ danh sách các hàm: ( hầu hết các hàm có thể tác đọng lên 1 mãng, sẽ trả về 1 mãng với hàm tác động lên từng phần tử ( ví dụ sin(A,B) -> sinA,sinB )
hàm lượng giác một hàm có thể viết nhiều kiểu như dưới đây theo thói quen của bạn:
Sin Cos Tan ( hoặc Tg) Cotan (hoặc Cotg )
hàm lượng giác ngược:
Arcsin (Asin)
Arccos(Acos)
Arctan(Arctg,Atan)
Arccotan(Acotan)
Sinh(Cosh,Tanh)
Arcsinh(Asinh)
Arccosh(Acosh)
Arctanh(Atanh)
Sqr ; Sqrt ; Exp ; Abs bình phương, căn bậc 2, e^x, trị tuyệt đối.
Fib : trả về số fibonaci thứ x. fib(range(1,10)) 10 số fib đầu tiên
Fac ; Factorial giai thừa
Trunc : cắt nguyên
Round : làm tròn
Ln : lôgarit tự nhiên
Log(a,b)
Rnd,Ran,Random: tạo số ngẩu nhiên
Random(6) ngẩu nhiên từ 0 đến 5
Random(1,4) ngẩu nhiên từ 1 đến 4
Random(1,5,4) ngẩu nhiên 1 trong 3 số 1,5,4
Count đếm 1 mãng ( ví dụ: count(eqn(X^2-3),2,3) ra kết quả là 4: 2 nghiệm và 2 số 2,3
Max giá trị lớn nhất của mãng
Min giá trị nhỏ nhất
If(điều_kiện,BT1,BT2) : kiếm tra nếu điều kiện đúng thì trả về BT1 ngược lại trả về BT2
Nck ; C: c(n,k) tổ hợp
Npk ; P: p(n,k) chỉnh hợp
Roundto làm tròn:
Roundto(x,-5) làm tròn 5 chử số bên phải dấu phẩy
Roundto(x,5) làm tròn 5 chử số bên trái dấu phẩu
Range,Int:
Range(2,10) trả về một mãng các số tnhiên từ 2 đến 10
Eqn, Equation, Solve: giải phương trình
Eqn(X^2-X-3) mặc định tìm trên đoạn -10,10
Eqn(X^2-sinX,[-20,20]) giải nghiệm trên đoạn -20,20
Sum,Summa : tính tổng
Sum(1,2,4)
Sum(A,2,2)
Sum(Eqn(X^2-2),1)
Sum(1/X!,[X,0,20])
Loop,Loops : lặp lại 1 tính toán
Loop(X=sqrtX+1,[100]) : ( lặp lại việc gán X bằng căn X + 1 , 100 lần )
toán tử:
+ - * / > <
= ( nếu bên trái là tên biến thì là phép gán, nếu là hằng số thì là phép so sánh )
>= <=
! giai thừa
% phần trăm
[ ] lấy phần tử của mãng : (1,3,4,2)[2] - 3
Điều điện trong:
Giải phương trình: Eqn(Sin(x)-2Cos(x),[-10,10])
Tính tổng: Sum(n^2,[n,0,10])
Tạo mãng: Array(n^2,[n,0,10])
Lặp lại : Loop(x=x/2+1/x,[100])
a[2] phần tử thứ hai của a ( nếu a ko phải mãng thì trả về 0)
() dấu mở ngoặc đóng ngoặc: (1+2*3)(2-3)-(1-(2+3^4))
, dấu chia cách của mãng:
2,3,4 mãng 3 phần tử
4,Eqn(x^3-5x),7
a=(1,2,4) gán mãng 1,2,4 cho a
1..2 = 1E+2 = 1*10^2 = 100
2...3 = 2E-3 = 2*10^-3 = 0.002
+ Biến ans để lưu giá trị trả về. là một mãng nối tiếp , các kết quả mới đc đặt bên trái
+ Biến digit để thiết đặt số chử số thập phân của kết quả. ( có thể gán trực tiếp: digit=10)
Và nhiều chức năng nữa đang đợi các bạn … đóng góp ý kiến.
Trên đây là vài chức năng mô phỏng trên chế độ nhập công thức ra kết quả
Ngoài ra chương trình còn có một số chức năng bổ sung sau:
+ Tính toán với các biểu thức với độ ưu tiên của nó.
+ Hổ trợ các hàm số căn bản, các biến các hằng theo nguyên tắc đả nếu trên
+ Hổ trợ bạn lưu một công thức tự định nghĩa ( Menu Công cụ -> hàm tự định nghĩa )
+ Tìm nghiệm gần đúng của phương trình bất kì.
+ Tìm nghiệm của hệ tuyến tính với số PT số nghiệm tùy ý.
+ Tìm đạo hàm của hàm số ( kết quả chưa đc rút gọn cho đẹp lắm, nhưng tạm ổn )
+ Tìm điểm cực trị, Tính tích phân theo định nghĩa, Tìm giới hạn của hàm số.
+ Vẽ đồ thị hàm số 1 biến, vẽ chồng nhiều đồ thị, vẽ đồ thị hàm tham số.
+ Chuyển đổi số thập phân sang các hệ khác. Chuyển về phân số ( cái này sến )
+ Một số chức năng đang test đưa ra cho các bạn thử chơi:
+ Rút gọn 1 biểu thức toán học chứa chử:
1+2a+1.2(2+2a*4+3) = 1+2*a+1.2*(5+8*a) ( kiểu như vậy, nhìn cũng hơi sến nhưng viết cũng hơi mệt )
+ Chức năng chuyển qua RPN tự kiểm tra khi gặp lỗi ( Bạn muốn tìm hiểu thuật toán của chương trình này thì tìm hiểu thuật toán nghịch đảo ba lan,trong đó có đề cập đến chuổi RPN )
+ Tính giai thừa số lớn, hiện ra tất cả các chử số, cái này chôm đc thuật toán, đưa vào chơi, tính đến khoảng 1000! Còn để tính 10000! Thì hơi lâu, khoảng 10s với cấu hình máy mình.
+ Bạn tự do chọn đơn vị lượng giác
New! Chạy các đoạn script nhỏ như một ngôn ngử lập trình bỏ túi
Mở: Công cụ -> Soạn thảo kịch bản.
Cú pháp:
Mổi câu lệnh bắt đầu bằng 1 từ khóa hoặc 1 câu lệnh
Bảng từ khóa:
IF ELSE ENDIF (câu lệnh IF)
FOR ENDFOR (lặp for)
WHILE ENDWHILE (lặp while)
REPEAT UNTIL (lặp repeat)
CLEAR (xóa màn hình kết quả)
IN INPUT (nhập liệu 1 biến bằng inputbox, có thể nhập 1 biểu thức, chương trình sẽ tính kết quả và gán cho biến)
OUT OUTPUT (Xuất thông tin bằng messenge box)
WRITE (Xuất thông tin ra màn hình)
FUN (Định nghĩa 1 hàm)
EXIT (Thoát chương trình)
BREAK (Dừng vòng lặp)
CONTINUE (Chạy vòng lặp tiếp theo)
Cấu trúc các cậu lệnh, các phần tử ngăn nhau bởi dấu “:” bởi vậy khi xuất xâu, ko đc dùng dấu “:” này.
Các ví dụ:
CLEAR
INPUT:a:b:c
OUT:a+b+c
WRITE:"Màn hình kết quả"
Giải phương trình bậc 2
CLEAR
IN:a:b:c
d=b^2-4*a*c
IF:d>0
OUT:"Nghiệm là":(-b+Sqrt(d))/2/a:";":(-b-Sqrt(d))/2/a
ELSE
IF:d=0
OUT:"Nghiệm kép X=":-b/a/2
ELSE
OUT:"Phương trình vô nghiệm"
ENDIF
ENDIF
Làm việc với số fibonaci
CLEAR
WRITE:"Hiện các số fibonaci từ 1 đến 20"
FOR:i:1:20
WRITE:"Fib":i:"=":Fib(i)
ENDFOR
Kiểm tra câu lệnh BREAK
FOR:a:1:1000
OUTPUT:a
IF:a=3
OUTPUT:"Vòng lặp bị bẽ tại a=3 nè"
BREAK
ENDIF
ENDFOR
Kiểm tra câu lệnh CONTINUE
CLEAR
FOR:a:1:100
IF:(a=43*Trunc(a/43))
OUT:"Vòng lặp tại ":a:" bị gọi continue số chia hết 43 ko chịu hiện"
CONTINUE
ENDIF
WRITE:a
ENDFOR
Thủ thuật với biến digit
digit=5
OUT:"1/3 với độ chính xác ":digit:" là ":1/3
digit=8
OUT:"1/3 với độ chính xác ":digit:" là ":1/3
Ví dụ về dùng hàm số
FUN:F(x)=(x^3-x)*Sin(x)
OUT:"F(3)=":F(3):"\nNghiệm là\n":Eqn(F(x))
Ví dụ về số nguyên tố: nhớ vào tùy chọn -> tải gói nguyên tố rồi hãy chạy script nhé
OUTPUT:"Nếu chưa thấy hiện gì có thể bạn chưa tải gói số nguyên tố, vào tùy chọn, tải gói nguyên tố"
count=0
maxp=30
FOR:i:2:maxp
IF:IsPrime(i)
count=count+1
IF:count==1
setP=2
ELSE
setP=(setP,i)
ENDIF
ENDIF
ENDFOR
OUTPUT:"Có tất cả ":count:" số nguyên tố trên đoạn [2,":maxp:"]. Đó là\n":setP
Thử vòng while
a=0
WHILE:a<20
a=a+1
WRITE:a
ENDWHILE
OUTPUT:"bye bye"
Các chức năng lập trình mình đang tiếp tục nghiên cứu để dùng hay hơn
Vài chú ý:
+ Bộ nhớ biến khi lập trình và của chương trình dùng chung
+ Có thể thuật toán chưa thật tối ưu nên có thể một số phép lặp sẽ kéo dài thời gian, nhưng nói chung tạm ổn, chỉ khi làm việc với số nguyên tố, hoặc phép toán đòi hỏi nhiều phép tính thì có thể hơi bị lâu
+ Hiện tại từng đó từ khóa, với cấu trúc lòng nhau, cũng làm đc khá nhiều việc rồi
Mọi đóng góp xin gửi về hòm mail: nguyenkimvy@gmail.com