Programmy dlya vychisleniya s proizvol'noj tochnost'yu bc i dc
Proizvodstvenno-vnedrencheskij kooperativ
"I N T E R F E J S"
Dialogovaya Edinaya Mobil'naya
Operacionnaya Sistema
Demos/P 2.1
Programmy dlya vychisleniya
s proizvol'noj tochnost'yu
bc i dc
Moskva
1988
ANNOTACIYA
Programma bc pozvolyaet proizvodit' arifmeticheskie
vychisleniya s proizvol'noj tochnost'yu nad chislami proizvol'noj
velichiny, a takzhe soderzhit nekotorye yazykovye vozmozhnosti.
Imeyutsya sredstva dlya perevoda chisel iz odnoj sistemy schisle-
niya v druguyu.
Programma dc takzhe pozvolyaet proizvodit' arifmeticheskie
dejstviya s chislami proizvol'noj velichiny i tochnosti, a takzhe
realizuet drugie vozmozhnosti, predostavlyaemye programmoj bc.
Otlichie sostoit v tom, chto programma dc ispol'zuet obratnuyu
pol'skuyu zapis'.
1. VVEDENIE
bc - eto yazyk i kompiliruyushchaya programma dlya vypolneniya
arifmeticheskih operacij s proizvol'noj tochnost'yu v operaci-
onnoj sisteme DEMOS.
YAzyk imeet zavershennuyu strukturu upravleniya, rezhim
nemedlennogo vypolneniya operacij. Mogut byt' opredeleny i
sohraneny funkcii dlya posleduyushchego ih vypolneniya.
Imeetsya svojstvo masshtabirovaniya, kotoroe pozvolyaet
ispol'zovat' zapis' s desyatichnoj tochkoj, a takzhe vozmozhnost'
dlya vvoda i vyvoda chisel v sistemah schisleniya, otlichnyh ot
desyatichnoj. CHisla mogut byt' perevedeny iz desyatichnoj sis-
temy schisleniya (naprimer, v vos'merichnuyu) prosto ustanovkoj
vyhodnogo osnovaniya sistemy schisleniya v 8.
Dostupen nebol'shoj nabor bibliotechnyh funkcij, takih
kak sin, cos, arctan, log, exp i funkcii Besselya celochislen-
nogo poryadka.
bc rekomenduetsya primenyat', kogda neobhodimo osushchest-
vit' vychisleniya s bol'shimi celymi chislami s ochen' vysokoj
tochnost'yu i kogda neobhodimy preobrazovaniya chisel iz odnoj
sistemy schisleniya v druguyu.
Fakticheskij predel kolichestva cifr, kotorye mogut byt'
obrabotany, zavisit ot ob容ma pamyati, dostupnoj na mashine.
Manipulyacii s chislami s bolee chem sotnej cifr vozmozhny dazhe
na minimal'nyh versiyah DEMOS.
Dva chisla, sostoyashchie iz pyati soten cifr mogut byt'
peremnozheny, i rezul'tat, sostoyashchij iz tysyachi cifr, budet
poluchen primerno cherez pyatnadcat' sekund.
Sintaksis yazyka bc v znachitel'noj mere pohozh na sintak-
sis yazyka Si. Te, kto znakom s yazykom Si, legko osvoyat yazyk
bc.
dc - eto arifmeticheskij paket takzhe dlya vychislenij s
proizvol'noj tochnost'yu. On rabotaet po principu stekovogo
kal'kulyatora, ispol'zuya obratnuyu pol'skuyu zapis'. Obychno dc
operiruet s celymi desyatichnymi chislami, no on takzhe mozhet
rabotat' s chislami v sistemah schisleniya otlichnyh ot desyatich-
noj, a takzhe s chislami s drobnoj chast'yu.
Kompilyator bc vosprinimaet programmy, napisannye na
yazyke bc i kompiliruet vyvod, kotoryj interpretiruetsya prog-
rammoj dc. Nekotorye iz komand, o kotoryh rasskazyvaetsya v
opisanii dc, byli razrabotany dlya vzaimodejstviya kompilyato-
rov i trudny dlya vospriyatiya chelovekom.
CHisla, kotorye vvodyatsya v dc, pomeshchayutsya v stek.
Komandy dc proizvodyat dejstviya nad dvumya verhnimi chislami v
steke i pomeshchayut rezul'tat obratno v stek.
Esli v komandnoj stroke DEMOS ukazan argument, kotoryj
yavlyaetsya imenem fajla, to snachala schityvaetsya etot fajl ili
fajly, a zatem vvod pereklyuchaetsya na standartnyj (klaviaturu
terminala).
2. INTERAKTIVNYJ KALXKULYATOR bc
2.1. Prostye dejstviya s celymi chislami
Prostejshim tipom vyrazheniya yavlyaetsya arifmeticheskoe
vyrazhenie v samoj stroke. Naprimer, esli vy vvedete stroku:
123456789+987654321
programma pochti mgnovenno vydaet otvet:
1111111110
Mogut ispol'zovat'sya sleduyushchie operacii +, -, *, /, %,
i ^, kotorye oznachayut dejstviya slozheniya, vychitaniya, umnozhe-
niya, deleniya, opredeleniya ostatka i vozvedeniya v stepen'
sootvetstvenno. Rezul'tatom deleniya celyh chisel yavlyaetsya
celoe chislo bez drobnoj chasti. Pri delenii na nol' poyavlya-
etsya soobshchenie ob oshibke.
Pered lyubym chlenom vyrazheniya mozhet stoyat' znak minus,
kotoryj ukazyvaet na to, chto dannyj chlen otricatelen (unar-
nyj znak minus). Vyrazhenie:
1985+-R68
oznachaet, chto chislo -68 dolzhno byt' dobavleno k chislu 1985.
Bolee slozhnye vyrazheniya s neskol'kimi operaciyami i
skobkami interpretiruyutsya takzhe kak i v Fortrane. Operaciya
- 3 -
^ (vozvedenie v stepen') imeet naibol'shij prioritet vypolne-
niya, zatem sleduyut operacii * (umnozhenie), % (nahozhdenie
ostatka), / (delenie) i nakonec, operacii + (slozhenie) i -
(vychitanie). V pervuyu ochered' ocenivaetsya soderzhimoe vyrazhe-
nij, stoyashchih v skobkah. Vozvedenie v stepen' vypolnyaetsya
sprava nalevo, a ostal'nye operacii sleva napravo. Sleduyu-
shchie dva vyrazheniya:
a^b^c i a^(b^c)
ekvivalentny, takzhe kak ekvivalentny i vyrazheniya:
a*b*c i (a*b)*c
Dlya zapominaniya chisel ispol'zuyutsya vnutrennie registry
(peremennye), kotorye imeyut imena, sostoyashchie iz odnoj stroch-
noj latinskoj bukvy. Registru mozhet byt' obychnym sposobom
prisvoeno znachenie vyrazheniya. Vyrazhenie:
s=s+10
vypolnyaet uvelichenie na 10 znacheniya, soderzhashchegosya v
registre s imenem s. Esli, kak i v dannom sluchae, samym
vneshnim yavlyaetsya operator =, to osushchestvlyaetsya prisvaivanie,
no rezul'tat ne pechataetsya. Razreshaetsya ispol'zovat' ne
bolee 26 registrov.
Imeetsya vstroennaya funkciya izvlecheniya kvadratnogo kornya
(sqrt), prichem drobnaya chast' rezul'tata otbrasyvaetsya
(vychisleniya s bol'shej tochnost'yu opisany v razdele "Masshtabi-
rovanie"). Esli vvesti sleduyushchie stroki
q=sqrt(624)
q
to napechataetsya rezul'tat
24
2.2. Osnovaniya sistem schisleniya
Sushchestvuyut special'nye vnutrennie peremennye, nazyvae-
mye ibase i obase. Soderzhimoe ibase, pervonachal'no ustanov-
lennoe v 10, opredelyaet osnovanie sistemy schisleniya, ispol'-
zuemoe dlya vvodimyh chisel. Naprimer, v rezul'tate vypolneniya
sleduyushchih strok:
ibase=9
11
poyavitsya vyhodnaya stroka:
- 4 -
10
i, ustanoviv takim obrazom osnovanie sistemy schisleniya vvo-
dimyh chisel v 9, mozhno budet osushchestvlyat' preobrazovaniya iz
devyatirichnoj sistemy v desyatichnuyu. Zametim, chto nel'zya ver-
nut' obratno vhodnoe osnovanie v desyatichnoe, nabrav stroku
ibase=10
tak kak chislo 10 budet interpretirovat'sya kak devyatirichnoe,
i vhodnoe osnovanie ostanetsya bez izmeneniya.
CHtoby rabotat' v shestnadcatirichnoj sisteme schisleniya,
ispol'zuyutsya simvoly A-F dlya oboznacheniya cifr 10-15, soot-
vetstvenno. Ispol'zovanie simvolov A-F razreshaetsya v
kachestve chisel nezavisimo ot togo, kakaya sistema schisleniya
ustanovlena v dannyj moment.
Vyrazhenie
ibase=A
izmenit na desyatichnoe vhodnoe osnovanie, nezavisimo ot togo,
kakim bylo tekushchee osnovanie. Vvod proizvol'nyh chisel v
osnovaniyah men'she edinicy i bol'she shestnadcati ne podderzhi-
vaetsya.
Soderzhimoe obase pervonachal'no ustanovlennoe v 10,
ispol'zuetsya, kak osnovanie dlya vyvodimyh chisel. Tak, napri-
mer, vvedya stroki
obase=16
654321
poluchim v rezul'tate
9FBF1
chto yavlyaetsya, kak my i hoteli, pyatiznachnym shestnadcatirichnym
chislom. Ochen' bol'shie vyhodnye osnovaniya dopustimy, i oni
inogda byvayut polezny. Naprimer, bol'shie chisla mogut byt'
vyvedeny v gruppah po tri cifry, esli ustanovit' obase v
1000. Naprimer, esli vvesti sleduyushchie stroki
obase=1000
1234567890987654321234567890
to rezul'tat napechatetsya v vide
1 234 567 890 987 654 321 234 567 890
Neobychnye (t.e. 1, 0 ili otricatel'nye) osnovaniya takzhe
vosprinimayutsya.
- 5 -
Ochen' bol'shie chisla rasshcheplyayutsya pri vyvode na pechat'
po 70 simvolov na stroku. Stroki, ne yavlyayushchiesya poslednimi,
okanchivayutsya simvolom \. Desyatichnyj rezul'tat vyvoditsya
prakticheski mgnovenno, no vyvod ochen' bol'shih chisel (t.e.
bolee chem 100 cifr) s drugimi osnovaniyami proishodit
dovol'no medlenno. Vyvod v nedesyatichnyh osnovaniyah osushchestv-
lyaetsya primerno so skorost'yu 100 cifr za shest' sekund.
Rekomenduem zapomnit', chto na process vnutrennih vychis-
lenij ibase i obase ne vliyayut, tak kak vychisleniya vypolnya-
yutsya v desyatichnoj sisteme schisleniya, a ibase i obase ispol'-
zuyutsya tol'ko vo vremya perevoda v nuzhnuyu sistemu schisleniya
pri vvode i vyvode, sootvetstvenno.
2.3. Masshtabirovanie
Eshche odna special'naya vnutrennyaya peremennaya, nazyvaemaya
scale ispol'zuetsya dlya togo, chtoby opredelit' kolichestvo
znakov posle zapyatoj pri vychisleniyah. CHisla mogut soderzhat'
do 99 desyatichnyh cifr posle zapyatoj. |to kolichestvo znakov
sohranyaetsya v dal'nejshih vychisleniyah do teh por, poka ne
budet izmeneno.
Kogda nad dvumya masshtabirovannymi chislami proizvoditsya
odno iz arifmeticheskih dejstvij, rezul'tat imeet tochnost',
opredelyaemuyu sleduyushchimi pravilami. Dlya slozheniya i vychitaniya
tochnost' rezul'tata - bol'shaya iz tochnosti operandov. V etom
sluchae rezul'tat nikogda ne usekaetsya. Dlya umnozheniya toch-
nost' rezul'tata nikogda ne men'she, chem maksimum tochnostej
dvuh operandov, i ne bol'she, chem summa tochnostej operandov.
Tochnost' chastnogo ravna znacheniyu vnutrennej peremennoj
scale. Tochnost' ostatka est' summa tochnostej chastnogo i
delitelya. Rezul'tat vozvedeniya v stepen' masshtabiruetsya tak
zhe, kak i pri umnozhenii. Pokazatel' stepeni dolzhen byt'
celym. Tochnost' kvadratnogo kornya ustanavlivaetsya maksimal'-
noj iz tochnosti argumenta i scale.
Vse vnutrennie dejstviya fakticheski vypolnyayutsya v celyh
s otbrasyvaniem cifr, esli neobhodimo. V kazhdom sluchae, gde
otbrasyvayutsya cifry, proizvoditsya usechenie, a ne okruglenie.
Soderzhimoe scale dolzhno byt' ne bol'she 99 i ne men'she
nulya. Pervonachal'no ona ustanavlivaetsya v 0. V sluchae,
kogda trebuetsya bolee 99 drobnyh cifr, vy mozhete prisposo-
bit' svoe sobstvennoe masshtabirovanie.
Vnutrennie peremennye scale, ibase, obase mogut ispol'-
zovt'sya v vyrazheniyah takzhe kak i drugie peremennye. Stroka
scale=scale+1
uvelichivaet znachenie scale na edinicu a stroka
- 6 -
scale
vyzyvaet pechat' znacheniya scale.
Pri vychisleniyah znachenie scale ispol'zuetsya, kak koli-
chestvo desyatichnyh cifr, dazhe esli ibase i obase ne ravny 10.
Napomnim eshche raz, chto vnutrennie vychisleniya proizvodyatsya v
desyatichnoj sisteme schisleniya, a perevod v nuzhnuyu sistemu
schisleniya osushchestvlyaetsya pri vvode i vyvode chisla.
2.4. Funkcii
Imya funkcii takzhe sostoit iz odnoj strochnoj latinskoj
bukvy. Razreshaetsya, chtoby imena funkcij i peremennyh sovpa-
dali. Mozhno imet' dvadcat' shest' razlichnyh funkcij takzhe,
kak i dvadcat' shest' razlichnyh peremennyh. Stroka
define a(x){
nachinaet opredelenie funkcii s odnim argumentom. Za etoj
strokoj dolzhny sledovat' odno ili bolee predlozhenij, kotorye
sostavlyayut telo funkcii, okanchivayushcheesya pravoj figurnoj
skobkoj }. Vozvrat iz funkcii osushchestvlyaetsya togda, kogda
vypolnyaetsya operator return ili dostigaetsya konec funkcii.
Operator return mozhet byt' v odnoj iz dvuh form
return
return(x)
V pervom sluchae znacheniem funkcii yavlyaetsya nol', a vo vtorom
znachenie vyrazheniya v skobkah.
Peremennye, ispol'zuemye v funkciyah, mogut byt' ob座av-
leny, kak avtomaticheskie, ispol'zuya vyrazhenie tipa
auto x,y,z
V funkcii mozhet byt' tol'ko odno vyrazhenie auto, i ono
dolzhno byt' pervym v opredelenii. Avtomaticheskie peremennye
razmeshchayutsya v pamyati i inicializiruyutsya v nol' pri vhode v
funkciyu i sbrasyvayutsya pri vyhode iz nee. Znacheniya lyubyh
peremennyh s imenami, sovpadayushchimi s imenami peremennyh v
funkcii, ne portyatsya, tak kak peremennye v funkciyah yavlyayutsya
lokal'nymi. Funkcii mogut byt' vyzvany rekursivno, i avtoma-
ticheskie peremennye na kazhdom urovne vyzova zashchishcheny. Imena
parametrov v opredelenii funkcii obrabatyvayutsya takim zhe
obrazom, chto i avtomaticheskie peremennye s edinstvennym isk-
lyucheniem, chto im prisvaivayutsya konkretnye znacheniya pri vhode
v funkciyu. Primer opredeleniya funkcii:
- 7 -
define f(x,y){
auto z
return(z)
}
Znachenie etoj funkcii, kogda ona budet vyzvana poluchitsya iz
proizvedeniya dvuh ee argumentov.
Funkciya vyzyvaetsya pri poyavlenii ee imeni, za kotorym
sleduyut argumenty, zaklyuchennye v skobki i razdelennye zapya-
tymi. Esli ispol'zovalos' nevernoe chislo argumentov, to
rezul'tat nepredskazuem.
Funkcii bez argumentov opredelyayutsya i vyzyvayutsya,
ispol'zuya pustye skobki: p().
Esli nabrat' stroku
f(3.14159,2,71828)
gde f - funkciya, kotoraya byla opisana vyshe, to napechataetsya
rezul'tat:
8.53972
a esli nabrat'
y=f(f(12,34),56)
to peremennoj y prisvoitsya znachenie 22848.
2.5. Indeksirovannye peremennye
Imya peremennoj, sostoyashchee iz odnoj strochnoj latinskoj
bukvy, za kotorym sleduet vyrazhenie, zaklyuchennoe v kvadrat-
nye skobki, nazyvaetsya indeksirovannoj peremennoj (element
massiva). Imya peremennoj nazyvaetsya imenem massiva, a vyra-
zhenie v kvadratnyh skobkah nazyvaetsya indeksom. Dopuskayutsya
tol'ko odnomernye massivy. Imena massivov mogut peresekat'sya
s imenami prostyh peremennyh i imenami funkcij. Esli u zna-
cheniya indeksa imeetsya drobnaya chast', to ona otbrasyvaetsya
pered ispol'zovaniem. Indeks dolzhen byt' bol'she libo raven
nulyu i men'she libo raven 2047.
Indeksirovannye peremennye mogut svobodno ispol'zo-
vat'sya v vyrazheniyah, v vyzovah funkcij i v operatorah
return.
Imya massiva mozhet ispol'zovat'sya, kak argument funkcii,
ili mozhet byt' opisano, kak avtomaticheskoe v opisanii funk-
cii, ispol'zuya pustye kvadratnye skobki:
- 8 -
p(c[])
define p(c[])
auto c[]
Kogda imya massiva ispol'zuetsya takim obrazom, kopiru-
etsya vse soderzhimoe massiva dlya ispol'zovaniya v funkcii i
vydaetsya ves' massiv pri vyhode iz funkcii. Dlya ukazaniya
vsego massiva v celom mozhno pol'zovat'sya tol'ko takimi spo-
sobami.
2.6. Upravlyayushchie operatory
Operatory if, while i for mogut ispol'zovat'sya dlya
togo, chtoby izmenyat' poryadok vypolneniya dejstvij v programme
ili vyzvat' povtorenie vypolneniya opredelennyh posledova-
tel'nostej. Telo kazhdogo iz etih operatorov - eto operator
ili sostavnoj operator, sostoyashchij iz neskol'kih operatorov,
zaklyuchennyh v figurnye skobki. Oni pishutsya sleduyushchim obra-
zom:
if(uslovie) operator
while(uslovie) operator
for(vyrazh1;uslovie;vyrazh2) operator
ili
if(uslovie) {operatory}
while(uslovie) {operatory}
for(vyrazh1;uslovie;vyrazh2) {operatory}
Uslovie v lyubom iz upravlyayushchih operatorov - eto vyrazhe-
nie v forme
m>>n
gde dva vyrazheniya svyazany odnoj iz shesti operacij otnosheniya:
<<, >>, <<=, >>=, == ili !=. Otnoshenie == oznachaet ekviva-
lentno, a otnoshenie != oznachaet ne ekvivalentno. Znachenie
ostal'nyh operacij otnosheniya yasno i tak.
Bud'te vnimatel'ny pri ispol'zovanii operacij = i ==,
tak kak nekorrektnoe ispol'zovanie odnoj operacii vmesto
drugoj ne mozhet byt' vyyavleno kompilyatorom, a pri ispol'zo-
vanii pervoj proizojdet prisvaivanie, a pri ispol'zovanii
vtoroj - sravnenie.
Operator if vyzovet vypolnenie svoego tela togda i
tol'ko togda, kogda uslovie istinno. Zatem upravlenie pere-
dastsya sleduyushchemu operatoru v posledovatel'nosti.
- 9 -
Operator while vyzovet mnogokratnoe vypolnenie svoego
tela do teh por, poka uslovie istinno. Uslovie proveryaetsya
pered kazhdym vypolneniem tela, i, esli uslovie lozhno, uprav-
lenie peredaetsya operatoru, sleduyushchemu za telom operatora
while.
Operator for nachinaetsya s vypolneniya vyrazh1. Zatem pro-
veryaetsya uslovie, i, esli ono istinno, vypolnyayutsya operatory
v tele operatora for. Zatem vypolnyaetsya vyrazh2. Proveryaetsya
uslovie i tak dalee. Tipichnoe ispol'zovanie operatora for -
eto upravlyaemoe povtorenie, takoe, naprimer, kak v operatore
for(i=1;i<=20;i=i+2)i
kotoryj budet pechata' celye nechetnye chisla v intervale ot 1
do 20. Dalee predstavleny neskol'ko primerov ispol'zovaniya
upravlyayushchih operatorov.
define f(n){
auto i, p
for(i=1;i<=n;i=i+1) p=p*i
return(p)
}
Togda, nabrav stroku
f(h)
poluchim pechat' znacheniya faktoriala chisla h, esli h celoe
polozhitel'noe. A eto opredelenie funkcii, kotoraya budet
vychislyat' znacheniya binomial'nyh koefficientov (predpolaga-
etsya, chto s i t - celye polozhitel'nye).
define b(s,t){
auto i, p
for(i=1;i<=t;i=i+1) p=p*(s-i+1)/i
return(p)
}
Sleduyushchaya funkciya vychislyaet znachenie eksponencial'noj funk-
cii summirovaniem sootvetstvuyushchego ryada, ne uchityvaya vozmozh-
- 10 -
nye oshibki otbrasyvaniya:
scale=25
define e(z){
auto a, b, c, d, n
while(1==1){
a=a*z
b=b*n
c=c+a/b
n=n+1
if(c==d) return(c)
d=c
}
}
2.7. Nekotorye detali
Sushchestvuyut nekotorye yazykovye osobennosti, o kotoryh
znaet kazhdyj pol'zovatel', dazhe, esli on ne pol'zovalsya imi.
Obychno operatory nabirayutsya po odnomu na stroke. Pozvo-
lyaetsya takzhe nabirat' neskol'ko operatorov na stroke, razde-
lyaya ih tochkoj s zapyatoj (;).
Esli operator prisvaivaniya zaklyuchen v kruglye skobki,
togda ego znachenie mozhno ispol'zovat', tam zhe, gde mozhno
ispol'zovat' vyrazhenie. Naprimer, esli nabrat' sleduyushchuyu
stroku
(y=y+123)
to proizojdet ne tol'ko ukazannoe prisvaivanie, no i napecha-
taetsya rezul'tiruyushchee znachenie.
A eto primer ispol'zovaniya znacheniya operatora prisvai-
vaniya, kogda on ne zaklyuchen v kruglye skobki:
p=n[k=k*3]
V etom sluchae znachenie n budet prisvoeno peremennoj p, a
takzhe k budet uvelicheno v tri raza pered tem, kak k budet
ispol'zovano kak indeks.
Sleduyushchie konstrukcii rabotayut v bc tak zhe, kak oni
vypolnyayutsya v yazyke Si. Podrobnee ukazano v "Detal'nom opi-
- 11 -
sanii" ili v rukovodstve po yazyku Si.
x=y=z to zhe, chto i x=(y=z)
x=+y x=x+y
x=-y x=x-y
x=*y x=x*y
x=/y x=x/y
x=%y x=x%y
x=^y x=x^y
x++ (x=x+1)-1
x-- (x=x-1)-1
++x x=x+1
--x x=x-1
PREDUPREZHDENIE! V nekotoryh iz etih konstrukcij sushchest-
venno nalichie ili otsutstvie probelov. Sushchestvuet razlichie
mezhdu a=-b i a= -b. V pervom sluchae peremennoj a budet
prisvoeno znachenie a-b", a vo vtorom -b.
2.8. Tri vazhnye veshchi
1. CHtoby vyjti iz programmy bc naberite quit.
2. Imeetsya vozmozhnost' vvodit' kommentarij, tak zhe, kak i v
yazykah Si i PL/1. Kommentarij nachinaetsya s "/*" i okan-
chivaetsya "*/".
3. Imeetsya biblioteka funkcij, kotoraya mozhet byt' ispol'zo-
vana, esli nabrat' pri vyzove komandy bc
bc -l
|ta komanda vyzovet zagruzku nebol'shgogo nabora biblio-
technyh funkcij, kotoryj soderzhit: sinus (nazvaetsya s),
kosinus (c), arktangens (a), natural'nyj logarifm (l),
eksponentu (e) i funkciyu Besselya celogo poryadka
(j(n,x)"). Nesomnenno, chto budut napisany i drugie funk-
cii. |ta biblioteka ustanavlivaet tochnost', ravnuyu 20
znakam posle zapyatoj. Vy mozhete pereustanovit' ee, esli
vam nado.
Bsli vy naberete
bc fajl ...
to bc prochitaet i vypolnit ukazannyj fajl ili fajly pered
tem, kak peredat' upravlenie na klaviaturu. Takim obrazom vy
mozhete zagruzit' svoi lyubimiye programmy i opredeleniya funk-
cij. Ispol'zovanie lichnyh fajlov ne isklyuchaet vozmozhnosti
ispol'zovaniya bibliotechnyh funkcij.
- 12 -
2.9. Detal'noe opisanie
2.9.1. Oboznacheniya
Na sleduyushchih stranicah sintaksicheskie kategorii obozna-
chayutsya strochnymi russkimi bukvami, vydelennymi kursivom
(naprimer vyrazhenie); klyuchevye slova - zhirnymi latinskimi
(naprimer scale); to, chto nahoditsya v kvadratnyh skobkah
yavlyaetsya neobyazatel'nym.
2.9.2. Znaki
Znaki sostoyat iz klyuchevyh slov, identifikatorov, kons-
tant, operatorov i razdelitelej. Razdelitelem znakov mogut
byt' probely, simvoly tabulyacii ili kommentarii. Simvol
novoj stroki ili tochka s zapyatoj razdelyayut predlozheniya.
2.9.2.1. Kommentarii
Kommentarii nachinayutsya simvolami /* i konchayutsya simvo-
lami */.
2.9.2.2. Identifikatory
Imeetsya tri vida identifikatorov - obychnye identifika-
tory, identifikatory massivov i identifikatory funkcij. Vse
tri tipa imeyut imena, sostoyashchie iz edinstvennoj strochnoj
latinskoj bukvy. Posle identifikatora massiva sleduyut kvad-
ratnye skobki, vozmozhno zaklyuchayushchie vyrazhenie, opredelyayushchee
indeks. Massivy odnomerny i mogut soderzhat' do 2048 elemen-
tov. Indeksirovanie nachinaetsya s nulya, poetomu massiv mozhet
imet' indeksy ot 0 do 2047. Znacheniya indeksov usekayutsya do
celogo. Za identifikatorom funkcii sleduyut kruglye skobki,
vozmozhno soderzhashchie argumenty. Imena treh tipov identifika-
torov ne peresekayutsya: programma mozhet imet' peremennuyu z,
massiv z i funkciyu z.
2.9.2.3. Klyuchevye slova
Sleduyushchie slova yavlyayutsya zarezervirovannymi klyuchevymi
slovami
ibase if
obase break
scale define
sqrt auto
length return
while quit
for
- 13 -
2.9.2.4. Konstanty
Konstanty sostoyat iz proizvol'noj dliny chisel s neobya-
zatel'noj desyatichnoj tochkoj. Dopuskayutsya takzhe shestnadcati-
richnye cifry A-F, kotorye imeyut znacheniya 10-15, sootvetst-
venno.
2.9.3. Vyrazheniya
Znachenie vyrazheniya pechataetsya, esli osnovnoj operator
ne operator prisvaivaniya. Starshinstvo operatorov takoe zhe,
kak i poryadok poyavleniya pri opisanii dalee v dokumente, s
naivysshim prioritetom u togo, kto poyavlyaetsya pervym.
2.9.3.1. Prostye vyrazheniya
2.9.3.1.1. Imenovannye vyrazheniya
Imenovannye vyrazheniya - eto vyrazheniya, kotorye hranyat
kakoe-libo znachenie. Proshche govorya, imenovannye vyrazheniya -
levaya chast' operatora prisvaivaniya. Znachenie imenovannogo
vyrazheniya - eto znachenie, hranimoe v imenovannom meste.
identifikatory
Prostye identifikatory - eto imenovannye vyrazheniya.
Oni imeyut nachal'noe nulevoe znachenie.
imya-massiva[vyrazhenie]
|lementy massiva - eto imenovannye vyrazheniya. Oni
imeyut nachal'noe nulevoe znachenie.
scale, ibase i obase
Vnutrennie registry scale, ibase i obase - eto imeno-
vannye vyrazheniya. scale - eto kolichestvo cifr posle
desyatichnoj tochki, kotoroe ispol'zuetsya v arifmeticheskih
dejstviyah. scale imeet nachal'noe nulevoe znachenie.
ibase i obase - eto osnovaniya sistem schisleniya vvodimyh
i vyvodimyh chisel, sootvetstvenno. Kak ibase, tak i
obase imeyut nachal'noe znachenie 10.
2.9.3.1.2. Vyzovy funkcij
imya-funk.([vyr.[,vyr...]])
Vyzov funkcii sostoit iz imeni funkcii, za kotorym sle-
duyut kruglye skobki, soderzhashchie razdelennyj zapyatymi
spisok vyrazhenij, kotorye yavlyayutsya argumentami funkcii.
Dopuskaetsya ispol'zovat', kak argument, ves' massiv,
esli pri ego opredelenii za imenem sleduyut pustye kvad-
ratnye skobki. Vse argumenty funkcii peredayutsya po
znacheniyu, poetomu izmeneniya, proizvodimye nad formal'-
nymi parametrami, ne imeyut vozdejstviya na fakticheskie.
Esli funkciya preryvaetsya vypolneniem operatora return,
to znachenie funkcii - eto znachenie vyrazheniya v skobkah
- 14 -
operatora return ili nul', esli vyrazhenie otsutstvuet
ili net operatora return.
sqrt(vyrazhenie)
Rezul'tatom yavlyaetsya kvadratnyj koren' iz vyrazheniya.
Rezul'tat usekaetsya do poslednej znachashchej desyatichnoj
cifry. Tochnost'yu rezul'tata yavlyaetsya bol'shaya velichina
iz tochnosti vyrazheniya ili scale.
length(vyrazhenie)
Rezul'tatom yavlyaetsya obshchee chislo desyatichnyh cifr v
vyrazhenii. Tochnost' rezul'tata - nol' znakov posle
zapyatoj.
scale(vyrazhenie)
Rezul'tatom yavlyaetsya tochnost' vyrazheniya. Tochnost'
rezul'tata - nol' znakov posle zapyatoj.
2.9.3.1.3. Konstanty
Konstatnty - eto prostye vyrazheniya.
2.9.3.1.4. Kruglye skobki
Vyrazhenie, okruzhennoe kruglymi skobkami - est' prostoe
vyrazhenie. Skobki ispol'zuyutsya dlya togo, chtoby izmenit'
obychnyj poryadok destvij.
2.9.3.2. Unarnye operacii
Unarnye operacii vypolnyayutsya sprava nalevo.
-vyrazhenie
Rezul'tatom yavlyaetsya vyrazhenie s protivopolozhnym znakom
++imenovannoe vyrazhenie
Imenovannoe vyrazhenie uvelichivaetsya na edinicu.
Rezul'tatom yavlyaetsya znachenie imenovannogo vyrazheniya
posle uvelicheniya.
--imenovannoe_vyrazhenie
Imenovannoe vyrazhenie umen'shaetsya na edinicu. Rezul'-
tatom yavlyaetsya znachenie imenovannogo vyrazheniya posle
umen'sheniya.
imenovannoe_vyrazhenie++
Imenovannoe vyrazhenie uvelichivaetsya na edinicu.
Rezul'tatom yavlyaetsya znachenie imenovannogo vyrazheniya
pered uvelicheniem.
imenovannoe_vyrazhenie--
Imenovannoe vyrazhenie umen'shaetsya na edinicu. Rezul'ta-
tom yavlyaetsya znachenie imenovannogo vyrazheniya pered
- 15 -
umen'sheniem.
2.9.3.3. Operaciya vozvedeniya v stepen'
Operaciya vozvedeniya v stepen' vypolnyaetsya sprava
nalevo.
vyrazhenie^vyrazhenie
Rezul'tatom yavlyaetsya pervoe vyrazhenie, vozvedennoe v
stepen' vtorogo vyrazheniya. Vtoroe vyrazhenie dolzhno byt'
celym. Esli a - eto tochnost' levogo vyrazheniya, a b -
absolyutnoe znachenie pravogo vyrazheniya (pokazatelya ste-
peni), to tochnost' rezul'tata vychislyaetsya po formule
min(a*b,max(scale,a))
2.9.3.4. Operacii gruppy umnozheniya
Operacii *, /, % vyolnyayutsya sleva napravo.
vyrazhenie*vyrazhenie
Rezul'tatom yavlyaetsya proizvedenie dvuh vyrazhenij. Esli
a i b - tochnosti oboih vyrazhenij, to tochnost' rezul'-
tata vychislyaetsya po formule
min(a+b,max(scale,a,b))
vyrazhenie/vyrazhenie
Rezul'tatom yavlyaetsya chastnoe ot deleniya dvuh vyrazhenij.
Tochnost' rezul'tata - znachenie scale.
vyrazhenie%vyrazhenie
Operaciya % vyrabatyvaet ostatok ot deleniya dvuh vyrazhe-
nij. Bolee tochno, a%b - eto a-a/b*b. Tochnost' rezul'-
tata - eto summa tochnosti delitelya i znacheniya scale.
2.9.3.5. Operacii gruppy slozheniya
Operacii gruppy slozheniya vypolnyayutsya sleva napravo.
vyrazhenie+vyrazhenie
Rezul'tatom yavlyaetsya summa dvuh vyrazhenij. Tochnost'
rezul'tata - eto maksimal'naya iz tochnostej oboih vyra-
zhenij.
vyrazhenie-vyrazhenie
Rezul'tatom yavlyaetsya raznost' dvuh vyrazhenij. Tochnost'
rezul'tata - eto maksimal'naya iz tochnostej oboih vyra-
zhenij.
- 16 -
2.9.3.6. Operatory prisvaivaniya
Operatory prisvaivaniya vypolnyayutsya sprava nalevo.
imenovannoe_vyrazhenie=vyrazhenie
|to vyrazhenie prisvaivaet znachenie vyrazheniya sprava
imenovannomu vyrazheniyu sleva.
imenovannoe_vyrazhenie=+vyrazhenie
imenovannoe_vyrazhenie=-vyrazhenie
imenovannoe_vyrazhenie=*vyrazhenie
imenovannoe_vyrazhenie=/vyrazhenie
imenovannoe_vyrazhenie=%vyrazhenie
imenovannoe_vyrazhenie=^vyrazhenie
Rezul'tat ukazannyh vyshe vyrazhenij ekvivalenten
imenov. vyr.=imenov. vyr. OP vyr.
gde OP - znak operacii posle znaka =.
2.9.4. Otnosheniya
V otlichie ot drugih operacij, operacii otnosheniya dopus-
timy tol'ko, kak ob容kty operatorov if, while ili vnutri
operatora for.
vyrazhenie<vyrazhenie
vyrazhenie>vyrazhenie
vyrazhenie<=vyrazhenie
vyrazhenie>=vyrazhenie
vyrazhenie==vyrazhenie
vyrazhenie!=vyrazhenie
2.9.5. Klassy pamyati
V bc imeetsya tol'ko dva klassa pamyati - global'nyj i
avtomaticheskij (lokal'nyj). Komandoj auto trebuetsya opisy-
vat' tol'ko te identifikatory, kotorye yavlyayutsya lokal'nymi
dlya funkcij. Argumenty funkcij yavlyayutsya dlya nih lokal'nymi.
Vse drugie identifikatory podrazumevayutsya global'nymi i dos-
tupny dlya vseh funkcij. Vse identifikatory - global'nye i
lokal'nye - imeyut nulevoe nachal'noe znachenie.
- 17 -
Identifikatory, opisannye kak auto, razmeshchayutsya v pamyati pri
vhode v funkciyu i osvobozhdayutsya pri vyhode iz nee. Poetomu,
oni ne sohranyayut svoe znachenie mezhdu dvumya vyzovami funkcii.
Avtomaticheskie massivy opredelyayutsya imenem massiva, za koto-
rym sleduyut pustye kvadratnye skobki.
2.9.6. Operatory
Operatory dolzhny razdelyat'sya tochkoj s zapyatoj ili sim-
volom novoj stroki. Operatory vypolnyayutsya posledovatel'no,
za isklyucheniem teh sluchaev, gde poryadok ukazyvaetsya upravlya-
yushchimi operatorami.
Operatory vyrazhenij
Kogda operator est' vyrazhenie, esli glavnyj (vneshnij)
operator vyrazheniya ne est' operator prisvaivaniya, to
pechataetsya znachenie vyrazheniya, a za nim simvol novoj
stroki.
Sostavnye operatory
Operatory mogut byt' ob容dineny vmeste, kogda oni okru-
zheny figurnymi skobkami {}.
Strokovye operatory, zaklyuchennye v kavychki
"lyubaya_stroka"
|tot operator pechataet to, chto zaklyucheno v kavychki.
Operator if
if(uslovie)operator
Esli uslovie verno, to vypolnyaetsya operator.
Operator while
while(uslovie)operator
Operator vypolnyaetsya do teh por, poka uslovie istinno.
Proverka usloviya osushchestvlyaetsya pered kazhdym vypolne-
niem operatora.
Operator for
for(vyrazh.;uslovie;vyrazh.)operator
Operator for vypolnyaet te zhe dejstviya, chto i posledova-
tel'nost'
- 18 -
pervoe_vyrazhenie
while(uslovie){
operator
poslednee_vyrazhenie
}
Vse tri vyrazheniya dolzhny obyazatel'no prisutstvovat'.
Operator break
break
break vyzvaet preryvanie vypolneniya operatorov while
ili for
Operator auto
auto identifikator[,identifikator]
Operator auto vyzyvaet zavedenie znachenij identifikato-
rov v steke. Identifikatory mogut byt' obychnymi iden-
tifikatorami ili identifikatorami massiva. Identifika-
tor massiva opredelyaetsya tem, chto za imenem massiva
sleduyut pustye kvadratnye skobki. Operator auto dolzhen
byt' pervym operatorom v opredelenii funkcii.
Operator define
define([parametr[,parametr...]]){
operatory}
Operator define opredelyaet funkciyu. Parametry mogut
byt' prostymi identifikatorami ili imenami massivov.
Za imenami massivov dolzhny sledovat' pustye kvadratnye
skobki.
Operator return
return
return(vyrazhenie)
Operator return vyzyvaet okonchanie raboty funkcii, izv-
lechenie iz steka ee avtomaticheskih peremennyh i oprede-
lenie rezul'tata funkcii. Pervaya forma ekvivalentna
return(0). Rezul'tatom funkcii yavlyaetsya rezul'tat vyra-
zheniya v skobkah.
Okonchanie raboty
Operator quit ostanavlivaet vypolnenie programmy bc i
vozvrashchaet upravlenie sisteme DEMOS v tot moment, kogda
on poyavlyaetsya. Operator quit ne mozhet ispol'zovat'sya v
opredeleniyah funkcij ili v operatorah if, for ili
- 19 -
while.
2. INTERAKTIVNYJ STEKOVYJ KALXKULYATOR dc
2.1. Opisanie sintaksisa
V dannoj glave opisyvayutsya komandy dc, kotorye prednaz-
nacheny dlya ispol'zovaniya lyud'mi. Dopolnitel'nye komandy,
kotorye prednaznacheny dlya vyzova kompilyatrom, opisany v
"Detal'nom opisanii".
Na stroke dopuskaetsya lyuboe kolichestvo komand. Simvoly
probelov i novoj stroki ignoriruyutsya, isklyuchaya mest vnutri
chisel i teh mest, gde ozhidaetsya imya registra.
Vosprinimayutsya sleduyushchie konstrukcii:
chislo
Znachenie chisla pomeshchaetsya v stek. CHislo - eto nepreryvae-
maya cepochka cifr 0-9 i bol'shih latinskih bukv A-F, kotorye
rassmatrivayutsya kak znacheniya cifr 10-15, sootvetstvenno.
Dlya oboznacheniya otricatel'nogo chisla ispol'zuetsya znak
podcherk (_), kotoryj dolzhen predshestvovat' chislu. CHisla
mogut soderzhat' desyatichnuyu tochku.
+ - * / % ^
Verhnie dva znacheniya steka skladyvayutsya (+), vychitayutsya
(-), umnozhayutsya (*), delyatsya (/), ishchetsya ostatok ot dele-
niya pervogo na vtoroe (%) ili vozvodyatsya v stepen' (^).
Dva elementa izvlekayutsya iz steka, rezul'tat pomeshchaetsya
obratno v stek, v ego verhushku. Rezul'tat deleniya useka-
etsya do celogo otbrasyvaniem drobnoj chasti. Pri vozvede-
nii v stepen' pokazatel' stepeni dolzhen byt' celym. V
detal'nom opisanii opisyvaetsya, kak rabotat' s chislami s
desyatichnoj tochkoj.
sx
Verhushka osnovnogo steka izvlekaetsya i zapominaetsya v
registre s imenem x, gde x mozhet byt' lyubym simvolom.
Esli s - propisnaya bukva, to x vosprinimaetsya kak stek, i
znachenie pomeshchaetsya v nego. V imeni registra dopuskayutsya
lyubye simvoly, dazhe probely ili simvoly novoj stroki.
- 20 -
lx
Znachenie registra x zanositsya v stek. Znachenie registra
ne izmenyaetsya. Esli l - propisnaya bukva, to x vosprinima-
etsya kak stek, i ego verhnee znachenie izvlekaetsya i pome-
shchaetsya v osnovnoj stek.
Vse registry imeyut nachal'noe pustoe znachenie, kotoroe
vosprinimaetsya kak nulevoe komandoj l i kak oshibochnoe koman-
doj L.
d
Dubliruetsya znachenie verhushki steka.
p
Pechataetsya verhnee znachenie steka. Verhushka ostaetsya bez
izmenenij.
f
Pechatayutsya vse znacheniya v steke i v registrah.
h
Verhnij element steka rassmatrivaetsya kak cepochka simvo-
lov, izvlekaetsya iz steka i vypolnyaetsya, kak komandnaya
stroka dc.
[...]
Pomeshchaet cepochku simvolov, zaklyuchennuyu v kvadratnye skobki
v verhushku steka.
q
Vyhod iz programmy. Esli q vstretilos' pri vypolnenii
cepochki, to uroven' rekursii umen'shaetsya na dva. Esli q -
propisnaya bukva, to uroven' vlozhennosti steka umen'shaetsya
na velichinu verhushki steka.
<<h >>h =h !<<h !>>h !=h
Izvlekayutsya i sravnivayutsya dva verhnih elementa steka.
Esli ustanovlennoe otnoshenie spravedlivo, vypolnyaetsya
registr h, Vosklicatel'nyj znak oznachaet otricanie.
v
Zamenyaetsya verhnee znachenie steka na ego kvadratnyj
koren'. Kvadratnyj koren' celogo chisla usekaetsya do
celogo. Obrabotka chisel s desyatichnoj tochkoj opisyvaetsya v
- 21 -
detal'nom opisanii.
!
Ostavshayasya chast' stroki interpretirutesya kak komanda
DEMOS. Upravlenie vozvrashchaetsya v programmu dc, kogda
komanda zavershitsya.
c
Izvlekayutsya vse znacheniya steka; stek ochishchaetsya.
i
Izvlekaetsya verhnee znchenie steka, kotoroe rassmatrivaetsya
kak osnovanie sistemy schisleniya dlya posleduyushchih vvodimyh
chisel. Esli i - propisnaya bukva, to znachenie osnovaniya
sistemy schisleniya vvodimyh chisel zanositsya v stek. Osno-
vaniya sistem schisleniya men'she edinicy i bol'she 16 ne pod-
derzhivayutsya.
o
Izvlekaetsya verhnee znachenie steka, kotoroe rassmatriva-
etsya kak osnovanie sistemy schisleniya dlya posleduyushchih vyvo-
dimyh chisel. Esli o - propisnaya bukva, to znachenie osno-
vaniya sistemy schisleniya vyvodimyh chisel zanositsya v stek.
k
Izvlekaetsya verhnee znachenie steka, i eto znachenie ispol'-
zuetsya kak tochnost' vychislenij, kotoraya yavlyaetsya kolichest-
vom cifr posle zapyatoj pri vypolnenii umnozheniya, deleniya i
vozvedeniya v stepen'. Tochnost' dolzhna byt' bol'she libo
ravna nulyu i men'she 100. Esli k - propisnaya bukva, to zna-
chenie tochnosti zanositsya v stek.
z
Znachenie glubiny steka zanositsya v stek.
?
Stroka vvoda beretsya iz ishodnogo vvoda (obychno konsol') i
vypolnyaetsya.
2.2. Detal'noe opisanie
2.2.1. Vnutrennee predstavlenie chisel
CHisla zapominayutsya vnutri, ispol'zuya dinamicheskij rasp-
redelitel' pamyati. CHisla hranyatsya v forme cepochek cifr v
sisteme schisleniya s osnovaniem 100 po odnoj cifre na bajt
- 22 -
(storichnaya cifra). CHisla hranyatsya v poryadke ot mladshih cifr
k starshim. Naprimer, chislo 1234 imeet predstavlenie
"34 12". Posle lyuboj arifmeticheskoj operacii nad chislom
tshchatel'no proveryaetsya, chtoby vse cifry nahodilis' v inter-
vale ot 0 do 99 i ne bylo lidiruyushchih nulej. CHislo nol'
predstavlyaetsya pustoj cepochkoj.
Otricatel'nye chisla predstavleny zapis'yu storichnogo
dopolneniya (cifry predstavleny kak raznost' mezhdu 100 i
sootvetstvuyushchej cifroj), kotoroe analogichno zapisi dvoichnogo
dopolneniya dlya dvoichnyh chisel. Samaya starshaya cifra otrica-
tel'nogo chisla vsegda -1, a vse drugie cifry v intervale
0-99. Cifra, predshestvuyushchaya samoj starshej cifre -1, nikogda
ne mozhet byt' 99. Predstavlenie chisla -157 vo vnutrennej
forme: "43 98 -1". My nazovem etu formu kanonicheskoj formoj
chisla. Preimushchestvom etogo predstavleniya yavlyaetsya legkost'
slozheniya otricatel'nyh chisel. Kogda slozhenie vypolnyaetsya
cifra za cifroj, rezul'tat formal'no korrekten. Rezul'tat
tol'ko trebuet modifikacii, esli neobhodimo, dlya perevoda v
kanonicheskuyu formu.
Tak kak naibol'shee dopustimoe chislo 99, a v bajte mozhno
predstavlyat' vdvoe bol'shie chisla, to slozhenie mozhet vypol-
nyat'sya s perenosom.
Za samoj starshej cifroj hranitsya dopolnitel'nyj bajt,
pokazyvayushchij chislo dopustimyh desyatichnyh cifr posle zapyatoj.
Predstavlenie chisla .001: 1,3; chislo posle zapyatoj, pokazy-
vaet, chto eto chislo ne est' znachashchaya cifra. Znachenie etogo
dopolnitel'nogo chisla nazyvaetsya tochnost'yu chisla.
2.2.2. Raspredelitel' pamyati
Dlya vnutrennego hraneniya chisel, komand i dr. dc ispol'-
zuet dinamicheskij raspredelitel' pamyati cepochek. Vse schity-
vaemye i zapisyvaemye chisla prohodyat cherez etot raspredeli-
tel'. Vzaimodejstvie s kazhdoj cepochkoj v raspredelitele
proishodit cherez chetyrehslovnyj zagolovok, soderzhashchij ukaza-
teli na nachalo cepochki, ee konec, sleduyushchee mesto dlya zapisi
i sleduyushchee mesto dlya chteniya. Svyaz' mezhdu raspredelitelem i
dc osushchestvlyaetsya cherez ukazateli k etim zagolovkam.
Raspredelitel' pervonachal'no imeet odnu bol'shuyu cepochku
v spiske svobodnyh cepochek. Vse zagolovki, isklyuchaya odin,
ukazyvayushchij na etu cepochku, imeyutsya v spiske svobodnyh zago-
lovkov. Zaprosy na cepochki vypolnyayutsya po razmeru. Razmer
fakticheski vydelyaemoj cepochki, est' blizhajshaya sleduyushchaya ste-
pen' dvojki. Kogda vypolnyaetsya zapros na cepochku, rasprede-
litel' sperva proveryaet svobodnyj spisok, chtoby uvidet',
est' li tam cepochka nuzhnogo razmera. Esli nichego ne najdeno,
raspredelitel' ishchet bolee dlinnuyu cepochku i rasshcheplyaet ee do
teh por, poka ne poluchitsya cepochka nuzhnogo razmera. Ostavsha-
yasya chast' cepochki pomeshchaetsya v svobodnyj spisok. Esli ne
- 23 -
imeetsya cepochek bol'shego razmera, raspredelitel' pytaetsya
ob容dinit' svobodnye cepochki men'shego razmera v odnu bol'-
shuyu. Tak kak vse cepochki yavlyayutsya rezul'tatom rasshchepleniya
bol'shih cepochek, kazhdaya cepochka imeet sosednyuyu s nej v
pamyati i, esli sosednyaya cepochka svobodna, to, chtoby uveli-
chit' cepochku, mozhno trebuemuyu cepochku ob容dinit' s sosednej.
Pri bezuspeshnoj popytke najti cepochku podhodyashchej dliny
posle ob容dineniya, raspredelitel' zaprashivaet u sistemy svo-
bodnoe mesto. Kolichestvo pamyati v sisteme yavlyaetsya edinst-
vennym ogranicheniem na razmer i kolichestvo cepochek v dc.
V raspredelitele imeyutsya programmy dlya chteniya, zapisi,
kopirovaniya cepochek, sdviga v nachalo, sdviga vpered na shag i
sdviga nazad na shag po cepochkam. Vse manipulyacii s cepoch-
kami vypolnyayutsya, ispol'zuya eti programmy.
Programmy chteniya i zapisi uvelichivayut ukazatel' chteniya
ili ukazatel' zapisi tak, chto simvoly cepochki chitayutsya ili
pishutsya podryad seriyami vyzovov chteniya ili zapisi. Ukazatel'
zapisi yavlyaetsya, po sushchestvu, ukazatelem na konec soderzhashchej
informaciyu chasti cepochki i pri popytke prochitat' informaciyu,
nahodyashchuyusya za etim ukazatelem, chtenie okazhetsya bezuspeshnym,
a programma chteniya v kachestve otveta vernet priznak konca
cepochki. Popytka zapisat' za konec cepochki vynudit rasprede-
litel' zaprosit' bol'shee prostranstvo i zatem skopirovat'
staruyu cepochku v bol'shij blok.
2.2.3. Vnutrennyaya arifmetika
Vse arifmeticheskie dejstviya vypolnyayutsya v celyh chislah.
Operandy (ili operand), trebuyushchiesya dlya vypolneniya dejstviya
izvlekayutsya iz glavnogo steka i u nih otbrasyvaetsya toch-
nost', hranyashchayasya vmeste s chislom. Dlya togo, chtoby poluchit'
rezul'tat vypolneniya programm vnutrennej arifmetiki s podho-
dyashchej tochnost'yu, k operandam dobavlyayutsya nuli ili otbrasyva-
yutsya lishnie cifry. Naprimer, esli tochnost' operandov raz-
lichna, i trebuetsya vyravnivanie, kak eto byvaet pri slozhe-
nii, k operandu s men'shej tochnost'yu dobavlyayutsya nuli. Posle
vypolneniya trebuemoj arifmeticheskoj operacii pered tem, kak
zanesti rezul'tat v stek, v konec chisla dobavlyaetsya znachenie
ego tochnosti
Registr, nazyvaemyj scale, ispol'zuetsya v bol'shinstve
arifmeticheskih operacij; scale opredelyaet kolichestvo desya-
tichnyh cifr v arifmeticheskih vychisleniyah. Znachenie scale
mozhet byt' ustanovleno v velichinu, raspolozhennuyu v verhushke
steka, s pomoshch'yu komandy k. Dlya togo, chtoby zanesti znachenie
scale v stek, ispol'zuetsya komanda K. scale dolzhno byt' ne
men'she nulya i men'she 100. Pri opisanii kazhdoj arifmeticheskoj
operacii budet pokazano tochnoe vliyanie scale na vychisleniya.
- 24 -
2.2.4. Slozhenie i vychitanie
Tochnosti predstavleniya dvuh chisel sravnivayutsya, i k
chislu s men'shej tochnost'yu dobavlyayutsya posleduyushchie nuli dlya
togo, chtoby uravnyat' tochosti oboih chisel. Esli raznica toch-
nostej nechetna, to chislo s men'shej tochnost'yu umnozhaetsya na
10. Tochnost' rezul'tata ustanavlivaetsya zatem v velichinu,
ravnuyu bol'shej iz dvuh tochnostej.
Vychitanie proizvoditsya invertirovaniem znaka chisla dlya
togo, chtoby vychitanie zamenit' na slozhenie.
Slozhenie vypolnyaetsya cifra za cifroj, nachinaya s mladshih
razryadov k starshim. Perenos rasprostranyaetsya obychnym sposo-
bom. Rezul'tiruyushchee chislo beretsya v kanonicheskoj forme, pri
kotoroj mozhet potrebovat'sya ubrat' lidiruyushchie nuli ili, dlya
otricatel'nyh chisel, zamenit' starshie cifry "99 -1" na "-1".
V lyubom sluchae cifry, kotorye ne popadayut v interval 0-99,
dolzhny byt' privedeny v etot interval, putem rasprostraneniya
perenosa ili zaimstvovaniya iz drugih razryadov.
2.2.5. Umnozhenie
Tochnosti dvuh operandov zapominayutsya i otbrasyvayutsya.
Oba operanda delayutsya polozhitel'nymi. Zatem vypolnyaetsya
umnozhenie sposobom cifra za cifroj. Pervoe chislo umnozhaetsya
na kazhduyu cifru vtorogo chisla, nachinaya s mladshego razryada.
Promezhutochnye rezul'taty nakaplivayutsya v chastnye summy, sum-
mirovanie kotoryh daet okonchatel'nyj rezul'tat. Rezul'tat
zanositsya v kanonicheskoj forme, a ego znak opredelyaetsya iz
znakov operandov.
Tochnost' rezul'tata ustanavlivaetsya ravnoj summe toch-
nostej dvuh operandov. Esli eta tochnost' bol'she, chem znache-
nie vnutrennego registra scale, a takzhe bol'she, chem tochnosti
oboih operandov, to tochnost' rezul'tata ustanavlivaetsya v
maksimal'noe iz etih treh znachenij.
2.2.6. Delenie
Tochnosti oboih operandov otbrasyvayutsya. U delimogo otb-
rasyvayutsya lishnie cifry ili dobavlyayutsya nedostayushchie nuli,
chtoby sdelat' tochost' rezul'tata celogo deleniya ravnoj zna-
cheniyu vnutrennej peremennoj scale. Znaki zapominayutsya i
otbrasyvayutsya.
Delenie vypolnyaetsya takzhe, kak esli by ono vypolnyalos'
vruchnuyu. Vychislyaetsya raznica dlin oboih chisel. Esli deli-
tel' dlinnee delimogo, vozvrashchaetsya znachenie nol'. V protiv-
nom sluchae dve starshie cifry delimogo delyatsya na starshuyu
cifru delitelya. Rezul'tat etogo dejstviya ispol'zuetsya kak
pervaya (starshaya) cifra chastnogo. Probnaya cifra umnozhaetsya na
delitel', i rezul'tat vychitaetsya iz delimogo, i dlya
- 25 -
polucheniya ocherednoj cifry chastnogo process povtoryaetsya do
teh por, poka ostatok delimogo ne stanet men'she delitelya. V
konce processa cifry chastnogo perevodyatsya v kanonicheskuyu
formu i, esli eto neobhodimo, proishodit rasprostranenie
perenosa. Znak opredelyaetsya iz znakov oboih operandov.
2.2.7. Nahozhdenie ostatka
Dlya nahozhdeniya ostatka vyzyvaetsya programma deleniya, i
vypolnyaetsya delenie tak, kak eto bylo opisano v predydushchem
razdele. Vozvrashchaemyj rezul'tat - est' ostatok ot deleniya
posle zaversheniya processa deleniya. Znak ostatka imeet takoj
zhe znak, chto i delimoe. Tochnost' ostatka ustanavlivaetsya v
maksimal'nuyu iz velichin tochnosti delimogo i tochnosti chast-
nogo plyus tochnost' delitelya.
2.2.8. Vychislenie kvadratnogo kornya
Iz operanda ubiraetsya tochnost'. Esli neobhodimo,
dobavlyayutsya nuli dlya togo, chtoby poluchit' v rezul'tate tre-
buemuyu tochnost'.
Dlya vychisleniya ispol'zuetsya metod N'yutona s posleduyushchej
aproksimaciej po pravilu: x[n+1] = 1/2 (x[n] + y / x[n])
Nachal'noe predpolozhenie beretsya iz rascheta, chto kvadratnyj
koren' raven starshim dvum cifram.
2.2.9. Vozvedenie v stepen'
Razreshaetsya vozvedenie v stepen' tol'ko s celym pokaza-
telem stepeni. Esli pokazatel' stepeni raven nulyu, to
rezul'tat raven edinice. Esli pokazatel' stepeni otricate-
len, to on delaetsya polozhitel'nym, a na osnovanie delitsya
edinica. SHkala rezul'tata otbrasyvaetsya.
Celyj pokazatel' stepeni rassmatrivaetsya kak dvoichnoe
chislo. Osnovanie posledovatel'no vozvoditsya v kvadrat, a
rezul'tat poluchaetsya kak proizvedenie rezul'tatov etih voz-
vedenij osnovaniya, kotorye sootvetstvuyut poziciyam v dvoichnom
predstavlenii pokazatelya stepeni. CHtoby sdelat' tochnost'
rezul'tata takoj zhe, kak i pri umnozhenii (kotoroe na samom
dele i vypolnyalos'), otbrasyvaetsya neobhodimoe kolichestvo
cifr.
2.2.10. Perevod vvodnyh chisel i vhodnaya sistema schisleniya
CHisla preobrazuyutsya vo vnutrennee predstavlenie po mere
ih schityvaniya. Tochnost' hranitsya s chislom i yavlyaetsya koli-
chestvom desyatichnyh cifr posle zapyatoj. Pered otricatel'nymi
chislami stavitsya znak "_" (podcherk). SHestnadcatirichnye
cifry A-F sootvetstvuyut chislam 10-15, nezavisimo ot vhodnogo
osnovaniya sistemy schisleniya. Dlya izmeneniya osnovaniya sistemy
schisleniya vvodimyh chisel ispol'zuetsya komanda i. |ta
- 26 -
komanda izvlekaet iz steka, usekaet rezul'tiruyushchee chislo do
celogo i ispol'zuet ego kak osnovanie sistemy schisleniya dlya
posleduyushchego vvoda chisel. Pervonachal'no vhodnaya sistema
schisleniya - desyatichnaya. Komanda I zanosit znachenie osnova-
niya sistemy schisleniya vvodnyh chisel v stek.
2.2.11. Vyvodnye komandy
Komanda p vyzyvaet pechat' verhushki steka. Pri etom ver-
hushka steka ne izvlekaetsya. Dlya togo, chtoby vyvesti soderzhi-
moe vseh vnutrennih registrov i vsego steka, ispol'zuetsya
komanda f. Dlya togo, chtoby izmenit' osnovanie sistemy schis-
leniya vyvodnyh chisel, ispol'zuetsya komanda o. Po etoj
komande izvlekaetsya verhushka steka, usekaetsya do celogo i
eto znachenie ispol'zuetsya v dal'nejshem kak osnovanie sistemy
schisleniya dlya vyvodnyh chisel. Sistema schisleniya dlya vyvod-
nyh chisel pervonachal'no ustanovlena v desyatichnuyu. Komanda O
zanosit znachenie osnovaniya sistemy schisleniya dlya vyvodnyh
chisel v stek.
2.2.12. Vyhodnoj format i vyhodnaya sistema schisleniya
Vhodnaya i vyhodnaya sistemy schislenij vliyayut tol'ko na
interpretaciyu chisel pri vvode i vyvode, no ne vliyayut na
arifmeticheskie vychisleniya. Bol'shie chisla vyvodyatsya po 70
cifr na stroke. Esli stroka imeet prodolzhenie, to na eto
ukazyvaet znak \ (obratnaya kosaya cherta) v konce stroki.
Mozhno rabotat' s lyubymi sistemami schisleniya, hotya ne vse
dostatochno celesoobrazny. V chastnosti, naprimer, polezna
sistema schisleniya s osnovaniem 1000, pri kotoroj vyvodimye
chisla pechatayutsya gruppami po tri cifry. Vos'merichnaya i
shestnadcatirichnaya sistemy schisleniya ispol'zuyutsya dlya pere-
voda v i iz etih sistem schisleniya.
2.2.13. Vnutrennie registry
CHisla ili cepochki mogut byt' zapomneny vo vnutrennih
registrah ili zagruzheny v stek iz registrov, ispol'zuya
komandy s i l. Po komande sx proishodit izvlechenie zacheniya
verhushki steka i zapominanie ego v registre x. x mozhet byt'
lyubym simvolom. Po komande lx proishodit zapis' znacheniya
registra x v verhushku steka. Komanda l ne izmenyaet soderzhi-
moe registra, a komanda s ego izmenyaet.
2.2.14. Stekovye komandy
Komanda c chistit stek. Komanda d dubliruet chislo v ver-
hushke steka. Komanda z zanosit v stek dlinu steka. Komanda X
zamenyaet chislo v verhushke steka ego tochnost'yu. Komanda Z
zamenyaet verhushku steka ego dlinoj.
- 27 -
2.2.15. Opisaniya i vyzovy funkcij
Stroka iz simvolov v kode KOI-8, zaklyuchennaya v kvadrat-
nye skobki, zanositsya v stek. Komanda q prekrashchaet rabotu
ili, pri vypolnenii po stroke, umen'shaet uroven' vlozhennosti
na dva.
2.2.16. Vnutrennie registry - programmirovanie na dc
Dlya togo, chtoby programmirovat', rabotaya s programmoj
dc, mozhno pol'zovat'sya komandami zagruzki i zapominaniya l i
s, zapominaniya strok "[]", komandoj vypolneniya x, komandami
proverki <<, >>, =, !<<, !>>, != Komanda x rassmatrivaet ver-
hushku steka kak komandu programmy dc i vypolnyaet ee.
Komandy proverki sravnivayut dva verhnih elementa steka, i,
esli uslovie spravedlivo, to vypolnyaetsya registr x, kotoryj
sleduet za operaciej otnosheniya. Naprimer, dlya togo, chtoby
napechatat' chisla 0-9, nado nabrat' sleduyushchuyu programmu:
[lip1+ si li10>>a]sa
0si lax
2.2.17. Stekovye registry i massivy
Sleduyushchie komandy byli razrabotany dlya ispol'zovaniya ne
lyud'mi, a kompilyatorom. Oni ohvatyvayut stekovye registry i
massivy. Krome steka, s kotorym rabotayut komandy, dc imeet
takzhe neskol'ko individual'nyh stekov dlya kazhdogo registra.
|ti registry operiruyut s komandami S i L. Sx zanosit verhnee
znachenie glavnogo steka v stek dlya registra x. Lx izvlekaet
znachenie iz steka registra x i zanosit rezul'tat v osnovnoj
stek. Komandy s i l takzhe rabotayut s registrami, no ne kak
so stekami. l ne izmenyaet verhushku registrovogo steka, a s
razrushaet to, chto tam nahodilos' ranee.
K komandam dlya raboty s massivami otnosyatsya : i ;. :x
izvlekaet znachenie steka i ispol'zuet ego kak indeks k mas-
sivu x. Sleduyushchij element steka zapominaetsya v elemente mas-
siva x s etim indeksom. Indeks dolzhen byt' bol'she nulya i
men'she 2047. ; - eto komanda dlya zagruzki osnovnogo steka iz
massiva x. Znachenie verhushki steka - eto indeks v massive x,
otkuda dolzhna proizojti zagruzka.
2.2.18. Prochie komandy
Komanda ! interprtiruet ostatok stroki kak komandu
DEMOS i peredaet ee sisteme dlya vypolneniya. Drugaya komanda
kompilyatora - Q. |ta komanda ispol'zuet verhushku steka kak
chislo urovnej rekursii, kotoroe nado propustit'.
- 28 -
2.3. Vybor reshenij
Osnovnoj prichinoj ispol'zovaniya raspredelitelya dinami-
cheskoj pamyati bylo to, chto programma obshchego naznacheniya mogla
byt' (i byla na samom dele) ispol'zovana dlya mnozhestva dru-
gih zadach. Esli zaranee ne izvestno, kakova budet dlina
cepochki, raspredelitel' prinimaet znachenie dlya vvoda i kom-
pilyacii (t.e. komandy, zaklyuchennye v kvadratnye skobki
[...]). Rezul'tat byl takov, chto pri skromnoj stoimosti vo
vremya vypolneniya vse soobrazheniya po povodu raspredeleniya
cepochek i razmerov cepochek byli udaleny iz ostavshejsya chasti
programmy, i otladka stala bolee legkoj. Ispol'zuemyj metod
tratil primerno 25% dostupnoj pamyati.
Vybor chisla 100 kak osnovaniya sistemy schsleniya dlya
vnutrennej arifmetiki po-vidimomu ne imeet yavnogo preimu-
shchestva. Krome togo, osnovanie sistemy schisleniya ne dolzhno
prevyshat' 127 iz-za apparatnyh ogranichenij; i pri stoimosti
5% pamyati otladka stala mnogo legche, a desyatichnyj vyvod
sushchestvenno bystree.
Prichina sozdaniya arifmetiki stekovogo tipa - dat' voz-
mozhnost' vsem komandam dc ot slozheniya do vypolneniya podprog-
ramm po-sushchestvu vypolnyat'sya odinakovo. Rezul'tatom yavilos'
znachitel'noya stepen' logicheskogo razdeleniya konechnoj prog-
rammy na moduli s ochen' malen'koj svyaz'yu mezhdu nimi.
Iz-za nedostatka vzaimodejstviya mezhdu shkaloj i osnova-
niyami sistem schisleniya razumnym bylo obespechit' ponimaemost'
sposoba vypolneniya posle izmeneniya shkaly ili osnovaniya,
kogda chisla uzhe byli vvedeny. Rannyaya versiya, kotoraya imela
glbal'nye ponyatiya shkaly i osnovaniya sistemy schisleniya, ne
byla horosho razrabotana. Esli znachenie scale interpretirova-
los' v tekushchej vvodnoj ili vyvodnoj sisteme schisleniya, to
izmenenie sistemy schisleniya ili shkaly v seredine vychisleniya
mog vyzvat' nepravil'nuyu interpretaciyu rezul'tatov. Tekushchaya
shema imeet to preimushchestvo, chto znachenie vhodnogo i vyhod-
nogo osnovanij sistem schisleniya ispol'zuetsya tol'ko dlya
vvody i vyvoda sootvetstvenno, i ignoriruetsya vo vseh drugih
dejstviyah. Znachenie shkaly ne ispol'zuetsya dlya lyubyh sushchest-
vennyh celej v lyuboj chasti programmy, a ispol'zuetsya tol'ko
dlya togo, chtoby predotvratit' uvelichenie kolichestva desyatich-
nyh znakov za granicy tekushchej tochnosti.
Razumnym resheniem vybora shkaly rezul'tatov arifmetiches-
kih dejstvij bylo by to, chto pri yavnom ukazanii pol'zovatelya
ni odna znachashchaya cifra ne dolzhna byt' otbroshena. Dejstvi-
tel'no, esli pol'zovatel' hochet slozhit' chisla 2.5 i 3.1415,
to kazhetsya razumnym dat' emu rezul'tat 5.6415, poskol'ku v
ostal'nyh znachashchih cifrah net neobhodimosti.
S drugoj storony, pri umnozhenii i vozvedenii v stepen'
vyrabatyvaetsya rezul'tat s kolichestvom cifr bol'shim, chem u
- 29 -
operandov, i kazhetsya razumnym dat' kak mimnimum kolichestvo
cifr v operandah, a ne bol'she, esli tol'ko pol'zovatel' ne
ukazhet yavno kolichestvo cifr, opredeliv znachenie scale.
Kvadratnyj koren' mozhet byt' vychislen tak zhe, kak i umnozhe-
nie. Vpolnenie deleniya daet proizvol'noe kolichestvo cifr, i
ne tak prosto predpolozhit' pozhelaniya pol'zovatelya otnosi-
tel'no kolichestva cifr. V etom sluchae pol'zovatel' dolzhen
opredelit' znachenie scale. SHkala ostatka vybrana dlya togo,
chtoby mozhno bylo vosstanovit' delimoe iz chastnogo i ostatka.
|to legko vypolnit': ni odna cifra ne otbrasyvalas'.
- 30 -
SODERZHANIE
ANNOTACIYA ......................................... 2
1. VVEDENIE .......................................... 2
2. INTERAKTIVNYJ KALXKULYATOR bc ...................... 3
2.1. Prostye dejstviya s celymi chislami ............... 3
2.2. Osnovaniya sistem schisleniya ...................... 4
2.3. Masshtabirovanie ................................. 6
2.4. Funkcii ......................................... 7
2.5. Indeksirovannye peremennye ...................... 8
2.6. Upravlyayushchie operatory ........................... 9
2.7. Nekotorye detali ................................ 11
2.8. Tri vazhnye veshchi ................................. 12
2.9. Detal'noe opisanie .............................. 13
2.9.1. Oboznacheniya ................................... 13
2.9.2. Znaki ......................................... 13
2.9.2.1. Kommentarii ................................. 13
2.9.2.2. Identifikatory .............................. 13
2.9.2.3. Klyuchevye slova .............................. 13
2.9.2.4. Konstanty ................................... 14
2.9.3. Vyrazheniya ..................................... 14
2.9.3.1. Prostye vyrazheniya ........................... 14
2.9.3.1.1. Imenovannye vyrazheniya ..................... 14
2.9.3.1.2. Vyzovy funkcij ............................ 14
2.9.3.1.3. Konstanty ................................. 15
2.9.3.1.4. Kruglye skobki ............................ 15
2.9.3.2. Unarnye operacii ............................ 15
2.9.3.3. Operaciya vozvedeniya v stepen' ............... 16
2.9.3.4. Operacii gruppy umnozheniya ................... 16
2.9.3.5. Operacii gruppy slozheniya .................... 16
2.9.3.6. Operatory prisvaivaniya ...................... 17
2.9.4. Otnosheniya ..................................... 17
2.9.5. Klassy pamyati ................................. 17
2.9.6. Operatory ..................................... 18
2. INTERAKTIVNYJ STEKOVYJ KALXKULYATOR dc ............. 20
2.1. Opisanie sintaksisa ............................. 20
2.2. Detal'noe opisanie .............................. 22
2.2.1. Vnutrennee predstavlenie chisel ................ 22
2.2.2. Raspredelitel' pamyati ......................... 23
2.2.3. Vnutrennyaya arifmetika ......................... 24
2.2.4. Slozhenie i vychitanie .......................... 25
2.2.5. Umnozhenie ..................................... 25
2.2.6. Delenie ....................................... 25
2.2.7. Nahozhdenie ostatka ............................ 26
2.2.8. Vychislenie kvadratnogo kornya .................. 26
2.2.9. Vozvedenie v stepen' .......................... 26
2.2.10. Perevod vvodnyh chisel i vhodnaya sistema schisle-
niya ........................................... 26
- 31 -
2.2.11. Vyvodnye komandy .............................. 27
2.2.12. Vyhodnoj format i vyhodnaya sistema schisleniya .. 27
2.2.13. Vnutrennie registry ........................... 27
2.2.14. Stekovye komandy .............................. 27
2.2.15. Opisaniya i vyzovy funkcij ..................... 28
2.2.16. Vnutrennie registry - programmirovanie na dc .. 28
2.2.17. Stekovye registry i massivy ................... 28
2.2.18. Prochie komandy ................................ 28
2.3. Vybor reshenij ................................... 29
- 32 -
Last-modified: Mon, 29 Jun 1998 13:54:30 GMT