Tiếng AnhTiếng PhápTiếng Tây Ban Nha

Ad


Biểu tượng yêu thích OnWorks

bc - Trực tuyến trên đám mây

Chạy bc trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks trên Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

Đây là lệnh bc có thể được chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


bc - Một ngôn ngữ máy tính chính xác tùy ý

TỔNG HỢP


bc [ -hlwqv ] [tùy chọn dài] [ hồ sơ hữu ích. Cảm ơn ! ]

MÔ TẢ


bc là một ngôn ngữ hỗ trợ các số chính xác tùy ý với việc thực thi tương tác
các câu lệnh. Có một số điểm tương đồng về cú pháp với ngôn ngữ lập trình C. MỘT
thư viện toán học tiêu chuẩn có sẵn theo tùy chọn dòng lệnh. Nếu được yêu cầu, thư viện toán học
được xác định trước khi xử lý bất kỳ tệp nào. bc bắt đầu bằng cách xử lý mã từ tất cả các tệp
được liệt kê trên dòng lệnh theo thứ tự được liệt kê. Sau khi tất cả các tệp đã được xử lý, bc
đọc từ đầu vào tiêu chuẩn. Tất cả mã được thực thi khi nó được đọc. (Nếu một tệp chứa một
lệnh để tạm dừng bộ xử lý, bc sẽ không bao giờ đọc từ đầu vào chuẩn.)

Phiên bản này của bc chứa một số phần mở rộng ngoài truyền thống bc triển khai và
tiêu chuẩn dự thảo POSIX. Các tùy chọn dòng lệnh có thể khiến các phần mở rộng này in ra
cảnh báo hoặc bị từ chối. Tài liệu này mô tả ngôn ngữ được chấp nhận bởi
bộ xử lý. Các phần mở rộng sẽ được xác định như vậy.

LỰA CHỌN
-h, - trợ giúp
In cách sử dụng và thoát.

-i, - tương tác
Buộc chế độ tương tác.

-l, --mathlib
Xác định thư viện toán học tiêu chuẩn.

-w, --cảnh báo
Đưa ra cảnh báo cho các tiện ích mở rộng cho POSIX bc.

-s, - tiêu chuẩn
Xử lý chính xác POSIX bc ngôn ngữ.

-q, --quiet
Không in bc GNU bình thường chào mừng.

-v, --version
In số phiên bản và bản quyền và thoát.

SỐ
Yếu tố cơ bản nhất trong bc là số. Số là số chính xác tùy ý.
Độ chính xác này là cả phần nguyên và phần phân số. Tất cả các con số là
được biểu diễn bên trong dưới dạng số thập phân và tất cả các phép tính được thực hiện dưới dạng số thập phân. (Phiên bản này
cắt bớt các kết quả từ các phép toán chia và nhân.) Có hai thuộc tính của
số, độ dài và tỷ lệ. Độ dài là tổng số thập phân có nghĩa
chữ số trong một số và tỉ lệ là tổng số chữ số thập phân sau số thập phân
chỉ trỏ. Ví dụ:
.000001 có chiều dài là 6 và tỷ lệ là 6.
1935.000 có chiều dài là 7 và tỷ lệ là 3.

BIẾN
Các số được lưu trữ trong hai loại biến, biến đơn giản và mảng. Cả hai đều đơn giản
biến và biến mảng được đặt tên. Tên bắt đầu bằng một chữ cái theo sau là bất kỳ số nào
gồm các chữ cái, chữ số và dấu gạch dưới. Tất cả các chữ cái phải là chữ thường. (Toàn bộ chữ-số
tên là một phần mở rộng. Trong POSIX bc tất cả các tên đều là một chữ cái thường.)
của biến rõ ràng theo ngữ cảnh vì tất cả các tên biến mảng sẽ được theo sau bởi
dấu ngoặc ([]).

Có bốn biến đặc biệt, tỉ lệ, cơ sở, vâng lời,cuối cùng. tỉ lệ xác định cách một số
các phép toán sử dụng các chữ số sau dấu thập phân. Giá trị mặc định của tỉ lệ là 0. ibase
khúm núm xác định cơ sở chuyển đổi cho các số đầu vào và đầu ra. Mặc định cho cả hai
đầu vào và đầu ra là cơ số 10. cuối cùng (một phần mở rộng) là một biến có giá trị là
số in cuối cùng. Những điều này sẽ được thảo luận chi tiết hơn nếu thích hợp. Tất cả
các biến này có thể có các giá trị được gán cho chúng cũng như được sử dụng trong các biểu thức.

GÓP Ý
Nhận xét trong bc bắt đầu với các ký tự /* và kết thúc bằng các ký tự */. Nhận xét có thể
bắt đầu ở bất kỳ đâu và xuất hiện dưới dạng một khoảng trắng trong đầu vào. (Điều này khiến các bình luận
phân định các mục đầu vào khác. Ví dụ: không thể tìm thấy nhận xét ở giữa
tên biến.) Nhận xét bao gồm bất kỳ dòng mới nào (cuối dòng) giữa đầu và cuối
của bình luận.

Để hỗ trợ việc sử dụng các tập lệnh cho bc, một bình luận dòng đơn đã được thêm vào dưới dạng
gia hạn. Một nhận xét dòng đơn bắt đầu ở # nhân vật và tiếp tục đến phần cuối tiếp theo của
dòng. Ký tự cuối dòng không phải là một phần của nhận xét và được xử lý bình thường.

BIỂU THỨC
Các con số được điều khiển bởi các biểu thức và câu lệnh. Kể từ khi ngôn ngữ là
được thiết kế để tương tác, các câu lệnh và biểu thức được thực thi càng sớm càng tốt.
Không có chương trình "chính". Thay vào đó, mã được thực thi khi nó gặp phải. (Chức năng,
được thảo luận chi tiết sau, được xác định khi gặp.)

Một biểu thức đơn giản chỉ là một hằng số. bc chuyển đổi hằng số thành số thập phân bên trong
các số sử dụng cơ sở đầu vào hiện tại, được chỉ định bởi biến ibase. (Đây là một
ngoại lệ trong các chức năng.) Các giá trị pháp lý của ibase là 2 đến 16. Gán một giá trị
ngoài phạm vi này để ibase sẽ dẫn đến giá trị là 2 hoặc 16. Các số đầu vào có thể chứa
các ký tự 0–9 và A – F. (Lưu ý: Chúng phải là chữ hoa. Chữ thường có thể thay đổi
tên.) Các số có một chữ số luôn có giá trị là chữ số không phụ thuộc vào giá trị
of ibase. (tức là A = 10.) Đối với các số có nhiều chữ số, bc thay đổi tất cả các chữ số đầu vào lớn hơn hoặc
bằng ibase với giá trị của ibase-1. Điều này làm cho số FFF luôn luôn là 3 lớn nhất
số chữ số của cơ sở đầu vào.

Các biểu thức đầy đủ tương tự như nhiều ngôn ngữ cấp cao khác. Vì chỉ có một
loại số lượng, không có quy tắc nào để trộn các loại. Thay vào đó, có các quy tắc về
quy mô của biểu thức. Mọi biểu thức đều có thang điểm. Điều này bắt nguồn từ quy mô của
số ban đầu, hoạt động được thực hiện và trong nhiều trường hợp, giá trị của biến
tỉ lệ. Giá trị pháp lý của biến tỉ lệ là 0 đến số tối đa có thể biểu diễn bằng chữ C
số nguyên.

Trong các mô tả sau đây về các biểu thức pháp lý, "expr" đề cập đến một biểu thức hoàn chỉnh
và "var" đề cập đến một biến đơn giản hoặc một mảng. Một biến đơn giản chỉ là một
tên
và một biến mảng được chỉ định là
tên[thể hiện]
Trừ khi được đề cập cụ thể, thang đo của kết quả là thang đo tối đa của
các biểu thức liên quan.

- expr Kết quả là sự phủ định của biểu thức.

++ var Biến được tăng lên một và giá trị mới là kết quả của
biểu hiện.

- var Biến giảm đi một và giá trị mới là kết quả của
biểu hiện.

biến ++
Kết quả của biểu thức là giá trị của biến và sau đó biến là
tăng lên một.

var - Kết quả của biểu thức là giá trị của biến và sau đó biến là
giảm đi một.

expr + expr
Kết quả của biểu thức là tổng của hai biểu thức.

expr - expr
Kết quả của biểu thức là hiệu của hai biểu thức.

expr * expr
Kết quả của biểu thức là tích của hai biểu thức.

expr / expr
Kết quả của biểu thức là thương của hai biểu thức. Quy mô của
kết quả là giá trị của biến tỉ lệ.

expr% expr
Kết quả của biểu thức là "phần dư" và nó được tính như sau
đường. Để tính a% b, trước tiên a / b được tính thành tỉ lệ các chữ số. Kết quả đó được sử dụng
để tính a- (a / b) * b theo tỷ lệ tối đa của tỉ lệ+ thang đo (b) và thang đo (a).
If tỉ lệ được đặt thành XNUMX và cả hai biểu thức đều là số nguyên biểu thức này là
hàm phần dư số nguyên.

expr ^ expr
Kết quả của biểu thức là giá trị của giá trị thứ nhất được nâng lên thứ hai. Các
biểu thức thứ hai phải là một số nguyên. (Nếu biểu thức thứ hai không phải là số nguyên,
một cảnh báo được tạo và biểu thức bị cắt bớt để nhận một giá trị số nguyên.)
Quy mô của kết quả là tỉ lệ nếu số mũ là số âm. Nếu số mũ là
dương thì thang đo của kết quả là mức tối thiểu của thang đo của kết quả đầu tiên
biểu thức nhân với giá trị của số mũ và giá trị lớn nhất của tỉ lệ và quy mô
của biểu thức đầu tiên. (ví dụ: scale (a ^ b) = min (scale (a) * b, max ( tỉ lệ,
scale (a))).) Cần lưu ý rằng expr ^ 0 sẽ luôn trả về giá trị 1.

(expr)
Điều này làm thay đổi mức độ ưu tiên tiêu chuẩn để buộc đánh giá biểu thức.

var = expr
Biến được gán giá trị của biểu thức.

var = expr
Điều này tương đương với "var = var expr "với ngoại lệ là phần" var "
chỉ được đánh giá một lần. Điều này có thể tạo ra sự khác biệt nếu "var" là một mảng.

Biểu thức quan hệ là một loại biểu thức đặc biệt luôn đánh giá thành 0 hoặc 1, 0
nếu quan hệ là sai và 1 nếu quan hệ là đúng. Những điều này có thể xuất hiện trong bất kỳ pháp luật nào
biểu hiện. (POSIX bc yêu cầu rằng các biểu thức quan hệ chỉ được sử dụng trong if, while,
và đối với các câu lệnh và chỉ một phép thử quan hệ có thể được thực hiện trong chúng.)
các nhà khai thác là

expr1 <expr2
Kết quả là 1 nếu expr1 nhỏ hơn expr2.

expr1 <= expr2
Kết quả là 1 nếu expr1 nhỏ hơn hoặc bằng expr2.

expr1> expr2
Kết quả là 1 nếu expr1 lớn hơn expr2.

expr1> = expr2
Kết quả là 1 nếu expr1 lớn hơn hoặc bằng expr2.

expr1 == expr2
Kết quả là 1 nếu expr1 bằng expr2.

expr1! = expr2
Kết quả là 1 nếu expr1 không bằng expr2.

Hoạt động boolean cũng hợp pháp. (POSIX bc KHÔNG có hoạt động boolean). Các
kết quả của tất cả các phép toán boolean là 0 và 1 (đối với sai và đúng) như trong quan hệ
biểu thức. Các toán tử boolean là:

! expr Kết quả là 1 nếu expr là 0.

expr && expr
Kết quả là 1 nếu cả hai biểu thức đều khác XNUMX.

exp || expr
Kết quả là 1 nếu một trong hai biểu thức khác XNUMX.

Mức độ ưu tiên của biểu thức như sau: (thấp nhất đến cao nhất)
|| toán tử, liên kết trái
Toán tử &&, liên kết trái
! toán tử, nonassociative
Toán tử quan hệ, liên kết trái
Toán tử chuyển nhượng, liên kết phải
+ và - toán tử, liên kết trái
Các toán tử *, / và%, liên kết trái
toán tử ^, liên kết phải
đơn phân - toán tử, không phân ly
Toán tử ++ và -, không phân ly

Mức độ ưu tiên này đã được chọn để tuân thủ POSIX bc chương trình sẽ chạy chính xác. Cái này
sẽ khiến việc sử dụng các toán tử quan hệ và logic có một số hành vi bất thường
khi được sử dụng với các biểu thức gán. Hãy xem xét biểu thức:
a = 3 <5

Hầu hết các lập trình viên C sẽ cho rằng điều này sẽ gán kết quả là "3 <5" (giá trị 1) cho
biến "a". Điều này có tác dụng gì bc là gán giá trị 3 cho biến "a" và sau đó
so sánh 3 đến 5. Tốt nhất nên sử dụng dấu ngoặc đơn khi sử dụng các toán tử quan hệ và logic
với các toán tử gán.

Có một số biểu thức đặc biệt hơn được cung cấp trong bc. Những điều này phải làm với
người dùng xác định chức năng và chức năng tiêu chuẩn. Tất cả chúng đều xuất hiện dưới dạng "tên(thông số)".
Xem phần về các chức năng cho các chức năng do người dùng xác định. Các chức năng tiêu chuẩn là:

chiều dài (biểu thức)
Giá trị của hàm độ dài là số chữ số có nghĩa trong
biểu hiện.

đọc ( )
Hàm đọc (một phần mở rộng) sẽ đọc một số từ đầu vào chuẩn,
bất kể chức năng xảy ra ở đâu. Hãy cẩn thận, điều này có thể gây ra sự cố với
trộn dữ liệu và chương trình trong đầu vào tiêu chuẩn. Cách sử dụng tốt nhất cho chức năng này
nằm trong một chương trình đã viết trước đây cần đầu vào từ người dùng, nhưng không bao giờ cho phép
mã chương trình được nhập từ người dùng. Giá trị của hàm đọc là
số đọc từ đầu vào chuẩn sử dụng giá trị hiện tại của biến ibase
cho cơ sở chuyển đổi.

quy mô (biểu thức)
Giá trị của hàm tỷ lệ là số chữ số sau dấu thập phân trong
cách diễn đạt.

sqrt (biểu thức)
Giá trị của hàm sqrt là căn bậc hai của biểu thức. Nếu
biểu thức là số âm, một lỗi thời gian chạy được tạo ra.

CÁC CÂU LỆNH
Các câu lệnh (như trong hầu hết các ngôn ngữ đại số) cung cấp trình tự của biểu thức
đánh giá. Trong bc các câu lệnh được thực thi "càng sớm càng tốt." Việc thực thi xảy ra khi
một dòng mới trong gặp phải và có một hoặc nhiều câu lệnh hoàn chỉnh. Vì điều này
thực hiện ngay lập tức, dòng mới là rất quan trọng trong bc. Trên thực tế, cả dấu chấm phẩy và dấu
dòng mới được sử dụng làm dấu phân cách câu lệnh. Một dòng mới được đặt không đúng sẽ gây ra
lỗi cú pháp. Vì dòng mới là dấu phân tách câu lệnh, nên có thể ẩn một dòng mới
bằng cách sử dụng ký tự gạch chéo ngược. Trình tự "\ ", ở đâu dòng mới có xuất hiện không
đến bc dưới dạng khoảng trắng thay vì một dòng mới. Danh sách câu lệnh là một loạt các câu lệnh
được phân tách bằng dấu chấm phẩy và dòng mới. Sau đây là danh sách bc tuyên bố và những gì
họ làm: (Những thứ được đặt trong dấu ngoặc ([]) là phần tùy chọn của câu lệnh.)

biểu hiện
Câu lệnh này thực hiện một trong hai điều. Nếu biểu thức bắt đầu bằng "
... ", nó được coi là một câu lệnh gán. Nếu
biểu thức không phải là một câu lệnh gán, biểu thức được đánh giá và in ra
đến đầu ra. Sau khi số được in, một dòng mới sẽ được in. Ví dụ,
"a = 1" là một câu lệnh gán và "(a = 1)" là một biểu thức có nhúng
phân công. Tất cả các số được in đều được in trong cơ sở được chỉ định bởi
biến khúm núm. Các giá trị pháp lý cho khúm núm là 2 đến BC_BASE_MAX. (Xem
phần GIỚI HẠN.) Đối với các cơ số 2 đến 16, phương pháp viết số thông thường là
đã sử dụng. Đối với các cơ số lớn hơn 16, bc sử dụng phương pháp chữ số nhiều ký tự của
in các số trong đó mỗi chữ số cơ bản cao hơn được in dưới dạng số cơ sở 10.
Các chữ số gồm nhiều ký tự được phân tách bằng dấu cách. Mỗi chữ số chứa số
trong số các ký tự được yêu cầu để đại diện cho giá trị mười cơ sở của "obase-1". Kể từ những con số
có độ chính xác tùy ý, một số con số có thể không in được trên một đầu ra duy nhất
hàng. Các số dài này sẽ được chia thành các dòng bằng cách sử dụng "\" làm số cuối cùng
ký tự trên một dòng. Số ký tự tối đa được in trên mỗi dòng là 70. Đến hạn
bản chất tương tác của bc, việc in một số gây ra tác dụng phụ của
gán giá trị in cho biến đặc biệt cuối cùng. Điều này cho phép người dùng
khôi phục giá trị cuối cùng được in mà không cần phải nhập lại biểu thức đã in
con số. Giao cho cuối cùng là hợp pháp và sẽ ghi đè lên giá trị được in cuối cùng
với giá trị được ấn định. Giá trị mới được chỉ định sẽ vẫn còn cho đến lần tiếp theo
số được in hoặc một giá trị khác được gán cho cuối cùng. (Một số cài đặt có thể
cho phép sử dụng một dấu chấm (.) không phải là một phần của số như một bàn tay ngắn
ký hiệu cho cuối cùng.)

string Chuỗi được in ra đầu ra. Các chuỗi bắt đầu bằng một ký tự dấu ngoặc kép
và chứa tất cả các ký tự cho đến ký tự dấu ngoặc kép tiếp theo. Tất cả nhân vật
được hiểu theo nghĩa đen, bao gồm bất kỳ dòng mới nào. Không có ký tự dòng mới nào được in sau
chuỗi.

in
Câu lệnh print (một phần mở rộng) cung cấp một phương thức xuất khác. Danh sách"
là danh sách các chuỗi và biểu thức được phân tách bằng dấu phẩy. Mỗi chuỗi hoặc
biểu thức được in theo thứ tự của danh sách. Không có dòng mới kết thúc được in.
Các biểu thức được đánh giá và giá trị của chúng được in ra và gán cho biến
cuối cùng. Các chuỗi trong câu lệnh in được in ra đầu ra và có thể chứa
ký tự đặc biệt. Các ký tự đặc biệt bắt đầu bằng ký tự gạch chéo ngược (\).
Các ký tự đặc biệt được công nhận bởi bc là "a" (cảnh báo hoặc chuông), "b" (xóa lùi),
"f" (nguồn cấp dữ liệu biểu mẫu), "n" (dòng mới), "r" (xuống dòng), "q" (dấu ngoặc kép), "t"
(tab) và "\" (dấu gạch chéo ngược). Bất kỳ ký tự nào khác theo sau dấu gạch chéo ngược sẽ là
mặc kệ.

{statement_list}
Đây là câu lệnh ghép. Nó cho phép nhiều câu lệnh được nhóm lại
cùng nhau để thực hiện.

if (biểu thức) câu lệnh1 [khác tuyên bố2]
Câu lệnh if đánh giá biểu thức và thực hiện câu lệnh1 hoặc câu lệnh2
tùy thuộc vào giá trị của biểu thức. Nếu biểu thức khác XNUMX,
câu lệnh1 được thực thi. Nếu câu lệnh 2 có mặt và giá trị của biểu thức
là 0, sau đó câu lệnh2 được thực thi. (Mệnh đề else là một phần mở rộng.)

trong khi (biểu thức) tuyên bố
Câu lệnh while sẽ thực hiện câu lệnh trong khi biểu thức khác XNUMX.
Nó đánh giá biểu thức trước mỗi lần thực hiện câu lệnh. Chấm dứt
của vòng lặp được gây ra bởi giá trị biểu thức bằng không hoặc việc thực hiện ngắt
tuyên bố.

cho ([biểu thức1]; [biểu thức2]; [biểu thức3]) câu lệnh
Câu lệnh for điều khiển việc thực hiện lặp lại câu lệnh. Biểu thức1 là
được đánh giá trước vòng lặp. Expression2 được đánh giá trước mỗi lần thực thi
tuyên bố. Nếu nó khác XNUMX, câu lệnh được đánh giá. Nếu nó bằng XNUMX, vòng lặp
Bị chấm dứt. Sau mỗi lần thực hiện câu lệnh, biểu thức 3 được đánh giá
trước khi đánh giá lại biểu thức2. Nếu biểu thức1 hoặc biểu thức 3 bị thiếu,
không có gì được đánh giá tại thời điểm chúng sẽ được đánh giá. Nếu biểu thức 2 là
thiếu, nó giống như thay thế giá trị 1 cho biểu thức2. (Tùy chọn
biểu thức là một phần mở rộng. POSIX bc yêu cầu cả ba biểu thức.)
sau đây là mã tương đương cho câu lệnh for:
biểu thức1;
while (biểu thức2) {
tuyên bố;
biểu thức3;
}

phá vỡ Câu lệnh này buộc phải thoát khỏi câu lệnh while gần đây nhất kèm theo hoặc
cho tuyên bố.

tiếp tục
Câu lệnh continue (một phần mở rộng) gây ra bao gồm gần đây nhất cho
câu lệnh để bắt đầu lần lặp tiếp theo.

tạm dừng lại Câu lệnh dừng (một phần mở rộng) là một câu lệnh được thực thi gây ra bc
bộ xử lý chỉ thoát ra khi nó được thực thi. Ví dụ: "if (0 == 1) halt" sẽ
không phải nguyên nhân bc chấm dứt vì lệnh dừng không được thực hiện.

trở lại Trả về giá trị 0 từ một hàm. (Xem phần về chức năng.)

trở lại ( biểu hiện )
Trả về giá trị của biểu thức từ một hàm. (Xem phần trên
các hàm.) Là phần mở rộng, không bắt buộc phải có dấu ngoặc đơn.

giả CÁC CÂU LỆNH
Những tuyên bố này không phải là tuyên bố theo nghĩa truyền thống. Chúng không được thực thi
các câu lệnh. Chức năng của chúng được thực hiện tại thời điểm "biên dịch".

giới hạn In các giới hạn cục bộ được thực thi bởi phiên bản cục bộ của bc. Đây là một phần mở rộng.

bỏ thuốc lá Khi câu lệnh thoát được đọc, bc bộ xử lý bị chấm dứt, bất kể
nơi tìm thấy câu lệnh thoát. Ví dụ: "if (0 == 1) bỏ" sẽ gây ra bc
để chấm dứt.

sự bảo đảm
In thông báo bảo hành dài hơn. Đây là một phần mở rộng.

CHỨC NĂNG
Các hàm cung cấp một phương pháp xác định một phép tính có thể được thực thi sau này.
Các chức năng trong bc luôn tính toán một giá trị và trả lại giá trị đó cho người gọi. Định nghĩa hàm
là "động" theo nghĩa là một hàm không được xác định cho đến khi gặp định nghĩa
trong đầu vào. Định nghĩa đó sau đó được sử dụng cho đến khi một hàm định nghĩa khác cho cùng
gặp phải tên. Định nghĩa mới sau đó thay thế định nghĩa cũ hơn. Một chức năng
được định nghĩa như sau:
định nghĩa tên ( thông số ) { dòng mới
danh sách tự động tuyên bố_list }
Một lời gọi hàm chỉ là một biểu thức của dạng "tên(thông số)".

Tham số là số hoặc mảng (một phần mở rộng). Trong định nghĩa hàm, không hoặc nhiều hơn
các tham số được xác định bằng cách liệt kê tên của chúng được phân tách bằng dấu phẩy. Tất cả các thông số là
gọi theo tham số giá trị. Mảng được chỉ định trong định nghĩa tham số bởi
ký hiệu "tên[]". Trong lệnh gọi hàm, các tham số thực tế là các biểu thức đầy đủ cho
tham số số. Ký hiệu tương tự được sử dụng để truyền mảng cũng như để xác định mảng
thông số. Mảng đã đặt tên được chuyển theo giá trị cho hàm. Kể từ khi chức năng
định nghĩa là động, số và kiểu tham số được kiểm tra khi một hàm
gọi là. Bất kỳ sự không phù hợp nào về số lượng hoặc loại thông số sẽ gây ra lỗi thời gian chạy. MỘT
lỗi thời gian chạy cũng sẽ xảy ra đối với cuộc gọi đến một hàm không xác định.

Sản phẩm danh sách tự động là danh sách tùy chọn của các biến để sử dụng "cục bộ". Cú pháp của
danh sách tự động (nếu có) là "tự động tên, ...; ". (Dấu chấm phẩy là tùy chọn.) Mỗi tên
là tên của một biến tự động. Mảng có thể được chỉ định bằng cách sử dụng cùng một ký hiệu như
được sử dụng trong các tham số. Các biến này có giá trị của chúng được đẩy lên một ngăn xếp ở đầu
chức năng. Các biến sau đó được khởi tạo bằng XNUMX và được sử dụng trong suốt
thực hiện chức năng. Khi thoát hàm, các biến này được xuất hiện để
giá trị ban đầu (tại thời điểm gọi hàm) của các biến này được khôi phục. Các
tham số thực sự là các biến tự động được khởi tạo thành một giá trị được cung cấp trong
chức năng gọi. Biến tự động khác với biến cục bộ truyền thống vì nếu
hàm A gọi hàm B, B có thể truy cập các biến tự động của hàm A bằng cách sử dụng
cùng tên, trừ khi hàm B đã gọi chúng là các biến tự động. Do thực tế là ô tô
các biến và tham số được đẩy vào một ngăn xếp, bc hỗ trợ các hàm đệ quy.

Phần thân hàm là một danh sách bc các câu lệnh. Một lần nữa, các câu lệnh được phân tách bằng
dấu chấm phẩy hoặc dòng mới. Các câu lệnh trả về gây ra sự kết thúc của một chức năng và
trả về một giá trị. Có hai phiên bản của câu lệnh trả về. Hình thức đầu tiên,
"trở lại", trả về giá trị 0 cho biểu thức gọi. Dạng thứ hai,"trở lại (
biểu hiện )", tính toán giá trị của biểu thức và trả về giá trị đó cho lệnh gọi
biểu hiện. Có một ngụ ý "trở lại (0)"ở cuối mỗi chức năng. Điều này cho phép
hàm kết thúc và trả về 0 mà không có câu lệnh trả về rõ ràng.

Các hàm cũng thay đổi cách sử dụng biến ibase. Tất cả các hằng số trong phần thân hàm
sẽ được chuyển đổi bằng cách sử dụng giá trị của ibase tại thời điểm gọi hàm. Những thay đổi của
ibase sẽ bị bỏ qua trong quá trình thực thi chức năng ngoại trừ tiêu chuẩn
chức năng đọc, sẽ luôn sử dụng giá trị hiện tại của ibase để chuyển đổi số.

Một số phần mở rộng đã được thêm vào các chức năng. Đầu tiên, định dạng của định nghĩa có
đã được thư giãn một chút. Tiêu chuẩn yêu cầu dấu ngoặc nhọn mở trên cùng một dòng với
định nghĩa từ khóa và tất cả các phần khác phải nằm trên các dòng sau. Phiên bản này của bc sẽ
cho phép bất kỳ số dòng mới nào trước và sau dấu ngoặc nhọn mở của hàm. Vì
ví dụ, các định nghĩa sau đây là hợp pháp.
định nghĩa d (n) {return (2 * n); }
xác định d (n)
{return (2 * n); }

Các chức năng có thể được định nghĩa là làm mất hiệu lực. Một hàm void trả về không có giá trị nào và do đó có thể không
được sử dụng ở bất kỳ nơi nào cần giá trị. Một hàm void không tạo ra bất kỳ đầu ra nào khi
được gọi bởi chính nó trên một dòng đầu vào. Từ khóa làm mất hiệu lực được đặt giữa từ khóa
định nghĩa và tên chức năng. Ví dụ, hãy xem xét phiên sau.
định nghĩa py (y) {print "--->", y, "<---", "\ n"; }
định nghĩa void px (x) {print "--->", x, "<---", "\ n"; }
py(1)
---> 1 <---
0
px(1)
---> 1 <---
từ py không phải là một hàm void, lệnh gọi của py(1) in đầu ra mong muốn và sau đó
in ra dòng thứ hai là giá trị của hàm. Vì giá trị của một hàm
điều đó không được đưa ra một câu lệnh trả về rõ ràng là số XNUMX, số XNUMX được in ra. Vì px(1),
không có số XNUMX nào được in bởi vì hàm là một hàm void.

Ngoài ra, gọi theo biến cho các mảng đã được thêm vào. Để khai báo một cuộc gọi theo mảng biến,
khai báo tham số mảng trong định nghĩa hàm trông giống như "*Tên[]". Các
lệnh gọi hàm vẫn giống như lệnh gọi theo mảng giá trị.

MÔN TOÁN THƯ VIỆN
If bc được gọi với -l tùy chọn, một thư viện toán học được tải trước và tỷ lệ mặc định là
đặt thành 20. Các hàm toán học sẽ tính toán kết quả của chúng theo thang đo được đặt tại thời điểm
cuộc gọi của họ. Thư viện toán học định nghĩa các chức năng sau:

s (x) Sin của x, x tính bằng radian.

NS (x) Côsin của x, x tính bằng radian.

một (x) Arctang của x, arctangent trả về radian.

l (x) Lôgarit tự nhiên của x.

x) Hàm số mũ khi nâng e lên giá trị x.

NS (n, x)
Hàm Bessel của số nguyên bậc n của x.

VÍ DỤ
In / Bin / sh, phần sau sẽ gán giá trị của "pi" cho biến shell pi.
pi = $ (echo "scale = 10; 4 *a(1) "| bc -l)

Sau đây là định nghĩa của hàm mũ được sử dụng trong thư viện toán học.
Hàm này được viết bằng POSIX bc.
quy mô = 20

/ * Sử dụng thực tế là e ^ x = (e ^ (x / 2)) ^ 2
Khi x đủ nhỏ, chúng ta sử dụng chuỗi:
e ^ x = 1 + x + x ^ 2/2! + x ^ 3/3! + ...
*/

xác định e (x) {
tự động a, d, e, f, i, m, v, z

/ * Kiểm tra dấu của x. * /
nếu (x <0) {
m = 1
x = -x
}

/ * Điều kiện tiên quyết x. * /
z = tỷ lệ;
tỷ lệ = 4 + z + .44 * x;
trong khi (x> 1) {
f + = 1;
x / = 2;
}

/ * Khởi tạo các biến. * /
v = 1 + x
một = x
d = 1

cho (i = 2; 1; i ++) {
e = (a * = x) / (d * = i)
nếu (e == 0) {
if (f> 0) while (f--) v = v * v;
tỷ lệ = z
if (m) return (1 / v);
return (v / 1);
}
v + = e
}
}

Sau đây là mã sử dụng các tính năng mở rộng của bc để thực hiện một chương trình đơn giản
để tính toán số dư sổ séc. Chương trình này tốt nhất nên được giữ trong một tệp để nó có thể
được sử dụng nhiều lần mà không cần phải gõ lại mỗi lần sử dụng.
quy mô = 2
print "\ nKiểm tra chương trình sách! \ n"
print "Hãy nhớ rằng, tiền gửi là giao dịch âm. \ n"
in "Thoát bằng giao dịch 0. \ n \ n"

print "Số dư ban đầu?"; bal = read ()
bal / = 1
in "\ n"
trong khi (1) {
"số dư hiện tại ="; balô
"Giao dịch? "; trans = read ()
nếu (trans == 0) ngắt;
bal - = trans
bal / = 1
}
bỏ thuốc lá

Sau đây là định nghĩa của hàm giai thừa đệ quy.
xác định f (x) {
if (x <= 1) return (1);
return (f (x-1) * x);
}

ĐỌC TIẾP KHOẢN NỢ LỰA CHỌN
GNU bc có thể được biên dịch (thông qua một tùy chọn cấu hình) để sử dụng GNU đường dẫn trình soạn thảo đầu vào
thư viện hoặc BSD giải phóng thư viện. Điều này cho phép người dùng thực hiện chỉnh sửa các dòng trước
gửi chúng đến bc. Nó cũng cho phép ghi lại lịch sử của các dòng trước đó đã nhập. Khi này
tùy chọn được chọn, bc có một biến đặc biệt hơn. Biến đặc biệt này, lịch sử is
số dòng lịch sử được giữ lại. Vì đường dẫn, giá trị -1 có nghĩa là một
không giới hạn số dòng lịch sử được giữ lại. Đặt giá trị của lịch sử đến một
số dương hạn chế số dòng lịch sử ở số lượng đã cho. Giá trị của 0
tắt tính năng lịch sử. Giá trị mặc định là 100. Để biết thêm thông tin, hãy đọc
hướng dẫn sử dụng cho GNU đường dẫn, lịch sử và BSD giải phóng các thư viện. Người ta không thể kích hoạt
cả hai đường dẫngiải phóng cùng một lúc.

KHÁC BIỆT
Phiên bản này của bc được triển khai từ bản nháp POSIX P1003.2 / D11 và chứa một số
sự khác biệt và phần mở rộng so với bản nháp và triển khai truyền thống. Nó là
không được thực hiện theo cách truyền thống bằng cách sử dụng dc(1). Phiên bản này là một quy trình duy nhất
phân tích cú pháp và chạy bản dịch mã byte của chương trình. Có một "không có giấy tờ"
tùy chọn (-c) khiến chương trình xuất mã byte sang đầu ra tiêu chuẩn thay thế
chạy nó. Nó chủ yếu được sử dụng để gỡ lỗi trình phân tích cú pháp và chuẩn bị toán học
thư viện.

Một nguồn khác biệt chính là tiện ích mở rộng, trong đó một tính năng được mở rộng để bổ sung thêm
chức năng và bổ sung, nơi các tính năng mới được thêm vào. Sau đây là danh sách của
sự khác biệt và phần mở rộng.

Môi trường LANG
Phiên bản này không tuân theo tiêu chuẩn POSIX trong quá trình xử lý LANG
biến môi trường và tất cả các biến môi trường bắt đầu bằng LC_.

tên Truyền thống và POSIX bc có các tên chữ cái đơn lẻ cho các hàm, biến và
mảng. Chúng đã được mở rộng thành tên nhiều ký tự bắt đầu bằng
chữ cái và có thể chứa các chữ cái, số và ký tự gạch dưới.

Strings
Các chuỗi không được phép chứa các ký tự NUL. POSIX nói rằng tất cả các ký tự phải
được bao gồm trong chuỗi.

POSIX cuối cùng bc không có cuối cùng Biến đổi. Một số triển khai của bc sử dụng khoảng thời gian
(.) theo cách tương tự.

so sánh
POSIX bc chỉ cho phép so sánh trong câu lệnh if, câu lệnh while và
biểu thức thứ hai của câu lệnh for. Ngoài ra, chỉ có một phép toán quan hệ là
được phép trong mỗi câu lệnh đó.

câu lệnh if, mệnh đề else
POSIX bc không có một mệnh đề khác.

cho tuyên bố
POSIX bc yêu cầu tất cả các biểu thức phải có trong câu lệnh for.

&&, ||,!
POSIX bc không có các toán tử logic.

đọc chức năng
POSIX bc không có chức năng đọc.

in tuyên bố
POSIX bc không có một câu lệnh in.

tiếp tục tuyên bố
POSIX bc không có một tuyên bố tiếp tục.

báo cáo trả lại
POSIX bc yêu cầu dấu ngoặc đơn xung quanh biểu thức trả về.

tham số mảng
POSIX bc không (hiện tại) hỗ trợ đầy đủ các tham số mảng. Ngữ pháp POSIX
cho phép các mảng trong định nghĩa hàm, nhưng không cung cấp phương thức để chỉ định
một mảng như một tham số thực tế. (Đây rất có thể là một sự giám sát trong
ngữ pháp.) Triển khai truyền thống của bc chỉ có gọi theo mảng giá trị
thông số.

định dạng chức năng
POSIX bc yêu cầu dấu ngoặc nhọn mở trên cùng dòng với định nghĩa từ khóa và
tự động câu lệnh trên dòng tiếp theo.

= +, = -, = *, = /, =%, = ^
POSIX bc không yêu cầu các toán tử gán "kiểu cũ" này phải được xác định.
Phiên bản này có thể cho phép các nhiệm vụ "kiểu cũ" này. Sử dụng câu lệnh giới hạn để
xem phiên bản đã cài đặt có hỗ trợ chúng không. Nếu nó hỗ trợ "kiểu cũ"
toán tử gán, câu lệnh "a = - 1" sẽ giảm a bằng 1 thay vì
thiết lập a đến giá trị -1.

dấu cách trong số
Các triển khai khác của bc cho phép khoảng trắng trong số. Ví dụ: "x = 1 3" sẽ
gán giá trị 13 cho biến x. Cùng một câu lệnh sẽ tạo ra một cú pháp
lỗi trong phiên bản này của bc.

lỗi và thực hiện
Việc triển khai này khác với các cách triển khai khác về mã sẽ là gì
được thực thi khi cú pháp và các lỗi khác được tìm thấy trong chương trình. Nếu lỗi cú pháp
được tìm thấy trong một định nghĩa hàm, khôi phục lỗi cố gắng tìm phần đầu của một
và tiếp tục phân tích cú pháp hàm. Khi lỗi cú pháp được tìm thấy trong
hàm, hàm sẽ không thể gọi được và trở thành không xác định. Lỗi cú pháp
trong mã thực thi tương tác sẽ làm mất hiệu lực của khối thực thi hiện tại. Các
khối thực thi được kết thúc bởi một dòng cuối xuất hiện sau khi hoàn thành
trình tự các câu lệnh. Ví dụ,
a = 1
b = 2
có hai khối thực thi và
{a = 1
b = 2}
có một khối thực thi. Bất kỳ lỗi thời gian chạy nào sẽ chấm dứt việc thực thi hiện tại
khối thực thi. Một cảnh báo thời gian chạy sẽ không kết thúc khối thực thi hiện tại.

Ngắt
Trong một phiên tương tác, tín hiệu SIGINT (thường được tạo ra bởi bộ điều khiển-
Ký tự C từ thiết bị đầu cuối) sẽ gây ra việc thực thi khối thực thi hiện tại
bị gián đoạn. Nó sẽ hiển thị lỗi "thời gian chạy" cho biết chức năng nào là
bị gián đoạn. Sau khi tất cả các cấu trúc thời gian chạy đã được dọn dẹp, một thông báo sẽ là
được in để thông báo cho người dùng rằng bc đã sẵn sàng để có thêm thông tin đầu vào. Tất cả đã được xác định trước đó
các hàm vẫn được xác định và giá trị của tất cả các biến không tự động là giá trị tại
điểm của sự gián đoạn. Tất cả các biến tự động và tham số hàm đều bị xóa
trong quá trình dọn dẹp. Trong một phiên không tương tác, tín hiệu SIGINT
sẽ chấm dứt toàn bộ hoạt động của bc.

GIỚI HẠN
Sau đây là các giới hạn hiện đang áp dụng cho việc này bc bộ xử lý. Một số người trong số họ có thể
đã được thay đổi bởi một cài đặt. Sử dụng câu lệnh giới hạn để xem các giá trị thực tế.

BC_BASE_MAX
Cơ sở đầu ra tối đa hiện được đặt ở 999. Cơ sở đầu vào tối đa là 16.

BC_DIM_MAX
Đây hiện là giới hạn tùy ý là 65535 khi được phân phối. Cài đặt của bạn
có thể khác

BC_SCALE_MAX
Số chữ số sau dấu thập phân được giới hạn ở chữ số INT_MAX. Cũng,
số chữ số trước dấu thập phân được giới hạn ở các chữ số INT_MAX.

BC_STRING_MAX
Giới hạn về số ký tự trong một chuỗi là ký tự INT_MAX.

số mũ
Giá trị của số mũ trong phép toán nâng (^) được giới hạn ở LONG_MAX.

tên biến
Giới hạn hiện tại về số lượng tên duy nhất là 32767 cho mỗi tên đơn giản
biến, mảng và hàm.

MÔI TRƯỜNG BIẾN


Các biến môi trường sau đây được xử lý bởi bc:

POSIXLY_CORRECT
Điều này cũng giống như -s tùy chọn.

BC_ENV_ARGS
Đây là một cơ chế khác để lấy các đối số bc. Định dạng giống như
đối số dòng lệnh. Các đối số này được xử lý trước, vì vậy bất kỳ tệp nào được liệt kê
trong môi trường đối số được xử lý trước bất kỳ tệp đối số dòng lệnh nào.
Điều này cho phép người dùng thiết lập các tùy chọn "tiêu chuẩn" và các tệp được xử lý tại
mọi lời kêu gọi của bc. Các tệp trong các biến môi trường thường sẽ
chứa các định nghĩa chức năng cho các chức năng mà người dùng muốn xác định mọi lúc bc is
chạy.

BC_LINE_LENGTH
Đây phải là một số nguyên xác định số ký tự trong một dòng đầu ra cho
những con số. Điều này bao gồm dấu gạch chéo ngược và các ký tự dòng mới cho các số dài. Như
phần mở rộng, giá trị bằng XNUMX sẽ tắt tính năng nhiều dòng. Bất kỳ giá trị nào khác
của biến nhỏ hơn 3 này sẽ đặt độ dài dòng thành 70.

CHẨN ĐOÁN


Nếu không thể mở bất kỳ tệp nào trên dòng lệnh, bc sẽ báo cáo rằng tệp là
không có sẵn và chấm dứt. Ngoài ra, có các chẩn đoán thời gian biên dịch và chạy
hãy tự giải thích.

Sử dụng bc trực tuyến bằng các dịch vụ onworks.net


Máy chủ & Máy trạm miễn phí

Tải xuống ứng dụng Windows & Linux

  • 1
    Bộ nạp khởi động Clover EFI
    Bộ nạp khởi động Clover EFI
    Dự án đã chuyển sang
    https://github.com/CloverHackyColor/CloverBootloader..
    Các tính năng: Khởi động macOS, Windows và Linux
    ở chế độ UEFI hoặc kế thừa trên Mac hoặc PC với
    UE...
    Tải xuống bộ tải khởi động Clover EFI
  • 2
    đoàn kết
    đoàn kết
    Tham gia cùng chúng tôi trong Gitter!
    https://gitter.im/unitedrpms-people/Lobby
    Bật kho lưu trữ URPMS trong
    hệ thống -
    https://github.com/UnitedRPMs/unitedrpms.github.io/bl...
    Tải về unitedrpms
  • 3
    Tăng cường thư viện C ++
    Tăng cường thư viện C ++
    Boost cung cấp di động miễn phí
    các thư viện C++ được đánh giá ngang hàng. Các
    nhấn mạnh vào các thư viện di động mà
    hoạt động tốt với Thư viện chuẩn C++.
    Xem http://www.bo...
    Tải xuống thư viện Boost C ++
  • 4
    VirtualGL
    VirtualGL
    VirtualGL chuyển hướng các lệnh 3D từ một
    Ứng dụng Unix / Linux OpenGL trên một
    GPU phía máy chủ và chuyển đổi
    kết xuất hình ảnh 3D thành một luồng video
    với cái gì ...
    Tải xuống VirtualGL
  • 5
    libusb
    libusb
    Thư viện để kích hoạt không gian người dùng
    các chương trình ứng dụng để giao tiếp với
    Thiết bị USB. Đối tượng: Nhà phát triển, Kết thúc
    Người dùng / Máy tính để bàn. Ngôn ngữ lập trình: C.
    Thể loại...
    Tải xuống libusb
  • 6
    VÒI
    VÒI
    SWIG là một công cụ phát triển phần mềm
    kết nối các chương trình được viết bằng C và
    C ++ với nhiều cấp độ cao
    ngôn ngữ lập trình. SWIG được sử dụng với
    khác nhau...
    Tải xuống SWIG
  • Khác »

Lệnh Linux

  • 1
    axetoniso
    axetoniso
    axetoniso - đồ họa giàu tính năng
    ứng dụng gắn và quản lý CD/DVD
    hình ảnh ...
    Chạy axetoniso
  • 2
    ace_gperf
    ace_gperf
    ace_gperf - tạo ra một hàm băm hoàn hảo
    chức năng từ một bộ khóa ...
    Chạy ace_gperf
  • 3
    coresendmsg
    coresendmsg
    coresendmsg - gửi tin nhắn API CORE
    đến daemon lõi-daemon ...
    Chạy coresendmsg
  • 4
    core_server
    core_server
    core_server - Máy chủ chính cho
    Thư rácBayes. MÔ TẢ: Hiện đang phục vụ
    chỉ giao diện web. Cắm vào
    người nghe cho các giao thức khác nhau là TBD.
    Điều này ...
    Chạy core_server
  • 5
    g.gui.gcpgrass
    g.gui.gcpgrass
    g.gui.gcp - Điều chỉnh địa lý bản đồ và
    cho phép quản lý các Điểm kiểm soát mặt đất.
    TỪ KHÓA: chung, GUI,
    định vị địa lý, GCP...
    Chạy g.gui.gcpgrass
  • 6
    g.gui.gmodelergrass
    g.gui.gmodelergrass
    g.gui.gmodeler - Người lập mô hình đồ họa.
    Cho phép tạo, chỉnh sửa tương tác
    và quản lý các mô hình. TỪ KHÓA: tổng quát,
    GUI, trình tạo mô hình đồ họa, quy trình làm việc ...
    Chạy g.gui.gmodelergrass
  • Khác »

Ad