ssCUE N
A.A. Ea?ieaai,
Ae.I. ?e/e.Aiiioaoeey.
sscue “C”(i?ieciineony “ne”) – yoi oieaa?naeueiue ycue i?ia?aiie?iaaiey,
aeey eioi?iai oa?aeoa?iu yeiiiie/iinoue au?aaeaiey, nia?aiaiiue iioie
oi?aaeaiey e no?oeoo?u aeaiiuo, aiaaoue iaai? iia?aoi?ia. sscue “C” ia
yaeyaony ie ycueii “i/aiue aunieiai o?iaiy”, ie “aieueoei” ycueii, e ia
i?aaeiacia/aaony aeey iaeioi?ie niaoeeaeueiie iaeanoe i?eiaiaiey. ii
ionoonoaea ia?aie/aiee e iauiinoue ycuea aeaeatho aai aieaa oaeiaiui e
yooaeoeaiui aeey iiiaeo caaea/, /ai ycuee, i?aaeiieiaeeoaeueii aieaa
iiuiua.
sscue “C”, ia?aiia/aeueii i?aaeiacia/aaoeeny aeey iaienaiey
iia?aoeeiiiie nenoaiu “UNIX” ia YAI DEC PDP-11, aue ?ac?aaioai e
?aaeeciaai ia yoie nenoaia Aeaiienii ?e/e. Iia?aoeeiiiay nenoaia,
eiiieeyoi? n ycuea “C” e ii nouanoao ana i?eeeaaeiua i?ia?aiiu nenoaiu
“UNIX” (aeeth/ay ana i?ia?aiiiia iaania/aiea, eniieueciaaiiia i?e
iiaeaioiaea yoie eieae) iaienaiu ia “C”. Eiiia?/aneea eiiieeyoi?u n
ycuea “C” nouanoaotho oaeaea ia iaeioi?uo ae?oaeo YAI, aeeth/ay IBM
SYSTEM/370, HONEYWELL 6000, INTERDATA 8/32. sscue “C”, iaeiaei, ia
naycai n eaeeie-eeai ii?aaeaeaiiuie aiia?aoiuie n?aaenoaaie eee
nenoaiaie, e ia iai eaaei ienaoue i?ia?aiiu, eioi?ua iiaeii i?iioneaoue
aac eciaiaiee ia ethaie YAI, eiathuae “C”-eiiieeyoi?.
Yoa eieaa i?aaeiacia/aia aeey oiai, /oiau iiii/ue /eoaoaeth iao/eoueny
i?ia?aiie?iaaoue ia ycuea “C”. Iia naea?aeeo o/aaiia aaaaeaiea, oeaeue
eioi?iai – iicaieeoue iiaui iieueciaaoaeyi ia/aoue i?ia?aiie?iaaoue eae
iiaeii auno?aa, ioaeaeueiua aeaau ii anai iniiaiui iniaaiiinoyi ycuea e
ni?aai/iia ?oeiaiaenoai. Iao/aiea iino?iaii a iniiaiii ia /oaiee,
iaienaiee e ?acai?a i?eia?ia, a ia aieie oi?ioee?iaea i?aaee. I?eia?u,
i?eaiaeeiua a eieaa, ii aieueoae /anoe yaeythony caeii/aiiuie ?aaeueiuie
i?ia?aiiaie, a ia ioaeaeueiuie o?aaiaioaie. Ana i?eia?u auee i?iaa?aiu
iaiin?aaenoaaiii n oaenoa eieae, aaea iie iaia/aoaiu a aeaea, i?eaiaeiii
aeey aaiaea a iaoeio. E?iia oeacaiee i oii, eae naeaeaoue eniieueciaaiea
ycuea aieaa yooaeoeaiui, iu oaeaea iuoaeenue, aaea yoi aiciiaeii,
i?ieeethno?e?iaaoue iieaciua aeai?eoiu e i?eioeeiu oi?ioaai noeey e
?acoiiie ?ac?aaioee.
Ianoiyuay eieaa ia yaeyaony aaiaeiui eo?nii a i?ia?aiie?iaaiea; iia
i?aaeiieaaaao ii?aaeaeaiiia ciaeiinoai n iniiaiuie iiiyoeyie
i?ia?aiie?iaaiey oaeeie eae ia?aiaiiua, iia?aoi?u i?enaaeaaiey, oeeeeu,
ooieoeee. Oai ia iaiaa e iiae/ie a i?ia?aiie?iaaiee aeieaeai ieacaoueny
a ninoiyiee /eoaoue iiae?yae e inaieoueny n ycueii, oioy i?e yoii auea
au iieaciie iiiiuue aieaa iiuoiiai eieeaae.
Ii iaoaio iiuoo , “C” iieacae naay i?eyoiui, au?aceoaeueiui e
?aciinoi?iiiei ycueii ia oe?ieii iiiaeanoaa ?aciiia?aciuo i?ia?aii. Aai
eaaei auo/eoue , e ii ia oa?yao naieo ea/anoa n ?inoii iiuoa
i?ia?aiienoa. Iu iaaeaainy , /oi yoa eieaa iiiiaeao aai oi?ioi aai
eniieueciaaoue.
Aaeoi/eaay e?eoeea e i?aaeeiaeaiey iiiaeo iaoeo ae?ocae e eieeaa i/aiue
iiiai aeiaaaeee eae aeey naiie eieae, oae e aeey iaoaai oaeiaieuenoaey
i?e aa iaienaiee. A /anoiinoe, Iaee Aeaine, Aeaeei Aeth, Noueth
Oaeueaeiai, Aeioa Iae-Ee?ie, Aeee ?oi, Aia ?icei e Ea??e ?inea?
ouaoaeueii i?i/eoaee iiiaeanoai aa?eaioia. Iu oaeaea iaycaiu Yeth Aoi,
Noeao Ai?io, Aeyao Aeai?aeo, *aeo Oyeath, Aeaaae Oyeae, Ia?eiio Oa??eno,
?eeo Oieoo, Noeao Aeaeiiniio, Aeaeiio Iaoath, Aiao Ieooeo, ?aeueoo
Iuetha, Ieoa?o Iaeueniio, Yeeeioo Ieiniio, Aeeeo Ieaaa?o, Aeaea??e
Nieaaeo, Eaio Oiiiniio e Ieoa?o Aaeiaa?aa?o ca iieaciua caia/aiey ia
?acee/iuo yoaiao e Iaeeo Eineo e Aeaei Inaiia ca iaioeaieioth iiiiuue
i?e ia/aoaiee eieae. A?aeai A. Ea?ieaai Aeaiien I. ?e/e
Niaea?aeaiea.
Aiiioaoeey
0.1. Aaaaeaiea
1. O/aaiia aaaaeaiea
1.1. Ia/eiaai
1.2. Ia?aiaiiua e a?eoiaoeea
1.3. Iia?aoi? FOR
1.4. Neiaiee/aneea eiinoaiou
1.5. Iaai? iieaciuo i?ia?aii
1.5.1. Aaiae e auaiae neiaieia
1.5.2. Eiie?iaaiea oaeea
1.5.3. Iiaen/ao neiaieia
1.5.4. Iiaen/ao no?ie
1.5.5. Iiaen/ao neia
1.6. Ianneau
1.7. Ooieoeee
1.8. A?aoiaiou – aucia ii cia/aieth
1.9. Ianneau neiaieia
1.10. Iaeanoue aeaenoaey: aiaoiea ia?aiaiiua
1.11. ?acthia
2. Oeiu, iia?aoeee e au?aaeaiey
2.1. Eiaia ia?aiaiiuo
2.2. Oeiu e ?acia?u aeaiiuo
2.3. Eiinoaiou
2.3.1. Neiaieueiay eiinoaioa
2.3.2. Eiinoaioiia au?aaeaiea
2.3.3. No?i/iay eiinoaioa
2.4. Iienaiey
2.5. A?eoiaoe/aneea iia?aoeee
2.6. Iia?aoeee ioiioaiey e eiae/aneea iia?aoeee
2.7. I?aia?aciaaiea oeiia
2.8. Iia?aoeee oaaee/aiey e oiaiueoaiey
2.9. Iiaeoiaua eiae/aneea iia?aoeee
2.10. Iia?aoeee e au?aaeaiey i?enaaeaaiey
2.11. Oneiaiua au?aaeaiey
2.12. Noa?oeinoai e ii?yaeie au/eneaiey
3. Iioie oi?aaeaiey
3.1. Iia?aoi?u e aeiee
3.2. IF – ELSE
3.3. ELSE – IF
3.4. Ia?aeeth/aoaeue
3.5. Oeeeeu – WHILE e FOR
3.6. Oeeee DO – WHILE
3.7. Iia?aoi? BREAK
3.8. Iia?aoi? CONTINUE
3.9. Iia?aoi? GOTO e iaoee
4. Ooieoeee e no?oeoo?a i?ia?aii
4.1. Iniiaiua naaaeaiey
4.2. Ooieoeee, aica?auathuea iaoeaeua cia/aiey
4.3. Aua ia a?aoiaioao ooieoeee
4.4. Aiaoiea ia?aiaiiua
4.5. I?aaeea, ii?aaeaeythuea iaeanoue aeaenoaey
4.5.1. Iaeanoue aeaenoaey
4.6. Noaoe/aneea ia?aiaiiua
4.7. ?aaeno?iaua ia?aiaiiua
4.8. Aei/iay no?oeoo?a
4.9. Eieoeeaeecaoeey
4.10. ?aeo?ney
4.11. I?ai?ioeanni? ycuea “C”
4.11.1. Aeeth/aiea oaeeia
4.11.2. Mae?iiiaenoaiiaea
5. Oeacaoaee e ianneau
5.1. Oeacaoaee e aae?ana
5.2. Oeacaoaee e a?aoiaiou ooieoeee
5.3. oeacaoaee e ianneau
5.4. Aae?aniay a?eoiaoeea
5.5. oeacaoaee neiaieia e ooieoeee
5.6. Oeacaoaee – ia oeaeua
5.7. Iiiaiia?iua ianneau
5.8. Ianneau oeacaoaeae; oeacaoaee oeacaoaeae
5.9. Eieoeeaeecaoeey ianneaia oeacaoaeae
5.10. Oeacaoaee e iiiaiia?iua ianneau
5.11. Eiiaiaeiay no?iea a?aoiaioia
5.12. Oeacaoaee ia ooieoeee
6. No?oeoo?u
6.1. Iniiaiua naaaeaiey
6.2. No?oeoo?u e ooieoeee
6.3. Ianneau no?oeoo?
6.4. Oeacaoaee ia no?oeoo?u
6.5. No?oeoo?u, nnueathueany ia naay
6.6. Iiene a oaaeeoea
6.7. Iiey
6.8. Iauaaeeiaiey
6.9. Ii?aaeaeaiea oeia
7. Aaiae e auaiae
7.1. Ia?auaiea e noaiaea?oiie aeaeeioaea
7.2. Noaiaea?oiue aaiae e auaiae – ooieoeee GETCHAR e PUTCHAR
7.3. Oi?iaoiue auaiae – ooieoeey PRINTF
7.4. Oi?iaoiue aaiae – ooieoeey SCANF
7.5. Oi?iaoiia i?aia?aciaaiea a iaiyoe
7.6. Aeinooi e oaeeai
7.7. Ia?aaioea ioeaie – STDERR e EXIT
7.8. Aaiae e auaiae no?ie
7.9. Ianeieueei ?aciiia?aciuo ooieoeee
7.9.1. I?iaa?ea aeaea neiaieia e i?aia?aciaaiey
7.9.2. Ooieoeey UNGETC
7.9.3. Ia?auaiea e nenoaia
7.9.4. Oi?aaeaiea iaiyoueth
8. Eioa?oaen nenoaiu UNIX
8.1. Aeane?eioi?u oaeeia
8.2. Ieceio?iaiaaue aaiae/auaiae – iia?aoi?u READ e WRITE
8.3. Ioe?uoea, nicaeaiea, cae?uoea e ?anuaieaiea (UNLINK)
8.4. I?iecaieueiue aeinooi – SEEK e LSEEK
8.5. I?eia? – ?aaeecaoeey ooieoeee FOPEN e GETC
8.6. I?eia? – ?ania/aoea ni?aai/ieeia
8.7. I?eia? – ?ani?aaeaeeoaeue iaiyoe
9. I?eeiaeaiea a: ni?aai/iia ?oeiaiaenoai ii ycueo ‘C’.
9.1. Aaaaeaiea
10. Eaene/aneea niaeaoaiey
10.1. Eiiiaioa?ee
10.2. Eaeaioeoeeaoi?u (eiaia)
10.3. Eeth/aaua neiaa
10.4. Eiinoaiou
10.4.1. Oeaeua eiinoaiou
10.4.2. ssaiua aeeeiiua eiinoaiou
10.4.3. Neiaieueiua eiinoaiou
10.4.4. Ieaaathuea eiinoaiou
10.5. No?iee
10.6. Oa?aeoa?enoeee aiia?aoiuo n?aaenoa
11. Neioaene/aneay iioaoeey
12. *oi a eiaie oaaa iiai?
13. Iauaeou e L-cia/aiey
14. I?aia?aciaaiey
14.1. Neiaieu e oeaeua
14.2. Oeiu FLOAT e DOUBLE
14.3. Ieaaathuea e oeaei/eneaiiua aaee/eiu
14.4. Oeacaoaee e oeaeua
14.5. Oeaeia aac ciaea
14.6. A?eoiaoe/aneea i?aia?aciaaiey
15. Au?aaeaiey
15.1. Ia?ae/iua au?aaeaiey
15.2. Oia?iua iia?aoeee
15.3. Ioeueoeieeeaoeaiua iia?aoeee
15.4. Aaeaeeoeaiua iia?aoeee
15.5. Iia?aoeee naeaeaa
15.6. Iia?aoeee ioiioaiey
15.7. Iia?aoeee ?aaainoaa
15.8. Iiaeoiaay iia?aoeey ‘e’
15.9. Iiaeoiaay iia?aoeey eneeth/athuaai ‘eee’
15.10. Iiaeoiaay iia?aoeey aeeth/athuaai ‘eee’
15.11. Eiae/aneay iia?aoeey ‘e’
15.12. Iia?aoeey eiae/aneiai ‘eee’
15.13. Oneiaiay iia?aoeey
15.14. Iia?aoeey i?enaaeaaiey
15.15. Iia?aoeey caiyoay
16. Iienaiey
16.1. Niaoeeoeeaoi?u eeanna iaiyoe
16.2. Niaoeeoeeaoi?u oeia
16.3. Iienaoaee
16.4. Niune iienaoaeae
16.5. Iienaiea no?oeoo? e iauaaeeiaiee
16.6. Eieoeeaeecaoeey
16.7. Eiaia oeiia
16.8. TYPEDEF
17. Iia?aoi?u
17.1. Iia?aoi?iia au?aaeaiea
17.2. Ninoaaiie iia?aoi? (eee aeie)
17.3. Oneiaiua iia?aoi?u
17.4. Iia?aoi? WHILE
17.5. Iia?aoi? DO
17.6. Iia?aoi? FOR
17.7. Iia?aoi? SWITCH
17.8. Iia?aoi? BREAK
17.9. Iia?aoi? CONTINUE
17.10. Iia?aoi? aica?aoa
17.11. Iia?aoi? GOTO
17.12. Iiia/aiiue iia?aoi?
17.13. Ionoie iia?aoi?
18. Aiaoiea ii?aaeaeaiey
18.1. Aiaoiaa ii?aaeaeaiea ooieoeee
18.2. Aiaoiea ii?aaeaeaiey aeaiiuo
19. I?aaeea, ii?aaeaeythuea iaeanoue aeaenoaey
19.1. Eaene/aneay iaeanoue aeaenoaey
19.2. Iaeanoue aeaenoaey aiaoieo eaeaioeoeeaoi?ia
20. No?iee oi?aaeaiey eiiieeyoi?ii
20.1. Caiaia eaenai
20.2. Aeeth/aiea oaeeia
20.3. Oneiaiay eiiieeyoeey
21. Iayaiua iienaiey
22. Niiaa i oeiao
22.1. No?oeoo?u e iauaaeeiaiey
22.2. Ooieoeee
22.3. Ianneau, oeacaoaee e eiaeaenaoeey
22.4. ssaiua i?aia?aciaaiey oeacaoaeae
23. Eiinoaioiua au?aaeaiey
24. Niia?aaeaiey i ia?aiineiinoe
25. Aiao?iieciu
26. Naiaeea neioaene/aneeo i?aaee
26.1. Au?aaeaiey
26.2. Iienaiey
26.3. Iia?aoi?u
26.4. Aiaoiea ii?aaeaeaiey
26.5. I?ai?ioeanni?
27. I?enaaeaaiea no?oeoo?u
28. Oei ia?a/eneaiey
29. Oaaeeoea ecia?aaeaiee iaia/aoiuo neiaieia ycuea “C”.
0.1. Aaaaeaiea.
sscue “C” yaeyaony oieaa?naeueiui ycueii i?ia?aiie?iaaiey. Ii oanii
naycai n iia?aoeeiiiie nenoaiie “UNIX” , oae eae aue ?acaeo ia yoie
nenoaia e oae eae “UNIX” e aa i?ia?aiiiia iaania/aiea iaienaii ia “C”.
Nai ycue , iaeiaei, ia
naycai n eaeie-eeai iaeiie iia?aoeeiiiie nenoaiie eee iaoeiie;
e oioy aai iacuaatho ycueii nenoaiiiai i?ia?aiie?iaaiey, oae
eae ii oaeiaai aeey iaienaiey iia?aoeeiiiuo nenoai, ii n ?aaiui
oniaoii eniieueciaaeny i?e iaienaiee aieueoeo au/eneeoaeueiuo
i?ia?aii, i?ia?aii aeey ia?aaioee oaenoia e aac aeaiiuo.
sscue “C” – yoi ycue ioiineoaeueii “ieceiai o?iaiy”. A
oaeie oa?aeoa?enoeea iao ie/aai inei?aeoaeueiiai; yoi i?inoi
icia/aao, /oi “C” eiaao aeaei n iauaeoaie oiai aea aeaea, /oi e
aieueoeinoai YAI, a eiaiii, n neiaieaie, /eneaie e aae?anaie.
Iie iiaoo iauaaeeiyoueny e ia?anueaoueny iin?aaenoaii iau/iuo
a?eoiaoe/aneeo e eiae/aneeo iia?aoeee, inouanoaeyaiuo ?aaeue-
iuie YAI.
A ycuea “C” ionoonoaotho iia?aoeee, eiathuea aeaei iaiin-
?aaenoaaiii n ninoaaiuie iauaeoaie, oaeeie eae no?iee neiai-
eia, iiiaeanoaa, nienee eee n ianneaaie, ?anniao?eaaaiuie eae
oeaeia. Caeanue, iai?eia?, iao ieeaeiai aiaeiaa iia?aoeeyi PL/1,
iia?e?othuei n oeaeuie ianneaaie e no?ieaie. sscue ia i?aaein-
oaaeyao ieeaeeo ae?oaeo aiciiaeiinoae ?ani?aaeaeaiey iaiyoe,
e?iia noaoe/aneiai ii?aaeaeaiey e iaoaiecia noaeia, iaania/e-
aaaiiai eieaeueiuie ia?aiaiiuo ooieoeee; caeanue iao ie
“eo/”(HEAP), ie “nai?ee ioni?a”, eae yoi i?aaeoniao?eaaaony a
AEAIEA-68. Iaeiiaoe, nai ii naaa “C” ia iaania/eaaao ieeaeeo
aiciiaeiinoae aaiaea-auaiaea: caeanue iao iia?aoi?ia READ eee
WRITE e ieeaeeo ano?iaiiuo iaoiaeia aeinooia e oaeeai. Ana yoe
iaoaieciu aunieiai o?iaiy aeieaeiu iaania/eaaoueny yaii aucuaa-
aiuie ooieoeeyie.
Aiaeiae/ii, ycue “C” i?aaeeaaaao oieueei i?inoua, iinea-
aeiaaoaeueiua eiino?oeoeee iioieia oi?aaeaiey: i?iaa?ee, oeeeeu,
a?oiie?iaaiea e iiaei?ia?aiiu, ii ia ioeueoei?ia?aiie?iaaiea,
ia?aeeaeueiua iia?aoeee, neio?iiecaoeeth eee nii?ia?aiiu.
Oioy ionoonoaea iaeioi?uo ec yoeo n?aaenoa iiaeao auaey-
aeaoue eae oae?o/athuay iaiieiioeaiiinoue (“auoiaeeo, /oi y aeieaeai
ia?auaoueny e ooieoeee, /oiau n?aaieoue aeaa no?iee neiaieia
?!”), ii oaea?aeaiea ycuea a ne?iiiuo ?acia?ao aeaao ?aaeueiua
i?aeiouanoaa. Oae eae “C” ioiineoaeueii iae, ii ia o?aaoao
iiiai ianoa aeey naiaai iienaiey e iiaeao auoue auno?i auo/ai.
Eiiieeyoi? n “C” iiaeao auoue i?inoui e eiiiaeoiui. E?iia oi-
ai, eiiieeyoi?u eaaei ieooony; i?e eniieueciaaiee nia?aiaiiie
oaoiieiaee iiaeii iaeeaeaoue iaienaiey eiiieeyoi?a aeey iiaie YAI
ca ia?o ianyoeaa e i?e yoii ieaaeaony, /oi 80 i?ioeaioia i?ia-
?aiiu iiaiai eiiieeyoi?a aoaeao iauae n i?ia?aiiie aeey oaea
nouanoaothueo eiiieeyoi?ia. Yoi iaania/eaaao aunieoth noaiaiue
iiaeeueiinoe ycuea. Iineieueeo oeiu aeaiiuo e nooeoo?u oi?aaea-
iey, eiathueany a “C”, iaiin?aaenoaaiii iiaeaea?aeeaathony aieue-
oeinoaii nouanoaothueo YAI, aeaeeioaea, iaiaoiaeeiay ai a?aiy
i?iaiia eciee?iaaiiuo i?ia?aii, ieacuaaaony i/aiue iaeaiueeie.
Ia PDP -11, iai?eia?, iia niaea?aeeo oieueei i?ia?aiiu aeey
32-aeoiaiai oiiiaeaiey e aeaeaiey e aeey auiieiaiey i?ia?aii
aaiaea e auaiaea iineaaeiaaoaeueiinoae. Eiia/ii, eaaeaeay ?aaeeca-
oeey iaania/eaaao en/a?iuaathuoth, niaianoeioth aeaeeioaeo ooie-
oeee aeey auiieiaiey iia?aoeee aaiaea-auaiaea, ia?aaioee no?ie e
?ani?aaeaeaiey iaiyoe, ii oae eae ia?auaiea e iei inouanoaey-
aony oieueei yaii, iiaeii , anee iaiaoiaeeii, ecaaaeaoue eo auci-
aa; yoe ooieoeee iiaoo auoue eiiiaeoii iaienaiu ia naiii “C”.
· 8 –
Iiyoue aea ec-ca oiai , /oi ycue “C” io?aaeaao aiciiaeiinoe
nia?aiaiiuo eiiiuethoa?ia, i?ia?aiiu ia “C” ieacuaathony aeinoa-
oi/ii yooaeoeaiuie, oae /oi ia aicieeaao iiaoaeaeaiey ienaoue
aianoi yoiai i?ia?aiiu ia ycuea annaiaea?a. Iaeaieaa oaaaee-
oaeueiui i?eia?ii yoiai yaeyaony naia iia?aoeeiiiay nenoaia
“UNIX”, eioi?ay ii/oe iieiinoueth iaienaia ia “C”. Ec 13000
no?ie i?ia?aiiu nenoaiu oieueei ieiei 800 no?ie naiiai iecei-
ai o?iaiy iaienaiu ia annaiaea?a. E?iia oiai, ii nouanoao
ana i?eeeaaeiia i?ia?aiiiia iaania/aiea nenoaiu “UNIX” iaie-
naii ia “C”; iiaeaaeythuaa aieueoeinoai iieueciaaoaeae nenoaiu
“UNIX”(aeeth/ay iaeiiai ec aaoi?ia yoie eieae) aeaaea ia ciaao
ycuea annaiaea?a PDP-11.
Oioy “C” niioaaonoaoao aiciiaeiinoyi iiiaeo YAI, ii ia
caaeneo io eaeie-eeai eiie?aoiie a?oeoaeoo?u iaoeiu e a neeo
yoiai aac iniauo oneeee iicaieyao ienaoue “ia?aiineiua” i?ia-
?aiiu, o.a. i?ia?aiiu, eioi?ua iiaeii i?iioneaoue aac eciaia-
iee ia ?acee/iuo aiia?aoiuo n?aaenoaao. A iaoeo e?oaao noae
oaea o?aaeeoeeae ia?aiin i?ia?aiiiiai iaania/aiey, ?ac?aaioai-
iiai ia nenoaia “UNIX”, ia nenoaiu YAI: HONEYWELL, IBM e
INTERDATA. Oaeoe/anee eiiieeyoi?u n “C” e i?ia?aiiiia iaan-
ia/aiea ai a?aiy i?iaiia i?ia?aii ia yoeo /aou?ao nenoaiao,
ii-aeaeeiiio, ai?acaei aieaa niaianoeiu, /ai noaiaea?oiua aa?-
nee oi?o?aia aia?eeaineiai iaoeeiiaeueiiai einoeoooa noaiaea?-
oia (ANSI). Naia iia?aoeeiiiay nenoaia “UNIX” oaia?ue ?aaioaao
eae ia PDP-11, oae e ia INTERDATA 8/32. Ca eneeth/aieai i?ia-
?aii, eioi?ua iaecaaaeii ieacuaathony a iaeioi?ie noaiaie ia-
oeiii-caaeneiuie, oaeeo eae eiiieeyoi?, annaiaea? e ioeaae-
/ee. Iaienaiiia ia ycuea “C” i?ia?aiiiia iaania/aiea eaeai-
oe/ii ia iaaeo iaoeiao. Aioo?e naiie iia?aoeeiiiie nenoaiu
7000 no?ie i?ia?aiiu, eneeth/ay iaoaiaoe/aneia iaania/aiea
ycuea annaiaea?a YAI e oi?aaeaiey iia?aoeeyie aaiaea-auaiaea,
niaiaaeatho ia 95 i?ioeaioia.
I?ia?aiienoai, ciaeiiui n ae?oaeie ycueaie, aeey n?aaia-
iey e i?ioeaiiinoaaeaiey iiaeao ieacaoueny iieaciui oiiieiaiea
ianeieueeeo enoi?e/aneeo, oaoie/aneeo e oeeinioneeo aniaeoia
“C”.
Iiiaea ec iaeaieaa aaaeiuo eaeae “C” i?ienoiaeyo io ai?ac-
aei aieaa noa?iai, ii ana aua aiieia aeeciaiiiai ycuea BCPL ,
?ac?aaioaiiiai Ia?oeiii ?e/a?aenii. Einaaiii ycue BCPL ieacae
aeeyiea ia “C” /a?ac ycue “B”, iaienaiiue Eaiii Oiiiniiii a
1970 aiaeo aeey ia?aie iia?aoeeiiiie nenoaiu “UNIX” ia YAI
PDP-7.
Oioy ycue “C” eiaao ianeieueei iaueo n BCPL oa?aeoa?iuo
iniaaiiinoae, ii ieeiei ia?acii ia yaeyaony aeeaeaeoii iin-
eaaeiaai. E BCPL e “B” – “aacoeiiua” ycuee; aaeeinoaaiiui ae-
aeii aeaiiuo aeey ieo yaeythony iaoeiiia neiai, a aeinooi e ae?o-
aei iauaeoai ?aaeecoaony niaoeeaeueiuie iia?aoi?aie eee ia?a-
uaieai e ooieoeeyi. A ycuea “C” iauaeoaie iniiaiuo oeiia aeai-
iuo yaeythony neiaieu, oeaeua /enea ianeieueeeo ?acia?ia e /en-
ea n ieaaathuae oi/eie. E?iia oiai, eiaaony ea?a?oey i?iec-
aiaeiuo oeiia aeaiiuo, nicaeaaaaiuo oeacaoaeyie, ianneaaie,
no?oeoo?aie, iauaaeeiaieyie e ooieoeeyie.
· 9 –
sscue “C” aeeth/aao iniiaiua eiino?oeoeee iioiea oi?aaea-
iey, o?aaoaiua aeey oi?ioi no?oeooe?iaaiiuo i?ia?aii: a?oiie-
?iaaiea iia?aoi?ia, i?eiyoea ?aoaiee (IF), oeeeeu n i?iaa?eie
caaa?oaiey a ia/aea (WHILE, FOR) eee a eiioea (DO) e auai?
iaeiiai ec iiiaeanoaa aiciiaeiuo aa?eaioia (SWITCH). (Ana yoe
aiciiaeiinoe iaania/eaaeenue e a BCPL, oioy e i?e ianeieueei
ioee/iii neioaenena; yoio ycue i?aae/oanoaiaae ianooieaooth
/a?ac ianeieueei eao iiaeo ia no?oeoo?iia i?ia?aiie?iaaiea).
A ycuea “C” eiathony oeacaoaee e aiciiaeiinoue aae?aniie
a?eoiaoeee. A?aoiaiou ia?aaeathony ooieoeeyi iin?aaenoaii eiie-
?iaaiey cia/aiey a?aoiaioa , e aucaaiiay ooieoeey ia iiaeao
eciaieoue oaeoe/aneee a?aoiaio a aucuaathuae i?ia?aiia. Anee
aeaeaoaeueii aeiaeoueny “auciaa ii nnueea”, iiaeii iayaii ia?a-
aeaoue oeacaoaeue, e ooieoeey niiaeao eciaieoue iauaeo, ia eioi?ue
yoio oeacaoaeue oeacuaaao. Eiaia ianneaia ia?aaeathony oeacaie-
ai ia/aea ianneaia, oae /oi a?aoiaiou oeia ianneaia yooae-
oeaii aucuaathony ii nnueea.
E ethaie ooieoeee iiaeii ia?auaoueny ?aeo?neaii, e aa ei-
eaeueiua ia?aiaiiua iau/ii “aaoiiaoe/aneea”, o.a. Nicaeathony
caiiai i?e eaaeaeii ia?auaiee. Iienaiea iaeiie ooieoeee ia iiaeao
niaea?aeaoueny aioo?e ae?oaie, ii ia?aiaiiua iiaoo iienuaaoueny a
niioaaonoaee n iau/iie aei/iie no?oeoo?ie. Ooieoeee a “C” –
i?ia?aiia iiaoo o?ainee?iaaoueny ioaeaeueii. ia?aiaiiua ii io-
iioaieth e ooieoeee iiaoo auoue aioo?aiieie, aiaoieie, ii ec-
aanoiuie oieueei a i?aaeaeao iaeiiai enoiaeiiai oaeea, eee iie-
iinoueth aeiaaeueiuie. Aioo?aiiea ia?aiaiiua iiaoo auoue aaoiia-
oe/aneeie eee noaoe/aneeie. Aaoiiaoe/aneea ia?aiaiiua aeey
aieueoae yooaeoeaiinoe iiaeii iiiauaoue a ?aaeno?u, ii iauyaea-
iea ?aaeno?a yaeyaony oieueei oeacaieai aeey eiiieeyoi?a e ie-
eae ia naycaii n eiie?aoiuie iaoeiiuie ?aaeno?aie.
sscue “C” ia yaeyaony ycueii ni no?iaeie oeiaie a niunea
ianeaey eee aeaiea 68. Ii n?aaieoaeueii nienoiaeeoaeai e i?a-
ia?aciaaieth aeaiiuo, oioy e ia aoaeao aaoiiaoe/anee i?aia?aci-
auaaoue oeiu aeaiiuo n aoeiie iai?eioaeaeaiiinoueth ycuea PL/1.
Nouanoaothuea eiiieeyoi?u ia i?aaeoniao?eaatho ieeaeie i?iaa?ee
ai a?aiy auiieiaiey i?ia?aiiu eiaeaenia ianneaia, oeiia a?ao-
iaioia e o.ae.
A oao neooaoeeyo, eiaaea aeaeaoaeueia no?iaay i?iaa?ea oe-
iia, eniieuecoaony niaoeeaeueiay aa?ney eiiieeyoi?a. Yoa i?ia-
?aiia iacuaaaony LINT i/aaeaeii iioiio, iia auae?aao eoni/ee
iooa ec aaoae i?ia?aiiu. I?ia?aiia LINT ia aaia?e?oao iaoei-
iiai eiaea, a aeaeaao i/aiue no?iaoth i?iaa?eo anao oao noi?ii
i?ia?aiiu, eioi?ua iiaeii i?ieiio?iee?iaaoue ai a?aiy eiiieey-
oeee e caa?ocee. Iia ii?aaeaeyao ianiioaaonoaea oeiia, iania-
ianoeiinoue a?aoiaioia, iaeniieueciaaiiua eee i/aaeaeiui ia?a-
cii iaeieoeeaeece?iaaiiua ia?aiaiiua, iioaioeeaeueiua o?oaeiinoe
ia?aiineiinoe e o.ae. Aeey i?ia?aii,eioi?ua aeaaiiieo/ii i?i-
oiaeyo /a?ac LINT, aa?aioe?oaony ionoonoaea ioeaie oeia i?e-
ia?ii n oie aea iieiioie, eae e aeey i?ia?aii, iaienaiiuo,
iai?eia?, ia AEAIEA-68. Ae?oaea aiciiaeiinoe i?ia?aiiu LINT
aoaeoo ioia/aiu, eiaaea i?aaenoaaeony niioaaonoaothuee neo/ae.
· 10 –
Iaeiiaoe, ycue “C”, iiaeiaii ethaiio ae?oaiio ycueo, eiaao
naie iaaeinoaoee. Iaeioi?ua iia?aoeee eiatho iaoaea/iia noa?oei-
noai; iaeioi?ua ?acaeaeu neioaenena iiaee au auoue eo/oa; no-
oanoaoao ianeieueei aa?nee ycuea, ioee/athueony iaaieueoeie aea-
oaeyie. Oai ia iaiaa ycue “C” ca?aeiiaiaeiaae naay eae eneeth-
/eoaeueii yooaeoeaiue e au?aceoaeueiue ycue aeey oe?ieiai ?ac-
iiia?acey i?eiaiaiee i?ia?aiie?iaaiey.
Niaea?aeaiea eieae i?aaieciaaii neaaeothuei ia?acii. Aeaaa
1 yaeyaony o/aaiui aaaaeaieai a oeaio?aeueioth /anoue ycuea “C”.
Oeaeue – iicaieeoue /eoaoaeth noa?oiaaoue oae auno?i,eae oieueei
aiciiaeii, oae eae iu oaa?aei oaaaeaeaiu, /oi aaeeinoaaiiue nii-
nia eco/eoue iiaue ycue – ienaoue ia iai i?ia?aiiu. I?e yoii ,
iaeiaei, i?aaeiieaaaaony ?aai/aa aeaaeaiea iniiaiuie yeaiaioaie
i?ia?aiie?iaaiey; caeanue ia iauyniyaony, /oi oaeia YAI eee
eiiieeyoi?, ia iiyniyaony niune au?aaeaiee oeia N=N+1. Oioy
iu e iuoaeenue, aaea yoi aiciiaeii, i?iaeaiiino?e?iaaoue iieacioth
oaoieeo i?ia?aiie?iaaiey. Yoa eieaa ia i?aaeiacia/aaony auoue
ni?aai/iui ?oeiaiaenoaii ii no?oeoo?ai aeaiiuo e aeai?eoiai;
oai, aaea iu auioaeaeaiu auee naeaeaoue auai?, iu eiioeaio?e?iaa-
eenue ia ycuea.
A aeaaao ni 2-e ii 6-th ?acee/iua aniaeou “C” eceaaathony
aieaa aeaoaeueii e ianeieueei aieaa oi?iaeueii, /ai a aeaaa 1,
oioy oaea?aiea ii-i?aaeiaio aeaeaaony ia ?acai?a i?eia?ia ca-
eii/aiiuo, iieaciuo i?ia?aii, a ia ia ioaeaeueiuo o?aaiaioao.
A aeaaa 2 ianoaeaeathony iniiaiua oeiu aeaiiuo, iia?aoi?u e
au?aaeaiey. A aeaaa 3 ?anniao?eaathony oi?aaeythuea iia?aoi?u:
IF-ELSE ,WHILE ,FOR e o.ae. Aeaaa 4 ioaaouaaao ooieoeee e
no?oeoo?o i?ia?aiiu – aiaoiea ia?aiaiiua, i?aaeea ii?aaeaeai-
iuo iaeanoae aeaenoaey iienaiey e o.ae. A aeaaa 5 ianoaeaeathony
oeacaoaee e aae?aniay a?eoiaoeea. Aeaaa 6 niaea?aeeo iiae?iaiia
iienaiea no?oeoo? e iauaaeeiaiee.
A aeaaa 7 iienuaaaony noaiaea?oiay aeaeeioaea aaiaea-au-
aiaea ycuea “C”, eioi?ay iaania/eaaao noaiaea?oiue eioa?oaen n
iia?aoeeiiiie nenoaiie. Yoa aeaeeioaea aaiaea-auaiaea iiaeaea?aee-
aaaony ia anao iaoeiao, ia eioi?uo ?aaeeciaai “C”, oae /oi
i?ia?aiiu, eniieuecothuea aa aeey aaiaea, auaiaea e ae?oaeo nen-
oaiiuo ooieoeee, iiaoo ia?aiineoueny n iaeiie nenoaiu ia ae?oaoth
ii nouanoao aac eciaiaiee.
A aeaaa 8 iienuaaaony eioa?oaen iaaeaeo “C” – i?ia?aiiaie
e iia?aoeeiiiie nenoaiie “UNIX”. Oii? aeaeaaony ia aaiae-auaiae,
nenoaio oaeeia e ia?aiineiinoue. Oioy iaeioi?ua /anoe yoie
aeaau niaoeeoe/iu aeey iia?aoeeiiiie nenoaiu “UNIX”, i?ia?ai-
ienou, ia eniieuecothuea “UNIX”, ana aea aeieaeiu iaeoe caeanue ii-
eaciue iaoa?eae, a oii /enea iaeioi?ia i?aaenoaaeaiea i oii,
eae ?aaeeciaaia iaeia aa?ney noaiaea?oiie aeaeeioaee e i?aaeei-
aeaiey aeey aeinoeaeaiey ia?aiineiinoe i?ia?aiiu.
I?eeiaeaiea A niaea?aeeo ni?aai/iia ?oeiaiaenoai ii ycueo
“C”. Iii yaeyaony “ioeoeeaeueiui” eceiaeaieai neioaenena e na-
iaioeee “C” e (eneeth/ay /ae-eeai nianoaaiiue eiiieeyoi?)
ieii/aoaeueiui a?aeo?ii aeey anao aeaoniuneaiiinoae e oiouaiee
a i?aaeuaeoueo aeaaao.
· 11 –
Oae eae “C” yaeyaony ?acaeaathueiny ycueii, ?aaeeciaai-
iui ia iiiaeanoaa nenoai, /anoue iaoa?eea ianoiyuae eieae ii-
aeao ia niioaaonoaiaaoue oaeouaio ninoiyieth ?ac?aaioee ia ea-
eie-oi eiie?aoiie nenoaia. Iu noa?aeenue ecaaaaoue oaeeo i?ia-
eai e i?aaeinoa?aaaoue i aiciiaeiuo o?oaeiinoyo. A niiieoaeueiuo
neo/ayo, iaeiaei, iu iau/ii i?aaeii/eoaee iienuaaoue neooaoeeth
aeey nenoaiu “UNIX” PDP-11 , oae eae iia yaeyaony n?aaeie aeey
aieueoeinoaa i?ia?aiie?othueo ia ycuea “C”. A i?eeiaeaiee a
oaeaea iienaiu ?anoiaeaeaiey a ?aaeecaoeeyo ycuea “C” ia iniia-
iuo nenoaiao.
1. O/aaiia aaaaeaiea.
Aeaaaeoa ia/iai n auno?iai aaaaeaiey a ycue “C”. Iaoa
oeaeue – i?iaeaiiino?e?iaaoue nouanoaaiiua yeaiaiou ycuea ia ?a-
aeueiuo i?ia?aiiao, ia oaycay i?e yoii a aeaoaeyo, oi?iaeueiuo
i?aaeeao e eneeth/aieyo. A yoie aeaaa iu ia iuoaainy eceiaeeoue
ycue iieiinoueth eee oioy au no?iai (?acoiaaony, i?eaiaeeiua
i?eia?u aoaeoo ei??aeoiuie). Iu oioei eae iiaeii nei?aa aeiaan-
oe aan aei oaeiai o?iaiy, ia eioi?ii au auee au a ninoiyiee
ienaoue iieaciua i?ia?aiiu, e /oiau aeiaeoueny yoiai, iu nin?a-
aeioa/eaaainy ia iniiaiii: ia?aiaiiuo e eiinoaioao, a?eoiaoe-
ea, iia?aoi?ao ia?aaea/e oi?aaeaiey, ooieoeeyo e yeaiaioa?iuo
naaaeaieyo i aaiaea e auaiaea. Iu niaa?oaiii iaia?aiii inoaaey-
ai ca i?aaeaeaie yoie aeaau iiiaea yeaiaiou ycuea “C”, eioi-
?ua eiatho ia?ainoaiaiiia cia/aiea i?e iaienaiee aieueoeo
i?ia?aii, a oii /enea oeacaoaee, n?ooeoo?u, aieueooth /anoue ec
aiaaoiai iaai?a iia?aoi?ia ycuea “C”, ianeieueei iia?aoi?ia
ia?aaea/e oi?aaeaiey e ianiaoiia eiee/anoai aeaoaeae.
Oaeie iiaeoiae eiaao, eiia/ii, naie iaaeinoaoee. Naiui no-
uanoaaiiui yaeyaony oi, /oi iieiia iienaiea ethaiai eiie?ao-
iiai yeaiaioa ycuea ia eceaaaaony a iaeiii ianoa, a iiynia-
iey, a neeo e?aoeinoe, iiaoo i?eaanoe e iai?aaeeueiiio enoie-
eiaaieth. E?iia oiai, ec-ca iaaiciiaeiinoe eniieueciaaoue anth
iiuue ycuea, i?eia?u ieacuaathony ia noieue e?aoeeie e yeaaaio-
iuie, eae iie iiaee au auoue. E oioy iu noa?aeenue naanoe yoe
iaaeinoaoee e ieieioio, ana aea eiaeoa eo aaeaeo.
Ae?oaie iaaeinoaoie ninoieo a oii, /oi iineaaeothuea aeaau
aoaeoo iaecaaaeii iiaoi?youe iaeioi?ua /anoe yoie aeaau. Iu ia-
aeaainy, /oi oaeia iiaoi?aiea aoaeao nei?aa iiiiaaoue, /ai ?ac-
ae?aaeaoue.
Ai anyeii neo/aa, iiuoiua i?ia?aiienou aeieaeiu ieacaoueny
a ninoiyiee i?iyeno?aiiee?iaaoue iaoa?eae aeaiiie aeaau ia
naie nianoaaiiua i?ia?aiienoneea ioaeaeu. Ia/eiathuea aea aeieaeiu
a aeiiieiaiea ienaoue aiaeiae/iua iaeaiueeea naiinoiyoaeueiua
i?ia?aiiu. E oa, e ae?oaea iiaoo eniieueciaaoue yoo aeaao eae
ea?ean, ia eioi?ue aoaeoo iaaaoeaaoueny aieaa iiae?iaiua iiena-
iey, ia/eiathueany n aeaau 2.
1.1. Ha/eiaai. Aaeeinoaaiiue niinia inaieoue iiaue ycue
i?ia?aiie?iaaiey – ienaoue ia iai i?ia?aiiu. Ia?aay i?ia?ai-
ia, eioi?ay aeieaeia auoue iaienaia, – iaeia aeey anao ycueia:
iaia/aoaoue neiaa : HELLO, WORLD.
Yoi – naiue nouanoaaiiue aa?uea?; /oiau i?aiaeieaoue aai,
au aeieaeiu noiaoue caaanoe aaea-oi oaeno i?ia?aiiu, oniaoii aai
neiiieee?iaaoue, caa?oceoue, i?iaiaoue e iaeoe, aaea ieacaeanue
aaoa auaea/a. Anee au iao/eeenue ni?aaeyoueny n yoeie oaoie/an-
eeie aeaoaeyie, ana inoaeueiia n?aaieoaeueii i?inoi.
· 12 –
I?ia?aiia ia/aoe “HELLO, WORLD” ia ycuea “C” eiaao aeae:
MAIN ()
PRINTF(“HELLO, WORLDN”);
Eae i?iionoeoue yoo i?ia?aiio – caaeneo io eniieuecoaiie
aaie nenoaiu. A /anoiinoe, ia iia?aoeeiiiie nenoaia “UNIX” au
aeieaeiu caaanoe enoiaeioth i?ia?aiio a oaeea, eiy eioi?iai
ieai/eaaaony ia “.C” , iai?eia?, HELLO.C , e caoai neiiieee-
?iaaoue aa ii eiiaiaea
CC HELLO.C
Anee au ia aeiionoeee eaeie-eeai iaa?aaeiinoe , oaeie eae
i?iione neiaiea eee iai?aaeeueiia iaienaiea, eiiieeyoeey i?ie-
aeao aac niiauaiee e aoaeao nicaeai eniieiyaiue oaee n eiaiai
a.OUT . I?iaii aai ii eiiaiaea
A.OUT
i?eaaaeao e auaiaeo
HELLO, WORLD
Ia ae?oaeo nenoaiao yoe i?aaeea aoaeoo eiuie; i?ieiinoeue-oe?oeoanue n
ianoiui aaoi?eoaoii.
Oi?aaeiaiea 1-1.
I?iionoeoa yoo i?ia?aiio ia aaoae nenoaia. Iii?iaoeoa
ia aeeth/aoue ?acee/iua /anoe i?ia?aiiu e iiniio?eoa eaeea ni-
iauaiey ia ioeaeao au i?e yoii iieo/eoa.
Oaia?ue iaeioi?ua iiyniaiey e naiie i?ia?aiia. Ethaay
“C”-i?ia?aiia, eaeia au ie aue aa ?acia?, ninoieo ec iaeiie
eee aieaa “ooieoeee”, oeacuaathueo oaeoe/aneea iia?aoeee
eiiiuethoa?a, eioi?ua aeieaeiu auoue auiieiaiu. Ooieoeee a ycuea
“C” iiaeiaiu ooieoeeyi e iiaei?ia?aiiai oi?o?aia e i?ioeaaeo?ai
PL/1, ianeaey e o.ae. A iaoai i?eia?a oaeie ooieoeeae yaeyaony
MAIN. Iau/ii au iiaeaoa aeaaaoue ooieoeeyi ethaua eiaia ii aaoaio
oniio?aieth, ii MAIN – yoi iniaia eiy; auiieiaiea aaoae i?ia-
?aiiu ia/eiaaony nia/aea n ooieoeee MAIN. Yoi icia/aao, /oi
eaaeaeay i?ia?aiia aeieaeia a eaeii-oi ianoa niaea?aeaoue ooieoeeth n
eiaiai MAIN. Aeey auiieiaiey ii?aaeaeaiiuo aeaenoaee ooieoeey
MAIN iau/ii ia?auaaony e ae?oaei ooieoeeyi, /anoue ec eioi?uo
iaoiaeeony a oie aea naiie i?ia?aiia, a /anoue – a aeaeeioaeao,
niaea?aeaueo ?aiaa iaienaiiua ooieoeee.
· 13 –
Iaeiei niiniaii iaiaia aeaiiuie iaaeaeo ooieoeeyie yaeyaony
ia?aaea/a iin?aaenoaii a?aoiaioia. E?oaeua neiaee, neaaeothuea
ca eiaiai ooieoeee, caeeth/atho a naaa nienie a?aoiaioia; caeanue
iaIN – ooieoeey aac a?aoiaioia, /oi oeacuaaaony eae (). Iia-
?aoi?u, ninoaaeythuea ooieoeeth, caeeth/athony a oeao?iua neiaee
e , eioi?ua aiaeiae/iu DO-END a PL/1 eee BEGIN-END a ae-
aiea, ianeaea e o.ae. Ia?auaiea e ooieoeee inouanoaeyaony oea-
caieai aa eiaie, ca eioi?ui neaaeoao caeeth/aiiue a e?oaeua
neiaee nienie a?aoiaioia. caeanue iao ieeaeeo iia?aoi?ia CALL,
eae a oi?o?aia eee PL/1. E?oaeua neiaee aeieaeiu i?enoonoai-
aaoue e a oii neo/aa, eiaaea ooieoeey ia eiaao a?aoiaioia.
No?iea
PRINTF(“HELLO, WORLDN”);
yaeyaony ia?auaieai e ooieoeee, eioi?ia aucuaaao ooieoeeth
n eiaiai PRINTF e a?aoiaoii “HELLO, WORLDN”. Ooieoeey PRINTF
yaeyaony aeaeeioa/iie ooieoeeae, eioi?ay auaeaao auoiaeiua aeai-
iua ia oa?ieiae (anee oieueei ia oeacaii eaeia-oi ae?oaia ian-
oi iacia/aiey). A aeaiiii neo/aa ia/aoaaony no?iea neiaieia,
yaeythuayny a?aoiaioii ooieoeee.
Iineaaeiaaoaeueiinoue ec ethaiai eiee/anoaa neiaieia, cae-
eth/aiiuo a oaeaiaiiua eaau/ee “…”, iacuaaaony ‘neiaieueiie
no?ieie’ eee ‘no?i/iie eiinoaioie’. Iiea iu aoaeai eniieueci-
aaoue neiaieueiua no?iee oieueei a ea/anoaa a?aoiaioia aeey
PRINTF e ae?oaeo ooieoeee.
Iineaaeiaaoaeueiinoue N a i?eaaaeaiiie no?iea yaeyaony
iaicia/aieai ia ycuea “C” aeey ‘neiaiea iiaie no?iee’, eioi-
?ue neoaeeo oeacaieai aeey ia?aoiaea ia oa?ieiaea e eaaiio e?ath
neaaeothuae no?iee. Anee au ia aeeth/eoa N (iieaciue yenia?e-
iaio), oi iaia?oaeeoa, /oi aaoa auaea/a ia caeii/eony ia?aoi-
aeii oa?ieiaea ia iiaoth no?ieo. Eniieueciaaiea iineaaeiaaoaeue-
iinoe N – aaeeinoaaiiue niinia aaaaeaiey neiaiea iiaie no?iee
a a?aoiaio ooieoeee PRINTF; anee au iii?iaoaoa /oi-ieaoaeue
a?iaea
PRINTF(“HELLO, WORLD
“);
oi “C”-eiiieeyoi? aoaeao ia/aoaoue cei?aaeiua aeeaaiinoe/aneea
niiauaiey i iaaeinoathueo eaau/eao.
Ooieoeey PRINTF ia iaania/eaaao aaoiiaoe/aneiai ia?aoiaea
ia iiaoth no?ieo, oae /oi iiiaie?aoiia ia?auaiea e iae iiaeii
eniieueciaaoue aeey iiyoaiiie nai?ee auoiaeiie no?iee. Iaoa ia?-
aay i?ia?aiia, ia/aoathuay eaeaioe/ioth auaea/o, n oi/ii oaeei
aea oniaoii iiaea au auoue iaienaia a aeaea
MAIN()
PRINTF(“HELLO, “);
PRINTF(“WORLD”);
PRINTF(“N”);
· 14 –
Iiae/a?eiai, /oi N i?aaenoaaeyao oieueei iaeei neiaie. On-
eiaiua ‘iineaaeiaaoaeueiinoe’, iiaeiaiua N , aeatho iauee e aei-
ioneathuee ?anoe?aiea iaoaieci aeey i?aaenoaaeaiey o?oaeiuo aeey
ia/aoe eee iaaeaeeiuo neiaieia. N?aaee i?i/eo neiaieia a ycuea
“C” i?aaeoniio?aiu neaaeothuea: o – aeey oaaoeyoeee, B – aeey
aica?aoa ia iaeio iiceoeeth, ” – aeey aeaieiie eaau/ee e aeey
naiie ia?aoiie einie /a?ou.
Oi?aaeiaiea 1-2.
I?iaaaeeoa yenia?eiaiou aeey oiai, /oiau ociaoue /oi i?ie-
cieaeao, anee a no?iea, yaeythuaeny a?aoiaioii ooieoeee PRINTF
aoaeao niaea?aeaoueny X, aaea X – iaeioi?ue neiaie, ia aoiaeyuee
a auoai?eaaaeaiiue nienie.
1.2. Ia?aiaiiua e a?eoiaoeea.
Neaaeothuay i?ia?aiia ia/aoaao i?eaaaeaiioth ieaea oaaeeoeo
oaiia?aoo? ii Oa?aiaaeoo e eo yeaeaaeaioia ii noia?aaeoniie
oeaea Oeaeueney, eniieuecoy aeey ia?aaiaea oi?ioeo
C = (5/9)*(F-32).
0 -17.8
20 -6.7
40 4.4
60 15.6
… …
260 126.7
280 137.8
300 140.9
Oaia?ue naia i?ia?aiia:
/* PRINT FAHRENHEIT-CELSIUS TABLE
FOR F = 0, 20, …, 300 */
MAIN()
INT LOWER, UPPER, STEP;
FLOAT FAHR, CELSIUS;
LOWER = 0; /* LOWER LIMIT OF TEMPERATURE
TABLE */
UPPER =300; /* UPPER LIMIT */
STEP = 20; /* STEP SIZE */
FAHR = LOWER;
WHILE (FAHR = ‘0’ && C = ‘0’ && C = ‘0’ && C 0 */
INT X,N;
INT I, P;
P = 1;
FOR (I =1; I 0;
VERSION 2 */
INT X,N;
INT P;
FOR (P = 1; N > 0; –N)
P = P * X;
RETURN (P);
A?aoiaio N eniieuecoaony eae a?aiaiiay ia?aiaiiay; ec ia-
ai au/eoaaony aaeeieoea aei oao ii?, iiea ii ia noaiao ioeai.
Ia?aiaiiay I caeanue aieueoa ia ioaeia. /oiau ie i?ienoiaeeei n N
aioo?e POWER yoi ieeae ia aeeyao ia a?aoiaio, n eioi?ui ia?-
aiia/aeueii ia?aoeeenue e ooieoeee POWER.
I?e iaiaoiaeeiinoe ana aea iiaeii aeiaeoueny, /oiau ooieoeey
eciaieea ia?aiaiioth ec aucuaathuae i?ia?aiiu. Yoa i?ia?aiia
aeieaeia iaania/eoue onoaiiaeaiea aae?ana ia?aiaiiie /oaoie/an-
ee, /a?ac oeacaoaeue ia ia?aiaiioth/, a a aucuaaaiie ooieoeee
iaaei iienaoue niioaaonoaothuee a?aoiaio eae oeacaoaeue e nnu-
eaoueny e oaeoe/aneie ia?aiaiiie einaaiii /a?ac iaai. Iu ?an-
niio?ei yoi iiae?iaii a aeaaa 5.
Eiaaea a ea/anoaa a?aoiaioa aunooiaao eiy ianneaa, oi
oaeoe/aneei cia/aieai, ia?aaeaaaaiui ooieoeee, yaeyaony aae?an
ia/aea ianneaa. /Caeanue iao ieeaeiai eiie?iaaiey yeaiaioia
ianneaa/. N iiiiuueth eiaeaenaoeee e aae?ana ia/aea ooieoeey iiaeao
iaeoe e eciaieoue ethaie yeaiaio ianneaa. Yoi – oaia neaaeothua-
ai ?acaeaea.
· 32 –
1.9. Ianneau neiaieia.
Ii-aeaeeiiio naiui iauei oeiii ianneaa a “C” yaeyaony
iannea neiaieia. *oiau i?ieeethno?e?iaaoue eniieueciaaiea ian-
neaia neiaieia e ia?aaaouaathueo eo ooieoeee, aeaaaeoa iaieoai
i?ia?aiio, eioi?ay /eoaao iaai? no?ie e ia/aoaao naioth aeeei-
ioth ec ieo. Iniiaiay noaia i?ia?aiiu aeinoaoi/ii i?inoa:
WHILE (eiaaony aua no?iea)
IF (yoa no?iea aeeeiiaa naiie aeeeiiie ec
i?aaeuaeoueo)
caiiiieoue yoo no?ieo e aa aeeeio
iaia/aoaoue naioth aeeeiioth no?ieo
Ii yoie noaia ynii, /oi i?ia?aiia anoanoaaiiui ia?acii
?aniaaeaaony ia ianeieueei /anoae. Iaeia /anoue /eoaao iiaoth
no?ieo, ae?oaay i?iaa?yao aa, o?aouey caiiieiaao, a inoaeueiua
/anoe i?ia?aiiu oi?aaeytho yoei i?ioeannii.
Iineieueeo ana oae i?ae?anii aeaeeony, auei au oi?ioi e
iaienaoue i?ia?aiio niioaaonaothuei ia?acii. Aeaaaeoa nia/aea
iaieoai ioaeaeueioth ooieoeeth GETLINE, eioi?ay aoaeao ecaeaeaoue
neaaeothuoth no?ieo ec oaeea aaiaea; yoi – iaiauaiea ooieoeee
GETCHAR. iu iiiuoaainy naeaeaoue yoo ooieoeeth ii aiciiaeiinoe
aieaa aeaeie, /oiau iia auea iieaciie e a ae?oaeo neooaoeeyo.
Eae ieieioi GETLINE aeieaeia ia?aaeaaaoue neaiae i aiciiaeiii ii-
yaeaiee eiioea oaeea; aieaa iauee iieaciue aa?eaio iia au ia-
?aaeaaaoue aeeeio no?iee eee ioeue, anee ano?aoeony eiiaoe oaeea.
ioeue ia iiaeao auoue aeeeiie no?iee, oae eae eaaeaeay no?iea ni-
aea?aeeo ii e?aeiae ia?a iaeei neiaie; aeaaea no?iea, niaea?aeauay
oieueei neiaie iiaie no?iee, eiaao aeeeio 1.
Eiaaea iu iaoiaeei no?ieo, eioi?ay aeeeiiaa naiie aeeeiiie
ec i?aaeuaeoueo, oi aa iaaei aaea-oi caiiiieoue. Yoi iaaiaeeo ia
iuneue i ae?oaie ooieoeee, COPY , eioi?ay aoaeao eiie?iaaoue ii-
aoth no?ieo a ianoi o?aiaiey.
Iaeiiaoe, iai ioaeia iniiaiay i?ia?aiia aeey oi?aaeaiey
ooieoeeyie GETLINE e COPY . Aio ?acoeueoao :
#DEFINE MAXLINE 1000 /* MAXIMUM INPUT
LINE SIZE */
MAIN() /* FIND LONGEST LINE */
INT LEN; /* CURRENT LINE LENGTH */
INT MAX; /* MAXIMUM LENGTH SEEN SO FAR */
CHAR LINE[MAXLINE]; /* CURRENT INPUT LINE */
CHAR SAVE[MAXLINE]; /* LONGEST LINE, SAVED */
MAX = 0;
WHILE ((LEN = GETLINE(LINE, MAXLINE)) > 0)
IF (LEN > MAX)
MAX = LEN;
COPY(LINE, SAVE);
IF (MAX > 0) /* THERE WAS A LINE */
PRINTF(“%S”, SAVE);
· 33 –
GETLINE(S,LIM) /* GET LINE INTO S,RETURN LENGTH */
CHAR S[];
INT LIM;
INT C, I;
FOR(I=0;I
IF ( LEN > MAX )
MAX = LEN;
COPY();
IF ( MAX > 0 ) /* THERE WAS A LINE */
PRINTF( “%S”, SAVE );
GETLINE() /* SPECIALIZED VERSION */
INT C, I;
EXTERN CHAR LINE[];
FOR (I = 0; I > ==’0′ && S[I]= ‘A’ && C J, e
eiae/aneea au?aaeaiey, naycaiiua iia?aoeeyie && e !!, ii ii-
?aaeaeaieth eiatho cia/aiea 1, anee iie enoeiiu, e 0, anee iie
eiaeiu. Oaeei ia?acii, i?enaaeaaiea
ISDIGIT = C >= ‘0’ && C > naeaea ai?aai
^ aeiiieiaiea (oia?iay iia?aoeey)
“” eiieoe?oao aa?oeeaeueioth /a?oo.
Iiaeoiaay iia?aoeey AND /anoi eniieuecoaony aeey ianee?iaaiey
iaeioi?iai iiiaeanoaa aeoia; iai?eia?, iia?aoi?
C = N & 0177
· 52 –
ia?aaeaao a ‘n’ naiue ieaaeoeo aeoia N , iieaaay inoaeueiua ?aa-
iuie ioeth. Iia?aoeey ‘y’ iiaeoiaiai OR eniieuecoaony aeey aeeth-
/aiey aeoia:
C = X y MASK
onoaiaaeeaaao ia aaeeieoeo oa aeou a o , eioi?ua ?aaiu aaeeieoea
a MASK.
Neaaeoao auoue aieiaoaeueiui e ioee/aoue iiaeoiaua iia?aoeee
& e ‘y’ io eiae/aneeo naycie && e !! , Eioi?ua iiae?acoia-
aatho au/eneaiea cia/aiey enoeiiinoe neaaa iai?aai. Iai?eia?,
anee o=1, a Y=2, oi cia/aiea o&Y ?aaii ioeth , a oi a?aiy eae
cia/aiea X&&Y ?aaii aaeeieoea./ii/aio?/
Iia?aoeee naeaeaa > inouanoaeytho niioaaonoaaiii
naeaea aeaai e ai?aai naiaai eaaiai iia?aiaea ia /enei aeoiauo
iiceoeee, caaeaaaaiuo i?aaui iia?aiaeii. Oaeei ia?acii , o> (P+1-N)) & ^(^0 > (P+1-N) naeaeaaao aeaeaaiia iiea a i?aaue eiiaoe
neiaa. Iienaiea a?aoiaioa X eae UNSIGNED aa?aioe?oao, /oi
i?e naeaeaa ai?aai inaiaiaeaeathueany aeou aoaeoo caiieiyoueny io-
eyie, a ia niaea?aeeiui ciaeiaiai aeoa, iacaaeneii io oiai, ia
eaeie iaoeia i?iioneaaony i?ia?aiia. Ana aeou eiinoaioiiai
au?aaeaiey ^0 ?aaiu 1; naeaea aai ia N iiceoeee aeaai n ii-
iiuueth iia?aoeee ^0> & ^ !
Anee a1 e a2 – au?aaeaiey, oi
· 54 –
a1 ii= a2
yeaeaaeaioii
a1 = (a1) ii (a2)
ca eneeth/aieai oiai, /oi au?aaeaiea a1 au/eneyaony oieueei
iaeei ?ac. Ia?aoeoa aieiaiea ia e?oaeua neiaee aie?oa a2:
X *= Y + 1
oi
X = X * (Y + 1)
ia
X = X * Y + 1
A ea/anoaa i?eia?a i?eaaaeai ooieoeeth BITCOUNT, eioi?ay iiaen/eouaaao
/enei ?aaiuo 1 aeoia o oeaeiai a?aoiaioa.
BITCOUNT(N) /* COUNT 1 BITS IN N */
UNSIGNED N;
(
INT B;
FOR (B = 0; N != 0; N >>= 1)
IF (N & 01)
B++;
RETURN(B);
)
Ia aiai?y oaea i e?aoeinoe, oaeea iia?aoi?u i?eaaeaaiey
eiatho oi i?aeiouanoai, /oi iie eo/oa niioaaonoaotho ia?aco
/aeiaa/aneiai iuoeaiey. Iu aiai?ei: “i?eaaaeoue 2 e I” eee
“oaaee/eoue I ia 2”, ii ia “acyoue I, i?eaaaeoue 2 e iiianoeoue
?acoeueoao iiyoue a I”. Eoae, I += 2. E?iia oiai, a a?iiicaeeeo
au?aaeaieyo, iiaeiaiuo
YYVAL[YYPV[P3+P4] + YYPV[P1+P2]] += 2
Taeay iia?aoeey i?enaaeaaiey iaeaa/aao iiieiaiea i?ia?aiiu,
oae eae /eoaoaeue ia aeieaeai ne?oioeacii i?iaa?youe, yaeythony
ee aeaa aeeeiiuo au?aaeaiey aeaenoaeoaeueii iaeeiaeiauie, eee ca-
aeoiuaaoueny, ii/aio iie ia niaiaaeatho. Oaeay iia?aoeey i?enaae-
aaiey iiaeao aeaaea iiii/ue eiiieeyoi?o iieo/eoue aieaa yooaeoea-
ioth i?ia?aiio.
Iu oaea eniieueciaaee oio oaeo, /oi iia?aoeey i?enaaeaaiey
eiaao iaeioi?ia cia/aiea e iiaeao aoiaeeoue a au?aaeaiey; naiue
oeie/iue i?eia?
· 55 –
WHILE ((C = GETCHAR()) != EOF)
i?enaaeaaiey, eniieuecothuea ae?oaea iia?aoeee i?enaaeaaiey (+=,
-= e o.ae.) oaeaea iiaoo aoiaeeoue a au?aaeaiey, oioy yoi neo/a-
aony ?aaea.
Oeiii au?aaeaiey i?enaaeaaiey yaeyaony oei aai eaaiai
iia?aiaea.
Oi?aaeiaiea 2-9.
A aeaie/iie nenoaia n/eneaiey iia?aoeey X&(X-1) iaioeyao
naiue i?aaue ?aaiue 1 aeo ia?aiaiiie X.(ii/aio?) eniieuecoeoa
yoi caia/aiea aeey iaienaiey aieaa auno?ie aa?nee ooieoeee
BITCOUNT.
2.11. Oneiaiua au?aaeaiey.
Iia?aoi?u
IF (A > B)
Z = A;
ELSE
Z = B;
eiia/ii au/eneytho a Z iaeneioi ec a e a. Oneiaiia au?aaeaiea,
caienaiiia n iiiiuueth oa?ia?iie iia?aoeee “?:”, i?aaeinoaaeyao
ae?oaoth aiciiaeiinoue aeey caiene yoie e aiaeiae/iuo eiino?oe-
oeee. A au?aaeaiee
a1 ? A2 : a3
nia/aea au/eneyaony au?aaeaiea a1. Anee iii ioee/ii io ioey
(enoeiii), oi au/eneyaony au?aaeaiea a2, eioi?ia e noaiiaeony
cia/aieai oneiaiiai au?aaeaiey. A i?ioeaiii neo/aa au/eneyao-
ny a3, e iii noaiiaeony cia/aieai oneiaiiai au?aaeaiey. Eaae-
aeue ?ac au/eneyaony oieueei iaeii ec au?aaeaiey a2 e a3. Oaeei
ia?acii, /oiau iieiaeeoue Z ?aaiui iaeneioio ec a e a, iiaeii
iaienaoue
Z = (A > B) ? A : B; /* Z = MAX(A,B) */
Neaaeoao iiae/a?eiooue, /oi oneiaiia au?aaeaiea aeaenoaeoaeue-
ii yaeyaony au?aaeaieai e iiaeao eniieueciaaoueny oi/ii oae aea,
eae ethaia ae?oaia au?aaeaiea. Anee a2 e a3 eiatho ?aciua oeiu,
oi oei ?acoeueoaoa ii?aaeaeyaony ii i?aaeeai i?aia?aciaaiey,
?anniio?aiiui ?aiaa a yoie aeaaa. iai?eia?, anee F eiaao oei
FLOAT, a N – oei INT, oi au?aaeaiea
(N > 0) ? F : N
Eiaao oei DOUBLE iacaaeneii io oiai, iieiaeeoaeueii ee N eee
iao.
· 56 –
Oae eae o?iaaiue noa?oeinoaa iia?aoeee ?: i/aiue iecie,
i?yii iaae i?enaaeaaieai, oi ia?aia au?aaeaiea a oneiaiii au-
?aaeaiee iiaeii ia caeeth/aoue a e?oaeua neiaee. Iaeiaei, iu ana
aea ?aeiiaiaeoai yoi aeaeaoue, oae eae neiaee aeaeatho oneiaioth
/anoue au?aaeaiey aieaa caiaoiie.
Eniieueciaaiea oneiaiuo au?aaeaiee /anoi i?eaiaeeo e ei?io-
eei i?ia?aiiai. Iai?eia?, neaaeothuee ieaea iia?aoi? oeeeea ia-
/aoaao N yeaiaioia ianneaa, ii 10 a no?iea, ?acaeaeyy eaaeaeue
noieaaoe iaeiei i?iaaeii e caeai/eaay eaaeaeoth no?ieo (aeeth/ay
iineaaeithth) iaeiei neiaieii ia?aaiaea no?iee.
OR (I = 0; I . LEFT TO RIGHT
! ^ ++ — – (TYPE) * & SIZEOF RIGHT TO LEFT
* / % LEFT TO RIGHT
+ – LEFT TO RIGHT
> LEFT TO RIGHT
>= LEFT TO RIGHT
· 57 –
== != LEFT TO RIGHT
& LEFT TO RIGHT
^ LEFT TO RIGHT
! LEFT TO RIGHT
&& LEFT TO RIGHT
!! LEFT TO RIGHT
?: RIGHT TO LEFT
= += -= ETC. RIGHT TO LEFT
, (CHAPTER 3) LEFT TO RIGHT
Iia?aoeee -> e . Eniieuecothony aeey aeinooia e yeaiaioai no?oe-
oo?; iie aoaeoo iienaiu a aeaaa 6 aianoa n SIZEOF (?acia?
iauaeoa). A aeaaa 5 ianoaeaeathony iia?aoeee * (einaaiiay aae?a-
naoeey) e & (aae?an).
Ioiaoei, /oi o?iaaiue noa?oeinoaa iiaeoiauo eiae/aneeo iia?a-
oeee &, ^ e y ieaea o?iaiy iia?aoeee == e !=. Yoi i?eaiaeeo e
oiio, /oi inouanoaeythuea iiaeoiaoth i?iaa?eo au?aaeaiey, ii-
aeiaiua
IF ((X & MASK) == 0) …
Aeey iieo/aiey i?aaeeueiuo ?acoeueoaoia aeieaeiu caeeth/aoueny a
e?oaeua neiaee.
Eae oaea ioia/aeinue ?aiaa, au?aaeaiey, a eioi?ua aoiaeeo
iaeia ec annioeeaoeaiuo e eiiiooaoeaiuo iia?aoeee (*, +, &, ^,
y), iiaoo ia?aa?oiie?iauaaoueny, aeaaea anee iie caeeth/aiu a
e?oaeua neiaee. A aieueoeinoaa neo/aaa yoi ia i?eaiaeeo e ea-
eei au oi ie auei ?anoiaeaeaieyi; a neooaoeeyo, aaea oaeea ?an-
oiaeaeaiey ana aea aiciiaeiu, aeey iaania/aiey ioaeiiai ii?yaeea
au/eneaiee iiaeii eniieueciaaoue yaiua i?iiaaeooi/iua ia?aiai-
iua.
A ycuea “C”, eae e a aieueoeinoaa ycueia, ia oeene?oaony
ii?yaeie au/eneaiey iia?aiaeia a iia?aoi?a. Iai?eia? a iia?a-
oi?a aeaea
X = F() + G();
nia/aea iiaeao auoue au/eneaii F, a iioii G, e iaiai?io; iiy-
oiio, anee eeai F, eeai G eciaiytho aiaoithth ia?aiaiioth, io
eioi?ie caaeneo ae?oaie iia?aiae, oi cia/aiea X iiaeao caaenaoue
io ii?yaeea au/eneaiee. Aeey iaania/aiey ioaeiie iineaaeiaaoaeue-
iinoe i?iiaaeooi/iua ?acoeueoaou iiaeii iiyoue caiiieiaoue ai
a?aiaiiuo ia?aiaiiuo.
Iiaeiaiui aea ia?acii ia oeene?oaony ii?yaeie au/eneaiey
a?aoiaioia ooieoeee, oae /oi iia?aoi?
PRINTF(“%D %DN”,++N,POWER(2,N));
· 58 –
iiaeao aeaaaoue (e aeaenoaeoaeueii aeaao) ia ?aciuo iaoeiao ?aciua
?acoeueoaou a caaeneiinoe io oiai, oaaee/eaaaony ee N aei eee
iinea ia?auaiey e ooieoeee POWER. I?aaeeueiui ?aoaieai, eiia/-
ii, yaeyaony caienue
++N;
PRINTF(“%D %DN”,N,POWER(2,N));
Ia?auaiey e ooieoeeyi, aeiaeaiiua iia?aoeee i?enaaeaaiey,
iia?aoeee oaaee/aiey e oiaiueoaiey i?eaiaeyo e oae iacuaaaiui
“iiai/iui yooaeoai” – iaeioi?ua ia?aiaiiua eciaiythony eae
iiai/iue ?acoeueoao au/eneaiey au?aaeaiee. A ethaii au?aaeaiee,
a eioi?ii aicieeatho iiai/iua yooaeou, iiaoo nouanoaiaaoue
i/aiue oiieea caaeneiinoe io ii?yaeea, a eioi?ii ii?aaeaeythony
aoiaeyuea a iaai ia?aiaiiua. i?eia?ii oeie/iie iaoaea/iie ne-
ooaoeee yaeyaony iia?aoi?
A[I] = I++;
Aicieeaao aii?in, noa?ia eee iiaia cia/aiea I neoaeeo a ea-
/anoaa eiaeaena. Eiiieeyoi? iiaeao iinooiaoue ?aciuie niiniaaie
e a caaeneiinoe io naiae eioa?i?aoaoeee auaeaaaoue ?aciua ?a-
coeueoaou. Oio neo/ae, eiaaea i?ienoiaeyo iiai/iua yooaeou
(i?enaaeaaiea oaeoe/aneei ia?aiaiiui), – inoaaeyaony ia on-
iio?aiea eiiieeyoi?a, oae eae iaeeo/oee ii?yaeie neeueii caae-
neo io a?oeoaeoo?u iaoeiu.
Ec yoeo ?annoaeaeaiee auoaeaao oaeay ii?aeue: iaienaiea
i?ia?aii, caaenyueo io ii?yaeea au/eneaiee, yaeyaony ieioei
iaoiaeii i?ia?aiie?iaaiey ia ethaii ycuea. Eiia/ii, iaiaoiaeeii
ciaoue, /aai neaaeoao ecaaaaoue, ii anee au ia a eo?na, eae ia-
eioi?ua aaue ?aaeeciaaiu ia ?aciuo iaoeiao, yoi iaaaaeaiea
iiaeao i?aaeio?aieoue aan io iai?eyoiinoae. (Ioeaaei/iay i?ia-
?aiia LINT oeaaeao aieueoeinoai iano, caaenyueo io ii?yaeea au-
/eneaiee.
· 59 –
3. Iioie oi?aaeaiey
Oi?aaeythuea iia?aoi?u ycuea ii?aaeaeytho ii?yaeie au/enea-
iee. A i?eaaaeaiiuo ?aiaa i?eia?ao iu oaea ano?a/aeenue n iae-
aieaa oiio?aaeoaeueiuie oi?aaeythueie eiino?oeoeeyie ycuea “C”;
caeanue iu iieoai inoaeueiua iia?aoi?u oi?aaeaiey e ooi/iei
aeaenoaey iia?aoi?ia, ianoaeaeaaoeony ?aiaa.
3.1. Iia?aoi?u e aeiee
Oaeea au?aaeaiey, eae X=0, eee I++, eee PRINTF(…),
noaiiayony iia?aoi?aie, anee ca ieie neaaeoao oi/ea n caiy-
oie, eae, iai?eia?,
X = 0;
I++;
PRINTF(…);
A ycuea “C” oi/ea n caiyoie yaeyaony i?eciaeii eiioea iia?a-
oi?a, a ia ?acaeaeeoaeai iia?aoi?ia, eae a ycueao oeia aeai-
ea.
Oeao?iua neiaee /( e /) eniieuecothony aeey iauaaeeiaiey
iienaiee e iia?aoi?ia a ninoaaiie iia?aoi? eee aeie, oae /oi
iie ieacuaathony neioaene/anee yeaeaaeaioiu iaeiiio iia?aoi?o.
Iaeei yaiue i?eia? oaeiai oeia aeatho oeao?iua neiaee, a eioi-
?ua caeeth/athony iia?aoi?u, ninoaaeythuea ooieoeeth, ae?oaie –
oeao?iua neiaee aie?oa a?oiiu iia?aoi?ia a eiino?oeoeeyo IF,
ELSE, WHILE e FOR.(ia naiii aeaea ia?aiaiiua iiaoo auoue iie-
naiu aioo?e ethaiai aeiea; iu iiaiai?ei ia yoii a aeaaa 4).
Oi/ea n caiyoie ieeiaaea ia noaaeony iinea ia?aie oeao?iie
neiaee, eioi?ay caaa?oaao aeie.
3.2. IF – ELSE
Iia?aoi? IF – ELSE eniieuecoaony i?e iaiaoiaeeiinoe naea-
eaoue auai?. Oi?iaeueii neioaenen eiaao aeae
IF (au?aaeaiea)
iia?aoi?-1
ELSE
iia?aoi?-2,
Aaea /anoue ELSE yaeyaony iaiaycaoaeueiie. Nia/aea au/eney-
aony au?aaeaiea; anee iii “enoeiii” /o.a. cia/aiea au?aaeaiey
ioee/ii io ioey/, oi auiieiyaony iia?aoi?-1. Anee iii eiaeii
/cia/aiea au?aaeaiey ?aaii ioeth/, e anee anoue /anoue n ELSE,
oi aianoi iia?aoi?a-1 auiieiyaony iia?aoi?-2.
· 60 –
Oae eae IF i?inoi i?iaa?yao /eneaiiia cia/aiea au?aaea-
iey, oi aiciiaeii iaeioi?ia nie?auaiea caiene. Naiie i/aaeae-
iie aiciiaeiinoueth yaeyaony caienue
IF (au?aaeaiea)
aianoi
IF (au?aaeaiea !=0)
eiiaaea oaeay caienue yaeyaony yniie e anoanoaaiiie, ii a?aia-
iaie iia noaiiaeony caaaaei/iie.
Oi, /oi /anoue ELSE a eiino?oeoeee IF – ELSE yaeyaony iai-
aycaoaeueiie, i?eaiaeeo e aeaoniuneaiiinoe a neo/aa, eiaaea ELSE
iioneaaony ai aeiaeaiiie iineaaeiaaoaeueiinoe iia?aoi?ia IF.
Yoa iaiaeiicia/iinoue ?ac?aoaaony iau/iui ia?acii – ELSE nay-
cuaaaony n aeeaeaeoei i?aaeuaeouei IF, ia niaea?aeauei ELSE.
Iai?eia?, a
IF ( N > 0 )
IF( A > B )
Z = A;
ELSE
Z = B;
eiino?oeoeey ELSE ioiineony e aioo?aiiaio IF, eae iu e iiea-
caee, naeaeioa ELSE iiae niioaaonoaothuee IF. Anee yoi ia oi,
/oi au oioeoa, oi aeey iieo/aiey ioaeiiai niioaaonoaey iaiaoi-
aeeii eniieueciaaoue oeao?iua neiaee:
IF (N > 0)
IF (A > B)
Z = A;
ELSE
Z = B;
Taeay aeaoniuneaiiinoue iniaaiii iaaoaia a neooaoeeyo oeia
IF (N > 0)
FOR (I = 0; I 0)
PRINTF(“…”);
RETURN(I);
ELSE /* WRONG */
PRINTF(“ERROR – N IS ZERON”);
· 61 –
Caienue ELSE iiae IF ynii iieacuaaao, /aai au oioeoa, ii eii-
ieeyoi? ia iieo/eo niioaaonoaothuaai oeacaiey e nayaeao ELSE n
aioo?aiiei IF. Ioeaee oaeiai ?iaea i/aiue o?oaeii iaia?oaeeaatho-
ny.
Iaaeaeo i?i/ei, ia?aoeoa aieiaiea, /oi a
IF (A > B)
Z = A;
ELSE
Z = B;
iinea Z=A noieo oi/ea n caiyoie. Aeaei a oii, /oi niaeanii
a?aiiaoe/aneei i?aaeeai ca IF aeieaeai neaaeiaaoue iia?aoi?, a
au?aaeaiea oeia Z=A, yaeythuaany iia?aoi?ii, anaaaea caeai/eaa-
aony oi/eie n caiyoie.
3.3. ELSE – IF
Eiino?oeoeey
IF (au?aaeaiea)
iia?aoi?
ELSE IF (au?aaeaiea)
iia?aoi?
ELSE IF (au?aaeaiea)
iia?aoi?
ELSE
iia?aoi?
ano?a/aaony ianoieueei /anoi, /oi caneoaeeaaao ioaeaeueiiai
e?aoeiai ?anniio?aiey. Oaeay iineaaeiaaoaeueiinoue iia?aoi?ia
IF yaeyaony iaeaieaa ?ani?ino?aiaiiui niiniaii i?ia?aiie?i-
aaiey auai?a ec ianeieueeeo aiciiaeiuo aa?eaioia. au?aaeaiey
i?iniao?eaathony iineaaeiaaoaeueii; anee eaeia-oi au?aaeaiea
ieacuaaaony enoeiiui,oi auiieiyaony ioiinyueeny e iaio iia-
?aoi?, e yoei any oeaii/ea caeai/eaaaony. Eaaeaeue iia?aoi? ii-
aeao auoue eeai ioaeaeueiui iia?aoi?ii, eeai a?oiiie iia?aoi?ia
a oeao?iuo neiaeao.
Iineaaeiyy /anoue n ELSE eiaao aeaei ni neo/aai, eiaaea ie
iaeii ec i?iaa?yaiuo oneiaee ia auiieiyaony. Eiiaaea i?e yoii
ia iaaei i?aaei?eieiaoue ieeaeeo yaiuo aeaenoaee; a yoii neo/aa
oaino
ELSE
iia?aoi?
iiaeao auoue iiouai, eee aai iiaeii eniieueciaaoue aeey eiio?iey,
/oiau cana/ue “iaaiciiaeiia” oneiaea.
· 62 –
Aeey eeethno?aoeee auai?a ec o?ao aiciiaeiuo aa?eaioia i?e-
aaaeai i?ia?aiio ooieoeee, eioi?ay iaoiaeii iieiaeiiiai aeaeaiey
ii?aaeaeyao, iaoiaeeony ee aeaiiia cia/aiea o a ioni?oe?iaaiiii
ianneaa V. Yeaiaiou ianneaa V aeieaeiu auoue ?aniieiaeaiu a ii-
?yaeea aic?anoaiey. Ooieoeey aica?auaao iiia? iiceoeee (/enei
iaaeaeo 0 e N-1), a eioi?ie cia/aiea o iaoiaeeony a V, e -1,
anee o ia niaea?aeeony a V.
BINARY(X, V, N) /* FIND X IN V[0]…V[N-1] */
INT X, V[], N;
INT LOW, HIGH, MID;
LOW = 0;
HIGH = N – 1;
WHILE (LOW V[MID])
LOW = MID + 1;
ELSE /* FOUND MATCH */
RETURN(MID);
RETURN(-1);
Iniiaiie /anoueth eaaeaeiai oaaa aeai?eoia yaeyaony i?iaa?-
ea, aoaeao ee o iaiueoa, aieueoa eee ?aaai n?aaeiaio yeaiaioo
V[MID]; eniieueciaaiea eiino?oeoeee ELSE – IF caeanue aiieia an-
oanoaaiii.
3.4. Ia?aeeth/aoaeue
Iia?aoi? SWITCH aeaao niaoeeaeueiue niinia auai?a iaeiiai ec
iiiaeo aa?eaioia, eioi?ue caeeth/aaony a i?iaa?ea niaiaaeaiey
cia/aiey aeaiiiai au?aaeaiey n iaeiie ec caaeaiiuo eiinoaio e
niioaaonoaothuai aaoaeaiee. A aeaaa 1 iu i?eaaee i?ia?aiio
iiaen/aoa /enea aoiaeaeaiee eaaeaeie oeeo?u, neiaieia ionouo i?i-
iaaeooeia e anao inoaeueiuo neiaieia, eniieuecothuoth iineaaeiaa-
oaeueiinoue IF…ELSE IF…ELSE. Aio oa aea naiay i?ia?aiia n
ia?aeeth/aoaeai.
· 63 –
MAIN() /* COUNT DIGITS,WHITE SPACE, OTHERS */
INT C, I, NWHITE, NOTHER, NDIGIT[10];
NWHITE = NOTHER = 0;
FOR (I = 0; I = ‘0’ && S[I] 0; GAP /= 2)
FOR (I = GAP; I =0 && V[J]>V[J+GAP]; J-=GAP)
TEMP = V[J];
V[J] = V[J+GAP];
V[J+GAP] = TEMP;
Caeanue eiathony o?e aeiaeaiiuo oeeeea. Naiue aiaoiee oeeee oi?aa-
eyao eioa?aaeii iaaeaeo n?aaieaaaiuie yeaiaioaie, oiaiueoay aai
io N/2 aaeaia i?e eaaeaeii i?ioiaea, iiea ii ia noaiao ?aaiui
ioeth. N?aaeiee oeeee n?aaieaaao eaaeaeoth ia?o yeaiaioia, ?acaea-
eaiiuo ia aaee/eio eioa?aaea; naiue aioo?aiiee oeeee ia?an-
oaaeyao ethaoth iaoii?yaei/aiioth ia?o. Oae eae eioa?aae a eiioea
eiioeia naiaeeony e aaeeieoea, ana yeaiaiou a ?acoeueoaoa oii?y-
aei/eaathony i?aaeeueii. Ioiaoei, /oi a neeo iauiinoe eiino?oe-
oeee FOR aiaoiee oeeee oeeaaeuaaaony a oo aea naioth oi?io, /oi e
inoaeueiua, oioy ii e ia yaeyaony a?eoiaoe/aneie i?ia?anneae.
Iineaaeiae iia?aoeeae ycuea “C” yaeyaony caiyoay “,”, ei-
oi?ay /aua anaai eniieuecoaony a iia?aoi?a FOR. Aeaa au?aaea-
iey, ?acaeaeaiiua caiyoie, au/eneythony neaaa iai?aai, i?e/ai
oeiii e cia/aieai ?acoeueoaoa yaeythony oei e cia/aiea i?aaiai
iia?aiaea. Oaeei ia?acii, a ?acee/iua /anoe iia?aoi?a FOR
iiaeii aeeth/eoue ianeieueei au?aaeaiee, iai?eia?, aeey ia?aeeaeue-
iiai eciaiaiey aeaoo eiaeaenia. Yoi eeethno?e?oaony ooieoeeae
REVERSE(S), eioi?ay ?aniieaaaao no?ieo S a ia?aoiii ii?yaeea
ia oii aea ianoa.
REVERSE(S) /* REVERSE STRING S IN PLACE */
CHAR S[];
INT C, I, J;
FOR(I = 0, J = STRLEN(S) – 1; I 0); /* DELETE IT */
IF (SIGN 0)
WHILE (–N >= 0)
IF (LINE[N] != ‘ ‘ && LINE[N] != ‘T’
&& LINE[N] != ‘N’)
BREAK;
LINE[N+1] = ‘0’;
PRINTF(“%SN”,LINE);
Ooieoeey GETLINE aica?auaao aeeeio no?iee. Aioo?aiiee oeeee
ia/eiaaony n iineaaeiaai neiaiea LINE (iaiiiiei, /oi—N
oiaiueoaao N aei eniieueciaaiey aai cia/aiey) e aeaeaeaony a ia-
?aoiii iai?aaeaiee a iienea ia?aiai neiaiea , eioi?ue ioee-
/ai io i?iaaea, oaaoeyoeee eee iiaie no?iee. Oeeee i?a?uaaao-
ny, eiaaea eeai iaeaeai oaeie neiaie, eeai N noaiiaeony io?e-
oeaoaeueiui (o.a., eiaaea i?iniio?aia any no?iea). Niaaooai aai
oaaaeeoueny, /oi oaeia iiaaaeaiea i?aaeeueii e a oii neo/aa,
eiaaea no?iea ninoieo oieueei ec neiaieia ionouo i?iiaaeooeia.
A ea/anoaa aeueoa?iaoeau e BRaae iiaeii aaanoe i?iaa?eo a
nai oeeee:
WHILE ((N = GETLINE(LINE,MAXLINE)) > 0)
WHILE (–N >= 0
&& (LINE[N] == ‘ ‘ !! LINE[N] == ‘T’
!! LINE[N] == ‘N’))
;
…
· 71 –
Yoi onooiaao i?aaeuaeouaio aa?eaioo, oae eae i?iaa?ea noaii-
aeony o?oaeiaa aeey iiieiaiey. I?iaa?ie, eioi?ua o?aaotho ia-
?aieaoaiey &&, !!, ! E e?oaeuo neiaie, ii aiciiaeiinoe nea-
aeoao ecaaaaoue.
3.8. Iia?aoi? CONTINUE
Iia?aoi? CONTINUE ?iaenoaaiai iia?aoi?o BRaae, ii eniieue-
coaony ?aaea; ii i?eaiaeeo e ia/aeo neaaeothuae eoa?aoeee ioaaou-
aathuaai oeeeea (FOR, WHILE, DO ). A oeeeeao WHILE e DO yoi ic-
ia/aao iaiin?aaenoaaiiue ia?aoiae e auiieiaieth i?iaa?i/iie
/anoe; a oeeeea FOR oi?aaeaiea ia?aaeaaony ia oaa ?aeieoeeaee-
caoeee. (Iia?aoi? CONTINUE i?eiaiyaony oieueei a oeeeeao, ii ia
a ia?aeeth/aoaeyo. Iia?aoi? CONTINUE aioo?e ia?aeeth/aoaey
aioo?e oeeeea aucuaaao auiieiaiea neaaeothuae eoa?aoeee oeeeea).
A ea/anoaa i?eia?a i?eaaaeai o?aaiaio, eioi?ue ia?aaaou-
aaao oieueei iieiaeeoaeueiua yeaiaiou ianneaa a; io?eoeaoaeueiua
cia/aiey i?iioneathony.
FOR (I = 0; I 0)
IF (INDEX(LINE, “THE”) >= 0)
PRINTF(“%S”, LINE);
· 75 –
GETLINE(S, LIM) /* GET LINE INTO S, RETURN LENGTH *
CHAR S[];
INT LIM;
INT C, I;
I = 0;
WHILE(–LIM>0 && (C=GETCHAR()) != EOF && C != ‘N’)
S[I++] = C;
IF (C == ‘N’)
S[I++] = C;
S[I] = ‘0’;
RETURN(I);
INDEX(S,T) /* RETURN INDEX OF T IN S,-1 IF NONE */
CHAR S[], T[];
INT I, J, K;
FOR (I = 0; S[I] != ‘0’; I++)
FOR(J=I, K=0; T[K] !=’0′ && S[J] == T[K]; J++; K++)
;
IF (T[K] == ‘0’)
RETURN(I);
RETURN(-1);
Eaaeaeay ooieoeey eiaao aeae eiy (nienie a?aoiaioia, anee iie
eiathony) iienaiey a?aoiaioia, anee iie eiathony
iienaiey e iia?aoi?u , anee iie eiathony
Eae e oeacuaaaony, iaeioi?ua /anoe iiaoo ionoonoai-
aaoue; ieieiaeueiie ooieoeeae yaeyaony
DUMMY ()
eioi?ay ia niaa?oaao ieeaeeo aeaenoaee.
/Oaeay ie/aai ia aeaeathuay ooieoeey eiiaaea ieacuaaaony
oaeiaiie aeey nio?aiaiey ianoa aeey aeaeueiaeoaai ?acaeoey i?ia-
?aiiu/. anee ooieoeey aica?auaao /oi-eeai ioee/iia io oeaeiai
cia/aiey, oi ia?aae aa eiaiai iiaeao noiyoue oeacaoaeue oeia;
yoio aii?in ianoaeaeaaony a neaaeothuai ?acaeaea.
· 76 –
I?ia?aiiie yaeyaony i?inoi iaai? ii?aaeaeaiee ioaeaeueiuo
ooieoeee. Naycue iaaeaeo ooieoeeyie inouanoaeyaony /a?ac a?aoiai-
ou e aica?auaaiua ooieoeeyie cia/aiey /a yoii neo/aa/; aa
iiaeii oaeaea inouanoaeyoue /a?ac aiaoiea ia?aiaiiua. Ooieoeee
iiaoo ?aniieaaaoueny a enoiaeiii oaeea a ethaii ii?yaeea, a naia
enoiaeiay i?ia?aiia iiaeao ?aciauaoueny ia ianeieueeeo oaeeao,
ii oae, /oiau ie iaeia ooieoeey ia ?anuaieyeanue.
Iia?aoi? RETURN neoaeeo iaoaieciii aeey aica?auaiey cia-
/aiey ec aucaaiiie ooieoeee a ooieoeeth, eioi?ay e iae ia?aoe-
eanue. Ca RETURN iiaeao neaaeiaaoue ethaia au?aaeaiea:
RETURN (au?aaeaiea)
Aucuaathuay ooieoeey iiaeao eaii?e?iaaoue aica?auaaiia
cia/aiea, anee iia yoiai iiaeaeaao. Aieaa oiai, iinea RETURN
iiaeao ia auoue aiiaua ieeaeiai au?aaeaiey; a yoii neo/aa a au-
cuaathuoth i?ia?aiio ia ia?aaeaaony ieeaeiai cia/aiey. Oi?aaea-
iea oaeaea aica?auaony a aucuaathuoth i?ia?aiio aac ia?aaea/e
eaeiai-eeai cia/aiey e a oii neo/aa, eiaaea i?e auiieiaiee iu
“i?iaaeeaaainy” ia eiiaoe ooieoeee, aeinoeaay cae?uaathuaeny
i?aaie oeao?iie neiaee. ENee ooieoeey aica?auaao cia/aiea ec
iaeiiai ianoa e ia aica?auaao ieeaeiai cia/aiey ec ae?oaiai
ianoa, yoi ia yaeyaony iacaeiiiui, ii iiaeao auoue i?eciaeii
eaeeo-oi iai?eyoiinoae. A ethaii neo/aa “cia/aieai” ooieoeee,
eioi?ay ia aica?auaao cia/aiey, ianiiiaiii aoaeao ioni?. Io-
eaaei/iay i?ia?aiia LINT i?iaa?yao oaeea ioeaee.
Iaoaieea eiiieeyoeee e caa?ocee “C”-i?ia?aii, ?aniiei-
aeaiiuo a ianeieueeeo enoiaeiuo oaeeao, iaiyaony io nenoaiu e
nenoaia. A nenoaia “UNIX”, iai?eia?, yoo ?aaioo auiieiyao
eiiaiaea ‘CC’, oiiiyiooay a aeaaa 1. I?aaeiieiaeei, /oi o?e
ooieoeee iaoiaeyony a o?ao ?acee/iuo oaeeao n eiaiaie MAIN.n,
GETLINE.C e INDEX.n . Oiaaea eiiaiaea
CC MAIN.C GETLINE.C INDEX.C
eiiieee?oao yoe o?e oaeea, iiiauaao iieo/aiiue iano?aeaaaiue iauaeoiue
eiae a oaeeu MAIN.O, GETLINE.O e INDEX.O e caa?oaea-ao eo anao a
auiieiyaiue oaee, iacuaaaiue A.OUT .
Anee eiaaony eaeay-oi ioeaea, neaaeai a MAIN.C, oi yoio
oaee iiaeii ia?aeiiieee?iaaoue ioaeaeueii e caa?oceoue aianoa n
i?aaeuaeoueie iauaeoiuie oaeeaie ii eiiaiaea
CC MAIN.C GETLIN.O INDEX.O
Eiiaiaea ‘CC’ eniieuecoao niaeaoaiea i iaeiaiiaaiee n “.n” e “.i” aeey
oiai, /oiau ioee/eoue enoiaeiua oaeeu io iauaeoiuo.
Oi?aaeiaiea 4-1.
Ninoaaueoa i?ia?aiio aeey ooieoeee RINDEX(S,T), eioi?ay
aica?auaao iiceoeeth naiiai i?aaiai aoiaeaeaiey o a S e -1, anee
S ia niaea?aeeo T.
· 77 –
4.2. Ooieoeee, aica?auathuea iaoeaeua cia/aiey.
Aei neo ii? ie iaeia ec iaoeo i?ia?aii ia niaea?aeaea eaei-
ai-eeai iienaiey oeia ooieoeee. Aeaei a oii, /oi ii oiie/aieth
ooieoeey iayaii iienuaaaony naiei iiyaeaieai a au?aaeaiee eee
iia?aoi?a, eae, iai?eia?, a
WHILE (GETLINE(LINE, MAXLINE) > 0)
Anee iaeioi?ia eiy, eioi?ia ia auei iienaii ?aiaa, iiya-
eyaony a au?aaeaiee e ca iei neaaeoao eaaay e?oaeay neiaea, oi
iii ii eiioaenoo n/eoaaony eiaiai iaeioi?ie ooieoeee. E?iia
oiai, ii oiie/aieth i?aaeiieaaaaony, /oi yoa ooieoeey aica?aua-
ao cia/aiea oeia INT. Oae eae a au?aaeaieyo CHAR i?aia?acoao-
ny a INT, oi iao iaiaoiaeeiinoe iienuaaoue ooieoeee, aica?auath-
uea CHAR. Yoe i?aaeiieiaeaiey iie?uaatho aieueoeinoai neo/aaa,
aeeth/ay ana i?eaaaeaiiua aei neo ii? i?eia?u.
Ii /oi i?ienoiaeeo, anee ooieoeey aeieaeia aica?aoeoue cia/a-
iea eaeiai-oi ae?oaiai oeia ? Iiiaea /eneaiiua ooieoeee, oaeea
eae SQRT, SIN e COS aica?auatho DOUBLE; ae?oaea niaoeeaeueiua
ooieoeee aica?auatho cia/aiey ae?oaeo oeiia. *oiau iieacaoue,
eae iinooiaoue a yoii neo/aa, aeaaaeoa iaieoai e eniieuecoai
ooieoeeth ATiF(S), eioi?ay i?aia?acoao no?ieo S a yeaeaaeaio-
iia ae ieaaathuaa /enei aeaieiie oi/iinoe. Ooieoeey ATiF yaey-
aony ?anoe?aieai aoiI, aa?eaiou eioi?ie iu iaienaee a aeaaao
2 e 3; iia ia?aaaouaaao iaiaycaoaeueii ciae e aeanyoe/ioth oi/-
eo, a oaeaea oeaeoth e ae?iaioth /anoue, eaaeaeay ec eioi?uo iiaeao
eae i?enoonoaiaaoue, oae e ionoonoaiaaoue./yoa i?ioeaaeo?a i?a-
ia?aciaaiey aaiaea ia i/aiue aunieiai ea/anoaa; eia/a iia au
caiyea aieueoa ianoa, /ai iai oioaeinue au/.
Ai-ia?auo, naia ATiF aeieaeia iienuaaoue oei aica?auaaiiai
ath cia/aiey, iineieueeo ii ioee/ai io INT. Oae eae a au?aaea-
ieyo oei FLOAT i?aia?acoaony a DOUBLE, oi iao ieeaeiai niun-
ea a oii, /oiau ATOF aica?auaea FLOAT; iu iiaeai n ?aaiui on-
iaoii ainiieueciaaoueny aeiiieieoaeueiie oi/iinoueth, oae /oi iu
iieaaaai, /oi aica?auaaiia cia/aiea oeia DOUBLE. Eiy oeia
aeieaeii noiyoue ia?aae eiaiai ooieoeee, eae iieacuaaaony ieaea:
DOUBLE ATOF(S) /* CONVERT STRING S TO DOUBLE */
CHAR S[];
DOUBLE VAL, POWER;
INT I, SIGN;
· 78 –
FOR(I=0; S[I]==’ ‘ !! S[I]==’N’ !! S[I]==’T’; I++)
; /* SKIP WHITE SPACE */
SIGN = 1;
IF (S[I] == ‘+’ !! S[I] == ‘-‘) /* SIGN */
SIGN = (S[I++] == ‘+’) ? 1 : -1;
FOR (VAL = 0; S[I] >= ‘0’ && S[I] = ‘0’ && S[I] 0)
PRINTF(“T%.2FN”,SUM+=ATOF(LINE));
Ienaiea
DOUBLE SUM, ATOF();
aiai?eo, /oi SUM yaeyaony ia?aiaiiie oeia DOUBLE , e /oi
ATOF yaeyaony ooieoeeae, aica?auathuae cia/aiea oeia DOUBLE .
Yoa iiaiiieea icia/aao, /oi cia/aieyie eae SUM, oae e
ATOF(…) yaeythony ieaaathuea /enea aeaieiie oi/iinoe.
· 79 –
Anee ooieoeey ATOF ia aoaeao iienaia yaii a iaieo ianoao,
oi a “C” i?aaeiieaaaaony, /oi iia aica?auaao oeaeia cia/aiea,
e au iieo/eoa aanniuneaiiue ioaao. Anee naia ATOF e ia?aua-
iea e iae a MAIN eiatho ianiaianoeiua oeiu e iaoiaeyony a iae-
iii e oii aea oaeea, oi yoi aoaeao iaia?oaeaii eiiieeyoi?ii. Ii
anee ATOF auea neiiieee?iaaia ioaeaeueii //oi aieaa aa?iyoii/,
oi yoi ianiioaaonoaea ia aoaeao caoeene?iaaii, oae /oi ATOF
aoaeao aica?auaoue cia/aiey oeia DOUBLE, n eioi?ui MAIN aoaeao
ia?auaoueny, eae n INT , /oi i?eaaaeao e aanniuneaiiui ?acoeue-
oaoai. /I?ia?aiia LINT aueaaeeaaao yoo ioeaeo/.
Eiay ATOF, iu, a i?eioeeia, iiaee au n aa iiiiuueth iaie-
naoue ATOI (i?aia?aciaaiea no?iee a INT):
ATOI(S) /* CONVERT STRING S TO INTEGER */
CHAR S[];
DOUBLE ATOF();
RETURN(ATOF(S));
Ia?aoeoa aieiaiea ia no?oeoo?o iienaiee e iia?aoi? RETURN.
Cia/aiea au?aaeaiey a
RETURN (au?aaeaiea)
anaaaea i?aia?acoaony e oeio ooieoeee ia?aae auiieiaieai naiiai
aica?auaiey. Iiyoiio i?e iiyaeaiee a iia?aoi?a RETURN cia/a-
iea ooieoeee aoiF, eiathuaa oei DOUBLE, aaoiiaoe/anee i?aia?a-
coaony a INT, iineieueeo ooieoeey ATOI aica?auaao INT. (Eae
ianoaeaeaeinue a aeaaa 2, i?aia?aciaaiea cia/aiey n ieaaathuae
oi/eie e oeio INT inouanoaeyaony iin?aaenoaii ioa?anuaaiey
ae?iaiie /anoe).
Oi?aaeiaiea 4-2.
?anoe?ueoa ATOF oaeei ia?acii, /oiau iia iiaea ?aaioaoue n
/eneaie aeaea
123.45a-6
aaea ca /eneii n ieaaathuae oi/eie iiaeao neaaeiaaoue ‘E’ e iiea-
caoaeue yeniiiaiou, aiciiaeii ni ciaeii.
4.3. Aua ia a?aoiaioao ooieoeee.
A aeaaa 1 iu oaea ianoaeaeaee oio oaeo , /oi a?aoiaiou ooi-
eoeee ia?aaeathony ii cia/aieth, o.a. aucaaiiay ooieoeey iieo/aao
naith a?aiaiioth eiieth eaaeaeiai a?aoiaioa, a ia aai aae?an. yoi
icia/aao, /oi aucaaiiay ooieoeey ia iiaeao aicaeaenoaiaaoue ia
enoiaeiue a?aoiaio a aucuaathuae ooieoeee. Aioo?e ooieoeee eaae-
aeue a?aoiaio ii nouanoao yaeyaony eieaeueiie ia?aiaiiie, ei-
oi?ay eieoeeaeece?oaony oai cia/aieai, n eioi?ui e yoie ooie-
oeee ia?aoeeenue.
· 80 –
Anee a ea/anoaa a?aoiaioa ooieoeee aunooiaao eiy ianneaa,
oi ia?aaeaaony aae?an ia/aea yoiai ianneaa; naie yeaiaiou ia
eiie?othony. Ooieoeey iiaeao eciaiyoue yeaiaiou ianneaa, eniieue-
coy eiaeaenaoeeth e aae?an ia/aea. Oaeei ia?acii, iannea ia?aaea-
aony ii nnueea. A aeaaa 5 iu ianoaeei, eae eniieueciaaiea oea-
caoaeae iicaieyao ooieoeeyi aicaeaenoaiaaoue ia ioee/iua io
ianneaia ia?aiaiiua a aucuaathueo ooieoeeyo.
Iaaeaeo i?i/ei, ianouanoaoao iieiinoueth oaeiaeaoai?eoaeueiiai
niiniaa iaienaiey ia?aiineiie ooieoeee n ia?aiaiiui /eneii
a?aoiaioia. Aeaei a oii, /oi iao ia?aiineiiai niiniaa, n ii-
iiuueth eioi?iai aucaaiiay ooieoeey iiaea au ii?aaeaeeoue, neieue-
ei a?aoiaioia auei oaeoe/anee ia?aaeaii ae a aeaiiii ia?aua-
iee. Oaeei ia?acii, au, iai?eia?, ia iiaeaoa iaienaoue aeaeno-
aeoaeueii ia?aiineioth ooieoeeth, eioi?ay aoaeao au/eneyoue iaene-
ioi io i?iecaieueiiai /enea a?aoiaioia, eae aeaeatho ano?iaiiua
ooieoeee MAX a oi?o?aia e PL/1.
Iau/ii ni neo/aai ia?aiaiiiai /enea a?aoiaioia aaciianii
eiaoue aeaei, anee aucaaiiay ooieoeey ia eniieuecoao a?aoiaioia,
eioi?ua ae ia naiii aeaea ia auee ia?aaeaiu, e anee oeiu nia-
eanothony. Naiay ?ani?ino?aiaiiay a ycuea “C” ooieoeey n ia?a-
iaiiui /eneii – PRINTF . Iia iieo/aao ec ia?aiai a?aoiaioa
eioi?iaoeeth, iicaieythuoth ii?aaeaeeoue eiee/anoai inoaeueiuo a?-
aoiaioia e eo oeiu. Ooieoeey PRINTF ?aaioaao niaa?oaiii iai-
?aaeeueii, anee aucuaathuay ooieoeey ia?aaeaao ae iaaeinoaoi/iia
eiee/anoai a?aoiaioia, eee anee eo oeiu ia niaeanothony n oe-
iaie, oeacaiiuie a ia?aii a?aoiaioa. Yoa ooieoeey ia yaeyaony
ia?aiineiie e aeieaeia iiaeeoeoee?iaaoueny i?e eniieueciaaiee a
?acee/iuo oneiaeyo.
Anee aea oeiu a?aoiaioia ecaanoiu, oi eiiaoe nienea a?ao-
iaioia iiaeii ioiaoeoue, eniieuecoy eaeia-oi niaeaoaiea; iai?e-
ia?, n/eoay, /oi iaeioi?ia niaoeeaeueiia cia/aiea a?aoiaioa
(/anoi ioeue) yaeyaony i?eciaeii eiioea a?aoiaioia.
4.4. Aiaoiea ia?aiaiiua.
I?ia?aiia ia ycuea “C” ninoieo ec iaai?a aiaoieo iauae-
oia, eioi?ua yaeythony eeai ia?aiaiiuie, eeai ooieoeeyie. Oa?-
iei “aiaoiee” eniieuecoaony aeaaiui ia?acii a i?ioeaiiinoaa-
eaiea oa?ieio “aioo?aiiee”, eioi?ui iienuaathony a?aoiaiou e
aaoiiaoe/aneea ia?aiaiiua, ii?aaeaeaiiua aio?oe ooieoeee.
Aiaoiea ia?aiaiiua ii?aaeaeaiu aia eaeie-eeai ooieoeee e, oa-
eei ia?acii, iioaioeeaeueii aeinooiiu aeey iiiaeo ooieoeee. Naie
ooieoeee anaaaea yaeythony aiaoieie, iioiio /oi i?aaeea ycuea
“C” ia ?ac?aoatho ii?aaeaeyoue iaeie ooieoeee aioo?e ae?oaeo. Ii
oiie/aieth aiaoiea ia?aiaiiua yaeythony oaeaea e “aeiaaeueiuie”,
oae /oi ana nnueee ia oaeoth ia?aiaiioth, eniieuecothuea iaeii e
oi aea eiy (aeaaea ec ooieoeee, neiiieee?iaaiiuo iacaaeneii),
aoaeoo nnueeaie ia iaeii e oi aea. A yoii niunea aiaoiea ia?a-
iaiiua aiaeiae/iu ia?aiaiiui COiMON a oi?o?aia e EXTERNAL a
PL/1. Iicaeiaa iu iieaaeai, eae ii?aaeaeeoue aiaoiea ia?aiaiiua
e ooieoeee oaeei ia?acii, /oiau iie auee aeinooiiu ia aeiaaeue-
ii, a oieueei a i?aaeaeao iaeiiai enoiaeiiai oaeea.
· 81 –
A neeo naiae aeiaaeueiie aeinooiiinoe aiaoiea ia?aiaiiua
i?aaeinoaaeytho ae?oaoth, ioee/ioth io a?aoiaioia e aica?auaaiuo
cia/aiee, aiciiaeiinoue aeey iaiaia aeaiiuie iaaeaeo ooieoeeyie.
Anee eiy aiaoiae ia?aiaiiie eaeei-eeai ia?acii iienaii, oi
ethaay ooieoeey eiaao aeinooi e yoie ia?aiaiiie, nnueaynue e iae
ii yoiio eiaie.
A neo/ayo, eiaaea naycue iaaeaeo ooieoeeyie inouanoaeyaony n
iiiiuueth aieueoiai /enea ia?aiaiiuo, aiaoiea ia?aiaiiua ieacu-
aathony aieaa oaeiaiuie e yooaeoeaiuie, /ai eniieueciaaiea
aeeeiiuo nieneia a?aoiaioia. Eae, iaeiaei, ioia/aeinue a aeaaa
1, yoi niia?aaeaiea neaaeoao eniieueciaaoue n ii?aaeaeaiiie inoi-
?iaeiinoueth, oae eae iii iiaeao ieioi io?aceoueny ia no?oeoo?a
i?ia?aii e i?eaiaeeoue e i?ia?aiiai n aieueoei /eneii naycae ii
aeaiiui iaaeaeo ooieoeeyie.
Aoi?ay i?e/eia eniieueciaaiey aiaoieo ia?aiaiiuo naycaia
n eieoeeaeecaoeeae. A /anoiinoe, aiaoiea ianneau iiaoo auoue
eieoeeaeece?iaaiu a aaoiiaoe/aneea iao. Iu ?anniio?ei aii?in
ia eieoeeaeecaoeee a eiioea yoie aeaau.
O?aouey i?e/eia eniieueciaaiey aiaoieo ia?aiaiiuo iaoneia-
eaia eo iaeanoueth aeaenoaey e a?aiaiai nouanoaiaaiey. Aaoiia-
oe/aneea ia?aiaiiua yaeythony aioo?aiieie ii ioiioaieth e ooi-
eoeeyi; iie aicieeatho i?e aoiaea a ooieoeeth e en/acatho i?e au-
oiaea ec iaa. Aiaoiea ia?aiaiiua, iai?ioea, nouanoaotho iinoi-
yiii. Iie ia iiyaeythoy e ia en/acatho, oae /oi iiaoo nio?a-
iyoue naie cia/aiey a ia?eiae io iaeiiai ia?auaiey e ooieoeee aei
ae?oaiai. A neeo yoiai, anee aeaa ooieoeee eniieuecotho iaeioi?ua
iauea aeaiiua, i?e/ai ie iaeia ec ieo ia ia?auaaony e ae?oaie ,
oi /anoi iaeaieaa oaeiaiui ieacuaaaony o?aieoue yoe iauea aeai-
iua a aeaea aiaoieo ia?aiaiiuo, a ia ia?aaeaaaoue eo a ooieoeeth
e ia?aoii n iiiiuueth a?aoiaioia.
Aeaaaeoa i?iaeieaeei ianoaeaeaiea yoiai aii?ina ia aieueoii
i?eia?a. Caaea/a aoaeao ninoiyoue a iaienaiee ae?oaie i?ia?aiiu
aeey eaeueeoeyoi?a, eo/oae,/ai i?aaeuaeouay. Caeanue aeiioneathony
iia?aoeee +,-,*,/ e ciae = (aeey auaea/e ioaaoa).aianoi eioeen-
iiai i?aaenoaaeaiey eaeueeoeyoi? aoaeao eniieueciaaoue ia?aoioth
iieueneoth iioaoeeth,iineieueeo aa ianeieueei eaa/a ?aaeeciaaoue.a
ia?aoiie iieueneie iioaoeee ciae neaaeoao ca iia?aiaeaie; eioee-
niia au?aaeaiea oeia
(1-2)*(4+5)=
caienuaaaony a aeaea
12-45+*=
e?oaeua neiaee i?e yoii ia ioaeiu
· 82 –
?aaeecaoeey ieacuaaaony aanueia i?inoie.eaaeaeue iia?aiae ii-
iauaaony a noae; eiaaea iinooiaao ciae iia?aoeee,ioaeiia /enei
iia?aiaeia (aeaa aeey aeia?iuo iia?aoeee) auieiaaony,e iei i?e-
iaiyaony iia?aoeey e ?acoeueoao iai?aaeyaony ia?aoii a
noae.oae a i?eaaaeaiiii auoa i?eia?a 1 e 2 iiiauathony a noae
e caoai caiaiythony eo ?aciinoueth, -1.iinea yoiai 4 e 5 aai-
aeyony a noae e caoai caiaiythony naiae noiiie,9.aeaeaa /enea
· 1 e 9 caiaiythony a noaea ia eo i?iecaaaeaiea,?aaiia -9.iia-?aoeey =
ia/aoaao aa?oiee yeaiaio noaea, ia oaeaeyy aai (oae /oi i?iiaaeooi/iua
au/eneaiey iiaoo auoue i?iaa?aiu).
Naie iia?aoeee iiiauaiey /enae a noae e eo ecaea/aiey
i/aiue i?inou,ii, a nayce n aeeth/aieai a ianoiyuoth i?ia?aiio
iaia?oaeaiey ioeaie e ainnoaiiaeaiey,iie ieacuaathony aeinoa-
oi/ii aeeeiiuie. Iiyoiio eo/oa ioi?ieoue eo a aeaea ioaeaeueiuo
ooieoeee,/ai iiaoi?youe niioaaonoaothuee oaeno iianthaeo a i?ia-
?aiia. E?iia oiai, ioaeia ioaeaeueiay ooieoeey aeey auai?ee ec
aaiaea neaaeothuae iia?aoeee eee iia?aiaea. Oaeei ia?acii, no?oe-
oo?a i?ia?aiiu eiaao aeae:
WHILE( iinooiaao iia?aoeey eee iia?aiae, a ia eiiaoe
IF ( /enei )
iiianoeoue aai a noae
aLSE IF ( iia?aoeey )
auiooue iia?aiaeu ec noaea
auiieieoue iia?aoeeth
iiianoeoue ?acoeueoao a noae
ELSE
ioeaea
Iniiaiie aii?in, eioi?ue aua ia aue ianoaeaeai, caeeth/aao-
ny a oii,aaea iiianoeoue noae, o. A. Eaeea i?ioeaaeo?u niiaoo
ia?auaoueny e iaio iaiin?aaenoaaiii. Iaeia ec oaeeo aiciiaeiin-
oae ninoieo a iiiauaiee noaea a MAIN e ia?aaea/e naiiai noaea
e oaeouae iiceoeee a noaea ooieoeeyi, ?aaioathuei ni noaeii. Ii
ooieoeee MAIN iao iaiaoiaeeiinoe eiaoue aeaei n ia?aiaiiuie, oi-
?aaeythueie noaeii; ae anoanoaaiii ?annoaeaeaoue a oa?ieiao ii-
iauaiey /enae a noae e ecaea/aiey eo ioooaea. A neeo yoiai iu
?aoeee naeaeaoue noae e naycaiioth n iei eioi?iaoeeth aiaoieie
ia?aiaiiuie , aeinooiiuie ooieoeeyi PUSH (iiiauaiea a noae) e
POP (ecaea/aiea ec noaea), ii ia MAIN.
Ia?aaiae yoie noaiu a i?ia?aiio aeinoaoi/ii i?ino. Aaaeouay
i?ia?aiia yaeyaony ii nouanoao aieueoei ia?aeeth/aoaeai ii oe-
io iia?aoeee eee iia?aiaeo; yoi, ii-aeaeeiiio, aieaa oa?aeoa?-
iia i?eiaiaea ia?aeeth/aoaey, /ai oi, eioi?ia auei i?iaeaiiin-
o?e?iaaii a aeaaa 3.
#DEFINE MAXOP 20 /* MAX SIZE OF OPERAND, OPERATOR *
#DEFINE NUMBER ‘0’ /* SIGNAL THAT NUMBER FOUND */
#DEFINE TOOBIG ‘9’ /* SIGNAL THAT STRING IS TOO BIG *
· 83 –
MAIN() /* REVERSE POLISH DESK CALCULATOR */
/(
INT TUPE;
CHAR S[MAXOP];
DOUBLE OP2,ATOF(),POP(),PUSH();
WHILE ((TUPE=GETOP(S,MAXOP)) !=EOF);
SWITCH(TUPE) /(
CASE NUMBER:
PUSH(ATOF(S));
BREAK;
CASE ‘+’:
PUSH(POP()+POP());
BREAK;
CASE ‘*’:
PUSH(POP()*POP());
BREAK;
CASE ‘-‘:
OP2=POP();
PUSH(POP()-OP2);
BREAK;
CASE ‘/’:
OP2=POP();
IF (OP2 != 0.0)
PUSH(POP()/OP2);
ELSE
PRINTF(“ZERO DIVISOR POPPEDN”);
BREAK;
CASE ‘=’:
PRINTF(“T%FN”,PUSH(POP()));
BREAK;
CASE ‘C’:
CLEAR();
BREAK;
CASE TOOBIG:
PRINTF(“%.20S … IS TOO LONGN”,S)
BREAK;
/)
/)
#DEFINE MAXVAL 100 /* MAXIMUM DEPTH OF VAL STACK */
· 84 –
INT SP = 0; /* STACK POINTER */
DOUBLE VAL[MAXVAL]; /*VALUE STACK */
DOUBLE PUSH(F) /* PUSH F ONTO VALUE STACK */
DOUBLE F;
/(
IF (SP 0)
RETURN(VAL[–SP]);
ELSE /(
PRINTF(“ERROR: STACK EMPTYN”);
CLEAR();
RETURN(0);
/)
/)
CLEAR() /* CLEAR STACK */
/(
SP=0;
/)
Eiiaiaea C i/euaao noae n iiiiuueth ooieoeee CLEAR, eioi?ay
oaeaea eniieuecoaony a neo/aa ioeaee ooieoeeyie PUSH e POP. e
ooieoeee GETOP iu i/aiue nei?i aa?iainy.
Eae oaea aiai?eeinue a aeaaa 1, ia?aiaiiay yaeyaony aiao-
iae, anee iia ii?aaeaeaia aia oaea eaeie au oi ie auei ooie-
oeee. Iiyoiio noae e oeacaoaeue noaea, eioi?ua aeieaeiu eniieue-
ciaaoueny ooieoeeyie PUSH, POP e CLEAR, ii?aaeaeaiu aia yoeo
o?ao ooieoeee. Ii naia ooieoeey MAIN ia nnueaaony ie e noaeo,
ie e oeacaoaeth noaea – eo o/anoea ouaoaeueii caianee?iaaii. A
neeo yoiai /anoue i?ia?aiiu, niioaaonoaothuay iia?aoeee = , en-
iieuecoao eiino?oeoeeth
PUSH(POP());
aeey oiai, /oiau i?iaiaeece?iaaoue aa?oiee yeaiaio noaea, ia
eciaiyy aai.
Ioiaoei oaeaea, /oi oae eae iia?aoeee + e * eiiiooaoeaiu,
ii?yaeie, a eioi?ii iauaaeeiythony ecaea/aiiua iia?aiaeu, iano-
uanoaaiai, ii a neo/aa iia?aoeee – e / iaiaoiaeeii ?acee/aoue
eaaue e i?aaue iia?aiaeu.
· 85 –
Oi?aaeiaiea 4-3.
I?eaaaeaiiay iniiaiay noaia aeiioneaao iaiin?aaenoaaiiia
?anoe?aiea aiciiaeiinoae eaeueeoeyoi?a. Aeeth/eoa iia?aoeeth aea-
eaiey ii iiaeoeth /%/ e oia?iue ieion. Aeeth/eoa eiiaiaeo “noa-
?aoue”, eioi?ay oaeaeyao aa?oiee yeaiaio noaea. Aaaaeeoa eiiai-
aeu aeey ?aaiou n ia?aiaiiuie. /Yoi i?inoi, anee eiaia ia?a-
iaiiuo aoaeoo ninoiyoue ec iaeiie aoeau ec eiathueony aeaaaeoeaoe
oanoe aoea/.
4.5. I?aaeea, ii?aaeaeythuea iaeanoue aeaenoaey.
Ooieoeee e aiaoiea ia?aiaiiua, aoiaeyuea a ninoaa
“C”-i?ia?aiiu, ia iaycaiu eiiieee?iaaoueny iaeiia?aiaiii;
i?ia?aiia ia enoiaeiii ycuea iiaeao ?aniieaaaoueny a ianeieueeeo
oaeeao, e ?aiaa neiiieee?iaaiiua i?ioeaaeo?u iiaoo caa?oaeaoueny
ec aeaeeioae. Aeaa aii?ina i?aaenoaaeytho eioa?an:
Eae neaaeoao ninoaaeyoue iienaiey, /oiau ia?aiaiiua i?a-
aeeueii aini?eieiaeenue ai a?aiy eiiieeyoeee ?
Eae neaaeoao ninoaaeyoue iienaiey, /oiau iaania/eoue i?a-
aeeueioth naycue /anoae i?ia?aiiu i?e caa?ocea ?
4.5.1. Iaeanoue aeaenoaey.
Iaeanoueth aeaenoaey eiaie yaeyaony oa /anoue i?ia?aiiu, a
eioi?ie yoi eiy ii?aaeaeaii. Aeey aaoiiaoe/aneie ia?aiaiiie,
iienaiiie a ia/aea ooieoeee, iaeanoueth aeaenoaey yaeyaony oa
ooieoeey, a eioi?ie iienaii eiy yoie ia?aiaiiie, a ia?aiaiiua
ec ?aciuo ooieoeee, eiathuea iaeeiaeiaia eiy, n/eoathony ia io-
iinyueieny ae?oa e ae?oao. Yoi aea ni?aaaaeeeai e aeey a?aoiaioia
ooieoeee.
Iaeanoue aeaenoaey aiaoiae ia?aiaiiie i?inoe?aaony io oi/-
ee, a eioi?ie iia iauyaeaia a enoiaeiii oaeea, aei eiioea yoiai
oaeea. Iai?eia?, anee VAL, SP, PUSH, POP e CLEAR ii?aaeaeaiu
a iaeiii oaeea a ii?yaeea, oeacaiiii auoa, a eiaiii:
INT SP = 0;
DOUBLE VAL[MAXVAL];
DOUBLE PUSH(F) …
DOUBLE POP() …
CLEAR() …
oi ia?aiaiiua VAL e SP iiaeii eniieueciaaoue a PUSH, POP e
CLEAR i?yii ii eiaie; ieeaeea aeiiieieoaeueiua iienaiey ia
ioaeiu.
N ae?oaie noi?iiu, anee ioaeii nineaoueny ia aiaoithth ia?a-
iaiioth aei aa ii?aaeaeaiey, eee anee oaeay ia?aiaiiay ii?aaea-
eaia a oaeea, ioee/iii io oiai, a eioi?ii iia eniieuecoaony,
oi iaiaoiaeeii iienaiea EXTERN.
· 86 –
Aaaeii ?acee/aoue iienaiea aiaoiae ia?aiaiiie e aa ii?aaea-
eaiea. iienaiea oeacuaaao naienoaa ia?aiaiiie /aa oei, ?ac-
ia? e o.ae./; ii?aaeaeaiea aea aucuaaao aua e ioaaaeaiea iaiyoe.
Anee aia eaeie au oi ie auei ooieoeee iiyaeythony no?i/ee
INT SP;
DOUBLE VAL[MAXVAL];
oi iie ii?aaeaeytho aiaoiea ia?aiaiiua SP e VAL, aucuaatho io-
aaaeaiea iaiyoe aeey ieo e neoaeao a ea/anoaa iienaiey aeey in-
oaeueiie /anoe yoiai enoiaeiiai oaeea. A oi aea a?aiy no?i/ee
EXTERN INT SP;
EXTERN DOUBLE VAL[];
iienuaatho a inoaeueiie /anoe yoiai enoiaeiiai oaeea ia?aiaiioth
SP eae INT, a VAL eae iannea oeia DOUBLE /?acia? eioi?iai
oeacai a ae?oaii ianoa/, ii ia nicaeatho ia?aiaiiuo e ia ioai-
aeyo ei ianoa a iaiyoe.
Ai anao oaeeao, ninoaaeythueo enoiaeioth i?ia?aiio, aeieaeii
niaea?aeaoueny oieueei iaeii ii?aaeaeaiea aiaoiae ia?aiaiiie; ae?o-
aea oaeeu iiaoo niaea?aeaoue iienaiey EXTERN aeey aeinooia e iae.
/Iienaiea EXTERN iiaeao eiaoueny e a oii oaeea, aaea iaoiaeeony
ii?aaeaeaiea/. Ethaay eieoeeaeecaoeey aiaoiae ia?aiaiiie i?iai-
aeeony oieueei a ii?aaeaeaiee. A ii?aaeaeaiee aeieaeiu oeacuaaoueny
?acia?u ianneaia, a a iienaiee EXTERN yoiai iiaeii ia aeaeaoue.
Oioy iiaeiaiay i?aaiecaoeey i?eaaaeaiiie auoa i?ia?aiiu e
iaeiaa?iyoia, ii VAL e SP iiaee au auoue ii?aaeaeaiu e eieoeea-
eece?iaaiu a iaeiii oaeea, a ooieoeey PUSH, POP e CLEAR ii?a-
aeaeaiu a ae?oaii. A yoii neo/aa aeey nayce auee au iaiaoiaeeiu
neaaeothuea ii?aaeaeaiey e iienaiey:
a oaeea 1:
INT SP = 0; /* STACK POINTER */
DOUBLE VAL[MAXVAL]; /* VALUE STACK */
a oaeea 2:
EXTERN INT SP;
EXTERN DOUBLE VAL[];
DOUBLE PUSH(F) …
DOUBLE POP() …
CLEAR() …
oae eae iienaiey EXTERN ‘a oaeea 1’ iaoiaeyony auoa e aia
o?ao oeacaiiuo ooieoeee, iie ioiinyony ei anai iei; iaeiiai
iaai?a iienaiee aeinoaoi/ii aeey anaai ‘oaeea 2′.
· 87 –
Aeey i?ia?aii aieueoiai ?acia?a ianoaeaeaaiay iicaea a yoie
aeaaa aiciiaeiinoue aeeth/aiey oaeeia, #INCLUDE, iicaieyao
eiaoue ai anae i?ia?aiia oieueei iaeio eiieth iienaiee EXTERN e
anoaaeyoue aa a eaaeaeue enoiaeiue oaee ai a?aiy aai eiiieeyoeee.
Ia?aoeiny oaia?ue e ooieoeee GETOP, auae?athuae ec oaeea
aaiaea neaaeothuoth iia?aoeeth eee iia?aiae. Iniiaiay caaea/a i?in-
oa: i?iionoeoue i?iaaeu, ciaee oaaoeyoeee e iiaua no?iee. Anee
neaaeothuee neiaie ioee/ai io oeeo?u e aeanyoe/iie oi/ee, oi
aica?aoeoue aai. A i?ioeaiii neo/aa nia?aoue no?ieo oeeo? /iia
iiaeao aeeth/aoue aeanyoe/ioth oi/eo/ e aica?aoeoue NUMBER eae
neaiae i oii, /oi aua?aii /enei.
I?ioeaaeo?a nouanoaaiii oneiaeiyaony, anee no?aieoueny i?a-
aeeueii ia?aaaouaaoue neooaoeeth, eiaaea aaiaeeiia /enei ieacuaa-
aony neeoeii aeeeiiui. Ooieoeey GETOP n/eouaaao oeeo?u iiae?yae
/aiciiaeii n aeanyoe/iie oi/eie/ e caiiieiaao eo, iiea iinea-
aeiaaoaeueiinoue ia i?a?uaaaony. Anee i?e yoii ia i?ienoiaeeo
ia?aiieiaiey, oi ooieoeey aica?auaao NUMBER e no?ieo oeeo?.
Anee aea /enei ieacuaaaony neeoeii aeeeiiui, oi GETOP ioa?anu-
aaao inoaeueioth /anoue no?iee ec oaeea aaiaea, oae /oi iieueci-
aaoaeue iiaeao i?inoi ia?aia/aoaoue yoo no?ieo n ianoa ioeaee;
ooieoeey aica?auaao TOOBIG eae neaiae i ia?aiieiaiee.
GETOP(S, LIM) /* GET NEXT OPRERATOR OR OPERAND */
CHAR S[];
INT LIM;
INT I, C;
WHILE((C=GETCH())==’ ‘!! C==’T’ !! C==’N’)
;
IF (C != ‘.’ && (C ‘9’))
RETURN©;
S[0] = C;
FOR(I=1; (C=GETCHAR()) >=’0′ && C =’0′ && C 0) ? BUF[–BUFP] : GETCHAR());
UNGETCH© /* PUSH CHARACTER BACK ON INPUT */
INT C;
IF (BUFP > BUFSIZE)
PRINTF(“UNGETCH: TOO MANY CHARACTERSN”);
ELSE
BUF [BUFP++] = C;
Iu eniieueciaaee aeey o?aiaiey aica?auaaiuo neiaieia iannea, a
ia ioaeaeueiue neiaie, iioiio /oi oaeay iauiinoue iiaeao i?eai-
aeeoueny a aeaeueiaeoai.
· 89 –
Oi?aaeiaiea 4-4.
Iaieoeoa ooieoeeth UNGETS(S) , eioi?ay aoaeao aica?auaoue ai
aaiae oeaeoth no?ieo. Aeieaeia ee UNGETS eiaoue aeaei n BUF e BUFP
eee iia iiaeao i?inoi eniieueciaaoue UNGETCH ?
Oi?aaeiaiea 4-5.
I?aaeiieiaeeoa, /oi iiaeao aica?auaoueny oieueei iaeei neiaie. Ec-
iaieoa GETCH e UNGETCH niioaaonoaothuei ia?acii.
Oi?aaeiaiea 4-6.
Iaoe ooieoeee GETCH e UNGETCH ia iaania/eaatho ia?aaioeo aica-
?auaiiiai neiaiea EOF ia?aiineiui ia?acii. ?aoeoa, eaeei
naienoaii aeieaeiu iaeaaeaoue yoe ooieoeee, anee aica?auaaony
EOF, e ?aaeecoeoa aaoe auaiaeu.
4.6. Noaoe/aneea ia?aiaiiua.
Noaoe/aneea ia?aiaiiua i?aaenoaaeytho niaie o?aoee eeann
iaiyoe, a aeiiieiaiee e aaoiiaoe/aneei ia?aiaiiui e EXTERN, n
eioi?uie iu oaea ano?a/aeenue.
Noaoe/aneea ia?aiaiiua iiaoo auoue eeai aioo?aiieie, eeai
aiaoieie. Aioo?aiiea noaoe/aneea ia?aiaiiua oi/ii oae aea,
eae e aaoiiaoe/aneea, yaeythony eieaeueiuie aeey iaeioi?ie ooi-
eoeee, ii, a ioee/ea io aaoiiaoe/aneeo, iie inoathony nouano-
aiaaoue, a ia iiyaeythony e en/acatho aianoa n ia?auaieai e
yoie ooieoeee. yoi icia/aao, /oi aioo?aiiea noaoe/aneea ia?a-
iaiiua iaania/eaatho iinoiyiiia, iaaeinooiiia ecaia o?aiaiea
aioo?e ooieoeee. Neiaieueiua no?iee, iiyaeythueany aioo?e ooie-
oeee, eae, iai?eia?, a?aoiaiou PRINTF , yaeythony aioo?aiieie
noaoe/aneeie.
Aiaoiea noaoe/aneea ia?aiaiiua ii?aaeaeaiu a inoaeueiie
/anoe oiai enoiaeiiai oaeea, a eioi?ii iie iienaiu, ii ia a
eaeii-eeai ae?oaii oaeea. Oaeei ia?acii, iie aeatho niinia
ne?uaaoue eiaia, iiaeiaiua BUF e BUFP a eiiaeiaoeee
GETCH-UNGETCH, eioi?ua a neeo eo niaianoiiai eniieueciaaiey
aeieaeiu auoue aiaoieie, ii ana aea ia aeinooiiuie aeey iieueciaa-
oaeae GETCH e UNGETCH , /oiau eneeth/aeanue aiciiaeiinoue eiio-
eeeoa. Anee yoe aeaa ooieoeee e aeaa ia?aiaiiua iauaaeaieoue a
iaeiii oaeea neaaeothuei ia?acii
STATIC CHAR BUF[BUFSIZE]; /* BUFFER FOR UNGETCH */
STATIC INT BUFP=0; /*NEXT FREE POSITION IN BUF */
GETCH() …
UNGETCH() …
oi ieeaeay ae?oaay ooieoeey ia aoaeao a ninoiyiee ia?aoeoueny e
BUF e BUFP; oaeoe/anee, iie ia aoaeoo anooiaoue a eiioeeeo n
oaeeie aea eiaiaie ec ae?oaeo oaeeia oie aea naiie i?ia?aiiu.
Noaoe/aneay iaiyoue, eae aioo?aiiyy, oae e aiaoiyy, nia-
oeeoeoee?oaony neiaii STATIC , noiyuei ia?aae iau/iui iienaie-
ai. Ia?aiaiiay yaeyaony aiaoiae, anee iia iienaia aia eaeie
au oi ie auei ooieoeee, e aioo?aiiae, anee iia iienaia aioo?e
iaeioi?ie ooieoeee.
· 90 –
Ii?iaeueii ooieoeee yaeythony aiaoieie iauaeoaie; eo eiaia
ecaanoiu aeiaaeueii. aiciiaeii, iaeiaei, iauyaeoue ooieoeeth eae
STATIC ; oiaaea aa eiy noaiiaeony iaecaanoiui aia oaeea, a
eioi?ii iii iienaii.
A ycuea “C” “STATIC” io?aaeaao ia oieueei iinoiyinoai, ii
e noaiaiue oiai, /oi iiaeii iacaaoue “i?eaaoiinoueth”. Aioo?aiiea
noaoe/aneea iauaeou ii?aaeaeaiu oieueei aioo?e iaeiie ooieoeee;
aiaoiea noaoe/aneea iauaeou /ia?aiaiiua eee ooieoeee/ ii?aaea-
eaiu oieueei aioo?e oiai enoiaeiiai oaeea, aaea iie iiyaeythony,
e eo eiaia ia anooiatho a eiioeeeo n oaeeie aea eiaiaie ia?a-
iaiiuo e ooieoeee ec ae?oaeo oaeeia.
Aiaoiea noaoe/aneea ia?aiaiiua e ooieoeee i?aaeinoaaeytho
niinia i?aaieciauaaoue aeaiiua e ?aaioathuea n ieie aioo?aiiea
i?ioeaaeo?u oaeei ia?acii, /oi ae?oaea i?ioeaaeo?u e aeaiiua ia
iiaoo i?eeoe n ieie a eiioeeeo aeaaea ii iaaei?acoiaieth. Iai?e-
ia?, ooieoeee GETCH e UNGETCH ia?acotho “iiaeoeue” aeey aaiaea e
aica?auaiey neiaieia; BUF e BUFP aeieaeiu auoue noaoe/aneeie,
/oiau iie ia auee aeinooiiu ecaia. Oi/ii oae aea ooieoeee PUSH,
POP e CLEAR oi?ie?otho iiaeoeue ia?aaioee noaea; VAR e SP oiaea
aeieaeiu auoue aiaoieie noaoe/aneeie.
4.7. ?aaeno?iaua ia?aiaiiua.
*aoaa?oue e iineaaeiee eeann iaiyoe iacuaaaony ?aaeno?i-
aui. Iienaiea REGISTER oeacuaaao eiiieeyoi?o, /oi aeaiiay ia-
?aiaiiay aoaeao /anoi eniieueciaaoueny. Eiaaea yoi aiciiaeii, ia-
?aiaiiua, iienaiiua eae REGISTER, ?aniieaaathony a iaoeiiuo
?aaeno?ao, /oi iiaeao i?eaanoe e iaiueoei ii ?acia?o e aieaa
auno?ui i?ia?aiiai. Iienaiea REGISTER auaeyaeeo eae
REGISTER INT X;
REGISTER CHAR C;
e o.ae.; /anoue INT iiaeao auoue iiouaia. Iienaiea REGISTER iiae-
ii eniieueciaaoue oieueei aeey aaoiiaoe/aneeo ia?aiaiiuo e oi?-
iaeueiuo ia?aiao?ia ooieoeee. A yoii iineaaeiai neo/aa iienaiey
auaeyaeyo neaaeothuei ia?acii:
F(C,N)
REGISTER INT C,N;
REGISTER INT I;
…
· 91 –
Ia i?aeoeea aicieeatho iaeioi?ua ia?aie/aiey ia ?aaeno?i-
aua ia?aiaiiua, io?aaeathuea ?aaeueiua aiciiaeiinoe eiathueony
aiia?aoiuo n?aaenoa. A ?aaeno?u iiaeii iiianoeoue oieueei ian-
eieueei ia?aiaiiuo a eaaeaeie ooieoeee, i?e/ai oieueei ii?aaeaeai-
iuo oeiia. A neo/aa i?aauoaiey aiciiaeiiai /enea eee eniieue-
ciaaiey ia?ac?aoaiiuo oeiia neiai REGISTER eaii?e?oaony.
E?iia oiai iaaiciiaeii ecaea/ue aae?an ?aaeno?iaie ia?aiaiiie
(yoio aii?in ianoaeaeaaony a aeaaa 5). Yoe niaoeeoe/aneea ia?a-
ie/aiey aa?uee?othony io iaoeiu e iaoeia. Oae, iai?eia?, ia
PDP-11 yooaeoeaiuie yaeythony oieueei ia?aua o?e iienaiey
REGISTER a ooieoeee, a a ea/anoaa oeiia aeiioneathony INT, CHAR
eee oeacaoaeue.
4.8. Aei/iay no?oeoo?a.
sscue “C” ia yaeyaony ycueii n aei/iie no?oeoo?ie a niun-
ea PL/1 eee aeaiea; a iai iaeuecy iienuaaoue iaeie ooieoeee
aioo?e ae?oaeo.
Ia?aiaiiua aea, n ae?oaie noi?iiu, iiaoo ii?aaeaeyoueny ii
iaoiaeo aei/iiai no?oeoo?e?iaaiey. Iienaiey ia?aiaiiuo (aeeth-
/ay eieoeeaeecaoeeth) iiaoo neaaeiaaoue ca eaaie oeao?iie neia-
eie,ioe?uaathuae ethaie iia?aoi?, a ia oieueei ca oie, n eioi-
?ie ia/eiaaony oaei ooieoeee. Ia?aiaiiua, iienaiiua oaeei ia-
?acii, auoaniytho ethaua ia?aiaiiua ec aiaoieo aeieia, eiathuea
oaeea aea eiaia, e inoathony ii?aaeaeaiiuie aei niioaaonoaothuae
i?aaie oeao?iie neiaee. Iai?eia? a
IF (N > 0)
INT I; /* DECLARE A NEW I */
FOR (I = 0; I 0); /* DISCARD IT */
WHILE (–I >= 0)
PUTCHAR(S[I]);
Aeueoa?iaoeaie yoiio niiniao yaeyaony ?aeo?neaiia ?aoa-
iea, eiaaea i?e eaaeaeii auciaa ooieoeey PRINTD nia/aea niiaa
ia?auaaony e naaa, /oiau neiie?iaaoue eeaee?othuea oeeo?u, a ca-
oai ia/aoaao iineaaeithth oeeo?o.
PRINTD(N) /* PRINT N IN DECIMAL (RECURSIVE)*/
INT N;
(
INT I;
IF (N 0) THEN
BEGIN
A = 1;
B = 2
END
Eiaaony oaeaea aiciiaeiinoue ii?aaeaeaiey iae?ina n a?aoiai-
oaie, oae /oi caiaiythuee oaeno aoaeao caaenaoue io aeaea ia?a-
uaiey e iae?ino. Ii?aaeaeei, iai?eia?, iae?in n eiaiai MAX
neaaeothuei ia?acii:
#DEFINE MAX(A, B) ((A) > (B) ? (A) : (B))
eiaaea no?iea
X = MAX(P+Q, R+S);
aoaeao caiaiaia no?ieie
X = ((P+Q) > (R+S) ? (P+Q) : (R+S));
Oaeay aiciiaeiinoue iaania/eaaao “ooieoeeth iaeneioia”, eioi?ay
?anoe?yaony a iineaaeiaaoaeueiue eiae, a ia a ia?auaiea e ooie-
oeee. I?e i?aaeeueiii ia?auaiee n a?aoiaioaie oaeie iae?in ao-
aeao ?aaioaoue n ethauie oeiaie aeaiiuo; caeanue iao iaiaoiaeeiinoe
a ?acee/iuo aeaeao MAX aeey aeaiiuo ?aciuo oeiia, eae yoi auei
au n ooieoeeyie.
· 97 –
Eiia/ii, anee au ouaoaeueii ?anniio?eoa i?eaaaeaiiia auoa
?anoe?aiea MAX, au caiaoeoa ii?aaeaeaiiua iaaeinoaoee. Au?aaea-
iey au/eneythony aeaaaeaeu; yoi ieioi, anee iie aeaeoo ca niaie
iiai/iua yooaeou, aucaaiiua, iai?eia?, ia?auaieyie e ooieoee-
yi eee eniieueciaaieai iia?aoeee oaaee/aiey. Ioaeii iicaaioeoue-
ny i i?aaeeueiii eniieueciaaiee e?oaeuo neiaie, /oiau aa?aioe-
?iaaoue nio?aiaiea o?aaoaiiai ii?yaeea au/eneaiee. (?anniio?e-
oa iae?in
#DEFINE SQUARE(X) X * X
i?e ia?auaiee e iae, eae SQUARE(Z+1)). Caeanue aicieeatho aeaaea
iaeioi?ua /enoi eaene/aneea i?iaeaiu: iaaeaeo eiaiai iae?i e
eaaie e?oaeie neiaeie, ioe?uaathuae nienie aa a?aoiaioia, ia
aeieaeii auoue ieeaeeo i?iaaeia.
Oai ia iaiaa aiia?ao iae?inia yaeyaony aanueia oeaiiui.
Iaeei i?aeoe/aneee i?eia? aeaao iienuaaaiay a aeaaa 7 noaiaea?-
oiay aeaeeioaea aaiaea-auaiaea, a eioi?ie GETCHAR e PUTCHAR
ii?aaeaeaiu eae iae?inu (i/aaeaeii PUTCHAR aeieaeia eiaoue a?ao-
iaio), /oi iicaieyao ecaaaeaoue cao?ao ia ia?auaiea e ooieoeee
i?e ia?aaioea eaaeaeiai neiaiea.
Ae?oaea aiciiaeiinoe iae?ii?ioeanni?a iienaiu a i?eeiaeaiee
A.
Oi?aaeiaiea 4-9.
Ii?aaeaeeoa iae?in SWAP(X, Y), eioi?ue iaiaieaaao cia/a-
ieyie aeaa naieo a?aoiaioa oeia INT. (A yoii neo/aa iiiiaeao
aei/iay no?oeoo?a).
· 98 –
5.Oeacaoaee e ianneau
Oeacaoaeue – yoi ia?aiaiiay, niaea?aeauay aae?an ae?oaie ia-
?aiaiiie. oeacaoaee i/aiue oe?iei eniieuecothony a ycuea “C”.
Yoi i?ienoiaeeo io/anoe iioiio, /oi eiiaaea iie aeatho aaeeino-
aaiioth aiciiaeiinoue au?aceoue ioaeiia aeaenoaea, a io/anoe iioi-
io, /oi iie iau/ii aaaeoo e aieaa eiiiaeoiui e yooaeoeaiui
i?ia?aiiai, /ai oa, eioi?ua iiaoo auoue iieo/aiu ae?oaeie nii-
niaaie.
Oeacaoaee iau/ii niaoeaatho a iaeio eo/o n iia?aoi?aie
GOTO, oa?aeoa?ecoy eo eae /oaeaniue niinia iaienaiey i?ia-
?aii, eioi?ua iaaiciiaeii iiiyoue. Yoi aaconeiaii ni?Aaaaeeeai,
anee oeacaoaee eniieuecothony aaccaaioii; i/aiue i?inoi aaanoe
oeacaoaee, eioi?ua oeacuaatho ia /oi-oi niaa?oaiii iaiaeeaeai-
iia. Iaeiaei, i?e ii?aaeaeaiiie aeenoeeieeia, eniieueciaaiea oea-
caoaeae iiiiaaao aeinoe/ue yniinoe e i?inoiou. Eiaiii yoio an-
iaeo iu iiiuoaainy caeanue i?ieeethno?e?iaaoue.
5.1. Oeacaoaee e aae?ana
Oae eae oeacaoaeue niaea?aeeo aae?an iauaeoa, yoi aeaao aic-
iiaeiinoue “einaaiiiai” aeinooia e yoiio iauaeoo /a?ac oeaca-
oaeue. I?aaeiieiaeei, /oi o – ia?aiaiiay, iai?eia?, oeia INT, a
?o – oeacaoaeue, nicaeaiiue iaeei aua ia oeacaiiui niiniaii.
Oia?iay iia?aoeey & auaeaao aae?an iauaeoa, oae /oi iia?aoi?
?o = &o;
i?enaaeaaao aae?an o ia?aiaiiie ?o; aiai?yo, /oi ?o “oea-
cuaaao” ia o. Iia?aoeey & i?eiaieia oieueei e ia?aiaiiui e
yeaiaioai ianneaa, eiino?oeoeee aeaea &(o-1) e &3 yaeythony ia-
caeiiiuie. Iaeuecy oaeaea iieo/eoue aae?an ?aaeno?iaie ia?aiai-
iie.
Oia?iay iia?aoeey * ?anniao?eaaao naie iia?aiae eae aae?an
eiia/iie oeaee e ia?auaaony ii yoiio aae?ano, /oiau ecaea/ue
niaea?aeeiia. Neaaeiaaoaeueii, anee Y oiaea eiaao oei INT, oi
Y = *?o;
i?enaaeaaao Y niaea?aeeiia oiai, ia /oi oeacuaaao ?o. Oae iin-
eaaeiaaoaeueiinoue
?o = &o;
Y = *?o;
i?enaaeaaao Y oi aea naiia cia/aiea, /oi e iia?aoi?
Y = X;
Ia?aiaiiua, o/anoaothuea ai anai yoii iaiaoiaeeii iienaoue:
INT X, Y;
INT *PX;
· 99 –
n iienaieai aeey X e Y iu oaea iaiaeiiie?aoii ano?a/aeenue.
Iienaiea oeacaoaey
INT *PX;
yaeyaony iiaui e aeieaeii ?anniao?eaaoueny eae iiaiiie/aneia;
iii aiai?eo, /oi eiiaeiaoeey *PX eiaao oei INT. Yoi icia/aao,
/oi anee PX iiyaeyaony a eiioaenoa *PX, oi yoi yeaeaaeaioii
ia?aiaiiie oeia INT. Oaeoe/anee neioaenen iienaiey ia?aiai-
iie eieoe?oao neioaenen au?aaeaiee, a eioi?uo yoa ia?aiaiiay
iiaeao iiyaeyoueny. Yoi caia/aiea iieacii ai anao neo/ayo,
naycaiiuo ni neiaeiuie iienaieyie. Iai?eia?,
DOUBLE ATOF(), *DP;
aiai?eo, /oi ATOF() e *DP eiatho a au?aaeaieyo cia/aiey oeia
DOUBLE.
Au aeieaeiu oaeaea caiaoeoue, /oi ec yoiai iienaiey neaaeo-
ao, /oi oeacaoaeue iiaeao oeacuaaoue oieueei ia ii?aaeaeaiiue aeae
iauaeoia.
Oeacaoaee iiaoo aoiaeeoue a au?aaeaiey. Iai?eia?, anee PX
oeacuaaao ia oeaeia X, oi *PX iiaeao iiyaeyoueny a ethaii eii-
oaenoa, aaea iiaeao ano?aoeoueny X. Oae iia?aoi?
Y = *PX + 1
i?enaaeaaao Y cia/aiea, ia 1 aieueoaa cia/aiey X;
PRINTF(“%DN”, *PX)
ia/aoaao oaeouaa cia/aiea X;
D = SQRT((DOUBLE) *PX)
iieo/aao a D eaaae?aoiue ei?aiue ec X, i?e/ai aei ia?aaea/e ooi-
eoeee SQRT cia/aiea X i?aia?acoaony e oeio DOUBLE. (Niio?e
aeaao 2).
A au?aaeaieyo aeaea
Y = *PX + 1
oia?iua iia?aoeee * e & naycaiu ni naiei iia?aiaeii aieaa
e?aiei, /ai a?eoiaoe/aneea iia?aoeee, oae /oi oaeia au?aaeaiea
aa?ao oi cia/aiea, ia eioi?ia oeacuaaao PX, i?eaaaeyao 1 e
i?enaaeaaao ?acoeueoao ia?aiaiiie Y. Iu anei?a aa?iainy e oi-
io, /oi iiaeao icia/aoue au?aaeaiea
Y = *(PX + 1)
Nnueee ia oeacaoaee iiaoo iiyaeyoueny e a eaaie /anoe
i?enaaeaaiee. Anee PX oeacuaaao ia X, oi
*PX = 0
· 100 –
iieaaaao X ?aaiui ioeth, a
*PX += 1
oaaee/eaaao aai ia aaeeieoeo, eae e au?aaeaiea
(*PX)++
E?oaeua neiaee a iineaaeiai i?eia?a iaiaoiaeeiu; anee eo iion-
oeoue, oi iineieueeo oia?iua iia?aoeee, iiaeiaiua * e ++, auiie-
iythony ni?aaa iaeaai, yoi au?aaeaiea oaaee/eo PX, a ia oo ia-
?aiaiioth, ia eioi?oth ii oeacuaaao.
E iaeiiaoe, oae eae oeacaoaee yaeythony ia?aiaiiuie, oi n
ieie iiaeii ia?auaoueny, eae e n inoaeueiuie ia?aiaiiuie. Anee
PY – ae?oaie oeacaoaeue ia ia?aiaiioth oeia INT, oi
PY = PX
eiie?oao niaea?aeeiia PX a PY, a ?acoeueoaoa /aai PY oeacuaaao
ia oi aea, /oi e PX.
5.2. Oeacaoaee e a?aoiaiou ooieoeee
Oae eae a “n” ia?aaea/a a?aoiaioia ooieoeeyi inouanoaeyao-
ny “ii cia/aieth”, aucaaiiay i?ioeaaeo?a ia eiaao iaiin?aaeno-
aaiiie aiciiaeiinoe eciaieoue ia?aiaiioth ec aucuaathuae i?ia-
?aiiu. *oi aea aeaeaoue, anee aai aeaenoaeoaeueii iaaei eciaieoue
a?aoiaio? iai?eia?, i?ia?aiia ni?oe?iaee caoioaea au iiia-
iyoue aeaa ia?ooathueo ii?yaeie yeaiaioa n iiiiuueth ooieoeee n
eiaiai SWAP. Aeey yoiai iaaeinoaoi/ii iaienaoue
SWAP(A, B);
ii?aaeaeea ooieoeeth SWAP i?e yoii neaaeothuei ia?acii:
SWAP(X, Y) /* WRONG */
INT X, Y;
INT TEMP;
TEMP = X;
X = Y;
Y = TEMP;
ec-ca auciaa ii cia/aieth SWAP ia iiaeao aicaeaenoaiaaoue ia
aaoiaiou A e B a aucuaathuae ooieoeee.
E n/anoueth, ana aea eiaaony aiciiaeiinoue iieo/eoue aeaeaaiue
yooaeo. Aucuaathuay i?ia?aiia ia?aaeaao oeacaoaee iiaeeaaeaueo
eciaiaieth cia/aiee:
SWAP(&A, &B);
· 101 –
oae eae iia?aoeey & auaeaao aae?an ia?aiaiiie, oi &A yaeyaony
oeacaoaeai ia A. A naiie SWAP a?aoiaiou iienuaathony eae oea-
caoaee e aeinooi e oaeoe/aneei iia?aiaeai inouanoaeyaony /a?ac
ieo.
SWAP(PX, PY) /* INTERCHANGE *PX AND *PY */
INT *PX, *PY;
INT TEMP;
TEMP = *PX;
*PX = *PY;
*PY = TEMP;
Oeacaoaee a ea/anoaa a?aoiaioia iau/ii eniieuecothony a
ooieoeeyo, eioi?ua aeieaeiu aica?auaoue aieaa iaeiiai cia/aiey.
(Iiaeii neacaoue, /oi SWAP aOca?auaao aeaa cia/aiey, iiaua cia-
/aiey aa a?aoiaioia). A ea/anoaa i?eia?a ?anniio?ei ooieoeeth
GETINT, eioi?ay inouanoaeyao i?aia?aciaaiea iinooiathueo a
naiaieiii oi?iaoa aeaiiuo, ?acaeaeyy iioie neiaieia ia oeaeua
cia/aiey, ii iaeiiio oeaeiio ca iaeii ia?auaiea. Ooieoeey GETINT
aeieaeia aica?auaoue eeai iaeaeaiiia cia/aiea, eeai i?eciae eii-
oea oaeea, anee aoiaeiua aeaiiua iieiinoueth en/a?iaiu. Yoe cia-
/aiey aeieaeiu aica?auaoueny eae ioaeaeueiua iauaeou, eaeia au
cia/aiea ie eniieueciaaeinue aeey EOF, aeaaea anee yoi cia/aiea
aaiaeeiiai oeaeiai.
Iaeii ec ?aoaiee, iniiauaathuaany ia iienuaaaiie a aeaaa 7
ooieoeee aaiaea SCANF, ninoieo a oii, /oiau i?e auoiaea ia ei-
iaoe oaeea GETINT aica?auaea EOF a ea/anoaa cia/aiey ooieoeee;
ethaia ae?oaia aica?auaiiia cia/aiea aiai?eo i iaoiaeaeaiee ii?-
iaeueiiai oeaeiai. *eneaiiia aea cia/aiea iaeaeaiiiai oeaeiai
aica?auaaony /a?ac a?aoiaio, eioi?ue aeieaeai auoue oeacaoaeai
oeaeiai. Yoa i?aaiecaoeey ?acaeaeyao noaoon eiioea oaeea e /en-
eaiiua cia/aiey.
Neaaeothuee oeeee caiieiyao iannea oeaeuie n iiiiuueth ia?aua-
iee e ooieoeee GETINT:
INT N, V, ARRAY[SIZE];
FOR (N = 0; N = ‘0’ && C = ALLOCBUF && P = ALLOCBUF && P = e o.ae., ?aaioatho
iaaeeaaeauei ia?acii. Iai?eia?,
P 0 IF S>T */
CHAR S[], T[];
INT I;
I = 0;
WHILE (S[I] == T[I])
IF (S[I++] == ‘0’)
RETURN(0);
RETURN(S[I]-T[I]);
Aio aa?ney STRCMP n oeacaoaeyie:
STRCMP(S, T) /* RETURN 0 IF S>T */ CHAR *S, *T;
FOR ( ; *S == *T; S++, T++)
IF (*S == ‘0’)
RETURN(0);
RETURN(*S-*T);
oae eae ++ e—iiaoo auoue eae iinooeeniuie, oae e
i?aoeeniuie iia?aoeeyie, ano?a/athony ae?oaea eiiaeiaoeee * e
++ e –, oioy e iaiaa /anoi.
Iai?eia?
*++P
· 111 –
oaaee/eaaao P aei ecaea/aiey neiaiea, ia eioi?ue oeacuaaao
P, a
*–P
nia/aea oiaiueoaao P.
Oi?aaeiaiea 5-2.
Iaieoeoa aa?eaio n oeacaoaeyie ooieoeee STRCAT ec aeaau
2: STRCAT(S, T) eiie?oao no?ieo T a eiiaoe S.
Oi?aaeiaiea 5-3.
Iaieoeoa iae?in aeey STRCPY.
Oi?aaeiaiea 5-4.
Ia?aieoeoa iiaeoiaeyuea i?ia?aiiu ec i?aaeuaeoueo aeaa e oi-
?aaeiaiee, eniieuecoy oeacaoaee aianoi eiaeaenaoeee ianneaia.
Oi?ioea aiciiaeiinoe aeey yoiai i?aaeinoaaeytho ooieoeee GETLINE
/aeaau 1 e 4/, ATOI, ITOA e eo aa?eaiou /aeaau 2, 3 e 4/,
REVERSE /aeaaa 3/, INDEX e GETOP /aeaaa 4/.
5.6. Oeacaoaee – ia oeaeua.
Au, aiciiaeii, ia?aoeee aieiaiea a i?aaeuaeoueo “n”-i?ia-
?aiiao ia aeiaieueii iai?eioaeaeaiiia ioiioaiea e eiie?iaaieth
oeacaoaeae. A iauai yoi aa?ii, /oi ia aieueoeinoaa iaoei oea-
caoaeue iiaeii i?enaieoue oeaeiio e ia?aaeaoue aai ia?aoii, ia ec-
iaiea aai; i?e yoii ia i?ienoiaeeo ieeaeiai ianooaae?iaaiey
eee i?aia?aciaaiey e ie iaeei aeo ia oa?yaony. e niaeaeaieth,
yoi aaaeao e aieueiiio ia?auaieth n ooieoeeyie, aica?auathueie
oeacaoaee, eioi?ua caoai i?inoi ia?aaeathony ae?oaei ooieoeeyi,
· iaiaoiaeeiua iienaiey oeacaoaeae /anoi iioneathony. ?anniio-
?ei, iai?eia?, ooieoeeth STRSAVE(S), eioi?ay eiie?oao no?ieo S
a iaeioi?ia ianoi aeey o?aiaiey, auaeaeyaiia iin?aaenoaii ia?a-
uaiey e ooieoeee ALLOC, e aica?auaao oeacaoaeue ia yoi ianoi.
I?aaeeueii iia aeieaeia auoue caienaia oae:
CHAR STRSAVE(S) / SAVE STRING S SOMEWHERE */ CHAR *S;
CHAR *P, *ALLOC();
IF ((P = ALLOC(STRLEN(S)+1)) != NULL)
STRCPY(P, S);
RETURN(P);
ia i?aeoeea nouanoaoao neeueiia no?aieaiea iioneaoue iienaiey:
· 112 –
STRSAVE(S) / SAVE STRING S SOMEWHERE */
CHAR *P;
IF ((P = ALLOC(STRLEN(S)+1)) != NULL)
STRCPY(P, S);
RETURN(P);
Yoa i?ia?aiia aoaeao i?aaeeueii ?aaioaoue ia iiiaeo iaoe-
iao, iioiio /oi ii oiie/aieth ooieoeee e a?aoiaiou eiatho oei
INT, a oeacaoaeue e oeaeia iau/ii iiaeii aaciianii ia?anueaoue
ooaea e ia?aoii. Iaeiaei oaeie noeeue i?ia?aiie?iaaiey a naiai
nouanoaa yaeyaony ?eneiaaiiui, iineieueeo caaeneo io aeaoaeae
?aaeecaoeee e a?oeoaeoo?u iaoeiu e iiaeao i?eaanoe e iai?a-
aeeueiui ?acoeueoaoai ia eiie?aoiii eniieuecoaiii aaie eiiieey-
oi?a. ?acoiiaa anthaeo eniieueciaaoue iieiua iienaiey. (Ioeaaei/-
iay i?ia?aiia LINT i?aaeoi?aaeeo i oaeeo eiino?oeoeeyo, anee
iie ii iainoi?iaeiinoe ana aea iiyayony).
5.7. Iiiaiia?iua ianneau.
A ycuea “C” i?aaeoniio?aiu i?yiioaieueiua iiiaiia?iua ian-
neau, oioy ia i?aeoeea nouanoaoao oaiaeaioeey e eo cia/eoaeueii
aieaa ?aaeeiio eniieueciaaieth ii n?aaiaieth n ianneaaie oeaca-
oaeae. A yoii ?acaeaea iu ?anniio?ei iaeioi?ua eo naienoaa.
?anniio?ei caaea/o i?aia?aciaaiey aeiy ianyoea a aeaiue aiaea
e iaiai?io. Iai?eia?, 1-ia ia?oa yaeyaony 60-i aeiai iaaeni-
einiiai aiaea e 61-i aeiai aenieiniiai aiaea. Aeaaaeoa aaaaeai
aeaa ooieoeee aeey auiieiaiey yoeo i?aia?aciaaiee: DAY_OF_YEAR
i?aia?acoao ianyoe e aeaiue a aeaiue aiaea, a MONTH_DAY i?aia?aco-
ao aeaiue aiaea a ianyoe e aeaiue. Oae eae yoa iineaaeiyy ooieoeey
aica?auaao aeaa cia/aiey, oi a?aoiaiou ianyoea e aeiy aeieaeiu
auoue oeacaoaeyie:
MONTH_DAY(1977, 60, &M, &D)
Iieaaaao M ?aaiui 3 e D ?aaiui 1 (1-ia ia?oa).
Iaa yoe ooieoeee ioaeaeathony a iaeiie e oie aea eioi?iaoeeii-
iie oaaeeoea, oeacuaathuae /enei aeiae a eaaeaeii ianyoea. Oae eae
/enei aeiae a ianyoea a aenieiniii e a iaaenieiniii aiaeo ioee-
/aaony, oi i?iua i?aaenoaaeoue eo a aeaea aeaoo no?ie aeaoia?iiai
ianneaa, /ai iuoaoueny i?ineaaeeaaoue ai a?aiy au/eneaiee, /oi
eiaiii i?ienoiaeeo a oaa?aea. Aio yoio iannea e auiieiythuea
yoe i?aia?aciaaiey ooieoeee:
STATIC INT DAY_TAB[2][13] =
(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
(0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
;
· 113 –
DAY_OF_YEAR(YEAR, MONTH, DAY) /* SET DAY OF YEAR */
INT YEAR, MONTH, DAY; /* FROM MONTH & DAY */
INT I, LEAP;
LEAP = YEAR%4 == 0 && YEAR%100 != 0 !! YEAR%400 == 0;
FOR (I = 1; I DAY_TAB[LEAP][I]; I++)
YEARDAY -= DAY_TAB[LEAP][I];
*PMONTH = I;
*PDAY = YEARDAY;
Iannea DAY_TAB aeieaeai auoue aiaoiei eae aeey DAY_OF_YEAR, oae
e aeey MONTH_DAY, iineieueeo ii eniieuecoaony iaaeie yoeie ooi-
eoeeyie.
Iannea DAY_TAB yaeyaony ia?aui aeaoia?iui ianneaii, n ei-
oi?ui iu eiaai aeaei. Ii ii?aaeaeaieth a “C” aeaoia?iue iannea
ii nouanoao yaeyaony iaeiiia?iui ianneaii, eaaeaeue yeaiaio ei-
oi?iai yaeyaony ianneaii. Iiyoiio eiaeaenu caienuaathony eae
DAY_TAB[I][J]
a ia
DAY_TAB [I, J]
eae a aieueoeinoaa ycueia. A inoaeueiii n aeaoia?iuie ianneaaie
iiaeii a iniiaiii ia?auaoueny oaeei aea ia?acii, eae a ae?oaeo
ycueao. Yeaiaiou o?aiyony ii no?ieai, o.a. I?e ia?auaiee e
yeaiaioai a ii?yaeea eo ?aciauaiey a iaiyoe auno?aa anaai ec-
iaiyaony naiue i?aaue eiaeaen.
Iannea eieoeeaeece?oaony n iiiiuueth nienea ia/aeueiuo cia-
/aiee, caeeth/aiiuo a oeao?iua neiaee; eaaeaeay no?iea aeaoia?-
iiai ianneaa eieoeeaeece?oaony niioaaonoaothuei iiaenieneii. Iu
iiianoeee a ia/aei ianneaa DAY_TAB noieaaoe ec ioeae aeey oi-
ai, /oiau iiia?a ianyoeaa eciaiyeenue anoanoaaiiui ia?acii io
1 aei 12, a ia io 0 aei 11. Oae eae ca yeiiiieth iaiyoe o ian iiea ia
iaa?aaeaeatho, oaeie niinia i?iua, /ai iiaeaiiea eiaeae-nia.
Anee aeaoia?iue iannea ia?aaeaaony ooieoeee, oi iienaiea
niioaaonoaothuaai a?aoiaioa ooieoeee aeieaeii niaea?aeaoue eiee/an-
oai noieaoeia; eiee/anoai no?ie ianouanoaaiii, iineieueeo, eae
e i?aaeaea, oaeoe/anee ia?aaeaaony oeacaoaeue. A iaoai eiie?ao-
iii neo/aa yoi oeacaoaeue iauaeoia, yaeythueony ianneaaie ec
· 114 –
13 /enae oeia INT. Oaeei ia?acii, anee au o?aaiaaeinue ia?a-
aeaoue iannea DAY_TAB ooieoeee F, oi iienaiea a F eiaei au aeae:
F(DAY_TAB)
INT DAY_TAB[2][13];
…
Oae eae eiee/anoai no?ie yaeyaony ianouanoaaiiui, oi iiena-
iea a?aoiaioa a F iiaei au auoue oaeei:
INT DAY_TAB[][13];
eee oaeei
INT (*DAY_TAB)[13];
a eioi?i aiai?eony, /oi a?aoiaio yaeyaony oeacaoaeai ianneaa
ec 13 oeaeuo. E?oaeua neiaee caeanue iaiaoiaeeiu, iioiio /oi
eaaae?aoiua neiaee [] eiatho aieaa aunieee o?iaaiue noa?oeino-
aa, /ai *; eae iu oaeaeei a neaaeothuai ?acaeaea, aac e?oaeuo
neiaie
INT *DAY_TAB[13];
yaeyaony iienaieai ianneaa ec 13 oeacaoaeae ia oeaeua.
5.8. Ianneau oeacaoaeae; oeacaoaee oeacaoaeae
Oae eae oeacaoaee naie yaeythony ia?aiaiiuie, oi au aiie-
ia iiaee au iaeeaeaoue eniieueciaaiey ianneaa oeacaoaeae. Yoi
aeaenoaeoaeueii oae. Iu i?ieeethno?e?oai yoi iaienaieai i?ia-
?aiiu ni?oe?iaee a aeoaaeoiii ii?yaeea iaai?a oaenoiauo
no?ie, i?aaeaeueii oi?iuaiiiai aa?eaioa ooeeeou SORT iia?aoee-
iiiie nenoai UNIX.
A aeaaa 3 iu i?eaaee ooieoeeth ni?oe?iaee ii oaeeo, eioi-
?ay oii?yaei/eaaea iannea oeaeuo. Yoio aea aeai?eoi aoaeao ?aai-
oaoue e caeanue, oioy oaia?ue iu aoaeai eiaoue aeaei ni no?i/eaie
oaenoa ?acee/iie aeeeiu, eioi?ua, a ioee/ea io oeaeuo, iaeuecy
n?aaieaaoue eee ia?aiauaoue n iiiiuueth iaeiie iia?aoeee. Iu ioae-
aeaainy a oaeii i?aaenoaaeaiee aeaiiuo, eioi?ia au iicaieyei
oaeiaii e yooaeoeaii ia?aaaouaaoue no?iee oaenoa ia?aiaiiie
aeeeiu.
Caeanue e aicieeatho ianneau oeacaoaeae. Anee iiaeeaaeauea
ni?oe?iaea n?iee o?aiyony iaeia ca ae?oaie a aeeeiiii neiaieue-
iii ianneaa (oi?aaeyaiii, iai?eia?, ooieoeeae ALLOC), oi e
eaaeaeie no?iea iiaeii ia?aoeoueny n iiiiuueth oeacaoaey ia aa
ia?aue neiaie. Naie oeacaoaee iiaeii o?aieoue a ianneaa. aeaa
no?iee iiaeii n?aaieoue, ia?aaeaa eo oeacaoaee ooieoeee STRCMP.
· 115 –
Anee aeaa ?aniieiaeaiiua a iai?aaeeueiii ii?yaeea no?iee aeieaeiu
auoue ia?anoaaeaiu, oi oaeoe/anee ia?anoaaeythony oeacaoaee a
ianneaa oeacaoaeae, a ia naie oaenou no?ie. Yoei eneeth/athony
n?aco aeaa naycaiiua i?iaeaiu: neiaeiiai oi?aaeaiey iaiyoueth e
aieueoeo aeiiieieoaeueiuo cao?ao ia oaeoe/aneoth ia?anoaiiaeo
no?ie.
I?ioeann ni?oe?iaee aeeth/aao o?e oaaa:
/oaiea anao no?ie aaiaea
eo ni?oe?iaea
auaiae eo a i?aaeeueiii ii?yaeea
Eae iau/ii, eo/oa ?acaeaeeoue i?ia?aiio ia ianeieueei ooieoeee a
niioaaonoaee n anoanoaaiiui aeaeaieai caaea/e e auaeaeeoue aaaeo-
uoth ooieoeeth, oi?aaeythuoth ?aaioie anae i?ia?aiiu.
Aeaaaeoa ioeiaeei ia iaeioi?ia a?aiy ?anniio?aiea oaaa ni?oe-
?iaee e nin?aaeioi/einy ia no?oeoo?a aeaiiuo e aaiaea-auaiaea.
Ooieoeey, inouanoaeythuay aaiae, aeieaeia ecaea/ue neiaieu eaaeaeie
no?iee, caiiiieoue eo e iino?ieoue iannea oeacaoaeae no?ie.
Iia aeieaeia oaeaea iiaen/eoaoue /enei no?ie ai aaiaea, oae eae
yoa eioi?iaoeey iaiaoiaeeia i?e ni?oe?iaea e auaiaea. oae eae
ooieoeey aaiaea a ninoiyiee ni?aaeoueny oieueei n eiia/iui /en-
eii aaiaeeiuo no?ie, a neo/aa neeoeii aieueoiai eo /enea iia
iiaeao aica?auaoue iaeioi?ia /enei, ioee/iia io aiciiaeiiai
/enea no?ie, iai?eia? -1. Ooieoeey inouanoaeythuay auaiae, aeie-
aeia ia/aoaoue no?iee a oii ii?yaeea, a eaeii iie iiyaeythony a
ianneaa oeacaoaeae.
#DEFINE NULL 0
#DEFINE LINES 100 /* MAX LINES TO BE SORTED */
MAIN() /* SORT INPUT LINES */
(
CHAR *LINEPTR[LINES]; /*POINTERS TO TEXT LINES */
INT NLINES; /* NUMBER OF INPUT LINES READ */
IF ((NLINES = READLINES(LINEPTR, LINES)) >= 0) ( SORT(LINEPTR, NLINES);
WRITELINES(LINEPTR, NLINES);
)
ELSE
PRINTF(“INPUT TOO BIG TO SORTN”);
)
#DEFINE MAXLEN 1000
· 116 –
READLINES(LINEPTR, MAXLINES) /* READ INPUT LINES */
CHAR LINEPTR[]; / FOR SORTING */
INT MAXLINES;
(
INT LEN, NLINES;
CHAR *P, *ALLOC(), LINE[MAXLEN];
NLINES = 0;
WHILE ((LEN = GETLINE(LINE, MAXLEN)) > 0)
IF (NLINES >= MAXLINES)
RETURN(-1);
ELSE IF ((P = ALLOC(LEN)) == NULL)
RETURN (-1);
ELSE (
LINE[LEN-1] = ‘0’; /* ZAP NEWLINE */
STRCPY(P,LINE);
LINEPTR[NLINES++] = P;
)
RETURN(NLINES);
)
Neiaie iiaie no?iee a eiioea eaaeaeie no?iee oaeaeyaony, oae /oi
ii ieeae ia aoaeao aeeyoue ia ii?yaeie, a eioi?ii ni?oe?othony
no?iee.
WRITELINES(LINEPTR, NLINES) /* WRITE OUTPUT LINES */
CHAR *LINEPTR[];
INT NLINES;
(
INT I;
FOR (I = 0; I = 0)
PRINTF(“%SN”, *LINEPTR++);
)
caeanue *LINEPTR nia/aea oeacuaaao ia ia?aoth no?ieo; eaaeaeia
oaaee/aiea ia?aaeaeaaao oeacaoaeue ia neaaeothuoth no?ieo, a oi
a?aiy eae NLINES oauaaao aei ioey.
Ni?aaeaoenue n aaiaeii e auaiaeii, iu iiaeai ia?aeoe e ni?-
oe?iaea. i?ia?aiia ni?oe?iaee ii oaeeo ec aeaau 3 o?aaoao
i/aiue iaaieueoeo eciaiaiee: aeieaeiu auoue iiaeeoeoee?iaaiu iiena-
iey, a iia?aoeey n?aaiaiey auaeaeaia a ioaeaeueioth ooieoeeth. In-
iiaiie aeai?eoi inoaaony oai aea naiui, e yoi aeaao iai ii?a-
aeaeaiioth oaa?aiiinoue, /oi ii ii-i?aaeiaio aoaeao ?aaioaoue.
SORT(V, N) /* SORT STRINGS V[0] … V[N-1] */
CHAR V[]; / INTO INCREASING ORDER */
INT N;
(
INT GAP, I, J;
CHAR *TEMP;
FOR (GAP = N/2; GAP > 0; GAP /= 2)
FOR (I = GAP; I = 0; J -= GAP) (
IF (STRCMP(V[J], V[J+GAP]) 12) ? NAME[0] : NAME[N]);
)
· 119 –
Iienaiea ianneaa oeacaoaeae ia neiaieu NAME oi/ii oaeia aea,
eae aiaeiae/iia iienaiea LINEPTR a i?eia?a n ni?oe?iaeie.
Eieoeeaeecaoi?ii yaeyaony i?inoi nienie neiaieueiuo no?ie;
eaaeaeay no?iea i?enaaeaaaony niioaaonoaothuae iiceoeee a ianne-
aa. Aieaa oi/ii, neiaieu I-ie no?iee iiiauathony a eaeia-oi
eiia ianoi, a aa oeacaoaeue o?aieony a NAME[I]. Iineieueeo
?acia? ianneaa NAME ia oeacai, eiiieeyoi? nai iiaen/eouaaao
eiee/anoai eieoeeaeecaoi?ia e niioaaonoaaiii onoaiaaeeaaao
i?aaeeueiia /enei.
5.10. Oeacaoaee e iiiaiia?iua ianneau
Ia/eiathuea eco/aoue ycue “n” eiiaaea noaiiayony a ooiee
ia?aae aii?inii i ?acee/ee iaaeaeo aeaoia?iui ianneaii e ianne-
aii oeacaoaeae, oaeei eae NAME a i?eaaaeaiiii auoa i?eia?a.
Anee eiathony iienaiey
INT A[10][10];
INT *B[10];
oi A e B iiaeii eniieueciaaoue noiaeiui ia?acii a oii niunea,
/oi eae A[5][5], oae e B[5][5] yaeythony caeiiiuie nnueeaie
ia ioaeaeueiia /enei oeia INT. Ii A – ianoiyuee iannea: iiae
iaai ioaiaeeony 100 y/aae iaiyoe e aeey iaoiaeaeaiey ethaiai oea-
caiiiai yeaiaioa i?iaiaeyony iau/iua au/eneaiey n i?yiioaieue-
iuie eiaeaenaie. Aeey B, iaeiaei, iienaiea auaeaeyao oieueei 10
oeacaoaeae; eaaeaeue oeacaoaeue aeieaeai auoue onoaiiaeai oae,
/oiau ii oeacuaae ia iannea oeaeuo. anee i?aaeiieiaeeoue, /oi
eaaeaeue ec ieo oeacuaaao ia iannea ec 10 yeaiaioia, oi oiaaea
aaea-oi aoaeao ioaaaeaii 100 y/aae iaiyoe iethn aua aeanyoue y/aae
aeey oeacaoaeae. Oaeei ia?acii, iannea oeacaoaeae eniieuecoao
ianeieueei aieueoee iauai iaiyoe e iiaeao o?aaiaaoue iaee/ea ya-
iiai oaaa eieoeeaeecaoeee. Ii i?e yoii aicieeatho aeaa i?aeio-
uanoaa: aeinooi e yeaiaioo inouanoaeyaony einaaiii /a?ac oea-
caoaeue, a ia iin?aaenoaii oiiiaeaiey e neiaeaiey, e no?iee ian-
neaa iiaoo eiaoue ?acee/iua aeeeiu. Yoi icia/aao, /oi eaaeaeue
yeaiaio B ia aeieaeai iaycaoaeueii oeacuaaoue ia aaeoi? ec 10
yeaiaioia; iaeioi?ua iiaoo oeacuaaoue ia aaeoi? ec aeaoo yea-
iaioia, ae?oaea – ec aeaaaeoeaoe, a o?aouee iiaoo aiiaua ie ia
/oi ia oeacuaaoue.
Oioy iu aaee yoi ianoaeaeaiea a oa?ieiao oeaeuo, ianiiiai-
ii, /aua anaai ianneau oeacaoaeae eniieuecothony oae, eae iu
i?iaeaiiino?e?iaaee ia ooieoeee MONTH_NAME, – aeey o?aiaiey
neiaieueiuo no?ie ?acee/iie aeeeiu.
Oi?aaeiaiea 5-6.
Ia?aieoeoa ooieoeee DAY_OF_YEAR e MONTH_DAY, eniieuecoy
aianoi eiaeaenaoeee oeacaoaee.
· 120 –
5.11. Eiiaiaeiay no?iea a?aoiaioia
Nenoaiiua n?aaenoaa, ia eioi?ua iie?aaony ?aaeecaoeey ycu-
ea “n”, iicaieytho ia?aaeaaaoue eiiaiaeioth no?ieo a?aoiaioia eee
ia?aiao?ia ia/eiathuae auiieiyoueny i?ia?aiia. Eiaaea ooieoeey
MAIN aucuaaaony e eniieiaieth, iia aucuaaaony n aeaoiy a?ao-
iaioaie. Ia?aue a?aoiaio (oneiaii iacuaaaiue ARGC) oeacuaaao
/enei a?aoiaioia a eiiaiaeiie no?iea, n eioi?uie i?ienoiaeeo
ia?auaiea e i?ia?aiia; aoi?ie a?aoiaio (ARGV) yaeyaony oea-
caoaeai ia iannea neiaieueiuo no?ie, niaea?aeaueo yoe a?aoiai-
ou, ii iaeiiio a no?iea. ?aaioa n oaeeie no?ieaie – yoi iau/-
iia eniieueciaaiea iiiaio?iaiaauo oeacaoaeae.
Naioth i?inooth eeethno?aoeeth yoie aiciiaeiinoe e iaiaoiaeeiuo
i?e yoii iienaiee aeaao i?ia?aiia ECHO, eioi?ay i?inoi ia/a-
oaao a iaeio no?ieo a?aoiaiou eiiaiaeiie no?iee, ?acaeaeyy eo
i?iaaeaie. Oaeei ia?acii, anee aeaia eiiaiaea
ECHO HELLO, WORLD
oi auoiaeii aoaeao
HELLO, WORLD
ii niaeaoaieth ARGV[0] yaeyaony eiaiai, ii eioi?iio aucuaaao-
ny i?ia?aiia, oae /oi ARGC ii iaiueoae ia?a ?aaai 1. A i?eaa-
aeaiiii auoa i?eia?a ARGC ?aaai 3, a ARGV[0], ARGV[1] e
ARGV[2] ?aaiu niioaaonoaaiii “ECHO”, “HELLO,” e “WORLD”.
Ia?aui oaeoe/aneei aaoiaioii yaeyaony ARGV[1], a iineaaeiei –
ARGV[ARGC-1]. Anee ARGC ?aaai 1, oi ca eiaiai i?ia?aiiu ia
neaaeoao ieeaeie eiiaiaeiie no?iee a?aoiaioia. Ana yoi iieaca-
ii a ECHO:
MAIN(ARGC, ARGV) /* ECHO ARGUMENTS; 1ST VERSION */
INT ARGC;
CHAR *ARGV[];
(
INT I;
FOR (I = 1; I 0)
PRINTF(“%S%C”,*++ARGV, (ARGC > 1) ? ‘ ‘ : ‘N’);
)
· 121 –
Oae eae ARGV yaeyaony oeacaoaeai ia ia/aei ianneaa no?ie-a?-
aoiaioia, oi, oaaee/ea aai ia 1 (++ARGV), iu auioaeaeaai aai
oeacuaaoue ia iiaeeeiiue a?aoiaio ARGV[1], a ia ia ARGV[0].
Eaaeaeia iineaaeothuaa oaaee/aiea ia?aaeaeaaao aai ia neaaeothuee
a?aoiaio; i?e yoii *ARGV noaiiaeony oeacaoaeai ia yoio a?ao-
iaio. iaeiia?aiaiii aaee/eia ARGC oiaiueoaaony; eiaaea iia ia-
?aoeony a ioeue, ana a?aoiaiou aoaeoo oaea iaia/aoaiu.
Ae?oaie aa?eaio:
MAIN(ARGC, ARGV) /* ECHO ARGUMENTS; 3RD VERSION */ INT ARGC;
CHAR *ARGV[];
(
WHILE (–ARGC > 0)
PRINTF((ARGC > 1) ? “%S” : “%SN”, *++ARGV);
)
Yoa aa?ney iieacuaaao, /oi a?aoiaio oi?iaoa ooieoeee PRINTF
iiaeao auoue au?aaeaieai, oi/ii oae aea, eae e ethaie ae?oaie. Oa-
eia eniieueciaaiea ano?a/aaony ia i/aiue /anoi, ii aai ana aea
noieo caiiiieoue.
Eae aoi?ie i?eia?, aeaaaeoa aianai iaeioi?ua oniaa?oaino-
aiaaiey a i?ia?aiio iouneaiey caaeaiiie eiiaeiaoeee neiaieia
ec aeaau 4. Anee au iiiieoa, iu iiianoeee eneiioth eiiaeiaoeeth
aeoaiei aioo?ue i?ia?aiiu, /oi i/aaeaeii yaeyaony niaa?oaiii
iaoaeiaeaoai?eoaeueiui. Neaaeoy ooeeeoa GREP nenoaiu UNIX, aea-
aaeoa eciaiei i?ia?aiio oae, /oiau yoa eiiaeiaoeey oeacuaa-
eanue a ea/anoaa ia?aiai a?aoiaioa no?iee.
#DEFINE MAXLINE 1000
MAIN(ARGC, ARGV) /* FIND PATTERN FROM FIRST ARGUMENT */ INT ARGC;
CHAR *ARGV[];
(
CHAR LINE[MAXLINE];
IF (ARGC != 2)
PRINTF (“USAGE: FIND PATTERNN”);
ELSE
WHILE (GETLINE(LINE, MAXLINE) > 0)
IF (INDEX(LINE, ARGV[1] >= 0)
PRINTF(“%S”, LINE);
)
Oaia?ue iiaeao auoue ?acaeoa iniiaiay iiaeaeue, eeethno?e?oth-
uay aeaeueiaeoaa eniieueciaaiea oeacaoaeae. I?aaeiieiaeei, /oi
iai iaaei i?aaeoniio?aoue aeaa iaiaycaoaeueiuo a?aoiaioa. Iaeei
ooaa?aeaeaao: “iaia/aoaoue ana no?iee ca eneeth/aieai oao, eioi-
?ua niaea?aeao aeaiioth eiiaeiaoeeth”, aoi?ie aeaneo: “ia?aae eaae-
aeie auaiaeeiie no?ieie aeieaeai ia/aoaoueny aa iiia?”.
· 122 –
Iauai?eiyoui niaeaoaieai a “n”-i?ia?aiiao yaeyaony oi,
/oi a?aoiaio, ia/eiathueeny ni ciaea ieion, aaiaeeo iaiayca-
oaeueiue i?eciae eee ia?aiao?. Anee iu, aeey oiai, /oiau niia-
ueoue ia eiaa?nee, auaa?ai -X, a aeey oeacaiey i ioia?aoeee
ioaeiuo no?ie auaa?ai -N(“iiia?”), oi eiiaiaea
FIND -X -N THE
i?e aoiaeiuo aeaiiuo
NOW IS THE TIME
FOR ALL GOOD MEN
TO COME TO THE AID
OF THEIR PARTY.
Aeieaeia auaeaoue
2:FOR ALL GOOD MEN
Ioaeii, /oiau iaiaycaoaeueiua a?aoiaiou iiaee ?aniieaaaoue-
ny a i?iecaieueiii ii?yaeea, e /oiau inoaeueiay /anoue i?ia?aiiu
ia caaenaea io eiee/anoaa oaeoe/anee i?enoonoaothueo a?aoiai-
oia. a /anoiinoe, aucia ooieoeee INDEX ia aeieaeai niaea?aeaoue
nnueeo ia ARGV[2], eiaaea i?enoonoaoao iaeei iaiaycaoaeueiue
a?aoiaio, e ia ARGV[1], eiaaea aai iao. Aieaa oiai, aeey iieue-
ciaaoaeae oaeiaii, /oiau iaiaycaoaeueiua a?aoiaiou iiaeii auei
iauaaeeieoue a aeaea:
FIND -NX THE
aio naia i?ia?aiia:
#DEFINE MAXLINE 1000
MAIN(ARGC, ARGV) /* FIND PATTERN FROM FIRST ARGUMENT */ INT ARGC;
CHAR *ARGV[];
(
CHAR LINE[MAXLINE], *S;
LONG LINENO = 0;
INT EXCEPT = 0, NUMBER = 0;
WHILE (–ARGC > 0 && (*++ARGV)[0] == ‘-‘)
FOR (S = ARGV[0]+1; *S != ‘0’; S++)
SWITCH (*S) (
CASE ‘X’:
EXCEPT = 1;
BREAK;
· 123 –
CASE ‘N’:
NUMBER = 1;
BREAK;
DEFAULT:
PRINTF(“FIND: ILLEGAL OPTION %CN”, *S);
ARGC = 0;
BREAK;
)
IF (ARGC != 1)
PRINTF(“USAGE: FIND -X -N PATTERNN”);
ELSE
WHILE (GETLINa(LINE, MAXLINE) > 0) (
LINENO++;
IF ((INDEX(LINE, *ARGV) >= 0) != EXCEPT)
IF (NUMBER)
PRINTF(“%LD: “, LINENO);
PRINTF(“%S”, LINE);
)
)
)
A?aoiaio ARGV oaaee/eaaaony ia?aae eaaeaeui iaiaycaoaeueiui
a?aoiaioii, a oi a?aiy eae a?aoiaio ARGC oiaiueoaaony. anee
iao ioeaie, oi a eiioea oeeeea aaee/eia ARGC aeieaeia ?aaiyoueny
1, a *ARGV aeieaeii oeacuaaoue ia caaeaiioth eiiaeiaoeeth. Ia?aoeoa
aieiaiea ia oi, /oi *++ARGV yaeyaony oeacaoaeai a?aoiaioiie
no?iee; (*++ARGV)[0] – aa ia?aue neiaie. E?oaeua neiaee
caeanue iaiaoiaeeiu, iioiio /oi aac ieo au?aaeaiea au i?eiyei
niaa?oaiii ioee/iue (e iai?aaeeueiue) aeae *++(ARGV[0]). Ae?o-
aie i?aaeeueiie oi?iie auea au **++ARGV.
Oi?aaeiaiea 5-7.
Iaieoeoa i?ia?aiio ADD, au/eneythuoth ia?aoiia iieueneia
au?aaeaiea ec eiiaiaeiie no?iee. Iai?eia?,
ADD 2 3 4 + *
au/eneyao 2*(3+4).
Oi?aaeiaiea 5-8.
Iiaeeoeoee?oeoa i?ia?aiiu ENTAB e DETAB (oeacaiiua a ea-
/anoaa oi?aaeiaiee a aeaaa 1) oae, /oiau iie iieo/aee nienie
oaaoeyoeeiiiuo inoaiiaie a ea/anoaa a?aoiaioia. Anee a?aoiai-
ou ionoonoaotho, eniieuecoeoa noaiaea?oioth onoaiiaeo oaaoeyoeee.
Oi?aaeiaiea 5-9.
?anoe?ueoa ENTAB e DETAB oaeei ia?acii, /oiau iie aini?e-
ieiaee nie?auaiioth iioaoeeth
ENTAB M +N
· 124 –
icia/athuoth oaaoeyoeeiiiua inoaiiaee /a?ac eaaeaeua N noieaoeia,
ia/eiay ni noieaoea M. Auaa?eoa oaeiaiia (aeey iieueciaaoaey)
iiaaaeaiea ooieoeee ii oiie/aieth.
Oi?aaeiaiea 5-10.
Iaieoeoa i?ia?aiio aeey ooieoeee TAIL, ia/aoathuae iineaae-
iea N no?ie ec naiaai oaeea aaiaea. Ionoue ii oiie/aieth N ?aa-
ii 10, ii yoi /enei iiaeao auoue eciaiaii n iiiiuueth iaiayca-
oaeueiiai a?aoiaioa, oae /oi
TAIL -N
ia/aoaao iineaaeiea N no?ie. i?ia?aiia aeieaeia aeaenoaiaaoue ?a-
oeeiiaeueii, eaeeie au ia?acoiiuie ie auee au aaiae eee cia/a-
iea N. Ninoaaueoa i?ia?aiio oae, /oiau iia iioeiaeueiui ia?a-
cii eniieueciaaea aeinooiioth iaiyoue: no?iee aeieaeiu o?aieoueny,
eae a ooieoeee SORT, a ia a aeaoia?iii ianneaa oeene?iaaiiiai
?acia?a.
5.12. Oeacaoaee ia ooieoeee
A ycuea “n” naie ooieoeee ia yaeythony ia?aiaiiuie, ii
eiaaony aiciiaeiinoue ii?aaeaeeoue oeacaoaeue ia ooieoeeth, eioi?ue
iiaeii ia?aaaouaaoue, ia?aaeaaaoue ae?oaei ooieoeeyi, iiiauaoue a
ianneau e o.ae. Iu i?ieeethno?e?oai yoi, i?iaaaey iiaeeoeeaoeeth
iaienaiiie ?aiaa i?ia?aiiu ni?oe?iaee oae, /oiau i?e caaeaiee
iaiaycaoaeueiiai a?aoiaioa -N iia au ni?oe?iaaea no?iee aaiaea
/eneaiii, a ia eaeneeia?aoe/anee.
Ni?oe?iaea /anoi ninoieo ec o?ao /anoae – n?aaiaiey, ei-
oi?ia ii?aaeaeyao oii?yaei/eaaiea ethaie ia?u iauaeoia, ia?an-
oaiiaee, eciaiythuae eo ii?yaeie, e aeai?eoia ni?oe?iaee, ino-
uanoaeythuaai n?aaiaiey e ia?anoaiiaee aei oao ii?, iiea
iauaeou ia ?aniieiaeaony a ioaeiii ii?yaeea. Aeai?eoi ni?oe?ia-
ee ia caaeneo io iia?aoeee n?aaiaiey e ia?anoaiiaee, oae /oi,
ia?aaeaaay a iaai ?acee/iua ooieoeee n?aaiaiey e ia?anoaiiaee,
iu iiaeai i?aaieciaaoue ni?oe?iaeo ii ?acee/iui e?eoa?eyi.
Eiaiii oaeie iiaeoiae eniieuecoaony a iaoae iiaie i?ia?aiia
ni?oe?iaee.
Eae e i?aaeaea, eaeneeia?aoe/aneia n?aaiaiea aeaoo no?ie
inouanoaeyaony ooieoeeae STRCMP, a ia?anoaiiaea ooieoeeae
SWAP; iai ioaeia aua ooieoeey NUMCMP, n?aaieaathuay aeaa no?iee
ia iniiaa /eneaiiiai cia/aiey e aica?auathuay oneiaiia oeaca-
iea oiai aea aeaea, /oi e STRCMP. Yoe o?e ooieoeee iienuaathony
a MAIN e oeacaoaee ia ieo ia?aaeathony a SORT. A naith i/a?aaeue
ooieoeey SORT ia?auaaony e yoei ooieoeeyi /a?ac eo oeacaoaee.
iu o?acaee ia?aaioeo ioeaie a a?aoiaioao n oai, /oiau nin?a-
aeioi/eoueny ia aeaaiuo aii?inao.
· 125 –
#DEFINE LINES 100 /* MAX NUMBER OF LINES
TO BE SORTED */
MAIN(ARGC, ARGV) /* SORT INPUT LINES */ INT ARGC;
CHAR *ARGV[];
(
CHAR LINEPTR[LINES]; / POINTERS TO TEXT LINES */
INT NLINES; /* NUMBER OF INPUT LINES READ */
INT STRCMP(), NUMCMP(); /* COMPARSION FUNCTIONS */
INT SWAP(); /* EXCHANGE FUNCTION */
INT NUMERIC = 0; /* 1 IF NUMERIC SORT */
IF(ARGC>1 && ARGV[1][0] == ‘-‘ && ARGV[1][1]==’N’)
NUMERIC = 1;
IF(NLINES = READLINES(LINEPTR, LINES)) >= 0) (
IF (NUMERIC)
SORT(LINEPTR, NLINES, NUMCMP, SWAP);
ELSE
SORT(LINEPTR, NLINES, STRCMP, SWAP);
WRITELINES(LINEPTR, NLINES);
) ELSE
PRINTF(“INPUT TOO BIG TO SORTN”);
)
Caeanue STRCMP, NIMCMP e SWAP – aae?ana ooieoeee; oae eae ecaan-
oii, /oi yoi ooieoeee, iia?aoeey & caeanue ia ioaeia niaa?oaiii
aiaeiae/ii oiio, eae iia ia ioaeia e ia?aae eiaiai ianneaa.
Ia?aaea/a aae?ania ooieoeee i?aaiecoaony eiiieeyoi?ii.
Aoi?ie oaa ninoieo a iiaeeoeeaoeee SORT:
SORT(V, N, COMP, EXCH) /* SORT STRINGS V[0] … V[N-1] */ CHAR V[];
/ INTO INCREASING ORDER */ INT N;
INT (*COMP)(), (*EXCH)();
(
INT GAP, I, J;
FOR(GAP = N/2; GAP > 0; GAP /= 2)
FOR(I = GAP; I = 0; J -= GAP) (
IF((*COMP)(V[J], V[J+GAP]) V2)
RETURN(1);
ELSE
RETURN (0);
)
Caeeth/eoaeueiue oaa ninoieo a aeiaaaeaiee ooieoeee SWAP,
ia?anoaaeythuae aeaa oeacaoaey. Yoi eaaei naeaeaoue, iaiin?aaeno-
aaiii eniieuecoy oi, /oi iu eceiaeeee ?aiaa a yoie aeaaa.
· 127 –
SWAP(PX, PY) /* INTERCHANGE *PX AND *PY */
CHAR *PX[], *PY[];
(
CHAR *TEMP;
TEMP = *PX;
*PX = *PY;
*PY = TEMP;
)
Eiaaony iiiaeanoai ae?oaeo iaiaycyoaeueiuo a?aoiaioia, ei-
oi?ua iiaoo auoue aeeth/aiu a i?ia?aiio ni?oe?iaee: iaeioi?ua
ec ieo ninoaaeytho eioa?aniua oi?aaeiaiey.
Oi?aaeiaiea 5-11.
Iiaeeoeoee?oeoa SORT oaeei ia?acii, /oiau iia ?aaioaea n
iaoeie -R, oeacuaathuae ia ni?oe?iaeo a ia?aoiii (oauaathuai)
ii?yaeea. Eiia/ii, -R aeieaeia ?aaioaoue n -N.
Oi?aaeiaiea 5-12.
Aeiaaaueoa iaiaycaoaeueiue a?aoiaio -F, iauaaeeiythuee aianoa
i?iieniua e no?i/iua aoeau, oae /oiau ?acee/ea ?aaeno?ia ia
o/eouaaeinue ai a?aiy ni?oe?iaee: aeaiiua ec aa?oiaai e ieaeia-
ai ?aaeno?ia ni?oe?othony aianoa, oae /oi aoeaa ‘a’ i?iieniia
e ‘a’ no?i/iia ieacuaathony ninaaeieie , a ia ?acaeaeaiiuie oea-
eui aeoaaeoii.
Oi?aaeiaiea 5-13.
Aeiaaaueoa iaiaycaoaeueiue a?aoiaio -D (“neiaa?iia oii?yaei-
/eaaiea”), i?e iaee/ee eioi?iai n?aaieaathony oieueei aoeau,
/enea e i?iaaeu. Iicaaioueoanue i oii, /oiau yoa ooieoeey ?aai-
oaea e aianoa n -F.
Oi?aaeiaiea 5-14.
Aeiaaaueoa aiciiaeiinoue ia?aaioee iieae, oae /oiau iiaeii
auei ni?oe?iaaoue iiey aioo?e no?ie. Eaaeaeia iiea aeieaeii ni?-
oe?iaaoueny a niioaaonoaee n iacaaeneiui iaai?ii iaiaycaoaeue-
iuo a?aoiaioia. (i?aaeiaoiue oeacaoaeue yoie eieae ni?oe?iaae-
ny n iiiiuueth a?aoiaioia -DF aeey eaoaai?ee oeacaoaey e n -N
aeey iiia?ia no?aieoe).
· 128 –
6. No?oeoo?u.
No?oeoo?a – yoi iaai? ec iaeiie eee aieaa ia?aiaiiuo,
aiciiaeii ?acee/iuo oeiia, na?oiie?iaaiiuo iiae iaeiei eiaiai
aeey oaeianoaa ia?aaioee. (A iaeioi?uo ycueao, naiue ecaanoiue
ec eioi?uo ianeaeue, no?oeoo?u iacuaathony “caienyie”).
O?aaeeoeeiiiui i?eia?ii no?oeoo?u yaeyaony o/aoiay ea?oi/-
ea ?aaioathuaai: “neoaeauee” iienuaaaony iaai?ii ao?eaooia oa-
eeo, eae oaieeey, eiy, io/anoai (o.e.i.), aae?an, eiae nioee-
aeueiiai iaania/aiey, ca?ieaoa e o.ae. Iaeioi?ua ec yoeo ao?e-
aooia naie iiaoo ieacaoueny no?oeoo?aie: o.e.i. Eiaao ian-
eieueei eiiiiiaio, eae e aae?an, e aeaaea ca?ieaoa.
No?oeoo?u ieacuaathony iieaciuie i?e i?aaiecaoeee neiaeiuo
aeaiiuo iniaaiii a aieueoeo i?ia?aiiao, iineieueeo ai iiiaeo
neooaoeeyo iie iicaieytho na?oiie?iaaoue naycaiiua aeaiiua oaeei
ia?acii, /oi n ieie iiaeii ia?auaoueny, eae n iaeiei oeaeui, a
ia eae n ioaeaeueiuie iauaeoaie. A yoie aeaaa iu iinoa?aainy
i?iaeaiiino?e?iaaoue oi, eae eniieuecothony no?oeoo?u. I?ia?ai-
iu, eioi?ua iu aeey yoiai aoaeai eniieueciaaoue, aieueoa, /ai
iiiaea ae?oaea a yoie eieaa, ii ana aea aeinoaoi/ii oia?aiiuo
?acia?ia.
6.1. Iniiaiua naaaeaiey.
Aeaaaeoa niiaa ia?aoeiny e i?ioeaaeo?ai i?aia?aciaaiey aeaou
ec aeaau 5. Aeaoa ninoieo ec ianeieueeeo /anoae oaeeo, eae
aeaiue, ianyoe, e aiae, e, aiciiaeii, aeaiue aiaea e eiy ianyoea. Yoe
iyoue ia?aiaiiuo iiaeii iauaaeaieoue a iaeio no?oeoo?o aeaea:
STRUCT DATE (
INT DAY;
INT MONTH;
INT YEAR;
INT YEARDAY;
CHAR MON_NAME[4];
);
Iienaiea no?oeoo?u, ninoiyuaa ec caeeth/aiiiai a oeao?iua
neiaee nienea iienaiee, ia/eiaaony n eeth/aaiai neiaa STRUCT.
Ca neiaii STRUCT iiaeao neaaeiaaoue iaiaycaoaeueiia eiy, iacuaa-
aiia y?eueii no?oeoo?u (caeanue yoi DATa). Oaeie y?eue eiaioao
no?oeoo?u yoiai aeaea e iiaeao eniieueciaaoueny a aeaeueiaeoai eae
nie?auaiiay caienue iiae?iaiiai iienaiey.
Yeaiaiou eee ia?aiaiiua, oiiiyiooua a no?oeoo?a, iacuaa-
thony /eaiaie. ss?euee e /eaiu no?oeoo? iiaoo eiaoue oaeea aea
eiaia, /oi e iau/iua ia?aiaiiua (o.a. Ia yaeythueany /eaiaie
no?oeoo?), iineieueeo eo eiaia anaaaea iiaeii ?acee/eoue ii eii-
oaenoo. Eiia/ii, iau/ii iaeeiaeiaua eiaia i?enaaeaatho oieueei
oanii naycaiiui iauaeoai.
· 129 –
Oi/ii oae aea, eae a neo/aa ethaiai ae?oaiai aaceniiai oe-
ia, ca i?aaie oeao?iie neiaeie, cae?uaathuae nienie /eaiia,
iiaeao neaaeiaaoue nienie ia?aiaiiuo.
Iia?aoi?
STRUCT ( …) X,Y,Z;
neioaene/anee aiaeiae/ai
INT X,Y,Z;
a oii niunea, /oi eaaeaeue ec iia?aoi?ia iienuaaao X , Y e Z a
ea/anoaa ia?aiaiiuo niioaanoaothueo oeiia e i?eaiaeeo e auaea-
eaieth aeey ieo iaiyoe.
Iienaiea no?oeoo?u, ca eioi?ui ia neaaeoao nienea ia?a-
iaiiuo, ia i?eaiaeeo e auaeaeaieth eaeie-eeai iaiyoe; iii oieue-
ei ii?aaeaeyao oaaeii eee oi?io no?oeoo?u. Iaeiaei, anee oaeia
iienaiea niaaaeaii y?eueii, oi yoio y?eue iiaeao auoue eniieue-
ciaai iicaeiaa i?e ii?aaeaeaiee oaeoe/aneeo yecaiiey?ia no?oe-
oo?. Iai?eia?, anee aeaii i?eaaaeaiiia auoa iienaiea DATE, oi
STRUCT DATE D;
ii?aaeaeyao ia?aiaiioth D a ea/anoaa no?oeoo?u oeia DATE.
Aiaoithth eee noaoe/aneoth no?oeoo?o iiaeii eieoeeaeece?iaaoue,
iiianoea aneaae ca aa ii?aaeaeaieai nienie eieoeeaeecaoi?ia aeey
aa eiiiiiaio:
STRUCT DATE D=( 4, 7, 1776, 186, “JUL”);
*eai ii?aaeaeaiiie no?oeoo?u iiaeao auoue oeacai a au?aaea-
iee n iiiiuueth eiino?oeoeee aeaea
eiy no?oeoo?u . *eai
Iia?aoeey oeacaiey /eaia no?oeoo?u “.” naycuaaao eiy no?oeoo-
?u e eiy /eaia. A ea/anoaa i?eia?a ii?aaeaeei LEAP (i?eciae
aenieiniinoe aiaea) ia iniiaa aeaou, iaoiaeyuaeny a no?oeoo?a
D,
LEAP = D.YEAR % 4 == 0 && D.YEAR % 100 != 0
!! D.YEAR % 400 == 0;
eee i?iaa?ei eiy ianyoea
IF (STRCMP(D.MON_NAME, “AUG”) == 0) …
Eee i?aia?acoai ia?aue neiaie eiaie ianyoea oae, /oiau iii
ia/eiaeinue ni no?i/iie aoeau
D.MON_NAME[0] = LOWER(D.MON_NAME[0]);
· 130 –
No?oeoo?u iiaoo auoue aeiaeaiiuie; o/aoiay ea?oi/ea neoaea-
uaai iiaeao oaeoe/anee auaeyaeaoue oae:
STRUCT PERSON (
CHAR NAME[NAMESIZE];
CHAR ADDRESS[ADRSIZE];
LONG ZIPCODE; /* ii/oiaue eiaeaen */
LONG SS_NUMBER; /* eiae nioe. Iaania/aiey */
DOUBLE SALARY; /* ca?ieaoa */
STRUCT DATE BIRTHDATE; /* aeaoa ?iaeaeaiey */
STRUCT DATE HIREDATE; /* aeaoa iinooieaiey
ia ?aaioo */
);
No?oeoo?a PERSON niaea?aeeo aeaa no?oeoo?u oeia DATE . Anee iu
ii?aaeaeei EMP eae
STRUCT PERSON EMP;
oi
EMP.BIRTHDATE.MONTH
aoaeao nnueaoueny ia ianyoe ?iaeaeaiey. Iia?aoeey oeacaiey /eaia
no?oeoo?u “.” annioeee?oaony neaaa iai?aai.
6.2. No?oeoo?u e ooieoeee.
A ycuea “C” nouanoaoao ?yae ia?aie/aiee ia eniieueciaaiea
no?oeoo?. Iaycaoaeueiua i?aaeea caeeth/athony a oii, /oi aaeein-
oaaiiua iia?aoeee, eioi?ua au iiaeaoa i?iaiaeeoue ni no?oeoo?a-
ie, ninoiyo a ii?aaeaeaiee aa aae?ana n iiiiuueth iia?aoeee & e
aeinooia e iaeiiio ec aa /eaiia. Yoi aea/ao ca niaie oi, /oi
no?oeoo?u iaeuecy i?enaaeaaoue eee eiie?iaaoue eae oeaeia, e /oi
iie ia iiaoo auoue ia?aaeaiu ooieoeeyi eee aica?auaiu eie. (A
iineaaeothueo aa?neyo yoe ia?aie/aiey aoaeoo niyou). Ia oeaca-
oaee no?oeoo? yoe ia?aie/aiey iaeiaei ia iaeeaaeuaathony, oae
/oi no?oeoo?u e ooieoeee ana aea iiaoo n oaeianoaii ?aaioaoue
niaianoii. E iaeiiaoe, aaoiiaoe/aneea no?oeoo?u, eae e aaoi-
iaoe/aneea ianneau, ia iiaoo auoue eieoeeaeece?iaaiu; eieoeea-
eecaoeey aiciiaeia oieueei a neo/aa aiaoieo eee noaoe/aneeo
no?oeoo?.
Aeaaaeoa ?acaa?ai iaeioi?ua ec yoeo aii?inia, ia?aienaa n
yoie oeaeueth ooieoeee ia?ia?aciaaiey aeaou ec i?aaeuaeouae aeaau
oae, /oiau iie eniieueciaaee no?oeoo?u. Oae eae i?aaeea cai-
?auatho iaiin?aaenoaaiioth ia?aaea/o no?oeoo?u ooieoeee, oi iu
aeieaeiu eeai ia?aaeaaaoue ioaeaeueii eiiiiiaiou, eeai ia?aaeaoue
oeacaoaeue anae no?oeoo?u. Ia?aay aiciiaeiinoue aeaiiino?e?oaony
ia i?eia?a ooieoeee DAY_OF_YEAR, eae iu aa iaienaee a aeaaa
5:
D.YEARDAY = DAY_OF_YEAR(D.YEAR, D.MONTH, D.DAY);
· 131 –
ae?oaie niinia ninoieo a ia?aaea/a oeacaoaey. anee iu iieoai
HIREDATE eae
STRUCT DATE HIREDATE;
e ia?aieoai DAY_OF_YEAR ioaeiui ia?acii, iu niiaeai oiaaea ia-
ienaoue
HIREDATE YEARDAY = DAY_OF_YEAR(&HIREDATE);
ia?aaeaaay oeacaoaeue ia HIREDATE ooieoeee DAY_OF_YEAR . Ooie-oeey
aeieaeia auoue iiaeeoeoee?iaaia, iioiio /oi aa a?aoiaio oa-ia?ue
yaeyaony oeacaoaeai, a ia nieneii ia?aiaiiuo.
DAY_OF_YEAR(PD) /* SET DAY OF YEAR FROM MONTH, DAY */ STRUCT DATE *PD;
(
INT I, DAY, LEAP;
DAY = PD->DAY;
LEAP = PD->YEAR % 4 == 0 && PD->YEAR % 100 != 0
!! PD->YEAR % 400 == 0;
FOR (I =1; I MONTH; I++)
DAY += DAY_TAB[LEAP][I];
RETURN(DAY);
)
Iienaiea
STRUCT DATE *PD;
aiai?eo, /oi PD yaeyaony oeacaoaeai no?oeoo?u oeia DATE.
Caienue, iieacaiiay ia i?eia?a
PD->YEAR
yaeyaony iiaie. Anee P – oeacaoaeue ia no?oeoo?o, oi
P-> /eai no?oeoo?u
ia?auaaony e eiie?aoiiio /eaio. (Iia?aoeey -> – yoi ciae ie-
ion, ca eioi?ui neaaeoao ciae “>”.)
Oae eae PD oeacuaaao ia no?oeoo?o, oi e /eaio YEAR iiaeii
ia?aoeoueny e neaaeothuei ia?acii
(*PD).YEAR
ii oeacaoaee no?oeoo? eniieuecothony ianoieueei /anoi, /oi ca-
ienue -> ieacuaaaony oaeiaiui nie?auaieai. E?oaeua neiaee a
(*PD).YEAR iaiaoiaeeiu, iioiio /oi iia?aoeey oeacaiey /eaia
· 132 –
nooeoo?u noa?oa , /ai * . Iaa iia?aoeee, “->” e “.”, annioeee-
?othony neaaa iai?aai, oae /oi eiino?oeoeee neaaa e ni?aaa
ceaeaaeaioiu
P->Q->MEMB (P->Q)->MEMB
EMP.BIRTHDATE.MONTH (EMP.BIRTHDATE).MONTH
Aeey iieiiou ieaea i?eaiaeeony ae?oaay ooieoeey, MONTH_DAY, ia?a-
ienaiiay n eniieueciaaieai no?oeoo?.
MONTH_DAY(PD) /* SET MONTH AND DAY FROM DAY OF YEAR */ STRUCT DATE *PD;
(
INT I, LEAP;
LEAP = PD->YEAR % 4 == 0 && PD->YEAR % 100 != 0
!! PD->YEAR % 400 == 0;
PD->DAY = PD->YEARDAY;
FOR (I = 1; PD->DAY > DAY_TAB[LEAP][I]; I++)
PD->DAY -= DAY_TAB[LEAP][I];
PD->MONTH = I;
)
Iia?aoeee ?aaiou ni no?oeoo?aie “->” e “.” ia?yaeo ni ()
aeey nienea a?aoiaioia e [] aeey eiaeaenia iaoiaeyony ia naiii
aa?oo ea?a?oee no?aoeinoaa iia?aoeee e, neaaeiaaoaeueii, naycu-
aathony i/aiue e?aiei. Anee, iai?eia?, eiaaony iienaiea
STRUCT (
INT X;
INT *Y;
) *P;
oi au?aaeaiea
++P->X
oaaee/eaaao o, a ia ?, oae eae iii yeaeaaeaioii au?aaeaieth
++(P->o). Aeey eciaiaiey ii?yaeea auiieiaiey iia?aoeee iiaeii
eniieueciaaoue e?oaeua neiaee: (++P)->o oaaee/eaaao P aei aein-
ooia e o, a (P++)->X oaaee/eaaao P iinea. (e?oaeua neiaee a
iineaaeiai neo/aa iaiaycaoaeueiu. Ii/aio ?)
Niaa?oaiii aiaeiae/ii *P->Y ecaeaeaao oi, ia /oi oeacu-
aaao Y; *P->Y++ oaaee/eaaao Y iinea ia?aaioee oiai, ia /oi
ii oeacuaaao (oi/ii oae aea, eae e *S++); (*P->Y)++ oaaee/e-
aaao oi, ia /oi oeacuaaao Y; *P++->Y oaaee/eaaao P iinea au-
ai?ee oiai, ia /oi oeacuaaao Y.
· 133 –
6.3. Ianneau n?oeoo?.
No?oeoo?u iniaaiii iiaeoiaeyo aeey oi?aaeaiey ianneaaie
naycaiiuo ia?aiaiiuo. ?anniio?ei, iai?eia?, i?ia?aiio iiaen-
/aoa /enea aoiaeaeaiee eaaeaeiai eeth/aaiai neiaa ycuea “C”. Iai
ioaeai iannea neiaieueiuo no?ie aeey o?aiaiey eiai e iannea oea-
euo aeey iiaen/aoa. iaeia ec aiciiaeiinoae ninoieo a eniieueciaa-
iee aeaoo ia?aeeaeueiuo ianneaia KEYWORD e KEYCOUNT:
CHAR *KEYWORD [NKEYS];
INT KEYCOUNT [NKEYS];
Ii nai oaeo, /oi ianneau ia?aeeaeueiu, oeacuaaao ia aiciiae-
iinoue ae?oaie i?aaiecaoeee. Eaaeaeia eeth/aaia neiai caeanue ii no-
uanoao yaeyaony ia?ie:
CHAR *KEYWORD;
INT KEYCOUNT;
e, neaaeiaaoaeueii, eiaaony iannea ia?. Iienaiea no?oeoo?u
STRUCT KEY (
CHAR *KEYWORD;
INT KEYCOUNT;
) KEYTAB [NKEYS];
iia?aeaeyao iannea KEYTAB no?oeoo? oaeiai oeia e ioaiaeeo aeey
ieo iaiyoue. Eaaeaeue yeaiaio ianneaa yaeyaony no?oeoo?ie. Yoi
iiaeii auei au caienaoue e oae:
STRUCT KEY (
CHAR *KEYWORD;
INT KEYCOUNT;
);
STRUCT KEY KEYTAB [NKEYS];
Oae eae no?oeoo?a KEYTAB oaeoe/anee niaea?aeeo iinoiyiiue
iaai? eiai, oi eaa/a anaai eieoeeaeece?iaaoue aa iaeei ?ac e
aeey anao /eaiia i?e ii?aaeaeaiee. Eieoeeaeecaoeey no?oeoo?
aiieia aiaeiae/ia i?aaeuaeouei eieoeeaeecaoeeyi – ca ii?aaeaeaie-
ai neaaeoao caeeth/aiiue a oeao?iua neiaee nienie eieoeeaeeca-
oi?ia:
STRUCT KEY (
CHAR *KEYWORD;
INT KEYCOUNT;
) KEYTAB[] =(
“BREAK”, 0,
“CASE”, 0,
“CHAR”, 0,
“CONTINUE”, 0,
“DEFAULT”, 0,
/* … */
“UNSIGNED”, 0,
“WHILE”, 0
);
Eieoeeaeecaoi?u ia?a/eneythony ia?aie niioaaonoaaiii /eaiai
no?oeoo?u. Auei au aieaa oi/ii caeeth/aoue a oeao?iua neiaee
eieoeeaeecaoi?u aeey eaaeaeie “no?iee” eee no?oeoo?u neaaeothuei
ia?acii:
( “BREAK”, 0 ),
( “CASE”, 0 ),
. . .
· 134 –
Ii eiaaea eieoeeaeecaoi?u yaeythony i?inouie ia?aiaiiuie eee
neiaieueiuie no?ieaie e ana iie i?enoonoaotho, oi ai aioo?ai-
ieo oeao?iuo neiaeao iao iaiaoiaeeiinoe. Eae iau/ii, eiiieey-
oi? nai au/eneeo /enei yeaiaioia ianneaa KEYTAB, anee eieoee-
aeecaoi?u i?enoonoaotho, a neiaee [] inoaaeaiu ionouie.
I?ia?aiia iiaen/aoa eeth/aauo neia ia/eiaaony n ii?aaeaea-
iey ianneaa KEYTAB. aaaeouay i?ia?aiia /eoaao naie oaee aai-
aea, iineaaeiaaoaeueii ia?auaynue e ooieoeee GETWORD, eioi?ay ec-
aeaeaao ec aaiaea ii iaeiiio neiao ca ia?auaiea. Eaaeaeia neiai
euaony a ianneaa KEYTAB n iiiiuueth aa?eaioa ooieoeee aeia?iiai
iienea, iaienaiiie iaie a aeaaa 3. (Eiia/ii, /oiau yoa ooie-
oeey ?aaioaea, nienie eeth/aauo neia aeieaeai auoue ?aniieiaeai a
ii?yaeea aic?anoaiey).
#DEFINE MAXWORD 20
MAIN() /* COUNT “C” KEYWORDS */
(
INT N, T;
CHAR WORD[MAXWORD];
WHILE ((T = GETWORD(WORD,MAXWORD)) != EOF)
IF (T == LETTER)
IF((N = BINARY(WORD,KEYTAB,NKEYS)) >= 0)
KEYTAB[N].KEYCOUNT++;
FOR (N =0; N 0)
PRINTF(“%4D %SN”,
KEYTAB[N].KEYCOUNT, KEYTAB[N].KEYWORD);
)
BINARY(WORD, TAB, N) /* FIND WORD IN TAB[0]…TAB[N-1] */
CHAR *WORD;
STRUCT KEY TAB[];
INT N;
(
INT LOW, HIGH, MID, COND;
LOW = 0;
HIGH = N – 1;
WHILE (LOW 0)
LOW = MID + 1;
ELSE
RETURN (MID);
)
RETURN(-1);
)
Iu anei?a i?eaaaeai ooieoeeth GETWORD; iiea aeinoaoi/ii neacaoue,
/oi iia aica?auaao LETTER eaaeaeue ?ac, eae iia iaoiaeeo neiai,
e eiie?oao yoi neiai a naie ia?aue a?aoiaio.
· 135 –
Aaee/eia NKEYS – yoi eiee/anoai eeth/aauo neia a ianneaa
KEYTAB . Oioy iu iiaeai nin/eoaoue yoi /enei a?o/ioth, ai?acaei
eaa/a e iaaeaaeiaa ii?o/eoue yoi iaoeia, iniaaiii a oii neo/aa,
anee nienie eeth/aauo neia iiaeaa?aeai eciaiaieyi. Iaeiie ec
aiciiaeiinoae auei au caeii/eoue nienie eieoeeaeecaoi?ia oeaca-
ieai ia ioeue e caoai i?ieoe a oeeeea neaicue iannea KEYTAB,
iiea ia iaeaeaony eiiaoe.
Ii, iineieueeo ?acia? yoiai ianneaa iieiinoueth ii?aaeaeai e
iiiaioo eiiieeyoeee, caeanue eiaaony aieaa i?inoay aiciiaeiinoue.
*enei yeaiaioia i?inoi anoue
SIZE OF KEYTAB / SIZE OF STRUCT KEY
aeaei a oii, /oi a ycuea “C” i?aaeoniio?aia oia?iay iia?aoeey
SIZEOF, auiieiyaiay ai a?aiy eiiieeyoeee, eioi?ay iicaieyao
au/eneeoue ?acia? ethaiai iauaeoa. Au?aaeaiea
SIZEOF(OBJECT)
auaeaao oeaeia, ?aaiia ?acia?o oeacaiiiai iauaeoa. (?acia? ii-
?aaeaeyaony a ianiaoeeoeoee?iaaiiuo aaeeieoeao, iacuaaaiuo “aae-
oaie”, eioi?ua eiatho oio aea ?acia?, /oi e ia?aiaiiua oeia
CHAR). Iauaeo iiaeao auoue oaeoe/aneie ia?aiaiiie, ianneaii e
no?oeoo?ie, eee eiaiai iniiaiiai oeia, eae INT eee DOUBLE,
eee eiaiai i?iecaiaeiiai oeia, eae no?oeoo?a. A iaoai neo/aa
/enei eeth/aauo neia ?aaii ?acia?o ianneaa, aeaeaiiiio ia ?ac-
ia? iaeiiai yeaiaioa ianneaa. Yoi au/eneaiea eniieuecoaony a
ooaa?aeaeaiee #DEFINE aeey onoaiiaeaiey cia/aiey NKEYS:
#DEFINE NKEYS (SIZEOF(KEYTAB) / SIZEOF(STRUCT KEY))
Oaia?ue ia?aeaeai e ooieoeee GETWORD. Iu oaeoe/anee iaiena-
ee aieaa iauee aa?eaio ooieoeee GETWORD, /ai iaiaoiaeeii aeey
yoie i?ia?aiiu, ii ii ia ia iiiai aieaa neiaeai. Ooieoeey
GETWORD aica?auaao neaaeothuaa “neiai” ec aaiaea, aaea neiaii
n/eoaaony eeai no?iea aoea e oeeo?, ia/eiathueony n aoeau, ee-
ai ioaeaeueiue neiaie. Oei iauaeoa aica?auaaony a ea/aoaa cia-
/aiey ooieoeee; yoi – LETTER, anee iaeaeaii neiai, EOF aeey
eiioea oaeea e nai neiaie, anee ii ia aoeaaiiue.
GETWORD(W, LIM) /* GET NEXT WORD FROM INPUT */
CHAR *W;
INT LIM;
(
INT C, T;
IF (TYPE(C=*W++=GETCH()) !=LETTER) (
*W=’0′;
RETURN©;
)
· 136 –
WHILE (–LIM > 0) (
T = TYPE(C = *W++ = GETCH());
IF (T ! = LETTER && T ! = DIGIT) (
UNGETCH©;
BREAK;
)
)
*(W-1) – ‘0’;
RETURN(LETTER);
)
Ooieoeey GETWORD eniieuecoao ooieoeee GETCH e UNGETCH, eioi?ua
iu iaienaee a aeaaa 4: eiaaea iaai? aeoaaeoiuo neiaieia i?a-
?uaaaony, ooieoeey GETWORD iieo/aao iaeei eeoiee neiaie. A ?a-
coeueoaoa auciaa UNGETCH yoio neiaie iiiauaaony iacaae ai aaiae
aeey neaaeothuaai ia?auaiey.
Ooieoeey GETWORD ia?auaaony e ooieoeee TYPE aeey ii?aaeaea-
iey oeia eaaeaeiai ioaeaeueiiai neiaiea ec oaeea aaiaea. Aio aa-
?eaio, ni?aaaaeeeaue oieueei aeey aeoaaeoa ASCII.
TYPE© /* RETURN TYPE OF ASCII CHARACTER */ INT C;
(
IF (C>= ‘A’ && C= ‘A’ && C= ‘0’ && CKEYCOUNT++;
FOR (P=KEYTAB; P>KEYTAB + NKEYS; P++)
IF (P->KEYCOUNT > 0)
PRINTF(“%4D %S/N”, P->KEYCOUNT, P->KEYWORD);
)
STRUCT KEY BINARY(WORD, TAB, N) / FIND WORD */
CHAR WORD / IN TAB[0]…TAB[N-1] */
STRUCT KEY TAB [];
INT N;
(
INT COND;
STRUCT KEY *LOW = &TAB[0];
STRUCT KEY *HIGH = &TAB[N-1];
STRUCT KEY *MID;
WHILE (LOW KEYWORD)) 0)
LOW = MID + 1;
ELSE
RETURN(MID);
)
RETURN(NULL);
)
Caeanue eiaaony ianeieueei iiiaioia, eioi?ua noieo ioia-
oeoue. Ai-ia?auo, iienaiea ooieoeee BINARI aeieaeii oeacuaaoue,
/oi iia aica?auaao oeacaoaeue ia no?oeoo?o oeia KEY, a ia ia
oeaeia; yoi iauyaeyaony eae a ooieoeee MAIN, oae e a BINARY.
Anee ooieoeey BINARI iaoiaeeo neiai, oi iia aica?auaao oeaca-
oaeue ia iaai; anee aea iao, iia aica?auaao NULL.
· 138 –
Ai-aoi?uo, ana ia?auaiey e yeaiaioai ianneaa KEYTAB ino-
uanoaeythony /a?ac oeacaoaee. Yoi aea/ao ca niaie iaeii nouan-
oaaiiia eciaiaiea a ooieoeee BINARY: n?aaeiee yeaiaio aieueoa
iaeuecy au/eneyoue i?inoi ii oi?ioea
MID = (LOW + HIGH) / 2
iioiio /oi neiaeaiea aeaoo oeacaoaeae ia aeaao eaeiai-ieaoaeue
iieaciiai ?acoeueoaoa (aeaaea iinea aeaeaiey ia 2) e a aeaenoae-
oaeueiinoe yaeyaony iacaeiiiui. yoo oi?ioeo iaaei caiaieoue ia
MID = LOW + (HIGH-LOW) / 2
a ?acoeueoaoa eioi?ie MID noaiiaeony oeacaoaeai ia yeaiaio,
?aniieiaeaiiue iina?aaeeia iaaeaeo LOW e HIGH.
Aai oaeaea neaaeoao ?acia?aoueny a eieoeeaeecaoeee LOW e
HIGH. oeacaoaeue iiaeii eieoeeaeece?iaaoue aae?anii ?aiaa ii?aaea-
eaiiiai iauaeoa; eiaiii eae iu caeanue e iinooieee.
A ooieoeee MAIN iu iaienaee
FOR (P=KEYTAB; P WORD = STRSAVE(W);
P->COUNT = 1;
P->LEFT = P->RIGHT = NULL;
) ELSE IF ((COND = STRCMP(W, P->WORD)) == 0)
P->COUNT++; /* REPEATED WORD */
ELSE IF (COND LEFT = TREE(P->LEFT, W);
ELSE /* GREATER INTO RIGHT SUBTREE */
P->RIGHT = TREE(P->RIGHT, W);
RETURN(P);
)
· 141 –
Iaiyoue aeey iiaiai ocea auaeaeyaony ooieoeeae TALLOC, yaey-
thuaeny aaeaioaoeeae aeey aeaiiiai neo/ay ooieoeee ALLOC, iaienai-
iie iaie ?aiaa. Iia aica?auaao oeacaoaeue naiaiaeiiai i?ino-
?ainoaa, i?eaiaeiiai aeey o?aiaiey iiaiai ocea aea?aaa. (Iu
anei?a ianoaeei yoi iiae?iaiaa). Iiaia neiai eiie?oaony ooie-
oeeae STRSAVE a ne?uoia ianoi, n/ao/ee eieoeeaeece?oaony aaee-
ieoeae, e oeacaoaee iaieo iioiieia iieaaathony ?aaiuie ioeth.
Yoa /anoue i?ia?aiiu auiieiyaony oieueei i?e aeiaaaeaiee iiaiai
ocea e ?aa?o aea?aaa. Iu caeanue iionoeee i?iaa?eo ia ioeaee
aica?auaaiuo ooieoeee STRSAVE e TALLOC cia/aiee (/oi ia?acoi-
ii aeey i?aeoe/anee ?aaioathuae i?ia?aiiu).
Ooieoeey TREEPRINT ia/aoaao aea?aai, ia/eiay n eaaiai iiae-
aea?aaa; a eaaeaeii ocea nia/aea ia/aoaaony eaaia iiaeaea?aai
(ana neiaa, eioi?ua ieaaeoa yoiai neiaa), caoai naii neiai, a
caoai i?aaia iiaeaea?aai (ana neiaa, eioi?ua noa?oa). Anee au
iaoaa?aiii iia?e?oaoa n ?aeo?neae, ia?enoeoa aea?aai naie e
iaia/aoaeoa aai n iiiiuueth ooieoeee TREEPRINT ; yoi iaeia ec
iaeaieaa yniuo ?aeo?neaiuo i?ioeaaeo?, eioi?oth iiaeii iaeoe.
TREEPRINT (P) /* PRINT TREE P RECURSIVELY */
STRUCT TNODE *P;
(
IF (P != NULL) (
TREEPRINT (P->LEFT);
PRINTF(“%4D %SN”, P->COUNT, P->WORD);
TREEPRINT (P->RIGHT);
)
)
I?aeoe/aneia caia/aiea: anee aea?aai noaiiaeony “ianaa-
eaine?iaaiiui” ec-ca oiai, /oi neiaa iinooiatho ia a neo/ae-
iii ii?yaeea, oi a?aiy ?aaiou i?ia?aiiu iiaeao ?anoe neeoeii
auno?i. A ooaeoai neo/aa, eiaaea iinooiathuea neiaa oaea oii?y-
aei/aiu, ianoiyuay i?ia?aiia inouanoaeyao aei?iainoiyuoth eie-
oaoeeth eeiaeiiai iienea. Nouanoaotho ?acee/iua iaiauaiey aeai-
e/iiai aea?aaa, iniaaiii 2-3 aea?aauey e AVL aea?aauey, eioi?ua
ia aaaeoo naay oae “a ooaeoeo neo/ayo”, ii iu ia aoaeai caeanue
ia ieo inoaiaaeeaaoueny.
I?aaeaea /ai ?annoaoueny n yoei i?eia?ii, oianoii naeaeaoue
iaaieueoia ionooieaiea a nayce n aii?inii i ?ani?aaeaeaiee ia-
iyoe. ssnii, /oi a i?ia?aiia aeaeaoaeueii eiaoue oieueei iaeei
?ani?aaeaeeoaeue iaiyoe, aeaaea anee aio i?eoiaeeony ?aciauaoue
?acee/iua aeaeu iauaeoia. Ii anee iu oioei eniieueciaaoue iaeei
?ani?aaeaeeoaeue iaiyoe aeey ia?aaioee cai?inia ia auaeaeaiea
iaiyoe aeey oeacaoaeae ia ia?aiaiiua oeia CHAR e aeey oeacaoa-
eae ia STRUCT TNODE, oi i?e yoii aicieeatho aeaa aii?ina. Ia?-
aue: eae auiieieoue oi nouanoaothuaa ia aieueoeinoaa ?aaeueiuo
iaoei ia?aie/aiea, /oi iauaeou ii?aaeaeaiiuo oeiia aeieaeiu
oaeiaeaoai?youe o?aaiaaieyi au?aaieaaiey (iai?eia?, /anoi oea-
eua aeieaeiu ?aciauaoueny a /aoiuo aae?anao)? Aoi?ie: eae i?aa-
ieciaaoue iienaiey, /oiau ni?aaeoueny n oai, /oi ooieoeey ALLOC
aeieaeia aica?auaoue ?acee/iua aeaeu oeacaoaeae ?
· 142 –
Aiiaua aiai?y, o?aaiaaiey au?aaieaaiey eaaei auiieieoue
ca n/ao auaeaeaiey iaeioi?iai eeoiaai i?ino?ainoaa, i?inoi
iaania/ea oi, /oiau ?ani?aaeaeeoaeue iaiyoe anaaaea aica?auae
oeacaoaeue, oaeiaeaoai?ythuee anai ia?aie/aieyi au?aaieaaiey.
Iai?eia?, ia PDP-11 aeinoaoi/ii, /oiau ooieoeey ALLOC anaaaea
aica?auaea /aoiue oeacaoaeue, iineieueeo a /aoiue aae?an iiaeii
iiianoeoue ethaie oei iauaeoa. aaeeinoaaiiue ?anoiae i?e yoii –
eeoiee neiaie i?e cai?ina ia ia/aoioth aeeeio. Aiaeiae/iua
aeaenoaey i?aaei?eieiathony ia ae?oaeo iaoeiao. Oaeei ia?acii,
?aaeecaoeey ALLOC iiaeao ia ieacaoueny ia?aiineiie, ii aa en-
iieueciaaiea aoaeao ia?aiineiui. Ooieoeey ALLOC ec aeaau 5 ia
i?aaeoniao?eaaao ieeaeiai ii?aaeaeaiiiai au?aaieaaiey; a aeaaa
8 iu i?iaeaiiino?e?oai, eae i?aaeeueii auiieieoue yoo caaea/o.
Aii?in iienaiey oeia ooieoeee ALLOC yaeyaony io/eoaeueiui
aeey ethaiai ycuea, eioi?ue na?ueacii ioiineony e i?iaa?ea oe-
iia. Eo/oee niinia a ycuea “C” – iauyaeoue, /oi ALLOC aica?a-
uaao oeacaoaeue ia ia?aiaiioth oeia CHAR, a caoai yaii i?aia-
?aciaaoue yoio oeacaoaeue e aeaeaaiiio oeio n iiiiuueth iia?aoeee
ia?aaiaea oeiia. Oaeei ia?acii, anee iienaoue P a aeaea
CHAR *P;
oi
(STRUCT TNODE *) P
i?aia?acoao aai a au?aaeaieyo a oeacaoaeue ia no?oeoo?o oeia TNODE .
Neaaeiaaoaeueii, ooieoeeth TALLOC iiaeii caienaoue a aeaea:
STRUCT TNODE *TALLOC()
(
CHAR *ALLOC();
RETURN ((STRUCT TNODE *) ALLOC(SIZEOF(STRUCT TNODE)));
)
yoi aieaa /ai aeinoaoi/ii aeey ?aaioathueo a ianoiyuaa a?aiy
eiiieeyoi?ia, ii yoi e naiue aaciianiue iooue n o/aoii aoaeoth-
uaai.
Oi?aaeiaiea 6-4.
Iaieoeoa i?ia?aiio, eioi?ay /eoaao “C”-i?ia?aiio e ia/a-
oaao a aeoaaeoiii ii?yaeea eaaeaeoth a?oiio eiai ia?aiaiiuo, ei-
oi?ua niaiaaeatho a ia?auo naie neiaieao, ii ioee/athony aaea-oi
aeaeueoa. (Naeaeaeoa oae, /oiau 7 auei ia?aiao?ii).
Oi?aaeiaiea 6-5.
Iaieoeoa i?ia?aiio auaea/e ia?ae?anoiuo nnueie, o.a.
I?ia?aiio, eioi?ay ia/aoaao nienie anao neia aeieoiaioa e aeey
eaaeaeiai ec yoeo neia ia/aoaao nienie iiia?ia no?ie, a eioi-
?ua yoi neiai aoiaeeo.
Oi?aaeiaiea 6-6.
Iaieoeoa i?ia?aiio, eioi?ay ia/aoaao neiaa ec naiaai
oaeea aaiaea, ?aniieiaeaiiua a ii?yaeea oauaaiey /anoiou eo ii-
yaeaiey. Ia?aae eaaeaeui neiaii iaia/aoaeoa /enei aai iiyaea-
iee.
· 143 –
6.6. Iiene a oaaeeoea.
Aeey eeethno?aoeee aeaeueiaeoeo aniaeoia eniieueciaaiey no?oe-
oo? a yoii ?acaeaea iu iaieoai i?ia?aiio, i?aaenoaaeythuoth ni-
aie niaea?aeeiia iaeaoa iienea a oaaeeoea. Yoa i?ia?aiia yaey-
aony oeie/iui i?aaenoaaeoaeai iiaei?ia?aii oi?aaeaiey neiaieue-
iuie oaaeeoeaie iae?ii?ioeanni?a eee eiiieeyoi?a. ?anniio?ei,
iai?eia?, iia?aoi? #DEFINE ycuea “C”. Eiaaea ano?a/aaony
no?iea aeaea
#DEFINE YES 1
oi eiy YES e caiaiythuee oaeno 1 iiiauathony a oaaeeoeo. Iicae-
iaa, eiaaea eiy YES iiyaeyaony a iia?aoi?a aeaea
INWORD = YES;
Oii aeieaeii auoue caiauaii ia 1.
Eiathony aeaa iniiaiua i?ioeaaeo?u, eioi?ua oi?aaeytho eiaia-
ie e caiaiythueie eo oaenoaie. Ooieoeey INSTALL(S,T) caienuaa-
ao eiy S e caiaiythuee oaeno T a oaaeeoeo; caeanue S e T i?inoi
neiaieueiua no?iee. Ooieoeey LOOKUP(S) euao eiy S a oaaeeoea e
aica?auaao eeai oeacaoaeue oiai ianoa, aaea yoi eiy iaeaeaii,
eeai NULL, anee yoiai eiaie a oaaeeoea ia ieacaeinue.
I?e yoii eniieuecoaony iiene ii aeai?eoio oaoe?iaaiey –
iinooiathuaa eiy i?aia?acoaony a iaeaiueeia iieiaeeoaeueiia /en-
ei, eioi?ia caoai eniieuecoaony aeey eiaeaenaoeee ianneaa oeaca-
oaeae. Yeaiaio ianneaa oeacuaaao ia ia/aei oeaii/iuo aeieia,
iienuaathueo eiaia, eioi?ua eiatho yoi cia/aiea oaoe?iaaiey.
Anee ieeaeea eiaia i?e oaoe?iaaiee ia iieo/atho yoiai cia/a-
iey, oi yeaiaioii ianneaa aoaeao NULL.
Aeieii oeaie yaeyaony no?oeoo?a, niaea?aeauay oeacaoaee ia
niioaaonoaothuaa eiy, ia caiaiythuee oaeno e ia neaaeothuee aeie
a oeaie. Ioeaaie oeacaoaeue neaaeothuaai aeiea neoaeeo i?eciaeii
eiioea aeaiiie oeaie.
STRUCT NLIST ( /* BASIC TABLE ENTRY */
CHAR *NAME;
CHAR *DEF;
STRUCT NLIST NEXT; / NEXT ENTRY IN CHAIN */
);
Iannea oeacaoaeae yoi i?inoi
DEFINE HASHSIZE 100
TATIC STRUCT NLIST HASHTAB[HASHSIZE] / POINTER TABLE */
Cia/aiea ooieoeee oaoe?iaaiey, eniieuecoaiie iaaeie ooie-
oeeyie LOOKUP e INSTALL , iieo/aaony i?inoi eae inoaoie io
aeaeaiey noiiu neiaieueiuo cia/aiee no?iee ia ?acia? ianneaa.
(Yoi ia naiue eo/oee aiciiaeiue aeai?eoi, ii aai aeinoieinoai
ninoieo a eneeth/eoaeueiie i?inoioa).
· 144 –
HASH(S) /* FORM HASH VALUE FOR STRING */
CHAR *S;
(
INT HASHVAL;
FOR (HASHVAL = 0; *S != ‘0’; )
HASHVAL += *S++;
RETURN(HASHVAL % HASHSIZE);
)
A ?acoeueoaoa i?ioeanna oaoe?iaaiey auaeaaony ia/aeueiue ei-
aeaen a ianneaa HASHTAB ; anee aeaiiay no?iea iiaeao auoue
aaea-oi iaeaeaia, oi eiaiii a oeaie aeieia, ia/aei eioi?ie oea-
caii oai. Iiene inouanoaeyaony ooieoeeae LOOKUP. Anee ooieoeey
LOOKUP iaoiaeeo, /oi aeaiiue yeaiaio oaea i?enoonoaoao, oi iia
aica?auaao oeacaoaeue ia iaai; anee iao, oi iia aica?auaao
NULL.
STRUCT NLIST LOOKUP(S) / LOOK FOR S IN HASHTAB */
CHAR *S;
(
STRUCT NLIST *NP;
FOR (NP = HASHTAB[HASH(S)]; NP != NULL;NP=NP->NEXT)
IF (STRCMP(S, NP->NAME) == 0)
RETURN(NP); /* FOUND IT */
RETURN(NULL); /* NOT FOUND */
Ooieoeey INSTALL eniieuecoao ooieoeeth LOOKUP aeey ii?aaeaea-
iey, ia i?enoonoaoao ee oaea aaiaeeiia a aeaiiue iiiaio eiy;
anee yoi oae, oi iiaia ii?aaeaeaiea aeieaeii auoanieoue noa?ia.
A i?ioeaiii neo/aa nicaeaaony niaa?oaiii iiaue yeaiaio. Anee
ii eaeie-eeai i?e/eia aeey iiaiai yeaiaioa aieueoa iao ianoa,
oi ooieoeey INSTALL aica?auaao NULL.
STRUCT NLIST INSTALL(NAME, DEF) / PUT (NAME, DEF) */
CHAR *NAME, *DEF;
(
STRUCT NLIST *NP, *LOOKUP();
CHAR *STRSAVE(), *ALLOC();
INT HASHVAL;
IF((NP = LOOKUP(NAME)) == NULL) ( /* NOT FOUND */
NP = (STRUCT NLIST *) ALLOC(SIZEOF(*NP));
IF (NP == NULL)
RETURN(NULL);
IF ((NP->NAME = STRSAVE(NAME)) == NULL)
RETURN(NULL);
HASHVAL = HASH(NP->NAME);
NP->NEXT = HASHTAB[HASHVAL];
HASHTAB[HASHVAL] = NP;
) ELSE /* ALREADY THERE */
FREE((NP->DEF);/* FREE PREVIOUS DEFINITION */
IF ((NP->DEF = STRSAVE(DEF)) == NULL)
RETURN (NULL);
RETURN(NP);
)
· 145 –
Ooieoeey STRSAVE i?inoi eiie?oao no?ieo, oeacaiioth a ea-
/anoaa a?aoiaioa, a ianoi o?aiaiey, iieo/aiiia a ?acoeueoaoa
ia?auaiey e ooieoeee ALLOC. Iu oaea i?eaaee yoo ooieoeeth a aea-
aa 5. Oae eae ia?auaiea e ooieoeee ALLOC e FREE iiaoo i?ien-
oiaeeoue a ethaii ii?yaeea e a nayce n i?iaeaiie au?aaieaaiey,
i?inoie aa?eaio ooieoeee ALLOC ec aeaau 5 iai aieueoa ia iiae-
oiaeeo; niio?eoa aeaau 7 e 8.
Oi?aaeiaiea 6-7.
Iaieoeoa i?ioeaaeo?o, eioi?ay aoaeao oaeaeyoue eiy e ii?aaea-
eaiea ec oaaeeoeu, oi?aaeyaiie ooieoeeyie LOOKUP e INSTALL.
Oi?aaeiaiea 6-8.
?ac?aaioaeoa i?inooth, iniiaaiioth ia ooieoeeyo yoiai ?ac-
aeaea, aa?neth i?ioeanni?a aeey ia?aaioee eiino?oeoeee #DEFINE ,
i?eaiaeioth aeey eniieueciaaiey n “C”-i?ia?aiiaie. Aai iiaoo
oaeaea ieacaoueny iieaciuie ooieoeee GETCHAR e UNGETCH.
6.7. Iiey.
Eiaaea aii?in yeiiiiee iaiyoe noaiiaeony i/aiue nouanoaai-
iui, oi iiaeao ieacaoueny iaiaoiaeeiui iiiauaoue a iaeii iaoeiiia
neiai ianeieueei ?acee/iuo iauaeoia; iaeii ec iniaaiii ?ani-
?in?aiaiiuo oiio?aaeaiee – iaai? iaeiiaeoiauo i?eciaeia a
i?eiaiaieyo, iiaeiaiuo neiaieueiui oaaeeoeai eiiieeyoi?a. aiao-
ia iaoneiaeaiiua oi?iaou aeaiiuo, oaeea eae eioa?oaenu aiia-
?aoiuo n?aaenoa oaeaea ca/anooth i?aaeiieaaatho aiciiaeiinoue iieo-
/aiey neiaa ii /anoyi.
I?aaenoaaueoa naaa o?aaiaio eiiieeyoi?a, eioi?ue ?aaioaao
n neiaieueiie oaaeeoeae. N eaaeaeui eaeaioeoeeaoi?ii i?ia?aiiu
naycaia ii?aaeaeaiiay eioi?iaoeey, iai?eia?, yaeyaony ii eee
iao eeth/aaui neiaii, yaeyaony ee ii eee iao aiaoiei e/eee
noaoe/aneei e o.ae. Naiue eiiiaeoiue niinia caeiaee?iaaoue oa-
eoth eioi?iaoeeth – iiianoeoue iaai? iaeiiaeoiauo i?eciaeia a io-
aeaeueioth ia?aiaiioth oeia CHAR eee INT.
Iau/iue niinia, eioi?ui yoi aeaeaaony, ninoieo a ii?aaea-
eaiee iaai?a “ianie”, ioaa/athueo niioaaonoaouei aeoiaui ii-
ceoeeyi, eae a
#DEFINE KEYWORD 01
#DEFINE EXTERNAL 02
#DEFINE STATIC 04
(/enea aeieaeiu auoue noaiaiyie aeaieee). Oiaaea ia?aaioea aeoia
naaaeaony e “aeiiaee?iaaieth aeoaie” n iiiiuueth iia?aoeee naeaeaa,
ianee?iaaiey e aeiiieiaiey, iienaiiuo iaie a aeaaa 2.
Iaeioi?ua /anoi ano?a/athueany eaeeiiu:
FLAGS != EXTERNAL ! STATIC;
aeeth/aao aeou EXTERNAL e STATIC a FLAGS, a oi a?aiy eae
FLAGS &= ^(aXTERNAL ! STATIC);
· 146 –
eo aueeth/aao, a
IF ((FLAGS & (EXTERNAL ! STATIC)) == 0) …
enoeiii, anee iaa aeoa aueeth/aiu.
Oioy yoeie eaeeiiaie eaaei iaeaaeaoue, ycue “C” a ea/anoaa
aeueoa?iaoeau i?aaeeaaaao aiciiaeiinoue ii?aaeaeaiey e ia?aaioee
iieae aioo?e neiaa iaiin?aaenoaaiii, a ia iin?aaenoaii iiaeoi-
auo eiae/aneeo iia?aoeee. Iiea – yoi iaai? niaaeiuo aeoia
aioo?e iaeiie ia?aiaiiie oeia INT. Neioaenen ii?aaeaeaiey e
ia?aaioee iieae iniiauaaaony ia no?oeoo?ao. Iai?eia?, nei-
aieueioth oaaeeoeo eiino?oeoeee #DEFINE, i?eaaaeaiioth auoa, iiaeii
au auei caiaieoue ii?aaeaeaieai o?ao iieae:
STRUCT (
UNSIGNED IS_KEYWORD : 1;
UNSIGNED IS_EXTERN : 1;
UNSIGNED IS_STATIC : 1;
) FLAGS;
Caeanue ii?aaeaeyaony ia?aiaiiay n eiaiai FLAGS, eioi?ay niaea?-
aeeo o?e 1-aeoiauo iiey. Neaaeothuaa ca aeaiaoi/eai /enei caaeaao
oe?eio iiey a aeoao. Iiey iienaiu eae UNSIGNED, /oiau iiae-
/a?eiooue, /oi iie aeaenoaeoaeueii aoaeoo aaee/eiaie aac ciaea.
Ia ioaeaeueiua iiey iiaeii nnueaoueny, eae FLAGS.IS_STATIE,
FLAGS. IS_EXTERN, FLAGS.IS_KEYWORD E o.ae., oi anoue oi/ii oae
aea, eae ia ae?oaea /eaiu no?oeoo?u. Iiey aaaeoo naay iiaeiaii
iaaieueoei oeaeui aac ciaea e iiaoo o/anoaiaaoue a a?eoiaoe/an-
eeo au?aaeaieyo oi/ii oae aea, eae e ae?oaea oeaeua. Oaeei ia?a-
cii, i?aaeuaeouea i?eia?u aieaa anoanoaaiii ia?aienaoue oae:
FLAGS.IS_EXTERN = FLAGS.IS_STATIC = 1;
aeey aeeth/aiey aeoia;
FLAGS.IS_EXTERN = FLAGS.IS_STATIC = 0;
aeey aueeth/aiey aeoia;
IF (FLAGS.IS_EXTERN == 0 &&FLAGS.IS_STATIC == 0)…
aeey eo i?iaa?ee.
Iiea ia iiaeao ia?ae?uaaoue a?aieoeo INT; anee oeacaiiay
oe?eia oaeiaa, /oi yoi aeieaeii neo/eoueny, oi iiea au?aaieaa-
aony ii a?aieoea neaaeothuaai INT. Iieyi iiaeii ia i?enaaeaaoue
eiaia; iaeiaiiaaiiua iiey (oieueei aeaiaoi/ea e oe?eia) en-
iieuecothony aeey caiieiaiey naiaiaeiiai ianoa. *oiau auioaeeoue
au?aaieaaiea ia a?aieoeo neaaeothuaai INT, iiaeii eniieueciaaoue
niaoeeaeueioth oe?eio 0.
· 147 –
I?e ?aaioa n iieyie eiaaony ?yae iiiaioia, ia eioi?ua
neaaeoao ia?aoeoue aieiaiea. Ii-aeaeeiiio iaeaieaa nouanoaaiiui
yaeyaony oi, /oi io?aaeay i?e?iaeo ?acee/iuo aiia?aoiuo n?aae-
noa, ?ani?aaeaeaiea iieae ia iaeioi?uo iaoeiao inouanoaeyaony
neaaa iai?aai, a ia iaeioi?uo ni?aaa iaeaai. Yoi icia/aao,
/oi oioy iiey i/aiue iieaciu aeey ?aaiou n aioo?aiia ii?aaea-
eaiiuie no?oeoo?aie aeaiiuo, i?e ?acaeaeaiee aiaoia ii?aaeaeya-
iuo aeaiiuo neaaeoao ouaoaeueii ?anniao?eaaoue aii?in i oii, ea-
eie eiiaoe iinooiaao ia?aui.
Ae?oaea ia?aie/aiey, eioi?ua neaaeoao eiaoue a aeaeo: iiey
ia eiatho ciaea; iie iiaoo o?aieoueny oieueei a ia?aiaiiuo oeia
INT (eee, /oi yeaeaaeaioii, oeia UNSIGNED); iie ia yaeythony
ianneaaie; iie ia eiatho aae?ania, oae /oi e iei ia i?eiaieia
iia?aoeey &.
6.8. Iauaaeeiaiey.
Oauaaeeiaiey – yoi ia?aiaiiay, eioi?ay a ?acee/iua iiiai-
ou a?aiaie iiaeao niaea?aeaoue iauaeou ?aciuo oeiia e ?acia?ia,
i?e/ai eiiieeyoi? aa?ao ia naay ioneaaeeaaiea ?acia?a e o?a-
aiaaiee au?aaieaaiey. Iauaaeeiaiey i?aaenoaaeytho aiciiaeiinoue
?aaioaoue n ?acee/iuie aeaeaie aeaiiuo a iaeiie iaeanoe iaiyoe,
ia aaiaey a i?ia?aiio ieeaeie iaoeiii-caaeneiie eioi?iaoeee.
A ea/anoaa i?eia?a, niiaa ec neiaieueiie oaaeeoeu eiiieey-
oi?a, i?aaeiieiaeei, /oi eiinoaiou iiaoo auoue oeia INT , FLOAT
eee auoue oeacaoaeyie ia neiaieu. cia/aiea eaaeaeie eiie?aoiie
eiinoaiou aeieaeii o?aieoueny a ia?aiaiiie niioaanoaothuaai oe-
ia, ii ana aea aeey oi?aaeaiey oaaeeoeae naiui oaeiaiui auei au,
anee yoi cia/aiea caieiaei au iaeei e oio aea iauai iaiyoe e
o?aieeinue a oii aea naiii ianoa iacaaeneii io aai oeia. yoi e
yaeyaony iacia/aieai iauaaeeiaiey – auaeaeeoue ioaeaeueioth ia?a-
iaiioth, a eioi?ie iiaeii caeiiii o?aieoue ethaoth iaeio ec ia?a-
iaiiuo ianeieueeeo oeiia. Eae e a neo/aa iieae, neioaenen in-
iiauaaaony ia no?oeoo?ao.
UNION U_TAG (
INT IVAL;
FLOAT FVAL;
CHAR *PVAL;
) UVAL;
Ia?aiaiiay UVAL aoaeao eiaoue aeinoaoi/ii aieueoie ?acia?,/oiau
o?aieoue iaeaieueoee ec o?ao oeiia, iacaaeneii io iaoeiu, ia
eioi?ie inouanoaeyaony eiiieeyoeey, – i?ia?aiia ia aoaeao ca-
aeneoue io oa?aeoa?enoee aiia?aoiuo n?aaenoa. Ethaie ec yoeo
o?ao oeiia iiaeao auoue i?enaiai UVAR e caoai eniieueciaai a
au?aaeaieyo, iiea oaeia eniieueciaaiea niaianoeii: ecaeaeaaiue
oei aeieaeai niaiaaeaoue n iineaaeiei iiiauaiiui oeiii. Aeaei
i?ia?aiienoa – neaaeeoue ca oai, eaeie oei o?aieony a iauaaee-
iaiee a aeaiiue iiiaio; anee /oi-eeai o?aieony eae iaeei oei,
a ecaeaeaaony eae ae?oaie, oi ?acoeueoaou aoaeoo caaenaoue io
eniieuecoaiie iaoeiu.
· 149 –
Neioaene/anee aeinooi e /eaiai iauaaeeiaiey inouanoaeyaony
neaaeothuei ia?acii:
eiy iauaaeeiaiey./eai
eee
oeacaoaeue iauaaeeiaiey ->/eai
oi anoue oi/ii oae aea, eae e a neo/aa no?oeoo?. anee aeey ion-
eaaeeaaiey oeia, o?aieiiai a aeaiiue iiiaio a UVAL, eniieueco-
aony ia?aiaiiay UTYPE, oi iiaeii ano?aoeoue oaeie o/anoie
i?ia?aiiu:
IF (UTYPE == INT)
PRINTF(“%DN”, UVAL.IVAL);
ELSE IF (UTYPE == FLOAT)
PRINTF(“%FN”, UVAL.FVAL);
ELSE IF (UTYPE == STRING)
PRINTF(“%SN”, UVAL.PVAL);
ELSE
PRINTF(“BAD TYPE %D IN UTYPEN”, UTYPE);
Iauaaeeiaiey iiaoo iiyaeyoueny aioo?e no?oeoo? e ianneaia
e iaiai?io. Caienue aeey ia?auaiey e /eaio iauaaeeiaiey a
no?oeoo?a (eee iaiai?io) niaa?oaiii eaeaioe/ia oie, eioi?ay
eniieuecoaony ai aeiaeaiiuo no?oeoo?ao. iai?eia?, a ianneaa
no?oeoo?, ii?aaeaeaiiui neaaeothuei ia?acii
STRUCT (
CHAR *NAME;
INT FLAGS;
INT UTYPE;
UNION (
INT IVAL;
FLOAT FVAL;
CHAR *PVAL;
) UVAL;
) SYMTAB[NSYM];
ia ia?aiaiioth IVAL iiaeii nineaoueny eae
SYMTAB[I].UVAL.IVAL
a ia ia?aue neiaie no?iee PVAL eae
*SYMTAB[I].UVAL.PVAL
A nouiinoe iauaaeeiaiea yaeyaony no?oeoo?ie, a eioi?ie ana
/eaiu eiatho ioeaaia niauaiea. Naia no?oeoo?a aeinoaoi/ii aa-
eeea, /oiau o?aieoue “naiue oe?ieee” /eai, e au?aaieaaiea
i?eaiaeii aeey anao oeiia, aoiaeyueo a iauaaeeiaiea. Eae e a
neo/aa no?oeoo?, aaeeinoaaiiuie iia?aoeeyie, eioi?ua a ianoiy-
uaa a?aiy iiaeii i?iaiaeeoue n iauaaeeiaieyie, yaeythony aeinooi e
· 150 –
/eaio e ecaea/aiea aae?ana; iauaaeeiaiey ia iiaoo auoue i?enai-
aiu, ia?aaeaiu ooieoeeyi eee aica?auaiu eie. oeacaoaee iauaaee-
iaiee iiaeii eniieueciaaoue a oi/ii oaeie aea iaia?a, eae e oea-
caoaee no?oeoo?.
I?ia?aiia ?ani?aaeaeaiey iaiyoe, i?eaiaeeiay a aeaaa 8 ,
iieacuaaao, eae iiaeii eniieueciaaoue iauaaeeiaiea, /oiau naea-
eaoue iaeioi?oth ia?aiaiioth au?iaiaiiie ii ii?aaeaeaiiiio aeaeo
a?aieoeu iaiyoe.
6.9. Ii?aaeaeaiea oeia
A ycuea “C” i?aaeoniio?aia aiciiaeiinoue, iacuaaaiay TYPEDEF
aeey aaaaeaiey iiauo eiai aeey oeiia aeaiiuo. Iai?eia?, iienaiea
TYPEDEF INT LENGTH;
aeaeaao eiy LENGTH neiiieiii aeey INT. “Oei” LENGTH iiaeao auoue
eniieueciaai a iienaieyo, ia?aaiaeia oeiia e o.ae. Oi/ii oaeei aea
ia?acii, eae e oei INT:
LENGTH LEN, MAXLEN;
LENGTH *LENGTHS[];
Aiaeiae/ii iienaieth
TYPEDEF CHAR *STRING;
aeaeaao STRING neiiieiii aeey CHAR*, oi anoue aeey oeacaoaey ia
neiaieu, /oi caoai iiaeii eniieueciaaoue a iienaieyo aeaea
STRING P, LINEPTR[LINES], ALLOC();
Ia?aoeoa aieiaiea, /oi iauyaeyaiue a eiino?oeoeee TYPEDEF
oei iiyaeyaony a iiceoeee eiaie ia?aiaiiie, a ia n?aco ca
neiaii TYPEDEF. Neioaene/anee eiino?oeoeey TYPEDEF iiaeiaia
iienaieyi eeanna iaiyoe EXTERN, STATIC e o. Ae. iu oaeaea en-
iieueciaaee i?iieniua aoeau, /oiau yniaa auaeaeeoue eiaia.
A ea/anoaa aieaa neiaeiiai i?eia?a iu eniieuecoai eiino-
?oeoeeth TYPEDEF aeey iienaiey oceia aea?aaa, ?anniio?aiiuo ?a-
iaa a yoie aeaaa:
TYPEDEF STRUCT TNODE ( /* THE BASIC NODE */
CHAR WORD; / POINTS TO THE TEXT */
INT COUNT; /* NUMBER OF OCCURRENCES */
STRUCT TNODE LEFT; / LEFT CHILD */
STRUCT TNODE RIGHT; / RIGHT CHILD */
) TREENODE, *TREEPTR;
A ?acoeueoaoa iieo/aai aeaa iiauo eeth/aauo neiaa: TREENODE
(no?oeoo?a) e TREEPTR (oeacaoaeue ia no?oeoo?o). Oiaaea ooie-
oeeth TALLOC iiaeii caienaoue a aeaea
· 151 –
TREEPTR TALLOC()
(
CHAR *ALLOC();
RETURN((TREEPTR) ALLOC(SIZEOF(TREENODE)));
)
Iaiaoiaeeii iiae/a?eiooue, /oi iienaiea TYPEDEF ia i?eaiaeeo
e nicaeaieth iiaiai a eaeii-eeai niunea oeia; iii oieueei aei-
aaaeyao iiaia eiy aeey iaeioi?iai nouanoaothuaai oeia. i?e
yoii ia aicieeaao e ieeaeie iiaie naiaioeee: iienaiiua oaeei
niiniaii ia?aiaiiua iaeaaeatho oi/ii oaie aea naienoaaie, /oi e
ia?aiaiiua, iienaiiua yaiui ia?acii. Ii nouanoao eiino?oeoeey
TYPEDEF noiaeia n #DEFINE ca eneeth/aieai oiai, /oi iia eioa?-
i?aoe?oaony eiiieeyoi?ii e iioiio iiaeao inouanoaeyoue iiaenoa-
iiaee oaenoa, eioi?ua auoiaeyo ca i?aaeaeu aiciiaeiinoae iae-
?ii?ioeanni?a ycuea “C”. Iai?eia?,
TYPEDEF INT (*PFI) ();
nicaeaao oei PFI aeey “oeacaoaey ooieoeee, aica?auathuae cia/a-
iea oeia INT”, eioi?ue caoai iiaeii auei au eniieueciaaoue a
i?ia?aiia ni?oe?iaee ec aeaau 5 a eiioaenoa aeaea
PFI STRCMP, NUMCMP, SWAP;
Eiathony aeaa iniiaiua i?e/eiu i?eiaiaiey iienaiee
TYPEDEF. Ia?aay i?e/eia naycaia n ia?aiao?ecaoeeae i?ia?aiiu,
/oiau iaeaa/eoue ?aoaiea i?iaeaiu ia?aiineiinoe. Anee aeey oe-
iia aeaiiuo, eioi?ua iiaoo auoue iaoeiii-caaeneiuie, eniieueci-
aaoue iienaiea TYPEDEF, oi i?e ia?aiina i?ia?aiiu ia ae?oaoth
iaoeio i?eaeaony eciaieoue oieueei yoe iienaiey. Iaeia ec oeie/-
iuo neooaoeee ninoieo a eniieueciaaiee ii?aaeaeyaiuo n iiiiuueth
TYPEDEF eiai aeey ?acee/iuo oeaeuo aaee/ei e a iineaaeothuai
iiaeoiaeyuai auai?a oeiia SHORT, INT e LONG aeey eaaeaeie eiath-
uaeny iaoeiu.
Aoi?ia iacia/aiea TYPEDEF ninoieo a iaania/aiee eo/oae aeieo-
iaioaoeee aeey i?ia?aiiu – oei n eiaiai TREEPTR iiaeao ieacaoue-
ny aieaa oaeiaiui aeey aini?eyoey, /ai oei, eioi?ue iienai
oieueei eae oeacaoaeue neiaeiie no?oeoo?u.
E iaeiiaoe, anaaaea nouanoaoao aa?iyoiinoue, /oi a aoaeouai eii-
ieeyoi? eee iaeioi?ay ae?oaay i?ia?aiia, oaeay eae LINT, nii-
aeao eniieueciaaoue niaea?aeauothny a iienaieyo TYPEDEF eioi?iaoeeth
aeey i?iaaaeaiey iaeioi?ie aeiiieieoaeueiie i?iaa?ee i?ia?aiiu.
· 152 –
7. Aaiae e auaiae
N?aaenoaa aaiaea/auaiaea ia yaeythony ninoaaiie /anoueth ycuea
“n”, oae /oi iu ia auaeaeyee eo a iaoai i?aaeuaeouai eceiaeaiee.
Iaeiaei ?aaeueiua i?ia?aiiu acaeiiaeaenoaotho ni naiae ie?oaeath-
uae n?aaeie ai?acaei aieaa neiaeiui ia?acii, /ai iu aeaeaee aei
neo ii?. A yoie aeaaa aoaeao iienaia “noaiaea?oiay aeaeeioaea
aaiaea/auaiaea”, oi anoue iaai? ooieoeee, ?ac?aaioaiiuo aeey
iaania/aiey noaiaea?oiie nenoaiu aaiaea/auaiaea aeey “n”- i?ia-
?aii. Yoe ooieoeee i?aaeiacia/aiu aeey oaeianoaa i?ia?aiiiiai
eioa?oaena, e ana aea io?aaeatho oieueei oa iia?aoeee, eioi?ua
iiaoo auoue iaania/aiu ia aieueoeinoaa nia?aiaiiuo iia?aoeeii-
iuo nenoai. I?ioeaaeo?u aeinoaoi/ii yooaeoeaiu aeey oiai, /oiau
iieueciaaoaee ?aaeei /oanoaiaaee iaiaoiaeeiinoue iaieoe eo “?aaee
yooaeoeaiinoe”, eae au ie auea aaaeia eiie?aoiay caaea/a. E,
iaeiiaoe, yoe i?ioeaaeo?u caaeoiaiu auoue “ia?aiineiuie” a oii
niunea, /oi iie aeieaeiu nouanoaiaaoue a niaianoeiii aeaea ia
ethaie nenoaia, aaea eiaaony ycue “n”, e /oi i?ia?aiiu, eioi-
?ua ia?aie/eaatho naie acaeiiaeaenoaey n nenoaiie aiciiaeiinoy-
ie, i?aaeinoaaeyaiuie noaiaea?oiie aeaeeioaeie, iiaeii aoaeao
ia?aiineoue n iaeiie nenoaiu ia ae?oaoth ii nouanoao aac eciaia-
iee.
Iu caeanue ia aoaeai iuoaoueny iienaoue anth aeaeeioaeo aai-
aea/auaiaea; iu aieaa caeioa?aniaaiu a oii, /oiau i?iaeaiiino-
?e?iaaoue nouiinoue iaienaiey “n”-i?ia?aii, eioi?ua acaeiiaeae-
noaotho ni naiae iia?aoeeiiiie n?aaeie.
7.1. Ia?auaiea e noaiaea?oiie aeaeeioaea
Eaaeaeue enoiaeiue oaee, eioi?ue ia?auaaony e ooieoeee ec
noaiaea?oiie aeaeeioaee, aeieaeai aaeece ia/aea niaea?aeaoue no?i-
eo
#INCLUDE
a oaeea STDIO.H ii?aaeaeythony iaeioi?ua iae?inu e ia?aiaiiua,
eniieuecoaiua aeaeeioaeie aaiaea/auaiaea. Eniieueciaaiea oaeiauo
neiaie aianoi iau/iuo aeaieiuo eaau/ae – oeacaiea eiiieeyoi?o
eneaoue yoio oaee a ni?aai/ieea, niaea?aeauai caaieiaee noai-
aea?oiie eioi?iaoeee (ia nenoaia UNIX iau/ii LUSRLINELUDE).
E?iia oiai, i?e caa?ocea i?ia?aiiu iiaeao ieacaoueny iaia-
oiaeeiui oeacaoue aeaeeioaeo yaii; ia nenoaia PDP-11 UNIX,
iai?eia?, eiiaiaea eiiieeyoeee i?ia?aiiu eiaea au aeae:
CC enoiaeiua oaeeu e o.ae. -LS
aaea -LS oeacuaaao ia caa?oceo ec noaiaea?oiie aeaeeioaee.
7.2. Noaiaea?oiue aaiae e auaiae – ooieoeee GETCHAR e
PUTCHAR
Naiue i?inoie iaoaieci aaiaea caeeth/aaony a /oaiee ii iae-
iiio neiaieo ca ?ac ec “noaiaea?oiiai aaiaea”, iau/ii n oa?ie-
iaea iieueciaaoaey, n iiiiuueth ooieoeee GETCHAR. Ooieoeey
GETCHAR() i?e eaaeaeii e iae ia?auaiee aica?auaao neaaeothuee
· 153 –
aaiaeeiue neiaie. A aieueoeinoaa n?aae, eioi?ua iiaeaea?aeeaatho
ycue “n”, oa?ieiae iiaeao auoue caiaiai iaeioi?ui oaeeii n ii-
iiuueth iaicia/aiey : anee PROG eniieuecoao PUTCHAR,
oi eiiaiaeiay no?iea
PROG>OUTFILE
i?eaaaeao e caiene noaiaea?oiiai auaiaea a oaee OUTFILE, a ia
ia oa?ieiae. Ia nenoaia UNIX iiaeii oaeaea eniieueciaaoue iioi/-
iue iaoaieci. No?iea
PROG ! ANOTHERPROG
iiiauaao noaiaea?oiue auaiae PROG a noaiaea?oiue aaiae ANOTHERPROG. E
iiyoue PROG ia aoaeao inaaaeiieaia ia eciaiaiee iai?aaeaiey.
Auaiae, inouanoaeyaiue ooieoeeae PRINTF, oaeaea iinooiaao a
noaiaea?oiue auaiae, e ia?auaiey e PUTCHAR e PRINTF iiaoo ia-
?aiaaeaoueny.
Ii?aceoaeueiia eiee/anoai i?ia?aii /eoaao oieueei ec iaeii-
ai aoiaeiiai iioiea e ieoao oieueei a iaeei auoiaeiie iioie; aeey
oaeeo i?ia?aii aaiae e auaiae n iiiiuueth ooieoeee GETCHAR,
PUTCHAR e PRINTF iiaeao ieacaoueny aiieia aaeaeaaoiui e aeey ia-
/aea ii?aaeaeaiii aeinoaoi/iui. Yoi iniaaiii ni?aaaaeeeai oia-
· 154 –
aea, eiaaea eiaaony aiciiaeiinoue oeacaiey oaeeia aeey aaiaea e
auaiaea e iioi/iue iaoaieci aeey nayce auaiaea iaeiie i?ia?aiiu
n aaiaeii ae?oaie. ?anniio?ei, iai?eia?, i?ia?aiio LOWER, ei-
oi?ay i?aia?acoao i?iieniua aoeau ec naiaai aaiaea a no?i/-
iua:
#INCLUDE
MAIN() /* CONVERT INPUT TO LOWER CASE */
(
INT C;
WHILE ((C = GETCHAR()) != EOF)
PUTCHAR(ISUPPER© ? TOLOWER© : C);
)
“Ooieoeee” ISUPPER e TOLOWER ia naiii aeaea yaeythony iae?ina-
ie, ii?aaeaeaiiuie a STDIO.H . Iae?in ISUPPER i?iaa?yao, ya-
eyaony ee aai a?aoiaio aoeaie ec aa?oiaai ?aaeno?a, e aica-
?auaao iaioeaaia cia/aiea, anee yoi oae, e ioeue a i?ioeaiii
neo/aa. Iae?in TOLOWER i?aia?acoao aoeao ec aa?oiaai ?aaeno-
?a a oo aea aoeao ieaeiaai ?aaeno?a. Iacaaeneii io oiai, eae
yoe ooieoeee ?aaeeciaaiu ia eiie?aoiie iaoeia, eo aiaoiaa ii-
aaaeaiea niaa?oaiii iaeeiaeiai, oae /oi eniieuecothuea eo i?ia-
?aiiu ecaaaeaiu io ciaiey neiaieueiiai iaai?a.
Anee o?aaoaony i?aia?aciaaoue ianeieueei oaeeia, oi iiaeii
nia?aoue yoe oaeeu n iiiiuueth i?ia?aiiu, iiaeiaiie ooeeeoa CAT
nenoaiu UNIX,
CAT FILE1 FILE2 … ! LOWER>OUTPUT
e ecaaaeaoue oai naiui aii?ina i oii, eae ia?aoeoueny e yoei
oaeeai ec i?ia?aiiu. (I?ia?aiia CAT i?eaiaeeony iicaea a yoie
aeaaa).
E?iia oiai ioiaoei, /oi a noaiaea?oiie aeaeeioaea aai-
aea/auaiaea “ooieoeee” GETCHAR e PUTCHAR ia naiii aeaea iiaoo
auoue iae?inaie. Yoi iicaieyao ecaaaeaoue iaeeaaeiuo ?anoiaeia ia
ia?auaiea e ooieoeee aeey ia?aaioee eaaeaeiai neiaiea. A aeaaa 8
iu i?iaeaiiino?e?oai, eae yoi aeaeaaony.
7.3. Oi?iaoiue auaiae – ooieoeey PRINTF
Aeaa ooieoeee: PRINTF aeey auaiaea e SCANF aeey aaiaea (neaaeo-
thuee ?acaeae) iicaieytho i?aia?aciauaaoue /eneaiiua aaee/eiu a
neiaieueiia i?aaenoaaeEiea e ia?aoii. Iie oaeaea iicaieytho aa-
ia?e?iaaoue e eioa?i?aoe?iaaoue oi?iaoiua no?iee. Iu oaea anthaeo
a i?aaeuaeoueo aeaaao iaoi?iaeueii eniieueciaaee ooieoeeth PRINTF;
caeanue i?eaiaeeony aieaa iieiia e oi/iia iienaiea. Ooieoeey
PRINTF(CONTROL, ARG1, ARG2, …)
· 155 –
i?aia?acoao, ii?aaeaeyao oi?iao e ia/aoaao naie a?aoiaiou a
noaiaea?oiue auaiae iiae oi?aaeaieai no?iee CONTROL. Oi?aaeyth-
uay no?iea niaea?aeeo aeaa oeia iauaeoia: iau/iua neiaieu, ei-
oi?ua i?inoi eiie?othony a auoiaeiie iioie, e niaoeeoeeaoeee
i?aia?aciaaiee, eaaeaeay ec eioi?uo aucuaaao i?aia?aciaaiea e
ia/aoue i/a?aaeiiai a?aoiaioa PRINTF.
Eaaeaeay niaoeeoeeaoeey i?aia?aciaaiey ia/eiaaony n neiaiea
% e caeai/eaaaony neiaieii i?aia?aciaaiey. Iaaeaeo % e neiai-
eii i?aia?aciaaiey iiaoo iaoiaeeoueny:
· ciae ieion, eioi?ue oeacuaaao i au?aaieaaiee i?aia?aciaai-
iiai a?aoiaioa ii eaaiio e?ath aai iiey.
· No?iea oeeo?, caaeathuay ieieiaeueioth oe?eio iiey. I?aia?aci-
aaiiia /enei aoaeao iaia/aoaii a iiea ii e?aeiae ia?a yoie
oe?eiu, a anee iaiaoiaeeii, oi e a aieaa oe?ieii. Anee i?a-
ia?aciaaiiue a?aoiaio eiaao iaiueoa neiaieia, /ai oeacaiiay
oe?eia iiey, oi ii aoaeao aeiiieiai neaaa (eee ni?aaa, anee
auei oeacaii au?aaieaaiea ii eaaiio e?ath)caiieiythueie nei-
aieaie aei yoie oe?eiu. Caiieiythuei neiaieii iau/ii yaeyao-
ny i?iaae, a anee oe?eia iiey oeacuaaaony n eeaee?othuei io-
eai, oi yoei neiaieii aoaeao ioeue (eeaee?othuee ioeue a aeaiiii
neo/aa ia icia/aao ainueia?e/iie oe?eiu iiey).
· Oi/ea, eioi?ay ioaeaeyao oe?eio iiey io neaaeothuae no?iee
oeeo?.
· No?iea oeeo? (oi/iinoue), eioi?ay oeacuaaao iaeneiaeueiia
/enei neiaieia no?iee, eioi?ua aeieaeiu auoue iaia/aoaiu, eee
/enei ia/aoaaiuo ni?aaa io aeanyoe/iie oi/ee oeeo? aeey ia?a-
iaiiuo oeia FLOAT eee DOUBLE.
· Iiaeeoeeaoi? aeeeiu L, eioi?ue oeacuaaao, /oi niioaaonoaoth-
uee yeaiaio aeaiiuo eiaao oei LONG, a ia INT.
Ieaea i?eaiaeyony neiaieu i?aia?aciaaiey e eo niune:
D – a?aoiaio i?aia?acoaony e aeanyoe/iiio aeaeo.
O – A?aoiaio i?aia?acoaony a aacciaeiaoth ainueia?e/ioth oi?io
(aac eeaee?othuaai ioey).
X – A?aoiaio i?aia?acoaony a aacciaeiaoth oanoiaaeoeaoa?e/ioth
oi?io (aac eeaee?othueo 0X).
U – A?aoiaio i?aia?acoaony a aacciaeiaoth aeanyoe/ioth oi?io.
C – A?aoiaio ?anniao?eaaaony eae ioaeaeueiue neiaie.
S – A?aoiaio yaeyaony no?ieie: neiaieu no?iee ia/aoathony aei
oao ii?, iiea ia aoaeao aeinoeaioo ioeaaie neiaie eee ia ao-
aeao iaia/aoaii eiee/anoai neiaieia, oeacaiiia a niaoeeoeea-
oeee oi/iinoe.
E – A?aoiaio, ?anniao?eaaaiue eae ia?aiaiiay oeia FLOAT eee
DOUBLE, i?aia?acoaony a aeanyoe/ioth oi?io a aeaea
[-]M.NNNNNNE[+-]XX, aaea aeeeia no?iee ec N ii?aaeaeyaony
oeacaiiie oi/iinoueth. Oi/iinoue ii oiie/aieth ?aaia 6.
F – A?aoiaio, ?anniao?eaaaiue eae ia?aiaiiay oeia FLOAT eee
DOUBLE, i?aia?acoaony a aeanyoe/ioth oi?io a aeaea
[-]MMM.NNNNN, aaea aeeeia no?iee ec N ii?aaeaeyaony oeacaiiie
oi/iinoueth. Oi/iinoue ii oiie/aieth ?aaia 6. ioiaoei, /oi yoa
oi/iinoue ia ii?aaeaeyao eiee/anoai ia/aoaaiuo a oi?iaoa F
cia/aueo oeeo?.
· 156 –
G – Eniieuecoaony eee oi?iao %E eee %F, eaeie ei?i/a; iacia-
/auea ioee ia ia/aoathony.
Anee eaeouee ca % neiaie ia yaeyaony neiaieii i?aia?aciaaiey,
oi ia/aoaaony nai yoio neiaie; neaaeiaaoaeueii,neiaie % iiaeii
iaia/aoaoue, oeacaa %%.
Aieueoeinoai ec oi?iaoiuo i?aia?aciaaiee i/aaeaeii e auei
i?ieeethno?e?iaaii a i?aaeuaeoueo aeaaao. Aaeeinoaaiiui eneeth/a-
ieai yaeyaony oi, eae oi/iinoue acaeiiaeaenoaoao ni no?ieaie.
Neaaeothuay oaaeeoea aeaiiino?e?oao aeeyiea caaeaiey ?acee/iuo
niaoeeoeeaoeee ia ia/aoue “HELLO, WORLD” (12 neiaieia). Iu ii-
ianoeee aeaiaoi/ey aie?oa eaaeaeiai iiey aeey oiai, /oiau au
iiaee aeaeaoue aai i?ioyaeaiiinoue.
:%10S: :HELLO, WORLD:
:%10-S: :HELLO, WORLD:
:%20S: : HELLO, WORLD:
:%-20S: :HELLO, WORLD :
:%20.10S: : HELLO, WOR:
:%-20.10S: :HELLO, WOR :
:%.10S: :HELLO, WOR:
I?aaeinoa?aaeaiea: PRINTF eniieuecoao naie ia?aue a?aoiaio
aeey ii?aaeaeaiey /enea iineaaeothueo a?aoiaioia e eo oeiia. An-
ee eiee/anoai a?aoiaioia ieaaeaony iaaeinoaoi/iui eee iie ao-
aeoo eiaoue ianiioaaonoaaiiua oeiu, oi aicieeiao iooaieoea e au
iieo/eoa aanniuneaiiua ?acoeueoaou.
Oi?aaeiaiea 7-1.
Iaieoeoa i?ia?aiio, eioi?ay aoaeao ia/aoaoue ?acoiiui ia-
?acii i?iecaieueiue aaiae. Eae ieieioi iia aeieaeia ia/aoaoue
iaa?aoe/aneea neiaieu a ainueia?e/iii eee oanoiaaeoeaoa?e/iii
aeaea (a niioaaonoaee n i?eiyouie o aan iau/ayie) e neeaaeu-
aaoue aeeeiiua no?iee.
7.4. Oi?iaoiue aaiae – ooieoeey SCANF
Inouanoaeythuay aaiae ooieoeey SCANF yaeyaony aiaeiaii
PRINTF e iicaieyao i?iaiaeeoue a ia?aoiii iai?aaeaiee iiiaea
ec oao aea naiuo i?aia?aciaaiee. Ooieoeey
SCANF(CONTROL, ARG1, ARG2, …)
/eoaao neiaieu ec noaiaea?oiiai aaiaea, eioa?i?aoe?oao eo a
niioaaonoaee n oi?iaoii, oeacaiiii a a?aoiaioa CONTROL, e
iiiauaao ?acoeueoaou a inoaeueiua a?aoiaiou. Oi?aaeythuee a?ao-
iaio iienuaaaony ieaea; ae?oaea a?aoiaiou, eaaeaeue ec eioi?uo
aeieaeai auoue oeacaoaeai, ii?aaeaeytho, eoaea neaaeoao iiianoeoue
niioaaonoaothuei ia?acii i?aia?aciaaiiue aaiae.
Oi?aaeythuay no?iea iau/ii niaea?aeeo niaoeeoeeaoeee i?aia?a-
ciaaiey, eioi?ua eniieuecothony aeey iaiin?aaenoaaiiie eioa?i?a-
oaoeee aoiaeiuo iineaaeiaaoaeueiinoae. Oi?aaeythuay no?iea iiaeao
niaea?aeaoue:
· i?iaaeu, oaaoeyoeee eee neiaieu iiaie no?iee (“neiaieu ion-
ouo i?iiaaeooeia”), eioi?ua eaii?e?othony.
· 157 –
· Iau/iua neiaieu (ia %), eioi?ua i?aaeiieaaathony niaiaaeathue-
ie ni neaaeothueie ioee/iuie io neiaieia ionouo i?iiaaeooeia
neiaieaie aoiaeiiai iioiea.
· Niaoeeoeeaoeee i?aia?aciaaiey, ninoiyuea ec neiaiea %, iai-
aycaoaeueiiai neiaiea iiaeaaeaiey i?enaaeaaiey *, iaiayca-
oaeueiiai /enea, caaeathuaai iaeneiaeueioth oe?eio iiey e nei-
aiea i?aia?aciaaiey.
Niaoeeoeeaoeey i?aia?aciaaiey oi?aaeyao i?aia?aciaaieai
neaaeothuaai iiey aaiaea. ii?iaeueii ?acoeueoao iiiauaaony a ia-
?aiaiioth, eioi?ay oeacuaaaony niioaaonoaothuei a?aoiaioii.
Anee, iaeiaei , n iiiiuueth neiaiea * oeacaii iiaeaaeaiea i?en-
aaeaaiey, oi yoi iiea aaiaea i?inoi i?iioneaaony e ieeaeiai
i?enaaeaaiey ia i?iecaiaeeony. Iiea aaiaea ii?aaeaeyaony eae
no?iea neiaieia, eioi?ua ioee/iu io neiaieia i?inouo i?iia-
aeooeia; iii i?iaeieaeaaony eeai aei neaaeothuaai neiaiea ionoiai
i?iiaaeooea, eeai iiea ia aoaeao en/a?iaia oe?eia iiey, anee
iia oeacaia. Ionthaea neaaeoao, /oi i?e iienea ioaeiiai ae aai-
aea, ooieoeey SCANF aoaeao ia?anaeaoue a?aieoeu no?ie, iineieueeo
neiaie iiaie no?iee aoiaeeo a /enei ionouo i?iiaaeooeia.
Neiaie i?aia?aciaaiey ii?aaeaeyao eioa?i?aoaoeeth iiey aai-
aea; niaeanii o?aaiaaieyi iniiaaiiie ia auciaa ii cia/aieth
naiaioeee ycuea “n” niioaaonoaothuee a?aoiaio aeieaeai auoue
oeacaoaeai. Aeiioneathony neaaeothuea neiaieu i?aia?aciaaiey:
D – ia aaiaea iaeeaeaaony aeanyoe/iia oeaeia; niioaaonoaothuee a?-
aoiaio aeieaeai auoue oeacaoaeai ia oeaeia.
O – Ia aaiaea iaeeaeaaony ainueia?e/iia oeaeia (n eeaee?othuei io-
eai eee aac iaai); niioaaonoaothuee a?aoiaio aeieaeai auoue
oeacaoaeai ia oeaeia.
X – Ia aaiaea iaeeaeaaony oanoiaaeoeaoa?e/iia oeaeia (n eeaee?othue-
ie 0X eee aac ieo); niioaaonoaothuee a?aoiaio aeieaeai auoue
oeacaoaeai ia oeaeia.
H – Ia aaiaea iaeeaeaaony oeaeia oeia SHORT; niioaaonaothuee a?-
aoiaio aeieaeai auoue oeacaoaeai ia oeaeia oeia SHORT.
C – Iaeeaeaaony ioaeaeueiue neiaie; niioaaonoaothuee a?aoiaio
aeieaeai auoue oeacaoaeai ia neiaieu; neaaeothuee aaiaeeiue
neiaie iiiauaaony a oeacaiiia ianoi. Iau/iue i?iione nei-
aieia ionouo i?iiaaeooeia a yoii neo/aa iiaeaaeyaony; aeey
/oaiey neaaeothuaai neiaiea, eioi?ue ia yaeyaony neiaieii
ionoiai i?iiaaeooea, iieuecoeoanue niaoeeoeeaoeeae i?aia?aci-
aaiey %1S.
S – Iaeeaeaaony neiaieueiay no?iea; niioaaonoaothuee a?aoiaio
aeieaeai auoue oeacaoaeai neiaieia, eioi?ue oeacuaaao ia
iannea neiaieia, eioi?ue aeinoaoi/ii aaeee aeey i?eiyoey
no?iee e aeiaaaeyaiiai a eiioea neiaiea 0.
F – Iaeeaeaaony /enei n ieaaathuae oi/eie; niioaaonoaothuee a?-
aoiaio aeieaeai auoue oeacaoaeai ia ia?aiaiioth oeia FLOAT.
A – neiaie i?aia?aciaaiey E yaeyaony neiiieiii aeey F. Oi?iao
aaiaea ia?aiaiiie oeia FLOAT aeeth/aao iaiaycaoaeueiue ciae,
no?ieo oeeo?, aiciiaeii niaea?aeauoth aeanyoe/ioth oi/eo e iai-
aycaoaeueiia iiea yeniiiaiou, ninoiyuaa ec aoeau E, ca ei-
oi?ie neaaeoao oeaeia, aiciiaeii eiathuaa ciae.
· 158 –
Ia?aae neiaieaie i?aia?aciaaiey D, O e X iiaeao noiyoue L,
eioi?ay icia/aao , /oi a nienea a?aoiaioia aeieaeai iaoiaeeoueny
oeacaoaeue ia ia?aiaiioth oeia LONG, a ia oeia INT. Aiaeiae/-
ii, aoeaa L iiaeao noiyoue ia?aae neiaieaie i?aia?aciaaiey E
eee F, aiai?y i oii, /oi a nienea a?aoiaioia aeieaeai iaoi-
aeeoueny oeacaoaeue ia ia?aiaiioth oeia DOUBLE, a ia oeia FLOAT.
Iai?eia?, ia?auaiea
INT I;
FLOAT X;
CHAR NAME[50];
SCANF(“&D %F %S”, &I, &X, NAME);
ni no?ieie ia aaiaea
25 54.32E-1 THOMPSON
i?eaiaeeo e i?enaaeaaieth I cia/aiey 25,X – cia/aiey 5.432 e
NAME – no?iee “THOMPSON”, iaaeeaaeauei ia?acii caeii/aiiie
neiaieii 0. yoe o?e iiey aaiaea iiaeii ?acaeaeeoue noieueeeie
i?iaaeaie, oaaoeyoeeyie e neiaieaie iiauo no?ie, neieueei au
iiaeaeaaoa. Ia?auaiea
INT I;
FLOAT X;
CHAR NAME[50];
SCANF(“%2D %F %*D %2S”, &I, &X, NAME);
n aaiaeii
56789 0123 45A72
i?enaieo I cia/aiea 56, X – 789.0, i?iionoeo 0123 e iiianoeo
a NAME no?ieo “45”. i?e neaaeothuai ia?auaiee e ethaie i?ioeaaeo-
?a aaiaea ?anniio?aiea ia/iaony n aoeau A. A yoeo aeaoo i?eia-
?ao NAME yaeyaony oeacaoaeai e, neaaeiaaoaeueii, ia?aae iei ia
ioaeii iiiauaoue ciae &.
A ea/anoaa ae?oaiai i?eia?a ia?aieoai oaia?ue yeaiaioa?iue
eaeueeoeyoi? ec aeaau 4, eniieuecoy aeey i?aia?aciaaiey aaiaea
ooieoeeth SCANF:
#INCLUDE
MAIN() /* RUDIMENTARY DESK CALCULATOR */
(
DOUBLE SUM, V;
SUM =0;
WHILE (SCANF(“%LF”, &V) !=EOF)
PRINTF(“T%.2FN”, SUM += V);
)
auiieiaiea ooieoeee SCANF caeai/eaaaony eeai oiaaea, eiaaea iia
en/a?iuaaao naith oi?aaeythuoth no?ieo, eeai eiaaea iaeioi?ue
yeaiaio aaiaea ia niaiaaeaao n oi?aaeythuae niaoeeoeeaoeeae. A
ea/anoaa naiaai cia/aiey iia aica?auaao /enei i?aaeeueii nia-
iaaeathueo e i?enaiaiiuo yeaiaioia aaiaea. Yoi /enei iiaeao auoue
· 159 –
eniieueciaaii aeey ii?aaeaeaiey eiee/anoaa iaeaeaiiuo yeaiaioia
aaiaea. i?e auoiaea ia eiiaoe oaeea aica?auaaony EOF; iiae/a?e-
iai, /oi yoi cia/aiea ioee/ii io 0, /oi neaaeothuee aaiaeeiue
neiaie ia oaeiaeaoai?yao ia?aie niaoeeoeeaoeee a oi?aaeythuae
no?iea. I?e neaaeothuai ia?auaiee e SCANF iiene aiciaiiaeyaony
iaiin?aaenoaaiii ca iineaaeiei aaaaeaiiui neiaieii.
Caeeth/eoaeueiia i?aaeinoa?aaeaiea: a?aoiaiou ooieoeee SCANF
aeieaeiu auoue oeacaoaeyie. Ianiiiaiii iaeaieaa ?ani?ino?aiai-
iay ioeaea ninoieo a iaienaiee
SCANF(“%D”, N);
aianoi
SCANF(“%D”, &N);
7.5. Oi?iaoiia i?aia?aciaaiea a iaiyoe
Io ooieoeee SCANF e PRINTF i?ienoiaeyo ooieoeee SSCANF e
SPRINTF, eioi?ua inouanoaeytho aiaeiae/iua i?aia?aciaaiey, ii
iia?e?otho ni no?ieie, a ia n oaeeii. Ia?auaiey e yoei ooie-
oeeyi eiatho aeae:
SPRINTF(STRING, CONTROL, ARG1, ARG2, …)
SSCANF(STRING, CONTROL, ARG1, ARG2, …)
Eae e ?aiueoa , ooieoeey SPRINTF i?aia?acoao naie a?aoiaiou
ARG1, ARG2 e o.ae. A niioaaonoaee n oi?iaoii, oeacaiiui a
CONTROL, ii iiiauaao ?acoeueoaou a STRING, a ia a noaiaea?oiue
auaiae. KIia/ii, no?iea STRING aeieaeia auoue aeinoaoi/ii aaeeea,
/oiau i?eiyoue ?acoeueoao. Iai?eia?, anee NAME – yoi neiaieue-
iue iannea, a N – oeaeia, oi
SPRINTF(NAME, “TEMP%D”, N);
nicaeaao a NAME no?ieo aeaea TEMPNNN, aaea NNN – cia/aiea N.
Ooieoeey SSCANF auiieiyao ia?aoiua i?aia?aciaaiey – iia
i?iniao?eaaao no?ieo STRING a niioaaonoaee n oi?iaoii a a?-
aoiaioa CONTROL e iiiauaao ?acoeueoe?othuea cia/aiey a a?ao-
iaiou ARG1, ARG2 e o.ae.yoe a?aoiaiou aeieaeiu auoue oeacaoaey-
ie. A ?acoeueoaoa ia?auaiey
SSCANF(NAME, “TEMP%D”, &N);
ia?aiaiiay N iieo/aao cia/aiea no?iee oeeo?, neaaeothueo ca
TEMP a NAME.
Oi?aaeiaiea 7-2.
Ia?aieoeoa ianoieueiue eaeueeoeyoi? ec aeaau 4, eniieuecoy
aeey aaiaea e i?aia?aciaaiey /enae SCANF e/eee SSCANF.
· 160 –
7.6. Aeinooi e oaeeai
Ana aei neo ii? iaienaiiua i?ia?aiiu /eoaee ec noaiaea?o-
iiai aaiaea e ienaee a noaiaea?oiue auaiae, ioiineoaeueii eioi-
?uo iu i?aaeiieaaaee, /oi iie iaae/aneei ia?acii i?aaeinoaaea-
iu i?ia?aiia ianoiie iia?aoeeiiiie nenoaiie.
Neaaeothuei oaaii a aii?ina aaiaea-auaiaea yaeyaony iaiena-
iea i?ia?aiiu, ?aaioathuae n oaeeii, eioi?ue ia naycai ca?a-
iaa n i?ia?aiiie. iaeiie ec i?ia?aii, eioi?ay yaii aeaiiino?e-
?oao iio?aaiinoue a oaeeo iia?aoeeyo, yaeyaony CAT, eioi?ay
iauaaeeiyao iaai? ec ianeieueeeo eiaiiaaiiuo oaeeia a noaiaea?-
oiue auaiae. I?ia?aiia CAT eniieuecoaony aeey auaiaea oaeeia ia
oa?ieiae e a ea/anoaa oieaa?naeueiiai nai?ueea aaiaea aeey
i?ia?aii, eioi?ua ia eiatho aiciiaeiinoe ia?auaoueny e oaeeai
ii eiaie. Iai?eia?, eiiaiaea
CAT X.C.Y.C
ia/aoaao niaea?aeeiia oaeeia X.C e Y.C a noaiaea?oiue auaiae.
Aii?in ninoieo a oii, eae i?aaieciaaoue /oaiea ec eiaii-
aaiiuo oaeeia, o.a., eae naycaoue aiaoiea eiaia, eioi?uie
iuneeo iieueciaaoaeue, n oaeoe/anee /eoathueie aeaiiua iia?aoi-
?aie.
Yoe i?aaeea i?inou. I?aaeaea /ai iiaeii n/eouaaoue ec iaei-
oi?iai oaeea eee caienuaaoue a iaai, yoio oaee aeieaeai auoue
ioe?uo n iiiiuueth ooieoeee FOPEN ec noaiaea?oiie aeaeeioaee.
ooieoeey FOPEN aa?ao aiaoiaa eiy (iiaeiaiia X.C eee Y.C), i?i-
aiaeeo iaeioi?ua ianeoaeeaathuea aeaenoaey e ia?aaiai?u n iia?a-
oeeiiiie nenoaiie (aeaoaee eioi?uo ia aeieaeiu ian eanaoueny) e
aica?auaao aioo?aiiaa eiy, eioi?ia aeieaeii eniieueciaaoueny i?e
iineaaeothueo /oaieyo ec oaeea eee caienyo a iaai.
Yoi aioo?aiiaa eiy, iacuaaaiia “oeacaoaeai oaeea”, oae-
oe/anee yaeyaony oeacaoaeai no?oeoo?u, eioi?ay niaea?aeeo ei-
oi?iaoeeth i oaeea, oaeoth eae ianoi ?aciauaiey aooa?a, oaeouay
iiceoeey neiaiea a aooa?a, i?ienoiaeeo ee /oaiea ec oaeea eee
caienue a iaai e oiio iiaeiaiia. Iieueciaaoaee ia iaycaiu ciaoue
yoe aeaoaee, iioiio /oi n?aaee ii?aaeaeaiee aeey noaiaea?oiiai
aaiaea-auaiaea, iieo/aaiuo ec oaeea STDIO.H, niaea?aeeony ii?a-
aeaeaiea no?oeoo?u n eiaiai FILE. Aaeeinoaaiiia iaiaoiaeeiia
aeey oeacaoaey oaeea iienaiea aeaiiino?e?oaony i?eia?ii:
FILE *FOPEN(), *FP;
Caeanue aiai?eony, /oi FP yaeyaony oeacaoaeai ia FILE e
FOPEN aica?auaao oeacaoaeue ia FILE. Oa?aoeoa aieiaiea, /oi
FILE yaeyaony eiaiai oeia, iiaeiaiui INT, a ia y?eueo no?oe-
oo?u; yoi ?aaeeciaaii eae TYPEDEF. (Iiae?iaiinoe oiai, eae
ana yoi ?aaioaao ia nenoaia UNIX, i?eaaaeaiu a aeaaa 8).
Oaeoe/aneia ia?auaiea e ooieoeee FOPEN a i?ia?aiia eiaao
aeae:
FP=FOPEN(NAME,MODE);
· 161 –
Ia?aui a?aoiaioii ooieoeee FOPEN yaeyaony “eiy” oaeea, eioi-
?ia caaeaaony a aeaea neiaieueiie no?iee. Aoi?ie a?aoiaio MODE
(“?aaeei”) oaeaea yaeyaony neiaieueiie no?ieie, eioi?ay oeacu-
aaao, eae yoio oaee aoaeao eniieueciaaoueny. Aeiionoeiuie ?aaee-
iaie yaeythony: /oaiea (“R”), caienue (“W”) e aeiaaaeaiea
(“A”).
Anee au ioe?iaoa oaee, eioi?ue aua ia nouaoaoao, aeey ca-
iene eee aeiaaaeaiey, oi oaeie oaee aoaeao nicaeai (anee yoi
aiciiaeii). Ioe?uoea nouanoaothuaai oaeea ia caienue i?eaiaeeo e
ioa?anuaaieth aai noa?iai niaea?aeeiiai. Iiiuoea /oaiey iano-
uanoaothuaai oaeea yaeyaony iueaeie. Ioeaee iiaoo auoue iaon-
eiaeaiu e ae?oaeie i?e/eiaie (iai?eia?, iiiuoeie /oaiey ec
oaeea, ia eiay ia oi ?ac?aoaiey). I?e iaee/ee eaeie-eeai
ioeaee ooieoeey aica?auaao ioeaaia cia/aiea oeacaoaey NULL
(eioi?ia aeey oaeianoaa oaeaea ii?aaeaeyaony a oaeea STDIO.H).
Ae?oaie iaiaoiaeeiie aauueth yaeyaony niinia /oaiey eee ca-
iene, anee oaee oaea ioe?uo. Caeanue eiaaony ianeieueei aiciiae-
iinoae, ec eioi?uo GETC e PUTC yaeythony i?inoaeoeie.ooieoeey
GETC aica?auaao neaaeothuee neiaie ec oaeea; ae iaiaoiaeei oea-
caoaeue oaeea, /oiau ciaoue, ec eaeiai oaeea /eoaoue. Oaeei ia-
?acii,
C=GETC(FP)
iiiauaao a “C” neaaeothuee neiaie ec oaeea, oeacaiiiai iin?aae-
noaii FP, e EOF, anee aeinoeaioo eiiaoe oaeea.
Ooieoeey PUTC, yaeythuayny ia?auaieai e ooieoeee GETC,
PUTC(C,FP)
iiiauaao neiaie “C” a oaee FP e aica?auaao “C”. Iiaeiaii ooi-eoeeyi
GETCHAR e PUTCHAR, GETC e PUTC iiaoo auoue iae?inaie, a ia ooieoeeyie.
I?e caionea i?ia?aiiu aaoiiaoe/anee ioe?uaathony o?e oae-
ea, eioi?ua niaaaeaiu ii?aaeaeaiiuie oeacaoaeyie oaeeia. Yoeie
oaeeaie yaeythony noaiaea?oiue aaiae, noaiaea?oiue auaiae e noai-
aea?oiue auaiae ioeaie; niioaaonoaothuea oeacaoaee oaeeia iacu-
aathony STDIN, STDOUT e STDERR. Iau/ii ana yoe oeacaoaee nay-
caiu n oa?ieiaeii, ii STDIN e STDOUT iiaoo auoue ia?aiai?aa-
eaiu ia oaeeu eee a iioie (PIPE), eae iienuaaeinue a ?acaeaea
7.2.
Ooieoeee GETCHAR e PUTCHAR iiaoo auoue ii?aaeaeaiu a oa?ie-
iaeao GETC, PUTC, STDIN e STDOUT neaaeothuei ia?acii:
#DEFINE GETCHAR() GETC(STDIN) #DEFINE PUTCHAR© PUTC(C,
STDOUT)
I?e ?aaioa n oaeeaie aeey oi?iaoiiai aaiaea e auaiaea iiaeii en-
iieueciaaoue ooieoeee FSCANF e FPRINTF. Iie eaeaioe/iu ooieoeeyi
SCANF e PRINTF, ca eneeth/aieai oiai, /oi ia?aui a?aoiaioii
yaeyaony oeacaoaeue oaeea, ii?aaeaeythuee oio oaee, eioi?ue ao-
aeao /eoaoueny eee eoaea aoaeao aanoenue caienue; oi?aaeythuay
no?iea aoaeao aoi?ui a?aoiaioii.
· 162 –
Iieii/ea n i?aaeaa?eoaeueiuie caia/aieyie, iu oaia?ue a
ninoiyiee iaienaoue i?ia?aiio CAT aeey eiieaoaiaoeee oaeeia.
Eniieuecoaiay caeanue iniiaiay noaia ieacuaaaony oaeiaiie ai
iiiaeo i?ia?aiiao: anee eiathony a?aoiaiou a eiiaiaeiie no?i-
ea, oi iie ia?aaaouaathony iineaaeiaaoaeueii. Anee oaeea a?ao-
iaiou ionoonoaotho, oi ia?aaaouaaaony noaiaea?oiue aaiae. Yoi
iicaieyao eniieueciaaoue i?ia?aiio eae naiinoiyoaeueii, oae e
eae /anoue aieueoae caaea/e.
#INCLUDE
MAIN(ARGC, ARGV) /*CAT: CONCATENATE FILES*/
INT ARGC;
CHAR *ARGV[];
(
FILE *FP, *FOPEN();
IF(ARGC==1) /*NO ARGS; COPY STANDARD INPUT*/
FILECOPY(STDIN);
ELSE
WHILE (–ARGC > 0)
IF ((FP=FOPEN(*++ARGV,”R”))==NULL) (
PRINTF(“CAT:CAN’T OPEN %N”,*ARGV);
BREAK;
) ELSE (
FILECOPY(FP);
FCLOSE(FP);
)
)
FILECOPY(FP) /*COPY FILE FP TO STANDARD OUTPUT*/
FILE *FP;
(
INT C;
WHILE ((C=GETC(FP)) !=EOF)
PUTC(C, STDOUT);
)
Oeacaoaee oaeeia STDIN e STDOUT ca?aiaa ii?aaeaeaiu a aeaeei-
oaea aaiaea-auaiaea eae noaiaea?oiue aaiae e noaiaea?oiue auaiae;
iie iiaoo auoue eniieueciaaiu a ethaii ianoa, aaea iiaeii eniieue-
ciaaoue iauaeo oeia FILE*.iie iaeiaei yaeythony eiinoaioaie, a
ia ia?aiaiiuie, oae /oi ia iuoaeoanue ei /oi-eeai i?enaae-
aaoue.
Ooieoeey FCLOSE yaeyaony ia?aoiie ii ioiioaieth e FOPEN;
iia ?ac?uaaao naycue iaaeaeo oeacaoaeai oaeea e aiaoiei eiaiai,
onoaiiaeaiioth ooieoeeae FOPEN, e aunaiaiaeaeaao oeacaoaeue oaeea
aeey ae?oaiai oaeea.aieueoeinoai iia?aoeeiiiuo nenoai eiatho ia-
eioi?ua ia?aie/aiey ia /enei iaeiia?aiaiii ioe?uouo oaeeia,
eioi?uie iiaeao ?anii?yaeaoueny i?ia?aiia. Iiyoiio, oi eae iu
iinooieee a CAT, inaiaiaeea ia ioaeiua iai aieaa iauaeou, ya-
eyaony oi?ioae eaeaae. Eiaaony e ae?oaay i?e/eia aeey i?eiaia-
iey ooieoeee FCLOSE e auoiaeiiio oaeeo – iia aucuaaao auaea/o
eioi?iaoeee ec aooa?a, a eioi?ii PUTC niae?aao auaiae. (I?e
ii?iaeueiii caaa?oaiee ?aaiou i?ia?aiiu ooieoeey FCLOSE aucu-
aaaony aaoiiaoe/anee aeey eaaeaeiai ioe?uoiai oaeea).
· 163 –
7.7. Ia?aaioea ioeaie – STDERR e EXIT
Ia?aaioea ioeaie a CAT iaeaeaaeueia. Iaoaeianoai caeeth/aao-
ny a oii, /oi anee iaeei ec oaeeia ii iaeioi?ie i?e/eia iea-
cuaaaony iaaeinooiiui, aeeaaiinoe/aneia niiauaiea ia yoii ia-
/aoaaony a eiioea iauaaeeiaiiiai auaiaea. Yoi i?eaieaii, anee
auaiae iinooiaao ia oa?ieiae, ii ia aiaeeony, anee auaiae iin-
ooiaao a iaeioi?ue oaee eee /a?ac iioi/iue (PIPELINE) iaoa-
ieci a ae?oaoth i?ia?aiio.
*oiau eo/oa ia?aaaouaaoue oaeoth neooaoeeth, e i?ia?aiia
oi/ii oaeei aea ia?acii, eae STDIN e STDOUT, i?eniaaeeiyaony
aoi?ie auoiaeiie oaee, iacuaaaiue STDERR. Anee yoi aiiaua
aiciiaeii, auaiae, caienaiiue a oaeea STDERR, iiyaeyaony ia
oa?ieiaea iieueciaaoaey, aeaaea anee noaiaea?oiue auaiae iai?aa-
eyaony a ae?oaia ianoi.
Aeaaaeoa ia?aaeaeaai i?ia?aiio CAT oaeei ia?acii, /oiau
niiauaiey ia ioeaeao ienaeenue a noaiaea?oiue oaee ioeaie.
“INCLUDE
MAIN(ARGC,ARGV) /*CAT: CONCATENATE FILES*/
INT ARGC;
CHAR *ARGV[];
(
FILE *FP, *FOPEN();
IF(ARGC==1) /*NO ARGS; COPY STANDARD INPUT*/
FILECOPY(STDIN);
ELSE
WHILE (–ARGC > 0)
IF((FP=FOPEN(*++ARGV,”R#))==NULL) (
PRINTF(STDERR,
“CAT: CAN’T OPEN,%SN”, ARGV);
EXIT(1);
) ELSE (
FILECOPY(FP);
)
EXIT(0);
)
I?ia?aiia niiauaao ia ioeaeao aeaoiy niiniaaie. Aeeaaiinoe/an-
eia niiauaiea, auaeaaaaiia ooieoeeae FPRINTF, iinooiaao a
STDERR e, oaeei ia?acii, ieacuaaaony ia oa?ieiaea iieueciaa-
oaey, a ia en/acaao a iioiea (PIPELINE) eee a auoiaeiii oae-
ea.
I?ia?aiia oaeaea eniieuecoao ooieoeeth EXIT ec noaiaea?oiie
aeaeeioaee, ia?auaiea e eioi?ie aucuaaao caaa?oaiea auiieia-
iey i?ia?aiiu. A?aoiaio ooieoeee EXIT aeinooiai ethaie i?ia?ai-
ia, ia?auathuaeny e aeaiiie ooieoeee, oae /oi oniaoiia eee iao-
aea/iia caaa?oaiea aeaiiie i?ia?aiiu iiaeao auoue i?iaa?aii ae?o-
aie i?ia?aiiie, eniieuecothuae yoo a ea/anoaa iiaecaaea/e. Ii
niaeaoaieth aaee/eia 0 a ea/aonaa aica?auaaiiai cia/aiey nae-
aeaoaeuenoaoao i oii, /oi ana a ii?yaeea, a ?acee/iua iaioeaaua
cia/aiey yaeythony i?eciaeaie ii?iaeueiuo neooaoeee.
· 164 –
Ooieoeey EXIT aucuaaao ooieoeeth FCLOSE aeey eaaeaeiai ioe?u-
oiai auoiaeiiai oaeea, n oai /oiau auaanoe anth iiiauaiioth a
aooa?u auoiaeioth eioi?iaoeeth, a caoai aucuaaao ooieoeeth _EXIT.
Ooieoeey _EXIT i?eaiaeeo e iaiaaeeaiiiio caaa?oaieth aac i/enoee
eaeeo-eeai aooa?ia; eiia/ii, i?e aeaeaiee e yoie ooieoeee iiae-
ii ia?aoeoueny iaiin?aaenoaaiii.
7.8. Aaiae e auaiae no?ie
Noaiaea?oiay aeaeeioaea niaea?aeeo ooieoeeth FGETS, niaa?oai-
ii aiaeiae/ioth ooieoeee GETLINE, eioi?oth iu eniieueciaaee ia
anai i?ioyaeaiee eieae. A ?acoeueoaoa ia?auaiey
FGETS(LINE, MAXLINE, FP)
neaaeothuay no?iea aaiaea (aeeth/ay neiaie iiaie no?iee) n/eou-
aaaony ec oaeea FP a neiaieueiue iannea LINE; naiia aieueoia
MAXLINE_1 neiaie aoaeao i?i/eoai. ?acoeueoe?othuay no?iea ca-
eai/eaaaony neiaieii 0. Ii?iaeueii ooieoeey FGETS aica?auaao
LINE; a eiioea oaeea iia aica?auaao NULL. (Iaoa ooieoeey
GETLINE aica?auaao aeeeio no?iee, a i?e auoiaea ia eiiaoe oaeea
· ioeue).
I?aaeiacia/aiiay aeey auaiaea ooieoeey FPUTS caienuaaao
no?ieo (eioi?ay ia iaycaia niaea?aeaoue neiaie iiaie no?iee) a
oaee:
FPUTS(LINE, FP)
*oiau iieacaoue, /oi a ooieoeeyo oeia FGETS e FPUTS iao ie/aai
oaeinoaaiiiai, iu i?eaiaeei eo ieaea, neiie?iaaiiuie iaiin?aaenoaaiii ec
noaiaea?oiie aeaeeioaee aaiaea-auaiaea:
#INCLUDE
CHAR *FGETS(S,N,IOP) /*GET AT MOST N CHARS FROM IOP*/
CHAR *S;
INT N;
REGISTER FILE *IOP;
(
REGISTER INT C;
REGISTER CHAR *CS;
CS = S;
WHILE(–N>0&&(C=GETC(IOP)) !=EOF)
IF ((*CS++ = C)==’N’)
BREAK;
*CS = ‘0’;
RETURN((C==EOF && CS==S) 7 NULL : S);
)
FPUTS(S,IOP) /*PUT STRING S ON FILS IOP*/
REGISTER CHAR *S;
REGISTER FILE *IOP;
(
REGISTER INT C;
WHILE (C = *S++)
PUTC(C,IOP);
)
· 165 –
Oi?aaeiaiea 7-3.
Iaieoeoa i?ia?aiio n?aaiaiey aeaoo oaeeia, eioi?ay aoaeao
ia/aoaoue ia?aoth no?ieo e iiceoeeth neiaiea, aaea iie ?acee/atho-
ny.
Oi?aaeiaiea 7-4.
Ia?aaeaeaeoa i?ia?aiio iienea caaeaiiie eiiaeiaoeee neiai-
eia ec aeaau 5 oaeei ia?acii, /oiau a ea/anoaa aaiaea eniieue-
ciaaeny iaai? eiaiiaaiiuo oaeeia eee, anee ieeaeea oaeeu ia
oeacaiu eae a?aoiaiou, noaiaea?oiue aaiae. Neaaeoao ee ia/aoaoue
eiy oaeea i?e iaoiaeaeaiee iiaeoiaeyuae no?iee?
Oi?aaeiaiea 7-5.
Iaieoeoa i?ia?aiio ia/aoe iaai?a oaeeia, eioi?ay ia/eia-
ao eaaeaeue iiaue oaee n iiaie no?aieoeu e ia/aoaao aeey eaaeaeiai
oaeea caaieiaie e n/ao/ee oaeoueo no?aieoe.
7.9. Ianeieueei ?aciiia?aciuo ooieoeee
Noaiaea?oiay aeaeeioaea i?aaeinoaaeyao iiiaeanoai ?aciiia-
?aciuo ooieoeee, iaeioi?ua ec eioi?uo ieacuaathony iniaaiii
iieaciuie. Iu oaea oiiieiaee ooieoeee aeey ?aaiou ni no?ieaie:
STRLEN, STRCPY, STRCAT e STRCMP. Aio iaeioi?ua ae?oaea.
7.9.1. I?iaa?ea aeaea neiaieia e i?aia?aciaaiey
Iaeioi?ua iae?inu auiieiytho i?iaa?eo neiaieia e i?aia?a-
ciaaiey:
SALPHA© ia 0, anee “C” aeoaaeoiue neiaie,
0 – anee iao.
SUPPER© Ia 0, anee “C” aoeaa aa?oiaai ?aaeno?a,
0 – anee iao.
SLOWER© Ia 0, anee “C” aoeaa ieaeiaai ?aaeno?a,
0 – anee iao.
SDIGIT© Ia 0, anee “C” oeeo?a,
0 – anee iao.
SSPACL© Ia 0, anee “C” i?iaae, oaaoeyoeey
eee iiaay no?iea, 0 – anee iao.
OUPPER© I?aia?acoao “C” a aoeao aa?oiaai ?aaeno?a.
OLOWER© I?aia?acoao “C” a aoeao ieaeiaai ?aaeno?a.
7.9.2. Ooieoeey UNGETC
Noaiaea?oiay aeaeeioaea niaea?aeeo aeiaieueii ia?aie/aiioth
aa?neth ooieoeee UNGETCH, iaienaiiie iaie a aeaaa 4; iia iacu-
aaaony UNGETC. A ?acoeueoaoa ia?auaiey
UNGETC(C,FP)
neiaie “C” aica?auaaony a oaee FP. Iicaieyaony aica?auaoue a
eaaeaeue oaee oieueei iaeei neiaie. Ooieoeey UNGETC iiaeao auoue
eniieueciaaia a ethaie ec ooieoeee aaiaea e n iae?inaie oeia
SCANF, GETC eee GETCHAR.
· 166 –
7.9.3. Ia?auaiea e nenoaia
Ooieoeey SYSTEM(S) auiieiyao eiiaiaeo, niaea?aeauothny a nei-
aieueiie no?iea S, e caoai aiciaiiaeyao auiieiaiea oaeouae
i?ia?aiiu. Niaea?aeeiia S neeueii caaeneo io eniieuecoaiie iia-
?aoeeiiiie nenoaiu. A ea/anoaa o?eaeaeueiiai i?eia?a, oeaaeai,
/oi ia nenoaia UNIX no?iea
SYSTEM(“DATE”);
i?eaiaeeo e auiieiaieth i?ia?aiiu DATE, eioi?ay ia/aoaao aeaoo
e a?aiy aeiy.
7.9.4. Oi?aaeaiea iaiyoueth
Ooieoeey CALLOC aanueia noiaeia n ooieoeeae ALLOC, eniieueci-
aaiiie iaie a i?aaeuaeoueo aeaaao. A ?acoeueoaoa ia?auaiey
CALLOC(N, SIZEOF(OBJCCT))
aica?auaaony eeai oeacaoaeue i?ino?ainoaa, aeinoaoi/iiai aeey
?aciauaiey N iauaeoia oeacaiiiai ?acia?a, eeai NULL, anee
cai?in ia iiaeao auoue oaeaieaoai?ai. Ioaiaeeiay iaiyoue eieoeea-
eece?oaony ioeaauie cia/aieyie.
Oeacaoaeue iaeaaeaao ioaeiui aeey ?anniao?eaaaiuo iauaeoia
au?aaieaaieai, ii aio neaaeoao i?eienuaaoue niioaaonoaothuee
oei, eae a
CHAR *CALLOC();
INT *IP;
IP=(INT*) CALLOC(N,SIZEOF(INT));
Ooieoeey CFREE(P) inaiaiaeaeaao i?ino?ainoai, ia eioi?ia
oeacuaaao “P”, i?e/ai oeacaoaeue “P” iaaiia/aeueii aeieaeai auoue
iieo/ai a ?acoeueoaoa ia?auaiey e CALLOC. Caeanue iao ieeaeeo
ia?aie/aiee ia ii?yaeie inaiaiaeaeaiey i?ino?ainoaa, ii aoaeao
iai?eyoiaeoae ioeaeie inaiaiaeeoue /oi-ieaoaeue, /oi ia auei ii-
eo/aii ia?auaieai e CALLOC.
?aaeecaoeey i?ia?aiiu ?ani?aaeaeaiey iaiyoe, iiaeiaiie
CALLOC, a eioi?ie ?aciauaiiua aeiee iiaoo inaiaiaeaeaoueny a
i?iecaieueiii ii?yaeea, i?iaeaiiino?e?iaaia a aeaaa 8.
· 167 –
8. Eioa?oaen nenoaiu UNIX
Iaoa?eae yoie aeaau ioiineony e eioa?oaeno iaaeaeo n-i?ia-
?aiiaie e iia?aoeeiiiie nenoaiie UNIX. Oae eae aieueoeinoai
iieueciaaoaeae ycuea “C” ?aaioatho ia nenoaia UNIX, yoa aeaaa
ieaaeaony iieaciie aeey aieueoeinoaa /eoaoaeae. aeaaea anee au
eniieuecoaoa n-eiiieeyoi? ia ae?oaie iaoeia, eco/aiea i?eaiaee-
iuo caeanue i?eia?ia aeieaeii iiii/ue aai aeoaaea i?iieeiooue a ia-
oiaeu i?ia?aiie?iaaiey ia ycuea “C”.
Yoa aeaaa aeaeeony ia o?e iniiaiua /anoe: aaiae/auaiae,
nenoaia oaeeia e ?ani?aaeaeaiea iaiyoe. Ia?aua aeaa /anoe
i?aaeiieaaatho iaaieueoia ciaeiinoai n aiaoieie oa?aeoa?enoeea-
ie nenoaiu UNIX.
A aeaaa 7 iu eiaee aeaei n nenoaiiui eioa?oaenii, eioi?ue
iaeeiaeia aeey anaai iiiaiia?acey iia?aoeeiiiuo nenoai. Ia eaae-
aeie eiie?aoiie nenoaia ooieoeee noaiaea?oiie aeaeeioaee aeieaeiu
auoue iaienaiu a oa?ieiao aaiaea-auaiaea, aeinooiiuo ia aeaiiie
iaoeia. A neaaeothueo ianeieueeeo ?acaeaeao iu iieoai iniiaioth
nenoaio naycaiiuo n aaiaeii e auaiaeii oi/ae aoiaea iia?aoeeii-
iie nenoaiu UNIX e i?ieeethno?e?oai, eae n eo iiiiuueth iiaoo
auoue ?aaeeciaaiu ?acee/iua /anoe noaiaea?oiie aeaeeioaee.
8.1. Aeane?eioi?u oaeeia
A iia?aoeeiiiie nenoaia UNIX aanue aaiae e auaiae inouanoa-
eyaony iin?aaenoaii /oaiey oaeeia eee eo caiene, iioiio /oi
ana ia?eoa?eeiua ono?ienoaa, aeeth/ay aeaaea oa?ieiae iieueciaa-
oaey, yaeythony oaeeaie ii?aaeaeaiiie oaeeiaie nenoaiu. Yoi
icia/aao, /oi iaeei iaeii?iaeiue eioa?oaen oi?aaeyao anaie nay-
cyie iaaeaeo i?ia?aiiie e ia?eoa?eeiuie ono?ienoaaie.
A iaeaieaa iauai neo/aa ia?aae /oaieai ec oaeea eee ca-
ienueth a oaee iaiaoiaeeii niiaueoue nenoaia i aaoai iaia?aiee;
yoio i?ioeann iacuaaaony “ioe?uoeai” oaeea. Nenoaia auyniy-
ao,eiaaoa ee au i?aai iinooiaoue oaeei ia?acii (nouanoaoao ee
yoio oaee? eiaaony ee o aan ?ac?aoaiea ia ia?auaiea e ia-
io?), e anee ana a ii?yaeea, aica?auaao a i?ia?aiio iaaieueoia
iieiaeeoaeueiia oeaeia /enei, iacuaaaiia aeane?eioi?ii oaeea.
anyeee ?ac, eiaaea yoio oaee eniieuecoaony aeey aaiaea eee auai-
aea, aeey eaeaioeoeeaoeee oaeea oiio?aaeyaony aeane?eioi? oaeea,
a ia aai eiy. (Caeanue nouanoaoao i?eia?iay aiaeiaey n eniieue-
ciaaieai READ (5,…) e WRITE (6,…) a oi?o?aia). Any ei-
oi?iaoeey ia ioe?uoii oaeea niaea?aeeony a nenoaia; i?ia?aiia
iieueciaaoaey ia?auaaony e oaeeo oieueei /a?ac aeane?eioi? oae-
ea.
Aeey oaeianoaa auiieiaiey iau/iuo iia?aoeee aaiaea e auaiaea
n iiiiuueth oa?ieiaea iieueciaaoaey nouanoaotho niaoeeaeueiua nia-
eaoaiey. Eiaaea eioa?i?aoaoi? eiiaiae (“SHELL”) i?iaiiyao
i?ia?aiio, ii ioe?uaaao o?e oaeea, iacuaaaiua noaiaea?oiui
aaiaeii, noaiaea?oiui auaiaeii e noaiaea?oiui auaiaeii ioeaie,
eioi?ua eiatho niioaaonoaaiii /enea 0, 1 e 2 a ea/anoaa aeane-
?eioi?ia yoeo oaeeia. A ii?iaeueiii ninoiyiee ana iie naycaiu
n oa?ieiaeii, oae /oi anee i?ia?aiia /eoaao n aeane?eioi?ii
oaeea 0 e ieoao n aeane?eioi?aie oaeeia 1 e 2, oi iia iiaeao
inouanoaeyoue aaiae e auaiae n iiiiuueth oa?ieiaea, ia caaioynue
ia ioe?uoee niioaaonoaothueo oaeeia.
· 168 –
Iieueciaaoaeue i?ia?aiiu iiaeao ia?aiai?aaeyoue aaiae e auaiae
ia oaeeu, eniieuecoy iia?aoeee eiiaiaeiiai eioa?i?aoaoi?a SHELL
“” :
PROG
A yoii neo/aa eioa?i?aoaoi? eiiaiae SHELL eciaieo i?enaaeaa-
iea ii oiie/aieth aeane?eioi?ia oaeeia 0 e 1 n oa?ieiaea ia
oeacaiiua oaeeu. Ii?iaeueii aeane?eioi? oaeea 2 inoaaony nay-
caiiui n oa?ieiaeii, oae /oi niiauaiey ia ioeaeao iiaoo iin-
ooiaoue ooaea. Iiaeiaiua caia/aiey ni?aaaaeeeau e oiaaea, eiaaea
aaiae e auaiae naycai n eaiaeii. Neaaeoao ioiaoeoue, /oi ai anao
neo/ayo i?ee?aieaiey oaeeia eciaiythony eioa?i?aoaoi?ii
SHELL, a ia i?ia?aiiie. Naia i?ia?aiia, iiea iia eniieuecoao
oaee 0 aeey aaiaea e oaeeu 1 e 2 aeey auaiaea, ia ciaao ie ioeo-
aea i?eoiaeeo aa aaiae, ie eoaea iinooiaao aa auaea/a.
8.2. Ieceio?iaiaaue aaiae/auaiae – iia?aoi?u READ e WRITE.
Naiue ieceee o?iaaiue aaiaea/auaiaea a nenoaia UNIX ia i?a-
aeoniao?eaaao ie eaeie-eeai aooa?ecaoeee, ie eaeiai-eeai ae?o-
aiai na?aena; ii ii nouanoao yaeyaony iaiin?aaenoaaiiui aoi-
aeii a iia?aoeeiiioth nenoaio. Aanue aaiae e auaiae inouanoaeyaony
aeaoiy ooieoeeyie: READ e WRITE. Ia?aui a?aoiaioii iaaeo ooie-
oeee yaeyaony aeane?eioi? oaeea. Aoi?ui a?aoiaioii yaeyaony
aooa? a aaoae i?ia?aiia, ioeoaea eee eoaea aeieaeiu iinooiaoue
aeaiiua. O?aoee a?aoiaio – yoi /enei iiaeeaaeaueo ia?anueea
aaeoia. Ia?auaiey e yoei ooieoeeyi eiatho aeae:
N_READ=READ(FD,BUF,N);
N_WRITTEN=WRITE(FD,BUF,N);
I?e eaaeaeii ia?auaiee aica?auaaony n/ao/ee aaeoia, oeacuaath-
uee oaeoe/aneia /enei ia?aaeaiiuo aaeoia. I?e /oaiee aica?a-
uaiiia /enei aaeoia iiaeao ieacaoueny iaiueoa, /ai cai?ioaiiia
/enei. Aica?auaiiia ioeaaia /enei aaeoia icia/aao eiiaoe oae-
ea, a “-1” oeacuaaao ia iaee/ea eaeie-eeai ioeaee. I?e caie-
ne aica?auaiiia cia/aiea ?aaii /eneo oaeoe/anee caienaiiuo
aaeoia; ianiaiaaeaiea yoiai /enea n /eneii aaeoia, eioi?ia
i?aaeiieaaaeinue caienaoue, iau/ii naeaeaoaeuenoaoao ia ioeaea.
Eiee/anoai aaeoia, iiaeeaaeaueo /oaieth eee caiene, iiaeao
auoue niaa?oaiii i?iecaieueiui. Aeaoiy naiuie ?ani?ino?aiaiiuie
aaee/eiaie yaeythony “1”, eioi?ay icia/aao ia?aaea/o iaeiiai
neiaiea ca ia?auaiea (o.a. Aac eniieueciaaiey aooa?a), e
“512”, eioi?ay niioaaonoaoao oece/aneiio ?acia?o aeiea ia
iiiaeo ia?eoa?eeiuo ono?ienoaao. Yoio iineaaeiee ?acia? aoaeao
iaeaieaa yooaeoeaiui, ii aeaaea aaiae eee auaiae ii iaeiiio nei-
aieo ca ia?auaiea ia aoaeao iaiaueiiaaiii aei?iaei.
Iauaaeeiea ana yoe oaeou, iu iaienaee i?inooth i?ia?aiio
aeey eiie?iaaiey aaiaea ia auaiae, yeaeaaeaioioth i?ia?aiia ei-
ie?iaee oaeeia, iaienaiiie a aeaaa 1. Ia nenoaia UNIX yoa
i?ia?aiia aoaeao eiie?iaaoue /oi oaiaeii eoaea oaiaeii, iioiio
/oi aaiae e auaiae iiaoo auoue ia?aiai?aaeaiu ia ethaie oaee eee
ono?ienoai.
· 169 –
#DEFINE BUFSIZE 512 /*BEST SIZE FOR PDP-11 UNIX*/
MAIN() /*COPY INPUT TO OUTPUT*/
(
CHAR BUF[BUFSIZE];
INT N;
WHILE((N=READ(0,BUF,BUFSIZE))>0)
WRITE(1,BUF,N);
)
Anee ?acia? oaeea ia aoaeao e?aoai BUFSIZE, oi i?e iaeioi?ii
ia?auaiee e READ aoaeao aica?auaii iaiueoaa /enei aaeoia, ei-
oi?ua caoai caienuaathony n iiiiuueth WRITE; i?e neaaeothuai iin-
ea yoiai ia?auaiee e READ aoaeao aica?auai ioeue.
Iio/eoaeueii ?acia?aoueny, eae iiaeii eniieueciaaoue ooieoeee
READ e WRITE aeey iino?iaiey i?ioeaaeo? aieaa aunieiai o?iaiy,
oaeeo eae GETCHAR, PUTCHAR e o.ae. Aio, iai?eia?, aa?eaio
ooieoeee GETCHAR, inouanoaeythuee aaiae aac eniieueciaaiey aooa-
?a.
#DEFINE CMASK 0377 /*FOR MAKING CHAR’S > 0*/
GETCHAR() /*UNBUFFERED SINGLE CHARACTER INPUT*/
(
CHAR C;
RETURN((READ(0,&C,1)>0 7 & CMASK : EOF);
)
Ia?aiaiiay “C” aeieaeia auoue iienaia eae CHAR, iioiio /oi ooi-
eoeey READ i?eieiaao oeacaoaeue ia neiaieu. Aica?auaaiue nei-
aie aeieaeai auoue ianee?iaai /eneii 0377 aeey aa?aioee aai ii-
eiaeeoaeueiinoe; a i?ioeaiii neo/aa ciaeiaue ?ac?yae iiaeao naea-
eaoue aai cia/aiea io?eoeaoaeueiui. (Eiinoaioa 0377 iiaeoiaeeo
aeey yai PDP-11, ii ia iaycaoaeueii aeey ae?oaeo iaoei).
Aoi?ie aa?eaio ooieoeee GETCHAR inouanoaeyao aaiae aieueoe-
ie ii?oeeyie, a auaeaao neiaieu ii iaeiiio ca ia?auaiea.
#DEFINE CMASK 0377 /*FOR MAKING CHAR’S>0*/
#DEFINE BUFSIZE 512
GETCHAR() /*BUFFERED VERSION*/
(
STATIC CHAR BUF[BUFSIZE];
STATIC CHAR *BUFP = BUF;
STATIC INT N = 0;
IF (N==0) ( /*BUFFER IS EMPTY*/
N=READ(0,BUF,BUFSIZE);
BUFP = BUF;
)
RETURN((–N>=0) ? *BUFP++ & CMASK : EOF);
)
8.3. Ioe?uoea, nicaeaiea, cae?uoea e ?anoeaieaiea
(UNLINK).
E?iia neo/ay, eiaaea ii oiie/aieth ii?aaeaeaiu noaiaea?oiua
oaeeu aaiaea, auaiaea e ioeaie, au aeieaeiu yaii ioe?uaaoue oae-
eu, /oiau caoai /eoaoue ec ieo eee ienaoue a ieo. Aeey yoie oea-
ee nouanoaotho aeaa oi/ee aoiaea: OPEN e CREAT.
· 170 –
Ooieoeey OPEN aanueia noiaeia n ooieoeeae FOPEN, ?anniio?ai-
iie a aeaaa 7, ca eneeth/aieai oiai, /oi aianoi aica?auaiey
oeacaoaey oaeea iia aica?auaao aeane?eioi? oaeea, eioi?ue ya-
eyaony i?inoi oeaeui oeia INT.
INT FD;
FD=OPEN(NAME,RWMODE);
Eae e a neo/aa FOPEN, a?aoiaio NAME yaeyaony neiaieueiie
no?ieie, niioaaonoaothuae aiaoiaio eiaie oaeea. Iaeiaei a?ao-
iaio, ii?aaeaeythuee ?aaeei aeinooia, ioee/ai: RWMODE ?aaii: 0 –
aeey /oaiey, 1 – aeey caiene, 2 – aeey /oaiey e caiene. Anee
i?ienoiaeeo eaeay-oi ioeaea, ooieoeey OPEN aica?auaao “-1”; a
i?ioeaiii neo/aa iia aica?auaao aeaenoaeoaeueiue aeane?eioi?
oaeea.
Iiiuoea ioe?uoue oaee, eioi?ue ia nouanoaoao, yaeyaony
ioeaeie. Oi/ea aoiaea CREAT i?aaeinoaaeyao aiciiaeiinoue nicaea-
iey iiauo oaeeia eee ia?acaiene noa?uo. A ?acoeueoaoa ia?aua-
iey
FD=CREAT(NAME,PMODE);
aica?auaao aeane?eioi? oaeea, anee ieacaeinue aiciiaeiui nic-
aeaoue oaee n eiaiai NAME, e “-1” a i?ioeaiii neo/aa. Anee
oaee n oaeei eiaiai oaea nouanoaoao, CREAT ona/ao aai aei io-
eaaie aeeeiu; nicaeaiea oaeea, eioi?ue oaea nouanoaoao, ia ya-
eyaony ioeaeie.
Anee oaee yaeyaony niaa?oaiii iiaui, oi CREAT nicaeaao
aai n ii?aaeaeaiiui ?aaeeiii caueou, niaoeeoeoee?oaiui a?aoiai-
oii PMODE. A nenoaia oaeeia ia UNIX n oaeeii naycuaathony aea-
ayoue aeoia caueou eioi?iaoeee, eioi?ua oi?aaeytho ?ac?aoaieai
ia /oaiea, caienue e auiieiaiea aeey aeaaeaeueoea oaeea, aeey
a?oiiu aeaaeaeueoeaa e aeey anao inoaeueiuo iieueciaaoaeae. Oaeei
ia?acii, o?aocia/iia ainueia?e/iia /enei iaeaieaa oaeiaii aeey
niaoeeoeeaoeee ?ac?aoaiee. Iai?eia?, /enei 0755 naeaeaoaeuenoao-
ao i ?ac?aoaiee ia /oaiea, caienue e auiieiaiea aeey aeaaeaeueoea
e i ?ac?aoaiee ia /oaiea e auiieiaiea aeey a?oiiu e anao in-
oaeueiuo.
Aeey eeethno?aoeee ieaea i?eaiaeeony i?ia?aiia eiie?iaaiey
iaeiiai oaeea a ae?oaie, yaeythuayny oi?iuaiiui aa?eaioii ooe-
eeou CP nenoaiu UNIX. (Iniiaiia oi?iuaiea caeeth/aaony a oii,
/oi iao aa?eaio eiie?oao oieueei iaeei oaee e /oi aoi?ie a?ao-
iaio ia aeieaeai auoue ni?aai/ieeii).
#DEFINE NULL 0
#DEFINE BUFSIZE 512
#DEFINE PMODE 0644/*RW FOR OWNER,R FOR GROUP,OTHERS*/
MAIN(ARGC,ARGV) /*CP: COPY F1 TO F2*/
INT ARGC;
CHAR *ARGV[];
(
INT F1, F2, N;
CHAR BUF[BUFSIZE];
· 171 –
IF (ARGC ! = 3)
ERROR(“USAGE:CP FROM TO”, NULL);
IF ((F1=OPEN(ARGV[1],0))== -1)
ERROR(“CP:CAN’T OPEN %S”, ARGV[1]);
IF ((F2=CREAT(ARGV[2],PMODE))== -1)
ERROR(“CP: CAN’T CREATE %S”, ARGV[2]);
WHILE ((N=READ(F1,BUF,BUFSIZE))>0)
IF (WRITE(F2,BUF,N) !=N)
ERROR(“CP: WRITE ERROR”, NULL);
EXIT(0);
)
ERROR(S1,S2) /*PRINT ERROR MESSAGE AND DIE*/
CHAR *S1, S2;
(
PRINTF(S1,S2);
PRINTF(“N”);
EXIT(1);
)
Nouanoaoao ia?aie/aiea (iau/ii 15 – 25) ia eiee/anoai
oaeeia, eioi?ua i?ia?aiia iiaeao eiaoue ioe?uouie iaeiia?aiai-
ii. A niioaaonoaee n yoei ethaay i?ia?aiia, niae?athuayny ?a-
aioaoue ni iiiaeie oaeeaie, aeieaeia auoue iiaeaioiaeaia e iia-
oi?iiio eniieueciaaieth aeane?eioi?ia oaeeia. I?ioeaaeo?a CLOSE
i?a?uaaao naycue iaaeaeo aeane?eioi?ii oaeea e ioe?uoui oaeeii e
inaiaiaeaeaao aeane?eioi? oaeea aeey eniieueciaaiey n iaeioi?ui
ae?oaei oaeeii. Caaa?oaiea auiieiaiey i?ia?aiiu /a?ac EXIT
eee a ?acoeueoaoa aica?aoa ec aaaeouae i?ia?aiiu i?eaiaeeo e
cae?uoeth anao ioe?uouo oaeeia.
Ooieoeey ?anoeaieaiey UNLINK (FILENAME) oaeaeyao ec nenoaiu
oaeeia oaee n eiaiai FILENAME ( ec aeaiiiai ni?aai/iiai oae-
ea. Oaee iiaeao auoue noeaieai n ae?oaei ni?aai/ieeii, aiciiaeii,
iiae ae?oaei eiaiai – i?eia/.ia?aaiae/eea).
Oi?aaeiaiea 8-1.
Ia?aieoeoa i?ia?aiio CAT ec aeaau 7, eniieuecoy ooieoeee
READ, WRITE, OPEN e CLOSE aianoi eo yeaeaaeaioia ec noaiaea?-
oiie aeaeeioaee. I?iaaaeeoa yenia?eiaiou aeey ii?aaeaeaiey io-
iineoaeueiie nei?inoe ?aaiou yoeo aeaoo aa?eaioia.
8.4. I?iecaieueiue aeinooi – SEEK e LSEEK.
Ii?iaeueii i?e ?aaioa n oaeeaie aaiae e auaiae inouanoaey-
aony iineaaeiaaoaeueii: i?e eaaeaeii ia?auaiee e ooieoeeyi READ e
WRITE /oaiea eee caienue ia/eiathony n iiceoeee, iaiin?aaenoaai-
ii neaaeothuae ca i?aaeuaeouae ia?aaioaiiie. Ii i?e iaiaoiaeeiin-
oe oaee iiaeao /eoaoueny eee caienuaaoueny a ethaii i?iecaieueiii
ii?yaeea. Ia?auaiea e nenoaia n iiiiuueth ooieoeee LSEEK iicai-
eyao ia?aaeaeaaoueny ii oaeeo, ia i?iecaiaey oaeoe/aneiai /oa-
iey eee caiene. A ?acoeueoaoa ia?auaiey
LSEEK(FD,OFFSET,ORIGIN);
· 172 –
oaeouay iiceoeey a oaeea n aeane?eioi?ii FD ia?aaeaeaaaony ia
iiceoeeth OFFSET (niauaiea), eioi?ay ion/eouaaaony io ianoa,
oeacuaaaiiai a?aoiaioii ORIGIN (ia/aei ion/aoa). Iineaaeothuaa
/oaiea eee caienue aoaeoo oaia?ue ia/eiaoueny n yoie iiceoeee.
A?aoiaio OFFSET eiaao oei LONG; FD e ORIGIN eiatho oei INT.
A?aoiaio ORIGIN iiaeao i?eieiaoue cia/aiey 0,1 eee 2, oeacuaay
ia oi, /oi aaee/eia OFFSET aeieaeia ion/eouaaoueny niioaaono-
aaiii io ia/aea oaeea, io oaeouae iiceoeee eee io eiioea oae-
ea. Iai?eia?, /oiau aeiiieieoue oaee, neaaeoao ia?aae caienueth
iaeoe aai eiiaoe:
LSEEK(FD,0L,2);
/oiau aa?iooueny e ia/aeo (“ia?aiioaoue ia?aoii”), iiaeii iaie-
naoue:
LSEEK(FD,0L,0);
ia?aoeoa aieiaiea ia a?aoiaio 0L; aai iiaeii auei au caienaoue
e a aeaea (LONG) 0.
Ooieoeey LSEEK iicaieyao ia?auaoueny n oaeeaie i?eia?ii
oae aea, eae n aieueoeie ianneaaie, i?aaaea oeaiie aieaa iaaeeai-
iiai aeinooia. neaaeothuay i?inoay ooieoeey, iai?eia?, n/eouaaao
ethaia eiee/anoai aaeoia, ia/eiay n i?iecaieueiiai ianoa a
oaeea.
GET(FD,POS,BUF,N) /*READ N BYTES FROM POSITION POS*/
INT FD, N;
LONG POS;
CHAR *BUF;
(
LSEEK(FD,POS,0); /*GET TO POS*/
RETURN(READ(FD,BUF,N));
)
A aieaa ?aiieo ?aaeaeoeeyo, /ai ?aaeaeoeey 7 nenoaiu UNIX,
iniiaiay oi/ea aoiaea a nenoaio aaiaea-auaiaea iacuaaaony SEEK.
Ooieoeey SEEK eaeaioe/ia ooieoeee LSEEK, ca eneeth/aieai oiai,
/oi a?aoiaio OFFSET eiaao oei INT, a ia LONG. a niioaaonoaee
n yoei, iineieueeo ia PDP-11 oeaeua eiatho oieueei 16 aeoia, a?-
aoiaio OFFSET, oeacuaaaiue ooieoeee SEEK, ia?aie/ai aaee/eiie
65535; ii yoie i?e/eia a?aoiaio ORIGIN iiaeao eiaoue cia/aiey
3, 4, 5, eioi?ua canoaaeytho ooieoeeth SEEK oiiiaeeoue caaeaiiia
cia/aiea OFFSET ia 512 (eiee/anoai aaeoia a iaeiii oece/aneii
aeiea) e caoai eioa?i?aoe?iaaoue ORIGIN, eae anee yoi 0, 1
eee 2 niioaaonoaaiii. Neaaeiaaoaeueii, /oiau aeinoe/ue i?iec-
aieueiiai ianoa a aieueoii oaeea, ioaeii aeaa ia?auaiey e SEEK:
nia/aea iaeii, eioi?ia auaeaeyao ioaeiue aeie, a caoai aoi?ia,
aaea ORIGIN eiaao cia/aiea 1 e eioi?ia inouanoaeyao ia?aaeae-
aeaiea ia aeaeaaiue aaeo aioo?e aeiea.
Oi?aaeiaiea 8-2.
I/aaeaeii, /oi SEEK iiaeao auoue iaienaia a oa?ieiaeao
LSEEK e iaiai?io. iaieoeoa eaaeaeoth ooieoeeth /a?ac ae?oaoth.
· 173 –
8.5. I?eia? – ?aaeecaoeey ooieoeee FOPEN e GETC.
Aeaaaeoa oaia?ue ia i?eia?a ?aaeecaoeee ooieoeee FOPEN e
GETC ec noaiaea?oiie aeaeeioaee iiaei?ia?aii i?iaeaiiino?e?oai,
eae iaeioi?ua ec iienaiiuo yeaiaioia iauaaeeiythony aianoa.
Iaiiiiei, /oi a noaiaea?oiie aeaeeioaea oaeeu iienuaaony
iin?aaenoaii oeacaoaeae oaeeia, a ia aeane?eioi?ia. Oeacaoaeue
oaeea yaeyaony oeacaoaeai ia no?oeoo?o, eioi?ay niaea?aeeo
ianeieueei yeaiaioia eioi?iaoeee i oaeea: oeacaoaeue aooa?a,
/oiau oaee iia /eoaoueny aieueoeie ii?oeeyie; n/ao/ee /enea
neiaieia, inoaaoeony a aooa?a; oeacaoaeue neaaeothuae iiceoeee
neiaiea a aooa?a; iaeioi?ua i?eciaee, oeacuaathuea ?aaeei /oa-
iey eee caiene e o.ae.; aeane?eioi? oaeea.
Iienuaathuay oaee no?oeoo?a aeaiiuo niaea?aeeony a oaeea
STDIO.H, eioi?ue aeieaeai aeeth/aoueny (iin?aaenoaii #INCLUDE) a
ethaie enoiaeiue oaee, a eioi?ii eniieuecothony ooieoeee ec noai-
aea?oiie aeaeeioaee. Ii oaeaea aeeth/aaony ooieoeeyie yoie aea-
eeioaee. A i?eaiaeeiie ieaea auaea?aeea ec oaeea STDIO.H eiaia,
i?aaeiacia/aaiua oieueei aeey eniieueciaaiey ooieoeeyie aeaeeioa-
ee, ia/eiathony n iiae/a?eeaaiey, n oai /oiau oiaiueoeoue aa?i-
yoiinoue niaiaaeaiey n eiaiaie a i?ia?aiia iieueciaaoaey.
DEFINE _BUFSIZE 512
DEFINE _NFILE 20 /*FILES THAT CAN BE HANDLED*/
TYPEDEF STRUCT _IOBUF (
CHAR *_PTR; /*NEXT CHARACTER POSITION*/
INT _CNT; /*NUMBER OF CHARACTERS LEFT*/
CHAR *_BASE; /*LOCATION OF BUFFER*/
INT _FLAG; /*MODE OF FILE ACCESS*/
INT _FD; /*FILE DESCRIPTOR*/
) FILE;
XTERN FILE _IOB[_NFILE];
DEFINE STDIN (&_IOB[0])
DEFINE STDOUT (&_IOB[1])
DEFINE STDERR (&_IOB[2])
DEFINE _READ 01 /* FILE OPEN FOR READING */
DEFINE _WRITE 02 /* FILE OPEN FOR WRITING */
DEFINE _UNBUF 04 /* FILE IS UNBUFFERED */
DEFINE _BIGBUF 010 /* BIG BUFFER ALLOCATED */
DEFINE _EOF 020 /* EOF HAS OCCURRED ON THIS FILE */
DEFINE _ERR 040 /* ERROR HAS OCCURRED ON THIS FILE */
DEFINE NULL 0
DEFINE EOF (-1)
DEFINE GETC(P) (–(P)->_CNT >= 0
? *(P)->_PTR++ & 0377 : _FILEBUF(P))
DEFINE GETCHAR() GETC(STDIN)
DEFINE PUTC(X,P) (–(P)->_CNT >= 0
? *(P)->_PTR++ = (X) : _FLUSHBUF((X),P))
DEFINE PUTCHAR(X) PUTC(X,STDOUT)
· 174 –
A ii?iaeueiii ninoiyiee iae?in GETC i?inoi oiaiueoaao
n/ao/ee, ia?aaeaeaaao oeacaoaeue e aica?auaao neiaie. (Anee
ii?aaeaeaiea #DEFINE neeoeii aeeeiiia, oi iii i?iaeieaeaaony n
iiiiuueth ia?aoiie einie /a?ou). Anee iaeiaei n/ao/ee noaiiaeo-
ny io?eoeaoaeueiui, oi GETC aucuaaao ooieoeeth _FILEBUF, eioi?ay
niiaa caiieiyao aooa?, ?aeieoeeaeece?oao niaea?aeeiia no?oeoo?u
e aica?auaao neiaie. Ooieoeey iiaeao i?aaeinoaaeyoue ia?aiineiue
eioa?oaen e a oi aea a?aiy niaea?aeaoue iaia?aiineiua eiino?oe-
oeee: GETC ianee?oao neiaie /eneii 0377, eioi?ia iiaeaaeyao
ciaeiaia ?anoe?aiea, inouanoaeyaiia ia PDP-11, e oai naiui
aa?aioe?oao iieiaeeoaeueiinoue anao neiaieia.
Oioy iu ia niae?aainy ianoaeaeaoue eaeea-eeai aeaoaee, iu
ana aea aeeth/eee nthaea ii?aaeaeaiea iae?ina PUTC, aeey oiai /oi-
au iieacaoue, /oi iia ?aaioaao a iniiaiii oi/ii oaeaea, eae e
GETC, ia?auaynue i?e caiieiaiee aooa?a e ooieoeee _FLUSHBUF.
Oaia?ue iiaeao auoue iaienaia ooieoeey FOPEN. Aieueoay /anoue
i?ia?aiiu ooieoeee FOPEN naycaia n ioe?uaaieai oaeea e ?anii-
eiaeaieai aai a ioaeiii ianoa, a oaeaea n onoaiiaeaieai aeoia
i?eciaeia oaeei ia?acii, /oiau iie oeacuaaee ioaeiia ninoiy-
iea. Ooieoeey FOPEN ia auaeaeyao eaeie-eeai aooa?iie iaiyoe;
yoi aeaeaaony ooieoeeae _FILEBUF i?e ia?aii /oaiee ec oaeea.
#INCLUDE
#DEFINE PMODE 0644 /*R/W FOR OWNER;R FOR OTHERS*/
FILE *FOPEN(NAME,MODE) /*OPEN FILE,RETURN FILE PTR*/
REGISTER CHAR *NAME, *MODE;
(
REGISTER INT FD;
REGISTER FILE *FP;
IF(*MODE !=’R’&&*MODE !=’W’&&*MODE !=’A’) (
FPRINTF(STDERR,”ILLEGAL MODE %S OPENING %SN”,
MODE,NAME);
EXIT(1);
)
FOR (FP=_IOB;FP<_iob if>_FLAG & (_READ ! _WRITE))==0)
BREAK; /*FOUND FREE SLOT*/
IF(FP>=_IOB+_NFILE) /*NO FREE SLOTS*/
RETURN(NULL);
IF(*MODE==’W’) /*ACCESS FILE*/
FD=CREAT(NAME,PMODE);
ELSE IF(*MODE==’A’) (
IF((FD=OPEN(NAME,1))==-1)
FD=CREAT(NAME,PMODE);
LSEEK(FD,OL,2);
) ELSE
FD=OPEN(NAME,0);
IF(FD==-1) /*COULDN’T ACCESS NAME*/
RETURN(NULL);
FP->_FD=FD;
FP->_CNT=0;
FP->_BASE=NULL;
FP->_FLAG &=(_READ ! _WRITE);
FP->_FLAG !=(*MODE==’R’) ? _READ : _WRITE;
RETURN(FP);
)
· 175 –
Ooieoeey _FILEBUF ianeieueei aieaa neiaeiay. Iniiaiay o?oae-
iinoue caeeth/aaony a oii, /oi _FILEBUF no?aieony ?ac?aoeoue
aeinooi e oaeeo e a oii neo/aa, eiaaea iiaeao ia ieacaoueny aein-
oaoi/ii ianoa a iaiyoe aeey aooa?ecaoeee aaiaea eee auaiaea. an-
ee i?ino?ainoai aeey iiaiai aooa?a iiaeao auoue iieo/aii ia?a-
uaieai e ooieoeee CALLOC, oi ana ioee/ii; anee aea iao, oi
_FILEBUF inouanoaeyao iaaooa?eciaaiiue aaiae/ auaiae, eniieue-
coy ioaeaeueiue neiaie, iiiauaiiue a eieaeueiii ianneaa.
#INCLUDE
_FILLBUF(FP) /*ALLOCATE AND FILL INPUT BUFFER*/
REGISTER FILE *FP;
(
STATIC CHAR SMALLBUF(NFILE);/*FOR UNBUFFERED 1/0*/
CHAR *CALLOC();
IF((FR->_FLAG&_READ)==0!!(FP->_FLAG&(EOF!_ERR))!=0
RETURN(EOF);
WHILE(FP->_BASE==NULL) /*FIND BUFFER SPACE*/
IF(FP->_FLAG & _UNBUF) /*UNBUFFERED*/
FP->_BASE=&SMALLBUF[FP->_FD];
ELSE IF((FP->_BASE=CALLOC(_BUFSIZE,1))==NULL)
FP->_FLAG !=_UNBUF; /*CAN’T GET BIG BUF*/
ELSE
FP->_FLAG !=_BIGBUF; /*GOT BIG ONE*/
FP->_PTR=FP->_BASE;
FP->_CNT=READ(FP->_FD, FP->_PTR,
FP->_FLAG & _UNBUF ? 1 : _BUFSIZE);
FF(–FP->_CNT_CNT== -1)
FP->_FLAG ! = _EOF;
ELSE
FP->_FLAG ! = _ ERR;
FP->_CNT = 0;
RETURN(EOF);
)
RETURN(*FP->_PTR++ & 0377); /*MAKE CHAR POSITIVE*/
)
I?e ia?aii ia?auaiee e GETC aeey eiie?aoiiai oaeea n/ao/ee
ieacuaaaony ?aaiui ioeth, /oi i?eaiaeeo e ia?auaieth e
_FILEBUF. Anee ooieoeey _FILEBUF iaeaeao, /oi yoio oaee ia io-
e?uo aeey /oaiey, iia iaiaaeeaiii aica?auaao EOF. A i?ioeaiii
neo/aa iia iuoaaony auaeaeeoue aieueoie aooa?, a anee ae yoi ia
oaeaaony, oi aooa? ec iaeiiai neiaiea. I?e yoii iia caiineo a
_FLAG niioaaonoaothuoth eioi?iaoeeth i aooa?ecaoeee.
?ac aooa? oaea nicaeai, ooieoeey _FILEBUF i?inoi aucuaaao
ooieoeeth READ aeey aai caiieiaiey, onoaiaaeeaaao n/ao/ee e
oeacaoaee e aica?auaao neiaie ec ia/aea aooa?a.
Aaeeinoaaiiue inoaaoeeny iaauyniaiiui aii?in ninoieo a
oii, eae ana ia/eiaaony. Iannea _IOB aeieaeai auoue ii?aaeaeai e
eieoeeaeece?iaai aeey STDIN, STDOUT e STDERR:
· 176 –
FILE _IOB[NFILE] = (
(NULL,0,_READ,0), /*STDIN*/
(NULL,0,NULL,1), /*STDOUT*/
(NULL,0,NULL,_WRITE ! _UNBUF,2) /*STDERR*/
);
Ec eieoeeaeecaoeee /anoe _FLAG yoiai ianneaa no?oeoo? aeaeii,
/oi oaee STDIN i?aaeiacia/ai aeey /oaiey, oaee STDOUT – aeey
caiene e oaee STDERR – aeey caiene aac eniieueciaaiey aooa?a.
Oi?aaeiaiea 8-3.
Ia?aieoeoa ooieoeee FOPEN e _FILEBUF, eniieuecoy iiey
aianoi yaiuo iiaeoiauo iia?aoeee.
Oi?aaeiaiea 8-4.
?ac?aaioaeoa e iaieoeoa ooieoeee _FLUSHBUF e FCLOSE.
Oi?aaeiaiea 8-5.
Noaiaea?oiay aeaeeioaea niaea?aeeo ooieoeeth
FSEEK(FP, OFFSET, ORIGIN)
eioi?ay eaeaioe/ia ooieoeee LSEEK, eneeth/ay oi, /oi FP yaeyao-
ny oeacaoaeai oaeea, a ia aeane?eioi?ii oaeea. Iaieoeoa
FSEEK. Oaaaeeoanue, /oi aaoa FSEEK i?aaeeueii niaeanoaony n ao-
oa?ecaoeeae, naeaeaiiie aeey ae?oaeo ooieoeee aeaeeioaee.
8.6. I?eia? – ?ania/aoea ni?aai/ieeia
Eiiaaea o?aaoaony ae?oaie aeae acaeiiaeaenoaey n nenoaiie
oaeeia – ii?aaeaeaiea eioi?iaoeee i oaeea, a ia oiai, /oi a
iai niaea?aeeony. I?eia?ii iiaeao neoaeeoue eiiaiaea LS (“nienie
ni?aai/ieea”) nenoaiu UNIX. Ii yoie eiiaiaea ?ania/aouaathony
eiaia oaeeia ec ni?aai/ieea e, iaiaycaoaeueii, ae?oaay eioi?-
iaoeey, oaeay eae ?acia?u, ?ac?aoaiey e o.ae.
Iineieueeo, ii e?aeiae ia?a, ia nenoaia UNIX ni?aai/iee
yaeyaony i?inoi oaeeii, oi a oaeie eiiaiaea, eae LS iao ie/a-
ai iniaaiiiai; iia /eoaao oaee e auaeaeyao ioaeiua /anoe ec
iaoiaeyuaeny oai eioi?iaoeee. Iaeiaei oi?iao eioi?iaoeee ii?aaea-
eyaony nenoaiie, oae /oi LS aeieaeia ciaoue, a eaeii aeaea ana
i?aaenoaaeyaony a nenoaia.
Iu yoi /anoe/ii i?ieeethno?e?oai i?e iaienaiee i?ia?aiiu
FSIZE. I?ia?aiia FSIZE i?aaenoaaeyao niaie niaoeeaeueioth oi?io
LS, eioi?ay ia/aoaao ?acia?u anao oaeeia, oeacaiiuo a nienea
aa a?aoiaioia. Anee iaeei ec oaeeia yaeyaony ni?aai/ieeii, oi
aeey ia?aaioee yoiai ni?aai/ieea i?ia?aiia FSIZE ia?auaaony
naia e naaa ?aeo?neaii. anee aea a?aoiaiou aiiaua ionoonoao-
tho, oi ia?aaaouaaaony oaeouee ni?aai/iee.
Aeey ia/aea aeaaeei e?aoeee iaci? no?oeoo?u nenoaiu oaeeia.
Ni?aai/iee – yoi oaee, eioi?ue niaea?aeeo nienie eiai oaeeia e
iaeioi?ia oeacaiea i oii, aaea iie ?aciauathony. Oaeoe/anee
yoi oeacaiea yaeyaony eiaeaenii aeey ae?oaie oaaeeoeu, eioi?oth
iacuaatho “I – oceiaie oaaeeoeae”. Aeey oaeea I-ocae – yoi oi,
· 177 –
aaea niaea?aeeony any eioi?iaoeey i oaeea, ca eneeth/aieai aai
eiaie. Caienue a ni?aai/ieea ninoieo oieueei ec aeaoo yeaiai-
oia: iiia?a I-ocea e eiaie oaeea. Oi/iay niaoeeoeeaoeey iinoo-
iaao i?e aeeth/aiee oaeea SYS/DIR.H, eioi?ue niaea?aeeo
#DEFINE DIRSIZ 14 /*MAX LENGTH OF FILE NAME*/
STRUCT DIRECT /*STRUCTURE OF DIRECTORY ENTRY*/
(
INO_T&_INO; /*INODE NUMBER*/
CHAR &_NAME[DIRSIZ]; /*FILE NAME*/
);
“Oei” INO_T – yoi ii?aaeaeyaiue iin?aaenoaii TYPEDEF oei,
eioi?ue iienuaaao eiaeaen I-oceiaie oaaeeoeu. Ia PDP-11 UNIX
yoei oeiii ieacuaaaony UNSIGNED, ii yoi ia oio ni?o eioi?ia-
oeee, eioi?ue iiiauatho aioo?ue i?ia?aiiu: ia ?aciuo nenoaiao
yoio oei iiaeao auoue ?acee/iui. Iiyoiio e neaaeoao eniieueci-
aaoue TYPEDEF. Iieiue iaai? “nenoaiiuo” oeiia iaoiaeeony a
oaeea SYS/TUPES.H.
Ooieoeey STAT aa?ao eiy oaeea e aica?auaao anth niaea?aeauo-
thny a I-ii ocea eioi?iaoeeth ia yoii oaeea (eee -1, anee eia-
aony ioeaea). Oaeei ia?acii, a ?acoeueoaoa
STRUCT STAT STBUF;
CHAR *NAME;
STAT(NAME,&STBUF);
no?oeoo?a STBUF iaiieiyaony eioi?iaoeeae ec I-ai ocea i oaeea n eiaiai
NAME. No?oeoo?a, iienuaathuay aica?auaaioth ooieoeeae STAT eioi?iaoeeth,
iaoiaeeony a oaeea SYS/STAT.H e auaeyaeeo neaaeothuei ia?acii:
STRUCT STAT /*STRUCTURE RETURNED BY STAT*/
(
DEV_T ST_DEV; /* DEVICE OF INODE */
INO_T ST_INO; /* INODE NUMBER */
SHORT ST_MODE /* MODE BITS */
SHORT ST_NLINK; / *NUMBER OF LINKS TO FILE */
SHORT ST_UID; /* OWNER’S USER ID */
SHORT ST_GID; /* OWNER’S GROUP ID */
DEV_T ST_RDEV; /* FOR SPECIAL FILES */
OFF_T ST_SIZE; /* FILE SIZE IN CHARACTERS */
TIME_T ST_ATIME; /* TIME LAST ACCESSED */
TIME_T ST_MTIME; /* TIME LAST MODIFIED */
TIME_T ST_CTIME; /* TIME ORIGINALLY CREATED */
)
Aieueoay /anoue yoie eioi?iaoeee iauyniyaony a eiiiaioa?eyo.
Yeaiaio ST.MODE niaea?aeeo iaai? oeaaia, iienuaathueo oaee; aeey
oaeianoaa ii?aaeaeaiey oeaaia oaeaea iaoiaeyony a oaeea
SYS/STAT.H.
· 178 –
#DEFINE S_IFMT 0160000 /* TYPE OF FILE */
#DEFINE S_IFDIR 0040000 /* DIRECTORY */
#DEFINE S_IFCHR 0020000 /* CHARACTER SPECIAL */
#DEFINE S_IFBLK 0060000 /* BLOCK SPECIAL */
#DEFINE S_IFREG 0100000 /* REGULAR */
#DEFINE S_ISUID 04000 /* SET USER ID ON EXECUTION */
#DEFINE S_ISGID 02000 /* SET GROUP ID ON EXECUTION */
#DEFINE S_ISVTX 01000 /*SAVE SWAPPED TEXT AFTER USE*/
#DEFINE S_IREAD 0400 /* READ PERMISSION */
#DEFINE S_IWRITE 0200 /* WRITE PERMISSION */
#DEFINE S_IEXEC 0100 /* EXECUTE PERMISSION */
Oaia?ue iu a ninoiyiee iaienaoue i?ia?aiio FSIZE. Anee ii-
eo/aiiue io ooieoeee STAT ?aaeei oeacuaaao, /oi oaee ia yaey-
aony ni?aai/ieeii, oi aai ?acia? oaea iiae ?oeie e iiaeao auoue
iaia/aoai iaiin?aaenoaaiii. Anee aea ii ieacuaaaony ni?aai/ie-
eii, oi iu aeieaeiu ia?aaaouaaoue yoio ni?aai/iee ioaeaeueii aeey
eaaeaeiai oaeea; oae eae ni?aai/iee iiaeao a naith i/a?aaeue ni-
aea?aeaoue iiaeni?aai/ieee, yoio i?ioeann ia?aaioee yaeyaony ?a-
eo?neaiui.
Eae iau/ii, aaaeouay i?ia?aiia aeaaiui ia?acii eiaao aeaei
n eiiaiaeiie no?ieie a?aoiaioia; iia ia?aaeaao eaaeaeue a?aoiaio
ooieoeee FSIZE a aieueoie aooa?.
#INCLUDE
#INCLUDE
#INCLUDE
#INCLUDE
#DEFINE BUFSIZE 256
MAIN(ARGC,ARGV) /*FSIZE:PRINT FILE SIZES*/
CHAR *ARGV[];
(
CHAR BUF[BUFSIZE];
IF(ARGC==1) ( /*DEFAULT:CURRENT DIRECTORY*/
ATRCPY(BUF,”.”);
FSIZE(BUF);
) ELSE
WHILE(–ARGC>0) (
STRCPY(BUF,*++ARGV);
FSIZE(BUF);
)
)
Ooieoeey FSIZE ia/aoaao ?acia? oaeea. Anee iaeiaei oaee
ieacuaaaony ni?aai/ieeii, oi FSIZE nia/aea aucuaaao ooieoeeth
DIRECTORY aeey ia?aaioee anao oeacaiiuo a iai oaeeia. Ia?aoe-
oa aieiaiea ia eniieueciaaiea eiai oeaaia S_IFMT e _IFDIR ec
oaeea STAT.H.
· 179 –
FSIZE(NAME) /*PRINT SIZE FOR NAME*/
CHAR *NAME;
(
STRUCT STAT STBUF;
IF(STAT(NAME,&STBUF)== -1) (
FPRINTF(STDERR,”FSIZE:CAN’T FIND %SN”,NAME);
RETURN;
)
IF((STBUF.ST_MODE & S_IFMT)==S_IFDIR)
DIRECTORY(NAME);
PRINTF(“%8LD %SN”,STBUF.ST_SIZE,NAME);
)
Ooieoeey DIRECTORY yaeyaony naiie neiaeiie. Iaeiaei cia/e-
oaeueiay aa /anoue naycaia n nicaeaieai aeey ia?aaaouaaaiiai a
aeaiiue iiiaio oaeea aai iieiiai eiaie, ii eioi?iio iiaeii
ainnoaiiaeoue iooue a aea?aaa.
DIRECTORY(NAME) /*FSIZE FOR ALL FILES IN NAME*/
CHAR *NAME;
(
STRUCT DIRECT DIRBUF;
CHAR *NBP, *NEP;
INT I, FD;
NBP=NAME+STRLEN(NAME);
*NBP++=’/’; /*ADD SLASH TO DIRECTORY NAME*/
IF(NBP+DIRSIZ+2>=NAME+BUFSIZE) /*NAME TOO LONG*/
RETURN;
IF((FD=OPEN(NAME,0))== -1)
RETURN;
WHILE(READ(FD,(CHAR *)&DIRBUF,SIZEOF(DIRBUF))>0) (
IF(DIRBUF.D_INO==0) /*SLOT NOT IN USE*/
CONTINUE;
IF(STRCMP (DIRBUF.D_NAME,”.”)==0
!! STRCMP(DIRBUF.D_NAME,”..”)==0
CONTINUE; /*SKIP SELF AND PARENT*/
FOR (I=0,NEP=NBP;I
IF (P->S.SIZE>=NUNITS) ( /*BIG ENOUGH*/
IF (P->S.SIZE==NUNITS) /*EXACTLY*/
G->S.PTR=P->S.PTR;
ELSE ( /*ALLOCATE TAIL END*/
P->S.SIZE-=NUNITS;
P+=P->S.SIZE;
P->S.SIZE=NUNITS;
)
ALLOCP=G;
RETURN((CHAR *)(P+1));
)
IF(P==ALLOCP) /*WRAPPED AROUND FREE LIST*/
IF((P=MORECORE(NUNITS))==NULL)
RETURN(NULL); /*NONE LEFT*/
)
)
Ia?aiaiiay BASE eniieuecoaony aeey ia/aea ?aaiou. Anee
ALLOCP eiaao cia/aiea NULL, eae a neo/aa ia?aiai ia?auaiey e
ALLOC, oi nicaeaaony au?iaeaeaiiue naiaiaeiue nienie: ii ninoieo
ec naiaiaeiiai aeiea ?acia?a ioeue e oeacaoaey ia naiiai naay.
A ethaii neo/aa caoai enneaaeoaony naiaiaeiue nienie. Iiene
naiaiaeiiai aeiea iiaeoiaeyuaai ?acia?a ia/eiaaony n oiai ianoa
(ALLOCP), aaea aue iaeaeai iineaaeiee aeie; oaeay no?aoaaey ii-
iiaaao nio?aieoue iaeii?iaeiinoue aeenea. Anee iaeaeai neeoeii
aieueoie aeie, oi iieueciaaoaeth i?aaeeaaaaony aai oainoiaay
/anoue; yoi i?eaiaeeo e oiio, /oi a caaieiaea enoiaeiiai aeiea
ioaeii eciaieoue oieueei aai ?acia?. Ai anao neo/ayo aica?auaa-
iue iieueciaaoaeth oeacaoaeue oeacuaaao ia aeaenoaeoaeueii nai-
aiaeioth iaeanoue, eaaeauoth ia aaeeieoeo aeaeueoa caaieiaea. Ia?aoe-
oa aieiaiea ia oi, /oi ooieoeey ALLOC ia?aae aica?auaieai “P”
i?aia?acoao aai a oeacaoaeue ia neiaieu.
Ooieoeey MORECORE iieo/aao iaiyoue io iia?aoeeiiiie nenoa-
iu. Aeaoaee oiai, eae yoi inouanoaeyaony, iaiythony, eiia/ii,
io nenoaiu e nenoaia. Ia nenoaia UNIX oi/ea aoiaea SBRK(N)
aica?auaao oeacaoaeue ia “N” aeiiieieoaeueiuo aaeoia iaiy-
oe.(oeacaoaeue oaeaieaoai?yao anai ia?aie/aieyi ia au?aaieaa-
iea). Oae eae cai?in e nenoaia ia auaeaeaiea iaiyoe yaeyaony
n?aaieoaeueii aei?iaie iia?aoeeae, iu ia oioei aeaeaoue yoi i?e
eaaeaeii ia?auaiee e ooieoeee ALLOC. Iiyoiio ooieoeey MORECORE
ie?oaeyao cao?aaiaaiiia /enei aaeeieoe aei aieueoaai cia/aiey;
yoio aieueoee aeie aoaeao caoai ?acaeaeai oae, eae iaiaoiaeeii.
Ianooaae?othuay aaee/eia yaeyaony ia?aiao?ii, eioi?ue iiaeao
auoue iiaeia?ai a niioaaonoaee n iaiaoiaeeiinoueth.
· 183 –
#DEFINE NALLOC 128 /*#UNITS TO ALLOCATE AT ONCE*/
STATIC HEADER *MORECORE(NU) /*ASK SYSTEM FOR MEMORY*/
UNSIGNED NU;
(
CHAR *SBRK();
REGISTER CHAR *CP;
REGISTER HEADER *UP;
REGISTER INT RNU;
RNU=NALLOC*((NU+NALLOC-1)/NALLOC);
CP=SBRK(RNU*SIZEOF(HEADER));
IF ((INT)CP==-1) /*NO SPACE AT ALL*/
RETURN(NULL);
UP=(HEADER *)CP;
UP->S.SIZE=RNU;
FREE((CHAR *)(UP+1));
RETURN(ALLOCP);
)
Anee aieueoa ia inoaeinue naiaiaeiiai i?ino?ainoaa, oi ooi-
eoeey SBRK aica?auaao “-1”, oioy NULL aue au eo/oei auai?ii.
Aeey iaaeaaeiinoe n?aaiaiey “-1” aeieaeia auoue i?aia?aciaaia e
oeio INT. Niiaa i?eoiaeeony iiiaie?aoii eniieueciaaoue yaiua
i?aia?aciaaiey (ia?aaiae) oeiia, /oiau iaania/eoue ii?aaeaeai-
ioth iacaaeneiinoue ooieoeee io aeaoaeae i?aaenoaaeaiey oeacaoa-
eae ia ?acee/iuo iaoeiao.
E iineaaeiaa – naia ooieoeey FREE. Ia/eiay n ALLOCP, iia
i?inoi i?iniao?eaaao naiaiaeiue nienie a iienea ianoa aeey
aaaaeaiey naiaiaeiiai aeiea. Yoi ianoi iaoiaeeony eeai iaaeaeo
aeaoiy nouanoaothueie aeieaie, eeai a iaeiii ec eiioeia nienea.
A ethaii neo/aa, anee inaiaiaeeaoeeny aeie i?eiueaao e iaeiiio
ec ninaaeieo, niaaeiua aeiee iauaaeeiythony. Neaaeeoue ioaeii oieue-
ei caoai, /oiau oeacaoaee oeacuaaee ia oi, /oi ioaeii, e /oi-
au ?acia?u auee onoaiiaeaiu i?aaeeueii.
FREE(AP) /*PUT BLOCKE AP IN FREE LIST*/
CHAR *AP;
(
REGISTER HEADER *P, *G;
P=(HEADER*)AP-1; /*POINT TO HEADER*/
FOR (G=ALLOCP; !(P>G && P>G->S.PTR);G=G->S.PTR)
IF (G>=G->S.PTR && (P>G !! P
BREAK; /*AT ONE END OR OTHER*/
IF (P+P->S.SIZE==G->S.PTR)(/*JOIN TO UPPER NBR*/
P->S.SIZE += G->S.PTR->S.SIZE;
P->S.PTR = G->S.PTR->S.PTR;
) ELSE
P->S.PTR = G->S.PTR;
IF (G+G->S.SIZE==P) ( /*JOIN TO LOWER NBR*/
G->S.SIZE+=P->S.SIZE;
G->S.PTR=P->S.PTR;
) ELSE
G->S.PTR=P;
ALLOCP = G;
)
· 184 –
Oioy ?ani?aaeaeaiea iaiyoe ii naiae nooe caaeneo io en-
iieuecoaiie iaoeiu, i?eaaaeaiiay auoa i?ia?aiia iieacuaaao,
eae yoo caaeneiinoue iiaeii ?aaoee?iaaoue e ia?aie/eoue aanueia
iaaieueoie /anoueth i?ia?aiiu. Eniieueciaaiea TYPEDEF e UNION
iicaieyao ni?aaeoueny n au?aaieaaieai (i?e oneiaee, /oi ooie-
oeey SBRK iaania/eaaao iiaeoiaeyuee oeacaoaeue). Ia?aaiaeu oeiia
i?aaiecotho auiieiaiea yaiiai i?aia?aciaaiey oeiia e aeaaea
ni?aaeythony n iaoaea/ii ?ac?aaioaiiui nenoaiiui eioa?oaenii.
E oioy ?anniio?aiiua caeanue iiae?iaiinoe naycaiu n ?ani?aaeaea-
ieai iaiyoe, iauee iiaeoiae ?aaiui ia?acii i?eiaiei e e ae?oaei
neooaoeeyi.
Oi?aaeiaiea 8-6.
Ooieoeey ec noaiaea?oiie aeaeeioaee CALLOC(N,SIZE) aica?a-
uaao oeacaoaeue ia “N” iauaeoia ?acia?a SIZE, i?e/ai niioaao-
noaothuay iaiyoue eieoeeaeece?oaony ia ioeue. iaieoeoa i?ia?aiio
aeey CALLOC, eniieuecoy ooieoeeth ALLOC eeai a ea/anoaa ia?acoea,
eeai eae ooieoeeth, e eioi?ie i?ienoiaeeo ia?auaiea.
Oi?aaeiaiea 8-7.
Ooieoeey ALLOC i?eieiaao cao?aaiaaiiue ?acia?, ia i?iaa-
?yy aai i?aaaeiiiaeiaiinoe; ooieoeey FREE iieaaaao, /oi oio
aeie, eioi?ue iia aeieaeia inaiaiaeeoue, niaea?aeeo i?aaeeueiia
cia/aiea a iiea ?acia?a. Oniaa?oainoaoeoa yoe i?ioeaaeo?u,
cao?aoea aieueoa oneeee ia i?iaa?eo ioeaie.
Oi?aaeiaiea 8-8.
Iaieoeoa ooieoeeth BFREE(P,N), eioi?ay aeeth/aao i?iecaieue-
iue aeie “P” ec “N” neiaieia a nienie naiaiaeiuo aeieia, oi-
?aaeyaiue ooieoeeyie ALLOC e FREE. N iiiiuueth ooieoeee BFREE
iieueciaaoaeue iiaeao a ethaia a?aiy aeiaaaeyoue a naiaiaeiue nie-
nie noaoe/aneee eee aiaoiee iannea.
· 185 –
9. I?eeiaeaiea A: ni?aai/iia ?oeiaiaenoai ii ycueo ‘C’
9.1. Aaaaeaiea
Yoi ?oeiaiaenoai iienuaaao ycue ‘n’ aeey eiiiuethoa?ia DEC
PDP-11, HONEYWELL 6000, IBM nenoaia/370 e INTERDATA 8/32.
oai, aaea anoue ?anoiaeaeaiey, iu nin?aaeioa/eaaainy ia aa?nee
aeey PDP-11, no?aiynue a oi aea a?aiy oeacaoue aeaoaee, eioi?ua
caaenyo io ?aaeecaoeee. Ca iaeui eneeth/aieai, yoe ?anoiaeaeaiey
iaiin?aaenoaaiii iaoneiaeaiu iniiaiuie naienoaaie eniieuecoa-
iiai aiia?aoiiai iai?oaeiaaiey; ?acee/iua eiiieeyoi?u iau/ii
aiieia niaianoeiu.
10. Eaene/aneea niaeaoaiey
Eiaaony oanoue eeannia eaenai: eaeaioeoeeaoi?u, eeth/aaua
neiaa, eiinoaiou, no?iee, iia?aoeee e ae?oaea ?acaeaeeoaee.
I?iaaeu, oaaoeyoeee , iiaua no?iee e eiiiaioa?ee (niaianoii,
“ionoua i?iiaaeooee”), eae iienaii ieaea, eaii?e?othony, ca en-
eeth/aieai oao neo/aaa, eiaaea iie neoaeao ?acaeaeeoaeyie eae-
nai. Iaiaoiaeei eaeie-oi ionoie i?iiaaeooie aeey ?acaeaeaiey
eaeaioeoeeaoi?ia, eeth/aauo neia e eiinoaio, eioi?ua a i?ioea-
iii neo/aa nieuethony.
Anee naeaeai ?acai? aoiaeiiai iioiea ia eaenaiu aieioue aei
aeaiiiai neiaiea, oi a ea/anoaa neaaeothuae eaenaiu aa?aony na-
iay aeeeiiay no?iea neiaieia, eioi?ay aua iiaeao i?aaenoaaeyoue
niaie eaenaio.
10.1. Eiiiaioa?ee
Eiiiaioa?ee ioe?uaaaony neiaieaie /* e caeai/eaaaony
neiaieaie /*. Eiiiaioa?ee ia aeeaaeuaathony ae?oa a ae?oaa.
10.2. Eaeaioeoeeaoi?u (eiaia)
Eaeaioeoeeaoi? – yoi iineaaeiaaoaeueiinoue aoea e oeeo?; ia?-
aue neiaie aeieaeai auoue aoeaie. Iiae/a?eeaaiea _ n/eoaaony
aoeaie. Aoeau ieaeiaai e aa?oiaai ?aaeno?ia ?acee/athony. cia-
/aueie yaeythony ia aieaa, /ai ia?aua ainaiue neiaieia, oioy
iiaeii eniieueciaaoue e aieueoa. Ia aiaoiea eaeaioeoeeaoi?u, ei-
oi?ua eniieuecothony ?acee/iuie annaiaea?aie e caa?oc/eeaie,
iaeeaaeuaaony aieaa aeanoeea ia?aie/aiey:
DEC PDP-11 7 neiaieia, 2 ?aaeno?a
HONEYWELL 6000 6 neiaieia, 1 ?aaeno?
IBM 360/370 7 neiaieia, 1 ?aaeno?
INTERDATA 8/32 8 neiaieia, 2 ?aaeno?a
· 186 –
10.3. Eeth/aaua neiaa
Neaaeothuea eaeaioeoeeaoi?u ca?aca?ae?iaaiu aeey eniieueciaa-
iey a ea/anoaa eeth/aauo neia e ia iiaoo eniieueciaaoueny eiui
ia?acii:
INT EXTERN ELSE
CHAR REGISTER FOR
FLOAT TYPEDEF DO
DOUBLE STATIC WHILE
STRUCT GOTO SWITCH
UNION RETURN CASE
LONG SIZEOF DEFAULT
SHORT BREAK ENTRY
UNSIGNED CONTINUE
*AUTO IF
Eeth/aaia neiai ENTRY a ianoiyuaa a?aiy ia eniieuecoaony ea-
eei-eeai eiiieeyoi?ii; iii ca?aca?ae?iaaii aeey eniieueciaaiey
a aoaeouai. A iaeioi?uo ?aaeecaoeeyo ?aca?ae?oaony oaeaea neiaa
FORTRAN e ASM
10.4. Eiinoaiou
Eiaaony ianeieueei aeaeia eiinoaio, eioi?ua ia?a/eneaiu ieaea.
A ioieoa 10.6 ?acthie?othony oa?aeoa?enoeee aiia?aoiuo n?aae-
noa, eioi?ua aeeytho ia ?acia?u.
10.4.1. Oeaeua eiinoaiou
Oeaeay eiinoaioa, ninoiyuay ec iineaaeiaaoaeueiinoe oeeo?,
n/eoaaony ainueia?e/iie, anee iia ia/eiaaony n 0 (oeeo?a
ioeue), e aeanyoe/iie a i?ioeaiii neo/aa. Oeeo?u 8 e 9 eiatho
ainueia?e/iua cia/aiey 10 e 11 niioaaonoaaiii. Iineaaeiaaoaeue-
iinoue oeeo?, eioi?ie i?aaeoanoaotho neiaieu 0o (ioeue, o-iaeaiue-
eia) eee 0o (ioeue o-aieueoia), ?anniao?eaaaony eae oanoiaaeoea-
oe?e/iia oeaeia. Oanoiaaeoeaoe?e/iua oeeo?u aeeth/atho aoeau io a
(iaeaiueeia) eee a (aieueoia) aei F (iaeaiueeia) eee F (aieueoia)
ni cia/aieyie io 10 aei 15. Aeanyoe/iay eiinoaioa, aaee/eia
eioi?ie i?aauoaao iaeaieueoaa iaoeiiia oeaeia ni ciaeii, n/e-
oaaony aeeeiiie; ainia?e/iay eee oanoiaaeoeaoe?e/iay eiinoaioa,
eioi?ia i?aauoaao iaeaieueoaa iaoeiiia oeaeia aac ciaea, oaeaea
n/eoaaony aeeeiiie.
10.4.2. ssaiua aeeeiiua eiinoaiou
Aeanyoe/iay, ainia?e/iay eee oanoiaaeoeaoe?e/iay eiinoaioa,
ca eioi?ie iaiin?aaenoaaiii neaaeoao L (yeue-iaeaiueeia) eee L
(yeue-aieueoia), yaeyaony aeeeiiie eiinoaioie. Eae ianoaeaeaaony
ieaea, ia iaeioi?uo iaoeiao oeaeua e aeeeiiua cia/aiey iiaoo
?anniao?eaaoueny eae eaeaioe/iua.
10.4.3. Neiaieueiua eiinoaiou
Neiaieueiay eiinoaioa – yoi neiaie, caeeth/aiiue a iaeeii/-
iua eaau/ee, eae, iai?eia?, ‘X’. Cia/aieai neiaieueiie eiin-
oaiou yaeyaony /eneaiiia cia/aiea yoiai neiaiea a iaoeiiii
i?aaenoaaeaiee iaai?a neiaieia.
· 187 –
Iaeioi?ua iaa?aoe/aneea neiaieu, iaeeii/iay eaau/ea ‘ e
ia?aoiay einay /a?oa iiaoo auoue i?aaenoaaeaiu a niioaaono-
aee ni neaaeothuae oaaeeoeae oneiaiuo iineaaeiaaoaeueiinoae:
iiaay no?iea NL/LF/ N
ai?eciioaeueiay oaaoeyoeey HT T
neiaie aica?aoa ia iaeio iiceoeeth BS B
aica?ao ea?aoee CR R
ia?aoiae ia iiaoth no?aieoeo FF F
ia?aoiay einay /a?oa
iaeeii/iay eaau/ea ‘ ‘
eiiaeiaoeey aeoia DDD DDD
Oneiaiay iineaaeiaaoaeueiinoue DDD ninoieo ec ia?aoiie ei-
nie /a?ou, ca eioi?ie neaaeotho 1,2 eee 3 ainia?e/iuo oeeo?u,
eioi?ua ?anniaoeaathony eae caaeathuea cia/aiea aeaeaaiiai nei-
aiea. Niaoeeaeueiui neo/aai yoie eiino?oeoeee yaeyaony iineaaei-
aaoaeueiinoue 0 (ca ioeai ia neaaeoao oeeo?a), eioi?ay ii?aaea-
eyao neiaie NUL. anee neaaeothuee ca ia?aoiie einie /a?oie
neiaie ia niaiaaeaao n iaeiei ec oeacaiiuo, oi ia?aoiay einay
/a?oa eaii?e?oaony.
10.4.4. Ieaaathuea eiinoaiou
Ieaaathuay eiinoaioa ninoieo ec oeaeie /anoe, aeanyoe/iie
oi/ee, ae?iaiie /anoe, aoeau E (iaeaiueeay) eee E (aieueoay) e
oeaeie yeniiiaiou n iaiaycaoaeueiui ciaeii. Eae oeaeay, oae e
ae?iaiay /anoue yaeythony iineaaeiaaoaeueiinoueth oeeo?. Eeai oeaeay,
eeai ae?iaiay /anoue (ii ia iaa) iiaeao ionoonoaiaaoue; eeai aea-
nyoe/iay oi/ea, eeai a (iaeaiueeay) e yeniiiaioa (ii ia oi e
ae?oaia iaeiia?aiaiii) iiaeao ionoonoaiaaoue. Eaaeaeay ieaaathuay
eiinoaioa n/eoaaony eiathuae aeaieioth oi/iinoue.
10.5. No?iee
No?iea – yoi iineaaeiaaoaeueiinoue neiaieia, caeeth/aiiay a
aeaieiua eaau/ee, eae, iai?eeia?,”…”. No?iea eiaao oei
“iannea ianneaia” e eeann iaiyoe STATIC (ni. Ioieo 4 ieaea).
No?iea eieoeeaeece?iaaia oeacaiiuie a iae neiaieaie. Ana
no?iee, aeaaea eaeaioe/ii caienaiiua, n/eoathony ?acee/iuie.
Eiiieeyoi? iiiauaao a eiiaoe eaaeaeie no?iee ioeaaie aaeo 0, n
oai /oiau i?iniao?eaathuay no?ieo i?ia?aiia iiaea ii?aaeaeeoue
aa eiiaoe. Ia?aae noiyuei aioo?e no?iee neiaieii aeaieiie ea-
au/ee “ aeieaeai auoue iinoaaeai neiaie ia?aoiie einie /a?ou ;
e?iia oiai, iiaoo eniieueciaaoueny oa aea oneiaey iineaaeiaa-
oaeueiinoe, /oi e a neiaieueiuo eiinoaioao. E iineaaeiaa, ia-
?aoiay einay /a?oa , ca eioi?ie iaiin?aaenoaaiii neaaeoao
neiaie iiaie no?iee, eaii?e?oaony.
· 188 –
10.6. Oa?aeoa?enoeee aiia?aoiuo n?aaenoa
Neaaeothuay ieaea oaaeeoea noiie?oao iaeioi?ua naienoaa ai-
ia?aoiiai iai?oaeiaaiey, eioi?ua iaiythony io iaoeiu e iaoeia.
Oioy iie e aeeytho ia ia?aiineiinoue i?ia?aii, ia i?aeoeea iie
i?aaenoaaeytho iaeaiueeoth i?iaeaio, /ai yoi iiaeao eacaoueny ca-
?aiaa.
Oaaeeoea 1
DEC PDP-11 HONEYWELL IBM 370 INTERDATA 8/32
ASCII ASCII EBCDIC ASCII
CHAR 8 BITS 9 BITS 8 BITS 8 BITS
INT 16 36 32 32
SHORT 16 36 16 16
LONG 32 36 32 32
FLOAT 32 36 32 32
DOUBLE 64 72 64 64
RANGE -38/+38 -38/+38 -76/+76 -76/+76
11. Neioaene/aneay iioaoeey
A eniieuecoaiie a yoii ?oeiaiaenoaa neioaene/aneie iioaoeee
neioaene/aneea eaoaai?ee auaeaeythony eo?neaii (i?ei. ia?aa.:
a ianoiyuaa a?aiy neioaene/aneea eaoaai?ee aianoi eo?neaii
auaeaeythony iiae/a?eeaaieai), a eeoa?iua neiaa e neiaieu –
aee?iui o?eooii. Aeueoa?iaoeaiua eaoaai?ee ia?a/eneythony ia
ioaeaeueiuo no?i/eao. Iaiaycaoaeueiue neiaie, oa?ieiaeueiue eee
iaoa?ieiaeueiue, oeacuaaaony eiaeaenii “iaia”, oae /oi
( au?aaeaiea
——— iaia )
oeacuaaao ia iaiaycaoaeueiia au?aaeaiea, caeeth/aiiia a oeao?-
iuo neiaeao. Neioaenen noiie?oaony a ioieoa 18.
12. *oi a eiaia oaaa iiai?
sscue “C” iniiauaaao eioa?i?aoaoeeth eaeaioeoeeaoi?a ia aeaoo
i?eciaeao eaeaioeoeeaoi?a: aai eeanna iaiyoe e aai oeia.
Eeann iaiyoe ii?aaeaeyao ianoi e a?aiy o?aiaiey iaiyoe, nay-
caiiie n eaeaioeoeeaoi?ii; oei ii?aaeaeyao niune aaee/ei, ia-
oiaeyueony a iaiyoe, ii?aaeaeaiiie iiae eaeaioeoeeaoi?ii.
Eiathony /aou?a eeanna iaiyoe: aaoiiaoe/aneay, noaoe/an-
eay, aiaoiyy e ?aaeno?iaay. Aaoiiaoe/aneea ia?aiaiiua yaey-
thony eieaeueiuie aeey eaaeaeiai auciaa aeiea e en/acatho i?e au-
oiaea ec yoiai aeiea. Noaoe/aneea ia?aiaiiua yaeythony eieaeue-
iuie, ii nio?aiytho naie cia/aiey aeey neaaeothuaai aoiaea a aeie
aeaaea iinea oiai, eae oi?aaeaiea ia?aaeaaony ca i?aaeaeu aeiea.
Aiaoiea ia?aiaiiua nouanoaotho e nio?aiytho naie cia/aiey a
oa/aiea auiieiaiey anae i?ia?aiiu e iiaoo eniieueciaaoueny aeey
nayce iaaeaeo ooieoeeyie, a oii /enea e iaaeaeo iacaaeneii neii-
ieee?iaaiiuie ooieoeeyie. ?aaeno?iaua ia?aiaiiua o?aiyony
(aee yoi aiciiaeii) a auno?uo ?aaeno?ao iaoeiu; iiaeiaii aaoi-
iaoe/aneei ia?aiaiiui iie yaeythony eieaeueiuie aeey eaaeaeiai
aeiea e en/acatho i?e auoiaea ec yoiai aeiea.
· 189 –
A ycuea “C” i?aaeoniio?aii ianeieueei iniiaiuo oeiia
iauaeoia:
iauaeou, iaienaiiua eae neiaieu (CHAR), aeinoaoi/ii aaee-
ee, /oiau o?aieoue ethaie /eai ec niioaaonoaothuaai aeaiiie ?aa-
eecaoeee aioo?aiiaai iaai?a neiaieia, e anee aeaenoaeoaeueiue
neiaie ec yoiai iaai?a neiaieia o?aieony a neiaieueiie ia?a-
iaiiie, oi aa cia/aiea yeaeaaeaioii oeaeiio eiaeo yoiai neiai-
ea. A neiaieueiuo ia?aiaiiuo iiaeii o?aieoue e ae?oaea aaee/eiu,
ii ?aaeecaoeey aoaeao iaoeiii-caaeneiie.
Iiaeii eniieueciaaoue aei o?ao ?acia?ia oeaeuo, iienuaaaiuo
eae SHORT INT, INT e LONG INT. Aeeeiiua oeaeua caieiatho ia
iaiueoa iaiyoe, /ai ei?ioeea, ii a eiie?aoiie ?aaeecaoeee ii-
aeao ieacaoueny, /oi eeai ei?ioeea oeaeua, eeai aeeeiiua oeaeua,
eeai oa e ae?oaea aoaeoo yeaeaaeaioiu i?inoui oeaeui. “I?inoua”
oeaeua eiatho anoanoaaiiue ?acia?, i?aaeoniao?eaaaiue a?oeeoae-
oo?ie eniieuecoaiie iaoeiu; ae?oaea ?acia?u aaiaeyony aeey oaeai-
eaoai?aiey niaoeeaeueiuo iio?aaiinoae.
Oeaeua aac ciaea, iienuaaaiua eae UNSIGNED, iiae/eiythony
caeiiai a?eoiaoeee ii iiaeoeth 2**N, aaea N – /enei aeoia a eo
i?aaenoaaeaiee. (Ia PDP-11 aeeeiiua aaee/eiu aac ciaea ia i?a-
aeoniio?aiu).
Ieaaathuea iaeeia?iie oi/iinoe (FLOAT) e ieaaathuea aeaieiie
oi/iinoe (DOUBLE) a iaeioi?uo ?aaeecaoeeyo iiaoo auoue neiiie-
iaie.
Iineieueeo iauaeou oiiiyioouo auoa oeiia iiaoo auoue ?a-
coiii eioa?i?aoe?iaaiu eae /enea, yoe oeiu aoaeoo iacuaaoueny
a?eoiaoe/aneeie. oeiu CHAR e INT anao ?acia?ia niaianoii ao-
aeoo iacuaaoueny oeaei/eneaiiuie. Oeiu FLOAT e DOUBLE niaianoii
aoaeoo iacuaaoueny ieaaathueie oeiaie.
E?iia iniiaiuo a?eoiaoe/aneeo oeiia nouanoaoao eiioeaioo-
aeueii aaneiia/iue eeann i?iecaiaeiuo oeiia, eioi?ua ia?acotho-
ny ec iniiaiuo oeiia neaaeothuei ia?acii:
ianneau iauaeoia aieueoeinoaa oeiia;
ooieoeee, eioi?ua aica?auatho iauaeou caaeaiiiai oeia;
oeacaoaee ia iauaeou aeaiiiai oeia;
no?oeoo?u, niaea?aeauea iineaaeiaaoaeueiinoue iauaeoia
?acee/iuo oeiia;
iauaaeeiaiey, niiniaiua niaea?aeaoue iaeei ec ianeieueeeo
iauaeoia ?acee/iuo oeiia.
Aiiaua aiai?y, yoe iaoiaeu iino?iaiey iauaeoia iiaoo i?e-
iaiyoueny ?aeo?neaii.
13. Iauaeou e L-cia/aiey
Iauaeo yaeyaony aeinooiiui ia?aaioea o/anoeii iaiyoe;
L-cia/aiea – yoi au?aaeaiea, nnueathuaany ia iauaeo. I/aaeaeiui
i?eia?ii au?aaeaiey L-cia/aiey yaeyaony eaeaioeoeeaoi?. Nouan-
oaotho iia?aoeee, ?acoeueoaoii eioi?uo yaeythony L-cia/aiey; an-
ee, iai?eia?, E – au?aaeaiea oeacaiiiai oeia, oi *E yaeyaony
au?aaeaieai L-cia/aiey, nnueathueiny ia iauaeo E. Iacaaiea
“L-cia/aiea” i?ienoiaeeo io au?aaeaiey i?enaaeaaiey E1=E2, a
eioi?ii eaaay /anoue aeieaeia auoue au?aaeaieai L-cia/aiey. I?e
iineaaeothuai ianoaeaeaiee eaaeaeie iia?aoeee aoaeao oeacuaaoueny,
iaeeaeaao ee iia iia?aiaeia L-cia/aiey e auaeaao ee iia L-cia/a-
iea.
· 190 –
14. I?aia?aciaaiey
?yae iia?aoeee iiaeao a caaeneiinoe io naieo iia?aiaeia au-
cuaaoue i?aia?aciaaiea cia/aiea iia?aiaea ec iaeiiai oeia a
ae?oaie. A yoii ?acaeaea iauyniythony ?acoeueoaou, eioi?ua nea-
aeoao iaeeaeaoue io oaeeo i?aia?aciaaiee. A i. 14.6 Iiaeaiaeyony
eoiae i?aia?aciaaiee, o?aaoaiua aieueoeinoaii iau/iuo iia?a-
oeee; yoe naaaeaiey aeiiieiythony iaiaoiaeeiui ia?acii i?e ianoae-
aeaiee eaaeaeie iia?aoeee.
14.1. Neiaieu e oeaeua
Neiaie eee ei?ioeia oeaeia iiaeii eniieueciaaoue anthaeo, aaea
iiaeii eniieueciaaoue oeaeia. Ai anao neo/ayo cia/aiea i?aia?a-
coaony e oeaeiio. I?aia?aciaaiea aieaa ei?ioeiai oeaeiai e ai-
eaa aeeeiiiio anaaaea nii?iaiaeaeaaony ciaeiaui ?anoe?aieai; oea-
eua yaeythony aaee/eiaie ni ciaeii. Inouanoaeyaony eee iao
ciaeiaia ?anoe?aiea aeey neiaieia, caaeneo io eniieuecoaiie
iaoeiu, ii aa?aioe?oaony, /oi /eai noaiaea?oiiai iaai?a nei-
aieia iaio?eoeaoaeai. ec anao iaoei, ?anniao?eaaaiuo a yoii
?oeiaiaenoaa, oieueei PDP-11 inouanoaeyao ciaeiaia ?anoe?aiea.
iaeanoue cia/aiee neiaieueiuo ia?aiaiiuo ia PDP-11 iaiyaony io
· 128 aei 127; neiaieu ec iaai?a ASC11 eiatho iieiaeeoaeueiua
cia/aiey. Neiaieueiay eiinoaioa, caaeaiiay n iiiiuueth ainueia-
?e/iie oneiaiie iineaaeiaaoaeueiinoe, iiaeaa?aaaony ciaeiaiio
?anoe?aieth e iiaeao ieacaoueny io?eoeaoaeueiie; iai?eia?, ‘377’
eiaao cia/aiea -1.
Eiaaea aieaa aeeeiiia oeaeia i?aia?acoaony a aieaa ei?ioeia
eee a CHAR, iii ia?acaaony neaaa; eeoiea aeou i?inoi ioa?a-
nuaathony.
14.2. Oeiu FLOAT e DOUBLE
Any ieaaathuay a?eoiaoeea a “C” auiieiyaony n aeaieiie
oi/iinoueth eaaeaeue ?ac, eiaaea iauaeo oeia FLOAT iiyaeyaony a
au?aaeaiee, ii oaeeeiyaony aei DOUBLE iin?aaenoaii aeiaaaeaiey
ioeae a aai ae?iaioth /anoue. eiaaea iauaeo oeia DOUBLE aeieaeai
auoue i?aia?aciaai e oeio FLOAT, iai?eia?, i?e i?enaaeaaiee,
ia?aae ona/aieai DOUBLE ie?oaeyaony aei aeeeiu FLOAT.
14.3. Ieaaathuea e oeaei/eneaiiua aaee/eiu
I?aia?aciaaiea ieaaathueo cia/aiee e oeaei/eneaiiiio oeio
eiaao oaiaeaioeeth auoue aei iaeioi?ie noaiaie iaoeiii-caaeneiui;
a /anoiinoe iai?aaeaiea ona/aiey io?eoeaoaeueiuo /enae iaiyao-
ny io iaoeia e iaoeia. ?acoeueoao ia ii?aaeaeai, anee cia/aiea
ia iiiauaaony a i?aaeinoaaeyaiia i?ino?ainoai.
I?aia?aciaaiea oeaei/eneaiiuo cia/aiee a ieaaathuea auiie-
iyaony aac ineiaeiaiee. Iiaeao i?iecieoe iaeioi?ay iioa?y oi/-
iinoe, anee aeey ?acoeueoaoa ia niaea?aeeony aeinoaoi/iiai eiee-
/anoaa aeoia.
14.4. Oeacaoaee e oeaeua
Oeaeia eee aeeeiiia oeaeia iiaeao auoue i?eaaaeaii e oeacaoa-
eth eee au/oaii ec iaai; a yoii neo/aa ia?aay aaee/eia i?aia-
?acoaony oae, eae oeacuaaaony a ?acaeaea iienaiey iia?aoeee
neiaeaiey.
· 191 –
Aeaa oeacaoaey ia iauaeou iaeeiaeiaiai oeia iiaoo auoue
au/oaiu; a yoii neo/aa ?acoeueoao i?aia?acoaony e oeaeiio, eae
oeacuaaaony a ?acaeaea iienaiey iia?aoeee au/eoaiey.
14.5. Oeaeia aac ciaea
Anyeee ?ac, eiaaea oeaeia aac ciaea iauaaeeiyaony n i?inoui
oeaeui, i?inoia oeaeia i?aia?acoaony a oeaeia aac ciaea e ?a-
coeueoao ieacuaaaony oeaeui aac ciaea. Cia/aieai yaeyaony iae-
iaiueoaa oeaeia aac ciaea, niioaaonoaothuaa oeaeiio ni ciaeii
(ii iiaeoeth 2**?acia? neiaa). A aeaie/iii aeiiieieoaeueiii i?aae-
noaaeaiee yoi i?aia?aciaaiea yaeyaony /enoi oiic?eoaeueiui e
ia eciaiyao oaeoe/aneoth eiiaeiaoeeth aeoia.
Eiaaea oeaeia aac ciaea i?aia?acoaony e oeio LONG, cia/a-
iea ?acoeueoaoa niaiaaeaao ni cia/aieai oeaeiai aac ciaea. Oa-
eei ia?acii, yoi i?aia?aciaaiea naiaeeony e aeiaaaeaieth ioeae
neaaa.
14.6. A?eoiaoe/aneea i?aia?aciaaiey
Iiaeaaeythuaa aieueoeinoai iia?aoeee aucuaaao i?aia?aciaaiea
e ii?aaeaeyao oeiu ?acoeueoaoa aiaeiae/iui ia?acii. I?eaiaeeiay
ieaea noaia a aeaeueiaeoai aoaeao iacuaaoueny “iau/iuie a?eoiaoe-
/aneeie i?aia?aciaaieyie”.
Nia/aea ethaua iia?aiaeu oeia CHAR eee SHORT i?aia?acothony a
INT, a ethaua iia?aiaeu oeia FLOAT i?aia?acothony a DOUBLE.
Caoai, anee eaeie-eeai iia?aiae eiaao oei DOUBLE, oi ae?oaie
i?aia?acoaony e oeio DOUBLE, e yoi aoaeao oeiii ?acoeueoaoa.
A i?ioeaiii neo/aa, anee eaeie-eeai iia?aiae eiaao oei LONG,
oi ae?oaie iia?aiae i?aia?acoaony e oeio LONG, e yoi e aoaeao
oeiii ?acoeueoaoa.
A i?ioeaiii neo/aa, anee eaeie-eeai iia?aiae eiaao oei
UNSIGNED, oi ae?oaie iia?aiae i?aia?acoaony e oeio UNSIGNED,
e yoi aoaeao oeiii ?acoeueoaoa.
A i?ioeaiii neo/aa iaa iia?aiaea aoaeoo eiaoue oei INT, e yoi
aoaeao oeiii ?acoeueoaoa.
15. Au?aaeaiey
Noa?oeinoai iia?aoeee a au?aaeaieyo niaiaaeaao n ii?yaeeii
neaaeiaaiey iniiaiuo iiae?acaeaeia ianoiyuaai ?acaeaea, ia/eiay
n naiiai aunieiai o?iaiy noa?oeinoaa. Oae, iai?eia?, au?aaea-
ieyie, oeacuaaaiuie a ea/anoaa iia?aiaeia iia?aoeee +
(i.15.4), ssaeythony au?aaeaiey, ii?aaeaeaiiua a i.i.15.1-15.3.
Aioo?e eaaeaeiai iiae?acaeaea iia?aoeee eiaao iaeeiaeiaia noa?oei-
noai. A eaaeaeii iiae?acaeaea aeey iienuaaaiuo oai iia?aoeee oea-
cuaaaony eo annioeeaoeaiinoue neaaa eee ni?aaa. Noa?oeinoai e
annioeeaoeaiinoue anao iia?aoeee a au?aaeaieyo ?acthie?othony a
a?aiiaoe/aneie naiaeea a i.18.
A i?ioeaiii neo/aa ii?yaeie au/eneaiee au?aaeaiee ia ii?a-
aeaeai. A /anoiinoe, eiiieeyoi? n/eoaao naay a i?aaa au/en-
eyoue iiaeau?aaeaiey a oii ii?yaeea, eioi?ue ii iaoiaeeo iaeaieaa
yooaeoeaiui, aeaaea anee yoe iiaeau?aaeaiey i?eaiaeyo e iiai/iui
yooaeoai. Ii?yaeie, a eioi?ii i?ienoiaeyo iiai/iua yooaeou, ia
niaoeeoeoee?oaony. Au?aaeaiey, aeeth/athuea eiiiooaoeaiua e anni-
oeeaoeaiua iia?aoeee ( *,+,&,!,^ ), iiaoo auoue ia?aoii?yaei/aiu
i?iecaieueiui ia?acii aeaaea i?e iaee/ee e?oaeuo neiaie; /oiau
auioaeeoue ii?aaeaeaiiue ii?yaeie au/eneaiee, a yoii neo/aa ia-
iaoiaeeii eniieueciaaoue yaiua i?iiaaeooi/iua ia?aiaiiua.
· 192 –
I?e au/eneaiee au?aaeaiee ia?aaioea ia?aiieiaiey e i?i-
aa?ea i?e aeaeaiee yaeythony iaoeiii-caaeneiuie. Ana nouanoao-
thuea ?aaeecaoeee ycuea “C” eaii?e?otho ia?aiieiaiea oeaeuo; ia-
?aaioea neooaoeee i?e aeaeaiee ia 0 e i?e anao iniauo neo/ayo
n ieaaathueie /eneaie iaiyaony io iaoeiu e iaoeia e iau/ii
auiieiyaony n iiiiuueth aeaeeioa/iie ooieoeee.
15.1. Ia?ae/iua au?aaeaiey
Ia?ae/iua au?aaeaiey, aeeth/athuea ., ->, eiaeaenaoeeth e ia-
?auaiey e ooieoeeyi, a?oiie?othony neaaa iai?aai.
Ia?ae/iia au?aaeaiea:
eaeaioeoeeaoi?
eiinoaioa
no?iea
(au?aaeaiea)
ia?ae/iia-au?aaeaiea [au?aaeaiea]
ia?ae/iia-au?aaeaiea (nienie-au?aaeaiee iai
ia?ae/iia-L-cia/aiea . Eaeaioeoeeaoi?
ia?ae/iia-au?aaeaiea -> eaeaioeoeeaoi?
nienie-au?aaeaiee:
au?aaeaiea
nienie-au?aaeaiee, au?aaeaiea
Eaeaioeoeeaoi? yaeyaony ia?ae/iui au?aaeaieai i?e oneiaee, /oi
ii iienai iiaeoiaeyuei ia?acii, eae yoi ianoaeaeaaony ieaea. oei
eaeaioeoeeaoi?a ii?aaeaeyaony aai iienaieai. Anee, iaeiaei, oe-
iii eaeaioeoeeaoi?a yaeyaony “iannea …”, oi cia/aieai au?a-
aeaiey, ninoiyuaai ec yoiai eaeaioeoeeaoi?a , yaeyaony oeaca-
oaeue ia ia?aue iauaeo a yoii ianneaa, a oeiii au?aaeaiey ao-
aeao “oeacaoaeue ia …”. Aieaa oiai, eaeaioeoeeaoi? ianneaa ia
yaeyaony au?aaeaieai L-cia/aiey. iiaeiaiui ia?acii eaeaioeoeea-
oi?, eioi?ue iienai eae “ooieoeey, aica?auathuay …”, ca ene-
eth/aieai oiai neo/ay, eiaaea ii eniieuecoaony a iiceoeee eiaie
ooieoeee i?e ia?auaiee, i?aia?acoaony a “oeacaoaeue ia ooie-
oeeth, eioi?ay aica?auaao …”.
Eiinoaioa yaeyaony ia?ae/iui au?aaeaieai. A caaeneiinoe
io aa oi?iu oeiii eiinoaiou iiaeao auoue INT, LONG eee DOUBLE.
No?iea yaeyaony ia?ae/iui au?aaeaieai. Enoiaeiui aa oeiii
yaeyaony “iannea neiaieia”; ii neaaeoy oai aea naiui i?aaeeai,
eioi?ua i?eaaaeaiu auoa aeey eaeaioeoeeaoi?ia, ii iiaeeoeoee?oao-
ny a “oeacaoaeue ia neiaieu”, e ?acoeueoaoii yaeyaony oeaca-
oaeue ia ia?aue neiaie no?iee. (eiaaony eneeth/aiea a iaeioi-
?uo eieoeeaeecaoi?ao; ni. I. 16.6.)
Au?aaeaiea a e?oaeuo neiaeao yaeyaony ia?ae/iui au?aaeaie-
ai, oei e cia/aiea eioi?iai eaeaioe/iu oeio e cia/aieth yoiai
au?aaeaiey aac neiaie. Iaee/ea e?oaeuo neiaie ia aeeyao ia
oi, yaeyaony ee au?aaeaiea L-cia/aieai eee iao.
· 193 –
Ia?ae/iia au?aaeaiea, ca eioi?ui neaaeoao au?aaeaiea a
eaaae?aoiuo neiaeao, yaeyaony ia?ae/iui au?aaeaieai. Eiooeoea-
ii ynii, /oi yoi au?aaeaiea n eiaeaenii. Iau/ii ia?ae/iia au-
?aaeaiea eiaao oei “oeacaoaeue ia …”, eiaeaeniia au?aaeaiea
eiaao oei INT, a oeiii ?acoeueoaoa yaeyaony “…”. Au?aaeaiea
E1[E2] ii ii?aaeaeaieth eaeaioe/ii au?aaeaieth * ((E1) + (E2)).
Ana, /oi iaiaoiaeeii aeey iiieiaiey yoie caiene, niaea?aeeony a
yoii ?acaeaea; aii?inu, naycaiiua n iiiyoeai eaeaioeoeeaoi?ia
e iia?aoeee * e + ?anniao?eaathony a i.i. 15.1, 15.2 E 15.4
niioaaonoaaiii; auaiaeu noiie?othony ieaea a i. 22.3.
Ia?auaiea e ooieoeee yaeyaony ia?ae/iui au?aaeaieai, ca
eioi?ui neaaeoao caeeth/aiiue a e?oaeua neiaee aiciiaeii ionoie
nienie au?aaeaiee, ?acaeaeaiiuo caiyouie, eioi?ua e i?aaenoaa-
eytho niaie oaeoe/aneea a?aoiaiou ooieoeee. Ia?ae/iia au?aaea-
iea aeieaeii auoue oeia “ooieoeey, aica?auathuay …”, a ?acoeue-
oao ia?auaiey e ooieoeee eiaao oei “…”. Eae oeacuaaaony ie-
aea, ?aiaa ia ano?a/aaueeny eaeaioeoeeaoi?, ca eioi?ui iaiin-
?aaenoaaiii neaaeoao eaaay e?oaeay neiaea, n/eoaaony iienaiiui
ii eiioaenoo, eae i?aaenoaaeythuee ooieoeeth, aica?auathuoth oea-
eia; neaaeiaaoaeueii /aua anaai ano?a/athueeny neo/ae ooieoeee,
aica?auathuae oeaeia cia/aiea, ia ioaeaeaaony a iienaiee.
Ia?aae ia?auaieai ethaua oaeoe/aneea a?aoiaiou oeia FLOAT
i?aia?acothony e oeio DOUBLE, ethaua a?aoiaiou oeia CHAR eee
SHORT i?aia?acothony e oeio INT, e, eae iau/ii, eiaia ianne-
aia i?aia?acothony a oeacaoaee. Ieeaeea ae?oaea i?aia?aciaaiey
ia auiieiythony aaoiiaoe/anee; a /anoiinoe, ia n?aaieaaao oe-
iu oaeoe/aneeo a?aoiaioia n oeiaie oi?iaeueiuo a?aoiaioia.
Anee i?aia?aciaaiea iaiaoiaeeii, eniieuecoeoa yaiue ia?aaiae
oeia (CAST); ni. I.i. 15.2, 16.7.
I?e iiaeaioiaea e auciao ooieoeee aeaeaaony eiiey eaaeaeiai
oaeoe/aneiai ia?aiao?a; oaeei ia?acii, ana ia?aaea/e a?aoiai-
oia a ycuea “C” inouanoaeythony no?iai ii cia/aieth. ooieoeey
iiaeao eciaiyoue cia/aiey naieo oi?iaeueiuo ia?aiao?ia, ii yoe
eciaiaiey ia aeeytho ia cia/aiey oaeoe/aneeo ia?aiao?ia. N
ae?oaie no?iiu eiaaony aiciiaeiinoue ia?aaeaaaoue oeacaoaeue i?e
oaeii oneiaee, /oi ooieoeey iiaeao eciaiyoue cia/aiea iauaeoa,
ia eioi?ue yoio oeacaoaeue oeacuaaao. Ii?yaeie au/eneaiey a?-
aoiaioia a ycuea ia ii?aaeaeai; ia?aoeoa aieiaiea ia oi, /oi
?acee/iua eiiieeyoi?u au/eneytho ii ?aciiio.
Aeiioneathony ?aeo?neaiua ia?auaiey e ethaie ooieoeee.
Ia?ae/iia au?aaeaiea, ca eioi?ui neaaeoao oi/ea e eaeaioe-
oeeaoi?, yaeyaony au?aaeaieai. Ia?aia au?aaeaiea aeieaeii auoue
L-cia/aieai, eiaiothuei no?oeoo?o eee iauaaeeiaiea, a eaeaioe-
oeeaoi? aeieaeai auoue eiaiai /eaia no?oeoo?u eee iauaaeeiaiey.
?acoeueoaoii yaeyaony L-cia/aiea, nnueathuaany ia iieiaiiaai-
iue /eai no?oeoo?u eee iauaaeeiaiey.
Ia?ae/iia au?aaeaiea, ca eioi?ui neaaeoao no?aeea (ninoaa-
eaiiay ec ciaeia – e >) e eaeaioeoeeaoi?, yaeyaony au?aaeaie-
ai. ia?aia au?aaeaiea aeieaeii auoue oeacaoaeai ia no?oeoo?o eee
iauaaeeiaiea, a eaeaioeoeeaoi? aeieaeai eiaiiaaoue /eai yoie
no?oeoo?u eee iauaaeeiaiey. ?acoeueoaoii yaeyaony L-cia/aiea,
nnueathuaany ia iieiaiiaaiiue /eai no?oeoo?u eee iauaaeeiaiey,
ia eioi?ue oeacuaaao oeacaoaeueiia au?aaeaiea.
Neaaeiaaoaeueii, au?aaeaiea E1->MOS yaeyaony oai aea naiui,
/oi e au?aaeaiea (*E1).MOS. No?oeoo?u e iauaaeeiaiey ?anniao-
?eaathony a i. 16.5. I?eaaaeaiiua caeanue i?aaeea eniieueciaaiey
no?oeoo? e iauaaeeiaiee ia iaaycuaathony no?iai, aeey oiai /oi-
au eiaoue aiciiaeiinoue iaieoe iaoaieci oeiia. Ni. I. 22.1.
· 194 –
15.2. Oia?iua iia?aoeee
Au?aaeaiea n oia?iuie iia?aoeeyie a?oiie?oaony ni?aai ia-
eaai.
Oia?iia-au?aaeaiea:
· au?aaeaiea
& L-cia/aiea
· au?aaeaiea
! Au?aaeaiea
^ au?aaeaiea
++ L-cia/aiea
· L-cia/aiea
L-cia/aiea ++
L-cia/aiea—
(eiy-oeia) au?aaeaiea
SIZEOF au?aaeaiea
SIZEOF eiy-oeia
Oia?iay iia?aoeey * icia/aao einaaiioth aae?anaoeeth: au?aaea-
iea aeieaeii auoue oeacaoaeai, a ?acoeueoaoii yaeyaony L-cia/a-
iea, nnueathuaany ia oio iauaeo, ia eioi?ue oeacuaaao au?aaea-
iea. Anee oeiii au?aaeaiey yaeyaony “oeacaoaeue ia…”, oi oe-
iii ?acoeueoaoa aoaeao “…”.
?acoeueoaoii oia?iie iia?aoeee & yaeyaony oeacaoaeue ia
iauaeo, e eioi?iio nnueaaony L-cia/aiea. Anee L-cia/aiea
eiaao oei “…”, oi oeiii ?acoeueoaoa aoaeao “oeacaoaeue ia
…”.
?acoeueoaoii oia?iie iia?aoeee – (ieion) yaeyaony aa iia-
?aiae, acyoue n i?ioeaiiieiaeiui ciaeii. Aeey aaee/eiu oeia
UNSIGNED ?acoeueoao iieo/aaony au/eoaieai aa cia/aiey ec 2**N
(aeaa a noaiaie N), aaea N-/enei aeoia a INT. Oia?iie iia?aoeee
+ (iethn) ia nouanoaoao.
?acoeueoaoii iia?aoeee eiae/aneiai io?eoeaiey ! ssaeyaony 1,
anee cia/aiea aa iia?aiaea ?aaii 0, e 0, anee cia/aiea aa
iia?aiaea ioee/ii io ioey. ?acoeueoao eiaao oei INT. Yoa iia-
?aoeey i?eiaieia e ethaiio a?eoiaoe/aneiio oeio eee oeacaoa-
eyi.
Iia?aoeey ^ aeaao ia?aoiue eiae, eee aeiiieiaiea aei aaeeie-
oeu, naiaai iia?aiaea. Auiieiythony iau/iua a?eoiaoe/aneea i?a-
ia?aciaaiey. Iia?aiae aeieaeai auoue oeaei/eneaiiiai oeia.
Iauaeo, ia eioi?ue nnueaaony iia?aiae L-cia/aiey i?aoeen-
iie iia?aoeee ++, oaaee/eaaaony. cia/aieai yaeyaony iiaia
cia/aiea iia?aiaea, ii yoi ia L-cia/aiea. Au?aaeaiea ++o yeae-
aaeaioii o+=1. Eioi?iaoeeth i i?aia?aciaaieyo niio?e a ?acai?a
iia?aoeee neiaeaiey (i. 15.4) e iia?aoeee i?enaaeaaiey (i.
15.14).
I?aoeeniay iia?aoeey—aiaeiae/ia i?aoeeniie iia?aoeee
++, ii i?eaiaeeo e oiaiueoaieth naiaai iia?aiaea L-cia/aiey.
I?e i?eiaiaiee iinooeeniie iia?aoeee ++ e L-cia/aieth ?a-
coeueoaoii yaeyaony cia/aiea iauaeoa, ia eioi?ue nnueaaony
L-cia/aiea. Iinea oiai, eae ?acoeueoao i?eiyo e naaaeaieth,
iauaeo oaaee/eaaaony oi/ii oaeei aea ia?acii, eae e a neo/aa
i?aoeeniie iia?aoeee ++. ?acoeueoao eiaao oio aea oei, /oi e
au?aaeaiea L-cia/aiey.
· 195 –
I?e i?eiaiaiee iinooeeniie iia?aoeee—e L-cia/aieth ?a-
coeueoaoii yaeyaony cia/aiea iauaeoa, ia eioi?ue nnueaaony
L-cia/aiea. Iinea oiai, eae ?acoeueoao i?eiyo e naaaeaieth,
iauaeo oiaiueoaaony oi/ii oaeei aea ia?acii, eae e a neo/aa
i?aoeeniie iia?aoeee –. ?acoeueoao eiaao oio aea oei, /oi e
au?aaeaiea L-cia/aiey.
Caeeth/aiiia a e?oaeua neiaee eiy oeia aeaiiuo,noiyuaa ia-
?aae au?aaeaieai , aucuaaao i?aia?aciaaiea cia/aiey yoiai au-
?aaeaiey e oeacaiiiio oeio. Yoa eiino?oeoeey iacuaaaony ia?a-
aiae (CAST). Eiaia oeiia iienuaathony a i. 16.7.
Iia?aoeey SIZEOF auaeaao ?acia? naiaai iia?aiaea a aaeoao.
(Iiiyoea aaeo a ycuea ia ii?aaeaeaii, ?acaa oieueei eae cia/a-
iea iia?aoeee SIZEOF. Iaeiaei ai anao nouanoaothueo ?aaeecaoeeyo
aaeoii yaeyaony i?ino?ainoai, iaiaoiaeeiia aeey o?aiaiey
iauaeoa oeia CHAR). I?e i?eiaiaiee e ianneao ?acoeueoaoii ya-
eyaony iieiia /enei aaeoia a ianneaa. ?acia? ii?aaeaeyaony ec
iienaiee iauaeoia a au?aaeaiee. Yoi au?aaeaiea naiaioe/anee
yaeyaony oeaeie eiinoaioie e iiaeao auoue eniieueciaaii a ethaii
ianoa, aaea o?aaoaony eiinoaioa. Iniiaiia i?eiaiaiea yoa iia-
?aoeey iaoiaeeo i?e naycyo n i?ioeaaeo?aie, iiaeiaiui ?ani?aaeaee-
oaeyi iaiyoe, e a nenoaiao aaiaea- auaiaea.
Iia?aoeey SIZEOF iiaeao auoue oaeaea i?eiaiaia e e caeeth/ai-
iiio a e?oaeua neiaee eiaie oeia. A yoii neo/aa iia auaeaao
?acia? a aaeoao iauaeoa oeacaiiiai oeia.
Eiino?oeoeey SIZEOF (oei) ?anniao?eaaaony eae oeaeia, oae
/oi au?aaeaiea SIZEOF (oei) – 2 yeaeaaeaioii au?aaeaieth
(SIZEOF (oei)9 – 2.
15.3. Ioeueoeieeeaoeaiua iia?aoeee
Ioeueoeieeeaoeaiua iia?aoeee *, /, e % a?oiie?othony neaaa
iai?aai. Auiieiythony iau/iua a?eoiaoe/aneea i?aia?aciaaiey.
Ioeueoeieeeaoeaiia-au?aaeaiea:
au?aaeaiea * au?aaeaiea
au?aaeaiea / au?aaeaiea
au?aaeaiea % au?aaeaiea
Aeia?iay iia?aoeey * icia/aao oiiiaeaiea. Iia?aoeey * anni-
oeeaoeaia, e au?aaeaiey n ianeieueeeie oiiiaeaieyie ia iaeiii e
oii aea o?iaia iiaoo auoue ia?aa?oiie?iaaiu eiiieeyoi?ii.
Aeia?iay iia?aoeey / icia/aao aeaeaiea. I?e aeaeaiee iiei-
aeeoaeueiuo oeaeuo inouanoaeyaony ona/aiea ii iai?aaeaieth e io-
eth, ii anee iaeei ec iia?aiaeia io?eoeaoaeai, oi oi?ia ona/aiey
caaeneo io eniieuecoaiie iaoeiu. Ia anao iaoeiao, ioaaouaaa-
iuo ianoiyuei ?oeiaiaenoaii, inoaoie eiaao oio aea ciae , /oi
e aeaeeiia. Anaaaea ni?aaaaeeeai, /oi (A/B)*B+A%B ?aaii A (anee
B ia ?aaii 0).
Aeia?iay iia?aoeey % auaeaao inoaoie io aeaeaiey ia?aiai
au?aaeaiey ia aoi?ia. Auiieiythony iau/iua a?eoiaoe/aneea i?a-
ia?aciaaiey. Iia?aiaeu ia aeieaeiu auoue oeia FLOAT.
15.4. Aaeaeeoeaiua iia?aoeee
Aaeaeeoeaiua iia?aoeee + e – a?oiie?othony neaaa iai?aai.
auiieiythony iau/iua a?eoiaoe/aneea i?aia?aciaaiey. Aeey eaae-
aeie iia?aoeee eiathony iaeioi?ua aeiiieieoaeueiua aiciiaeiinoe,
naycaiiua n oeiaie iia?aiaeia.
· 196 –
Aaeaeeoeaiia-au?aaeaiea:
au?aaeaiea + au?aaeaiea
au?aaeaiea – au?aaeaiea
?acoeueoaoii iia?aoeee + yaeyaony noiia iia?aiaeia. Iiaeii neea-
aeuaaoue oeacaoaeue ia iauaeo a ianneaa e cia/aiea ethaiai oeaei-
/eneaiiiai oeia. ai anao neo/ayo iineaaeiaa i?aia?acoaony a
aae?aniia niauaiea iin?aaenoaii oiiiaeaiey aai ia aeeeio iauae-
oa, ia eioi?ue oeacuaaao yoio oeacaoaeue. ?acoeueoaoii yaeyao-
ny oeacaoaeue oiai aea naiiai oeia, /oi e enoiaeiue oeacaoaeue,
eioi?ue oeacuaaao ia ae?oaie iauaeo a oii aea ianneaa, niauai-
iue niioaaonoaothuei ia?acii ioiineoaeueii ia?aiia/aeueiiai
iauaeoa. Oaeei ia?acii, anee P yaeyaony oeacaoaeai iauaeoa a
ianneaa, oi au?aaeaiea P+1 yaeyaony oeacaoaeai ia neaaeothuee
iauaeo a yoii ianneaa.
Ieeaeea ae?oaea eiiaeiaoeee oeiia aeey oeacaoaeae ia ?ac?a-
oathony.
Iia?aoeey + annioeeaoeaia, e au?aaeaiea n ianeieueeeie nei-
aeaieyie ia oii aea naiii o?iaia iiaoo auoue ia?aoii?yaei/aiu
eiiieeyoi?ii.
?acoeueoaoii iia?aoeee – yaeyaony ?aciinoue iia?aiaeia. Au-
iieiythony iau/iua a?eoiaoe/aneea i?aia?aciaaiey. E?iia oiai,
ec oeacaoaey iiaeao auoue au/oaii cia/aiea ethaiai oeaei/eneai-
iiai oeia, i?e/ai, i?iaiaeyony oa aea naiua i?aia?aciaaiey,
/oi e i?e iia?aoeee neiaeaiey.
Anee au/eoathony aeaa oeacaoaey ia iauaeou iaeeiaeiaiai oe-
ia, oi ?acoeueoao i?aia?acoaony (aeaeaieai ia aeeeio iauaeoa) e
oeio INT, i?aaenoaaeyy niaie /enei iauaeoia, ?acaeaeythueo oea-
cuaaaiua iauaeou. Anee yoe oeacaoaee ia ia iauaeou ec iaeiiai
e oiai aea ianneaa, oi oaeia i?aia?aciaaiea, aiiaua aiai?y,
aeano iaiaeeaeaiiua ?acoeueoaou, iioiio /oi aeaaea oeacaoaee ia
iauaeou iaeeiaeiaiai oeia ia iaycaiu ioee/aoueny ia aaee/eio,
e?aoioth aeeeia iauaeoa.
15.5. Iia?aoeee naeaeaa
Iia?aoeee naeaeaa > a?oiie?othony neaaa iai?aai. Aeey
iaaeo iia?aoeee i?iaiaeyony iau/iua a?eoiaoe/aneea i?aia?aci-
aaiey eo iia?aiaeia, eaaeaeue ec eioi?uo aeieaeai auoue oeaei/en-
eaiiiai oeia. Caoai i?aaue iia?aiae i?aia?acoaony e oeio INT;
?acoeueoao eiaao oei eaaiai iia?aiaea. ?acoeueoao ia ii?aaeaeai,
anee i?aaue iia?aiae io?eoeaoaeai eee aieueoa eee ?aaai, /ai
aeeeia iauaeoa a aeoao.
Au?aaeaiea-naeaeaa:
au?aaeaiea > au?aaeaiea
Cia/aieai au?aaeaiey E1>E2 ya-
eyaony E1, naeaeiooia ai?aai ia E2 aeoiauo iiceoeee. Anee E1
eiaao oei UNSIGNE, oi naeaea ai?aai aa?aioe?iaaiii aoaeao ei-
ae/aneei (caiieiaiea ioeai); a i?ioeaiii neo/aa naeaea iiaeao
auoue (e oae e anoue ia PDP-11) a?eoiaoe/aneei (inaiaiaeaeathuea-
ny aeou caiieiythony eiieae ciaeiaiai aeoa).
· 197 –
15.6. Iia?aoeee ioiioaiey
Iia?aoeee ioiioaiey a?oiie?othony neaaa iai?aai, ii yoio
oaeo ia i/aiue iieacai; au?aaeaiea A au?aaeaiea
au?aaeaiea = au?aaeaiea
Iia?aoeee (aieueoa), =
(aieueoa eee ?aaii) ana aeatho 0, anee oeacaiiia ioiioaiea eiae-
ii, e 1, anee iii enoeiii. ?acoeueoao eiaao oei ITN. Auiieiy-
thony iau/iua a?eoiaoe/aneea i?aia?aciaaiey. Iiaoo n?aaie-
aaoueny aeaa oeacaoaey; ?acoeueoao caaeneo io ioiineoaeueiiai
?aniieiaeaiey oeacuaaaiuo iauaeoia a aae?aniii i?ino?ainoaa.
N?aaiaiea oeacaoaeae ia?aiineii oieueei a oii neo/aa, anee
oeacaoaee oeacuaatho ia iauaeou ec iaeiiai e oiai aea ianneaa.
15.7. Iia?aoeee ?aaainoaa Au?aaeaiea-?aaainoaa:
au?aaeaiea == au?aaeaiea
au?aaeaiea != au?aaeaiea
Iia?aoeee == (?aaii) e != (ia ?aaii) a oi/iinoe aiaeiae/iu
iia?aoeeyi ioiioaiey, ca eneeth/aieai oiai, /oi iie eiatho ai-
eaa ieceee o?iaaiue noa?oeinoaa. (Iiyoiio cia/aiea au?aaeaiey
A>= au?aaeaiea
L-cia/aiea COUNT
nnueaaony e iieth COUNT no?oeoo?u, ia eioi?oth oeacuaaao SP;
au?aaeaiea
S.LEFT
nnueaaony ia oeacaoaeue eaaiai iiaeaea?aaa a no?oeoo?a S, a au-
?aaeaiea
S.RIGHT->TWORD[0]
nnueaaony ia ia?aue neiaie /eaia TWORD i?aaiai iiaeaea?aaa ec
S.
· 207 –
16.6. Eieoeeaeecaoeey
Iienaoaeue iiaeao oeacuaaoue ia/aeueiia cia/aiea iienuaaaii-
ai eaeaioeoeeaoi?a. Eieoeeaeecaoi? ninoieo ec au?aaeaiey eee
caeeth/aiiiai a oeao?iua neiaee nienea cia/aiee, ia?aae eioi-
?uie noaaeony ciae =.
Eieoeeaeecaoi?:
= au?aaeaiea
= (nienie-eieoeeaeecaoi?a)
= (nienie-eieoeeaeecaoi?a,)
nienie-eieoeeaeecaoi?a:
au?aaeaiea
nienie-eieoeeaeecaoi?a,nienie-eieoeeaeecaoi?a
(nienie-eieoeeaeecaoi?a)
Ana au?aaeaiey, aoiaeyuea a eieoeeaeecaoi? noaoe/aneie eee
aiaoiae ia?aiaiiie, aeieaeiu auoue eeai eiinoaioiuie au?aaeaiey-
ie, iienuaaaiuie a i. 23, Eeai au?aaeaieyie, eioi?ua naiaeyony
e aae?ano ?aiaa iienaiiie ia?aiaiiie, aiciiaeii niauaiiiio ia
eiinoaioiia au?aaeaiea. Aaoiiaoe/aneea e ?aaeno?iaua ia?aiai-
iua iiaoo auoue eieoeeaeece?iaaiu i?iecaieueiuie au?aaeaieyie,
aeeth/athueie eiinoaiou e ?aiaa iienaiiua ia?aiaiiua e ooie-
oeee.
Aa?aioe?oaony, /oi iaeieoeeaeece?iaaiiua noaoe/aneea e
aiaoiea ia?aiaiiua iieo/atho a ea/anoaa ia/aeueiuo cia/aiee
0;iaeieoeeaeece?iaaiiua aaoiiaoe/aneea e ?aaeno?iaua ia?aiai-
iua a ea/anoaa ia/aeueiuo cia/aiee niaea?aeao ioni?.
Eiaaea eieoeeaeecaoi? i?eiaiyaony e neaey?o (oeacaoaeth eee
iauaeoo a?eoiaoe/aneiai oeia), oi ii ninoieo ec iaeiiai au?a-
aeaiey, aiciiaeii caeeth/aiiiai a oeao?iua neiaee. Ia/aeueiia
cia/aiea iauaeoa iaoiaeeony ec au?aaeaiey; auiieiythony oa aea
naiua i?aia?aciaaiey, /oi e i?e i?enaaeaaiee.
Eiaaea iienuaaaiay ia?aiaiiay yaeyaony aa?aaaoii (no?oe-
oo?ie eee ianneaii ), oi eieoeeaeecaoi? ninoieo ec caeeth/ai-
iiai a oeao?iua neiaee e ?acaeaeaiiiai caiyouie nienea eieoee-
aeecaoi?ia aeey /eaiia aa?aaaoa. Yoio nienie ninoaaeyaony a
ii?yaeea aic?anoaiey eiaeaena eee a niioaaonoaee n ii?yaeeii
/eaiia. Anee aa?aaao niaea?aeeo iiaeaa?aaaou, oi yoi i?aaeei
i?eiaiyaony ?aeo?neaii e /eaiai aa?aaaoa. Anee eiee/anoai
eieoeeaeecaoi?ia a nienea ieacuaaaony iaiueoa /enea /eaiia aa-
?aaaoa, oi inoaaoeany /eaiu aa?aaaoa caiieiythony ioeyie.
Cai?auaaony eieoeeaeece?iaaoue iauaaeeiaiey eee aaoiiaoe/aneea
aa?aaaou.
Oeao?iua neiaee iiaoo auoue iiouaiu neaaeothuei ia?acii.
Anee eieoeeaeecaoi? ia/eiaaony n eaaie oeao?iie neiaee, oi
iineaaeothuee ?acaeaeaiiue caiyouie nienie eieoeeaeecaoi?ia eie-
oeeaeece?oao /eaiu aa?aaaoa; aoaeao ioeaeie, anee a nienea
ieaaeaony aieueoa eieoeeaeecaoi?ia, /ai /eaiia aa?aaaoa. Anee
iaeiaei eieoeeaeecaoi? ia ia/eiaaony n eaaie oeao?iie neiaee,
oi ec nienea aa?aony oieueei ioaeiia aeey /eaiia aeaiiiai aa?a-
aaoa /enei yeaiaioia; inoaaoeany yeaiaiou eniieuecothony aeey
eieoeeaeecaoeee neaaeothuaai /eaia aa?aaaoa, /anoueth eioi?iai ya-
eyaony ianoiyuee aa?aaao.
· 208 –
Iineaaeiaa nie?auaiea aeiioneaao aiciiaeiinoue eieoeeaeecaoeee
ianneaa oeia CHAR n iiiiuueth no?iee. A yoii neo/aa /eaiu ian-
neaa iineaaeiaaoaeueii eieoeeaeece?othony neiaieaie no?iee.
Iai?eia?,
INT X[] = (1,3,5);
iienuaaao e eieoeeaeece?oao X eae iaeiiia?iue iannea; iineieue-
eo ?acia? ianneaa ia niaoeeoeoee?iaai, a nienie eieoeeaeeceoi?a
niaea?aeeo o?e yeaiaioa, n/eoaaony, /oi iannea ninoieo ec o?ao
/eaiia.
Aio i?eia? eieoeeaeecaoeee n iieiui eniieueciaaieai oeao?-
iuo neiaie:
FLOAT *Y[4][3] = (
( 1, 3, 5 ),
( 2, 4, 6 ),
( 3, 5, 7 ),
);
Caeanue 1, 3 e 5 eieoeeaeece?otho ia?aoth no?ieo ianneaa Y[0], a
eiaiii Y[0][0], Y[0][1] e Y[0][2]. Aiaeiae/iui ia?acii nea-
aeothuea aeaa no?i/ee eieoeeaeece?otho Y[1] e Y[2]. Eieoeeaeecaoi?
caeai/eaaaony i?aaeaeaa?aiaiii, e, neaaeiaaoaeueii iannea Y[3]
eieoeeaeece?oaony ioeyie. A oi/iinoe oaeiai aea yooaeoa iiaeii
auei au aeinoe/ue, iaienaa
FLOAT Y[4][3] = (
1, 3, 5, 2, 4, 6, 3, 5, 7
);
Eieoeeaeecaoi? aeey Y ia/eiaaony n eaaie oeao?iie neiaee, ii
eieoeeaeecaoi?a aeey Y[0] iao. Iiyoiio eniieuecoaony 3 yeaiaioa
ec nienea. Aiaeiae/ii neaaeothuea o?e yeaiaioa eniieuecothony
iineaaeiaaoaeueii aeey Y[1] e Y[2]. neaaeothuaa iienaiea
FLOAT Y[4][3] = (
(1), (2), (3), (4)
);
eieoeeaeece?oao ia?aue noieaaoe Y (anee aai ?anniao?eaaoue eae
aeaoia?iue iannea), a inoaeueiua yeaiaiou caiieiythony ioeyie.
E iaeiiaoe, iienaiea
CHAR MSG[] = “SYNTAX ERROR ON LINE %SN”;
aeaiiino?e?oao eieoeeaeecaoeeth yeaiaioia neiaieueiiai ianneaa n
iiiiuueth no?iee.
16.7. Eiaia oeiia
A aeaoo neo/ayo (aeey yaiiai oeacaiey oeia i?aia?aciaaiey
a eiino?oeoeee ia?aaiaea e aeey a?aoiaioia iia?aoeee SIZEOF) aea-
eaoaeueii eiaoue aiciiaeiinoue caaeaaaoue eiy oeia aeaiiuo. Yoi
inouanoaeyaony n iiiiuueth “eiaie oeia”, eioi?ia ii nouanoao
yaeyaony iienaieai iauaeoa oaeiai oeia , a eioi?ii iiouaii
eiy naiiai iauaeoa.
· 209 –
Eiy oeia:
niaoeeoeeaoi?-oeia aano?aeoiue-iienaoaeue
aano?aeoiue-iienaoaeue:
ionoi
(aano?aeoiue-iienaoaeue)
· aano?aeoiue iienaoaeue aano?aeoiue-iienaoaeue ()
aano?aeoiue-iienaoaeue [eiinoaioiia au?aaeaiea
iaia]
Ai ecaaaeaiee aeaoniuneaiiinoe a eiino?oeoeee
(aano?aeoiue iienaoaeue)
o?aaoaony, /oiau aano?aeoiue-iienaoaeue aue iaiono. I?e yoii
ia?aie/aiee aiciiaeii iaeiicia/aii ii?aaeaeeoue oi ianoi a aano-
?aeoiii-iienaoaea, aaea au iiyaeeny eaeaioeoeeaoi?, anee au
yoa eiino?oeoeey auea iienaoaeai a iienaiee. Eiaiiaaiiue oei
niaiaaeaao oiaaea n oeiii aeiioaoe/aneiai eaeaioeoeeaoi?a. Iai-
?eia?, eiaia oeiia
INT
INT *
INT *[3]
INT (*)[3]
INT *()
INT (*)()
eiaiotho niioaaonoaaiii oeiu “oeaeue”, “oeacaoaeue ia oeaeia”,
“iannea ec o?ao oeacaoaeae ia oeaeia”, “oeacaoaeue ia iannea
ec o?ao oeaeuo”, “ ooieoeey, aica?auathuay oeacaoaeue ia oeaeia”
e “oeacaoaeue ia ooieoeeth, aica?auathuoth oeaeia”.
16.8. TYPEDEF
Iienaiey, a eioi?uo “eeann iaiyoe”niaoeeoeoee?iaai eae
TYPEDEF, ia aucuaatho auaeaeaiey iaiyoe. aianoi yoiai iie ii-
?aaeaeytho eaeaioeoeeaoi?u ,eioi?ua iicaeiaa iiaeii eniieueciaaoue
oae, neiaii iie yaeythony eeth/aauie neiaaie, eiathueie iniia-
iua eee i?iecaiaeiua oeiu.
Ii?aaeaeythuaa-oei-eiy
eaeaioeoeeaoi?
A i?aaeaeao iaeanoe aeaenoaey iienaiey ni niaoeeoeeaoi?ii
TYPEDEF eaaeaeue eaeaioeoeeaoi?, yaeythueeny /anoueth ethaiai iie-
naoaey a yoii iienaiee, noaiiaeony neioaene/anee yeaeaaeaio-
iui eeth/aaiio neiao, eiathuaio oio oei , eioi?ue annioeee?oao
n eaeaioeoeeaoi?ii a iienaiiii a i. 16.4 Niunea. Iai?eia?,
iinea iienaiee
TYPEDEF INT MILES, >KLICKSP;
TYPEDEF STRUCT ( DOUBLE RE, IM; ) COMPLEX;
eiino?oeoeee
MILES DISTANCE;
EXTERN KLICKSP METRICP;
COMPLEX Z, *ZP;
· 210 –
noaiiayony caeiiiuie iienaieyie; i?e yoii oeiii DISTANCE ya-
eyaony INT, oeiii METRICP – “oeacaoaeue ia INT”, oeiii Z –
niaoeeoeoee?iaaiiay no?oeoo?a e oeiii ZP – oeacaoaeue ia oaeoth
no?oeoo?o.
Niaoeeoeeaoi? TYPEDEF ia aaiaeeo eaeeo-eeai niaa?oaiii ii-
auo oeiia, a oieueei ii?aaeaeyao neiiieiu aeey oeiia, eioi?ua
iiaeii auei au niaoeeoeoee?iaaoue e ae?oaei niiniaii. Oae a i?e-
aaaeaiiii auoa i?eia?a ia?aiaiiay DISTANCE n/eoaaony eiathuae
oi/ii oaeie aea oei, /oi e ethaie ae?oaie iauaeo, iienaiiue a
INT.
17. Iia?aoi?u
Ca eneeth/aieai iniai iaiaa?eaaaiuo neo/aaa, iia?aoi?u
auiieiythony iineaaeiaaoaeueii.
17.1. Iia?aoi?iia au?aaeaiea
Aieueoeinoai iia?aoi?ia yaeythony iia?aoi?iuie au?aaeaiey-
ie, eioi?ua eiatho oi?io
au?aaeaiea;
iau/ii iia?aoi?iua au?aaeaiey yaeythony i?enaaeaaieyie eee ia-
?auaieyie e ooieoeeyi.
17.2. Ninoaaiie iia?aoi? (eee aeie)
N oai /oiau aeiionoeoue aiciiaeiinoue eniieueciaaiey ianeieue-
eeo iia?aoi?ia oai, aaea iaeeaeaaony i?enoonoaea oieueei iaeiiai,
i?aaeoniao?eaaaony ninoaaiie iia?aoi? (eioi?ue oaeaea e yeae-
aaeaioii iacuaatho “aeieii”):
ninoaaiie iia?aoi?:
(nienie-iienaiee nienie-iia?aoi?ia
iaia iaia)
nienie-iienaiee:
iienaiea
iienaiea nienie-iienaiee
nienie-iia?aoi?ia:
iia?aoi?
iia?aoi? nienie-iia?aoi?ia
Anee eaeie-eeai eaeaioeoeeaoi? ec nienea-iienaiee aue iienai
?aiaa, oi ai a?aiy auiieiaiey aeiea aiaoiaa iienaiea iiaeaa-
eyaony e niiaa anooiaao a neeo iinea auoiaea ec aeiea.
Ethaay eieoeeaeecaoeey aaoiiaoe/aneeo e ?aaeno?aoeeiiiuo ia-
?aiaiiuo i?iaiaeeony i?e eaaeaeii aoiaea a aeie /a?ac aai ia/a-
ei. A ianoiyuaa a?aiy ?ac?aoaaony (ii yoi ieioay i?aeoeea)
ia?aaeaaaoue oi?aaeaiea aioo?ue aeiea; a oaeii neo/aa yoe eie-
oeeaeecaoeee ia auiieiythony. Eieoeeaeecaoeee noaoe/aneeo ia?a-
iaiiuo i?iaiaeyony oieueei iaeei ?ac, eiaaea ia/eiaaony auiieia-
iea i?ia?aiiu.
Iaoiaeyueany aioo?e aeiea aiaoiea iienaiey ia
?aca?ae?otho iaiyoe, oae /oi eo eieoeeaeecaoeey ia
?ac?aoaaony.
· 211 –
17.3. Oneiaiua iia?aoi?u Eiathony aeaa oi?iu oneiaiuo iia?aoi?ia:
IF (au?aaeaiea) iia?aoi?
IF (au?aaeaiea) iia?aoi? ELSE iia?aoi?
A iaieo neo/ayo au/aneyaony au?aaeaiea e, anee iii ioee/ii io
ioey, oi auiieiyaony ia?aue iiaeiia?aoi?. Ai aoi?ii neo/aa,
anee au?aaeaiea ?aaii ioeth, auiaeiyaony aoi?ie iiaeiia?aoi?.
Eae iau/ii, aeaoniuneaiiinoue “ELSE” ?ac?aoaaony naycuaaaieai
ELSE n iineaaeiei ano?a/athueiny IF, o eioi?iai iao ELSE.
17.4. Iia?aoi? WHILE
Iia?aoi? WHILE eiaao oi?io
WHILE (au?aaeaiea) iia?aoi?
Iiaeiia?aoi? auiieiyaony iiaoi?ii aei oao ii?, iiea cia/aiea
au?aaeaiey inoaaony ioee/iui io ioey. i?iaa?ea i?iecaiaeeony
ia?aae eaaeaeui auiieiaieai iia?aoi?a.
17.5. Iia?aoi? DO
Iia?aoi? DO eiaao oi?io
DO iia?aoi? WHILE (au?aaeaiey)
Iia?aoi? auiieiyaony iiaoi?ii aei oao ii?, iiea cia/aiea au?aaeaiey ia
noaiao ?aaiui ioeth. I?iaa?ea i?iecaiaeeony iinea eaaeaeiai auiieiaiey
iia?aoi?a.
17.6. Iia?aoi? FOR
Iia?aoi? FOR eiaao oi?io
(au?aaeaiea-1 ; au?aaeaiea-2 ; au?aaeaiea-3 )iia?aoi?
iaia iaia iaia
Iia?aoi? FOR yeaeaaeaioai neaaeothuaio
au?aaeaiea-1;
WHILE (au?aaeaiea-2) (
iia?aoi?
au?aaeaiea-3
)
Oaeei ia?acii, ia?aia au?aaeaiea ii?aaeaeyao eieoeeaeecaoeeth
oeeeea; aoi?ia niaoeeoeoe?oao i?iaa?eo, auiieiyaioth ia?aae eaae-
aeie eoa?aoeeae, oae /oi auoiae ec oeeeea i?ienoiaeeo oiaaea, eia-
aea cia/aiea au?aaeaiey noaiiaeony ioeai; o?aouea au?aaeaiea
/anoi caaeaao i?e?auaiea ia?aiao?a, eioi?ia i?iaiaeeony iinea
eaaeaeie eoa?aoeee.
Ethaia au?aaeaiea eee aeaaea ana iie iiaoo auoue iiouaiu. An-
ee ionoonoaoao aoi?ia au?aaeaiea, oi i?aaeeiaeaiea n WHILE n/e-
oaaony yeaeaaeaioiui WHILE(1); ae?oaea ionoonoaothuea au?aaea-
iey i?inoi iioneathony ec i?eaaaeaiiiai auoa ?anoe?aiey.
· 212 –
17.7. Iia?aoi? SWITCH
Iia?aoi? SWITCH (ia?aeeth/aoaeue), aucuaaao ia?aaea/o oi-
?aaeaiey e iaeiiio ec ianeieueeeo iia?aoi?ia, a caaeneiinoe io
cia/aiey au?aaeaiey. Iia?aoi? eiaao oi?io
SWITCH (au?aaeaiea) iia?aoi?
A au?aaeaiee i?iaiaeyony iau/iua a?eoiaoe/aneea i?aia?aciaa-
iey, ii ?acoeueoao aeieaeai eiaoue oei INT. Iia?aoi? iau/ii ya-
eyaony ninoaaiui. Ethaie iia?aoi? aioo?e yoiai iia?aoi?a ii-
aeao auoue iiia/ai iaeiei eee aieaa aa?eaioiui i?aoeenii CASE,
eiathuei oi?io:
CASE eiinoainoiia au?aaeaiea:
aaea eiinoaioiia au?aaeaiea aeieaeii eiaoue oei INT. Ieeaeea aeaa
aa?eaioiua eiinoaiou a iaeiii e oii aea ia?aeeth/aoaea ia iiaoo
eiaoue iaeeiaeiaia cia/aiea. oi/iia ii?aaeaeaiea eiinoaioiiai
au?aaeaiey i?eaiaeeony a i. 23.
E?iia oiai, iiaeao i?enoonoaiaaoue naiia aieueoaa iaeei iia-
?aoi?iue i?aoeen aeaea
DEFAULT:
I?e auiieiaiee iia?aoi?a SWITCH au/eneyaony aoiaeyuaa a
iaai au?aaeaiea e n?aaieaaaony n eaaeaeie aa?eaioiie eiinoai-
oie. Anee iaeia ec aa?eaioiuo eiinoaio ieacuaaaony ?aaiie
cia/aieth yoiai au?aaeaiey, oi oi?aaeaiea ia?aaeaaony iia?aoi-
?o, eioi?ue neaaeoao ca niaiaaeathuei aa?eaioiui i?aoeenii. An-
ee ie iaeia ec aa?eaioiuo eiinoaio ia niaiaaeaao ni cia/aieai
au?aaeaiey e anee i?e yoii i?enoonoaoao i?aoeen DEFAULT, oi
oi?aaeaiea ia?aaeaaony iia?aoi?o, iiia/aiiiio yoei i?aoeenii.
anee ie iaeei ec aa?eaioia ia iiaeoiaeeo e i?aoeen DEFAULT io-
noonoaoao, oi ie iaeei ec iia?aoi?ia a ia?aeeth/aoaea ia au-
iieiyaony.
Naie ii naaa i?aoeenu CASE e DEFAULT ia eciaiytho iioie
oi?aaeaiey, eioi?ia aani?aiyonaaiii i?ioiaeeo /a?ac oaeea
i?aoeenu. Aeey auoiaea ec ia?aeeth/aoaey niio?eoa iia?aoi?
BREAK, i. 17.8.
Iau/ii iia?aoi?, eioi?ue aoiaeeo a ia?aeeth/aoaeue, yaeyao-
ny ninoaaiui. Iienaiey iiaoo iiyaeyoueny a ia/aea yoiai iia-
?aoi?a, ii eieoeeaeecaoeee aaoiiaoe/aneeo e ?aaeno?iauo ia?a-
iaiiuo aoaeoo iayooaeoeaiuie.
17.8. Iia?aoi? BREAK
Iia?aoi?
BREAK;
aucuaaao caaa?oaiea auiieiaiey iaeiaiueoaai ioaaouaathuaai
yoio iia?aoi? iia?aoi?a WHILE, DO, FOR eee SWITCH; oi?aaea-
iea ia?aaeaaony iia?aoi?o, neaaeothuaio ca caaa?oaiiui iia?aoi-
?ii.
· 213 –
17.9. Iia?aoi? CONTINUE
Iia?aoi?
CONTINUE;
i?eaiaeeo e ia?aaea/a oi?aaeaiey ia i?iaeieaeathuoth oeeee /anoue
iaeiaiueoaai ioaaouaathuaai yoio iia?aoi? iia?aoi?a WHILE, DO
eee FOR; oi anoue ia eiiaoe oeeeea. Aieaa oi/ii, a eaaeaeii ec
iia?aoi?ia
WHILE(…) ( DO ( FOR(…) (
… … …
CONTIN: ; CONTIN: ; CONTIN: ;
) ) WHILE(…); )
Iia?aoi? CONTINUE yeaeaaeaioai iia?aoi?o GOTO CONTIN. (Ca
CONTIN: neaaeoao ionoie iia?aoi?; ni. I. 17.13.).
17.10. Iia?aoi? aica?aoa
Aica?auaiea ec ooieoeee a aucuaathuoth i?ia?aiio inouanoa-
eyaony n iiiiuueth iia?aoi?a RETURN, eioi?ue eiaao iaeio ec
neaaeothueo oi?i
RETURN;
RETURN au?aaeaiea;
A ia?aii neo/aa aica?auaaiia cia/aiea iaii?aaeaeaii. Ai aoi-
?ii neo/aa a aucuaathuoth ooieoeeth aica?auaaony cia/aiea au?a-
aeaiey. Anee o?aaoaony, au?aaeaiea i?aia?acoaony e oeio ooie-
oeee, a eioi?ie iii iiyaeyaony, eae a neo/aa i?enaaeaaiey.
Iiiaaeaiea ia eiiaoe ooieoeee yeaeaaeaioii aica?aoo aac aica?a-
uaaiiai cia/aiey.
17.11. Iia?aoi? GOTO
Oi?aaeaiea iiaeii ia?aaeaaaoue aaconeiaii n iiiiuueth iia?a-
oi?a
GOTO eaeaioeoeeaoi?1
eaeaioeoeeaoi? aeieaeai auoue iaoeie (i. 9.12), Eieaeeciaaiiie a
aeaiiie ooieoeee.
17.12. Iiia/aiiue iia?aoi?
Ia?aae ethaui iia?aoi?ii iiaeao noiyoue iiia/aiiue i?aoeen
aeaea
eaeaioeoeeaoi?:
eioi?ue neoaeeo aeey iienaiey eaeaioeoeeaoi?a a ea/anoaa iaoee.
Iaoee eniieuecothony oieueei aeey oeacaiey ianoa, eoaea ia?aaeaao-
ny oi?aaeaiea iia?aoi?ii GOTO. Iaeanoueth aeaenoaey iaoee yaey-
aony aeaiiay ooieoeey, ca eneeth/aieai ethauo iiaeaeieia, a eioi-
?uo oio aea eaeaioeoeeaoi? iienai niiaa. Niio?e i. 19.
· 214 –
17.13. Ionoie iia?aoi? Ionoie iia?aoi? eiaao oi?io:
;
Ionoie iia?aoi? ieacuaaaony iieaciui, oae eae ii iicaieyao
iinoaaeoue iaoeo ia?aae cae?uaathuae neiaeie ) ninoaaiiai iia-
?aoi?a eee oeacaoue ionoia oaei a iia?aoi?ao oeeeea, oaeeo eae
WHILE.
18. Aiaoiea ii?aaeaeaiey
C-i?ia?aiia i?aaenoaaeyao niaie iineaaeiaaoaeueiinoue aiao-
ieo ii?aaeaeaiee. Aiaoiaa ii?aaeaeaiea iienuaaao eaeaioeoeeaoi?
eae eiathuee eeann iaiyoe EXTERN (ii oiie/aieth), eee aiciiaeii
STATIC, e niaoeeoeoee?iaaiiue oei. Niaoeeoeeaoi? oeia (i. 16.2)
Oaeaea iiaeao auoue ionoui; a yoii neo/aa n/eoaaony, /oi oei
yaeyaony oeiii INT. Iaeanoue aeaenoaey aiaoieo ii?aaeaeaiee
?ani?ino?aiyaony aei eiioea oaeea, a eioi?ii iie i?eaaaeaiu,
oi/ii oae aea , eae aeeyiea iienaiee i?inoe?aaony aei eiioea
aeiea. Neioaenen aiaoieo ii?aaeaeaiee ia ioee/aaony io nei-
oaenena iienaiee, ca eneeth/aieai oiai, /oi oieueei ia yoii
o?iaia iiaeii i?eaiaeeoue oaeno ooieoeee.
18.1. Aiaoiaa ii?aaeaeaiea ooieoeee
Ii?aaeaeaiea ooieoeee eiaao oi?io
ii?aaeaeaiea-ooieoeee:
niaoeeoeeaoi?u-iienaiey iienaoaeue-ooieoeee
oaei-ooieoeee
iaia
Aaeeinoaaiiuie niaoeeoeeaoi?aie eeanna iaiyoe, aeiioneaaiuie a
ea/anoaa niaoeeoeeaoi?ia-iienaiey, yaeythony EXTERN eee
STATIC; i ?acee/ee iaaeaeo ieie niio?e i. 19.2. Iienaoaeue ooi-
eoeee iiaeiaai iienaoaeth aeey “ooieoeee, aica?auathuae…”, ca
eneeth/aieai oiai, /oi ii ia?a/eneyao oi?iaeueiua ia?aiao?u
ii?aaeaeyaiie ooieoeee.
Ienaoaeue-ooieoeee:
iienaoaeue (nienie-ia?aiao?ia
iaia)
nienie ia?aiao?ia:
eaeaioeoeeaoi?
eaeaioeoeeaoi?, nienie-ia?aiao?ia
oaei-ooieoeee eiaao oi?io
oaei-ooieoeee:
nienie-iienaiee ninoaaiie-iia?aoi?
· 215 –
Eaeaioeoeeaoi?u ec nienea ia?aiao?ia e oieueei iie iiaoo
auoue iienaiu a nienea iienaiee. Ethaie eaeaioeoeeaoi?, oei ei-
oi?iai ia oeacai, n/eoaaony eiathuei oei INT. Aaeeinoaaiiui
aeiionoeiui caeanue niaoeeoeeaoi?ii eeanna iaiyoe yaeyaony
REGISTER; anee oaeie eeann iaiyoe niaoeeoeoee?iaai, oi a ia/a-
ea auiieiaiey ooieoeee niioaaonoaothuee oaeoe/aneee ia?aiao?
eiie?oaony, anee yoi aiciiaeii, a ?aaeno?.
Aio i?inoie i?eia? iieiiai ii?aaeaeaiey ooieoeee:
INT MAX(A, B, C)
INT A, B, C;
(
INT M;
M = (A>B) ? A:B;
RETURN((M>C) ? M:C);
)
Caeanue INT – niaoeeoeeaoi?-oeia, MAX(A,B,C) – iienaoaeue-ooie-
oeee, INT A,B,C; – nienie-iienaiee oi?iaeueiuo ia?aiao?ia, (
… ) – Aeie, niaea?aeauee oaeno iia?aoi?a.
A ycuea “C” ana oaeoe/aneea ia?aiao?u oeia FLOAT i?aia-
?acothony e oeio DOUBLE, oae /oi iienaiey oi?iaeueiuo ia?aiao-
?ia, iauyaeaiiuo eae FLOAT, i?eniiniaeaiu i?i/anoue ia?aiao?u
oeia DOUBLE. Aiaeiae/ii, iineieueeo nnueea ia iannea a ethaii
eiioaenoa (a /anoiinoe a oaeoe/aneii ia?aiao?a) ?anniao?eaa-
aony eae oeacaoaeue ia ia?aue yeaiaio ianneaa, iienaiey oi?-
iaeueiuo ia?aiao?ia aeea “iannea …” i?eniiniaeaiu i?i/anoue
: “oeacaoaeue ia …”. E iaeiiaoe, iineieueeo no?oeoo?u,
iauaaeeiaiey e ooieoeee ia iiaoo auoue ia?aaeaiu ooieoeee, aann-
iuneaiii iienuaaoue oi?iaeueiue ia?aiao? eae no?oeoo?o,
iauaaeeiaiea eee ooieoeeth (oeacaoaee ia oaeea iauaeou, eiia/-
ii, aeiioneathony).
18.2. Aiaoiea ii?aaeaeaiey aeaiiuo
Aiaoiaa ii?aaeaeaiea aeaiiuo eiaao oi?io
ii?aaeaeaiea-aeaiiuo:
iienaiea
Eeannii iaiyoe oaeeo aeaiiuo iiaeao auoue EXTERN (a /anoiinoe,
ii oiie/aieth) eee STATIC, ii ia AUTO eee REGISTER.
19. I?aaeea, ii?aaeaeythuea iaeanoue aeaenoaey
Any C-i?ia?aiia iaiaycaoaeueii eiiieee?oaony iaeiia?aiai-
ii; enoiaeiue oaeno i?ia?aiiu iiaeao o?aieoueny a ianeieueeeo
oaeeao e ?aiaa neiiieee?iaaiiua i?ioeaaeo?u iiaoo caa?oaeaoueny
ec aeaeeioae. Naycue iaaeaeo ooieoeeyie iiaeao inouanoaeyoueny eae
/a?ac yaiua ia?auaiey, oae e a ?acoeueoaoa iaieioee?iaaiey n
aiaoieie aeaiiuie.
Iiyoiio neaaeoao ?anniio?aoue aeaa aeaea iaeanoae aeaenoaey:
ai-ia?auo, oo, eioi?ay iiaeao auoue iacaaia eaene/aneie ia-
eanoueth aeaenoaey eaeaioeoeeaoi?a e eioi?ay ii nouanoao yaeyao-
ny oie iaeanoueth a i?ia?aiia, aaea yoio eaeaioeoeeaoi? iiaeii
eniieueciaaoue, ia aucuaay aeeaaiinoe/aneiai niiauaiey “iaii?a-
aeaeaiiue eaeaioeoeeaoi?”; e ai-aoi?uo, iaeanoue aeaenoaey, ei-
oi?ay naycaia n aiaoieie eaeaioeoeeaoi?aie e eioi?ay oa?aeoa-
?ecoaony i?aaeeii, /oi nnueee ia iaeei e oio aea aiaoiee eaeai-
oeoeeaoi? yaeythony nnueeaie ia iaeei e oio aea iauaeo.
· 216 –
19.1. Eaene/aneay iaeanoue aeaenoaey
Eaene/aneay iaeanoue aeaenoaey eaeaioeoeeaoi?ia, iienaiiuo
ai aiaoieo ii?aaeaeaieyo, i?inoe?aaony io ii?aaeaeaiey aei eii-
oea enoiaeiiai oaeea, a eioi?ii ii iaoiaeeony. Eaene/aneay ia-
eanoue aeaenoaey eaeaioeoeeaoi?ia, yaeythueony oi?iaeueiuie ia?a-
iao?aie, ?ani?ino?aiyaony ia oo ooieoeeth, e eioi?ie iie ioii-
nyony. Eaene/aneay iaeanoue aeaenoaey eaeaioeoeeaoi?ia, iienai-
iuo a ia/aea aeiea, i?inoe?aaony aei eiioea yoiai aeiea. Eae-
ne/aneie iaeanoueth aeaenoaey iaoie yaeyaony oa ooieoeey, a ei-
oi?ie iie iaoiaeyony.
Iineieueeo ana ia?auaiey ia iaeei e oio aea aiaoiee eaeaioe-
oeeaoi? ia?auathony e iaeiiio e oiio aea iauaeoo (ni. I. 19.2),
Eiiieeyoi? i?iaa?yao ana iienaiey iaeiiai e oiai aea aiaoiaai
eaeaioeoeeaoi?a ia niaianoeiinoue; a aeaenoaeoaeueiinoe eo ia-
eanoue aeaenoaey ?ani?ino?aiyaony ia aanue oaee, a eioi?ii iie
iaoiaeyony.
Ai anao neo/ayo, iaeiaei, anoue iaeioi?ue eaeaioeoeeaoi?,
yaiui ia?acii iienai a ia/aea aeiea, aeeth/ay e aeie, eioi?ue
ia?acoao ooieoeeth, oi aeaenoaea ethaiai iienaiey yoiai eaeaioe-
oeeaoi?a aia aeiea i?einoaiaaeeaaaony aei eiioea yoiai aeiea.
Iaiiiiei oaeaea (i. 16.5), *oi eaeaioeoeeaoi?u, niioaaono-
aothuea iau/iui ia?aiaiiui, n iaeiie noi?iiu, e eaeaioeoeeaoi-
?u, niioaaonoaothuea /eaiai e y?eueai no?oeoo? e iauaaeeiaiee,
n ae?oaie noi?iiu, oi?ie?otho aeaa iaia?anaeathueony eeanna, ei-
oi?ua ia anooiatho a i?ioeai?a/ea. *eaiu e y?euee iiae/eiythony
oai aea naiui i?aaeeai ii?aaeaeaiey iaeanoae aeaenoaey, eae e
ae?oaea eaeaioeoeeaoi?u. Eiaia, niaoeeoeoee?oaiua n iiiiuueth
TYPEDEF, aoiaeyo a oio aea eeann, /oi e iau/iua eaeaioeoeeaoi-
?u. Iie iiaoo auoue ia?aii?aaeaeaiu ai aioo?aiieo aeieao, ii
ai aioo?aiiai iienaiee oei aeieaeai auoue oeacai yaii:
TYPEDEF FLOAT DISTANCE;
…
(
AUTO INT DISTANCE;
…
Ai aoi?ii iienaiee niaoeeoeeaoi? oeia INT aeieaeai i?enoonoai-
aaoue, oae eae a i?ioeaiii neo/aa yoi iienaiea aoaeao i?eiyoi
ca iienaiea aac iienaoaeae n oeiii DISTANCE (i?ei. Aaoi?a:
niaeaneoanue, /oi eaae caeanue oiiie.).
19.2. Iaeanoue aeaenoaey aiaoieo eaeaioeoeeaoi?ia
Anee ooieoeey nnueaaony ia eaeaioeoeeaoi?, iienaiiue eae
EXTERN, oi aaea-oi n?aaee oaeeia eee aeaeeioae, ia?acothueo
iieioth i?ia?aiio, aeieaeii niaea?aeaoueny aiaoiaa ii?aaeaeaiea
yoiai eaeaioeoeeaoi?a. Ana ooieoeee aeaiiie i?ia?aiiu, eioi?ua
nnueathony ia iaeei e oio aea aiaoiee eaeaioeoeeaoi?, nnueathony
ia iaeei e oio aea iauaeo, oae /oi neaaeoao iicaaioeoueny, /oiau
niaoeeoeoee?iaaiiua a yoii ii?aaeaeaiee oei e ?acia? auee nia-
ianoeiu n oeiii e ?acia?ii, oeacuaaaiuie a eaaeaeie ooieoeee,
eioi?ay nnueaaony ia yoe aeaiiua.
· 217 –
Iiyaeaiea eeth/aaiai neiaa EBTERN ai aiaoiai ii?aaeaeaiee
oeacuaaao ia oi, /oi iaiyoue aeey iienaiiuo a iai eaeaioeoeea-
oi?ia aoaeao auaeaeaia a ae?oaii oaeea. Neaaeiaaoaeueii, a ninoi-
yuae ec iiiaeo oaeeia i?ia?aiia aiaoiaa ii?aaeaeaiea eaeaioe-
oeeaoi?a, ia niaea?aeauaa niaoeeoeeaoi?a EXTERN, aeieaeii iiya-
eyoueny ?iaii a iaeiii ec yoeo oaeeia. ethaua ae?oaea oaeeu, ei-
oi?ua aeaeatho aeaoue aiaoiaa ii?aaeaeaiea yoiai eaeaioeoeeaoi?a,
aeieaeiu aeeth/aoue a yoi ii?aaeaeaiea neiai EXTERN. Eaeaioeoeea-
oi? iiaeao auoue eieoeeaeece?iaai oieueei a oii iienaiee, eioi-
?ia i?eaiaeeo e auaeaeaieth iaiyoe.
Eaeaioeoeeaoi?u, aiaoiaa ii?aaeaeaiea eioi?uo ia/eiaaony
ni neiaa STATIC, iaaeinooiiu ec ae?oaeo oaeeia. Ooieoeee iiaoo
auoue iienaiu eae STATIC.
20. No?iee oi?aaeaiey eiiieeyoi?ii
Eiiieeyoi? ycuea “C” niaea?aeeo i?ai?ioeanni?, eioi?ue iic-
aieyao inouanoaeyoue iae?iiiaenoaiiaee, oneiaioth eiiieeyoeeth e
aeeth/aiea eiaiiaaiiuo oaeeia. No?iee, ia/eiathueany n #, ia-
uathony n yoei i?ai?ioeanni?ii. Neioaenen yoeo no?ie ia naycai
n inoaeueiui ycueii; iie iiaoo iiyaeyoueny a ethaii ianoa e eo
aeeyiea ?ani?ino?aiyaony (iacaaeneii io iaeanoe aeaenoaey) aei
eiioea enoiaeiiai i?ia?aiiiiai oaeea.
20.1. Caiaia eaenai
Oi?aaeythuay eiiieeyoi?ii no?iea aeaea
#DEFINE eaeaioeoeeaoi? no?iea-eaenai
(Ia?aoeoa aieiaiea ia ionoonoaea a eiioea oi/ee n caiy-
oie) i?eaiaeeo e oiio, /oi i?ai?ioeanni? caiaiyao iineaaeothuea
aoiaeaeaiey yoiai eaeaioeoeeaoi?a ia oeacaiioth no?ieo eaenai.
No?iea aeaea
#DEFINE eaeaioeoeeaoi?
(eaeaioeoeeaoi?,…,eaeaioeoeeaoi?)no?iea eaenai
aaea iaaeaeo ia?aui eaeaioeoeeaoi?ii e ioe?uaathuaeny neiaeie (
iao i?iaaea, i?aaenoaaeyao niaie iae?iii?aaeaeaiea n a?aoiai-
oaie. Iineaaeothuaa aoiaeaeaiea ia?aiai eaeaioeoeeaoi?a, ca eioi-
?ui neaaeoao ioe?uaathuay neiaea ‘(‘, iineaaeiaaoaeueiinoue ?ac-
aeaeaiiuo caiyouie eaenai e cae?uaathuay neiaea ‘)’, caiaiytho-
ny no?ieie eaenai ec ii?aaeaeaiey. eaaeaeia aoiaeaeaiea eaeaioeoe-
eaoi?a, oiiiyiooiai a nienea oi?iaeueiuo ia?aiao?ia a ii?aaea-
eaiee , caiaiyaony niioaaonoaothuae no?ieie eaenai ec ia?aua-
iey. Oaeoe/aneeie a?aoiaioaie a ia?auaiee yaeythony no?iee
eaenai, ?acaeaeaiiua caiyouie; iaeiaei caiyoua, aoiaeyuea a ca-
eaau/aiiua no?iee eee caeeth/aiiua a e?oaeua neiaee, ia ?ac-
aeaeytho a?aoiaioia. Eiee/anoai oi?iaeueiuo e oaeoe/aneeo ia?a-
iao?ia aeieaeii niaiaaeaoue. Oaeno aioo?e no?iee eee neiaieueiie
eiinoaiou ia iiaeeaaeeo caiaia.
A iaieo neo/ayo caiaiaiiay no?iea i?iniao?eaaaony niiaa
n oeaeueth iaia?oaeaiey ae?oaeo ii?aaeaeaiiuo eaeaioeoeeaoi?ia. A
iaieo neo/ayo neeoeii aeeeiiay no?iea ii?aaeaeaiey iiaeao auoue
i?iaeieaeaia ia ae?oaie no?iea, anee iiianoeoue a eiioea i?iaeie-
aeaaiie no?iee ia?aoioth einoth /a?oo .
· 218 –
Iienuaaaiay aiciiaeiinoue iniaaiii iieacia aeey ii?aaeaeaiey
“iauyaeyaiuo eiinoaio”, eae, iai?eia?,
#DEFINE TABSIZE 100
INT TABLE[TABSIZE];
Oi?aaeythuay no?iea aeaea
#UNDEF eaeaioeoeeaoi?
i?eaiaeeo e ioiaia i?ai?ioeanni?iiai ii?aaeaeaiey aeaiiiai eaeai-
oeoeeaoi?a.
20.2. Aeeth/aiea oaeeia
No?iea oi?aaeaiey eiiieeyoi?ii aeaea
#INCLUDE “FILENAME”
i?eaiaeeo e caiaia yoie no?iee ia ana niaea?aeeiia oaeea n eia-
iai FILENAME. Oaee n yoei eiaiai nia/aea euaony a ni?aai/ie-
ea ia/aeueiiai enoiaeiiai oaeea, a caoai a iineaaeiaaoaeueiinoe
noaiaea?oiuo iano. A ioee/ea io yoiai oi?aaeythuay no?iea aeaea
#INCLUDE
euao oaee oieueei a noaiaea?oiuo ianoao e ia i?iniao?eaaao
ni?aai/iee enoiaeiiai oaeea.
No?iee #INCLUDE iiaoo auoue aeiaeaiiuie.
20.3. Oneiaiay eiiieeyoeey
No?iea oi?aaeaiey eiiieeyoi?ii aeaea
#IF eiinoaioiia au?aaeaiea
i?iaa?yao, ioee/ii ee io ioey cia/aiea eiinoaioiiai au?aaea-
iey (ni. I. 15). Oi?aaeythuay no?iea aeaea
#IF DEF eaeaioeoeeaoi?
i?iaa?yao, ii?aaeaeai ee yoio eaeaioeoeeaoi? a ianoiyuee ii-
iaio a i?ai?ioeanni?a, o.a. Ii?aaeaeai ee yoio eaeaioeoeeaoi? n
iiiiuueth oi?aaeythuae no?iee #DEFINE.
21. Iayaiua iienaiey
Ia anaaaea yaeyaony iaiaoiaeeiui niaoeeoeoee?iaaoue e eeann
iaiyoe e oei eaeaioeoeeaoi?a a iienaiee. Ai aiaoieo ii?aaeaea-
ieyo e iienaieyo oi?iaeueiuo ia?aiao?ia e /eaiia no?oeoo?
eeann iaiyoe ii?aaeaeyaony ii eiioaenoo. Anee a iaoiaeyuainy
aioo?e ooieoeee iienaiee ia oeacai oei, a oieueei eeann iaiy-
oe, oi i?aaeiieaaaaony, /oi eaeaioeoeeaoi? eiaao oei INT; anee
ia oeacai eeann iaiyoe, a oieueei oei, oi eaeaioeoeeaoi? i?aae-
iieaaaaony iienaiiui eae AUTO. Eneeth/aiea ec iineaaeiaai i?a-
aeea aeaaony aeey ooieoeee, iioiio /oi niaoeeoeeaoi? AUTO aeey
ooieoeee yaeyaony aanniuneaiiui (ycue “C” ia a ninoiyiee eii-
ieee?iaaoue i?ia?aiio a noae); anee eaeaioeoeeaoi? eiaao oei
“ooieoeey, aica?auathuay …”, oi ii i?aaeiieaaaaony iayaii
iienaiiui eae EXTERN.
· 219 –
Aoiaeyuee a au?aaeaiea e iaiienaiiue ?aiaa eaeaioeoeeaoi?,
ca eioi?ui neaaeoao neiaea ( , n/eoaaony iienaiiui ii eiioae-
noo eae “ooieoeey, aica?auathuay INT”.
22. Niiaa i oeiao
A yoii ?acaeaea iaiauathony naaaeaiey ia iia?aoeeyo, eioi?ua
iiaeii i?eiaiyoue oieueei e iauaeoai ii?aaeaeaiiuo oeiia.
22.1. No?oeoo?u e iauaaeeiaiey
Oieueei aeaa aaue iiaeii naeaeaoue ni no?oeoo?ie eee iauaaee-
iaieai: iacaaoue iaeei ec eo /eaiia (n iiiiuueth iia?aoeee) eee
ecaea/ue eo aae?an ( n iiiiuueth oia?iie iia?aoeee &). Ae?oaea
iia?aoeee, oaeea eae i?enaaeaaiea ei eee ec ieo e ia?aaea/a eo
a ea/anoaa ia?aiao?ia, i?eaiaeyo e niiauaieth ia ioeaea. A ao-
aeouai iaeeaeaaony, /oi yoe iia?aoeee, ii ia iaycaoaeueii ea-
eea-eeai ae?oaea, aoaeoo ?ac?aoaiu.
A i. 15.1 Aiai?eony, /oi i?e i?yiie eee einaaiiie nnueea
ia no?oeoo?o (n iiiiuueth . Eee ->) eiy ni?aaa aeieaeii auoue
/eaiii no?oeoo?u, iacaaiiie eee oeacaiiie au?aaeaieai neaaa.
Yoi ia?aie/aiea ia iaaycuaaaony no?iai eiiieeyoi?ii, /oiau
aeaoue aiciiaeiinoue iaieoe i?aaeea oeiia. A aeaenoaeoaeueiinoe
ia?aae ‘.’ aeiioneaaony ethaia L-cia/aiea e caoai i?aaeiieaaaao-
ny, /oi yoi L-cia/aiea eiaao oi?io no?oeoo?u, aeey eioi?ie
noiyuaa ni?aaa eiy yaeyaony /eaiii. Oaeei aea ia?acii, io au-
?aaeaiey, noiyuaai ia?aae ‘->’, o?aaoaony oieueei auoue oeacaoa-
eai eee oeaeui. A neo/aa oeacaoaey i?aaeiieaaaaony, /oi ii
oeacuaaao ia no?oeoo?o, aeey eioi?ie noiyuaa ni?aaa eiy yaey-
aony /eaiii. A neo/aa oeaeiai iii ?anniao?eaaaony eae aani-
ethoiue aae?an niioaaonoaothuae no?oeoo?u, caaeaiiue a aaeeieoeao
iaoeiiie iaiyoe.
Oaeea no?oeoo?u ia yaeythony ia?aiineiuie.
22.2. Ooieoeee
Oieueei aeaa aaue iiaeii naeaeaoue n ooieoeeae: aucaaoue aa eee
ecaea/ue aa aae?an. Anee eiy ooieoeee aoiaeeo a au?aaeaiea ia a
iiceoeee eiaie ooieoeee, niioaaonoaothuae ia?auaieth e iae, oi
aaia?e?oaony oeacaoaeue ia yoo ooieoeeth. Neaaeiaaoaeueii, /oiau
ia?aaeaoue iaeio ooieoeeth ae?oaie, iiaeii iaienaoue
INT F();
…
G(F);
Oiaaea ii?aaeaeaiea ooieoeee G iiaei au auaeyaeaoue oae:
G(FUNCP)
INT(*FUNCP)();
(
…
(*FUNCP)();
…
)
Ia?aoeoa aieiaiea, /oi a aucuaathuae i?ioeaaeo?a ooieoeey F aeie-
aeia auoue iienaia yaii, iioiio /oi ca aa iiyaeaieai a G(F) ia
neaaeoao neiaea ( .
· 220 –
22.3. Ianneau, oeacaoaee e eiaeaenaoeey
Eaaeaeue ?ac, eiaaea eaeaioeoeeaoi?, eiathuee oei ianneaa,
iiyaeyaony a au?aaeaiee, ii i?aia?acoaony a oeacaoaeue ia ia?-
aue /eai yoiai ianneaa. Ec-ca yoiai i?aia?aciaaiey ianneau
ia yaeythony L-cia/aieyie. Ii ii?aaeaeaieth iia?aoeey eiaeaenaoeey
[] eioa?i?aoe?oaony oaeei ia?acii, /oi E1[E2] n/eoaaony
eaeaioe/iui au?aaeaieth *((a1)+(a2)). Niaeanii i?aaeeai i?aia-
?aciaaiee, i?eiaiyaiui i?e iia?aoeee +, anee E1 – iannea, a
a2 – oeaeia, oi a1[a2] nnueaaony ia a2-e /eai ianneaa a1. Ii-
yoiio ianiio?y ia ianeiiao?e/iue aeae iia?aoeey eiaeaenaoeee ya-
eyaony eiiiooaoeaiie.
A neo/aa iiiaiia?iuo ianneaia i?eiaiyaony iineaaeiaaoaeue-
iia i?aaeei. Anee a yaeyaony N-ia?iui ianneaii ?acia?a
I*J*…*K, oi i?e iiyaeaiee a au?aaeaiee a i?aia?acoaony a
oeacaoaeue ia (N-1)-ia?iue iannea ?acia?a J*…*K. Anee iia-
?aoeey * eeai yaii, eeai iayaii, eae ?acoeueoao eiaeaenaoeee,
i?eiaiyaony e yoiio oeacaoaeth, oi ?acoeueoaoii iia?aoeee aoaeao
oeacaiiue (N-1)-ia?iue iannea, eioi?ue nai iaiaaeeaiii i?aia-
?acoaony a oeacaoaeue.
?anniio?ei, iai?eia?, iienaiea
INT X[3][5];
Caeanue X iannea oeaeuo ?acia?a 3*5. I?e iiyaeaiee a au?aaeaiee
X i?aia?acoaony a oeacaoaeue ia ia?aue ec o?ao ianneaia ec 5
oeaeuo. A au?aaeaiee X[I], eioi?ia yeaeaaeaioii *(X+I), nia/a-
ea X i?aia?acoaony a oeacaoaeue oae, eae iienaii auoa; caoai
I i?aia?acoaony e oeio X, /oi aucuaaao oiiiaeaiea I ia aeeeio
iauaeoa, ia eioi?ue oeacuaaao oeacaoaeue, a eiaiii ia 5 oeaeuo
iauaeoia. ?acoeueoaou neeaaeuaathony, e i?eiaiaiea einaaiiie
aae?anaoeee aeaao iannea (ec 5 oeaeuo), eioi?ue a naith i/a?aaeue
i?aia?acoaony a oeacaoaeue ia ia?aia ec yoeo oeaeuo. Anee a
au?aaeaiea aoiaeeo e ae?oaie eiaeaen, oi oaaea naiay a?aoiaioaoeey
i?eiaiyaony niiaa; ?acoeueoaoii ia yoio ?ac aoaeao oeaeia.
Ec anaai yoiai neaaeoao, /oi ianneau a ycuea “C” o?aiyony
iino?i/ii ( iineaaeiee eiaeaen eciaiyaony auno?aa anaai) e /oi
ia?aue eiaeaen a iienaiee iiiiaaao ii?aaeaeeoue iauaa eiee/ano-
ai iaiyoe, o?aaoaiia aeey o?aiaiey ianneaa, ii ia ea?aao ie-
eaeie ae?oaie ?iee a au/eneaieyo, naycaiiuo n eiaeaenaoeeae.
22.4. ssaiua i?aia?aciaaiey oeacaoaeae
?ac?aoathony ii?aaeaeaiiua i?aia?aciaaiey, n eniieueciaaie-
ai oeacaoaeae , ii iie eiatho iaeioi?ua caaenyuea io eiie?ao-
iie ?aaeecaoeee aniaeou. Ana yoe i?aia?aciaaiey caaeathony n
iiiiuueth iia?aoeee yaiiai i?aia?aciaaiey oeia; ni. I. 15.2 e
16.7.
Oeacaoaeue iiaeao auoue i?aia?aciaai a ethaie ec oeaei/eneai-
iuo oeiia, aeinoaoi/ii aieueoie aeey aai o?aiaiey. O?aaoaony ee
i?e yoii INT eee LONG, caaeneo io eiie?aoiie iaoeiu. I?aia-
?acothuay ooieoeey oaeaea yaeyaony iaoeiii-caaeneiie, ii iia
aoaeao aiieia anoanoaaiiie aeey oao, eoi ciaao no?oeoo?o aae?a-
naoeee a iaoeia. Aeaoaee aeey iaeioi?uo eiie?aoiuo iaoei i?eai-
aeyony ieaea.
Iauaeo oeaei/eneaiiiai oeia iiaeao auoue yaiui ia?acii i?a-
ia?aciaai a oeacaoaeue. oaeia i?aia?aciaaiea anaaaea ia?aaiaeeo
i?aia?aciaaiiia ec oeacaoaey oeaeia a oio aea naiue oeacaoaeue,
ii a ae?oaeo neo/ayo iii aoaeao iaoeiii-caaeneiui.
· 221 –
Oeacaoaeue ia iaeei oei iiaeao auoue i?aia?aciaai a oeaca-
oaeue ia ae?oaie oei. Anee i?aia?acoaiue oeacaoaeue ia oeacuaa-
ao ia iauaeou, eioi?ua iiaeoiaeyuei ia?acii au?aaiaiu a iaiy-
oe, oi ?acoeueoe?othuee oeacaoaeue iiaeao i?e eniieueciaaiee au-
cuaaoue ioeaee aae?anaoeee. Aa?aioe?oaony, /oi oeacaoaeue ia
iauaeo caaeaiiiai ?acia?a iiaeao auoue i?aia?aciaai a oeacaoaeue
ia iauaeo iaiueoaai ?acia?a e niiaa ia?aoii, ia i?aoa?iaa i?e
yoii eciaiaiey.
Iai?eia?, i?ioeaaeo?a ?ani?aaeaeaiey iaiyoe iiaea au i?eie-
iaoue cai?in ia ?acia? auaeaeyaiiai iauaeoa a aaeoao, a aica-
?auaoue oeacaoaeue ia neiaieu; yoi iiaeii auei au eniieueciaaoue
neaaeothuei ia?acii.
EXTERN CHAR *ALLOC();
DOUBLE *DP;
DP=(DOUBLE*) ALLOC(SIZEOF(DOUBLE));
*DP=22.0/7.0;
Ooieoeey ALLOC aeieaeia iaania/eaaoue (iaoeiii-caaeneiui niini-
aii), /oi aica?auaaiia ath cia/aiea aoaeao iiaeoiaeyuei aeey i?a-
ia?aciaaiey a oeacaoaeue ia DOUBLE; a oaeii neo/aa eniieueci-
aaiea yoie ooieoeee aoaeao ia?aiineiui.
I?aaenoaaeaiea oeacaoaey ia PDP-11 niioaaonoaoao 16-aeoi-
aiio oeaeiio e ecia?yaony a aaeoao. Iauaeou oeia CHAR ia eia-
tho ieeaeeo ia?aie/aiee ia au?aaieaaiea; ana inoaeueiua iauae-
ou aeieaeiu eiaoue /aoiua aae?ana.
Ia HONEYWELL 6000 oeacaoaeue niioaaonoaoao 36-aeoiaiio
oeaeiio; neiao niioaaonoaoao 18 eaauo aeoia e aeaa iaiin?aaeno-
aaiii i?eiueathueo e iei ni?aaa aeoa, eioi?ua auaeaeytho neiaie
a neiaa. Oaeei ia?acii, oeacaoaee ia neiaieu ecia?ythony a
aaeeieoeao 2 a noaiaie 16 aaeoia; ana inoaeueiia ecia?yaony a
aaeeieoeao 2 a noaiaie 18 iaoeiiuo neia. Aaee/eiu oeia DOUBLE
e niaea?aeauea eo aa?aaaou aeieaeiu au?aaieaaoueny ii /aoiui aae-
?anai neia (0 ii iiaeoeth 2 a noaiaie 19). Yai IBM 370 e
INTERDATA 8/32 noiaeiu iaaeaeo niaie. Ia iaaeo iaoeiao aae?ana
ecia?ythony a aaeoao; yeaiaioa?iua iauaeou aeieaeiu auoue au?ia-
iaiu ii a?aieoea, ?aaiie eo aeeeia, oae /oi oeacaoaee ia SHORT
aeieaeiu auoue e?aoiu aeaoi, ia INT e FLOAT – /aou?ai e ia
DOUBLE – ainueie. Aa?aaaou au?aaieaathony ii naiie no?iaie
a?aieoea, o?aaoaiie eaeei-eeai ec eo yeaiaioia.
23. Eiinoaioiua au?aaeaiey
A ianeieueeeo ianoao a ycuea “C” o?aaothony au?aaeaiey, ei-
oi?ua iinea au/eneaiey noaiiayony eiinoaioaie: iinea aa?eai-
oiiai i?aoeena CASE, a ea/anoaa a?aieoe ianneaia e a eieoeea-
eecaoi?ao. A ia?auo aeaoo neo/ayo au?aaeaiea iiaeao niaea?aeaoue
oieueei oeaeua eiinoaiou, neiaieueiua eiinoaiou e au?aaeaiey
SIZEOF, aiciiaeii naycaiiua eeai aeia?iuie iia?aoeeyie
+ – * / . % & ! * > == 1= =
eeai oia?iuie iia?aoeeyie
– ^
eeai oa?ia?iie iia?aoeeae ?:
· 222 –
E?oaeua neiaee iiaoo eniieueciaaoueny aeey a?oiie?iaee, ii ia
aeey ia?auaiey e ooieoeeyi.
A neo/aa eieoeeaeecaoi?ia aeiioneaaony aieueoay (oaea?aiea
ia aoeao i) naiaiaea; e?iia ia?a/eneaiiuo auoa eiinoaioiuo
au?aaeaiee iiaeii oaeaea i?eiaiyoue oia?ioth iia?aoeeth & e aiaoiei
eee noaoe/aneei iauaeoai e e aiaoiei eee noaoe/aneei ianne-
aai, eiathuei a ea/anoaa eiaeaenia eiinoaioiia au?aaeaiea.
Oia?iay iia?aoeey & iiaeao auoue oaeaea i?eiaiaia iayaii, a ?a-
coeueoaoa iiyaeaiey iaeiaeaene?iaaiiuo ianneaia e ooieoeee. In-
iiaiia i?aaeei caeeth/aaony a oii, /oi iinea au/eneaiey eie-
oeeaeecaoi? aeieaeai noaiiaeony eeai eiinoaioie, eeai aae?anii
?aiaa iienaiiiai aiaoiaai eee noaoe/aneiai iauaeoa iethn eee
ieion eiinoaioa.
24. Niia?aaeaiey i ia?aiineiinoe
Iaeioi?ua /anoe ycuea “C” ii naiae nooe iaoeiii-caaene-
iu. Neaaeothuea ieaea ia?a/eneaiea iioaioeeaeueiuo o?oaeiinoae oi-
oy e ia yaeythony anaiauaiethueie, ii auaeaeyao iniiaiua ec
ieo.
Eae iieacaea i?aeoeea, aii?inu, oeaeeeii naycaiiua n ai-
ia?aoiui iai?oaeiaaieai, oaeea eae ?acia? neiaa, naienoaa
ieaaathuae a?eoiaoeee e oeaeiai aeaeaiey, ia i?aaenoaaeytho ini-
aaiiuo cao?oaeiaiee. Ae?oaea aniaeou aiia?aoiuo n?aaenoa iaoi-
aeyo naia io?aaeaiea a ?acee/iuo ?aaeecaoeeyo. Iaeioi?ua ec
ieo, a /anoiinoe, ciaeiaia ?anoe?aiea (i?aia?acothuaa io?eoea-
oaeueiue neiaie a io?eoeaoaeueiia oeaeia) e ii?yaeie, a eioi?ii
iiiauathony aaeou a neiaa, i?aaenoaaeytho niaie iai?eyoiinoue,
eioi?ay aeieaeia ouaoaeueii ioneaaeeaaoueny. Aieueoeinoai ec in-
oaeueiuo i?iaeai yoiai oeia ia aucuaaao neieueei-ieaoaeue cia/e-
oaeueiuo cao?oaeiaiee.
*enei ia?aiaiiuo oeia REGISTER, eioi?ia oaeoe/anee iiaeao
auoue iiiauaii a ?aaeno?u, iaiyaony io iaoeiu e iaoeia, oaeaea
eae e iaai? aeiionoeiuo aeey ieo oeiia. Oai ia iaiaa ana eii-
ieeyoi?u ia naieo iaoeiao ?aaioatho iaaeeaaeauei ia?acii; eeo-
iea eee iaaeiionoeiua ?aaeno?iaua iienaiey eaii?e?othony.
Iaeioi?ua o?oaeiinoe aicieeatho oieueei i?e eniieueciaaiee
niiieoaeueiie i?aeoeee i?ia?aiie?iaaiey. Ienaoue i?ia?aiiu,
eioi?ua caaenyo io eaeeo- eeai yoeo naienoa, yaeyaony /?ac-
au/aeii ia?acoiiui.
sscueii ia oeacuaaaony ii?yaeie au/eneaiey a?aoiaioia ooi-
eoeee; iie au/eneythony ni?aaa iaeaai ia PDP-11 e VAX-11 e
neaaa iai?aai ia inoaeueiuo iaoeiao. ii?yaeie, a eioi?ii i?i-
enoiaeyo iiai/iua yooaeou, oaeaea ia niaoeeoeoee?oaony.
Oae eae neiaieueiua eiinoaiou a aeaenoaeoaeueiinoe yaeythony
iauaeoaie oeia INT, aeiioneaaony eniieueciaaiea neiaieueiuo
eiinoaio, ninoiyueo ec ianeieueeeo neiaieia. Iaeiaei, iineieue-
eo ii?yaeie, a eioi?ii neiaieu i?eienuaathony e neiao, iaiyao-
ny io iaoeiu e iaoeia, eiie?aoiay ?aaeecaoeey ieacuaaaony
aanueia iaoeiii-caaeneiie.
I?enaaeaaiea iieae e neiaai e neiaieia e oeaeui inouanoa-
eyaony ni?aai iaeaai ia PDP-11 e VAX-11 e neaaa iai?aai ia
ae?oaeo iaoeiao. yoe ?acee/ey iacaiaoiu aeey eciee?iaaiiuo
i?ia?aii, a eioi?uo ia ?ac?aoaii niaoeaaoue oeiu (i?aia?acoy,
iai?eia?, oeacaoaeue ia INT a oeacaoaeue ia CHAR e caoai i?i-
aa?yy oeacuaaaioth iaiyoue), ii aeieaeiu o/eouaaoueny i?e niaea-
niaaiee n iaeeaaeuaaaiuie ecaia noaiaie iaiyoe.
· 223 –
sscue, i?eiyoue ia ?acee/iuo eiiieeyoi?ao, ioee/aaony
oieueei iacia/eoaeueiuie aeaoaeyie. Naiia caiaoiia ioee/ea nin-
oieo a oii, /oi eniieuecoaiue a ianoiyuaa a?aiy eiiieeyoi? ia
PDP-11 ia eieoeeaeece?oao no?oeoo?u, eioi?ua niaea?aeao iiey
aeoia, e ia aeiioneaao iaeioi?ua iia?aoeee i?enaaeaaiey a ii-
?aaeaeaiiuo eiioaenoao, naycaiiuo n eniieueciaaieai cia/aiey
i?enaaeaaiey.
25. Aiao?iieciu
Oae eae ycue “C” yaeyaony ?acaeaathueiny ycueii, a noa?uo
i?ia?aiiao iiaeii ano?aoeoue iaeioi?ua onoa?aaoea eiino?oeoeee.
Oioy aieueoeinoai aa?nee eiiieeyoi?a iiaeaea?aeeaaao oaeea aiao-
?iieciu, iie a eiioea eiioeia en/acioo, inoaaea ca niaie oieue-
ei i?iaeaiu ia?aiineiinoe.
A ?aiieo aa?neyo “C” aeey i?iaeai i?enaaeaaiey eniieueci-
aaeanue oi?ia =ON, a ia ON=, i?eaiaey e aeaoniuneaiiinoyi, oe-
ie/iui i?eia?ii eioi?uo yaeyaony
X = -1
aaea X oaeoe/anee oiaiueoaaony, iineieueeo iia?aoeee = e – i?e-
iueatho ae?oa e ae?oao, ii /oi aiieia iiaei ?anniao?eaaoueny e
eae i?enaaeaaiea -1 e X.
Neioaenen eieoeeaeecaoi?ia eciaieeny: ?aiueoa ciae ?aaain-
oaa, n eioi?iai ia/eiaaony eieoeeaeecaoi?, ionoonoaiaae, oae
/oi aianoi
INT X = 1;
eniieueciaaeinue
INT X 1;
eciaiaiea auei aianaii ec-ca eieoeeaeecaoeee
INT F (1+2)
eioi?ay aeinoaoi/ii neeueii iaiiieiaao ii?aaeaeaiea ooieoeee,
/oiau niooeoue eiiieeyoi?u.
26. Naiaeea neioaene/aneeo i?aaee
Yoa naiaeea neioaenena ycuea “C” i?aaeiacia/aia nei?aa aeey
iaeaa/aiey iiieiaiey e ia yaeyaony oi/iie oi?ioee?iaeie ycu-
ea.
26.1. Au?aaeaiey Iniiaiuie au?aaeaieyie yaeythony neaaeothuea:
au?aaeaiea:
ia?ae/iia-au?aaeaiea
· au?aaeaiea
& au?aaeaiea
· au?aaeaiea
! Au?aaeaiea
^ au?aaeaiea
++ L-cia/aiea
· L-cia/aiea
L-cia/aiea ++
L-cia/aiea—
· 224 –
SIZEOF au?aaeaiea
(eiy oeia) au?aaeaiea
au?aaeaiea aeia?iay-iia?aoeey au?aaeaiea
au?aaeaiea ? Au?aaeaiea : au?aaeaiea
L-cia/aiea iia?aoeey-i?enaaeaaiey au?aaeaiea
au?aaeaiea , au?aaeaiea
ia?ae/iia au?aaeaiea:
eaeaioeoeeaoi?
eiinoaioa
no?iea
(au?aaeaiea)
ia?ae/iia-au?aaeaiea (nienie au?aaeaiee
iaia)
ia?ae/iia-au?aaeaiea [au?aaeaiea]
L-cia/aiea . Eaeaioeoeeaoi?
ia?ae/iia au?aaeaiea -> eaeaioeoeeaoi?
L-cia/aiea:
eaeaioeoeeaoi?
ia?ae/iia-au?aaeaiea [au?aaeaiea]
L-cia/aiea . Eaeaioeoeeaoi?
ia?ae/iia-au?aaeaiea -> eaeaioeoeeaoi?
· au?aaeaiea
(L-cia/aiea)
Iia?aoeee ia?ae/iuo au?aaeaiee
() [] . ->
eiatho naiue aunieee i?ei?eoao e a?oiie?othony neaaa
iai?aai. Oia?iua iia?aoeee
· & – ! ^ ++ — SIZEOF(Eiy oeia)
eiatho aieaa ieceee i?ei?eoao, /ai iia?aoeee ia?ae/iuo au?aaea-
iee, ii aieaa aunieee, /ai i?ei?eoao ethaie aeia?iie iia?a-
oeee. Yoe iia?aoeee a?oiie?othony ni?aaa iaeaai. Ana aeia?iua
iia?aoeee e oneiaiay iia?aoeey (i?ei. Ia?aaiae.: oneiaiay iia-
?aoeey a?oiie?oaony ni?aaa iaeaai; yoi eciaiaiea aianaii a
ycue a 1978 a.) a?oiie?othony neaaa iai?aai e eo i?ei?eoao
oauaaao a neaaeothuai ii?yaeea:
Aeia?iua iia?aoeee:
* / %
+ –
>> =
== !=
&
^
!
&&
!!
?:
· 225 –
Ana iia?aoeee i?enaaeaaiey eiatho iaeeiaeiaue i?ei?eoao e a?oi-
ie?othony ni?aaa iaeaai.
Iia?aoeee i?enaaeaaiey:
= += -= *= ?= %= >>=
#IF eiinoaioiia-au?aaeaiea
#IFDEF eaeaioeoeeaoi?
#IFNDEF eaeaioeoeeaoi?
#ELSE
#ENDIF
#LINE eiinoaioa eaeaioeoeeaoi?
Iineaaeiea eciaiaiey ycuea “C” (15 iiya?y 1978 a.)
27. I?enaaeaaiea no?oeoo?u
No?oeoo?u iiaoo auoue i?enaiaiu, ia?aaeaiu ooieoeeyi a ea-
/anoaa a?aoiaioia e aica?auaiu ooieoeeyi. Oeiu o/anoaothueo
iia?aiaeia aeieaeiu inoaaaoueny oaie aea naiuie. Ae?oaea i?aaaeiii-
aeiaiua iia?aoi?u, oaeea eae n?aaiaiea ia ?aaainoai, ia auee
?aaeeciaaiu.
A ?aaeecaoeee aica?auaiey no?oeoo? ooieoeeyie ia PDP-11
eiaaony eiaa?iue aeaoaeo: anee ai a?aiy aica?aoa i?ienoiaeeo
i?a?uaaiea e oa aea naiay ooieoeey iaaioa?aaaeueii aucuaaaony
ai a?aiy yoiai i?a?uaaiey, oi cia/aiea aica?auaaiia ec ia?-
aiai auciaa, iiaeao auoue enii?/aii. Yoa o?oaeiinoue iiaeao aic-
ieeiooue oieueei i?e iaee/ee enoeiiiai i?a?uaaiey, eae ec iia-
?aoeeiiiie nenoaiu, oae e ec i?ia?aiiu iieueciaaoaey, i?a?uaa-
iey, eioi?ia nouanoaaiii aeey eniieueciaaiey neaiaeia; iau/iua
?aeo?neaiua auciau niaa?oaiii aaciianiu.
28. Oei ia?a/eneaiey
Aaaaeai iiaue oei aeaiiuo,aiaeiae/iue neaey?iui oeiai ycu-
ea ianeaeue. E niaoeeoeeaoi?o-oeia a aai neioaene/aneii iiena-
iee a ?acaeaea 8.2. I?eeiaeaiey a neaaeoao aeiaaaeoue
niaoeeoeeaoi?-ia?a/eneaiey
n neioaenenii
iaoeeoeeaoi?-ia?a/eneaiey:
ENUM nienie-ia?a/eneaiey
ENUM eaeaioeoeeaoi? nienie-ia?a/eneaiey
————- ——————-
ENUM eaeaioeoeeaoi?
· 230 –
cienie-ia?a/eneaiey:
ia?a/eneyaiia
nienie-ia?a/eneaiey, ia?a/eneyaiia
——————- ————-
ia?a/eneyaiia:
eaeaioeoeeaoi?
eaeaioeoeeaoi? = eiinoaioiia au?aaeaiea
————- ———————
?ieue eaeaioeoeeaoi?a a niaoeeoeeaoi?a-ia?a/eneaiey iie-
iinoueth aiaeiae/ia ?iee y?euea no?oeoo?u a niaoeeoeeaoi-
?a-no?oeoo?u; eaeaioeoeeaoi? iaicia/aao ii?aaeaeaiiia ia?a/en-
eaiea. Iai?eia?, iienaiea
ENUM COLOR (RED, WHITE, BLACK, BLUE );
. . .
ENUM COLOR *CP, COL;
Iauyaeyao eaeaioeoeeaoi? COLOR y?eueii ia?a/eneaiey oeia,
iienuaathuaai ?acee/iua oeaaoa e caoai iauyaeyao CP oeacaoaeai
ia iauaeo yoiai oeia, a COL – iauaeoii yoiai oeia.
Eaeaioeoeeaoi?u a nienea-ia?a/eneaiey iienuaathony eae
eiinoaiou e iiaoo iiyaeoueny oai, aaea o?aaothony (ii eiioaen-
oo) eiinoaiou. Anee ia eniieuecoaony aoi?ay oi?ia ia?a/eneya-
iiai (n ?aaanoaii =), oi aaee/eiu eiinoaio ia/eiathony n 0 e
aic?anoatho ia 1 a niioaaonoaee n i?i/oaieai eo iienaiey nea-
aa ia i?aai. Ia?a/eneyaiia n i?enaiaieai = i?eaeaao niioaaon-
oaothuaio eaeaioeoeeaoi?o oeacaiioth aaee/eio; iineaaeothuea
eaeaioeoeeaoi?u i?iaeieaeatho i?ia?anneth io i?eienaiiie aaee/e-
iu.
Ana y?euee ia?a/eneaiey e eiinoaiou iiaoo auoue ?acee/iu-
ie e iaiioiaeeie ia y?euee e /eaiu no?oeoo? aeaaea i?e oneiaee
eniieueciaaiey iaeiiai e oiai aea iiiaeanoaa eaeaioeoeeaoi?ia.
Iauaeou aeaiiiai oeia ia?a/eneaiey ?anniao?eaathony eae
iauaeou, eiathuea oei, ioee/iue io ethauo oeiia e eiio?iee?oth-
uay i?ia?aiia LINT niiauaao ia ioeaeao ianiioaaonoaey oeiia.
A ?aaeecaoeee ia PDP-11 ni anaie ia?a/eneyaiuie ia?aiaiiuie
iia?e?otho oae, eae anee au iie eiaee oei INT.
29. Oaaeeoea ecia?aaeaiee iaia/aoiuo neiaieia ycuea “C”.
A aeaiiie oaaeeoea i?eaaaeaiu ecia?aaeaiey iaeioi?uo neiai-
eia (oeao?iua neiaee e o.ae.) ycuea “C”, eioi?uo iiaeao ia
ieacaoueny a ciaeiaii iaai?a aeenieay eee ia/aoathuaai ono?ien-
oaa.
· 231 –
! Cia/aiea ! Ecia?aaeaiea ** !
! ! A oaenoa !
! Oeao?iay ioe?uaathuayny ! !
! Neiaea ! ( !
! ! !
! Oeao?iay cae?uaathuayny ! !
! Neiaea ! ) !
! ! !
! Aa?oeeaeueiay ! !
! *a?oa ! ! !
! ! !
! ! !
! Aiinoi?io ! ‘ !
! ! !
! Aieienoay ! !
! *a?oa ! ^ !
! ! !
** I_?_e_i_a_/_a_i_e_a:
Ecia?aaeaiey i?eaaaeaiu aeey iia?aoeeiiie nenoaiu UNIX. I?e
?aaioa eiiieeyoi?a “C” iiae oi?aaeaieai ethaie ae?oaie iia?aoee-
iiiie nenoaiu, iaiaoiaeeii ainiieueciaaoueny niioaaonoaothuei
?oeiaiaenoaii aeey aeaiiie nenoaiu.
Нашли опечатку? Выделите и нажмите CTRL+Enter