Provided by: manpages-hu_20010119-5_all bug

NÉV

       dc - tetszőleges pontosságú számológép

ÁTTEKINTÉS

       dc

LEÍRÁS

       A   dc   egy   korlátlan  pontosságú  számítások  elvégzésére  alkalmas
       fordított-lengyel (postfix) asztali számológép,  amely  lehetőséget  ad
       makrók  definiálására  és  végrehajtására.  A  bemenetet  a  szabványos
       bemenetről veszi;  ha  argumentumot  adsz  meg  neki,  azt  fájlnévként
       értelmezi  és  azon fájlok tartalmát veszi és hajtja végre, majd ezután
       olvas a szabványos bemenetről. A kimenet a szabványos kimenet, a  hibák
       a szabványos hibakimenetre íródnak.

       A fordított-lengyel számológép a számokat egy veremben tárolja. Új szám
       bevitele  esetén  a  szám  a  verem  tetejére  kerül.  A  műveletek  az
       argumentumukat a verem tetejéről veszik, majd az eredményt visszateszik
       a verembe.

       A  bevitelhez  a  számot  egyszerűen  beírod,  követheti   opcionálisan
       tizedespont.   A  hatványalak használata nem támogatott. Negatív számok
       beviteléhez a számot ``_''  karakterrel  kezdd.  Az  előjel  nem  lehet
       ``-'',  mivel  ez  a  kivonás műveleti operátora. Több számot egymástól
       szóközzel vagy új sorral elválasztva lehet bevinni, ezen karakterek nem
       parancsok.

KIÍRÓ PARANCSOK

       p      Kiírja  a  verem  tetején  levő  számot  a verem megváltoztatása
              nélkül.  A szám után egy újsor karakter is kiíródik.

       P      Kiveszi a verem tetejéről a számot,  kiírja,  és  nem  ír  utána
              újsor karaktert.

       f      Kiírja   a   verem   teljes   tartalmát   anélkül,  hogy  bármit
              változtatna.  Akkor jó, ha teljesen eltévedtél, vagy  ki  akarod
              találni, hogy egy parancs vajon mit csinált.

SZÁMÍTÁSOK

       +      Leveszi  a  verem  két  felső  elemét,  összeadja  őket,  és  az
              eredményt  a  verembe  helyezi.  A  pontosságot   kizárólag   az
              argumentumok értéke határozza meg.

       -      Leveszi a verem két felső elemét, az elsőt (ami eredetileg felül
              volt) kivonja a másodikból, majd az eredményt a verembe helyezi.

       *      Leveszi  a  verem  két felső elemét, összeszorozza őket, majd az
              eredményt a verembe helyezi. A tizedesjegyek számát az  aktuális
              pontosságérték  (l.  lentebb)  határozza  meg,  és  nem  függ  a
              szorzandóktól.

       /      Leveszi  a  verem  két  felső  elemét,  az  elsőt   elosztja   a
              másodikkal, majd az eredményt a verembe helyezi. A tizedesjegyek
              számát a pontosságérték határozza meg.

       %      Leveszi a verem két felső  elemét,  a  /  által  végzett  osztás
              maradékát  a  verembe  helyezi. Az osztás a pontosságérték által
              meghatározott pontossággal végződik el, és a  maradék  is  ennek
              megfelelő számú jegyre számolódik ki.

       ~      Leveszi   a   verem  két  felső  elemét,  az  elsőt  elosztja  a
              másodikkal. Először a hányadost, aztán  a  maradékot  helyezi  a
              verembe.   Az   osztásban   használt   tizedesjegyek   értéke  a
              pontosságértéktől függ. (A SdSn lnld/ LnLd%  hatása  hasonló,  a
              hibakezelése más egy kicsit.)

       ^      Leveszi  a verem két felső elemét, az elsőt (ami eredetilg felül
              volt) kitevőként,  a  másodikat  alapként  használva  elvégzi  a
              hatványozást.  Ha a kitevőnek van törtrésze, azt figyelmen kívül
              hagyja. A pontosságérték határozza meg, hogy  az  eredmény  hány
              tizedesjegyre számítódik ki.

       |      Törtkitevős  hatványozást  végez.  Leveszi  a  verem felső három
              elemét.  Az első (ami  eredetileg  felül  volt)  lesz  a  kitevő
              nevezője, ez nem lehet nulla, és egésznek kell lennie. A második
              a kitevő számlálója, ez nem lehet negatív. Ha van  tizedesjegye,
              azt  figyelmen kívül hagyja.  A harmadik szám lesz a hatványozás
              alapja. A pontosságérték határozza meg, hogy  az  eredmény  hány
              tizedesjegyre  számítódik ki. Kis számok esetén hasonlít hozzá a
              Sm lble^ Lm% szekvencia, de a  ^-tól eltérően ez a  parancs  nem
              alkalmazható tetszőlegesen nagy kitevőkre.

       v      Levesz  egy  elemet a veremről, kiszámítja a négyzetgyökét, majd
              az eredményt a verembe helyezi. A pontosságérték határozza  meg,
              hogy hány tizedesjegyre végződik el a számítás.

       A  legtöbb  számítás eredményét befolyásolja a k paranccsal beállítható
       pontosságérték. Ez alapértelmezésben nulla, ami azt  jelenti,  hogy  az
       összeadás  és a kivonás kivételével minden művelet erdménye egész lesz.

       A % maradék-művelet kis magyarázatra szorul. Ha az  argumentumai  ``a''
       és  ``b'',  akkor a művelet eredménye ``a - (b * (a / b))'', ahol ``a /
       b'' az aktuális pontosságérték szerint számítódik.

VEREMKARBANTARTÁS

       c      Kitörli a verem minden elemét, a verem üres lesz.

       d      A verem tetején levő elemet  megduplázza  és  a  verem  tetejére
              helyezi, így a ``4d*p'' eredménye 16.

       r      Megfordítja (kicseréli) a verem két felső elemét.

REGISZTEREK

       A  dc  256  memóriaregisztert  képes kezelni, mindegyikük neve egyetlen
       karakter. A regiszterben tárolható  és  később  újrafelhasználható  egy
       szám vagy egy karakterlánc.

       sr     A  verem  tetején  levő  értéket  leveszi  és  az r regiszterben
              eltárolja.

       lr     Az r regiszter tartalmát a verembe helyezi.  Ez  a  művelet  nem
              változtatja meg az r regiszter tartalmát.

       Minden  regiszternek  megvan  a saját verme, az aktuális regiszterérték
       van a verem tetején.

       Sr     A (fő) verem tetején levő értéket  leveszi  és  az  r  regiszter
              vermébe helyezi. A regiszter előző értéke így elérhetetlen.

       Lr     Az  r  regiszter  verméből  leveszi  az  elemet  és a fő verembe
              helyezi. Ha az r regiszter vermében volt régebben valami  érték,
              akkor az most a lr paranccsal elérhetővé válik.

PARAMÉTEREK

       A  dc  működését  három paraméter befolyásolja: a pontosság, a beviteli
       alap és a kimeneti alap. A pontosság határozza meg,  hogy  a  műveletek
       eredményéből  hány  tizedesjegy  maradjon  meg. A beviteli alap mutatja
       meg, hogy a  begépelt  számok  hányas  számrendszerben  vannak;  minden
       begépelt szám ebben a számrendszerben értelmeződik. Számok kiírásakor a
       számok a kimeneti alap szerinti számrendszerben íródnak ki.

       A beviteli  és  a  kimeneti  alapok  különböző  paraméterek,  nem  kell
       feltétlenül  egyenlőnek  lenniük;  ez  lehet  hasznos  és zavaró is.  A
       bemeneti alap legalább 2,  legfeljebb  36  lehet.  A  kimeneti  alapnak
       legalább  2-nek  kell  lennie.  A pontosságnak nullának vagy nagyobbnak
       kell lennie. A pontosság a beviteli  és  kimeneti  alaptól  függetlenül
       mindig tizedesjegyeket jelent.

       i      Leveszi  a  verem tetején levő számot és erre állítja a beviteli
              alapot.

       o      Leveszi a verem tetején levő számot és erre állítja  a  kimeneti
              alapot.

       k      Leveszi   a   verem  tetején  levő  számot  és  erre  állítja  a
              pontosságot.

       I      Az aktuális beviteli alapot a verem tetejére helyezi.

       O      Az aktuális kimeneti alapot a verem tetejére helyezi.

       K      A pontosság aktuális értékét a verem tetejére helyezi.

KARAKTERLÁNCOK

       A dc képes karakterláncokat is kezelni. A karakterláncokat csak tárolni
       vagy   makróként   végrehajtani   (azaz   a  tartalmuk  dc  parancsként
       értelmeződik) lehet. Karakterláncok tárolására minden  regiszter  és  a
       verem  is  képes. Néhány parancs, mint például az aritmetikai műveletek
       számokat várnak argumentumként, és hibát  jeleznek,  ha  karakterláncot
       találnak   helyette.   Más   parancsok   számot  és  karakterláncot  is
       elfogadnak; ilyen például a p parancs, ami mindegyiket elfogadja  és  a
       típusának megfelelő módon írja ki.

       [karakterek]
              A   karakterek   -et   tartalmazó   karakterláncot   (azokat   a
              karaktereket, amik [ és ] karakterek között  vannak)  tartalmazó
              karakterláncot  képez  és  a  veremre  helyezi. Például a [foo]P
              kiírja a foo szöveget és nem ír utána újsor karaktert.

       a      Leveszi a verem legfelső elemét. Ha ez szám, akkor  az  alacsony
              helyiértékű bájtját karakterré konvertálja és a verembe helyezi.
              Ha ez karakterlánc, akkor ennek első karakterét helyezi vissza a
              verembe.

       x      Leveszi  a  verem  legfelső  elemét  és  makróként  végrehajtja.
              Normális esetben ez az elem egy  karakterlánc;  ha  szám,  akkor
              visszahelyezi a verembe. Például a [1p]x végrhajtja a 1p makrót,
              ami egy 1 -est tesz a verembe és új sorban kiírja az 1 -et.

       A  makrókat  leggyakrabban  regiszterekben  tároljuk;  a  [1p]sa  az  a
       regiszterbe  tesz egy olyan makrót, ami egy 1 -est ír ki. A lax parancs
       hajtja végre ezt a makrót.

       >r     Leveszi a verem két felső elemét, feltételezi, hogy ezek számok,
              összehasonlítja  őket,  és  végrehajtja  az  r regiszterben lévő
              makrót, ha az eredetileg a verem tetején levő szám nagyobb. Az 1
              2>a parancs végrehajtja az a regiszterben tárolt makrót, míg a 2
              1>a parancs nem.

       <r     Hasonló, de akkor hajtja végre a  makrót,  ha  az  eredetileg  a
              verem tetején levő szám kisebb.

       =r     Hasonló,  de  akkor  hajtja végre a makrót, ha a két levett elem
              egyenlő.

       ?      Beolvas  egy  sort  a  terminálról  és  végrehajtja.   Ezzel   a
              paranccsal lehet felhasználói bevitelt kérni.

       q      Kilép  a  makróból  és  az  azt  hívó makróból is. Ha a legfelső
              szinten hajtod végre, a q parancs kilép a dc -ből.

       Q      Leveszi a verem legfelső  elemét  és  ennyi  szintet  lép  ki  a
              makrókból.  A Q parancs soha nem lép ki a dc -ből.

ÁLLAPOTLEKÉRDEZÉS

       Z      Leveszi  a verem tetején levő elemet, megszámolja hány jegyű (ha
              szám) vagy hány karakterből áll  (ha  karakterlánc),  és  ezt  a
              számot teszi a verembe.

       X      Leveszi   a   verem   tetején  levő  elemet,  megszámolja,  hány
              tizedesjegye van, majd ezt a számot teszi a verembe. Ha a levett
              elem karakterlánc, akkor 0 -t tesz a verembe.

       z      A  verembe  teszi  a  verem  aktuális  mélységét;  azt, hogy a z
              parancs végrehajtása előtt hány elem volt a veremben.

EGYÉB

       !      A sor többi részét mint rendszerparancsot futtatja.

       #      A sor többi részét megjegyzésként kezeli.

       :r     A verem két felső elemét leveszi. A második elemet az  r  tömbbe
              helyezi, amit az első elemmel indexel.

       ;r     Leveszi  a verem felső elemét és az r tömb indexeként használja.
              A kiválasztott elem a verembe kerül.

MEGJEGYZÉSEK

       A : és a ; tömbműveteket általában csak a bc hagyományos implementációi
       használják.  (A GNU bc ezt tartalmazza, nem szükséges a futásához a dc.
       )

HIBÁK

       A hibákat e-mail-ben jelentsd a bug-gnu-utils@prep.ai.mit.edu címen.  A
       levél tárgyában valahol legyen benne a ``dc'' szó.

MAGYAR FORDÍTÁS

       Tevesz Tamás <ice@rulez.org>