dc(1)

NUME
dc - un calculator cu precizie arbitrară (la alegere)

SINOPSIS
dc [-V] [--version] [-h] [--help]
   [-e expresie-script] [--expression=expresie-script]
   [-f fișier-script] [--file=fișier-script]
   [fișier ...]

DESCRIERE

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.

OPȚIUNI
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.

Comenzi de imprimare

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.

Aritmetică

+   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.

Controlul stivei

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.

Registre

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.

Parametrii

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.

Consultare de stare

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.

Diverse

!   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ă.

FIȘIERE

~/.dcrc
    Comenzile din acest fișier vor fi executate atunci când dc este rulat pentru prima dată.

ERORI

Trimiteți rapoartele de erori prin e-mail la bug-dc@gnu.org.

TRADUCERE
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.