bc- (1) halaman manual

bc- (1) halaman manual

Nama

BC - bahasa kalkulator presisi sewenang -wenang

Sintaksis

bc [ -hlwsqv ] [opsi panjang] [ mengajukan… ]

Versi: kapan

Halaman pria ini mendokumentasikan GNU BC Versi 1.06.

Keterangan

bc adalah bahasa yang mendukung angka presisi sewenang -wenang dengan eksekusi pernyataan interaktif. Ada beberapa kesamaan dalam sintaks dengan bahasa pemrograman C. Pustaka Matematika Standar tersedia dengan opsi baris perintah. Jika diminta, pustaka matematika didefinisikan sebelum memproses file apa pun. bc Dimulai dengan memproses kode dari semua file yang tercantum pada baris perintah dalam urutan yang terdaftar. Setelah semua file telah diproses, bc dibaca dari input standar. Semua kode dijalankan saat dibaca. (Jika file berisi perintah untuk menghentikan prosesor, bc tidak akan pernah membaca dari input standar.)

Versi ini bc berisi beberapa ekstensi di luar tradisional bc Implementasi dan standar draft POSIX. Opsi baris perintah dapat menyebabkan ekstensi ini mencetak peringatan atau ditolak. Dokumen ini menjelaskan bahasa yang diterima oleh prosesor ini. Ekstensi akan diidentifikasi seperti itu.

Pilihan

-H, -Help
Cetak penggunaan dan keluar.
-i, -interactive
Memaksa mode interaktif.
-L, -mathlib
Tentukan Perpustakaan Matematika Standar.
-W, -warn
Berikan peringatan untuk ekstensi ke POSIX bc.
-S, -Standard
Memproses persis POSIX bc bahasa.
-Q, -Quiet
Jangan mencetak GNU BC Normal Selamat Datang.
-V, -Versi
Cetak nomor versi dan hak cipta dan berhenti.

Angka

Elemen paling dasar di bc adalah nomornya. Angka adalah angka presisi sewenang -wenang. Presisi ini ada di bagian integer dan bagian pecahan. Semua angka direpresentasikan secara internal dalam desimal dan semua perhitungan dilakukan secara desimal. (Versi ini memotong hasil dari operasi pembagian dan gandakan.) Ada dua atribut angka, panjang dan skala. Panjangnya adalah jumlah total angka desimal yang signifikan dalam angka dan skalanya adalah jumlah total digit desimal setelah titik desimal. Misalnya:

 .000001 memiliki panjang 6 dan skala 6. 1935.000 memiliki panjang 7 dan skala 3.

Variabel

Angka disimpan dalam dua jenis variabel, variabel sederhana dan array. Variabel sederhana dan variabel array dinamai. Nama dimulai dengan surat yang diikuti oleh sejumlah surat, angka dan garis bawah. Semua huruf harus huruf kecil. (Nama alpha-numerik penuh adalah ekstensi. Di POSIX bc Semua nama adalah surat huruf kecil tunggal.) Jenis variabel jelas oleh konteksnya karena semua nama variabel array akan diikuti oleh tanda kurung ([]).

Ada empat variabel khusus, Skala, Ibase, Obase, Dan terakhir. skala mendefinisikan bagaimana beberapa operasi menggunakan digit setelah titik desimal. Nilai default dari skala adalah 0. Ibase Dan obase Tentukan basis konversi untuk nomor input dan output. Default untuk input dan output adalah basis 10. terakhir (ekstensi) adalah variabel yang memiliki nilai nomor cetak terakhir. Ini akan dibahas secara lebih rinci jika perlu. Semua variabel ini mungkin memiliki nilai yang ditetapkan untuk mereka serta digunakan dalam ekspresi.

Komentar

Komentar di bc Mulailah dengan karakter /* dan akhiri dengan karakter */. Komentar dapat dimulai di mana saja dan muncul sebagai satu ruang dalam input. (Ini menyebabkan komentar untuk membatasi item input lainnya. Misalnya, komentar tidak dapat ditemukan di tengah nama variabel.) Komentar termasuk setiap Newline (akhir baris) antara awal dan akhir komentar.

Untuk mendukung penggunaan skrip untuk bc, Komentar satu baris telah ditambahkan sebagai ekstensi. Satu komentar satu baris dimulai dari a # karakter dan berlanjut ke ujung baris berikutnya. Karakter akhir dari garis bukan bagian dari komentar dan diproses secara normal.

Ekspresi

Jumlahnya dimanipulasi oleh ekspresi dan pernyataan. Karena bahasa dirancang untuk menjadi interaktif, pernyataan dan ekspresi dieksekusi sesegera mungkin. Tidak ada program "utama". Sebaliknya, kode dijalankan seperti yang ditemui. (Fungsi, dibahas secara rinci nanti, didefinisikan saat ditemui.)

Ekspresi sederhana hanya konstan. bc Mengubah konstanta menjadi bilangan desimal internal menggunakan basis input saat ini, ditentukan oleh variabel Ibase. (Ada pengecualian dalam fungsi.) Nilai -nilai hukum dari Ibase adalah 2 hingga 16. Menetapkan nilai di luar kisaran ini Ibase akan menghasilkan nilai 2 atau 16. Nomor input mungkin berisi karakter 0-9 dan A-F. (Catatan: Mereka pasti ibukota. Huruf kecil adalah nama variabel.) Angka satu digit selalu memiliki nilai digit terlepas dari nilainya Ibase. (Saya.e. A = 10.) Untuk nomor multi-digit, bc mengubah semua digit input lebih besar atau sama dengan ibase dengan nilai Ibase-1. Ini membuat angkanya Fff Selalu menjadi nomor 3 digit terbesar dari basis input.

Ekspresi penuh mirip dengan banyak bahasa tingkat tinggi lainnya. Karena hanya ada satu jenis angka, tidak ada aturan untuk jenis pencampuran. Sebaliknya, ada aturan tentang skala ekspresi. Setiap ekspresi memiliki skala. Ini berasal dari skala angka asli, operasi yang dilakukan dan dalam banyak kasus, nilai variabel skala. Nilai hukum dari variabel skala adalah 0 ke bilangan maksimum yang dapat diwakili oleh bilangan c integer.

Dalam deskripsi ekspresi hukum berikut, "Expr" mengacu pada ekspresi lengkap dan "var" mengacu pada variabel sederhana atau array. Variabel sederhana hanyalah a

nama

dan variabel array ditentukan sebagai

nama[expr]

Kecuali disebutkan secara khusus skala hasil adalah skala maksimum dari ekspresi yang terlibat.

- expr
Hasilnya adalah negasi ekspresi.
++ var
Variabel bertambah berdasarkan satu dan nilai baru adalah hasil dari ekspresi.
- var
Variabel dikurangi satu dan nilai baru adalah hasil dari ekspresi.
var ++
Hasil ekspresi adalah nilai dari
variabel dan kemudian variabel bertambah.
var -
Hasil ekspresi adalah nilai variabel dan kemudian variabel dikurangi oleh satu.
Expr + expr
Hasil ekspresi adalah jumlah dari dua ekspresi.
Expr - expr
Hasil ekspresi adalah perbedaan dari dua ekspresi.
Expr * expr
Hasil ekspresi adalah produk dari dua ekspresi.
Expr / expr
Hasil ekspresi adalah hasil bagi dari dua ekspresi. Skala hasilnya adalah nilai variabel skala.
Expr % expr
Hasil ekspresi adalah "sisa" dan dihitung dengan cara berikut. Untuk menghitung A%B, A/B pertama dihitung skala digit. Hasil itu digunakan untuk menghitung a- (a/b)*b ke skala maksimum skala+skala (b) dan skala (a). Jika skala diatur ke nol dan kedua ekspresi adalah integer ekspresi ini adalah fungsi sisa integer.
Expr ^ expr
Hasil ekspresi adalah nilai yang pertama dinaikkan ke yang kedua. Ekspresi kedua harus menjadi bilangan bulat. (Jika ekspresi kedua bukan integer, peringatan dihasilkan dan ekspresi terpotong untuk mendapatkan nilai integer.) Skala hasilnya skala Jika eksponen negatif. Jika eksponen positif, skala hasil adalah minimum skala ekspresi pertama kali nilai eksponen dan maksimum skala dan skala ekspresi pertama. (e.G. skala (a^b) = min (skala (a)*b, maks ( skala, skala (a))).) Perlu dicatat bahwa Expr^0 akan selalu mengembalikan nilai 1.
(Expr)
Ini mengubah prioritas standar untuk memaksa evaluasi ekspresi.
var = expr
Variabel diberi nilai ekspresi.
var = expr
Ini setara dengan "var = var expr" dengan pengecualian bahwa bagian "var" hanya dievaluasi sekali. Ini dapat membuat perbedaan jika "var" adalah array.

Ekspresi relasional adalah jenis ekspresi khusus yang selalu mengevaluasi ke 0 atau 1, 0 jika hubungannya salah dan 1 jika hubungannya benar. Ini mungkin muncul dalam ekspresi hukum apa pun. (POSIX BC mensyaratkan bahwa ekspresi relasional hanya digunakan dalam jika, sementara, dan untuk pernyataan dan bahwa hanya satu tes relasional yang dapat dilakukan di dalamnya.) Operator relasional adalah

Expr1 < expr2
Hasilnya adalah 1 jika Expr1 benar -benar kurang dari Expr2.
Expr1 <= expr2
Hasilnya adalah 1 jika expr1 kurang dari atau sama dengan expr2.
Expr1> expr2
Hasilnya adalah 1 jika expr1 lebih besar dari expr2.
expr1> = expr2
Hasilnya adalah 1 jika Expr1 lebih besar dari atau sama dengan Expr2.
Expr1 == Expr2
Hasilnya adalah 1 jika expr1 sama dengan expr2.
Expr1 != Expr2
Hasilnya adalah 1 jika expr1 tidak sama dengan expr2.

Operasi Boolean juga legal. (POSIX bc tidak memiliki operasi boolean). Hasil dari semua operasi boolean adalah 0 dan 1 (untuk salah dan benar) seperti dalam ekspresi relasional. Operator Boolean adalah:

!expr
Hasilnya adalah 1 jika expr adalah 0.
expr && expr
Hasilnya adalah 1 jika kedua ekspresi tidak nol.
Expr || expr
Hasilnya adalah 1 jika ekspresi salah satu nol.

Ekspresi prioritas adalah sebagai berikut: (terendah ke tertinggi)

|| Operator, Operator Asosiatif && Kiri, Asosiatif Kiri ! operator, nonassociative
Operator relasional,
Operator penugasan asosiatif kiri, asosiatif kanan + dan - operator,
Operator Asosiatif *, / dan % Kiri, Operator Asosiatif Kiri, Asosiatif Kanan
Operator Unary - Operator, Nonassociative ++ dan -

Prioritas ini dipilih sehingga posix patuh bc Program akan berjalan dengan benar. Ini akan menyebabkan penggunaan operator relasional dan logis memiliki beberapa perilaku yang tidak biasa saat digunakan dengan ekspresi penugasan. Pertimbangkan ekspresinya:

A = 3 < 5

Sebagian besar programmer C akan menganggap ini akan menetapkan hasil dari “3 < 5” (the value 1) to the variable “a”. What this does in bc berikan nilai 3 ke variabel "a" dan kemudian bandingkan 3 hingga 5. Yang terbaik adalah menggunakan tanda kurung saat menggunakan operator relasional dan logis dengan operator penugasan.

Ada beberapa ekspresi khusus yang disediakan di bc. Ini berkaitan dengan fungsi yang ditentukan pengguna dan fungsi standar. Mereka semua muncul sebagai “nama(parameter) “. Lihat bagian fungsi untuk fungsi yang ditentukan pengguna. Fungsi standar adalah:

panjang (ekspresi)
Nilai fungsi panjangnya adalah jumlah angka signifikan dalam ekspresi.
membaca ( )
Fungsi baca (ekstensi) akan membaca angka dari input standar, di mana pun terjadi fungsi. Waspadalah, ini dapat menyebabkan masalah dengan pencampuran data dan program dalam input standar. Penggunaan terbaik untuk fungsi ini adalah dalam program tertulis sebelumnya yang membutuhkan input dari pengguna, tetapi tidak pernah memungkinkan kode program untuk dimasukkan dari pengguna. Nilai fungsi baca adalah angka yang dibaca dari input standar menggunakan nilai saat ini dari variabel Ibase untuk basis konversi.
skala (ekspresi)
Nilai fungsi skala adalah jumlah digit setelah titik desimal dalam ekspresi.
SQRT (ekspresi)
Nilai fungsi SQRT adalah akar kuadrat dari ekspresi. Jika ekspresi negatif, kesalahan waktu lari dihasilkan.

Pernyataan

Pernyataan (seperti dalam kebanyakan bahasa aljabar) memberikan pengurutan evaluasi ekspresi. Di dalam bc pernyataan dieksekusi “sesegera mungkin.“Eksekusi terjadi ketika garis baru ditemui dan ada satu atau lebih pernyataan lengkap. Karena eksekusi langsung ini, Newline sangat penting bc. Faktanya, baik titik koma dan baru digunakan sebagai pemisah pernyataan. Newline yang ditempatkan secara tidak tepat akan menyebabkan kesalahan sintaksis. Karena Newline adalah pemisah pernyataan, dimungkinkan untuk menyembunyikan garis baru dengan menggunakan karakter backslash. Urutan "\", di mana newline tampaknya bc sebagai whitespace, bukan garis baru. Daftar pernyataan adalah serangkaian pernyataan yang dipisahkan oleh titik koma dan newline. Berikut ini adalah daftar bc Pernyataan dan apa yang mereka lakukan: (hal -hal yang terlampir dalam tanda kurung ([]) adalah bagian opsional dari pernyataan tersebut.)

ekspresi
Pernyataan ini melakukan salah satu dari dua hal. Jika ekspresi dimulai dengan ""..."", itu dianggap sebagai pernyataan penugasan. Jika ekspresi bukan pernyataan penugasan, ekspresi dievaluasi dan dicetak ke output. Setelah nomor dicetak, garis baru dicetak. Misalnya, ""A = 1"" adalah pernyataan penugasan dan ""(a = 1)"" adalah ekspresi yang memiliki tugas tertanam. Semua angka yang dicetak dicetak di pangkalan yang ditentukan oleh variabel obase. Nilai -nilai hukum untuk obase adalah 2 hingga bc_base_max. (Lihat Batas Bagian.) Untuk pangkalan 2 hingga 16, metode penulisan yang biasa digunakan. Untuk pangkalan lebih dari 16, bc menggunakan metode digit multi-karakter untuk mencetak angka di mana setiap digit dasar yang lebih tinggi dicetak sebagai basis 10 basis. Digit multi-karakter dipisahkan oleh ruang. Setiap digit berisi jumlah karakter yang diperlukan untuk mewakili nilai sepuluh dasar ""Obase-1"". Karena angka adalah presisi sewenang -wenang, beberapa angka mungkin tidak dapat dicetak pada baris output tunggal. Angka -angka panjang ini akan dibagi melintasi baris menggunakan ""\"" sebagai karakter terakhir pada baris. Jumlah maksimum karakter yang dicetak per baris adalah 70. Karena sifat interaktif bc, Mencetak angka menyebabkan efek samping menetapkan nilai yang dicetak ke variabel khusus terakhir. Ini memungkinkan pengguna untuk memulihkan nilai terakhir yang dicetak tanpa harus mengetik ulang ekspresi yang mencetak angka. Menugaskan ke terakhir legal dan akan menimpa nilai cetak terakhir dengan nilai yang ditetapkan. Nilai yang baru ditetapkan akan tetap sampai nomor berikutnya dicetak atau nilai lain ditetapkan terakhir. (Beberapa instalasi memungkinkan penggunaan satu periode (.) yang bukan bagian dari angka sebagai notasi tangan pendek untuk terakhir.)
rangkaian
String dicetak ke output. String mulai dengan karakter kutipan ganda dan berisi semua karakter sampai karakter kutipan ganda berikutnya. Semua karakter diambil secara harfiah, termasuk newline apa pun. Tidak ada karakter garis baru yang dicetak setelah string.
mencetak daftar
Pernyataan cetak (ekstensi) memberikan metode output lain. ""Daftar"" adalah daftar string dan ekspresi yang dipisahkan oleh koma. Setiap string atau ekspresi dicetak dalam urutan daftar. Tidak ada penghentian newline yang dicetak. Ekspresi dievaluasi dan nilainya dicetak dan ditugaskan ke variabel terakhir. String dalam pernyataan cetak dicetak ke output dan mungkin berisi karakter khusus. Karakter khusus dimulai dengan karakter backslash (\). Karakter khusus yang dikenali oleh bc adalah ""a"" (waspada atau bel), ""b"" (backspace), ""f"" (bentuk feed), ""n"" (newline), ""r"" (carriage return), ""q"" (kutipan ganda), ""t ”(Tab), dan“ \ ”(backslash). Karakter lain yang mengikuti backslash akan diabaikan.
pernyataan_list
Ini adalah pernyataan majemuk. Ini memungkinkan beberapa pernyataan untuk dikelompokkan bersama untuk dieksekusi.
jika Pernyataan (ekspresi) [kalau tidak pernyataan2]
Pernyataan IF mengevaluasi ekspresi dan menjalankan pernyataan1 atau pernyataan2 tergantung pada nilai ekspresi. Jika ekspresinya bukan nol, pernyataan1 dieksekusi. Jika pernyataan2 ada dan nilai ekspresi adalah 0, maka pernyataan2 dieksekusi. (Klausa lain adalah ekstensi.)
ketika Pernyataan (ekspresi)
Pernyataan while akan menjalankan pernyataan saat ekspresi tidak nol. Itu mengevaluasi ekspresi sebelum setiap eksekusi pernyataan. Penghentian loop disebabkan oleh nilai ekspresi nol atau eksekusi pernyataan break.
untuk ([ekspresi1]