File: bc.1

package info (click to toggle)
manpages-hu 20010119-6
  • links: PTS
  • area: main
  • in suites: buster, stretch
  • size: 2,272 kB
  • ctags: 2
  • sloc: makefile: 56; lisp: 56
file content (720 lines) | stat: -rw-r--r-- 30,564 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
.\"
.\" bc.1 - the *roff document processor source for the bc manual
.\"
.\" This file is part of bc written initially for MINIX.
.\" Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
.\"
.\" This program is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation; either version 2 of the License , or
.\" (at your option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public License
.\" along with this program; see the file COPYING.  If not, write to
.\" the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
.\"
.\" You may contact the author by:
.\" e-mail: phil@cs.wwu.edu
.\" us-mail: Philip A. Nelson
.\" Computer Science Department, 9062
.\" Western Washington University
.\" Bellingham, WA 98226-9062
.\"
.\"
.TH bc 1 .\" "Kziknyv" v1.03 "Nov 2, 1994"
.SH NV
bc \- Lebegpontos kalkultor nyelv
.SH TTEKINTS
\fBbc\fR [ \fB-lws\fR ] [ \fI fjl ...\fR ]
.SH VERZI
Ez a kziknyv lap a GNU bc 1.03-as verzijt rja le.
.SH LERS
\fBbc\fR egy olyan nyelv, amely lebegpontos szmolst nyjt, interaktv
vgrehajtssal. Van nmi hasonlsg a C programozsi nyelvvel. Egy standard
matematikai knyvtr megadhat parancssor paramterknt. Ha szksges, a
matematikai knyvtrat definilni kell, mieltt brmilyen ms fjlt
feldolgoznnk. A \fBbc\fR a megadott fjlokban lev kdot a megads
sorrenjben dolgozza fel. Miutn minden fjlt feldolgozott a \fBbc\fR
a szabvnyos bemenetrl vr tovbbi utastsokat. Minden kdot a beolvass
pillanatban vgrehajt. (Ha egy fjlban olyan utasts tallhat, amely
meglltja a feldolgozt, a \fBbc\fR nem fog a szabvnyos bemenetrl olvasni.
.PP
A \fBbc\fR ezen implementcija sok bvtssel rendelkezik a POSIX
standardhoz kpest. Parancssor opcival megadhat, hogy a program ezeknl
figyelmeztessen, vagy dobja vissza ket. Ez a dokumentum az ezen feldolgoz
ltal elfogadott nyelvet rja le. A kiterjesztsek termszetesen jellsre
kerlnek.
.SH OPCIK
.IP -l
Definilja a standard matematikai knyvtrat.
.IP -w
Figyelmeztet a POSIX \fBbc\fR-hez kpest hasznlt kiterjesztsekre.
.IP -s
Csak a pontos POSIX \fBbc\fR nyelvet dolgozza fel.
.SH SZMOK
A \fBbc\fR legalapvetbb eleme a szm. A szmok pontossga brmekkora lehet.
Ez a pontossg mind az egsz, mind a trt rszre vonatkozik. Minden szm belsleg
decimlisan troldik, s a szmtsok is decimlisan hajtdnak vgre.
(Ez a verzi az osztsnl s a szorzsnl csonkt.) A szmoknak kt
jellemzje van, a hossz s a lptk. A hossz a szignifikns decimlis
szmjegyek szmt jelenti, a lptk pedig a tizedspont utn levkt.
Pldul:
.nf
.RS
 .000001 szmnak a hossza s a lptke is 6.
mg az 1935.000 szmnak a hossza 7, a lptke 3.
.RE
.fi
.SH VLTOZK
A szmokat kt fajta vltozban lehet trolni, egyszer vltozban
vagy tmbben. Mind az egyszer, mind a tmbvltoznak van neve. A
neveknek betvel kell kezddnik, ezt kvethetik szmok, betk vagy
alhzsok. Minden betnek kisbetnek kell lennie. (A teljes
alfanumerikus nevek mr egy kiterjeszts. A POSIX \fBbc\fR-ben minden
nv egy kisbetbl ll.) A vltoz tpusa a kontextusbl tisztn kiderl,
mivel minden tmb vltozt egy szgletes zrjel pr ([]) kvet.
.PP
Ngy specilis vltoz van, \fBscale, ibase, obase,\fR s
\fBlast\fR. A \fBscale\fR azt definilja, hogy nhny mvelet a
tizdes pont utn hny szmjegyet hasznljon. A \fBscale\fR
alaprtelmezett rtke 0. Az \fBibase\fR s az \fBobase\fR definilja
a bemeneti s a kimeneti szmrendszer konverzit. Az alaprtelmezett
szmrendszer mind a bemenetre, mind a kimenetre 10-es. A \fBlast\fR
(kiterjeszts) vltozban az utols kirt rtk szerepel. Ez
ksbb kerl rszletezsre. Ezeknek vtlozknak lehet rtket adni, de
kifejezsben is hasznlhatak.
.SH MEGJEGYZS
A megjegyzsek a \fBbc\fR-ben a \fB/*\fR karakterekkel kezddnek s a
\fB*/\fR karakterek jelzik a vgt. A megjegyzsek brhol megjelenhetnek,
s a bemenetben egy szkzt jelentenek. (Ez azt jelenti, hogy a megjegyzsek
elhatrolnak ms objektumokat. Pldul, egy megjegyzs nem lehet egy vltoznv
kzepn.) A megjegyzsekben brmennyi jsor lehet (sor vge), a
megjegyzs kezdete s vge kztt.
.SH KIFEJEZSEK
A szmokat kifejezsekkel s utastsokkal lehet manipullni. Mivel a
nyelvet interaktvra ksztettk, az utastsok s a kifejezsek rgtn
vgrehajtdnak. Nincs "f" program (main fggvny). A kd olyan
sorrendben hajtdik vgre, ahogy a \fBbc\fR beolvassa. (A fggvnyek,
ksbb kerlnek lersra, a beolvass sorrendjben kerlnek definilsra.)
.PP
Egy egyszer kifejezs egy konstans. A \fBbc\fR a konstanst az \fBibase\fR
vltozban megadott bemeneti szmrendszer szerint decimlis szmm
konvertlja. (Kivtel a fggvnyeknl.) Az \fBibase\fR rvnyes
rtkei 2-tl 16-ig terjednek. Ezen a hatron tli rtket megadva
az \fBibase\fR vltoznak, a vltoz rtke 2 vagy 16 lesz. A bemen
szmok a 0-9-ig s az A-F-ig terjed karaktereket tartalmazhatjk.
(Megjegyzs: Nagybetknek kell lennik. A kisbetk a vltozknak
vannak fenntartva.) Az egy szmjegy szmoknak mindig a szmjegy az
rtke, az \fBibase\fR vltoztl fggetlenl (pl.: A = 10). A tbb
szmjegy szmoknl a \fBbc\fR az \fBibase\fR-nl nagyobb szmjegyeket
\fBbc\fR - 1-re cserli. Ezltal, a \fBFFF\fR mindig a lehet legnagyobb
hromjegy szmot jelenti.
.PP
A teljes kifejezsek hasonlak a tbbi magas szint nyelvben levkhz.
Mivel csak egyetlen tpus szm van, nincs szably a tpusok keversnek
kezelsre. Minden kifejezsnek van egy pontossga. Ez az eredeti szmokbl,
az elvgzett mveletekbl s mg sok egybbl tevdik ssze, az rtke a
\fBscale\fR vltozban tallhat. Ezen vltoz leglis rtkei a 0-tl
a C nyelvben egsz szmnak megadhat legnagyobb rtkig terjednek.
.PP
Itt kvetkezik a legalis kifejezsek lersa, az "expr" a teljes kifejezsre,
a "var" pedig egy egyszer, vagy egy tmb vltozra vonatkozik.
Egy egyszer vltozra a
.RS
\fIname\fR
.RE
mg egy tmbre a
.RS
\fIname\fR[\fIexpr\fR]
.RE
lersval hivatkozhatunk.
Hacsak msknt nem specifikljuk, az eredmny pontossga
a kifejezsek pontossgnak a maximuma lesz.
.IP "- expr"
Az eredmny a kifejezs negltja.
.IP "++ var"
A vltoz rtke eggyel n, s az eredmny a vltoz j rtke lesz.
.IP "-- var"
A vltoz rtke eggyel cskken, s az eredmny a vltoz j rtke lesz.
.IP "var ++"
A kifejezs eredmnye a vltoz eredeti rtke, majd a vltoz rtke
n eggyel.
.IP "var --"
A kifejezs eredmnye a vltoz eredeti rtke, majd a vltoz rtke
cskken eggyel.
.IP "expr + expr"
Az eredmny a kt kifejezs sszege.
.IP "expr - expr"
Az eredmny a kt kifejezs klnbsge.
.IP "expr * expr"
Az eredmny a kt kifejezs szorzata.
.IP "expr / expr"
Az eredmny a kt kifejezs hnyadosa. Az eredmny pontossgt a
\fBscale\fR vltoz rtke hatrozza meg.
.IP "expr % expr"
Az eredmny a "maradk", amely a kvetkezkppen kerl kiszmolsra.
Az a%b kiszmolshoz elszr, kiszmolsra kerl az a/b, \fBscale\fR
szmjegyre. Az eredmny a kvetkezkppen addik: a-(a/b)*b, a pontossga
a \fBscale\fR+scale(b) s scale(a) kzl a nagyobb lesz. Ha a \fBscale\fR
egyenl nullval, vagy mindkt kifejezs egsz, a maradk is egsz lesz.
.IP "expr ^ expr"
Az eredmny az els kifejezs a msodikra emelve. A msodik kifejezsnek
egsznek kell lennie. (Ha a msodik kifejezs nem egsz, egy figyelmeztets
generldik, s az rtk egsz rtkre csonkoldik.) Az eredmny pontossga
\fBscale\fR lesz, ha a kitev negatv. Ha a kitev pozitv, az eredmny
pontossga az els kifejezs pontossgnak s a kitev rtknek a szorzata
s - az els kifejezs s a \fBscale\fR vltoz rtke kzl a nagyobb -
kzl a kisebb lesz. (Pl. scale(a^b) = min(scale(a)*b, max( \fBscale,\fR scale(a))).)
Megjegyezend, hogy az expr^0 mindig 1 rtkkel tr vissza.
.IP "( expr )"
Ez megvltoztatja a kifejezs kirtkelsnek standard precedencijt.
.IP "var = expr"
A vltoz rtke a kifejezs lesz.
.IP "var <op>= expr"
Ez ekvivalens a "var = var <op> expr" kifejezssel, azzal a kivtellel,
hogy a "var" rsz csak egyszer rtkeldik ki. Ez akkor okozhat
klnbsget, ha a "var" egy tmb.
.PP
 A relcis kifejezsek specilis kifejezs fajtk, amelyek
mindig 0-t, vagy 1-et adnak vissza, 0-t, ha a relci hamis,
s 1-et, ha igaz. Ezek brmilyen leglis kifejezsben megjelenhetnek.
(A bc POSIX vltozatban, hogy a relcis kifejezsek csak if,
while s for utastsokban szerepelhetnek, illetve csak egy tesztelsk
lehetsges.) A relcis opertorok a kvetkezk:
.IP "expr1 < expr2"
Az eredmny 1, ha az expr1 kisebb, mint az expr2.
.IP "expr1 <= expr2"
Az eredmny 1, ha az expr1 kisebb, vagy egyenl, mint az expr2.
.IP "expr1 > expr2"
Az eredmny 1, ha az expr1 nagyobb, mint az expr2.
.IP "expr1 >= expr2"
Az eredmny 1, ha az expr1 nagyobb, vagy egyenl, mint az expr2.
.IP "expr1 == expr2"
Az eredmny 1, ha az expr1 egyenl az expr2-vel.
.IP "expr1 != expr2"
Az eredmny 1, ha az expr1 nem egyenl az expr2-vel.
.PP
A boolean mveletek is leglisak. ( A POSIX \fBbc\fR-ben nincsenek
boolean mveletek.) Minden boolean mveletnek az rtke 0, vagy 1
(hamis, vagy igaz), mint a relcis mveleteknl. A boolean
mveletek a kvetkezek:
.IP "!expr"
Az eredmny 1, ha a kifejezs 0.
.IP "expr && expr"
Az eredmny 1, ha a mindkt kifejezs nem 0.
.IP "expr || expr"
Az eredmny 1, ha a brmelyik kifejezs nem 0.
.PP
A kifejezsek precedencija a kvetkez (alacsonytl a magas fel):
.nf
.RS
|| opertor, balrl asszociatv
&& opertor, balrl asszociatv
! opertor, nem asszociatv
Relcis opertorok, balrl asszociatv
rtkad opertor, jobbrl asszociatv
+ s - opertorok, balrl associative
*, / s % opertorok, balrl asszociatv
^ opertor, jobbrl asszociatv
unris - opertor, nem asszociatv
++ s -- opertorok, nem asszociatv
.RE
.fi
.PP
Ez a precedencia gy van megvlasztva, hogy a POSIX \fBbc\fR al
programok is korrekten fussanak. Emiatt, a relcis s logikai
opertorokat az rtkad opertoroknl nha szokatlan eredmny is
kijhet. Lsd a kvetkez kifejezst:
.RS
a = 3 < 5
.RE
.PP
A legtbb C programoz ezt gy rtelmezi, hogy a "3 < 5" (az rtke 1)
kerl az "a" vltozba. A \fBbc\fR itt a kvetkezt csinlja, hozzrendeli
a 3-at az "a" vltozhoz, majd a 3-at sszehasonltja az 5-tel. A legjobb,
hogyha rtkad opertort hasznlsz relcis, s logikai opertorokkal,
akkor hasznlsz zrjeleket.
.PP
Van nhny egyb specilis kifejezs, amelyet mg a \fBbc\fR nyjt.
Ezek a felhasznl ltal definilhat fggvnyek, s a standard
fggvnyek hvsa. Ezek a kvetkez alakban jelennek meg:
\fIname\fB(\fIparameters\fB)\fR
A fggvnyekhez lsd mg a felhasznl ltal definilt fggvnyek
fejezetet. A standard fggvnyek a kvetkezek:
.IP "length ( expression )"
A length fggvny rtke a kifejezsben megadott szm rtkes jegyeinek
szma.
.IP "read ( )"
A read fggvny (kiterjeszts) beolvas egy szmot a szabvnyos bemenetrl,
fggetlenl attl, hogy a fggvny hol tallhat. Figyelmeztets: ez
problmt okozhat, ha mind a program, mind az adatok a standard bementrl
jnnek. A legjobb, ha ezt a fggvnyt csak elre megrt programoknl
hasznljuk, amely adatokat kr a felhasznltl, de nem engedi meg, hogy
a felhasznl program kdot is berjon. A read fggvny rtke a
szabvnyos bemenetrl beolvasott szm rtke, az \fBibase\fR vltoz rtkt,
mint szmrendszert hasznlva a konverzi alapjul.
.IP "scale ( expression )"
A scale fggvny rtke a kifejezs tizedespont mgtt szerepl
szmjegyeinek szma.
.IP "sqrt ( expression )"
Az sqrt fggvny rtke a kifejezs rtknek a ngyzetgykvel egyenl.
Ha a kifejezs negatv, egy futsi hiba generldik.
.SH UTASTSOK
Az utastsok (mint a legtbb algebrai nyelvnl) hatrozzk meg a kifejezsek
kirtkelsnek sorrendjt. A \fBbc\fR-ben az utastsok akkor hajtdnak
vgre, amint "arra md van". A vgrehajts akkor trtnik meg, mikor az
interpreter j sor karakterrel tallkozik, illetve, mikor egy, vagy
tbb komplett utasts felpl. Ezen azonnali vgrehajts miatt, az
jsorok nagyon fontosak a \fBbc\fR-ben. Valjban, mind a pontosvessz,
mind az jsor hasznlhat utastselvlasztknt. Egy rossz helyre rakott
jsor szintaktikai hibt okoz. Mivel az jsorok utasts elhatrolk,
el lehet ket rejteni, a backslash karakter segtsgvel. A "\e<nl>"
karaktersorozattal, ahol az <nl> az jsort jelenti, az jsor csak
egy szkzknt jelenik meg a \fBbc\fR-ben. Egy utasts lista a
pontosvesszvel, vagy jsorral elvlasztott utastsok sorozata.
Itt kvetkeznek a \fBbc\fR utastsai, s az, hogy mit csinlnak:
(A szgletes zrjelbe ([]) zrt rszek az utastsbl elhagyhatak.)
.IP "expression"
Ez az utasts ktfle kppen is megjelenhet. Az egyik, mikor a
kifejezs "<vltoz> <rtkads> ...", ez egy rtkadsi utasts.
Ha a kifejezs nem rtkadsi utasts, akkor kirtkelse utn kapott
eredmny kirsra kerl a szabvnyos kimenetre. A szm kirsa utn egy
jsor is kirsra kerl. Pldul, az "a=l" egy rtkadsi utasts,
mg az "(a=l)" egy kifejezs, amelyben van egy rtkads. Minden
szm az \fBobase\fR vltozban trolt szmrendszer alapjn kerl
kirsra. Az \fBobase\fR vltoz leglis rtkei 2-tl a
BC_BASE_MAX konstansban trolt rtkig mehetnek. (Lsd mg
a HATRRTKEK fejezetet.) A 2-estl a 16-os szmrendszerig a
szmok kirsa a szoksos mdon trtnik. 16-osnl nagyobb
szmrendszereknl a \fBbc\fR tbb karakterbl ll szmjegyeket
hasznl, ahol minden magasabb szmrendszerbeli szmjegynek a tizes
szmrendszerbeli szmkpe rdik ki. A tbb karakteres szmjegyeket
egymstl a program szkzkkel vlasztja el. Minden szmjegy annyi
karakterbl ll, amennyi az "obase-1" szm kirshoz kell, 10-es
szmrendszerben. Mivel a szmok vltoz pontossgak, elfordulhat, hogy
nhny szm kirsa nem fr ki egy sorba. Ezeket a hossz szmokat
a program sorokra trdeli, a sorok vgn egy-egy "\e" karakterrel.
Az egy sorba kirt karakterek maximlis szma 70. A \fBbc\fR
interaktivitsa miatt, az utols kirt szmot eltrolja egy
specilis vltozban. gy az utoljra kirt szm megkapshoz
nem szksges jra lerni az egsz kifejezst, hanem csak a
\fBlast\fR vltoz rtkt kell elszedni. A \fBlast\fR vltoznak
rtket is lehet adni, ez esetben a benne trolt utols rtk
egyszeren fellrdik. Ez az rtk addig marad meg benne, amg
a kvetkez szm kirsra nem kerl, vagy ms rtket nem adnak
neki. (Nmelyik implementci megengedi, hogy a \fBlast\fR
vltozra egy egyedli ponttal ("."), amely nem rsze szmnak,
hivatkozzunk.)
.IP "string"
A string a kimenetre rdik ki. A stringek idzjellel kezddnek, s
brmilyen karaktert tartalmazhatnak a kvetkez idzjelig. Egyetlen
karakter sem kerl rtelmezsre, mg az jsor karakter sem. A string
kirsa utn nem rdik ki jsor karakter.
.IP "\fBprint\fR list"
A print utasts (kiterjeszts), a kirs egy jabb mdozatt knlja.
A "list" egy string s kifejezs lista, vesszvel elvlasztva. Minden
string vagy kifejezs a lista sorrendjben rdik ki. Zr jsor nem
rdik ki. A kifejezsek kirtkeldnek, s az eredmnyk a \fBlast\fR
vltozban trolsra kerl. A stringek pedig egyszeren kirsra kerlnek,
specilis karaktereket is tartalmazhatnak. A specilis karakterek a
backslalsh karakterrel kezddnek (\e). A specilis karakterek a
kvetkezek: "a" (figyelmeztets, vagy bip), "b" (backspace),
"f" (lapdobs), "n" (jsor), "r" (kocsi vissza), "q" (idzjel),
"t" (tabultor) s "\e" (backslash). Minden ms, a backslash utn
lev karaktert figyelmen kvl hagy a program.
.IP "{ utasts_lista }"
Ez egy sszetett utasts. Ennek segtsgvel lehet tbb vgrehajtand
utastst egybekapcsolni.
.IP "\fBif\fR ( kifejezs ) \fBthen\fR utasts1 [\fBelse\fR utasts2]"
Az if kirtkeli a kifejezst, s vgrehajtja az utasts1-et, vagy
az utasts2-t, a kifejezs rtktl fggen. Ha a kifejezs eredmnye
nem nulla, az utasts1 hajtdik vgre. Ha az utasts2 ltezik, s a
kifejezs eredmnye nulla, az utasts2 hajtdik vgre. (Az else g
kiterjeszts.)
.IP "\fBwhile\fR ( kifejezs ) utasts"
A while utasts mindaddig vgrehajtja az utastst, amg a kifejezs
eredmnye nem nulla. Az utasts minden vgrehajtsa eltt kirtkeli
a kifejezst. A ciklus akkor fejezdik be, ha a kifejezs eredmnye
nulla lesz, vagy ha vgrehajtdik egy break utasts.
.IP "\fBfor\fR ( [kifejezs1] ; [kifejezs2] ; [kifejezs3] ) utasts"
A for utasts egy utasts ismtelt vgrehajtst vezrli. A kifejezs1
a ciklus eltt kirtkeldik. A kifejezs2 az utasts minden vgrehajtsa
eltt kirtkeldik. Ha nem nulla, az utasts vgrehajtdik, ha nulla, a
ciklus vget r. Az utasts minden vgrehajtsa utn, a kifejezs3
kirtkeldik, mieltt a kifejezs2 kiszmoldna. Ha a kifejezs1
s a kifejezs3 hinyzik, a kirtkeldsk helyn semmi nem fog trtnni.
Ha a kifejezs2 hinyzik, az olyan, mintha a kifejezs2 helyn egy olyan
kifejezs lenne, amelynek az eredmnye mindig 1. (Az opcionlis kifejezsek
egy kiterjeszts.) A kvetkez ekvivalens kdokat ad a for utastsra:
.nf
.RS
kifejezs1;
while (kifejezs2) {
   utasts;
   kifejezs3;
}
.RE
.fi
.IP "\fBbreak\fR"
Ezzel az utastssal ki lehet lpni a legbels while, vagy for utastsbl.
.IP "\fBcontinue\fR"
Ez az utasts (kiterjeszts) azt eredmnyezi, hogy a legbels for utasts
egy j ciklust kezd.
.IP "\fBhalt\fR"
Ez az utasts (kiterjeszts), ha vgrehajtdik, azt eredmnyezi, hogy
a \fBbc\fR kilp.
.IP "\fBreturn\fR"
Nulla rtkkel tr vissza egy fggvnybl (lsd mg a fggvnyek fejezetet).
.IP "\fBreturn\fR ( expression )"
A kifejezs eredmnyvel tr vissza a fggvnybl (lsd mg a fggvnyek
fejezetet).
.SH PSZEUDO UTASTSOK
Ezek az utastsok a tradicionlis rtelemben nem utastsok. Nem
hajtdnak vgre. Funkcijukat "fordtsi" idben fejtik ki.
.IP "\fBlimits\fR"
Kirja a \fBbc\fR adott verzija ltal hasznlt hatrokat. Kiterjeszts.
.IP "\fBquit\fR"
Ha a quit utastst beolvassa, a \fBbc\fR feldolgoz kilp. Nem
szmt, hogy az utasts hol tallhat (pl. az "if (0 == 1) quit"
hatsra is kilp a \fBbc\fR.)
.IP "\fBwarranty\fR"
Kirja a figyelmeztet zenetet. Kiterjeszts.
.SH FGGVNYEK
A fggvnyekkel definilhatunk szmtsokat, amelyeket csak ksbb
kvnunk vgrehajtani. A fggvnyek a
.B bc 
-ben mindig egy rtket szmolnak, s azt visszaadjk a hvnak. A fggvny
defincija "dinamikus" abban az rtelemben, hogy mindaddig definilatlan,
amg a feldolgoz nem tallkozik vele a bemeneten. Ez a definc mindaddig
hasznlhat, amg egy ugyanezen nv fggvny definicval nem tallkozik.
Az j definci fellrja a rgit. Egy fggvny defincija a kvetkezkppen
nz ki:
.nf
.RS
\fBdefine \fIname \fB( \fIparameters \fB) { \fInewline
\fI    auto_list   statement_list \fB}\fR
.RE
.fi
A fggvnyhvs is egy kifejezs, a kvetkez formban:
"\fIname\fB(\fIparameters\fB)\fR".
.PP
A paramterek szmok, vagy tmbk lehetnek (kiterjeszts). A fggvny defincjban
nulla, vagy tbb paramter definilhat, vesszvel elvlasztva. A szmok
csak rtk szerinti tadssal, a tmbk csak cm szerinti tadssal hvdnak
meg. A tmbket a paramterek kztt a "\fInv\fB[]\fR" mdon kell
specifiklni. A fggvnyhvsnl a szm paramterek teljes kifejezsek
lehetnek. A tmbknl ugyanaz a jells hasznland, mint a definilskor.
A nevesitett tmbk cm szerinti tadssal kerlnek a fggvnyhez.
Mivel a fggvny defincija dinamikus, a paramterek szma s
tpusa csak a hvs pillanatban kerl ellenrzsre. Ha ebben eltrs
mutatkozik, egy futsi-hiba vltdik ki. Futsi-hiba vltdik ki
akkor is, ha egy nem ltez fggvnyt hvunk meg.
.PP
Az \fIauto_list\fR egy opcionlis vltoz lista, amely "helyi"
vltozkat tartalmazza. A szintaxisa: "\fBauto \fInv\fR, ... ;".
(A pontosvessz opcionlis.) Minden \fInv\fR egy auto vltoz
neve. Tmbk is definilhatak gy, a szoksos mdon. Ezek
a vltozk a vermen kapnak helyet, a fggvny belpse utn.
A vltozk ezutn inicializlsra kerlnek nulla kezdrtkkel,
s a fggvny vgrehajtsa sorn hasznlhatak. Amikor a fggvny
kilp, ezeket a vltozkat eltvoltja a verembl, gy az
eredeti rtkk helyrelltdik. A paramterek is auto vltozk,
amelyek a fggvny meghvsakor kapjk meg rtkket. Az auto
vltozk klnbznek a tradcionlis helyi vltozktl a
kvetkez dologban: ha A meghvja a B fggvnyt, B ltja az A
auto vltozit, hacsak B-ben nincs ugyanezen nven is auto
vltoz definilva. Azon tny miatt, hogy az auto vltozk s
a paramterek egy vermen kapnak helyet, a \fBbc\fR kezeli a
rekurzv fggvnyeket is.
.PP
A fggvny trzse \fBbc\fR utastsok listja. Az utastsokat
pontosvesszk, vagy jsorok vlasztjk el. A return utasts
hatsra a fggvny vgrehajtsa vget r, s visszatr egy
rtkkel. Az els forma, a "\fBreturn\fR", 0-t ad vissza a hvnak,
mg a msodik, "\fBreturn ( \fIkifejezs \fB)\fR", kirtkeli
a kifejezst, s az eredmnyt adja vissza. A fggvny vgn,
ha mst nem runk ki, mindig van egy "\fBreturn (0)\fR", ez
megkml attl, hogy explicite ki kelljen rni a return
utastst.
.PP
A fggvnyeknl megvltozik az \fBibase\fR vltoz hasznlata is.
A fggvny trzsben szerepl minden konstans, a fggvny hvsakor
hasznlatos \fBibase\fR alapjn konvertldik. Ha az \fBibase\fR-t
megvltoztatjuk egy fggvnyben, annak nem lesz hatsa, kivve a
\fBread\fR standard fggvnyt, amely mindig az \fBibase\fR
aktulis rtkt hasznlja a szmok konvertlshoz.
.SH MATEMATIKAI KNYVTR
Ha a \fBbc\fR-t a \fB-l\fR opcival indtjuk, a matematikai
knyvtr betltdik, s a pontossg 20-as lesz. A matematikai
fggvnyek azzal a pontossggal szmoljk ki az eredmnyt,
amely a meghvsukkor be volt lltva. A matematikai knyvtr
a kvetkez fggvnyeket definilja:
.IP "s (\fIx\fR)"
Az x (radin) sznusza.
.IP "c (\fIx\fR)"
Az x (radin) kosznusza.
.IP "a (\fIx\fR)"
Az x arkusz tangense.
.IP "l (\fIx\fR)"
Az x termszetes logaritmusa.
.IP "e (\fIx\fR)"
Az e x-edik hatvnya.
.IP "j (\fIn,x\fR)"
Az n-ed rend Bessel fuggvenye x-nek.
.SH PLDK
A /bin/sh-ban a kvetkez utasts visszaadja a "pi" rtkt a
\fBpi\fR krnyezeti vltozban.
.RS
\f(CW
pi=$(echo "scale=10; 4*a(1)" | bc -l)
\fR
.RE
.PP
Az itt kvetkez pldban a matematikai knyvtrban tallhat
hatvny fggvny defincijt mutatjuk be. A fggvny POSIX
\fBbc\fR nyelven rdott.
.nf
.RS
\f(CW
scale = 20

/* Kihasznlja a kvetkez tnyt: e^x = (e^(x/2))^2.
   Mikor az x elg kicsi, a kvetkez sort hasznljuk:
     e^x = 1 + x + x^2/2! + x^3/3! + ...
*/

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

  /* Ellenrzi az x eljelt. */
  if (x<0) {
    m = 1
    x = -x
  }

  /* Elfelttel. */
  z = scale;
  scale = 4 + z + .44*x;
  while (x > 1) {
    f += 1;
    x /= 2;
  }

  /* Inicializlja a vltozkat. */
  v = 1+x
  a = x
  d = 1

  for (i=2; 1; i++) {
    e = (a *= x) / (d *= i)
    if (e == 0) {
      if (f>0) while (f--)  v = v*v;
      scale = z
      if (m) return (1/v);
      return (v/1);
    }
    v += e
  }
}
\fR
.RE
.fi
.PP
A kvetkez kd a \fBbc\fR kiterjesztett szolgltatsait hasznlja,
egy egyszer csekkfzet egyenleg kiszmolsra. Legjobb, ha ezt
a programot fjlba lementjk, hogy tbbszr is hasznlhassuk anlkl,
hogy jra be kelljen gpelni.
.nf
.RS
\f(CW
scale=2
print "\enCsekkfzet program!\en"
print "  Emlkeztet, a lettek negatv tranzakcik.\en"
print "  Kilps 0 sszeg tranzakci bevitelvel.\en\en"

print "Kezdeti egyenleg? "; bal = read()
bal /= 1
print "\en"
while (1) {
  "jelenlegi egyenleg = "; bal
  "tranzakci? "; trans = read()
  if (trans == 0) break;
  bal -= trans
  bal /= 1
}
quit
\fR
.RE
.fi
.PP
A kvetkez fggvny a faktorilis rekurzv defincija.
.nf
.RS
\f(CW
define f (x) {
  if (x <= 1) return (1);
  return (f(x-1) * x);
}
\fR
.RE
.fi
.SH ELTRSEK
A
.B bc
ezen verzija a POSIX P1003.2/D11 tervezete alapjn kszlt s
a tervezethez s a tradcionlis implementcihoz kpest sok
bvtst s klnbsget tartalmaz.
Ez nincs implementlva a tradcionlis
.I dc(1)-ben.
Ez a verzi egy egyszer feldolgoz, amely csak tfordtja a programot.
Egy "nem dokumentlt" kapcsol (-c) kirja az tfordtott
programot a szabvnyos kimenetre, s nem futtatja le. Ez fleg
az rtelmez nyomkvetsekor s a matematikai knyvtr
elksztsekor hasznlatos.
.PP
A klnbsgek legfbb forrsai a kiterjesztsek, hol egy szolgltats
lett kiterjesztve, hogy tbb lehetsge legyen, hol pedig j
szolgltats lett ltrehozva. A kvetkez lista megmutatja
a klnbsgeket s a kiterjesztseket.
.IP "LANG krnyezeti vltoz"
Ez a verzi nem kveti a POSIX szabvnyt a LANG krnyezeti vltoz
hasznlatban, s minden krnyezeti vltoz az "LC_" prefixszel
kezddik.
.IP nevek
A tradcionlis s a POSIX
.B bc
-ben a funkcik, vltozk s tmbk nevei csak egy karakter hosszak
lehettek. Itt mr tbb karaktert is hasznlhatunk, de a neveknek
betvel kell kezddni s csak betket szmokat s alhzsjeleket
tartalmazhatnak.
.IP Stringek
A stringek nem tartalmazhatnak NUL (ASCII nulla) karaktert. A POSIX
szerint brmilyen karakter lehet egy stringben.
.IP last
A POSIX \fBbc\fR-ben nincs \fBlast\fR vltoz. Nhny implementci
a pontot (.) hasznlja erre a clra.
.IP sszehasonltsok
A POSIX \fBbc\fR csak az if, vagy a while utastsban enged meg
sszehasonltsokat, vagy a for utasts msodik kifejezsben.
Tovbb, utastsonknt csak egy relcis opertor van megengedve.
.IP "if utasts, else g"
A POSIX \fBbc\fR-ben nincs else g.
.IP "for utasts"
A POSIX \fBbc\fR-ben minden kifejezsnek szerepelnie kell.
.IP "&&, ||, !"
A POSIX \fBbc\fR-ben nincsenek logikai opertorok.
.IP "read fggvny"
A POSIX \fBbc\fR-ben nincs read fggvny.
.IP "print utasts"
A POSIX \fBbc\fR-ben nincs print utasts.
.IP "continue utasts"
A POSIX \fBbc\fR-ben nincs continue utasts.
.IP "tmb paramterek"
A POSIX \fBbc\fR-ben nincsenek tmb paramterek. Ms implementcikban
lehetnek.
.IP "=+, =-, =*, =/, =%, =^"
A POSIX \fBbc\fR-ben nincs szksg ezekre a "rgi stlus" rtkad
opertorokra. Ez a verzi megengedi ezeket. Hasznld a limits utastst,
hogy megtudd, hogy az installlt verzi megengedi-e ezeket.
Ha igen, az "a =- 1" kifejezs cskkenti az \fBa\fR rtkt 1-gyel,
egybknt pedig az \fBa\fR rtkt belltja -1-re.
.IP "szkzk a szmokban"
A \fBbc\fR ms implementcii megengedik szkzk hasznlatt a szmokban.
Pldul, az "x=1 3" kifejezs az x vltozhoz hozzrendeli a 13-at.
Ebben a \fBbc\fR-ben ugyanez az utasts szintaktikai hibt ad.
.IP "hibk s vgrehajts"
Ez az impelmentci klnbzik a tbbitl abban, hogy mely kdokat
hajtja vgre, mikor egy szintaktikai, vagy ms hibba belefut.
Ha egy szintaktikai hibt tall a fggvny defincijban, a
hibakezel megprblja megtallni az utasts elejt, s folytatni
a fggvny feldolgozst. Ha a szintaktikai hiba a fggvny trzsben
kvetkezik be, a fggvny nem lesz definilva, s nem lehet meghvni sem.
Az interaktv vgrehajtsi blokkokban lev szintaktikai hibk
rvnytelentik az egsz blokkot. Egy vgrehajtsi blokknak minsl
az az utastssor, amely a kvetkez soremelsig tart.
Pldul:
.nf
.RS
a = 1
b = 2
.RE
.fi
ez kt vgrehajtsi blokk s
.nf
.RS
{ a = 1
  b = 2 }
.RE
.fi
ez egy. A futsi-hibk hatsra a jelenlegi blokk vgrehajtsa
befejezdik. A futsi-figyelmezetets nem lltja meg a blokk
vgrehajtst.
.IP "Megszaktsok"
Egy interaktv vgrehajts sorn, a SIGINT szignl (ltalban a
terminlrl rkez Control-C karakter generlja) hatsra a jelenlegi
blokk vgrehajtsa megszakad. Kijelzsre kerl egy "futsi" hiba,
hogy melyik fggvny lett megszaktva. Miutn minden futsi
struktra kirl, egy zenet kerl kirsra a felhasznl fel, hogy
a \fBbc\fR ksz tovbbi adatok fogadsra. Minden korbban definilt
fggvny tovbbra is definilva marad, s minden nem-auto vltozban
a megszaktskori rtk lesz. Minden auto vltoz (a fggvnyek
paramterei is) trlsre kerl a kirtsi eljrs sorn. Nem-interaktv
vgrehajtskor a SIGINT szignl az egsz \fBbc\fR futst megszaktja.
.SH HATROK
A kvetkez hatrok vannak beptve ebbe a
.B bc 
-be. Nhnyuk egy installlssal megvltoztathat. Az aktulis
rtkeik megszerzshez hasznld a limits utastst.
.IP BC_BASE_MAX
A legnagyobb kimeneti szmrendszer, jelenleg 999. A maximum bemeneti
szmrendszer 16.
.IP BC_DIM_MAX
Ez a jelenlegi pontossgi hatr, 655535. Az n installcijban
ms lehet.
.IP BC_SCALE_MAX
A tizedes pont eltti s utni szmjegyek szmt az INT_MAX hatrozza meg.
.IP BC_STRING_MAX
A karakterek maximlis szma egy stringben INT_MAX.
.IP exponens
A hatvnyozs opertor (^) kitevjnek maximum rtkt a LONG_MAX
hatrozza meg.
.IP szorzs
A szorz rutin inkorrekt eredmnyt adhat, ha a szmnak (LONG_MAX / 90)-nl
tbb szmjegye van. 32-bites long-nl ez 23,860,929 szmjegy.
.IP "kd mret"
Minden fggvnynek s a "f" programnak is limitlva van a mrete 16384
byte lefordtott kdban. Ez a hatr (BC_MAX_SEGS) knnyen tllphet,
ha tbb, mint 16 1024 byte-os szegmensnk van.
.IP "vltoz nevek"
A jelenlegi limit az egyedi nevekre 32767 mind az egyszer vltozkra,
mind a tmbkre s a fggvnyekre.
.SH FJLOK
A legtbb installciban a \fBbc\fR-nek nincs szksge egyb fjlokra.
Mg a vgrehajthat program hossza fontos, illetve a C fordt
nem tudja kezelni a nagyon hossz stringeket, a \fBbc\fR a
standard matematikai knyvtrat a /usr/local/lib/libmath.b fjlbl
olvassa be. (A fjl helye rendszerenknt vltozhat, lehet /lib/libmath.b
is.)
.SH DIAGNOSZTIKA
Ha egy a parancssorban szerepl fjl nem nyithat meg, a \fBbc\fR
zen, hogy a fjl nem elrhet, s kilp. Ugyangy, a fordtsi s
a futsi idej diagnosztika is nmagyarz.
.SH HIBK
A hibakezels mg nem tl j.
.SH SZERZ
.nf
Philip A. Nelson
phil@cs.wwu.edu
.fi
.SH KSZNETNYILVNTSOK
A szerz szeretn megksznni Setve Sommars-nak (Steve.Sommars@att.com),
hogy oly nagy mrtkben segtett az implementci tesztelsben.
Sok nagyon j tancsot adott. Segtsgvel egy sokkal jobb termket
sikerlt ltrehozni.
.SH MAGYAR FORDTS
Csehi Andrs <acsehi@flexum.hu>