K
Khách

Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.

22 tháng 9 2016

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

 

chép mạng