EnglezăFrancezăSpaniolă

Ad


Favicon OnWorks

bc - Online în cloud

Rulați bc în furnizorul de găzduire gratuit OnWorks prin Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

Aceasta este comanda bc care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


bc - Un limbaj de calculatoare de precizie arbitrară

SINTAXĂ


bc [ -hlwsqv ] [opțiuni lungi] [ fişier ... ]

DESCRIERE


bc este un limbaj care acceptă numere de precizie arbitrare cu execuție interactivă a
declarații. Există unele asemănări în sintaxă cu limbajul de programare C. A
biblioteca standard de matematică este disponibilă prin opțiunea de linie de comandă. La cerere, biblioteca de matematică
este definit înainte de procesarea oricăror fișiere. bc începe prin procesarea codului din toate fișierele
listate pe linia de comandă în ordinea listată. După ce toate fișierele au fost procesate, bc
citește de la intrarea standard. Tot codul este executat pe măsură ce este citit. (Dacă un fișier conține un
comanda de oprire a procesorului, bc nu va citi niciodată din intrarea standard.)

Această versiune a bc conține mai multe extensii dincolo de tradiționale bc implementări și
proiectul standardului POSIX. Opțiunile din linia de comandă pot determina imprimarea acestor extensii a
avertisment sau pentru a fi respins. Acest document descrie limbajul acceptat de acesta
procesor. Extensiile vor fi identificate ca atare.

OPŢIUNI
-h, --ajutor
Imprimați utilizarea și ieșiți.

-i, --interactiv
Forțați modul interactiv.

-l, --mathlib
Definiți biblioteca standard de matematică.

-w, --avertizează
Dați avertismente pentru extensiile la POSIX bc.

-s, --standard
Procesați exact POSIX bc limba.

-q, --liniște
Nu tipăriți binevenit GNU bc normal.

-v, --versiune
Tipăriți numărul versiunii și drepturile de autor și renunțați.

NUMERELE
Cel mai elementar element în bc este numărul. Numerele sunt numere de precizie arbitrară.
Această precizie este atât în ​​partea întreagă, cât și în partea fracțională. Toate numerele sunt
reprezentat intern în zecimal și toate calculele se fac în zecimal. (Această versiune
trunchiază rezultatele din operațiile de împărțire și înmulțire.) Există două atribute ale
numerele, lungimea și scara. Lungimea este numărul total de zecimale semnificative
cifre într-un număr, iar scara este numărul total de cifre zecimale după zecimală
punct. De exemplu:
.000001 are lungimea 6 și scara 6.
1935.000 are o lungime de 7 și o scară de 3.

VARIABILE
Numerele sunt stocate în două tipuri de variabile, variabile simple și tablouri. Ambele simple
variabilele și variabilele matrice sunt denumite. Numele încep cu o literă urmată de orice număr
de litere, cifre și liniuțe de subliniere. Toate literele trebuie să fie minuscule. (Alfanumeric complet
numele sunt o extensie. În POSIX bc toate numele sunt o singură literă mică.) Tipul
de variabilă este clară de context deoarece toate numele de variabile ale matricei vor fi urmate de
paranteze ([]).

Există patru variabile speciale, scară, ibase, obase, și ultimul. scară definește modul în care unii
operațiunile folosesc cifre după virgulă zecimală. Valoarea implicită a scară este 0. ibase
și obase definiți baza de conversie pentru numerele de intrare și de ieșire. Implicit pentru ambele
intrarea și ieșirea sunt baza 10. ultimul (o extensie) este o variabilă care are valoarea lui
ultimul număr tipărit. Acestea vor fi discutate în detaliu, acolo unde este cazul. Toate
aceste variabile pot avea valori atribuite lor, precum și utilizate în expresii.

MESAJ
Comentarii în bc începe cu personajele /* și se încheie cu personajele */. Comentariile pot
începe oriunde și apar ca un singur spațiu în intrare. (Acest lucru determină comentarii la
delimitează alte elemente de intrare. De exemplu, un comentariu nu poate fi găsit în mijlocul unui
nume variabilă.) Comentariile includ orice linii noi (sfârșitul rândului) între început și sfârșit
a comentariului.

Pentru a sprijini utilizarea scripturilor pentru bc, un comentariu pe o singură linie a fost adăugat ca un
extensie. Un comentariu pe o singură linie începe la a # caracter și continuă până la următorul capăt al
linia. Caracterul de sfârșit de rând nu face parte din comentariu și este procesat în mod normal.

EXPRESII
Numerele sunt manipulate de expresii și enunțuri. Din moment ce limba a fost
concepute pentru a fi interactive, instrucțiunile și expresiile sunt executate cât mai curând posibil.
Nu există un program „principal”. În schimb, codul este executat pe măsură ce este întâlnit. (Funcții,
discutate în detaliu mai târziu, sunt definite atunci când sunt întâlnite.)

O expresie simplă este doar o constantă. bc convertește constantele în zecimală internă
numere folosind baza de intrare curentă, specificată de variabilă ibase. (Este o
excepţie în funcţii.) Valorile juridice ale ibase sunt de la 2 la 16. Atribuirea unei valori
în afara acestui interval la ibase va avea ca rezultat o valoare de 2 sau 16. Numerele introduse pot conține
caracterele 0–9 și A–F. (Notă: trebuie să fie majuscule. Literele mici sunt variabile
nume.) Numerele cu o singură cifră au întotdeauna valoarea cifrei, indiferent de valoare
of ibase. (adică A = 10.) Pentru numerele cu mai multe cifre, bc schimbă toate cifrele introduse mai mari sau
egal cu ibase cu valoarea lui ibase-1. Aceasta face numărul FFF fie întotdeauna cel mai mare 3
numărul de cifre al bazei de intrare.

Expresiile complete sunt similare cu multe alte limbi de nivel înalt. Din moment ce există doar unul
fel de număr, nu există reguli pentru amestecarea tipurilor. În schimb, există reguli cu privire la
scara de expresii. Fiecare expresie are o scară. Acesta este derivat din scara de
numerele originale, operația efectuată și în multe cazuri, valoarea variabilei
scară. Valorile legale ale variabilei scară sunt de la 0 la numărul maxim reprezentabil de un C
întreg.

În următoarele descrieri ale expresiilor legale, „expr” se referă la o expresie completă
iar „var” se referă la o variabilă simplă sau matrice. O variabilă simplă este doar a
nume
iar o variabilă matrice este specificată ca
nume[expres]
Cu excepția cazului în care este menționat în mod specific, scara rezultatului este scara maximă a
expresii implicate.

- expr Rezultatul este negația expresiei.

++ var Variabila este incrementată cu unu și noua valoare este rezultatul
expresie.

-- var Variabila este decrementată cu unu și noua valoare este rezultatul
expresie.

var ++
Rezultatul expresiei este valoarea variabilei și apoi variabila este
crescut cu unu.

var -- Rezultatul expresiei este valoarea variabilei și apoi variabila este
decrementat cu unu.

expr + expr
Rezultatul expresiei este suma celor două expresii.

expr - expr
Rezultatul expresiei este diferența dintre cele două expresii.

expr * expr
Rezultatul expresiei este produsul celor două expresii.

expr / expr
Rezultatul expresiei este câtul dintre cele două expresii. Scara de
rezultatul este valoarea variabilei scară.

expr % expr
Rezultatul expresiei este „restul” și se calculează în cele ce urmează
cale. Pentru a calcula a%b, mai întâi a/b este calculat la scară cifre. Acest rezultat este folosit
pentru a calcula a-(a/b)*b la scara maximului de scară+ scară(b) și scară(a).
If scară este setată la zero și ambele expresii sunt numere întregi această expresie este
funcția de rest întreg.

expr ^ expr
Rezultatul expresiei este valoarea primei ridicată la a doua. The
a doua expresie trebuie să fie un număr întreg. (Dacă a doua expresie nu este un număr întreg,
este generat un avertisment și expresia este trunchiată pentru a obține o valoare întreagă.)
Amploarea rezultatului este scară dacă exponentul este negativ. Dacă exponentul este
pozitiv scara rezultatului este minimul scalei primului
expresie înmulțită cu valoarea exponentului și maximul de scară si scara
a primei expresii. (ex. scară(a^b) = min(scale(a)*b, max( scară,
scale(a))).) Trebuie remarcat că expr^0 va returna întotdeauna valoarea 1.

( expr )
Acest lucru modifică prioritatea standard pentru a forța evaluarea expresiei.

var = expr
Variabilei i se atribuie valoarea expresiei.

var = expr
Aceasta este echivalentă cu „var = var expr” cu excepția faptului că partea „var”.
este evaluat o singură dată. Acest lucru poate face o diferență dacă „var” este o matrice.

Expresiile relaționale sunt un tip special de expresie care evaluează întotdeauna la 0 sau 1, 0
dacă relația este falsă și 1 dacă relația este adevărată. Acestea pot apărea în orice juridic
expresie. (POSIX bc necesită ca expresiile relaționale să fie folosite numai dacă, în timp ce,
iar pentru enunţuri şi că în ele se poate face un singur test relaţional.) Relaţionalul
operatorii sunt

expr1 < expr2
Rezultatul este 1 dacă expr1 este strict mai mic decât expr2.

expr1 <= expr2
Rezultatul este 1 dacă expr1 este mai mic sau egal cu expr2.

expr1 > expr2
Rezultatul este 1 dacă expr1 este strict mai mare decât expr2.

expr1 >= expr2
Rezultatul este 1 dacă expr1 este mai mare sau egal cu expr2.

expr1 == expr2
Rezultatul este 1 dacă expr1 este egal cu expr2.

expr1 != expr2
Rezultatul este 1 dacă expr1 nu este egal cu expr2.

Operațiunile booleene sunt, de asemenea, legale. (POSIX bc NU are operații booleene). The
rezultatul tuturor operațiilor booleene este 0 și 1 (pentru fals și adevărat) ca și în relațional
expresii. Operatorii booleeni sunt:

!expr Rezultatul este 1 dacă expr este 0.

expr && expr
Rezultatul este 1 dacă ambele expresii sunt diferite de zero.

expr || expr
Rezultatul este 1 dacă oricare dintre expresii este diferită de zero.

Prioritatea expresiei este următoarea: (de la cel mai mic la cel mai mare)
|| operator, asociativ stânga
operator &&, asociativ stânga
! operator, neasociativ
Operatori relaționali, asociativi stângi
Operator de atribuire, asociativ dreapta
Operatori + și -, asociativ stânga
Operatori *, / și %, asociativ stânga
^ operator, asociativ drept
unar - operator, nonasociativ
Operatori ++ și --, neasociativi

Această prioritate a fost aleasă astfel încât să fie compatibilă cu POSIX bc programele vor rula corect. Acest
va determina utilizarea operatorilor relaționali și logici să aibă un comportament neobișnuit
atunci când este utilizat cu expresii de atribuire. Luați în considerare expresia:
a = 3 < 5

Majoritatea programatorilor C ar presupune că acest lucru i-ar atribui rezultatul „3 < 5” (valoarea 1).
variabila „a”. Ce face asta în bc se atribuie valoarea 3 variabilei „a” și apoi
comparați de la 3 la 5. Cel mai bine este să folosiți paranteze când folosiți operatori relaționali și logici
cu operatorii de atribuire.

Mai sunt câteva expresii speciale care sunt furnizate în bc. Acestea au de-a face cu
funcții definite de utilizator și funcții standard. Toate apar ca "nume(parametrii)".
Consultați secțiunea privind funcțiile pentru funcțiile definite de utilizator. Funcțiile standard sunt:

lungime (expresie)
Valoarea funcției de lungime este numărul de cifre semnificative din
expresie.

citit ( )
Funcția de citire (o extensie) va citi un număr de la intrarea standard,
indiferent de locul unde are loc funcția. Atenție, acest lucru poate cauza probleme cu
amestecarea datelor și programului în intrarea standard. Cea mai bună utilizare pentru această funcție
se află într-un program scris anterior care necesită intrare de la utilizator, dar nu permite niciodată
codul programului care urmează să fie introdus de la utilizator. Valoarea funcției de citire este
număr citit de la intrarea standard folosind valoarea curentă a variabilei ibase
pentru baza de conversie.

scara (expresie)
Valoarea funcției de scară este numărul de cifre după punctul zecimal în
expresia.

sqrt (expresie)
Valoarea funcției sqrt este rădăcina pătrată a expresiei. Dacă
expresia este negativă, este generată o eroare de rulare.

DECLARAȚII
Enunțurile (ca în majoritatea limbilor algebrice) oferă secvențierea expresiei
evaluare. În bc instrucțiunile sunt executate „cât mai curând posibil”. Executarea are loc când
a fost întâlnită o nouă linie și există una sau mai multe afirmații complete. Din cauza asta
execuție imediată, liniile noi sunt foarte importante în bc. De fapt, atât un punct și virgulă, cât și un
newline sunt folosite ca separatori de instrucțiuni. O nouă linie plasată incorect va cauza a
eroare de sintaxă. Deoarece liniile noi sunt separatoare de instrucțiuni, este posibil să ascundeți o linie nouă
prin utilizarea caracterului backslash. Secvența "\ ", Unde apare linia nouă
la bc ca spațiu alb în loc de o linie nouă. O listă de declarații este o serie de declarații
separate prin punct și virgulă și linii noi. Următoarea este o listă de bc declarații și ce
fac: (Lucrurile cuprinse între paranteze ([]) sunt părți opționale ale declarației.)

expresie
Această afirmație face unul din două lucruri. Dacă expresia începe cu „
...”, se consideră a fi o declarație de atribuire. Dacă
expresia nu este o declarație de atribuire, expresia este evaluată și tipărită
la ieșire. După ce numărul este tipărit, este tipărită o nouă linie. De exemplu,
„a=1” este o instrucțiune de atribuire și „(a=1)” este o expresie care are încorporat un
misiune. Toate numerele care sunt tipărite sunt tipărite în baza specificată de
variabil obase. Valorile legale pentru obase sunt de la 2 la BC_BASE_MAX. (Vezi
secţiunea LIMITE.) Pentru bazele de la 2 la 16, metoda obişnuită de scriere a numerelor este
folosit. Pentru baze mai mari de 16, bc folosește o metodă de cifre cu mai multe caractere de
tipărirea numerelor în care fiecare cifră de bază mai mare este tipărită ca număr de bază 10.
Cifrele cu mai multe caractere sunt separate prin spații. Fiecare cifră conține numărul
de caractere necesare pentru a reprezenta valoarea de bază zece a „obase-1”. Din moment ce numere
sunt de precizie arbitrară, este posibil ca unele numere să nu fie imprimate pe o singură ieșire
linia. Aceste numere lungi vor fi împărțite pe linii folosind „\” ca ultimul
caracter pe o linie. Numărul maxim de caractere tipărite pe rând este de 70. Datorită
la natura interactivă a bc, imprimarea unui număr provoacă efectul secundar de
atribuirea valorii tipărite variabilei speciale ultimul. Acest lucru permite utilizatorului să
recuperați ultima valoare imprimată fără a fi nevoie să reintroduceți expresia care a fost tipărită
numarul. Atribuirea către ultimul este legală și va suprascrie ultima valoare tipărită
cu valoarea atribuită. Valoarea nou atribuită va rămâne până la următoarea
este tipărit un număr sau îi este atribuită o altă valoare ultimul. (Unele instalații pot
permite utilizarea unei singure puncte (.) care nu face parte dintr-un număr ca mână scurtă
notaţie pentru pentru ultimul.)

șir Șirul este imprimat la ieșire. Șirurile încep cu un caracter ghilimele duble
și conține toate caracterele până la următorul caracter ghilimele duble. Toate personajele
sunt luate la propriu, inclusiv orice noua linie. Nu este tipărit niciun caracter de linie nouă după
șirul.

imprima listă
Declarația print (o extensie) oferă o altă metodă de ieșire. Lista"
este o listă de șiruri și expresii separate prin virgule. Fiecare șir sau
expresia este tipărită în ordinea listei. Nu este tipărită nicio linie nouă de încheiere.
Expresiile sunt evaluate și valoarea lor este tipărită și atribuită variabilei
ultimul. Șirurile din instrucțiunea print sunt tipărite la ieșire și pot conține
caractere speciale. Caracterele speciale încep cu caracterul bară oblică inversă (\).
Caracterele speciale recunoscute de bc sunt „a” (alerta sau clopoțel), „b” (backspace),
„f” (alimentare formular), „n” (linie nouă), „r” (întoarcerea căruciorului), „q” (ghilimele duble), „t”
(filă) și „\” (bară oblică inversă). Orice alt caracter care urmează bara oblică inversă va fi
ignorat.

{ statement_list }
Aceasta este afirmația compusă. Permite gruparea mai multor declarații
împreună pentru executare.

if ( expresie ) declarație1 [altfel declarație 2]
Instrucțiunea if evaluează expresia și execută statement1 sau statement2
în funcţie de valoarea expresiei. Dacă expresia este diferită de zero,
instrucțiunea 1 este executată. Dacă declarația2 este prezentă și valoarea expresiei
este 0, apoi instrucțiunea2 este executată. (Clauza else este o extensie.)

în timp ce ( expresie ) enunț
Instrucțiunea while va executa instrucțiunea în timp ce expresia este diferită de zero.
Evaluează expresia înainte de fiecare execuție a instrucțiunii. Încetarea
a buclei este cauzată de o valoare a expresiei zero sau de executarea unei pauze
afirmație.

pentru ( [expresia1] ; [expresia2] ; [expresia3] ) instrucțiune
Instrucțiunea for controlează execuția repetată a instrucțiunii. Expresia1 este
evaluat înaintea buclei. Expresia2 este evaluată înainte de fiecare execuție a
afirmație. Dacă este diferit de zero, declarația este evaluată. Dacă este zero, bucla
este terminat. După fiecare execuție a instrucțiunii, expresia3 este evaluată
înainte de reevaluarea expresiei2. Dacă expresia1 sau expresia3 lipsesc,
nimic nu este evaluat în momentul în care ar fi evaluat. Dacă expresia2 este
lipsește, este același lucru cu înlocuirea valorii 1 cu expresia2. (Opțional
expresiile sunt o extensie. POSIX bc necesită toate cele trei expresii.) The
următorul este codul echivalent pentru instrucțiunea for:
expresie1;
în timp ce (expresie2) {
afirmație;
expresie3;
}

rupe Această declarație determină o ieșire forțată a celei mai recente instrucțiuni while sau
pentru declarație.

continua
Declarația continue (o extensie) provoacă cea mai recentă includere for
declarație pentru a începe următoarea iterație.

oprire Instrucțiunea stop (o extensie) este o instrucțiune executată care provoacă bc
procesorul să se închidă numai când este executat. De exemplu, „dacă (0 == 1) se oprește”.
nu cauza bc să se încheie deoarece oprirea nu este executată.

reveni Returnează valoarea 0 dintr-o funcție. (Consultați secțiunea despre funcții.)

reveni (expresie)
Returnează valoarea expresiei dintr-o funcție. (Vezi secțiunea despre
funcții.) Ca extensie, parantezele nu sunt necesare.

PSEUDO DECLARAȚII
Aceste afirmații nu sunt declarații în sensul tradițional. Ele nu sunt executate
declarații. Funcția lor este îndeplinită în timpul „compilării”.

Limitele Tipăriți limitele locale impuse de versiunea locală a bc. Aceasta este o extensie.

părăsi Când este citită declarația de renunțare, bc procesorul este terminat, indiferent de
unde se găsește declarația quit. De exemplu, „dacă (0 == 1) renunță” va cauza bc
a termina.

garanţie
Imprimați o notificare de garanție mai lungă. Aceasta este o extensie.

FUNCȚII
Funcțiile oferă o metodă de definire a unui calcul care poate fi executat ulterior.
Functioneaza in bc calculați întotdeauna o valoare și returnați-o apelantului. Definiții de funcții
sunt „dinamice” în sensul că o funcție este nedefinită până când este întâlnită o definiție
în intrare. Această definiție este apoi folosită până la o altă funcție de definiție pentru aceeași
numele este întâlnit. Noua definiție înlocuiește apoi definiția mai veche. O functie
este definit după cum urmează:
defini nume ( parametrii ) { linie nouă
auto_list lista_declarații }
Un apel de funcție este doar o expresie de forma „nume(parametrii)".

Parametrii sunt numere sau matrice (o extensie). În definiția funcției, zero sau mai mult
parametrii sunt definiți prin listarea numelor lor separate prin virgule. Toți parametrii sunt
apelarea parametrilor valorici. Matricele sunt specificate în definiția parametrului de către
notatie "nume[]„. În apelul de funcție, parametrii actuali sunt expresii complete pentru
parametri numerici. Aceeași notație este folosită pentru trecerea matricelor ca și pentru definirea matricei
parametrii. Matricea numită este transmisă prin valoare funcției. Din moment ce funcţia
definițiile sunt dinamice, numerele și tipurile parametrilor sunt verificate atunci când o funcție este
numit. Orice nepotrivire a numărului sau a tipurilor de parametri va cauza o eroare de rulare. A
eroare de rulare va apărea și pentru apelul la o funcție nedefinită.

auto_list este o listă opțională de variabile care sunt pentru utilizare „locală”. Sintaxa lui
lista automată (dacă este prezentă) este "Auto nume, ... ;". (Punctul și virgulă este opțional.) Fiecare nume
este numele unei variabile automate. Matricele pot fi specificate folosind aceeași notație ca
utilizate în parametri. Aceste variabile au valorile împinse într-o stivă la începutul lui
functia. Variabilele sunt apoi inițializate la zero și utilizate pe tot parcursul
executarea functiei. La ieșirea funcției, aceste variabile sunt afișate astfel încât
valoarea inițială (la momentul apelului funcției) a acestor variabile este restaurată. The
parametrii sunt într-adevăr variabile automate care sunt inițializate la o valoare furnizată în
apel de funcție. Variabilele automate sunt diferite de variabilele locale tradiționale deoarece dacă
funcția A apelează funcția B, B poate accesa variabilele automate ale funcției A doar folosind
același nume, cu excepția cazului în care funcția B le-a numit variabile automate. Datorită faptului că auto
variabilele și parametrii sunt împinși într-o stivă, bc suportă funcții recursive.

Corpul funcției este o listă de bc declarații. Din nou, afirmațiile sunt separate prin
punct și virgulă sau linii noi. Instrucțiunile return provoacă terminarea unei funcții și
returnarea unei valori. Există două versiuni ale declarației de returnare. Prima formă,
"reveni", returnează valoarea 0 expresiei de apelare. A doua formă, "reveni (
expresie )", calculează valoarea expresiei și returnează acea valoare la apelare
expresie. Există un "implicit"reveni (0)" la sfârșitul fiecărei funcții. Acest lucru permite a
funcție pentru a termina și a returna 0 fără o instrucțiune de returnare explicită.

Funcțiile modifică, de asemenea, utilizarea variabilei ibase. Toate constantele din corpul funcției
va fi convertit folosind valoarea lui ibase în momentul apelului de funcție. Schimbări ale
ibase vor fi ignorate în timpul execuției funcției cu excepția standardului
funcţie citit, care va folosi întotdeauna valoarea curentă a ibase pentru conversia numerelor.

Au fost adăugate mai multe extensii la funcții. În primul rând, formatul definiției are
fost ușor relaxat. Standardul cere ca bretele de deschidere să fie pe aceeași linie cu
defini cuvântul cheie și toate celelalte părți trebuie să fie pe rândurile următoare. Această versiune a bc voi
permiteți orice număr de linii noi înainte și după acolada de deschidere a funcției. Pentru
de exemplu, următoarele definiții sunt legale.
define d (n) { return (2*n); }
definiți d (n)
{ return (2*n); }

Funcțiile pot fi definite ca anula. O funcție void nu returnează nicio valoare și, prin urmare, este posibil să nu fie
folosit în orice loc care are nevoie de o valoare. O funcție void nu produce nicio ieșire când
apelat singur pe o linie de intrare. Cuvântul cheie anula este plasat între cuvântul cheie
defini și numele funcției. De exemplu, luați în considerare următoarea sesiune.
define py (y) { print "--->", y, "<---", "\n"; }
define void px (x) { print "--->", x, "<---", "\n"; }
py(1)
--->1<---
0
px(1)
--->1<---
Întrucât py nu este o funcție nulă, apelul de py(1) tipărește rezultatul dorit și apoi
afișează oa doua linie care este valoarea funcției. Deoarece valoarea unei funcţii
căreia nu i se dă o instrucțiune de returnare explicită este zero, zero este tipărit. Pentru px(1),
nu este imprimat zero deoarece funcția este o funcție nulă.

De asemenea, a fost adăugat apelul prin variabilă pentru matrice. Pentru a declara un apel prin matrice de variabile,
declarația parametrului matricei în definiția funcției arată ca „*Nume[]"
apelul la funcție rămâne același cu matricele apel după valoare.

MATH BIBLIOTECĂ
If bc este invocat cu -l opțiunea, o bibliotecă de matematică este preîncărcată și scara implicită este
setată la 20. Funcțiile matematice își vor calcula rezultatele la scara stabilită la momentul respectiv
de chemarea lor. Biblioteca de matematică definește următoarele funcții:

s (x) Sinusul lui x, x este în radiani.

c (x) Cosinusul lui x, x este în radiani.

la (x) Arctangenta lui x, arctangente returnează radiani.

l (x) Logaritmul natural al lui x.

și (x) Funcția exponențială de ridicare a e la valoarea x.

j (n,x)
Funcția Bessel de ordinul întreg n al lui x.

EXEMPLE
In / Bin / sh, următoarele vor atribui valoarea „pi” variabilei shell pi.
pi=$(echo "scale=10; 4*a(1)" | bc -l)

Mai jos este definiția funcției exponențiale utilizate în biblioteca de matematică.
Această funcție este scrisă în POSIX bc.
scara = 20

/* Folosește faptul că e^x = (e^(x/2))^2
Când x este suficient de mic, folosim seria:
e^x = 1 + x + x^2/2! + x^3/3! + ...
*/

definește e(x) {
auto a, d, e, f, i, m, v, z

/* Verificați semnul lui x. */
dacă (x<0) {
m = 1
x = -x
}

/* Condiția preliminară x. */
z = scară;
scara = 4 + z + .44*x;
în timp ce (x > 1) {
f += 1;
x /= 2;
}

/* Inițializați variabilele. */
v = 1+x
a = x
d = 1

pentru (i=2; 1; i++) {
e = (a *= x) / (d *= i)
dacă (e == 0) {
dacă (f>0) în timp ce (f--) v = v*v;
scara = z
if (m) return (1/v);
întoarcere (v/1);
}
v += e
}
}

Următorul este codul care utilizează caracteristicile extinse ale bc pentru a implementa un program simplu
pentru calcularea soldurilor din carnetul de cecuri. Acest program este cel mai bine păstrat într-un fișier, astfel încât să poată fi
folosit de multe ori fără a fi nevoie să-l reintroduceți la fiecare utilizare.
scara=2
printează „\nVerifică programul cărții!\n”
print " Amintiți-vă, depozitele sunt tranzacții negative.\n"
print "Ieșire printr-o tranzacție 0.\n\n"

tipăriți „Sold inițial?”; bal = citit()
bal /= 1
tipăriți „\n”
în timp ce (1) {
"sold curent = "; bal
„tranzacție?”; trans = citit()
dacă (trans == 0) rupere;
bal -= trans
bal /= 1
}
părăsi

Următoarea este definiția funcției factoriale recursive.
definiți f (x) {
dacă (x <= 1) returnează (1);
return (f(x-1) * x);
}

CITESTE LINIA AND LIBEDIT OPŢIUNI
GNU bc poate fi compilat (prin intermediul unei opțiuni de configurare) pentru a utiliza GNU Citeste linia editor de intrare
bibliotecă sau BSD libedit bibliotecă. Acest lucru permite utilizatorului să editeze linii înainte
trimiţându-i la bc. De asemenea, permite un istoric al liniilor tastate anterioare. Când aceasta
opțiunea este selectată, bc mai are o variabilă specială. Această variabilă specială, istorie is
numărul de rânduri ale istoriei reținute. Pentru Citeste linia, o valoare de -1 înseamnă că an
sunt păstrate un număr nelimitat de linii istorice. Setarea valorii lui istorie la
număr pozitiv restricționează numărul de linii istorice la numărul dat. Valoarea 0
dezactivează caracteristica istoric. Valoarea implicită este 100. Pentru mai multe informații, citiți
manuale de utilizare pentru GNU Citeste linia, istorie și BSD libedit biblioteci. Nu se poate activa
atât Citeste linia și libedit în acelaşi timp.

DIFERENȚE
Această versiune a bc a fost implementat din proiectul POSIX P1003.2/D11 și conține mai multe
diferențe și extinderi față de proiectul și implementările tradiționale. Este
neimplementat în mod tradițional folosind dc(1). Această versiune este un singur proces
care analizează și rulează o traducere de cod de octeți a programului. Există un „nedocumentat”
opțiunea (-c) care face ca programul să scoată codul octet către ieșirea standard
de a-l rula. A fost folosit în principal pentru depanarea parserului și pregătirea matematicii
bibliotecă.

O sursă majoră de diferențe sunt extensiile, în care o caracteristică este extinsă pentru a adăuga mai multe
funcționalități și completări, unde sunt adăugate noi caracteristici. Următoarea este lista de
diferențe și extensii.

mediul LANG
Această versiune nu este conformă cu standardul POSIX în procesarea LANG
variabila de mediu și toate variabilele de mediu care încep cu LC_.

denumiri Traditional si POSIX bc au nume cu o singură literă pentru funcții, variabile și
matrice. Au fost extinse pentru a fi nume cu mai multe caractere care încep cu a
literă și poate conține litere, cifre și caracterul de subliniere.

Corzi
Nu este permis ca șirurile de caractere să conțină caractere NUL. POSIX spune că toate personajele trebuie
fi incluse în șiruri.

ultimul POSIX bc nu are a ultimul variabil. Unele implementări ale bc folosiți perioada
(.) intr-un mod similar.

comparații
POSIX bc permite comparații numai în instrucțiunile if, while și the
a doua expresie a declarației for. De asemenea, o singură operație relațională este
permise în fiecare dintre aceste declarații.

declarația if, clauza else
POSIX bc nu are o clauză else.

pentru declaratie
POSIX bc necesită ca toate expresiile să fie prezente în declarația for.

&&, ||, !
POSIX bc nu are operatori logici.

funcția de citire
POSIX bc nu are o funcție de citire.

tipărire declarație
POSIX bc nu are o declarație de tipărire.

declarație continuă
POSIX bc nu are o declarație de continuare.

declarație de returnare
POSIX bc necesită paranteze în jurul expresiei returnate.

parametrii matricei
POSIX bc nu acceptă (în prezent) parametrii matricei în totalitate. Gramatica POSIX
permite matrice în definițiile funcțiilor, dar nu oferă o metodă de specificat
o matrice ca parametru real. (Aceasta este cel mai probabil o neglijență în
gramatică.) Implementări tradiţionale ale bc au numai matrice apel după valoare
parametri.

formatul funcției
POSIX bc necesită bretele de deschidere pe aceeași linie ca și defini cuvântul cheie și
Auto declarație de pe rândul următor.

=+, =-, =*, =/, =%, =^
POSIX bc nu necesită definirea acestor operatori de atribuire „stil vechi”.
Această versiune poate permite aceste sarcini „în stil vechi”. Utilizați declarația de limite pentru
vezi dacă versiunea instalată le acceptă. Dacă susține „stilul vechi”
operatori de atribuire, instrucțiunea „a =- 1” va scădea a cu 1 în loc de
instalare a la valoarea -1.

spații în numere
Alte implementări ale bc permite spații în numere. De exemplu, „x=1 3” ar fi
atribuiți valoarea 13 variabilei x. Aceeași declarație ar provoca o sintaxă
eroare în această versiune a bc.

erori si executie
Această implementare diferă de alte implementări în ceea ce privește codul care va fi
executat atunci când sunt găsite erori de sintaxă și alte erori în program. Dacă o eroare de sintaxă
se găsește într-o definiție a funcției, recuperarea erorilor încearcă să găsească începutul lui a
declarație și continuați să analizați funcția. Odată ce o eroare de sintaxă este găsită în
funcția, funcția nu va fi apelabilă și devine nedefinită. Erori de sintaxă
în codul de execuție interactiv va invalida blocul de execuție curent. The
blocul de execuție se încheie cu un capăt de linie care apare după o finalizare
succesiune de afirmații. De exemplu,
a = 1
b = 2
are două blocuri de execuție și
{a = 1
b = 2}
are un singur bloc de execuție. Orice eroare de rulare va opri execuția curentului
bloc de execuție. Un avertisment de rulare nu va termina blocul de execuție curent.

Întrerupe
În timpul unei sesiuni interactive, semnalul SIGINT (generat de obicei de control-
caracterul C de la terminal) va determina executarea blocului de execuție curent
să fie întreruptă. Va afișa o eroare de „runtime” care indică ce funcție a fost
întrerupt. După ce toate structurile de rulare au fost curățate, va apărea un mesaj
tipărit pentru a anunța utilizatorul că bc este gata pentru mai multe intrări. Toate definite anterior
funcțiile rămân definite și valoarea tuturor variabilelor non-auto este valoarea la
punctul de întrerupere. Toate variabilele automate și parametrii funcției sunt eliminate
în timpul procesului de curățare. În timpul unei sesiuni non-interactive, semnalul SIGINT
va încheia întreaga rulare a bc.

LIMITE ALE
Următoarele sunt limitele existente în prezent pentru aceasta bc procesor. Unii dintre ei pot
au fost modificate printr-o instalare. Utilizați declarația de limite pentru a vedea valorile reale.

BC_BASE_MAX
Baza maximă de ieșire este setată în prezent la 999. Baza maximă de intrare este 16.

BC_DIM_MAX
Aceasta este în prezent o limită arbitrară de 65535, așa cum este distribuit. Instalația dvs
poate fi diferit.

BC_SCALE_MAX
Numărul de cifre după virgulă zecimală este limitat la INT_MAX cifre. De asemenea,
numărul de cifre înainte de virgulă zecimală este limitat la INT_MAX cifre.

BC_STRING_MAX
Limita numărului de caractere dintr-un șir este de INT_MAX caractere.

exponent
Valoarea exponentului în operația de creștere (^) este limitată la LONG_MAX.

nume variabile
Limita actuală a numărului de nume unice este de 32767 pentru fiecare dintre simple
variabile, matrice și funcții.

MEDIUL VARIABILE


Următoarele variabile de mediu sunt procesate de bc:

POSIXLY_CORRECT
Acesta este la fel ca -s opțiune.

BC_ENV_ARGS
Acesta este un alt mecanism pentru a obține argumente bc. Formatul este același cu cel
argumentele liniei de comandă. Aceste argumente sunt procesate mai întâi, deci toate fișierele listate
în mediu argumentele sunt procesate înaintea oricăror fișiere cu argumente în linia de comandă.
Acest lucru permite utilizatorului să configureze opțiuni „standard” și fișiere la care să fie procesate
fiecare invocare a bc. Fișierele din variabilele de mediu ar fi de obicei
conțin definiții de funcții pentru funcțiile pe care utilizatorul dorește să fie definite de fiecare dată bc is
alerga.

BC_LINE_LENGTH
Acesta ar trebui să fie un număr întreg care specifică numărul de caractere dintr-o linie de ieșire pentru
numerele. Aceasta include caracterele backslash și newline pentru numere lungi. La fel de
o extensie, valoarea zero dezactivează caracteristica cu mai multe linii. Orice altă valoare
a acestei variabile care este mai mică de 3 setează lungimea liniei la 70.

DIAGNOSTIC


Dacă orice fișier de pe linia de comandă nu poate fi deschis, bc va raporta că fișierul este
indisponibil și se încheie. De asemenea, există diagnostice de compilare și de rulare care ar trebui
fii de la sine explicat.

Utilizați bc online folosind serviciile onworks.net


Servere și stații de lucru gratuite

Descărcați aplicații Windows și Linux

  • 1
    Bootloader Clover EFI
    Bootloader Clover EFI
    Proiectul s-a mutat la
    https://github.com/CloverHackyColor/CloverBootloader..
    Caracteristici: Porniți macOS, Windows și Linux
    în UEFI sau modul moștenit pe Mac sau PC cu
    UE...
    Descărcați bootloaderul Clover EFI
  • 2
    unitedrpms
    unitedrpms
    Alăturați-vă nouă în Gitter!
    https://gitter.im/unitedrpms-people/Lobby
    Activați depozitul URPMS din dvs
    sistem -
    https://github.com/UnitedRPMs/unitedrpms.github.io/bl...
    Descărcați unitedrpms
  • 3
    Boost bibliotecile C ++
    Boost bibliotecile C ++
    Boost oferă portabil gratuit
    biblioteci C++ revizuite de colegi. The
    se pune accent pe bibliotecile portabile care
    funcționează bine cu biblioteca standard C++.
    Vezi http://www.bo...
    Descărcați bibliotecile Boost C++
  • 4
    VirtualGL
    VirtualGL
    VirtualGL redirecționează comenzile 3D de la a
    Aplicația Unix/Linux OpenGL pe un
    GPU pe partea de server și convertește
    a redat imagini 3D într-un flux video
    cu care ...
    Descărcați VirtualGL
  • 5
    libusb
    libusb
    Bibliotecă pentru a activa spațiul utilizatorului
    programe de aplicație cu care să comunicați
    dispozitive USB. Public: Dezvoltatori, End
    Utilizatori/Desktop. Limbajul de programare: C.
    Categorii ...
    Descărcați libusb
  • 6
    ÎNGHIŢITURĂ
    ÎNGHIŢITURĂ
    SWIG este un instrument de dezvoltare software
    care conectează programele scrise în C și
    C++ cu o varietate de nivel înalt
    limbaje de programare. SWIG este folosit cu
    diferit...
    Descărcați SWIG
  • Mai mult »

Comenzi Linux

Ad