dc - un calculator cu precizie arbitrară (la alegere)
dc [-V] [--version] [-h] [--help]
[-e expresie-script] [--expression=expresie-script]
[-f fișier-script] [--file=fișier-script]
[fișier ...]
dc este un calculator de birou cu notație
poloneză inversă (postfixată), care acceptă
aritmetică de precizie nelimitată. De asemenea, vă
permite să definiți și să apelați
macrocomenzi. În mod normal, dc citește de la intrarea
standard; dacă i se dau argumente de comandă, acestea sunt
nume de fișiere, iar dc citește și
execută conținutul fișierelor înainte de a citi
de la intrarea standard. Toate ieșirile normale se trimit la
ieșirea standard; toate ieșirile de eroare se trimit la
ieșirea de eroare standard.
Un calculator cu notație inversă (postfixată)
stochează numerele într-o stivă. Introducerea unui
număr îl împinge pe stivă. Operațiile
aritmetice scot argumentele din stivă și împing
rezultatele.
Pentru a introduce un număr în dc,
introduceți cifrele (folosind literele majuscule de la A la
F ca „cifre” atunci când lucrați cu baze
de intrare mai mari de zece), cu un punct zecimal opțional.
Notația exponențială nu este acceptată. Pentru a
introduce un număr negativ, începeți numărul cu
„_”. „-” nu poate fi utilizat în acest
scop, deoarece este un operator binar pentru scădere în
schimb. Pentru a introduce două numere succesive, separați-le
cu spații sau linii noi. Acestea nu au nicio semnificație
drept comenzi.
dc poate fi apelat cu următoarele opțiuni de
linie de comandă:
- -V
- --version
- Afișează versiunea de dc care este rulată
și o notificare privind drepturile de autor, apoi iese.
- -h
- --help
- Afișează un mesaj de utilizare care rezumă pe scurt
aceste opțiuni din linia de comandă și adresa de
raportare a erorilor, apoi iese.
- -e script
- --expression=script
- Adaugă comenzile din script la setul de comenzi care
urmează să fie executate în timpul procesării
datelor de intrare.
- -f
fișier-script
- --file=fișier-script
- Adaugă comenzile conținute în fișierul
fișier-script la setul de comenzi care urmează
să fie executate în timpul procesării datelor de
intrare.
Dacă după procesarea celor de mai sus
rămân parametri de linie de comandă, aceștia
sunt interpretați ca fiind numele fișierelor de intrare care
urmează să fie procesate. Un nume de fișier - se
referă la fluxul de intrare standard. Intrarea standard va fi
procesată dacă nu sunt specificate fișiere de script
sau expresii.
- p
- Imprimă valoarea din partea de sus a stivei, fără a
modifica stiva. După valoare se imprimă o linie
nouă.
- n
- Imprimă valoarea din partea de sus a stivei, o
înlătură și nu imprimă o linie
nouă după.
- P
- Afișează valoarea din partea de sus a stivei. Dacă
este un șir de caractere, acesta este pur și simplu
afișat fără o linie nouă la
sfârșit. În caz contrar, este un număr, iar
partea întreagă a valorii sale absolute este
imprimată sub forma unui flux de octeți „base
(UCHAR_MAX+1)”. Presupunând că (UCHAR_MAX+1) este 256
(așa cum este pe majoritatea mașinilor cu octeți pe 8
biți), secvența KSK0k1/_1Ss [ls*]Sxd0>x
[256~Ssd0<x]dsxxsx[q]Sq[Lsd0>qaPlxx] dsxxsx0sqLqsxLxLxLK+k ar
putea, de asemenea, îndeplini această funcție; (o
mare parte din complexitatea codului nativ-dc de mai sus se
datorează ~ calculării caracterelor în sens invers
și dorinței de a se asigura că toate registrele ajung
înapoi în starea lor inițială).
- f
- Imprimă întregul conținut al stivei
fără a modifica nimic. Aceasta este o comandă
bună de utilizat dacă vă pierdeți sau
doriți să vă dați seama care a fost efectul
unei comenzi.
- +
- Extrage două valori din stivă, le adună și
afișează rezultatul. Precizia rezultatului este
determinată doar de valorile argumentelor și este
suficientă pentru a fi exactă.
- -
- Extrage două valori, scade prima valoare extrasă din cea
de-a doua valoare extrasă și afișează
rezultatul.
- *
- Extrage două valori, le înmulțește și
afișează rezultatul. Numărul de cifre de
fracție din rezultat depinde de valoarea curentă a preciziei
și de numărul de cifre de fracție din cele
două argumente.
- /
- Extrage două valori, împarte a doua valoare extrasă
din prima valoare extrasă și afișează
rezultatul. Numărul de cifre ale fracției este specificat de
valoarea preciziei.
- %
- Extrage două valori, calculează restul
împărțirii pe care ar trebui să o facă
comanda / și îl afișează. Valoarea
calculată este aceeași cu cea calculată de
secvența Sd dld/ Ld*- .
- ~
- Extrage două valori, împarte a doua valoare extrasă
din prima valoare extrasă. Câtul este afișat mai
întâi, iar restul este afișat în continuare.
Numărul de cifre ale fracției utilizate în
împărțire este specificat de valoarea de precizie;
(secvența SdSn lnld/ LnLd% ar putea, de asemenea,
îndeplini această funcție, cu o verificare a erorilor
un pic diferită).
- ^
- Extrage două valori și le multiplică prin
exponenți, folosind prima valoare extrasă ca exponent
și a doua ca bază. Partea de fracție a exponentului
este ignorată. Valoarea de precizie specifică numărul
de cifre de fracție din rezultat.
- |
- Extrage trei valori și calculează o multiplicare
exponențială modulară.. Prima valoare extrasă
este utilizată ca modul de reducere; această valoare trebuie
să fie un număr diferit de zero și trebuie să
fie un număr întreg. A doua valoare extrasă este
utilizată ca exponent; această valoare trebuie să fie
un număr nenegativ, iar orice parte fracționară a
acestui exponent va fi ignorată. A treia valoare extrasă
este baza care va fi multiplicată exponențial; aceasta
trebuie să fie un număr întreg. Pentru numere
întregi mici, acest lucru este ca și secvența
Sm^Lm%, dar, spre deosebire de ^, această
comandă va funcționa cu exponenți oricât de
mari.
- v
- Extrage o valoare, calculează rădăcina
pătrată a acesteia și o afișează.
Maximul dintre valoarea de precizie și precizia argumentului este
utilizat pentru a determina numărul de cifre de fracție din
rezultat.
Majoritatea operațiilor aritmetice sunt afectate de
„valoarea de precizie”, pe care o puteți stabili cu
ajutorul comenzii k. Valoarea implicită a preciziei este zero,
ceea ce înseamnă că toate operațiile aritmetice,
cu excepția adunării și a scăderii, produc
rezultate întregi.
- c
- Șterge stiva, lăsând-o goală.
- d
- Duplică valoarea din partea de sus a stivei, introducând o
altă copie a acesteia. Astfel, „4d*p”
calculează 4 la pătrat și afișează
rezultatul.
- r
- Inversează ordinea (interschimbă) primele două valori
din stivă; (acest lucru poate fi realizat și cu
secvența SaSbLaLb.)
- R
- Extrage partea de sus a stivei sub forma unui număr întreg
n. Rotește ciclic elementele din partea de sus n a
stivei actualizate. Dacă n este pozitiv, atunci
direcția de rotație va face ca elementul cel mai de sus
să fie al doilea din vârf; dacă n este
negativ, atunci rotația va face ca elementul cel mai de sus
să fie al n-lea element din vârf. Dacă
adâncimea stivei este mai mică decât n, atunci
întreaga stivă este rotită (în direcția
corespunzătoare), fără a fi raportată nicio
eroare.
dc oferă cel puțin 256 de registre de
memorie, fiecare fiind denumit cu un singur caracter. Puteți stoca un
număr sau un șir de caractere într-un registru
și îl puteți prelua ulterior.
- sr
- Extrage valoarea din partea de sus a stivei și o stochează
în registrul r.
- lr
- Copiază valoarea din registrul r și o introduce
în stivă. Valoarea 0 este recuperată dacă
registrul este neinițializat. Acest lucru nu modifică
conținutul lui r.
Fiecare registru conține, de asemenea, propria sa
stivă. Valoarea curentă a registrului reprezintă partea
superioară a stivei registrului.
- Sr
- Extrage valoarea din partea de sus a stivei (principale) și o
introduce în stiva registrului r. Valoarea anterioară
a registrului devine inaccesibilă.
- Lr
- Extrage valoarea din partea de sus a stivei registrului r și
o introduce în stiva principală. Valoarea anterioară
din stiva registrului r, dacă există, este acum
accesibilă prin intermediul comenzii lr.
dc are trei parametri care îi controlează
funcționarea: precizia, baza de intrare și baza de
ieșire. Precizia specifică numărul de cifre de
fracție care trebuie păstrate în rezultatul
majorității operațiilor aritmetice. Baza de intrare
controlează interpretarea numerelor introduse; toate numerele
introduse utilizează această bază. Baza de
ieșire este utilizată pentru imprimarea numerelor.
Bazele de intrare și de ieșire sunt parametri
separați; le puteți face inegale, ceea ce poate fi util sau
confuz. Baza de intrare trebuie să fie cuprinsă între 2
și 16 inclusiv. Baza de ieșire trebuie să fie cel
puțin 2. Precizia trebuie să fie zero sau mai mare. Precizia
se măsoară întotdeauna în cifre zecimale,
indiferent de baza curentă de intrare sau de ieșire.
- i
- Extrage valoarea din partea de sus a stivei și o utilizează
pentru a stabili baza de intrare.
- o
- Extrage valoarea din partea de sus a stivei și o utilizează
pentru a stabili baza de ieșire.
- k
- Extrage valoarea din partea de sus a stivei și o utilizează
pentru a stabili precizia.
- I
- Introduce în stivă baza de intrare curentă.
- O
- Introduce în stivă baza de ieșire
curentă.
- K
- Introduce precizia curentă în stivă.
Șiruri
dc are o capacitate limitată de a opera cu
șiruri de caractere, precum și cu numere; singurele lucruri pe
care le puteți face cu șirurile de caractere sunt imprimarea
lor și executarea lor ca macro-uri (ceea ce înseamnă
că conținutul șirului de caractere este procesat ca
fiind comenzi dc)). Toate registrele și stiva pot
conține șiruri de caractere, iar dc știe
întotdeauna dacă orice obiect dat este un șir de
caractere sau un număr. Unele comenzi, cum ar fi operațiile
aritmetice, cer numere ca argumente și afișează erori
în cazul în care primesc șiruri de caractere. Alte
comenzi pot accepta fie un număr, fie un șir de caractere; de
exemplu, comanda p poate accepta oricare dintre acestea și
afișează obiectul în funcție de tipul
său.
- [caractere]
- Creează un șir de caractere care conține
caractere (cuprins între caracterele pereche [
și ]) și îl introduce în stivă.
De exemplu, [foo]P imprimă caracterele foo
(fără linie nouă).
- a
- Partea de sus a stivei este extrasă. Dacă a fost un
număr, atunci octetul de rang inferior al acestui număr este
convertit într-un șir de caractere și introdus
în stivă. În caz contrar, partea de sus a stivei era
un șir de caractere, iar primul caracter al acelui șir este
introdus înapoi.
- x
- Scoate o valoare din stivă și o execută ca o
macrocomandă. În mod normal, ar trebui să fie un
șir de caractere; dacă este un număr, acesta este pur
și simplu reintrodus în stivă. De exemplu,
[1p]x execută macrocomanda 1p care introduce 1
în stivă și imprimă 1 pe o linie
separată.
Macrocomenzile sunt cel mai adesea stocate în registre;
[1p]sa stochează o macrocomandă pentru a imprima
1 în registrul a, iar lax invocă
această macrocomandă.
- >r
- Extrage două valori din stivă și le compară,
presupunând că sunt numere, executând
conținutul registrului r ca o macrocomandă
dacă valoarea inițială din partea de sus a stivei
este mai mare. Astfel, 1 2>a va invoca conținutul
registrului a, iar 2 1>a nu o va face.
- !>r
- Similar, dar invocă macrocomanda în cazul în care
numărul inițial din partea de sus a stivei nu este mai mare
decât (mai mic sau egal cu) cel ce a fost al doilea în
partea de sus a stivei.
- <r
- Similar, dar invocă macrocomanda dacă numărul
inițial din partea de sus a stivei este mai mic.
- !<r
- Similar, dar invocă macrocomanda în cazul în care
numărul inițial din partea de sus al stivei nu este mai mic
decât (mai mare sau egal cu) cel ce a fost al doilea în
partea de sus a stivei.
- =r
- Similar, dar invocă macrocomanda dacă cele două
numere extrase sunt egale.
- !=r
- Similar, dar invocă macrocomanda dacă cele două
numere extrase nu sunt egale.
- ?
- Citește o linie din terminal și o execută.
Această comandă permite unei macrocomenzi să solicite
informații de la utilizator.
- q
- iese dintr-o macrocomandă și, de asemenea, din macrocomanda
care a invocat -o. Dacă este apelată de la nivelul superior
sau de la o macrocomandă care a fost apelată direct de la
nivelul superior, comanda q va determina dc să
iasă.
- Q
- Extrage o valoare din stivă și o utilizează ca
număr de niveluri de execuție a macrocomenzii care trebuie
să fie abandonate. Astfel, 3Q iese de pe trei niveluri.
Comanda Q nu va determina niciodată ieșirea lui
dc.
- Z
- Extrage o valoare din stivă, calculează numărul de
cifre zecimale pe care le are (sau numărul de caractere,
dacă este un șir de caractere) și introduce acest
număr. Numărătoarea cifrelor pentru un număr
nu include zerourile de început, chiar dacă acestea
apar în dreapta punctului rădăcină
(virgulei).
- X
- Extrage o valoare din stivă, calculează numărul de
cifre de fracție pe care le are și introduce acest
număr. În cazul unui șir de caractere, valoarea
introdusă este 0.
- z
- Introduce adâncimea curentă a stivei: numărul de
obiecte de pe stivă înainte de executarea comenzii
z.
- !
- Va rula restul liniei ca o comandă de sistem.
Rețineți că analizarea comenzilor !<, != și
!> are prioritate, astfel încât, dacă
doriți să executați o comandă care
începe cu <, = sau >, va trebui să
adăugați un spațiu după !.
- #
- Va interpreta restul liniei ca fiind un comentariu.
- :r
- Va extrage primele două valori din stivă. A doua valoare
veche din vârf va fi stocată în matricea r,
indexată cu vechea valoare din vârful stivei.
- ;r
- Extrage partea de sus a stivei și o utilizează ca index
în matricea r. Valoarea selectată este apoi
introdusă în stivă.
Rețineți că fiecare instanță
stivuită a unui registru are propria matrice asociată. Astfel,
1 0:a 0Sa 2 0:a La 0;ap va afișa 1, deoarece 2 a fost stocat
într-o instanță a lui 0:a care a fost ulterior
extrasă.
- ~/.dcrc
- Comenzile din acest fișier vor fi executate atunci când
dc este rulat pentru prima dată.
Trimiteți rapoartele de erori prin e-mail la
bug-dc@gnu.org.
Traducerea în limba română a acestui manual a
fost făcută de Remus-Gabriel Chelu
<remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită;
citiți
Licența
publică generală GNU Versiunea 3 sau o versiune
ulterioară cu privire la condiții privind drepturile de autor.
NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea
acestui manual, vă rugăm să trimiteți un e-mail
la
translation-team-ro@lists.sourceforge.net.