[PDF]

! " $#&%' (*),+- (.)/+10341
2 5674 +8 )/+
9;: :
<>=@?BADCFEGIH'?JLKM?BNPORQBHFSUTWVYX@Z\[^]M_3`bac[d]Y]
e Of?hgQiEQhOIjkOIQBEhOl?mVn]Y]M_poFqsr e tvFuH ?BAxwzy|{
}F~€/7‚„ƒ† … ˆ‡ˆ‰~€
ŠŒ‹Ž, † d~ '‘“’•”n– † 7
™— ˜›šœŸžc ¢¡/¡¤£'¡¤¥¦œ¨§©œŸªd«­¬¦®Dž°¯±¥™¡©²$«ž¦®³¬7¡¤¯•´Ÿ®Dµ³¬¦¶€¥™®Yªd¡¤¬¦®Dž›·›¥¦œ¨¬Ž¬¦®Dª¸ /¹º¤¡»«¼µ™šœŸ²„½‰œŸ®Dž™®Dª¾«¼ª€¿U¬¦š€®M«¼¶¬¦š€¡¤¥Àž
œŸªÁ©Â©Â©Ã/Ä
Contents
Contents
3
1
Introduction
%&('*)+,-./
!
1
243)5! ! ! !
1
6789: ! ! !
1<;
6789,=)>?! ! !
1BA
CDE:)+FGHFI)J!
1L0
M4NO)PNQ ! ! !
1<R
ST:)/F&! ! ! !
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
9
$#
(0
(0
(0
(@
$K
$K
$U
2
Foundations
1 V*WFG)X6ZY Y[/
! ! !
1
\H)O]-93F^_/)`F+ !
1
67)F7/3aNb,=)c !
1<;
de9`>,39 3`:)fbF"! ! !
1BA
gh!__PN,9`>)^i ! !
1L0
jk,Fh/3a>lm>`>)F ! !
1<R
gn1E>FX/3aPN,`>)9/)op!
1L@
qr)^>/F ! ! ! ! !
1<K
jkONs9F ! ! ! ! !
1<U
de39>)W9>^F&/3a9/>F !
1$#tCDs9uv`>)Fp ! ! ! ! !
1w2x]19^F^F^Fy ! ! ! !
1 zq{f//,FZ/3^f//,F ! !
1$;tCDE:)F|! ! ! ! !
1A}\))>)F ! ! ! !
1(0zgh"WFI)Zc^>fHFG)3
1$R~ST:)/F&! ! ! ! ! !
1(@~ b/F ! ! ! ! ! !
1$K~2x]H>`FGF ! ! ! ! !
1$Ut679/F ! ! ! !
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
21
!
!
!
!
!
!
!
!
;
;
/A
0
R
@
@
@
@
K
K
U
;#
;#
;;
; 0
b
; @
b
;U
Ab#
A
A
1
1B;
1 A
1<0
de)>F ! ! ! ! ! ! ! ! ! ! """""""""""""""
1 1
VXF^F^`N) fH)o_/3>`3`!P E>)^Fz"""""""""""""
1 1
2x]19^F^F^a)GF ! ! ! ! ! ! """""""""""""""
1 1<;
2 f//,9)9+:]19^F^F^F_ ! ! ! ! """""""""""""""
1 1BA
V&)>)^`XE>)Fh)T)vE ) """""""""""""""
1 1L0
jk,T/ ! ! ! ! ! ! ! """""""""""""""
1 1<R
gh")oE",F^3 ) ! ! ! ! """""""""""""""
1 1L@
]=3:]HFGF^FX/3a`>fb>FGF*! """""""""""""""
1 1<K
k9^_>FG)O) ! ! ! ! """""""""""""""
1 1<U
de)/E)vEF ! ! ! ! ! ! ! """""""""""""""
1 1$#~ST:)/F&! ! ! ! ! ! ! ! ! """""""""""""""
1 1  b/F ! ! ! ! ! ! ! ! ! """""""""""""""
1 1 z2x]H>`FGF ! ! ! ! ! ! ! ! """""""""""""""
1 1$;t679/F ! ! ! ! ! ! ! """""""""""""""
k$/FD ! ! ! ! ! ! ! ! ! ! """""""""""""""
1B;H
k1$PN,`>)F ! ! ! ! ! """""""""""""""
1B;H
gh")oE sm1 ! ! ! ! ! ! """""""""""""""
1B;H<;
\19G)&` `,)h>f//,9) ! ! ! ! """""""""""""""
1B;HBA
ST:)/F&! ! ! ! ! ! ! ! ! """""""""""""""
1B;HL0
 b/F ! ! ! ! ! ! ! ! ! """""""""""""""
1B;H<R
2x]H>`FGF ! ! ! ! ! ! ! ! """""""""""""""
1B;HL@
679/F ! ! ! ! ! ! ! """""""""""""""
6 )^^EFG))>)F ! ! ! ! ! ! ! """""""""""""""
1 A=
\1`>)^
4P /3aP eF^ FG)O))F7! """""""""""""""
1 A=
d )>)^
4PNZFG)O))F.! ! ! ! """""""""""""""
1 A=<;
k1` HFZ/3aF^`>Ey! ! ! ! ! ! """""""""""""""
1 A=BA
d )>)^
'&DFG)O))F ! ! ! """""""""""""""
1 A=L0
d )>)^
43 FG))>)F?! ! ! ! """""""""""""""
1 A=<R
/,8FG))>)F?! ! ! ! ! ! """""""""""""""
1 A=L@
2 ,9 f/`"P )>O)
FG))>)F!! """""""""""""""
1 A=<K
671FG+)
I) )>)^ FI))>)F """""""""""""
1 A=<U
ST:)/F&! ! ! ! ! ! ! ! ! """""""""""""""
1 A=$#t b/F ! ! ! ! ! ! ! ! ! """""""""""""""
1 A=w2x]H>`FGF ! ! ! ! ! ! ! ! """""""""""""""
1 A= ~679/F ! ! ! ! ! ! ! """""""""""""""
b) E)Z,+sE:F ! ! ! ! ! ! """""""""""""""
1<01
gh")oE
F bO)&9339,=s9 ! ! ! """""""""""""""
1<01
]=3:]HFGF^F 9`fb>^F^F 9/3)F """""""""
1<01<;
2x]1 `)h`fb>F^F ! ! ! ! ! """""""""""""""
1<01BA
jk,T/ ! ! ! ! ! ! ! """""""""""""""
1<01L0
b)9.E)71,.sE>hFGHFI)F! ! """""""""""""""
1<01<R
gh d 24242yFI)/393-@0/A ! ! ! ! """""""""""""""
1<01L@
6789,=) 'X )!
9b)9 E)h1,.sE>F*""""""""""""""
Ab;
AA
A R
b
A R
b
A @
0H
0
0;
0/A
0R
0@
R=
R
R;
Rb0
Rb0
Rb@
@#
@#
@
@
@/A
@R
@R
@@
K=
KR
KK
KU
U#
U;
UA
UK
UU
$#;
$#A
$#b0
$#b@
$#K
$#U
$#
(0
$R
1BR
0
1<01<K
ST:)/F&! ! ! ! ! ! ! !
1<01<U
 b/F ! ! ! ! ! ! ! !
1<01$#~2x]H>`FGF ! ! ! ! ! ! !
1<01 679/F ! ! ! ! ! !
V&GHFZ/3E)>F ! ! ! ! ! !
1BRH
V&^_)o1EF ! ! ! ! ! !
1BRH
de9 )N/ ^$1FT! ! ! ! !
1BRH<;
&/3J/``FGF&)+)FJ! !
1BRHBA
V&^HF& )ZFGP 3FG`>s9Q !
1BRHL0
d )>)^(fb>D.`)/> ! !
1BRH<R
M )^>Z)oEFX93PN,9`>)^9/)ot!
1BRHL@
V&^ ) em):Z`>fb>FGp! !
1BRH<K
M )^>XO)>)` ! ! ! !
1BRH<U
SD19/`D^/`$)! !
1BRH$#zV&^HFZP `9/`:)>F ! ! ! !
1BRH ,9 )3F^9/ ^$1F ! ! !
1BRH
k>b3 ^HFZ/3E)>^F*! !
1BRH$;~ST:)/F&! ! ! ! ! ! ! !
1BRHA} b/F ! ! ! ! ! ! ! !
1BRH(0z2x]H>`FGF ! ! ! ! ! ! !
1BRH$Rt679/F ! ! ! ! ! !
3
Functions
;H V*WFG)X6ZY Y PN,9`:) ! ! ! ! !
;H
M /3mFG)`3)F ! !
;H
,`>)a3>W99 )F ! ! !
;H<;
,`>)a`$/F ! ! ! ! !
;HBA
gh")oE fb3-! ! ! ! !
;HL0
,`>)9FZ/3aF^`>Ec! ! !
;H<R
M `3,=/{/ !
;HL@
V&^HF&/FhPN,9`>)^a^,9>)F ;H<K
13,N )c ! ! ! !
;H<U
&F^+s^_PN,`>)9Fh ! !
;H$#~ST:)/F&! ! ! ! ! ! !
;H  b/F ! ! ! ! ! ! !
;H z2x]H>`FGF ! ! ! ! ! !
;H$;t679/F ! ! ! ! !
;H
h`,=F^ ! ! ! ! ! ! ! !
;H 1
Vw'h^ ,= ! ! ! ! !
;H 1
gh!`/EFG)` ! ! ! ! !
;H 1<;
/F^`T/`>)`_! ! ! ! !
;H 1BA
Z`,=FGfb>FG,9FZ)>)z !
;H 1L0
M )fbX>`,=F^y ! ! !
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
#
;
0
@
@
U
U
$;#
$;=
$;
$;b0
$;R
$;U
Ab;
A@
(0@
(0U
$R=
$R
$Rb0
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
"""""""""""""""
169
(@#
(@H
(@;
(@/A
(@/A
(@0
(@K
$K#
$K
$KK
$U#
$U
$U;
$UK
#
#
#;
#A
#R
#b@
R
;H 1<R
\1^)
! ! !
;H 1L@
qr3_b>hFGHFI)F
;H 1<K
ST:)/F&! ! ! !
;H 1<U
 b/F ! ! ! !
;H 1$#~2x]H>`FGF ! ! !
;H 1 679/F ! !
4
! !
!
! !
! !
! !
! !
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
""""""""""""""" #U
""""""""""""""" H$R
"""""""""""""""
""""""""""""""" ;
""""""""""""""" ;
""""""""""""""" K
Compound Types
A=
\)^^,9`:)F XM N/aCD3-ST)_ ! ! ! ! ! """""""""""""""
A=
\)^,`>)X3>W9)9F> ! ! ! ! ! """""""""""""""
A=
\)^,`>)F&/3aF^`E&! ! ! ! ! ! """""""""""""""
A=<;
+sm>X``F^FJ ! ! ! ! ! ! """""""""""""""
A=BA
de9 )N/ )_93/F^F^9>)p ! ! """""""""""""""
A=L0
&F^> e3>W99>3-E>)^F ! ! ! ! """""""""""""""
A=<R
ST:)/F&! ! ! ! ! ! ! ! ! """""""""""""""
A=L@
 b/F ! ! ! ! ! ! ! ! ! """""""""""""""
A=<K
2x]H>`FGF ! ! ! ! ! ! ! ! """""""""""""""
A=<U
679/F ! ! ! ! ! ! ! """""""""""""""
A=
gnETjkON/)FT! ! ! ! ! ! ! ! ! """""""""""""""
A= 1
ZPN>^`!)o1E>F ! ! ! ! ! ! """""""""""""""
A= 1
6h/{s_f/,9"/3a`$ms1
PN>^`c! """""""""""""""
A= 1<;
Z>),= s1
f/,9"/3 ^>),=s >PN>` """"""""""""""
A= 1BA
!,F^> 3>W93-E>O)F
! ! ! """""""""""""""
A= 1L0
67FG) )o1EF ! ! ! ! ! ! ! """""""""""""""
A= 1<R
9)Z:]=/`>)
Fh`FG)) 5 ! ! ! """""""""""""""
A= 1L@
67FG) PN>^`F ! ! ! ! ! ! """""""""""""""
A= 1<K
67FG) )o1EF&/F7>),=)oEF ! ! """""""""""""""
A= 1<U
a)^ ,F^ `FG) ! ! ! ! ! """""""""""""""
A= 1$#t b/F ! ! ! ! ! ! ! ! ! """""""""""""""
A= 1w2x]H>`FGF ! ! ! ! ! ! ! ! """""""""""""""
A= 1 ~679/F ! ! ! ! ! ! ! """""""""""""""
A=B;
6 N/F^FGFT! ! ! ! ! ! ! ! ! ! ! """""""""""""""
A=B;H
24`$9F^,NO)
! ! ! ! ! ! ! """""""""""""""
A=B;H
M4,=s9` /3f/)J ! ! ! ! ! """""""""""""""
A=B;H<;
+sm>&PN,`>)9F ! ! ! ! ! """""""""""""""
A=B;HBA
67FG)^^,9`:)F ! ! ! ! ! ! ! """""""""""""""
A=B;HL0
ST>P /,)h`FG)^,`>)Z ! ! ! ! ! """""""""""""""
A=B;H<R
&F^> e3>W99>3-`fb>^F^F_! ! ! ! """""""""""""""
A=B;HL@
+sm>&m>)^F ! ! ! ! ! """""""""""""""
A=B;H<K
ZFG)>3a)vEF ! ! ! ! ! ! ! """""""""""""""
A=B;H<U
67NF^FZ3>W9)9F ! ! ! ! ! ! """""""""""""""
A=B;H$# &/3c1,+sm>Fh! ! ! ! ! ! """""""""""""""
A=B;HwST:)/F&! ! ! ! ! ! ! ! ! """""""""""""""
231
;
;b0
;R
;R
;b@
;U
/A
/A
/Ab;
/A0
/AbK
/AbK
/AbU
0#
0H
00
0@
0K
0U
R#
R=
R=
RA
RR
RR
RU
@#
@
@;
@/A
@0
@@
@K
@U
KR
@
A=B;H ~ b/F ! !
!
!
!
!
!
!
!
"
"""""""""""""" KR
A=B;H$;~2x]H>`FGF !
!
!
!
!
!
!
!
"
"""""""""""""" Kb@
A=B;HA}679/F ! ! !
!
!
!
!
"
"""""""""""""" KU
A C++ Operators
291
Index
294
K
Chapter 1
Introduction
U
$#
1.1 Why learn programming?
!"$#&% '()*+,)-#./0*)12,)3+465798:
;<=
> <:<)?1"@'A+657/'A+012<./-#B/CD)E5CF&G;<//HI)J
3
#KILM://N:/' O'KLM7/:!-P!57Q.QB657RL=<:6ST/!01"'I
#USWV$% F&XNY9657B1"!Z1[+012=-#\5CF&]N&9657^/:!1['I
_`!a8M57<L@bcVd./-RefLYL=:g0h=10012<.ji/k&ldmCn/o
p 5&10.A.Q/!01qr,sgLtU1[M.Iuv5C+jw/']LM7<:ELM://N:/' 1[./-E)xuv5&Vy1[z10.1['E{
L=:g2MST:|Vh}EM~V ,9FG /']LM7<:?LM:</N
:/'E./-?;!CE+€.Q@ 'Z)
657<'
9>|E9
9 PN 8uIs )F^
39$1F ).F^,)o19`$ `>)/9F.-F^>`>)
`$/3 /'KLMC<:^.<‚Q10"€. d )F&FG)>3 )>^+)X9`>,39„ƒ :/) 4… s$/< r _Ru`<:L=1"M g79>F^ ^ )^9 9/F_P !LYLtZ12,+012}LM:</N:/'j. X/F8)^ O) 9fb sE 'Z)^)^ s
`>G)/_E9X
†e_) sE(fbT`$/F^F O)`>F^P)h`GE)C‡ )+sm ,F^>3s1_)>7E> †ePNZ:]8 =.F/F7>>F^))fbg ‡ gh 'KLMC<:W.<‚Q1[[~. F^`>))n/FG!FI)k)^F bR
ˆ pЉ|‹ MŒ F c
ŽR]"4g7F^
)
9/F P LM:</N:/'^'j1"7NU7N*NY<. n/, F ,F^3|) FG)^^,9`:) +/ `89,=)>$ ZF^ "N9,9/ Vh `$/'Z)X)D/F )^ O) 'X F^,=s FG 1,)_sE ,F^3as1
)>^F Zs
b,=FGP V `>8 ,=):
/ F FI)_P FG)^,`>)^F_)^ sE /,=)_)^`$/ `F^F^>3 s1 `89,=)>$ g7+`>8 ,=):T)F^P4FDFG),=9d
3  / )^9 )` `>FDP ) /-
de )^9F F^F^ k-/ PN.)
`>8 ,=): F. b_-` 1sE ` E_PN FG8'X
`$/)D` >fb> '&)afb>^a)>3 F 1F 8>F^F^fb F^,)F&`$/-sE s)/9>3 )=,
.FG)> es eFG)> FG)G,`>){
FG)DE9"F^89_,F^ F uI,FG)X b!)>,F^ ` 1sE HFhV F/F&>>F^) )fb rPN":]=/89 E3F O99`$)a/FT/FT)1FDPN"FT'7 m.g7 P /`:)")9)Tb,
h$/3 )Fn>)Fk,F4sE:fbh)9)4b,8E)>)N sE>")!)^9Z`$)>^+PmE97'X
/FG 3a)^ '&^)D/F
gh>^TX_/ ^$/F^F PN 'Z) 9^/F \1Z89(b> )n 8PN7 ) FG
s /`Z`,=F^!) , ) =s9,)Z,)_O) )>"FZ 3>E:Z/F^asE3 )Z)^ O)
'7Z9N ) :]19N/8:]1)$ g79&,9F^)nFn)^ O)k('h/39$1F b,`/9)nsEX F^>,9Fn> >)k/Z"F^:,FnFG`)FG) b'X ),)n)n$FG) F^ s /F^`Z/9&F HFx2xfb_8>F^F
F^>^,FX`)^:]H)F m'7 `$/ `>93 )$^ / 1sE`/,F^.)X`$ sOsE,=)
.)hP PN, /3aF)^F^P /`>)^{
de )^98)o'7)>)^ `>),=^ x`>8 ,=):F 9fb8>fb,=) 3 )8'h F^`>9`>_/3 >9 3|g sE
_``>:) k'7_'X ,93>G )F 'X )|5:]8 P
_)_O)`FM
‘4,9^s Os 3M
’ ) ]HE`:)Z_O) ) sEX>)38WFI)7_`9>`>)'X )
`89,=)>/F “ 39>
3 _/ _O)_)`>N/F!FG)^ ,F^ m>/3|m`7y 39/ s /F^F
k,=) uv5C+ )>'&)^ 3O'& 9/FD`9/3{ k>PN.`89,)^>F&'7>^ f//NOs )D'h/FDP)
9 v
E `FGF^ )D'Z)n39('X /`>)^, 11,.sE>F /3+)^XE>PN `/`,N)^Fr'&) ) s 9/3r
g79F!9E3 ) FG- ,` ?'Z)_1PNF PN 9:'t)^F s9,=) ) 1`>F^F P
)1[7N )^9>F^X)F>ng7Fk`F^F7P)
,9 F )..Ofb:Z_8`>9`:>)T:]=/89F h`,)::]8 F 1 3>7)+F^T`:^)/
)^)>^9F H7).39F^`(fb>Z)^ O)7F^XFG)O))
F P /F^yg7a`89,=)>+9/F )^^3,9FG /``>>)^35)F `F^F s1 ) H9 Ofb:8)
,=)!'7 mT b,? -) 8_O)_)`>N/M
’BF7)> /3-)3 mb, FG) W93 > >)G)>FZ/3-/ 13FZP FG)^/ FGH.sEF 1s9,)ZFG)h b> ,9.sE>^Fh>h)9/ )^{
gh>^ F
a)9`a)^ O)_9`|,FG)^)F )^9-FG),9)
h/3y)FF8)-F^$O` PN
) ‰ <:g.Q/=XLM:!1"'I!. Tde|$RAA 9)
=^` a/3 _)_O)`N a^ >F^
FG)s9F^3
)"PNO'&+`>N/-
:<?LM:!1['A
p 57|=h'A;/<:g. S|657GSQ:!' n
Mersenne’s Conjecture.
=h'A
;</:g.aSQ:
- ;!C SQ2:z−
I1657<:z=C'j{
;/<:
 n = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127, 257
n < 257
>F^>9
`^>FGE33 '&) _/ P7)$/3a_)^9>_)`/F"O) )9) ) F^
b,_`$/fb>^P8)n'X7b,$/3)F Fk`>buv`:),=XsE`$Z'X39>HO'&{ Z_)
n=7
/3a?$RAA H)"`>buv`:),="'h/FZ/^$/3=fb>W93,)
n = 19
d ) ) +)9/ 1,3^3 b$F ,)^n)8:]1).:]Hm9>) >FG9Q’BF.FG)!`,3
sE fb>W93{zde* :)^)>_) k>,X9,=s9F^3 (@@ &qr>99^3 2 ,9> (fb3 )^ O)
F -_1,.sE>$ k,=) $Kb@R k/)> ,93=>3|b$F N): 231 − 1 = 2147483647
>FG9 EFG),9,F^ a`>fb3 $f1 s9(' 243,93 q{,`$/F"(fb3 )9) 267 − 1 =
F Xk1,+sm>
† q{,9`/FxF^O'7>3 Fx /F^F^+PN4N , 147573952589676412927
sE>^Fx/F^Z'X. fb>)3.) p u`<:W S ˆ 1 , g ‡:xq{,`$/<F ’ F 1P=3F ) '7 ")
'h b,'7,38 ]HE`:) )k3F :]H9 s ) T9^ZP `>) P 67
† )&FG)n3`:)k'h
2 −1
P (fH )^ O)X+1,+sm>&FZ)&g ‡ Hs9,=)&)&,F^FX+`>fb:D3`>)&,)hfb)3
s1-qr,`$/FD )^9!F/!b$O$Tgh P /`:)FO)-P 67
>_/3-, HO'& PN /)>
2 −1
0.bF
de $U#; H ZFG 67"'h/FZF^`9>39,>3 )^8fb +`>)^,^") )^9!VX>`/ a)^9 _)`$/{\1`>)o ='XF^T))T'hF LCTa) 9`>)F^)
Pxqr Z,+sE:<F ’n6 T'7)h)
) s9N/` 1smb
3 E/3 'X),=)XF^$1
8F^ '7
3 m WFG)D'&^) 3O'&?8`$`,N))
s)/ 67
s_>E$O)3a+,)9`)+'X)
)o'7=k%&TW99/9/3
)!,9.sE>
2 −1
147573952589676412927
)hs /` 1sEb^3r ghZ'Z)h3O'&/)>†e ,` ^Z)>>FG)+‡ `$/`>,9)+PN
)T9^13,`>)&Pr)o'7 1,.sE>F>
761838257287 x 193707721
-----------------------761838257287
6856544315583
2285514771861
5332867801009
5332867801009
5332867801009
1523676514574
761838257287
--------------------147573952589676412927
6 X9/38Ofb>3
)9) 67
7
/_ 1")hF^,) P{qr,`$/F
2 − 1 = 761838257287 193707721
sE>f/s9")_>fb:^1sE3= 67
FX) "1,+sm>T%& >`fb3 FG)93(fO)F
2 −1
PNh)F7/``89F^)k/3NO)>Z/3)^)>38)9)7"9/3
'7 b3
W993 )F^ P /`>)^F
>fb>G-\1,39$ PNh)"NFG)7)="bF
g 139 b, `/-FG)G)T `89,=)>&/:s9+/J-b,=D`89,=)>P
† +E9,NZ
F
‡
9)o1m"
Maple
ifactor(2^67-1);
/3'&)_F^Fh)9/a.F^`>93-:)Z) ,=)^9,)
(761838257287)(193707721)
g FG,9_O Z1,3=3?b$OF / rs/)&_)_)`N/a>39>3 )=.b$FT)
`,= 'X) aFG,9 ) )9). ,` F^F sN/) E9?† '7__) )/1 sE,=) b,h‡
`,3 >) F^F )9/ F^`3 )139 ,F^ `89,=)> /3 ) )!/- g79F
F^>F83FG),=^s9 O) WFG)FG) /3y)^9 1 sm,) ) `>,F )
PDF8PNa67
3>fb)3 )-)9^s b,|_?>fb5PN> F^^^ PN+-E‘4, FG9,3M’ )<“4O)> x)
FG)G 9/F7)="8E^)/) F^F^FhFG)^
q{F^F^+hF )9)46 ’ Fx`$/`,NO)Fr'7:7:]H)^^!398`,) fb.) )1F
Tool skills.
"9/3A† E> HE` H/3s s98fb>^ 13 >)/{O)>)`g‡:xTfb
) )F Vh
9fb3
† ) `89,=)>D93 8`89,=)>X/>s./ `/3
‡ r6 ’BF&`$/`,NO)F
Maple
$/FI ^,)^? F^,=_)9) 67_'7,3 PNhF^^G PN /b9
,F^ )F^
9:'
)Fn.)">13,`ZF^Z,93=>3 b$ 38`$/`>,9){ ZF^PN, >'y)Fn$/38)"9:'
EF^FGs9)F 93+`9/F> CT+)79 9/
3 )F +" uv. b,.) 39Tn)9/+b, `,3
3 sEPN^
“ )^9")>X9/3-)&/FG SQ://!. b,-) 38 P b,a'h)h) b> ,=-'X )
)!3>fb>9)F> 9)^>fb>&b, 3 99('h/39HFhb,- ,FG)X/` 1,^!/3-_/)/)&$/FI)
F^Ds /F^` H('X>39TP `>8 ,=):Fh/3a9`$O)/F
q{F^F^ )v'7+F7)9) ){F HF7/D'7,3 )h9fb"m3 6 D) P `>)
Problem skills.
D
6
/
FG 'h/FD813-_)_O)`N_'& H>' 8)XP )G- `,3 ,F^!)
267 − 1
Ffb!`/`,N)^Fxg79FZF7)T$/F^ 'X
G9 +9>33a)=Tb$F>
2 fb>?O'h3 1F E`89,=)>FD93 9`)/FD )T>fb:^1)= /`>)^
F_$/FGsE`$,9FG )F
F
F^_/X,+sE:
sy)1397
’ F
FI)/393F k,=)P /`:)
267 − 1
N^ 1,.sE>]
F † 1000 F!`>9FG3>3 N^+)39$C
“x `>,9 P b$F x)!)TsE 2000 ‡
2
2
FZFG)r.fb>^a3 `,)h9^s PN&'X`a8 `)DF^,=)FZ HO'&{7gh"s9>
9 v
E $;
P4P /`>)9 1,.sE>F&FX).FG)X)&s9 PNT'&9` FG)Xm9 +,9FI)
/`>)^, E_)9) `)8F^,=) '& >fb: sE
PN,93{ g79
$/FG5F )9)+_/
`>^)FGHFI)Fk)9) D,F^W† ) P{F^`>,^D):>) s / H+‡ X9,= s /F^3_)
/`>)^`$/{8EFGF^s9)o P P /`>)^ NO!,9.sE>^F g7>PN )"'7^FG)XF^`>98PNZ)
>)o'7 b3+'73.'7,93+sE )^ O)4)^9 Is /3 ,=HF 3F^`(fb> WFG)4O'5)^"P /`:)4N ,9.sE>^F
`)b
gh>^ O _/)>Xs9Fh)9) .FDP TPp8F^,=) /FX)>a'7>^ `89,=)>"39$1F 679_s /` ?) >F^ '78FI) `$/) `9`>)> )8 ]HE)F
PND'X`-) 1,.sE> n
FD 1,+sm>$&? 39M
’ )D>fb H('['X>)^9:D)>
n
2 −1
T=W9) 8_/F^,` >FG9 F deP{b,9N/_)._ bT `)^s9,=)_> =b,
F^,3+9) s ,=+XP /FI)>4`89,=)> '&) ) N)>FG)xfb>F^ P
bs9,) FI),3._O){ 2xfb
Maple
).`$/F^+P4s9>FXPNT'X` `>8 ,=):FD`$/ $/ -`)Gs9,=) ) †e"/`>),9/W9h
3 ‡
)+F^,=)
mb,?)o19`/->3?)9fb8_3> ,3>FG)/399
Pn)^9.s9p 3>
) 19(' 57u )-,F^8)`89,=)>$deP7b, 'h/) )-sE` / > +FG`)FG) b, +,FG) ` 1, /3 _/)/ _PN,3 H('X>39 sE,=)T) s9>FXb,?'X sE
3$/9 '&){ g79F P /`>)7'h/F )^,T1,3=3
b$Fh/ =93 )7F FG)^ )G,,  `89,=)>F 9fb
)Zb:)&3) F^fb )^>FG)^+s9F s_)F^fb>F
q{F^F^.)= F 9 )^ O) 6 33.)xfbk)^DF^ ('h/39HF /s9> Programming Skills.
FGE>`W9` HO'&3.`$/ sE+)^,^9>3?)
s9> FGE>`W9` `89,=)>DF g79)T'h$ ).FG))^+P4)+^) ``>!>FG9+FX9/F /3=f//`3 ,) P $.d )T),=3 ,=)
/3
:F^
’BF"FG)T3 9)
)9) >FG9 9/3?_/3 Wfb+FG) b>F n = 67
n = 257
$35)?
1,.sE><F “Z5)a)>9/
3 >FG9-9/3 GPN^)^) ?)a ]HE)F
/3
n = 61, 89
107
VXF PX\1>).sE> ##K n'7 HO'JAbR >F^>F 4)^9
N^FG) PZ'X`59/F /
:]1E)"P
— k,=)!3M
’ ) sE>fb )9)T)F".'h/F PN,93?'&) l e)^9 n = 43, 112, 609
F^Pr/F
M ^s F 1``>,^ )"39/PNTP /:&& F^`)FG)Z^"P)>a)Z/FG_)
F^fb >fb 'X ) `>8 ,=): /3 FI)/393 F^P)o'h8)!9/3{_de 3>!)^-)^)` ) b,-3 .<‚Q1[[~. PN&)",=) `$/`>,9)F /3 LM:<&;! <' .<‚Q1[[~. )^8,93>^FG)/3-/3
:]1)^/`>)D)^9.FGE`>)^F Px) s9J)9)T`$/ -` /rsE F^fb3 s1 8`>8 ,=):$ k,=)
)"
3 =b,-3 LM:<N:/'j'^1[7N ./‚Q10"€. ) /`>),9/3 )
g ``,3+)F F^`:) >) ,9F sE+9FI) !PN"_/
The art of computer programming.
E9†e`,938) /,=)FTPk)FTsE1 Y‡ E)+`F^F P4'& )9^/FT9/F"FG
fb>^ 9 e,)^)ON/ /FGm`>)F./F"'7e8? fb8>)3 )v'7P7)^9> sEPN^ .PN,9 /3
F)^F^P /`>)^{ ?!`,3/33a_)_O)`$/sE$,)o /3a+sE1FI)$kde9 'h &/)> >fb>G /F^FG9)D/> PNF&)&$/FG)Z.)^)Xs )Z b /-^)^FG)$
gh8 /3=fb1`) P )F fH:' /F ST9/3 2h
D,=){a%&8F!)
/,=) Ph1,)/b/3 F^ FG>F PHF^>fb.sE HF >))^3 p 57R:gf S Ž 'KLMC<:
_:</N:/'^'j1"7N \)^)D'X )+j4,kd $URK )=7P )hF^>fb fb,F 9,=s F^3
www.mersenne.org
A
s1!O'!xSX/P)F PHjn,94d j|``,NO)kF^9`> ##b0 /3 )k9N93 ^$/FGk39) PHj4,
j F #=(0^† )&FG9,3 sE /333a)9) X1,=)-'h/F7sE- $U;K /3a-Fh'7>s /
http:
48) /FG) 89` )
)^F
//www-cs-faculty.stanford.edu/~knuth/taocp.html
)TEF^F^s9 )9)hj4,FkjTdn/3jTdId '&m)hsE 'Z)^)^a/H! ‡:
qr:) X1,=)-9fbT) W99/{F>^K
†
1,) Pc) sm+P jn,9Xd ‡ p 57LM:<
/<.<.K SfLM:<qL7:!1[7NPLM:</N:/'j. ST:]^)1"N1[2+ /']LM7<:P10.X!.qL=<1q+"~V
+60:/J<01[F&<-`WMZV ;<C.Q^1[W ;< /'j1q+[ZV )A.Q<1q<M01 ,+[ZVI:<<{
u:/)1"7N-;<7j+~.QH;<7.T„1[? ;<@ J!.<657<012,sgL7<:!12< '^ !5 Z10‚
'KL=./1"7NBL=Q!0:!V :B'jC./12T
&
wX v
(0
1.2 How to run a program
# _`:!1[.x657<V <C.<A.1['KLtZV <L=/) 657/1[: /Vh!. )
./2:<)Guv57<|u`W.qL7‚dc3657/'(1[ M:/<!5 ƒ \<F&<:
)1 )3./*//)1"I'A+‚T1[7N3657.T\1q)1q6.Rh)J<:g.<2)G657/1[:
uU7NtNYQ
‰ :g‚ p u1[=- p 57K# =Q/<M6. X;!:/QY) i/kmCndl!o
p 5&10..Q/!01q ,sgLtU1[M.9uv5C+10:<,+[ZVB'I,M. [u:!10cLM:</N
:/' g- )]57u
V$x<Y;gDz657j'KLMC<:3j:!h 1[2 :z65&1[./-uR)J!.Q<:!1 ;<B657K1"7N:<)1q<M6.
1"=F&~Fd)1[ 6579LM:<Q/!.<. \657 3) - 657 `89: -657 `89,=)> 106.Q! S/-v)
657 E>O)"FIHFG)>  Ž ']LM7<:!-v/']LM10D<:B)E<L7<:/+01[7N3./Vd./<'(NY!657<:
ST:!' 657 9N)^PN uv5&12!5Vh:<Ku:!1001[7NKLM:</N:'E.T
1.2.1 Editor
?^)"TtF4)kFG 3lm>^)nPt'Z)9 T>)^)^>$4CD9&`8EF^F4T):]H) )9)nF †eEPN, J
E
‡h/PN,9rF^ ,`.P4`9`>)>F> ZF^,9/ 9)>. `>>^)/ `>fb)F
('F^,` 8D)^:]H)nF FG)^,`>)^,^31/3+)h9,=^EF^7P9)h) ]H)nFx) )G/FGE^)4PN_O){
O)Z9/F sE>aF/3 F^+P &9Fk)^+sE)^>)G)>F7/3
9^/Fk,=)7'X
'&)^ / )^9:&Fn/)>k/FGE>`>)k)9)49/F4)"sEh) b )!/``,) xV/z Fn) sE
I$3 8s- `>8 ,=): / )9)&)X+,FG)XsE f//NOs )8)^9!`89,)^>X->`>)^^9`
PN-_de )8PN,=),= '78) sm8s9+)a/ 39`>)).) ) )8`89,=)> s9,=) O'h3 1F )Z` 'h Fn) ,F^X b>sEb3
/3F^89 )oE&)k{xVX )1[: F
/ `$)_/ )9)Z/('XF b,
) 3FI $ 13P 1/3a`:)^`$/8FG)^TF^,` )o1E>3 e ) ]H)$ g7Z,F^ZP 3)^FnF4) FG)^^`>)3 )" Pm`>,^F^x) FG
FG)=:]=FG)"^_/)` :]=`:9)^F :fb>)^)^>Fn&`>8EF^3 ,9FG!3)^FnF^,`_/z
F ƒ :) 1.2.2 Compiler
a 1a9^/ $f//s9 ) ) `89,)^> >`>)^`+PN F",F^,9/ 9)!,r
g 9 'J!5&1[]U7N*NY `89,=)> `/,3>FG)93 3`>)^F fb>G
)fb&/31,)^
7
3lm:)ZPJ9),=/EN9,9/>F
? )+)^9T/F a_/`DN/,9/TFZ+fHNs9T)>9)^fb =F^`T)9)7'7,3
,-) s9^$ ) 9^/ ) -1,.sE>
PT9^)fb FG)^,`>)^F8)9))
`89,=)> `/|,3>FG)93{?ghF F b)9 b,+P3 ) `(fb>+PN 3> s
).9:Z'&9` ,F^`>F7) (fb 3>h) >)Z)^ b,=Z9N`
(fb> _` N9,9/>FTf/^ `F^3>s9asE>)o'7> 39 lm>>)"`89,)^>F+g7 O)
F x 3> )^ ,F^
/i'& )^) PN+FGE`>W9``89,)^> V a3lm>^).` 9,=)> m W9^FG) FX)
)G/F^N)^!) 9^/ P )._/` N/,9/ P4V ))
$R
// Program: power8.C
// Raise a number to the power eight.
MZ ÿÿ@
U‰å]é×È
U‰åƒì ƒäð¸
‰Eô‹Eôè'Ë è‚×ÇD
0C Ç $ÀeC è.ë
Eü‰D$ Ç $ eC èKàD$ 0
Ç $ÀeC è ë
Eø‰D$ Ç $ eC è$à ÇD$ <0
Ç $ÀeC èàê ‰Â‹Eü‰D$ ‰ $è
ÇD$ H0C
‰ $è¿ê ‰Â‹Eø‰D$ ‰ $èn
ÇD$ N0C
‰ $è ê ‰Â‹EøEü‰D$ ‰ $èJ
ÇD$ S0C
‰ $èzê ÇD$ óB ‰ $èZúà U‰åƒì } ÿÿ
u ƒ} u Ç $ `C èÑ
} ÿÿ u ƒ}
u Ç $ `C èF
ÉÃU‰åƒì ÇD$ ÿÿ Ç $
è¨ÿÿÿÉÃU‰åƒì ÇD$ ÿÿ Ç $
ÿÿÉÃ
U‰åSƒì ‹] ‹M Ç
˚JC ‹@ôŠ p9C ˆ h
‹ R S RèÖ Æƒ
ƒÄ ‹]ü‰ì]à ´&
¼'
U‰åSƒì ‹] ‹M Ç
˚JC ‹ @ôŠ p9C ˆ h
‹ P S RèÏÕ Æƒ
ƒÄ ‹]ü‰ì]à ´&
¼'
U‰åƒì ‹U Ç ˚JC
RèûY ƒÄ ‰ì]à t& U‰åƒì ‹U Ç ˚JC RèÛY
ƒÄ ‰ì]à t& U‰åSƒì ‹] Ç
˚JC SèºY ƒÄ ‰] ‹]ü‰ì]éyX
´&
U‰å‹E ƒÀ ]à t& U‰åWVSƒì<ŠM ˆMÇÇEàp @
ÇEäP C Eô‰EèÇEì @ ‰eð Uȃì RèWÉ
ƒÄ }Ç • âÿ
‰UÀÿMÀ eÀ
}Ç „
#include <iostream>
int main()
{
// input
std::cout << "Compute a^8 for a =? ";
int a;
std::cin >> a;
// computation
int b = a * a;
b = b * b;
// Output b * b, i.e., a^8
std::cout << a << "^8 = "
<< b * b << "\n";
return 0;
Compiler
}
Sourcecode
Figure 1:
Executable
/']LM10D<:30:/M./D+!.K657z.Qh:<//Q)JB1[MA,s$//72Y;gD\LM:</N
:/'A
_/` /, P &kghF+9^1`FGF 7`$/>3 L=:g01[7N 7`$ysmfb>^ `>,9.sE>^F^ P&)
_/`_N/,9/F+PXV 93 tFG,s9FG)/)/ 3l >)$5VXF^ nEG) `/ sE
3"'X )a.3>)/!
3 19('X3"P )^9TE`>,9N)^F P ) fb fb3a`89,=)>F> k,=)Z)^9F
)o1EZP H('X>397F4) >/ '7^)^'X ) /` 1, /Fn)4F4)^3 )"Zfb>^ FGE>`W9`
`89,=)>$ VXF F^5/F )F `>8 ,=): F >9N/`>3 s /)>. 4_/uI! O^)F PhF^,` `89,=)> eFGE`>W9` 1O'&3DsE`D'7^)>F^F&93 9$fb ) sm :s , )7P FG`>)`{
g a3,`8)F",93FGs9 )9)"P `89,=)>F!/3 /F /3 )-/O'
,F) 'Z) 9^/F8FGF_)fb N/,9/ `†e :fbD ‡+ N9,9/>F
9fbXsE_3>fbm3{ng7F^T^DFG)/393 >3N/,9/Fn)^ O) PNQ 13_PE`8F^
sE>)o'7>
9)^,/ /, F /3_/`hN/,9/xde3
3 )^9&,9FGXPm)&'73 G`8 F^ F{uv,FG) W >3 sE`/,F^Z)>^&^7)o'7"` `>)Tb/F CT )Zh 9
3 '7 '7,3 b
).'& )D9^/F +/, X)9)7FZ/F7`F^T)+ O),=/EN/,9/T/F7EF^FGs94CD)
)>"9/3 E'7+9$fb.) _ b )+`>8 ,=):FT,93>FI)/3?) /8/, ./F
'7[ “)F )F _F7s1f1,F^8+,` $F^>hPE)D/ N/,9/XF7`F^X)+_/`99
N/,9/
O)n3F ) $/ I)T_ b )7`89,=)>Fx,3>FG)93.) /ZN/,9/ de8)&>9
3 1/+/~9/Fn) sE&)^/F^N)>3 )!_/`7N/,9/xg7&1`>F^FkPm)^9F
)^9FGN)FX`$/3 /']LM10U+012 ZO' b,-'X{s s9/F I> Fh) sE>W)DP
)F '&9X9^/!/, X``>) -de^39:h)^ 3.)T)G/F^N)^_d4FI)m9fbD)
H(' /9)F^T`89,=)> eFGE`>W9`X3>)/F 13M ’ )7do Z)$ deP{b, '7,3_9$fbX)^.)G/F^N)^
)Z/~b,=FGP g79
b> F ‘4,h) F^,=EF^38)^")^9FGN)h)4b,^F^P 4deFG)$3 >)Z /c3+)hPNZb,{k\1,9`- /QF7^PN>^>3a) F& /']LM10D<: “9 )h)G/F^N)^F7
fb- /.N/,9/ 9) .Qh:<//Q)J r)_ / _/`99
N/,9/ ) ,sJ/<C2Y;g 7\1 ,=
PND/,FG)^){
de FG,9_O^ g7 s9 sm>W)K
P † 9 e>fbU ‡./9 N9,9/>F8F8)9)8)^9:
7
8( %9#"5
/7(J
.+(*0,2
!
(7
9"K.*L1.*H7
($
#"
%$&'()*'(
%:$&'(8;<>=?"@.6#
M( 9-BI.*
+( #, -.*
A$&
6N7O"K(P A
0/
1*
%*CB>#EDF2./
% 9 H7
(:
2
$3$&
4
%*.BGH.I2/@7
#"5
% %(
Q :*
2RS
46 %(
9*
"K*TU 2/
(
J
&
wX v
(@
s9FG)^/`>).Pi)`$O Os )>F"PhFGE`>W9``89,)^>F Mx/F"'&)G) -9 e>fb
N/,9/D`$ sED,/ 139F7Pr`89,=)>F H/FZ9+/Fh `89: PNZ)^9TN9,9/&F
fNs9D)^9T ^)`,N7`89,=)>$
1.2.3 Computer
ed Pkb, ^ ) )>^FG)3??'&^)_`89>^F E)"F")"`F^F^^?)^a,93>^FG)/3 ?39 )/kO'Qa`89,)^>!'7 1F k,=) )>
F^ s F^` ` F!sE3 )3F^ P
FG)k`89,)^>F )9) :< 8E^)) ) ,3>FG)93{4g79>F^X`9F4PN})^9 F& B<C{
'A= :<!5&1[/!0h:< /3 )> 8E^)/) F^` /FG) / N9,9/>F
T)/3_) )^9Tfb Z,_/ `)`:),=
VX!`89,=)> '&)!fb Z,_/ O`9 )`>),=n9/Fx :/)J' J/!.<.9'I/'I:!V † ZV .F^89 _/ ^J
‡ /3 //M0:/+fLM:<
/<.<./1[7N„h=10 †o67M .F^89 1`>F^F^, ‡ g79h_/.G FG)>F4)7/ ) sE7, s9,=) F^T39)X)9) )h/ 1,^F
/FD=9,=) E/3 39) )9)D)^9 / 13,`F /FD,=)^9,=)$ g79 `F^FG"FX) Is Pk) `89,)^> T)":]=`>,)^F!).9^/ {$/)9)") `$^F!,=) ) F^ ,`8P
FG)^^,9`:)F 9^F^`> sE3s
)^9T/c_/`99D/, ‘4,_`$/) 8PE)D`89,=)><’BFk_^ /F7!9 ^O' P FG'&)`F Main memory.
$/`5Ph) sE )^9: +l SD,=-9^/ :]H`,=)4FG'X)^` F+^ 9E3{
V )_/5) n)a^ `)) )a`,=^)EF^)^F P /ZFG'X )`9>F  3>W99>F )
LM:</N
:/' .<2+ g79T/JFG)O)"`>8 >)839:)>F '& O)Z9E>9Fh:]H) 6 9`>> ),9/ '7
/F^ `F^3>+,F^>+=9,=)+/3 / ,=)^9,)+F. G).Ph)/ FI)) >fb ), )8`^>FGE3 GFG'X )`9>F -)TsE )8,F^>! ’ F s9/
)3
E>
\1`h13>+`89,=)>F47`$O Os hP 9 9DFG>fb>/9FG'&)`
F †e; F^$Y
‡x)n)^97F
) `F^>`,=)fb FG'&)`FT./`>`3 ,=E3 )^ 'I<'A:!V /<[~. g7 EF^)9F
PD/hFI'X)`F |)`>73>W99
) M<M P&)`>0 “75 s9FG)^/`>)+)>F 4)
FG'&)`F `$/>3 ;!106. $/` P )^9>i`$ s9 P FG)a8P )8,+sE:F
de
{0, 1}
)FhF^F^ 9b,-`$/-)>^:)&)!`>))XPx+^_`> FX+s99G_1,+sm>Z'&)
PN
:]=/89 =; .39)F ?!/F^ F_)9)h'7"9fb s9)h_/`99 HX 32 { ;!10./Vd./<' 32
2n` ^+`mF , 1, 83)W938s1_ )F Y)Y):<!./. ‘n,_`$
) Pr)^9T393=>F^F
F^89/Fh)^9TEF^ )
P ) ^`>{) FG)7PxE^`>F
g +1 _,=s9)7f//,F =h)
9 s9)^F7'&)
FGE`>W9`"G8` 1) `E9/F7).sE
J/!.<.Q,) )=, )F&393=>F^Fngh _Px sE)ZQ'&)a; W9>F7)9)Zb,`$/)>m)
(fbT)^ ^8`{1,.sE>"(@1
gh )^> :/)J' J/!.<. ^PN>F )a 9HFG`$/ E>^)o?P )8`89,=)>! ’ F"G ))) ) bF8) ``F^F
?`>\
† ) GOfb
) )F s )F +‡+F )-F/ PN
/h`/F “X
^)`,N m )"3F 3>E3 ) 393=>F^F"P4).`e" b,?) )>FTP
)Z^sE)n )4sE`F4`n)^ O)n93~/``>F^F `$9)4sEZ) bPN /)>3r
d ) Fk9) 9>`F^FO^) 3F^`,F^F )^9Z HF^`$/ /Fks1 'X`/3 /``>F^F7Fk/ >t
3 “)
8EG)/)kE)7>^!F )9)h/3J/``FGF&P>F&,FZP^J) 1 OsE,=)h'&>T) FG)^
$K
.3 O) )ca^39:Z) /``>F^F&)h `)b
‘4,-`$/a) P )!`>8 ,=):!’BF71`>F^F^T/F&+sE$] )9)&FXs9 )8b/3/3
Processor.
) :]H`,=)8) _` +N/,9/ 9FI)^,`>)F P7 / 3>g789^1`FGF^
9/F+F^_^ `>F.P&)^F ('Xk`/3 FG)>F /3|)+`$|)^/F^PN:839)-P )
`89,=)>! ’ FZ_ >^)8)^Fh>FG)>^F 93af1` fb>F1hg7"FG)>&`)>)FDO /F^
^)"Pk) /pFG))/ FG) 8E^)/) 9) 1`>F^F^!`$/ E>^PN _W=]=3 F^:) P
F^89 E:)
F †e bn/33Z F^,=s)^/`>)^ZFG)> `)>)F ‡ 3`>)^ `^FIE399h)
)&_` N9b,97FG)G,`>)Fxg7F4Fn'&9:h)^9ZPN,9`:)9/)o P )Z'X `FkPQ)D3{n2xfb
fb>^`89`$)38/3
,F^>PN,9m/Fk`$
sEX9,=) ):)>
P +FG89DF^>)ZP _/`DN/,9/TFG)^,`>)^F
VcF^_FG)^,`>)^ /`>)F+ b_ _)_)^`$/ PN,`>)
fb )_`,=^) FG)O) f/35FG)^^,9`:)|>9:)F >' /35'7 3>W935:]H) / FG)O)yg79F
89>F")9) / FG 1,` P&FG)^^,9`:)F 4/35 ^)`>,9 )
'&8/ 9/F+
'7 3>W93 sE> f1 =3>E3+)"9 )N/99^/cFG))^
1.2.4 Operating system
_
9fb FG|)9). 3>.)-'Z)_a/ 93 ,| ) xb, WFG)+9fb_)^ FG)^)+/
3) /)o1E7.) / O) `$1) `89: )D)^9FGN)k)^9 / )^D_/`99
N/,9/ /3 W99/ )=)&`>8 ,=):n)":]=>`,=)X)$ de_/=)F GFG)^)^ G`/ T/3
I) b,?^ )^9+`89,=)>!’ F <L=<:/+01"7NO.Vd.</' †oC"\Y‡ 8 F^ s /F^`.)^ O)
b, _ )!:fb E>`>fb )!F 9^/-.M 9,N"E>O)_FGHFG)^F!O@ƒ 1")Ju. =1Us ‹ 1"=Js /3 ‰ Jje8 =D:]8 H'X>)>Zb, FG)^)Z)!3)^Zsa`` 1 -F^ ` 9&'&9:)>&b,
)o1E `_93 PN )^9F"F^:'X> {) m>)9
FG1FG) _ bF!FG,^ )9) ) 3)^
/ F+b/335) ) _/|^ 4/3|)^ O) )
9^1`FGF^8FG)^)F :]=`>,)^?)$
\1 E'X b, FG)8b,= '&^)^) / )E>)aFG1FG) 1`)F FI `
PNZ)& )"93 3F /3-/F^FG1`NO)Fh)7'X)_)TW "9/Xb,-9fb (fH39>3r
V `>8 ,=):x'X),=) E>)TFGHFI)~F bh `n'&),=) )^F /3 FG) `89,=)>^F
b,`/
s9,=_`X'&)
! 9FI)/>3
m>)9 FIHFG)>-nd )7F 8E^))4) ,3>FG)/3 ),
b)^ O)4)^9hE>)TFGHFI)}F4)n:]H)G`$s9!)3+)")h`89,=)> rb,8`$/ ) b
b,= I3('XFhMk6 /3
FG)E)h,93>Xqr1,H]E
1.2.5 Platform
g79 `89,=)> )F m>)9 FGHFI) 935)^9 `89> ^ )>)^9: PN:^3y) /F+)
LtU+ SQ:!' .'&` b, Ok'&^)7b, 9^/F gh 3)^ F 9) ^)xPH)k9NO)PN F^` )h31FZ)Z 9,`T) sm9$f1hP )T9^/-
de/839/H'73)>ZF !38PN4b, ) H(')^979N)PN^ 'X b,Oh'Z)9
/F7a+ >fbE/ /, h`$/r)9)7) /aF7) 3b)T)
9N)PN^ FGE>`W9` /FGE`:)F&)8)"`89>$ Vw)o19`$/rF^,` 9NO)PN FIE`W9` /FGm`>)DFh)
&
wX v
$U
F^ "P .>^8`> He x)T1,+sm>hPrs9)F )9)h`$ sE _/9,N)3 )>)>$ng79F F
FG) 8; )F^T39HF Hs9,=)7PNhF^X`89,=)>F ) F7RA /3
PNhfb:^) fbZ`89,=)>^F
†e bT)^9:O!,F^3F^_O^)h`$3F FJ‡ 9 )Z`/sE" ,`>F^Fh)^ -; 1
9> b,* ,F^ _1 _/`99 >)3yPN$O),=F
P") 9^/
N/,9/ )PN eFGE` W `hsE9fHh)ksET)DF^,)
a
>fb>m9^/
N/,9/F 9fb&F^,`(
' e>fbPN$)^,^Fn)"P /`)) )^97)^9FGN)+) <12/M _/`99
N/,9/
‘4,Zb/{F^,3a'hHF7sE )^ '&^) LtD+ ST:!'E{ 1[)J2L=/)J<M `13 F^9`>!)>^'&F^ = )
_8sEDfb>^
3 `,) )+>)7b,=h/ ) ,/)>7`89,=)> H:fbaPEb,a9fb
"`>8 >4PNk)9)k`89,=)>$xg7Fk8 F )9)k`>^)8PN$)^,^F F^,38sE&$fb39>3 >fb
),)h)7F^ /3=f)/>,9F7)+,F^")J-.FGE`>W9`T9NO)PN-
1.2.6 Details
j4 Z,_/M’BF43$!Pr!` ^+PN )X/ ) )D3 O)"F^>F s1f1,F
P )39$C’BF8E)PDfH>' 7s9,))^9->FG)`89,=)>F b X=/3E,F^Q’BFE; 33M’ )
'7 )9)&'hb de-){; 9PND:]=/89 H)"^_PNX) 9^/c'h/FX. ,`-)E 3`,=93aP^J) =9,)Z/3 ,)G ,=)Z3>fH`> 9/3Pc)!_/
>^b
VX )>>FG)&PN),=kP)nfb h,_/ `)>`>),=4Fr)^ O) ) /O'&F{F^Pe13PH9
/F> ghF^!TE9,NZ/ )"3F^9:FZP `89,)^> fH^,9FGF PNX:]=/89
gh
fb Z,_/ `)`>)^,^
'&)| )F )v'7 >fbF PX>^@
†e_ >^ /3
1`>F^F^a^FG):F ‡
Fa/*3$ 3 13 X/3 '7 89` ) '7 H ,93>a)^9F
13m)^^,9,=)7)"`>,^F^
gh /)o
1 1F&"`89`$O)3{
13> `89,=)>^FX/FG89$fb J!57 m`$
sE99 )^+)T_/_G s9,=)Z/('X +,` P /FI)>&/``FGFh)+^ `R
F †e) )
`hPE 7NsE)Z/38:]HmF^fb&3FGh
‡: ghZ3$DFn)9)nP ,) 3339)
FG)^3a)^9 `$/`")^ FGE>3a,=a)T9^/-
9-`$/` F`>G)/5 113 ) 7)_ bF )-PN-P ?> ^
3 8`>,9 ) b,_`$/_ >n )XP /`>) )^ O) /``>F^F ) ) 39)"Fn39:E3)kP
'X>^Z)>8XFG)^3{ de_P /`>) ) >)n)&PN, m>PN_/`7sE>W)n)9) `$` `/lm> ) /: 9/F )T_ bkF^,= )9)x39)DO7/``>F^F^3 + J!57!{,/57<:/<M 'hbxSD
)F ('7>fb> 1,FxFG `89,)^> FIE`W9
` HO'&37sE,=) )^9 `/`9 1O'&3 '7
'7>!9/ 8)^^1 )fb3asa,F^ 9 e>fb{/9 /, F7q{,9` 1 ='7
`$/ P) 9^ )FTF^F^,+/3 †eFG,9`>`F^F^PN, J
‡X ) ,)^_)`"`$/` _/9/>)
sE9 lm:3{4gh>ZFn/F^"T)^9>>)`/=13=PNkF^ `$3 J!57!{,&;gZ1[F
1q7. / )F 8'&9` _ )z:]1 `) 3F ) 19(' )^9Z O/>):FkPm)X`/`9/nVX)F
'X` ^8 8`>) ,93> )^9F!13 ^E
†e `>>^)/ F^F^g ‡! `) PN./ ``>^>)
`$/`!FG de ^$/ ePN9`)F r'7_/F^ s9F^>^fb)89 )9) )39) )^ sm89^ `FGF^3y_) NO) W) )^ )^9
`89,=)>! ’ F._/ ^b CDE:) FGHFI)F.`$/
/,=)_)^`$/ 3$/ '&)a)F&sa`$/
:]1)38) _/->^_)8) 93 3F m
%&('7>fb> ) ./u!LYLM1[7N )^ O)X) bFX9N`!'X 93 3F 39) )8sm./``FGF^3 O!)^9F PN>>3?)_)+_-^`,=FTF^>fb>+E>PN^_/` E9/)o m+,` '7FG+)9/ E
#
`$/` ,F8de?)^9F"F^ ),9)E) F P) ,F^F^F")^ )8/,=)_)^` `9/F^F
(fH33as) E:) FGHFG)^F /3a)!/>7FX` 3)^8`!,= 'X )
1[&LMC47 LMCR <12<M /F
2 fb>+'&9>.'7k:]H)>93.)kfb Z,_/ O`9 )`>),=n)X`,3kFG>fb>/=$b:F P= ^ E)>+^ `89,=)>^FX)9) 39M
’ )DW9) {
FI)")Os m)>+ L7:/+" !9'KLMC<:g.
'X )T)9/-"`F^FG$ ? ) 8`>)&/F7PNDF^,` `89,=)>ZFZ+)/F ) 3lm>^)7PQ"PN7)Dfb Z>,9_9_O`9 )`>),=/ng +) b PN,m/3 f//) P{)D /F^ /F 9fbT)^+sET3`8mF^3__/1,9/ ).3>E3)
^)F m$/` Px'X` F&)-, s1- Px) 1`>F^F^F>Dde _ `$/F^F m)F&FD)TO)
/{.FG)^/)^PN^'h3
)/F 93 FGE`>N/ 3 N/,9/F 9fb")+sE ,9FG3{
V `>)hF^,``FGF^PN, / )>9) fbZ) /9`89,)^>F ^ >)o'7 1F P FG e`F^FG
`89,=)>F> ‘4,`$->fb `$/E)FZ.`89,)^>XO`9 )`>),=/ 9/ 1)>!
*M0h'
/']LM7<:g. )9)hXs /F^>3
`89>) 3l >) HF^`$/ ` Fk)9/)Dfb h, _/_`)>`>),= Z/ 1,9/),Q`89,=)>F `/9) smXs , ) b>) 1s9,=)h/Fh!):)`$/
13 1,9/)^,9 `89,=)>^F+ ]=FG) k/3|/)^9F! //3= sE 39:fbE3 )^9F
F^9 3EP `89,=))^{
Chapter 2
Foundations
H
& ]av 2.1 A first C++ program
p 57E;/+./1q3
hST:G657z'A=1~LM7U+012 SK:<+Z100VA10.z6573'=1€LM7{
U+012 SRuR:)+.TR#US\V$ ,/M0:<657\'I=1"7N SPu`:/)+.-fVh
/M0:<657PL=<Lt Kuv57j'jC.<C.QK657Bu`:/)+.T
_v5&10Z1€L3 W
> 12<‚Q- ˆ u Eb9h10U)I =1[F&/:g.Q p 5C+
>GQ!./ % +[ 9LC:g p uRE>3V. ‹ +<:?i/k&lm o
p 5&10.K.Q/!01q|LM:<!.Q<M6.j :g.<c/']Lt ! Ž`K LM:</N
:/' )?1[M0:/Q) !.G657
) F^_)`/ <:!'E.X/!.<.T:!VAjh)J<:g.<2)O+" 106.L7:g6.T
FG1)`>)`$
%&> F ,=+WFG)_6hY Y - d )8/F 1F PN 1,.sE>
/F 9,=) /3 ,=)^9,)^F )^F
a
) EO'7: 8 deP7b,59fb >fb> F^> 6ZY Y /isE>PN k:fb|)F.F^^)+
a
)X -F^`$G rFG` )T`)/FT)DP4FG)^9 HFG1+sEFD/3 '7^39FD)9) O
)DPN,3 9),= N/,9/XCT ) )>D9/3 )F&FX13 9:'XF Z/FDF^^)TFD)DF )F7/J/^$/3=_`)/FZ__8EG)/) PN$),=FZP ) 6ZY Y N/,9/nCT` '7
9fbD9Z)=,_)^9> )FkFG`>)
1)^9Fn/ † /3_>fb
)> 1s9>n/F ‡
'7M
’ )h _F^`$^/H
Á
Ã
// Program : power8 .C
// Raise a number to the eighth power .
# include < iostream >
Â
Á
Ã
Á©Â
int main ()
{
// input
std :: cout < < " Compute a ^8 for a =? ";
int a;
std :: cin > > a;
// computation
int b = a * a ; // b = a ^2
b = b * b;
// b = a ^4
// output b * b , i .e . , a ^8
std :: cout < < a < < " ^8 = " < < b * b < < " .\ n";
return 0;
}
Program 1:
LM:<N. YL=u`<:Tm$ Ž
& 6 v
;
deP b,-`89D)F7/cab,=X`>8 ,=):&93 )a,a)!:]H`,=)s9TW9T9^
3 ,`3 s1 ) `89> Eb, W993 )^9 PN('X
+ ) FG)939^3 ,=)^9,)_gn19`$
) FG)/393a,=)^9,=)hFh)^)` 3 ) F^D'&39('*b,=&`89,)^>7F^`>>{
Compute a ^8 for a =?
`$/ ('~): /?)>> rB= r,9FG
) b
>1sEbO3{ VXP)^>">F^F^
) ,)G ,=)hb,=XFG`>a^$/3F&FZPNO'&F
‘4,
Compute a ^8 for a =? 2
2^8 = 256.
kPNT3F^`,F^FG!)X/
_3>) b>) ,F (fb>7) ` ,`Hb g7
power8.C
FkFG)^)^ 'X))o'7.F^N/FG9>F
/'^'I<M6. “H)>_31`,) )X/QFG,9`
)9)
//
)Z`$/a/F^_sE",93>^FG)13 sa†e1,_/h
‡n$39:$ q{"A `)F&/ 1"!Z*)J!{ )1[:<!01[F& “
)F7`$/F^ )h3`$O)F )9)7)T9^/Q,F^Fh)"=9,=) /,=)^9,=) sG
kg7
'A1"XS/C<012 'X`.F ) $^) P>fb:^6hY Y/ FI 9FxFxR #Hiostream
xg7FxPN,9`:)
F `$3 s1?)
m>)9FGHFG)^ 'X )89^/iF FI)^)>t
3 “n) 3F 'X)^ :/!0C:!
.<2+<'A<M _$UH g7 f//, FT>),=3 ) ) E>)^
FIHFG)> r'&9` s1 ` 0
fb)aF^ F )9)h) c)^>9)>3
FG,9`>`F^F^PN, b
gh"_/
PN,9`>)^Fh3fH39>3)+)^^" ^)^F
FG) FhK )^9 =9,=)Z,+sE:
F.$/3{ q{ U ,=)^9,)^F F^F^/) )
,F^> )^ O)+)^F > 'X` 13|P&9,=).)
/ :]Hm`>)FXde 8$#8 F:!1qY;gD
FX3`>N3-)9)X/`>)FX/FD 9N/`>3>&)FI)
a
) 9,=) 1,.sE>$ gh b>1'73
93`)FT)9)
F )^>$ de W99/ int
a
)Tf^Ns9
>`fbF&)F f,"Pc) = ,=)$
a
gh ?F $; (08)8/`>)^, 4`>8 ,=)O)-) bF 9N/` de 9
A >'zf/NOs F 3`3 'X` /`>)^F./F. 9N/`>939:!) FG)^ )8F^,) P7)^9`>8 ,=)O){
gh
b
f/Ns9
Fk9 )N/ 3 )^!)&13,`>)
4q{ (0"`>8 ,=)>Fn)&39,`>)
)9)
b
a * a
b * b
F 4 93FG)F7)F7F^,)Z/b a
b
gh )3 ^)ZaF!(@ $K.Of13F7)"/J,=)^9,=)$ M O^)&P )&FZ) `89, ))^ P ) 39,`>)
=)9)hF a8 b * b
2.1.1 Syntax and semantics.
ed a3>h)+,93>^FG)/3)T/
3>)/ =/3aD8m^)/) b)+'Z)
power8.C
/F"b,^F^P7N)^> xb, >3 ) H(' )8,F.``3-)-'X` /F O
'&^)^){ ghFGn,F PN ) ./V+M2Qs Pr6ZY Y.‘4,"PN,G)> 3 )^H(' 9(' )&)>^:)
9^/ † I'X9)h31>FZ)T9^/J39 +‡ /3)^9FZFh3>)>^3
s )^9 .Q<'M012!. P
6hY"Y k2xfb
/t)9)kFn'7> PN^38/`>`3!)!)^9X6ZY YwFIH)O]_.sE 1"=Fd+Z1q)
P F^_)`/XE)P!f1>'! V F+~1 ) / F
9 )9)aF FG1)`>)`$ )
F^_)`/ `^`:)$
d !) ’BFZ) F/ 'X) O),=/rN/,9/ _ )FZb,-'X9)&F^)^`FT s9,)Z)
)>^>))yP F^>)` †e O^)`,NO 'X>)>
)
_ bF_F^>9FG?) /D ‡ ,9 F
``>)ZP $/=
9>-./cF7f//
3 )"`89> __,=)^9,)ha>^ZF^F^/ /3 )^9F7'&
3>W9)!9E '& ) / `>)/9F .VM2Qsj<:!:<:g. f1N)9F P9)^9hFG1)/`:)`$/
& ]av /A
,F>
V~/)9) F"F^_/)`$-f3 _ `89 'X ),)">^^F s9,=)!'7O
) ('73 ) _ b /?/F^F^,8)FTsm,) )^F sE> f1!“ )./ /CD) , W PNa ]/89-P") F^>_/)`$/D>^^ 1,FG) 9/F 5`>9FG 1,`F* G)`,N
9N)PN^--CD )> 9NO)PNF r)89^/i_?sm9$fbFI)^/ x.`:/F^{ 2xfb|
)+F/ 9N)PN E )")D'7 F^>)^F s9,=)"P /4) )> )F ? F )9)T)
/?
’ FmsE9fH F C)J ,) 6 $ kFG9,3!fb3!'&^) /FE)9) :]=s9)
,39:W 3 sE9fH$
gh FG1)(].P 6hY YF FIE`W93.PN_ +&_)_O)`$//N/,9/ g7 3F^`>^)
PE)TF^_/)`FnF F^F FI)^`><) “H) O)> F^>+s9F )^9X)^:]H)7Pr N' 1/3F F^,` ) F^,=l >F
P F^F^Fh/3aEF^FGs9TF^)>^>))Fngh" 8`N N'wPZ6ZY Y `(fb>9 sE)
FG1)O]/3aFG_/)^`F HFh)"do\=
C d 2n6 FG)/393 AbKK .P $UUKH
9DF^,`- PN_/ FIE`W9`$O)_F73FGEFOs c
†e)>^'&F^ O' F^,3 `89>
H(' 'X>)^9: b,=T/ )^:]H) FT/`:),9/a_6ZY Yt/ E93 'X9)T )TFDF^,=EF^3
) 3 ‡ 7)8F)FG,9 )s9
PN_$ 6hY"Y g7^,9,=) )^9F sE1 '7a:]H9N5)
>f) FGH)/`>)`$/ /3 F^_)`/X)>F_ O),=/TN/,9/ /3 s :]=/89 =
)aF baPX$/39s9)o 4'7'& P)>) FG)^`:) 39FG),F^ sE>)o'7 FG1)`>)`$&/3
F^_)`/m)>F 4FG ):Fh!FI)7 O),=/_)^3,9`>3a/Fh9fH sm)aFG1)/`:)`$/
/3aF^>_/)`$/E/FIE`>)F 93)h39:E3F&) `)^:]H)h'X`aFGE`>)ZF7:f/)$
\1>)F >fb>?f3-/F&sm9$fb
Unspecified and implementation defined behavior.
3lm:)^8_3lm:) 9NO)PNF<“b)F F XPE)D&,9 /FGm`>)F P 6ZY Y )9)k'7
’B3
PN>k)!FG'7>>
,93>n)Z,= &PN^),9)> '7&`$t’ ) 7)hF^F^,&`>8 >) FG`
)h1`>`$/F^9/8E9Fh,a I/{PN =
gh>^ )v'7 H3F&P )PN e39:E3)7sE9fH$ g7!`>&!Fh`$/3 1[']Lt <{
'I/M2+012)J ,) sE9fH$
9>9:fb>a)?6ZY Y FI)/393 `/F_F^ /FGE>`>)P") N9,9/ G89>)O)
3>W93 b,`$:]HE>`>) b,=k9N)^PN~)^!`)/83`,)O).)9)kPN, FIE`W9F4)
/FGm`>)$ g7h)o19`/=:]8 PNkFG,9`8/ 89))"3>W99>38/FGm`>)nFx)h,+sE:
PEs9)Fn)^ O) _ b&,= !G `> F^ \1`>)^ 1<;H de_`$F^DPE89))+3>W93
/FGm`>)Fk/3 F^,)^ sE> f1 )D6hY"Y*FG)939^38/38)7 )PN )>)^9: `89>)^
3>)>^X) /`>)^, msE9fH$
gh F^F`> H93*F`$/3 hM.qL=//1 ) ;/!5CF
1q: `> P F^?,FGE>`W93
/FGm`>)+Ph)^9/, %&>b,|`/ ^ -'7> 3>W93 /3 ,9FG, .'A+[ F^>)+P
EF^FGs9TFGE` W `)F 1s9,=)7) 9NO)PNQF7)Z^ 1,>3 ) `)a PN,{FGE`>W9`$)
P
)./FGm`>)$TV )o19`$ :]8 !PN F^,`?/ ,FGE` W >3?/FIE`>)TFX)^9 :f/, O)-3> P
E>/39F7'X ):]19^F^F^
F^ \1`>) 1
de '&^)D/F /,9FGm`W93FGE`>)^Fn`$9)n/'h1F4sEhfb3
3 bs ,=)4,F^,9/ FG
`$^"F^,=>F&)9)h ,FGE` W >3X:fb-,93>W93
sE9fHhF^,)^F
2.1.2 Comments and layout
2xfb>^ 113
/c`)/Fh`)^F 1
PN&:]/89
& 6 v
0
// Program : power8 .C
// Raise a number to the eighth power .
Vy`)xFG)G)Fx'X).)o'7"FGN/F^F
/3 `>),F ,9)H)738P9)h 6 )F
38)Z(fH39"/PN,`>)9/)o H
//$/ )9)h)"/Q'7,3a3 :]/`:)_)!F
'X ),)h)-7-FX /J'X),=)Z`)^Fhs /3 )^9> 3 '&)^
/F PNn)&`89:x)!)^9FGN) )t)":]=>`,=)s9F bs9,=)k'7XF^"'Z) )tPN
)>hE9X
†e`,93.,=F^ fbF ‡ ) /
3 93P 1`G`>)&&:]1)3)-
),=) `)F {)8N)G)> )/F 1F!sE`+fb>^ )^3,F"'X )^9 9^/ F )
`89>)^ )^f1N/e g ,FG).,F 2 fb b, '&4) sE_s9 ) ,3>FG)93 b,=+O'& 9^ /Fh/P)^>X.`,=9TP '7 1F ='X)^9,=)7`>)F g7>"F79 .<2)Y:/) 'h$
P 'Z)9
`)F bs9,) '7D'& PNO' F^X` eF^F^X,39>F4CTTP{)QF )9)7>fb:^
/K
 :fb PZ).F.fb:^|FG89,  F^,3 FG)^).'X)^ ^F.PZ`>)F
)9) >) )X9^/?
’BF49/X93
F8'& O) ) 3F4de ,= `/F^ 1)^9TOsEOfbX)o'7 9>F
PN,_F^, `
VX)> b> PN$),= P. $/39s9 9^/ Fa)F Nb,<) “ `F^3>a)?fb:F^ P
FG9('X M / 1w? 9fb-(fb3`)^F h/3 / G,9`>F^FG power8.C
Nb,=)h)F7 b FG /`F 9Ts HF =s9N/ _9>F /3a3))F
Á
# include < iostream >
int main (){ std :: cout < <" Compute a ^8 for a =? ";
int a; std :: cin > >a ; int b= a*a; b=b *b; std :: cout < <
a < <" ^8 = " <<b *b < <" .\ n"; return 0;}
LM:</N. YL=u`<:Tm /)J<M.Q,)Y Ž
Program 2:
gh+`89>&FT`89>)>a)Tsm,)D)^9>F^ `9/F Es9,=)"m>F^ $/3)
/t'XW93_)^9F `39>9FG3
fb:F^ 1,)&39 8`,) )^ ,93>FI)/3{ng7X9,GEF^DPr
13 Nb,)XFX)fHFG, ) 9^/ FG)G,`>),= g79FDPNT:]/89!$/FZ)9)T`$/
s91`1F P{)^9X/ F^,3sEDF^> )3_s1s9N/ F )9) DXP{F^,=`>`13
F^,3sE&>FGEF^s9XPN7 X)= # )J<M2+012 = b
9/F )ksm>)o'7_)
power8.C
/.Ph`,= s`F 4F+/)>.3FGE>9F^s9 >39).Ph13 $b,=) 4/ ),9 b,
'Xm
N):hsm!s9D) PN,
`)T)F
gn19`/ x`NsEO)fb8F^P)o'h^_uv`>)^F+9fb
Nb,).,3F _ H9F^,=
)^ O)
>fb>G1sE3y)-uI>`>)
`$/ /F^|$/3 :fb>^1sm13=yF^Q ’BF
`13 V )_) >fbTPT)
F^89 9^/F 3F^`,F^FG35 )F sE1 kF^,`5PN_/ ,3F )+9>`F^FO^7
“7'7
F^89 /39:&)"FG)/393,39>F )^ O)k9fbZ(fb)!'7 +'7 9/`>)`> 1938)^ O)
TsE9+,F^3-/FG)h
)>hsE1 _ 6hY YzFZ'7 2.1.3 Include directives
2xfb>^ ,9FGPN, /c`)/F7"Z
# include < iostream >
include
)1":</<01[F&!. F^,` /F
& ]av R
&F^,9/ x)F^aO9m$ ).) fb>^ sE9 PZ)^9
/-
3^`>)fb>F ^
#include
33 FG` E 6ZY Y{_/-8EG)/)&PN$),=>F"O.9)T ^)TP4).`.N/,9/"de FG)/
3 n)> 89>)3 ) FG `$/3 ./2)Y:/)Z1q;!::!V 'X`|F. ^) P&>fb:^
6hY"Y 89>))^{ V Z1q;!::!V F+ `$/ ,)+,F^3|) ,=5`:^)/|PN,9`>)^9/)o
/3 )^.(fH39T) )^.)^9T,F^>Z F^,```>)hPN-4de
P /`>) =)DFG)/3 O3 s9^8`>9FGFG)F7P
F^>fb:/rsF !P '&`F7)"9,=) /,=)^9,=)7sGb
V s^ F^)Fh)F PN,`>)9/ )v ) )T,9FG>&
)TPNcPr9ThF^>fb:/ 57Y)J<:g. 24/` F^,`?$39:T`)FXPN_))9)DF&9>33 sa) `89>Xde 3>D)_,F^
`:^)/ PN$O),=P s9^ 9/F )-9`>,39+)`^>FGE3-9/3> )a)
/ s1 $/F PZ/
3^`>)fb/ de
x'7'h/) ) ,F^=9,=)./3
#include
power8.C
,=)^9,=)4'&`R
†e_1sE7F^,=^F^J
‡ )4 ^)4P )h`&/, xg79h`^^FGE3
$/3>ZP ) FG)/393 s^_Fh`/3
iostream
V '7 3F^9>3 6hY"Yys^D9,=)F )FrPN,9`>)^9/)oT)X 'I!.qLCJ/ g7k9/FG /`>
P{)DFG)/393_sO^8Fk`$/>3
4gh
=_3> )^ ``F^FZ!PN$O),=TP )DsG std
'7 9fb ) t+~1 S/V )F 9/4'X)^ ) 9/FG /` bn
† )F F )^9kPN$),= )9)
std::cin
/O'&Fr,F{)&/3 =9,=) P^ ) b>1sEbOh
3 ‡:xg79F `9/F^* F{)Dfb3 'IP!D+./57!.
'X`?3l >)"PN),=F!/``3)/ a>) ) F^/ 9/ V )T) F.)^ m:]19`)
1,9/W9`$) `>$F^FD) $/39s9)o P4 /FD )DFX>39) O)XP
'X` sO^-8fb> PN$O),=.`FDV 9/!)^ O)TFX) 1,9/ W >3 FX`$/3 C t+~1 )
/3a,F^,9/ `^>FGE3FZ) +PN$O),="3>W93aa,=Z('X 9^/-
2.1.4 The main function
2xfb>^ 6hY"Y*9^/}+,FG) 9fbT
int main () { return 0; }
main
PN,9`:){ ghDF^^)^FG) t$39F /F PN('XF>
g 9FZ/ 31FD)=7g79
7
PN,9`:)-FX`/3 s1a) m>)9 FGHFI) '&9>
main
b, )^D)) ,) /?“&s9,=)
'&yF )
SC!01q X/3'X9)F return 0;
F^,=EF^3*)|$/ ,9FI)ab?|_)_O)`$/ZPN,9`:)D)
PN,`>)*`/ fb
main
,)Ffb) )_,=E :]H`,=) P")-/ Z/3 )^9 `89,=))^F 'X )
)X`,= s/`>F H39Fk!PN,`>)f//,&)9)kF fbs /` ?†ek>),=3h‡4) )^9&E>)^
FG1FG)-xde+,= `$/F^ '7h9fb '&^)^)+
PN,`>).)^ O)x31Fx) :]1E`>)4/+,)F
main
† )FhFh3`$)>3 s1 )">89)o_s/` b>)F () sE3 main ‡h/3'XF^ >),=af//,"Fh)^9
)> g79hP /`>)n)9) )Z:),= f//,Z+,FG) sEZ/8)>nF439`$)3.s1+)7'73
0
int
sEPN^
n-`fb>)
)^Fh) E>O) FG1FG) )^ O)&)! 9/F
main
return 0
,-F^,``>F^F^PN,A
†e&)^ O)Z'7"39M
’ )&`$O!'X>)^9:&)Z9/F ‡ 'X" )>&f//,! ]H9` )
F^9/FhP ,=
dea FG)^^`>)7_)_O)`$/F^>9FG =)
PN,`>) P
Fh,=)^)^>8sm= gh
main
power8.C
'XTPN,`>)9/)oP )T9^/J`FhPJ)^9 W! P )"PN,`>)rng79FZ>l `>)&F
)
$/3 _1,.sE>"P )+FG)/393?= ,=)!/3?'&^).)F )?E('7>!)^ ) FI)/393
,=)^9,=)$kg7"P `>)&)9)ZPN,`>)Fh`$/a9fb!>l `>)F&F^>)FX6ZY Y ^)ZP _ S/h!012+
LM:</N
:/'j'^1[7N U7N*N&!. & 6 v
@
2.1.5 Values and effects
g 94f,k/3 :lm`>) P=7PN,9`>)^ 43>)>^3"s")k6ZY Y F^_/)`F >> HO'&
7
)aFG1)`>)`$Z,FPX'Z)9 PN,9`:)F831F)8)^&,F_/1) OsE,=) f//,F/3
>l `>)Fkde)F7F^F^ 9f//,"/3a>lm>`>)D^ 9,=
F^>_/)`$/ ):F
=.:]/89 '79fb8) ‚Qu )9)! 6ZY Yx)`9/`:)> 0 F )>^:)3 /F )
)>
† / ),9 )FkFn) 3 8`>,9 )n)!,9>F^F ‡:4d ) Fk/F^"8E^)/) ) ,3>FG)/38)9)
0
f//,!93>lm`:)X3>E3a )"``>^>)"/cFG)) 'X` ) PN,9`:)aF7`$3{
2.1.6 Types and functionality
g 97'73
7
F )^9Z9/ PE 6ZY Y )o1E4g7Fx)vE&F4,F^>3F^`7)h
int
power8.C
3$/F '&) )>F> de _)_)`F ):F._133 s1 )8
g7F
( , +, )
/:s9/`8FG)G,`>),=
39:W F )
)^>F. )>F Ph) f//,/ † )_F^>)
‡ k/3
?)^>FTPk) PN,`>)9/)o|† /33) /3 +,)9`)h‡:"de 6hY"Y )>^F!`$/ sE
133+s )^97)o1E
nq{ bZ
G_O)_)`/)vE !6hY Y*)o1mZ9/Fn 'A 1 Fd+Z :/7NY /3 SC!01qint
+~1[0V 39:W 'X9)!'7 `$/ 3'X)^ )$8 '7+PN> )^ )o1E '7T'X 39+F^+s1 )F79/ Z)D)9)7) 9/DFZ.FIH)/`>)`/r/FGE`:)ZPr) )oE ='X
f//, /!/3aPN,`>) )o^"P FG_/)^`$/m9)^,^
67fb) 6hY Yy`)/F Z,9.sE> P S/h)Y'I<M2+J0VgL=!. †eF^>)FE`$/3!s9,) F7TP )- g7"_/uv 3l >`D)
)vEF ‡ PNh)o19`$/m `$)9F>xghT)o1E
int
)
G_)_)`$/)vE F7)9)
F& W99 )Df/,9T/ b
( , +, )
int
2.1.7 Literals
)^>/>F^>)FnD`FG)/)xf/,9 P9F^ )o1m = :]/89 +D$UTP9) Fn )>/=P9)o1E int b>>F^)^")7f/,9 0 =k/`PN,939/)/1)oE power8.C 0
).F.F^: O) 3>W99>3|O'c )F.)>/F!1 b k93 'X9) )^9>.f/,9>F O Vc)^>/
`$/_sEDF^>a/F )^9TFG1)`>)`$ `,)^>^ ^)7Pr!f//, ) _ b>F )Xf/,9 If1F^s9 )
/-
V
2.1.8 Variables
g79 int a;
F& )J!D:+012 P Fd:!1qY;gD Vwf^Ns9T>F^>)FD+)&`>F^F`>9FI)/)Zf,!P
F^ )vEZgh!f/s9!9/F& 'I 0VgL= E Fd+~* m93 / Y)Y):/!.<. † )v9`$/ _a)
`89,=)>! ’ F _/ >^7
“xb,|`/ )^9 Ph)_/33=FGF F^8 /F )^9EFG) P7)
f/Ns9 )8_/ ^Y
‡:_gh 9,=^EFG8P )/33=F^F F ) H('}'&9: )-FG)^
/3a _,=a) f//,4g7"$F^aPNZ`$/9.F^,`-/) )v Fd:!1qY;! F7)9)h)F f//,
`$/ sE ` 9/3 s 13P1
)^9 ^ `)) )!)8`>^FGm93-393=>F^Fag7
/33=F^FZ)F^>P __`9/!Fh'7e4dea`)G/FG) H)^9"9/T/3)o1ET_
W=]H3{
& ]av K
9>y'7 PN>8)^ f/Ns9 n'7'&73 F^?s5)F 9/
fONs9D'X )
)^9"PN('X `9/`:)>FI)`F
)J !.
9/
)oE
f//,
,3>W93
g7a3`N)
int a;
393=>F^F
`9FGas1 `89> C"\
a
int
'73>4'X+)F4Fk`/3 )J =1[012 P >fb>_)^9,8 )k31>Fk)k3>W9
a
) f//, P k,)"`$4)^ O)")FTf//, 3>E>93F )^9+/FG))^ /3 )9) )
a
3>W9) PN,?FGE`>W9F 57u )8f,F s)/3+1 ?).,=5) ’ F+/33^F^F?\HH
a
)9)nDf^Ns9 5C+. Df/,97F )>>PNZFG>'X9) 8>`F^ s9,=) '7
’B=FG)`.) ) $uv,9FI)kb
_)_O)`N9F )/ OsE,=) S/h!012 Fd+Z '&
)^9:_/`>),9/ /)Xf/,9Ds)3
s1a>f,9) ) PN,`>) '&)-``>^>)+,)F7 >fb FG)> PN,=^)>D'X )
,=DF^9F^F P
9/F&f//, PND:]=/89 ='7 /F^8F)^ O) F =Zg7F&FZ)!'h
a
2
a 2
)9) />F ,F^,9/ )/ sE,=) f/NOs F /3 ) f//,F>a 8'Xn:) ) H('
`9/F^F PNX/F^F^99+/3a`9/.f/,9>FZP f/s9F7-\1>`>) 1$;H
‘4,8)
2.1.9 Identifiers and names
g79 9/.P / /f NOs ++,FG)TsE / 1q)J<M01 <: /``3
) )+PN('X_3>W9)
/3a)h+,FG)7sE"3l > )&P^ `:^)/ :<!.Q/:!F&) 9
/F7b
int
R
10. =V T. *</ S@!5C:/J<<:g./'KL7.Q) S|657} !6/:g.
)1"N1[6.  
 -W)O657Gh)J<:g.Q/:/Ii od p 57 :g./]!5C:J!<:
Definition 1

 ) Q identifier
-P657 k
a z
A Z
5C+.]A;<?D!6<:

0
9
_
/ _$ / F^ `)/ )> 9/F PN ]/89_) t+~1 ) 9/>F
/3
7
g _6hY"YQFGH)O] FGE` W >F"'X9) 9/+F r'X.)6hY"Y
std::cin
std::cout
F^_)`>F7)^F7,Fh'&9)7) >FGE`>)^fb!9/DPN:FZ) a.fb`) ]H)$
Vp6hY"Y
2.1.10 Objects
VXs9uv`>) F ^)kPm)&`89,=)><’BFk_ G )9)kF ,F^3s1 )Z/~) FG)^
f/,9/+V& s uv`:)"9/F!/ 393=>F^F 8)o1m /3?_f//,+Pk)FT)o1E†e3>):3 s1 )
^8`)>)&)Z)^9 s9uI>`>)!’BFh/33=FGF ‡:
) )^9F43>W9) Tf/NOs `$/ sE7`F^39:3/FnD9/3+s uv`>) s9,=) '7Z_./F^
9fb+,9/3 s9uI>`>)F"VX),a'7.`$/M
’ )TF^('~/ :]/89!PN! ,9/3 s uv`:)!O)
)F E) H'7 `$/-^,9T)9)h, 3s9uv`>)FZ 8E^)/)$
de P /`>) 9P b,a'h/)&) 'Z) )>FI) /F =)XF&s9F^,=) _9>`F^FO^a) '7 'X )s9uv`>)F7)9)& 9)Z9/3
s1
f^Ns9Fng79FZ`$sE F^-s1_)"PN('X F^89
),) ]HE>^) F^,=EF^X)9) b,
9$fbX'Z)^)^
"/})^ O) FG)>FZ"F^ 1,` P
)>Fh) sE"$/3-P +W9B
† PNX:]=/89 =)8F^G)&) /P)>^'hO3F ‡: Z(' b,- aO)
b,=k}/3`,)k)X,9.sE>nP f/NOs F4)^ O) )n`)/F4\H )^9Fk1,.sE>nF ;=
k,=)& )F^";=Df^Ns9F Hb,`$/aFG)^"+D)9/a;= )^>F4deP b,=h/QFhP
/-9/`>)`/x,F^ {) `$/ `>^)-FG)^ F^ 1,` Pk; _):F Es9,)D)^9>?)>.+,9FI)
sE")Z$/FG)h )>>Z)^ O)Z`/9)hsE FG)>3a,93>X.f/s9D9/
v
& 6 U
2.1.11 Expressions
ed )n/
O)=k`9`>)>xFG 1,`F FG)/3 ,=) sm`$/,F^4)>!1 P /
power8.C
/3-^!` ^FGEF^s9 PN&)^9"PN,9`:)9/)oP )"/ )F^! )!`9/`>)^>
F^ ,`F
a9+A /3
F (0 93 $KH
a * a
b * b
VX ]HF^FG>>F^)^FX `89,=))fbf1+)^9:Z ]HF^FGF ^ `>F^ / ]HF^FG F )>! LM:!1"'A:!V,s!LM:<!.<./1q PN!:]/89+_):/x! 9/ {") F
'KL=./1[?,sgLM:<<.<./12 ZV `8EFG)T:]H>F^F^ F&s)3as1-`>+s9+:]HFGF^F
)=,`>G)/E:)F s 9,=)^) T / Pm ^)FGF
O,93_:]HFGF^{
()
ghD:]1F^F^
F / :!1065&'A!012 :]1F^F^ 1fbf1 =h'I<:!1q f/s9F — /3
a * a
) +,)9`$)E>)^ uv,FG) b '7 HO't)"P _O)_)`>F.VX``3
)a,=
sE(fb&3>W9) F `8EF^)^h ]HF^FG
s9,)nPt)^9Z ,)^9`$)^ E>)
a * a
/3)T)o'7 _G8:]19^F^F^F
/3 a
a
VX``^399-) )
sE(fb_39:W )^
/ ]HF^FG|F+-FG1)/`:)`$/k) )v xs9,=)+).9/F
F^_)`/E/FGm`>)FZ/F7'7 /
:]HFGF^a9/Fh )vE 9 f,"Pr)F )vE /3
EF^F^s9
/y>l `>)$*g7a)o1E-F W]H
3 s ,=)8)^9 f/,9a/3y)^9-:lm`>)_ _):N/ 'X )
:]19^F^F^|>)F <Fd+Z*+,) k$/a)9).)_`89,=)) ) >FG)F F.`$^^3|,=)$
2xf/, O) / ]HF^FG_Fk)&FI) P ,)7`>)f1)o "_'&Z 6hY"Y*9^/~F
:]H`,=)M
3 “m) >f//,9)a`89,=)F&)!f//, Px) :]1F^F^?/3 `$GFX,=)D )FX>l `>)
†eP /Y ‡:
gn1m /3af,!P _O^_:]H>F^F^ ^ 3>)>9>3s1 )FZ39:W )>/ =Xs
)o1Ea/35f/,9 PX)a))o sm35)F 39:W 9// M ^_^ :]19^F^F^F89fba
>l `>)$hgnE f/,9!/3a>l `>)DP +`8EF^)^D:]HFGF^ "39:)>3
s1 )!fbfb3
E>)
=3>E3+a) f//,F&/3a>lm>`>)FXP )^9 fbfb3aF^,=s ]HF^FGF M ,)G)
,3
/ ]HF^FG
13F :]1F^F^
'&)8)DF/Z)vE 1f//,D93
)F^F
()
>l `>)$
ghT:]19^F^F^
=PNh:]/89 1F P{)o1E int 93
)7,9 ]HE`:)3 =)F f//,DF
a * a
).F 1,9^ P4).f//,+P g7 ]HF^FG 9/FT >l `>)$+g7+ ]HF^FG
a
b = b * b
s9,)nP}) +.<.1"N='A<M9<L=<:/+: /3)&)o'7 :]H>F^F^F
/3
19/Fk)^9&F/
b
b * b
)o1E!/3af, /F
9s9,=)X)&9/FX/ 393)^9/m>l `>) )X/F^F^9Fh)!F ,9 P b s /` b * b
) b
"F )9)&/-:]1F^F^aF /Fd+~t+) )>h)9/ ,s$<7,) sE>`$/,F^ _/_:]H>F F^Fh3 )&9fb >l `>) 9F^ )9)7) &PN,`>)9/)o8FZ/F^F^`N)^3'X )
)^9 f,"b
2xfbPNh:]19^F^F^F '&)_>lm>`>) =F^&sm1 HF ,F^D)X): ./1q)J3 W/! ).89 F^ &)^ O)
)&8E^)/)x)!F4)&f//, g79D6ZY Y >))^F4` 9+FIEF^s9&PNk>lm>`>)F7h)
.<2+<'A<M6. ) '&9` '7":)&sEO'!
7'h/)x)^ >_ )9) ) MZV 'h.P /`>`F^F^9!/ ]HF^FGM
’BFxf,hF )^">f//,9)^
) 93 )Fh/F^+`$^^Fh,)Z)F7>l `>)$
‘4,`$/)Z>)Z)^9Tf//, '&),=) )":lm`>)
$
87
-
Q M
7O7
Q
Q
-
27
2*
>'( A07
8/
/
2A
22
82
.#*
B>J
* I
27 (,
b
J
:
7"
5
$&
(9
"
(7+(
-BK 2"O
,
+(*
9 297
'(97
(P
N*
%$
2 2/
(
.
N
b
.. B#,
;#
& ]av 2.1.12 Lvalues and rvalues
VX_f//,XF7
]HF^FG
)^ O) 9/F7/
/33=F^Fnde_)&/
1)^9Xf/s9 b
power8.C
FZ/af//, H/3a)FZ/33=F^FhF7)!/33=FGF&P )^9Tf/Ns9 b
gh!f//,"P /-f//,"F&3>W93 /FZ)^9"f/,9"P )!s9uv`>)DO)X)FZ/33=F^F>hV&-f,
`$/_)>>PNXsEXfH>'73
/F )DFG1)/`:)`$/ `,):^ ^) Pr/
s uv`:) x) fb>Fk)Ds uv`:)7
† )>8E^Y ‡k9/ /3_ bFh) IfHF^s9 .'X)^9 6hY"Y /- ? /FG F
)9)7)
f//, :<0ST<:g. )^+) s uv`:)X)Z)Fh/33=FGF
de ^)^`,N / f/s9F./ f//, k,=).f,F Of13_-$/F PN /``>F^F^
/3 `9/ s9uv`>) f,F r>fb 'X ),) 9fH `>^FGm93_fONs9.VXFT'7 '&
F^ ?\1>`>) 1$; sEO' 9) :]1F^F^
G33 8- $K8FXF^,`
std::cout << a
/a f/,9/
VX :]1F^F^ )9) FT)"/?f//,.F / ^f,
=" ]/89 )>/FT ^f//,F )>.FD
/33=F^F /FGF^1`)3 'X)^ )^9
)> 0 EFb!M ,=)^)
/DP )F^F
int
,3aaf//,DH39FZ/a f/,9 =/3aF^N PNh^f,F
gh&)^>F4 Fd+Z /38 Fd+Z //3= 93`) )9)4'7Z) sE,=)4)}) FG ,`
):F!P :]1F^F^9F s ,=) )> )>F"P ) f//,F_ 'X P)> 39>)P?/
f//,D'X)^ ) s uv`>)Z)7PN:FZ) 9/3- ^f//, F^898'&)
)F7f/,9/
2.1.13 Operators
q{ A P
PN&:]=/89 HPN),=Fh) s99^_+,)9`$) E>O) * power8.C
qrb PN,`>) / E>O)X:]1E`>)^FT,)^FP†e>^ /F^ `$/>3 <L=<:/)+. ‡ZPxFGE>` W93a)o1mF mP 'X` )X`>8 ,=)>FX :<<0C:!xFd+Z P FIE`W93-)o1m m/`>`3 ))^F
S/h!012+Z100V nde-/33))^9>F^!`89,=))^F __ fb!/>l `>)$
ghF 'h/F")^9 F^_/)`$ f1>\
' “ ) FG1)`>)`$n:fb )^9 E>93F!/F"'7k/F )
`8EFG)D:]19^F^F^|
† s , )7PJ)^9 E>)Z/3a)FhE>/39F =F^.\1`:) 1g‡ =O
:]19^F^F^<F “)!m>)ZFGE>`W9F&PN&$/`-P )J'X>)>Z)ZFZ/-f//,TD/a^f//,
deP )h`8EF^ )7:]HFGF^8Fn/f//, )hE>O)kFnF3 ) >),= )^9Zs uv`:)n>PN>^3
)_s1 )+f, dePn)^9+`8EFG) :]19^F^F^ F"/ ^f//, E)+E>O) F^89^>),=F
)F f//,
gh
1,.sE>.P&m>/3F.F.`$/>3 ) :!100V Ph)
E>O)$ FI) E:)F.9fb
)v
†e,9^
E>)F ‡ 2 † s99G_E>)^F ‡:
1
9>9:fb> /+^f//,7Fx:]Hm`>)38/Fk E:/
3 ) F4/F^DEF^FGs9 )T9^Of13Z f//,
de )^9Fh`/F^ H)Tf//,D'X F^89 sET)^>^>)>3a/Fh/
^f, =$/ )9)7)^FZ393=>F^F
F ,F^>3|) 1 , )f, xs ,=) ) `9/_)$ g79F+F HO'&|F ZFd+Z !{q{
:!Fd+Z ]/=F&/:g./12 4de8FG))D)9)k/ E:/3 +,FG) sE& ^f//, )Zm>) )>^PN
,9/)F8)^ O))-E>/M
3 ’BF8f//,a>_/F ,` 9>t
3 “Ds :]Hm`>) /f//, )
E>)h:]H9`)8F^9/F7)F7))_) `9/")Tf,
9>?8`8mF^)":]HFGF^ fbf18/ E>)
Evaluation of composite expressions.
>)F >f,9)3)^9kE>/3F O >f//,9)>3 W9^FG) † >`$/b)9) )^9F /FGX`$^^F ,=) ) >lm>`>)F
PE)TE>/3F Pr/Y
‡: /F^3 )X>F^,)!f//,F H)^9Dm>) `89,)^Fk)Xf//,
v
& 6 ;=
P ) `8EF^)^!:]19^F^F^{"gh NO)^)>T`89,=))^FZ_a9fb+/33)9/r>lm>`>)F {/3
/E:lm`>)^F&)>)>hPNc)!:lm`>)ZP ) `8EF^ )D:]H>F^F^{
gh
3>+ 'X` )_E>/39F.PZ-`8EF^)^8:]H>F^F^|
>f,9)3 FG† 'X )
^":]H`>)F ‡ ,FGE` W >3 =FG /F^\1`:) 1
gh>^PN mP ) >l `>)DPx!m>/3- 9,`FZf//,F&X>l `>)FDP )^9:DE>93F f//,./3 :lm`>) Px).`8EF^ )" ]HF^FG?_a3>m3 ) >f//,9) 3>"g7
`F^ ,`.FX)9)Xf//,./3 >lm>`>) P )^9 `>8EF^)":]H>F^F^ _sE ,FGE`>W93 /F
'7 \1`!) `>8 >ZF&)X 1,3-) F^F^, 'hO F^,` `$/F^F m)XF&)!FIE F^s9)o Pr)T/>4) fb3 /_:]HFGF^'&9FGTf//,Dh>l `>)Z39:E3Fh
)
>f//,9) 3>&P E:/3F
9)xF ) )9) FG>)FxE>)FxO O^)xP PN,`>)F CT.) 9/3
Operator specifics.
)>!F&+W9)"1,+sm>&P mF^F^s9"E>)^ ‚d/M. F^,` F
a/P )F^
+
=
) bF73`:) `^FIE3 ) '7 19('X__)^9>_)`$HE>O)7FGH.sEFn3`$)9 )
PN,`>)9/ )v+PE)DE>)$ CD_)D)> 9/
3 H/3_FG) `fb) 1m>)k`$/F
XVXP)> '7 'h)
3_9)X fb )sE:a) ,F^,9/ PN,`>) `$/ )) b f(x, y)
) 'Z)
-+ /3a)
7de-F^,_G 1E>)FZ>)Z,9Fh'& )"^
a * a
*(a,a)
9),=/{93D$/39s9T`39/
=,!3lm>^)"E>O)B
F †e/xPk)s99^J
‡X``,= 9/a)^9 ,)^ power8.C
9`$O)aE:) )./F^F^)&m>) m)^9!= ,=)Dm>)
m/3 )^9 ,=)^9,=)
*
=
>>
E>)
nq{>)&,Fh3F^`,F^Fh)c),={
<<
gh +,9 )9`$O) E>O)
:]HE>`>)F)o'7 Gf/,9-m>/3FP
Multiplication operator.
*
F^X)o1m p /3
) >),=F )D13,`>)7Pr)F )o'7+m>/3Fh/Fh/
Gf/,9/ng7"+,)9 `$)^E:)h9/Fh9 >lm>`>)Xa )F7O'&r
ghD/FGF^)nE>)
:]1E`>)F /_f,&PEF^h)vE p /Fk)F
Assignment operator.
=
WFG)7E:/3=/3
^f//,DPE)TF/&)oET/F7)F F^>`3 E:/3{nd )hF^F^F )Xf//,
P )8F^>`3 E:/3 )a) WFG) E>/3 /3 >)^,^9F") WFG) E:/3 /F / f//,
dea,=h9^/
)^9":]H>F^F^ b = b * b )>>PN!F^:)FZ)Tf,"P b ) )^9
power8.C
F , O!P )F >fH,9F7f//, 9/3)^>),=F b
de P /`>) )^9!>)^): G 8a)^9 )^> f//,"FG)/3FXPND) P /`:)X)9)X) ]HF^FG _$
E$Ox ) [S< 93 FG3 P/ F^F^) E:)$x\1N^ )k)>^[^f//, F^9/F
/a ]HF^FG)9)h_
E$Z_) :!1"N5Y 93 F^3 Px/aF^F^)Zm>)
de
x)_`8EF^ ) :]1F^F^ std::cin >> a 9a_FG>)F
Input Operator.
power8.C
)Tf^Ns9
)+)":]1)&f//, PJ)^9 .<2)Y:/)j1[&LMC 9,F^,9/8) b:1sEb^3r
a
* 7*'( B>,
I'. B
=
,
O#*
7
-*
2P %*
=
27
# M2*+
1*
/
7?"K(7
*L &
%6#.*
*
"K(29
J
.6#*
"
%*
:=
,&2*
/
*
@7?"K(7
"K(2
& ]av ;
de_>/ b)&9,=)nE>)^
:]Hm`>)F F )F WFG) E:/3/f//,hPN>^^!) /
>>
gh.F^`>93?E>/3 FT/ f, PnF^ )oE p Eg7 m>)TFG>)FD)
F^`>93E>/3
)+)^9T:]1)Zf//,D$/3PQ) 9,=)hFG)^/J/3 >)^,^9F ) FG)^/J/F
/a f/,9/
VX8=9,=)4FG)^$z^>F^)Fk)hFG))^ZP F^7= ,=)43>fH` 7) .P )F 3>f1`Z/F
13,`. `)1,,F FG)^^$/QPr3 O)!)9)7`$/_sED)E>3
) (fH3D=9,=)7 3_93{
&3> )F E)!P fH>' r)8FG))^8P )8FG)^^$/i`GFGE3F!) )8F^ ,9>9`>
P 39)
) b>)7$/3{4deFG>)^) )Df//,DP )F F^`3 E>/
3 1)T=9,=) E>O) (fbF 39)! )}P^ )DFG)^$}) 9`:) )DP /`>) )9)n)F )> 9/F O' sE$3r
= )F )4F48E^)/) )^ O)n)hFG)^/t`>FkF /8 f/,9/ 67`:9)^, b/89,=)4FG)^/tFk/F^
`F^3>^3 ^)ZP )T/cFG)O)
%&('c ,`|P7) 39)aF $/3 F+
) 93 O'c:]=/`>) )+F.):^>)3|/F+
f//,8P )o1E p 3>E3F ) )o1E p P )8FG`3 m>/3{ =.O' )!F
, )^ 1O' )9)&)FD)^>^>)O) FX$39a3>W93 PN )^9 )o1m
/3 PNT)
int
)>ZPN,939/>)/m)oEF7)9)Z'7T'Xm`,)^>X
)"PNO'&.F^`>)9F>
PN>^FT)^8)!fONs9
3>W93 a) =9,=) /,=)^9,)
de 6ZY Y m)^9!f,
std::cin
cin
sO^ =/3)F f/NOs `>^FGm93F7) )^9 FG)939^3a=9,)7FI)^$/-
d )kF4,=8)^ )7/?
’ F `$/> ) W9H)^9hFG)939^3 =9,=) FG)^$~'&)+3 O)1
=n:]/ 9 mFG,EFG.)^ O)D) 9^/ 'h/FTFG)^)3 Pp8`_93-FG9>eTg79>?,F^,9/ 9'X
).9^/FD,9 r/ =9,=)T) )+`_/3 F^4F PN^'h33?)^ ).9^/?
’BF
FG)939^3 =9,=) FG)^^$/- d )7F7/F^ EF^F^s9Z) 3`:)h!9^/?
’BFkFG)/393_=9,=) FG)^/
)+$/3a39).P^ W9TFG)$/3{
ghnP /`>)r)9){)n=9,=)rE>)^r^>),=Fr)^94=9,=) FI)^$/ Fr) ``3)/ O/Fr) /('XF
)+s ,3 :]1F^F^9FZfb fH.` FhP = ,=)7E:)F =FG,9`-F
std::cin >> x >> y
T'XE3F^`,F^F7)Fh` 9F^Q3>)/EPN&)^9 ,=)^9,=)Zm>)hsEO'!
1[&LMCP./0:<'
de
T) `8EFG) :]HFGF^ std::cout << a w|$K
Output Operator.
power8.C
'&^)F )Tf/,9 P ) ) .<2)Y:/)|C LM7 =,F^,9/ )"`89,=)>7FG`>{
a
de >/ ) ,=)^9,=)&m>)
]HE`:)FD/FX )FZWFG)&E>93 /- f/,9 PN>G )
<<
/ C LM7 .<0:<' kg7ZFG`3E>93 Fk ^f//,ZP F^ )vE p ghhE>O)n'Z)>F
)Tf/,9 P )^9 F^`>93-m>/3 )^ ) ,)G ,=)hFG)^^$/J/3>)^,^9F7) ,)G ,=)hFG)^^$/ /F
/a f/,9/
VX8,=)^9,=) FG)^/~^>F^)Fn)^97FG))hP F^ ,=)^9,=)439:fH`/ 7) .P )F 3>fH`
/F"FG)
) `)1,,F FG)^$ P ,=)^9,=)!39)_)9)"F >)^3 s1 ) - de
'&^).) )!FI)^$/ =)",)G ,=)&E>)^Z)>^PN `9/FZ) FI)^$/ FG))^ 93a)^9F
_ bF&)X`>F^F^-)^89^Of13!) FG)^/ /FD f/,9/D6 9`>>),9/ / ,=)^9,)&FG)^/
FZ/F^+`F^3>^3 ^)ZP )T/cFG)O)
d ) 39:E3FD ) )o1E p -'X` PN_)X).F^`>93 E>9M
3 ’ FXf/,9 FX'&)G)-)
)
FG)^$?
“ PN )
)vE
/3|) )^9: PN,39/)/ )o1EF k)F.PN_)+F.$/3 int
3>W93{
6ZY Yi3>W99>F FG)939^3 ,=)^9,=) FI)^$/
93 ./2)Y:/) /:!:<: FG)^/
std::cout
)"=9,=) /,=)^9,=)7s^b
std::cerr
& 6 v
;;
d ) F ,=.)D)k/?
’ F `$> )D9^1`FGF )F^ ,=)^9,=)xFG)^/F= :]=/89 F^,=9mF^
)9)4)Z~'h/FnFG)G)38P}"`_93+F^ xgh,F^,9/ 'X )Z/zF
, sE) FG)/393 ,=)^9,=)TFG)^$p/3?FG)939^3 >G FG)^$p.PN^'h33 ))
`_/3
F^e k,)Z)&F&F^ mF^F^s9T) >39 `>)&9"&sE)^aP )F^"FG)^$FZ)+'&)^
)."W9ZFG)$3r g7F `$_smX,F^PN, ) F^: O)&^,N ,=)^9,=
) †eFG) )^
‡4P
std::cout
>^^&,=)^9,=\
) † F^)h)
‡
std::cerr
VXF&93`)3sE(fb"PN&= ,=)hFG)^^$/F )hF7EF^F^ s ) ,=)^9,)ZF^>fb:/{f/,9>FZ)=,
" ]HF^FG
FZ
std :: cout < < a < < " ^8 = " < < b * b < < " .\ n"
a1sE.)FT HF
s9) FG)G/ {sE`$/,F^.)>+F )9/?
_
E>)T) b 93
<<
T)9/a)o'78E>/39F/“ s9,=)X-_)^9>_)`F 1'7 /FG '&^)
/FD+F^^)`,=)DPN
a+b+c
)^9:
=sE`$,9FG /33)
FXF^F^1`>N)fb H'7!3M’ )Z>fb 9$fb )
“
(a + b) + c
a + (b + c)
FGE>`P
'X` f/N)7'7")3{
de_6hY"Y 1F^,`F^^)`>,)^Fk^&/F^!('73 3>4) fb3 `,=)^):",= )Z`3Z'X )
)F^F> k,=)D6hY YzE:)Fh^! >/r)X/FGF^1`)fb 1F^ '7 fb ) 19(' )
<`$/ ^)FG<F ’93>h) ,93>FI)/3) $/.P ) F^^)`,=)$
93
^ D0S/6{,+.<.QQ<1q+01"F& {$/ )9)D)^9+smOfb :]1F^F^?F
gh.E>)F
>>
<<
`/ O)^9>F^ 3a/FZPNO'&F
((( std :: cout < < a ) < < " ^8 = " ) < < b * b ) < < " .\ n"
Z>`$/E)9)7) 9:FG)7:]19^F^F^
FZ/f//,DPN:^ )^ ) FG)/ std::cout << a
393 ,)G ,=)TFG)G$/-"%&` E)FT:]1F^F^?F^>GfbF /F b WFG) E>93 PN )+:]1)
,=)>&`8EF^)^ ]HF^FG
93-FG8{7gh!PN, :]1F (std::cout << a) << "^8 = "
F^ )>^PN_,=)^9,)^F!)8f,F P +[ :]HFGF^F.1``,=^^-/P)>+F^
P P)
<<
)a)$
g79 )^FG)!P )^9>F^:]H>F^F^F 3F 'X )
'X` `13F s \n
†e>'&g ‡:
2.1.14 Statements
GF )))XF& s /F^`"s ,399.s91`P 6ZY Y~ 93 )ZEF^F^ s 9/FD :lm`>)
g794>l `>) 3>m39Fr")^9 / FG))4/3 _):N/ F '&!)4FG))>){F ,sJ/<C) VXFk'&)8 ]HF^FGF '7XF^$ )9) "FG))>) )J
!. F^>)= V FG))^)n,F^,9/ 3F
'X ) FG`?/3 >FG)F. GFG)> aP )+9^/-_\)O))F ^ :]H`,=)3 ) e)^ esE)^)^ 3>$ g7+FG9G)FG)DEFGF^s9 FG)))DF&)^9 =C[Š./2+<'I<M `F^FI)
aP ) F^`M
“m)D9/FD_>l `>)$!de? )o19`/ / FG)XFI))>)FD>f//,9)^
"ZF^>fb:/ ]HF^FGF
VzFG))>)DF )D>FG)^`:)3 )^
. P4F^,=``>13
“r ).`)G^ m/39s9)o
P) 1,F )s$ ,= FG))^)^F")FG>fb>/kF P `13_g78`89> >F
)F^79 s HF /F T/Fx'773T9)x9,=) )z) ,=$/FG Os /`Fx b +)^9733
P .9/
de
=)> O )^^ 13FZP FI))>)F
power8.C
V
& ]av ;A
V&E3 F^` ) :]HFGF^y$/3F+) / : ]1F^F^
Expression statement.
FG)O))$ d )+>f,9)F.) ]HF^FG|s9,=) 31>F )+_ b_,F^PZ)F f, h
g F+F+
P ,)&PN P FG))>)F =/3a ,ZF^_/m9^/ )^9 FG)O))
b = b * b;
/F '7/Fn/=FI))>)FxFG)^)D'X )
std::cin
std::cout
OZ ]HF^FG8FG)O))F
\1,` "FG)O))k)^39,`>F !
>' 'I ) ) &/- ghF
Declaration statement.
`$/ sE )^9 9/TPx f ONs9TPx.fb
)vE b ) "3`) GF )))F
int a;
/3
int b = a * a;
V 3`N) FG)O)) `F^FG)+PZ )J/!U:/+012 /35-``,3-F^`{ de|,=
c
/
='7"3$r'&) Fd:!1qY;gD 39>`NO)F<“1)>
`$sE P )"PN^
power8.C
'X>^ F+ )o1m *F+)
9/_PZ)
9:'Jf/s9 n/3
F /|Gf/,9_P&)oE
p Vtf/s9 3`) F 3l >) P ]HF^FGM“4PN. ]/89 r)!`$/ 1``>,+O)
FGE>`W9`!9N/`>F&b k,)Z'X )&1``,=F m)&sm9$fb>FDb -:]HFGF^ a) F^F^ )^ O)
.39>`NO)
/F^ 9/Fh/a>l `>)D93.f//,4d )Fh>l `>)XFh) /1`$)^D^8PNh) 9:'
f/Ns9&)7F^&/33^F^F /3) 1"=1001q+Z1 + ) '&)8)Xf//,XP
HPEF^)$nd )Fkf//,
F )X>F^,) f//,DPr)^9D>' f^Ns9 g7D39>`NO)F F3
)^ )J )Df^Ns9
VXF )X`$/F^&PE:]HFGF^FG)O))F "3`NO) FG))>)n`$^^Fk,=)n)&>l `>)
P )^9"3`N) /3>FZ)^F7f//,
Return statement.
\1,` .FI))>)hFhP ) PN
M“
'X>^
F / Gf/,9/.d )! ``,=FT'X) PN,`>){.g79.>)^,^?FG)O))
>f//,9)>F W9F^F )8PN,9`:)M’BF"`89,))F r/3 9,=)F
t’ F!f//,
)nF^`† )8m^Y‡ /33^F^F )9)n)^9h`$/>4P )ZPN,9`>)^ `$/``>F^F4V&s9FG)^/`:)TP
)F^ )``$/ )F '7"FG89F
)9)7)"FG))) :<!0C:!M. ) ) `$/>$
return
89fb FG 9 :]8 F^P !) FG))>)
>),=F")^9+f,
return 0;
†ePN_ )+)> 0 P4f//, 0 ‡Z)) E>)FG1FG) 'X` 9/ FD`$/3-) main
0
PN,`>) P ,=Z-
& 6 v
;b0
,= F^,_^ Fx)DFG1)/`:)`$/ /3_F^_/)`$/=):Fk'7X9fbD)G13,`3H
'X )5)>N)F h
g aW9,=-899/F^ F )a`>)^X)9)8:]HFGF^F $|
6hY"Y +$,
- *.
()
#$
%$
&'"
*
$
&'
!"#
Figure 2:
8=V+M2J!012,+)z.Q/'AM012,+=<:!'E.W!LYL=,:!1[7NK1[„C: :g.<=LM:</N:/'

power8.C
_vh:<!ZV .Q<'AM01q+<:!'j.G!LYL7:B1" uv5&10/-LMC:<!ZV ./V+M2J!012,+4<:!'E.X1[x)Y:g‚
N:/VJ ‰ 1Us$)<:!'j.j:<j):/ux1[@~1 N5YaN:/VJB8Z1q)|:!:/u.
:/3O;<
→B
:<Y)„+.
5C+. g-uv5&10DG.QZ1q) Z1[!.z1" 657?,sgLM:<!././12|L7:gA`'I
,y65C+R657
LYL=<:B<:!A
' 10.X'IB:<]NY<<:/+465C657B u`<:^Q
2.1.15 The first program revisited
ed P{b, , )^9D ]=`,=)Os TW9X^F^,) PJMx/pTPNZ ` ,=9TP =9,=) f//,F Hb,
'X 1,`1+9)^` )9)4F^>)TF '73{=n:]8 )
7 )PNzP )^9Z/,=)F
) PN('X.9EF Compute a ^8 for a =? 15
15^8 = -1732076671.
& ]av ;R
CXs1fH,9FG ) ) EO'7:TPn mF^)fb!1,+sm>T`$/)XsE.b) fb mF^'X9)TFX
? !'&{3F^`,F^F&)^9F&-3>) a) :]H)DFG`>)s9,)&)!F^^)D ]H9N/9)aFZ)^ O)
)a)o1E
`$/9 3$/&'&)y1,.sE>F8,=) `>^)/F^ wdePT)-_)_)^`$/
int
FG,9 ) Pr!`89,=)) :]=`>3Fh)^9FkF^ 1) 6hY"Y*F^,) '&9`F^F^ 3lm>7P^})
_)_O)`$/FG,9 )$
ghF"F^,39F! b.s 3 9:'X<F “4/P):./ F") ./*!5 _s a1,.sE> /3 Pk'78`/ 158
).>fb `89,)^ 'X ) 1,+sm>F P7)F F^ x'X9) `/ '7`>8 ,=)8)./N}gh13
>'XF F )9) )8s9iF $/FG )^ W=]m gh_/,=)F 9fb89)3?)vE`$/3
)9) F `$ s9XP{3$/!'X)^)>>F P :
;!100::!V F^ W
†e,= ) )^9D> ifm::integer
^ )^F PE`,=F^! ‡: &F^")^9F4)o1m&F4fb>^8/FG H938)^9FnFn&P ) b:8FG)^^)FkP
6hY"Y '7 F^89
9fb!)8>9N`
s1
,=&/ /3- /33)
int
ifm::integer
`,3D)"3>W9) Pr)">' )o1E/k%&:!F7)"/``38` 9/3 9^/-
Á
Ã
// Program : power8_exact.C
// Raise a number to the eighth power ,
// using integers of arbitrary size
# include < iostream >
# include " integer .h"
Â
Á
Ã
Á©Â
Á
Á©Á
int main ()
{
// input
std :: cout < < " Compute a ^8 for a =? ";
ifm :: integer a;
std :: cin > > a;
// computation
ifm :: integer b = a * a ; // b = a ^2
b = b * b;
// b = a ^4
// output b * b , i .e . , a ^8
std :: cout < < a < < " ^8 = " < < b * b < < " .\ n";
return 0;
}
LM:</N. YL=u`<:Tm ,sJJ<2 Ž
Program 3:
de|3>+PN+)F ) `89 b,|3 ) 9fb)W b,.'7 1
integer.h
3`:)^† ) 9T)9)Z/FG `)/F
:
‡
power8_exact.C
&F^.) smOfbT/ 1b, `>8 ,=)D) `^>`>)&f//, P
158
Compute a ^8 for a =? 15
15^8 = 2562890625.
k,=)XF^+
,`NO>hf/,9>Fh'& '7
†eP
b,a9E ) sE )>FI)3a
)‡
& 6 v
;b@
Compute a ^8 for a =? 1234567
1234567^8 = 5396563761318393964062660689603780554533710504641.
'&{)X3F^`,F^FZ)!)o1E
/PN,=^)>Da)^9FZsE m93a)^9:
’BF&9
ifm::integer
3aPNh) HF^`T)xuv,FG)7'7 HF7b
e:]=`>>)h)^ O)7)731Fh)7 fbT)TF^ T ))F
†
int
P
: k,=)"'&>fb> b, 3x†e / :]H>`FG `9/g‡T>"1,.sE>F rb, ‡
int
P ) ,F^ ) )oE
ifm::integer
2.1.16 Details
gh>_F+'h P7'&)^-`)^F")9)+^
)+ )3?) _P
Commenting.
`39/XVX):]H)X`F^3 s1
†eFI)^)DP `>),‡ /3 */ †e>93 P `),‡ FX3
/*
s1?)8`89> g7)N4`>)"P ,= 9^/
`,3 /F^-9$fb8sm
power8.C
'&^)^)/F
/*
Program : power8 . C
Raise a number to the power 8.
*/
g 9F `9/F^ _?F^ ,F^PN, PN.> `>)F"FG /-F^>fb> F P7`39 7
s9,=) )Ts9> F )9) b,
39+)73N)^ `>9 X_)T339&PrF^,` `FG)^^,9`:) /FT`) 7b,?/'hHFD9fb )_1 aPN )^9.`F^
/3
)sE
/*
*/
F^,=
\1>)>F /3
O",F^>3aPN&fb>GF^^)Z`)F 'X )_FhP `39 9bT
/*
*/
c = a + /* don ’t subtract ! */ b;
=Z^$/39s9)o8^$/F^F ='7
39 )X/3=fb`$)T)F H
3 P `) 1 )>$
CT`>`$/F^9/ $ PN+6ZY Y `13.`)/F G3)^
Identifiers starting with an underscore.
W9>F FI)^)9"'X)8)^9&,93>FG`D`9/`>)^> =/ ),9 )FkFk9) /('73/`>`3!)
_
SD>W9)-4g7X)^,=)_Fk)9) 6579LM:</N:/'^'I<: F )7/O'738)^ ,9FG FG,9` G3)^W9>F Y“
)> _FG>^fb3yPN8)>^ ,9FG s1 )
`89> 6789>F F^,3|F^F^,O) /FG) 'h H'&9>a)>3FG`Ofb:XF^,` +s /3
PN3 G3) W : Hs9,)ZP)a)^9: uv,FG)X>)& )
/F^F
de 6ZY Y )!F 13 >k/`>)` )-3>W9 f/NOs Define variables where needed!
3NO)TsEPN^Z) Fn,F^3 )7WFI)n) g77^$/39s9)o!PmD9^/ 8(fbF P PN
/ f/NOs h)9)kE$OFk F^&:]1F^F^ b)&`>^FGm93 3>W9) Fn$^s8/3
`$/ ` sm8PN,93 ,9` 1b_g79F ,3.F! `)^/FG) )F^ )>!9^/
N/,9//F “xPN.:]/89 6z/4f^Ns9F" fb8) sE3`N^3 )!)8sE>99 P )
PN,`>)
'X> )> ,9FG3{
& ]av ;K
g7
PN,`>) F!/ ]=`>) 4PN,`>) F^:fb>/4'h$1FCD
The main function.
main
^)`,NrFGE`>N/)o F{)9) )^94>),= FI))>) `$/ sEn)^)3{{V
PN,`>)!'&),=)
main
":),=_FG))>) ) )X3sE9fbF `>F^8/F PE )k'7,33_'X)
4ghF
return 0;
3>W9) 9/F.sE5_39PN FG)^`$/k^$/F^F+FG)C“k).F+/5/_/ `8 3 )
)>kPN,9`>)^a
F † '&9` 'XHsmX3F^`,F^F^>3N)> ‡: gh>^PN '7XFG)`+)!)Z:]H9`>) >),=
FG)O))&93/F b,) 39+)"F^/
d )&FZEFGF^s9T)fb3 /
9^>W=]=F&)^^,9-!/339 )9/E P
Using directives.
std::
)1[:<!01[Fd dea`$F^!P
`39 =)F7'7,3
1 _b"M ^/cA=
using
power8.C
Á
Ã
// Program : power8 .C
// Raise a number to the eighth power .
# include < iostream >
Â
Á
Ã
Á©Â
Á
Á©Á
using namespace std ;
int main ()
{
// input
cout < < " Compute x ^8 for x =? ";
int a;
cin > > a;
// computation
int b = a * a ; // b = a ^2
b = b * b;
// b = a ^4
// output b * b , i .e . , a ^8
cout < < a < < " ^8 = " < < b * b < < " .\ n ";
return 0;
}
gh
LM:</N. YL7uR/:Tm C./1[7Nd Ž
using
Program 4:
3^`>)fb Fh.39>`NO)
FG))>)hP ) PN
using namespace
“
d ) /O'&F&,FX)_,F^+/ PN),=FTP 9/FI `
'X),=) ,9/P1 ) )=,-)
X
>W=]
xg7F `9/F^wF^>F 1,)^k9PN,1O) WFG)xFG) Os9,) ) 9/F F^>fb>^ 3$'Zs /`HF
X::
)9)7>fb)X,F&P^ ,F^†e>)Z/9 /3=fb`$)+‡ )h
)F sE1 qr:!) ’BFrFG)G) '&)T)n_/uv{3='&s /`m &/FI `F{_T fbnh 1,.sE>rP1PN$O),=F
†e8 G)`,N b)^9Z9/FG /` std 9/F ‡ '&)!&,+sE:kPE9/F> cin /3 cout )o'78F^,` F&PJ) 9/FG /`>
hd )DFZfb:^a3 `,c
) † 93a/F^8)&39>F^s9!‡ )
std
v
& 6 ;U
H('z/r)F^
fb3` 9
`>)F
/F>TCT ) )>T9/3m) u`CD) sE 13-) 19(' ) 3>D)
9
'X ) )&9/>F u` )^3,9`> = :]8 bP '7&3>W9X f^Ns9h 3
F^>'&9:x MxwA ('7nn/F H9hPNr)^,=s9 m'X"'74)>r,F^ )n:]1F^F^
cout
)ZFh)&`$&'&>)>Z)7PN>FZ) ) FG)/393a,=)^9,=)ZFG)^$ =Z) ,=&f/Ns9/
cout
`/ /F^ fb3 ) f^Ns9 9/
P`,=F^ s9,=)x'7 _ /`>`3)/")G13,`
cout
/)>& T)^ O)D/FG8E$OF& )!9/FG /`>
7gh",9PN^)^,99)^!`F^ ,` F
std
)9). F^ ]HF^FG|P7,=.9^/ )F 9/ ) >PN>.) )^9PN),='7
)^13,`
3 s9,=)X)
8PN$O),=.P )^9 F^/ 9/ P )^9 FI)/393 s^bZ _a3
,= F^>)
,F^ PN$)^,^ P )^9"FG)/393-s^)9)h'7 3M
’ )Z>fb H(' 93a)^ O)
'7 >fb: )^39>3 )a,F^
g79+F^,)^FG)^/ sE9fH!P ,=!/ `/ sE fb:^
3 8`>,9 )h)^ )^` 3('X{
de ) 9/9/
=)^13,`+ 9/ cout †eZ/_)>h T/F^
power8.C
E$O 9/FI `
‡n31F ) `/,F^D/9 '&),=)n) std:: ,9/W9`$)^ std
)h`$/9:fb> ^/`>`3)/ .^PN>&)^ F^>)^99.Pc) FG)/393 s^b
%&>
F.) FG`353='&s /` P
3`:)fbF VJN `)F+_
using
9/F /3 3>")
b: )G/` P ) F"3F^Os +)9) )89/ I)F ,F!'&> )
`FnP Fk) Z'7X9fbX)^13,`
3 31Fk) `ZP "s^=dePEF^ P
'X` 9$a)^
3`>)^fbF ='7 F^D)9)hPN_) $/ )9)7)T/
using
sE`>F7F^Fh$/39s9 /3aT3 `,) ) _){
2.1.17 Goals
V7)7)F7E) 1
b,aFG9,3?
Dispositional.
g‡,93>^FG)/3|)_s /F^`_FG1)/`:)`$/h/35FG_/)^`$/k)^>F.P+6ZY Y LM:<!.<./1q <L=<:/+: .<2+<'A<M ZFd+Z :!Fd+Z Z10/:/+ /3 Fd:!1 Y;gD “
‡,93>^FG)/3aFG1)(]a93F^_/)`F7P )^9T/ power8.C Operational.
s{
G)`,N
de ^)`,N b,-F^,93 sE"s9D)>$
†o+g‡_3FG`>sE
^) 9 s /F^` FGH)/`>)^`$/x93 F^_)`/ ):FXPT6hY"Y
b,=ZO'&'73F&93fb" ]/89F/“
† /FDFI)3
sE(fbg‡&
†o ‡)^m'X>)^9:X.fba`9`>)>ZF^ ,9>9`> FZ/3)W9>!“
†o ;
‡ )^m'X>)^9:X.fba`9`>)>ZF^ ,9>9`> FZ+F^8 X:]H>F^F^9/F&3>W93sm('c“
†oTA+
‡ W93,=)h'X>)>&.fbaF^8 X:]H>F^F^-Fh/f, &/Gf/,9Q“
†o"0_
‡ :f/, O) +fb>aF^89D:]1F^F^t“
†o R
‡ ^$/3-/3'Z)DF 'X) PN,9`:)9/)o F^NO ) power8.C V ./1"'KLtDO,sgLM:<<.<./12 F. ]HF^FG '&` fbfb>F
e):/F 3) W :F
int
s 9^_+,)9`) 9
E>)^ H)!F^F^)Zm>) =/3 )F^F>
)
& ]av Ab#
2.1.18 Exercises
ƒ 5&1q!5„ S\657SQ[Du1[7N !5C:J!<:z.T * </!.3:<X ŽR] 1q)J/M01 <:g./-)
uv5&V?
o†  ‡
i;o
i/2o
i)!o
i!o
identifier
int
x_i
i/2o
iS o
i N<o
i25Qo 4x__
Exercise 1
A99_
_tmp
T#
x12b
ƒ &5 1q!5? S9657ST[Duv1"7N3!5C:/J<<:\.T *</!.c:< Ž`K ,sgLM:<<.<./12M.-f)
uv5&V? ˆ <:</- ) :<]Fd:!1qY;! !. SX0V L7

†o";‡
a
b
int
i!o
i;o
i/2o
i)!o
i/2o 1*(2*3)
i S o a=(b=5) iqN<o 1=a
i5Qo (a=1)
Exercise 2
(a=5)*(b=7)
(1
(a=b)*(b=5)
(a*3)=(b+5)
:I+" S^657I,sgLM:<!././12M.^65C+\Vh 5CF&^1q)J<M01 ) 1" … sJ<:<<1[.Q Y -K)J<1q)J
uv57!657<:3657<.Q^:<B~F+~*!.:K:!Fd+Z !./-)I,sgLtU1[ V$C:)J/<1[./12M. 
†oTA+‡
Exercise 3
> !/:!'j1[ 657jFd+~*!.A S^657O,s!LM:<!.<./1qM.E65C+cV$5CF&j1q)J<M01 ) 1[ … s{
3
<:</10.Q ) sgLtD1" 57u 657!.Q Fd+Z <.:/ &;!21[)Y ƒ 5&12!5 S|657!.T„F+~*!. :<
CM. L=/<1 )O)I657/:<0SQ:/zP;<)J!<:!'^1[)EC=1 !ZV
†o"0‡
Exercise 4
ƒ 5C+`10.3657^./'A+" <.<+0C:/+Š=h'A;/<:E65C+`10.j)1"F
10./1 ;gDE;!V +[=C';<<:g.?;<!{
o†  R‡
Exercise 5
0u`/< )
2
‡ $# sC‡ # `g‡ ;# g79TFG,9 )&FZ/FG 19('Xa/Fh)^9 D+.<\'j'A@'jC€01~Lt P )^9TFIE`>) fb!1,.sE>F>
ghF :]=>^`F^a3F8)8 ,b, )?'Z) ks9,) b,y_$ ,F^-
Note:
/Q) b,- ) `89,))F
65C+:<,Y)+.65&:</1"MqNY/:g.
ƒ :!1[cLM:</N:/'
1[&LMCR)I7 LM76.]657<1":PLM:<Qmulthree.C
)*!

a, b, c
ƒ :!1[GLM:</N
:/' power20.C 65C+`:<Y)+.E 1[M NY<:
)OC LM76. 20 7.1[7N+'I./ F&]'j7~01€LtZ12,+012M.T
S/:/' .<2)Y:/)1[&LMC
o†  R‡
Exercise 6
abc
Exercise 7
a
a
S:<' ./2)Y:/)
o†  R‡
> h:!1[7N|}! !0:<=1qE0:/M./'^10.<.12=-`657`SQ" u1[7N Ž`] LM:</N:/' NYN&:g{
W
;gD)Y X.WVh,@.Q<-v657zUVhCNYv'I!./.Q)jLM-9;!CR+a657K.T'AK01"'I<-v.Q'AG<:!:<:g.
NYa1"M0:<Q)*/)|+.Wu`!"D
o†  A+‡,o† "R‡
Exercise 8
# include < iostream > int main []{ int a ; int b; int c; std :: cin > > a ;
cin > > b;c = a * b ; std :: cout < < c *c; return 0;}
‡ )D)T9^/J39('X a '7 PN_)G)3'hb
v
& 6 A
sC‡ 7
g J`>)/9F )o'7 FIH)O] >^F> ] )^9> 3
9)Z31F7)TW]H3
`g‡ g7E† W=]=3h‡D9^/ `>)/9F",9.sE>!P `8EF^ ).:]HFGF^F qrFI)!) / /3 3`39nPNx$/` `8mF^) :]19^F^F^ '&9:)> ) F / ^f//,k f, h`$/
)9)X `8mF^) :]H>F^F^ _
`F^FG)&P 9^_^
:]19^F^F^F 9s9,)X/F^ Px)>
`8mF^)D:]1F^F^9F>
3h‡ 2 9`> )T/Q'X )PN_O)fbD,=)^9,=)ZFG )9)h)hsE`>Fh/F^>h) ,9FG
g‡
VX33
F^F^s9T`>)Fk)^.)^9D?“1FG) )Os 1
)>TF^,3_sE .`>)
) sm.)^ O)&F1Fh'& O)Z)T/c31F>
2.1.19 Challenges
p 57 0.<Du ]'A!657Q)PSQ:/'KLMC01[7N^657G<1"N5Y65GL=u`<: SB„1[M NY<: /,)+.
.Q<Fd< 'j7~01€LtZ12,+012M.T_v:<N:/' kW:< C1":<!.cMZVB65&://<- )Xu`\;<<~1q<F&R65C+65&10.a.<577U)
;<RST+./<:
 p 57NYT+a SG65&10.?!5C+" <7N&^1[.3 ) 7 57u '^ !5GST+./<: 4:,sJ'j{
LtD<-1 S3u` /']LM7657 <1"N5Y65?L=u`<:A Sj
{,)1 N109=h'A;/<:^C./1[7N ;/65„'A!657Q)+./uv5C+vu1[[;/B6573)1 W<:<<B1[ :!hM01['I 4./10,
1"7N000
657K0VgL=
-657hN5&-fu`G=R/:g{
int
:<!6~V /']LM7Bu1[65
{,)1"N
10=C'A;/<:g.ji,+.XV$ u10[ ,+./10ZV?012zuv57<@V$ ./2:g
10, 000
uv1[65.Q'I/u
5C+XU:2NY<:1[&LMC6./-W.Q 8/!01q 7[k&0k o& : 65&10.E:<,+.Q=-XVh
power8.C
.<57CD)^7.QK657K0V L=
ST:BV$C:/']LM72+012M. 
ifm::integer
)
65C+9/'KLMCW6573<1 N5Y65
ƒ :!10X0u`cLM:</N:'E./L=u`<: S^x1[M NY<:^uv1[65 power8_slow.C
) '^7~01€LtZ12+power8_fast.C
01qM./-9:<<.qL=/<01[F&!ZVxi/F&/:j657?,sYJ!P0VgL=
od 8=1"/„uR 7 uM3y'A+./h:< :!CM01['A!./-j657<:< .<577U) ;<„w7 LM7
ifm::integer
i2V$ )J % BuM3@:/Y)x100-^=VuVgo& # :/)J<:OH;< Y;gDO 7.QI657O.T'AOU:2NY
1[&LMC6.ST:j;<65jLM:<N:/'E.-a1091[.;/< <1 + 5CF&B657\LM:</N
:/'E.z:<,Y)657z1[&LMC S/:/'
T : ,sJ'KLtD<-`1 SBVh5CFdE D
u1065x/M<M6.
-Vh
!"Š657WLM:</N:'
:<,Ypower8.dat
)I1[6.z1[&LMC4S:<' 65&1[. ?;!1234567
VI.<2:g01[7N1[`u1[65
power8_exact.C
657j'j')
Exercise 9
./ power8_exact < power8 . dat
Bu 65C+XV$w5CF&|;<65|LM:</N:/'j./-j/:<+„ 1"&LM7 -) [v10
u1065U:2NY<:|)„U:2NY<: =h'A;</:g.Oi/J<501['IA)J*;gZ1[7N 657j=Cpower8.dat
'A;/<: S)1 N106.-fSQ:O s{
'KLtD2o& p 57< 'I+.C:<„657„01['A!.|2+‚d< ;!V ,J!5 SO657 LM://N:/'j.
)
657!.QK1[&LMC6.T @./1[']Lt~VO)Jj65&10.X7./1"7NjV$power8_slow.C
C:Ku`+<5i SQ:
./ <power8_fast.C
12/M6~V„'A=V)1"N
106.;/65ILM:</N:'E.Eu10";/?.<Du <hN5Qo
-B:?V$},}.<2:gW657
LM:</N
:/'E.K~1[‚dz65&1[.
time ./ power8_fast < power8 . dat
u 10[:!h657\LM:<N:/' )I S<<:!u:/)+.jC LM7657z=C';<<:? S].Q/)+.
p &5 10.G/'j') 65C+a1[a
‚Ai657 g: ./=C';<<:!-657j^<)1[7N^1[ -v1[.X657B:<!D<FdMcqo&
u
& ]av A
ƒ 5C+R)JVh&;g.T<:!F& A# . power8_fast.C :<C)E0u12/+. ST+.<+. power8_slow.C
i65&1[. 1[.uv5C+]Vh '^1"N5Yj sgL=/<9S/:<' 657=C'A;/<:@ S 'jC€01~Lt~1q+01qM.qo e`: )J Vh
&;g.Q/:!F&O .qL=)+L S J!:O)1 W/:<<MS/:<' R) 10.j65&1[.\STJ<: .<2Y;gDI+.E657E1"&LM7
=C';<<:g.XNY!9U:2NY/:
ƒ 5C+<F&<:3V$&;g.Q<:!Fd<-a0:!VA,sgLtU1[ V$C:^&;g.Q<:!F+012M.
;<„657„./'A+" <.<3=C'A;/<: SA'jC€01~Lt~1q+012M. 65C+E:<„/,)J)H1"
‹ !
`(n)
:/)J<:A /'KLMC 657 {q65 L7uR/: n SA 1"MqNY<: y8=1"/
'Vy)J2L=/)
n
a
a
`(n)
uv5C+*u`R/M./1 )J<:R+.9 2/']LM72+012 g-*u`v'A+‚d
u`![~{,)J )B;<VW:<!.<0:!1q!01[7Ncc657
SQ" u1"7N‚Q1[) SB'KLMC2+012M.T ‹ !
)J<]`(n)
657W1"&LM7 =C';<<:  'KLMC2+012
/M.10.<6. S .<2Lt./-Ruv57<:< 10..Q'Aa0+0h:/+ =C';<<:!-])|.<2L a
5C+.^657
t
t
i, 1 i t
SQ:!'
Exercise 10
ai = a j * a k
u1065
 p 573/']LM72+012|1[.B/:!://!v1 S
65&:<3j,.<k2<
Lt.i i65&:<z'jC€01~Lt~1q+012M. o+.X1[
 :G,sJ']Lt /- /'KLMC
8
a t = an
-vu`^@C.QB657^/']LM72+012 a
power8.C
a1 = a 0 * a 0
a2 = a 1 * a 1
a3 = a 2 * a 2
Bu10.c)J ,)E+.`657c./'+[D!.< F+~*K S
/']LM7`(n)
2+01qjSQ: n 
t
1[
./*!565C+Š657<:/z,s+1[.<6.X^/:!://! {2.<2L
t
a
!o@# 657^Y;<FdB'IT)J! S3/'KLMC2+012=-LM:<F&B65C+ SQ:+[
λ(n)
`(n)
n
1
-
λ(n) + ν(n) − 1,
uv57<:<
1[.E !./.365C657=C';<<: S3./1 N=1 ,M];!1[6.E S 1"657?;!1":!V
λ(n)
:<qLM:<!.Q<M2+01q S i.Q/B8/!01q 7 7 m o-)
1[.B6573=h'A;<n/: Sk% .]1[ 657
n
ν(n)
;!1":!V :/2LM:<!.Q/M2+012 S  4:| sJ'KLtD<-X657I;!1":!V :/2LM:<!.Q/M2+012 S
1[.
n
20
-9)?57<
)
-:<!.7~01[7NE1"

λ(20) = 4
10100
ν(20) = 2
`(n)
5
;o … 10657<:LM:<F&c65C+Š657\LYL7<:K;/C)31" ! oK10.W+~uV.];<<.<*L=.<.1q;gD<-v:
. !565C+

n
`(n ) < λ(n ) + ν(n ) − 1
)EBFd+~*
& & Ab;
2.2 Integers
>W12jNd < +5Y <w5C+B)J/:AZ12T;<]6cNY/'AJ!5Y0-z+" !.)J<:<
10./ ‰ <M.Q<57<=u`<:g‚
://!‚d/:!-91[ ?D/!0h:<3E657Bbc<:gZ1[<:
‹ <L=D) X
K+0h:6SQ:g.Q<57<:g{ <:g.T'^'EZC7NAi/kmYmCn/o
)
ST:j:<2LM:/!.Q<M01"7N
p 5&10.G.Q!012 )1[.Q<C.<.Q!.3657j0V L=<.
1"MqNY<:g.3)^+0C:/+ =h'A;/<:g./- :<!. int
L=/!01"F&!ZV$unsigned
 Iuv1[[*int,:!@57u <Fd+Z7{
+z:!1[65&'I!01q3,sgLM:<!././12M.BFd<:3;<65 0V L7!.TEu10"4+~.Q3C)J/:g.<2)^657
Z1['^102+012M.3 SX657!.TB0VgL=!./-) w:<<D+,)?E65&1[.}57u 657/1[:BF+~*!.3y;/
:<qLM:<!.Q<M,)1[@657^/']LM7<:7% .]'A<'I:!VJ
% >.FT,= :]H)!6hY"Yt-"d ) F HFT).,9FG>T) 9,=)T8)8m>),=! 3^F
&
6 F^,F /38,=)^9,=)F4)k39>F9^9>)$ g79Z`fb:F^Fn3>W99>38s1+)&PN('X9
PN+,N1
SD>F /=)
Á
Ã
=
9
ST>FX67F^,F
5
+ 32.
// Program : fahrenheit.C
// Convert temperatures from Celsius to Fahrenheit.
# include < iostream >
Â
Á
Ã
int main ()
{
// Input
std :: cout < < " Temperature in degrees Celsius =? ";
int celsius ;
std :: cin > > celsius ;
// Computation and output
std :: cout < < celsius < < " degrees Celsius are "
< < 9 * celsius / 5 + 32 < < " degrees Fahrenheit .\ n";
return 0;
}
LM:<N. ST+5&:/<M57<102 Ž
Program 5:
deP!b, )^^,=)
) / ) =9,)
P(0 3 F-67F^,F &
b,
PN('X9 ,=)^9,=)$
15 degrees Celsius are 59 degrees Fahrenheit.
'&D>)
)
& ]av AA
ghF ,=)^9,=)4Fx9^13,`3 '& ) 7:]19^F^F^ GF ))>) +FhA (0XP )^9 Fh:]=>`,=)3{k%Z>"'7 PN1`>,9FZ) > f,9)
P )
")>)^`X:]19^F^F^
9 * celsius / 5 + 32
.D(01 h
g Fx:]1F^F^ `)/F ) _O^! ]HF^FGF b/3 celsius '&>
9 5 32
F !
f/NOs &PE)o1E
ng7F NP ,3 )9)o1mDF DPE) :!1065&'A!012X0VgL=!.
celsius
int
a6ZY Y.
/3 32 T3`_/ )>/F Pr)vE int H'&)_)7f,F7 Literals of type int. 9 5
3N)> O)nSD`>_/=)^>/F4PE)o1E
`F^FI) P{!F^ 1,`TPE3)F4P
) int
0 9
'X>^&)XWFG) 3)n+,9FI) ) sE 4g79Zf/,9&P "39>`_/9):/Fk)D3`_/1,+sm>
0
>>F^)^3 s1 ) F^ ,`8P 3)^F g7> a)>FDPN b)^fb ):FB‘4,
`$/>)Zf//,
s_'&)^
=s9,=)h)^9FhF&.`8EF^ )X:]19^F^F^as9,)7P^c)^9 ,9^
−9
-9
F^,=s)^/`:)m>)R
†o\1>`>) 1 1B+
A ‡ /3)^9 )^>/ 9
2.2.1 Associativity and precedence of operators
g79 >f//,9)^ P"/ :]HFGF^ F8)^| N^ ]H))
Ofb>^9>3 s1y) +.<.Q
/1q+01[FQ10012<.
/3 LM:</)J<!. PD)-fbfb3E>O)F deF^^) Z/F^F^`N)^fH)^F /3y>`3`F
3>)>^)-`$Z )F^F
/:]H>F^F^)9)_F) h_9 `89>)> )F^ 3{ -9fb //3=|),`3 F^F^1`>N)f1)o y`9>`>)5'&)5)-,=)^9,=)
E>)h \1`:) 1$;H
6ZY YQ/('XFT`89:)
)F^ >3 :]HFGF^F" 3> ) F^$fb O)^9>F^F O)
s1f1,F /`F g7F F+ b |_)_O)`F 'X>_'7
'Z)
'X '7 $/
3+4 5
x &/F^ '&)^
H:fb),9 )kFn) D`$k'&>)>4)Fn/F
3 + (4 5)
3+4+5
4%&: )^9nuI,FG)^W9`$) Fn)^ O) /33) F +.<.T
<1q+01"F& F^ )k39F
(3 + 4) + 5 3 + (4 + 5)
)&_O)^)> '&9` fON/)Z'7 $/{
gh&`Z) $ PN >F^Fn >)F^>F Fn)^ O)n'7Z fb&)^ H(' ) /N
12+ >)F^>F
k,=) )F Fh 13>)&`> =F^`X)D)o'7 ,F )9)hD,F^>3aFG) P 1,)^
1,)^
),)fb93 $/FI ) ^.sE>$ VXFG )^9:_F./'hHF )^9_) Ph:]H9`) /33
)F^Fh `$/F^Db,-^ )hF^,=T'X>"6hY"Y '7,3_9,=)h)^9>- qr>)h,FhFG)^) '&)_)
)o'7 FGF^)^N/E,FhPND^)>)`Z:]H>F^F^F
,)9`)fbZE>)^FZ9fb
Arithmetic Evaluation Rule 1:
/33) fbDE>)^F
99:Z`>3`")9/
g79":]H>F^F^
fbfbF7)!+,)9`) E>)^ =)"3f1
9 * celsius / 5 + 32
*
F^ E>O) /3?) /33) E>O) +VXx)=> ^+s99^ E:)F> de 6ZY Y
/
+
/F _)_O)`F {)+,9 )9`$O)fb E>)F
/3
9fb 5&1"N57<: `3`_)9/
*
/
) /339 )fbE>)F
/3
/F^ F )9)+ ,) `$) fb+m>)^F ;<1[) +
FG)^^9 )^ y/339 )fb
9>F ghF $/F ,= :]HFGF^ `)/F )^9 `$7 ^ *Q"
.(**
"K*C !
*P-T
6#. -0,
97
I2I- AP*
$&*? ,'.*H 7 -*6> *S*6"J
,4*
/
.*
& & A0
)F^>F
) F a`8EFG) ]HF^FG s9,)!Pi)_/33)
(9 * celsius / 5) + 32
E>)Z/3a)F7E:/3F
/3
9 * celsius / 5
32
k9^
^)>)`&E>)^Fh!P)Z/F^F^`N) fb/
Arithmetic Evaluation Rule 2:
de _)^9>_)`F )r31F 9) _)^)^>{O' )4F^,=s e:]H>F^F^
F{ ) 9 * celsius / 5
F^ 3{k,)4 6hY"Y ) Fx397P D0S< K:!1 N5Y )9) F ) )o'7TP)FG) F^,=s e:]H>F^F^F
.,=E>3 ):)>$ g7FTFT`F^ ,9>9`> P ).P /`>) )9)D) s O^-^)>)`" >O)FD^ 3>W99>3 )^8sE D0S< /F^FG1`NO)fbZgh ]HF^FG
F&)^9:PN
9 * celsius / 5
`/D >)F^ 3 /F
/3.,=x :]1F^F^+9/F )^XsEk$3
(9 * celsius) / 5
/F
((9 * celsius ) / 5) + 32
g7> F_9 FGF^, '7 9fbM’ )
3F^`,F^FG3 b>) Identifying the operators in an expression.
9/.)9) )1 W<:/<M 6hY YwE>)Fn_$ 9fb&) .T'A ) b{= :]=/89 `$/sE
+s99G m>)X/F&
9s9,=)X )&`$ /F^ sm ,9^ E>)&/FX
`-9
3 - 4
-5
Fh$/)Z+,FG)hsE"9PN:^3-PJ)"`>):]1)$ &FG, 1)FhFh`$O 9/3aa`$F^FZ'&>! )
F a
) † s9,) /F^ )> `$/FGF ‡ H ) Fks s9 "133$ ) /33_F^& ]H)^ O)^9>F^F
) _ bD)":]1F^F^aD$/39s9]
†eF^>!/F^ )"SD>)/F F^`>)sE('`‡ qr:) ,F `>9FG3>89)^9: `>9`:>) :]/89 4)
:]H>F^F^
d )+F `>$+)9)
-3 - 4
) WFG)
+,FG)DsE+,99G † )>.FT>P)"9/3 F^3.E>/h
3 ‡ m'&9 ).F^`3 .F
s99^j
† )>T^XE>93F _sE)F^39>F ‡: k,=)7Fk)F ]HF^FG `$/ + ^)FG 3
/F
bn/F (-3) - 4a\1`7'7h:)n3l >)nf//,F +sE)+`$/F^>F '77sE>)G)>4_ b
-(3 - 4)
F^,= )9)7'7 19(' )!9FI'7>$
gh"`^`:)&`$/m )F^F&
(( − 3) − 4),
^F )Xf//,XPE)D:]H>F^F^
F
4ghF PNO'&FkP
-3 - 4 −7
, PNXO)>)`X:]H>F^F^F
&9^_E:)F&Y
Arithmetic Evaluation Rule 3:
) hs99G_`,)>G O^)F
)^9Z)3_FG) 8E^)/)
/3 k
9$fb >h9^`3` )9/
n
, F^A† :]H9`>),‡7 ^)FGF!F m>`3`F"`$/ sm
9 * (celsius + 5) * 32
(fb>^,3{ g >)T).`/ )F^F PN"F^,` G)N/ >)F^ 3? ]HF^FG
'7T9 )^9D,>F PcsE(fb H`F^39: )T//3= )F^ 3 ^)^F /F7E>93F
de) :]8 1)F7$39F7)+)"`$/ >)F^>F
(9 * (celsius + 5)) * 32
gh.SD>)F&FG`>) 3F^`>,9FGF^FDO' )8 )F^ . >/ :]HFGF^ fbf18 s9)^O^6ZY Y E>)^F ,F^+)^9>Z)F H`>39>9`>FD/3aF^F^1`>N)f1)>F
& ]av AbR
2.2.2 Expression trees
ed / `8mF^) :]H>F^F^D)?`$/D )F^Fa3>)^> , 1, I) >fb> E>) 9/> )^9 )^ O).E$^F!'X)^9 F^_/FG)"1,+sm> P )F^F g7
:]19^F^F^*F ) `8EF^)^ ]HF^FGTs9,)
P ) ) e>fb"E>)^a/3*)^F
E>/39F7)9)Z"/b/:]19^F^F^F
gh7`,=FGfb5ZFI)^,`>),=hPm/ :]H>F^F^8`/ `> sE fHFG, 3++)hPN^~P / s{
LM:<!././120:< kde ,=h; ) :]1F^F^ )^>hPN ) :]1F^F^
9 * celsius / 5 + 32
FhF^O'&{
9
*
celsius
/
Á
Ã
9 * celsius
+
32
(9 * celsius) / 5
((9 * celsius) / 5) + 32
Figure 3:
R ,sgLM:<!././12 0:</KSQ:
) 106. D/N1q+ŠL7:</M657!.Q!.
B?.T<F&<
9 * celsius / 5 + 32
 BT)J!.G:/zUY;<!D)XS:<'
((9 * celsius) / 5) + 32
%&(' 3'7 >)D)F&)^^(|g7 :]HFGF^ )F^Px39:W FX)^9 :/
Px) )^^ {/3-)
E>/39FkPm)&) :fb m>)nsE`h)&)!’BF !5&10U):<< 8)^9Z)^424/` m>/3
)yF^>GfbF_/F )^1)PT/)> F^,=s)^9>y'7 $/` _^ ]HF^FGh )
3>W9F& D S ) )G ='X ) PN,=^)^9:&`3={
2.2.3 Evaluating expressions
H
/ :]HFGF^ )G'7_`$/ $/F^ $/3 l )8EF^F^ s <Fd+Z*+012 .Q <!. PN
) )>)`_:]19^F^F^{ \1,` F^ 1,`-`>)/9F8/&FG,s e:]HFGF^F1``>,G ) )^> m3>>3 sa)Z)!P >f//,9)^{ =D)FZF^ 1,` )sE"f/3 '7 9fb )
_ b+F^,= )9) '78>f//,9)^8/ ]HF^FG 9 S/<: ) :]1F^F^9F!`^FIE399
)
+[ )FZ`3=>9fb"sE>->f,9)3{
n H+) ,=!; )^9FhsE>`F7`$O 4smPN
>f//,9)9
E'7+9$fb.)
>f//,9)
/3
)>G'XF^ m'7 3M ’ ) 9fb
9 * celsius
9
celsius
,aPN_)^8) m>PNc)":f/, O){
9> '7&F^F^1`>N) )h>f//,9)+F^ ,`h'&).)Z`>^FGm93TF^ ,`&P 93F
.) )^ &f//3 13 F^ 1,` <L= N12,+[ZV3.Q:g6. ) )^> ghFx/F )9)4/ 13
)^9hF^ ,`X1`>`,=Fk+/P)^> /=)F4` 3^89fb&1`>`,=^3{ de ,^X; bPN :]=/89 ) 13"F^ 1,`
3,`FD.f/3a>f//,9)aF^ ,9>9`>&VXFGF^,+)9)
(1, 2, 5, 3, 6, 4, 7)
& & A@
)Zf/s9
Fkf,
b'7&s)/ )&PNO'& :f/, O)8F^ 1,`v† de$/`
celsius
15
FG): =) F^,=s :]19^F^F^ a)^ sE >f// ,9)3 :]H)&F7_ b3
s1+F^,=^^,93.sE(]m ‡
9 * celsius / 5 + 32
−→1
9
−→6
celsius
0 Y
9 * 15
Y ;
135 5
Y ;
135 / 5
Y
27
32
−→4
27 + 32
−→2
−→5
−→3
0 Y
;
;
−→7 59
g F^ ,9>9`>
h
F 9)^9:+f//3 39_F^ 1,` n39,`9 a3l >)
(1, 2, 3, 4, 5, 6, 7)
>f//,9)F^ 1,`Q“)^9D>F^,) f//,DP
F )DF/4g7>TT+,` _&>f,9 59
) F^ ,9>9`>F 9P `,=F^ /3 )hFZ,FGE>`W93 s )^9!6hY"Y FG)939^3 'X` 9 F )+sE
,F^3{
de , F^_/ :]=/89 4mF^F^s9 >f,9) FG 1,`F '&xF^,)! f,
s9,=)
59
).F+/F^ 9)+93 ) '&)^39('X :]H>F^F^F 'XF^f//,F /3|>l `>)F+3>E3| )
i N<o 72 ]=>`>F^ $; i5Qo /3y)^9aST:)/F
>f//,9)5F^ ,9>9`> sm `F^w
†eF^ 2 ]=:`F^
F^`:)?sE>O
' ‡: Vz9^/ )9) `)/FTF^,` :]H>F^F^ )T:]H9 s )",FGE>`W93
sE9fH$ k,=)8)=,y113 FG)o1 7)F8F^FG,9-F$/FG5)^ fb
3 7F^`- )
)o19`$8_``,=F7'X 9D)^^F )+F 1, ") +,` PN,9`:)9/)o )+ F^D
P `>13
2.2.4 Arithmetic operators on the type int
de ) h9^/
b'7&9fbX/^$/3=.`,):3)Z+,)9`$)fbnE>O)F
fahrenheit.C
/3 /F '7EF7)^9Ds99^8/33)_E>) 4d )F7s1f1,F `,)>G O^)hF )Ds O^
*
/
+
F^,=s)^/`:)m>) g s9 FG)F&)>)^`TE>)^c
F † /3-) 3> fb3 +././1"N='A<MW<L=<:/+:g. ‡h)9)TO
fNs9ZPN )X)vE
1'X)^8)7^)F `>39>9`>F&93
/FGF^1`)f1)F> g79T`>),9/
int
1,.sE>Fh)9)DO9m$Xa)"`>39>9`> `,-!9)Z:f/) )&FZ) :/)J<: /
`>39>9`>F&)9)h_)^)^>F
qr:) ,F.3F^`,F^F.)_PN,9`>)^9/)F P7)F^
E>)^F. ),=
'X> /3
* +
F^P :]1 /9)^b k,=)X$/3=) 3fHFG m>)7 1,FZ.39F^`,F^F^{
The division operator.
F^FG
VX``^399
))+,F P _)_)`F
9 * celsius / 5 + 32
s1_)":]HFGF^
9 / 5 * celsius + 32
'7 `,3?>9N`+)^9 :]
& ]av AbK
Description
EFG) e`>)
EFG) e39>`>)
9^ `>^)
9^ 3`>^)
F^
F^
,) `$)
39 fHF^A
†e):,‡
13,,F
/339 )
F^,=s9)G/`>)
/F^F^)
,)h/FGF^)
39 fF^F^)
13 /F^F^)
/33-/F^F^9>)
F^,=s /F^F^9>)
Table 1:
Operator
++
-++
-+
*
/
%
+
=
*=
/=
%=
+=
-=
Arity
Prec.
(@
(@
$R
$R
$R
$R
A
A
A
$;
$;
A
A
A
A
A
A
Assoc.
P)
P)
^)
^)
^)
^)
P)
P)
P)
P)
P)
^)
^)
^)
^)
^)
^)
P:!1[65&'I!01q)}+././1"N='A<M <L=<:/+:g.GSQ:„657„0V L7
 … J!5w1[<:/<'I<M
int
:I)J<:<<'A<M<L7<:/+: ,sgL=!6.IwZFd+~*Q p 57A/']L=./10I,sgLM:<!././12 1[.
ZFd+~*i LM:<!{q1"<:<<'A<MO) LM:<<{,)J//:<<'I/M o- : :!Fd+Z yi"L=.<6{ 1[<:/<'I<M
) L=.<6{ )J/<:</'I<M o& … J!5H+.<.1"N='A<M<L7<:/+:„,sgL=!6. }ZFd+Z |+.? [S<
<L=<:) ) :!Fd+~* +.A:!1 N5YE<L=<:) ?657@/']L=./1[,sgLM:<!././12 1[.„
ZFd+~*Q \"Š657<:E<L7<:/+:g.K1"=F&ZF&B:!Fd+Z <.MZVO)?5CF&KI W!6.T
& & AbU
'X ),) Olm`>)^)FDf//, /3?) PN,`>)9/)oaPk)./
k,=)!P
fahrenheit.C
'7T,)"c'&)_)")^)>7fb>^F^-P )^9 :]19^F^F^- )"=9,=)hP
39>F
15
6 F^,F H'7 >)h)"PNO'&.,)G ,=) 15 degrees Celsius are 47 degrees Fahrenheit.
g F F^,)F P /^|3l >)P ,=8:fH,FE† 93y`G`>),‡.F^,)P
h
39>F
59
/=) EFG 'X9)TF 9 >( g7 9FI'7> FD)9)D)+s99G-3fHFG E>)^
5) )oE
89)F ) 1"MqNY<:)1"F
10./1q 5_O)_)`>F 39>9)^35s1|39 fm
/
int
g79F 31F )7`^^FGE3_) )X,N 39 fHF^8'X>X) ,9)^) P{)o'7.)>FkF > . )/EO)9/m,9.sE>
g79._39:TPk) ):!3f1F^ `$/?sm s)/3 'X ) )
The modulus operator.
s99^ 'AQ)7Z7. E:) =a_)^9>_)`Fn3)3s 3Ekg7"_O)_)`/9^,9
%
a = (a
3f
b)b + a
3
b
/ FG!3Fn_6ZY Y 4PN :]/89 P /3
^Zf/Ns9>FnP )oE
)hf/,9ZP b sE9
a
b
int
>^ )^9 :]19^F^F^
(a / b ) * b + a % b
9/Fx)7F/ f//,h/F ghh13,,F E>) F `F^3>^38/F4D+,9 )9`$O)fb E>O)
a
/39/Fk)XF^/Z`>3`W†A+‡n93
/FGF^1`)f1)oG†eP),‡4/Fk)X)^9: )o'7 ,)^9`$)^fb
E>)F
/3 *
/
dePZsE)^
/3
9fb_ eb)fb8f//,F n)
9/F+- b) fb8f/,9
/F
a
b
a % b
'7 xghFk89Fx)9)n)X)^> 3f1F^ ^,93F )Ju 8)Fk`$/F^4de4
P † )k$/FI,) ‡nXP
9/F& b)^fb"f//, 9)ZF&89>)O)3>W93a'X>)>&3fHFG ,3F&,= a
b
3O'&{ Z)7)9)4s1+)Z3))o
b)h^,93 137PN 3fHF^
(a / b) * b + a % b
/FG
3>)^>FX).PN,`>)9/ )vP4)^9.39,,FXm>) deP
9/FDf, E) f//,F
b
0
P
/3
O",3>W93{
a / b
a % b
679 s ` |) ,8:]/89I
† /3 ) H9 9^`3`F /3 /F^F^`N) fH)F ) /` `,) ‡ h'7-:)
)^9-PNO'& f//3y>f//,9)^yF^ 1,` PN_,=
/):9)fb 6 FG,F e) /=)h`fb>F^{ 9 / 5 * celsius + 32 −→
−→
−→
−→
1 * celsius + 32
1 * 15 + 32
15 + 32
47
%&>^ '7"F^")^9G>^^ _/3Xs ) )^>Z39 fHF^
8
% 5 OK %"K(7PE.*?7
J
0L I/L*
6# .'(*
-*
/
(/E
I
%*
,S$
+7
M$&.)"
I *
*
$
9 / 5
M"KB
*
9/F7f/,9
-
%7
@K#*
1
/.*6
.
(7.#*
7$&(/
%C !. % J
& ]av 0#
?n9fb / $/3=X),`3!)4, O^
E:) /3")^9Frm>)
Unary additive operators.
31F '&9) :]1E`>)F ) f, P=) `8EF^)^n:]1F^F^ ,s!LM: F )^9 bO)fb P=)
f//, P sgLM: 4gh>7F X,9^
E>) PN4`89>)^F^F ),+ )F GPN,9`:)9/)o +
,sgLM: F7) F/"/Fh)^9 f,"P
Fh e:]=FG) x) f//, P )!`>8EF^)D ]HF^FG
+
,sgLM: 24/` Px)!) bF
/3
FD/F^F^`N)^3a'X)^)o'7
Increment and decrement operators.
-)10./01[! ,9^_m>)^Fh)9)h3l >& `>39>9`> /3-++
/F^FG1`NO)fH )vb
gh. 9`:)
/3 )^9 e3`>>)
) /F^FG1`NO)fb!gh.>lm>`>)!P
++
- sgLM: /3 ,sgLM: F7)^ `>^$/F^]†e3`>/F^ =FIE`>) fbJ‡k)
) `8EF^)^X:]H>F^F^F
++
-f//, P ,sgLM: s1 Xg7
) s9uI>`>)XPN:^3 )8s1 ,sgLM: FZ:),=3{ =X)FZ)^_ b
1
F^F^ ,sgLM: 9/Fn)"sED/f//, ?D/FG!F )^ O)k e`>)kF
LM:< s2+01q ++
/3aF^N PN
-gh
EFG) e`>)
/3|) EFI) 3`>^)
P) /F^F^`N)^fb VXF sE>PN ++
-)8>l `>) P )^9 `8EF^ ).:]HFGF^F ,sgLM:
/3 ,sgLM:
F")a9`:$/F^^
† FIE`>) fb
-3`>/F^g ‡")+f/,9 P ,sgLM: s1
1 x/3 ,sgLM: ++
9/F!)sm/ f//, PN )^9F")'7 m gh
>)^,^|f, k),
kF /|^f//,
`^>FGE3 ) ) U) f//,
P ,sgLM:H;/0SQ:< )
`>>)+ 39>`>).)1 9N/`/ ?a/F^ F^$ )9)+EFG) `>>).F
L=.< s
++
2+012 9/3aFGN^ PN -gh"39 lm>>9`>"sE>)o'7>a)"`>^)hE:)Fh /3mFG)^W=]
)) Fh,F )^O)3a
)"PNO'& :]8 T/-
# include < iostream >
int main () {
int a = 7;
std :: cout < < ++ a < < "\n " ; // outputs 8
std :: cout < < a ++ < < "\n " ; // outputs 8
std :: cout < < a
< < "\n " ; // outputs 9
return 0;
}
`>)h/33`>^)ZE>)Fh F^,=E> ,,F =F^9`> ) PN,`>)9/ )v!`$/+sE $/ 3.s1+`.s 99Z)ZF^F^)xE>O)†o\1`>)^ 1$;‡ 'X )
F7 1,f//)h
f//,
//339 )fbDE>)$4de33=P Fh f^Ns9 1)^9 :]19^F^F^
a
++a
/3y>lm>`>)_) )a:]H>F^F^
g79: F8-F^,=s)>)o ), P ,s!LM: F
,sgLM: F a=`>aF^F+1 ,9 f/) ) ,s!LM:
,sgLM:
> f, gh$F^
++
=
+ 1
,
g
s
M
L
:
F )9) )^9 PN>!:]HFGF^
F">f//,9)3 ` '&+ ) NO)^)> )"F
>f//,9)>3 0u12/ deP sgLM: F&/ >lm>`>) )F7`$/-_ b .39 lm>>9`>
CT ) )> 9/
3 k)F+F^,=s)>)o F+9) ) /F^5'X|9`:) 93 3`:)
E>)F& F^8m ,NOD/3a'X39>,F^>3 6ZY Y.ZVXP)>D/ 9) u`CD) sm $/FG )_fb3
) `>)`/Dgh )^^,)^ F&)9)D`>^)^ T3`>>)9 f/,9>FXs1
^ F^,`
1
P ,)&E>)^Fh )o19`$ 6hY Y `>13 )^ O)&)7 HFhl ) 9fb!F^^)^`,=)FZPNh)-
‘4,__^,9T)9)7)
& & 0H
gh-FG)O))F
93
^-s1fH,9FG
Prefer pre-increment over post-increment.
++i;
i++;
,9 f/) {FT)^9>T>lm>`>) FD)+F^/./3 )^9 f//, Pn)^9.:]1F^F^?FD)T,F^3{\‘4,
`$/_:]H` 9X)^9>t'X )$/`_)>7Gs )^ 'X)^9,=)klm>`>)!)&sm9$f1 PE)XFG, ,3T/- >fb>kb, fb7)F4` `> b,8F^,3 )nPNn)7 9`:)
E>)$ Mx e`>) Fn)&F^89:kE:) sE`$/,F^Z)&f,XP
`/_F^89 sE
++i
$3 l?)!fONs9 &de `>)^FG) )^9 mFG) 9`:)&9/FX) I^.sE> +) 9/
i
f//,"P nVXF7 e`>)hFZFG89> )Z/F^.)3FZ).sE"T 8`)$
i
R/'A:g‚ h'&)^ I e`>>)k)^39F4)!sEZh 8`) sm`$/,F^X8_/+`$F^F
)8`89>T$/ F"'& ) f//,8P7/ ]HF^FG F!) ,F^>3r de F^,` `$/F^ )
`89:D_ ` F^ )FT('X?)_>9N`+)^9 EFI) `>^)T )+F^,=`+`13.s1 I e`>) _?_` N9,9/.F!/ ) O){ %&O'7:fb> {)>+F!Os FG,=)
sE>W)7
` F^.!EFG) e`>>) '&9:T! 9`:) '7,3_39+/F '7e de
)^9F
`$/FG =b,-F^,93 ) bT)Ts ,=3-P^J) `89> /3a) Zs1
b,^F^P VXF^ bEFG) `>>)n/38EFG) 3`>>)kh)&+, O^_6hY"Y*E>)F4)9) O
P)&/F^FG1`NO)fb4g79Fh_ bFh)^9>h,9F^/!O9m$ZF^>'X9)7`>,9)>),) fb
gh/FGF^)"E>)
F f//Ns9.PN.4)oEF FG_\1`>)^
Assignment operators.
=
1$;H k,=)T)>+^ FGm`W9` E>)FD)9)T`.s9!) )>)^`"m>)^FT'&) /
/F^FG)$wg7F^ -)-s99^ E:)F
-= *= /= /3 %= [gh :]19^F^F^
,sgLM:k
,sgLM: 9/FZ)">lm`:)DPx/33 ) f+=
/,9 P ,sgLM: † /aGf/,9!‡ ) )"f//,!P
+=
,sgLM:k † f//,g ‡ ghTs uv`:)h^PN>^>3).s1 ,sgLM:k F ^>),=3{kg7F Fh >/ )
sgLM: F 1,f//)) ,sgLM:
PT)a9^ `>^) )-:]19^F^F^
V&F_smPN ,sgLM:k
,sgLM: F 1,f//) ) ++ sgLM:k
,sgLM:k
sgLM: |+=>1/ FG` )
+=
=
+
N)G)>h:]H>F^F^a:f/, O)F ,sgLM:k )v'&`
ghTE>)F
/3 %= '7 )TF/&P /F^ 1s /F^3 )^9TF^,=s)^`>) -= *= /=
+,9 )9`$O)
3fHFG
H/3a39,,F E:) H^FGE`:)fbb
VX )^9TF^F^) E>)F 9fbD9^`3`TA He 1)> s 93_Z'7$ H 8)9/)
F $/F a=(b*c-d) )>&)^9:)`XE:)F>ng7Fh
F ,)T)^,9 )fb a=b*c-d
2.2.5 Value range
V*fONs9TP )oE
F&F^F^1`>N)3
'X)^ s$,) 1,.sE>hP >^8`>F /3
)>PN
int
/FG+'&)a W=]=31,+sm>hP s9)F =F^$
`$/E)Fh {,;<10:/2LM:<!.Q/M2+012 b
b
\1,` y->>F^)) 89F!)^ O)8/ s uv`:) Ph)vE
`$/ /FGF^, W9) int
_/a3lm:)Tf//,F!\1`+/-s )T`$/ 39:E3) a9fb+)o'7_FG))^F m)._O]= ,
1,.sE>hP ^>F^)s9 f/,9>FZF b 9/3 ) `>),9/mf//, /"Fh3>W93-/F7)"FG>)
2
{−2b−1 , −2b−1 + 1, . . . , −1, 0, 1, . . . , 2b−1 − 1} P b ,9.sE>^FW‘4,
`/ W93 ,=) )^9TF^_FG)k/3
NFI)
f//,F _b,h`89,=)>
2
int
,F^.)" s9^
4gh"`^FIE399+`39 FhfbaaMx/JRH
limits
* ( 7*
*
,6>
%*
/
(/O/
%
*
2
>
"
7
H7 ,
%* R."51
*SBO/
/@BL
% *H
-2*
/
/4J
2
.
R%*6
$
./O
#"
%$&'(
& ]av 0
Á
Ã
Á
Â
// Program : limits .C
// Output the smallest and the largest value of type int .
# include < iostream >
# include < limits >
int main ()
{
std :: cout < <
<<
<<
<<
return 0;
}
" Minimum int value is "
std :: numeric_limits < int >:: min () < < " .\ n"
" Maximum int value is "
std :: numeric_limits < int >:: max () < < " .\ n";
Program 6:
9>_b,8^,9 )Z/
PN('X9 ,=)^9,=)$
limits.C
LM:</N. t~1"'j106.  Ž
_ ; e s9)nFGHFG)^ b,8'&=FG)4b.>)n)
Minimum int value is -2147483648.
Maximum int value is 2147483647.
de3
3 /F
/b, `/.39>39,`n)9) )^9n1,.sE> PHs )F ,F^>3.)^&>FG)
2147483647 = 231 −1
/
f//,h8)FnFIHFG)>}F
xV )k)F E) b,_h) F^,=EF^3 ) ,39:FG)/3 )^9
int
32
:]19^F^F^
39:)/ s9,=)k'7hsE:fbh)9)4b,>)k)F
std::numeric_limits<int>::min()
3$1
d )hF `$Oh)^ O) )"O)>)`ZE:)
F † :]=`:9)h)T, O^
/3 )Ds99^
/3 ‡
+
/
%
`$/) '7 :]=/`>)? b )^9> _)^9>_)`$ `,):^ ^)F >fb 'X ).O,)F
8^FG)^`>)3 )a:9^F^)s9
f/,9>F-g798^$/F^ F!)9)")8f,F P7`8EF^ )
int
:]19^F^F^FT`FG)^^,9`:)3?P^ )F^.E>O)FD`$/ ,39: hTOfb: 9O' ) f//, / P
) )o1E
.gh.FG)Ts1f1,FDF^,` :]8 FD)+ ]HF^FG
V&FT'7
int
2147483647+1
9fbZuv,FG)XF^>
)^Fh_O)_)`/+`^^`>)&f//, P
FZ)h>FG)Os "(fb>
2147483648
)T)vE
b,=XFG1FG) =F^+b,'XE>fH )s9>)ZF^T)>hf,
int
\1,` ,93> h/3 (fb> 9('XFT^. F^>fb>^+s9 _/
/`>)`$/ O99`$)F =s9,=)
)7'7,3 sm!/>fb-TF^>fb:!s9c)7) 19(' )9)7)>
`$/a``,=$
2.2.6 The type unsigned int
VX s9uI>`>) P )o1E
`$/ 9fb9>b)fb f//,F s ,=) P)^ '7 9 ?'7 'X) 9)^,/
int
,.sE>F> &F^9 )oE )9) >>F^)^F 9 e9>b)fb.f,F /O'&FD)a:]1)3 )
1
/TP{EF^) fbXf/,9>F7'&),=) ,F^+Xs9)F46hY"Y[(fH3F7F^,`a )o1m =)hF `$/3
kCTa)^9Fh)o1m ='7"9fb /m) )>)`Xm>)^F7'7!/F^+9fb!PN
unsigned int
int
SQ
,
20*'(2)*S"O
%
-(7 $&
0
,
= {0, 1, 2, . . .}
J
& & 0;
'X )
)^9 F/ ^)F H9^`3`F&/3-/F^FG1`NO)fH )Fx fb es9)7>FG)O)H)
b
f//, /"P
F )!FG>)
unsigned int
{0, 1, . . . , 2b − 1}
P b 9),=/1,.sE>F de93>3 '&9>+b,+>9N/`7H1`>`,=^`F4P
s1
2
int
unsigned int
) )h_9^13,` )^9 PN('X9 ,=)^9,=)$
limits.C
Minimum value of an unsigned int object is 0.
Maximum value of an unsigned int object is 4294967295.
qr )>/F!P )o1E
?b8)^>/F P )o1E
xPN('73 s1 )> )^9
unsigned int
int
>)G)>
:]/89 93
)>/F P )vE
'& ) ) u
U
127u
0U
unsigned int
f//,Fh3N)> O)
2.2.7 Mixed expressions and conversions
) P7)o1E
2 ]HF^FGF+_ fbfbF^,=s ]HF^FGF+P7)o1E
int
unsigned int
:]=/89
F ab/k)>)^`.:]HFGF^ s9,) '&9) ^)F!)o1m_/3 f//,(~de
17+17u
F^,` 'j1DsJ)w,sgLM:/!.<./1qM. )E:/3F889`)^ =F&<:g,) )^?) 'A:<INY</:/+
)o1E/ n?)
6ZY Y FG)/393 ) >/k)oEF
g79:PN )
unsigned int
:]19^F^F^
FhP )o1m
/3a>)Fh>f//,9)3FG)>asFI)> /F
17+17u
unsigned int
17+17 u −→ 17 u +17 u −→ 34 u
g79F ){sE FG>'X9) `PN,F^ F^`k._)_)`F $)xF uv,FG)x) )> 'h ,3 † ) F^>)XP )^>F ‡ F7T>{)^ † ) F^>)ZP 9),=/E,+sE:F ‡:x "")
'h4P=/!3>m> uv,FG)W9`$O) PN )n'h ) Fr39n.6hY"Y /s9,=) ) $FG) )^9n`fb:F^
F7'7 e3>W99>3 Z b)^fb
f//,F+^ G`fb>G)3 -)-)F/ f//,P7)vE
“
int
unsigned int
b) fb
f,FD"`fb:^)3 ) )
f,")9)ZF^,)FZP †e_O) int
unsigned int
_)`$/Y
‡ /3399 b g79F&, FG)s9F^FD s9Buv`:)-sE>)o'7 ) f//, /FTP
2
int
/3
unsigned int
de89`)X`fb>^F^F ?)^9 )> 3^`>) _?F^``,=!s9,=) O )!/'hHFT'7
3>W93{ 6 F^3>hPNX:]=/89X) 39>`NO)F
int a = 3 u ;
int b = 4294967295 u;
g 9.f//, P
7
F rF^`.)FDf/,9+F )^9./+Pn).)o1E
k,=)"Pn'7 / F^F^,
a 3
int
) ; es9)7FG1FG)JPJsE(fb H)Tf, P Fh8 )) 39:W 3/``^399 ) .)
b
6hY"Y FG)939^3 =FG` )^9"):/
Fh,=)F^3D) /"P
4294967295
int
& ]av 0/A
2.2.8 Binary representation
VXF^FG,99
b
s9)7>F^>))^H'7!/ $/3= H('
)9)7)")o1E
int
`(fb>Fh)"f//,F
−2b−1 , . . . , 2b−1 − 1,
'X
`(fb>F
unsigned int
0, . . . , 2b − 1.
de )^9F+FG,s9F^>`>) '7
'h/).) ) b-`F^>+1 O) ('Q)F^_f,F+_>F^>)3
^ ,F^9 )
f/Ns9 s9)F> g79F.'&k/F^ ^F 35^) |F^P7)
b
_):N/m )T9^>fH,FhF^,=s9F^`>)r
gh ;!1[:!V|,s!L7M./12 Px. O),=/E1,.sE>
h
F )^9 F^,
n
n=
∞
X
bi 2 i ,
i=0
' >^ )
X
9
, ,_3>)>^3 `>1 `)F&P
bi
)csE+ > = Z:]=/89 {0, 1}
H'X)
W9)8_/_P
13 = 1 20 + 0 21 + 1 22 + 1 23 .
g79_F^ 1,`_Ph)^9
:fb>F^
3>.F `$3 )8s99^ ^>F^)) P ?g7
bi
n
s99^:9^F^))P
F
=PN& ]/89
13 1101
Conversion decimal → binary.
n =
∞
X
g7"39>))o
bi 2 i = b 0 +
i=0
∞
X
bi 2 i = b 0 +
i=1
∞
X
bi+1 2i+1 = b0 + 2
i=0
∞
X
bi+1 2i
|i=0 {z
=:n
}
(fH3F FG89_/ )i)?`89,=))_s O^ >FG)O)5PD fb|39>`_/
1,.sE>
zgh $/FI) FGW9`$/)_`>1 `)
P ) s99^5:]H /F^ P
F
n
b0
n
3 4ghD)> `1 `)F
H`$/_F^,=s9F^ ,) 8sEX:]1)^/`:)3_s1_91")
n
2
bi i 1
F/D)>` ,9T)
=.:]/89 PNn n==(n14− b'70)/2
:)
13
93
?
b0 = 14
2 = 0
n = (14 − 0)/2 = 7
`)1,X'&)
/3
>)
13
/3
= n = 3 '7T>)
n=7
b1 = 7
2=1
n = (7 − 1)/2 = 3
13
/3
'X` $fbF&,F7'X)^
4deaF^,_^ b2 = 3
2=1
n = (3 − 1)/2 = 1
n = b3 = 1
)Ts O^>FG)O)aP
F
14 b3 b2 b1 b0 = 1110
g ` fb>^) fb s99G 1
,+sm>
) 39>`_/
Conversion binary → decimal.
b k . . . b0
>>F^))H'7 `$/-`"/b/ 9
, FG ) 3)^)o_P OsEO fb/
k
X
i=0
i
bi 2 = b 0 + 2
k−1
X
i=0
bi+1 2i = . . . = b0 + 2(b1 + 2(b2 + 2( + 2bk ) . . . ))
& & 00
=D:]8 9)^8`fb:^)D)!s99^ 1,.sE> b b b b b = 10100 )83`>_/E>
4 3 2 1 0
F^)) H'7 `
89,=)
(((b4 2 + b3 ) 2 + b2 ) 2 + b1 ) 2 + b0 = (((1 2 + 0) 2 + 1) 2 + 0) 2 + 0 = 20.
Representing unsigned int values.
n
\1`"/
unsigned int
f/,9
{0, . . . , 2b − 1}
9/F4Xs O^ >>F^))+P >9)^ :]=/`>) † W9X,= '&).$399 >F ‡ b)F s99^
b
>>F^)) F `$/`$/nPN_) PN FG)
,F^a)
f//Ns9.s9)Fqrb )
n
b
f//,D/T)F^P 1)F FG)/TPN_)7F )h:]H9`) F^`>^sE3
s1)"6ZY Y[FG)939^3 s9,=)Z9^39 /) F^"_ bF7F^F^! /`>)^` VXF7)>" b
f/,9>F 2 unsigned int
/3 )^9 F/T,9.sE>7P es9)7 )^)^>F =$/` )G)> `13Fh f//,=
H)F
b
b=3
HFh/FhPN('XF
n
0
1
2
3
4
5
6
7
>>F^))
000
001
010
011
100
101
110
111
V*` 'h_PE>F^>)
f//,F ,F^ )DF/
s9)^F
Representing int values.
int
b
1>F"F PNO'&F deP4)^9 f//,
F bO)fb '7.FG)^ ).s99Ga>FG)O) P
n
n
)FG€P  1,.sE>hP
{0, . . . , 2b−1 − 1}.
g7 O)Z'h_'7",F^"/E) es9)7 )^)^>Fh)^ O)ZFI)^)h'X)^ b
0
dePh)^98f//,
F b)fb '7FG))8s99^ >F^>))^ P
na,+sE:
n
n + 2b
P
{2b−1 , . . . , 2b − 1}.
g79F H>3F ) FGF^ es9) )G)>F / )^9k9>F )9) FG)^) '&) )k>F^,)
b
1
b=3
>>F^))FZ
& ]av 0R
n
−4
−3
−2
−1
0
1
2
3
:9^F^))
100
101
110
111
000
001
010
011
ghFDFD`$/>3 )^9 0u`% . 'KLtD<'I/M >>F^)){ de )^9F&>FG)O){/33
)o'7
f,F
/3
FDfb>G /FG DFG89a393 ) >F^>))^FT/``3)_)
int
n
n
,F^,9/=,FnP s99^+1,.sE>n/33)93 h)^9h(fb> 9O's9)v†eP /Y‡: =k:]=/89 ) /33
93
`$/F^"P
H'7"`89,=)
−2
−1
b=3
+
110
111
1101
de-) P)FG).(fb> 9('Js9) 4)F.fb>F
n)_>F^>))^|Ph)
>F^,) −3
101
-)o'7Y’BFX`>8 )Zg7F&'7 1FDF^` ) s99^ 1,.sE>Xsm3a) `13P
F
n
)^9:
!g71,F m'&9> '7+/33 ) s O^-1,.sE>F&PN
/3
m) FG,9 )TF
n
n + 2b
n
n
`,) )
13, b /3_)^9:PN />F 'X)
)
)FG)4s9)F
n+n
2
n+n
b
&F^!)^9h)o'7Y
’BFk`>8 )x^>F^))8'7X`$/(' sE:)^)>k,93>FI)/38'X9)n9 EF&'& b)fb
f//,
>)FX`>fb>^)^3 )^8)vE
&gh FG)939^3
int
n
unsigned int
FGE>`W9F )9) PN7)F 9/F ) sET`>>)>3_s b k,=)7,3>7)X)v'7Y
’ F7`89) n
2
)Tb)fb
f,
/3
)^9D>F^,) EF^ )fb
f//,
9fbD)
int
n
unsigned int
n + 2b
F/ :9^F^)) xg7F4$/F )9)4)h`>fb>FGFx9,^+``>),9/ b93 9"/`>)^, `89,=))_) bF7 /`
gh"6hY"Y FI)/393_31F7) F^`:sEX)T,F^DP{)X)v'7Y
’ F `89) s9,)k)T^,9
PNZ`fb>^F^-P
)
Fh`$O_)f/)>3
s )$
int
unsigned int
2.2.9 Integral types
g 9:&FnT1,+sm>4P )>kPN,939/)/1)oEFn)^">>F^)kF^393 ,9F^9>38)^>F 7
F^Z)DSD>)/F4FG`>){ g7F^&)o1mF _+39 lm>kP
/3
'&) ^FGE`:)
int
unsigned int
) ).f//,/ VX )F^_)vEF _`$/3 1[MqN
:/+`0V L=<. /3|PN+$` |PZ) /{) E>)FZ g s98z†eM / Ab
K ‡&O fNs9 'X )) F )^F `3`>F /F^FG1`NO)fH )F!/3|PN,`>)9/ )K
F †e,=|) )_s1fH,9F )F"39`>))>3 s )
>FGE`>)^fb
f//, /F ‡:
& & 0@
2.2.10 Details
g7> /F^ 3`_/k )>/F Ph)oE
VX <2+ ):/ FG)^)F 'X )
Literals.
int
)!3 ) 9PN('73sa+F^ ,9>9`> P 3)F7P
) 7g79 f,!Fh)!1`:)/{1,.sE>
0
0
7
>>F^)^3 s1?)^9 F^ ,9>9`>P 3)F PN('X)8/3 = :]=/89 E)8 )>/
0
9/F7f/,9
1
0
011
ˆ ,sJY)J<1['9+=1):8/F +FG1)^8)h'X) 0x 9PNO'7>3
sa.F^ ,9>9`>!P 3)^F P 0 ) 9 /3
>)G)>FTP
) !gh.f, FD)+:]=/3`_ 1,.sE>X^>F^)3 s-)+FG 1,`
A
F
P73)F!/3 :)^)>F!PN('X)/3
. ]/89 ))>/
F f/,9
0x
0x1F
31 = 1 161 + 15 160
 fb /y:]1F^F^ )9)`>9FGFG)F_P F^ Logically parenthesizing a general expression.
1,`!PxE>)^FX/3-E:/3F '7 'h/)Z)833,` )!`$/E )F^F=D$/`
E>) )DF^ 1,` H'7 19(' )F )v )Fk>`3`X† !,9.sE>ksE>)o'7 D/3?$K F^ g Os D
M /DAbK PN )T)^9:)`7E>O)F ‡ 1/3_)F /FGF^1`)f1)oj†eP) ),‡:
de `$/F^ P ,99GaE>) ) /F^FG1`NO)fH )v
FGm`W9FX-'&9` -FG3 P ) E>O)X)^F
E>/3F7) sm"PN,3{
qr:)7,9F7`F^39: )DPN('X s9FG)G/`>)7:]=/89Z)^+>8 9/FG &)9) '&9) '7D3 >^DF
`89>)^>/r/3a)h^FG)^`>)3)^8 )>)`X ]HF^FGF
:]19^F^F^
)v
`>39>9`>
/F^FG1`NO)fH )v
1
x2
2
x3
x4
4
2
2
2
1
4
13
13
16
r
l
l
r
%&> FXO' )! )F^F !s9)/3 PNT$/` E>)^ '7 39>)P)F ,Y)1[7N
E>/3 93>W93 /FZ)^9!P)X9/3aFG3 E>93PNDP)X/F^F^`N) fb"E:)F /3 /Fh)
)D9/3 F^3 E>93 )>^'&F^Xgh $399 E>/3 PNT 9`>,39>FX>fb>^)8)
).>f//) F^3.sE>)o'7 /3?) :]1) E:)"P Du`<: 9i ^`3` )^ 8de
)>Z'73F :fb>^1)^99 asE>i )o'7-)FG")o'78E>)FZF GOs9sm3 s1 ) GFG)Gi> E>)$
dea,=h:]/89 1)"$/3.E>/3 P Fh)TF^,=s9F^ ,9>9`>
)+) P)
x2
x3
3
2
P F^`T) 9 ]H)Xm>)hP O'7:Z`>3`!).)"P)&P F7 3 ) `$/F^ P s99^ E>)F 9'7./F^ W 3-) .Q/)Y:!V E>3/
de3 )^19!9")8)
)> FG3XPE)D$/3!m>/3{4ghXF^>`3 O^E>/3
PN7 `,93Fn>fb>^) )
) :f/)!FG3.sm>)o'7? /3 ).:]H) E>) P 657^.T'Ii :^ u`<: >`3`
i )^.)^9T/3 E>/3
,DF )9)7)DF^`>939G m>/3
)9/
ng7"839 lm>>9`>T
i
/^$/3=_3FZ'Xa/E:)ZP ) .T'I `>3` E$OF
VX``^399 ).)F 3>W9)
b)TF^`39^_E:/3 P Fh
,=7:]=/89
9/ {'7+9,) / P >)F^>F ,3?) FG,s9F^ 1,3 `8`4Gx4FGE3 )^)
$399.E:/
3 H)!E>)h)F^>P /3) F^`39^
E>/O
3 †eP /Y
‡:
%&> FX)!)s9 PNT,=T:]=/89 b/
>99/`>3 '&)a) F^,=s9F^ ,9>9`>F"P4/ PN,=
E>)F7)9)ZT9,)Z
O)^9>F^FX``3.) )T,F uv,9FI)&3F^`:sE3{
x1
3
& ]av 0K
:]19^F^F^
)v
`>39>9`>
/F^FG1`NO)fH )v
1
2
3
x1
( x1
1
2
4
r
1
x2
x2
( x2
( x2
2
2
13
l
2
2
x3
3
4
2
13
l
1
16
r
3
4
x3
x3 )
x3
x4
x4 )
x4 )
(
x4 )
4
4
Z(''7 F^89| ,=)
)>)>/D >)F^>F )9)
'7 9fb?s)3&) 1 ) +,9 )9` )F4)^ /`>`,)$4dea,=Z:]/89D'7 >)h)":]1F^F^
2
3
4
( x1
1 (( x2
2 x3 )
3 (
4 x4 ))).
n+F^h_/` /)^9F '7 b3,=) /3 '7Z9fbXTPN, >)F^ 38:]1F^F^E† )h,)^>
/ Pn ^)FGF!`$?sE+3^9m3 /brPn`,=F^g‡ k,=) )+)^ O) '7+`$/)":]HE>`>)
F^,`-`TsE9fHh >/en6 F^3>h)"PNO'&+ ]/89
:]19^F^F^
)v
`>39>9`>
/F^FG1`NO)fH )v
1
x1
1
2
13
r
1
x2
( x1
x2
( x1
x2
2
1
g79TFG,9 )+ ^)FG 3a H
] F^FG-F
2
2
13
l
2
2
x3
x3 )
x3 )
(( x1
1 x2
2 x3 )),
'X` 31F.).FGE`>P )_>f,9) 3> 9).`F ) ,= F^`>,9
F )9) 6hY Y
_/O'&F :]19^F^F^FhPN7'X`
)^9T_/`&'7 HF7,=)4g79D>f1,F s /3`$F^"F 8EF F^s9 =PN&:]=/89 =F^9`>!/ms O^
E>)^F7P )"F^/D9^`3` F^+ fb )"F
/F^FG1`NO)fH )vb
?. fb 3F^`>,9FGF^3?('
f/,9>FT `fb>^)3 )
Unsigned arithmetic.
int
unsigned int
f//,F /3 fH`?fb>F^1Jgh?_ FGF^,@† 'X9)
)53|'&) e^>F^)s9 f/,9>F ‡
/FG ``,=F&3,=+>f//,9)
Px^)>)`&:]HFGF^FZfbf1+ P )T)o1EF>
g79 6ZY Y FG)/3 O3*`)/F ?^,9?PN-)F = ",F^3*)/ )oEF T)
)>)`"E>)^FX'7 13, b {fb
es9)D^>F^))r!ghFD/FX)9)D)
2
b
f//,7Pm/+)>)^`kE:).'X ).E>/3F P )o1m
Fx'7 3>W93{ d )
unsigned int
31F&9)X9>`F^FO fb!) _O)_)`/ `^>`>)Df, s9,=)X) , 1, f/,9!a)
/X)9) F `,) ).) 13, b =7:]8 P F !f^Ns9XP
unsigned int
2
a
)o1E
'&)
> f/,9 H)
9/F7f/,9 b
unsigned int
-a
2 −a
Z
F^,` ,.:]=FG)FTPNT)+FG3?) )o1EF r/ )9)T(fb> &/3?,3> 9O'
3$/)7'&)aO)Z) 3F^`>:)Pr)"`>8 >$
& & 0U
k fbk,3+sE(fbn)9) ) F ,F^,9/ "`>$ 'X` E>)F 1``,=
Sequences of + and -.
-a:]H>F^F^9>fba),aF^ P )JF^9 )7) b{k,=)ZF^`")^9"` O/`>):F
/3
^ $fH (fb>,F^3 E>)^&) bF FGE`/ ,>FT 33 )8>F^fb )
+
$/F P F^ 1,`>FXP ’BF 9ZP ’BF>
=X:]=/89 P + ^)F H9- ^`3`FT93 F^F^1`>N)f1)>F )&F&)&`>$&9(' )
)>^>) )7:]19^F^F^F
gh WFG)4:]H>F^F^8`>,93 $/
s9,)4)
a+++b ---a
(a++)+b
`,3 /FX'7> $
D\1 1)^9 FG`3 ]HF^FG `,3 )>
a+(++b)
a+(+(+b)
$/
-(--a) --(-a)
-(-(-a)
ghX6ZY Y FI)/393 >F^fbFk)^9Fn3>_Zs1 3>W999T)9)k"F^ 1,`X`F^FG)!
P ’BF ET-P ’BF E9/FX)^_sm+^,m3 )8 /^FDP P)D)) '&)-EF^FGs9a
+
_
) )h3r g71,F $/F
/3 ---a $/F --(-a) Z)
+ a+++b
uRCD) _ b(a++)+b
)9)ZPNX:]=/89X)! ]HF^FG
F^F^"'& )F^ 3 /F
a++b
a+(+b)
s9,=)x/``>3Z)&)^94, uv,FG) FG)s9F^
3 ) F ) h'7 PN>3!:]19^F^F^
FG` h,99G
E>)
`$/)!9fb E:/3F" sE)^?F^3F>gh+:]H>F^F^
'X)^?)F `/
++
---a
)F^F
F f/38PN7/)>n$/FG )^9&E>/3PE)Z `>>)k ,FG)
--(-a)
sE"/af//, Hs9,=)h)":]1F^F^
FZ/ ^f//,
-a
6hY Y `)/Fn",9.sE>nPmPN,39/)/ ./1"N,) /3 hM./1"N,) ) Other integral types.
/m)oEFngh F^3 9>FZO
/3
ng79TFG)/ signed char short int int
long int
393-FGm`W9F&)^ O)X$/` P ) F&>>F^)^3 s-)&$/FI)D/FX__s9)FXF&)">f1,F
7+)^9 FG)$ gh71,.sE> Ps )Fx,F^3 )^T^>F^)
f,F 39:E3F4.) 9N)PN-
int
g79T`GFGE3 F^ ,`"Pr,F^3_)vEF F
unsigned char unsigned short int
/3
unsigned int
unsigned long int
ghFG)o1EF fb`89>F )aP>39 PXlm>^ )^>F+'X)|N> F^_>
/3
n\1_/> f//,Z/F &,9FGPN, 'X_G
f//,Z9>Fk)9/
int
unsigned int
`F^,8)-F 8``:
93 N:DF!O+)^)^`>)fb!'&?(fb> Z/3 ,93> 9(' 1` `,=FTg7 F^W9`$/`!P )^9>F^ )o1EW
F † 'X` ./^$/3=FG)T-)+6*9^/
N/,9/g ‡ 9/F7P /33 a6hY"Y nghD$/FG F )^ O) '7T`$/ 1,)D$F^ 89)n,=h('X
)/ _39")^/ )o1mF" 6hY"Y Pn'7+9>3?)- de 6 )FTF"+,` .`,.sE> F^ 6 F^ ,9>) _/ 6hY"Y `>8 >F"F^89 _ b
93
/
short int
long int
//F PN
9/3 ) F/T3FZPNh)"`>^FGm93 ,9F^9>3 )o1E>F
int
de`>^)k/383`>^)kE>O)Fn/Fn'7 /Fk/F^F^ Order of effects and sequence points
) m>)^F+`>9FI)^,`>) :]HFGF^F '&) /5>l `>)$|\1,` |E>)^F 9fb_) sE
,F^3
'X )`$O"PNZ)o'7+/F^F
gh_s1f1,F!$F^ F )93
) † /F '7_$/3=?$3 )3 PX\1`:) 1g‡ )
>f//,9) 3> PN )^9 F^,=s :]19^F^F^F PX fb5:]1F^F^ F )+FGE>`W935| >eZ67F^ ,) f//, /3 >l `>)D_ 39:E3--) >f//,9)3>$&67F^3>Z)
:]19^F^F^
++ i + i
'X>^"'7 F^,=9mF^")9)
FZ+f/s9TP )o1E
deP
Fh)N/ 9F =)a)Tf/,9
i
int
i
5
Pm)X`8mF^)h:]H>F^F^__ 89/`>)`>ZsE
4g79ZF^,)k39:E3F 8'X>)>
11 12
& ]av R#
+)+)^9_>l `>) Ph)
P)+E>/3
P7)393)^ F 9^1`FGF^3|sE>PN
)^9)
++i
E>/3
Fh>f//,9)3{ngh f/,9 P ) :]H>F^F^
F7)>>PN ,FGE` W >3s1
i
++i + i
)!6ZY Y FG)/393{
g X:]19N/ )kF^`>933†e/3 ,` FGF s1f1,F s9,=) PN^),9)"/F^&+,` !F^Fr>f//),‡
$F^
H>) ,F7`F^3>k)DPN('X 1`>) 1 H9!:]HFGF^_)9) fbfbF7"f/NOs P )vE
i
int
i = ++ i + 1
g 9F!:]19^F^F^ 9/F )o'7a>lm>`>)F !)^9 `>>)"P
7
/3?)8F^F^)") k`$/,F^
i
i
)+/F^F^9>)X`/?-9E>?/P)^>T)+m>/3FD9$fb sE>?>f//,9)^3E)DF^>FT)^ O)
)X3>7PE)&)o'7 >l `>)F F `$O )D`>>) `>FnsE>PNX)D/F^FG) /3)
(fb>/Ef//,"/3a>lm>`>)D^ '7 3>W93{
%&('7>fb> 9)FZFZ)&)G, PNZ$/FG9Fh)9)Z fb!)^ 3 'X ),=X,3>1 `>8 ,=):
13 ()^94fb Z,_/ O`9 )`>),=/
H )^94`89,=)>! ’ Frm)rP1f1>' O)k>f//,9)^
P )^9"F^,=s :]19^F^F^
`F^FG)FhP ) PN('X FG)^>9F
++i
Z6 1_)Tf/,9 P
i
PJ)^9 _/
^8)+"Pr) 67M
>FG)>^F<“
)+)F7f/,9 ) >FG)><“
1
;H )D)TFG)^>&`>))&s /`_) _ >^ H)7)"/33=F^FZP
17VX33
“
i
6 $ 9)!WFI)&)o'7FG)>9FT^ `F^F^^a)s))!f//, Px) :]1F^F^
/3
++i
` fb )7sEx9^1`FGF^3 sEPN^4)4/F^FG)$ k,=)r) )^9 3"FI)> 31>Fr)r`FGF 9fb )+sE `89>)3_sEPN^ )"/F^F^9>)$ de 3>Z)^8/O' )"`89> ) 9)^ ) )G/F^PN>-P!3 O) sm>)o'7w67M pFG)^>F-/3 _ G † 'X` F fb>^ ,`
9N)PN^3>m39>),‡ r)F 3>!9/F")"sE> FGE`>W93{8de P /`:) )"F )!,=$/FG Os ) /F^F^,8)9) )^9)^ 8`sE>)o'7> FG)>F+/3 _/ ^?F b/ 3 FG,9`|)^ O)
F^>fb:/r)FhT)^9FGPN>3 )h`" ,9` 1
/P):D/)> =,F^9+F^ e`$/>3 ;!C:g./6. \1,=9mF^ F sE>PN+)^ O)
)N FTf//, .dePn) /F^F^9>)TFDE>^PN3 P)>
i
5
) ^FG): `))!F"'Z)^)^?s /` )^a_/ ^ F^:)F
) k,)!P
i = ++i + 1
i
7
)_/F^FG)! O9mF ;<0ST:< )N): )^/F^PN:.P7)^98^FG): f,
Ofb>G3F )
6
>f1,Fhf//, P 9/3
FZF^:)Z)
9FI)$/3{
7
i
6
gh.6hY YTFG)/3 O3 39:W FT .Q <XL71[M )8sE +E)X3,= )^9!>f,9)aFG 1,` P / :]19^F^F^ ) 'X` F ,9/)3 )^ O) /n>l `>)F!Pk>fH,9FG?:f/, O)3
†eF^,=Cs ‡I:]1F^F^9F.9fbsE `$^3 ,=)$?d ) 'h/F s s9?)_:]HFG)`_Ph ) >365`89>^F )9)k>)n)^9X6ZY Y*FG)/393 ^P/ P}3`T)X/F^FG)4/Fk
F^ ,`!E)$ de-)^9:Z'73F 'X ) /F^FG)7)
) bFZ /` )!:f/, O)
i
1 )kFn) FGE>`W938'X>)^9:k)X>l `>) Pm)^9h>fH,9FG :f/, O)3`>>)
i = ++i + 1
E>)89/F sE`$^^3 ,=))$ dey`)^/FG) )aF^>` )9) ):9)F /
:]19^F^F^FG))>)hFZ/'hHFh.F^ ,9>9`>!E)$
gh>^PN '7 9fb_/ F^F^,8'X)^ ]HF^FGF )9).9$fb^ )9/ :lm`>)
%&` xPkb, 9^PN>.)!)a'7G^ OsE,=) >l `>).3> F^,=8)9) /` :]1F^F^ )^ O)
b, 'Z)&>)>F&)7FI) :lm`>)k2 ]HFGF^F 'X)
&)^ T>lm>`>)h`$/_ b
& & R=
F^F^ H),9
=93_)>_OT =/F7./F FGXF^ ,9>9`> E)F FG> )D)D>l `>)Fh/3
9,=)Z)c)8 '7 3>W93 ^39:$kg7FhFZFG,9_O 3_
)"PNO'& ,
k>)o'7>a)v'7 F^ ,9>9`>"E)F =) >f//,9) P /:]HFGF^
Single Modification Rule:
__13P8)^9Tf//,"P /as9uv`>)ZP PN,3 )m)vE")&FI)Z`/
V :]1F^F^ b
X
)^ O)
f1N)^F8)F_, F `>9FG3>3 F^_/)`$/
i = ++i + 1
b/E/3a$/3F ) ,3>W99>3sE9fH
dePhb, E>^`fb8)F ]/89 /F.^) W `>N/ r>_F G O),=/ f1N)^ P )
F^T39 W `)8, 4P
Fh f^Ns9TP )o1E
9 )Z) F^> )9)
nextvalue
int
nextvalue = 5 * nextvalue + 3
`,3 T`8 /`>) sE 'Z)^)^a/F
( nextvalue *= 5) += 3
g 9F4'&=`89 7
Fk/8f//, bF^"'7Z`$_/F^F^+)! )$4\) )ZNO)^)>
(nextvalue *= 5)
:]19^F^F^FZf//3
F^`")h13W9F
)o'X`
nextvalue
V )n)FxE) b/8)^))fb $39:kF^,3+'793>nO' / :]H>F^F^ )^ O)nfbfbF4F^>f > ,=)^9,=) E>)Fn`89F 'X)^ )T\1 13W9`$) Z,/ de93>3 1/_:]H>F^F^
b
std :: cout < < a < < " ^8 = " < < b * b < < " .\ n"
/FXF^:fb>/ :lm`>)^FT/rP 'X`-13P_) f//,
9
&ghFh'7 HF&F^`!)!)oE
std::cout
P
† 'X`8'7h'X) 3FG`,F^F >g‡4F
PN,3 ) 939>9`> 1)D\19
1std::cout
3W9`$O) Z, 31Fh)X9_
)Fh`$/F^
2.2.11 Goals
V7)7)F7E) 1b,aFG9,3?
Dispositional.
g‡ H('w)^9T)= V& )>)`D2xf//,9) Z,F/“
‡,93>^FG)/3) ``>)FZP E>)7`3` /3-/F^F^`N)^fH)oC“
;‡ H('w)^9" )>)`Xm>)^FZPNh) )oEF
93
“
int
unsigned int
A+8
‡ sE 'hX)9)7`89,=))^FnfbfH9 )^9X)oEF int /3 unsigned int _$839>fb>
`^`:)Z>F^,)F 3, )+EF^F^ s (fb>
/3a,3> 9
O'&F
de ^)`,N b,-F^,93 sE"s9D)>$
Operational.
†o+g‡ ^)FG /3 >f//,9)^ fb ^)>)` :]H>F^F^ fbf1 E>93F_P
)o1mF
/3
)s99^ )>)`_E>)F + - * / % 7/3
unsigned int
int
).,9^
† ) /O O)^9>F^ >/x ]HF^FG? )+SD>)/F
F^>`>)a> Os Fhb, ) 3 )^9FhPN&/r^)>)`&E>)^F ‡“
†o ‡_3>^fb
s /FG`"FI))>)FhsE,=)Z )>)`X ]HF^FGF<“
& ]av R
†o ;‡_`>fb>^)X+ fb3`_/E1,.sE>h)^+s99^^>F^))-/3 f1`Tfb>Fd“
†oTA+‡_3>^fbh)^9 0u`% .K'KLtD<'I/M >F^>))^8PETfb8,+sE:k bes9)4>>F^ )O)HPNZF^
“
b
†o"0
‡ 'Z) /F7'XF^ ,=)^9,=)DFZ3>)>9>3as1-+W]H3 1,+sm>XP ^)>)`T:] FGF^FZfbf1+)>F7/3a=9,=)hf/s9F7P )o1mF
/3
“
int
unsigned int
†o R_
‡ 3>)^>k) f//,h/hP9)/H)oEF 8Dfb _/`e† ,F^ D/‡:
2.2.12 Exercises
_ :/<M657!./1  657XSQ[Du1[7N sgLM:<!.<.12M.I)„657< <Fd+Z*+ 6 57<' .<2L ;!V
`
.<2L p 5&10.v'I,M.65C+0VgL=!.\)XF+~*!.c SP+"$1"M<:!'I,)1q+:<!.7~6.65C+ :/W/'KLMC)
)C:!1"7NE657^<Fd+Z*+01q@.<57CD);<RLM:<F
1q)J,)Y
†o+g‡
!o
;o
2o
)!o -2-4*3 2o 10%6*8%3 STo 6-3+4*5
Exercise 11
5u+5*3u
31/4/2
-1-1u+1-(-1)
ƒ 5&12!5 S|657SQ[Du1[7Nw!5C:J!<:@.T *</!.x:<„^DqN&+z sgLM:<!.<.12M./)|uv5&V :?657I<.E65C+K:<<-PN1[F&E657? N12,+4L7:/<M657!.Q!. iq# :/)J<:?@F&1 )
i2'^10.<DY)1"7N qo 5&1[M6./-Wu` 5CF&?:/<'IF&,)@657 . L7J/!.?65C+Wu`?7.*+[ZV 1[!Z*)J\SQ:657
.T+‚d S3;<!6/:3:<Y)YY;!1[~1[0V$ o
†o+g‡
!o
;o
2o
)!o c=a+7+--b 2o c=-a=b
STo c=a=-b
N<o a-a/b*b
5Qo b*=++a+b
1~o a-a*+-b
Exercise 12
7+a=b*2
a+3*--b+a++
b+++--a
g 9>F^ :]=:`F^>FT^ 1,"b, )8^$/3 )! /O `/ >)F^ 8>
7
:]19^F^F^ ) ST:)/FnF^`>)^{n2 ]=:`F^ 1€o /F^ 1,F b,
) $/3
)X /O _
F^ ,`FXP
/3
)^9"SD>)/F F^`>)^{
+
:A+[DqN&+,s!LM:<!.<./1qM.PS:<' … s$<:/<10.QAk Y-LM:<FQ1q)J .<2Lt{ ;!Vd{q.<2L /Fd+€{
*+01q=-./+LYL=./1[7N?65C+`1"=1001 +[ZV 5C+.BFd+Z - 5C+.BF+~* -\)A6573Fd+~*? S 10.
C)J )Y ƒ 5&1q!5 S]657^,sgLM:<!././a12M.X:<!./C€1[5 hbM.qL=<1 ,)|2:Bh)J )O;/!5CF
1q: c
o† +g‡
Exercise 13
Exercise 14
(a
3f
_v:/F&z65C+ ST:+"
b)
3f
c=a
3f
a
0
)
b, c > 0
(bc).
>3
!.@65&1[. 1"'KLtZV 65C+ 6570u` ,s!LM:<!.<./1qM.
+[K./ <5 Fd+~*!.H S657xFd:!1 Y;g <. - - )
a b
o
unsigned int
Exercise 15
;</:g.T
!o
(0
-v657ST[Du1[7NA t +01257U)+.T
)
a/b/c
iqu5&1q!5
c
:/H h1[Fd+D<MWSQ:
:< +.<./h'I,) ;/} S@0V L=
o†  ‡
a/(b*c)
Ž ']LM7;!VI5C)I;!1[:!V :<2LM:/!.Q<M2+01qM.E SB6579ST[Du1[7NI)J<1['+=h'E{
o†  ;‡
;o (@
2o ; U )!o $#
& & R;
Ž ']LM7;!VI5C)I)J/<1"'A+:<2LM:<<.Q<M2+012M.? S]6579ST[Duv1"7NI;!1":!VA=h'E{
;</:g.T
o†  ;‡
! o $#= ;o $#####= 2o $#=$##= )!o $#=$#=$#=$#=
Exercise 16
b9V?82Lt<';<<: m-657BD:2N&!.<9‚Qu ‰ <:g.T<=z_:!1['AB10. 43,112,609 
ƒ 5C+10.36573=C';<<:A S^)J<1['+)1"N1[6.z65C+R65&10.B=h'A;</:E5C+. … s!LtD1"y257u V$ −NY1
$V C:^M.uR/:
†o ;‡
‘ , __9>3a) s /FG`D,FhP b )F /3- E1`b>)Z`$/`,N)$
n
Hint:
Exercise 17
.<./h'j1"7NI { ;!109:/2LM:<!.Q/M2+012=-X/']LM73657j;<1[:!VA0uR% .j/']Lt /'I<M
X
:<2LM:/!.Q<M2+01qM.j S]657ST4[Duv1"7NA)J<1['+=C'A;/<:g.T
†oTA+‡
!o R ;o A 2o oK )!o U 2o o;
Exercise 18
65C+f/=F&/:g6.R/'KL=<:+0C:<!.S:<' )J N:</<. +5Y{
ƒ :!10\LM:<N:/'
:<<M57/10a1"MI)JqN://!. Ž !~./1[C.Tcelsius.C

p 57|1"=1001 +]C LM7365C+cLM:<'KLt6.|657|C.Q<: w<M<: 657 <']L=<:/+0h:< 1[ )JqN://!.
+5&:<<M57<1[ .<577U) +~.Q /M21" ('7> ) ,=E> ;<C)+.^SQ:657H+" u`)w1"&LM76.T
p 57!.Q ;/C)+.A.<577U)y;/@!57.Q/ ./ <565C+BHFd<:g{) C)J<: Pu.„ Q/<h:|1[
657X./t;g.Q <M/']LM72+01qM./-ŠN1"F&<„65C+657W7.Q<:W:/!.qL=!6.K657z;/C)+.Tj'AVRSQ:
65&10.K,s$<:</10.Qz+.<.C'Ic65C+v657\1[MqN&<:)1"F
10.12|:<h)+.cu:/)+. <:/RST:z+[4<L=<:/)+.
SQ:^,sJ']Lt <657/@:<C)+.]657j sJJ!a:<<./7~

-5 / 2
−2.5
−2
p 57cLM://N:/' .<57CD) C LM7657 `G`>) :<<./7~1[ )JqN://!. Ž <€./1"7.^+.A'^1Ds$,):/+{
012+ =C'A;/<:I Sz657RST:!' y iq'I=1"7N
o-uv57<:<
)
 :
x9
x + y/9
x, y
|y| 8
,sJ']Lt /- 4 /7U) ;< 7 LM7B./1[']Lt~V +.
 ƒ +~.Q+" u ST:@,sJ']Lt |657
13 9
13 4/9
7 LMC
iq'I=1"7N
od
o† !0‡
-1 -1/9
−1 − 1/9 = −10/9
Exercise 19
ƒ :!10E3LM:</N
:/' threebin.C 65C+9:<Y)+.j„i)J<1['+ oE=C'A;/<: a 0 S/:<'
.<2)Y:/)E1[&LM7`)OC LM76.]657 /FG)h)= ;!106. S % .3;<1[:!V :<2LM:<<.Q<M2+012 Š10"4+L
u1065A ,Y)1[7
N +<:<.K1",+.QB657;!1[:!V :<qLM:<!.Q<M2+01qax5C+.X !./.K65C65&://j;!1[6.T †o"0‡
Exercise 20
2.2.13 Challenges
Œ .Q2Lt5&7.Wu+. Œ <u10.<5I'^10Z102:!V DY)J<:31"657 Œ <u1[.<5Y{ `'A@u:E SnYn{
/S <:„657 R'M.O5CY)x1[=FY)J)y5&10.ANd:!:!10.Q u=-j6573ST<u .QD)1q<:g.@i'A7N
657<' Œ .Q2Lt5&C.qo„65C+K5CY) ./h:!F
1[F&,)657A‚Q10"~1"7N.O;!Vx657 R'M.|)J<1q)J,)x /'j'^10
./h12<1 )JQRb97f.T'I!57u- Œ .QqLt5&7.W)?z SP5&10.X/'j:Y)J!.c'ANY,)G./C:!:/<)J<:X
657 `'A3SQ://!.cu10657Ca;<<1"7N^‚Q10" ,)i Œ .Q2Lt5&7.PD+/:G;//,'I3 R'x<1001 <@)
u`![~{2‚Tuvx5&1[.<:!1q&od
p 5&1[.E5&10./:!12+`<F&/MK10.j657O;/J!‚TN
:<C)^SQ: 657 F^: ,F.M s9> 65C+3 W<:g.I
i2'^Vd65&1q+ o ,sgLtU+012 Y;<CP57u Œ .qL=!5&C.Bu+.jY;gDG Fd1q)A./C1q<1q)JT ˆ <:<31[.3657
LM:<&;gD<'
o:< ./2)1[7Nx1[ w/1[:<!D<- )}<F&<:!V {265@L=<:g{
kOL=/<LtD i2=C';<<:/)
0, 1, ..., 40
.Q 10.x‚Q10" ,) CM01[z y./C:!FQ1[F&!.  :
- 657y‚Q10"~1"7N :)J<:H10.xk657<:/0SQ:<
h
Exercise 21
k = 3
& ]av RA
 ƒ 57<:/E1[657I<1":<!DI)J
!. Œ . L=!5&7.G5CF&^jL=.100125&1['j.Q! S1"
:/)J<:zA;<B657zU+.<a.C:!F
1"F&:Ei2uv57j657<H&;!F
1q7.<ZVI)J
<./ % /)j‚Q10"5&1['j.Q! STo
2, 5, 8, ..., 38, 0, 4, ...
!o ƒ :!10]\LM:<N:/' 65C+Š.Q~Fd!.P657 Œ .Q2Lt5&7.fLM:<&;! <'
+.O1"&LM7657„=h'A;/<:
) C LM7657 =C'A;/<:
k
./h:!F
1[Fd:

657LM://N:/' .<577U)z:////1[F&
S 657„D+./
p(k)
{0, ..., 40}
;o ‹ ! ŠC.X+././C'A\65C+ Œ .QqLt5&7.910.`Y;gDcj!57.QP5&10. L=./1001qI1"|657B<1":<!D<-;<7
65C+c57I 1[:<!0C:! <57
.Q?657]L7:/'I<<:
I# .^1[L=.<./1 ;gD\SQ:
5&1"' j./C:!FQ1[F&K657<=-vj'A+6/:zuv57<:<357]1[=1[0k1q+[ZV?{1,.<2...)+, . 41}
0:!1€LtD
S|L=./1[01[F& 1[M NY<:g. 10. +" ,) Mx1)^ $/w)^9 1 S
Exercise 22
(a, b, c)
 :y,sJ'KLtD<10.w_Vd65CNY:/r0:!1€LtDQ ƒ :!1[y@LM://N:/'
a2 + b 2 = c 2
65C+W+[Du.zV$(3,
Z14,0.<5)
W+[ _vV65CNY:<,H0:!1€LtD!.SQ:Guv5&12<5
pythagoras.C
+b+c =
 ƒ h% :<^])J<')1[7NI65C+\657XLM:</N:/' Z10.<6.G657<' )1[://!6ZV-];!7P6a57]
LM://N:/'
1000
.<57CD) €LM:<F& 65C+cV$C:?Z10./\10./:!:<!2 ˆ u ' =V . !5@_V65CNY:<}0:!1~Lt !. :<
657<:< @i p 5&1[.c10.zj.<~1 N5YFd:!1q+01qy SW_:<&;gD<' l\S :<' 675 MxuI>`>)X2 ,> -f.Q/
http://
o
projecteuler.net/
& 
4 2.3 Booleans
Rb0
p 57K0:!765„+~uV.KZ12!.].Q'A<uv57<:<j<€.QT
M‚Qu
C.Q)@:<2LM:<<.Q<MG0:!765F+~*!. :
p 5&10..Q/<012 )10.T<7.<.T!. 657|0V L7
bc
DM.-vST: .<57:g2 uv1[[v.Q/bool
| =h'A;</:„ SI<L=<:/+01qM.Owbc
,M.
) uv5&V M~V?ST<u( S 657!.T <L=/:/+012M../ /Ay,s!LM:<!.<.|+[9657„657<:g.T
?u10"= ,:!|57uwj<F+~t+B,sgLM:/!.<./1qM.R1"=F&~FQ1[7N3657\0V L7
-7./1"7N
bool
F^^) `^`,)h>f,9) 
O)8F.) FG89FG) 6hY"Y )o1E_b, `$/ ) PGpdeP&'7
)^9 P&)oEF+|)>^F
P ) f//,8/F )^9> b, 'X4s s9?`8,=|'&) )o1E8'&F^8f,8/
FX>89)o D`F^FI)FXP !EF^F^ s "f//, bhV&,9s9 f/,9>FXPxF^,` )o1mFT!fb:^
$/FI )X>>F^) :fb+'&),=) FIE3T/!^TF^,=`>F4%&('7>fb> b/ ),9!F^,` )o1E>F&^ ,F^>PN,9{ `>^)/
``,FG)/`F 1b, `$/M
’ )h3 .)7P )>>FG).`89,=))F
'X ) )-xV&P)>&/ 1)^9:!Fh m>))c)>h)9/)^9 3))ob
\1 >) ,F : =F^n)nsE(fb
,9>FG)
E O) F{)kF^8 FG){ e)^ fHN/6hY Y5)oEnb,
`$/_) P^aVXP): )TsE(fbD3F^`,F^F^_'7&`>^)89fbDD`$/339) x )vEX'X )_
f//,"9 )9)X`>9FGFG)FZPx:]/`:)_)o'78>)F V )ZW9^FG)XF^) F^,` +)o1E!_$ /b
E$O&fb>^)^3{ h>fb>^)F^F 9'7"'XEF^!sm('w)^ O)X)&/('XF7PND__)>FI)
E>)F V&`>),9/ /F^,` _X)o1m&F F^, 8`>)k/FnTs /FGFnPNk/ 13FnP `89,))F b,
`$/ _/]
† h`$/ EPN!:]=/89 )^ O)")/x1,.sE>FT`$/ sE.>F^>)3? s99^
PN_) 1)9)hF ,F^.) )o'7 f//,F
/3
b ‡
0
1
2.3.1 Boolean functions
g 9 9/ k1$ FG)FDP )^9 n^)F^-_O)_)`>N/ kz†
7
‡
1815 1864
'X9>>3? FG)Os F^8``>)9FDsE:)v'7>?` /3?FG1+sm` >s1 n-)
)>^ bc
D S/h!012 '7 3) PN,9`:)
'&9: := {0, 1} 93 n
f: n→
† h$/3 0 /F ST+~.Q /3 1 F 0:!* ‡
67$ )8,9.sE>!P 3lm>^) k$/?PN,9`>)^F F!W9)+PN.>fb>^?W]H3
“n2 ]=: n
`FG ; /F HF b, ) F^(' 'X9).:]=/`>) ).,9.sE> F g fb8b,5WFG)+) =
)>.!9 PN,= k$/-PN,`>)F 9)!)o'78`FG))DPN,`>)F
/3
n=1
c :x→
0
)^9 3)^)o?3
/3 )8b)^ XCTg
'X>^0
/3
c1 : x →
1
:x→
x
:x→
x
0 := 1
1 := 0
de )PN('X_'7 FG)G`>) ,= PN`,F )-,9^ 93 s99^ k1$/ PN,`>)F )^ O)
F xPN,`>)9F!P
2 )^
\1,` PN,`>)F OFG) `>fb)?39>F^`>sm3|F F^_/ )s9.)9) FG)^FT)^9 PN,9`:) f//,F"PN xEF^F^s9+^,9>)F.VX?:]/89.PN!
s99^ k$/ PN,9`:)|F+V &S
F^('X5 ,=_Y
A †
‡ d ) F 9/>3
: (x, y) →
x∧y
)
V &S sm`$/,F^
PT/3 P
‘4, _|,FGF8'X )

x∧y = 1
x = 1
y = 1
& ]av RR
PN,`>)
3>W93 ,=+AY† sC‡ F"`$3 C "_de P `>) )^9:8^ )o'7
f : (x, y) →
x∨y
F^FGs9a)>^>))F8PT)a'73 G A‘4,y`$/$/3)
/F ^)_$/FG)_-P hs9,=)
E
uv,FG)8F '77)+`$ $/ G)> $^ 4)9) F G ]/`>)^ 9
P =5g79
PN,`>)|)^ O)
`^^FGE3Fh)^.)^9 N)G)> )>^:))_F7F^('X ,^DAY†e`g‡:nd )hF ,F^,9/8^PN>^>3)
/F ZC
,s$<~C./1[F&I: ,= Y
A †eg ‡"3>9`>)^F!) )s9 PN )8,9^
: (x, y) →
x y
PN,`>) XC gT
x
0
0
1
1
y
0
1
0
1
DFG
x∧y
0
0
0
1
x
0
0
1
1
J
x∨y
0
1
1
1
y
0
1
0
1
D+)G
x
0
0
1
1
Figure 4:
x y
0
1
1
0
y
0
1
0
1
AJ
D G
AJ
x
0
0
1
1
y
0
1
0
1
DU/
x↑y
1
1
1
0
G
x
0
1
x
1
0
D (G
M8J
J
… sJ'KLtD!.ST:BbcQ ,ES/h!012M.T
,^?A F^('XF uv,FG)a PN>' :]/89>FQ%&('7>fb> T `>G)/*F^>9FG " )
Completeness.
F^('XF b,*:fb>^1)^995sE,=)_s O^ k1$ PN,9`:)FQ\1 P!)FG PN,9`:)FO
F^aPN,39/)/x)9) /F&<:!V s99^ k1$?PN,`>) `$ sE8>O)3 P)- =
:]=/89 ZC
`/sE">)>3aPJV &S 9C
/3 &C g ZC
(x, y) =
V &S
(
C
(x, y),
XC g
(
V &S
(x, y))).
ed PN_/ G)^9:& $/F G s9,=)&) ^93 =^ ,N/F7b ) FZ"$/F^_`9>` b>3
s1
.)=,-/† PN, ‡ EFGF^s9T`.s O)F P O,)F>
\1NO ) PN,9`>)^ ZV &S
39>F^`>sm3 ,= AY†e3h‡8`$/ sE
: (x, y) →
x ↑ y
>O)3aP XCTg*/3aV &S †e`")^9 9/. ‡ ZV &S
(x, y) =
XC g
(
V ZS
(x, y)).
G>9:) =
qr:)&,F&3>W9T'X9)7'7"/ s
Ž M./1 )J<:O .Q!
SA;/
D SC!01qM.T ;<1[:!Vy;/
D„S/C<012
1[.
Definition 2
+" ,)
;!V
1 S ,F ;/H,sgLM:/!.<.Q,) ;<V |ST:!'jCDw65C+AM~V /M21"M.f657
generated
F
Fd:!1 Y;g <. ) -v657j/fM./2M6. ) -)?657vS/h!012M.S/:<' 
x
:K3.T!
ySc;!1":!VS/h!012M0./-B.Q!1 SW;!1[:!VSC!01qM.10.R.TF1q)Kj;/
complete
1 S3)IM~V?1 S/F&<:!VXS/h!012
y;<KF N&<<:/+,)„;<V F 
f
! 9(' > 3PNX.`89>)>9>F^F 9^1P p 57A.T! S\S/C<012M.
bc
DESC!01qM.T
Theorem 1
{
V &S
,
C
,
XCTg
}
10.O'KLtD!KST:657I.Q< SI;<1[:!V
& 
4 Rb@
V&+s O^ k1/ PN,`>)
F4`89>) 3F^`> sE3 s )^F <5C:/J!<:!1[.<012cFd/!{
Proof.
f
:
= :]8 V &S 9/Fr` O/`>):FG)`4fb`:)
(f(0, 0), f(0, 1), f(1, 0), f(1, 1))
(0, 0, 0, 1)
PN F^^)$ q{>)
3).) k$/ PN,`>)?'&) ` O/`>):FG)`.fb>`>)
0001
f
Z:]=/89 HbV 1 bZS2 b3 b4
b1 b2 b3 b4
= f0001
de )7W9^FG)4FG)>P9)hP '7ZF^('y)9)n/H)F^hPN,9`:)F `$/ sE7>)3 '&F^
`9/`>)^>FG)^`Dfb`>)&`)FZ.F^ nde3
3 1
f0001 (x, y)
f0010 (x, y)
f0100 (x, y)
f1000 (x, y)
V &S
=
V &S
=
V &S
=
XCTg
=
(x, y),
XCTg
(x,
(y)),
XC g
(y,
(x)),
C
(
(x, y)).
g 5``*) PN+,N PN
PN-:]8 X'7 `$/ `>^$) )s9?PN) PN,9`:)
f0010
V &S
&C g
/FZ ,= A /3a`f1` ,^F^fbF7)9)7)TF^,)9.`9/`:)>FI)`
(x,
(y))
fb`>)^XF
0010
de )TF^`>93 FG)> H'7TF^('*)9)h/_PN,`>)
'&9FGD` 9/`>)>^FG)`Xfb>`>)hF7 >
`$/
sET>)^3{ng7F7F 3Ts_`.s 99")"$/3=>9:)3 GF^ PN,`>)F
1
)=,-C
H'&9` F^89393Fh,=a) 1 ’BF> =&:]/89 C
f1100 (x, y) =
C
f0111 (x, y) =
(f1000 (x, y), f0100(x, y)),
C
(
(f0100 (x, y), f0010(x, y)), f0001(x, y)).
+
s9FG)/ P 7
' H)FT^,9>)T,=)TPN_/ 3$1 1'7 >)^
/F
f0000
F^` '7.sE>fb )9)Db, >) )^F
f0000 (x, y) = 0.
2 ]H>`F^ R /F 1F4b, )^"F^('y)9)x)ZFG>)F V ZS XC g C
x
XCTg /38:fb )hF^>)
{
,
} {
,
}
)9)T`F^FG)FDP ) F^ PN,`>) ZV &S .
`89>)"PNT) F^>) 4
P s99G k1$/
{
}
PN,`>)F
2.3.2 The type bool
ed +6hY"Y k1/F ^k>FG)>3+s") PN,39/)/)o1E
xd )F f/,94/k`>9FGFG)F
bool
PE)D)v'7 >)F 0:! 93 ST+~.Q )9)hT/FGF^1`)3'X ))D)>/F
/3
true
false
FIE`>) fbb=X:]=/89 bool b = true ;
3>W9F& f/Ns9
Pr)o1E
93 )N Fk)7) 0:!* b
bool
=_/ O) )o1E bool F / )^/)vE b3>W93 )DsE7>F^F >/H)9/ int † X
' `
),=aFhF^Fh>r)9/
F^ \1`>) 1 1L@‡ unsigned int
& ]av RK
g7"`>8 >)XF^:)&Prs O^ k1$/
PN,9`>)^F Fh$f//s9XfHN!)^9 D/N{
Logical operators.
12,+R<L7<:/+:g.
† V &S`‡ || † C a‡ /3 ! † XC g‡:
6 8 3 )) )O)?,F^>3 &&
\1`>)^ 1B;H '7 FG89a3)P
'X ) 0:!* /3
'X) ST+~.Q k)
93
.s9
1
0
&&
||
9^-m>)^F m'X
F ,9^bTVX E>93FT^.Gf/,9>FDP4)o1m
{/3? `/
!
bool
E>)FT/F^8>),= ^f//,FTPx)o1E
q{ b `F s93FX!FG)^a)^ bool
&&
/3
s93Fh^ FI)^)9/
||
!
&&
g7> F /F^&Z,9.sE> P=E>)F .)>)^` )o1EFr'XF^k^F^,)
Relational operators.
FXP )o1E
=T$/`?O)>)`T)oE )>.:]HFG)X) F^ ] :<!U+012+v<L=<:/+:g. bool
< >
{/3
g7F^+ s99^E>)^FX'XF^ )o'7^f//, E>93FT^ PnF^
<= >= ==
!=
)>)` )o1E8/3 '&F^ FG,9 ) F / ^f//,8P )oE
gh8E:)F
/3
<=
>=
`^^FGE3-)8) _)^9>_)`$ NO)F
/3
^FGEbool
`:)fbb&gh m>)
)>FG)F
==
PNZ 1,9/ )v
93
)FG)FhPNX9 1,9/)ob
!=
\1`
Fx/.)^/)vE )k^N) E:)F _ /FGX9$fb m>/3F P=)o1E
bool
ng79TFIE`>) fb!`8 F^F7 39"/``^399+).)"`fb)^ ST+~.Q 0:! bool
<
VtP 1,)!sE>! ’ F FG) b.FT),F^+) F^F^)"m>)
Watch out!
=
'X>T) 1,9/ )v_m>)
Fh$/)$
==
VXFX.>r, )>)^`XE>)F7s93 FG)^)^ NO)9/mF 9/3
)F^" )^,^s93TFG)^^9 )9/ )"`$/ E>)^F
k9^
^)>)`&E>)^F7 fb"99:Z`>3`")9/
Boolean Evaluation Rule:
)9/mm>)^F 9/3)F^"9$fb >h9^`3` )9/s99^_`$/mE:)F>
=X:]=/89 1)
:]H>F^F^
7 + x < y && y != 3 * z
Fh`$ ^)FG 3-F
((7 + x ) < y ) && ( y != (3 * z )).
kk`PN,'&)"_)_)`$/OF^^)`,=)
)O) F^,` +/F
a=b=c
VXF Z6hY"Y
:]H>F^F^
a == b == c
Fh)Z 1
,f//)Z)
a == b && b == c.
n
P) /F^FG1`NO)fH )vyP
D) : ]19^F^F^ a == b == c F `$ )F^ 3w/F
==
4dePm/=P /3
7fONs9F P9)vE
'X).f//, b)^9h>f//,9)
(a == b) == c
a b
c
int
0
H3F
(0 == 0) == 0 −→ true == 0 −→ 1 == 0 −→ false ,
uv,FG)Z)^9 EF^)^ P 'X9)7b,a,F^,9/_/
s
(.''(A*
2
%(7
.*
/
R"L
--*6>.BO7
*
a=b=c
*
27
&0 &
:
6>
%R
/
%*
J
& 
4 RU
g7&'7 H('X8PN+,N/ZPE9(' )^ :]H>F^F7V &S ):FkPrC
93
De Morgan’s laws.
fH`kfb>F^Z'X)^!) .P XCTg 9/>3 /P)> ) n)^F^ _)_O)`NDVX,,9FI),F SD
b/?
†^$K#R $Kb@Hg‡: %&h'h/F T9>nFGH.sE`7/>s /3`F> VXF^ )Z,F
PN+,N) P G_)_)^`$/H93,`>) !/Fk'7 1O' /3,9FGD)k)39$ 1>F s ` ) -
g79 3 ^b/ PN+,N/TFG))^ )9R
) †e-6hY"Y N9,9/! ‡
!( x && y ) == (! x || ! y )
/3
!( x || y ) == (! x && ! y ) .
g 9>F^!PN+,N/T`$/P)asE 7
, F^3a)+)^/F^PN bc
,H,sgLM:/!.<./1q
)o1E
‡
) GF^89:. 1,f//)hPN-Z:]=/89 bool
† /:]HFGF^-P
!( x < y || x + 1 > z ) && !( y <= 5 * z || !( y > 7 * z ))
`$/ 1
,f//)sET'&^)^)/F
x >= y && x + 1 <= z && y > 5 * z && y > 7 * z
'X` FZ`>$ 9^PN>s9 )^>F7P /39s9)ob
. 3>)F"sE,=)!`>3`F+/3 /F^F^`N) fH)FTP7)^9 `$/4/3 )9/
=
E>)F (F^>kg Os 1 ‘4,"_XW93 )^9Fr9PN^_)X PN,"3>{)hF^fb42x]H>`F^ KH
Description
`$m)
F^F
$)^>
F^FhZ 1,9/
$)^>&Z , 1,9/)o
1,9/)o
`$E/3
`$m
Table 2:
Operator
!
<
>
<=
>=
==
!=
&&
||
Arity
Prec. Assoc.
$R
)
>P)
>P)
>P)
>P)
$#
>P)
$#
>P)
R
>P)
0
>P)
_v:</,)J</!. ) +.<.QQ<1q+01"F
1001q!.} SyD/N12,+) :/!D+01q+A<L=/:/+:g.T
<L=<:)+.G)j:<!0C:!F+~*!.G:/B:!Fd+Z !. 
P[
d ) F"EF^FGs9 )9) ) )o'7aE:/3F!P7
^N) 4m>)
Conversion and promotion.
9fbX3lm>^) )oE g79F `$/F^&Fn)^^$)3_ )XF/h'h$ /F PNk)D)^9:)` E>)F
g797`8mF^) ]HF^FG8Fx>f//,9)^3 +)h^ >/H)o1m ) '&`+)7E>/3 P
) F^Fh>/E)o1m"Fh89`>)+`fb>^)3{nde ^)`,N E:/3FZO"`>fb>^)^3
bool
))!>FGE`>)^fb.)>/ )oE Px) )>TE>93{D%Z> m) f//, S +€.Q FX`fb>^)3
)
T/3 0:! ) deP!) )>/D)o1E F
X)F
`fb>F^*F 3>W93 ) sE?
LM:<0'A012 xVy9^1).Fn FGm`N/`fb>F^8int
PNn'&` )X6hY Y*FI)/393 ,9/)>F
)9)h PN_O)_>)FhFG)$
& ]av @#
gh `fb>F^?1>FD)8)^9!)>T3`>)^ PNT`$/rE>)FTde ]H3-:]H>F F^F b)&)/E>/3FkP `$/E:)FnZ`fb:^)3)
8FG,9`
'h+)9)
bool
FZ`>fb>^)^3a) S +€.T /3-/
)>hf//,"FZ`fb>^)>3a) 0:!* 0
ghFGk`fb>F^F /F^7) b 9N/` ")N )^F /3!/F^F^)F O/Fr")^94PN('X9
:]=/89F
bool b = 5; // b is initialized to true
int i = b ; // i is initialized to 1
2.3.3 Short circuit evaluation
g79&>f,9) PE:]HFGF^F fbfH"`$/938^N) 9m>)^Fn1`>3F /``>3 8)8) >/ ,F E/FD3F^`,F^FG3 ?\1>`>)F 1 1 /3 1 1<;H&%&('7>fb> m)>^ FX
8EG)/) 39 lm>>9`>"bO3 )!^39:& 'X`)!m>/3FZP /aE>)&!:f/ ,9)3{X >9:/ )FX^39:TFX,39:W 3m) s99^`$ E:)F
/3
&&
||
/'h1F ,9/)
)9) ) 8P)8E>/3 F >f//,9)3 WFG) ^Ofb: ZP&)f//,aP
)_`8EF^ ) :]1F^F^|F+/^$/3= 3>W93 s )f/,9_P7)_P).E>/3 ) )
)7E>93
F R<Fd+Z*+) )h/e ghF :f/, O)_F^`TF HO'&F ./57:gR<1":<<h10
<Fd+Z*+01q %&('c`$/5)+9E )9).)_W99/ f//, F $/3= 3>):3 s1 ) P) m>/3
\1,EFGh)9)4 /
m>) )hP)4E>/38>f//,9)Fx) ST+~.Q “b) 9"_)^):
&&
'X9) )^9T)7E>93 fbF H)^9D>F^,)7'Xm/'hHF sE S +€.Q k%&>9`> H)> F7 3
)
>f//,9)+) )"E>/3 )!/ gh /9/,FTF^),9)?1`>`,=F P /
E>O)
||
) P)ZE>/3a:f/, O)F ) 0:!* V ) WFG) F^) )!1 1F /F!P F^^) ` `,) :f/, O) F">?_)G)>"Ph 8`>9`:b
k,=)")^9: F"9)^9:"sE>9:W9) d ) ``,=F"'&?3$/_'&) :]HFGF^F )^ O)!O 3>W93
PNZ`>^) >)>F bn6 F^3>hPN& ]/89X) 3fHFG_E>)^
)^ O)ZFh3>W93
PN&+ > 39 fHF^hb SD, )^ F^^)Z``>,9 )Z:f/, O)
1'7 `$/'Z)
x != 0 && z / x > y
/3-sE F^,= ^) O)X)F& ]HF^FG FX/'h1F&f3{&dePx)!^)&E>/3-'h/FX:f/, O)3 PN
— ) ) >F^,)Z'7,3
sE ,9 3>W93{
x==0
2.3.4 Details
g7 ZC
PN,`>) F.F^-P ,) `$/>3 M01[Fd+D</ /3 3)3 s1
Naming.
=
g79 hV &S PN,`>) F /F^ H('X /F +~<:!+„)J/=1q+ 8M57W<:A.<0:<‚d g7N)^):
9/ F /P): )8VX>`$/ _)^9>_)`/ %&=^ ? \1>lm>G†^$KK; $URA+‡D'&9 9^Ofb3
)9)Z/{)>Z`/mE>)F7`$/sm":]1F^F^>3 )>^FhP ZV &S!
.*6O
>'. BK2
%(2,>$
N*
*
$
A Q Q
277 2
x
0
& 
4 @H
??9fb F^>**\1>`>) 1 1<K )9)
)^>F
`$/ sm :9^F^)3*
Bitwise operators.
s99^ PN_) 4)9) F k/F8 F^ ,`aP&s9)F+$/` P&'&`5F+)>
k$/
0
1
PN,`>)F `$/ 9),=asE+:]1)33 ))/x)vEF s1 9H)ps9)o'XF^ )
)
s99^:9^F^))F
Ž M./1 )J<:„ =qN&+01"F&O1"MqNY<: b ) 0u`@1[M NY<:g. x = Pb a 2i )
i=0 i
SQ:+[

{0, 1}
0 i b
:^^C:!V?bc
D^S/h!012
657
/:!:<<.qL=)+{
f
:
{0,
1}
→
{0,
1}
bitwise
operator
ϕ
f
Pb
1[7Nj 1[.3)J )O+.
i
: f ;<1[:!V bc
Dϕf (x)
@SC=!01qi=0
f(ai)2 2
657
:!:<!{
g : {0, 1} → {0, 1}
bitwise operator ϕg
Pb
.qL=)1"7NE 10.z)J )I+.
i
Definition 3
P
-MST:Buv5&12!5
y = bi=0 bi 2i
ai , bi
g
ϕg (x, y) = i=0 g(ai , bi)2
=",FG)^O)F^,=9mF^ )9)D'7 9fb ,F^3 )/ )vE 'X ) 8A es9)X:9^ F^))r_g79) F >F^>)F ^>F^)F x/3 F^- , )
'&9` 0000
0 0001
1
1111
>>F^)^F
15
ghab,`$/a`` )^ O)
/3 ϕ (2) = 13 ϕ (4, 13) = 13 ϕ (13, 9) = 6
\1>fb>!s9)o'XF^ E:)F 39:W 3*PN)?)/D)o1mFa 6hY Y.Jg79: F s9)o'XFG"V ZS
+s9)o'XF^ C | E/3 s9)o'&F^ &C ^ /F&'7 /FD+s )v'&F^ XC g ~ )9)
&
F",9FG, -PN:^3 )-/F /']Lt <'A<M VXF") )>)^` E>O)F r) s99^ s9)o'XF^
E>)F †e ]=`>)nPN ‡x9fbZT`>^FGm93 /F^FG)xm>)xgh `>39>9`>Fk93
~
/F^FG1`NO)fH )v8P )F^"E>O)Fh"FG)>3g s9 ;H
Description
s9)o'XF^D`89)
s9)o'XF^T/3
s9)o'XF^&]=
s9)o'XF^D
/3-F^F^)
]HX/FGF^)
&/F^F^9>)
Table 3:
Operator
~
&
^
|
&=
^=
|=
Arity
Prec. Assoc.
$R
)
U
P)
K
P)
@
P)
A
)
A
)
A
)
_v:///,)J</?)A+.<.Q
<1 +01[F
1[0V| S3;!100u10.T^<L=/:/+:g.T
Z) )^ O) )PN,9`:)9/)o P )F^_E:)F"F 89>))^ 39:W 3xF^9`> )
s9)o'XFG.^>F^))9F"P )/x)o1m f//,F O )"FGE` W >3?s1 )86hY"YQFG)939^3r
9fb?y3F^`,F^FG3 ) FG)_P ,9>)O†e/3 FG)
b>J‡ F^,` :9^F^))F
\1`>)^ 1 1BKHW
‘n, F^,3 )>^PN MZV ,F^ )^9>F^ m>)^F '&9>?b, ‚Qu ) ^> FG)O){h2 fb-)
:]HFGF^FXfbfH+)!s9)o'XF^ E>)F& 89>)O)
3>W93{
ghFDFXFG)DsfH,F&'&)-) s9)o'XF^"`89) >fb Px'7./F^F^,!)^9 FI)/393
s99^ :9^F^)) PT\1`>)^ 1 1<K )
f//,
PZ)
:]HFGF^
3>E>93F+|)
~0
1,.sE>
Pks9)FT?).>FG)O){ g7FDf, )>>PN `9/FT'X?b, FG'&)`
b
P es9)h_/`X)8
es9)h_/`
32
64
& ]av @
2.3.5 Goals
V7)7)F7E) 1b,aFG9,3?
Dispositional.
g‡ H(' )!s /F^` )^>
^,93 k1$/ PN,9`:)FD/3 ,93>FI)/3-) ``>)
P `89>)>9>F^F<“
‡ H('
“
).)oE
bool
{)FXf//,
/ r
/3 )+`>fb>FGF!/3 E>)^FXfb fH
bool
;‡,93>^FG)/3-) > f//,9)aPx:]H>F^F^FDfbfH `$/r/3-)9/{E>)F ^)^`,N )^9 k1
$/ 2 f//,9) h,h/3 )7``>)nP F^^)4`^`,) >f//,9){
de ^)`,N b,-F^,93 sE"s9D)>$
Operational.
†o+g‡(fb!Z3FG(fb s /FG `TFG))>)Fhsm,) k1$/
PN,9`>)^F<“
†o ‡(fb"'&>)>h&)&+ fbaF^>)ZP s99^!k$/ PN,9`:)F7FZ`>8 >)
“
†o ;_
‡ :f/, O)h fb>8:]H>F^F^8fbf1"O)>)` /`$/ 93 N)^9/HE>)F<“
†oTA+
‡ ^$/3y/3 ,39:FG)/3y fb F^89 †eF^>sE('`‡ kfbfH s uv`:)F8P
^)>)`Z)vE]e† `,3
‡ /3-^)>)` `$/ 1/3 )9/mm>)^F
bool
g 9+)> ./1[']Lt XLM:</N
:/' >PN>F )
/p)9)"`F^FG)^F!P _/?PN,`>)?'X`
7
)^,^a`F^FG)^F&Px.F^ ,9>9`> P 3`NO)/3a:]19^F^F^-FI))>)F &)^,/ H
) PN,939/)/m)o1mF&93E>)^Fh3FG`,F^F^3a) >`3 F^>`>)FZ ,9FG3{
2.3.6 Exercises
:
Exercise 23
n
-v57u '=V|)1 W<:</M9bc
D?S/h!012M.
f:
n
_v:/F&j:)10.qLM:<FdB65C+ ST:^+"
Exercise 24
x, y, z ‡
†eeB/ ZC *FZ/F^FG1`NO)fbg‡
(x y) z = x (y z)
† eB (V ZS , C ) FZ3FG)Gs9,=)fbg‡
sC‡
(x ∧ y) ∨ z = (x ∨ z) ∧ (y ∨ z)
!` ‡ (x ∨ y) ∧ z = (x ∧ z) ∨ (y ∧ z) † eB ( C , V ZS ) FZ3FG)Gs9,=)fbg‡
h3 ‡ (x ↑ y) ↑ z = x ↑ (y ↑ z) †e B ZV &SwFh/F^F^`N)^fbg‡
→
,s10.< †o+g‡
†o+g‡
:
x 1 , . . . , xn n
<:!'j.^ SX657 
Exercise 25
xi 1
i
n
-\N1"F&I|F&/:
;/+R)J<.Q<:!1€Lt01q S
x1
x2
... 1[
xn
†o+g‡
M8 57u 65C+j657^SQ" u1[7Ny.Q<6. S3SC!01qM.x:< /']Lt <ESQ: 657 T. !I S
;!1":!V bc
,?S/h!012M.T
o†  ‡
Exercise 26
‡
{
V &S
,
XCTg
}
4 & 
sC‡
XC g
,
}
!` ‡ {ZV &S }
h3 ‡ {XC } H'&> &C := &C g hC "
!‡ &C
V &S
{
,
}
‘4, _ ,9FGn)kP `>) )9) {V &S , C , XCTg } F h`89>) F^>) P1s99^ k
1$/ PN,`>)F
{
C
@;
8=LYL=.T - -E)
:< +"`F:!1qY;gD!. SA0V L7
a b
c
uv5&12<5y657|,s!LM:<!.<./1qM.
)
Exercise 27
-3) SQ:
b
c
:<!.7~6.T
a < b < c
 Š1")xFd+Z !.]SQ: V+12<D)x)1 W/:<<Ma
o†  ;‡
int
a < b && b < c
_`:/<M657!./1 W657ŠST[Du1[7N^,sgLM:<!././12M.XJ//:)1[7NE<L=/:/+:aLM:</)J//!.
)I+./.Q
<1 +01[F
1[012!.T
†o ;‡
Exercise 28
‡
sC‡
`!‡
x != 3 < 2 || y && -3 <= 4 - 2 * 3
z > 1 && ! x != 2 - 2 == 1 && y
3 * z > z || 1 / x != 0 && 3 + 4 >= 7
… F +~t+a657P,sgLM:<!././12M. N1[Fd<E1[ … sJ<:<<1[.Q hmX.<2Lt{,;<Vd{q.<2LM- +././C'^1[7N\65C+
:<+[Š S]0VgL=
u1065
- )
9

†o ;‡
Exercise 29
- -`)
x y
z
int
x==0 y==1
z==2
ƒ 5C+],V$x.TV Y;<CP6577 LMC] SG657`ST[Duv1"7NGLM:</N:/'
<:!1 B1[R)J2L=/)1[7NO 657B1"&LM7R)I,sgLtU1[ Vhh:B:<,+.Q=1[7N&
Exercise 30
Á
Ã
Â
# include < iostream >
int main ()
{
int a ;
std :: cin > > a ;
std :: cout < < ( a ++ < 3) < < " .\ n" ;
bool b = a * 3 > a + 4 && !( a >= 5);
std :: cout < < (! b || ++ a > 4) < < " .\ n";
return 0;
}
Ž 5C:/J!{
o† TA+‡
Š1[)?6573 N12,+ML7:/<M657!.Q!.z1"Z1[!.GlO)|k @ SK657aST[Duv1"7NBLM:<N:/'A
5
C
+
I
V$.TV Y;<7j657H7 LMCA S 657jSQ" u1"7N LM:</ N
:/'
ƒ
Ž 5C:/J<<:!1 10
)J2L=/)1[7NO 657B1"&LM7R)I,sgLtU1[@V$C:]:<,+.Q=1[7N&
†oTA+‡
Exercise 31
Á
# include < iostream >
int main ()
{
& ]av @/A
Ã
unsigned int a;
std :: cin > > a;
Â
Á
Ã
unsigned int b = a ;
b /= 2 + b / 2;
std :: cout < < b < < "\n" ;
bool c = a < 1 || b != 0 && 2 * a / ( a - 1) > 2;
std :: cout < < c < < "\n" ;
return 0;
}
2.3.7 Challenges
p 57 h>fb>FGaM F^ h)) i P_ vo 1[.IEST:!'A+G S?uv:!1[01[7Ny,sgLM:<<.<./12M.
u10657C=V]L7:<<M657<.Q!.T \_ ;<'I`L=<LMCD:W1" 657XU+W=1[</<M./1Us012<.]uv57< 657
/']L7=V ˆ <uP <66{2_J!‚:/).<2:g,)BC.QP1[v+.`1[&LMChSQ:!'+hST:B,sgLM:/!.<./1qM.]|657/1[:
)J!.<‚Q<L)?5C)+57<D)I+D<7U+:g.T
# \_ \-Bu` :g./zuv:!1[ 657@<L=<:)+./-?) 657< 657@<L=<:/+: i65C+Q% .Auv5C+G657
Z:fb>F^ .<2)+.vST:o& 4:^,sJ']Lt <-v657^,sgLM:<!././12
Exercise 32
V ZS
(
C
(0,
XCTg
(
V ZS
(0, 1))), 1)
y;<Bu:!1[6<x~1[‚dK65&10.X1[ P_
001
V &S
XC gzC
V ZS
1
.
p 57U+6<:^.Q *</A SE<L=<:)+.?)„<L=/:/+:g.E)J !.EA.qL=//1 <Fd+Z*+01q.Q<{
* </G Sc6573 sgLM:<!.<.12=- .QW8/!01q 7 7 h p ?/Fd+~t+z,sgLM:<<.<./12 1" P_ P- u`
NY 65&:<$N5|6573.Q //S/:/' D0S<?:!1 N5Y auv57<<Fd<:^u` )I <L=<:/)-9u`j)J*% )J =V65&1[7N-K;!7cuv57< u` )@ <L7<:/+: i/ S :!100V o-cu`O<F+~t+E10ŠST:?657
<L=<:)+.^)1[:<!6ZV| 6573D0S<c SK10P) :<qLtDJG65731[=F&ZFn&)
.Q < ! /'I<M6n.
;!V3657`:<<./7~ S657X<F+~t+012 p 57<Au`NYKB657`,s+Š.Q n<+B1 !D<'A<M2R# ,+.QK S
C:^,sJ']Lt GY;<F&/-a65&1[.`LM:<Q//,)+.^+.SQ[Duv.Gi/<C:!:/<M6~VGLM:<
!.<.Q,) <L=<:/+:B1[y;/D)!o
XCTgzC
0 0
AND}
| 1 {z
0
C
V ZS
0 0
NOT
1
| {z }
1
V &S
0
1
OR
| {z } 1
1
1
AND}
| 1 {z
1
1
1
V &S
& 
4 @0
p E.T/z65C+65&10.X10.X1[)J)Oju`V| SG<F+~t+01[7N?657:!1"N
1[+f,sgLM:/!.<./1q
V ZS
(
C
(0,
XCTg
(
V ZS
(0, 1))), 1),
V$,WSQ:P,sJ'KLtDa'+‚dPB;<6'E{ LO):uv1"7N3 SO,sgLM:/!.<./1q?0:</Xiq8/!01q 7 7 o
65C+\:!:<!.qL=)+.K?657<Fd+Z*[email protected] *</B1[ P_ ]cOu1[[ )?65C+65&10.]0:</31[.
+~.QjFd+Z1q)PSQ:B657j:!1 N1[+f,s!LM:<!.<./1q
ˆ <:<„/'A!. 657„J<0*+P s$<:<<1[.QQ ƒ :!1[LM:<N:/'E. and.C - or.C -G) not.C 65C+
:</<1"F&j+.W1[&LMC`j.Q < Sz;<
D@F+~*!.W1[
i q+"Š<L=<:/)+.]^657BD0S<R S
s
{0, 1}
657 <L=<:/+: od p 57?C LM7R.<577U)|;<^657^.Q *</
65C+`u`N&!];!VI:<2LtUJ<1[7NI657
U+.< <L=<:/)+.K1[ u1[65|657z:<!./C€c S<Fd+Z*+01"7N 657sz:<<.qL=/<01[F&?<L=/:/+:`SQ:3657<'
# ,+n.QI S
s )
-Ru`jC.Q
-K)BSQ:
 :O,sJ']Lt /-B
and.C
n=1
1[&LMC
-$LM:</N:/' or.C ./577U)^Cn LM=72657R.Q *</not.C
- u5&1[ .<57CD)XV+12<D)+.
(1, 1, 0)
and
(1, 0)
not

(1, 1, 1)
# Y)Y)10012=-\uv:!1[3LM:</N:/'j.
)
65C+37 LM7W657 .T *</
&;!{
s
57K1"&LM7  one.C
1[+"~V+- u:!10G]LM://N:/'
i2u1065
21[,)I;!VA!LYL=<)1[7N : ^6zero.C
eval.C
j1"&LM7 oj65C+\7 LMC6.X0657j<1']Lt0V .Q *</Ts
p 57`NYQ+* Sc+[765&1[.910.`^/Fd+~t+];/
DzSC!01qM.`1" P_ ;!Vz./1[']Lt~VE,+[Z1[7NB657
/:!:/!.qL=)1"7N.Q *</ S`LM:</N:'E.Ei"LM:///,)J) ;!V„O+[
o
-uv57<:<G657j7 LM7
eval
S|^LM://N:/' 10. 7.Q,)y+. 1[&LMCST:I657A,sj1[ 657O.Q <Q # =1Ds)
‹ 1[=Js?65&10.H< N&M6~V„;<j)JKF
1qA 9E  :E,sJ']Lt /-aO/Fd+~t+z657E sJ'KLtD
,sgLM:/!.<./1qES/:<' Y;/F&B1" \_ \- u`z.1['KLtZV 0VgL=z657^/'j')
./ eval |./ zero |./ zero |./ one |./ and |./ not |./ or |./ one |./ and
p 5&1[.,+[~.+"Z10./)zLM:<N:/'E.K1[0h:!=-auv57<:<j?.Q2L7:/+01"7NzLM1€L7z./V+'A;/ 5C+.B657
W!W65C+\657A7 LM7X SG657KLM://N:/' O657^ [S<B S31[P10.3C.Q) +.^6571[&LMC| SQ:Ai [1[.
LM1€L7)E1"M oE657RLM:</N:' ?657K:!1"N5YR SX102
Ž M.T *<M6~V+-4657auv57DR ST:<<'A<M012,)G/'j')X.<57CD)\./1[']Lt~V\uv:!1[ c.<2M{
)Y:/)I7 LM70-657]:<!.7~P SX657j/Fd+~t+012 P€.TE!.<vVhh:RLM://N:/'j.Ku1065A.Q1'I657<:
\_ .Q *</<./-1"AL7:g01q<7U:3657 2&;!F
1q7. ^!.G SK657SQ:!'
./ eval |./ zero |./ one |./ or
i65&10.GK.<577U)IC LM7 oEE'+‚dK./C:<B65C+a657<V u`:g‚+.3,s!L=/!,)Y
1
# 10. j/!.<.T:!V 65C+jV$C:LM:</N:/'j.yJ/2Lt?.Q <!.
Sx:
;<100:/:!V
Hint:
s
D<7N65+.91"&LM72 'Qs+1['^C' D<7N65 S Y-YST:K,sY'KLtD<-10../ <1q<M$ST:W+[+LM:J!012,+
LMC:L7.Q!.T
& ]av @R
2.4 Control statements
ƒ K:<Ruv5C+ u`\:/2L=+,)h~V )J& … s$/!" //<-657<=-10.„J!
!; CP?5CY;!1[2
ƒ 1[[>WC:/M1[yE./C'^'A:!VO S R:!10./6 C% .]1 )J+./p 57]8M:!V SK_v5&10D.Q<Lt5&V p 57 ‹ 1[F&!.3) efLM1[=1qM.
S]657 ƒ :gU)% . R:<,+!.<_v5&10D.Q<Lt57<:g.Gi/k&l Mn/o
p 5&10.3.Q!012 1[M0:/Q) !.PSTC:?/2Lt6.j„/M0:/v657 ,sJ/<C012 S^^LM:<{
N:' F^`:) - )>O) - s91`1F -]) uv,8 F  p 57!.T/2Lt6.A<Y;gDj7.
O)J<FQ1q+9S:<' 657^)J0STC€9Z1[,: /M0:< \u uv5&12!5 ,s$//7!.3.<2+/'I<M
;!VH.<2+<'I/M\S/:<' <L ;/6'A u1[[cD:! 57u(657!.Qx/2Lt6.
:<^1[']Lt <'A<M) 1" Ž`K -K)O57ur !LYLt~V 657/' @/:<+E1"M<:<!./01[7N
LM:<N:/'E. 
g F&'7 9$fb FG?FG
P O ./ 9^>)^)o-F^89/Xg79:-`F^FG)TP48F^ 1,`
h
PkFI))>)FD)9)"+:]H`,=)3 .s1 +P^).WFG) )
)^9+N/FI)$+\1,` 8
F"F/3 ) fb_ ~1": /M0:< \u ghF")vE P `>)^9O'tF ,) ^FG)^`>)fb /F
$/` FG)O))Za)!F^,=`!`13!F&:]H`,=)3 )ZFG)Z9`> 3,^ )! ]=`,=)-P )
/-D\1,EFG b, 'h/)D)_89)Z/ /)^9J)9)XE:PNF $# B###8FG)>9FTPN
F^D=9,=)$ g79> b,_'7,93 9fbD) '&)^T!9^/ 'X )
)7$/FI) $# <### F Pr`39/
CXs1fH,9FG)FDFX,93FGs9Xgh>>PN { 3>D)_89>)h )^f1N/ / )F DE('7>PN,{`9/F^F ) `)^^{)^9 9O' P . O">39>3r
2.4.1 Selection: if– and if-else statements
CD9. ^)`,NF^89 'h-) 39:fHN)^+P^$T`)^9O'zFT)
F^>`>)"'&>)> .<2+<'A<M )T+ G)`,NZFG)O))XFZ:]=`>,)^3{Xde 6ZY Yz)^9F&`$/-sE!39!f1N if
g79 FG1)O]F
† j‡
'X>^ F/
if
:]19^F^F^*
f/Ns9 3`NO)P )vE '&F^ f//,F
sE `fb>^)>3 )
E/3  /FX) 9/"F^,FG)F FT FG))>)$ —Ž—
bool
F^_)`>FEFE)4PNO'& TF{>f//,9)^3M“/P/3!TP)FEf//, F 0:! F:]H`,=)3 /P)>G'h3Fwde )^9:'73F &
FG))^)8FG9)F )^9-`>)^ 9('
if
)o'7 s/`F gh.f/,9+
P
F^>`>)F 'X`?P4)F^+s9/` F"F :]=`>,)^3{
:]=/89 1) PN('X.F7P `13
*5(
RBI@( R"@
-.*
6M
"@.*
! ( %
`$/
g7
) 27
(7
"@.*O 4)(77
)
=
( "
%*(J
&  J @@
int a;
std :: cin > > a;
if ( a % 2 == 0) std :: cout < < " even ";
$3|a,9.sE> P GF )/393 =9,=) )^a)8f^Ns9
/3 '&)^ -) FG)939^3
a
even
,=)^9,=)ZP /3a_P Fh>fb{
a
{,;<:/!5 g7&FG1)(]8F
CD) b/
FG)O) )n`/8sE&`>8 )^3 s8/
if
else
† j‡
if
else
/ 3?) F^_/)`FTF"/F!PNO'&F FX ]=`,=)>3?/P)^>^'h3F<“ )>^'&F^
PN('X9 FZP `13
F!:f/, O)3M“ Pn)FTf, F
aF&:]=`>,)^3?P)>^'h^39F>
0:! =T:]=/89 =)
int a;
std :: cin > > a;
if ( a % 2 == 0)
std :: cout < < " even ";
else
std :: cout < < " odd ";
$35-1,.sE>.P FG)939^3|=9,=).)-)f/Ns9 g7|P
F >fb F
a
a
even
'&^)^)
)+FG)/393a,=)^9,=)!“=)>G'XF^ F7'&)G) )^ FG)/3 O3a,=)^9,=)$
odd
9>?PN_)G) FG))^) )DFX`)9FG>^) 9"s9^$ asE>PN msEPN else /3 if
sEPN 1 >Ofb> /3 ?
3)^3y/3
F /3 'X)
7/F F^O'& 5):]=/89 sE(fb dePX)^9
'X
else
if
FG)O))hW)Fh- F^T9D))h`$/ /FG+sET)o1E>F^>)DF&.F^T
67`>) fb /3 if-else FI))>)Fh H('XaF .Q!D/<012.<2+/'I<M6. if
2.4.2 Iteration: for statements
VQ+,9` mO'7>^PN,9n'h$ PZ_/9,N)^_)^9`>)^ (' F 9^Of133 s 10/:/+012
.<2+<'A<M6. kd )>)^_/('XFn).:]=`>,)^" FI))>) _/ )F mF^F^s9 'X)3l >)
/:)>FE$` )^rd )>O) FG))>)Fr^k/F^Z`/3 Q<Lt. /Fr)>G")^^,9 Z
FG)O)9
) † E)^)/Y
‡xFG>fb>/m)^F \1>`>) 93_)^>)8FG))^)^F D`>`>)^fb
PN:^3a) /F /M0:<.<2+<'A<M6. Pn
67F^39:)?s9 P `89,=) ) F^,
P )^9 WFG)
9),=
Sn =
n
i
1,.sE>F PN_?fb
Mx/ @ $/3F8y fONs9i=1
P FG)/3 O3y= ,=) n
n
3>W9F&9)^9:hf/s9
) `)/_) >F^,) =`89,=)F )TF^,)Z/3
W 9/,=)^9,=)F
s
)$ de83>4)!,3>FG)93+'X+)^97/
39>3 sE9fbFn/F4`N/>3 '7&9fb
sum_n.C
.<2+<'I
/M ) :]H9N/
) 3lm>^)h ^)FhPx
for
& ]av @K
Á
Ã
// Program : sum_n .C
// Compute the sum of the first n natural numbers .
# include < iostream >
int main ()
{
// input
std :: cout < < " Compute the sum 1+...+ n for n =? " ;
unsigned int n;
std :: cin > > n;
Á
Ã
Á©Â
Â
// computation of sum_ {i =1}^ n i
unsigned int s = 0;
for ( unsigned int i = 1; i <= n ; ++ i ) s += i ;
// output
std :: cout < < " 1+...+ " < < n < < " = " < < s < < " .\ n ";
return 0;
}
Program 7:
LM:</N. t./C'  Ž
gh
FI))>)DFT fb:^ `8 /`>)&PN Pk )^>)-FG))>) /F
for statement.
for
)&`+s9Fh)= FG)))F&X:]HFGF^FD)^8Dde FG)X`/F^F )
FI))>)
for
F^>GfbFD/FZ G`>,9)+1 +/Fh-Mx/ @1nd )FZFIH)O] FZ3>W93s
7“
for
†
‡
'X>^
F8 :]HFGF^ FG)O)) 3`>N)^|FG))) k )a1,
FG)O)) 1F^>!\1>`>) 1A= de/ P{)F^D`$/FGF >93F 'X )
F^`
F^,` )9) )^9: ^ /'hHF{)o'7&F^>`F{ sE>)o'7> )n )F^F /P)> &F^,9/ for
E3>W9F4/3 )^N/ F Xf/NOs )9) F ,F^3 )^"`)^/3 >fb)^, 3
)4)>O)!FI))>!) ’ Fr ]=`,=)r de
9F 73`N) FG))^)
sum_n.C
)9)h3>W9FZ)TfONs9 i
VXFha/
FG)O)) _Fh/:]HFGF^hf/Ns9D3`>N)^
'&F^D)vE
if
`$/ sE.`fb>^)3 )
d )T3>W9FT9(' 8) )^>)-1FT
m9//FT_/F
+d )"F!/O'7>3 )^ O)
-:),=F 0:!*bool
F >89)o- 'X` `$/F^+)FDf//,.F
)>^>)^3|F 0:!* VXF ) 8F^,FG)F |F./ ^s9)G^?:]HFGF^ )^ O)
_/F^ sET8)oE
†e'&9` _`$F^T)79/F +:lm`>) ‡: xF7/ ^s9)^^8FI))>)$
d )ZFh^PN>^>3a)8/F7) ;<Q)V P )^9
FG)O))$
for
&  J @U
gn19`/ 9/F+)^9
>l `>) P&`9/ af//,_)9) E$F.
{
\ ,`8/ >lm`:)nFxF/3.)!G_ bk>F^Fx)O'hO3F )^>9) ={g77b/HF )9)
1
F ST+~.Q /P)^>
89/F sE8:f/, O)38XW9) ,9.sE>4P9)F de )9) F^>9FG 1>fb:^
>f//,9) P
_ bF4"FG)^>)('h3F4)^9h3P )
FG))>)$ de
for
sum_n.C
_`>^)^F4)&f/s9
'&`FnsE,33PQOsEOfbZ
{xde`/F^F
i
b )FX'&>.).f//,.P F^9.f/s9 F /``>F^F^3 /3 ` 9/3 s1
/3
='7 `$/E)F f/Ns9D) /M0:<4Fd:!1 Y;g P )^9 for FG)O))$
FG))>)$ FG) +O'z$3 )_`F^ 3>W9+)^9+F^_)`>FDP !F+:]=`>,)^3 `5g7>$P)>
F >f//,9)^for
3{|dePX ) :),=F 0:!* /
10/:/+012 P4) 1 FI)^)F> deP >),=F ST+~.Q {)
FG))) <:!'j1"+!. for
)9)hF )^F7`F^FG 3F&>39)b
2n` F^ )^>) P FG))>) `F^FG)FxPW9^FG) :]=>`,=) r/3+)^9>
for
>f//,9)9
{aVXP)^> $/` )>)
F :f/, O)3 /b/r deP7)!^>),=F
0:! =/)> )^>)PN('XF deP >),=F ST+~.Q )
FG))) )>^9)F
g79D ]=`,=)
^39:7F )>PN^
for
{$G,9) :),=F ST+~.Q qr:!) ’BFhF^ )FZa/`>)^
k6 F^3>7)
FG))>)
for
for ( unsigned int i = 1; i <= n ; ++ i ) s += i ;
/3 F^,=EF^
FG) /) fONs9 F 3>W93+/3+9 )N/ 3T) xg79>
sum_n.C
n == 2
i
1
)hF7)FG)^3'X>)^9:
4VXF
F 0:!* 9)^9TWFG)Z)>)_FG)O^)Fngh FG))^)
i <= n
1 <= 2
F :]=>`,=)
3 F^>)^)^
) 7/3|)>/P)>
F 9`:)3 s5
F^,` )9)
s += i
s
1
i
CD )>) F O'|`89>) VXFx&:]1)xFG): )^9 `>93)^
F >f//,9)^3
i == 2
i <= n
/b/rZVXF
F 0:! {9)^9:D)>)-PNO'&F FG)
FX:]H`,=)3EF^:)^)
2 <= 2
s += i
s
) 4g7>$/P)^> F `>^)^38s1XFG,9`_)9)
4g7DF^`3_)>)Fk9('
3
i
i == 3
`89>)^4gh!FG,s9F^ 1,)&>f//,9) P
)/F
'&9` F S +€.T g71,F i <= n
3 <= 2
PN,=^)>h):)8) bF7 /`T/3_)T`F^FG+P{)
FG)))73F4ghDf, P
for
FZ('
=) F^, Pr) WFI)
9),=/{1,.sE>F>
s
3
n == 2
d ) F $/F^ aEF^F^ s .)^ `>^$)+19FX)9) 3)T)>^9) :]=/89 Infinite loops.
`/m)9) sE)^
93
_8sET8)ob(fb> =sE)
/3 n`$sET)",9rFI))>)$4de)F7`$F^"'7 >)h)
FG)))
for
for (;;);
VXF7)">89)o
9/F7f, 0:!* 9:]=`>,)^+)F7FG)))7,9F7)=, )>)^
/P): )^>) '&),=)./`>)^, 3 /1)= g7>PN^ _ sE
^$/35F
(;;)
GPN>fb: = dea>9:/ .FG))^)7'&9` 31Fh)Z):9)Xfor
FZ`$3/ 1[ =1[BD
<L 67$ =W9)D9F&^!:]1)^ ,3F^s9!93 9^/>F )^G93 )fb3
)- Z>fb>G)F^F /F^>)^FmF^,` F{``,= :fb "^$/bPN F^P)o'h/xdeP1b,!>,9
,F^
a`89,=)> b, 9$fbs s9?:]HE:`3 )F 13 P79 +
G9/F =
‘4, _ /F & 3F^M ’ )T) `89:DF^89 3>)`>) =W9) 19FD/3 'hOFD
sE,=)x) uv,FG)n/F ) `89NF sE,=)xFIH)O]+>^^Fade39>
3 b)^9F '7,93+sE7D)x)
& ]av K#
)" fb&/3 )4'7,3 F^ fbZ_/ s9Fx F^P)o'h&3>fb>9)$ gh79^s zF4)^ O)
=W9) F+^)8'hHF+/F+$/FG )?FIE)8F )smOfb :]/89/ qr F+`$/ sE
>)^)o `89`$O)3H/3mF^F^s9)> a=W9) 'Xa:]H`,=)3 `>^)/
FG)O)Fh9 b
de P `>) )-F^),9)^5FEF^F d )_`$/ sE-FG9('X )9) )s9 PT3>)`:)
=W9)19?
F †e` >PN>^3 ) /F8) 5C+€01"7N„LM:/&;g /' ‡8`$/)sE-F^ fb3 sy
`89,=)> /F '7X9fbT/3_,93>^FG)/3
)k)39$j
†eF^X)^9TSD>)/F ‡ g79:PN =FGX`$&F
33'&3F^99 19Fx 9$fbD)+`` Is_ 93 .)9) ) )>O)FG)O))
)>^9)F PN&/EEF^FGs9D9^/cFG))^Fh)^ O)Z`/a1`>`,=$
‘4,y_ 1O' _ fba/ >3y)^ O),=9^/ sum_n.C F8/`>),9/ 5 s /3
Gauss.
:]=/89hd )DF&s /3 -) FGF^ )9)D)&31FD)X`>fH9`>3FG)G)T) E('7>DP
`)^{FG))^)^F
deaF79^_^FG` 39HF =)! >^_/_)^9>_)`/_67 H3=`  /,F^FR†(@@@ $Kb0
0 ‡n'h/F )3
).F^,c,=)D,9.sE>^F
g7T)^$/`>&9/3_9N/3_) b>
1, 2, 3, . . . , 100
FFG),3)F8s9,9FIyPN
?'X s9,=) "/,F^F`/a,= '&) )-`^^`>)_F^,)
fb>^
1,` 1b %Z 9/3 _3-'&)^
3('X?)^9+1,.sE>F 9`:$/F^9
3> /3 5050
sEO' `!/b/
a3`>^$/F^ 3>$k67 1)^9 )o'7 ,9.sE>^FZ $/`-`,
F^, ,=
“19>9`> H)DOfb:/mFG,9QF 100 101 = 10100 H9/PEPr'&9` _F )^9D,+sE: )9) 'h/F
)
101
/F b>3-PN$
;
$>
UK
UU
$##
$##
UU
UK
$>
;
$#=
$#=
$#=
$> $#=
$#=
$#=
de)F7'h 9
"/,F^Fh3F^`(fb>3a)^9 PN+,N
n
X
i = n(n + 1)/2,
i=1
NP gh
FG))>) `$/?)^9:PN+sE : /`3?s ) +,9`
n
for
sum_n.C
—
T>b/)Z/3a `)&IF ))>)
s = n * ( n + 1) / 2;
:]H)&>)h)8 $ 9`)_P FG`>)^a/3a )>)^ FI))>)F
de )D)^13,`>)G
\1`>)? 1'7T fbD)/b3a )hOsE,=) X,9 Prime numbers.
sE>^F4%&O'y'7,3 Tt .b7)9)4)FG)F4'X>)>n )k fb81,.sE>nF 9^(
VX``>3!) )X,F^,9/ 39:W )^"1,+sm>
FkZP{93_ PE)kF )
n
,n 2
3fHF^s9 s1?/ 1,.sE>
g79 FG)^)^?PN!,=!/F )>PN
d {2, . . . , n − 1}
` ?^)D!1)9)n,9F )^^,9_ )FGD1,+sm>F 1/3_)^FG) $` PE)}PN sm
!3f1F^ P 4deP{!3fHF^ FkPN,9
3 1'7X`/_FG) /3_,)G ,=)7"P /`>) ) P
)!)o'7
n
n
F &2
/
7
(M.*
n(n + 1)
-( %"
%*4J
%*(,7
* %6 M/ I *
#.*
%/
$&
!/ *0,
*
8 N2
n
,
&  J K=
1,.sE>F b(fH9 )9)
Fn)4 CX)>^'&F^ b'7h,)G ,=)4)9)
F 9^ Mx}K
n
n
89>)F )FhFG)^) 6hY"Y m,F^ FG))) 9/3-
FG))^) Z for
if
_ /s9 H)
FI))>)Z FD/a8)o
sE13= F^` '7 9$fb" ,=)Z)!3fHF^s9)o )FG)
)a)
for
{ag78E^)/) s9F^>^f/) F )9) ) n % d != 0 3>W ) >)^,^9F S +€.T PN
=F^ )9) )D
F ,9/)3_) )>^9)
“P4† /3_
d == n
S
+
€.
Q
2P ‡
>)^,^9F
$> '779$fb7PN,38D3fHF^xP
+) /
n
{2, . . . , n − 1}
Á
Ã
// Program : prime .C
// Test if a given natural number is prime .
# include < iostream >
Â
Á
Ã
Á©Â
Á
Á©Á
Á
Á
Á©Ã
Á
int main ()
{
// Input
unsigned int n;
std :: cout < < " Test if n >1 is prime for n =? ";
std :: cin > > n;
// Computation : test possible divisors d
unsigned int d;
for ( d = 2; n % d != 0; ++ d );
// Output
if ( d < n)
// d is a divisor of n in {2 ,... ,n -1}
std :: cout < < n < < " = " < < d < < " * " < < n / d < < " .\ n";
else
// no proper divisor found
std :: cout < < n < < " is prime .\ n ";
return 0;
}
Program 8:
LM:</N. YLM:!1['IT Ž
2.4.3 Blocks and scope
ed y6hY"Y )+F.EF^FGs98)?^, F^ 1,`PZ _FG))^)^F+) F^9
FG)O)) )9)xF )+`$/>3. /']L=C)K.<2+<'A<M xF^89" ;gD
!‚ ng7F `9/F^
31F )!_9 ,NO)")+`)G9('z3`>)^b k1`HF"/O' )^ FG)G,`>),=8/ s
,=9 FG)O))F )9) `$ sE9 )>)>$ de ^)`>,9 k)>5- )17)
3F^ EO'7:PN, 93a)Z)^9 F/D)X$/39s9T`)^{FG))^)^F
\H)/`>)`$/ O s91` TFrF^89XhFG 1,`nP >^& FG))>)Fm)^ O) On>9`>F^3
& ]av K
`,=_s/`F>
24/`5PZ)
FG))^)^F+_ ^)`,N sE s9` 4F^?)+F EFGF^s9) fb 9>FG)3
s91`1Fkg7"FG89FG) s9` _Fh) 8)os 1`
{}
‘4, 9fb $/3=-FG?s9` 1F"2n/`?/ `)/FT8FGE`>N/ s91` m)+FG `$/3
S/h!012 ;<Q)V Pm)
PN,`>){ g79Fns91` +`FGFk)&FG 1,`XPEFI))>)F )9)
main
Fh:]=>`,=)3a'X )
PN,`>) FZ`/3
s1_)!m>)9.FG1FG)-
main
&F^.s91` HF =9 `$/`>$)^"F^>`>)a/3 )>)^ FI))>)F '&9FG sE3=_`)F
F^ ,9>9`> P )v'7
FG)O))F = :]=/89 mF^,=EF^.)9)TPN )FG)^_9,=^EFGF
'7T'7,93 bD)+'& )T,)&/m G)N/EF^,F73,=+)^9 `89,=))
sum_n.C
for ( unsigned int i = 1; i <= n ; ++ i ) {
s += i;
std :: cerr < < i < < " -th partial sum is " < < s < < " \n";
}
% >^Z)o'7!FG)))F4Z:]=`>,)^38$` )>)^ P9)& FG) )h:]H)kF^,_/3
&
FZ/333) )^9>)"`>,G)hf//,"P F7'&)G) )^ FG)/3 O3a>^^&,=)^9,=)$
k1` 1FhFG9s,3_
>msETPN_)^)>s3 F F^O'&smOfbng7 O)7F = 9Xs _E$OF
/P): )DE /3_sEPNX)D`F^!s/` /3 9>F sE>)o'7 D93)3_
>fb>e CD-P ) s 1` -`F^FI)FTPruv,FG) +FG FG))^)D/3 ) W)FT?. )Ts 1` `$/sE PN_)G)3 /F& F^T
ghD)o1EDPE)>FG)h,)G ,=) '7D9fbT`>$O)3
)^9X:fH,F :]=/89XF `/3 )JT;!hN
N
1[7N
7 LMC V ;<hN F7 `+,F^3)^> )+3) !9^/!:^ =`!
G3>s9, FX) `F^FTPxW993_/3 O).F^,` >^^F"d )TFD13 `>)`")'&)^
3>s9,,=)^9,=)") FG)/393 :^ ,=)^9,=)"F^` )!`$ ) +$/F^ sm F^> )3
Pc) I^$/ ./c,=)^9,=)Z)9)h,F^,9/ 1Fh)+FG)/393a,=)^9,=)$
k1` 1F43T)49 FG)^^,9`:),=h&9^/ fHF^,9/"s ,=) )>+/F^D9^Of137T`$/
Visibility.
sE,39^_^,93
3`N)F†eP{fONs9F HPNh:]/89!‡: VX_39>`NO))9)hE$OF
F^3 s9` F"`$/>3 Q+ ))9)"s 1` mVt1`$n3`)?:]1)3F ,9) )
3 P )^9 s9` a-'X`-)DE$F>XV 9/")9)XFX)^13,`3-s `$/ 3`>N)^
Fh) If1F^s9 ,=)F^39TPr) s9` _'&9:" )ZFZ3`3{ Z:]=/89 H
Á
Ã
int main ()
{
{
int i = 2;
}
std :: cout < < i ; // error , undeclared identifier
return 0;
}
&  J K;
)&f/NOs 3`N^3_F^3Z)&s9` _9&; H0!Fk) f1F^s9Z8)X,=)^9,=) FG)))
i
RHkg71,F Prb,a`P)Z)"`>8 > '&) )^9Fh`>13 )hF^F^,F&/a>G&>F^F/
6 )G FG)))FZ/`>)D b"s91`1F&)F^ fbFhgh>^PN
Control statements and blocks.
/ 39>`NO) E$^
?`)^xFG)O))TFD1`/ ))9) `)GxFG))^)!de
^)`,N )^9F 9F!)^ f/s983>W93 )^9
&P& for FG))^)
=& ]/89 1
Á
Ã
int main ()
{
for ( unsigned int i = 0; i < 10; ++ i ) s += i ;
std :: cout < < i ; // error , undeclared identifier
return 0;
}
) :]HFGF^
i
TA 3F
PN>Z) )TfONs9
i
3>W93a ;H
VXP)>_9fH FG )^9>F^aWFG):]=/89F '7 'XhO' )G13,`)
Declarative region.
`F^)>^ )9)8/('XF+,F ) 33,`a'X`59/>F `$/ sE ,F^3 'X>5)
/- 2n/`
3`N)89/F7 F^F^1`>N)3 )J!D:+01[F&X:< N12 nghFn_Fk)^9X G)
P=)k/[ 'X` ) 3`N) O9m$Fx\1,9` Z+`/+sm Zs91` b&PN,9`:)
3>W9)
1&.`)^^rFI))>)$ de-m)F^ `$/F^>FZ) 39>`NO)
F7F/3
) 9fb D
,+
.Q<L= &V[39>`NO)`/ /F^89fb 'I<.qL7J/G.T/<L= P )XE$F&F^3 + FG /` F^ \1`>) 1B;H 9/ =.3`NO)_)9)hFh,=)F^3 P / ^)^`,N7)>ZFG)^^,9`:),=
9/F N &;+4.Q/<L= V9/ )G13,`3+s1 T3`>N)^
F Fd+Z1q) F
10./1 ;gD 8D O^)4P )F43`NO Scope.
D
)
)M
’ Fk3`NO)fbh`$/>38) .Q/<L7 PE)D39>`NO){ )8)^9&F^`EDP
D
9/ )^13,`3 s1
_-sE ,F^>3 /3 /`>)^, ^PN>F!)^
)+3`N)
+de FG)
D
D
`$/FGF )"F^`>E"P +3`) Fh , {)^ )F L=/M01q+4.Q/<L7 gh L=<M01q+J.Q<L= P=h3`>N)^"FI)^)F ){)nE){'X> )k3`>N)^!O9m$F
=Z)^9 9/D) sm"3`3)^9FhFZ`$3 )F L=1[MP Sz)J/!U:/+012 ghTE))N/EF^`>E
:]1)3F&,)m)"3-Pr)"3`) fbT^{
g _>)T) F^`E.Pn83`N)
'7.FG)^)TP )^FXE))N/ F^`E s9,=)D'7 EF^F^s9
9fbX) (fbXF^& ^)^F P{)$ g79F O9mFk'X)XE)>)N F^`>ED`)/F D
T3`NO)F P )^9 .T'A 9//xVXF&a:]8 H`F^3>&Mx/JUH
Á
Ã
# include < iostream >
int main ()
{
int i = 2;
for ( int i = 0; i < 5; ++ i )
std :: cout < < i ;
// outputs 0 , 1 , 2 , 3 , 4
& ]av KA
D
D
E1
E1
E2
E2
E3
Figure 5:
E3
_`<M01q+.Q<L=!. S )J!U:/+012M.
S657j. 'Ij'A<-X):/u +.
:</!27N !.u10653657\/:!:<!. L=)1[7N3D,
)JE!D1, :E+20,12E3 1[ 6579+LYL=<:D0S/:!<:XiD0S< o
i~1 N5YN:/Vgo
657:!1"N5Y0-u`.Q`657:<!./C€01"7N].Q/<L7!.c S i)Y:g‚PN:V oD
E 1 , E3
)
i2uv5&1[2o&
E2
Â
std :: cout < < i ;
return 0;
}
// outputs 2
LM:</N. t.Q/<L=T Ž
Program 9:
a!@ PN>^FZ)+)"3`) P R H'X>/FZ)
a"K.PN>^FZ)
gh
i
i
)!3`>N)^P "017gh>^PN 9)"/J,=)^9,=)FhWFI) 93 )
0 1 2 3 4
ndeaF^TF^F^ ) 39>`NO)
9 R.)8EO 3Fh)^9T>f1,FZ3`) P
2
Pt&01 ghF 99>9>9 Fn`/3 'Ic5&1 )1[7N k,=)n'X )Z39>`NO)fb7
i
P ) F^`3-3`) 3F&a"@ =)!F^`>9339>`NO) Ism`F7fHF^ s G† '7
F G) ^,9F.,=)+P&F^`m +‡ /3 )WFG)+3`N) ) b>F (fb> /b/{ de| ^)`>,9 TK PN>^FZ).)Df^Ns9T3>W99>3
"0 H'7T>)7)",=)^9,=)
F^`D) 9/
i
2
KH
d )XFZ13/`>)` )^fb3a9/ 9399+F^` )F&,`FGF s9PN,F^`$O)F&) 9^ /-4CD )^9T)>h9/
3 =9/D3./('XF ,`
F †e bDaMx/c
U ‡k)+,F^T,=ZP fb )
3)W9>
F!)89/+P7)^9 `)^^nf/Ns9 FG))>) r'X)^9,=) 9fH)
i
for
`` ?'X>)^9:!)> F F^ )^9: 9/
F^>'&9: >F^ ?) - g7F"F!/
i
/``>>)s9"/3>fb-,F^>PN,9 9`$)^P 9/D3=
Z('5'7 `$/+>)x)D) PN_/3>W99 ) P9F^`E .) >H`$/F^`
† mF^F^s9k>F^`
P +,)9 3`)9FTPk)^9 F/+9/g ‡: gh .T/<L= P7 3`)
F!s)3
D
P)FTE))N/xFG`E /F!PNO'&F "$/` 3`)
).E))N/xF^`>E P
E
D
F^,`8)9)4sE)
/3
39>`N7)&F^/7 )ZE)^)/=F^`EZP
F4>Ofb3 P
D
E
E
) F^`E"P
,=!0+ fbF&.FG1+sE`&9`>),= P )^9 F^)^, O){
D
de_M ^/~U )^9h3`NO)fb7 P )h3`N) 9Z0"Fn97A $#X† Ds 1` J‡ J &  Kb0
)FnE))N/9F^`ETFkD0 $# =93_)^F F^`EDF D0!9,F &K $#H = )^9D3`>N)^
hR 3`>N)^fb ^† `>)^FG))),‡ E)^)/=F^`EZ/38F^`>E&OZZR H@1
n$ 1a3O'&?) FG`EF ) F F!?>/4)!EF^FGs9 rP `,=F^ F^` s$ 1F&_
†eX__,) ‡7E$X/FG)h1'&> deP '7 'h/)h) )/
sE,=)ZF^`E!-
s1 Xs /F^F H'7!9fb )^ PN_)7)T/J/``>3b
Z>N)3-)8)^9 FG`E.P4 f^Ns9!FD)F .<:NY?)C:/+01q TghF&)^>
Storage duration.
3)F.)
)^|'&9` )393=>F^F PZ)
f/NOs F.f//3 )9) F 4F^
^
`$)
Fh/F^FG3) )$
=-f^Ns9_'X) 1`/ F^`E k)FG)^/
39,=O)|F ,F^,9/ ) )|'X`
)/?
’ F!`)^ F )fONs9
’ F!E)>)NkF^`m SD,=a/ ]=`,=) )FX/F&)9)X'&9>9:fb>D) fONs9 3`>N)^aFX/`9>3 EFG ^
`$)F
/F^FG393
) /33^F^F sE`>F f/3{4V&93_'X>fb:Z)T:]H`,=)
>)F ).)T3P
) 3`NO)fbn
/)7/FGF^1`)3.^ FxP^3 /3+) f/NOs ’BF /33^F^FxsE`>F
f/3{ — D)>>PNT>)Z GPF^ FG)/` .P{)XfONs9D>fb:^1)X)F 3`)F
:]H`,=)3{
ghF7sE9fHZFZ`$3 7'A+01qB./:/NY^)h:/+012 =X ]/89 1
for ( unsigned int i = 0; i < 10; ++ i ) {
int k = 2;
// do something with k
}
) /33=FGFXPx)!fONs9
_$
`9/ -$` ):)P ) 1r7VXFG ) )/
k
O)_)
) bFh9N/`Ta/`a)>){
2
VXFZ+T``>^>)! ]/89 1`F^3>h)"PNO'&+`>13"P/)
Á
Ã
int i = 5;
for ( int j = 0; j < 5; ++ j ) {
std :: cout < < ++ i ; // outputs 6 , 7 , 8 , 9 , 10
int k = 2;
std :: cout < < - - k ; // outputs 1 , 1 , 1 , 1 , 1
}
\ `8;sEF )a)F^`E P7)^9 39>`NO) 9 )8>l `>).P78;aF!)
1
`>>)h)"f/NOs "3>W93-a !->fb>^)>O)P )
FG))>)$kqr9 0 for
)X)> 9/
3 smFn) )^9&F^`EDPE)X3`)8ZAY“1)X>l `>)7PEX0!F
)>>PN )3`>>)Z) GPF^ f/Ns9
->fb>G-)>)
9/3-)FX/ 'h$1FZ>F^,)F
k
f/,9 1
de `)^/FG) fONs9 )9)XFZ3>W99>3 - FG /`"F^`E Ds rFG`E 9/F .<2+01q
.<:/N& )h:/+012 g79F $/F!)9).)^F./33^F^F.F 3>)>^3 ) )8sEaP7)
/?
’ FT:]=`>,)^
/3 )!31>F!)!`9/j
† 9>9`> GFG)O)` +‡X"sm`+f//3 ,)
).:]=>`,=) P4) 3F g7.f/s9FX9/3-s
/3
std::cin
std::cout
&2 M'(&
8//S
:/
*
2&*
(7..B
"K.*L7
"
Q7
6#
#R
M
#6%"
%7*4J
& ]av KR
PN FG)/` fbXFI))`hFG)/&3,=)r jkONs9Fx'&)8FG))`ZFG)/Z3,)OX/F^
PN:^3a) /F .<2+012KFd:!1qY;gD!. 2.4.4 Iteration: while statements
.<2+/'I<M
\1P 9'7!9fb F^ )^>)FG)O)) =)
FI))>)$7g7
for
while
F FG89W93
FG)O)) '&>XsE)
/3
D
)^)^3{ d )F
for
FG1)O] F
† ?‡
'X>^ !/3 E^
while
/F .
FG))^) VXFrsEPN mFrPN>^^3
for
)+/F )XsE3=PE)
FG))>)$4\1>_/)`$/ b
FG))>) F 1,f//) )
while
while
) `^FIE399
FG)O))
for
A“h‡
for
†v“
g79 ]=`,=) ^39:.F!)>>PN
$^,) ?^ ),=F ST+~.Q FG))^)^F._F^ $/FG )-:'&)^_/F
FG))^)^F x'X 39 '7_3
\1`
while
for
)
gh&_ $/F^F ^$/39s9)ob VXFn )F hFG,9>FG)F 1
FG))) F )v9`$/ for
E>^`fb3 /F& `,) aa'&`)!`>^)P†e&39>`>),‡ Px F^9 f/NOs F!^FGEF^s9 PN ) FGF )O'hO3F")>^9){_de )F!`/F^ x) >F^F F FG)
`fb)^ _/3 )^9
FG)O)!) ’BF
r k,=).) FG),9) `$|sE_
for
`89:] m)4^F^Fr_$X39:E3 ")^9 f//,F{P1F^:fb>/bfONs9F r F^x`>93)^
)9) '7h` ` )^9h*
’ FxsE13=bxde F^7P )F^h`$/F^>F 1
FG))^)4FxPN:s9
while
g79 :]H)&F^`>)^3F^`:sEF&/a:]=/89
'7!`>9FG3>&)j
Ž "D+ G.Q <
Tfb . O),=/r1,+sm>
The Collatz problem.
n
'X)^
/3
n0 , n1 , n2 , . . .
n0 = n
P
Fh>fb
ni−1 /2,
ni−1
P
Fh133
ni =
i 1.
3ni−1 + 1,
ni−1
=D:]=/89 P n = 5 '7 :)X) F^ ,` 5, 16, 8, 4, 2, 1, 4, 2, 1, . . .&\1`!)^9!F^ 1,`
>)FX^>E>) )fb /FDFG1 /F
E$OF '7 _aFI) O)X)F&E)$DMx $#8$/3FD 1
1,.sE>
/3
,)G ,=)Fn)D)F P{)DF^ ,9>9`>
,)^ )D,9.sE>
E$F>
n
(ni )i 1
1
Á
// Program : collatz . C
// Compute the Collatz sequence of a number n.
# include < iostream >
J &  Ã
Á
Ã
Á©Â
Á
Á©Á
Á
Â
Kb@
int main ()
{
// Input
std :: cout < < " Compute the Collatz sequence for n =? ";
unsigned int n;
std :: cin > > n;
// Iteration
while ( n > 1) {
if ( n % 2 == 0)
n = n / 2;
else
n = 3 * n + 1;
std :: cout < < n < < " ";
}
std :: cout < < "\ n";
return 0;
LM://N. 4[U+ + Ž
}
Program 10:
gh-`$/yPT`,=F^-sEa'&^)^)yF_
FG))) '&) 8)o
for
/3
s9,=)7)DF^,)9 f/N)hP )D/cF7>F^Fh^$/39s9DF^` ) )^^F )
/3=fb>^)^F^7)hO)>k`>8 `$)>3+ )>)^ F TF^89 `,)!r VXFkT,7P )^1,+s FG))^)
P )>F aF^89
)9) `$),=>F )1t’BF F^F 4,F^_
for
CX)>^'XF^ `F^3>ZPN+,9)!b,=X1/FX
FG))>)$
while
g /1 sE,=) >F^F 8F ) `$O )9) )1,.sE>
/'h1F.E$FcdeP7) x)
1
/
`)F /=W9)h18PN7`>^)8f,FkP 4dePmb, $+'X ) )
collatz.C
n
/ b,-'X s9F^>Gfb )9)
33 EFXPNT ,9.sE>^F&b,-)^^ m),a)F
1
_) b".'&
‘4, '&mW9
3 =PNX:]=/89 1)9)7)!67N) F^ 1,` PN
F
n = 27
27 82 41 124 62 31 94 47 142 71 214 107 322 161 484 242 121
364 182 91 274 137 412 206 103 310 155 466 233 700 350 175 526
263 790 395 1186 593 1780 890 445 1336 668 334 167 502 251 754
377 1132 566 283 850 425 1276 638 319 958 479 1438 719 2158 1079
3238 1619 4858 2429 7288 3644 1822 911 2734 1367 4102 2051 6154
3077 9232 4616 2308 1154 577 1732 866 433 1300 650 325 976 488
244 122 61 184 92 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4
2 1 d ).F >?sm>fb>3 )9)
:fb),9/ `F!,|PN+/kf//,F P 4s9,=)._) 1
n
_)`N/F79$fb )Xb:) sm s9!)83,9`>. 1PxPx)FX`>buv`:),=DVXFX9`)D/F
)D1 HF m)F&s9 FGFD)sE. fb>^ 93 _)_O)`$/E,=)D)_`>/` †eF^> /F^8)
SD>)/F F^`>)^h
‡ Hs9,)hb,-^!`>G)/fH )3 )^ fb )Z.)G^ & ]av KK
2.4.5 Iteration: do statements
<. 2+/'I<M6. +F^X)
FG))>)F r ]=`>)")9)T)+`>93)^ F">f//,9)^3
while
S</: >fb:^):) Pm)X1_9FI)$/3P ;<[SQ:< :fb>^)^>)r gh>>PN H `>)^FG)
Do
) PN /3
FG)))F H)TsE13=
P FG)O))7FZ ]=`,=)>3 )&$/FG)h`
while
do
g79 FG1)O]P FG)O))ZFZFZPNO'&F
do
† ‡“
while
do
'X>^
-F7Px.)oE '&F^ f//,Fh`$/ sE"`>fb>^)^3a)
bool
gh7F^_)`>F Fx3>W938/FxPNO'&F V& )^>)+P=)7 `>9FGFG)FxPWFG) :]H`,=)
/3)a:f/, O)
{ deP
a>),=F 0:! ) /)>Z)> ) PNO'&FnCD)>G'XF^ H)
FG))) )> O)F g7":]H`,=)3>&F7)^9:PN
do {,)^
^>),=F S +€.Q VX):9)fb )ZF^>_/)`Fn`>,93 sEh39:W 3 )>F4P )hPN('XT ,9 f/)
for
FG)O))$
†
for
bool firsttime = true; firsttime ||
*“ firsttime = false ‡
g FTsE9fbF b ,= GF^+,N) 8Pn)
h
FG))>) {:]H`>)!)^ O)! )+WFG)
while
):)
F )7>f,9)3 †e3,D).F^^)7``>,9 ) >f//,9)F^!\1`>) 1B;H<;‡ /3 nFh:]H`,=)3-,`3)9/ b
67F^39:D.F^89T`$/`>,9) )vE 9`$)^ 'X`)",9FG>X)>FX+F^ 1,` P
1,.sE>F E/3?P)> $/`?,+sE:X) 9^/ ,=)^9,=)FX) F^,pPx)+,+sE:FX)>3
F^ P $ n )>9 x),F^>+3`$)^F!)9) )^9iF^,3 FG)r ghF F FI)
0
9),=/ 'Z)^)^ ,F^9 FI))>) 7F^`-)-)>^9)5`>93)^ `$/ 9 5sE
do
`` b3 S<<: ) :]H)Z1,.sE>h9/Fhsm-)>3{
int a ;
// next input value
int s = 0; // sum of values so far
do {
std :: cout < < " next number =? ";
std :: cin > > a;
s += a;
std :: cout < < " sum = " < < s < < " \n" ;
} while ( a != 0);
ed )F7`$F^ )hF EFGF^s9D)+39>`N
'&>T'7 '7,3
,F^,9/3 ) H9/ a
3N)> sEPNh)&=9,=)4FG))>)$ ghZ^$/F^F )9) '7,3 )^9> sE&1`$/=) )ZsE3=
a
P )^9
FG)O))&93 '7,93)7sE f1F^s9T
)
FI))>)!’ F
do
do
a != 0
&  J KU
2.4.6 Jump statements
V )T)FXE) '7 '7,3 b )
:]H)^3?,= F^> 4P4`)^xFG)O))F&'X )?8FIE`N
o) 1E.P4FG))^)^F&)9) >PN>^3 )
/F <C']L .<2+<'A<M6. g7F^.FG))^)^FT.)
`FGF^)!FGF^")9)h)>
'7,3a/O'*b,a)^ 38F^>)^99 '&9` FZ)hEF^F^ s )>^'&F^ deFG)$3 uv,FG)r b
D/3 do FG))>)F† 'X`!O4/F^7,9>`F^FO^! )9)
while
F^F^! ‡ uv,8aFG)))F79^Of13 /33)9/ 9:]Hs9)oa3F^ )>)^FG)))F
‘4,8F^,3,F^Z)^9F 9:]= s )o 'X>^>fb> )k/O'&F b,)"8(fbhb,= `>134%&('7>fb> sE
/FGX'h3 )9)muv,8.FG))^)^F F^,3 sE ,F^3.'X)^ `$ F^9`>k)> )>93.)D`89`$)
)h`)^^ 9(' xg7&`89`) P )^9h`)^ ('y9/Fn)^ sEhs /N/`3+s1 FGW9`$/)
b/
DPE)D)> `)F4gh>^PN H) `$>PN,9 sE>PNT)^^13,` &uv,8
FG)O))
9>aXuv,98
FG))) F7:]H`,=)
3 H)D/ 9('*,`39 )9/ uv,89F )+
`>G)/
E)ng7>!T)v'7+3lm:)4uv,8aFG)O))F )9)7'7"'h/)h)^ 3F^`,F^Fh>
.<2+<'I/M “ )^FZFG1)(]FhO)>&FG89
gh W9^FG)nuv,8 FG))>)hFh`$/3
break
break
“
FG)))XFD ]=`,=)>3 'X ) / )>O)-FG)O)) — ) F^_/FG)& break
`FG|):) FG))>)
)> O)F_3N)^b~gh ]=`,=)*`)1,F-) )
FG)O))&P)>h)")^>) FG)))R†eP /Y‡:=Z:]8 for (;;) break ;
F7)h/W9)&1
s9,)7O)>h `89`$)^38'h_P '&^) 1,EFI))>)$ %&:TF
!Z,F^PN,EE$O/`XP
nde_,= `$`,N)n:]=/89&P M /DKK )k'7,38sE
break
b/)D)^ F^,=F^FT).^>>f//)"/33)-P
)^9.NFG) )>O){ ghFT`$/ sE
0
3 '&) )^9 PN('X9 1r
for (;;) {
std :: cout < < " next number =? " ;
std :: cin > > a;
if ( a == 0) break ;
s += a;
std :: cout < < " sum = " < < s < < " \n" ;
}
% > b'7 FG ) )v9`$/H,F P
&
)7)^>9)!P &1 G F^:'X>
break
)"33 = Z)T)9)7'7!`,3 1,f// )'Z)
do {
std :: cout < < " next number =? " ;
std :: cin > > a;
if ( a == 0) break ;
s += a;
(27
$&
#,S&(*
*
BL%Q.*
switch
( "
%*(,
97
2 J
& ]av U#
std :: cout < < " sum = " < < s < < " \n" ;
} while ( true );
de )^9F`$/F^
F8>PN>s9 h), hF^` )_`>5/3F F GPN^>fb>=zCDP!`>,^F^
for
) F/-PN,`>)9/)o|FEFGF^s9a'X ),)
Zs9,=)_)-F^,)9 `>13- 1,^F
/
break
/33)9/ s 1`
/3a>f//,9)>F
)o'&`
a != 0
do {
std :: cout < < " next number =? " ;
std :: cin > > a;
if ( a != 0) {
s += a ;
std :: cout < < " sum = " < < s < < "\ n";
}
} while ( a != 0);
gh F^`>93 uv,98FG)))_F`$/3
continue
F^89/
continue
.<2+/'I<M “!/b/
) FGH)O]yF
“
D`)^1,7FG))^) F4 ]=`,=)>3 b)7_/3>xP9)7F^_/>FG)x`FG )>)^
FG)O)!) ’BFsE3 F
F H 9m3T/3 :]=>`,=)*`)1,F)
)?3*P!) sE13=b g7
):)
FG)O))Z )F^PrF )>^9)3{
deP&)
F^,=^,399 )>) FG))^)+F do FG))^) 4)
:]=>`,=)
while
)>>PN `),9>F"s1 >f//,9)9
)F
{+dePk) F^,=^,399
):) FG)O))
F FG))) ) :]H`,=)|`)1,F s >f,9) )F
/3|)^9> )F
for
{Dq{ b ) break FG))) )^9 continue FG))^)&`$/ )>PN^+sE ,F^>3 )
_/9,N)h)!`)^ 9O' G ) 339 .P .1r
de ,=!`$`,N)T ]/89 E)+PN('Xf/N/)!P4) >F"b)^fb 9,=)$
VXb/ O) '7,93 sEkEF^FGs94)^D39Z)F '&),=)
) ) :]HmF^ P/)>xFI)3
continue
s91` for (;;) {
std :: cout < < " next number =? " ;
std :: cin > > a;
if ( a < 0) continue ;
if ( a == 0) break ;
s += a;
std :: cout < < " sum = " < < s < < " \n" ;
}
2.4.7 Equivalence of iteration statements
ed a)>^F&P 9,= PN,`>)9/ )v )
/3 do FG)O))FX^"3,39/) /F&sm)-P
while
)Q`$ ,9 f/) sED:]1F^F^>3a,F^+
FG))^) ghF _8`:$)D)D8>F for
F^ )^ O)
FG)O))F"9fb8+:]19^F^F^fb8mO'7>")9/
93 do FI))>)F
for
while
J &  U=
de )F_F^>`>)'7 F^('p)9))F_F
9)_) `$/F^ |/X)= )>O)yFG))^)^F O
PN,`>)9/ 1,f//>)$ T`FG ='7"FG9('wO' )+,F^
FG))>)F /3
while
FG)O))F ) :]1F^F
FG)))F
while
for
deP '7 3) `$/sE ,F^3)^ :]19^F^F +s1
'7 )>PN^!9fb
A
B
A⇒B
FG)))
FG)O))
FG)O))
FI))>)
do
⇒ while
⇒ for
⇒ do
,
'X>^
'7 H('Q) NFG).89`$O) P )>fH,9F+F^`:){ g >)> 4)F.`$
I(fbF ) `N/3_ 1,f//`/
Z) )9)&'7 ,=)Z)"'73 LM:<Fd!. 1,)F /F&,=X^$/F^ `/9)ZsE!`>9FG3>3
PN_{P &de 3>&) $
9^Ofb FG))>)Z b )F '7!WFG)DP /r'7,3-9fb
)_sE+ PN_/x 3>W999)+F^_/)`FDPnFG))^)^F.\1_/)`FTP49^/
N/,9/FZFX F^,=s uv`>)&P )F&('X
/3-)!PN_/{)^))&PxF^>_/)`F&Fh'hsE>b3
'X9) '7
`$/ 3 >/ de|)>.'73F _g7 PNO'&-F./F+ ,` P& I9^1P ?/F b,
'XE>)X>^ 9s9,=)X )&FZF^, 8`)Z) ,3>FG)93a)^9 NO)F sE>)o'7a) )=! )>)^
FG)O))F
do
FG)))F )+:]HFGF
† ?‡
do statement ⇒ while statement.
67F^39:Z)
while
while
‘4,=hWFI)&3$ ('w)^
† j‡
if
F^+,N)Z)FZ,F^9 do
FI))>)
FG))>)7)71 _
bD)F
† E‡,“
while
de339)^9F&3,`F7) :]=>`,=)a3> ^,)^ :),=F ST+~.Q /3.) FG))^) )> O)F k,=)x)> F &FG89n)>` `$1s9 P F ZfONs943`N)('7 `$/M’ ) ,F^ ) /F ) + )
FG))>)$
do
do
—
%&>^"FZ PN+,N))9)7'7 1
F
do
if
† j‡
else
“
break
†
‡“
while true
g79Fk3,`F :]=/`>) ) FG))>)!’ Fk:]H`,=)^39: >^,) _>while
),=F ST+~.Q /3 )"1 F7)>9)^3 , F^9
(
*
2
.*C%27. J
7B.*6
'(Q
7.#*
/K
/
*
8*
U= > 22 *
&(1#%<
%27. JA*
,*
#*-%(B#,S7
Q)#%2%
>
break
#/
22 *
J
/*
& ]av U
\1 ,NO)!)
while statement ⇒ for statement.
7“
for
†
s1 while
FI))>)hF^Fh$/FI
‡
for
FG))>)
† E‡
while
t“
ed 334)^9F.'&4'7 CMD!.<. "`>)/9F.
de )
FG))>) continue
for
:]H`,=) '7,93 ) 9^1`>3?'X)^ ).>f//,9) P
rs9,=) )+F^+,N)
FG))^) FTF 1E3r/3 `>F :]1)$.
g79FT^PN+,9)
while
F7)>PN^"'&^9=4%&:"F& fb>F^)9)7'7 HF † E‡
while
“
bool b false
†
‡
while b = !b
† ‡
“
if b break
t “
g79FZ HF7F^>'&9)7T`89`$O)31F^ >)h,F&:]19N/_'X9)hFh {
_ F^,=EF^_)9) )_3)^W9>
3F.9)+O9m$+ )
fb
FI))>)
b
for
†e)>G'XF^h'7D`9F^T!3l >) 9/g‡: Z)^&)9)k)^9X'&&FG))) PNF !F^> O)
s91` /FZ31FD
FG))>)$kV E)>)Nr3`>N)^a
k/FZ'7 /FZ)
for
F^`m!P F7)1,F&)38)^ )F s91` b
67F^39: / :]H`,=) P )8,=):
FI))>)$ FG) F">f,9)3 while
/3
P ) >),=F ST+~.Q )DFG))) )> O)F CX)>^'&F^ H)^9Xf/s9
F F^>)7) 0:! b
) 9>
FG))!) ’BFD`>93)^
m$/ )9) hF ]=`,=)>3 :]H)$ — while
deP !31F8) `)/y
)> 1 :f/, O)F )F `>93)^|PN8)^9
break
F^`>93 )"de?3_F^ FTF^:) )^ S +€.Q 93 ).`39 )->),=F ST+~.Q gh>>PN b
) 9>"?)>^9)F \1`
F O' ST+~.Q F">f//,9)^3 :]H) rPN('73
b
s1
{ag79F 39,`>F ) for
FG)O)!) ’BF ]=`,=) 3>
:G,9) _>)^,^9F ST+~.Q /3) ,=)>Z1
)> O)F
(.''(&
8
.6#*"
*:
%72: 7*
R
M*
%$
22
820 %92
%*
/1J
&  J U;
de )7`$/FGh'&9: r`)F )Z> )^>9)>F 3N)^ break
/ 3
_/9F 0:! .de?)^9FD`$/F^ {'7 /F^)>^9)!)+,=)> 1 )9)T>>F^)^F",=
b
FG))^)
for
de >)^^FGE`>) T'7 F^,3 O' `` )9)+uv,98 FG))>)F
`$/,F^ 59 ,=
>f1,FT^PN+,9)-P4)
FG)O))T )^>FTP4)^9
FG)))$"? $fb
while
do
)Fh/F&/:]H>`F^
2.4.8 Choosing the “right” iteration statements
!
fb"F^-)9)&P +PN,9`>)^9/EE)ZP fH>' =)
FG))) =)
FI)) for
while
) /3!)^9
FG))^) ^k ,9 f/)$(fb> )
/3
FI))>)F
do
break
continue
T3,39/)$n\) 6hY"Y l >FZ/EP )^9>F^!FG)))F =93 )F7fbF7b,)"P^3
† s9,=)h/F^ )^9Xs9,=3h ‡kPr` F^ )TN)&`)^^mFG))^)^F PN7b, G)`,N
/-
? ) /F F7 319/`&`F^Fn2xfb ),_)X9^/Q_83 'X9) b,
'h/)kO) F^ E) )7^ 1,>)Fx`9/ /3 b, 'X b>`9/D)h/ )hPN,)^,^42 fbP9)>^&F `,=^>)+!>3 )!`9/7)ZPN,`>)9/)o P )7/ b,y_ 'h/) ) >9N/`a?`89`$O)3| )>)^|FG))) s / ,f) F^89>
PN+,N){ ghT>/m)^9>D9:"F :<0STJ<:!1[7N 4)D9^1`FGFhPr>'Z) ) 8OfbD )Fh^$/39s9)o &FG)G,`>),= ='X b>>9 )F7PN,`>)9/)o,9`9/3{
%&> F!
F^89 ,39.PN"'&)^ G13 19F_6 1F^.) )9)"$/3FT)
) FG) :<Y)YY;gD /3 /<1[.Q PN ,NO){ g7FZ/F
PN>'wFG)))F
PN>'w9>FhP `13
F^8 D`)^^9(' /3
F^8 D:]HFGF^F
V FG)Z>fb>T)>!F 657 ./3 sE>FG)DPN+,N)M“O'7:fb> m)> ./'h1F
X
,9s9 s /3 ``>FX'X`-b,?F^,3-)^^a)^ fb3{ &F^,9/ 9)^9:+ F^!)G/3lmF b-PN:'7>FP!`3 fb:F^,F ^-`89`$)^3 :]H>F^F^F D93)> F
/FG FG
/,)XP4E:F^9/ )FG).fb fb3{`
‘4, F^,3 ]HE>^`+/3 W93 ,)D'&9)TF^,)FXb,
sEFI)$
qr:) ,F+1 )+F^:]8 F ) F^O'Q'&9).'7
/{ \1,=EF^)9) b,|'h/) )
/3
8%XfH9+uv,9FI)!3 sE,=)T)
,=)^9,=)")+133 1,.sE>FTsE>)o'7>
0
100
continue
FG)O)) 1b,-_'& )D)"PNO'& 1r
for ( unsigned int i = 0; i < 100; ++ i ) {
if ( i % 2 == 0) continue ;
std :: cout < < i < < "\ n";
}
& ]av UA
g79FDFXE>PN>`>) `G`>) ms9,=)T) PN('X fb:F^ FXPN>Os F^`.)T9/F
fewer state93
ments
fewer lines of code
for ( unsigned int i = 0; i < 100; ++ i)
if ( i % 2 != 0) std :: cout < < i < < "\n" ;
g79F
f/N) FG)T`)/F
FG)3 `)^ FG))^)^F<“"s9,=) b,
FG)O))&93 s)/ `13T'X)
simpler control flow
`$
>)^3
P )
if
for ( unsigned int i = 1; i < 100; i += 2)
std :: cout < < i < < "\ n";
ghhF/ ,=)^9,=) `$/ sm73,9`>3 '&) 9O'!
FI))>)4/3 1
,9/ F^89 `)^
while
int i = -1;
while (( i += 2) < 100)
std :: cout < < i < < "\ n";
k,=)&>^ =)"`3)
F7T`89`$)3F^`T)h`.s 9>FZF^F^)h/3`8 F^ E:)F> \1,9` :]HFGF^F.`8 )fb 3 `,) ) ,3>FG)93 3,8)-)
>l `>) P9)&F^F^)nm>)r VXF^ )h)N )^!P )
F4`,): ),)fb i −1
fb )9)7'7"3$/{'X ) 9)^,/{1,+sm>F
‘4, `$/ FGfbn)4N)^)^> s9> 93 ) )^9nF/x)x:) simpler expressions s1 '&)^
unsigned int i = 1;
while ( i < 100) {
std :: cout < < i < < "\ n";
i += 2;
}
g79D`>X) _F )^ O) b,>)7>F^F7``F^T`39Q“H)> TO' W9fbT9>F FG)$3 P{)
)o'7 9>F7)^ O)h)^9
FG)O))Z>39F>kd )ZF^F7)9)hPN&)^9 F^89Z9^s cP '& )
for
,=)&331,.sE>F FG)))7'X)
F )!P `
`/
for
i += 2
2.4.9 Details
Nested if-else statements.
6 F^3>h)"FI))>)
if ( true ) if ( false ); else std :: cout < < " Where do I belong ? ";
d ) Fn) D9`n'&9)k )Fn:lm`>) F xP9)
s9/` 8smF4)^!)&,=)>
)>
else
if
'X sE+ ,=)^9,=)X†eF^9`>.)^9.`3) 9/FDf//, 0:! ‡ Es ,=) P )
s9` sEF
else
)+)">
'7 >)h)",=)^9,=)
if
Where do I belong?
gh.),)fb , FX)9)X)^9
s9` sEF&)^_)^9
3N)^8`>3
else
if
) r ,=!`$/F^+) ) 9:
g79:PN ) ,=)^9,=)"F
93 '7
if
Where do I belong?
F^,3a`>),9/8PN_)7)"FI))>)h bD)F if ( true )
if ( false )
&  J Ub0
; // null statement
else
std :: cout < < " Where do I belong ?";
>fb> b,OZ,F^,=&sE,=) ,F4b )F b,8`$8_ b 7)ZFG)G,`>),=h`$4)=,
:]1 `) s9` 1F if ( true ) {
if ( false ) {
; // null statement
}
else {
std :: cout < < " Where do I belong ?";
}
}
kFG3F if else )>-:]HFG)F FG`3yF^`:)yFG))^) The switch statement.
.<2+<'A<M 4d )kF , F^PN,)!FG`>)4sE>)o'7>8_/ /)>^ O)fb7FG))^)^F
6hY"Y )
switch
,F^.)"PNO'&+FIH)O]E
† j‡
switch
g79hf,&
P
+,9FI)nsEZ`fb:^)s97) )>/=)o1E4g7FnFk8`>)^FG)k) )
)>Z`)G{FG))>)F '&9:
9/Fh).sE"`>fb>^)^s9 )^ bool nF7,9FG, s 1`)9)Z`)FhFG>fb>/ UY;<!~. P )"PN
case
'X>^ FT8)>/ P4)^/ )oE =")o'7_NsEFXF^9/ )^9>F^.)>/F&9fb )
F/Df//,ngh>^"`$-/F^+sE"+NOsE
default:
ghDF^>_/)`FkPr
FG)O)) Fk)^9&PN('X=
8F >f//,9)^3
/3_)^9
switch
FG,9 ) Fk`>8 O38) $` _PE)X )>/F4'&9` _O9m$ _"NsE9 GxdeP{PN7/
P) ) f/,9>Fn ) :]H`,=)+`)^1,F4)x)7FG)O))x3N)^TPN('X9
) NsE ndePr)>"FZ />)7s9,)&
NsE 1)" ]=`,=)a`)^1,FZ)h)
default:
FG)O)) 3NO)-PNO'& )
NsmeCD)>G'XF^ DF 9^3
default:
/3) :]=>`,=)a`),9>F&/P)^>Z)^9
FI))>)$
switch
Z)D)9)
_F^>`>)Fh/>)^^_E)7PN7) `F^FG+P H)731F
switch
) :]H) 'X)X ]=`,=)_^$/`Fh/)> NsmexdeP{&'h/)Fk) F^: O)X)X3l >)
/)^>9)fb>F n
9/F+)^ ,F^
†e/3|)F.F.) >b/ ,F^P break ,=)FG3 P
break
/ )>) FG)O),) ‡: 67F^39:.PN ]/89 )^9PNO'&9`_Ph`13 n/3 >).,F
F^,=EF^T)9)
FZ.f/s9TP )o1E
x
int
switch ( x ) {
case 0: std :: cout < < "0 ";
case 1: std :: cout < < "1 " ; break ;
& ]av UR
default : std :: cout < < " whatever ";
}
=
)n,)G ,=) F
“PN x==1 )n,=)^9,=) F 1 “)>G'XF^ '7k:) )4,)G ,=) whatever x==0
01
g h
FG)))4FxEO'7:PN, +)ZFGF^Z)9)4)n/O'&F )Z3l >) )>9)^fbF
switch
)"F^9h`134%&('7>fb> b)FxE('7>k/F^"_ bF
FG)))F 93 ) $/38/38>^
switch
V P 1,)k9^s tFn)9)k9ZPN>)Fn)!9,=) 'X>h)>XFG9,3 sE&
break
g79:PN '7 )^
> PN `89>)>9>F^F"b8>fb> )^9: 9 ?
switch
PN>' /)^>9)fb>F )+sm"3FG)^,9F^
3 9N_)hF/PN"/3,F^
>
)>h)9/
if else
switch
gh9/ )-9^s F P&)
The Halting Problem, Decidability, and Computability.
PN,3 )rs9Fh-)!)G-Px`89,=)){hdePN_/ _FGE$ 1 )!s9>
F
)53`3 †e,F^5/ )‡+'&>)>- fb 9/)^FA† )^>9)>F ‡ 'X
:]H`,=)3 ?8fb> =9,=)W† FG))^g‡: gh ): I/ 8_ PN>T)
_6hY"Y / s ,=)Z/FG ) /c-/ )^9:&` N/,9/
g )^)/` )Ts9QPN_/ )^9 n)^F^
_)_)`N/ VXN/ g ,=G
†$U= $Ub0/A+‡
3>W93? F^ r E:. G_/ N9,9/Q “{ 9^/ )FDN ,9/ F HO'&-/FZ p C:!1[7N^'AJ<5&1[ g ,=.9^Ofb3a)^ O)h)^9 9/)9 s9cFh,39>`39s9TPNXg ,^ _/`F s ,=)h)
F/ ^,9>)F7`$/a/F^.sE ,9FG3a) (fbT)!F/TFG)))7PNT6hY"Y[F
O) 3F G,3`39s9 $/ 4 fb F^>.7FG89 !PNr'X` )E'h/FE /PN,
>f13)T)9) ) F / W9)!1 E9fbM
’ ) '7(y
‘4F {33? 39>`3+)^9.9/)^
s9 PN _/ ``>:) /F> Z93`>39s9 /F")9B
) †e ^)^`,N 13
P4`89,))h
‡7)^9:.`$/)DsE+/ /) )^ O)T39>`3FT)+9/ ) s9 PN +[
L=.<.1q;gD 9^/F
SDFG9) ) F^8 `)o mg ,^
_` F ^ 'X39> /``>>)3 39>xPk`89,=) )M
“9-P /`>) uv,FG)D b"_/`"N9,9/ g ,^ _/`Fh`$/ 3>fb>^) )9)T6hY Y
/Fk`$/a3 H:]H`>)h)9)7)>_,F^,9/>3a 1, 1,+sm>7Prfb:^_9^)fbZE> )F7PN&)^ O)$
V )8)aF/
) /F_g ,= k)^9VX>`/5_)_O)`N V& 6 1,=`w
†$U#; $UUb
0 ‡X3>fbE>3 `89,=))9/r13 `$/>3 e`$/`,,F VXF )D),=3 ,=) EFT13
λ
FZ 1,f//)X)g ,^8_/`FZa)>FZPx`89,))9/mE('7>$Zg79 67,^` g ,=
)F^FZFG))F7)9) G>fb>^ PN,`>)
)9)hFZ9)^,/ b33a/FZ`>8 ,=)Os X`$/sm"` 9,=)3 s1 -g ,=-_/` =-VXF )>^F.9-,F 3>W99 ) P7'X9).F G9),=
bO33-/FZ`89,)s9 )^9FZFG)))7Fh9)& )cs9,)&.1m)F^F7)9)Z`$/)
sE!(fb _)_O)`$/bxVXFXP )39$ ) 1E)FGF&9/FX)ZsE 3FG(fb3{hde )^9 >)^`$/4`89,=)>"F^`` ) )>^ /']LM72Y;gD ,F^>3 '&),=) PN,G)> 1,9/W9`$) F!
FG19HJPN G`89,=)s9Zs1+g ,^ _/` G†e ,f)^ = 6ZY Y[9^/
‡:
CD,= O9b` Pk3>W9E))N/ FG`E /3?F^`m 9 s F
Point of declaration.
F^89 W `)>fb>PE)T`13DF FG,9 )s98PN^_)^)3_93_'7T89fbT9D3`>N)^
E>Z4g7 )^^,)^aF )9)h) E)hP 3`) P i
int i = 5;
&  J Ub@
F7_) '^1q)Y)hD P )T3`NO)1/P)>7) 9/FhE$O3{4ghTE))N/mFG`E
i
)>>PN"3F79)h`,93X)TPN,E s ,=)h8)D ^)hFG)O^).P
kg7F :]1 /F
=
'X9)k9EFk8)^9&PN('X `13XP) bs9,=) PN^),9) )FnFk`>9FGFG)) 'X )8,=
s1 Tb/`{nde
Á
int i = 5;
{
int i = i;
}
) 9/
/P)^> )
;
PN>F")) 3`>N)^?? ;H
6 F^ ,9>) F
i
=
i
)/ >38'X) )F^>P )F7 =$99 )^ O)Z )Fhf//,T'X sE ,93>W939/3a) 5
de )> F^),9)9F ) _ 9E4),94)9) )^9 E$O/`
PD 9/_ )
3`NO) P )8F/ 9/+^PN>F )a LM:<<FQ127. 3`NO)?P )F"9// 9(' '7D`$/
$/FG $fb3
FG,9` F^,=s9)^>)>Fks18)^9DPNO'&", /3`>N)^8F^,3_`)/
) T)^ sE 3`N^3a_`
g76 N) FG 1,`F"s /` ))T>_/
The Collatz problem and the ?-operator.
_)_O)`N q{)9D67) †^$U=$# $UU#‡ '&9FI),393 )X-)$U;#&’ FD\1:fb>/ F
9fb.sm?l >3 )
/b 'X8(fbF T39FGOfb>FT)^9.`uv`>)^,^.)^ O)X).1,+sm>
1
E$OFZ) 6 NO) F^ 1,`!P >fb>^1,.sE>
g7!P /,Fh%&,bN_) _)`N/M /,{2 3 R
F †$U=$; $UU
R ‡4l >
3 1'&9n` 1F +,` _s1_F FI)/393`
F †e ,F^>3
500
).lm:&+,` ('7>h/,)^F PN7fb>^
3 8`,)k9^s F ‡:x2x
3 FhF/3_)9) a)_O)`F
Fh)hb:)&$3
PN&F^,` as9>F =xde3
3 =)"`uv`>)^,^!FhFG)E,9F^ fb3{
" fb 9^F^)3-)"`>8 ,=)O)_P ) 6 NO) F^ ,9>9`> /FX-9`$)^_P )
FG))^) m)9,).)9).)_`3)9/n` 9
P
F )1 `89`$)3 )^
while
n
FI))>!) ’ F
{ ? x)9<) ’BF ).:]`>) )^^,9 )_39>F^>F
9,=).).)^ for
PT6 ) `,=F^T) 6hY"Y r 3? '7$ HF^F PNTfb>^ `8 /`>)X`13+/3 `/ ,=?'X )
) )1001q+<L7<:/+: )9)Z/('XF7,FZ)^ F^+,N)
FI))>)F s1 :]19^F^F^F gh
if
FG1)O] P )^9F /:!:!V m>)R
† O)o
; ‡7F
*
%&>^ . F4/ ]HF^FG P X)vE7'XF^ f,F `$/ smh`>fb>^)^3 )
/3 * 8/3 - :]H>F^F^Fngh F^_/)`F7Fh/FhPN('XF> bool
FG) F >f//,9)^3{ndeP{) ^>),=F 0:! *
F >f//,9)31/3 )^F f/,9DF >),=3/F )
f//,DPE)D`8EF^)^&:]19^F^F^{nCX)>^'XF^W†eP 8 >),=F ST+~.Q ‡ _F
>f//,9)>3 /3 )Fxf,ZFx:),=3{ gh7) b
F4 F^ 1,`Zm)†eFGD\1`:) 1 1$#‡ $/8)9) >l `>)F"P O 9^1`FG?F^3?sE>PN >)> * a^">f//,9)^3{
&F^ ) `3) E>)^ n
) 1|PDM ^/
'&^)^)/FhPN('XF
$# `,3
,)
`8
/`>)?sE
for ( ; n > 1; std :: cout < < ( n % 2 == 0 ? n= n /2 : n =3* n +1) < < " " );
$fb")h,) b,)^ 3`3T'X>)>hb,abT)^9Fhf/N)7sE>)^)^>$
& ]av UK
gh 39F^`,F^F^5sE,=)+FG)/
3,=)|sE(fb31>F ) )^ )
'&
Static variables.
FG)G -) F8/F^?EF^FGs9
)^ 3>W99 f^Ns9F+'X)|1`$ZF^`>E)9) 9$ fb-FI))`
FG)/
3,=){
ghF F39 s15>m399 )^9!
b>1'73
) )f/NOs a
3 `N){ static
:]=/89 H
for ( int i = 0; i < 5; ++ i ) {
static int k = i ;
k += i;
std :: cout < < k < < "\ n";
}
/
) /33^F^F7P _Fk)DF/D3,=./ )>O)F H93
F )N/ 3 )^
k
k
i
) WFG) )>){Tg79+smOfb 9`.P4`13 'X )>^PN.,=)^9,)D)^9.F^ 1,`
PEf,F
† >+sE:  /,F^F ‡:x),=) ) static b>'73H)XF^,) '7,3
0, 1, 3, 6, 10
F^89 sE )^9 F^ ,`!P :fb-1,.sE>F
0, 2, 4, 6, 8
\))`7f/s9F 9$fbhsE 1,)h,F^PN, 6 PNn:]=/89 )!`>,9)k('yP)_DFGE>`W9`
9` P `3"Fh:]H`,=)M
3 “ 6hY"Y =)> F^Fh8E^)/)$
=XfONs9FhPxPN,3 )m)vE!)")N/mf//,"_$_sE",93>W93 /F&a)^9"3>W )
%&('7>fb> )&f,&F4,93>W93 P 9/Fk/,=)_)` FI)/Z39,=O){
int x;
x
de `)^/FG) xf/Ns9>F 'X) FG))`8FI)/_3,=) ^_/'hHF /:<{q1"=1001q+Z1 +) x)9).F W93_'X )a > P )"9^9^N)X)o1m
MZV {
g7>_)v'7 uv,85FG)O))F. 6hY"Y )9).'7
9$fb>t’ ) 3F Jump statements.
`,F^F^>3 5)^9F F^`:){ CT-PX) F )
FI))>) )^ O) b,//3= 1O'
return
†o\1`:) 1A+‡ )k_.``,= .8"PN,`>)/38)F4:]H`,=)8>)Fn)^97/ 9O'
uv,8 )^8)+>93 P ) `^FIE399PN,`>) sm13=bTgh.)> uv,8 FG))>)&FX)
FI))>) s9,)XF^`!)FZ F&O 3„
3 † /3-F^>'& O)&3 `,)&),F^! ‡ '7
goto
)7)
2.4.10 Goals
V7)7)F7E) 1b,aFG9,3?
Dispositional.
g‡ H('w)^9 FG1)O]/3aFG_/)^`F7P if else for while 9/3 do FG))>)F/“
‡,93>^FG)/3 )^9_``:9)^F.s9` F^>`>) )>)x3`NO)fb F^`E k/3
FG)/ 3,=)M
“
;‡,93>^FG)/3 )Z``>) PE=W )^ 1_93 sEX'hhP )Z398`,)o+Pm3>)`:)
F^,` -19F<“
A+‡,93>^FG)/3) ``>),9/{ ,9 f/`"P PN ='X
0‡ H
('w)^9 FG1)O]/3aFG_/)^`F7P
R‡
H/33
FG)))F<“
93 break FG)))F<“
continue
H('[O)&/FG)hPN,=&`>^)> )^"uv,39T) `13 1,9/)o_P )>O)
FG))>)F>
&  J UU
de ^)`,N b,-F^,93 E
s "s9D)>$
Operational.
†o+g‡_`` ?_ fb?F^8 !/ † F 3>W93 sE('`‡&PN"FGH)/`>)^`$/x`G`>)FGF!/3
E)h,=)hmF^F^s9T>^^F<“
†o ‡^$/3
/ 3 ,3>FG)93 fb?F^89 //3 :]1 / '&9)!9E>9F 3,=
)^Fh ]=`,=)t“
†o ;‡W93I† E))N/D‡kW9)D19F7a.fbaFG89X/?“
†oTA+‡W93 )^9"_)` 3`N)
PND.fb 3) W :!“
†o"0_
‡ 3>)^>D3`NO)fbD>a/3aFG`E!P + fba3`NO)M“
†o R
‡ ^PN+,9) 8 fb for while E do FG)))X ,f)a,F^9_-Px)
)>h)o'7 FG)))F<“
†o"@_
‡ `>8 OZ)D`3 1,9/)o Pr)o'7 fb> )^>)8FG))^)^F /3 ` )D9X)^ O)
F7PN>s9K† P /J‡“
†o K_
‡ 3FGF^8 X9^/F PNX fb)/F HF
g79X)^> ./1"'KLtD9LM:</N:' PN>^Fh).!/t)9) `F^FG)F Pr _/8PN,9`:)_'X`
,=8)"PN,† EFGF^s9.FG)>3Cx
‡ ):)+FG)O))F4E$ 9,F4F^7F^`:)8FG)))F
&)^,/ 9 !)7PN,939/>)/)o1EF4/3+E>O)F 3F^`,F^FG38 ) `3TF^`:)F
,F^3{
2.4.11 Exercises
Ž :!://!\+"./V+M2Qs <:!:<:g.X1[ 657PLM:<N:/' ;<!Du ƒ 5C+P)J
!.]657]:<!./C€01"7N
LM:</N
:/' C LM7tSQ:z657SQ" u1[7N1"&LM76.
i!o A i;2o # i2o
i,)!o ;
†o+g‡†o ‡
Exercise 33
Á
# include < iostraem >
int main ()
{
unsinged int x = +1;
{ std :: cin > > x ; }
for ( int y = 0 u ; y < x ) {
std : cout < < ++ y;
return 0;
}
Ã
ƒ 5C+\10.^657KLM:<&;gD<' uv1[65@657OQ)JI;<< u
:<!.7~01[7NOQ)Jj'KLMC!.T
Exercise 34
Ã
Á
unsigned int s = 0;
do {
int i = 1;
if ( i % 2 == 1) s *= i;
} while (++ i < 10);
1Ds„1[K),sgLtU1[u5C+W657
o†  ‡o† ";‡
& ]av $##
:cJ!5zF:!1qY;gDP)J!D:+012 1[?657*SQ" u1[7NLM:</N:' N1[Fda106.`)J/!U:/+01"F&
:< N12 )|1[6.j.Q<L=E1" 657\ST:!' 0Z1[GsdV  ƒ 5C+P10.657O7 LMCK S^657KLM:</N
:/'
†o ‡†o!0‡
Exercise 35
Á
Ã
# include < iostream >
int main ()
{
int s = 0;
{
int i = 0;
while ( i < 4)
{
++ i;
int f = i + 1;
s += f;
int s = 3;
i += s;
}
unsigned int t = 2;
std :: cout < < s + t < < "\n ";
}
int k = 1;
return 0;
}
Â
Á
Ã
Á©Â
Ž M.1q)J<:G657WLM:</N
:/' N1[Fd<};/!DuSQ: ,J!5 S3657G~1[.<)A1[&LMC=C'A;/<:g.T
>3!<:!'^1[^657F+~*!.E S - -X) +X;/qN1" S3657 :g.< F&G10<:+012M. S3657`SQ:g{
D
<LM-^;/0SQ:<I657 )10012 x 10.s <Fd+Z*+i,)Y ƒ 5C+)JQ!.A657GLM:</N
:/' C LM7vSQ:O657<.Q
i,!o i;o
i/2o
i)!o ;
1[&LMC6.
†o ‡†o";‡
Exercise 36
Á
Ã
Â
Á
# include < iostream >
int main ()
{
int x ;
std :: cin > > x ;
int s = 0;
for ( int i = 0; i < x ; ++ i ) {
s += i;
x += s / 2;
}
std :: cout < < s < < "\ n";
return 0;
}
Exercise 37
Š1[)A+9D+.< STC:`LM:<&;gD<'E.]1[ 657^Q)JBN1"F&<;/! u
†o";‡,†o +A ‡† !0‡
&  Á
Ã
Â
J $#=
# include < iostream >
int main ()
{
{ unsigned int x ; }
std :: cin < < x ;
unsigned int y = x;
for ( unsigned int s = 0; y >= 0; - - y)
s += y;
std :: cout < < "s= " < < s < < " \n";
return 0;
}
:uv5&12<5]1"&LM7*=h'A;/<:g.v1[. 657PC LM74 S657LM://N:/' N1"F&<A;/!DuuR<[C)J!{
Exercise
) ‹ 3810.<t657.Q1[&LMC 47 LMCYLC1[:g.9)K:qN uv5&VWVhh:v~1[.<t1[./'KLtD!Q †o";‡†  +A ‡†o"0‡
Á
Ã
Â
# include < iostream >
int main ()
{
unsigned int x;
std :: cin > > x ;
int s = 0;
for ( unsigned int y = 1 + x ; y > 0; y -= x )
s += y;
std :: cout < < "s= " < < s < < " \n";
return 0;
}
R[SQ:!'jCD+\657z/T)JB;<!Du h1[Fd+D<M6ZV^1"@:/)J<:X31"'KLM:<F&P106.R:<Y)YY;!1[€{
100VJ\>G<.Q<:!1q;/z657`LM:</N:'y% .7 LMCR+.3cS/h!012y SX106.X1[&LM7 
†  ‡†o R‡†o"@‡
Exercise 39
Á
Ã
Á
Â
n
unsigned int n;
std :: cin > > n;
int x = 1;
if ( n > 0) {
int k = 0;
bool e = true ;
do {
if (++ k == n ) e = false ;
x *= 2;
} while ( e );
}
std :: cout < < x;
R[SQ:!'jCD+P657LM:</N:/' ;<< u C 1"Fd+ /M6~VG1[ :/)J<:\B1[']LM:<F&R106.`:<Y)+{
Y;!1[~1[0V ) <12/<V$E>3!.Q<:!1 ;<^657XLM://N:/' % .?7 LMCX+.jKS/h!012} Sz106.z1"&LM7 
x
†o ‡o† "R‡,†o!@‡
Exercise 40
& ]av $#
Á
Ã
Â
Á
# include < iostream >
int main ()
{
int x ;
std :: cin > > x ;
int s = 0;
int i = -10;
do
for ( int j = 1;;)
if ( j ++ < i ) s += j - 1; else break ;
while (++ i <= x );
std :: cout < < s < < "\ n";
return 0;
}
Exercise 41
=C';<<: 
n
ƒ :!10| LM:</N:/'
fak-1.C
/']LM7 657XSTJ!:!1 +
n!
SA N1"F&<}1[&LM7
o†  K‡
ƒ :!10GBLM:</N
:/' dec2bin.C 65C+v1[&LMC6.3j+0C:/+=h'A;</: n )I7 LM76.
657^;<1[:!VO)1"N
106.G S 1[ :<<F&<:g.TE:/)J<:
 4:^,sJ']Lt <-MST:
657jC LM7v10.
)
n==2
01
SQ:
657^7 LM7vn 10.
i.Q/G+~.Q … s$<:</10.Q o&
†o K‡
Exercise 42
n==11
1101
ƒ :!10PaLM:</N:/' cross_sum.C 65C+ 1[&LMC6.`\+0C:/+J=C';<<: n )37 LMC6.
^
S 657Ii)J//1['A+ o )1 N106. S  :O,sJ']Lt <-ŠSQ:
657A7 LM7P10. )
n
n==10
1
657^7 LM710. 
†o"K‡
Exercise 43
6 57E.C'
SQ:
n==112
4
ƒ :!10GKLM:<N:/' perfect.C j!.<uv57!657/:^N1[F&/ +0C:+ =C';<<: n 10.
L=<:6ST/!2 r=C';<<:
10.z,+[D) E>PN>`>) 1 SB)MZVj1 S\10 10.B *+ ^657]./h' S\1[6.
P
LM:<<L=/:)1"F
10.Q:g.-f65C+n10./ :G,sJ']Lt <n = k , s.t. k<n ∧ k|n k
28 = 1 + 2 + 4 + 7 + 14
10.L=<:6ST/!0-vuv5&10D
1[.]2
… s+<)x6573LM:<12/N<:'1 +2 + 3 ) + +4[+L=6/:6SQ/<K=C';<<:g.|;<<0uR< 1 ) n  ˆ u '=V
L=<:6ST/!9=h'A;/<:g.^,s10.<v1[@657K:/7NY
†o"K‡
Exercise 44
[1, 50000]
ƒ !: 10KPLM:</N:' dec2bin2.C 65C+Š1"&LM76.Wz+0h:/+==C'A;/<: n )j7 LM76.
657E;!1":!V )1"N
106.j S 1" 657?/:!:<!K:/)J/:
 4: ,sY'KLtD<-SQ:
657?7 LMC910.
n
n==2
)cST:
657j7 LMC1[.
i.Q+~.Q … s$/:<<10.T o&
†o 10
K‡
Exercise 45
n==11
1011
_R<x) Ž ~1" LtDV}})1q/ON&'AN&1[M.<?,J!5 657<:
 _`!„5C+.O65&:<
QSExercise
h:g{2./1 )J46
) i"LMV+:/'^1q)Y+ o@)12<-GJ!5xu1065?STJ!.E=C';<<:<,)Hk- Y- d-  Ž Z1[}5C+.E0u`
./1Us{2./1 )J)Ai/<t;!12,+ o?)1q/<-,J!5 uv1[65]S J/!.c=h'A;/<:<)Ok- Y- d- - -ndP_`!<:) Ž Z1[
:<" 657<1[:)12/)@'KL7:<j2+€. E657^5&1"N57<.<\2+ u1[M.T p 57^:/!./7~\1[.? ):/u 1 S
657z2+~.3:<j *+U
ƒ 5C+B10.657LM:/&;/Y;!1[~1[0V65C+K_vV+:/'j1 )Y+`_R!„;<,+6. Ž t;!12 Ž ~1"
ƒ 5C+B10.657
LM:<&;Y;!10Z100V|65C+ Ž *;!1q Ž ~1"w;/+6.G_V:/'^1q)Y+_R< R)uv5C+`1[.z657cLM:<&;Y;!10Z100V@ S
):/u X.BA/M.Q //<-v10.c1[`RST1":WN&'I<-9)1 Sc0- uv57^u`7U)VhI:/+657<:G;<
&  J ƒ :!10\LM:<N:/'
=C';<<:g.A Sj657cST:!'
MxuI>`>)X2 ,> -v.Q
$#;
65C+f7 LM76.657\ SQ:/<'I<M01q)`LM:<&;Y;!10Z1001q!.P+.:+012+
,)|F&<:g.12 S_v:/&;g /' S/:/' 657
o† "K‡
dice.C
yi p 5&1[.1[. .1['KLtZ1
p/q
o
http://projecteuler.net/
V$:g.B
Exercise 47
ƒ 3‚Qu S/:<' 8/!01q k&[k?65C+910Q‚ =:/M‚ B!~.Q Ž j:/C) 65&:<
)?657STJ!:!1 ++012
761838257287 193707721
Sc657 ‰ /:g.Q<=X=C';<<: 67
;!VE5C) ,+ /7U+012M.T ƒ :!10zWLM:</N
:/'
2 −1
65C+ L=/:6SQ:!'E.]657K.T'IK2+.<‚Ii257<L=0S/C[ZVE1[ <.<.K65C@65&:</zV$:g. o&
|u1[[/,) 657z0VgL=
-.Q/K8/!01q 70k&[k$
Hint:
mersenne.C
†o"K ‡
ifm::integer
2.4.12 Challenges
!57!./.T;<Q:) ./ <5
p 57 1,FZs9> 1[.K]LtDJ //M.jy
65C+G0u` n<M. 65&:<+< J!5 657<:
 4n:!'+[ZV-^65&10.O'AnM. n 65C+657<:<„10.O
57:!1 +M2+~-vF&<:g01q+Z-\:j)1 NY+uv1[65I'I:/365CH */<1"@102 ƒ :!1[jzLM:</N
:/'
65C+c7 LMC6.K657B=C'A;/<:? S3)1 W<:/<M`.Q~C012M.] 657 { //M.\LM:<&;gD<' ST:^EN1"F&<
1[&LMC  X.<.C'j1"7NA ;!1[./Vd./<'j-657PLM:<N:/' ./577nU)Eu`:g‚jL@
+ ,+.<2
n
n=9
Ž 57/!‚E65&:/hN5 ?u`Q;3.Q:<<5Ou57<657<:G657z=C';<<:g.B65C+9Vhh:PLM:</N
:/' /']LM7!.G:<
/:!://!2
Exercise 48
Exercise 49
m?1[.
p 57KU:2NY!.< ‰ <:g.Q<=\LM:!1"'IK‚Qu+.G S]8qLt<'A;/<:
243,112,609 − 1.
# … s$<:<<1[.Q|k Q-cu` 5CF&I+./‚d) V$ ) 657?=h'A;/<: S)J<1['+R)1"N
106.j65C+W65&1[.
= C';<<:O5C+.T}# 65&10.|!5C+" <7N&<-zu` :!1 N1[+"~VuM)+.<‚ VhwZ10./+[657<.Q
)1"N
106./-B;<7W1[w657E1"M<:<!./ Sj657 p 65C+X5C+.j ':g‚IVhh: .QZ7012M.-\u`O)J/<1 )J)
./u10!5w 657GSQ" u1[7N@Fd:!1qM ƒ :!1[|LM:</N:/'
65C+
famous_last_digits.C
7 LMC6.X657zU+.<Pk )J/<1"'A+f)1"N1[6.3 SK657Y;<F& ‰ <:g.Q<=RLM:!1['A
& ]av $#A
2.5 Floating point numbers
=C:g657<:!'A:<<-105C+.c:</F&+D) 657W:+012 SW657G!57:/) )A:/ S
=1[<0V )JqN://!./-`uv5&12<5O10.^+.z.T<F&< <1"N5Y0-\) +€.Q 6573:+012
S?657O)1 NY+`) ./1 )JO SA . *:<?uv5&12<5x1[.A+.E< .Q<Fd<=-B)10.T! .1[7NI657\SQh:g65 1[']L=:g2MŠS J!0-c65C+c657j:/+012@ S
657^)1 'I!/:j)O<1":<<h'\SQ/:<</B10.3+. Fd!{€STC:g65Y.]cSQh:

# )1q ˆ C.Q]b910[ K&
7 -
2 2
10 -) 1
π
=
8
2=
7
π
n
-)J =1"7N
i/km$lo
= 5/16
)
p 5&10.W.Q!012x)10.T<7.<.T!.c657 \Q+01"7N]L71[M=C'A;/<:K0V L=<.
float
double
ST:w!LYLM:/Ts+1['+01[7N}:<+z=h'A;/<:g.T uv1[[K ,:! Y;<C PQ+01[7Nx
L=1"M
=h'A;</: ./Vd./<'E.1[NY/<:/+Z-B)@Y;<Cc657E# …v…… .<2)Y:) 65C+K)J!{
.Q/:!1q;<<.O0u`x.qL=//1 \T+01[7NOL=1"Mz=C';<<:„./V.<<'j.T ƒ |u1[[fL=1[MEC
657 .<0:<<7N65Y.)HuR,+‚Q!.<.T!. S \Q+01"7N L=1"ME=C'A;/<:g. )N1[F& Vh
65&:<Nh1q)J!Z1[<.]F&1q)K/'^'IKLM1[ ST+"€. 1[/']LM701"7Ncu1065 \Q+01"7NL=1"M
=h'A;</:g.T
9> `fb>G)?3>F_6 F^,F.) /=).'&) )^9_/
fahrenheit.C
\1`>) 1 7'7 _ bFG) b>F = ]/89 3^F67F^,F
3>F
28
82.4
/=) =s9,=)X) 82 /FZ,)G ,=)hs1 fahrenheit.C g7"$F^-PNX)FhFG) b FZ)9)
)7)^> 3fHF^.89(b3.+)^9 F^89 G`,=)F l T)^97P`>)9/1 G)$ 9)
'7!>3 F&.)vE")^ O)D/O'&Fh,Fh) >>F^)D/3a`89,=) '&) P/`>) ,9.sE>^FZb
82.4
=k)F 6hY"Y (fH3F )o'7 PQ+01[7NRL=1[M =C'A;/<: )o1E>F float /3 double de33 P '7 FG89: /` ).39>`NO)
s1
int celsius
fahrenheit.C
float celsius
) >F^,) ,=)^9,=)F
PN+/ = ,=) f,8P
b)
E)!1,.sE>F
82.4
28
/FGF^fb /)> 9^s )^ O)"'7+9/3 'X)^ ) )oEF
/3
int
unsigned int float
/3
9fb +,9` >
f, 9?/3* )>PN^?F^,)Os PN GF^>,F double
`89,=))9F> de!P /`>) `>8 ,=)O)F 'X ) 9b)97E)r1,+sm>F nfb:^!P FG) 39:
9N)PN^ 13,")+FGE`>N/ 3 `F^F^^F
dePb, ) .OsE,=) 9(' )T>FG)n3`_/11,+sm>F b
Fixed versus floating point.
82.4
,F^- W=]H3 1,.sE> P 3`>_/ 3)F]†$#3)^F FY‡ x 9)^,/nFG,=) F")F !b,
^) ) )^98$#8f/Ns9 39)Fh)@ 39)F7sEPN!)^9!39>`_/EE) 9F m/3 ;83)F
/P):Z)"39>`_/ m)$ g7ab,a`$>FG)X/{3`_/ 1,+sm>F7P ) PN
6
X
βi 10i ,
i=−3
'X )
βi
{0, . . . , 9}
PNX/
i
nghF7Fh`$/3a
s$,)zL=1[Mv:<2LM:<<.Q<M2+012
& + v z
$#b0
gh>^ O'7>fb: )o'7sfH,F!3F^/3=f/)/F P _W]H3 E)"^>F^))rCT
)&Z 93b)Zf//,7/&F4fb>^ )^3{r?&9fbD//3= FG
\1`:) 1 1L0T)^ O)
) N^FG)
f//, FDFG F^_r)^ O)T)D93 ('XFX )>FI)`89,=))FR† /F
int
/ ]/89 E)^G ,=)!M ^/
F^.NO>"= ,=),‡ +VzW=]=3 m)T>>F^)) F
>fb '7F^T_)F FGm`>) =F^9`> ) F^:^fbF&FGDP ,=7`,F 3)^F PN7) P/`>)9/
^)+/P)^> )3`_/4E) x>fb P )F^_3)F!q)  .) PN,
 9>3y
3 †e/F :
‡
82.4
/3
gh F^`3 3F3f//)/.F `F^ -N)^
3 :fb ), ).)v'7
1,.sE>F
82.4
9fb.)^9.F 1,.sE>TP4F^W9`$/)X3)\
F †e9/
; ‡ m).N)^)^>D1,.sE>DF )
0.0824
>>F^)s9 'X) 39)Fx/P)^>x)739>`_/bE)$x%&>^ '7h 'h/FG)^X) 3)^F
3
7
sEPN^") 39>`_/ m) Hs9,=)7'7 ^"N` 1 3 )F7/P)>h)!3`>_/ E)$
V PQ+01[7NL=1[M*:<2LM:<!.T<M2+012 >F^fbFrsE) FGF^,F s":9^F^)X71,.sE> F^89
/F4)FxF^ 1,`&P 3`_/139)F † /+)>4`$/3 )^9 ./1 N=1 ,) ‡ Lt~C. )hPN_)
I'X>^ )+39>`_/ E)"F =8g `9`/ {+mF^F^s9 )v)$ .)F F )^FG)^8/
,sgL7<M F^,`a)9)7) :9^F^)3 1,.sE>hFhP ) PN
./1 N=1 ,)
10
.
=& ]/89 82.4 = 824 10−1 ,
0.0824 = 824 10−4 .
2.5.1 The types float and double
g79 )o1mF
93
O.PN,939/)/ )oEFT9^Of133 s 6hY Y /3 )> FI)
float
double
1,.sE>F7! bO) E) ^>F^))r
9 ).PN,939/)/r)vEF
/3
O.$/)&)O9$]=_)")^9
int
unsigned int
G_)_O)`$/7)o1E>F /3
XFGm`>)fb> &)?b P sE) float /3 double F
) O9$]=_)8)FG>
) P&$&1,.sE>F>y\1` )^9:a^+,9` _$Z,9.sE>^F
)9/ )>>F )F b/ F^>F :fb5_/.s9),K
F † /3|>F^F $/FG)g` ‡T)9/ )^GH-)
$]=_)^
F 'X)^ W99 ) f//, 9/ Z>fb:^)FGF ) )o'7a)o1EF float /3
Ohfb:^ ,F^>PN,99+9/`>)`/9`$)^F g7
9b)9DE) >FG)O)8('XF
double
f//,F&)9)X" ,`-N:&)9/ /f//,!P )oE
/3
&de-P `>) )^9
int
unsigned int
f//,D/F P )^9 9b)^ E)7,+sE: )o1EF
/3
^ FG, `)h FI)
float
double
9`$O)F
jn/,FTPk)F^.)o'7 )o1mF!O+^PN>^>3 )^/F \Q+01"7N^L71[M\=h'A;</:g. r'&>
double
,F^,9/
('XF >R
†e9/ )J*;gD ‡ `F^a$]=_)^ $/{1,.sE>F>
CT )X)vEF
/3
'7T9$fbD)TF/TO)>)` N)^9/ /3a/F^FG float
double
) E>O)Fh/F )/ )o1E>F H'X)^_)^9DF^/T/F^F^`N)^fH)^F 93_`>39>9`>F g7
:]=`:9)^ F")^ O)")83,9,9FTE:)F
/3
f//NOs +PN )>/ )vEF
%
%=
bxg7Fn_ bFnFGF^ 1FG`&3f1F^+Ofb:
93
F4$/)4)^!13=)7)^,
float
double
3fHF^
Ofb>
['X`a9/Fh _39:$
& ]av $#R
q b+)/ )o1EF r) 9b)E)T1,.sE>D)o1E>F!^
r
`89>)^F )"FG)7P PN,3 ){)>)^`&)o1E>FZa6ZY Y :!1[65&'I!01qj0VgL=!. /3 )^9F
q{)>F P )o1E>F
/3
h7`89`$O)3
Literals of type float and double.
float
double
)9/ )>/F PH)o1m
=x:]=/89 FxZf//3
)>/ int unsigned int
1.23e-7
double
>>F^)^!)&f//,
4q{)>FnP )vE
1 .)&F^/X/Fn):/F Pm)o1E
1.23 10−7
float
=PN('73
s1
)":)^)>
double
f
F
de?)^FDFG)T>/xPN^ E
)>/ `F^FG)^F Pn/ 1[MqN&<:KL7:g {PNO'73 s1 double
S/:J!012+CL7:g †eFG)O^) 'X)^
) )J/<1"'A+CL=1"M ‡ /3/ ,s!L=<M01q+7L7:g †eFG)G)
.
'X ) ) >)^)^>
‡:ng79 )^>/
F&/EP )F^T ^)F
e
E
1.23e-7
k) )^9-): O^)
/F'7DF_)^9 P`>)9/& G) † /P)>)^9 3`_/ZE,) ‡ O
)^ '&> Px) _
sE 8)o b † $/
F^ ,`FTP 39)F&P^
0
9
.1
!/3 ‡
e$/
†
: g79 ]HE)N/k G3
‡
) † /P):+)^9>)^)>
‡!F./FG 0.1
1.
1.0
e
E
F^ ,`_Ph3 )F `>33 s / 9)^9/
|
… 10657<: )P/`>) n ^) : )
+
:]1E)/m ^)Z_$sm")G)3{ gh,F /3
f3
)^>/F s9,=)
123e-9
1.23
double
Fh) =^39:&) fb3a`PN,F^'&)
)>/F
123
int
ghXf//,DP{)X):/ F s)/3s18F^`$/9 )^9DP/`>)9/ 3`_/f//,D3>W99>3
s
) )>D ^) 93-).P/`:)9/ G)Ds1
'&> e FX)3
†eF^9>C
3 ‡h39>`_/ )>>
10e
‡:
)":]1E)^N/E ^R
) †e3>W93-/F P )^9 :]1E)/m ^)ZFZF^F^+
0
g FG9(' 9b) E)71,.sE>F7-`>)
H:)Z,F7'& ) /Q)9) G`89,)^F +
PN, 933 ^$/r1,+sm> H9/ 8)!2 ,>Z`FG)/)
∞
X
1
= 2.71828 . . .
i!
i=0
‘4,8_.`$/9)9)4)F4F^,}`fb>F1,`H F^!'7ZF^,3/^$/3=+>)
11389^(] _)^ PNk)X2 ,9> `FG)/)n'X8'7XF^,t,_)hW9^FG)D$#")^>F Fb4M / &3F
:]=/`>)_)F>
Á
Ã
# include < iostream >
Á
Â
// Program : euler .C
// Approximate Euler ’s constant e.
int main ()
{
// values for term i , initialized for i = 0
float t = 1.0 f ;
// 1/ i!
float e = 1.0 f ;
// i - th approximation of e
std :: cout < < " Approximating the Euler constant ...\ n ";
// steps 1 ,... , n
for ( unsigned int i = 1; i < 10; ++ i ) {
& + v z
Ã
Á©Â
$#b@
e += t /= i ;
// compact form of t = t / i ; e = e + t
std :: cout < < " Value after term " < < i < < " : " < < e < < "\n ";
}
return 0;
}
LM:<N. 4<C <:
 Ž
Program 11:
9>ab,,)T9^/ H)^FZ,=)^9,=)h_$_1 _bD)F>
Approximating the Euler constant ...
Value after term 1: 2
Value after term 2: 2.5
Value after term 3: 2.66667
Value after term 4: 2.70833
Value after term 5: 2.71667
Value after term 6: 2.71806
Value after term 7: 2.71825
Value after term 8: 2.71828
Value after term 9: 2.71828
d )F^>F )9) '7a3 >) 11359^(]H_) PX)a2 ,>`>9FI)/) 5)F+'h$b
9) _F")asE :]H9N/9>3 F O't) ]=>3 :]H>F^F^
a(0F
e += t /= i
3$/)"'X)^ )9) `)/F!m>/3F P )o1EF
/3
Z) )9) F^9`>
unsigned int
float
) O)>)`-/F^F^9>)
E>O)F ^) /F^F^`N)^fb † g s9 ?*M /?AbK‡ X)^9F
:]19^F^F^ F 89`>) ^)FG 3/F
x:f/, O)3
)>)^ e += (t /= i)
i
)X)^9:PN.WFG)T3fH39>F
s
†
`^FIE3998)^_)^9 FI)> P^
)
‡
E/3
t
i
1/(i − 1)!
1/i!
)a )&393F7) ^F^,).f,
) )^9"$]=_)^ 1/i!
e
2.5.2 Mixed expressions, conversions, and promotions
g79 9b) E)Z,+sE:h)oEFXO"3>W93a)+sE T>/{)9/a )>/m)o1E/
g71,F H_ ]H3_`8EF^ )Z ]HF^FGF =)^/ E>/3F >) `>fb>^)^3 ) )X>FGE`>)^fb
9b)aE).1,.sE> )o1m† F^ /F^ \1`>)^ 1 1L@'X>'7WFG)+F'Q)F `9/F^
PNh ]=>3
]HF^FGFh(fb>7)X)o1E>F
/3
‡ ng7DF^,)9 f//,DF )^9
int
unsigned int
>>F^)s9 f//, :<<.< )^a)89/ f//,ade ^)^`,N P )89/n):
f//,DF _)Df/,9X/DPr)D>f) 9b) E) ,9.sE>k)vE H)Df//,X_/9F
,` 9/3{ deP )>
8)o'7 $>FG) f,F ).F 8 )) 3>W93 'X` F
`F^{
ghF7_ ^)`,N ]H9N/F '&8)T`9/ P
)
)
int celsius
float celsius
/
$/3F7) )^9 sE9fH7'7 'h/) 43,= :f/, O)Pr)!:]1F fahrenheit.C
F^
=/m)/ E:/3F7D>fb),9/ `fb:^)3
) float HF^
9 * celsius / 5 + 32
)9)7) `89,))) b>FZ9N/`T:]H`,F^fb>
Ofb>Z) )oE
float
de!) 9^/
'749fb4)4F/ H93"P1`fb>F^ r )n ]H3 :]HFGF^
euler.C
Z)
E>/3
>)^F
`>fb>^)^3 ) )-)vE
PT) )>
t /= i
unsigned int
i
float
& ]av $#K
E>/3 t
gh )o1E
F 3>W93")^ZsE >b)^ ")x)o1E
g71,F / `8EF^)^
double
float
:]19^F^F^ fb fH E>/39F P{)o1E>F
/3
F Pr)o1m
xFG,9`
float
double
double
/ :]HFGF^:)F7>f,9)3/_E>/3
P )o1m
F LM:/'I) )
Z`$
float
double
Pt\1`>)^ 1B;H &)9)x) FnX):z,9FG3 ) 3)7`>^)/.9^fH3+`fb>^F^F
'X`_.PN_) >)F FG) de
^)^`,N b)Xf//,X/DP
,FG) `>)/
double
)Tf/,9T/ P
float
de F^,_^ x):` PDO)>)`8)vEF P )
$/FI) >/h)^?)FG)
>{)oE!F
bool int unsigned int float double
/^$/3= 1O' )^ O).a`fb:F^ _ /F^- Pi) >9:/ ) a)>F^F
>{)oE F^ \1`>) 1 1L@14g7FZ9E>9F7PN&:]/89D)"3`>N)^ FI) )>)
int i = -1.6 f;
9b)XE) 1,.sE>4F `fb:^)3 )^!/ )^> )7P/`>)^9/H ^)4F 3F^`$^39>3r
deP )hF^,)9Tf//,&F4 )^9hf,h9ZP )Z)>)4)o1E b'7&:)k)F f, )^9:^'XFG
)&`>fb>FGF4,93>W93{ de8)Z>f1,Fn ]/89 )F ,h)N F 'X)
† 93
i
−1
'&)_)!$>FG)Z^>F^)s9Tf,
‡
−2
9>
f//,FDO `fb>^)3 )
'7 /b/a>)X) $^FG)X:9^F^)s9
double
float
f//,W
† 'X ))F s b / 8 )) 3>m39>) 'hJ
‡ hM <.<. )T9/f//,
F4N:nnF^_/>x)9/ /
f/,9/ de )F N)^)^>4`$/F^ b)&`>fb>FG8F4,93>W93{
float
2.5.3 Explicit conversions
6 fb>FGF&sE>)o'7 )/ /3 9b) m)&1,+sm>&)o1mFD!`aa/`:)`
= :]/89 ).`fb>^F^?Pn9bO)fb float f//, x )_).)oE unsigned int
`^^FGE3Fk) )&'7> 1O'& \
: SC!01q
)9)n,93F 3('X8) )^9&9 ]H) )>
x
6 fb>FG m)X`$/ _ b F^>9FG )E>PN / )>/ `>8 ,=)O)(fb>" 9b)9+E)
1,.sE>7)o1E 9P )F7N)G)>7)o1E 9/FX N^>Zf//,T/
2x]19`)8`fb>^F^ /('XF )^ `fb>G)?f//, P / )>)^` )o1m-39 `>) 5)
/ )> )>)^` )oE 'X ),) ) 39:),= P+3>W9 :]1)^5f/Ns9 b g s9)/ )^9
f, FG,9 ) P^)
f//,
{'7 `$
int i = -1.6f;
int
float
−1.6
F^89 '&)^T)^9 :]19^F^F^
int(-1.6f)
gh">/{FG1)O] Pxa:]H9`)7`fb>F^
9/FG `$3 ,+.<\,sgLM:/!.<./1q 9F
†
`‡
'X>^ F& )o1E 93
.FZ/a:]1F^F^rng79 `$/FI)X:]19^F^F^Fhf//3P /3a_P
) `^FIE399+`fb>F^-P
)+) )oE † /Fh
‡ F73>W99>3r
T x =
= `>^)/ G`89`$)3 D)o1EZ9/F b)kFn`>F^FG8)" ^)FG bZ )
`$/FI)&:]1F^F^
(unsigned int)(1.6f)
& + v z
$#U
2.5.4 Value range
=.)^/k)oEF )_)^9:)`+E>)^F _ P /n) `89,)^8`^>`>).F^,)F 3,
) (fb> !
,3> 9O'! g79F F sE>`$/,F^_)
f//,/
P&$/`5)/ )o1E
F+
/M01 N C. F^,=s FG>)&P = 'X)^ G>F sE>)o'7{
9 b)9 E)r1,.sE>{)o1EF )FrF{) )^^,9 r '&)TW )^v†e/3 >fb '&) `,)s9!‡
=
f//, / =
)ZF78EF^F^ s &) ^>F^)D.F^,=s9F^>)ZP ['X)^ D)9/9 >) s9,=)
>F de `)^/FG) {
(fb> Z ,93> 9 ('XFT^+F^F Pk/ F^F^, X
)^9 :9^F^)s9 f,F
,F^,9/+FG /_ 1,&)>Gf/ +,` N>n)9/8PN )/=)vEF4dePmb,8)k)ZNFI)
double
f//, b,=Z9NO)PNQfHN ) :]H>F^F^
std :: numeric_limits < double >:: max ()
b,?)DPN":]8 >)T) ,=)^9,=)
Z`$ )9)T)FD$/F
1.79769e+308
1.79769
308 9.>)G)v
NO",+sE:$
10
qr:)D,FDb/`a)!FGF^, PxFZ'&)-+fb>^aFG89D9^/ )^ O)D/F 1F&)!,F^:X)
=9,=) )o'7 9b)Zm) 1,+sm>F ) ) 3lm:` g7 9^/ )^9>+``HFx'&9:)>
)F7Fh33) `^>`>)X3l >`nMx/ .m>PNF )F7)/F Á
Ã
// Program : diff . C
// Check subtraction of two floating point numbers
# include < iostream >
Â
Á
Ã
Á©Â
Á
Á©Á
Á
Á
Á©Ã
int main ()
{
// Input
float n1 ;
std :: cout < < " First number
std :: cin > > n1 ;
float n2 ;
std :: cout < < " Second number
std :: cin > > n2 ;
=? ";
=? ";
float d ;
std :: cout < < " Their difference =? ";
std :: cin > > d;
// Computation and output
std :: cout < < " Computed difference - input difference = "
< < n1 - n2 - d < < " .\ n" ;
return 0;
}
Program 12:
LM:</N. )1 c Ž
& ]av $#
P
%&> F /5:]=/89,
1.5
First number
=?
Second number
=?
Their difference =?
Computed difference
k,=)Z)^9"/,=)Fh`$/-O9
F^O'& )9)+) /,=)F Oas9)?`^`:) F^,=s)^/`>)
1.5
1.0
0.5
- input difference = 0.
^) First number
=?
Second number
=?
Their difference =?
Computed difference
`^^`>)
F^,=s)^`>)
1
P
1.1
1
1.1
1.0
0.1
- input difference = 2.23517e -08.
9)hF7 >(-VXP):Z3,=s9D``H ,=h)/mO)>)` '7T+,FG)7``,3
)9)D !) ’BF&)^9 'KLM7/: /3 9)X,9FD'&9`/9)T`>^`>)^-F^,=s)^/`:)$Tg _
, 93>^FG)/3 'X '7 fb ) ) b!.F^>'& O)7`F^>Z )9b)^.m)h1,.sE>F7 >/ 2.5.5 Floating point number systems
=10 \Q+01"7NKL71[M=h'A;/<:3./V.<<'
V
Fh W99 )DF^,=s9F^>)ZP
93>W93
s1
PN,=&,9.sE>^F
† )^9 ;/+.Q ‡ 1 p
† ) LM:</<1[./12 ‡ e
† )^9 ./'+[D!.<K sgL=<M ‡
2
β
†
) U:2NY<.<c,sgL=/M ‡:
/3
e
gh FG>) P ^$/ ,+sE:FZ:9^F^)3-s1 )FZFIHFG)> `F^FG)^F&P /
(β, p, e , e )
9b) E)h1,+sm>F7P ) PN
p−1
X
s
di β−i βe ,
i=0
'X>^
PN&/ 9/3
s {−1, 1} di {0, . . . , β − 1}
i
e {e , . . . , e }
gh 1,.sE>
Fh) ./1 N H)"FG 1,`
F7`$3_) .1"N=1
s
d0 d1 . . . dp−1
) 1,+sm>
F7) ,sgL=<M e
)v9`$/ 8'& ) 9b)9 E)h1,.sE>h )^9 PN
d0 .d1 . . . dp−1 βe .
=+:]/89 ,F^-s F^
/3a
0.1 100 0.01 101
) — /3
x)_1,+sm> 0.1 `$ sE'Z)^)> F 1.0 10−1 n/3 /F
β = 10
_/_)>h'hHF
gh>>F^)) Pha1,+sm> sE`>F ,91,8'X '78FG)G`>).,=F^>fbF )-)
4ghT3O'&F^3
F^>) P :!'+~1 ) ,9.sE>^F He 1)TF 'X)
(β, p, e , e )
d0 = 0
P )F!F!)9)!'7F^8F^ 1,+sm>z
F †e O^)`,NO")8,+sE: s9,=) ><) ’BF!) '7G^
0
sE,=) )^9F 9('`‡ `>F^ x_ )^?FGF.:]/`:) )_1,.sE>F!P&s9F^,)^
f//,"FG_/>k)9/
†eF^"/FG82 ]=>`>F^ 0/+A ‡ βe *
/
%
I %*: %7"
& + v z
=D
W=]=3-:]1E)
e
H)"F^_/>FG)
EF^ )fbT_/ 3_1,+sm>hF
1.0 . . . 0 βe = βe ,
'XX)"NOFG)Z"F
—
(β − 1).(β − 1) . . . (β − 1) βe =
p−1
X
(β − 1)β−i βe = 1 −
i=0
1
β
p
βe+1 < βe+1 .
g79FZ$9F )9)7) _/ 3_1,+sm>FZGF^^)3 s1
:]Hm9>)=
FG) 9b)9+E)&,9.sE>&FGHFI)F&,F^>3 a`>)`! ;<1[:!V $/.)9)&)^9:
9fb s /F^
8de s99^ FG1FG) {) 3`_/x1,.sE>F
/3
) > β=2
1.1
0.1
F^)s9 bF '7k'X1F^ :]1!) “b`F^ ,9>) :^F4k_/3 .`fb:^)X) ) 9b)^
E)h1,+sm>F /3)^9Fh ]H9N/F ) FG)^/TsE9fHhPxMx
1
de ^39:h)^ `fb>G)& fb
mF^)fb — 39>`_/
Computing the floating point representation.
1,.sE>
) _/ 3 s99G 9b) E
) 1,+sm> FG1FG) 1'7
x
(2, p, e , e )
WFG)Z`89,=)T)F ;!1[:!V| sgL7M./1q
∞
X
x=
bi 2 i ,
{0, 1}
bi
PNX/
i.
i=−∞
g79FnF4F^N ) )hs99G ]H /F^ PE 9)^,/1,+sm>n/Fk3F^`>,9FGF^38\1`>) 1 1<KH
g79 3lm>^`F.)9).'79fb )^ /O'c b)fb_E('7>F+P FG`
`$|sE
2
x
^s9)G 8`FG ) nghTs O^_:]H /F^aP
PN&:]8 DF
0
1.25
1.25 = 1 2−2 + 1 20 .
)+3>)>^4) F^_FG) /3.N>FG) f//,F P /3 PNx'&`
F >
i i
i
bi
_ sm
1
s9,=) F4W99 )&F^9`>
FnW9)g‡ ghX,9.sE>
i
−∞
i
x
i−i+1
{∞}
F7)",+sE:ZP ./1"N
=1 MR)1"N1[6. P )
='7 >) d = 0 /3 x
di := bi−i
0
†e)h)9)
x=
i
X
i
bi 2 =
i−i
X
bi−i 2
i=0
i=i
i−i
=
i−i
X
di 2−i 2i .
i=0
g Fh89>Fn)9)
h
P /3_P
/3
x
(2, p, e , e )
i−i< p
e
i e
2 1,f//) DP!)^9 s O^ ]H /F^*P
9/F-)FG)
F^W9`$/)3 )F T/3 )
x
p
:]1E)ZP ) 9^_/ >3_^>F^))aF 'X)^9
)"/('hs9&/
dea`89,=) )Ts O^_:]H /F^P
=>)Z,F&F^F^,TPN&F^8 `)o+)9) x < 2 x>0
g79FnF F^, `)k) :]H9N )hF^F^,7'X)^ )h39>`_/H,+sE:F
/3
938/=)>
1.1
0.1
%BL7
A 2"O
%6(
A*S
+
"
Pn
i=0 xi = (xn+1 − 1)/(x − 1)
% ( M/
$&
B@7
-.6>*
xJ = 1
s
& ]av `$/FGF8`$/5sm 3,`3 ) )F `/F^s|F^: O) 3 $ '&) )^9 N >FG)8>fb>):
F^_/> . 1,9/ ) '&^)
'&)
/3
x'7>).)8s99^
x
x = y + 2k
k
N
y < 2
:]1 9FGP
s1 `+s9 ) :]H /F^9FhP
/
3
y
2k
= x < 2 Hx'7!9fb
x =
0
X
bi 2 i = b 0 +
−1
X
0
X
bi 2 i = b 0 +
i=−∞
i=−∞
i=−∞
0
1 X
bi−1 2i .
2 i=−∞
| {z }
bi−1 2i−1 = b0 +
=:x
ghFD39>))oa(fH39>FT_FG89 /)c) `>8 ,=)").s99Ga:]1 9FG P deP
x
m) FG)DFGW9`$/)&3)
F E)>^'XF^ )TF g7+)^9:T39)F
x 1
b
1
0
bi i −1
`$/F^,=s FG 1,)
sE" ]H)^`>)3s 0 H )!FT)^`9 , )
x = 2(x − b0 )
SD+)F7PN
13F7)"PNO'& F^ ,9>9`> P 3)^F
x = 1.1
2(1.1 − 1)
2(0.2 − 0)
2(0.4 − 0)
2(0.8 − 0)
2(1.6 − 1)
2(1.2 − 1)
=
=
=
=
=
=
2
2
2
2
2
2
0.1
0.2
0.4
0.8
0.6
0.2
=
=
=
=
=
=
1.1
0.2
0.4
0.8
1.6
1.2
0.4
→
→
→
→
→
→
→
..
.
b0
b−1
b−2
b−3
b−4
b−5
b−6
=1
=0
=0
=0
=1
=1
=0
4O' F^ )9){) s O^T:]H /F^!P)^943`_1,.sE>
F{E>^13` m)^9 `G 1.1
FGE3Xs99^!1,+sm> F
b/3 )x9/Fx=W99 ) _/ F^W9`$) 3 )Fx\19`>7/
1.00011
1,.sE>F ) 9b) E)71,.sE>7FG1FG)F
/3
(2, p, e , e )
(2, p, e , e )
9fb )ZFG)
FGW9`$/)h3)^F =)hPN('XF )9)
Fh)Z^>F^)s9"- s O^
9b)7E) p1,.sE> FGHFI) ^b3FGF P p, ex /=3 1.1e xgh F^/nF )^,kPN x = 0.1 ?-9$fb F^('Xy)a9^>fH,F8 9 )9))_F 8EF^F^ s The Excel 2007 bug.
) `fb>G) F^_` 3`_ 1,.sE>FG†eb
‡ ) s99^ 9b)9 E)
1.1
0.1
1,.sE>F 1'X)^9,=)k_ H FG_/ :^Fng79F F7)^9D>+s ^/F^F^ `F^ 1,`T)9) )
)o1E>F
/3
O",9s9D)+>F^>)&)^9Tf//,FhP F^TP ) & )>/F
float
double
SDFG9)T)F79^s = ,",9.sE>ZP 3`_/ e)^ es99^ `fb:F^F&) b 9N/`>"
`89,=)>F.'73='&3 4)^9
,)^_b,5^$/35)F =8:]=/89 'X>fb>8b, >)>8
1,.sE> ) FG$/3F^>) Zb,y3 )8y3`_ZPN_O)$ k,=)`9/`F
9y)^ O)
)>9/ ).1,.sE> FD`fb>^)3 )93 >FG)>3 s99G 9b) em)&PN_)$
g79 F^_/&>^F )F^fb>F O?,F^,9/ y9)
) s9>?
“Ts9,=))^9 FG,9 ) I'7>3 9b) E)Z1,.sE>F&:]H)^^ `F^ )^F^ G` _3`_/rf//, _:]HEFG )>
s9F ) -
V `>) F^,` F^F^,8)9).9/F ^`fb>35a).Ph)^)^) F HO'&|F.)^98)^9?
… s$!
@;!hN &FG>F 9fb_>E^)^3|)9).)
,) `$) P
'X)^
`>F^P)
77.1
850
2 ]=`r31FZ)h13
†
) _)_)^`$/ +`^`:)Z>F^,,) ‡ s ,=)
65, 535
100, 000
& + v z
$;
`>FGP)!$`>)3 ) )F s 39 )^)8).s , rs ,=)!)!)^9 F/ ) E)
,=)
)9) )^9 /'KLMC) Fd+Z F `^>`>) 4/3 )9) )8>G. 9EF!'& )F!f//,
F )1[.qLtDV$) ) F^>) k,=)TO' `/?)X O9m )9)&)+`> )>>Df,
F
65, 535
`^^`>) 3FG9Nb3 w? )!3F^M’ )! O9m 'X b, +,9 )9
'&)
PN
65, 535
1
:]=/89 1)TF^,)ZFh`^>`>)
3FG9Nb3/F
65, 535
gh4E)rF{)9)r)n`>8 ,=)>3"f//,kF $s ,=) F^4)> ,+sE: ]H)^>
65, 535
`FG ) )$ gh $F^?FX)^ O) 8F^_/rs ,=)T,9fb39s9!>G FD_/3 `fb:^))
3`_{f//,
)+) 9b) E)7,+sE:&FG1FG) ):9/_,F^3-s-2 ]=` b
77.1
/3
H) 1,+sm>
9/FZ+W )^Ts99G>F^>))^{
1.1
0.1
77.1
ghF{>G `/ P1`>,^F^n){sE I> /^3 7sT)n+,)9`)7'X)^
F^&2x]H`>)F
850
f//, fb>^-`>F^!)
hghFh'7,3asE /`>`>)s9 9s9,)X:]/`:) PN 65&10. f/,9
535
† /3 )>^F m/`>`3 )65,
`:F^P,) ‡ ) 3FG9N PN,9`:)9/)o
9/FD.s ,= &),= Pr
I'7 3 +,+sE:F7,)hP / 9b) E)k1,.sE>Fh"l `>)3 s1_)F s9,9 = )
Fh$/FG
)h) 3>)>`>)Z)^9Ts9, 3,=+^,N7)FG)^F
9 `>F^P) $^9>3 1,) F^-3`>,9 PN
) 2x]H` ##b@ s9,
†ePN
'X` )
1,` 1 lm>>3 _W=$] ‡ ) F^,3 / P /FGF sE /3)^)>3 )9) F^,` s9,9F `,3 /F^
9fb!1`>`,=^3aaF^P)o'h P )>hfb3FXFh'7e
deP9'7h^h)ns9 )T>>F^)kX$/=,+sE: :]/`:)./F4Xs99^ 9b)^
Relative error.
x
E) ,9.sE>! )8FG1FG) )!F 9),=/ ) $]=_O) )!s1 )
e , e )
9b) E)h1,+sm> :<!./ ) (2,x p,
9)ZF7)":^h'7"_ bT )Fh9^(]H_) \1,=9mF^")9)
F EFG)fb /3a9/F7s99^_:]1 9FG
x
i
X
x=
'X>^
bi 2i = bi .bi−1 . . . 2i ,
bi = 1
i=−∞
'X)^
ZF^F7F^W9`$) 3)^F4CT
g >^!^ )o'7+ O),=/ 'hHFhP 9^(]H_)
h
x
p
'h
Fh)^ ,33('X=F^,)9.
)!,9.sE>
i
x = bi .bi−1 . . . bi−p+1 2 =
x−x=
bi 2
i=−∞
i−p
bi , i
i−p
X
i
bi 2 i .
i=i−p+1
g79Fh)^^,9`$O)FZ/m) 39)F
i−p
X
i
X
/3)
>^h'7!_ b
TF
2i = 2i−p+1 .
i=−∞
VX):9)fb '7!`>,93 ,3a,=a).)!,9.sE>
x = x + 2i−p+1
N'
%*?7
K2/
bi−p+1 = 1
M7@
7PL7
(9 *S
/#*3
,I
M2/
2//
"
2i−p+1
/#*L2
2i−p+1
O(7BK/.6#Q(
N2
%*
/1J
&' 9(Q"L
2%.B3#*
%"L
7
p
@/6>M
A ( -
-.6#*
L(
6>*
*&/.6> JR -
"L
(*
p−1
.6#*
L *:
M
*
2i−p+1
bi−p+1 = 0
/.6> N2
*
/
>;
x
J
,
.*
Q*
/?
( 9*
& ]av A
'X>^",=h9^>fH,Fh>^ZFG)^_)DF^('XFh)9)h39>3
939F>
x x
ghFn$/Fn)^ O)
Fnsm>)o'7)o'7 1,.sE>F4)9) ^ i−p+1 G) FG )&$: Pm)
x
2
)o'7-1,.sE>F"F ) FG) i−p $'h?P
aCD )8)> 9/3
F!F^ +W ,+.< i 2
x
x
2
$/ )9)
|x − x
^|/x
'X>^
FD)
x
^
'AJ<5&1[X2Lt./1[ 2−p ,
bO)8E)T1,+sm>D$>FG)")^ g7.1,+sm> −p EPN>^^3?) / FD)
F )^9 :/!D+01"F&]<:!:<: _/3 O9x$]=_) x 'X2)^+ )F $>FG) bO )
E)h1,+sm> x
^
gh8>f1,F , )o /F^-3F PN.b)^fb
/3 ) `GFGE3asEFI).
x
$]=_)^ F^+)9)7'7!>)h) >/ :<!U+01[FdE<:!:<: PN+,N
x
^
|x − x
^|
2−p , x = 0.
|x|
ghF
$/F8)9)_) 3FG)/` P
)|)^F
$OFG) 9b) E) ,+sE:_F )
x
'7FG) `$/F^am^)9/ )?)^9F^ aP ghF F sE>`$/,F^)9b)^ E)8,+sE:F
x
) ,9/ FG /`>3y/ )^9
$/h567F^
)^
k) 3F^)o F 9 4s9,)+)
0
'7+'h P
{)+FI OF^>")>-sE`/ VXF F^8 :]8 E`F^3>T)
0
_/ 3 bO)DE)4,9.sE>nFG1FG)
g7&F^_FG)xmF^)fb7,9.sE>4F
F (2, 3, −2, 2)
b
/
3
^
)
9
7
N
O
G
F
)
7
F
†
$
`
/
1)9)x)73)FxO s O^J
‡: gh
1.00 2−2 = 1/4
1.11 22 = 7
3FG)^^s9,)^?P7/4EFG)fb 1,+sm>F!(fb> )^9 ):^f
F!F^('X )8PNO'&
[1/4, 7]
9`>),=/
0
1
2
3
4
5
6
7
8
H~)^9F49`>)^,^ )nFn`$4)9)n)^97)fbh>^nPN+,ND`$/)n3 PNkfb>^ N^
k,=)h/F^.P F fb>^
`FGX) > =)X)fbD>GhPN ,N"_$ P /e de P /`>) )>TF
x
x
_F^,=s FI)/)^N/ b?sE>)o'7
/3?)^9+F^_/FG)XmF^)fb _ 3 ,9.sE> Z,+sE:F
0
x
)9) bOOX)7`F^F^8(]H_s9 s189^_/ >3 9b)!E) ,+sE:Fk'X )
)fbT>^^X)ZFG) −p 2
9:DFk)XFG) bh,= `$/`,N)F )^9> -g7>XFk9!FG) b s9,=) )&`/`,N 1[. P /`:)D 9b)
)Fh 9`$Os XP )^9 9b) E)71,.sE>
$>FG)Z)^
x
^
x
E)&,+sE:& )!FG1FG) '7"`F^3> 9e P )&9/FZ)Fh:]HE)D)^9!/('73
/
4g79FZP /F7P
F ) NOTZ) FG_/e
{e , . . . , e }
x
^
M >PN9h/33) >F^,=s9)G/`>) (+,)9`) /3"3f1F^D'&)
Arithmetic operations.
9b)+E)&1,.sE>FZF&$FG-a)G 7/FX)FG !^$/ ,+sE:F '7!F^89E>^PN
)7 )>)`4E>O)F (fb> ) F^>) P=$=1,+sm>F<“P=) >F^,) F )x>>F^)s9
,= 9b)9 E)k,9.sE>kFGHFI) '7X F^h,399 ,c†eFG,9`
/F `1FG!)
$>FG)Z^>F^)s9 bO) E)h,9.sE> ‡:
& + v z
(0
de
`>)` 9b)!E) ,9.sE> )>)^`ZF 9)7^X38`,)k)9/_)>>h)^ >)`&q{>)D,FD,FG)^)^T)^9F&'X)^ / :]/89/X\1,=EF^!)^ O)
m/3-)9)X'7 9fb.
p=4
s99^_FG1FG)?“H'7 'h/)7)+E>PN^J)"/33)
1.111 2−2
+ 1.011 2−1 .
g79XWFI)7FG)> Fk) +Z1"N ^) 9X)o'7.1,.sE>FkF^,` _)9) )^9:9$fbD)DF&:]1E)$ng79F
$/F ) G39>9^_/ 9
P )T)o'7 ,9.sE>^F =B= ) F^`3- 1.111 2−2
+ 10.110 2−2 .
Z(' '7-`$ F^8 |393,=y)a)v'7 F^9 W `/39F
>>F^)){4gh F^,)hF
uI,FG)_b'7 /33y)^>F
s99^
100.101 2−2 .
9/ '7 _/ D/3as)/
1.00101 20 .
hO'y/ )9)4)F :]=/`>)4F^,)nF49) :9^F^)s9Z'&)
FGW9`$/) 3 )F F^
p=4
'7!9fb!)+,3r dea)FZ`/F^ )!$^FG)&^>F^)s9 ,+sE:ZF&s)/3
s1F^89
3=9+) N/FG)7)o'7 3 )F 1.001 20 .
2.5.6 The IEEE standard 754
gh 6ZY Y~FG)/3 O3a31FZ)&F^`:sE )"f//,"9"P )")o1mF
Value range.
float
/3
d )! FI)9,N)FD)9)T)+f/,9./+P
F `)3 )+f//,
double
float
/ P
F^,` a)^ O)&
f/,9 `$/ sE )^3
)^8
f//,
double
float
double
de /`>)` FI)"9N)^PNFTF^,=9m^)z† f//)F P2‡T) # …v…… .<2)Y:)
wPN ^> FG)9a/3 `89,)^_'&) 9b)^
E) 1,.sE>F &39:!)F"FG)/393{) f//,
/ P ) )vE
Fh) F^>)
float
F (2, 24, −126, 127)
P ./1[7N LM:<<10./1q 9
^_/ >3 9b)!E) ,9.sE>^F 9,F F^XFIE`Nm1,.sE>F9† `
fb) Fh9 P )^9>F^!FGm`N/{,9.sE>^F ‡:4ghTf, 9 P
F7)"F^:)
0
double
F (2, 53, −1022, 1023)
P )J*;gDfLM:<<10./1q 9^_/ >3 9
b)&E) ,+sE:F b /b/ 'X) FG FGE`>N/H,9.sE>^F
/333`,3 0
& ]av $R
ghFG& />)^>F _.F^tF^>'X9)4O^s9)^G+)nWFI) s ,=)4)> h)f/)3+s1 `+^ $b,=)4 '&`
s9)^F4PN^ T^ `>e de33
s9)F4Pm^
32
32
!,9FG3 )^ >FG) FG"`>F^-,9.sE>&g7 F^W9`$/3^ 1,>F ; s9)F<“9`$/
)9) Z_ 3 s99^ 9b)Zm) 1,.sE> FGHFG)^ )4W9^FG)x3)rPH)kFGW9`$/3
F7/ 'h$1F H`T) 9>3) :]19`)^ smDFG)3{4g79T:]1E) ^ 1,>F7/)>
s )F
1
8
PNh>F^>)8 )F
mF^F^s9Df//,F 9/3-/)>hs9)hF733-PN&)^9 F^{
= 28 − 2
="3,=s9 `254
F^ 1,+sm>F m).F^W9`$93- 1,F"0 8s9)F m) :]1E) 9/F+
s9)FDPN")F
mF^F^s9 f//,F {93 .s9)TF >39>3?PNT).F^{ de ))/ 2046 = 211 − 2
)F7fbF
s )F
64
Z)T)9)h sm)a`$/FGF =)o'7 T:]1E)hf,FZ`>,93sE"/``3 O)38'X ),)
`>/F^.) ))/{1,+sm>hP s9)Fng79>F^!:]1)^ f,FX^" P /`>)&,9FG3-PNZ^>F^)
) FGE`/{1,+sm>F7)^3OsEOfb 99`>,399 0
gh!6ZY Y FG)/393
31Fh)79^F^`> sE )^9"/` Requirements for the arithmetic operations.
`,=/`:.P ^)>)`4E>)F (fb> ) )o1EF
/3
s9,)x)^9hd 242n2 FG)/393
float
double
@0/A 31F>ng7& ,)F OD/F FG)G`>) /FkEF^FGs9 )&>F^,) Pr//33)bF^,=s)^/` )
m+,)9`$)
HT3f1F^-FX) >F^>)s9 f//, :/!.< )^_)^9 )^^,9 f//,"deP
)> !)o'78$^FG)Xf//,c
F † $/+)^ O)Z)!)G,!f,!FX9/P'h$
asm>)o'7-)‡ Fn` F^>r — g79&F/7,&O99F4)^!)
)&h)9) 9/Fn$/FG)kF^W9`$/)439)
dp−1 = 0
`fb>F^P 3`_/ f/,9>FZ b
)^ )7s99^ 9b)^.m)7>>F^)){
(fb> =`8 ^F^FnPmf//,1.1
Fk fbX) smX:]`>) ,39:7/9N)^9/E>)^a
F †o\1>` ) 1<;H ‡:
2.5.7 Computing with floating point numbers
k
fb FG )9) PNx/ 9b)Zm) 1,.sE> FGHFG)^ )>^ ,+sE:Fr)^ O) ) `$/)
>>F^) k/3 )F^
_).`FGF fb>^ :]H)` 4/F.,=.:]=/89 '&) )_39>`_/
1,.sE>
F^('XFTCD ) )>T9/3 9).d 2n242 FI)/393 @0/A,9/)FX)9)&'7 'X
1.1
>) ) $>FG) >F^>)s97,9.sE> /3 ) F 939FxPN ) >F^,)4P /. )>)`
E>)
O,.)\
† ! ‡r(fb> r/3 ,3> 9O'&F Tfb )F /9n)rsE4)8)3!)^XsE:fb
)9)Z)"FG,9 )FXP FG)Z`89,=))9F7fbfH9
9b)+E)Z1,.sE>F&"`F^!)^ )
_)_O)`$/.`^>`>)&>F^,)F ='X )
^FGE`:)&)+N)^fbT>^$
de39>
3 )F{FE)^,4!_D`$F^F
= :]8 (,r)^N//
`89,=)F
euler.C
9^>)^)o 113?(]H_)-Pn) 24,>"`FG))$ Z>fb:^)FGF F^.`$O 9/FT)
sE
) b>8>e ghZb/ P )FnFG`>)F4)"E)n,=)k`>+9)P F b/38) Of13
FG,9 ) ,3F PN GF^/PN 8`89,=))^Fk'X)^!
9b) E)71,.sE>F
DFG)^) '&)8)&WFG) /3
FI) 8EG)/)4,397)9)k_$ /^$/3= smDs1fH,9F4)
b,-)h)F E)$
Z:fb>X`8 ^T)o'79b) E)Z,+sE:F7PN
Floating Point Arithmetic Guideline 1:
,9/)o 9P )h$FG)& P )cFG,9 )FZP^ :]=/`>)9b) E)Z`>8 ,=)O)F
&(. /
<>=
-< S27
%&#*
/.*6
"L/
*C
%*
/
0*
(B#J
& + v z
(@
2 fb> fb>^ F^89 ]HF^FGF fbfH9 9b)^ E){,+sE:F{_$&sE _)_)`$/
,9 f/) s ,=)hFG) :),=3l >)hf//,F =F^`T)^>3N)^ZFG,9 )F7D,33{ng '7
F^,` ]HF^FGF O
93
g79:PN 7)FI) )
x * x - y * y
(x + y) * (x - y)
FG,9 )F&P )o'7 bO)+m)h`89,=))9F PN& 1,9/)o_,9FG )"^N) mE>O)F
==
_ bF")^) F^>9FG \1`8 1,9/)o F F^>9FG)fb )^a) )FI) >^^F '7 '7M’ )!>)
!=
, )o_FI)Z`/F^F 9>fb-P _)^9>_)`$ '7T'7,93r
 fb> ).PN+,9)-P )+sE(fb+,3 b,?_a'73> O'[)
)^ '&9:)>
^)^`,N 9b) E) `89,=)) F :]/`:)--)$J2x]=/`>)FGF-,9FG, 3>E3F
|)_>FG)O)593|F n)^9:PN k O3 ) `N/ |>/e %&('7>fb> k)^9:O
`>G)/ E>)F"'&` $/FG FG )asE:]=/`>)$ = 9FI)/` x+,)9`) /3
3fHF^s-+mO'7>XP )!s /F^z
†e,F^,9/ ‡Z38)X`9/!) FGW9`$/
3 s9,=)X
)
2
:]1E)$4g71,F H)FGDE>)^F D:]=/`>) =,FGF )>$3_)^ (fb> n7,3> 9O' ) :]HE)$
(fb> x)"F"F/PN )a/F^F^, )^ O)") NFI) :]1E)!B
F †e+,`C
‡D> )9/ )
`F^
p /3-a)F&`/F^ '7 `$ F^8:]=/`>) :9^F^) /r)>>FXP s9F^,)^"f//,
F^_/>)^ 67F^ 1,)^ !)> 393)^F TF^,=s9)G/`>)9F !/3w ,)^9`$)^F
βp
'X )
)^9F7/!^":]=/`>)$
gh 9 ]H) )v'7 ,3F +F^>'&9)TF^F"s1f1,F r/3?'7 ) f)^ )s W9^FG)
F^('X&) ,3>1Zs9- g7^,9,=) O'77/F^F^, hs O^ 9b)^hE) ,+sE:
FG1FG) P `F^
p
\1,=EF^7'7 'h/) )"/33 )^9 )o'7
Adding numbers of different sizes.
/
3
4
9
h
)
X
'
E
s
^
)
9
T
G
F
9
,
) a)_)`$/ b)ZF
2p
1
2p + 1 =
p
X
bO)DE) ,+sE:F
bi 2 i ,
i=0
'X )
\19`>Z)F s99^+:]H /F^89/F
FGW9`$/)
(bp , bp−1 , . . . , b0) = (1, 0, . . . , 0, 1)
p+1
3)F p
FD)D>>F^)s9 'X)^ >`F^
&3>D).d 242n2 FG)/393?@0/A )
2 +1
p
FG,9 )"P )+/33) F p † ` F^> P ) )v'7
$>FG) `$/339)F p 93 p
‡ {F^
2
2
2 +2
)Fh/33)
9/Fh9 >lm>`>)$
ghX>9:/ 9 >^XFn)^ O) /33 9b)9TE)k,+sE:FkPm3l >) F^ F
HF 8).FGF"F^9 W `/)D3 )FXPn)^9.F^_>D,+sE:X
†e , :]=/89 +" )FD3 )F ‡:
g79 N^>Z)^9 F^ "3l >` =) T3=/FG)`"F )">lm`:)$
g `f1` b, )9)x)FxFx9)48^)^W9`N/ :) ,9F `F^39:x)7s9>
PE`89,=)"%X`71,.sE>a
F †eF^$^` )&'7:s PNk) /+L=/" !:7% .aLM:<&;! <' )
W93 / ):FG)9
1`>`,=^`+P %XO` 1,.sE>F ‡: =
r)^9 ne)^ ˆ :!'A=12
n
=C';<<:
F73>W93a/F ) F^,cPr)T` 9^1`$/F Pr)TWFG)
9),=E1,+sm>F 1)^ O)
Hn
n
F Hn =
n
X
1
i=1
i
.
& ]av $K
d )TF^,3-O' sE./ $/FGa:]=>^`F^.PNDb,-)'& ) / )9)D`>8 ,=)>F
PN
H
fb
z‘4, 9>3 F^+?, )=, ) ,+sE:F
,= )n
n
1
n
/33!)n` 9^1`$/F,9FI)7/Fk'79b,
`$/__ bhb, 1,_P
3('X)
93
n
1
F^, ,= )^9+` 9^1`$/F ?) r)^ O)!F^,3 )!_ b+/ 3lm>^` ) qr:) ,F
)^^.sE)^ fON/)Fk93 F^Z'&9)n'7h>)$4g7h
F^('X sE>('y`89,)^F
harmonic.C
)T)v'7 F^,Fh/3a,=)^9,)^F7)^9>-
Á
Ã
// Program : harmonic .C
// Compute the n - th harmonic number in two ways .
# include < iostream >
Â
Á
Ã
Á©Â
Á
Á©Á
Á
Á
Á©Ã
Á
Á
int main ()
{
// Input
std :: cout < < " Compute H_n for n =? ";
unsigned int n;
std :: cin > > n;
// Forward sum
float fs = 0;
for ( unsigned int i = 1; i <= n ; ++ i)
fs += 1.0 f / i;
// Backward sum
float bs = 0;
for ( unsigned int i = n ; i >= 1; - - i)
bs += 1.0 f / i;
// Output
std :: cout < < " Forward sum = " < < fs < < "\n"
< < " Backward sum = " < < bs < < "\n" ;
return 0;
}
LM:<N. t5C:!'I=1qQ Ž
Program 13:
gh PND+F^`3 /3a`$E'X )&FZ8E^)/) ) 'Z)
- $R /3
1 / i
H Z(' >)h,9FZ9$fb".1 )&/a ]=`,=)P )T/-
Compute H_n for n =? 10000000
Forward sum = 15.4037
Backward sum = 16.686
g 9X^F^,)F 3l > F^9 W `/) b g79D3l >`Xsm`F :fb ^X ) 'X'7X)^G
7
N^>h= ,=)F>
Compute H_n for n =? 100000000
& + v z
$U
Forward sum = 15.4037
Backward sum = 18.8079
33 9) `9/ n
'&9` |`$/)+sm `G`>)$
Z)`>
)9).)
PN^'h3|F^,
$]=_)^
&F^ )
1
1
< Hn − n − γ <
,
2(n + 1)
2n
'X>^
F )^9 2 ,> a/F^`>X`>9FI)/) h'7->)
PN
γ = 0.57721666 . . .
Hn
18.998
kg79)ZF H)Ts ` 'h3aFG,9c(fH3FZ++,`sE>)^)^>Z9^(]H_)_P
n = 108
Hn
31F )PN^'hO3 FG,9ism9$fb_F^ s /3 g78$/FG F FG89 .VXF )N:
F^,_/3Fh 3933-,=-WFG) 9) )>^3N)Xf//,!P )^9"F^, ) sE `89,=)3 O'&F
†e`8 )fb J ‡ P /FG)4V )kF^ZE) b)&F^ X3lm:`&sE:)v'7>)Z ^)/F^,Q/38)
F^,_/3 1 )_sE /339>3 FTF^ )9)T) 393)^ 39F 9)"`9/+). ^)N F^,
/H (uv,i FG) b& p
4gh,9F 1b^39F^F PE(' _/ ZF^,_/3FnO
2 + 1 = 2p
/333) ) H) F^, FI)HF7)"F
de_`)^/FG) b)&s /` 1'h^3F^,}FG)O^)Fn)^ /33,=)XF^_/=FG,9_93FxWFG)$ g7>PN^ )&f//,XPm)& G)N/9F^, ('X9
F † `8 ) fbJ
‡ FGO'& /('XT)XF^_/9FG,9_93F
) `)Gs9,=) gh_F^,_/3F")^)3 )^9_3 Ph)_F^,_)?9fb FG)^ -13
`9/` ) 9,9>9`>_)^9
F^W9`$93 P&)_ ^)N F^, nF^9`>
)> ^I
†e`8 )fb J
‡
N^
gh .uv,9FI)&s9F^>Gfb3-$/3Fh,Fh) ,=&F^>`3-,939>
Floating Point Arithmetic Guideline 2:
3l >&^F V&fb3a/33+)o'7+1,.sE>F7)9)h`F^3>Os Cancellation.
67F^39:Z) 1
,9/3=)^`T 1 ,9)
ax2 + bx + c = 0,
a = 0.
d )ZFh'7> H
('X)9)h)^Fh)o'7.1)FZ fb s1
b2 − 4ac
.
2a
de- /c)9)h`89,=)F )F^ 1)F '7 ) )>PN 'h/)h) `89,)^T)^9Tf//,
Ph) )1[.Q<:!1"'j1[M deP 2 /3
O>F^>)s9 /F9b)aE)
d = b2 − 4ac
1,.sE>F"'X) >`F^
p x,= :fH,F b>G.FG4ac
)_)F", O/)^ )9) )^98^F^,) ^ P
d
)!W99/ FG,s)^/`>)-9/FDFG_/ENO)fb!:^ Dg79FX$/F >fb P
F
−p
^
|d − d| 2 |d|
d
`FG ) > ^ '& sm!'h
P
s1 'j*!5ID!.<. )9/
)"3FG)/`"P
) >H
d
d
d
gh s9>iF^F Pn)81,.sE>F 2 /3 /
O8)!:9^F^)s9/F bO)
b
4ac
E)&,+sE:F a'X`-`$/F^!>^FX _/3"-`89,=)+)^9>- VXF^F^,
b = 2p , a =
†
/
)
^
F
&
,
+
E
s
:
4
F
h
:
]
/
:
`
)
>
>
^
F
)
9
s
g
:
‡
7
g
)
h
:]/`:)nf//,
2p−1 − 1, c = 2p−1 + 1
r1,2 =
−b
& ]av #
P
F 4g79Xf//, 2
F7":9^F^)s9 9b) E) 1,+sm> s9,=)
d 4
b = 22p
4ac = 22p − 4
F ) bF^`7)F 1,.sE> 9/F
FGW9`$/) 3 )F † /=P9)z 1,9/=) ‡ )Fxs O^
2p − 2
1
:]1 9FG{ g79n$FI)9b)7E) 1,.sE> Frs9)/3!s",3&,=G† /33 ‡ 93
4
/P): )^93
† >^ ePg‡DF^,=s)^/`:) '7 >) ^
!g7 N)^fb >^ P )FX`89,=))^
d=0
F7)>PN^
FG)$/3 P −p 1
2
gh7$/FGFx)9)4 F^,=s)^`>)T)v'7"1,.sE>Fx)9)nZ/FI)x 1,9/ b)^9h7F^P `$) 3)^Fk`$/`>m$/`)^9:$ deP =)D)>79/3 )X_/99 FGF F^W9`$/) 3)F
/^$/3=_`$^G FG :^FhPc9^>fH,F7`89,=))9F )TF^,=s)^/`>)^,9>
/89W9F
)F^-:^F )-`$/`N) 9^)F )^9a:fH,F^|F^FFGW9`$/) 3)F+) ,`
TF^W9`$)73)F P ) >F^,)$
VXb/
O)k:]=/894'7nbfb > F ^) W `>N/ $s9,=) sE F^F^,=3 )9) `$/`N)"9EF
`>)`/ 2 fb )
,9/3=)`7 ,9)8 ]/89 )k)xsE7)9)n)^9h , O)F4)^ O)
`.,= ?/ 9`)-9fb ) E>G)v )9)T) "3FG`>9/) 2
F"+,` b − 4ac
u
0
1
"
F^_/> )9/
/3
)^9>F^fbF>nde )FZ`/F^ `$/`>N)
9E{
a, b
c
gh"39F^`,F^F^ `$/sm"F^,_^ 3_aPN^ P .)^3,3
V&fb3F^,=s)^/`:)+)o'7 1,+sm>F7P /FG)7 1
,9/
Floating Point Arithmetic Guideline 3:
F^ P )^9>F^!,9.sE>^FZO ^F^,)FhP )>9b) E)h`89,))F
2.5.8 Details
g79_d 24242 FG)939^3 @0/A-39:W F )o'7- 9b)
Other floating point number systems.
E)D1,.sE>TFG1FG)F ./1[7ND!{,,s<)J,)ELM:<//10./1q †
‡ {/3 )J*;gD!{ s<)J)^LM:<!{
p = 32
<1[./12 †
‡ 93 FG
9N)^PNF.lm>8 ))F!PZ)F^)o1mFgh>^F
p = 64
/FG
) d 2n242*FG)/393?Kb0/A )9)"/O'&FXs /F^
rPN"s1fH,9FT$F^F )^9+3`_
β = 10
PN_)ZF&)^9" a'X`a'7!)^9 sE,=)&1,+sm>F /3-a'X`a'7 ,F^,9/_>F^>)
1,.sE>F> de O^)`,NO k-s /F^ FIHFG)> 9/F 9 F.|)_f,
9 ) 3`_/
10
P/`:)9/E1,.sE>Fh b
93
1.1
0.1
FG)&9N)^PNF )!)o1EF
/3
`GFGE3-)
IEEE compliance.
float
double
)+F^ /3 3,s9 `>F^ bO)
m) 1,.sE>FTPk)^9 d 242n2*FG)939^3 @0/A r)^9F
`^^FGE3`8F",F^,9/ ) ) :]/89 rPkb, +)^^H9
):9^13,`
) `$/`)
:]8 X'7"bfb =b,-) '& )
float b = 16777216.0f ;
float a = 8388607.0f ;
float c = 8388609.0f ;
// 2^24
// 2^23 - 1
// 2^23 + 1
std :: cout < < b * b - 4.0 f * a * c < < "\n ";
/ 3 :]Hm`>)X):)X)!3`>)^3-'& >F^,) k,=)D)X_ $/F^9E> )^ O)&b, >)
0
)D`^^`>)7F^,) =>fb )^9,_b,= )PN `>N/F4).PN(' )Td 242n2|FI)/393@0/A=
4
g79 FI)X b>/F^ F&)9)X)^9 9NO)PN )>^ ,9FGFT FI)>D'X )-"s9)^F&)
& + v z
H
E>^PN ) `89,)){& )FDFGFDb.813 3$8 >/ m)T`$/ sE P )
PN&.c'&F^"PN,`>) )o`> )`$/ >Fh)"d 2n242 FG)/393a@0/A=
‘4, u10" FG)7 b _F^")^9 `$/`>N)
:lm`>)& )^9 PN('X9 FG 1,f//)
f/N/)hP )!OsEOfb `39/
float b = 16777216.0f ;
float a = 8388607.0f ;
float c = 8388609.0f ;
// 2^24
// 2^23 - 1
// 2^23 + 1
float bb = b * b;
float ac4 = 4.0 f * a * c;
std :: cout < < bb - ac4 < < "\n" ;
%&>^ ) F^,)F&P )!)>3NO)T`89,))Fh '&)G)s /`)^
f/NOs F float
s s9^F^,)8 ) :]1E`>)^3 ^,93P
Tg79> ) W99/ F^,=s)^`>)->fb/F
4ac
)!`/`NO):lm`>) M !./. Px`>,^F^ )^9"`89>h3`39>F&) b: )^9 fONs9
ac4
^FG):X'X)^a">`F^{=X)FZ^$/F^ b, `$ )o `$/_(fH3 `89>
)
) _ b"F^,=T)9
) 9b) E)71,+sm>FZ 9
) b>)Z >FG)>^F
O).F!)8 P )F ‘4, ,F^,9/ `$/) PN, )^,FG) ) # …v…… /']Lt~1 /
P4 9N)PN^ 93 )&FX)^9:D$/FGD'7^)'&T) 3`>)X9(' 9b)^ E)X,9 sE>^F :]`>) sE9fb8 FGE` W `+9N)PN- d ) F"+8E^))TPN!b, )!
HO't/3
,39:FG)/3 bO)!E)71,.sE>7FG1FG)F > =/ 'X ))7 ))F g79F
H('X>39D'&{/O' b, ) 3)P /3'7 ^,93
9^s F )9)h)7`T,=-
FGE>`W9` 9NO)PNF
g7!6hY Y FG)/393FG`>sE>F7/)>7PN,939/>)/ 9b)!m)
The type long double.
1,.sE>X)oE `$/3
Dd )FD)>FZ>93 'X )a) >)G)>
E/3 )DFX,9 long double
l
L
/)3?)^ O)D)+f//, /.P
FT`)/3 ) f//, / P
double
long double
SDFG9) )F O)k`fb>F^ P
)^
F ) 39:W 3 )^&sEnh)
double long double
s1_) 6ZY Y FG)/393{
/3
,9FG, `^^FGE3|) F^
/353,=s9
>`F^ P&)
9
float
double
d 242n2 FG)939^3z@0/A )>|F F^,` 3P /,) `9`|PN
de `>)` long double
) F^89 sE_aFG1H PN
xs9,=).) ) /F^asEF^>)^99
long double
double
FG4CT8)^9h9N)PNz,F^38s )^9Z/,=)F PNn:]/89 `GFGE3Fn)^")
long double
_/ 3 9b)^ E) ,9.sE>!FGHFI)

)^9F!F":]/`:)?)^9
F (2, 64, −16382, 16384)
3,=s :]1)33`>F^ P ) d 242425FG)/393 @0/A=
deP b, 'h/)!) 19('~) />)^>F!P )^9 bO) E)"1,+sm> FG1F Numeric limits.
)F+sE3
93
yb,=89NO)PN nb,y`$>8 O )
float double
long double
'789fb,F^3 sEPN^8 ) \1`:) 1 1<01
%&>
numeric_limits
limits.C
T)T>f//)X:]19^F^F^F7)>)>h'X ) ) Z/F HF^('XPNZ) )oE
float
& ]av :]1F^F^|†eP )o1m
‡
int
std::numeric_limits<float>::radix
std::numeric_limits<float>::digits
std::numeric_limits<float>::min_exponent
std::numeric_limits<float>::max_exponent
$/
β
p
e + 1
e + 1
_ )^ O)
3 1F fb_)
F^_/>FG)
std::numeric_limits<float>::min()
f//,?† sE>`$/,F^P )F^ s9) )^9F F^_/FG)!f//,8F ^F 89 )b)fb P7)^9
float
N^FG)7f,g ‡ =s9,)7)"F^_/>FG) _/ 3 L=./1[01[F& f//,
9fb.)^3)9)X)^9 9b)^ E)XFG1FG)F&>F^`>sm3 sa)
Special numbers.
d 242n2 FI)/393 @0/A`)/ F^ FGm`N/ 1,.sE>F<“ )T`399 ,9FGFT:]HE)Df,F
)9)h3 )Z1``,=Za_/ 3_1,.sE>F>
CTa)^9 "9/
3 =)>"T) )J/:!'A+Z1 ,) 1,.sE>FhP )^9 PN
d0 .d1 . . . dp−1 βe ,
'X )
V~39>9^_/ >3 ,9.sE> 9/F"F^_/: s9F^,=) f,+)9/ / _/ 3
d0 = 0
1,.sE>$4de G)`,N F&.3_/ 3_1,.sE>$
0
gh)>!FGE`>N/k,+sE:F!`$9) ^$/ sE `$/>3 1,+sm>F gh>^ f//,F ^> FG)9
/3
/3 )> >),=3 s1 Ofb> ('X9E>)^F
gh )>
+∞
−∞
DFG>fb>/mf//,Fk`$/>3
F †ePN G)7"1,+sm>+‡ )^ O)7X:),=3
s8E:)Fk'&)
NaN
,39:W 35^F^,) n b_) H9 )F ,9 ^1) PD b)^fb ,+sE:$5g73$-sE3
)F^Xf//,F Fk) (fH3D
]=s9 )v+3$!'X ):]=`>>)9/ FG),9)F de9FI)$/3
P F^89 sEG) ) 'X F^"E>)^-P /F )&_ bFXF^>9FG.)^8>),= /
:]H`>)9/7f, g79`$/: P&)^9 E>O)5`$5) 3`3('c) 3$/7'X)^|)
F^)^, O){
2.5.9 Goals
V7)7)F7E) 1b,aFG9,3?
Dispositional.
g‡ H('t) 9b)^
E) ,+sE:")o1mF float 93 double /3 )9)!)> >/{)9/ )^9 )/E)o1mF<“
‡,93>^FG)/3y)-``>)_P! 9b)^?E)81,.sE>FIHFG)> &/3 ^)`>,98)^F
/3=f/)/Fh(fb>D W=]=3m)h1,.sE>hFG1FG)?“
;‡ H('[)9)Z).d 2n242 FG)/3 O3 @0/A3F^`> sEFXFGm`W9` 9b)9+E)X1,.sE>&FGHFG)^F
,9FG3 /Fh13F PN
93
a_/89N)PN^F<“
float
double
A+‡ H('w)^9T)= bO) M )hV& )>)`TT,3F<“
08
‡ sE.'h )9)T`>8 ,=)O)FZfbf1 ) )o1EF float 93 double _a3fb:T :]/`:)&FG,9 )F =
FG) 3,9 )+9FZ )"f//,T/
& + v z
;
de ^)`,N b,-F^,93 sE"s9D)>$
Operational.
†o+g‡_:f/, O)-:]H>F^F^F_fb fH?) )>)`_)o1EF int unsigned int float
/3
“
double
†o ‡_`>8 ,=)X)^9 s99^>>F^)) Px+ fb / ,+sE:!“
,=) ) 9b)+E)&1,.sE>X$OFG)X)^_ fb-$ 1,.sE> 9
'X)^FGm`>)
) .W9) 9b)9 E)71,.sE>hFG1FG)?“
†o ; ‡_`>8
†oTA+‡'7 '&) + fb9b) E)h1,+sm>hFGHFG)^?“
†o"0
‡ ^` ",9F^/"P bO)+m)h1,.sE>F7)9)hfH)Fh/P )^9T)= M )ZV&)>)^`DT,939>F<“
†o R
‡ 'Z)DF )9)7E>PNJ`89,=))9F '&) 9b) E)Z,+sE:F
b)^
2.5.10 Exercises
… F +~t+ 657GST[Duv1"7N},sgLM:<!././12M.|.<qLt{,;!V{2.<qLM-IJ/:/)1[7NH657x/M{
F&<:g.12 :!C <. S 'j1Us$) ,sgLM:<!././12M.T ƒ y+.<.C'I PQ+01[7N„L=1"Mj:<2LM:<<.Q<M2+012
J/:/)1[7N|I# …v…… -R65C+\1[./:!:<!.qL7)+.j
) )JC{
float
F (2, 24, −126, 127)
;gD|/:!:<<.qL=)+.?
 ƒ I+~.Q@+.<./h'Ij65C+
;!106.A:/?7.Q,)„
32
:<2LM:/!.Q<M
Fd+Z <F.T (2, 53, −1022, 1023)
i ]k<o
Exercise 50
‡
sC‡
`!‡
3h‡
int
6 / 4 * 2.0f - 3
2 + 15.0e7f - 3 / 2.0 * 1.0e8
392593 * 2735.0f - 8192 * 131072 + 1.0
16 * (0.2f + 262144 - 262144.0)
Ž ']LM7K657;<1[:!V , sgL7M.12M.G SK657vSQ" u1"7NA)J<1['+4=h'A;/<:g.T
;o
2o
!) o
i o
Exercise 51
!o
0.25
1.52
1.3
11.1
:X657c=C';<<:g.\1" … sJ<:<<1[.Q hk-'KLMCW:<!./ PQ+01[7N\L=1[Mf=h'A;</:g.
1[ 657z./V.<<'j. ) 
i To
Exercise 52
(2, 5, −1, 2)
(2, 5, −1, 2)
ƒ 5C+R:<K657BU:2NY<.<R)E./'A+" !./ EFG)fb :!'+~1 )E./1[7NDG)A)Jt;g LM:<<10./1q \T+01[7N]L=1[Ma=h'A;/<:g./-J/:/)1[7N E657K# …v…… .<2)Y:) i o
Exercise 53
ˆ uw'A=V \Q+01"7NWL=1[M =h'A;</:g.B)JG657W./V.<<'E. M21[
Exercise 54
(β, p, e , e )
Exercise 55
Ž ']LM7K657KF+~*j SX657BF:!1qY;gD
float d = 0.1;
X.<.C'I]657K# ……v… .<2)Y:/)

d
(β, p, e , e )
i
)
o
S<<:B657^)J/<D:/+01q.<2+<'A<M
i To
& ]av /A
ƒ 5C+10.]657Ei L=<M01q+ o]LM:<&;gD<' u1[65O657ST[Du1[7Nj <L
Exercise 56
†o!0‡
for ( float i = 0.1; i != 1.0; i += 0.1)
std :: cout < < i < < "\ n";
ƒ 5C+10.]657Ei L=<M01q+ o]LM:<&;gD<' u1[65O657ST[Du1[7Nj <L
Exercise 57
†o!0‡
for ( float i = 0.0 f ; i < 100000000.0 f ; ++ i)
std :: cout < < i < < "\n ";
ƒ :!10 LM://N:/' 6 5C+]C LM76.9ST:N1[Fd< )J<1['+Š1[&LMCR=h'A;</: x - 0 <
Fd+Z 3„Vhh:9LtD+ ST:!'A p 5737 LM7.<57CD) M21[ 657
i;!1":!V oj)1"N1[6.B Sc657X./1 N=1 ,)- .<2:g01"7NGuv1[65 -a)657Gi)J<1['+ oE,sgL=<M2?
5C+.
'AV@+././C'A^65C+\657 PQ+01[7NL=1[MP=C'A;/<:?./V.<1<' h)J<:g~V+1[7NO657j0VgL=
float
;/+.T

i ToJi ]n/o
Exercise 58
-f106.c:!'+~1 )
x<2
float
β=2
ƒ :!10 ^LM:<N:/' 65C+\!.<6.Guv57!657<:AN1"F&<yFd+~*A SG0VgL= double 10.EJ!{
0*+"~V 1[M NY<:!-9)!.<v6579LM:</N
:/' u1065?Fd:!1q7.\1"&LM76.cZ10‚d
- ]8=1"'KLtZV„=F&<:g01"7NIA Fd+~*j SK0V L7
)|<570.5
/!‚Q1"71N uv1234567890
57!657<:G65&10.
1234567890.2
!5C7NY<.W657WFd+~*B)J
!.Pu`:g‚z1"ONY<<:/+Z-v./1[X657\int
N1"F&<„Fd+~*c'j1 N5Ya;<3|1"M!{
NY<:3C6./1q)JP657cFd+Z P:/7NY3 S
E 'AV?+.<.C'IP65C+ 657 PQ+01[7NPL=1[Mf=h'A;</:
./V.<<' C)J/:g~V+1[7NE657z0VgL= int 5C+.3;+.Q

i ToJi Kn/o
Exercise 59
p 57?=h'A;/<:
0u`O SX657<'
Exercise 60
π
= 1−
4
π
= 1+
2
double
π
β=2
, ;/O)J ) 65&:<hN5xF:!127.^1[ = 10 .C'j.T ˆ <:/O:<
1 1 1
+ − + 3 5 7
1 1 2 1 2 3
+
+
+ 3 3 5 3 5 7
ƒ :!10IjLM:</N:/' SQ:A/'KLMC01[7N@ !LYLM:<Ts+1['+012 S
ƒ 5&12!5]SQ:!'^7Uj1[.G;/!6<:SQ:B65C+ LMC:L7.Q
π
-K;+.Q)xH657!.QcST:!'j7U+.T
i ]n/o
p 57/:< 10.I„u`![~{2‚Qu 1[<:/+01"F&3LM:<
/,)C:< i657 sHN/ :)13 ozST:
/']LM701"7N657O. *:<A:<
E S|OL=.1001[FdI:<,+R=h'A;</:  8M2:g01[7NES/:<' =VxFd+~*
-vu`^/'KLMCE.Q <
SXFd+Z <.GJs/:/)1"7N E657SQ:!'jCD
Exercise 61
x0 , x1 ‘, x2 , . . .
x0 > 0
s
1
).
xn = (xn−1 +
2
xn−1
# P,H;<B.<57u@65C+
xn =
s.
65C+4:<Y)+.`1[A657`=C';<<: )^/']LM7!.c ! LYLM:<Ts{
ƒ :!10X`LM:</N:/'
1['+012 S 7.babylonian.C
1[7NI657Eb\Y;!V =1 'A!657Q)Y p ;<I/s<:<<<-X657KLM:<N:/' <. 577U)
7 LMCa657 :gs.<a=h'A;</:
./ <5I65C+
i ]n/o
n→∞
xi
|x2i − s| < 0.001.
& + v z
0
ƒ :!10W`LM:</N:/' fpsys.C ]F
10.*+Z1\]:!'+~1 ) \T+01[7NL=1"M=h'A;</:
-Š)
./V.<<'  p 57 LM://N:/' .<577U)c:<,Y)]657 L7:'I!<:g. (2, p, e , e )
p e
+.G1[&LM76. )3SQ:AJ!5L=./1001"F&j=h'A;/<: S/:<' ):u @<1[:<< eO S
(2, p, e , e )
:/Y)1"7. :<h)z657]:!1"N
1[ 4.QR657P~1 ;!:/:!xV
65C+ 10.cFd1[DY;! W+Š657]/h:g.Q
x
libwindow
57'IqL7NYE <:<+^N:/!Lt5&12,+7 LM72 4.Q^657KLM:<N:/' IF&<:!1 SV 657j=h'A;</:g.jVh
/']LM7,)?1[ … s$/:<<10.T 
i oJi Kn/o
Exercise 62
2.5.11 Challenges
p 57 a/3s)nF^>) 10.X./*;!.Q!9 SP6573/'KLtD,s]LtUW65C+a;<'ARL=<LMCD:
65&:<$N5 1[6. P/`>) ./5C!L=?)O657;<C01 S7):/u1"7N. SG1[2bc! u Vhx.Qj657^.Q!Q% .
_/
`$^393 )AI)J!21[f SX10R+'j <5A5&1 N57<: +
' .Q+DQ
Exercise 63
p 57 ‰ )J!U;!:<P.Q!10.j)J )„+.9SQ[Duv.T :
S3'KLtD,s =h'A;/<:g.]N1"F&<;<V
c
z0 (c) = 0
z0 (c), z1(c), . . .
zn (c) = zn−1 (c)2 + c,
- u`/M./1 )J<:657.Q * </
)
n > 0.
SQ:K+" i65&1[.]&;!FQ127./~VG5C!LYL=/M.ST:z,sJ']Lt p 75 <:<K:/c0u`?+.Q<. W<1[657<:
|zn (c)| 2
1S
o-\:
SQ:G.Q'A i65&10.j&;<F
12nC.<~VA5C!LYL=<M.9ST:?,sJ']Lt G1 S
o&
(c)| > 2
.Q!X/M./1[.<6. Sj+[n ST:Gu5&1q!5 uR :<1[y657 :g./],+.QQ?# |c|SQ>[D2uv.
p 57c =‰ 0)J<D;!|z:/nc
65C+9657 ‰ )J!D;<:<9.Q!P/M21[M. c)E10.3/M21") 1[yI)10./‚ SW:/Y)1"7. :<h)
0
2
0
1[ 657j'KLtD,s3LtUQ
ƒ :!10\LM:</N:/' 65C+Š):/uv.\i!LYLM:<Ts+1"'A+012I STo\657 ‰ )J!U;!:<.Q<0-:<!.<0:!1q!)
zW:<!27NCD:P./*;!.Q!f S657c/']Lt ,sRLtUQ# ./577U)B;<fL7.<./1q;! 
' 1"=-'I,M{
1[7N65C+657W:<!27NCD:K./*;!.Q!9;</'I<.].'A+[D<:!-a)G'A:<z)J!21[€.B;///'AKFQ10./1 ;g \1[
657W):/u1[7NKu1[)JuBeW;!FQ127./~V+-Vh|, % MLM:<
!.<.W+[h1" =10!ZV3'A=Vj/'KLtD,sz=C'j{
;</:g. 1" 657X:<!27ND<-P)PSQ:WN1"F&< -fV$@=v:<+"~V|!57!‚Gu57<657<:
|zn (c)| 2
SQ: /c -9.Q?1[10.K/!./.T:!V|O)10.T<:<!0c1 G6573:</<27N 1[MzLM1Us$!~./-\)|
!./2Y;g~1[.<5
n
.Q'ABLYL7<:E;<h)
x657B=C'A;/<:? S]10<:/+01qM.T]#US
ST:j+[
-V$
N
|zn (c)| 2
n N
'AVA./1"'KLtZV„+.<.C'IB
65C+ 1[.B1[x657 ‰ )J!U;!:<`.Q<2G_R
/:^.T<-9657<:/310.BE
Nt:/M/
c
65C+W657E:<<./7~01[7N@):uv1"7N|
10.<F&< !D.Qj 657 ‰ )J!U;!:<W.Q!3i!.qL=<1q+"~Vx+ <:
D<F&!f SB)J<210 o-a;!CtST:B657].T+‚dG Sz&;!21[=1[7N=1q/`LM12!0h:<!./- u`G„NY<<:<C.<ZVjND.<.
F&<:z65&10.W10.<. Q
& ]av R
„'AVA7.QG657
~1 ;!:/:!VOGLM:<Q)*/657E):/u1[7Nd p 57 ,sJ']Lt libwindow
LM:</N
:/' 1"@106.3)J
<h'I<M2+01q.<57CD)N1[FdKV$ 1q)J,?57u 65&1[.G,;<^)JQ
Hint:
Z1q;!:/:!V Ž
Exercise 64
p 57SQ" u1[7NO<'A1[4u+.z.T<MO?'A1[~1"7N Z10.< ST:z7.T<:g.^ SK6573.Q S/0u`:/
‹ 
Hi all,
This should be a very easy question.
When I check if the points (0.14, 0.22), (0.15, 0.21) and (0.19,0.17) are
collinear, using CGAL::orientation, it returns CGAL::LEFT_TURN, which is
false, because those points are in fact collinear.
However, if I do the same with the points (14, 22), (15, 21) and (19, 17) I
get the correct answer: CGAL::COLLINEAR.
!o Š1") Cu5C+R65&10.?<'1010.jY;<C P1"|L7:g012<CD:!-`uv5C+`10. Ž ‹ -auv5C+`10.G657
:!1q<M2+012| S`9L=1"M0:!1€LtD<-uv5C+10.
-uv5C+Š)J
!. 2/[Z1[,:
CGAL::orientation
'A=-)Euv5&V?10.]657]uv:!1[<:E SX657^<'A1[./C:LM:!1[.Q)AY;<Ca657&;g.Q<:!F&,)O;<<5CF{
1q:
;o>W:/ S/^ M./u`<: 65&1[. <'10R65C+j,sgLtU1[M.O657 &;g.Q<:!Fd+01qM. SA657 Ž
C.Q<:z65C+vu:<z102
‹
& av G v @
2.6 Arrays and pointers
`Y)1[7N 1"M :!:/V u10657Cc'A+‚Q1"7N@ ./1[[ZV /:!:<: 10.A;/!{
V$)G657KY;!1[~1[0V? SX/'KLtD!cFQ12/<.c{9;!V657c01['A\V$?NY! 65C+
:!1"N5Y0-vV$:<Bj 7N&<:jO'KLtD!zF
1q/Q
b Q:!]8M0:<C.<0:!LM- Ž`K 8M0V ) p !5&=1 *
p 5&10.3.Q!012 1[M0:/Q) !. :!:Vd.E+.E/M21"<:g.`SQ:^.Q *</<. SE&; /<6. S
6 57.T'I0VgL=<- u1[65K:/)J' J/!.<.\1[)1"F
1q)t+'A<'A;/<:g.P S657a.Q *</T
R :!:V1[.P657P'I.<MLM:!1['^1001[Fd];!C+Š657\.T'IP01['AKBF&<:!V <1q<MaM{
21"<:9SQ:K.<:!1"7N-LM:/
/!././1[7N-`)E1[<:/+01"7NOF&<:zD:2N&^'IhM6. S3)Y+2Y
|u10" +€.TED:!Y;/7L71[M<:g.G+.,s!Lt~1q<10R&; !PY)Y):<!./.Q!.3)IY;<C
657<1":!D.Q|:<!U+012M.<5&1~L u1065 :!:/V.T ƒ 5&10D 657 Ž`K .<2)Y:/)y~1 ;!:/:!V
M21[M.\D!.<.LM:!1['^1001[Fd])zN&<<:/+"~V ;<!6/:z+€<:!+01"F&!./-f657 ``:9)^F ;<<{
5&1")I:!:/V.G)KL=1[M/:g.:<^ S S/C)Y'A<M2+1[']L=:g2/T
dea\1>`>) 1BA.
`)^^EFG))>)F '7D9fb $3 sE,=) )D``:9)hPr)>){
= :]/89 '7.`$/ (' )>) (fb>")^9+F^ ,` Pn1,.sE>F 1, 2, . . . , n /3 m>PN
F^ E:)F b7/33 ,=8/1)71,.sE>F 3)PHX) ,9.sE>^F /
)-4\1N b'7 `$/a)^>)T(fb>&)^9 133a,+sE:F H)TEO'7:FZP )v'7 =:)`
de /9 `$)9F /O'7:fb> '77P)89fb ) `F^Fv† /3+ G)`,N )>)7Ofb:,‡
F^ ,`F&P )Y+2 h:]=/89 Prb, 'h/) )+3)P8)T(fHX)$O)>F7_)('X )^ O)
F^(' b,=Z3FG3
Of1&)) bb,9fbT)^+ )>)^XOfb:h)^9DFG 1,` P (fHZ)$)^>
>m>^)^F ghF^+>E:^)>F"+,FG)TsE FI)3 FG>'X> /3 )> +,FG)TsE _'h )
FGE>`>)Z)^9>J),={4de 6ZY Y 9'7 `$/a3$r'&)
F^,` a)/F HF7s1 ,F^ :!:/Vd. 2.6.1 Array types
VX ^+P >9)^
b)>F
s uv`>)^F4P9) . 'I )o1E |)"DF^ ,9>9`>kg !/`>`F^F
n
n
Px)./b)^3 s uv`>)^FW† ) !D<'I/M6. ‡ m'7 ,F^ )^F 1[)J,s ./*;!.Q<:!1€Lt † mF^)h‡
|)^9
F^ ,`5VX7)^9>F^>9)^ F^ ,`F8PN / G )oE '&9FG
f//,_/
n
`^^FGE3F )a)8_)^9>_)`$ )o1E n -de )`89,=)><’BF _/ G / G
1`>`,= F&.`),,F7 G) H'X)^ ) )F7FG)>3aF^3 s1 eF^3B† F^ ,="R‡:
qr:) ,F FG)^)ks18FG9('X9 /
^8 `>)
f… :/+.<657<<.h%Y8=12/F& F "P /FG) >)^93PN
`89,=) / &,+sE:F F^_/>k)9/ fb
1,.sE> Hs /F^3
`:F^F^.,=) )
n
1,.sE>F4)9)kX)k d ) '7 HFk bZ)F b,'&)^Z3('X8)&FG 1,`DPE,9.sE>^F
sE>)o'7>
/3
4\)^)^!P
b,
/'hHF4!)")X:]H)k1,+sm>k)k`>F^F^>3 ,=)
2
n−1
2
b>) =:E^)Z)Z/Fh =/3)`>F^FZ,)&/E )F 9^E>Z ,) F
qr:!) ’BFn9)n3='78)&`>^`>)^9>F^F P )F4>)3 s9,=)k!^)4)")^9Z89))r
dePXb, ) sE,=) )8PN_ 1,=) 4)_/uv 1,FG)5F )F O' 3 '7`>^F^F,=)
1,.sE>F
& ]av K
gh PN('X/,F^F / ^ )vE f/s9
PN!)^9 FG) {'&>
crossed_out
/ f//,
F.P&)oE
/3|^>F^)F )^9†e`9/+‡ PN_)
crossed_out[i]
bool
'X>)^9: )^9+1,.sE>
9/F"/^$/3=-sE?`>F^F^>3 ,=)! )$ V&^$ 3`>F"'hHFDFG)O^)
P
{F^ ?3>T)
i >) )
39 ] n − 1 {'7+3 ^$ Pn) n .gh.9^/
0
,F&2x)^FG)<F ’ \1>fb"PN
n = 1, 000
Á
Ã
Á
Ã
Á©Â
Á
Á©Á
Á
Á
Á©Ã
Á
Á
Á
Â
// Program : eratosthenes.C
// Calculate prime numbers in {2 ,... ,999} using
// Eratosthenes ’ sieve .
# include < iostream >
int main ()
{
// definition and initialization : provides us with
// Booleans crossed_out [0] ,... , crossed_out [999]
bool crossed_out [1000];
for ( unsigned int i = 0; i < 1000; ++ i)
crossed_out[i ] = false ;
// computation and output
std :: cout < < " Prime numbers in {2 ,... ,999}:\ n";
for ( unsigned int i = 2; i < 1000; ++ i)
if (! crossed_out[i ]) {
// i is prime
std :: cout < < i < < " ";
// cross out all proper multiples of i
for ( unsigned int m = 2* i ; m < 1000; m += i)
crossed_out[ m ] = true ;
}
std :: cout < < "\ n";
return 0;
}
Program 14:
LM://N. 4<:+.<657<!.T Ž
VX G f^Ns9 †e+F^89 ^J‡ 'X)^
)^F P
Definition.
n > 0
0VgL= Fh3>W99>3)=,) PN ('X 3`NO){
C)J<:gZV+1[7N
% >^ &
+,9FI)!sE /M.<2M3,s!LM:<!.<./1q P )^/ o) 1E '&F^ f//, F
!= :] /89 {
)>/F b 1000 )>)^` :]H>F^F^F (fb> )>/F]† b 1+1 ‡ n `FG)/)
& av G v U
:]19^F^F^F<“)>D^X)> `FG)/)k:]HFGF^F 1s9,=) / PE)t fb&)^9Z9^E>^)o )^ O)
)Zf, F1O'& O)X`89D)7ghFX/('XF7) `89:h)^ W9,^ ,=)XO'[ ,`
^ )!G
f/s9T9>3F
gh.)o1E.P !
F ms9,=) '7.9,=) )^9FD?3,=s9 1,)F >†ea)
)X)^9>
[n]
N)^>, ‡:gh8$F^ F!)9
) F ) )8 `N/k '7`$/M
’ )!'&)^
PN
[n]
int[5] a
:]=/89 1) 3`N^!/^
Pr)vE
a
int[5]
ghhf/,9h/hP F n b)&FG>) PEF^ 1,`>F
'X )8/
sm
[n]
(t1 , t2 , . . . , tn)
ti
Pm)o1E ghX,3>1!)o1E y)4PN ]/897sED/8PN,39/)/=)vEc
†e b
int
‡
/3. )F `$F^ ) f//,F P=)
^$!>)F ^_/ ,)/ >3
bool
double
n
s1_)"39:W )^{
gh-P /`:)8)9)8)-O^5>9)^ ,FG) sE H('X)8`>8 )^ `>$ |)F )
,F^PN,F^F Pn^-f/Ns9>F =":]/89 )FT ))
31F ) /(' ,FT)'& ).
fb>FGPm2x)FI)<F ’F^>fbZ 'X`+)&1,.sE>
F $/3P^~)Z= ,=)$
k,)4'7Z'&
n
F^^) ?F^>9('~)F">FG)^`:) `$/ sm8Ofb:`,  PN )^9 ) sE >!) ’BF"F^89 fb
'X ))
2.6.2 Initializing arrays
g 9k39:W )^!P/.O^"'&) ,3>1&PN,39/)/)vE 31>F ) )/ )kf,F
7
P )"^
>)F>4?!`$/a/F^F^ f/,9>Fh)+)!)^FZP)>^'h^39FR†eb 7
' 3 )Z
Mx/pA+‡ s ,=) '7D`$/F^ 9^Of13X)Xf/,9>Fh3^`>) 1/F _)DPN('X 3 `>N)^
FG)O))$
int a [5] = {4 ,3 ,5 ,2 ,1};
\1` )^9 1,.sE> P7O^?>)F!`$ sE833,`3 P
Z10.< ='7 `$/-/F^+'Z)
) ) P )
1"=1001q+Z1+<:
int a [] = {4 ,3 ,5 ,2 ,1};
g79 3`>N)^
'&),=)X-)^N/ )
FXf39)^9,mF^9`> )D31FD)
int a[]
PN,_3>):D) )o1m"P F
)9)
9/F 1"/'KLtD!B0V L= )^9Fh`/F^
a
a
2.6.3 Random access to elements
g 9!FG)X`/3 ,9FGPN, 'haP4/``>F^F^_/3 13P1+) >)F&P / G
7
F7s1 :/)J' J/!.<. kdeP
.FZP )>/E)o1E"/3a9/F7f/,9 =)"f//,
i
F7P )^9D)o1m",3>1.)^9 G
/3 ^PN>Fh)+)^9 e) >)`†e`,).P
‡ P
a
i
0
nghT1,.sE> F `$/3) 1")J,s ./t;g.Q<:!1~Lt P{)T>)$xdeP
F7)^9D) P a
i
n
a
) 39 ]
,FG)hF)^F^P
ngh"E>)^
Fh`/3
) .*;g.Q/:!1€LtP<L7<:/+: i
0 i<n
[]
gh
F^>'& O) FG)^9_3`) PN^_) PX5^$ x'&) 9 :]1 `) )oE 9/
E$O HFh)f/)3_s1_) F^,=s9F^`>)ZE>O)$4de39>3)^9 3`NO)
& ]av $;#
=de
)F4F^F^ )4Fk889` ) 3>W9)+P
’ F4)o1m
a
g786hY Y}N/,9/ lm>^F"
PN,9`>)^9/)oaPN!/``>F^F^_) )
Watch out!
Pr/O^?†eF^> \1`>) 1<RH A!sEO' PN7X_)F ‡:xVXF )^9Z9^/> V$
,FG)!.sE> )) b,=F^P /3 V$ O8FGm9FGs98PN._ 1F^,=
)9)4Xfb ^ 93:] 33+F)FGW9F
'X> n F )7)+P9)^9
i
0 i<n
^b"de39`FD)9) )T )FX9+^ `$/>3 CX S^;<C) &F^FDb,=
`89>!lm>^F FGE` W `3>s9,aP /`>)F ),F/P7,=) eP esE,3 93`>F
5)aF^,=s9F^`>^)E>O)8F 39:)`>)>3 ) ,)/3y$39F+) ,39:W 3
sE9fHhP )^9T/-
`$/ sEh^$/3_/F
FnP9)vE
79fb&/ $/3= 3F^`>,9FGF^3 )^9 ): /3z/``>F^Fn ``>)^+'&).)7`89,)^>!’BF
_/ G@†o\1`:) 1<;‡,“k/3 /``>F^F /F.)^ O) <F&<:!V G ).`$/ sE
/``>F^F^3 ?) F^/.,9PN^p'h /3 '&) †e/FG),‡7) F ``F^F ) E _)^)>
'X9) )F893:]|F 2 f//,9)^ )a:]1F^F^
F/F8P FG)
/F8>f//,9)^
a[0]
a[10000]
de `)^/FG) m) )` -9!P m399_fb`F s / -)^/F^PN>^F"93 f/,FD)>D E:F
b,= 39>F 3F ) F^,=E^)_/3 /``FGF ) )a) W993 / )> F
^,9
E^)^9/ ) )F73>)'X )
)^9T9
de.P /`>) 93[/``FGFx./+^!39 `>) ">39,`>F )&/3 ``F^Fx.)^9k`89,)^>! ’BF
_/^ 7F^9`> / ^ /'hHF
1`>`,= F `),,F FG>)P!^5`>F &F^
,="RH
a
{
a[0]
a[1]
a[2]
a[n-1]
s Figure 6:
Ry:!:V„Q/<+LM12!.3|/M01 N C.`LC:gP S]657B'1[ 'A<'I:!VJ … F&/:!V„< <'A<M
1[x0C:!w
<LM1q!. 'I/'I:!V„/!"€./-au57/:< 10.z657B'I<'A:!VI:< C 1":<)I .<:<
?./1"7N KFd+Z SXs657BC)J/:g~V+1[7NE0V L=  s
g +/``>F^F ) >) Pr39 ]
_)^9TO^ = F^89Z`89,=))+'X)^ 393=>F^F^F
i
a
)>>PNXF^, 8`>F deP
Fn)^9X/33^F^F9† mF^)h‡ 'X>^Z)&WFG)k>)nP
GFG)^)^F 193
p
a
FX) ,9.sE>XP4>^
`FZ)9)T8F^ f, P )^9 ,3>1 )o1Ew``,=9F s
) ) >) P993:] FG)^)^F ) ) G"`>1'&9FG7/33^F^FxF
F^ ,=h@1
i
p+si
2.6.4 Arrays are not self-describing
V&^$_)o1mF&O!:]H`>)9/E 6ZY Y g79 PN('X9 `>13!P)h,9FI)^)>Fk)F
int a [5] = {4 ,3 ,5 ,2 ,1}; // array of type int [5]
int b [5];
b = a;
// error : we cannot assign to an array
a
& av G v p+s
p
$;=
p + 2s
p + (n − 1)s
a[0]
a[1]
a[2]
a[n-1]
0
Figure 7:
1
n−1
2
p 57:!:/V|!D<'I/Mc S]1")J,s
i
.<2:g6.3+9657^Y)Y):<<.<.
p + si

+
/F^`$/)T)N "/ ^ Pp/)> O^b FX)F5V&^$1FT+83$/3
9/3aPJ) N/,9/"6 /3)"39>F^aPxO^HFZ 6 FR†ePJ)1397’ F
E)DPxfH:`
' ‡,9 )!)^fbZgh _/a'7 HF^FDFX)9) 657G=C';<<: Sj!D<'A<M6. S
:!:/V@1[.EX:/2LM:<!.Q/M)1" 657O:!:/V4% .EF+~* 6 'h/F 3F^3 ) `8E:) 'X )
_/`DN/,9/T 8`>9`: 93 )F73939M
’ )7$fb ^1JPN&,H]H,Gb4V&a^$_f/NOs F4> >F^>)3s )^Fk/33=FGF 13>W93/F4)&393=>F^FkP )^9Z^ `>='X>h)
WFG)4>
) † )^9 hP 93:] ‡ FG)^)^F Z/F^TF )9)n/ ^$+Fx) .Q! S<{ )J!.Q<:!1 ;!1[7N 0
)h31Fh) 1O' )F7('Xa){
Z('Q'7 >).) ) /F^F^) F^FG,9 _)^9: F+ 'h PZ/,=)_)^`$/ `>1H9 /
) 'X ),
) H('X(' _/)^FZ)F^.O k,=)X'7
>)FZPx).^
a
b
P `,=F^ 3 )Fh_/, +fHN..F^89D 1F^`T'7 19(' )!O^
)F7P
).3`N)<F “{$^?6 9^/>Fh'7>+) b:)!FGm3 , )
`89N/ OsE,=)
F^,`-7`fb>9`Fv
†oCD)")^9:&9/
3 H)Fh$fbFZ/89X1cPNZs ,F ‡
9>6hY Y*'h/F43>fbm3 ,`8NO)> &3F^ b/9'hF4)! fbX6yF "FG,s9F^:)$ VXF
.`F^ 1,` GHFZ!FI){^,93 -6hY"Y 2.6.5 Iteration over a container
q{>)!’BF ) bT!FG):s /` HPN^>)hsE,=) )X)>` `$)>FnPr^$1F7PNh!) 1/3_.PN
s >7 `>),=
-9fb /$3|3`$)>3 )a)G13,`>)5)^ )F8F^`:)y)9) )a`F^F_P
):)_(fb> _F^ ,`8Pk39)_F",=s9 1,)^,9F> gn19`/ m)+39)_+FG)>3 ?FG
/M21"<: 9/3
'7D>3 ) E:PNJ `>^)/_E>O)PNZ/ )F )D`)/>$
dea>/ `)/>ZFh/as9uI>`>)7)9)h`$/aFG)^")^9:&s9uv`>)R
F †e)F7)^F ‡ =/3)^ O)
lm:F&F^T'hHFZP /``FGF^ )F^">)Fkgh"9 G9^3 + ,9 )&>"FZ)^ O)
8`)/>D+,FG)Xl >T)!EF^FGs9)o
Pn )>)^ (fb>"/ )FX>)F>Dde )^9FXPN_/
F^F^ /a^ FZ93>3-+`>)/9: =F^` ) 93J/``>F^FXPN,`>)9/)o`$/sm!,F^3
) )>O)TOfb>Z)">)F
& ]av $;
qr><) ’BFX>)&s ` )_^$1FXd )^>)9 Ofb: / ^ P4)
Iteration by random access.
`$/
sE 39Ds1_93J/``>F^FhbT
F
$;+P Mx/A=x 9$fb F^>)9)7)n
/3 /``FGFDPN,9`>)^9/)o_P ^$1FXFZ):9/s /F^>3 393=>F^FD )>)`kSD,^
) ):)
=) PN('X9 F^ ,9>9`>+P4/33=FGF^FTFX`89,=)
3 p, p + s, p + 2s, . . . , p +
H'X>
93
9fb") ,9FG, r/F
(n − 1)s
p
s
ghF ^ 1,>F 9+,)9`$) /3 _/33) PN+/ /33=F^F ]=`>).)8WFG)$
k,=) P b, ) sE,=)!) )8+,)9`) `>F sE`/,F^8'7`89,=)8$/`
/33=F^F+P F^`>)`
k3>E3) P )_>fH,9F.F de P /`>) )
F/F^>) P
/33=F^FGF `,3h 8`>)^893^&9),=/ sEX`89,=)3 s18FI)^)9 'X)^
/3
p
>m$)3
393
† G )+)":]1)&) +‡:
s
&F^!/39}/``>F^F H'7X`$ .1['jCD+ ^$ )>)
s9,)k'7DXF^F^T)XE> )
P G9") )X:]H) ) Y“9 )FkE>)^8_ bFn)>)8(fb>h!`>)/9:
9),=/9/38 8`>)$4g79hPN('X9 /9/.,FG)^)F )hE) b, Pm`,=F^h$/3
+sm1 _s1 FG)G)+'&)
=)-`F^ )TsE1 E )&/b/ /F
1
2−3
`FG-) E-). /F
>)` k,=).,9>F^F bt, ’ F^>'&9) ``>)^^` b,
4−5
s s9PN>Z)"uv,FG)h),=)T /Fh sE:)v'7>{
V&GHF{lm> 9),=//3! `) )>)^D)=, L=1"M<:g. xM ):
Iteration by pointers.
f//,F&`/asE!),)ZP /F&/`>),9/ /33=F^F^>F m/3a)>/O' E:)Fhb^/33 s
3>h) .).)T9 ]H)h>)7
)"O^b4%&> F7O' '7 `,3
1,f//>) '&)^
) )>O)
9>F" $;+P Mx/ A.'X)
E)>F
bool * begin = crossed_out;
// pointer to first element
bool * end = crossed_out + 1000; // past - the - end pointer
// in the loop , pointer p successively points to all elements
for ( bool * p = begin ; p != end ; ++ p)
* p = false ; // * p is the element pointed to by p
VX3)^)>39 ()^9F HF ^n`89`$)3!) WFI)xF^) )9/ )k/39 / ``>F^F fb>FG
s9,=) '7
’B :]H9N8'X9)!’ F _3>)/ )D:]H)7F^>`>)F4de_)>F P ,^ @ 1'7
9fb">9N`3 )>)^
s93:]_'&) )>O)_s1 /33=F^F
2.6.6 Pointer types and functionality
=X_)o1E ) `^>FGE3
L=1"M<:30VgL=
F
` / ) ,93> H )o1m P $XV& ]HF^FG P )oE FD`$/3 L=1"M<: † )
‡:
gh+f/,9+P E)>T) FT) /33=FGF!P /?s uv`>)"Pn)oE kE `/ )FT)
s9uI>`>) L71[M)? s1
) m):$
+`$/?f1F^,9/ .8E)^>
F" ^^O' E)8) _`x ) `>8 ,=):!’BFD_/
^
)X`{'&>")^9 s9uI>`>)7E)^3 )+s1
FI)^)F =F^ ,=!KH
& av G v Figure 8:
$;;
rL=1"M<:? :<2LM:<!.T<M6.E657 Y)Y):<!.<.? S? &; /<B SG0V L7 1"H657/'E{
LM7<:7% .]'1[ 'A<'I:!VJ
ed )N/ ) E)
/F^FG)!E>)^ n93 )_`8 FG E>)^F
93
=
==
!=
_3>W93|PN / E)> )o1m $ g7_N)^):.F^89 )FG).'X>)^9: ) 393=>F^F^F+
1,FI)-^ ) F/TZ9)
de)N/ ) 93 /FGF^)Z`a)!f//,z† /F&,9FG, D‡ 'X`-a)FX`/F^ $/F7)
` / /33^F^F<“ ),F P
E)FT)F^.s9uv`>) r) /FGF^)
9/F ) :lm`>)
j
i = j
)9)
9('~/FG
E)FX)_)FTs9uI>`>)$ g7+s9uv`>) )FGP4FT9) `9>3r" ._ )9)
i
E)>")N )^ /3 /F^FG)T , )^9 )vEF"P sE) E:/3F")
sE :]=/`>) )!F^/,  89`>)k`>fb>FGF&3M
’ )h'7 m deP b,a)^9 sm,)h) )^9FZFZ`$O$ de_/
)9)7)Tf^Ns9
FhP )o1m
93 )9)7b,-`,3 'Z)
i
int*
double * j = i
\1`
s9uI>`>)Fh,9FG, ,!^ >^`Fh)^ s uv`:)F '7,3a('
double
int
j
sE&TE)>4) s9uv`>)4)9)k9`>,39>FnG `Fk )4sET) double
i
g79FX`$/ 93
sE `$3 G`>fb>FG =Xde P /`>) F^` '7 `1-/ /33^F^F )^9:
`$/)7sE /9HF^`/{`fb>^F^Pr)TFG)3 f/,9 =>fbaP{)T^ 1,^)^F
P )^9 )o'7+)o1mF&9E
) sm )"F/
h`$/ s) DE)>x)"/ fb s9uv`>) s1 9H9D)7,9^
The address operator.
Y)Y):<!./.<L=/:/+: )8
f//,D)9)7PN>FZ) ) s uv`:)$4deP )" f/,9TF7P )oE =)
T
)TF^,)ZFZ/ ^f//, P )o1E
kg7"FG1)(]P /a/33=FGF&E>)h`$/{F
T*
dea)!PNO'& `>13!P)Z'7!,F^!)!/33^F^FXE:)h)8)^N/ T+f/Ns9
iptr
P )oE
'X ) )"/33=F^FhPx/as9uv`>)hP )o1m
9/3 int*
int
i
int i = 5;
int * iptr = & i ; // iptr initialized with the address of i
=^ E)^> X'7?`/*>)s /`)|) s uv`>) E)3 )^
The dereference operator.
)=, )J<:<[SQ<:</<1[7N 1")1[:<!012 ng79Z, O^ )J<:/0SQ<:/</G<L=<:+:
9>3 ) /
*
^f//,TPrm): )vEDH>3F7/ f/,9X^PN>^9.).)Ds uv`:)hm)>3
)=4deP{)D^f,DF
P )oE H)) F^,)hFhP )o1m k g7"FIH)O] Px+3>^PN>`!E>)^Z`/{F
& ]av $;A
=('X
,=-a,=h>fH,9Fh`39 P/>) H
'7 `$/)^9:PN '&)^
int i = 5;
int * iptr = & i ; // iptr initialized with the address of i
int j = * iptr ; // j == 5
g .9/ FG` PxE)>&)vEFDFD)^fO)3as1) 39:PN>>9`> E:)$Tg7
h
3`NO)
`$/a/F^.sE"^$/3O† 93 P `>)X>b/8sm 'Z)^)>t“'7"3M’ )Z3+)F )^9,h‡ /F
g79"F^`3-fb>FGa89`>) 3>W99>F&) )oE!P
sF^$1 )9) F&P )o1m k g7F
p
F7)"F^/ H3P 89`)n3>W9)_)9)h'7!/ $/3= H('wP O^
39>`NO)F
,="U ,FG)^)^F7/33=F^F&/33>PN:` E>)$
m):P† fb-/F7^f//,g‡
s9uv`>)P†efb-FZf//,g‡
Figure 9:
p 57\Y)Y):<!./.P<L=<:+:Ki2 0S/ oB)X1[6.1[=Fd<:g.Q<-4657\)J/:<0SQ/:<</]<L=<:+:Xi2:!1"N5Y o
=./ E)>!)oE8)>8F f//,83FG)9,FG Os +P^ /?)>
The null pointer.
E)>Tf//,.g79F f//,.F `$/>3 ) =7"*L=1[M/:EFd+Z +g79+)>Tf//,
`$?sE
0
`fb>^)3 )
/-E)>&)vE!gh f,./P)> `fb>F^ FX).1, m):Df/,9/!de
) 3`)
PND:]=/89 =)!f/NOs iptr >)FX)^N/ 3
'&))^9
int* iptr = 0
1, E)^> f//,x T/F^ F)9)
F =7[JL=1[M/: kg7 , E)>kf/,9D+,FG)
iptr
)Zsm"3>>PN>`
3 F^` )h39Fh9)Z`^^FGE3) /
:]HFG)9 /33=F^F>
&F^!)^9&1, m):kf//,&Fn)XF/PNX'h8PE93`)T)9)k)>^XF s9uI>`>9
) † b:,) ‡
)8E)&)^=&g7./)>^ O)fb P4$fH )^9"E)^>D,)N/ 3
FZs /
3 )>!FX8'h
Px)FG)^ 'X>)>D E)>&)^ O)DFX)T , E)>&3FZ)./33=F^F&Pn )_)
& av G v $;b0
s9uI>`>) &
' >)> ) 3F!F^ I/3 a/33=FGF!F^,)^aPi$f1 ) m):
,)N/ {
3 de?) ^) )> `$F^ r39:PN>>9`>)+m):!,F^,9/ -`>/FG9>F") /-+67F^39:
)F7`39 int * iptr ;
// uninitialized pointer
int j = * iptr ; // trouble !
VXP): )F 3`) )^9hE)>
Fk,39:W 3 f/,9 '&9` /`:)`h$/Fx)9)
iptr
)D_ `^>FGE3 )^_/ ^s9)^O^a393=>F^FD ^C“ 3>>PN>`
)X/F&)_/``>F^F
)T^ `)>)&)7)Fh/33^F^Fnde>/ H)F7/33=FGFh'&m)7sE ).) G)
Pr^+) 'X`
)^9X/Q9/F7/``>F^F<“=)TE>)^ FGHFG)^Q'X) 39>
/``>F^F
) )Z/3)> O)&)T9^/c'X) .QqN'A<M2+012?S 7~ 2.6.7 Array-to-pointer conversion
VX ^ Pn)o1m `$/?8 `) sm+`>fb>^)^3 )_)vE $.g7+^F^,)f//,.F
[n]
)"/33^F^F&Pr) W FI)&)hPr) ^$b=Z:]/89 1'7"`/a'& )
int a [5];
int * begin = a ; // begin points to a [0]
gh"39>`NO)
int * begin = & a [0]; // address of the first element
F ,f) /F P /F )8FG,9 )af,P
F ``>3 s9,) )^9:F.aF^,=s)
begin
3lm:` )")^)>h3`) >f//,9)^F
='XD) PN>h31Fh)$
a[0]
gh&m): FG)o1h^>9N/`>)n`13XPNn)X188F& P{Mx/ A!)9)n'7
9fb F^)3 )") 3 Ph\1`>) 1<RHL0__ bF",9FG P7^$ e) E)>"`fb>^F^ )TW9^FG)& bool * begin = crossed_out;
// pointer to first element
g ^ ) em):"`>fb>FG FT ,=> ``>),9/0“ ?) _/` F^3 )
h
9EF =")F r'7.`$ P ,="$> 3F^`,F^F^ \1>`>) 1BRHBA_)9)" 6 /3
)>>PN /F^ 6ZY Y -^ GF F^89 )!/33=FGF&P )FhWFI)&)
V&^ e) E)^>!`>fb>FG /,=)_)^`$/ ) bF"9N/`>+'&9> / ^$ EF! /
:]19^F^F^{ uI^9\)^,FG)G,= )_3F^>+P+6hY"Y k,FG)^)^F!)F s1 F^$1 )^ O)
6 57„'I S :!:/V /=F&<:g6. „L=1[M/:@1[6. :g.<< <'A<MA+^657 .<Z1"N5Y!.<
LM:<F&Q+012 kdeFG)^ )^9:h'7^39F 1)>"D+E>)^F aGHF >fb>G1).)9) '7
``>),9/ 3!'&)_/
G8F 8$/ )v 3&'X)^"E)>!
“ )Fk_ G)`,Nn9>F
)_) /3 ``F^F"E>O)mF^.). O/9 `$/3
)^,=)asE,=)7/3 ``F^F 8 )^9 :]H)&F^`>)^{
/
*
2(
%7.#*E M7
5
R*
2-.6#6 %B>TU7T 1#* R*
$&
% @*
(7B
-*5
9*
(
(( 8 97
7:"
6
^M
5 B.*6
):"FG,s9F^`:) E
T)
%2*
/322*
'(9(%B R(*
.6#*"
R
*J
N
-.6>*
/@7J
& ]av $;R
2.6.8 Pointer arithmetic
dea3>h) ,93>FI)/3'X_)"`3"P)
bool * begin = crossed_out;
// pointer to first element
bool * end = crossed_out + 1000; // past - the - end pointer
// in the loop , pointer p successively points to all elements
for ( bool * p = begin ; p != end ; ++ p)
* p = false ; // * p is the element pointed to by p
33+F^>)F 1)^F P9)^97O^
) '7 9fb )T,93>FI)/3 L=1[M<:
crossed_out
:!1065&'A!012 )a^) PD`89,=)-'X)^5/33=F^FGF 39>sE>) `/ )F8 ^^) F^`.E)>" )>)` `>FD'X)?
)TPk9)P /F ms9,)T'&),=) FPN>)o?>)$ CD?)
)> 9/3 ) /,=)F.PN7)9).)>F F^ `:^)/ sE$/,=)o ) _F^pP
E)>.O)>)`d <) ’BF b83=fH9a/ 3)^> !) ’BF ,93x)<’BF!3 `,) )-FI)> 4F^$O)F
",9`>PN^)s9 H/3)>
’ F& $O)= k,=)h)!` '&) ) ngh!3)^> HFhF^
+,9`asE:)^)>X)^ 13>a`$ h>fb>^)F^F EP)>T3=f1 ) 3=)>hPN +'X )
'XHs s9.),=,=)k)9)4sE$/,=)o Fk) >9,
/38)9)kF^/PN>)o/3,Fs9)o+&^
8EG)/) P /`>)Fh)^9 .,r
gh s O^T/33)Dm>)^F O 39:W 3!PN P)rE>/3F
Adding integers to pointers.
+ Ph/?E)^>!)o1m -93 ) m>/3F Ph/?)>/n)oE h`$/n)9) Ph/ F.9^Of1335/F+) P)+E>/3k )+'& 8 `) sm `fb>^)>35) -E)>+,F^
^$ e) E)>h`fb:F^{
= )^9 sE> f1TP + )sE.3>W99>3 m)^9: +,FG)XsE+/?^ P4F^ ) n EF^,`
)9)h)!>P)XE>/3
.FX.E)^>Z)^ )!)ZP F^"3:] k, 0 k n )
^$b4g7D`$/F^
F /O'73_93
`^^FGE3F ) )DF^)^, O)8'X>^ !F !E)^>
k=n
/FG)")8N/FG)">)!Pk)^$ † '7 `/ )F L7+.<6{2657<{<)L=1[M/: “ ) )^ O)
F^,` .m):Z+,FG)h)hsm!3>PN:`h
3 ‡:
deP ) F^`3-E>/3
.9/FhF^Tf, FG,9`)^ O)
=)
i
0 k+i n
XY F.E)>!)a)
e)^ )!Ph)^9F^/^$b dePN_ '7:)+E)^>
(k + i)
)9)T9/FDsE> (fb3 >)FZ)
)^9 )?† '&`?/`:),9/ $/FX)).P)TP F
i
i
b) fbg ‡: g79:PN P
F )^9Df//,DP
†
/ /33=F^F ‡ H)_)Xf/,9TP
p
ptr
ptr + expr
F4)D/33=F^F
/F^F^,T)9) / f//,XPm)X,3>1")o1mX1``>,9>F ^
p + si
s
`F4ghX9$F^ P /`>)hF )9) '7D3M
’ )79fbD).`$ sm,) “H) m>)
s
ptr + expr
† '&9` HO'&F s P})^9h)o1EXP ptr ‡43Fk)FnPN ,F /3lm:F7 )o1m 3>E>93)k'h
P (fH9+ E)> >)F )+) ^)$
i
VXF&sE>PN P
'7!>)T+ /FI) e) e3-E)^>$ jn/,FhP i FG,9` )9) k + i F
k+i = n
)Zsm>)o'7
/3
/3 ) ,93>W93sm9$f1$
0
n
qr:)&,FZ^>E$)h)TE)7)9)7'7" fb"_/3XsEPN"a``>) 'X ) 93J/``>F^F
a\1`>) 1<RH<; xs3P /,) H)> O!Os FG,=)_ `` HFZ)9)7) sE(fbT 1,^)^F
& av G v $;b@
33 3 /3 ) F ) b,=8FGm9FGs9)o )?_ bF^,= )9) )F+F+)a`$/F^/
/,= ) 39 F^ 'XZ>F^,)_ / `>/F^F ZFG)^/asE> f1_PD) / † s s9y) '7^FG)aF^`>9+‡_F^y_Tsm9$f1 Xs9,=)'&) )^9 E))N/TP
),=+)+FG)^/ sE> f1Z)X_) 1&-
)>Z_/`99/
gh>^PN 9>)Z,FZF^,_^ &)T ,9 )F79`>! /3
+,FG)EE){)h)^9 )rP3:]
.
,FG)h9fb!F^Df//,
k9^
F^,=s)^/`:)
FZFGN
− k
F^,` a)^ O)
i
.
deP
F^4^ P)
0
k+i
Fhf//,
i
n
n
O'X>
0
k
n
F^,`a)9)
0
k−i
n
9)
H3Fh.E)>7)+)!O^
)hP 3:]
k−i
/3
P1)4)o'7ZE>)^F `$!sEk,F^>3 'X)"P) E>93F
ghk/F^F^){fb>F^F
+=
-=
Pm):r)oEkF{'7> ('X)T) ,F^,9/b$/= \1N^ :)4, O^T`>>) /3!3`>^ )xE>O)F
/3
7f//NOs nPN E)>F>x\1` `>3`Fn/3 F^F^1`>N)f1)>F
++
-T)>3).)"E:)ZFGH.sEF 1)> "/F&ag s9+ /"AbKH
Z('w'7 `$/,93>FI)/3) F^`3-DP )^9"sE(fb `13!P/) bool * end = crossed_out + 1000; // pointer after last element
FI) ) ^ crossed_out F"`fb>^)>3 )^a
m): )^a)FTWFG)")B† ) P 3:] ‡: \1` )^9!^ 9/F
)^F /33+)")>>
13FZ. /GF ) 0
1, 000
1, 000
) e3E)>
PNZ)"^bngh F^,=s9F^ 1,)X
end
for ( bool * p = begin ; p != end ; ++ p)
* p = false ; // * p is the element pointed to by p
F8`>$ 9(' F '7 FG)^)^?'X)^y E
)>
)^ )WFG))^†
‡ )
p
p = begin
>)ZE)^3a)FXFG>)D) †
:Xgh-'7 `>>)
‡
FG8) 9)D)ZE)^F
*p = false
p
) )D:]H)7>
) †
:x D>m$) )F7F ‡
./F
F 39 lm>>)7P )X /FG) e) e3
++p
p
E)>h9/3
end
9$fb /^$/3= 3F^`,F^F^>3?)+^N) E>O)F
/3
)9)
Pointer comparison.
==
!=
F^89)^FG)X'&9:)>&) )v'78m):FZ 1,FG)aE)h) )^9!F/ s uv`>) k,=)Z'7 `$/
/FG `8 ^T)o'7+E)^>F7,F^ ) E>O)F 9/3 >= nVXbH9^`3`F&/3
< <= >
/F^FG1`NO)fH )F P /m)9/mm>)^F&^!/Fhg s9 + /"RUH
= )&FG,9 ) )!sE&FGE` W >3 )>X+,FG)ksmD/
^ PEF^&>9)^ n F^,`
)9)n)
P)&E>93
g_F& E)>h) ) >)&PxF^ 3:] k , 0 k n ) ^$ 1
/3)DF^`3 E>/3 F !E)> ) )^9D>) P{F^
X3:1]
k2 , 0 k 2 n
)kF^/kO^b VXb/ /3
('73 /3 `GFGE3 )Z)n /FG) ) >93
k1 = n
k2 = n
`$/FG
& ]av $;K
 fb> )F )^9+F^,)"P ) m):!`8 ^F^?F!3>)>^3 s ) )>> ` FGaP
/3
7de-)>&'7^39FP† /3 1,)^!),)fb J‡ 1)^9 E)>h) )!>)
k1
k2
)9)h`F7WFG)Z )^9"^$
F7) F^_/:79/
de|,=.`39_P) )^9`>8 OF^
`>,93 ,f)^?sE: /`3 s1
p != end
)D:]19^F^F^
'X`H39
F "/F ./F
E)Fk)+/
/`>)^, E^>) p < end
p
,9 f/) /FZ9 /F
F7)X /FG) ) >93 E)^>$
p
678 ^Z)o'7XE)>F )^ O)x3D9) >) ) OsEOfb ^ 1,>)F $/3F )^ ,FGE>`W93
9/3 >= FG,9 )FZ ) PN,&E>O)F < <= >
g79:8F 8^ ^)>)`.E:)? E)^>F_VXF^FG,9+)9)
)+) P F^.3:]
F^+G?Pn)
k1 , 0 k 1
n
E/3-) F^`3 E>93 FT E)>&)8) >)XP F^"3:] k , 0 k
n
|)aF^/O^H
† /FI) e) e35E)>F /('7h
3 ‡: g75)FG,9 )8PX)2 L71[M2<:
n
Pointer
aF"subtraction.
_m): )^
./t;g0:/J!01q
− F&)^9!)>>
Xg71,F E)>&F^,=s)^/`>)^)F&,F GO' P TO O^) ) )o'7G
k −k
>)FZ/ g719 sE29fHZP E)>ZF^,=s)^/`:)F&,39:W 3P /3
")
E)>F ) >)F7O† h /FI) e) e3aE)>F7P2‡ ) F/ ^$b
M )>DF^,=s)^`>)|
† '&`-89O1FZ)!s99GF^,=s)^`>)-E:) 9F^.g s98 /TAbK+PNZ)F FIE`W9`F ‡ 3FZ)7``,=&
)T`39 P/>)7PQ)DsE P )^9F
F^`:){&V[)o `$/r,9FG F&)3>): )^9!1,+sm>XP >)FZ / ^$ )9)DFZfb
s1 E)>7) )FhWFI)&)h93a. /FG) e) e3E)>$
de_$/)o )DF^,=s9F^`>^) E>O)
Pointer subscripting, or the truth about random access.
[]
/F )^3,9`>3
\1`>)^ 1<RHB;!31F )kE>)^X_^1F 1s9,=) E)>F defb H!)^9F
E>)7 /aG`FG)^,`>)^F&/
:]19^F^F^/3
)^9:PNT)^:F7/ ^ ) em):
`fb>F^{
 fb>-.m): +93/a:]1F^F^
.P )/E)vE =) :]HFGF^
Fh 1
,f//>)R† /FG )F ,9 )F7
+† &Y
,‡
./3 ‡
)
ed P
9/F f//, H)TN)^): :]H>F^F^
H39Fn)"O^>) 9N/`F )^+)X)7P
i
i
)49 E)3T)7s1 $ de O^)`,NO (P kF^,)FrPw/ O^ ) eE)>{`>fb>FG
)Fn/>F4'&) )^9hF^_)`>F4P /3t``F^FnPN GHFn/Fk)^39,`>3 _\1>`>) 1BRH<;H
g s9TA FG,9_O F )^9 >' E)> eFGE` W `Ds99^_m>)^F
& av G v Description
FG,s9F^`:)
3>^PN>`
393=>F^F
Table 4:
$;U
Operator
[]
*
&
Arity
Prec. Assoc.
(@
P)
$R
)
$R
)
_v:</,)J</!.W)3+.<.QQ<1q+01"F
1001q!.R S4L=1"M<:X<L=<:/+:g.T p 57.*;g.Q/:!1€LtŠ<L=/:/+:
,sgL7/!6.9:!Fd+Z <.R+.`<L=<:/)+.P)c:<!0C:!M.R ~Fd+Z T p 57R)J<:<0ST<:<<X<L=<:/+:
,sgL7/!6.3 :!F+~*G)^:<!0h:!M.G ZFd+~*<-fuv5&10D]657Y)Y):/!.<.z<L=<:+:j,sgL7/!6.
@ZFd+Z G)E:<<0C:!M. :!Fd+~*Q
\1 P ).F^F )9) )^9_ ,F^
P7E)^>F.F )
What have we gained with pointers?
_ ba )>)^5)=,/ O^y? )^) a `))9/y)>O)5s1539 ]E k,=)
,F^F4'7XZ )h$/~PE:]1)^ ) e`>)`$/H9F )&FfH9FkZ_9/e =
)&F^ bXPm$3 Os )o '7&)>>PNXP)FI)9,F^X):)+s1 3:]E4\1 '& O)kF4)&$
uv,FG)W9`$)^ PNh)TE)^>h``>) gh>^ /`>),9/ -)v'7+uv,9FI)W9`$)9F 93 Pk) '& sE 3F^`,F^F^>3 )!'h
)D:]H) F^`>) xE)>^F D3FGmFs9hPN7>)^) I/`:)`$/ ^$1F 'X)^)
) 1O'&a)Z`89X)
gh F^`3-uv,9FI)W9`$) F")"b>) ,3?) `^9: F^a'7+'Xx9 s )^,9`
)Z>7V&^$1FD s1P X)&)^9"`>)/9:FZPNXF^>)FXPx39)1k-'7!89>)
39).9^1`FGF^/^)F 1'7 FG9,3a)^9:PN _ b!F^,=!)^ O)&)> '7 PN
^$1F
=T:]/89 W93 `)/>&>)&'&) fb-9^E>^)oO
† Of1 )^9)>X)^ O)
9NHF b,= P $fb^)(fHg ‡ F^,93 sEEFGF^s9PN =V `)/>^F.)^ O).lm>F )_PN,` )9/)o P )^>)9 Ofb>T )FD>)F&gh.a,PN )v_'7 3 FX )^9 )>)^
1`>F^F& )F^P VX53 O) e`F^FG / ) PD) 6hY"YFG)/393ysO^
† '7'XZF^>-F^aP
) N)> ‡.'7 1F 5)F+'h -) :]Hm`>)F8) ,93> H?`>)/9: ) l > 1[<:/+:g.
`PN
) F^ '7 3>W93 ):) `>9`>>)$-g79FIE`W9`F P )^9`>)/9: )F^>P
^^>f//)ZPNh)!/)-
%&>.FX'&> E)>F&` h)^9: ).):)F&lm>>3 s ^HF>"g7>PN^ >fb Pr'7!3M
’ )h,F^!E)>^FZ ,=X('Xa`3 9'7 9fb") 1O' sE,=)h)Ja3>h)
sE"s9D)8O99_FI)/393a s9^_/)Fk) ^$1F
2.6.9 Dynamic memory allocation
q >)4,9F4Ts ` .)"Mx/JA 9(' d )Fn_ 3='&s /`+Fx)9)x)Z,+sE:
{
F 93='X^3
n
/F
)F / uv,FG)4sE`$/,F^Z)Z>9)^8PE/O^ 9/F )!sm19('X_O)k`89
1, 000
)/
V )!/FG)T )FDFGE>`>) ^HF".)_FGE`>N/ m),{ VX )oEFT)9)T'7 9fb
>) :`
†
=/3 bool ‡k9$fbD)XE:^)o)9)h F^Xs9uv`>)7P{)
int unsigned int
)o1EZ1``>,9>F W=]H3_/,)4PmG H('X8)!)^9Z`89>
† PN :]=/89 ; Ts9)FnPN
& ]av Ab#
/
s uv`>)"?_-9N)PN^F ‡:!)?^1F ?s1f1,FT9>3 FGFD)` `,+fb>)
int
)F FI)^`>)^{
de*6hY"Y T^$1F'XF^ ) F3>)>9>3 )_,)a`$ sE s)/3y)=,
)V+'j12'I/'I:!VH+[D
,+012 gh=, F^,` 5/ /1`$)^ '7 `:$) / s uv`>)+'X )
)V+'j12 FG)"3,=)r
CDs9uv`>)F )9) '79fb_F^|F^ P .'7>
/4)3 )-fONs9F x '&` `$F^_^
>)Fa/F^F^3 )^|) †e/3*FP>3w/b/h
‡_)3>)^>3E)^F3,= :]H`,=)y
† /,=)_)` /3 FG))`FG)/_3,=) 4\1>`>) 1BA=<
; ‡ CXs uv`:)F Ph3=H9/`
FG)/_39,=O) 9).)3 ) f/Ns9>F k93 )> _ GFG)G)+)^ fb †e>) ^
/F^FG3 ) )
‡ /3 G3 †e>))^9>^ P>h
3 ‡_O) =V E)83,= :]H`,=){ g79Z9^/> `$39:)>7)F^hE)^FnfH
/3
:]1F^F^9F>
new
delete
ghX}9/F F^P
† )o19`$
1,)^XN! ‡ Pm)X`89,=)>! ’ Fk_/ ^
fNs9 )^ FI)_3=H9/`$ /`$)>3 s uv`>)^F g7F F `$3 ) 57!L ?d ).F
)/_,1,F^>3 ms9,=)X'&9>?/ s9uv`>)TFD3=H9/`$/
1`)
3 9)DF&smFG)>3 )
$ F^ )^ O)h)^9 ^/`>),9/ ,F^3as1_)T/c('XF
%&>.FT(' )FX'7 1F PN"2x)FI)<F ’r\1>fb/ Z>+sE:&)9)D'7 'h/) )^9 FG)TP
.1,.sE>F sE>)o'7
/3
_g78PN('Xf/N/)!/3F") ,+sE:
P
2
n−1
n
FG)939^3 = ,=)!/3 3=H9/`$ /1`$O)F"/ ^ P )
gh ^_/3> P )
n
/ F /F!smPN :]H`>) )9) '7:]19`)^ fb8)-P^)319/`$/ /1`$)^3
FG)/" ) 3r
Á
Ã
Â
Á
Ã
Á©Â
Á
Á©Á
Á
// Program : eratosthenes2.C
// Calculate prime numbers in {2 ,... ,n -1} using
// Eratosthenes ’ sieve .
# include < iostream >
int main ()
{
// input
std :: cout < < " Compute prime numbers in {2 ,... ,n -1} for n =? ";
unsigned int n;
std :: cin > > n;
// definition and initialization : provides us with
// Booleans crossed_out [0] ,... , crossed_out[n -1]
bool * crossed_out = new bool [ n ];
// dynamic allocation
for ( unsigned int i = 0; i < n ; ++ i)
crossed_out[i ] = false ;
// computation and output
std :: cout < < " Prime numbers in {2 ,... ," < < n -1 < < " }:\ n ";
for ( unsigned int i = 2; i < n ; ++ i)
if (! crossed_out[i ]) {
& av G v Á
©Á Ã
Á
Á
Á
Á
A
// i is prime
std :: cout < < i < < " ";
// cross out all proper multiples of i
for ( unsigned int m = 2* i ; m < n ; m += i )
crossed_out[ m ] = true ;
Â
}
std :: cout < < "\ n";
Á
Ã
delete [] crossed_out ;
// free dynamic memory
return 0;
}
Program 15:
LM:</N. 4<:/+.<657<<. 7  Ž
Z) )9)Z)^9"f^Ns9
FhO'[+m):ZO)>&)9/ -^C“m/P):&)
crossed_out
3`NO)H )hm)F )+) WFI)&
)7P +3=H9/`$/ /1`$)^3O^
P )
new
n
The new expression.
)=Tf/N/)F
new
new
new
=
/ )vEm
new
:]H>F^F^ `$/ `" /P ) PN('X
І^ ‡
de /7`$F^F k)^9
:]19^F^F^5^>),=F |^f//, Ph)o1E $ d )F.f/,9
F )a393=>F^F
PZ/ s9uv`>)+P )o1E ~)9).9/F sE>|3=H9/`/ /1`$)^3 )$r?ghs9uI>`>)
)FGPkF!/H,F Es9,)"'7 ,F^,9/ FG)+) >F^,) /33^F^F!,3> f/Ns9+9/
de-Mx/(0 ='7 `$/{)
crossed_out
de5) WFG)8/35F^`>93 f/N) k)^9 >lm>`>)8PX)
]HF^FG F.) 3=H9/`/
new
/1`$)^7 ./1"7ND s9uv`>)nP )o1E
)h$r jnN/)ZZ$fbF4)Zs9uv`>)n,99 )N/ 3 P
F &PN,39/)/)oE 'Xnf/TN/) &)N F{) >' s9uv`>) '&) 'X9):fb> E$OF
- )F^F> =D ]/89 9) PN('X9 3`N)F&9 )N/ D) f^Ns9F
/3 i
j
sE) P )o1E
='&) )^9"/33=F^FGF&Pr)v'7 >'ws uv`>)^FZP )oE
int*
int
int * i = new int ;
int * j = new int (6);
// * i is undefined
// * j is 6
Z) O' 1Pm'7X'h)3)o'7 ^F ,`s9uv`>)F PE)o1m
'7
’B3_)> ,9FGXf^Ns9Fk'&)
int
/,=)_)^`XFG)/"3,=)^93 '& )^
int i ;
int j = 6;
// i is undefined
// j is 6
X)>>FG) PN ,F F )Z)^3 fON/)$xdeP "9/Fn)^>kf//, n 0 b)&>l `>)
P )
:]1F^F^ F )^-319/`$/ /`$) / ^ P7>9)^
'X ) ,9
3> H
new
n
& ]av A
)o1Ew ) $rTg7 >),= f, F&)./33=F^FDPx) W FG)T>)$Xg7FDF&'& O)
'7 F^!a.$R P M /(01
VXFh,9FG, H)
O^
)F _/ ,)N 3P &
F .PN,3 )m)vE
n
SXH9/`$ /1`$)^3 ^ )9).F >.33 F^,93
The delete expression.
sE"P3{ de 6hY"Y )^9T/:739>`3FXO)Z'&9` E)7)FhFh)"`$F^ SXH9/`
FG)/.39,=O) 89Fh)9)T3=H9/`$/`$)3 s9uv`>)FTfb.,)^ ) / )> 9)>F b,9>F^Fk)>8X:]19`)^.P3{nSXH9/`$ 1`)38>^.F 9:]= s )9/ FG))`"G s9,=)Z>),=)Z/F^+fb fbFZFG"399FG)^)^fb&>l ^)$
gh
:]1F^F^9Fh) b `$"P P>8^b gh>
`T)o'7.fON/)F
delete
delete
delete
de m
s ) f/N)F __$sE+
,9 E)^> E 'X` `/F^ )^9
:]H>F^F^ 9/F
delete
> l `>)$
CD)^9:^'XFG )ZWFI)nf/N) T+,FG) sEZTE)> )! FG7s uv`>)4)9)49/Fn fH,9FG sE>83=H9/`$"/`$)>3.'&).)hWFI)n4F^>`3 fON/)nP)
:]H>F^F^{
new
g79&>lm`:)7Fk) _ bh)X`^^FGE3 ^+f//NOs &/bPN F^,=s9F^ ,9>)73=H9/`
/1`$)^F ) 9r
=X:]=/89 =)Z E)Z )T9^/Q'X> ) )o'7 int s uv`>)^FZ3=H9/`$/ / `$)^3)=,
int * i = new int ;
int * j = new int (6);
// * i is undefined
// * j is 6
>h33'7 '7,3
'& )
delete j;
delete i;
gh73>4P939>>).31>F4)4_)^)^> > s9,=) _/!9^/>Fr`F^3>4) `$/
)
E)>^F&-) fb>F^ ^39:TPx319/`"/`$)kdeP b, 3 ),3 )o'7
delete
FG): F b,aWFI)&,3+) F^`3-FG)^>r
de?)+F^`3 f/N/) Pk)
:]19^F^F^
_+,9FI) sm E)>T)_)+WFG)
delete
>) P/+^!)^ O) 9/F >f1,F^ sE.3=H9/`/T1`)3!'&) )k)^9 3 fON/)
P )
]HF^FG{ng7Z'&9ZG.1``,=93 s1 )^9&^ F ,=)ns ` 8)&$O
new
PNh,F^ ghFh9EF7a ; PxM ^/(01
deP )"9N
FX9>3 ) + ,9rE)>7)9)Z31FZ)ZE)h)8+319/ delete
`$ /`$)>3 F^ s9uv`>) )^98sm9$f1 F ,93>W93{-g7F/8F")^,8P7 )^F
"
%
%"L7B
*
,SB>#
((
-..F,S$
0J
% 7.#*K
A75."5
"
:
9
82*
CD ,& 5"K(7@
8"K*S
2
/
A
( Q."5
#6%"@"@.*6E2*6#'6
7
/B57
*
*SBK(
#*
A2
N %*
.*
%"5
GO7
(
5(. /
O, :
I
%*R6(7'6 9#. 7.#*C 7
6
7 %*
R@/B*'"@..BK.I(( /
6
"
7
A6#2"
J
"K(7..B
%< < 1
J
.*
"L2
72
OJ
(7B
6 *
*
/
-72 /
#"
*S
%..BE"L K
7( /L."5
"
@'..B
/ % %
+@
%$&
/
7T
%*(*0J
% 8$&7
*
& av G v Ab;
)
/?O^a'X>^ )> FDa8F^ s9uv`>)$DVXF / 'h$1F&'X )aE)>F
delete[]
6hY"Y N/,9/T31Fh)&l >&/
$/F7P 3>)>`>)+F^,` -:^F
)
VX),+/=^ /`$)>3+s X~Fn,)^_)`$ P3 'X
Memory leaks.
)! )> O)Fh9^_/ =)XF&fb>^s 3 `>)`")8a )^9FXP /`>)DPNTP^
3=H9/`/ 1`)3 ^b5dePT / 39F8)8 ]H9` ) Pa/h319/`$/
/1`$)^3 ^ )FF^/3y) fb 'I/'I:!V D+‚ [\1,` $ 1F_-P)> F^P
s /3`>13=4gh>
,F^,9/8 fb"9+3NO)Z`>9FG 1,`F s9,=)h'&),=)7P9 ,1,F^3
FG)/ 9^/Q,99+PN&+.)W
† )^9 _P E>O).FGHFG)^ ,=)9>F ‡ _$
O)
F^DE)hF^89:]H9/,FG)Z)^9"fNs9D$aFG)//
gh>^PN '7"9fb")^9 PN('X9.,39/
Dynamic Storage Guideline:
>' /33:)" ]HF^FGF&F^,3a'hHFh`T_)^` /F:
2.6.10 Arrays of characters
\1 ,9>9`>FXP `9`>)>FZ`F^>3aa3,=s9 1 ,)FhbT
std :: cout < < " Prime numbers in {2 ,... ,999}:\ n";
$` /3 ./0:!1[7N?Z10/:/+€. \1_P D'7 9$fb ,F^>3 FG)G):/Fh'&)a,=)^9,=)D:]19^F^F^F ms9,=)X'7 `$ '7 'X )!) )> `):]1)Fx/F '7>eFI)x)s9 &FG)^9Z):/`$/ sE ,F^>3.)^D)N/ / ^ P !5C:J!<:g. ?679/`>)>^F )8s9,3 s9` 1F P ):]H)+F '7 HO' )$-de
6hY"Y 9)^9:O"33_s1
)"PN,39/)/m)o1E
)9)7'7"s 9_3FG`,F^FZ:]1)$
char
g7 PN,39/)/k)o1m
^>F^)F `9`>)>F>|6 9/`:)>F.`,3
The type char.
char
) <6<:g.
)=,
e/a'X)^ )^9>.`$9)nfb>FGF
†
)=,
‡ ) )1 N106. 0
a
z
A
Z
)=, Fh'7 FZ,9:,Fh)^9: .qL7/<1 +<5C:/J!<:g. b 1ng79 9
char c = ’a ’;
3>W9FkXf/NOs P )o1m
/3+f/,9
:9^F^)")7>)G)> a ghh:]H>F^F^
c
char
’a’
F h):/bP1)o1E
xg71,)>Fx,3!) /`:),9/`9`>)> FGH.sE `>F^FG
’a’
char
3>&)+3FG)9,FG
) ):/
Pc)"39>)W9> ’a’
=_/ 9)+)oE char F / )^/ )o1m T) F )a.F/.E:)F /FT).)vEF
=/3) 6ZY YwFI)/393_>fb_EFG),NO)F ")^ P char )
int
unsigned int
d ) F FGE` W >3 ),9
r)a'X` )>")8` O/`>):
int
unsigned int
’a’
F 'X sE")>3r &3>Z) '&3_,F^3
`13K
† >^`$/ )939^3
13"PN
ASCII
A
S
C
PN_O) )^>`9/g ‡ )hF7)")>
I
I
97
*.P Q2
.
7PS..B#,$
8$*
2
&*
H. % ,
/
7
7.*
6A. % ( 22
-.* %
7.*6 N 2 J
,2
'-BI.*
6A8"L/+BN
%"
*
/ *
/
& ]av AA
ghF FG>)^) _8)7F^>Qfb>^_,F^PN, =93
33
) _ b>F )^)^&F^>9FGT)^+3f13X
`9/`>)^> s1 /)>$ CD )^97)>49/3'7h`/ PN4:]=/89k)4)^9h/ 9sm>) )=,
"FG89D1I† /F^FG,99
`399+‡ 2x]H`,=)aP )
ASCII
for
for ( char c = ’a ’; c <= ’z ’ ; ++ c)
std :: cout < < c;
'&^)F ) ` 9/`>)>&F^ ,9>9`>
abcdefghijklmnopqrstuvwxyz
) FG)/393 ,)G ,=)$nTfb)F H
b,a_) )9)Z)^9 std :: cout < < ’a ’ + 1;
)F
s9,=) ).39F^M’ ) \1`)_E>93F Ph)
`>8EF^) :]H>F^F^ ’a’+1 ^
’b’
P439 lm>>)D)o1E>F E) P) E>93 P )vE
'X /,=)_O)`$/sE )3-))
char
Z>/ )oE
PE)X) m>/3{4gh>>PN 1)X)o1mDPm)D:]HFGF^
int
’a’+1
F
E/3 )F&f//, F
†
F^F^,
`399+‡,“E/3 )^ O)!’BF&'&9)D>)FD)3{TdeP
int
98
ASCII
b,'h/)
)^ sET)^
3 Hb,a ,FG)h,F^ )":]19`)7`>fb>FG
’b’
char(’a’+1)
ghn`$)G!PHFIE`N`9`>)>F /F^Z`,3F /M0:<M!5C:/J!/:g. )9) )J F^:)
'X)^3{[g7F^ -'& )^) 'X ) $/3 s /` HF^NF^
X/3y) FI)8E^)/)
`)^{` O/`>):XPNZ,9FZF
='X` `$/,F^F&+9Ds$ m
’\n’
CT
FG)49N)PNF 1
f,X1``>,9>F
s9)FkPE^7
“b'X>)^9:k)&f//,&9
char
8
`^^FGE3 )^ )TF^>)ZP )>^F
† ) F^3
`$/F^! ‡7h)TF^>) {0, . . . , 255}
. . . , 127}
† ) ,F^3 `$/F^! ‡DFX89){−128,
) 3>W93{ \19`>./ VT\=67dGd `9/`:)>FT9fb+):
f//,Fh
H)^9: `/sET>>F^)^3 sE)^`$/FGF
{0, . . . , 127}
V ) ]H) FnF^89+!FG 1,`DPE`9/`:)>F 93_`$8sEX1338
From characters to text.
6hY"Y[)=,a-^_'X ),3>1.)oE
=Z:]/89 1) "3`>N)^
char
char text [] = { ’b ’ , ’o ’ , ’o ’ , ’l ’}
3>W9F&-^
P >9)^
) 9)7>F^>)F&)^9T):]1)
4
VX):9)fb ?† /3^ >` fb)Y‡ ='7"`$'& )
char text [] = " bool "
g 9F HO'7:fb> =F 1,f//>) ) )TPN> 3`>N)^{ 9>a/ ^_Pr` O/`>):F
7
F7)/ >3 'X)^ FG)G.)>/ )^9D):9) <:<A!5C:/J!<:
† P )> f//,
’\0’
‡TF!,)^_)`$E33 ) )^9 ^bg7F!`9`>)>!39F!)"`^>FGE3 )-/
0
)s9!`9`>)>$&VXP)>X)^9 )^)>&3`N)) ^
)>PN^+9/F&) text
5
g79
WFG) PN, >)F /3
/3|)
W P)^5>) F+)^9 >^
’b’ ’o’ ’o’
’l’
`9/`>)^>
’\0’
7`$/=F^,` / ^ <:/{2<:!'^1[+) & bk9^_/HGHF >^ e)>^9)3+^$1F
H(' )"){8g >) )F") r'7 F^89-9fb ))>O) (fb>")8^$ /3
`,)h) 1,+sm>hP >)F sEPN^ ) )>9)^
’\0’
%&> FD/ `$)
P † ^$1FDP ‡h` 9/`>)>^F 8M0:!1[7N'A+<5&1[7N FX)^9"9^s P
W9399")XW9^FG) h/ 1``>,G`F Pr fb_F^`FG)Gz
†e,F^,9/ F^^) ‡n
fb):]1)
†e,F^,9/ + ‡:
& av G v A0
gh s1f1,F F^,=)_F )TPN('X xF^F^, )9) )TF^$^` FG)^.9/F7)
m
'7+`8 .) ` O/`>):^'XFG.'&) ) )^F
Pn).):]1)$ dePk
F^_)`-F
1, 2, ..., m
PN,3 PNXF^ >) ='7 FI) /3 :]1)D`8 ) F^$O` FG)G 'X )) )^F
P)7):]H) /3 F^ {4\1>)F4P
`>9FG`,=)fbh>)F
2, 3, . . . , m + 1
m
i, i + 1, . . . , i + m − 1
) ) ]H)DO"`/3 u1")Ju g FZ/^) FhP /FG)&/Fh /F7) F^$`-FG)G FZF^^) Hs =
h
, )Z)h_sE`T
`>)TPNTF^$O` FG)GFW†eF^.2 ]=:`F^ @ ‡:Xgh>.FX8 ^F 9FG)`$)3 )
† ) W=765Y{ ‰ :!:!1[.<{2_:/+6\+ NY:!1065&' ‡ )9)&FZ'hHFhP /FG)$
g 7PN('X9&M ^/Q$RD89>)F{) s1f1,Fx/ )- d ) _)F{)o'7 ^$1F
h
Pk`9`>)>F +PN")+F^$^` ?FG)^ r/3?+PN")^9+`,=^>) 'X3O'!! +8EFG `>1``.3> )^9 '&39(' † )^9 WFG) )T3^`>)aPN('XFX).N/FG)Tg‡,“r)FT_ b>F
).$FG ) F^P).)8'X3(' /` xs1 FG89 ^>9N/`-)
P7)_)^:]H).'X )
i
>)
† /3 )&)^9"F/T) /3=f//` ) `$/mWFG)ZEF^)^P ) 'X3O'
i+m
s1
g ‡:
Á
Ã
Â
Á
Ã
Á©Â
Á
Á©Á
Á
Á
Á©Ã
Á
Á
Á
Á
// Program : string_matching. C
// find the first occurrence of a fixed string within the
// input text , and output the text so far
# include < iostream >
int main ()
{
// search string
char s [] = " bool ";
// determine search string length m
unsigned int m = 0;
for ( char * p = s ; * p != ’\0 ’ ; ++ p ) ++ m;
// cyclic text window of size m
char * t = new char [m ];
unsigned int w = 0; // number of characters read so far
unsigned int i = 0; // index where t logically starts
// find pattern in the text being read from std :: cin
std :: cin > > std :: noskipws ; // don ’t skip whitespaces!
for ( unsigned int j = 0; j < m ;)
// compare search string with window at j - th element
if ( w < m || s[j ] != t [( i+j )% m ])
// input text still too short , or mismatch :
// advance window by replacing first character
& ]av AbR
Â
Á
Ã
Â
if ( std :: cin > > t[ i ]) {
std :: cout < < t[i ];
++ w ;
// one more character read
j = 0;
// restart with first characters
i = ( i +1)% m ; // of string and window
} else break ;
// no more characters in the input
else ++ j ; // match : go to next character
std :: cout < < "\ n";
delete [] t;
return 0;
}
LM://N. t.<0:!1"7N 'A+!5&1"7N& Ž
Program 16:
9>5'79 )^9_/ ) )):]H) P&)W9
n)_/
eratosthenes.C
,=)^9,=)F&Mx A ,=a) )^9TWFG)Z1``>,G`!Pr)"FI)^
"bool"
// Program : eratosthenes. C
// Calculate prime numbers in {2 ,... ,999} using
// Eratosthenes ’ sieve .
# include < iostream >
int main ()
{
// definition and initialization : provides us with
// Booleans crossed_out [0] ,... , crossed_out [999]
bool
VcPN>'c`)F 3|)^ sm
_398'&) FGm`>).) )
9/3-PhFG)/393 =9,=)
>tg79 / /3F
) ):]1)`9/`:)>s` 9/`>)> P
D,9)X)F
std::cin
FG)^^$/}sE>`FG8)o = g )FG) )F '7X,F^X)DP /`:) )9) FG)^^$/}f//,F `$
8 `) sE
`fb:^)3 )
k'&) )^9_FG,9 ) sE> -/F 9 /F+)> 'hF O)^)8) )
bool
$399+ /FG)&)^9"3 P )!FG)G$/-7\19`>")"f//,"P
FZ)!FI)^$/
std::cin >> t[i]
S</: (f/=P Z`9/`:)> b)Z`>fb>FG )
]/`>)^ )F4,F 'X>)>4)>hFG)
bool
'h/FZ+`9`>)>Z) FG)^/ HZ9)
FG) `>fb) )79^/ F , s1.>39 `>)9 FG)939^38=9,)x)^ DW h`>)/ )D):]H)nde
)F `$/FG H)TFG)^$
'X sE>`D8)o8:]=/`>)
O) ) >93 P
std::cin
)TW 4gh!
std :: cin > > std :: noskipws ; // don ’t skip whitespaces!
F`>F^F^y) )>&)-FG)^^$/ )9) uv5&10<.qL7J/<. † s9N/ HF h>'XF 7>)` ‡F^,3)
sE 3}† s13P /,) Z)> !‡:zghF
/O'&F,F
) F^$O` PNFI)^F)9)
`)/
'X)^FG /`F =/3_)h/('XFn,F ).,)G ,=) )^9X)^:]H)`†e,=
) )XWFG)71`>`,=^`TPE)DF^$^` FG)^^+
‡ )Fh mNb,=)$
& av G v A@
2.6.11 Multidimensional arrays
de 6hY"Y '7"`$a9$fb!^1FZPxO^HF = & ]/89 )"3`)
int a [2][3]
3 `NOF )ZsEk/.^$ PH)
'&9FGn)^F ^ ^$1F PH)
'X)!,93> H
a
2
3
)o1E
! /FG
F^$ )9)
FT 'j7~01q)1"'I<M.12+:!:/V †e )FD`$/F^+Pk3>9FGF
int
a
/3 ‡:ngh")oE"P F 93 )!,39:H9 )o1m !F int[3] de>/ 2
3
a
int[2][3]
) 39>`NO)
3>W9F/yG
PD>9)^
† f/,9 P
‡.'&9FGa>)F -O^HF PD)
a
n1
† f//,
P
C‡ 'XF^
>)F+/$Gb,5>)+)_ `>),= g79_f//,F n , . . . , n
n2
`$/3 )^9 )1['A<M./12M. PZ)G /3|)
:]H>F^F^F
>$ 1+,FG).sEk
`FG))Z:]HFGF^FZP )>/m)o1E!/3 EFG)fbDf//,
&/3i``F^F ,)^3F^9/ ^1F!'7 HF /F!:]1E`>)^3
F")^9 >)
a[i]
P 3:] E/3 )FX>)DFT/ ^-)^F^P 6 F^ 1,) FX)^9 >)DP
i
a[i][j]
3:]
)"^
9/3aFG {
j
a[i]
VX), '7 ,F^,9/ ) P+,)3F^ OGHF /F )Os F _)^^`F O) ^ Nb,=).F ) - bPN e39F^9/n^HF> = ]/89 )^9)o'713>9FG9/
^$ 3`3|)^^,9
1`>`,= F `),,F+ ^)+P&)^9 ^ x'&)
int a[2][3]
FG /`"PN
s uv`:)FZP )vE
F^ ,= $#H
6=2 3
int
a[0][0]
a[0][1]
a[0][2]
a[1][0]
a[0]
Figure 10:
,)3F^
)Tf/,9 PN&)^9
a[1][1]
a[1][2]
a[1]
‰ <'A:!VDV$7R Sz?0u`Q)1['A<M./1q+f:!:/V
H^$1F `$/sE&)N/ 3._"'h F^x) 3F^ ^HF/“
:g.< † /3 MZV ) WFI),‡73>9FG__$sm")G)3
int a [][3] = { {2 ,4 ,6} , {1 ,3 ,5} };
g79Fh3>W9FZ/aO^_P )o1m
'X>
Fh,F^>3)+)N/ Z)^9T)
int[2][3]
{2,4,6}
9/3 {1,3,5} F7,F^3-PN a[1] a[0]
g7 ,3 3F^9FDP +,9 )3 Dynamic allocation of multidimensional arrays.
F^9/1^ _!9)xsm HO'& O)x`894)k.'&`+`/F^73=H9/`k/`$)!F `$/3
PN$Dq{>)D,FXFI)^)X'&)a) `/F^ 'X>^ / 39F^Fhs9,=)&)^9 WFI)T 1O'& O)D`89
)/8deP
9/F f,
E)> )-_3=H9/`/ 1`)3 ^ P ) n
n
0
'X ),3>1.)oE e rFhs9)/3
P :]19^F^F^
n2 nk
new
& ]av AbK
new
& F!f, n i = 1, . . . , k 'X>^
VXn3F^9FTs9,=) ) WFG)! ,FG)"sE8`FG))
:]19^F^F^F!deP4b, ) i sE,=)D )TPN!,=) )^9FDFD)TF^,=^F^= =T:]/89 m
3>{)h>)^n_/`xN/,9/ `>13nPNr/3 /``>F^F m>)9F !) 319/`$/
/1`$)^3_^ )D`89>n ,FG
) HO' O' _/ ^+`F F^X>) PE)
,39:H9 )o1m e r1``>,9>R
F † F^!\1`>) 1<RHB;‡: k,)7)F7F78mF^F^s9TP{)
n2 nk
f//,F
$ n H('X-O)&`89&)
n2
k
dePT'7'h/)8) ,F^a) sE(fb
]HF^FG)^ 9 )N/ E)>
Pointers to arrays.
new
f/Ns93† 'X)-)+/33=F^F P )+WFG)T>)TPn). ,)^3F^9/EO^J‡ m'7+3
) )oE IE)>+) e =yVXF+b,y_$ F^,FGm`>) '7a9PN^_/?`$/7)F )oE
n2 nk
n n Es9,=) '7.`$t’ )T'&)^ )Tb )9)T 6ZY Y F^9`> n e n FT)")oE
9/2hVXb/k
'7 9fb )8F^G)D)_/ 89` )739:W )^aP ) 3F^2^3-Ek )^>&f/NOs 9/Fh) PN('X `39 P/>)$
p
int n = 2;
int (* p )[3] = new int [ n ][3];
// type of * p : int [3] <= > p : int [3]*
g )F^F 49>`F^FO^!>^ /F^9`>
h
† '&`"F{) F/4/F int* p[3] ‡
int *p[3]
3`NOF
)_sE / O ^ P4E)>^FT)^
eF^> /F^_9 ]H) O/9h‡: 6ZY Y FGH
†
)O] F
p
int
s9)^):FG'7>)
deP bM
, ’ F H PN.+,9 )3F^9O G?'X ) `FG)) 3
Arrays of pointers.
H)D `N/E9FI'7>7F )>^ F 9 k,=)7,39: )D`,)> F^F 9
n2 , . . . , n k
b,a`$s9, fb>^ 13a)O){
CT_WFG)+F^,=) )9).FG,9>FG)F+)F^P7'& b, `F^3>.) ).^?Nb,=)
Pk+,)3>9FG9/{^1F"FD)F Xb, 3=H9/`$/`$).3F^9/ ^ P
)
/3 ^)^W9`N/ ^) ) )&) FG,s GHF&s3 FG
n=n
n
nk
uv, 'X)
1 3`2F>
qr:) ,F 39F^`,F^F )&)o'713>9FG9/=`$/F^D+).fb3_) PN^ ,N//xV )o'713 F^9/n^$ 'X ) 3F^F
/3
`$/ sE F^+,9)3 s1?3F^9/xO^ P
n
m
)
nghX>)k'X )`$993`>F
/3
nm
i {0, 1, . . . , n − 1}
j {0, 1, . . . , m − 1}
E$OF&O)&3:]
) 3F^9/EO^b4jX`Dfb>F 9) >)hP 3:]
mi + j
`
) 3>9FG9/mG_ Fh`$/m93`>F
3f
/3
3
kg7F '7 HF
i=`
m
j=`
m
sE`/,F^") PN,9`:)
(i, j) →
mi + j
s9Buv`>) fb _9FZ) F^:)DP `$/{3`>F
) ) FG>)TP 1,+sm>F
(i, j)
{0, 1, . . . , nm − 1}
de)^,9 )fb ()F _ 9 )^)>9F ) _/9GX)s9nP ^O'&Fx/3
`,Frs F^89
n
m
9,=)^) (' P)>_/)> VXF b,`$/yF^>-P ,= $# 7)^9F F8 ]/`>)^|'& O)
)+`89>DF"89`)
3_PN +,)3F^ O{^1F"'X ) M.<2M 3F^F
n1 , . . . , n k
& av G v AbU
SD)D:]1 `) PN `FG)/)D3>9FGF&FX- '7 /,3 ),9mFG`
'7+F^ ) ),) fb ))
“r(fb> E)FD'7 /,3 sE`>FT>fb a[i][j]
`,.sE>F^X'&) 99:3F^9/ ^1F
V sE>)^)^>_F^,=) )9) b>9F)-))
93y)9)FG1) :]1)3F8)
a[i][j]
>X3>9FGFhF&)!PNO'&^
† b/
='7 3FG`,F^F&) `$F^ P )o'713>9FG9/
^$ '&)?3>9FGF
/3
‡ Tb, W9^FG)!3=1 `$/ -/1`$)^ 9 ^ P n L71[M6{
n
m
<:g. n/3 ) b, >).>fb>G|F^9 E)> E) )-)W9^FG)+) PZ/|3f13, 3=H9/`/ 1`)3 O^5PD>9)^
g79PN('X?`>13aP/>) 39>9FI)^)>F
m
)F
// a points to the first element of an array of n pointers to int
int ** a = new int *[ n ];
for ( int i = 0; i < n ; ++ i)
// a[ i ] points to the first element of an array of m int ’s
a [i ] = new int [m ];
g &)oE
h
F Im):n)"E)^>n)^
=
F4)>PNX E)>4)
†eF^>
int**
int a[i]
int
)Z /98 m):kF^,=s9F^`>^)!\1`>) 1BRH<K‡ /3
F / f/,9hP )o1m
a[i][j]
buv,FG)Z bT I>,9.)v'73F^9/ ^b
int
ghG $b,=) F 3lm>^) ),9
,=a$# F!>9N/`>3 s1 ,^--g79F
$/F ).)o'739F^9/ ^ FX )`3 ,?PF^>) P
9>39F^9/ ^HF n
s9,=)!)F^
GHF ^8) `FGF `F^`>,)^fb?^9>3 ^bde P /`>) )
n
^1FX_>fb> 9fb 3lm:)X)FZghFZFX,F^PN, PND ]/89T'X-b,-'h/)Z)
n
9/FT)
FG)^ ('7> )^N/,N&_)^ =
] “E )FT`$/F^ r )"FG, `F"P4)^9 ('zPk93:]
i
i+1
a[0]
Figure 11:
a[1]
a[1][0] a[1][1] a[1][2]
a[0][0] a[0][1] a[0][2]
‰ <'I:!VzDV$7 S\K0u`Q)1['A<M./1q+*:!:/Vz:/+Z1,)j;!V„:!:/Vj S L=1"M<:g.
qr:)7,9F `>9`>,39X)^9F F^`>)
'&)
/
):FG)9.O99`$) P
Computing shortest paths.
†e+,)3F^ OD‡ ^$1F de_/ `>)9,NOTP /`>)^ 91 rFG,sm39 fH33 )
F , O
`Fn\1DPr)^9T`>F7Ds9` b>3 'X )_s FI)/`>F† )F^T`,3 PNZ ]/89&sm _` F
.`,=sEb3F s9,=) :).,9F.Os FI)^/`>)^ `$n) I'h/F +‡ V sE) F )/ `$)>3 O)
F^8`>
† )F^,=`! ‡ 4/3 )^9_b/nF ) (fb )8sE) )^ FG8)>.` T † )
S
)^>,) ‡:_V ) /?) r)^9+sE)!`$/ _ b FG)> Pi )F!`,=^^) `>n)^-/?P )
PN,=X3buI/`>)Z`F =s ,=)hPNXsfH,F $F^F&)h___,F^!`>F )9)& 8)vb
 fb> )F F^:),= H'7D'h/) ).W 3 F^^)FG)7EFGF^s9&sm) O) P^
)
†e7W 3
S
T
,=)T)9)T F^,` )^?:]HFG)F ‡ %&>^ E)+) Pn8sE)D ) FX).1,.sE>TP4FG)>9F
& ]av (0#
) b> s1 ).sE)T3,=_)FT) P ^)`,N )X) b>F
FG)^>9FT)^_^$/`
P 0
S
`F>
8 12
S "!"! "!
!" !" !"
"!"! "!
Figure 12:
)
† ).)/ ` > 31>F") `,)!“r
S
‡S: T ,=_ E†eP) ‡&^F OS'&F" :]=/89!'&)
A B
A BA
B
A B
A BA
B
AD
BA
B
C BADC
DC
C
DC C
DC CDC
DD
D
T
- .
- &
% .- &
% &
% &% $
# $
# $#
.
-
.- -
.- %
&% -.- %
&% %
&% %&% #
$# #
$# #$#
..
&. &
&& '
$('
$('$(
'
'
')(
(
)
)(
*
'
'(
S (
) *
) *'(*)
*
*
),
)+) *),+)
*
*
+*
),
*
+ ,
+ *,+
++,
+ ,++
,
,
/, +
/, 0/,
0
// 0
// 0//
0
0
0
10
10
2
11 2
11 21211
2
2
222
‹ 0S< ƒ 5C+a10.zE.<57:g!.<a:/&;< LC+65BS/:<'
S
T
; <
; >
= <; >
= >
= >= @
? @
? @?
<
; <
; >
= <; >
= >
= >= @
? @
? @?
<
;;:
== <;;:9 >
== >
== >== @
?? @
?? @??
<;
<
9 >
<;:9
<
>
<
>
>
>
@
@@
9 :
9 :9
:
9
9
:9
:
:
9
:8
:7 98:7
7 9
8
77 877
87
8
8765
8
55 8655
55 6
6
6
T
53466534
63
6
43
3
343
4
4
3
3
444
91"N5Y p 5&10.G
dea)F& ]/89 +)^)^X) H.>fb$F&)9)h)>! FGF^)^N/)o'783l >)&EF F^s9)FkPN&)"^sE)Z)^ $` )h`$/a /F^FhsE('*)!`>8E)hP 'h/Fh/3uG`)h)
T
m sE(fbTd )X)^,^9FD,=)D)9)& F^F^_sE(fb FXP FG)> {93 >F^,)F^^)>FG)D ) †eP
S
)
‡XF!3>9`>)^3 ,= † ),‡: Z).)9)"?>/4)^9: F ) ,91,
21
F^^)>FG)n )^r de ,=4:]/89 )7W99/H)x),= P ) ) `>,938/FG 9fb7sE8_39
"h)o'7 `>F7PN,=^)>X3('X{
'h/)D)'&)^ / )9)&W 3F 8F^^)FI)DsE)D )
mfb> ).3F^F
† 1,+sm>.Ph^O'&F ‡ /3 m †e1,.sE>.Ph`,F ‡ Ph)P /`>)G 9 )_`139)^F
n
P F^,=`+/3 )>) E/3 )^9 'hFD%ZO'[`$/ )FXsE 3( kPN $399PN,=^)^9: m'7
`,=/Xb,_) ) 8sE,=) )Fks9>}PNh!'XxM $/F^D)Z)9) ) ;!:!C!{€ST:</
!LYLM:<QJ<5 P7)^^1 /kmF^F^s9 )^9F.93 F^`>)a)_F^^)>FG).
F 9)+ ) F^` ) ,9.sE> P9F^,` )F FxF^8 ")TN7/ $/3= PN439:)
9 39F^F
† kFG3F O'w3 b,a:fb->)^!/m)F^" )^9FT ‡
%&>-F/ 9^b/`ys /FG3 )V+'j1qELM:</N:/'^'j1"7N wghF8>9:/&)>` ,9F
9`$Os )-s9F 'XF^F^,=)9F!`$/ 1,` H?sEs)/3 Pi)_F^,=)9F )
F^_/>7F^,=ss9F7P ) F/ FG)^,`>),=/ g79!^)Za3=H9/`X9^/ F7) W93
) I) F^,=ss9F /3)F _+ 1,^T!X F^F P $/`.>/ )
P )^9"9/ 9^s -
CT`a'7 fb-3)W935FG,9 )s9
F^,=s9s9>F k'7FGfb-/hPD) 5),=
P
)+F^_/:X) )^9+N^> 9>F 93? ") F^,)^F.gh9)T'h E'7 9fb8 )
PN_)^!)9)x'773 ^39:4)^ ,` H `>8 ,=)n)hFG,=) ) Dfb+F^,=s9s9>
Pc)"FG,=)F7P )]
† //3=_F^fbh
3 ‡ F^_/:7F^,=s9s9>F
de-,=&`$F^ '7!> T) s9> F&PN('XF 4PN +[ 8)o
`F
a)^9 91 C
`89,=)7) D<7N65 PE F^^)FG)n )P
)
† '&>Z)^9hf,&F ∞ Pm FG,9` )
S C
:]HFG)F ‡ &`>N/ )9)4)Fn/F^"F^fbF ,=n9/Hs9>tPm`>8 ,=)9 F^^)FG)n )
P
)^
VXFGF^,T)^ O) ) ) P F^^)FG)7 ) P S ) T F ` < ∞ †e)>^'&F^
S
T
& av G v (0H
'7 19('w)&'h)9)Z)>!F&8 ) )X/D‡:n /F^ F )9)
F :<,J!5CY;gD P
T
FI)>9F
S
`
r)>8+,FG) sE8
`k/3uG`)")
Z('}P
)9)!F"$` 9s9 P
T =S
T
S
`−1
FG): F m/3 /3uI/`)X) )^9FX `> ^$/`9s9!
FG)>9FX>)^` =O'&+FG,9` `9/-P
`−2
`FZ,)m'7 >)Z)^
fb>FZ,FZ. )P )
'&`FhF^^)FI)ZEFGF^s9
S
`
qr:) ,F >9=/FG_)^9_>/ >3 s9 .'7'h/) )^ sE 8)o `
'X )
C
9bO)fb )>X
† mF^F^s9
X)^ O)T39`$)FX)^9 ) Pk8F^^)>FG)T O)?P
‡
∞
S
)
%&:
)_F^,=s9s9>F!)-'X` '7_9N )^ >39,`)F 8PN afb|):
C
{NOsE / )^9.`>FD)9)".$/`9s9.P ?) FG) FG)^>9F i 0
−1
† /`:),9/ EPN!F^ FG_/>Df//,g ‡ r)F NsmF / S`F )^ O) ^ i$` 9s9+Pi = Snm
)!/ F^`".F^^)FG)h )'&m>fb:X)>D
`E)o'X`
%&>4FE) 3,`>)"P N>{)hF^_/>EF^,=ss9F {F^F^, )9){'7n9fbn/$3
F^fb>3 )^9!F^,=s9s9> PN
e '7 9$fb!NsE3-/ `FZ)9)X!/` Os P S
i−1
'X )
T>F^FDFG)>9F de 3>D)F^ fb ) F^,=s9s9> PN '7 FG) 3 )_NsE>
i−1
i
) `F )9)Z^ /` Os "
FG): R
F † s9,=)&)hFGF ‡:
k,)7)FhF7F^89 1F^`T)F^"`F
i
:]=/`>)_) ,9sE>3 F&/3uG`)h) `F '&)sE
i−1
,=$;a,FG)^)FTO'~) P^): P Nsm3 `>F ('XF! )F"`F^F PN i =
0, 1, 2, 3
67),99
?)^9F"P /FG9 r'7 W99/-^fb ) ) F^)^, O)?3>9`:)3 ,=aA / 8)v_`>F 9fb smsE>A
3 † 93 P /`>)h$/`9s9DP
)F ]/89g ‡ g S
W93 FG9G)FG)" O)?P
)
r'7 FG)G)!P
†
'X` 9/F NsE
‡D/3 PNO'~
S
T
T
21
) P 3`>$F^ NOsE
F †
‡ ,9)m'7 W 9/8$` S 20, 19, . . .
qr><) ’BFX>)D)^8)+6ZY Yt89>))^_P4) OsEOfb :)13{
The shortest path program.
>>F^) ) 9
s 3=H9/`$/|/1`$)^3 )v'73F^9/&^
'X)
floor
3F^F
/3
/3)^>F P )o1E
† =_/ Fk E)>n)!)
n+2
m+2
int
floor
WFG)h>) P / ^_P
E)^>F )
Hs ,=) '7TFG)m`$/ )F7 )o'713F^9/
n+2
int
^$Y
‡: ghFG+3>9FGF&$fb.FG /`.PN :]1)^ 'h/FXF^,=^,38) $"\1,` :]H)G
'h/FZ(' ,9FZ) >)Z3-P FIE`N `$F^F 9X`FZ9fH9 F^Fh)9/-PN,=D/3uI/`>)X`>F
de|>9:/ n/ ^)W9`/k39)-)^i)9).,93F )
/`>),9/ 39) /bFG) FGE>`N/ `$F^F+F
`$/3a .Q<M01"! gh $O^)XP ) 9^/(
† 'X`-E$OFX/F&M ^/i(@.sE(`
' ‡ FX 1a)^ O)&` 9,=)F )hFG,=).)"FG,ss9
P~)^9hF^,=).)^"F^,=ss9
PN i = 1, 2, . . .
i
i−1
g79TF^,)^8).F^,=s9^s F $39f//Ns9 '7TF^>)7)
)^G_`^FIE399
0
floor
)
) /3 ) )^F `^FIE399Z)&) 8)o"`Fr)
† )^9F F $/)r)D3`$O)
S 0
−1
)9)7) `r9/FZ)7sE>-NsE3
b:,) ‡: /FZO!'hHF7NsE>3 '&)
)")>
−2
de-)>)
P )! ='7 FG89 )=, /{)^9 b>)D,NsE>3`>F&/3-NsE
i
:]=/`>)_) Fh'&)
)9)h9fb /-3buI/`>)h`{'&) NsE
ng7! )^>9)>F
i
i−1
/FTF^?/FTF^FTFT_/3 H^ m$/ )^ O)T9_>'z`> `,3 sE.NsE>3 ) `,=^)X):){x%Z>!F7)^9"`13
// main loop : find and label cells reachable in i =1 ,2 ,... steps
for ( int i =1;; ++ i ) {
& ]av (0
0 S
OPO OPO GGOPO GHG GHG GHG E
EE EFFEE EFFEE
PPOPPO GPPO HHG HHG HHG FF
FJ
I
IFJIIFJI
I
J
JJ
I
2 1 0 J
KK JILKK JILKK
L
L
LL
2 1 L
KN
MM LKNMM LKNMM
N
NN
2 N
MR
QQ NMRQQ NMRQQ
R
RR
QT
R
SS RQTSS RQTSS
T
S TTS TTS
T
!"! "! "!
!!"!! "!! "!!
!"!" "!" "!"
T
.-.- .-.- .-.- &%&% &%&% $#$# &%&% $#$# $#$# $#$#
.--. .--. .--. &%%& &%%& $#('#$ &%%& $#('#$ $#('#$ $#('#$
('(' ('(' ('(' ('('
)(') *)(') *)(') *)(')
1 0*
**) **) **) **)
+*)+ ,+*)+ ,+*)+ ,+*)+
1,
,,+ ,,+ ,,+ ,,+
0/0/,+ 0/0/,+ 0/0/,+ 0/0/,+
0/210/ 0/210/ 0/210/ 0/210/
2112 2112 2112 2112
21 21 21 21
AABAA BAA BAA
ACABBADCA BBADCA BBADCA
CCBDCC BDCC BDCC
CDCD DCD DCD
<;<; <;<; <;<; >=>= >=>= ??>=>= @?@? @?@? @?@?
<;:9<;<;:9<; <;:9<; >=>= >=>= ??>=>= @?@? @?@? @?@?
:9:9:9:9 :9:9
87:98787:987 87:987
876587876587 876587
6556 6556 6556
465344653446534
T
343343343
434343
i=0
i=1
ccdcc dcc dcc
ddd
eceedcfe edcfe edcfe
effe ffe ffe
……†…… †…… †……
†††
‡…‡‡†…ˆ‡ ‡†…ˆ‡ ‡†…ˆ‡
‡ˆˆ‡ ˆˆ‡ ˆˆ‡
^]^] ^]^] __^]^] `_`_ `_`_ `_`_ baba baba baba
^]\[^]\[ _^]\[ `_ `_ `_ ba ba ba
\[\[\[\[ \[\[
ZYZY ZYZY ZYZY
ZYXWZYXW ZYXW
XWXWUXWXWU XWXWU
T
VVUVVUVVU
UVUVUV
i=2
qrq qrq qrq iji iji ghg iji ghg ghg ghg
rrq rrq jji jji hhg jji hhg hhg hhg
3 rqr
lklk lklk lklk lklk
2 1 0l
knm lknm lknm lknm
nmm nmnm nmnm nmnm
3 2 1n
popo popo popo popo
3 2p
ots pots pots pots
tss tsts tsts tsts
3t
vuvu vuvu vuvu vuvu
vu vu vu vu
€€ €€ €€ ‚‚ ‚‚ ƒƒ‚‚ „ƒ„ƒ „ƒ„ƒ „ƒ„ƒ
€~}€~} €~} ‚ ‚ ƒ‚ „ƒ „ƒ „ƒ
~}~}~}~} ~}~}
|{|{ |{|{ |{|{
|{zy|{zy |{zy
zyzywzyzyw zyzyw
T
xxwxxwxxw
wxwxwx
i=3
Figure 13: ‰‹ŠŒŽ‘“’•”–˜—™›šœ–žŽŸ”¡ ¢¤£Ÿ¥ ¦’§ŒŸ¨ i ’ª©« ŸŒ¬’­Ž®©¯’°’‹±ŸŒ¬’°’²Ž C £³Œ´©µ±¬Š©« ¦’ªŒ·¶Ÿ£Ÿ›¨ S ¸¹—˜–ºŠ¥—»š¼©¯–
¨½“޳– i ޳–Œ™¢¾Ž¿¸¹—˜–ºŠ½–ºŠŒÀ’ªŒ³šÁ“–ºŠœÂ¶¿–ºŠŒŽ³Š›£¦–Œ¬Ž³–⍩¯–ºŠ¶Ä£³›¨ S – C Å
bool progress = false ;
for ( int r =1; r <n +1; ++ r )
for ( int c =1; c <m +1; ++ c ) {
if ( floor [r ][ c ] != -1) continue ; // wall , or labeled before
// is any neighbor reachable in i -1 steps ?
if ( floor [r -1][ c ] == i -1 || floor [ r +1][ c ] == i -1 ||
floor [r ][c -1] == i -1 || floor [ r ][ c +1] == i -1 ) {
floor [ r ][ c ] = i ; // label cell with i
progress = true ;
}
}
if (! progress ) break ;
}
ÆÈǵɿÊÌËÂǵɟÍÏÎÐÑ͝ËÂÒÓʛÔÕËÂǵÉ
Ô×ÖµØÚÙÄËÂÛÜʛØÝÐÑÍÂɏÞßÊÌ͝ÉàÊÌÍâáÜɟҝÒãҙ˝ÍäБÛÜå›Ç¯ËÂÔ×ÊÌ͝æÈÐç͝è¾éëê˜ØÚÛ²ËÂÛ×БáÜá²ì“íÚæ¹É
ÍÂɬÐçèžËÂǵÉãèµÛÜÞßɟØÚÒîÛÜʛصÒïÔÜÍÂʛÞðҙmain
ËäБصèÚÐçÍÂèžÛñصÎÚÖ«ËòБصèóèµÊËÂǵÉÏè«ì¥ØÚБÞßÛÜÙÓБáñáÜÊôÙ¬ÐÑËÂÛÜʛؤé
@ A"
@ A"
@ A@
A"
AC @"
AC @"
AC @BAC
,- 5,"
B"
B"
B"
- $",- $"
% 6$"
% !"$% !"
# 7!"
# !# 8 9@"
4 "
@C"
@C"
@C"
A"
,- -"
, $"-, %"
$ %"
$ !"%$ #"
! #"
! #!
B A"
B A"
B A@CB 15 16 17 18 19
"
, -"
, $"-, %"
$ %"
$ !"
!'"
!
!
B
B
B CB
-"
%&"$ #"
"
#
#
"
C
"
C
C"
&! '"
&! '&#! 9 10C"
3 -"
, -"
, $"-, %"
$ %"
$ !"
B C"
B C"
B CB 14 15 16 17 18
&"%$ #"
& #"
& '&
'"
'"
&"'"
& '"
& '&
0&"
&)"
&)"
("'"
( '"
( '&)( 10 11 12 "
:; 13
: ;: ="
< 14
< =< ?"
> 15
> ?> 16 17
;"
="
?"
("
(
(
(
:
:
:
<
<
<
>
> ?>
"
)
"
)
)
"
;
"
;
;
"
=
"
=
=
"
?
?"
*) +"
*) +*() 11 12 13 :"
8; :"
8 :98; <"
+"
9"
9"
1*"
("
= <= >"
? >"
? >? 17 18
*"("
* ("
* +*
8 ;9"
8 98 = <"
+"
+"
9"
2
1
3
2
4
3
5
4
6
5
4 0"1"
0 1"
0 10 8
7
6
5
*"+"
* +"
* +*
8 9"
8 98
9"
2*"
*/"
*/"
8"
87"
."+"
. +"
. +*/. 10 11 12 9"
67 9"
6 9876 20 19 18 19
."/"
. /"
. /.
6 7"
6 76
7"
3."
.1"
.1"
65"
65"
0"/"
0 /"
0 /.10 9 10 11 7"
4 7"
4 7654 21 20 19 20
0"1"
0 1"
0 10
6
7
4 5"
4 54
5"
3"
9 10 3"
425"
42 35423 22 21 20 21
"
5"
3"
2 3"
2"32
3"
3"
2"23 23 22 21 22
8 9 2"
3"
2"3"
2"2
i = 23
Figure 14: ‰‹ŠŒ Ž‘“’•”–˜—™›š
–  ŽŸ”¾ ¢¤£³¥ ¦’ªŒ³¨ i = 23 Ž‘“’EDôŒ¬Ž –ºŠŒ «Á ŒŸš ³Œ £Ÿ©¯’•— ŒGFœ¢¤£³¥ ¦’ªŒ³¨ “© šF
–ºŠŒ ›£¬—°Á̗»š ©¯’¾¢¤£Ÿ¥ ¦’§ŒŸ¨ HÄ©½Ž³Š›£¦–Œ¬Ž³–©¯–ºŠ —˜Žž¥ ¦–î©“—°š ŒIF K J ³Ž –î©“£¦–˜—°šÁ¿¶Ÿ£³›¨ T “© šF
¶ç“’»’ª›¸È—°šÁ½©¢©¯–ºŠœÂL
¶ FµŒÄ±³£³ŒÄ©¯ŽÄ—»šÁ ’ש« ³Œ¬’­ŽNM¥Å
// read floor dimensions
int n ; std :: cin > > n ; // number of rows
int m ; std :: cin > > m ; // number of columns
// dynamically allocate twodimensional array of dimensions
// ( n +2) x ( m +2) to hold the floor plus extra walls around
int ** floor = new int *[ n +2];
for ( int r =0; r <n +2; ++ r)
floor [r ] = new int [m +2];
O IÉ PôË¬í¯æ¹ÉïÍÂɳБè ËÂǵÉRQÚÊôÊÌÍ ÎÚá×БؿÔÜÍÂÊ›Þ Ò™ËäБصèÚÐçÍÂè ÛñصÎÚ֫ˬéTS É·ÐçҝҝֵÞßÉ ËÂÇÚÐçËÃÛñËÃÛÜÒ å›ÛVU“ɳؿÍÂÊÑæòæ ÛÜÒîÉ
‘Ð ҏРҝÉXWôÖµÉ³ØµÙ³É Ê›Ô
ÙäÇÚÐçÍäБÙÄËÂɟÍÂÒ³íÃæ ǵɟÍÂÉ
Бصè
ҙËäБصèœÔ×ÊÌ͏ҝʛ֫ÍÂٳɞБصè ËäÐç͝å›ÉŸË¬í
nm
’S’
’T’
ÍÂɟεÍÂÉŸÒÉ³Ø ËÒ ÐžæÈБáñá˜í Бصè
Ð‘Ø ÉŸÞÀÎÚË ì ٳɳáÜá˜é½Æ¹ÇÚÉ®ÛÜØ«ÎÚÖ«ËZYÚáÜÉßÔ×ÊÌÍ¿Ê›Ö«Í ÛÜØµÛñËÂÛ×БáÃÉIP«Ð‘ÞÀÎÚáÜÉÀÔÜÍÂ’X’
ʛÞ
’-’
[ ÛÜå›Ö«ÍÂÉ \ æ¹Ê›ÖµáÜè ËÂǵɳØóáÜÊ Ê ] БÒÈÛÜØ [ Ûñå›ÖµÍÉ ê˜ÔôÊÌËÂǵɟ;ÙäÇÚÐçÍäБÙÄËÂɟÍÂÒ¡ÐçÍÂÉÃÔ×ʛֵØÚèãÛÜØã˝ÇÚÉ ÛÜØ«ÎÚÖ«Ë^˜ÊÌ;ÛÜԓËÂǵÉÕÛÜØ«ÎÚÖ«Ë ÎµÍÂɳޮÐçËÂÖ«ÍÂɟáñì_ ɟٳʛÞßɳҤɳÞÀÎµË ìa`Äí
æ¹Éàå›É³ØµÉŸÍäÐÑËÂÉàɳÞÀÎµË ìóٳɳáñáÜÒ³
é S¼ÇµÛÜáÜÉâ͝ɬБèµÛÜØµåÀËÂǵZ
É QÚÊôÊÌÍ ÎÚá×БؤíÚæ¹ÉëÎ Ö«Ë ËÇÚÉ ÐÑÎÚεÍÂÊÌεÍÂÛÜÐçËÂÉâÛñØ ËÂɳå›ÉÄÍÂÒ
ÛÜØ¯ËÂʿ˝ÇÚÉÏɳد˝ÍÂÛÜɳÒÈʛÔ
í ÐçØÚè æ¹ÉÏÍÂɟÞßɳb
Þ _ÉŸÍïËÂǵÉÏËÂÐçÍÂå›ÉŸËÈΠʛҝÛñ˝ÛÜÊ›Ø Ô×ÊÌÍòá×Ðç˝ɟͬé
floor
// target coordinates , set upon reading ’T ’
int tr = 0;
int tc = 0;
//
//
//
//
//
assign initial floor values from input :
source :
’S ’ - >
0 ( source reached in 0 steps )
target :
’T ’ - >
-1 ( number of steps still unknown )
wall :
’X ’ - >
-2
empty cell : ’ - ’ - >
-1 ( number of steps still unknown )
8 12
------X - - - - -XXX - -X - - - - --SX - - - - - - - ---X - - -XXX - ---X - - -X - - - ---X - - -X - - - ---X - - -X -T - -------X - - - -
Figure 15: 𥢤”–¾¶‘›£È£ŸŸÁ›£Ÿ©“¨
±Ÿ›£¬£ŸŒ¬Ž™¢ ›šF“—°šÁ –ó–ºŠŒ Œµ©“¨¿¢¾’§Œ Â¶
—°Á›” £³Œ
for ( int r =1; r <n +1; ++ r)
for ( int c =1; c < m +1; ++ c ) {
char entry = ’- ’;
std :: cin > > entry ;
if
( entry == ’S ’) floor [ r ][ c ] = 0;
else if ( entry == ’T ’) floor [ tr = r ][ tc = c ] = -1;
else if ( entry == ’X ’) floor [ r ][ c ] = -2;
else if ( entry == ’ -’) floor [ r ][ c ] = -1;
}
O Ê¦æ æ¹ÉãБèµèžËÂǵÉÏҝ֫͝ÍÂʛֵصèµÛÜØµå¿æÈБáñáÜҹБÒÈÒÉ³Ø ËÛÜØµÉ³áÜÒ³é
// add surrounding walls
for ( int r =0; r <n +2; ++ r)
floor [r ][0] = floor [ r ][ m +1] = -2;
for ( int c =0; c <m +2; ++ c)
floor [0][ c ] = floor [ n +1][ c ] = -2;
O ÉIPôË Ù³Ê›ÞßɟҾËÂǵÉÃޮБÛÜØÏáÜÊôÊÌÎãËÂÇÚÐçˤæ¹ÉÕÇÚÐXU“É ÐçáñÍÂɬБè«ìÓèµÛÜҝٟÖÚÒîҝɳè Ð _ ÊU“ÉÌé ê»Ë á×Ð _ ɳáÜҾБáÜáÌ͝ɬБÙäÇÚÐ _ÚáÜÉ
ٳɳáñáÜÒ³íÑҝÊÈËÇ ÐÑ˾æ¹ÉÃÊ µ_ ËäБÛÜØãÐïá×Ð _ ɟáÜÛÜØµå¹Ð‘Ò¤ÛÜØ [ ÛÜå›Ö«ÍÂÉ é [ ÍÂÊ›Þ ËÂǵÛÜÒ¤á×Ð _ ɳáñÛÜØµå«íŸæ¹ÉÕÞ¿ÖµÒîˤصÊÑæ ÉGP¥ËÍäÐçٟË
ËÂǵɷÒîÇÚÊÌÍîËÂɳÒîËÕÎÐÑËÂÇÀÔÜÍÂʛÞ
ËÂÊ é ÒÕÉI¥P ÎÚá×ÐçÛÜØµÉ³èÀÐ _Ê U“ÉÌí¯ËÂǵÛÜÒÃ٬БØL_ ÉòèÚʛصÉ_ôìÔ×ʛáÜáÜʦæ ÛÜØµåÏÐãÙäÇÚБÛÜØ
S T
Ê›Ô Ðçè™Ð‘ÙŸÉ³Ø ËÏٳɳáñáÜÒ æ Ûñ˝ǽèµÉ³ÙŸÍÉ¬Ð‘ҝÛÜØµå á×Ð _ ɟáÜÒ³é [ ÊÌÍãÉ “U ɟ͝ì ٳɟáÜá ʛؽËÂǵÛÜÒ Î ÐçËÂÇ^˜ÉIP¥Ù³ÉŸÎµË `Äíæ¹ÉàÎÚÖ«Ë
ËÂÇµÉ ÛñØ ÂË É³å›ÉÄÍ
ÛÜØ ËÂÊ ËÂÇµÉ Ù³ÊÌÍîÍÂɳÒîΠʛصèµÛÜØµå
ɳد˝͝ì ˝ÇÚÛñÒâБáñáÜÊÑæ·ÒÓÖÚÒÏËÂÊóè«Íäгæ ÂË SǵɏΠÐçËÂÇ ÜÛ Ø
−3
floor
ËÂǵÉàÒÖ Ú_ ҝÉXW ÖÚÉŸØ ËÓʛ֫˝ÎÚ֫ˬé ê˜Ô صÊÀÎ ÐçËÂÇ æÈÐ‘Ò Ô×ʛֵصè ^»ÊÌÍ ÛÜÔ ËÂǵɟÍÂÉëÛñÒ ØÚÊÀËÂÐçÍÂå›ÉŸËG`´í ËÂÇµÉ _ Ê è«ìóÊ›Ô ËÂǵÉ
ÒîËäÐçËÂɟÞßÉ³Ø Ë¹ÛÜØ ËÂǵÉãÔ×ʛáÜáñÊÑæ·ÛÜØµåàÙ³ÊôèµÉÏÔÜÍäБå›ÞßɳدËòÛñÒ ^˜ÙŸÊÌ͝ÍÂɳٟ˝áñìa`ïØµÊÌËòÉGP«É³Ù³Ö«ËÂɟè ÐçË çÐ áÜá˜é
while
// mark shortest path from source to target ( if there is one )
int r = tr ; int c = tc ; // start from target
while ( floor [r ][ c ] > 0) {
int d = floor [r ][ c ] - 1; // distance one less
floor [r ][ c ] = -3; // mark cell as being on shortest path
// go to some neighbor with distance d
if
( floor [r -1][ c ] == d ) - - r;
else if ( floor [r +1][ c ] == d ) ++ r;
else if ( floor [r ][ c -1] == d ) - - c;
else
++ c ; // ( floor [r ][ c +1] == d )
}
[ ÜÛ ØÚБáÜá²ì“íËÂÇµÉ Ê›Ö«ËÎÚÖ«Ë æ¹ÉÞ®ÐçνËÂǵɏÛñØ ËÂɳå›ÉÄÍâɳد˝ÍÂÛÜɟÒãʛÔ
_ Б٠] ËÂʞÙäÇÚÐçÍäБÙÄËÂɟÍÂÒ³í¾æ ǵɟÍÂÉ
floor
_ ɳٳʛÞßɳÒ

í ʛ֫ÍÈÎÐÑËÂÇóÒîìôÞb_ ʛá»é‹ê˜ØµÒÉŸÍîËÂÛÜØµå
ÐçËÈËÂǵÉãÍÂÛñå›Ç ˹ÎÚá×БٳɳҟíÚæ¹ÉÏÊ _µËäБÛÜØžÐÙ³ÊÌÎ ì
−3
ʛÔËÂǵÉòÛÜØ«Î Ö«ËÚQ ’o’
ÊôÊÌÍ¬í“æ Ûñ˝ǏËÂǵɷÒîÇÚÊÌÍîËÂɳÒîËÕÎÐÑËÂÇ®ÐçεΠɬ’\n’
Ðç͝ÛÜØµåãÛÜØÀБèµèÚÛ²ËÂÛÜʛؤé"S É·Þ¿ÖÚÒ™Ë Ð‘áñҝÊâØµÊÌË Ô×ÊÌ͝å›ÉŸË
ËÂʏèÚɟáÜɟËÂÉÓËÂǵÉãè«ìôØ ÐçÞßÛÜ٬БáÜá²ìÀБáñáÜÊôÙ¬ÐÑËÂɳè Ðç͝Íäгì¥ÒÈÛÜØžËÇÚÉÏɳصè¤é
// print floor with shortest path
for ( int r =1; r <n +1; ++ r ) {
for ( int c =1; c < m +1; ++ c)
if
( floor [r ][ c ] == 0)
std :: cout
else if ( r == tr && c == tc ) std :: cout
else if ( floor [r ][ c ] == -3) std :: cout
else if ( floor [r ][ c ] == -2) std :: cout
else
std :: cout
std :: cout < < "\n ";
}
<<
<<
<<
<<
<<
’S ’;
’T ’;
’o ’;
’X ’;
’-’;
// delete dynamically allocated arrays
for ( int r =0; r <n +2; ++ r)
delete [] floor [r ];
delete [] floor ;
return 0;
˜ê Øó٬БÒîÉâÊ›Ô ›Ê Ö«ÍòÛÜØµÛñËÂÛ×БáÉIPµÐ‘ÞÀÎÚáÜɑíôËÂǵÉãʛ֫˝ÎÚÖ«ËòáÜÊôÊ ]ôÒÈáñÛV]“ÉãÛñØ [ ÛÜå›Ö«ÍÂÉ é ÍÂʛåÌÍÂБÞ
ËÂǵÉÏٳʛÞÀÎÚáÜɟËÂÉ Ò ʛ֫ÍÂٟÉâÙ³Ê èÚɑé
ooooooX - - - - oXXX -oX - - - - ooSX - oooooo ---X - - -XXXo ---X - - -X -oo ---X - - -X -o - ---X - - -X -T - -------X - - - -
Figure 16: Ӕ–ñ¢¤”–ϐ¶¹£³ŸÁÌ£Ÿ©“¨
# include < iostream >
›š –ºŠŒ¿—»š¥¢¤”–ãÂ¶
—°Á̔£³Œ ҝǵÊÑæ·Ò
int main ()
{
// read floor dimensions
int n ; std :: cin > > n ; // number of rows
int m ; std :: cin > > m ; // number of columns
// dynamically allocate twodimensional array of dimensions
// ( n +2) x ( m +2) to hold the floor plus extra walls around
int ** floor = new int *[ n +2];
for ( int r =0; r <n +2; ++ r)
floor [r ] = new int [m +2];
// target coordinates , set upon reading ’T ’
int tr = 0;
int tc = 0;
// assign initial floor values from input :
// source :
’S ’ - >
0 ( source reached in 0 steps )
// target :
’T ’ - >
-1 ( number of steps still unknown )
// wall :
’X ’ - >
-2
// empty cell : ’ - ’ - >
-1 ( number of steps still unknown )
for ( int r =1; r <n +1; ++ r)
for ( int c =1; c < m +1; ++ c ) {
char entry = ’-’;
std :: cin > > entry ;
if
( entry == ’S ’) floor [ r ][ c ] = 0;
else if ( entry == ’T ’) floor [ tr = r ][ tc = c ] = -1;
else if ( entry == ’X ’) floor [ r ][ c ] = -2;
else if ( entry == ’ -’) floor [ r ][ c ] = -1;
}
// add surrounding walls
for ( int r =0; r <n +2; ++ r)
floor [r ][0] = floor [ r ][ m +1] = -2;
for ( int c =0; c <m +2; ++ c)
floor [0][ c ] = floor [ n +1][ c ] = -2;
// main loop : find and label cells reachable in i =1 ,2 ,... steps
for ( int i =1;; ++ i ) {
bool progress = false ;
for ( int r =1; r < n +1; ++ r )
for ( int c =1; c <m +1; ++ c ) {
if ( floor [r ][ c ] != -1) continue ; // wall , or labeled before
// is any neighbor reachable in i -1 steps ?
if ( floor [r -1][ c ] == i -1 || floor [ r +1][ c ] == i -1 ||
floor [r ][c -1] == i -1 || floor [ r ][ c +1] == i -1 ) {
floor [r ][ c ] = i ; // label cell with i
progress = true ;
}
}
if (! progress ) break ;
}
// mark shortest path from source to target ( if there is one )
int r = tr ; int c = tc ; // start from target
while ( floor [r ][ c ] > 0) {
int d = floor [r ][ c ] - 1; // distance one less
floor [r ][ c ] = -3; // mark cell as being on shortest path
// go to some neighbor with distance d
if
( floor [r -1][ c ] == d ) - - r;
else if ( floor [r +1][ c ] == d ) ++ r;
else if ( floor [r ][ c -1] == d ) - - c;
else
++ c ; // ( floor [r ][ c +1] == d)
}
// print floor with shortest path
for ( int r =1; r <n +1; ++ r ) {
for ( int c =1; c < m +1; ++ c )
if
( floor [r ][ c ] == 0)
std :: cout
else if ( r == tr && c == tc ) std :: cout
else if ( floor [r ][ c ] == -3) std :: cout
else if ( floor [r ][ c ] == -2) std :: cout
else
std :: cout
std :: cout < < "\n ";
}
<<
<<
<<
<<
<<
’S ’;
’T ’;
’o ’;
’X ’;
’-’;
// delete dynamically allocated arrays
for ( int r =0; r <n +2; ++ r)
delete [] floor [r ];
delete [] floor ;
return 0;
}
Program 17: ¢¤£³ŸÁ“Ž Ž³Š›£¦–Œ¬Ž³– ¢©¯–ºŠÅ
2.6.12 Beyond arrays and pointers
·ÍÍÂЬìôÒßÐçÍÂÉ U“ÉÄ͝ì ֵҝɳÔ×Öµá Ô×ÊÌͮޮБدì ËäÐ‘Ò ]ôҮБصè ÐçáÜáÜʦæðÖµÒ Ë Ê ÒÊ›áVU“ÉóØµÊ›Ø ËîÍÂÛVU¥ÛÜБáÈεÍÂÊ _ÚáÜɟÞßҏáÜÛ ]“É
YÚØµèÚÛñØÚå ҝǵÊÌ͝ËÂɳÒîËÓÎ ÐçËÂÇµÒ ÛñØ ËÇÚÉëεÍÂÉIU¥ÛÜÊ›ÖµÒ ÒÉ³ÙÄËÂÛÜʛؤé [ ÍÂÊ›Þ Ð ÂË ÇµÉ³ÊÌÍÂÉÄËÂÛÜ٬Бá¾Î ʛÛÜØ¯Ë Ê›Ô U¥ÛÜɟæâí Ðç͝ÍÂЬìôÒ
ÐçÍÂÉÏÛÜØóÔªÐçٟËò˝ÇÚÉÏʛصáñì®Ù³Ê›Ø¯ËäБÛÜØµÉŸÍÂÒ¹ËÂÇÚÐç˹æ¹ÉÏØÚɟɳè¤é
Ø ËÂǵÉÏÊÌ˝ÇÚÉÄÍòÇÚБصè¤í¥ËÂǵɟÍÂÉÏÐç͝ÉÓË æ¹Ê¿Þ®Ð‘ÛÜØ®è«Íäгæ_ Б٠]¥Ò¹Ê›Ô¡Ðç͝ÍäгìôÒÈËÂÇÚÐçËïæ¹É æÈБد˹ËÂʿ͝ɳ٬ÐçÎÚÛñË
Öµá×ÐçËÂÉÓǵɟÍÂɑé
دì¿Ðç͝Íäгì“í“É U“É³Ø ÛÜÔ Û²Ë ÛÜÒ èµìôØÚБÞßÛÜ٬БáñáñìãБáÜáÜÊ Ù¬ÐçËÂɳè¤íÌÇÚБÒÃÐY P«É³èáÜɳصåÌËÂǤé
˜ê Ø®ÊÌËÂǵɟÍïæ¹ÊÌÍÂèµÒ³í¯æ¹É Ç ÐXU“ɷ˝Ê]ôصÊÑæ
èµÉ YÚØµÛÜØµåëÊÌ͹è«ì¥ØÚБÞßÛÜÙ¬ÐçáÜáñì БáñáÜÊôÙ¬ÐÑËÂÛÜØµåâÐçØ ÐÑ͝ÍäгìßǵÊÑæ
³
˜
Œ
ç
¶
›

³
£
Œ
ޮБدì ɳáÜɳÞßÉŸØ ËÂÒ æ¹É¿ØµÉ³É³è ËÂÊ ÒîËÂÊÌ͝ɿÛñØ Ûñˬé ÔÜ˝ɳؤí¡ËÂǵÛÜÒ ÛÜÒÓֵثÍÂɬБáñÛÜÒîËÂÛÜّé [ ÊÌÍÏÉIPµÐ‘ÞÀÎÚáÜɑíÛÜØ ÒîʛÞßÉ
ÐçεÎÚáÜÛÜÙ¬ÐÑËÂÛÜÊ›Ø æ¹ÉâÞßÛÜå›Ç ËÈØµÉ³É³è ËÂÊÀÒî˝ÊÌÍÂÉàÐ ÒÉ WôֵɳصٳÉàÊ›Ô ÛÜØ«ÎÚÖµËòØôÖµÞ_ ɟÍÂҟí _ÚÖ«Ë·æ¹ÉëèµÊ›Ø Ë]¥ØµÊÑæ ÛÜØ
Бè U‘БصٳÉãǵʦæ ޮБدìߨôÖµ
Þ _ ɟÍÂÒïæ¹É æ ÛÜáñáå›ÉŸË¬é Ë ìôÎÚÛÜ٬БáîҝʛáÜÖ«ËÂÛÜʛØ
àÛÜÒïËÂÊ¿è«ì¥ØÚБÞßÛÜÙ¬ÐçáÜáñìÐ‘áÜáÜÊ Ù¬ÐçËÂÉ
Ð U“ÉŸÍîì á×ÐçÍÂå›ÉâÐç͝Íäгì Бصè ÖµÒîË ÇµÊÌÎ ÉëËÂÇÚÐçËòËÂǵÉàҝÉXWôÖµÉ³ØµÙ³É YµËÂÒ ÛñØ¾é·ÆÈǵÉëεÍÂÊ _ÚáÜɳÞßÒÈæ Ûñ˝ÇóËÂǵÛÜÒ Ð‘Øµè
Ð _ ɟ˝ËÂÉÄÍ ^ _ÚÖ«ËÈÒîËÂÛÜáñá Ù³Öµb
Þ _ ÉÄÍÂҝʛÞßÉ `‹ÒÊ›áñֵ˝ÛÜʛ؞ÐÑÍÂÉâʛ֫ËÂáÜÛñØÚɟè ÛÜ
Ø P¥ÉŸÍÂÙ³ÛñÒÉ é
™ÍÂɳБá ÒîʛáÜÖ«ËÂÛÜÊ›Ø ÛÜÒ Î Ê›ÒÒîVÛ _ÚáÜÉ Ûñ
Ø ËÇµÍÊ›ÖÚå›Ç ËÂǵÉóֵҝɞʛÔ
鼯¹ÇÚÉŸÒÉ ÐçÍÂÉžÙ³Ê›Ø ¥
D
Ä
Œ
¬
±

–
›

¦
£
Ž
ËäБÛñØÚÉÄÍÂÒòÔÜÍÊ›Þ ËÂǵÉÏÒîËäБصèÚÐçÍÂèžáÜVÛ _µÍäÐç͝ì ËÂÇÚÐç˷ٟʛb
Þ _ÚÛÜØµÉ ËÂǵÉÏÙ³á×БҝÒîÛÜ٬Бá¾Ðç͝ÍÂЬì Ô×ֵصٟËÂÛÜʛØÚБáñÛñË ì ^ºÐ‘صèóÛñ˝Ò
É Ù³ÛÜɳصٟì `ïæ·ÛñËÂÇ ËÇÚÉÓΠʛҝÒîVÛ _ÚÛÜáÜÛñË ìÀʛԡåÌÍÂʦæ ÛÜØµå ^ºÐ‘صèžÒÇ«ÍÂÛñaØ ]ôÛÜØµå `‹ÛÜØžáñɳصåÌËÂǤ
é ÃɳÙÄËÂÊÌÍÂÒÈÙ¬Ð‘Ø _ ÉÏÛÜ
Þ ÎÚáÜɳÞßɳدËÂɳèßʛØßËÂÊÌΠʛԾÐç͝ÍäгìôÒ³í«Ð‘صèßËÂǵɟìßÇÚXÐ U“É ҝʛÞßɟËÂǵÛÜØµåãҝÛÜÞßÛÜá×ÐÑÍÃ˝ÊëËÂÇµÉ ÞßɳÙäÇÚБصÛÜÒÞ Ê›Ö«ËÂáñÛÜØµÉ³è
ÛÜ
Ø P«ÉŸÍÂٟÛÜÒÉ N_ÚÖÚÛñáñË ÛñØ «
é ÕɟٟËÂÊÌÍÂҮБáñҝÊÝá×Ðç͝å›É³áñìœÍÉ³ÞßÊ U“É ËÂÇµÉ ØÚÉŸÙ³É³ÒÒÛ²Ë ì ʛÔÓæ¹ÊÌÍ ]¥ÛÜØµåÝæ Û²ËÂÇ
ΠʛÛÜØ¯ËÂɟÍÂҟ
é S Éãæ·ÛÜáÜáå›ÉŸËÈËÂb
Ê U“ɳٟËÂÊÌÍÂÒ ^ºÐ‘Øµè ˝ÇÚɟÛñÍò͝ɬБáÜÛ ³ÐçËÂÛÜÊ›Ø `Õá×ÐÑËÂɟÍÈÛÜØ ˝ÇÚÛñ
Ò _ Ê Ê ]é
Arrays have fixed length.
ƹÇÚÉÈÖµÒÂБå›ÉÈʛÔÊ›Ö«Ë˜Ê›Ô _ ʛֵصèÀÐçÍîÍäгìÛñØÚèµÛÜÙŸÉ³Ò ÛÜÒ ØÚÊÌËÃèµÉŸËÂɟٟËÂɳèÀÛñØàíôÐçØÚè
ËÂǵɷҝБÞßɹÇÚʛáñèÚÒÃÔ×ÊÌ͋΍ʛÛÜØ ËÂÉÄÍÂÒÃ˝ÊëБèµè«ÍÂɳҝÒîɳҋæ ǵɟ͝ÉòصÊâεÍÂʛåÌÍäÐçÞ Ê _ ɳٟˋáÜÛVU“ɳҳéS¼ÛñËÇ ÒÊ›ÞßÉÈÙ¬ÐçÍÂɑí
ì“Ê›Ö Ù¬Ð‘Ø æ·ÍÂÛñ˝ÉëҝޮБáÜá¾ÎµÍÂʛåÌÍäБÞßÒÈËÂÇÚÐçË ÖµÒÉ¿Ðç͝ÍäгìôÒÓБصè ΠʛÛñØ ËÂÉŸÍÒ ÛÜØ½Ð Ù³ÊÌ͝ÍÂɟٟËÏޮБصØÚÉÄͬí _ÚÖ«ËÓÛÜØ
ٳʛÞÀÎÚáÜIÉ P®ÎµÍÂʛåÌÍÂБÞßÒ³í¥ËÂǵÛÜÒòÛÜÒòصÊÌ˷ɬБÒîìžÐçË ÐçáÜá˜
é É _ÚÖµå›å›ÛÜØµå¿ÔªÐ‘Ù³ÛÜáÜÛ²ËÂÛÜÉ³Ò¹Ê›Ô ÞßÊ èÚÉÄÍÂØžÙ³Ê›ÞÀÎÚÛÜáñɟÍÂҹ٬БØ
ǵɳáñξí _ÚÖ«ËÏÉ U“ɳؽæ¹ÉŸáÜá ˜ËÉ³ÒîËÂɳè½Ð‘صè ÔÜÍÂXÉ WôֵɳدËÂáñì ֵҝɳè½á×ÐçÍÂå›ÉãÎÚ͝ʛåÌÍäБÞßÒ èµÊ®ØµÊÌËÓØÚɟٳɳҝÒÂÐÑÍÂÛÜáñì å›ÉŸËÓÛ²Ë
ÍÂÛÜå›Ç¯Ë¬é ê˜ØÀԪБÙÄˬíôҝʛÞßɹΠɳÊÌÎÚáÜÉ ^˜áÜÉÄ!Ë ÒÕ٬БáÜá«ËÂÇµÉ³Þ Ðç˝ËäБ٠]“ÉŸÍÒ `ÕÐç͝ɷޮР]ôÛÜØµåã
Ð _ÚÖÚÒîÛÜØµÉ³ÒÒ‹Ê›Ô GÉ P¥ÎÚáÜʛÛñËÂÛñØÚå
εÍÂʛåÌÍäБÞßÞßÛñØÚåÏɟ͝͝ÊÌÍÂÒ ÍÂɳá×ÐÑËÂɳè®ËÂÊ¿Ðç͝Íäгì¥Ò¹ÐçØÚè®Î ʛÛÜØ¯ËÂɟÍÂҋÛÜØ ÊÌ͝èÚÉÄÍïËÂÊ ÙŸÍÂɬÐç˝ÉÏÞ®ÐçáÜÛÜÙ³ÛÜÊ›ÖµÒ ÒÊ›ÔÜË æÈÐçÍÂɑé
" Ö«ÎÚ΍ʛҝÉëËÂÇÚÐç˷˝ÇÚÉëÐç˝ËäБ٠]“ÉŸ
Í ]ôصÊÑæ·Ò·ËÂÇÚÐçË ÒîʛÞßÉãεÍÂʛåÌÍäБ$
Þ #¼ËÇÚÛñaØ ]®Ê›Ô ÐçØ ÊÌ΍ɟÍäÐçËÂÛñØÚå Òîì¥Òî˝ɳÞ
ÍÂʛ֫ËÂÛÜØµÉ¿ÊÌÍàЮæ¹É _ÚÒÉŸÍ U“ÉŸ%Í # ޮЬì ^˜ÖµØµÛÜØ¯ËÂÉ³Ø ËÛÜʛØÚБáÜáñì `Èæ·ÍÂÛ²ËÂɏÛñصÎÚÖ«Ëãè ÐÑËä
Ð _ÉŸì“ʛصèÝËÂÇµÉ _ ʛֵصèµÒâʛÔ
Ð‘Ø Ðç͝Íäгì“&
é ÖÚÉÀËÊ ËÂǵL
É U“Ê›Ø O É³ÖµÞ®Ð‘ØµØ ÐÑÍÂÙäÇÚÛ²ËÂɳٟËÂÖ«ÍÂɑí ˝ÇÚÉßÎ ÐçÍË Ê›ÔïËÂǵɮޮБÛÜØ ÞßɟÞßÊÌ͝ì _É³ÛÜØµå
БٳٟÛÜèµÉ³Ø ËäÐçáÜáñì ÞßÊôèµVÛ YÚɳè ÛñØ ËÂǵÛÜÒ æÈгì ޮгì Ù³Ê›Ø ËäÐçÛÜØ ËÂÇµÉ Ð‘ÙŸËÖ ÐçáòεÍÂʛåÌÍäÐ‘Þ ÛÜØµÒî˝ÍÂֵٟ˝ÛÜÊ›ØµÒ³é Æ¹ÇµÉ
Ðç˝ËÂБ٠]“ÉŸÍëޮгì ËÂÇµÉ³Ø _É Ð _ÚáÜÉ ËÂÊ ÎÚ͝ɟΠÐçÍÂÉÀÐçØÝÛÜØ«ÎÚÖµËÓËÂÊ ËÂǵɿεÍÂʛåÌÍÂÐ‘Þ ÛÜØÝҝֵÙäÇ Ð®æÈгì ËÂÇÚÐçËÓËÂǵÉ
εÍÂʛåÌÍäÐ‘Þ ÞßÊôèµVÛ YÚɳÒÓÛñ˝ҝɳáÜԋ˝ÊóèµÊóæ ÇÚÐçËÂÉ U“ÉÄÍâËÂǵÉÀÐÑ˝ËäБ٠]“ÉŸÍëæÈÐçØ ËÂÒãÛñËâËÂʞèÚÊ«é®Æ¹ÇµÛÜÒâÞßÊ èµVÛ YÚÙ¬ÐçËÂÛÜʛØ
ÍÂÖµØµÒ æ ÛñËÂÇó˝ÇÚÉ ÒÂÐçÞßÉàÐ‘Ù³Ù³ÉŸÒÒ ÍÂÛÜå›Ç ˝ÒÓÐ‘Ò ËÂÇµÉ ÊÌÍÂÛÜå›ÛÜØÚБá¾Ê›ØµÉÌí¤Ð‘Øµè ˝ÇÚÉŸÒÉ ÞßÛÜå›Ç Ë _ É Ð‘èµÞßÛÜØµÛÜÒî˝ÍÂÐçËÂÊÌÍ
ÍÂÛÜå›Ç¯ËÂÒ¹ÛÜØžËÂǵÉÓæ¹ÊÌÍÂÒîËò٬Бҝɑé
ê˜Ø ËÂǵÛÜÒ æÈЬì“í Ð‘Ø Ðç˝ËÂБ٠]“ÉŸÍÀٳʛֵáÜ'
è îÇÚÛ îÐçÙ ](½ËÂÇµÉ Ù³Ê›ÞÀÎÚÖµËÉŸÍ ËÂÇÚÐçˏ͝ÖÚØµÒ¿ËÂÇµÉ ÎµÍÂʛåÌÍäÐçÞ í‹Ð‘صè
ÒÖ _ÚҝXÉ W ÖÚÉŸØ ËÂáñì ÞßÛÜÒîÖÚÒîÉÏÛ²ËòÔ×ÊÌÍ·ÛÜáÜáÜɟå“БáÐ‘ÙÄËÂVÛ U¥Û²ËÂÛÜɳÒïáÜÛ ]“ÉãҝɟØÚèµÛÜØµå¿ÒîÎ Ð‘Þ í¥ÊÌÍÈÎ ÐçÍäБáñ(ì ³ÛÜØµåàæ¹É _ ҝÉÄÍ U“ÉŸÍÂÒ
_ô
ì QÚÊôÊ èµÛÜØµå ˝ÇÚÉŸÞ æ·ÛñËÂÇ ÍXÉ WôֵɳÒî˝ҳé
[ ÊÌÍïֵҋËÂÇÚÐçˋæ¹É·ÐçÍÂÉ ØµÊÌ
Ë ^»ì“ÉŸGË `ÃεÍÂʛÔ×ɟҝҝÛÜʛØÚБáµÎµÍÂʛåÌÍäБÞßÞßɟ͝ҳíÌËÂÇµÉ ÒÉ³ÙŸÖµÍÛñË ìßБÒîÎÉ³ÙŸË ÛñÒ áÜɳҝÒÕʛԤÐ
Ù³Ê›ØµÙ³ÉŸÍØ ÇµÉŸÍÂɑ*
é )žÊÌÍÉ ÛÜÞÀÎ ÊÌ͝ËäÐçØ ËÃÛÜҋËÂÇÚÐçËÕεÍÂʛåÌÍäБÞßÞßÛÜØµåÓɟ͝͝ÊÌÍÂÒ èµÖµÉ ËÂÊàÛÜÞÀεÍÂÊÌΠɟÍÕÖµÒÉ Ê›Ô¾Ðç͝ÍÂЬìôÒ
БصèóΠʛÛÜØ¯ËÂɟÍÂÒÈÙ¬Ð‘Ø _É U“ɟ͝ìžÇÚÐçÍÂèžËÂÊ Y صè ÐçØÚè ʛÔÜ˝ɳØóÍÂɳޮБÛñ؞ֵصèÚÉÄËÂɳٟËÂɟè ÖÚØ¯ËÂÛÜá ËÂǵɟì ҝֵèµèÚɟØÚá²ì
ÍÂɳÒîÖÚá²ËÓÛÜØ½Ò™ËÍäБصå›É Бصè ҝɳɳÞßÛÜØµå›áñìžÛÜØµIÉ P¥ÎÚáÜÛñ٬Р_ÚáÜÉ _É³ÇÚKÐ UôÛÜÊÌÍ Ê›Ô ËÂǵÉàÎÚ͝ʛåÌÍäÐ‘Þ é áÜÒîÊßÇÚÉÄÍÂÉÌí¤ÖµÒÛÜØµå
U“ɳٟ˝ÊÌÍÂÒëÛÜØµÒîËÂɳБè ʛԹÐç͝ÍäгìôÒâǵɳáñÎÚÒ³í ÒîÛÜØµÙ³ÉËÂǵɟ͝ÉßÐçÍÂÉÞ®Ð‘Ø ì Î ÊÌËÂÉŸØ ËÂÛ×ÐçáÃÉÄ͝ÍÂÊÌÍÂÒâ͝ɳá×ÐçËÂɟèÝËÂÊ Ðç͝ÍÂЬìôÒ
БصèžÎ ʛÛñØ ËÂÉŸÍÒ¹ËÇ ÐÑËÈì“Ê›Ö ÒîÛÜÞÀÎÚáñìÀÙ¬ÐçØÚصÊÌËòޮР]“É æ ÛñËÇ U“ɳٟ˝ÊÌÍÂÒ³é
Arrays are insecure.
O ¦Ê æ ì“Ê›Ö Þ®Ð³ì ‘Ð Ò ] æ ¯Ç ì æ¹ÉëÇÚÐXU“ÉëÛÜØ¯ËÍÂÊ èÚֵٳɟè Ðç͝ÍäгìôÒ Ð‘ØµèóΠʛÛÜØ¯ËÂɟÍÂÒ·ÐçË
БáÜáæ·ÇµÉ³ØžËÂǵɟÍÂÉâÐçÍÂÉÏÞßÊÌÍÂÉQÚÉIP«ÛV_ÚáÜÉÏБصè ÂÒ Ð‘Ô×ÉŸÍ ‘Ð áñËÂÉŸÍØ ÐÑËÂÛVU“ɳҳé·ÉÄÍÂÉâÐÑÍÂÉÏ˝ÇÚÉÓËÂÇ«ÍÂɳÉÏÍÂɬБÒîʛØÚҟé
Why arrays, after all?
é ·ÍîÍäгì¥Ò Бصè ΠʛÛÜØ¯ËÂɟÍÂÒ ÐçÍÂÉ ËÂÇµÉ ÒÛñÞÀÎ áñɳÒîË¡ÞßÊôèµÉ³áÜҡʛÔÚÛñÞÀÎ ÊÌ͝ËäБد˾ÒîËäБصèÚÐçÍÂè áÜÛV_µÍäÐÑ͝ìâٟʛØÚٟɟεËÂÒ
^˜ÙŸÊ›Ø ËäБÛñØÚÉÄÍ·ÐçØÚèžÛñËÂɟÍäÐÑËÂÊÌÍG`Äé
Ø ÉŸÉ³è Ë Ê èÚÛñҝٳֵҝÒàÒîìôØ ËäБÙÄËÂÛÜ٬Бá
\ é·ØµáÜÛ ]“É U“ɳٟ˝ÊÌÍÂÒ³íÃÐç͝ÍäгìôÒëÙ¬Ð‘Ø _ ÉÀÛÜØ¯ËÍÂÊ èÚֵٳɟèÝæ ÛñËÂǵʛ֫Ëâ˝ÇÚÉ Ú
Бصè½ÒÉ³Þ®Ð‘دËÂÛÜ٬Бá БÒîΠɟٟËÂÒÓÊ›Ô Ô×ֵصٟËÂÛÜʛصÒÓБصè ٟá×Ð‘ÒÒÉŸÒ »^ ËÇ ÐÑË æ¹¿
É ÒîÛÜÞÀÎÚáñìžèµÊ›Ø ËÏÇÚÐXU“É
ÐçËòʛ֫ÍÈèÚÛñÒîΠʛÒÂБá¾Ðç˹ËÂǵÛÜҹΠʛÛÜØ¯ËG` éÈê˜ØÝÊÌ͝èÚÉÄÍâËÂÊ ÍÂɬБáÜá²ì½ÖµØµèµÉŸÍÂÒîËÂБصèÝá×ÐçËÂÉÄÍâǵʦæ ҙËäБصèÚÐçÍÂèÝáÜÛ _ÚÍÂÐç͝ì ٳʛدËäБÛÜØµÉŸÍÂÒãБصèÝÛñ˝ɟÍäÐçËÂÊÌ͝Ò
Ðç͝ÉÏÍÂɳБáÜ۳ɟè¾í«Û²ËòÛñÒòصɳٳɟҝÒÂÐç͝ì ËÂÊb¥] صÊÑæ Ð 
_ ʛֵËòÐçÍîÍäгì¥ÒòБصèžÎ ʛÛÜØ¯ËÂɟÍÂÒ³é
ÆÈǵÉÈËäÐ “] É ˜ÇÚʛÞßÉÈÞßɳҝҝБå›ÉòÇµÉŸÍÉ ÛÜÒ ËÂǵÛÜÒ ÛñËÕÛÜÒÃÛÜÞÀÎ ÊÌ͝ËÂÐ‘Ø Ë ËÂÊãå›ÉŸË ÔªÐçÞßÛÜáÜÛ×ÐçÍ æ ÛñËÂÇ¿ËÂǵÉ
_ ɳǵÛÜØµè Ðç͝ÍäгìôÒòÐçØÚè ΠʛÛÜØ¯ËÂɟÍÂÒ³í _ Ö«ËÈÛñ˹ÛÜÒ¹áÜɟҝҹÛÜÞÀÎ ÊÌ͝ËäÐçØ Ë‹ËÊ_ÉâÐ _ÚáÜÉ ËÊ Ð‘ÙÄËÂÖÚБáÜáñìÎÚ͝ʛåÌÍä±ÄБ›Þ š Ÿ± æ Œî¢¾Û²Ë–ºÇ Ž
Ðç͝ÍÂЬìôÒ·ÐçØÚè ΠʛÛÜØ ˝ɟÍÂÒ¹Ê›Ø Ð á×ÐçÍÂå›ÉÏҝ٬БáñÉÌé
2.6.13 Details
ê˜Ô¾ì“ʛ֞æÈÐ‘Ø ËÈËÂʏÖÚÒîÉ ÍäÐçËÂʛҙËÂÇµÉ³ØµÉ³Ò " ÛÜÉ “U ÉÓËÂÊ Ù³Ê›ÞÀÎÚÖ«ËÂÉÏБáÜáÎµÍÂÛñÞßÉ ØôÖµÞ
Constant expressions.
_ ɟ͝ҋҝޮБáñáÜÉŸÍ ËÂÇÚБØ
íÌì“Ê›Ö ÇÚÐXU“Éò˝ÊëÙäÇ ÐçØÚå›É ÍÂʛåÌÍÂÐ‘Þ ÛÜÀ
Ø ÒÉ U“ÉÄÍäБáÎÚá×БٟɳÒôصÊÌËÕÙ³Ê›ÖµØ ËÂÛñØÚå
10, 000
ËÂÇµÉ Ù³Ê›ÞßÞßÉŸØ ËÂÒ¤ËÂÇÚÐçË ÒÇµÊ›ÖµáÜèZ_ ɋֵ΍è ÐÑËÂɳè¿Ð‘Ò æ¹É³áñá˜íçì“Ê›Ö صɳɳè ËÂÊ ÍÂɟÎÚá×ÐçÙ³É Ô×ʛ֫Í
ÒT_ôì
ҟé
1000
10000
ƹÇÚÛñҋÛÜÒ ÙŸÖÚÞ_ ɟ͝ҝʛÞßÉÈБصè ÉÄ͝ÍÂÊÌÍ» ÎÚ͝ʛØÚɑéS¼ÇÚÐçËÕì“ʛ֮æÈÐçØ ËïÛÜҋÐãεÍÂʛåÌÍäÐ‘Þ ËÂÇÚÐçˋÒîÎ É³Ù³Û Y ɟҋËÂÇµÉ Ö«Î Î ÉŸÍb_ ʛֵصè U‘БáÜÖµÉ ÛñØ ÖµÒîË Ê›ØµÉ®ÎÚá×БٳÉÌé [ ÊÌ͏˝ÇÚÛñÒ³íÃæ¹É صɳɳè Ð ÞßɳÙäÇÚБصÛÜÒÞ ËÂÇÚÐçË Ð‘áÜáÜʦæ ÒàÖµÒ ËÂÊ
å›ÛVU“ÉàÐØ ÐçÞßÉãáÜÛ ]“É ËÂÊßРٟʛØÚҙËäÐ‘Ø Ë ÉIP¥ÎµÍÂɳÒîҝÛÜÊ›Ø áÜÛV]“É
éò
ɟÍÂÉëÛÜÒ·ÇÚʦæ ËÂǵÛÜÒ Ù¬Ð‘Ø _ ÉâèÚʛصÉëÔ×ÊÌÍ
n
1000
ÍäÐçËÂʛÒî˝ÇÚɟØÚÉŸÒ " ÛÜÉ U“ÉÌé
// Program : eratosthenes.C
// Calculate prime numbers in {2 ,... ,n -1} using
// Eratosthenes ’ sieve .
# include < iostream >
int main ()
{
// define a constant n
const unsigned int n = 1000;
// definition and initialization : provides us with
// Booleans crossed_out [0] ,... , crossed_out[n -1]
bool crossed_out[n ];
for ( unsigned int i = 0; i < n ; ++ i)
crossed_out[i ] = false ;
// computation and output
std :: cout < < " Prime numbers in {2 ,... ," < < n -1 < < " }:\ n ";
for ( unsigned int i = 2; i < n ; ++ i)
if (! crossed_out[i ]) {
// i is prime
std :: cout < < i < < " ";
// cross out all proper multiples of i
for ( unsigned int m = 2* i ; m < n ; m += i )
crossed_out[ m ] = true ;
}
std :: cout < < "\ n";
return 0;
}
Program 18: ¢¤£³ÄÁ“Ž Œ³£Ÿ©¯–“ŽŸ–ºŠŒ³š Œ¬Ž š Å
ÆÈÇµÉ ]“ÉÄìôæ¹ÊÌÍÂè
ÛÜØëÔÜÍÂÊ›Ø¯Ë Ê›Ô Ò¡èÚÉIY صÛñ˝ÛÜʛØâޮР]“ÉŸÒ ÐÈØÚʛؘÞßÊôèµÛVY Ð _ÚáÜÉ
æ ǵÛÜÙäÇ
const
n
n
±
Ä
›

¤
š
³
Ž
î
–
“
©
¤
š
–
ÒÉŸÍ U“É³Ò БÒòÐ Ô×ÖÚáñáñì Q ɟèÚå›ÉŸèžÙ³Ê›ØµÒîËäÐçØ ËÈÉIP¥ÎµÍÂɟҝҝÛÜʛؤéÕÆÈǵÉÏٳʛÞÀÎÚÛÜáÜÉŸÍ æ·ÛÜáÜá ØµÊÌËòБáÜáÜÊ¦æ “ì Ê›Ö ËÂÊ ÙäÇÚБصå›É
ËÂÇµÉ UÌÐçáÜÖµÉ Ê›ÔòРٳʛصÒîËäБدˬé [ ÊÌÍ¿ÉIPµÐçÞÀÎ áñÉÌí ËÂǵɮÔ×ʛáÜáÜʦæ ÛÜØµåóáÜɳБèµÒ ËÊ Ð‘Ø ÉŸÍÍÂÊÌÍ¿ÞßɳÒîÒÂБå›ÉßèµÖ«ÍÂÛÜØµå
ٳʛÞÀÎÚÛÜá×ÐÑËÂÛÜʛؤé
const unsigned int n = 1000;
n = 10000; // error : can ’t assign to a constant
»ê Ë ÛñÒ Ð‘áÜҝʏصÊÌËÓБáÜáÜʦæ¹É³èžËÊÀáÜɬÐXU“ÉàпٳʛصÒîËäÐ‘Ø¯Ë ÖµØµÛÜØµÛñËÂÛ×Бáñ۳ɳè¤í«Ð‘ÒòËÂǵɟÍÂÉëÛÜÒòصÊßÙ´ÇÚБصٳÉãËÂÊßБҝÒîÛÜ囨 Ð
U‘БáÜÖµÉÏËÊ ÛñËÈá×Ðç˝ɟÍ
const unsigned int n ; // error : uninitialized constant
ÆÈǵÛÜÒòÞßɳÙäÇÚБصÛÜÒÞ É³ØµÒÖ«ÍÂÉ³Ò·ËÇ ÑÐ Ë·ËÂÇµÉ U‘БáÜÖµÉãÊ›Ô ÐÙ³Ê›ØµÒîËÂÐ‘Ø Ë·ÛÜÒ]ôØÚÊ¦æ Ø ÐÑ˷ٳʛÞÀÎÚÛÜáñÉÓ˝ÛÜÞßÉÌí ÖµÒîË
áÜÛV]“É ËÂǵ
É UÌÐçáÜÖµÉãÊ›Ô ËÇÚÉÏáÜÛñ˝ɟÍäБá
é
1000
͝ʛåÌÍäÐ‘Þ Ô×ÊÌÍëҙ˝ÍÂÛÜØµåžÞ®ÐÑËÂÙäÇÚÛñØÚå«í Û²ËâÛÜÒÏØµÊÌË U“ÉÄ͝ìÝÙ³Ê›Ø U“ɳصÛÜɳدË
é S ɿ˝ÇÚÉŸØ Ç ÐXU“É¿ËÂÊ ÍÂɟٳʛÞÀÎÚÛÜáÜÉàËÂǵɿεÍÂʛåÌÍÂÐ‘Þ ÉIU“ɟ͝ì ËÂÛÜÞßÉàæ¹É
æÈБدËòËÂʿҝɬÐÑÍÂÙäÇ Ô×ÊÌÍ Ð‘ØµÊÌËÂǵɟÍÈÚÒîŒI˝͝F ÛÜØµå«é
ÞßÊÌÍÂÉQ ÉGP«ÛV_ÚáÜÉòБáñËÂÉÄÍÂØÚÐçËÂÛVU“ÉòÛÜÒÕËÂÊëΠБÒîҋËÂÇµÉ ÒÉ¬ÐÑÍÂÙäÇ ÒîËîÍÂÛÜØµåàБÒïÐ
±Ÿ›¨ž¨ ©“šF ’­—°š ŒÀ©“£îÁ›” ¨ Œ³š¤–
ËÂÇÚÐç˹æ¹ÉãεÍÂÊU¥ÛñèÚÉÓ֫ΠʛØóٳБáÜáÜÛÜØµåëËÂǵÉÓεÍÂʛåÌÍäÐ‘Þ é
ÆÈǵɏޮБÛÜØ Ô×ÖÚØµÙŸËÛÜʛØÝ٬БØÝБٳٳɳÒîÒëҝֵÙäÇ Ù³Ê›ÞßޮБصè½áñÛÜØµÉÐÑÍÂå›ÖµÞßÉ³Ø ËÂÒÓÛÜÔÃæ¹ÉÎµÍÂÊU¥ÛÜèµÉ¿ÒÖµÛñËäÐ _ÚáÜÉ
Î ÐçÍäБÞßÉÄËÂɟÍÂÒ³é ·ÉŸÍÂÉ ÛÜÒÓǵʦæ ËÂǵ
É YµÍÂҙËÏËÉ³Ø áÜÛñØÚÉŸÒ Ê›Ô ÍÂʛåÌÍäÐ‘Þ ÇÚKÐ U“É ËÂ
Ê _ É ÙäÇ ÐçØÚå›ÉŸèÝÛÜØ ÊÌÍÂèµÉŸÍ
ËÂʏޮР]“É ËÂǵÛÜÒïæ¹ÊÌÍ ]é
Command line arguments.
ËÂÇÚÐçËÏËÂǵɏÒîɬÐçÍÂÙäÇ Òî˝ÍÂÛñØÚå ÛÜÒ
ê˜Ø
// Program : string_matching2.C
// find the first occurrence of a string ( provided as command
// line argument ) within the input text , and output text so far
# include < iostream >
int main ( int argc , char * argv [])
{
if ( argc < 2) {
// no command line arguments ( except program name )
std :: cout < < " Usage : string_matching2 < string >\ n" ;
return 1;
}
// search string : second command line argument
char * s = argv [1];
ÆÈǵ
É UÌБáñÖÚÉŸÒ Ê›Ô
БصèàБصè
^»æ·ÇµÛÜÙäÇëÛÜÒ ÐçØàÐç͝ÍäгìãʛÔôΠʛÛÜØ¯ËÂɟÍÂҡɬБÙäÇàʛÔôæ·ÇµÛÜÙäÇëÛÜØâËÂÖ«ÍÂØ
Î ›Ê ÛÜØ¯ËÂÒ ËÂÊ ËÂÇµÉ YµÍÂÒîËÃargc
ɳáÜɟÞßÉ³Ø ËÂÒ Ê›ÔÐ argv[]
³ÉŸÍÊ ˜ËÂɟ͝ÞßÛÜØÚÐçËÂɳè ÐçÍîÍäгì Ê›Ô ÙäÇÚÐçÍäБÙÄËÂɟÍÂÒ ` Ðç͝ÉïÛÜØµÛñËÂÛ×Бáñ۳ɳè _ ìàËÂǵÉ
ÊÌΠɟÍÂÐçËÂÛÜØµå ÒîìôÒîËÂÉ³Þ æ ǵɳ؏ÛñË Ù¬Ð‘áñáÜÒ ËÂǵÉ
Ô×ÖµØÚÙÄËÂÛÜʛؤéTSÝÉïæ·ÛÜáÜáôÉGP¥ÎÚá×БÛÜØ Ô×ֵصٟËÂÛÜÊ›Ø Î ÐçÍäБÞßÉÄËÂɟÍÂÒ ÛÜØ
main
èµÉŸËäБÛñáÚáÜÐçËÂɟͬí¯ÇµÉŸÍÂÉÈæ¹Éòæ ÛñáÜá _ É·ÒÂÐÑËÂÛÜÒ YÚÉ³è æ·ÛñËÂÇßÐçØÀÉIPµÐçÞÀÎ áñÉÌé " ֫εΠʛҝÉòËÇ ÐÑËÕæ¹É ٳБáÜá«ËÂǵÉòεÍÂʛåÌÍäÐçÞ
áÜVÛ ]“É ËÂǵÛÜÒ ^ºÐ‘ÒîҝֵÞßÛÜØµå Ð ·ØµÛ P ˜Ë ìô΍ÉãÒîìôÒîËÂÉ³Þ `
./ string_matching2 bool
ÆÈǵɳØ
^»æ·ÇµÛÜÙäÇ ÙŸÊ›ÖÚØ¯ËÂÒëËÂǵÉߨôÖµÞ_ ɟÍâʛÔòٳʛÞßÞ®ÐçØÚè½áÜÛÜØµÉßÐç͝å›ÖÚÞßÉŸØ ËÂÒ `Óå›ÉŸËÂÒàÛÜØµÛñ˝Û×БáÜ۟ɳè
argc
æ Û²ËÂÇLUÌÐçáÜÖµÉ éÃÆÈǵÛÜÒ ÙŸÊ›ÖÚØ¯Ë¹ÛÜØµÙ³áÜÖµèµÉ³Ò‹ËÂÇµÉ ÎµÍÂʛåÌÍäÐçÞ ØÚБÞßÉ·Ûñ˝ҝɳáÜÔ ^
Ûñخ˝ÇÚÛñÒ
٬БÒîÉ `Äí¡Ð‘صè 2Ð‘Ø ì½Ð‘èµèµÛñËÂÛñÊ›Ø Ðçá Òî˝͝ÛÜØµå›ÒÏεÍÂÊU¥ÛÜèµÉ³è½Ê›Ø ËÂǵɿٳʛÞßޮБصè "string_matching2"
áÜÛÜØµÉ ^ ÖµÒîËã˝ÇÚɿҝÛÜØµå›áÜÉ ÒîËîÍÂÛÜØµå
ÛñØ ËÂǵÛÜÒÈ٬БҝKÉ `Ä鋯¹ÇµÉ Ðç͝ÍÂЬìôÒ
Бصè
å›ÉŸËòÛÜØµÛñËÂÛ×ÐçáÜ۳ɳèÀæ·ÛñËÂÇ ËÂǵÉãÒîËîÍÂÛÜØµå›Ò
"bool"
2
argv[0]
argv[1]
Бصè
БÒàèµÉ³ÒÙŸÍVÛ _ ɳè ÛÜØ " ɳٟËÂÛÜÊ›Ø \ é é Ð _ ÊU“ÉÌé&ïʛØÚÒîÉXWôֵɳدËÂáñì“í
"string_matching2"
БÔÜËÂÉÄÍâÛñËÒ èÚIÉ Y صÛñ˝ÛÜʛؤíËÂǵÉàΠʛÛÜ"bool"
Ø ËÉŸ
Í UÌÐç͝Û×Ð _ÚáÜÉ ÛñØ ËÂǵɏР_ Ê U“ÉàÎ ÛñÉ³Ù³É Ê›Ô‹Ù³Ê èµÉ¿Î ʛÛñØ ËÂÒ ËÂÊ®ËÂÇµÉ YµÍÂÒîË
ɳáÜɟÞßÉ³Ø ËòÊ›Ô $
Ð ³ÉÄÍÂÊ ˜ËÂÉÄÍÂÞßÛÜØÚÐçËÂɳèóÐç͝Íäгì Ê›Ô Ù´ÇÚsÐçÍÂБٟËÂɟ͝ҷËÂÇÚÐçË ÙŸÊÌ͝ÍÂɳÒî΍ʛØÚèµÒ·ËÊ ËÂǵÉâÒîËîÍÂÛÜØµå
é
"bool"
ƹÇÚÛñÒëå›ÉŸËÂÒëÖµZ
Ò _ Б٠]ÝËÂÊ ËÂǵÉßҝÛñËÂÖÚÐçËÂÛñʛØÝÛÜØ ÍÂʛåÌÍäÐ‘Þ ÐçÔÜËÂɟÍàáÜÛñØÚÉ í Бصè ËÂÇµÉ ÍÂɳޮБÛñØÚèµÉŸÍÒâʛÔ
_ ÊÌËÂÇ ÎµÍÂʛåÌÍäБÞßÒÈÐçÍÂÉÏÛÜèµÉ³Ø¯ËÂÛÜ٬Бá»é
2.6.14 Goals
˹ËÂǵÛÜҹΠʛÛÜØ¯Ë¬íôì“Ê›ÖóÒîÇÚʛֵáÜè é³é³é
¹
Dispositional.
`L]¥ØµÊ¦æ
æ ÇÚÐçË·Ð‘Ø Ðç͝ÍÂЬìžÛÜÒ³í Ð‘Øµè æ ÇÚÐçË·ÍÂБصèÚʛÞðБٳٟɳҝÒÓБصè ÛñËÂɟÍÂÐçËÂÛÜʛØóÞßɳБØóÛÜØóËÂǵÉëÙŸÊ›Ø ËÂÉIPôË
Ê›Ô Ðç͝ÍäгìôÒ
\ `ßÖµØÚèµÉŸÍÒîËäБصèžËÂǵÉÓΠʛÛÜØ¯ËÂɟÍÈٳʛصٳɟεˬíÚБصèóǵʦæ ˝ʏٳʛÞÀÎÚÖ«ËÂÉ æ Û²ËÂÇóБèµè«ÍÂɳÒîҝɳÒ
`L_ ÉãЬæÈÐÑÍÂÉÏËÇ ÐÑË ^˜Ð‘صèóÖµØÚèµÉŸÍÒîËäÐ‘Øµèžæ·Ç ìa`ïÐçÍîÍäгì¥Ò ÐçØÚè ΠʛÛÜØ¯ËÂɟÍÂÒÈޏֵÒîË _ ÉÏֵҝɳèóæ·ÛñËÂÇ Ù¬ÐçÍÂÉ `L]¥ØµÊ¦æðËÂÇÚÐçˏÙäÇÚÐçÍäБٟ˝ɟÍÂÒÀÐçØÚè ÐÑ͝Íäгì¥ÒÊ›Ô ÙäÇ ÐÑÍäБٟËÂÉÄÍÂÒ Ù¬ÐçØ _ ɞֵҝɳè ËÊ Î ÉŸÍÂÔ×ÊÌÍÞ _ БҝÛÜÙ®ËÂÉIPôË
ÎÚ͝ÊôٳɳÒîҝÛÜØµåËäÐçÒ ]¥Ò Ë ^»ÞÖµáñËÂÛñèÚÛñÞßɳصҝÛÜʛØÚÐçá `¾Ðç͝ÍäгìôÒïÊ›Ô U‘ÐçÍÂÛÜÐ _ÚáÜÉ·áÜɟØÚåÌ˝Çß٬Б
Ø _ É Ê _µËäБÛÜØµÉ³L
è _ ìßè«ì¥ØÚБÞßÛÜÙ
`L]¥ØµÊ¦æ ËÂÇÚÐç
ÞßɳÞßÊÌ͝ì®Ð‘áñáÜÊôÙ¬ÐÑËÂÛÜÊ›Ø Operational.
^
ê˜ØžÎ Ðç͝ËÂÛñÙ³Öµá×Ðçͬí¯ì“Ê›Ö ҝǵʛÖÚáñè _ ÉãÐ _ÚáÜÉ ËÂʞéŸé¬é
`ß͝ɬБè¤íÌֵصèÚÉÄÍÂÒîËäБصè¤í›Ð‘صè Ðç͝å›ÖÚÉ Ð _ Ê›Ö«Ë ÒÛñÞÀÎ áñÉ ÎµÍÂʛåÌÍÂБÞßÒ ÛÜØ U“Ê›áVU¥ÛñØÚåòÐç͝ÍÂЬìôÒ Ð‘ØµèëΠʛÛÜØ¯ËÂɟÍÂÒ
\
\ `ßæòÍÂÛñËÂÉãÎÚ͝ʛåÌÍäБÞßÒ·ËÂÇÚÐçË èÚÉIY صɿÐç͝ÍÂЬì UÌÐç͝Û×Ð _ÚáÜÉ³Ò ÊÌÍÏè«ì¥ØÚБÞßÛñ٬БáÜáñì ÐçáÜáÜÊôÙ³ÐçËÂÉ ^»ÞÖµáñËÂÛñèÚÛñÞßɳØ
ҝÛñÊ›Ø Ðçá ` Ðç͝ÍäгìôÒ
^
`ßæòÍÂÛñËÂÉ ÎµÍÂʛåÌÍäБÞßÒ®ËÂÇÚÐçË ÍÂɬБè Ð ÒîÉXWôÖµÉ³ØµÙ³É Ê›ÔàèÚÐçËäÐ ÛÜØ ËÊ Ð ^˜è«ìôØ ÐçÞßÛÜ٬БáÜá²ì БáÜáÜÊ Ù¬ÐçËÂɟè
Þ¿ÖµáñËÂÛÜèµÛÜÞßɳصҝÛñÊ›Ø Ðçá ` Ðç͝Íäгì ^
`ßæòÍÂÛñËÂÉ ÎµÍÂʛåÌÍÂБÞßÒ ËÂÇÚÐçË Î ÄÉ ÍÂÔ×ÊÌÍÂÞ ÒÛÜÞÀÎÚáÜɋèÚÐçËÂРεÍÂÊ Ù³É³ÒÒîÛÜØµåÓËÂÐ‘Ò ]¥Ò_ôì ֵҝÛñØÚåÓÍäБصèµÊ›Þ
ÛÜØ ˜^ Þ¿ÖÚá²ËÂÛÜèµÛÜÞßɳصҝÛÜʛØÚБá ` ÐçÍ Íäгì¥ÒòБÒÈËÂǵÉãޮРÊÌÍïËÂÊ Ê›á ^
`ßæ·ÛñËÂǵÛÜØ εÍÂʛåÌÍÂБÞßÒ³í¯ÛñËÂɟÍäÐÑËÂÉ ÊU“ÉŸÍòÐ ^˜è«ì¥ØÚБÞßÛÜٳБáÜáñì¿Ð‘áñáÜÊôÙ¬ÐÑËÂɳè
_ ì ֵҝÛñØÚå¿Î ʛÛÜØ¯ËÂɟÍòÐçÍÂÛñ˝ÇÚÞßÉÄËÂÛÜÙ ^
^
`ßæòÍÂÛñËÂÉÏεÍÂʛåÌÍäБÞßÒÈËÂÇÚÐçË Î ÉŸÍÔ×ÊÌÍÂÞ
ËÂÉÄÍÂÒ
БٳٟɳҝÒ
Þ¿ÖÚá²ËÂÛÜèµÛÜÞßɳصҝÛÜʛØÚÐÑá `¡ÐçÍîÍäгì
ҝÛÜÞÀÎÚáÜÉÓËÂÉIPôË ÎµÍÂÊôٳɟҝҝÛÜØµåßËäÐ‘Ò ]ôÒ æ ÛñËÇ Ðç͝Íäгì¥Ò Ê›Ô ÙäÇÚÐçÍäБ٠2.6.15 Exercises
Exercise 65
©KM ݊©¯– Fµ‘Œ¬Ž –ºŠŒÈ¶‘“’°’§›¸¹—»šÁ¿¢¤£³ŸÁÌ£Ÿ©“¨
›”–ñ¢¤”– ©“šFó¸ÈŠJ
# include < iostream >
int main ()
{
int a [] = {5 , 6 , 2 , 3 , 1 , 4 , 0};
int * p = a;
do {
std :: cout < < * p < < " " ;
p = a + * p;
} while ( p != a );
return 0;
}
M
› £³Œ Á«ŒŸ š Œ³£Ÿ©¯’»’ J 󎟔¯¢«èµ¢ Û “Ž‘ÉČ ÍÂÉ³Ø –ºŠË ©¯–ß—»š –ºŠŒ ¢¤£³ŒXD‘—”Ž ¢¤£³ŸÁ›£Ÿ©“¨ a —˜Ž —°š —˜–˜— ©¯’­— ŒIF¼¸¹—˜–ºŠ
Ž‘›¨½ŒàŽ‘Œ ” Œ³š ±ÄŒßÂ¶ n
𠔍½ ŸŒ³£¦Žë—»š {0, . . . , n − 1} Hî¸ÓŒ Ž‘ŒŸŒà–ºŠ¥—»Ž‹¶‘›£ n = 7 —°š
–ºŠŒÏ¢¤£³XŒ D̗™›”Ž ¢¤£³ŸÁ›£Ä©“¨ M¥Å È£³ DôŒß–ºŠ©¯–·–ºŠŒÏ¢¤£³ŸÁ›£Ÿ©“¨ –Œ³£¬¨ —»š ©¯–Œ¬Ž¿—»š –ºŠ¥—»Ž®±´©¯Ž‘Œ‘Å
^
Exercise 66
’ªŒ³šÁ“–ºŠ n Å
©KM
a —˜Ž
Ž³ŽŸ” ¨ Œà–ºŠ©¯–È—»š Ž‘›¨½ŒÓ¢¤£ŸŸÁ›£Ÿ©“¨
`
©“š ©“£¬£Ÿ©Jݐ¶┚FµŒ³£¦’ J —°šÁó– J¦¢ Œ int ©“šF
— D¥Œ³š © ôD ©“£¬— ©« ¦’ªŒ i Â¶ž– J¦¢ Œ int ¸¹—˜–ºŠ D ©¯’­”¡Œ 0 i
n Š›¸ ±Ä©“š Jڐ›” ¥ ¦–î©“—°š ©
¢ ›—°š¤–Œ³£ p –  –ºŠŒóŒ³’§Œ³¨½Œ³š¤–àÂ¶—°šFµŒ i —°š a H “–Œ — ¶ i = n –ºŠ¥—˜Ž¿—˜Ž®©¯Ž ‘—»šÁⶑ›£ž©
¢©¯ŽŸ– ŠŒ ´Œ³šß
F ¢ ›—»š¤–ŒŸ£ÌÅ M
M
— D¥Œ³š ©ž¢ ›—°š¤–Œ³£ p – çŽ ›¨ Œ Œ¬’§ŒŸ¨ Œ³š¤–ë—°š a ⊍›¸ ±´©“š J ›” ¥ ¦–î©“—°š –ºŠŒ »— šFµŒ i Â¶
–ºŠ¥—»ŽŒ¬’ªŒ³¨ ŒŸš¤– H “– Œ — ¶ p —»¿
Ž ©ë¢©¯Ž³– ŠŒ ´Œ³šF ¢ ›—»š¤–ŒŸ£ ŠŒë—»šFµŒ ®—˜ŽFµŒ š ŒIF ©¯Ž n Å M
£¬—˜–Œ ±Ÿ FµŒò¶Ÿ£Ÿ©›Á›¨½Œ³š¤–ºŽ –ºŠ©¯–㱟›¨¢¤”–Œ p ¶Ÿ£³›¨
i —»š¼©KM½©“šF i ¶Ä£³›¨
p —»š
^
M¥Å
`
º ٳʛÞÀ΍ʛҝÛñËÂÉ
— ¶ß©“šF ›š¤’ J½— ¶ —˜– —˜Ž F“— D‘—˜ŽŸ— ¦’§Œ KJ
Exercise 67 ¬Œ – ”Ž®±Ä©¯’°’¹© 𠩝–˜” £Ÿ©¯’ 𠔍½ ŸŒ³£ k
Œµ ©µ±³–º’EJ k “F — ³Œ £³ŒŸš¤–㢤£¬—»¨½Œ š ” ¨½ ŸŒ³£¦ŽçÅ ›£œŒ«©“¨¢¾’ªŒ 㢤£¬—°¨ Œß¢ ›¸ÓŒ³£¦Ž ©“£³Œ ´±Ÿ›¨¿¢ “ŽŸ—˜–Œ
©“šF 6 = 2 3 ©¯ŽÓÏ
¸ Œ³’»’ ©¯Ž 20 = 2 2 5 ©“£³Œ ıЛ¨¢ “ŽŸ—»–Œ‘Å
£¬—˜–Œ ©â¢¤£³ŸÁÌ£Ÿ©“¨ k_composite.C
0 ©“šF k
0 ¶Ä£³›¨ –ºŠŒ —»š¥¢¤”–Ý©“šF –ºŠŒŸš ›”–ñ¢¤”–ºŽ ©¯’»’ k
–ºŠ©¯– £³ŒÄ© F¯Ž š ” ¨½ ³ŒŸ£¦Ž n
±Ÿ›¨¿¢ “ŽŸ—»–Œ š ” ¨½ ³ŒŸ£¦Ž —°š {2, . . . , n − 1} Å
›¸ ¨½©“š J ´±Ÿ›¨¿¢ “ŽŸ—˜–Œ š ” ¨½ ³ŒŸ£¦Ž ©“^ £³Œ \ `I–º^ ŠŒ³£³Œ `
¶‘›£ n = 1, 000, 000
£¬—˜–Œ ©Ï¢¤£ŸŸÁ›£Ÿ©“¨ invert.C –ºŠ©¯– —»š DôŒ³£¦–ºŽ © 3 3 ¨ ©¯–˜£¬— A ¸¹—˜–ºŠ®£³Œ´©¯’ ŒŸš¤–˜£¬—ŽçÅ
‰ÕŠŒâ¢¤£³ŸÁ›£Ä©“¨ Ž³Š›”’ F £³Œ´© FݖºŠŒßš —°š Œß¨½©¯–˜£¬— ŒŸš¤–˜£¬—îŒ¬Ž ¶Ä£³›¨ –ºŠŒß—°š¥¢¤”– ⩓šF –ºŠŒ³š ›”–ñ¢¤”–
–ºŠŒà—»š DôŒ³£¦Ž‘Œà¨½©¯–˜£¬— A−1 HŸ›£ –ºŠŒà—»š›¶ç›£¬¨½©¯–˜—™›š –ºŠ©¯–È–ºŠŒà¨ ©¯–˜£¬— A —˜Žâ𠐓–ï—°š D¥Œ³£¦–˜—™ ¬’§Œ MôК
© F F“—˜–˜—™›š –ºŠŒ ¢¤£³ÄÁ›£Ÿ©“¨ Ž³Š›”’ F ›”–ñ¢¤”–ï–ºŠŒà¨ ©¯–˜£¬— AA−1 —»š ›£ FµŒ³£¿– ’ªŒ¬–¹–ºŠŒà”Ž‘Œ³£®±¬ŠŒÄ±
¸ÈŠŒ¬–ºŠŒ³£½–ºŠŒ ±Ÿ›¨¢¤”––˜—š Â¶ó–ºŠŒ —»š DôŒ³£¦Ž‘Œ ¸ ©¯Ž ©µ±Ÿ±³” £Ÿ©¯–Œ H™—»š –ºŠŒ ¶Ÿ”’°’EJ ©µ±Ÿ±Ÿ”£Ÿ©¯–Œ ±Ä©¯Ž‘Œ
–ºŠŒÀ’ש¯–º–Œ³£â
¢¤£Ÿ F“” ±¬–ò—˜Ž –ºŠŒ — FµŒ³š¤–˜—˜– J ¨½©¯–˜£¬— M¥Å
ïÍäÐçÞßɟÍ! Ò ÍÂÖµáÜÉ Å ¢«¢¾’­—™IŒ F
Hint: ›£ë–ºŠŒ±Ÿ›¨¿¢¤”––˜—š Â¶Ó–ºŠŒâ—°š D¥Œ³£¦Ž‘Œ Jڐ›” ±Ä©“š Œ³¨¿¢¾’§ J
−1
−1
– –ºŠŒß±Ÿ›¨¿¢¤”––˜—š¼Â¶ë–ºŠŒà—°š D¥Œ³£¦Ž‘Œ R
– J —™Œ¬’ F¯Žë–ºŠ©¯– Aij HŠŒßŒ³š¤–˜K£ Jݐ¶ A —°š £³›¸ i ©“
š F
±Ÿ“’•”¨ š¤Ž jMž—»Ž Á̗ D¥Œ³š K J
èµÉŸË ji
(−1)i+j
(A )
−1
Aij =
,
èµÉŸË
Exercise 68
(A)
èµÉŸË
(M) —˜Žà–ºŠŒ FµŒ¬–Œ³£¬¨ —»š ©“š¤–ϐ¶© Ž ”¾©“£³Œ ½
¸ÈŠŒ³£³Œ
¨ ©¯–˜£¬— M ·©“šF Aij —˜Žà–ºŠŒ 2 2 ¨ ¯© –˜£¬— ¥ ¦–î©“—°š IŒ Fà¶Ä£³›¨ A KJ FµŒ¬’ªŒ¬–˜—»šÁž£³›¸ j ©“šFݱŸ“’•”¨ š i Å
‰  Ÿ± " ›Ð稏ÍîÍ¢¤Öµ”Ò –«Œ ÍÂÖµ–ºŠáÜÉ ŒFµŒ¬–Œ³£¬¨ —»š ©“š¤–âÂ¶© 3 3 ¨ ©¯–˜£¬— RJڐ›” ¨ž—§Á“Š«–ò¸ ©“𤖷– ^ ”Ž‘\ Œ¿`I^ –ºŠŒ `I¸Ó
^ ¬Œ ’»’ `
‘𠐛¸¹š
Å
¬£ —˜–Œ ©½¢¤£³ÄÁ›£Ÿ©“¨ read_array –ºŠ©¯–£³Œ´© F¯Ž ©œŽ‘Œ ” Œ³š ±ÄŒœÂ¶ n —°š¤–Œ™Á«Œ³£¦Ž¿¶Ÿ£³›¨
޳–î©“šF«©“£ F —°š¥¢¤”– —°š¤– ©“šÝ©“£¬£Ÿ©JµÅ߉ՊŒ 𠔍 ³Œ³£ n —˜ŽÈ–ºŠŒ £¦Ž³– —°š¥¢¤”– 铚F¿–ºŠŒ³š –ºŠŒ‹¢¤£³ŸÁÌ£Ÿ©“¨
Œ¦¢ŒŸ±¬–ºŽ Jڐ›” – —»š¥¢¤”– ©“𠐓–ºŠŒ³£ n Dô©¯’­”¡Œ¬ŽçÅ
¶³–ŒŸ£ £³Œ´© F“—»šÁ –ºŠŒ n Dô©¯’•” Œ¬Ž ߖºŠŒ ¢¤£³ÄÁ›£Ÿ©“¨
Ž³Š›”’ F ›”–ñ¢¤”–ã–ºŠŒŸ¨ —°š –ºŠŒ Žç©“¨½Œ ›I£ FµŒ³£ÌÅ H ×¶ Jڐ›” ±Ä©“š Fµ –ºŠ¥—»Ž J ›” Š ©D¥Œà¢¤£³ DôŒ³š –ºŠ©¯–
Jڐ›” ©“£³Œóš  ’ª›šÁ«Œ³£ © ±Ÿ›¨¿¢¾’§Œ³–Œ š  D̗î±ÄŒ ß©µ±Ÿ±Ÿ›£IF“—»šÁ – ¤–˜£³›”ŽŸ–˜£¬” ¢ Å M
›£ Œ µ©“¨
^ ¢¾\ ’ª`IŒ ^ ߐ› š `
—»š¥¢¤”– 5 4 3 6 1 2 –ºŠŒÏ¢¤£³ŸÁ›£Ä©“¨ Ž³Š›”’ F½›”–ñ¢¤”– 4 3 6 1 2 Å
Exercise 69
±³—™Œ³š¤–
Exercise 70 Ț¤Š©“š ±ÄŒß–ºŠŒã¢¤£ŸŸÁ›£Ÿ©“¨ read_array.C ¶Ä£³›¨
Ú Œ³£Ÿ±³—˜Ž‘Œ
Ž‘ž–ºŠ©¯– º– ŠŒ ³£ Œ³ŽŸ”’­–
—»šÁ ¢¤£³ŸÁ›£Ä©“¨ sort_array.C Ž‘›£¦–ºŽ –ºŠŒ¼©“£¬£Ÿ©J Œ¬’ª³Œ ¨ Œ³š¤–ºŽ »— š¤– ©¯Ž‘±ÄŒ³šF“—»šÁ ›£ µF Œ³£ Ÿ Œ˜¶‘›£³Œ
›”–ñ¢¤”–º–˜—»šÁž–ºŠŒ³¨½Å ›”£¿Ž‘›£¦–˜—»šÁ ©¯’ Á«›£¬—˜–ºŠ¥¨ FµÌŒ¬Ž 𠐓– Š©D¥Œ–½ ŸŒã¢©“£¦–˜—™±³”’ש“£¦’ J Œ
º– ŠŒ ¨½©“—»š –ºŠ¥—»šÁ ŠŒ³£³Œ —˜Ž®–ºŠ©¯–Ï—˜–ã¸Ó›£ ̎ ±Ä›£¬£³ŒŸ±¬–º’ JµÅ ‰ Œ¬ŽŸ– Jڐ›”£ ¢¤£³ŸÁ›£Ä©“¨ ›š Ž‘›¨ Œ ’ש“£îÁ«Œ³£
—»š¥¢¤”–ºŽ H§¢¤£³Œ˜¶‘ŒŸ£Ÿ©« ¦’ J½£³Œ´© Fඟ£Ÿ›¨ © ’§Œ Ó©ä¶³–ŒŸ£À£³ŒIF“—°£³ŒŸ±³–˜—»šÁ½Ž³–î©“šF«©“£ Fž—»š¥¢¤”–VMôÅ ^ ›\ £ó`I^ Œµ©“ ¨¿
`I^ ¢¾’§Œ `
›šœ—°š¥¢¤”– 5 4 3 6 1 2 –ºŠŒã¢¤£³ÄÁ›£Ÿ©“¨ ŽŸŠ›”’ F½›”–ñ¢¤”– 1 2 3 4 6 Å
Exercise 71 Ț¤Š©“š ±ÄŒ –ºŠŒ ¢¤£³ŸÁ›£Ÿ©“¨ read_array.C ¶Ÿ£³›¨
µŒ³£³±³—»Ž‘Œ 뎑ë–ºŠ©¯–¡–ºŠŒ·£³Œ¬ŽÄ”’­–˜—»šÁ
΍ɟÍÂÞ¿ÖµËÂÐçËÂÛÜʛØ
¢¤£³ŸÁÌ£Ÿ©“¨ cycles.C —»š¤–Œ³£¢¤£ŸŒ¬–ºŽ –ºŠŒë—»š¥¢¤”–ïٟ쥎‘ÙŸŒ áÜÉâ
”¡èµŒ³š ɳٳ±ŸÊ›Œ®ÞÀÂ΍¶ ʛnҝÛñË—»š¤ÛÜʛ–Ø Œ Á«Œ³£¦ŽÀ©¯Ž¿©
π Â¶
{0, . . . , n − 1} ©“šF󖺊©¯–·—˜–ϐ›”–ñ¢¤”–ºŽ¿–ºŠŒ
Â¶ π Å
›¨ ŒÝŒ ¦ ¢¾’ª©“𠩝–˜—™›š¤Ž ©“£³Œ —»š ›£IFµŒ³£ ©ó¢ ŒŸ£¬¨ž”––˜—™›š π —˜Ž ©œ ³— ŒÄ±¬–˜— DôŒó¨½©¬¢«¢¤—°šÁÀ¶Ÿ£Ÿ›¨
–ºŠ ŒàŽ‘Œ³– {0, . . . , n − 1} –ß—˜–ºŽ‘Œ³’ ¶ –ºŠŒ³£³Œ»¶‘›£³Œ ¹–ºŠŒâ—»š¥¢¤”–ïŽçŒ ”¡Œ³š ±ŸŒß±´©“š ŸŒë—»š¤–ŒŸ£¢¤£³Œ¬–ŒIF ©¯Žë–ºŠŒ
Ž‘Œ ” Œ³š ±ÄŒÝÂ¶ Dô©¯’•” Œ¬Ž π(0), . . . , π(n − 1) Â¶ó© ¢ Œ³£¬¨ ”––˜—š π — ¶ó©“šFœ›š¤’ J — ¶ß—»–±Ÿ›š¤–î©“—°š¤Ž
ŒXD¥ŒŸ£KJ š ” ¨½ ŸŒ³£ ¶Ÿ£Ÿ›¨ {0, . . . , n − 1} Œµ ©µ±³–º’EJ ›š ±ŸŒçÅ
‰‹ŠŒ ¢¤£³ŸÁ›£Ä©“¨ cycles.C Ž³Š›”’ F £¦Ž³–ž±¬ŠŒÄ± œ¸ÈŠŒ¬–ºŠŒ³£ –ºŠŒÝ—°š¥¢¤”–Ž‘Œ ”¡Œ³š ±ŸŒ ŽÑ©¯–˜—˜Ž Œ¬Ž
–ºŠ¥—˜Ž½±Ÿ›šF“—˜–˜—™›š ß©“šF — ¶žš “– ¿–Œ³£¬¨ —»š ©¯–Œ ¸¹—˜–ºŠ © ±Ÿ›£¬£ŸŒ¬Ž™¢ ›šF“—°šÁœ¨½Œ¬Ž³ÙŸŽçìô©›Ù³Á«áÜÉ ŒçÅ èµÉ³× ٟ¶ó
–ºŠÎ Œ ʛҝ—°š¥ÛñË¢¤Ûñʛ”Ø –
ʛÞÀ
—»šFµŒÄŒIF Œ³š ±Ä FµŒ¬ŽÀ©ë¢ Œ³£¬¨ ”––˜—™› š π ‹–ºŠŒ ¢¤£³ŸÁ›£Ÿ©“¨ Ž³Š›”’ F ›”–ñ¢¤”–ï–ºŠŒ
Â¶ π Å
±XJÚ±¬’ªŒ —»š π —˜Žß©“š J Ž‘Œ ” Œ³š ±ÄŒóÂ¶¿–ºŠŒò¶ç›£¬¨ ( n1 n2 nk ) ŽŸ” ±³Š½–ºŠ©¯–
n2 = π(n1 ),
n3 = π(n2 ),
nk = π(nk−1 ) ©“šF n1 = π(nk ) Ó©“šF
...,
n1 —»Ž–ºŠŒ ŽŸ¨½©¯’°’§Œ³Ž³–ÏŒ³’§Œ³¨½Œ³š¤–â©“¨ ›šÁ n1 , . . . , nk Å
š J ±XJÚ±¬’§Œ”š — ” Œ¬’ J FµŒ¬–Œ³£¬¨ —»š Œ¬Ž–ºŠŒ π ND ©¯’­”¡Œ¬Ž Â¶À©¯’°’ —˜–ºŽ®Œ¬’ªŒ³¨ Œ³š¤–ºŽ ›šœ–ºŠŒž“–ºŠŒ³£ßŠ©“šF
ŒXD¥ŒŸ£KJ󌬒ªŒ³¨ Œ³š¤–𤋮¢«¢ Œ´©“£¦Ž —»š Ž‘›¨ Œà± J ±¬’ªŒbHî¸ÈŠ¥—ŠÀ¨ —°Á“Š«– ŸŒ¿Â¶ –ºŠŒÓ–˜£¬— D̗ ©¯’ç¶‘›£¬¨ (n1 ) ¨ Œ´©“š
—»šÁ –ºŠ©¯– π(n1 ) = n1 MôŽ‰ÕŠ¥—˜Ž¿—»¨¿¢¾’­—™Œ¬Ž –ºŠ©¯– –ºŠŒâ¢Œ³£¬¨ž”––˜—š FµŒŸ±Ä›¨¢ “Ž‘Œ³Ž —»š¤–Ý© ” š — ”¡Œ
Ž‘Œ¬–ãÂ¶ßX± J ±³’§Œ¬ŽÑÅ ›£žŒ «©“¨¢¾’ªŒ ȖºŠŒã¢ Œ³£¬¨ ”––˜—™›š π Á›— D¥Œ³š KJ
π(0) = 4,
π(1) = 2,
π(2) = 3,
π(3) = 1,
π(4) = 0
FµŒŸ±Ä›¨¢ “ŽçŒ¬Ž—°š¤–ó–ºŠŒÀ–˜¸ÓÝ± J ±¬’ªŒ¬Ž ( 0 4 ) ©“šF ( 1 2 3 ) Å
^
\ `I^
`G^
`
Exercise 72 Ӑ›š¤ŽÄ—NFµŒ³£ –ºŠŒ ³Ž –˜£¬—»šÁ½¨½©¯–±¬Š¥—°šÁ ©¯’ Á«›£¬—»–ºŠ¥¨ Â¶ È£ŸŸÁ›£Ÿ©“¨ ôÅ ¹£³ D¥Œ –ºŠ©¯–ö琛£
©¯’»’ m > 1, n m ŠŒ³£ŸŒ Œ“ —˜Ž³–ºŽ © Ž‘Œ´©“£³±¬Š ޳–˜£¬—»šÁ s Â¶ë’ªŒ³šÁ“–ºŠ m ©“šF © –Œ – t Â¶ë’ªŒ³šÁ“–ºŠ n
›š ¸ÈŠ¥—î±¬Š –ºŠŒ©¯’•Á«›£¬—»–ºŠ¥¨ —°š È
£³ÄÁ›£Ÿ©“¨ 㢠ŒŸ£º¶‘›£¬¨óŽ m(n − m + 1) ±Ä›¨¢©“£¬—»Ž‘›š¤Ž ŸŒ¬–˜¸ÓŒŸŒ³š
ŽŸ—°šÁ“’§Œ ±¬Š©“£Ÿ©µ±¬–ŒŸ£¦ŽçÅ
Exercise 73 Ӑ›š¤ŽÄ—NFµŒ³£Ó–ºŠŒ ¶ç“’»’ª›¸È—°šÁ ¢¤£³ŸÁÌ£Ÿ©“¨
ŽŸ—™›š ©¯’‹©“£¬£Ÿ©JÚÅ
^
–ºŠ©¯– FµŒ š Œ¬Žâ©“šF¿—»š —»–˜—™©¯’•— Œ¬ŽÓ©–ºŠ¥£³ŒŸŒGF“—»¨ ŒŸš
# include < iostream >
int main ()
{
int a [4][2][3] =
{ // the 4 elements of a:
{ // the 2 elements of a [0]:
{2 , 4 , 5} , // the three elements
{4 , 6 , 7} // the three elements
},
{ // the 2 elements of a [1]:
{1 , 5 , 9} , // the three elements
{4 , 6 , 1} // the three elements
of a [0][0]
of a [0][1]
of a [1][0]
of a [1][1]
`
},
{ // the
{5 , 9 ,
{1 , 5 ,
},
{ // the
{6 , 7 ,
{7 , 8 ,
}
2 elements of a [2]:
0} , // the three elements of a [2][0]
3} // the three elements of a [2][1]
2 elements of a [3]:
7} , // the three elements of a [3][0]
5} // the three elements of a [3][1]
};
return 0;
}
¬£ —˜–Œœ©Ý¢¤£ŸŸÁ›£Ÿ©“¨ threedim_array.C –ºŠ©¯–󌳚¤Š©“š ±ŸŒ¬Ž –ºŠ¥—˜Ž ¢¤£ŸŸÁ›£Ÿ©“¨ K J © Hîš Œ¬Ž³–ŒGFKM
int Dô©¯’•” Œ¬Ž
’ªÌ³¢ –ºŠ©¯–È—»–Œ³£Ÿ©¯–Œ¬Ž® D¥Œ³£¿–ºŠŒß©“£¬£Ÿ©J a ©“šF —˜–ºŽàŽŸ”¾ Ÿ©“£¬£Ÿ©J Žà–½›”–ñ¢¤”– ©¯’»’¾–ºŠŒ
–ºŠ©¯–À©“£³Œ ޳–›£³GŒ F —°š a ©“
š F —»–ºŽ ŽŸ”¡ Ä©“£¬£Ÿ©JôŽÑÅ
 𠐓–¿”Ž‘Œó£Ÿ©“šFµ›¨ ©µ±Ä±ŸŒ¬ŽŸŽ – Fµ –ºŠ¥—»Ž ^ ¬” ` –
¢ ›—°š¤–Œ³£ž©“£¬—˜–ºŠ¥¨½Œ¬–˜—î±çÅ
Exercise 74
£¬—˜–Œ © ¤
¢ £ŸŸÁ›£Ÿ©“¨ frequencies.C
º– Š©¯–£³Œ´© F¯Ž © – Œ –ò¶Ÿ£³›¨
H’•— ôŒ —»š ¹
£³ŸÁÌ£Ÿ©“¨ M ©“šF ›”–ñ¢¤”–ºŽ –ºŠŒã¶Ÿ£³Œ ” Œ³š ±Ÿ—ŽÝÂ¶ –ºŠŒ ª’ Œ¬–º–Œ³£¦Žž—°š
³Ž –î©“šF«©“£IFœ—°š¥¢¤”–
–ºŠŒó–Œ – à¸ÈŠŒ³£³Œ
¸ÓŒ Fµó𠐓– F“—»Ž³–˜—»šÁ›” —˜Ž³Š ³Œ³–˜¸ÏŒÄŒ³š ’ª›¸ÓŒ³£ó©“šF ”¯¢«¢ Œ³£ó±´©¯Ž‘Œß’ªŒ¬–º–Œ³£¦ŽçÅ ›£ß–ºŠ¥—˜Ž Œ ڌ³£Ÿ±³—˜Ž‘Œ J ›”
¨½©J ©¯Ž³ŽŸ”¨½Œ –ºŠ©¯–â–ºŠŒ – JÑ¢ Œ char —»¨¢¾’ªŒ³¨½Œ³š¤–ºŽ
Œ³š ±Ÿ F“—»šÁ¥Å ‰‹Š¥—»Žß¨ ŒÄ©“š¤Ž –ºŠ©¯–¿©¯’°’
±¬Š©“£Ÿ©µ±³–Œ³£¦ŽÀŠ©D¥ŒÀ—°š¤–Œ™Á«ŒŸ£ D ©¯’­”¡Œ¬Ž—°š {0, 1, . . . , 127} Å
›£³ŒŸ DôŒ³£ —»š
ò–ºŠL
Œ Dô©¯’•” Œ³Ž Â¶
–ºŠŒ 26 ”¯¢«¢ Œ³£ ±Ä©¯Ž‘Œ’­—»–Œ³£Ÿ©¯’­Ž ’A’ ” ¢œ– ’Z’ ©“£³Œ ±Ÿ›š¤Ž‘ŒÄ±³”–˜— D¥Œ š ” ¨½ ŸŒ³£¦Ž¿—°š {65, . . . , 90} ^ ¶‘› £ `
–ºŠŒÀ ’ª›Öµ¸Ó
Œ ‹
£Ä©“ɳšÐçÁ«ËÂá܌ É³Ò —»`Ȏ Ô×{97,
صصŒ³£ó
ÛÜØµå±´©¯ËŽ‘ÇµŒ ÛÜÒ·’•—˜Ê›–ŒŸØó£Ÿ©¯ËÇڒ²Ž Éâ’a’
áñìôÍÂÛñÙ³” Ò·¢ Ê›Ô – ’z’ ȖºŠŒbDô^º©¯ÆÈ’•” ǵÉ
ÊÌÍ ÉI.P«.Б.ÞÀ, 122}
ÎÚáÜÉÏҝŠǵʛÖÚáñèóì¥ÛÜɳáñèžËÂǵÉ
¬
Œ
³
Ž

–
Ÿ
Œ
£
«
F
©
J
Ô×ʛáÜáÜʦæ ÛñØÚåàʛ֫˝ÎÚ֫ˬé
Frequencies:
a:
45 of 520
b:
5 of 520
c:
5 of 520
d:
28 of 520
e:
65 of 520
f:
4 of 520
g:
13 of 520
h:
27 of 520
i:
j:
k:
l:
m:
n:
o:
p:
q:
27 of 520
0 of 520
3 of 520
20 of 520
10 of 520
30 of 520
43 of 520
4 of 520
0 of 520
r:
s:
t:
u:
v:
w:
x:
y:
z:
Other :
19 of 520
36 of 520
31 of 520
9 of 520
6 of 520
19 of 520
0 of 520
34 of 520
0 of 520
37 of 520
2.6.16 Challenges
Exercise 75 ‰‹ŠŒÕ¶ç©µ±¬–ï–ºŠ©¯–·©“š “
© £¬£Ä©JžŠ©¯Ž
¢¾’ªŒ ¹—»š Ú Œ³£Ÿ±³—˜Ž‘Œ ½©“šFž—»š Ú Œ³£³±Ÿ—˜Ž‘Œ
ڌIF
’ªŒ³šÁ“–ºŠ —˜Ž¿Â¶³–Œ³š —°š ±Ÿ›š ¥D ŒŸš —š¤–îÅ › £ Œµ©“¨
¹–ºŠŒ 𠔍 ³Œ³£žÂ¶ Œ³’§Œ³¨½Œ³š¤–ºŽ – ½ ³Œ £ŸŒÄ© F °— š¤– –ºŠŒ
©“£¬£Ÿ©J Š© F – ŸŒ¢¤£³ D‘—NFµŒIF ©¯Ž –ºŠŒ £¦Ž³–Ï—»š¥¢¤”–â—»š ›£IFµŒ³£ë¶‘›£ó–ºŠŒ¢¤£³ŸÁÌ£Ÿ©“¨ – ŸŒ½©« ¦’ªŒ –
FJ¯š ©“¨ž—î±´©¯’»’ J ©¯’»’ªÌ±Ä©¯–ŒÀ©“š ©“£¬£Ÿ©J Â¶ã–ºŠŒ ©¬¢«¢¤£³³¢¤£¬— ©¯–Œà’§ŒŸšÁ“–ºŠÅ ”– —»š ¢¤£Ÿ©µ±¬–˜—î±ÄŒ ¹–ºŠŒà’ªŒ³šÁ“–ºŠ
Â¶¿–ºŠŒ—°š¥¢¤”–òŽ‘Œ ”¡Œ³š ±ŸŒ —˜Ž®Â¶³–Œ³š 𠐓– ‘𠐛¸¹š © ¢¤£¬—™›£¬—™Å
œŒ ¸Ó›”’ F –ºŠŒ³£ŸŒ˜¶‘›£³Œ ’­— ôŒÝ– ¸¹£¬—˜–Œ ©½¢¤£³ŸÁ›£Ä©“¨ –ºŠ©¯– £ŸŒÄ© F¯Ž © Ž‘Œ ” Œ³š ±ÄŒ Â¶ —»š¤–Œ Á«Œ³£¦Ž
¶Ÿ£Ÿ›¨ ޳–î©“
š F«©“£ F —°š¥¢¤”– —»š¤– ©“š ©“£¬£Ÿ©J ¸ÈŠŒ³£³Œ®–ºŠŒ®’ªŒ³šÁ“–ºŠ Â¶À–ºŠŒ®Ž‘Œ ” ŒŸš ±ŸŒ®—˜Ž 𠐓– ‘𠐛¸¹š
³Œ»¶‘›£³Œ¬Š©“
š F H´©“
š F 𠐓–¢©“£¦– Â¶·–ºŠŒ·—»š¥¢¤”V– M –ºŠŒÕ¢¤£³ŸÁÌ£Ÿ©“¨ Ž³Š›”’ F뎟—»¨¿¢¾’EJ £³Œ´© F®›š Œ 𠔍 ³Œ³£
©ä¶³–ŒŸ£ ©“𠐓–ºŠŒ³£À” š¤–˜—˜’ –ºŠŒ ޳–˜£³ŒÄ©“¨ ³ŒÄ±Ÿ›¨ Œ³ŽžŒ³¨¢¾– JµÅ
Ӛ Œ ¢ “ŽŸŽŸ—™ ¦’ªŒ ޳–˜£Ä©¯–Œ™Á J —»ŽÝ– FJ š ©“¨ —î±´©¯’»’ J ©¯’°’§Ì±´©¯–Œ ©“š ©“£¬£Ÿ
© J Â¶ ’ª©“£™Á«Œ ’§Œ³šÁ›–ºŠ ¬—§Á
Œ³š ›”ÚÁ“Š – ŽŸ–›£³Œ ©“š Jߢ “޳ŽÄ—™ ¦’ªŒ—°š¥¢¤”–òŽ‘Œ ”¡Œ³š ±ŸŒç
Å ”–ò— ¶¿–ºŠŒÀŽ‘Œ ” Œ³š ±ÄŒÀ—˜Ž¿Ž³Š›£¦– ȖºŠ¥—˜Ž —˜Žß©
Š¥” Á¥Œ ¸ ©¯Ž³–Œ Â¶À¨½Œ³¨ ›K£ J 멓
š F½— ¶ß–ºŠŒ Ž‘Œ ” Œ³š ±ÄŒ —»L
Ž D¥Œ³K£ J ’ª›šÁ ӖºŠŒ ©“£¬£Ÿ© Jݨ —°Á“Š«–ÏŽ³–˜—˜’°’Õš “–
³Œ ’ª©“£™Á«ŒžŒ³š ›”ÚÁ“ŠÅ
©KM
¬£ —˜–Œß© ¢¤£³ŸÁÌ£Ÿ©“¨ read_array2.C –ºŠ©¯–È£³Œ´© F¯ŽÀ©žŽçŒ ¡
” Œ³š Ÿ± Œ Â¶ë—»š¤–Œ Á«Œ³£¦ŽßÂ¶ë” š ‘š ›¸¹š
’ªŒ³šÁ“–ºŠ —»š¤– ©“š ©“£¬£Ÿ©J ©“šF –ºŠŒ³š ›”–ñ¢¤”–ºŽÝ–ºŠŒ Ž‘Œ ¡
” Œ³š Ÿ± ŒçÅ ‰ÕŠŒó¢¤£³ŸÁ›£Ä©“¨ ³Ž Š›”’ F
Žç©¯–˜—»Ž»¶ J󖺊Œ·¶‘“’°’§›¸¹—°šÁ󖘸Ӑ¢¤£Ÿ³¢ Œ³£¦–˜—ŽçÅ
Hî—EM ‰ÕŠŒ ©“¨ ›” 𤖠Â¶ F J š ©“¨ ÎÚ͝—îÊ̱´Î ©¯’»Ê̒ ͝J ËÂÛÜʛ©¯ØÚ’»’ªÐ‘Ì᫱´Ë©¯Êë
–ŒI˝F ÇÚÉ·¨½ØôŒ³Öµ¨ Þb›_£KɟJ Íïʛ—»Ô š ҝÉX”W ŽçÖµŒ ɳص KÙ³J ÉÓɳ–ºá܊É³ŒÞßɳ¢¤Ø¯£³ËŸÒÕÁÌ˝£ŸÇ ©“ÐѨ Ë
”’ _ F ɳɳ©¯Ø –·©“ÍÂɬš БJž
Œ çÐ Í ³Œ
ÇڎŸŠÐXU“›É
è –˜Ò—°Ê ¨ ÔªÀ
Å ‰  ŸŒ ±Ä›š ±³£³Œ¬–Œ –ºŠŒ³£³Œ ¨ž”޳– ³Œß© ¢ “ŽŸ—»–˜— ¥D Œ®±Ÿ›š¤ŽŸ–î©“š¤– a
ŽÄ” ±¬ŠÝ–ºŠ©¯–òš ó¨ ›£³Œ –ºŠ©“š ak ±ŸŒ³’»’­ŽžÂ¶ FJ š ©“¨ —î±Ä©¯’°’EÝ
J ©¯’°’§‘±Ä©¯–ŒIF ¨½Œ³¨ ›£KJ ©“£³Œ—»š
¸ÈɊ Œ³š Ù³ÛÜkɳصٟŒ¬ì’ªŒ³¨ Œ³š¤–ºŽ Š©¥D Œ ŸŒŸŒ³š £³Œ´© F k 1 Å œŒ £Ÿ Œ˜¶‘Œ³£®–ó–ºŠ¥—˜Ž ¢¤£³³¢ Œ³£¦– J ©¯Ž
ҙ”ÎŽ‘ÐçŒ Ù³Éâ
Å ä–ãŒŸš¤ŽŸ”£³Œ³Ž –ºŠ©¯–âŒXôD Œ³š ¥D Œ³£KJ ’ª›šÁ Ž‘Œ ” Œ³š ±ÄŒ¬Žž±´©“š ³ŒÀ£ŸŒÄ© F îH ”¯¢
–ó–ºŠŒ ©¬¢«¢¾’•—î±Ä©« ¬’§Œ¨ Œ³¨½›£K½
J ’•—»¨ —˜–ºŽNM Ó ³”– –ºŠ©¯– ŽŸŠ›£¦–·Ž‘Œ ” Œ³š ±ÄŒ¬Žó±Ÿ›š¤ŽÄ”¨ Œ ›š¤’EJ
’•—˜–º–º’ªŒÀ¨½Œ³¨ ›£KµJ Å
H—EM ‰ÕŠŒžš ” ¨½ ŸŒ³£ Â¶ ©¯Ž³ŽŸ—°Á̚ ¨ Œ³š¤–ºŽ ŸH Â¶ ôD ©¯’•” Œ¬Ž –œ©“£¬£Ÿ©J Œ¬’ªŒ³¨ ŒŸš¤–ºŽNó
M ¢ Œ³£º¶ç›£¬¨ ŒGF Ž‘
¶Ñ©“£ÓŽ³Š›”’ À
F ©¯–‹©“š J –˜—»¨ Œã ³Œ ¢¤£³³¢ ›£¦–˜—™›š ©¯’– –ºŠŒ š ” ¨½ ³ŒŸ£¿Â¶·Ž‘Œ ” Œ³š ±ÄŒ¿Œ³’§Œ³¨½Œ³š¤–ºŽ
–ºŠ©¯–ÏŠ©¥D Œ ³ŒÄŒ³š £ŸŒÄ© F Ž‘ ¶ç©“£ ¸¹—˜–ºŠ –ºŠËŒ®ÛñÞß
Žç©“Éè½É Œ Ù³¨½
ÛÜɟŒÄØÚ©“ÙĚ ì —°šÁ Â¶ã¢¤£³³¢ ›£¦–˜—î›š ©¯’•—˜– J ©¯Ž
©« Ÿ ¥D Œ‘Å œŒ £³Œ˜¶çŒ³£Ó– –ºŠ¥—˜ŽÃ¢¤£³³¢ Œ³£¦– J ©¯Ž
Å ä– Œ³š¤ŽŸ” £³Œ¬Ž –ºŠ©¯– –ºŠŒ ¢¤£Ÿ
ÁÌ£Ÿ©“¨ —»Ž ›š¤’ J KÝ
J ©Ý±Ä›š¤Ž³–î©“š¤– ¶ç©µ±³–›£À޳’ª›¸ÓŒ³£ß–ºŠ©“š –ºŠŒÓ¢¤£³ŸÁ›£Ä©“¨ read_array.C
–ºŠ©¯– ‘𠐛¸ÈŽ –ºŠŒŽ‘Œ ”¡Œ³š ±ŸŒ®’ªŒ³šÁ“–ºŠ½—»š © FD ©“š ±ŸŒ‘Å
M
¬Œ –Œ³£¬¨ —»š ŒÓ–ºŠŒë±Ä›š¤Ž³–î©“š¤–ºŽàÂ¶Ã¢¤£Ÿ³¢ ›£¦–˜—î›š ©¯’•—˜– J a ¶ç›£ ¢¤£³³¢ Œ³£¦–˜—™Œ¬Ž Hî—EM ©“šF H— MÀÂ¶J ›” £
¢¤£³ÄÁ›£Ÿ©“¨½Å
Ì›£¦Ž È
£³ÄÁ›£Ÿ©“¨ ±Ä©“š Ÿ ŒŸ±Ÿ› ¨½Œ ”—»–Œ —°š Œ ±³—™Œ³š¤– àŽŸ—°š ±ŸŒ½ŒXD¥Œ³£KJ
Exercise 76 ›£ó’ש“£îÁ«Œ³£
БáÜá
޳–Œî¢ i Œµ©“¨ »— š Œ¬Ž
±ÄŒ¬’»’­Ž½Â¶®–ºŠŒ Ì›£ —»š ›£ FµŒ³ £ –  šF º– ŠŒ H§¢ “Ž³ŽŸ— ¦’EJ DôŒ³£KJ®¶‘Œ³¸ M ›š Œ¬Ž
–ºŠ©¯–⊩DôŒ – ³Œ ’ª©« ŸŒ¬’ªŒIF ¸¹—˜–ºŠ i —°š –ºŠ©¯–ÏŽ³–Œî¢ Å
³¬Œ –º–ŒŸ£ Ž‘“­’ ”–˜—š ¸Ó›”’ F ŸŒó– Œµ©“¨ —»š Œ
›š¤’ J –ºŠŒ š ŒŸ—°Á“Š Ÿ›£¦Ž Â¶®–ºŠŒ ±ÄŒ¬’»’­Ž –ºŠ©¯–à©“£³Œ ©¯’­£ŸŒÄ© FJ ’ש« ³Œ¬’ªŒIF ¸È—»–ºŠ i − 1 ώŸ—°š ±ŸŒ ›š¤’ J –ºŠŒ¬Ž‘Œ
©“£³Œ ±Ä©“šF“—NF«©¯–Œ³ŽÈ¶ç›£Á«Œ¬–º–˜—°šÁ ’ש« ³Œ¬’ i Å
£¬—˜–Œ®©¿¢¤£ŸŸÁ›£Ÿ©“¨ shortest_path_fast.C –ºŠ©¯–È£³Œ´©¯’­— Œ¬Ž –ºŠ¥—˜Žà— FµŒÄ© ·©“šF ¨ Œ´©¯ŽŸ”£³Œ–ºŠŒ
¢ Œ³£º¶ç›£¬¨½©“š ±ÄŒÁ¥©“—°š ›š Ž‘›¨½Œ ’ש“£îÁ«ŒŸ£
Exercise 77 š
n2 + n + 41
Ì›£¦Ž®Â¶J ›” £ ±³Š›—ŒçÅ
ŒŸ›š¤Š©“£IF Ȕ’§ŒŸ£ F“—˜Ž‘±Ä D¥Œ³£³ŒGF –ºŠŒ
”¡© F“£Ÿ©¯–˜—™±Ï¢ “’ J¯š ›¨ž—™©¯’
¸¹—˜–ºŠ –ºŠŒã¶ç“’»’ª›¸¹—»šÁ £³Œ³¨ ©“£ ©« ¦’ªŒ¢¤£³³¢Œ³£¦– J — ¶ J ›” ŒXDô©¯’•”¡©¯–Œ®—˜– ¶‘›£ n = 0, 1, . . . , 39 Jڐ›”
©¯’•¸Ó©J Ž Á«Œ¬–ë©®¢¤£¬—»¨½Œß𠔍 ³Œ³£ 멓šF ¨ ›£ŸŒŸ D¥Œ³£ 멯’°’‹–ºŠŒ¬ŽçŒë¢¤£¬—»¨ Œßš ” ¨½ ŸŒ³£¦Žž©“£³Œ F“— Œ³£ŸŒ³š¤–îÅ
Œ³£ŸŒ —˜Ž –ºŠŒ ’­—»Ž³–ãÂ¶ß©¯’»’ –ºŠŒ 40 ¢¤£¬—»¨ Œ¿š ”¨ ³Œ³£¦Ž Á«Œ³š Œ³£Ä©¯–ŒIF KJ ¹”’ªŒ³£ Ž ¢ “’ J 𠐛¨ —™©¯’
41 43 47 53 61 71 83 97 113 131 151 173 197 313 347 383 421 461 503 547 593 641 691 743 797 1033 1097 1163 1231 1301 1373 1447 1523 1601 Å
Œ³£³Œ ¸ÓŒß©“£³Œ®±Ÿ›š ±ÄŒ³£¬š ŒIF ¸¹—»–ºŠ½–ºŠŒ
¢ “’ J 𠐛¨ —™©¯’­Ž —°š –ºŠŒ½Ž‘Œ³š¤Ž‘Œ½–ºŠ©¯–À–ºŠŒXJ
–ºŠ©¯–ã©
223 251 281
853 911 971
” Œ¬Ž³–˜—™›š ¸ÈŠŒ¬–ºŠŒ³£–ºŠŒ³£³Œ®©“£³Œ¿Ž³–˜—»’»’ ³Œ¬–º–Œ³£ ”¡© F“£Ÿ©¯–˜—™±
¡
Á¥Œ³š Œ³£Ÿ©¯–Œ Œ D¥ÖµŒ³áܚ ɟͨ½
WôÖڐ›Ð‘£³á܌ Û²Ë ¢¤
ì £¬—°¨ Œ 𠔍½ ŸŒ³£¦ŽçÅ œŒ Žç©J
2
” © F“£Ÿ©¯–˜—™±Ï¢“’EJ¯š ›¨ž— ©¯’ an + bn + c Š©¯Ž
¡
p — ¶–ºŠŒ p 𠔍½ ŸŒ³£¦Ž
|an2 + bn + c|,
n = 0, ..., p − 1
©“ £³Œ F“— Œ³£³ŒŸš¤–⢤£¬—»¨ Œ š ” ¨½ ³ŒŸ£¦ŽçÅ J –î© ‘—°šÁ ©« ¦Žç“’­”–Œ Dô©¯’•” Œ³Ž ¸ÓŒÝ–ºŠŒŸ£³Œ˜¶‘›£ŸŒœ©¯’²Žç¼©¯’° ’§›¸
š Œ™Áô©¯–˜— D¥ŒÏ¢¤£¬—»¨ Œ³Ž Å Ž®©“š¼Œµ©“¨¿¢¾’§Œ ò’ªŒ¬–·”Ž ’§Ì ©¯–·–ºŠŒÏ¢ “’ J 𠐛¨ —™©¯’ n2 − 10n + 2 Å ›£
n = 0 ï¸ÓŒÁ«Œ¬– 2 H°¢¤£¬—°¨ Œ M ¶‘›£ n = 1 ¸ÏŒ ¥ ¦–î©“—»š −7 H™š Œ™Á¥©¯–˜— D¥Œâ¢¤£¬—»¨½Œ M ©“šF n = 2 Á›— DôŒ¬Ž
−14 Hîš  Hîš Œ Á¥©¯–˜— DôŒ M¢¤£¬—°¨ Œ MôÅ ‰ÕŠŒ ¹”’ªŒ³£ ”¡©¯’•—˜– J Â¶ n2 − 10n + 2 —»Žà–ºŠŒ³£³Œ˜¶ç›£³Œ 2 ³”–ïš “–
Š¥—°Á›ŠŒ³£ÌÅ
Œ³£³ŒÈ—˜Ž¹–ºŠŒÓ±¬Š©¯’°’§Œ³šÁ¥Œ ¸¹£¬ —»–ŒÏ©È¢¤£³ŸÁ›£Ä©“¨ –ºŠ©¯–¾Ž J ޳– Œ³¨½©¯–˜—™±Ä©¯’°’EJ Ž‘Œ´©“£³±¬ŠŒ¬Ž¤¶‘›£ © ”¡© F“ £Ä©¯–˜—î±
¢ “’ J 𠐛¨ —™©¯’¥¸¹—˜–ºŠ Š¥—°Á“Š Ȕ’§Œ³£ ”¡©¯’• —˜– JµÅß
‰ÕŠŒÈÁ¥‘©¯’«—˜ŽÈ– šF ©·¢ “’EJ¯š ›¨ž— ©¯’¥¸¹—˜–ºŠ ¹”’ªŒ³ £ ”¡©¯’
—˜– Jž’ª©“£™Á«Œ³£–ºŠ©“š 40 —»š ›£ FµŒ³£¿– ³Œ´©¯– n2 + n + 41 Š݊©¯–È—»Žë–ºŠŒ Š¥—°Á“ŠŒ³Ž³– Ȕ’§Œ³£ ”¾©¯’­—»– J
–ºŠ©¯
– Jڐ›” ±Ä©“š š F
›£ã–ºŠ¥—»Žë±¬Š©¯’»’ªŒ³šÁ«Œ ×»–ï±Ä©“š ³ŒÓ”Ž‘Œ»¶Ÿ”’Ú– £³ŒÄ© F –ºŠŒ ¢©“£Ÿ©›ÁÌ£Ÿ©¬¢¾Š ›š ±Ä›š¤Ž³–î©“š¤–òŒ ¬¢¤£³Œ¬Ž³ŽŸ—™›š¤Ž
—»šœ–ºŠŒ Œ¬–î©“—»’²Ž¿Ž‘ŒŸ±³–˜—š Å
Œ HÄ ¦’שµ±
¸ÈŠ¥—»–Œ M
Exercise 78 ‰‹ŠŒ XBM ’ªŒ ¶‘›£¬¨ ©¯– —˜Ž©Ó¶ç›£¬¨½©¯–¶ç›£ ޳–›£¬—»šÁߨ½›š Ì±¬Š¥£³›¨½
—»¨ ©›Á«Œ¬ŽçÅ ‰ÕŠŒ ¶ç›£¬¨½©¯– —˜ŽÀŽç›¨ Œ³¸ÈŠ©¯–à›”– F«©¯–GŒ F ë ¬”– ¨½©“š J ¬£³›¸ÈŽ‘Œ³£¦Ž H š¤–Œ³£¬š Œ¬– ¦¢¾’ª›£³Œ³£
—˜Žß©ó
𠐓–î©« ¬’§Œ Œ Ú±ŸŒ™¢¾–˜ —š Mݱ´©“š Ž³–˜—»’»’ F“—˜Ž ¢¾’ª© J󗰨½©›Á«Œ³Ž¿—°š XBM ¶‘›£¬¨ ©¯–îÅ
š XBM —»¨ ©›Á«Œ ’ªŒ ¶ç›£ ©“š —»¨½©›Á¥Œ š ©“¨ GŒ F test ¨ž—§Á“Š«– ’ªÌ œ’•— ŒÝ–ºŠ¥—˜Ž H–î© ôŒŸš ¶Ÿ£³›¨
— ‘—­¢ IŒ F“— © Ž XBM ¢©›Á«Œ MôÅ
# define test_width 16
# define test_height 7
static char test_bits [] = {
0 x13 , 0 x00 , 0 x15 , 0 x00 , 0 x93 , 0 xcd , 0 x55 ,
0 xa5 , 0 x93 , 0 xc5 , 0 x00 , 0 x80 , 0 x00 , 0 x60 };
ŽJ ›” ±´©“š Á›” Œ³Ž³Ž ¶Ÿ£³›¨ –ºŠ¥—˜Ž XBM ’ªŒ¬Ž ©“£³Œ FµŒ³ŽŸ—°Á›š ŒGF – ŸŒž—°š¤–Œ™Á›£Ÿ©¯–ŒGF —»š¤– 𩓚F
Ž‘›” £³±ŸŒ ±Ÿ FµŒ¸ÈŠ¥—î±¬Š ¨½© ôŒ³ Ž¿—»–ãŒÄ©¯ŽIJ –¢¤£³Ì±ÄŒ¬Ž³Ž¿–ºŠŒ³¨ H–ºŠŒ³£³Œ¿—˜Žàš žš ŒÄŒIF – £³ŒÄ© F󗻚
–ºŠŒ F«©¯–î© ŽŸ—°¨¢¾’ Jݗ»š ±³’­” FµŒ –ºŠŒ ’ªŒã¶Ä£³›¨ –ºŠŒ ¢¤£³ŸÁ›£Ÿ©“¨ –ºŠ©¯–ãš ŒÄŒIF¯Ž – ¢¤£³‘±ŸŒ¬Ž³Ž –ºŠŒ
—»¨ ©›Á«Œ M¥Å 𠐛”£žŒ µ©“¨¢¾’ªŒ test_width ©“šF test_height
ޮБٟ͝FµÊ›Œ³Ò 𠐓–Œ –ºŠŒ¸¹— F¯–ºŠ ©“šF󊍌³—°Á“Š«–
Â¶ –ºŠŒ —»¨ ©›Á«Œ—°š ¢¤— ڌ¬’­ŽçÅ ›£¬¨½©¯’»’ J ¹–ºŠŒ¬Ž‘Œ¿š ©“¨ Œ¬ŽÀ©“£³Œ
· ¬”–È—°šœ–ºŠŒÓ¢¤£³ŸÁ›£Ä©“¨ –ºŠŒ J
±Ä©“š ŸŒ ”Ž‘GŒ F¼’­— ôŒ ±Ä›š¤Ž³–î©“š¤– Œ ¦¢¤£³Œ¬ŽŸŽŸ—š¤ŽçÅ test_bits —˜Ž ©“š ©“£¬£Ÿ©ÇµJ ÉIPµÂÐç¶ èÚɟ±¬Ù³ŠÛÜ©“Þ®£ÄБ©µá ±¬–á܌³Ûñ˝£¦ÉŸŽ ÍäБ–ºá Š©¯–
Œ³š ±Ä FµŒ¬Ž –ºŠŒÝ±Ÿ“’ª›£¦ŽÝÂ¶ –ºŠŒ 16 7 ¢¤— ڌ³’²Žž—°š –ºŠŒó—»¨ ©›Á«Œ‘Å D¥ŒŸK£ J
Â¶
–ºŠŒ ¶‘›£¬¨ 0xd1 d2 Œ³š ±Ä FµŒ¬Ž Œ³—°Á“Š«– ¢¤— ڌ¬’­Ž ¸ÈŠŒ³£³Œ –ºŠŒ ›£ FµŒ³£ —˜Ž£³›¸ðK J½£³›¸ К ›” £ ±Ä©¯Ž‘Œ
0x13 ©“šF 0x00 Œ³š ±Ä FµŒ¿–ºŠŒ 㢤— µŒ¬’²ŽÂ¶â–ºŠŒ
£¦Ž³–Õ£³›¸
¸ÈŠ¥—˜’ªŒ 0x15 ©“šF 0x00 ©“£³Œ ¶ç›£ –ºŠŒ
Ž‘ŒÄ±Ÿ›šF £³›¸ ό¬–±‘Å
Œ³£³Œò—˜Ž¹Š›¸ ©â–˜¸Ó G F“—°Á̗˜– ŠŒ«© FµŒŸ±³—°¨½©¯’«’•—˜–Œ³£Ÿ©¯’ Œ³š ±Ä FµŒ¬Žò–ºŠŒã±Ä“’§›£¦ŽÓÂ¶ Œ³—°Á›Š«–Õ±Ÿ›š¤ŽçŒŸ±³”–˜— D¥Œ
¢¤— µŒ¬’²Ž ¸È—»–ºŠ¥—»š © £³›¸ Å
D¥Œ³£KJœŠŒµ© FµŒŸ±Ÿ—»¨½©¯’
F“—°Á›—»– di —˜Žâ¶Ä£³›¨ –ºŠŒ ŽçŒ¬– {0, ..., 9, a, . . . , f}
¸ÈŠŒ³£³Œ a ” ¢ – f ޳–î©“
š Fⶑ›£ 10, . . . , 15 Å ‰ÕŠŒ®©µ±¬–˜”¡©¯’ 𠔍 ³Œ³£žŒ³š ±Ÿ FµŒGF KJ © ŠŒ«© FµŒŸ±³—°¨½©¯’
’•—˜–Œ³£Ÿ©¯’ —»Ž 16d1 + d2 {0, . . . , 255} Å
›£žŒµ©“¨¿¢¾’§Œ 0x13 Š©¯Ž Dô©¯’•” Œ 1 15 + 3 = 19 Å
›¸ ž©“š J 𠔍 ³Œ³£ —°š {0, . . . , 255} Š©¯Ž © ¬—»š ©“£KJ £³Œî¢¤£ŸŒ¬Ž‘Œ³š¤––˜—™›š ¸¹—»–ºŠ 8 ¬—»–ºŽçÅ 19
¶‘›£ Œ µ©“¨¢¾’ªŒ Š©¯Ž ¬—»š ©“K£ J £³Œî¢¤£³Œ³Ž‘Œ³š¤––˜—š 00010011 Å ‰‹ŠŒâ¢¤— ڌ¬’¹±Ÿ“’ª›£¦Ž ©“£³Œ ¥ ¦–î©“—°š ŒIF KJ
£³Œ´© F“—»šÁ –ºŠ¥—»Ž® Ä©µ± ‘¸ ©“£ F¯Ž Ï©“
š F󗻚¤–ŒŸ£¢¤£³Œ¬–˜—»šÁ 1 ©¯Ž® ¬’ª©µ± ©“
š F 0 ©¯Ž ¸ÈŠ¥—˜–Œ‘Å󉋊¥”Ž ȖºŠŒ £¦Ž³–
Œ³—§Á“Š«–Õ¢¤— µŒ¬’²Ž —»š £³›¸ 1 Â¶ –ºŠŒ test —»¨ ©›Á«Œ ©“£³Œ® ¦’שµ± Ó ¦’שµ± ¹¸ÈŠ¥—˜–Œ ȸȊ¥—˜–Œ ¦’שµ± ȸȊ¥—˜–Œ
¸ÈŠ¥—˜–Œ ¹¸ÈŠ¥—˜–ŒçÅó‰ÕŠŒ ±Ä›¨¢¾’ªŒ¬–Œ test —»¨ ©›Á«Œ ’ªÌ ̎¿’•— ôŒ –ºŠ¥—˜Ž
¬£ —˜–Œë© ¢¤£³ÄÁ›£Ÿ©“¨ xbm.C –ºŠ ©¯– #include ŽÓ©“š XBM ’§ŒëÂ¶Jڐ›”£ë ±¬Š›—™±ŸŒ HNJ ›” ¨½©J¿Ž‘Œ´©“£³±¬Š
Í–ºÊ̊ËäŒ ÐÑ˸ÓɳŒ‘è _ –ì  šèµF ɳå̎ŸÍ” ɳ—˜É³–îÒ©« ¦’ªŒ XBM ’ªŒ¬ŽNM ò©“šFž–ºŠ©¯–Ӑ›”–ñ¢¤”–ºŽ ©“š XBM ’§Œ¹¶ç›£ –ºŠŒŽÑ©“¨ Œà—»¨ ©›Á«Œ
މ‹ŠŒ ¢¤£³ŸÁÌ£Ÿ©“¨ ¨ ©J󸹣¬—˜–Œ–ºŠŒ£ŸŒ¬ŽŸ”’­–˜—»šÁ ’ªŒ – ޳–î©“šF«©“£ F ›”–ñ¢¤”–îÅ
š ±Ä©¯ŽçŒßÂ¶ë–ºŠŒ test —°¨½©›Á«Œ ŠŒë£³Œ¬ŽÄ”’­–˜—»šÁ XBM ’ªŒ ©“šF –ºŠŒà£³Œ³ŽŸ”’­–˜—»šÁ®£³“––ŒGFž—°¨½©›Á«Œ©“£³Œ
©¯Ž¹¶‘“’»’ª›¸ÈŽçÅ
# define rotated_width 7
# define rotated_height 16
static char rotated_bits [] = {
0 x3c , 0 x54 , 0 x48 , 0 x00 ,
0 x04 , 0 x1c , 0 x00 , 0 x1c ,
0 x14 , 0 x08 , 0 x00 , 0 x1f ,
0 x00 , 0 x0a , 0 x15 , 0 x1f };
“ –Œ¿–ºŠ©¯–ï¸ÏŒ 𠐛¸ Š©D¥Œ ߗ»š¤Ž³–Œ´© F Â¶ ŠŒ«© FµŒŸ±³—°¨½©¯’ ’•—˜–ŒŸ£Ÿ©¯’²ŽÑމՊ¥—˜Žë—»Ž F“” Œ – –ºŠŒ
¶ç©µ±³– –ºŠ©¯–·ŒÄ©µ±³Š Â¶Ï–ºŠŒ £Ÿ›¸òŽÏš ŒŸŒGF¯Ž ›š Œë’•—˜–Œ³£Ä©¯’“¶ç›£â—»–ºŽ ¢¤— ڌ¬’­Ž øòŠŒŸ£³Œà–ºŠŒë’ªŒÄ© F“—°šÁž ¬—»–ºŽ
Â¶¿–ºŠŒ ³—»š ©“K£ J £³Œî¢¤£³Œ³Ž‘Œ³š¤––˜—î›š¤Ž ©“£³Œ ŸŒ³—»šÁž—°Á›š ›£³ŒGF«Å
›” ¨½© J Œ –ŒŸ
š F Jڐ›”£ ¢¤£³ŸÁÌ£Ÿ©“¨ –à¢ Œ³£º¶‘›£¬¨ “–ºŠŒ³£ ‘—»šF¯Ž Â¶ã—»¨ ©›Á«Œ ¢¤£³Ì±ÄŒ¬Ž³ŽŸ—°šÁž–î©¯Ž ̎
Â¶ Jڐ›”£ ±¬Š›—î±ÄŒ‘Å
«©“¨¢¾’ªŒ¬Ž —°š ±¬’•"
” FµŒ ±Ÿ“’ª›£ —»š DôŒ³£¦ŽŸ—š HŒ™¢¾’ª©µ±ÄŒ ¦’שµ± ¸È—»–ºŠ ¸ÈŠ¥—˜–Œ ©“šF
D̗™±ŸŒ D¥Œ³£¦ŽÑK© M 뱟›¨¿¢¤”–˜—°šÁ ©½¨ —»£¬£³›£ß—°¨½©›Á«Œ Ž‘±Ä©¯’•—»šÁ –ºŠŒß—°¨½©›Á«Œ H –ºŠ©¯– —˜–ëÌ±Ä±³” ¢¤—™Œ¬Žß’§Œ³Ž³Ž
›£ ¨½›£³Œã¢¤— ڌ¬’­NŽ M Œ¬–±çÅ
K$
07
'*
$&/S? 8*
( A
%.*6
A BI
*
.6#*
% R7
char
R7
L"
/1J
.
α − 256
9%*
,$&
2
6
,)7
-
#
,
{−128,
. .. ", 127}
A ' :
M
.
. *&
A#"
"5
%*(#*@*
/
8
%/ ."K %2
*L R'(9N. %
$ &"5
%"
%*(J
.
α
+(6 %
Chapter 3
Functions
3.1 A first C++ function
©“£Ì Ÿ©›Á«Œ—»š ïÁ¥©“£Ì Ä©›Á«Œž›”–îÅ
–º–˜£¬— ¬”–ŒGF –
ŒÄ›£îÁ«Œ
Ȓª©¯–Œ ”¡ŒŸ±¬Š«Ž‘Œ³’ Ž
‰ Š¥—˜Ž Ž‘ŒŸ±³–˜—î›š —»š¤–˜£Ÿ F“” ±ÄŒ¬Ž ¶Ÿ” 𠱬–˜—î›š¤Ž ©¯Ž © ¨½ŒÄ©“š¤Ž – Œ³š ±Ä©¬¢¾ŽÄ”’ש¯–Œ ©“šF
Õ
£³ŒŸ”Ž‘ŒÓ¶Ÿ” 𠱬–˜—î›š ©¯’•—˜– J ⩓šF – ŽŸ”¡ IF“— D̗ FµŒó© ¢¤£ŸŸÁ›£Ÿ©“¨ —»š¤– ŽŸ”¾ ¦–î©¯Ž ̎ÑÅ ›” ¸È—»’»’
’ªŒÄ©“£¬š Š›¸ – © F FӶĔ𠱬–˜—™›š¤Žà–J ›” £ ¢¤£³ŸÁ›£Ÿ©“¨žŽ ©“šF Š›¸ – ±´©¯’»’¡–ºŠŒ³¨½Å œŒ
©¯’­Ž‘ Œ ¦¢¾’ª©“—°š Š›¸ ¶Ä”𠱬–˜—™›š¤Ž ±Ä©“š Œ ±³—™Œ³š¤–º’EJ ³Œ ¨½© FµŒ ©Dô©“—˜’ש« ¦’ªŒ ¶‘›£½¨½©“š J
¢¤£³ÄÁ›£Ÿ©“¨óŽ®©¯–·–ºŠŒ Žç©“¨ Œ–˜—»¨½Œ ȖºŠ¥£³›” Á“Š Ž‘Œî¢©“£Ÿ©¯–Œ ±Ÿ›¨¿¢¤—˜’ש¯–˜—î›š ©“šF󒭗 ¬£Ÿ©“£¬—™Œ¬ŽçÅ
˜ê Ø Þ®Ð‘Ø ì Ø ÖµÞßɟÍÂÛÜÙ¬Ðçá ٬БáÜٟÖÚáÜÐçËÂÛÜʛصҳí ٳʛÞÀÎÚÖ«ËÂÛÜØµåßΠʦæ¹ÉŸÍÂÒÏÛÜÒëЮÔ×ֵصè ÐçÞßÉ³Ø ËäÐçá ÊÌΠɟÍäÐç˝ÛÜʛØ^»ÒÉ³É
" ɳٟ˝ÛÜÊ›Ø \ é `Äí«Ð‘Øµè ˝ÇÚÉÄÍÂÉâÐÑÍÂÉÓÞ®Ð‘Ø ìßÊÌ˝ÇÚÉÄÍòÊÌ΍ɟÍäÐçËÂÛñʛØÚÒ ËÇ ÐÑËòÊ Ù³Ù³Ö«ÍÈÔÜÍÂÉXW ÖÚÉŸØ ËÂáñì ÛÜØ ÐçεÎÚáÜÛÜÙ¬ÐÑËÂÛÜʛصҳé
ê˜Ø&àí
ÐÑÍÂÉàֵҝɳè ËÂÊßɳص٬ÐçÎÚҝֵá×Ðç˝ÉëҝֵÙäÇ ÔÜÍÂÉXW ÖµÉ³Ø ËÂá²ì ֵҝɳè ÊÌΠɟÍäÐç˝ÛÜʛصҳí ޮР]¥ÛÜØµå Û²Ë
Ÿ
¶
”
š
³
±
˜
–
î
—
›

¤
š
Ž
ɬБҙì ËÂÊëÛñØ U“Ê ]“É·ËÂÇµÉ³Þ Þ®Ð‘Ø ì ËÂÛñÞßÉ³Ò³í›æ Ûñ˝ÇÀèµÛ ÉŸÍÉ³Ø ˹ÐÑÍÂå›ÖµÞßÉ³Ø ËÂҟí ÐçØÚèßÔÜÍÊ›Þ èµÛ ÉŸÍÉ³Ø ËÕÎÚ͝ʛåÌÍäБÞßÒ³í
_ÚÖ«Ë
ÇÚXÐ U¥ÛÜØµå ËÂʏ͝ɟεÍÂʛåÌÍäÐ‘Þ ËÂÇµÉ³Þ É U“ɟ͝ì ËÂÛÜÞßɑé
¸¹—˜–ºŠ›”–
U“ÉŸØžÞßÊÌÍÂÉòÛÜÞÀÎ ÊÌ͝ËäÐçØ ËÂáñì“í‘Ô×ÖÚØµÙŸËÛÜʛصҹÐçÍÂÉ ÖµÒÉ³è®ËÂÊàÒîËîÍÂֵٟËÂÖ«ÍÂÉÓÐãεÍÂʛåÌÍäÐçÞ é ê˜Ø εÍäÐçٟËÂÛÜٳɑíôá×Ðç͝å›É
εÍÂʛåÌÍäБÞßÒ ÙŸÊ›ØÚÒîÛÜÒîËÕʛÔޮБدìàҝޮБáÜáôÔ×ÖÚØµÙŸËÛÜʛصҳí ɳБÙäÇÀÊ›Ô æ·ÇÚÛñÙ´ÇÒÉŸÍ U“ÉŸÒïÐÏٟáÜɬÐçÍÂá²ìàèµÉ YÚØÚɟèÀÒÖ _µËäÐ‘Ò ]é
ƹÇÚÛñÒòޮР]“ÉŸÒÈ۲˷РáÜÊÌËÈɬБÒîÛÜɟÍÈËÂʏÍÂɳБè¤íÚֵصèµÉŸÍÂÒîËÂБصè¾íµÐçØÚèžÞ®Ð‘ÛÜØ ËÂБÛÜØÀËÂǵÉÓÎÚ͝ʛåÌÍäÐ‘Þ é
SÝÉ ÇÚXÐ U“ɏÐçáñÍÂɬБè«ìžÒÉ³É³Ø WôÖµÛñËÂÉ ÐÀØ ÖÚ
Þ _ ÉŸÍ Ê›ÔÕÔ×ֵصٟËÂÛÜʛصҳíҝÛÜØµÙ³ÉëËÂǵÉ
Ô×ֵصٟËÂÛÜÊ›Ø Ê›ÔÃÉ U“ɟ͝ì
main
εÍÂʛåÌÍäÐ‘Þ ÛÜÒòÐ ÒîΠɳٳÛÜБá¤Ô×ÖÚØµÙŸËÛÜÊ›Ø ^ " ɟٟËÂÛÜÊ›Ø \ é é `Äé
͝ʛåÌÍäÐ‘Þ É³ÞÀÎÚÇÚÐ‘ÒÛ ³É³ÒëËÂÇµÉ É³ØµÙ¬ÐçÎÚҝֵá×ÐçËÂÛñÊ›ØœÐ‘Ò™Î É³ÙŸË Ð‘ØµèœÒÇµÊ¦æ ҿǵÊÑæ Ô×ֵصٟËÂÛÜÊ›ØµÒ Ù¬Ð‘
Ø _ É
ֵҝɳè¤é ê»Z
Ë YµÍÂÒîËëèµÉ YÚØµÉ³ÒàÐ Ô×ÖÚØµÙŸËÛÜÊ›Ø Ô×ÊÌÍàٳʛÞÀÎÚÖ«ËÂÛÜØµå®ËÂÇµÉ UÌÐçáÜÖµÉ e Ô×ÊÌÍ Ð å›VÛ U“É³Ø ÍÂɬÐçá‹ØôÖµ
Þ _ ɟÍ
Бصè®å›VÛ U“É³Ø ÛÜØ ˝ɳå›ÉŸÍ ^»ÎÊ›ÒÒVÛ _ÚáñìØµÉ³å“ÐçËÂVÛ U“KÉ `Äé ê»ËïËÂǵɳخ٬БáÜáñҋËÂǵÛÜÒ Ô×ÖµbصٟËÂÛÜʛخÔ×ÊÌ͹ҝIÉ U“ÉŸÍäБá U‘БáÜֵɳÒïÊ›Ô b
Бصè éÃÆ¹ÇµÉâٳʛÞÀÎÚÖ«eËäÐçËÂÛñʛØÚÒ ÐçÍÂÉÓΠɟÍÂÔ×ÊÌÍÂÞßɟèžÊ U“ÉŸÍ·ËÂǵ
É QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËòØ Öµb
Þ _ ÉÄÍÈË ì Î É
é b
e
// Prog : callpow . C
// Define and call a function for computing powers .
# include < iostream >
// PRE : e >= 0 || b != 0.0
// POST : return value is b^e
double pow ( double b , int e)
{
double result = 1.0;
if ( e < 0) {
// b^ e = (1/ b )^( - e)
b = 1.0/ b ;
e = - e;
}
for ( int i = 0; i < e ; ++ i ) result *= b;
double
return result ;
}
int main ()
{
std :: cout
std :: cout
std :: cout
std :: cout
std :: cout
<<
<<
<<
<<
<<
pow ( 2.0 , -2) < < "\n " ;
pow ( 1.5 , 2) < < "\n " ;
pow ( 5.0 , 1) < < "\n " ;
pow ( 3.0 , 4) < < "\n " ;
pow ( -2.0 , 9) < < "\n " ;
//
//
//
//
//
outputs
outputs
outputs
outputs
outputs
0.25
2.25
5
81
-512
return 0;
}
Program 19: ¢¤£³ŸÁ“Ž
´± ©¯’»’ ¢ ›¸ Å
‹É³Ô×ÊÌÍÂÉ æ¹ÉòÉIP¥ÎÚá×БÛñØ ËÂÇµÉ Ù³Ê›ØµÙ³ÉŸÎµËÂҋØÚɟٳɳҝÒÂÐÑ͝ì ËÂÊâÖÚØµèµÉŸÍÂҙËäБصèÀËÂǵÛÜÒÕεÍÂʛåÌÍÂÐ‘Þ ÛñØßèÚÉÄËäБÛÜá˜í“áÜÉÄË ÖµÒ
é [ ÊÌ͋صʛصصɳå“ÐçËÂÛ U“ÉÈÉGP¥Î ʛصɳدËÂÒ í e
å›ÉŸË‹Ð‘Ø ÊU“ÉŸÍ UôÛÜɟæ¼Ê›Ô æ·ÇÚÐçËÃÛÜÒ å›Ê›ÛÜØµåãʛ؏ÛÜØËÂǵÉÈÔ×ÖµØÚÙÄËÂÛÜʛØ
e b
ÛÜÒòÊ _ÚËÂБÛÜØµÉ³èóÔÜÍÂÊ›Þ ËÂǵÉâÛÜØµÛñ˝Û×Бá U‘БáÜÖµÉâÊ›Ô _ôì ˜Ô×ʛáÜè Þ¿ÖÚpow
á²ËÂÛñÎÚáÜÛÜÙ¬ÐÑËÂÛÜÊ›Ø æ·ÛñËÂÇ é¹Æ¹ÇµÛÜÒ·ÛñÒòæ ÇÚÐçËÈ
ËÂǵÉ
1
e
b
ºáÜÊ ÊÌÎÀèµÊôɳҟéÕÆ¹ÇµÉ·Ù¬ÐçÒÉ·Ê›Ô ØµÉ³å“Ðç˝ÛVU“É
Ù¬Ð‘Ø _ ÉòÇÚБصèÚáñɳè _ôì¿ËÂǵɷÔ×ÊÌ͝ޏֵá×Ð e
БÔÜ˝ɟÍ
for
e
b = (1/b)−e
ÛÜØ U“ɟ͝ËÂÛÜØµå
Ð‘Øµè ØµÉ³å“Ðç˝ÛÜØµå ÛñؽËÂǵÉ
˜ÒîËäÐç˝ɳÞßÉ³Ø Ë³íæ¹É Ç XÐ U“ÉÐ‘Ø É WôÖµVÛ U‘БáÜɳدËÏεÍÂÊ _ÚáÜÉŸÞ æ ÛñËÂÇ Ð
Πʛҝ۲ËÂÛVU“ÉÏÉIP¥bÎ Ê›ØµÉ³Ø¯Ë¬é¹Æ¹ÇÚÉãá×Ðçe˝˝ɟͷʛصáñì®if
æ¹ÊÌÍ ]ôÒ·ÛÜÔ í БصèóÛÜØµèµÉ³É³è¤íÚØÚɟå“ÐçËÂVÛ U“ÉÓΠʦæ¹ÉŸÍÂÒ Ê›Ô ÐçÍÂÉ
b=0
0
Þ®ÐçËÂǵɳޮÐÑËÂÛÜ٬Бáñáñì ÖµØÚèµÉ YÚØµÉ³è¤é
3.1.1 Pre- and postconditions
U“ɳخРU“ÉŸÍîì ҝÛñÞÀÎ áñÉïÔ×ÖÚØµÙŸËÛÜʛØÀҝǵʛֵáÜèÀèµÊôٟÖÚÞßÉŸØ ËÃÛñËÂÒ
БصèÀÛñËÂÒ
í ÛÜØ
¤
¢
³
£
Ÿ
Œ
Ä
±
›

š
“
F
˜
—
˜
–
™
—
›

š
¢
“

³
Ž

–
Ä
±
›

š
“
F
˜
—
˜
–
î
—
›

š
ËÂÇµÉ Ô×ÊÌÍÂÞ Ê›Ô Ù³Ê›ÞßÞßÉ³Ø ËÒ³é Æ¹ÇÚÉòÎÚ͝ɳٳʛصèµÛñËÂÛÜʛØÀҙΠɳٳÛVYÚɳÒÕæ ÇÚÐçË ÇÚБÒÕËÂÊàǵʛáÜèÀæ ǵɳØÀËÂÇµÉ Ô×ֵصٟËÂÛñʛØßÛÜÒ
٬БáñáÜɳè¤í›Ð‘صè ËÂǵɹ΍ʛÒîËÂٳʛصèµÛñËÂÛÜʛØàèµÉ³ÒîٟÍÂÛV_ ɟÒU‘БáÜֵɹБصèÉ É³ÙÄËÕʛԵËÂǵɹÔ×ÖµØÚÙÄËÂÛÜÊ›Ø¤é Æ¹ÇÚÛñÒ ÛÜØµÔ×ÊÌÍÂÞ®ÐçËÂÛÜʛØ
БáÜáñÊÑæ·Ò ÖÚÒÓËÂÊ ÖÚØµèµÉŸÍÂҙËäБصè ËÂǵɿÔ×ÖÚØµÙŸËÛÜʛؽæ·ÛñËÂǵʛ֫ËÓáÜÊôÊ ]ôÛÜØµå ÐÑËÏ˝ÇÚÉÐ‘ÙŸËÖ ÐçáÃÒîÊ›ÖµÍÙ³É³Ù³Ê èÚÉ ËÂǵÛÜÒÓÛÜØ
ËÂÖ«ÍÂØ ÛÜÒ¹ÐëØµÉ³Ù³É³ÒîÒÂÐç͝ì®Ô×ÊÌÍ ]“ɳɟÎÚÛÜØµåà˝ÍäÐçÙ ]Àʛԡá×ÐÑÍÂå›ÉŸÍ εÍÂʛåÌÍäÐçÞßÒ³é ê˜Ø ٳБҝÉÓÊ›Ô ËÂÇµÉ Ô×ÖÚØµÙŸËÛÜʛØ
íôËÂǵÉ
pow
εÍÂɳٳʛصèµÛñËÂÛñʛØ
// PRE :
e >= 0 || b != 0.0
ËÂɳáñáÜÒëÖµÒàËÂÇÚÐçË ÞÖµÒîË _ÉߨÚʛصصɳå“Ðç˝ÛVU“ÉÌí ÊÌÍ ^˜ÛÜÔ ÛÜÒàØµÉ³å“ÐçËÂÛ U“É`ãËÂÇÚÐçË
Þ¿ÖµÒîËàǵʛáÜè¤é ÆÈǵÉ
e
e
b = 0
ΠʛÒî˝ٳʛصèÚÛ²ËÂÛÜʛØ
// POST : return value is b^e
ËÂɳáñáÜÒ¹ÖÚÒ¹ËÂǵÉâÔ×ֵصٟËÂÛñÊ›Ø U‘БáÜÖµÉÌíµèµÉŸÎ ɳصèµÛÜØµåÊ›Ø ËÂǵÉâÐç͝å›ÖÚÞßÉŸØ ËÂÒ³é ê˜Ø ËÂǵÛÜҹ٬БҝÉÌíµËÂǵɟÍÂÉÏÛÜÒÈØµÊ É É³ÙŸË¬é
ÆÈǵɿÎÚÍÉ ÐçØÚèÝ΍ʛÒîËÂٳʛصèµÛñËÂÛÜÊ›ØµÒ Òî΍ɳٳÛÜÔÜì ËÂÇµÉ Ô×ֵصٟËÂÛÜÊ›Ø ÛÜØ ЮޮÐçËÂǵɳޮÐçËÂÛñ٬Бá¾ÒÉ³ØµÒÉÌé ïË YÚ͝ÒîË
ҝÛÜå›Ç¯Ë¬í Ô×ÖµØÚÙÄËÂÛÜʛصÒëæ ÛñËÇ U‘БáÜֵɳÒ
É É³ÙŸËâèµÊ صÊÌË YµËÛñØ ËÂÊóËÂǵɮÔÜÍäБÞßÉÄæ¹ÊÌÍ ]ÝʛÔÈÞ®ÐçËÂǵɳޮÐçËÛ “
©
š
F
٬Бá‹Ô×ÖÚØµÙŸËÛÜʛصÒëæ ÇµÛÜÙäÇ Ê›ØÚá²ì ÇÚKÐ U“L
É U‘БáÜÖµÉ³ÒŸé ‹Ö«Ë ÖµÒÛÜØµå ËÂǵÉßÙ³Ê›ØµÙ³ÉŸÎµË Ê›Ô
^ " ɟ٠¢¤£³ŸÁÌ£Ÿ©“¨ ޳––Œ¬Ž
"K(7
S7"K..B#,4 %"K%+*
+*
7.#*
$&7
87
+
*
7*
R
4PK(1M+*
#*
72*
(6#"
* J
22
M7
&$&
.
*L7
@*
/
%B5"
(*@
%,0
.
$
&
-
7.*6M#"
A7
*
7 B#J
.'(*L)
*
\
ËÂÛÜÊ›Ø é \ é `Äí Ð Ô×ÖÚØµÙŸËÛÜÊ›Ø Ù³Ð‘Ø _ÉßٳʛصҝÛÜèµÉŸÍÂɳèœÐ‘Ò ÐóÞ®ÐçËÂǵɳޮÐÑËÂÛÜ٬Бá Ô×ֵصٟËÂÛñÊ›Ø ËÂÇÚÐçË Þ®ÐÑÎ Ò
εÍÂʛåÌÍäÐ‘Þ ÒîËäÐÑËÂÉ³Ò ^»ÛÜÞßÞßɳèµÛ×ÐçËÂɟáñì
ËÂÇµÉ Ô×ֵصٟËÂÛñʛØÝ٬БáÜá ` ËÂÊ ÎµÍÂʛåÌÍäÐ‘Þ ÒîËäÐçËÉ³Ò ^˜ÛñÞßÞßɳèµÛ×ÐçËÂɳá²ì
Ÿ
˜
Œ
‘
¶
›

Ÿ
£
Œ
ËÂǵÉãÔ×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜá `Äé
©ä¶³–ŒŸ·£ صèµÉŸÍ ˝ÇÚÛñÒÀΠʛÛÜØ Ë Ê›Ô
U¥ÛÜÉÄæëíò˝ÇÚÉ ÎµÍÂɳٳʛصèµÛñËÂÛñʛؼҙΠɳٳÛVYÚɳҮËÂǵÉ
ʛÔÏËÂÇµÉ Ô×ֵصٟËÂÛñʛؾí
µ
F
›

½
¨
“
©
°
—
š
ËÂÇµÉ ÒÉŸËÊ›ÔòεÍÂʛåÌÍäÐ‘Þ ÒîËÂÐçËÂɳҿÛÜØ æ ǵÛÜÙäÇ ËÂÇµÉ Ô×ÖµØÚÙÄËÂÛÜʛ؜ޮгì _ ɮ٬ÐçáÜáÜɳè¤é ê˜ØœÙ³Ð‘ҝɞʛÔ
íÃËÂǵɳҝÉ
ÐçÍÂÉ Ð‘áÜá εÍÂʛåÌÍäÐ‘Þ ÒîËÂÐçËÂɳÒãÛÜØ æ ǵÛÜÙäÇ ËÇÚÉ ÐçÍÂå›ÖµÞßɳدËÂÒ Ð‘Øµè
ÐçÍÂɏÛÜØ ЮҝֵÛñËäÐ _ÚáÜÉàÍÂɳáÜÐçpow
ËÂÛÜÊ›Ø¤éÆÈǵÉ
ΠʛÒî˝ٳʛصèÚÛ²ËÂÛÜÊ›Ø èµÉ³ÒÙŸÍÂÛ _ ɳÒÓËÂǵɏÔ×ֵصٟËÂÛÜʛؽÛñËÂҝɟáÜÔ _ ì½Ò™Î bɳٳÛÜÔÜìôÛÜØµeå ǵʦæ ËÂÇµÉ ^°ÍÂɳáÜÉ U‘БدËãÎ Ðç͝ËÏʛÔÃËÂÇµÉ `
εÍÂʛåÌÍäÐ‘Þ ÒîËÂÐçËÂÉ å›ÉŸËÂÒÏ˝ÍäБصҝÔ×ÊÌÍÂÞßɟè¾éëê˜ØÝ٬БҝɿʛÔ
í¤ËÂǵɿÍÂÉÄËÂÖ«ÍÂØ U‘БáÜÖµÉ e æ ÛÜáñá ^»ËÂɳÞÀ΍ÊÌÍäÐçÍÂÛÜá²aì `
pow
b
_ ÉÓÎÚֵ˷ÐçËòҝʛÞßÉÓÞßɳÞßÊÌ͝ì áÜÊôÙ¬ÐÑËÂÛÜʛؤé
Æ Ê ÒÖµÞßÞ®ÐçÍÂÛ ŸÉÌí‹ËÂǵɞΠʛҙËÂٳʛصèµÛñËÂÛÜÊ›Ø ËÂɟáÜáÜÒ ÖµÒßæ ÇÚÐçË ÇÚÐçεΠɳصÒÀæ ÇµÉ³Ø ËÂǵÉóεÍÂɳٳʛصèµÛñËÂÛÜʛ؜ÛÜÒ
ÒÂÐç˝ÛÜÒ YÚɳè¤é ØóËÂǵÉãÊÌ˝ÇÚÉÄÍ ÇÚБصè¤íµËÇÚÉÏΠʛÒîËÂٟʛØÚèµÛñ˝ÛÜÊ›Ø å›Û U“ɳÒ
Ô×ÊÌÍòËÂǵÉ
©¯–ºÊ›Ž‘"
£ í«ËÂǵÛÜÒ¹ÛÜÒ
٬БÒîÉãæ ÇµÉŸÍÉãËÂǵÉãεÍÂɟٳʛصèÚÛ²ËÂÛÜÊ›Ø ÛÜҷصÊÌËòÒÂÐçËÂÛÜNÒ Y ɟè¾é [ ÍÂÊ›Þ Ð Þ®š Ðç ËÂǵÁ›É³”¡Þ®©“ÐÑ£ŸË©“Ûܚ¤Ù¬Ð‘–ŒÄáڌß
Πʛ¸ÈÛ܊دËò
Ô ÌU¥XŒ D¥ÛÜɟŒŸæâ
YÚØµÉ ‹Ð Ô×ֵصٟËÂÛÜÊ›Ø ÛÜÒòÒîÛÜÞÀÎÚáñìÀصÊÌËòèÚIÉ Y صɳèžÔ×ÊÌÍ ÐçÍÂå›ÖµÞßɳدËÂÒïʛ֫ËÂҝÛÜèµÉÏÛñËÂÒ¹èµÊ›Þ®Ð‘ÛÜØ¤é
ƹǵÉàÙ¬ÐçÍÂɳÔ×Öµá ͝ɬБèµÉŸÍ Ê›Ô " ɳٟ˝ÛÜÊ›Ø \ é ÞßÛÜå›Ç¯Ë·ÇÚÐXU“ÉëÍÂɬÐçáÜ۳ɳè
Ê›Ô ËÂÇµÉ Ô×ÖµØÚÙÄËÂÛÜʛØ
٬БصصÊÌËL_ É Ù³ÊÌÍîÍÂɳٟˬé ê˜Ô ÛñÒÀËÂÊôÊ
pow
á×Ðç͝å›ÉÌíïÔ×ÊÌÍ®ÉIPµÐçÞÀÎ áñÉÌí‹ËÂǵÉóٳʛÞÀÎÚÖ«ËäÐç˝ÛÜʛ؜ÞßÛÜå›Ç¯Ë Ê U“ÉŸÍ QÚʦæëíR_ÚÖ«ËßҝֵÙäÇ
ÐÑÍÂÉ ØµÊÌËÀÉIP¥Ù³áÜÖµeèµÉ³è _ ì
ËÂǵÉëεÍÂɳٳʛصèµÛñËÂÛñʛؾé U“É³Ø ÛÜÔ ËÂǵɟ͝ÉàÛÜÒ ØµÊßÊ U“ÉÄÍ QÚÊÑæâíËÂǵZ
É UÌÐçáÜÖµÉëÍäБصå›ÉëʛeÔ ËÂǵÉëË ìôÎ É
ޮгì
ÇÚÐXU“ÉóРǵʛáÜɞÐÑË e í‹ÞßɬБصÛÜØµåóËÂÇÚÐçË ËÂǵÛÜ
Ò U‘БáÜֵɮ٬БصصÊÌË _ É®ÍÂɟ˝ֵ͝ØÚɟè _ôì ËÂÇµÉ Ô×ÖÚØµdouble
ٟ˝ÛÜÊ›Ø¤é Æ¹ÇµÉ
ΠʛÒî˝ٳʛصèÚÛ²ËÂÛÜÊ›Ø ÛÜÒïbËÂǵɟÍÂɳÔ×ÊÌÍÂÉãÛÜÞÀεÍÂɳٳÛñҝÉÏБÒÈæ¹ÉŸáÜá˜é
ê˜ØóËÂǵÉâٳʛدËÂÉIPôË Ê›Ô Ðç͝ÛñËÂǵÞßɟËÂÛÜÙ ÊÌ΍ɟÍäÐçËÂÛñʛØÚÒ¹Ê U“ÉŸÍ ËÂǵÉãÔ×ÖÚØµèÚБÞßɳدËäБá Ë ìôΠɟҳí ۲˷ÛÜÒòʛÔÜËÂɳØ
ËÂɳèµÛÜʛֵҮБصè¼É U“É³Ø ֵصèµÉ³ÒÛñÍÂÐ _ÚáÜɞËÂÊ æ·ÍÂÛ²ËÂÉóèµÊÑæ·Ø¼ÎµÍÂɟٳÛÜÒÉ ÎµÍÂÉ Ð‘صè¼Î ʛÒîËÂٳʛصèµÛñËÂÛñʛØÚÒ ·Î Ðç͝ˮʛÔ
ËÂǵɮÎÚÍÊ _ áñÉ³Þ ÛÜÒ ËÂÇÚÐçË¿Ô×ÖÚØµèÚБÞßɳدËäБá‹Ë ì ΠɳҿޮЬì _ ɳÇÚXÐ U“ÉžèµÛ ÉÄÍÂÉ³Ø Ëáñì ʛ؜èµÛ ɟÍÂɳدˏÎÚá×Ðç˝Ô×ÊÌÍÂÞßÒ³é
ƹÇÚÉÄÍÂɳÔ×ÊÌÍÂÉÌí æ¹É½Ê›ÔÜËÂÉ³Ø Ù³Ê›Ø YÚØµÉ½Ê›Ö«ÍÂҝɟVá U“É³Ò ˝ʜεÍÂÉ ÀБصè ΠʛÒîËÂٟʛØÚèµÛñ˝ÛÜʛصÒÀËÂÇÚÐç˞èµÊ Ù³ÖµÞßÉ³Ø Ë Ê›Ö«Í
ÛñØ ËÂɳدËÂÛÜʛؤí _ÚÖµËÃæ¹É ÇÚXÐ U“É·ËÂÊ ]“ɳɟΠÛÜØÀÞßÛÜØµèËÇ ÐÑˋÛÜØÀ͝ɬБáÜÛñË ì“í›ËÂǵɷÔ×ֵصٟËÂÛñʛØßÞßÛÜå›Ç Ë
_ ¨½É³©¯ÇږºXÐ ŠU“ŒŸÉ⨽赩¯Û –˜—îɟ±´Í©¯É³’ دËÂáñì“é
Arithmetic pre- and postconditions.
ËÂÇÚÐçË _ ÊÌËÇ ÎµÍÂÉ 
Бصè¼Î ʛҙËÂٳʛصèµÛñËÂÛÜʛØ
Assertions.
// PRE :
" Ê ÔªÐçͬíµÊ›Ö«ÍÈÎÚ͝ɳٳʛصèµÛñËÂÛÜʛصҹÐçÍÂÉ ÖÚҙ˷ٳʛÞßÞßÉŸØ ËÂÒïáÜÛ ]“ÉÏÛñØ
e >= 0 || b != 0.0
Æ ÇÚÉÄÍÂɳÔ×ÊÌÍÂÉÌíÚÛÜÔ ËÇÚÉÏÔ×ֵصٟËÂÛÜʛØ
¹
ÛÜÒÈ٬БáñáÜÉ³è æ·ÛñËÂǞÐçÍÂå›ÖµÞßÉ³Ø ËÒ ÐçØÚè ËÂÇÚÐçËU¥ÛÜʛá×ÐÑËÂÉ ËÂǵÉãεÍÂɳٳʛØ
pow
èµÛñËÂÛÜʛؤí“ËÂǵÛÜҋΠБҝÒîɳҹÖÚØµØµÊÌËÂÛÜٟɳè¤é Ø®ËÂÇµÉ Òîì¥Ø¯ËäБٟËÂÛñ٬БááÜÉIU“ɳá˜í ˝bÇÚÉÄÍÂÉÓÛÜÒïeصÊÌËÂǵÛÜØµåâæ¹É Ù¬Ð‘Ø èµÊÐ _ ʛ֫Ë
í¾Ô×ÊÌÍâÉIP«Ð‘ÞÀÎÚáÜÉÌíæ·ÛÜáÜá ٳʛÞÀÎÚÛÜáñÉÌé ‹Ö«ËÏæ¹ÉÙ¬ÐçØÝޮР]“É ҝ֫ÍÂÉ
ÛñË ËÇÚÉ¿Ô×ֵصٟËÂÛÜʛؽ٬БáÜá
pow (0.0, -1)
ËÂÇÚÐçË ËÇÚÛñ
Ò _ áñÖÚØµèµÉŸÍ ÛñÒ èµÉŸËÂɳٟ˝ɳèÝÐçË ÍÖÚØ¯ËÂÛÜÞßÉÌé ҝÛÜÞÀÎÚáÜÉÏæÈЬì ËÂÊ®èµÊ®ËÇÚÛñÒ ÖµÒÉ³Ò
é Ø
¯
©
³
Ž
‘
Ž
³
Œ
¦
£
˜
–
™
—
›

¤
š
Ž
БҝÒîɟ͝ËÂÛÜÊ›Ø ÇÚБÒòËÂǵÉÏÔ×ÊÌÍÂÞ
^ `
æ ÇµÉŸÍÉ ÛÜÒ Ð
εÍÂɳèµÛÜÙ¬ÐÑËÂÉÌí“Б؏ÉIP¥ÎµÍÂɳÒîҝÛÜÊ›Ø Ê›Ô Ð Ë ìôÎ Éïæ ÇµÊ›ÒÉ U‘БáÜÖµÉ³Ò Ù¬ÐçØ _ É¹Ù³Ê›Ø U“ɟ͝ËÂɳèËÂÊ
é
í РٳʛصҝÉXW ÖÚɟØÚٟÉÀÊ›Ô ËÂÇµÉ ÔªÐ‘ÙÄËâËÂÇÚÐçË
ÛÜÒÏØµÊÌËàÐ Ô×ֵصbool
ٟËÂÛñʛØ
_ÚÖ«ËàÐ
é Þ®ÐçٟÍÂʞÛñÒëÐ ÎÚÛÜɟٳÉÀÊ›Ô ÞßɟËÂÐ ºÙ³Ê èµÉ¿ËÂÇÚÐçËãËÂÇµÉ Ù³Ê›ÞÀÎÚassert
ÛÜáñɟÍÓÍÂɟÎÚá×БٳɟÒâæ Ûñ˝ÇÝÐ‘ÙŸËÖ Ðçá
¨
µ
©
³
±
³
£

³Ù Ê èÚÉÓεÍÂÛÜÊÌÍÈËÂʿٳʛÞÀÎÚÛÜá×ÐçËÂÛñʛؾé
S ÛñËÂÇ Ð‘Òîҝɟ͝ËÂÛñʛØÚҟí
¼
Ù¬Ð‘Ø _ ÉÓæ·ÍÛñ˝ËÂɳ؞БÒÈÔ×ʛáÜáÜʦæ Ò³é
O ÊóٟʛÞßÞ®ÐÀÛÜÒâÐçáÜáÜʦæ¹É³è ÛÜØ
pow
// PRE : e >= 0 || b != 0.0
// POST : return value is b^e
double pow ( double b , int e)
{
assert ( e >= 0 || b != 0.0);
double result = 1.0;
// the remainder is as before
...
}
ÆÈÇµÉ¿Î Ö«ÍÎÊ›ÒÉ Ê›Ô‹Ð‘Ø Ð‘ÒÒÉÄ͝ËÂÛÜʛØÝÛñÒÏËÂÊ ÙäÇÚɟ٠]½æ ǵɟËÂǵɟÍâЮٳɟ͝ËäÐçÛÜØ εÍÂɳèµÛÜÙ¬ÐÑËÂɏǵʛáÜèµÒãÐçËâÐ Ù³ÉÄÍ
ËäБÛñØ Î Ê›ÛÜØ¯Ë¬éÀƹǵɏεÍÂɳٳÛñҝÉÀҝɳޮÐçØ ËÂÛÜٟÒÏʛԹÐçØ Ð‘ÒÒÉŸÍîËÂÛÜʛØÝÛÜÒâБÒâÔ×ʛáñáÜÊÑæ·Ò³é
ÛÜÒâÉ U‘БáÜÖÚÐç˝ɳè¤í Бصè
ÛÜÔ ÛñËòÍÂɟËÂÖ«ÍÂØµÒ íÉGP«É³Ù³Ö«ËÂÛñÊ›Ø Ê›Ô ËÂǵÉâεÍÂʛåÌÍÂБÞðËÂÉÄÍÂÞßÛÜØÚÐçËÂɳÒÈÛÜÞßÞßɳèµÛ×ÐÑËÂɳáñìÀæ·ÛñËÂÇ ÐçØ ÉÄ͝ÍÂÊÌÍÓÞßÉ³Ò ÒÂБå›ÉËÂɳáÜáÜÛñØÚå ÖµÒâËÂÇÚÐçËâ˝ÇÚɏÍÂɳÒîΠɟٟËÂÛVU“ɮБÒîҝɟ͝ËÂÛñʛØÝæÈÐ‘Ò U¥Ûñʛá×ÐçËÂɳè¤é ê˜Ô
ÍÂɟ˝ֵ͝ØÚÒ í ÉIP¥É³Ù³Ö
ËÂÛÜÊ›Ø Ù³Ê›Ø ËÂÛñØôֵɳÒÏØÚÊÌ͝ޮБáÜáñì“é¿ê˜Ø ʛ֫ÍâٳБҝÉÌí ˝ÇÚÛñÒãÞßɬÐçØÚÒÓËÂÇÚÐçËÏËÂÇµÉ É U‘БáÜÖÚÐç˝ÛÜÊ›Ø Ê›Ô‹ËÇÚɏÉIP¥ÎµÍÂɟҝҝÛÜʛØ
áñɬБèµÒÈ˝ÊßÐ
鹯¹ÇµÛÜÒÈÞßÛÜå›Ç ˹صÊÌ
Ë _ Éë
Ð U“ɟ͝ì ΠʛáÜÛñËÂÉ æÈгì Ê›Ô ËÂɳáÜáñÛÜØµå
pow (0.0,-1)
ËÂǵÉÏÖÚÒîɟͷËÂÇÚÐç˹ËÂǵÉãÐçÍÂå›ÖµÞßɳد£¬Ë” Ò湖˜—»ÉŸ¨½
ÍÂÉόžÛÜá܌³áÜ£¬É³£³å“›Ðç£ á _ÚÖµËÈËÂǵÉÓΠʛÛÜØ ˹æ·ÛÜáÜáÒÖ«ÍÂɟáñìžÙŸÊ›ÞßÉãÐçٟÍÂʛҝҳé
Ê›Ö¿Ù³Ð‘Ø ÐÑÍÂå›ÖµÉ ËÂÇÚÐçË ÛñË ÛñÒ Ù³Ê›ÒîËÂáñìâËÂÊ ËÂɳÒîË ËÇÚɹÐçҝҝɟ͝˝ÛÜʛ؏ÛñØ¿IÉ U“ɟ͝ì Ô×ֵصٟËÂÛÜʛؿ٬БáÜá»í ÖµÒîË ËÂÊÓÙ¬ÐçËÂÙäÇ
ޮБÙÄÍÂÊ«í
Ð Ô×ɟæ N_ Б
è Ó٬БáÜáñÒ³é ·Ê¦æ¹É U“ɟͳí¯Û²Ë ÛÜÒ Î Ê›ÒÒÛ _ áñɋËÂÊÓËÂɳáÜáô˝ÇÚÉïٟʛÞÀÎ ÛñáÜÉŸÍ ËÊÏÛñ囨ÚÊÌÍÉ ËÂǵÉ
ÞßɬБصÛÜØµåâËÇ ÐÑËÈБ؞ɳÞÀÎµË ìÀÎÚÛÜÉ³ÙŸÉ Ê›Ô Ù³Ê èÚÉ ÍÂÉÄÎ áÜБٳɳҹÛñË¬é Æ¹ÇµÉÓÖÚÒîÖ ÐçáæÈЬìß˝ʿassert
å›Ê¿ÛÜÒ ËÂǵɟ͝ɳÔ×ÊÌÍÂÉ
БÒÃÔ×ʛáÜáÜʦæ Ò ¡èµÖµÍÛÜØµåÏٟÊôèµÉòèµÉ U“ÉŸáÜÊÌÎÚÞßÉ³Ø Ë¬íÌÎÚ֫ˋБҝҝɟÍîËÂÛÜÊ›ØµÒ É U“ÉŸÍì æ ǵɟÍÂÉÈì“Ê›Ö æÈÐ‘Ø Ë ËÂÊ _ ÉÈҝ֫ÍÂÉÈËÇ ÐÑË
ҝʛÞßɟ˝ÇÚÛñØÚå ÍÂɬБáñáñìÝǵʛáÜèµÒ³é S¼ÇµÉ³Ø ËÂǵÉßÙ³ÊôèµÉÀÛñÒàÒîËäÐ _ÚáÜÉ ^˜Ð‘Øµè ØµÊ БÒîҝɟ͝ËÂÛñÊ›Ø UôÛÜʛá×Ðç˝ÛÜʛصÒãÒÉŸÉ³Þ ËÂÊ
ÊôÙŸÙ³Ö«Í Ð‘Ø¯ì¥ÞßÊÌÍÂKÉ `ÄíôËÂɳáñáËÂǵÉãٳʛÞÀÎÚÛÜáñÉŸÍ ËÂÊ ÍÂɳÞßÊ U“É ËÂǵÉâБÒîҝɟ͝ËÂÛñʛØÚҟéÕÆ¹ÇµÉãÞ®ÐçٴǵÛÜØµÉ á×ÐçØÚå›ÖÚБå›É ٟÊôèµÉ
ÛÜÒ¹ËÂÇµÉ³Ø Ð‘ÒÈÉ Ù³ÛÜÉ³Ø¯Ë Ð‘ÒòÛÜÔ¡ì“Ê›Ö æ¹Ê›ÖÚáñèžØµÉ U“ÉŸÍ·Ç XÐ U“ÉÓæ·ÍÂ۲˝ËÂÉ³Ø ËÂǵÉâБÒîҝɟ͝ËÂÛñʛØÚÒÈÛÜØ ËÂÇµÉ YµÍÂÒîËÈÎÚá×Бٳɑé
Æ Ê ÖµÒÉÏËÂǵÉ
ޮБٟÍÂÊ«í æ¹ÉãÇÚXÐ U“ÉãËÂʏÛÜØµÙ³áÜÖµèµÉ ËÂǵÉãǵɬБèµÉŸÍ
é
assert
cassert
3.1.2 Function definitions
ÛÜØµÉ³Ò ! Ê›Ô ÍÂʛåÌÍäÐçÞ èµÉ YÚØµÉ ÐÈÔ×ÖÚØµÙŸËÛÜʛØà٬БáÜáñɳè
é ÆÈÇµÉ Ò™ì¥Ø ËÂÐ PàʛԫÐòÔ×ÖÚØµÙŸËÛÜʛØëèµÉ YÚØµÛñËÂÛÜʛØ
pow
ÛÜÒòБÒÈÔ×ʛáÜáÜʦæ Ò³é
^ í í¤éñé²éñí `
ƹÇÚÛñÒ èµÉ YÚØÚɟÒÓÐ Ô×ÖµØÚÙÄËÂÛÜÊ›Ø Ù¬Ð‘áÜáñɳè í ·
æ ÛñËÂÇ
íÐ‘Øµè æ·ÛñËÂÇ
íñé´é³é¬í Ê›Ô¤Ë ìôÎ ÉŸÒ íñéÄé¬é³í í¥ÍÂɳ£³Ò΍–˜”ɳٟ£¬Ëš¼
ÛVU“– ɟJÑáñ¢ì“í«Œ Ð‘Øµè®æ ÛñËÂÇ Ð ¶ç›£¬¨½©¯’ï©“£îÁ›”¨½Œ³š¤–ºŽ é
¶Ÿ” 𠱬–˜—î›š ³ FJ
" ì¥Ø¯ËäБٟËÂÛñ٬БáÜáñì“í Бصè íñéŸé¬éŸí ÐçÍÂÉ Ë ìôÎ ÉÃØÚБÞßɳҳí БҤæ¹É³áÜá¯Ð‘Ò íñé´é³é¬í ÐçÍÂÉ·ÛÜèµÉ³Ø ËÂÛ Y ÉÄÍÂ
Ò ^ " ɳٟËÂÛÜÊ›Ø \ é é `Äí¯Ð‘صè
ÛñÒïÐ _ÚáÜÊ Ù ]í¥ÐÏҝXÉ WôÖµÉ³ØµÙ³É Ê›Ô Ò™ËäÐçËÂɳÞßÉŸØ ËÂÒÕɳصٳáÜʛҝɳè _ ì
Ù³Ö«ÍÂáñ
ì _µÍäÐ‘ÙŸÉ³Ò ^ " ɳٟËÂÛÜÊ›Ø \ é é `´é
SÝÉã٬Б؞ËÂǵÛÜØ ]®Ê›Ô¾ËÂǵÉãÔ×ÊÌÍÂÞ®Ðçá¤ÐçÍÂå›ÖµÞßÉ³Ø ËÒ¹Ð‘ÒÈÎÚá×ÐçٳɳǵʛáÜèµÉŸÍÂÒ¹Ô×ÊÌͷ˝ÇÚÉãÐ‘ÙŸËÖ Ðçá¤ÐçÍÂå›ÖµÞßÉ³Ø ËÒ¹ËÇ ÐÑË
ÐçÍÂÉÏҝ֫εÎÚáÜÛÜɳè ^˜ÊÌ
Í ™Î БÒîҝɳ
è `¹èµÖ«ÍÂÛÜØµåÐ¿Ô×ֵصٟËÂÛñʛ؞٬Бáñá˜é
[ ÖÚØµÙŸËÛÜÊ›Ø èµÉ YÚØµÛñËÂÛñʛØÚÒÕޏֵÒî˹صÊÌËÈÐçεΠɳÐç͹ÛÜØµÒÛÜèµ
É _ÚáÜÊ Ù ]ôÒ³í¥ÊÌËÂǵɟÍÈÔ×ֵصٟËÂÛÜʛصҳíôÊÌÍ¹Ù³Ê›Ø ËÍÊ›á ÒîËäÐçËÂÉ ÞßɳدËÂÒ³é¡ÆÈǵɟìÏޮгì ÐçεΠɳÐç;ÛÜØµÒÛÜèµÉ ØÚБÞßɳÒîΠБٳɟҳí¬ËÂǵʛÖÚå›Ç¤í¦ÊÌÍ¡Ðç˾å›áÜÊ _ БáÌҝٟÊÌÎ ÉÌíÑáÜVÛ ]“É ÛÜØ
é
callpow.C
µÎ ÍÂʛåÌÍÂÐ‘Þ Þ®Ð³ì¿Ù³Ê›Ø ËÂБÛÜØ®Ð‘Ø®ÐçÍ _ ۲˝ÍäÐçÍìØôÖµÞ_ ɟÍÕÊ›Ô Ô×ÖµØÚÙÄËÂÛÜʛØßèµÉ YÚØµÛñËÂÛÜʛصҳí¯ÐçεΠɬÐÑÍÂÛÜØµåâÊ›ØµÉ Ð‘ÔÜ˝ɟÍ
БصÊÌËÂǵɟÍÈæ Ûñ˝ÇÚʛ֫ËòБدì èµÉ³áñÛÜÞßÛñËÂÉŸÍÒ _ ÉŸË æ¹É³É³ØóËÂÇµÉ³Þ éÕê˜ØóԪБÙÄˬíÚ˝ÇÚÉÓεÍÂʛåÌÍäБÞ
ٳʛصҝÛÜҙËÂÒ
callpow.C
ʛÔ
Ô×ֵصٟËÂÛÜʛ؞èÚÉIY صÛñ˝ÛÜʛصҳí¥ÒÛÜØµÙ³ÉÓËÂǵÉ
Ô×ֵصٟËÂÛñʛØóÛÜÒÈпÔ×ֵصٟËÂÛñÊ›Ø Ð‘Ò¹æ¹É³áÜá˜é
–˜¸Ó
main
3.1.3 Function calls
ê˜Ø ÍÂʛåÌÍäÐ‘Þ í
ÛÜÒÈʛصÉãÊ›Ô Y U“ÉÏÔ×ֵصٟËÂÛÜʛØóٳБáÜáÜÒ³é [ ÊÌÍÂÞ®ÐçáÜáñì“í пÔ×ֵصٟËÂÛÜÊ›Ø ¬Ù БáÜá¤ÛÜÒÈБØ
pow(2.0,-2)
IÉ PôÎÚ͝ɳҝҝÛÜÊ›Ø¤é Æ¹ÇÚɏ
Òîì¥Ø¯ËäÐ PÝʛԹРÔ×ֵصٟËÂÛÜÊ›Ø Ù¬çÐ áÜáÃËÇ ÐÑËâÞ®Ðç˝ٴǵɳÒÏËÂÇµÉ å›É³ØµÉŸÍÂБá‹Ô×ֵصٟËÂÛÜÊ›Ø èÚIÉ Y صÛñ˝ÛÜʛØ
ÔÜÍÂʛÞðÐ _ Ê U“ÉãÛñҷБÒÈÔ×ʛáÜáÜʦæ ҟé
^ í¤éñé²éñí `
·ÉŸÍÉÌí íñé¬éŸé³í Þ¿ÖµÒîË
_ É®ÉIPôÎÚ͝ɳҝҝÛÜʛصҿʛÔòË ìô΍ɳÒàæ ÇµÊ›ÒÉUÌБáñÖÚɟҿٳБØ_ É®Ù³Ê›Ø U“ɟ͝ËÂɟèœËÂÊ
ËÂÇµÉ Ô×ÊÌ͝ޮБá ÐçÍÂå›ÖµÞßɳدËÏË ì Î É³Ò íñéŸé³é³í éÀÆÈǵɳҝɏÉIP¥ÎµÍÂɟҝҝÛÜʛصÒëÐÑÍÂɏËÂǵÉ
é [ ÊÌÍ
Ä
±
¯
©
»
’
’
“
©
î
£
Ì
Á
”
¨
Ÿ
Œ
¤
š
º
–
Ž
БáÜá Ë ì ΠɳÒãËÇ ÐÑËãæ¹É¥] صʦæ ÒîʞԪÐçͬí¾ËÂǵɏٳБáÜáÃÐçÍÂå›ÖµÞßɳدËÂÒÓБÒãæ¹ÉŸáÜáÃБÒÏ˝ÇÚÉ¿Ô×ֵصٟËÂÛÜʛØÝٳБáÜá ÛñËÂÒîɳáÜÔ ÐÑÍÂÉ
Í U‘БáÜֵɳҳéÕÆ¹ÇÚÉÓË ìôÎ ÉãʛԡËÂǵÉÏÔ×ÖµØÚÙÄËÂÛÜʛØóÙ¬ÐçáÜá ÛÜÒ¹ËÂǵÉãÔ×ֵصٟËÂÛÜÊ›Ø ÒÈÍÂÉÄËÂÖ«ÍÂØžË ìôÎ É é
S¼ÇÚɟØóÐàÔ×ÖµØÚÙÄËÂÛÜʛخ٬БáÜá ÛñÒïÉ ÌU ÐçáÜÖÚÐçËÂɳè¤íôËÂÇµÉ Ù¬ÐçáÜá ÐçÍÂå›ÖµÞßɳدËÂÒïÐç͝ÉÏÉIÌU БáñÖ ÐÑËÂɳèÚ
Y ͝ÒîË
˜^ ÛÜØ Ð‘Ø ÊÌÍÂèµÉŸÍ
ËÂÇÚÐçË ÛñÒ ÖµØÚҙΠɳٳÛVÚY ɳèZ_ ìëËÂÇµÉ ÒîËäБصèÚÐçÍÂè Ä` é ÆÈÇµÉ ÍÂɳÒîÖÚá²ËÂÛÜØµå‘U БáÜÖµÉ³Ò ÐçÍÉ ËÂÇµÉ³Ø ÖÚÒîɳè¿ËÊ ÛÜØµÛñËÂÛ×БáñÛ³É
ËÂǵɞÔ×ÊÌ͝ޮБá·ÐÑÍÂå›ÖµÞßÉ³Ø ËÂҟé [ ÛÜØÚБáÜá²ì“íÃËÂǵÉóÔ×ֵصٟËÂÛñÊ›Ø _ Êôè«ì ÛÜÒ ÉG«P ɳٳ֫ËÂɟè òÛÜØ ËÂǵÛÜҏÉI«P ɳֵٟ˝ÛÜʛؤí‹ËÂǵÉ
Ô×ÊÌÍÂޮБá ÐçÍÂå›ÖµÞßÉ³Ø ËÒ
_ ɳÇÚÐK“U É áÜÛV“] Éó˝ÇÚÉÄì¼æ¹ÉÄÍÂÉ ‘U ÐçÍÂÛÜÐ Ú
_ áÜɳҮèµÉ Ú
Y ØÚɟè ÛÜØ¼ËÂÇµÉ _ ɟå›ÛÜØµØÚÛñØÚå ʛÔ
í
ÛÜØµÛñËÂÛÜБáÜ۳ɟèÀæ ÛñËÂÇ ËÂÇµÉ ‘U БáÜֵɳÒÈÊ›Ô ËÂǵÉÏ٬БáÜá¤ÐÑÍÂå›ÖµÞßÉ³Ø ËÂҟé
ÆÈÇµÉ ÉIÌU БáñÖ ÐÑËÂÛÜʛØÀÊ›Ô ÐÏÔ×ÖµØÚÙÄËÂÛÜʛØß٬БáñáÚËÂÉÄÍÂÞßÛÜØÚÐçËÂɳÒÃБҋҝÊôʛخБҋÐÏÍÂÉÄËÂÖ«ÍÂØ®ÒîËäÐçËÂɟÞßÉ³Ø ËÕÛÜÒÕ͝ɬБÙäǵɳè¤í
ÒÉ³É " ɳٟËÂÛñÊ›Ø \ é é é ÆÈǵÛÜÒ¹ÍÂɟËÂÖ«ÍÂØžÒîËäÐçËÂɟÞßÉ³Ø ËÈÞ¿ÖÚҙˍ
_ ÉãʛԾËÂǵÉãÔ×ÊÌÍÂÞ
ÛñҷБ؞ÉIP¥ÎµÍÂɳÒîҝÛÜʛØ
return
æ ǵɟ͝É
Ê›Ô ÐàË ìôÎ ÉÏæ ǵʛҝÉ
UÌБáñÖÚÉŸÒ·Ù¬Ð‘Ø _ ÉâÙ³Ê›Ø U“ɟ͝ËÂɟèóËÂʏËÂǵÉÏÍÂɟËÂÖ«ÍÂØžË ì Î É
鵯ÈǵÉÓÍÂɳҝֵáñËÂÛñØÚå U‘БáÜÖµÉÓÛÜÒïËÂÇµÉ U‘БáÜÖµÉÓʛԡ˝ÇÚÉÓÔ×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜá»é ÆÈǵÉÏÉ É³ÙÄ˷ʛԾËÂǵÉãÔ×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áñá ÛÜÒ
èµÉŸËÂɟ͝ÞßÛÜØµÉ³è _ôìÀËÂÇµÉ Ê›ÛÜØ Ë É É³ÙÄËÂÒòʛԤËÂÇµÉ Ù¬Ð‘áñá ÐçÍÂå›ÖµÞßɳدËïÉ U‘БáÜÖÚÐçËÂÛÜʛصҳíôБصè ʛԾÉIP¥É³Ù³Ö«ËÂÛÜØµå
é
ÆÈǵÉòÔ×ÖÚØµÙŸËÛÜÊ›Ø _ Ê èµì¿Þ®Ð³ì ٳʛدËäБÛÜØÀÒîÉ U“ÉŸÍäБáÚÍÂɟËÂÖ«ÍÂØ ÒîËäÐçËÂɟÞßÉ³Ø ËÂҟí_ÚÖ«ËÕÛÜԍصÊãÍÂÉÄËÂÖ«ÍÂØÀÒîËäÐÑËÂɳÞßɳدË
ÛÜÒ¤ÍÂɬБÙäǵɳèàèµÖ«ÍÂÛÜØµå¹ËÂǵÉÕIÉ P¥É³Ù³Ö«ËÂÛÜʛØâʛÔ
íU‘БáÜֵɋÐçØÚèâÉ É³ÙÄË Ê›Ô ËÇÚÉÕÔ×ÖµØÚÙÄËÂÛÜʛØâٳБáÜá¯ÐçÍÂÉÃÖµØÚèµÉ YÚØµÉ³è
^˜ÖµØµáÜɳҝҹËÂǵÉÓÍÂɟËÂÖ«ÍÂØžË ì Î ÉãÛñÒ
íÚÒîÉ³É " ɳÙÄËÂÛÜÊ›Ø é é _ ɳáÜʦ
æ `Äé
void
[ ÊÌÍàIÉ PµÐçÞÀÎ áñÉÌí¡èµÖ«ÍÂÛÜØµå ËÂǵÉÀIÉ P«ÉŸÙ³Ö«ËÂÛÜÊ›Ø Ê›Ô
ÛñØ
í ÐçØÚè
ÛÜØµÛñ˝Û×БáÜáñìóÇ XÐ U“É
b
e
U‘БáÜֵɳÒ
Бصè
é Æ¹ÇÚÉŸÒÉ U‘БáÜֵɳҏÐçÍÂÉ Ù´ÇÚБصå›É³è ÛñØ ËÂǵÉpow(2.0,-2)
˜ÒîËäÐçËÂɟÞßÉ³Ø Ë ËÂÊ
Бصè í _ ɟÔ×ÊÌÍÂÉ
0.5
ËÂǵɞÒîaÖ _Ú2ÒÉ WôÖµÉ³Ø −2
ËÀáÜÊôÊÌÎ ÒîɟËÂÒ
ËÂÊ
ÛÜØ Û²ËÂÒ YµÍÂÒîËÀБif
صèœËÂÊ
ÛÜØ ÛñËÂҏ
ҝɳٳʛصè 2Бصè á×ÐçÒîË
ÛñËÂÉÄÍäÐçËÂÛÜʛؤéÏÆ¹ÇÚÛñ
Ò UÌБáñÖÚÉ ÛÜÒ ÍÂÉÄËÂresult
Ö«ÍÂØµÉ³èÝБصè 0.5
_ ɳٳʛÞßÉŸÒ ËÂǵ
É U‘БáÜÖµÉ Ê›Ô ËÂ0.25
ǵɿÔ×ֵصٟËÂÛñʛؽ٬ÐçáÜá IÉ P¥ÎµÍÂɟҝҝÛÜʛØ
é
pow(2.0,-2)
3.1.4 The type void
ê˜Ø í«ËÂǵɟ͝ÉÏÛñÒ¹ÐëÔ×ÖÚØµèÚБÞßɳدËäБáÚË ì Î ÉÓ٬БáÜáñɳè
í«ÖµÒÉ³èžÐ‘ÒïÍÂɟËÂÖ«ÍÂØ®Ë ìôÎ Ó
É Ô×ÊÌÍÈÔ×ÖµØÚÙÄËÂÛÜÊ›ØµÒ ËÂÇÚÐçË
ʛصáñì®ÇÚÐXU“ÉëБØóÉ É³ÙŸË³ía_ÚÖ«ËòØÚÊbUÌÐçáÜÖµÉÌé " µÖ ÙäÇ Ô×ֵصٟvoid
ËÂÛÜʛصÒÈÐçÍÂÉâБáÜҝʿ٬БáÜáñɳè
é
D¥›— FâĶ ”𠱬–˜—™›š¤Ž
Ò Ð‘Ø ÉIPµÐ‘ÞÀÎÚáÜɑíٳʛصҝÛÜèµÉŸÍÓËÂǵÉàÔ×ʛáÜáñÊÑæ·ÛÜØµå εÍÂʛåÌÍäÐ‘Þ ^»ØÚÊÌ˝ÉëËÂÇÚÐçË ËÂÇµÉ ×Ô ÖÚØµÙŸËÛÜʛØ
Ï
ÍÂÉXW ÖµÛñÍÂɳÒÈØµÊÎµÍÂɳٳʛصèµÛñËÂÛñʛؾíôҝÛÜØµÙ³ÉÏÛñËòæ¹ÊÌÍ ]¥ÒÈÔ×ÊÌÍ Ð‘Ø¯ì ٳʛÞb_ÚÛÜØÚÐç˝ÛÜʛخʛÔ
‘U БáÜÖµÉ³Ò `Äé print_pair
int
# include < iostream >
// POST : "( i , j )" has been written to standard output
void print_pair ( int i , int j)
{
std :: cout < < "( " < < i < < " , " < < j < < " )\ n";
}
int main ()
{
print_pair (3 ,4); // outputs
}
(3 , 4)
Æ ÇµÉâË ì Î É
È
Ç çРҷɳÞÀÎµË ì U‘БáÜÖµÉÏÍäБصå›ÉÌí БصèóËÂǵɟÍÂÉàÐç͝ÉâØµÊÀáÜÛñ˝ɟÍäБáÜҟíaU‘ÐçÍÂÛÜÐ _ÚáÜɳҳíµÊÌÍ Ô×ÊÌ͝ޮБá
void
Ô×ֵصٟËÂÛÜʛØâÐçÍÂå›ÖµÞßÉ³Ø ËÒ Ê›Ô Ë ìôÎ É
é ÆÈǵɟ͝ɋÐç͝ÉÕÉIPôεÍÂɳҝҝÛñʛØÚÒ¾Ê›Ô“Ë ì Î É
íç˝ÇÚʛֵå›Ç¤í¦Ô×ÊÌÍ ÉGPµÐ‘ÞÀÎÚáÜÉ
void
void
é
print_pair(3,4)
U“Ê›ÛÜè Ô×ֵصٟËÂÛÜÊ›Ø µ
è Ê É³ÒžØµÊÌËóÍÂÉ WôÖµÛñÍÂÉ Ð ÍÂɟËÂÖ«ÍÂØ ҙËäÐçËÂɳÞßÉŸØ Ë¬í_ÚÖ«Ë ÛñË Þ®Ð³ì ٳʛدËäБÛÜØ ÍÂɟËÂÖ«ÍÂØ
ÒîËäÐÑËÂɳÞßɳدËÂÒïæ ÛñËÂÇ
›Ê Ô¾Ë ì Î É
í«ÊÌÍò͝ɟËÂÖ«ÍÂØ ÒîËäÐÑËÂɳÞßɳدËÂҹʛԡËÂǵÉÏÔ×ÊÌÍÂÞ
return
void
UÌБáñÖ ÑÐ ËÂÛÜʛ؜ʛԷРU“Ê›ÛÜèœÔ×ÖÚØµÙŸËÛÜʛ؜٬ÐçáÜáïËÂɟÍÂÞßÛÜØÚÐç˝ɳÒàæ ÇµÉ³Ø Ð ÍÂɟËÂÖ«ÍÂØ ҙËäÐçËÂɳÞßÉŸØ Ë¿ÛÜÒ ÍÂɬБÙäǵɳè¤í
›£
æ µÇ É³Ø ÂË ÇµÉãÉIP¥É³Ù³Ö«ËÂÛÜʛ؞ʛÔ
ÛÜÒ Y صÛÜÒîÇÚɟè¾é
3.1.5 Functions and scope
ƹÇÚɿΠÐçÍÂɳدËÂǵɳҝ۳ɟè Î Ðç͝ËãÊ›Ô Ð®Ô×ÖÚØµÙŸËÛÜʛØÝèµÉ YÚØµÛñËÂÛÜÊ›Ø Ù³Ê›Ø ËÂБÛÜØµÒÏ˝ÇÚÉ¿èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜÊ›ØµÒ Ê›Ô‹ËÇÚÉ¿Ô×ÊÌÍÂޮБá
ÐçÍÂå›ÖµÞßɳدËÂÒ³é [ ÊÌÍ Ð‘áÜáôʛԥ˝ÇÚÉŸÞ íçËÂÇµÉ èµÉ³Ù³áÜÐçÍäÐçËÂÛ U“ÉÕÍÂɳå›ÛñʛؿÛñÒ ËÂÇµÉ Ô×ֵصٟËÂÛÜʛØàèµÉ YÚØµÛñËÂÛÜʛؤíçÒÊ ËÂÇµÉ Ô×ÊÌÍÂޮБá
ÐçÍÂå›ÖµÞßɳدËÂÒÏÇ XÐ U“ɏáÜÊôÙ¬ÐçáÃÒîÙ³ÊÌÎ É ^ " ɟٟËÂÛÜÊ›Ø \ é é `Äé ÆÈÇµÉ ÎÊÌËÂÉ³Ø ËÛ×Бá ҝٳÊÌ΍ÉÀʛÔïÐ Ô×ÊÌ͝ޮБáÃÐçÍÂå›ÖµÞßÉ³Ø Ë
èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛ
Ø _ ɳå›ÛñØÚÒòБÔÜËÂÉÄÍ·ËÂǵÉÏèÚɟٳá×ÐçÍäÐÑËÂÛÜʛØóÐçØÚèžIÉ P¥ËÂɟØÚèµÒòÖÚØ¯ËÂÛÜáËÂǵÉãɳصèóÊ›Ô ËÂǵÉâÔ×ֵصٟËÂÛñÊ›Ø _ Ê èµì“é
ƹÇÚÉÄÍÂɳÔ×ÊÌÍÂÉÌí ËÂǵÉâÔ×ÊÌÍÂޮБá¾Ðç͝å›ÖÚÞßÉŸØ ËÂÒòÐçÍÂÉëØµÊÌ
Ë U¥ÛÜÒÛ _ áñÉãʛ֫ËÂҝÛñèÚÉÏËÂǵÉâÔ×ֵصٟËÂÛÜÊ›Ø èµÉ YÚØµÛñËÂÛñʛؾé S Û²ËÂǵÛÜØ
ËÂǵ
É _ Êôè«ì“í¥ËÂǵÉÏÔ×ÊÌÍÂޮБá¤ÐçÍÂå›ÖµÞßɳدËÂR
Ò _ ɳÇÚXÐ U“ÉãáñVÛ ]“É U‘ÐçÍÂÛÜÐ _ÚáÜɳÒïËÂÇÚÐçËòÐçÍÂÉÏáÜÊôٳБá ËÂÊ é
ê˜Ø Î Ðç͝ËÂÛñÙ³Öµá×ÐçͬíÙäÇÚБصå›É³ÒÏޮБèµÉëËÂÊ®ËÂǵ
É U‘БáÜֵɳÒÏʛԋÔ×ÊÌ͝ޮБá ÐçÍÂå›ÖµÞßɳدËÂÒ ^˜áÜÛ ]“É¿ÛñØ ËÂǵɿÔ×ÖµØÚÙÄËÂÛÜʛØ
`ëÐçÍÂÉ îáÜʛÒîË ÐçÔÜËÂɟÍàËÂǵɮÔ×ÖµØÚÙÄËÂÛÜÊ›Ø Ù¬Ð‘áÜá‹Ð‘صè ÇÚXÐ U“É®ØÚÊ É É³ÙŸË¿Ê›Ø ËÇÚL
É U‘БáÜÖµÉ³Ò Ê›Ô¹ËÂǵÉß٬БáÜá ÐçÍ pow
å›ÖµÞßÉ³Ø ËÒ³éàÆ¹ÇÚÛñÒ ÛÜÒÓØÚÊÌËÏҝ֫͝εÍÂÛñҝÛÜØµå«í ҝÛÜØµÙ³É ËÂÇµÉ Ù¬Ð‘áÜá Ðç͝å›ÖÚÞßÉŸØ ËÂÒÓÐçÍÉ Í UÌБáñÖÚɟҳí _ÚÖ«ËÓËÂÊ Þ®Ð ]“ÉëËÂǵÉ
ΠʛÛÜØ¯ËÈÙ³áÜɬÐçͳí«áÜɟËòÖÚÒÈٳʛصҝÛÜèµÉŸÍÈËÂǵÉÏÔ×ʛáÜáÜʦæ ÛÜØµå¿Ð‘áñËÂÉÄÍÂØÚÐçËÂVÛ U“É
Ô×ֵصٟËÂÛÜʛØóÛñØ
é
main
int main () {
double b = 2.0;
int e = -2;
std :: cout < < pow (b ,e ); // outputs 0.25
std :: cout < < b ;
// outputs 2
std :: cout < < e ;
// outputs -2
callpow.C
return 0;
}
ƹÇÚÉ
U‘БáÜֵɳÒÈʛԡËÂǵÉUÌÐÑÍÂÛ×Ð _ÚáÜÉ³Ò Ð‘Øµè èµÉ YÚØµÉ³èóÛÜØ áÜÛÜØµÉ³Ò \ ÒîËäгì®ËÂǵÉÏҝБÞßÉ ËÂÇ«ÍÂʛֵå›ÇÚʛ֫ˬíôҝÛÜØµÙ³É
ËÂÇµÉ Ô×ֵصٟËÂÛÜÊ›Ø _ Ê èµìÀʛÔ
ÛÜÒ bصÊÌ˹ÛÜØßeËÂÇµÉ ÒÙ³ÊÌÎÉ Ê›Ô¾ËÂǵɳ۲ÍïèµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛصҳí¯Ô×ÊÌÍïË æ¹Ê ͝ɬБҝʛصҳé [ ÛñÍÂҙˬí
pow
ËÂÇµÉ èµÉ YÚØµÛñËÂÛÜÊ›Ø Ê›Ô
ÐçεΠɬÐÑÍÂÒ
ËÂÇµÉ èµÉ³ÙŸá×ÐçÍäÐç˝ÛÜÊ›ØµÒ‹Ê›Ô Ð‘Øµè ÛÜØßáñÛÜØµÉ³Ò \ íôÒîÊëËÂǵÉ_ Êôè«ì
³
»
Œ
‘
¶
›

³
£
Œ
pow
ʛÔ
٬БصصÊÌËÓÉ U“É³Ø _ É¿ÛÜØ ËÂǵÉ
ÒîÙ³ÊÌΠɿʛÔÃËÂǵɳÒîɏèµbɳٳáÜÐçÍäÐçeËÂÛñʛØÚҟé " ɳٟʛØÚè¤í¾É U“ɳØÝÛñÔÃæ¹É
æ¹Ê›pow
ÖµáÜè ÞßÊ U“É ËÂÇµÉ èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜÊ›ØµÒ Ê›¢ ԋ“˝–Çڌ³š¤b
É –˜U̗™©¯Ðђ ÍÂÛ×Ð _ÚáÜÉ³Ò ÐçØÚè
ËÂÊ ËÂǵÉ_ ɳå›ÛÜØµØµÛÜØµå ʛԋËÂǵɿεÍÂʛåÌÍÂБÞ
b
e
^ _ ɟÔ×ÊÌÍÂÉÏ˝ÇÚÉÓèµÉ YÚØµÛñËÂÛÜʛخʛÔ
í«ÒÊ¿ËÂÇÚÐçËïËÂǵɟì ÇÚXÐ U“Éãå›áÜÊ _ БáҝٳÊÌÎ É `´í¥ËÂǵɳÛñÍÈҝٳÊÌÎ ÉÓæ¹Ê›ÖµáÜè IÉ P«Ù³áñÖÚèµÉ
ËÂǵ
É _Êôè«ì¿Ê›Ô
í ҝÛñØÚٟÉòËÂÇÚpow
Ðç
Ë _ Êôè«ì¿ÛÜÒÃÛÜØ ËÂǵɹΠÊÌËÂɳدËÂÛ×БáµÒÙŸÊÌÎ É³Ò‹Ê›Ô ÍÂɳèµÉ³Ù³á×ÐÑÍäÐçËÂÛÜÊ›ØµÒ Ê›ÔËÂǵÉÈØÚБÞßɳÒ
ÐçØÚè
^»ËÂǵÉãpow
Ô×ÊÌ͝ޮБá¤ÐçÍÂå›ÖµÞßɳدËÂÒ `Äí¥ÒîÉ³É " ɳÙÄËÂÛÜÊ›Ø \ é é é
b
e
‹Ö«ËïËÂÇµÉ å›É³ØµÉŸÍäБáҝٳÊÌÎ É ÍÂÖµáÜÉ³Ò‹Ê›Ô " ɟٟËÂÛÜÊ›Ø \ é é БáÜáÜʦæ Ô×ֵصٟËÂÛñʛ
Ø _ÊôèµÛÜɳҋ˝ÊàÖÚÒîÉ Ø ÐçÞßÉ³Ò Ê›Ô
å›áÜÊ _ Бá¥ÊÌÍÕØÚБÞßɳÒîΠБٟÉÈÒîÙ³ÊÌÎ É “ËÂǵÉÈεÍÂʛåÌÍÂÐ‘Þ Ê›Ø Î Ð‘å›É Fµ Ô×ÊÌÍÕIÉ P«Ð‘ÞÀÎÚáÜÉïֵҝɳÒ
Ð‘Ò ÒÖµÙ´Ç
std::cout
ÐߨÚБÞßÉÌé òɟÍÂÉ¿ÛÜÒÏÐ®ÙŸÊ›Ø ËÍÂÛ U“ɳè½ÎµÍÂʛåÌÍäÐçÞ ËÇ ÐÑËÓèÚɟÞßʛØÚҙ˝ÍäÐçËÂÉŸÒ ÇÚʦæ ÐßÎÚ͝ʛåÌÍäÐ‘Þ Þ®Ð³ì ÞßÊôèµÛÜÔÜìóÐ
^º
Ð U‘ÐçÍÂÛÜÐ _ÚáÜÉÃæ·ÇµÊ›ÒÉ‹èµÉ³Ù³áÜÐçÍäÐçËÂÛñʛØâÇÚÐ‘Ò å›áñÊ _Ðçá¯ÒîÙ³ÊÌÎ É `Ä"
é S ǵÛÜáñÉÕҝֵÙäÇ Ù³Ê›ØµÒî˝ÍÂֵٟ˝ÛÜʛصÒ
Á“’ª¥Ð³ì Ÿ©¯_ a’ É¿
Dô©“Öµ£¬Ò—™É³©«Ô×Öµ ¬’§áՌ ÛñØ Ù³ÉŸÍîËäБÛÜØ½Ù¬Ð‘ҝɳҟí¾ËÂǵɟì ֵҝÖÚБáÜá²ì ޮР]“ÉàËÂǵÉàÎÚ͝ʛåÌÍäÐ‘Þ áÜɳҝÒÓÍÂɬÐçè Ð _ áñÉÌí ҝÛÜØµÙ³É ËÂǵÉ
Þ®
É É³ÙŸË Ê›Ô Ð¿Ô×ֵصٟËÂÛñʛØó٬БáÜá ޮгìßËÂÇµÉ³Ø _ ɳٳʛÞß
É U“ÉŸÍì ØµÊ›Ø ºáÜÊ Ù¬Ð‘á˜é
# include < iostream >
int i = 0; // global variable
void f ()
{
++ i ;
}
// in the scope of declaration in line 3
int main ()
{
f ();
std :: cout < < i < < "\n" ; // outputs 1
return 0;
}
" ÛÜØµÙ³Éã˝ÇÚÉãÔ×ÊÌÍÂޮБá¤Ðç͝å›ÖÚÞßÉŸØ ËÂÒ¹Ê›Ô Ð Ô×ÖµØÚÙÄËÂÛÜʛØóÇÚÐXU“ÉâáÜÊ Ù¬Ð‘á¤ÒÙ³ÊÌ΍ÉÌíÚ˝ÇÚÉÄìžÐçáÜÒÊ ÇÚÐXU“ÉëÐçֵ˝ʛޮÐçËÂÛÜÙ
ÒîËÂÊÌÍÂБå›ÉâèµÖ«ÍäÐçËÂÛñÊ›Ø¾é¹Æ¹ÇµÛÜÒ ÞßɬÐçØÚÒ¹ËÂÇÚÐçËòæ¹Éëå›ÉŸË Ð î ÔÜÍÂɳҝÇ
ß
ÒÉŸË Ê›Ô Ô×ÊÌÍÂޮБá¡ÐçÍÂå›ÖµÞßÉ³Ø ËÒòÉ U“ÉÄ͝ìóËÂÛÜÞßÉ
ËÂǵÉâÔ×ֵصٟËÂÛñʛØóÛÜÒÈ٬БáÜáÜɟè¾í¥æ·ÛñËÂÇóÞßɟÞßÊÌ͝ì®Ð‘ҝÒîÛÜ囨µÉ³èžËÂÊ¿ËÂÇµÉ³Þ Ê›Øµáñì ÖµØ ËÂÛñá¤ËÇÚÉÏÍÂɳÒî΍ɳٟËÂÛVU“ÉãÔ×ÖµØÚÙÄËÂÛÜʛØ
٬Бáñá¤ËÉŸÍÂÞßÛÜØÚÐçËÂɟҳé
O БÞßɳҾèµÉ³Ù³á×ÐÑÍÂɳèëÛÜØµÒÛñèÚÉ ËÂǵÉÕÔ×ÖÚØµÙŸËÛÜÊ›Ø _ Ê èµìÏÞ¿ÖµÒî"
Ë _ÉÕèµÛÜÒî˝ÛÜØµÙŸË¾ÔÜÍÂÊ›Þ ËÂǵÉÕØ ÐçÞßɳҤʛԫБáÜá“Ô×ÊÌÍÂޮБá
ÐçÍÂå›ÖµÞßɳدËÂÒ³í¤ÖµØµáÜɳҝÒÓËÂǵɟì½ÐçεΠɬÐçÍãÛÜØ РصɳÒî˝ɳè _ÚáÜÊôÙ ]é¿Æ¹ÇµÛÜÒãޮР]“ɳÒÓҝɳصҝÉÀҝÛñØÚٟɏÊÌËÂǵɟÍîæ ÛÜҝɑí¾Û²Ë
æ¹Ê›ÖµáÜè _ ÉßΠʛҝҝVÛ _ÚáÜÉÀ˝ʽÛñÍîÍÂÉ U“ÊôٳР_Úáñì ǵÛÜèµÉÀËÂÇµÉ®Ø ÐçÞßÉßÊ›Ô Ð Ô×ÊÌÍÂޮБáïÐÑÍÂå›ÖµÞßÉ³Ø Ë¬é½Æ¹ÇÚÉÄÍÂɳÔ×ÊÌÍÂÉÌíÃæ¹É
٬БصصÊÌËÈæ·ÍÂÛñ˝É
int f ( int i)
{
int i = 5; // invalid ; i hides formal argument
return i ;
}
æ ǵÛÜáñÉ ËÂǵÉãÔ×ʛáÜáñÊÑæ·ÛÜØµå¿ÛñÒòصÊÌ˹ÍÂɳٳʛÞßÞßɟØÚèµÉ³è_ÚÖ«Ë·áÜɟå“Бá˜é
int f ( int i)
{
{
int i = 5; // ok ; i is local to nested block
}
return i ; // the formal argument
}
Æ ÇÚÉïáÜÐç˝ËÂÉŸÍ Ô×ÖÚØµÙŸËÛÜʛ؏ÛñÒ ËÂǵÉïÛÜèµÉ³Ø ˝ÛñË ì“íÌҝÛÜØµÙ³É ËÂǵÉïҝٟÊÌΠɹʛԵ˝ÇÚɹèµÉ³Ù³áÜÐçÍäÐçËÂÛñʛØ
¹
ÛÜÒ áÜÛÜÞßÛ²ËÂɳè
int i = 5
ËÂÊ¿ËÂǵÉãØµÉ³Òî˝ɳè _ÚáÜÊôÙ ]é
Ô×ÖµØÚÙÄËÂÛÜÊ›Ø ÛñËÂҝɟáÜԹБáÜÒÊ ÇÚÐ‘Ò ÐóÒîÙ³ÊÌÎ ÉÌíÃБصè ËÂǵÉßÔ×ÖµØÚÙÄËÂÛÜÊ›Ø Ù¬Ð‘Ø Ê›Øµáñì _ É
٬БáñáÜÉ³èžæ·ÛñËÂǵÛÜØžÛ²ËÂҷҝٟÊÌÎ ÉÌéòÆÈǵÉëҝٟÊÌÎ ÉëÊ›Ô ÐÔ×ֵصٟËÂÛñÊ›Ø ÛÜÒ·Ê _µËäБÛñØÚɟè _ôìžÙ³Ê›Þb_ÚÛÜØµÛÜØµå ËÂǵÉâҝٟÊÌÎ É³Ò Ê›Ô
БáÜá«Û²ËÂÒ
éÃÆ¹ÇµÉÈÎ Ðç͝ËÕÊ›Ô ËÇÚÉÈÔ×ֵصٟËÂÛÜʛ؏èÚÉIY صÛñ˝ÛÜʛØb_É³Ô×ÊÌÍÂÉ
ÛñҋÐÓèµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛؤí _ÚÖ«Ë
FµŒÄг±¬ì ’×©“_ £ŸÉ¿
©¯–˜ÔחîÖڐ›Øµš¤ÙŸŽ ˝ÛÜÊ›Ø èµÉ³Ù³áÜÐçÍäÐçËÂÛñʛØÚÒ ËÇ ÐÑËãÇÚÐXU“É ØµÊ ÒÖ _ ÒîÉXWôֵɳدË
ËÂǵɟÍÂɿޮ
é¿ÆÈǵÛÜÒÏÛÜÒÓÛÜØ ÙŸÊ›Ø ËÍäÐçÒîË
ËÂZ
Ê U‘ÐçÍÂÛ×Ð _ áñɳҋæ ÇµÉŸÍÉ É U“ɟ͝ì®èµÉ³Ù³áÜÐçÍäÐçËÂÛñʛØßÛÜÒïÐçË ËÇÚÉ ÒÐ‘ÞßÉ·ËÂÛÜÞßÉ·ÐâèµÉ YÚØµÛñËÂÛÜʛؤé Ô×ֵصٟËÂÛñÊ›Ø Þ®Ð³ìb_ É
èµÉ³Ù³á×ÐÑÍÂɳèóҝIÉ U“ÉŸÍäБá¤ËÂÛÜÞßɳҟí _ÚÖµËòÛñËÈÙ¬Ð‘Ø _ ÉãèµÉ YÚØµÉ³èóʛصٳÉãʛصáñì“é
ÆÈǵÉàÔ×ʛáÜáñÊÑæ·ÛÜØµå¿ÎµÍÂʛåÌÍäÐçÞ í Ô×ÊÌÍ GÉ PµÐ‘ÞÀÎÚáÜÉÌíÚèµÊôɳҷØÚÊÌË Ù³Ê›ÞÀÎÚÛÜáÜÉÌí«ÒÛñØÚٟÉëËÂǵÉë٬БáÜá¡Ê›Ô ÛÜØ
ÛÜÒ
f
main
صÊÌË·ÛñØ ËÂǵÉÏҝٳÊÌÎ ÉãÊ›Ô é
Function declarations.
f
# include < iostream >
int main ()
{
std :: cout < < f (1); // f undeclared
return 0;
}
int f ( int i ) // scope of f begins here
{
return i ;
}
‹Ö«Ë
æ ÉàÙ¬Ð‘Ø ÎÚÖ«Ë ÛñØ ËÂÊÀËÂǵÉàҝٟÊÌÎ ÉàʛÔ
¹
_ôì БèµèµÛÜØµåßÐÀèµÉ³Ù³áÜÐçÍäÐçËÂÛñÊ›Ø _ ɳÔ×ÊÌÍÂÉ
í Бصè ˝ÇÚÛñÒ
f
main
main
ì¥ÛñɳáÜèµÒÈÐU‘БáÜÛÜè εÍÂʛåÌÍäÐ‘Þ é
# include < iostream >
int f ( int i ); // scope of f begins here
int main ()
{
std :: cout < < f (1); // ok , call is in scope of f
return 0;
}
int f ( int i)
{
return i ;
}
˜ê ØßËÂǵɷεÍÂÉ U¥ÛñʛÖÚÒÕÎÚ͝ʛåÌÍäÐ‘Þ í›æ¹É ٳʛֵáÜèßå›ÉŸË‹ÍÂÛÜèßʛԍËÂÇµÉ ÉIPô˝ÍäÐâèµÉ³ÙŸá×ÐçÍäÐç˝ÛÜÊ›Ø _ôì ҝÛÜÞÀÎÚáñì èµÉ YÚØµÛÜØµå
_ ɳÔ×ÊÌÍÂÉ
í _ÚÖ«ËïҝʛÞßɟËÂÛñÞßɳҳí“ҝɟΠÐçÍäÐÑËÂÉ Ô×ÖµØÚÙÄËÂÛÜʛخèµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛصÒÕÐçÍÂÉ ÛÜØµèµÉ³É³è®ØµÉ³Ù³É³ÒîÒÂÐç͝ì“é*¹Ê›Ø
f
ҝÛÜèµÉŸÍÃË æ¹Êâmain
Ô×ֵصٟËÂÛÜÊ›ØµÒ Ð‘Øµè ÒîÖÚÙäÇÀËÂÇÚÐçË ÛñÒÕÙ¬ÐçáÜáÜɳè¿ÛÜØ ËÂǵÉÈÔ×ÖµØÚÙÄËÂÛÜÊ›Ø _ Ê è«ì Ê›Ô íôБصè ÛÜÒ Ù¬Ð‘áÜáÜɟè
ÛÜØ ËÂǵÉÏÔ×ֵصٟËÂÛñÊ›Ø _ Ê èµfìÀÊ›Ô é g SÝÉ
ËÂgÊ¿èÚÉIY صÉÓʛصÉãʛԤËÂǵÉÓË æ¹Ê¿Ô×ֵصٟËÂÛÜʛصÒRYµfÍÂÒîË ^ í«fÒÂгìa`Äí_ÚÖ«Ë
ҝÛÜØµÙ³Éãæ¹Éë٬БáÜá æ Ûñ˝ÇÚÛñ؞ËÂǵgÉ _ Ê èµì Š© ʛD¥Ô Œ í ޏֵÒîËòÇÚXÐ U“É Ð èµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛØ
ËÂǵÉëèµfÉ YÚØµÛñËÂÛÜʛØóʛÔ
g
f g
ŸŒ˜¶‘›£ŸŒ
é
f
3.1.6 Procedural programming
" ʞԪÐÑÍ¬í æ¹ÉÇÚÐXU“Éb_É³É³Ø Ð _ÚáÜÉàËÂÊ îáÜÛVU“É æ·ÛñËÂÇµÊ›Ö«Ë Ô×ÖµØÚÙÄËÂÛÜʛصÒÓʛØÚá²ì ҝÛÜØµÙ³É ËÂÇµÉ ÎµÍÂʛåÌÍÂБÞßÒ ËÂÇÚÐçËÓæ¹É
ÇÚXÐ U“Éâæ·ÍÂ۲˝ËÂÉ³Ø ÐÑÍÂÉãεÍÂɟËîË ìžÒÛÜÞÀÎÚáÜÉÌé ‹Ö«Ë É U“É³Ø ҝʛÞßÉÏÊ›Ô ËÂǵɳҝÉëÒîÛÜÞÀÎÚáÜÉÓʛØÚɟҷæ¹Ê›ÖµáÜè _ É³ØµÉ YµË·ÔÜÍÂʛÞ
Ô×ֵصٟËÂÛÜÊ›ØµÒ³é ¹Ê›ØµÒÛñèÚÉÄÍ¿Ð‘Ò Ð‘Ø ÉIPµÐ‘ÞÀÎÚáÜɏËÂǵɮεÍÂʛåÌÍÂБÞ
ÔÜÍÊ›Þ P¥ÉŸÍÂÙ³ÛÜÒîÉ
é ê˜Ø ˝ÇÚÛñÒ
perfect.C
IÉ P¥ÉŸÍÂÙ³ÛÜÒîÉÌí æ¹É ÇÚXÐ U“ÉßÐ‘Ò ]“ÉŸè ì“Ê›Ö ËÂÊ Y صèÝËÂǵɿΠɟÍÂÔ×ɳÙÄË ØôÖµÞb_ÉŸÍÂÒ
_ ÉŸË æ¹É³É³Ø
ÐçØÚè í Ô×ÊÌÍàÐ å›ÛVU“ɳØ
1
n
ÛÜØ«ÎÚÖ«ËâØ ÖÚ
Þ _ ÉŸÍ é߯¹ÇÚɏҝʛáÜÖ«ËÂÛÜÊ›Ø½ÒÊ ÔªÐçÍâÖÚÒîɳÒëÊ›ØµÉ N_ÚÛÜå ^˜áñÊôÊÌÎ æ·
ÛñËÂǵÛÜØ Ð áÜÊ ÊÌÎ `
µ
F
›

¡
”
¦
ª
’
ó
Œ
ª
’
Ì

³

¢
n
ËÂÇÚÐçËãÛÜØ ËÂÖ«ÍÂØ ÙŸÊ›Ø ËäБÛñØÚÒÓË æ¹Ê
ÒîËäÐÑËÂɳÞßɳدËÂÒ³é ·áñËÂǵʛֵå›Ç ÛÜØ ˝ÇÚÛñÒãÙ¬ÐçҝÉÌí ËÂÇµÉ N_ Ûñå áÜÊ ÊÌÎ ÛÜÒÏÒîËÂÛÜáñá
if
ҝޮБáñáÚɟØÚʛֵå›ÇßËÂÊ _É·ÍÂɬБèßæ·ÛñËÂǵʛ֫ˋèµÛ Ù³ÖµáñËÂÛÜɳҟí ÛñˋèµÊôɳҝ
Ø Ë ÍÂɬБáñáñì ÍÂÉ QÚÉ³ÙŸË ËÇÚÉ·áÜʛå›ÛÜ٬БáÚÒî˝͝ÖÚÙÄËÂÖ«ÍÂÉ
ʛÔïËÂǵɮҝʛáÜÖ«ËÂÛÜÊ›Ø¤é ØµÙ³Éßæ¹É®å›ÉŸËàËÂÊó˝ÍÂ۲ΠáñÉÀÊÌ
Í WôÖÚБè«ÍÂÖ«ÎÚáÜÉÀáÜÊ ÊÌÎÚÒ³í ËÂǵÉÀεÍÂʛåÌÍäÐ‘Þ _É³Ù³Ê›ÞßÉ³Ò U“ÉÄ͝ì
ÇÚÐçÍÂèžËÊ Ô×ʛáÜáÜʦæëé
‹Ö«Ëïæ ÇÚÐçË ËÂÇµÉ áÜʛå›ÛÜÙ¬ÐçáÒî˝͝ÖÚÙÄËÂÖ«ÍÂÉ Ê›Ô¾ËÇÚÉ ÒîʛáÜÖ«ËÂÛÜÊ›Ø [ ÊÌÍ¹É U“ÉŸÍì Ø ÖÚÞ _ ÉŸÍ i _ ÉÄË æ¹ÉŸÉ³Ø 1 ÐçØÚè
íôæ¹ÉÓÇÚKÐ U“É ËÊ —˜Ž
¥Ð‘صè ËÂÊ èµÊàËÂÇµÉ á×ÐçËËÉŸÍ¬í æ¹É ÇÚXÐ U“É ËÂÊ
n
test whether i is perfect
ÐçØÚè ٴǵɳ٠]¿æ ǵɟËÂǵɟÍÃÛñËÃÛÜÒÃXÉ W Ö ÐçáµËÊ éÃÆÈÇ ÖµÒ³í›æ¹ÉòÇÚXÐ U“ÉòË compute
æ¹ÊÏÙ³áÜɬÐç͝the
áñì èµsum
É YÚØÚɟofè
all proper divisors of i
ÒÖ _µËäÐ‘Ò ]ôÒïËÂÇÚÐçËïËÂÇµÉ ÎÚ͝ʛåÌÍäÐ‘Þ ÇÚБÒïËÂÊ ÒÊ›Vá U“ÉÓÔ×ÊÌÍÈÉ U“ÉŸÍîì Ø Öµb
Þ i _ ÉÄÍ í¥Ð‘صèžÛñËïÛñÒ _É³ÒîËïËÂʿɳص٬ÐçÎÚҝֵá×Ðç˝É
ËÂÇµÉ³ÒÉ ÛÜØ ËÊ Ô×ֵصٟËÂÛÜʛصҳé ÍÂʛåÌÍÂÐ‘Þ \ ҝǵÊÑæ·Ò ǵʦæ ˝ÇÚÛñҏÛÜÒ¿èµÊ›Øµi ÉÌé O ÊÌËÉ ËÂÇÚÐçË¿ËÂÇµÉ ÎµÍÂʛåÌÍÂÐ‘Þ ÛÜÒ
صÊÑæ БáÜÞßʛҙËÕÒîɳáÜÔ ºGÉ P¥ÎÚá×БØÚÐçËÂÊÌÍîì ËÂǵÉÈΠʛÒîËÂٳʛصèµÛñËÂÛñʛØÚÒ Ù¬ÐçØ ÞßÊÌ͝ÉòÊÌ͋áÜÉ³ÒÒ èµÛñ͝ɳٟËÂáñ
ì _ ÉÈÍÂɬБè®Ê ËÂǵÉ
Ô×ֵصٟËÂÛÜÊ›Ø Ø ÐçÞßɳҳé
// Program : perfect2 .C
// Find all perfect numbers up to an input number n
# include < iostream >
// POST : return value is the sum of all divisors of i
//
that are smaller than i
unsigned int sum_of_proper_divisors ( unsigned int i)
{
}
unsigned int sum = 0;
for ( unsigned int d = 1; d < i ; ++ d)
if ( i % d == 0) sum += d ;
return sum ;
// POST : return value is true if and only if i is a
//
perfect number
bool is_perfect ( unsigned int i )
{
return sum_of_proper_divisors ( i ) == i;
}
int main ()
{
// input
std :: cout < < " Find perfect numbers up to n =? ";
unsigned int n;
std :: cin > > n;
// computation and output
std :: cout < < " The following numbers are perfect .\ n" ;
for ( unsigned int i = 1; i <= n ; ++ i )
if ( is_perfect ( i )) std :: cout < < i < < " ";
std :: cout < < "\ n";
return 0;
}
Program 20: ¢¤£³ÄÁ“Ž ¢ Œ³£º¶çŒŸ±¬– Å
èµÞßÛñ˝ËÂɟèÚá²ì“íËÂǵɏεÍÂʛåÌÍäÐçÞ ÛÜÒÏáÜʛصå›ÉŸÍÏËÂÇÚБØ
í"_ÚÖ«ËâÛ²ËâÛÜÒÏÞßÊÌÍÂÉ ÍÂɬБèÚÐ _ÚáÜɑí БصèÝÛ²Ë
ÇÚБÒÈҝÛÜÞÀÎÚáÜɟ͹ٳʛد˝ÍÂʛá QÚÊÑæâéÃê˜ØžÎ Ðç͝ËÂÛÜٟÖÚáÜÐçͬíôËÂǵÉÏèµperfect.C
ʛÖa_ÚáÜÉÓáÜÊ ÊÌÎóÇÚБÒÈèµÛÜÒÂÐçεΠɬÐÑÍÂɳè¤é
ÆÈǵÉÃá×ÐçÍÂå›ÉÄÍ Ð ÎµÍÂʛåÌÍäÐçÞ å›ÉÄËÂÒ³íç˝ÇÚÉ ÞßÊÌÍÂÉ ÛÜÞÀ΍ÊÌ͝ËäБدˍÛÜÒ¾ÛñË ËÂÊòÒÖ _ èµÛVU¥ÛÜèµÉ Ûñ˾ÛÜØ¯ËÂʹҝޮБáÜá‘ÒÖ _ÚËÂÐ‘Ò ]¥ÒŸí
ÛÜØ½ÊÌÍÂèµÉŸÍÏØÚÊÌËÓËÂÊ áÜʛҝÉà˝ÍÂБ٠]½Ê›Ô æ ÇÚÐçËÏÛÜÒÓå›Ê›ÛÜØµå®Ê›Ø ÛñØ ËÂÇµÉ ÎµÍÂʛåÌÍäÐ‘Þ Ê›Ø ËÂǵɿæ·ÇÚʛáñÉ ËÂǵÛÜÒÓÛÜÒ ËÂǵÉ
Î ÐçÍäБèµÛÜå›Þ íôБصèžÛÜØ íÚÛñËÈÛÜÒ¹ÍÂɬБáÜÛ³É³è æ·ÛñËÂÇ Ô×ÖµØÚÙÄËÂÛÜʛصҳé
¢¤£³Ì±ÄIŒ F“” £Ÿ©¯’¤¢¤£ŸŸÁ›£Ÿ©“¨ ¨ž—»šÁ
ÆÈǵÉàεÍÂÊôٟɳèµÖµÍÂБá εÍÂʛåÌÍäБÞßÞßÛÜØµå Î ÐçÍäБèµÛÜå›ÞðÛÜÒÓØÚÊÌËÓÒîÊ ÒÉŸáÜÔ ºÉ UôÛÜèµÉ³Ø ËÏÐçÒÏÛ²ËÓޮЬìžÒÉ³É³Þ ËÂÊ èÚЬì“é
ƹÇÚÉ YÚ͝Òî˷εÍÂʛåÌÍäÐçÞßÞßÛÜØµåàá×Бصå›ÖÚБå›ÉãËÂÇÚÐç
Ë _ ɳٳБÞßÉëÐ‘ÙŸÙ³É³ÒÒÛ _ áñÉãËÂʮпå›É³ØµÉŸÍäБá БֵèÚÛñɳصٳÉâҝÛñØÚٟÉâËÂǵÉ
Þ _ ʛáÜÛñ٠صÒî˝͝ÖÚÙÄËÂÛÜÊ›Ø Ê èµÉ `Äé
ÒïæÈÐ‘Ò " ê ^ ɳå›ÛÜØµØµÉŸ!Í Ò áÜá ˜ÎÚ֫͝ΠʛÒîÉ ì¥
B
A
S
I
C
ê˜Ø " ê ÓíÚËÂǵɟÍÂÉëæ¹ÉŸÍÉàØÚÊßÔ×ֵصٟËÂÛñʛØÚÒ ÛÜØ ÊÌÍÂèµÉŸÍ ˝ÊßIÉ P«É³ÙŸÖµËÉ ÐÀÙ³ÊôèµÉëÔÜÍäÐçå›ÞßÉ³Ø ËòÍÂɳÒîÎ Ê›ØµÒÛ _ áñÉ
Ô×ÊÌÍ Ð ÒîaÖ _µËäÐçÒ ]íÃì“ʛ֜ÇÚБèœËÂÊ ÖµÒÉ®ËÂǵÉ
ÒîËÂÐçËÂɳÞßɳد
Ë ^»æ Û²ËÂǜРáÜÛñØÚÉߨ Öµb
Þ _ ÉÄGÍ ` # ÊÌÍ
ÛÜØ
GOTO
GOSUB
ޮБدìßèµÛ×БáÜɳÙÄËÂ%Ò #¼ËÂÊ ÖµÞÀÎ ËÂÊ¿ËÂÇÚÐçËÈÙ³ÊôèµÉÌíµÐçØÚè ËÂǵɳ
Ø ÖµÞÀÎ _ Б٠] ֵҝÛÜØµå ÐçØÚÊÌ˝ÇÚÉÄÍ
^
í
GOTO RETURN
ÍÂɳҙΠɳٟËÂÛ U“ɳáñaì `´é ƹǵɞÍÂɳÒîÖÚá²Ë æÈБҏʛÔÜËÂÉ³Ø ÍÂɳÔ×ɟÍîÍÂɳè ËÂÊ Ð‘Ò
í¹èµÖµÉžËÂÊ ËÇÚÉžÙ³Ê›Ø ËÍÊ›á
QÚÊÑæ ÞßɬБصèµÉŸÍÂÛÜØµåàáÜVÛ ]“ÉÓZ
Ð _ ʛÛñáÜɳè®ÒîΠБå›ÇµÉŸËËÂÛ Ê›Ø ÐëÎÚá×ÐçËÂÉÌé )žŽ ¢ÊÌ©›ÍÉ³Á“Ê ŠU“Œ¬ÉĖºÍ¬–˜í«— ÎÚ±ŸÍ ʛFµå̌ ÍäБÞßÞßɟÍÂÒÕʛÔÜËÂɳØóèµÛÜèµ
Ø Ë
!
ËÂǵÛÜØ ]ßÛÜØ ËÂɟÍÂÞßÒïʛԡٳáÜɬÐÑÍÂáñìßèµÉ YÚØµÉ³èóÒÖ _µËäБÒN]¥Ò³í«ÒÛñÞÀÎ á²ì _ ɳٳБֵҝÉÏ˝ÇÚÉÓá×ÐçØÚå›ÖÚБå›É èµÛÜè ØµÊÌËòÒîֵεΠÊÌÍîË
ÛñˬéÃÆ¹ÇµÛÜÒòֵҝÖÚБáñáñìßáÜʦæ¹ÉŸÍÂɳè ËÂǵÉãÙ³Ê èµÉ W Ö ÐçáÜÛñË ì®É U“É³Ø Ô×֫͝ËÂǵɟͳé
ɳÒîÎÚÛñËÂÉÓËÂǵÛÜÒ³í " ê æÈБҷБØóÉIPô˝ÍÂɳÞßɟáñì®ÒÖµÙ³Ù³É³ÒîҝÔ×Öµá εÍÂʛåÌÍäБÞßÞßÛÜØµåëáÜБصå›Ö Ðçå›ÉÌé‹ê»ËÈÍÂɬÐçٴǵɳè
ËÂǵÉßΠɬР] ʛÔÈÛñËÂÒë΍ÊÌÎ Öµá×ÐÑÍÂÛñË ìÝÛÜØ ËÂǵɮá×ÐçËÂÉ Ò Ð‘Øµè ɳÐçÍÂáñì Òëæ ÇµÉ³Ø ËÇÚÉÀεÍÂʛֵè ÊÑæ·ØÚÉÄÍÂÒ
Ê›Ô ËÂǵZ
É YÚ͝ÒîËÏÇÚʛÞßÉâٳʛÞÀÎÚֵ˝ɟÍÂZ
Ò ^ºÐçÞßʛØÚåÀ˝ÇÚÉŸÞ ËÂÇµÉ Ð‘Ö«ËÂǵÊÌÍÂÒ `·ÙŸÍÂɳÐçËÂɳè ÎÚ͝ʛåÌÍäБÞßÒ Ê›ÔÃԪБÛñÍÂá²ìóǵÛÜå›Ç
ٳʛÞÀÎÚáÜIÉ P¥ÛñË ìßÛÜØ " ê Óé
3.1.7 Arrays as function arguments
SÝÉÈÇÚXÐ U“ɷҝɳɟØßÛÜØ " ɳÙÄËÂÛÜÊ›Ø \ é é \ ËÂÇÚÐçËÕБØßÐç͝ÍÂЬì¿Ù¬ÐçØÚصÊÌË_ ÉÈÛÜØµÛñËÂÛ×ÐçáÜ۳ɳè ÔÜÍÂÊ›Þ Ð‘ØµÊÌËÂǵɟÍÕÐç͝ÍÂЬì“í¯Ð‘صè
ËÂǵÛÜÒÃÛÜÞÀÎÚáÜÛÜɳҡËÂÇÚÐçË ÐÑ͝Íäгì¥ÒÕÇ ÐXU“ÉÈËÂÊâÍÂɳٟɳÛVU“ɷҙΠɳٳÛ×Ðçá ÐÑ˝ËÂɳدËÂÛÜʛØÀÛÜØ¿ËÂǵɷٳʛدËÂÉIPôË Ê›ÔÔ×ֵصٟËÂÛÜÊ›ØµÒ³é Æ¹ÇµÉ
ֵҝÖÚБá YµÍÂÒîËÈÒî˝ɟΞÛñ؞ÐëÔ×ֵصٟËÂÛÜʛخ٬ÐçáÜáÉ U‘БáÜÖÚÐçËÂÛñÊ›Ø ^°ËÂÇµÉ Ù¬Ð‘áÜá ÐÑÍÂå›ÖµÞßÉ³Ø ËÂÒ ÐçÍÂÉ É U‘БáÜÖÚÐçËÂɟè¾í¥Ð‘صè ËÂǵɳ۲Í
U‘БáÜֵɳÒòÐçÍÂÉÏÖÚÒîɳèóËÂÊ ÛñØÚÛ²ËÂÛ×БáÜÛ ³ÉòËÂǵÉÏÔ×ÊÌÍÂޮБá¤Ðç͝å›ÖÚÞßÉŸØ ËÂÒ ` Ù¬ÐçØ Ë _ ÉãèµÊ›ØµÉÓæ ÛñËÂǞÐç͝ÍäгìôÒ³é
VÛ U“ɟؽËÂǵÛÜÒ³í Û²ËÓÞßÛÜå›Ç Ë _É¿ÒîÖµÍîÎÚ͝ÛÜҝÛÜØµåßËÂÇÚÐçËÓÔ×ÊÌÍÂޮБá ÐçÍÂå›ÖµÞßÉ³Ø ËÒ Ê›Ô ÐçÍîÍäгì Ë ì Î É¿ÐçÍÂɿБáÜáñÊÑæ¹É³è¤é
[ ÊÌÍ·GÉ PµÐ‘ÞÀÎÚáÜÉÌí æ¹ÉãٳʛֵáÜèžèÚɟٳá×ÐçÍÂÉãÐ Ô×ÖÚØµÙŸËÛÜʛØ
// PRE : a [0] ,... ,a[n -1] are elements of an array
// POST : a [i ] is set to value , for 0 <= i < n
void fill_n ( int a [] , int n , int value );
ËÂÊóÒîɟ˿БáÜáÃɳáÜɳÞßÉŸØ ËÂÒÏʛÔÈÐ‘Ø Ðç͝Íäгì½ËÂÊóҝʛÞßÉbYaP¥É³è UÌÐçáÜÖµÉÌéžÆ¹ÇµÉÀٳʛÞÀÎÚÛÜáÜÉÄͬí¡ÇµÊ¦æ¹É U“ɟͬí ÛÜØ ËÂÉÄÍÂØÚБáÜáñì
ËÂǵÛÜÒïËÂÊ¿ËÂǵÉãٳʛÞÀÎÚáÜÉÄËÂɳáñì ÉXWôÖµÛVU‘БáÜɳد˷èµÉ³ÙŸá×ÐçÍäÐç˝ÛÜʛØ
© F ”޳–ºŽ
// PRE : a [0] ,... ,a[n -1] are elements of an array
// POST : a [i ] is set to value , for 0 <= i < n
void fill_n ( int * a , int n , int value );
ƹÇÚÉßҝБÞßÉßБè ÖµÒîËÂÞßɳدËâæ¹Ê›ÖµáÜè ÇÚÐçÎµÎ É³Ø Ô×ÊÌÍàËÂǵÉßÔ×ÊÌÍÂޮБá ÐÑÍÂå›ÖµÞßÉ³Ø Ë
í ÒÂгì“í ÞßɬБصÛÜØµå
ËÂÇÚÐçËòËÂǵÉëÐç͝ÍÂЬìžáÜɳصåÌËÂÇóÛñÒ ÛÜ囨µÊÌÍÂɳè¤é Ê›Ö Ù³Ê›ÖµáÜèóÛÜØ ÔªÐçÙŸË ^˜áÜɟå“БáÜáñì“í_ÚÖ«Ëint
W ÖÚÛ²ËÂa[5]
ÉâٳʛصÔ×ֵҝÛÜØµå›áñì `ÈÇÚÐXU“É
Ð Ô×ÊÌÍÂޮБá¤ÐçÍÂå›ÖµÞßɳدË
í ÐçØÚè ËÂǵɳØóֵҝÉëÐçØ Ðç͝Íäгì Ê›Ô áñɳصåÌËÂÇ
БÒÈ٬БáÜá¾ÐçÍÂå›ÖµÞßɳدˬé
int a[5]
10
ÆÈǵÉÓÞßÊÌÍäБáÚÛÜÒ ËÂÇÚÐçË ÛÜØßÍÂɬБáÜÛ²Ë ì“í¯ØµÊ Ô×ÊÌÍÂޮБáÐÑÍÂå›ÖµÞßÉ³Ø ËÂÒÕÊ›Ô ÐÑ͝ÍäгìÀË ìôÎ É ÉGP«ÛÜÒî˳í«Ð‘صè®ÛÜØ®ÊÌÍÂèµÉŸÍïËÂÊ
XÐ U“Ê›ÛÜèžÙŸÊ›ØÚÔ×ֵҝÛñʛؾíµÛñËÈÛÜÒ _ ɟËîËÂɟÍòØÚÊÌ˹ËÂʿεÍÂɟËÂɳصèóÊÌ˝ÇÚÉÄ͝æ ÛÜÒîÉÌé
ê˜Ôòæ¹ÉÀæÈÐ‘Ø¯Ë ËÂÊ _ ÖµÛÜáñè Ð Ô×ֵصٟËÂÛÜÊ›Ø ËÂÇÚÐçËàæ¹ÊÌÍ ]ôÒàæ ÛñËÂÇ ÐçÍîÍäгì¥Ò³í æ¹ÉßËÂǵɟÍÂɳÔ×ÊÌÍÂÉ®ÇÚÐXU“É ËÊ ËÇÚÛñØa]
Ð _ ʛ֫ËÕБáñ˝ɟÍÂØÚÐçËÂVÛ U“ÉïæÈгì¥ÒÃʛÔΠБҝÒîÛÜØµåÏËÂǵÉòÐç͝Íäгì¿ËÂÊÓËÂǵɷÔ×ֵصٟËÂÛÜÊ›Ø¤é Ø Ê _ U¥ÛñʛÖÚÒ æÈгì¿ÛÜÒÕÒîÖÚå›å›ÉŸÒîËÂɳè
_ôì ËÂǵɿèµÉ³Ù³á×ÐçÍÂÐçËÂÛÜÊ›Ø Ê›Ô
Ð _ Ê U“É æ¹É¿Î БÒîÒâÐÀΠʛÛÜØ¯ËÂɟÍÓËÂÊ®ËÂǵb
É YµÍÂҙËãɟáÜɳÞßɳدˬí¤Ð‘áÜÊ›Øµå®æ ÛñËÂÇ
fill_n
ËÂǵÉàØôÖµ
Þ _ ɟͷʛÔÃɟáÜɳÞßɳدËÂÒ³é èµÛ ɟÍÂÉ³Ø¯Ë Î Ê›ÒÒÛ _ ÛñáÜÛñË ì ÛÜÒ·ËÂÊßΠБҝÒ
ΠʛÛÜØ ˝ɟÍÂÒ³í ʛØÚÉë˝ʮ˝ÇÚÉ YÚ͝ÒîË
ɳáÜɟÞßÉ³Ø Ë¬í ÐçØÚè ÐóΠБÒîË »ËÂÇµÉ ºÉ³Øµè ΠʛÛÜØ ËÉŸÍ¬é½ÆÈǵÛÜÒ Ð‘áñÒÊ ÖÚØµÛ W ֵɳáñìݖ˜èµ¸ÓɳÒî ÙŸÍÂVÛ _ ÉŸÒ ËÇÚÉ ÐçÍîÍäгì“é ê˜Ø _ ÊÌËÂÇ
U‘ÐçÍÂÛ×БدËÂÒ³íµæ¹Éâޮгì БٟËÂÖÚБáñáñì Ù´ÇµÊ Ê›ÒÉãËÂǵÉëٳБáÜá¾ÐçÍÂå›ÖµÞßɳدËÂÒòÛñØ ÒÖµÙ´Ç Ð æÈЬì ËÂÇÚÐçËòËÂǵɟìžèµÉ³ÒîٟÍÂVÛ _ ÉâÐ
ٳʛدËÂÛÜå›ÖµÊ›ÖµÒ
ʛԍËÂÇµÉ ÊÌÍÂÛÜå›ÛÜØÚБáÚÐç͝ÍÂЬì“éÃÆ¹ÇµÛÜÒ å›É³ØµÉŸÍäÐçáÜÛ ¬Ðç˝ÛÜʛØÀÛÜҋ΍ʛҝҝVÛ _ÚáÜÉòҝÛÜØµÙ³É ËÂÇµÉ ÐçÍîÍäгì
ÛñËÂÒîɳáÜÔ¾ØÚIÉ U“ÉŸÍ ŽŸÐ甾ε ŸÎ ©“ɳ£¬Ð磟Í© ÒòJ БҷÐçØ ÐçÍÂå›ÖµÞßɳدˬé
ïË¡ËÂǵÛÜҤΠʛÛÜØ¯Ë¬í¦ÛñˡҝɳɳÞßÒ¾áÜVÛ ]“ÉÃйޮÐç˝ËÂɟ;ʛԯËäБÒîËÂÉ æ ǵÛÜÙäÇëʛԯËÂǵÉÕË æ¹Ê UÌÐç͝Û×Ð‘Ø ËÒ¡ÛÜҤεÍÂɳÔ×ɟÍÂÐ _ÚáÜÉ _ÚÖ«Ë
ÛÜÔ ì“Ê›Ö ËÂǵÛÜØ ]óÐ _ Ê›Ö«Ë ÇµÊÑæ ËÂǵÉëÔ×ÖµØÚÙÄËÂÛÜʛØ
ÛÜÒ ØÚÐçËÂÖ«ÍäБáñáñì ÛÜÞÀÎÚáÜɳÞßɳدËÂɳè ÛÜØ _ ÊÌËÂÇ UÌÐÑÍÂÛ×БدËÂÒ³í
HB>
%*
6#
$*&L
75 BI
-72 A6#"
*
:
I
/
% -2*
/
$
O2"5
8
%)'26
*
2!
&0
fill_n
$
#6%"
:#*
/.
. I/
/L
M
,BI
. -
J
/L.*
#/
"5
PS*
$
'(9$
%"K26I *
N$
,*
% O /C7
(Q$
)
N
*'(
/
! æ¹É ÒÉŸÉ ÐãèµÛ ɟÍÂɳصٳÉÌé ·ÉŸÍÉ·ÛÜҋÐãεÍÂʛåÌÍäÐ‘Þ ÂË ÇÚÐçË èµÉ YÚØµÉ³ÒïÐçØÚèßֵҝɟҋËÂÇµÉ·Ë æ¹Ê U‘ÐçÍÂÛ×БدËÂÒ^°ËÂÇµÉ ÒÉ³Ù³Ê›Øµè
ʛصɮÛÜÒ ™ÖµÒîˏ٬БáñáÜɳè
ÒîÛÜØµÙ³ÉßËÂǵɟÍÂÉ ÛÜÒ ÚØ Ê `âËÂÇÚÐçË¿ØÚÐçËÂÖ«ÍäБáÜá²ì ÍÂɳÒîÖÚá²Ë¬íÕå›Û U“É³Ø ËÂǵɮÍÂɳÒî΍ɳٟËÂÛVU“É
fill
n
Ô×ÊÌÍÂޮБá¤ÐÑÍÂå›ÖµÞßÉ³Ø ËÂҟé
# include < iostream >
// Program : fill . C
// define and use two functions to fill an array
// PRE : a [0] ,... ,a[n -1] are elements of an array
// POST : a[i ] is set to value , for 0 <= i < n
void fill_n ( int * a , int n , int value ) {
// iteration by index
for ( int i = 0; i < n ; ++ i )
a[ i ] = value ;
}
// PRE : [ first , last ) is a valid range
// POST : * p is set to value , for p in [ first , last )
void fill ( int * first , int * last , int value ) {
// iteration by pointer
for ( int * p = first ; p != last ; ++ p)
*p = value ;
}
int main ()
{
int a [5];
fill_n (a , 5 , 0); // a == {0 , 0 , 0 , 0 , 0}
fill ( a , a +5 , 1); // a == {1 , 1 , 1 , 1 , 1}
return 0;
}
Program 21: ¢¤£³ÄÁ“Ž
»’ ’×Å
ê˜Ø ˝ÇÚÉYÚ͝ÒîË U‘ÐçÍÂÛ×Ð‘Ø¯Ë¬í æ¹É·ÛñËÂɟÍäÐÑËÂÉ ÊU“ÉŸÍÈБáÜáÚÛÜØµèµÛÜÙ³É³Ò ÛñØÀËÂÇµÉ ÒÉŸË
í Бصèßæ¹É å›ÉŸË ËÂǵÉ
{0, . . . , n − 1}
Ðç͝ÍÂЬìÝɳáÜɳÞßɳدËÂÒ _ ìÝÍäБصèµÊ›Þ Бٟٳɳҝҳé ê˜Ø ËÂǵÉßҝɳٟʛØÚè U‘ÐçÍÂÛ×Ð‘Ø¯Ë¬í æ¹ÉßÛñ˝ɟÍäÐçËÂÉ Ê U“ÉŸÍ¿ÐçáÜá Бèµè«ÍÂɳÒîҝɳÒ
ÛÜØ ËÂǵÉ
í¡ÐçØÚè æ¹É å›ÉŸËÓËÂǵɏÐÑ͝Íäгì ɳáÜɳÞßɳدËÂÒ_ôì èµÉŸÍÉ³Ô×ɟÍÂɳصٳÛñØÚå«é U‘БáÜÛÜè
Ä
£
“
©

š
«
Á
Œ
[first, last)
ÍäБصå›É Ù³Ê›Ø ËÂБÛÜØµÒ¿ËÇÚɞБèµè«ÍÂɳҝҝɟÒÀÊ›Ô Ð ^»Î Ê›ÒÒÛ _ á²ì ɳÞÀÎµË ì ` ÒîɟËÀÊ›Ô ÙŸÊ›ØÚÒîɳٳ֫ËÂVÛ U“ÉžÐç͝Íäгì ɳáÜɳÞßɳدËÂÒ³í
æ ǵɟ͝ɏËÂÇµÉ¿Ç ÐçáÜÔ×ÊÌΠɳØÝÛñØ ËÂÉŸÍ UÌБáÃØµÊÌËäÐçËÂÛñʛØ
ÞßɳБصÒÓËÇ ÐÑËãËÂǵɿÍäБصå›ÉÛñÒãå›VÛ U“ÉŸØ _ôì
[first, last)
ËÂǵÉU‘БáÜֵɳҋʛÔ
í
íé¬é³é³í
éÃê˜ØßÊÌËÂǵɟ͋æ¹ÊÌ͝èÚҟí
ÛñÒ ÐÏÎ Ð‘Ò™Ë ˜ËÂÇµÉ ˜É³ØµèÀΠʛÛÜØ¯ËÂɟÍ
first first+1
last-1
last
Ô×ÊÌÍÈËÂǵÉâÒÖ _ Ðç͝Íäгì èµÉ³ÒÙŸÍÛV_ ɳè _ ì®ËÂǵÉÏÍäÐçØÚå›É‘é
Òïæ¹ÉÓÇ ÐXU“ÉÏБáñ͝ɬБè«ì®ÐçÍÂå›ÖµÉ³è ÛÜØ " ɳٟËÂÛñÊ›Ø \ é é í ËÂǵÉÓҝɳٟʛØÚè UÌÐÑÍÂÛ×Бد˹ÛÜÞÀÎÚáÜɳÞßɳدËÂÒÃ˝ÇÚÉ îØÚÐçË Ö«ÍäÐ‘á ®Ûñ˝ɟÍäÐçËÂÛñÊ›Ø½Ê U“ÉŸÍâÐ‘Ø Ðç͝ÍÂЬì“í¾Ð‘صè ËÂǵɟÍÂɳÔ×ÊÌÍÂɏҝɳɳÞßÒ ÎµÍÂɳÔ×ÉÄÍäÐ _ÚáÜÉÌé ‹Ö«ËÓËÂǵÉ
ÍÂɬБÒîÊ›Ø æ ǯì
ÛñËòÛÜÒÈÛÜØµèÚɟɳèóεÍÂɳÔ×ɟÍäÐ _ áñÉâáÜÛÜɟÒòҝʛÞßÉÄæ ǵɟÍÂÉÓɳáÜÒîÉÌé¹ê˜Ø àí ËÂǵɟ͝ÉëÐçÍÂÉÏËÂɳÙäÇµØµÛ Wôֵɳ£³ÒȌ´©¯ËÂ’Ê Þ®Ð ]“ÉÏÔ×ֵص٠!\
ÂË ÛÜʛصÒïáÜÛ ]“É
ÊÌÍ
ÐXU‘БÛÜá×Ð _ áñÉ ØµÊÌ˹ʛØÚá²ìßÔ×ÊÌÍòÐç͝Íäгì¥ÒŸí _ÚÖµËÈÔ×ÊÌÍÈޮБدìÀÊÌËÂÇµÉŸÍ¹ÙŸÊ›Ø ËäБÛñØÚÉÄÍÂÒÈÐçË
fill
fill_n
ËÂǵÉëÒÂÐçÞßÉãËÂÛÜÞßɑéòê˜Øó˝ÇÚÛñÒ å›É³ØµÉŸÍäБá¡ÒÉŸËËÛÜØµå«íÚËÂǵÉëÔ×ֵصٟËÂÛñʛØÚÒòæ¹ÊÌÍ ]žæ·ÛñËÂÇóÛñ˝ɟÍäÐçËÂÊÌ͝ҳé S Éâޮгì ˝ÇÚÛñØa]
Ê›Ô ËÂÇµÉ³Þ Ð‘Òëå›É³ØµÉŸÍäÐçáÜÛ ³É³èÝ΍ʛÛÜØ ËÂÉÄÍÂÒãËÂÊžÙ³Ê›Ø ËäÐçÛÜØµÉŸÍëɳáñɳÞßÉ³Ø ËÒ³í"_ÚÖ«ËâËÂǵÉÀÊÌ΍ɟÍäÐçËÂÛñʛØÚÒÓËÂÇÚÐçËãæ¹ÉÀ٬БØ
Ð‘ÙŸËÖ ÐçáÜáñìÀÎ ÉÄÍÂÔ×ÊÌÍÂÞ Ê›ØžËÂÇµÉ³ÒÉ ™Î ʛÛÜØ ˝ɟÍÂÒ ¿èµÉŸÎ ɳصèóʛ؞˝ÇÚÉÏٳʛدËäБÛÜØµÉŸÍ¬é
ÆÈÇµÉŸÍÉ ÐçÍÂÉòÞ®Ð‘Ø ì¿ØÚÐçËÂÖ«ÍäБáÚٳʛدËäБÛÜØµÉŸÍÂÒÃËÂÇÚÐçËÕèÚÊâØÚÊÌË‹Ê ÉŸÍÕÍäБصèµÊ›Þ Бٟٳɳҝҋ˝ÊâËÂǵɳÛñ͋ɳáÜɳÞßɳدËÂÒ³é
[ ÊÌÍ ÒÖµÙäÇàٳʛدËäБÛÜØµÉŸÍÂҟí
Ð‘Ò Ð _Ê U“É æ¹Ê›
Ø Ë¾æ¹ÊÌÍ ]íçҝÛÜØµÙ³É ËÂǵÉÕÒÖ _Úҝٟ͝ÛñÎµË ÊÌΠɟÍÂÐçËÂÊÌ;ÛÜÒ¾ØÚÊÌË XÐ UÌÐçÛÜá Ð _ÚáÜɹÔ×ÊÌÍÃËÂǵɳÛñÍ ™Î ʛÛÜØ¯ËÂɟfill_n
ÍÂÒ «é ÆÈǵÉÈÖÚØµèµÉŸÍÂá²ì¥ÛÜØµåÓÊÌΠɟÍäÐÑËÂÛÜʛؿʛԍБèµèµÛÜØµåãÛñØ ËÂɳå›ÉÄÍÂÒ ËÂÊâҝֵÙäÇ ™Î ʛÛñØ ËÂÉŸÍÒ ÛÜÒ¹ËÂǵɳØóصÊÌËÈèµÉ YÚØÚɟè¾íµÉ³Û²ËÂǵɟͬé
Ø ËÂÇµÉ ÊÌËÂǵɟÍÀÇÚБصè¤íÕ˝ÇÚÉ æÈÐ³ì æ¹É Ç XÐ U“É èÚIÉ Y صɳè РٳʛدËäБÛÜØµÉŸÍÛÜØ " ɳÙÄËÂÛÜÊ›Ø \ é é íÕæ¹É
å›ÖÚÐçÍäБدËÂɳɳèÀËÇ ÐÑˋæ¹É Ù¬ÐçØ Û²ËÂɟÍäÐçËÉ·Ê U“ɟ͹ÛñËÂÒÕɳáÜɳÞßɳدËÂÒ³é ÕìÀÙ³Ê›Ø U“ɳدËÂÛÜʛؤí“ËÂǵÛÜÒ ÛÜÒÃÍÂɬБáÜÛ ³É³èÀËÂÇ«ÍÂʛֵ©“団³Ç Œ
™Î ʛÛÜØ¯ËÂÉŸÍ ÛÜØµÙŸÍÉ³ÞßÉ³Ø Ë³í¥ÖµÒÛÜØµå¿ËÇÚÉÓÊÌÎ ÉÄÍäÐçËÂÊÌÍ
é‹ê˜ØžÔªÐ‘ٟˬí¥ËÂǵÉÏÊÌΠɟÍäÐÑËÂÛÜʛØ
ÛÜÒÈXÐ UÌБÛñá×Ð _ÚáÜÉÌí É U“ɳØ
ÛÜÔ
ÛÜÒ¿ØÚÊÌË ËÂÇµÉ á×ÐÑ˝ËÂÉŸÍ ÛÜÒ ÍäБصèµÊ›Þ Бٳٳɟҝ++
Ò Ô×ֵصٟËÂÛÜʛØÚБáñÛñË ìÝÔ×ÊÌÍ¿ËÂÇµÉ Òî΍++p
ɳٳÛ×БáïÍÂÛñå›Ç Ë ˜Ç ÐçØÚè ҝÛÜèµÉ
ÊÌÎ p+1
ɟÍÂБصè é
ÆÈǵɟ͝ɳ1Ô×ÊÌÍÂÉÌí ËÂǵÉÀÔ×ֵصٟËÂÛÜʛØ
Ð‘Ò Ð _ Ê U“ÉÀÇÚБÒëËÂÇµÉ Î ÊÌËÉ³Ø ËÂÛÜБáÃ˝Êóæ¹ÊÌÍ ]ÝÔ×ÊÌÍ ÐçáÜá‹Ù³Ê›Ø¯ËäБÛÜØµÉŸÍÒ³í
ҝÛÜØµÙ³ÉÏÛñËÈʛصáñì®ÍÂXÉ W ÖÚÛ²ÍÂɳ
Ò ™Î ʛÛÜØ ˝fill
ÉŸÍ ¿Ô×ÖÚØµÙŸËÛÜʛØÚБáÜÛñË ì ËÇ ÐÑË·ÛÜÒ¹Ê ÉŸÍÂɳè _ ìóБáñá Ù³Ê›Ø ËäÐçÛÜØµÉŸÍÈÛñËÂɟÍäÐÑËÂÊÌÍÂÒ³é
Æ ÇµÉŸÍÂɹÛÜÒÃÐ ÒÖ _ÚÒîËäБدËÂÛ×Бá¥èµÛ ɟÍÂɳصٳÉR_ ÉÄË æ¹ÉŸÉ³ØËÇÚÉïÔ×ֵصٟËÂÛñʛØ
¹
Ê›Ø ËÂǵɹʛØÚÉ
pow
ÇÚБصè¤íµÐ‘صè ËÂǵÉÓÔ×ÖµØÚÙÄËÂÛÜʛصÒ
Бصè
Ê›Ø ËÂǵÉÓÊÌËÂǵɟÍòÇ ÐçØÚè¤é ٬БáÜá ËÂʿ˝ÇÚÉÏÔ×ֵصٟËÂÛÜʛØ
fill
fill_n
ÇÚБҷصÊßÉ É³ÙŸË¬í ҝÛÜØµÙ³Éâ˝ÇÚÉãٳʛÞÀÎÚÖ«ËäÐçËÂÛÜʛصҹʛصáñì ÞßÊôèµÛÜÔÜì Ô×ÊÌÍÂޮБá¾Ðç͝å›ÖÚÞßÉŸØ ËUÌБáñÖÚÉŸÒ ËÂǵɳÒîÉ UÌÐçáÜpow
ֵɳÒ
ÐçÍÂÉ îáÜÊôÙ¬Ðçá ˝ʞËÂÇµÉ Ô×ֵصٟËÂÛÜÊ›Ø Ù³Ð‘áÜáÕБصè îèÚÛñÒÂÐçεΠɬÐçÍ žÖ«Î Ê›Ø ËÂÉÄÍÂÞßÛÜØÚÐçËÂÛÜʛؤéS¼ÛñËÂÇ
í ÛñË! ÒÏËÂǵÉ
pow
Ê›Ô ÐàÔ×ֵصٟËÂÛÜʛØóٳБáÜá ËÂÇÚÐç˹æ¹ÉâÐÑÍÂÉãÛñØ ËÂɟ͝ɳÒîËÂɳèžÛÜØ¤é
Dô©¯’•” Œ
ÈÐçáÜáÜÒ ËÂÊëËÂǵɷÔ×ֵصٟËÂÛÜʛصÒ
Бصè
íôʛØÀ˝ÇÚÉ·ÊÌËÂǵɟÍïÇÚБصè¤í ÇÚXÐ U“É É É³ÙŸËÂÒ ËÇÚÉÄìÀÞßÊôèµÛÜÔÜì
ËÂÇµÉ U‘БáÜÖµÉ³Ò Ê›ÔÃÐç͝ÍÂЬìžÉ³áÜɳÞßÉŸØ fill
ËÂÒ³íБصè ËÂǵfill_n
ɳҝZ
É U‘БáÜֵɳÒÓÐçÍÂÉ
áñÊô٬Бá¾ËÂÊÀËÂǵÉëÔ×ֵصٟËÂÛÜÊ›Ø Ù¬ÐçáÜá˜
é S¼ÇµÉ³Ø
š
“

–
æ¹ÉÓæ·ÍÂÛñ˝É
Mutating functions.
int a [5];
fill (a , a +5 , 0);
ËÂǵÉàÉ É³ÙŸËÏʛÔÃ˝ÇÚÉàÉGP¥ÎµÍÂɳҝÒîÛÜʛØ
ÛñÒ ËÂÇÚÐçËÏБáÜá¡É³áÜɳÞßɳدËÂÒ Ê›Ô ÍÂÉ³Ù³É³Û U“ÉU‘БáÜÖµÉ é
fill (a, a+5, 0)
ƹÇÚÛñÒëÛÜÒâΠʛÒîҝÛV_ÚáÜÉ ÒîÛÜØµÙ³ÉÀËÂǵɟÍÂÉßÐÑÍÂÉßÔ×ÊÌÍÂޮБáÕÐçÍÂå›ÖµÞßɳدËÂÒâʛÔïΠʛÛÜØ¯ËÂɟÍãË ì Î ÉÌé S¼aÇµÉ³Ø ËÂǵÉßÔ×ÖµØÚÙÄËÂÛÜʛ0Ø
٬Бáñá
ÛÜÒãÉ UÌÐçáÜÖÚÐçËÂɳè¤í¤ËÂÇµÉ Ô×ÊÌÍÂޮБá ÐÑÍÂå›ÖµÞßÉ³Ø Ë
ÛñÒãÛÜØµÛñ˝Û×БáÜÛŸÉ³è æ ÛñËÂÇ ËÂǵÉ
fill (a, a+5, 0)
first
Ê›Ô Ò YµÍÂÒîË ÉŸáÜɳÞßɳدˬéïê˜Ø ËÂǵÉâÔ×ֵصٟËÂÛÜÊ›Ø _Êôè«ì“í«ËÂÇµÉ UÌÐçáÜÖµÉëÐçËòËÂǵÛÜÒ Ð‘èµè«ÍÂɳÒîÒ ÛÜÒ·ÞßÊ èµÛVYÚɳè
Ë© Ç«F ÍÂF“Ê›£³ÖµŒ¬å›ŽŸÇ Ž ˝ÇÚÉÏaVá U‘БáÜÖµÉ
íÚБصèžËÇÚÉÏÒÂБÞßÉÓÇÚÐçεΠɳصÒÈÔ×ÊÌÍò˝ÇÚÉÏÊÌËÂǵɟÍòÔ×Ê›Ö«Í Ðç͝ÍÂЬì ɳáñɳÞßÉ³Ø ËÒÈÛñØ ËÂÖ«ÍÂØ¤é
*p
[ ÊÌÍÂޮБá¹ÐçÍÂå›ÖµÞßɳدËÂҿʛÔòΠʛÛÜØ¯ËÂÉŸÍ¿Ë ìôÎ É ÐçÍÂÉ ËÂǵɟÍÂɳÔ×ÊÌÍÂɞнÞßɬÐçØÚÒ Ê›Ô ÙŸÊ›ØÚҙ˝ÍÂֵٟËÂÛÜØµå Ô×ÖµØÚÙÄËÂÛÜʛصÒ
æ Û²ËÂÇ U‘БáÜÖµÉ ˜ÞßÊôèµÛÜÔÜì¥ÛñØÚåàÉ É³ÙŸËÒ³é " ÖµÙäÇ Ô×ֵصٟËÂÛÜʛصÒòÐçÍÂÉÏ٬БáÜáÜɟè
é
¨ž”––˜—»šÁ
3.1.8 Modularization
ƹÇÚÉÄÍÂÉ ÐçÍÂÉëÔ×ֵصٟËÂÛñʛØÚÒÈËÂÇÚÐçË ÐÑÍÂÉëËäБÛÜáñÊÌͺޮБèµÉ Ô×ÊÌÍÓЏÒîÎ É³Ù³Û Y ÙãÎÚ͝ʛåÌÍäÐ‘Þ íÚБصè ÛñË·æ¹Ê›ÖµáÜè ØµÊÌË Þ®Ð ]“É
ҝɳصҝÉòËÂÊëֵҝɷËÂÇµÉ³Þ ÛÜØ®Ð‘صÊÌËÂǵɟÍÃεÍÂʛåÌÍäÐ‘Þ é ‹ÖµËÕËÂǵɟÍÂÉ·ÐçÍÂÉ ÐçáÜҝÊëå›É³ØµÉŸÍÂБáÚÎÚ֫͝ΠʛÒîÉ·Ô×ֵصٟËÂÛÜʛصÒÕËÇ ÐÑË
ÐçÍÂɹֵҝɳÔ×ÖµáµÛÜØ¿Þ®Ð‘Ø ìãεÍÂʛåÌÍäБÞßÒ³é ê»Ë ÛÜÒ Ù³áÜɬÐÑÍÂáñìëֵصèµÉ³ÒÛñÍÂÐ _ÚáÜÉ ËÂÊÓÙ³ÊÌÎôìà˝ÇÚɹٳÊÌÍîÍÂɳÒîΠʛصèµÛÜØµåÓÔ×ÖµØÚÙÄËÂÛÜʛØ
©¯–˜—š í Ð
èµÉ YÚØµÛñËÂÛÜʛØóÛñØ ËÂÊßÐçØ ìžÎµÍÂʛåÌÍÂБÞðËÂÇÚÐçË Ù¬Ð‘áÜáÜÒÈËÂǵÉëÔ×ֵصٟËÂÛÜÊ›Ø æ·ÇÚÐçË·æ¹ÉëØµÉ³ÉŸè½ÛÜÒ
¨

“
F
”
ª
’
“
©
¬
£
—
ÒÖ _ èµVÛ UôÛÜҝÛÜÊ›Ø Ê›Ô¡ËÂǵÉÓεÍÂʛåÌÍäÐ‘Þ ÛÜØ¯ËÂÊ ÛÜØµèµÉŸÎ ɟØÚèµÉ³Ø¯Ë¹ÎÐÑ͝ËÂÒ³é
! Æ ÇµÉ¿Î ÊÑæ¹ÉÄÍâÔ×ֵصٟËÂÛÜʛØ
È
ÔÜÍÂÊ›Þ ÍÂʛåÌÍÂÐ‘Þ ÛÜÒÏٳɟ͝ËäÐçÛÜØµáñì å›É³ØµÉŸÍäÐçáÃÎÚ֫͝Π›Ê ҝɑé ê˜ØÝÊÌ͝èÚÉÄÍãËÂÊ
pow
ޮР]“ÉàÛñË ÐKU‘БÛÜáÜÐ _ÚáÜÉâËÂÊ Ð‘áÜá ʛֵÍӵΠÍÂʛåÌÍäÐçÞßÒ³í æ¹É ٬БؽҝÛÜÞÀÎÚáñì ÎÚÖµË ËÇÚÉ Ô×ֵصٟËÂÛÜÊ›Ø èµÉ YÚØµÛñËÂÛÜÊ›Ø ÛÜØ¯ËÂÊ®Ð
Ò ɟΠÐçÍÂÐçËÂÉÏҝʛ֫ÍÂÙ³É³Ù³Ê èµÉ YÚáÜÉ
µí ÒÂгì“í«ÛÜØóʛ֫ÍÈæ¹ÊÌÍ ]¥ÛÜØµå¿èµÛñÍÂɳٟ˝ÊÌ͝ì“é
pow.C
# include < cassert >
// PRE : e >= 0 || b != 0.0
// POST : return value is b^e
double pow ( double b , int e)
{
assert ( e >= 0 || b != 0.0);
double result = 1.0;
if ( e < 0) {
// b^ e = (1/ b )^( - e)
b = 1.0/ b ;
e = - e;
}
for ( int i =0; i <e ; ++ i ) result *= b;
return result ;
}
Program 22: ¢¤£³ŸÁ“Ž ¢ ›¸ Å
ÆÈǵɳØóæ¹ÉÏ٬Б؞ÛÜØµÙ³áÜÖµèµÉÓ˝ÇÚÛñÒ YÚáÜÉÏÔÜÍÂʛÞ
// Prog : callpow2 .C
// Call a function for computing powers .
# include < iostream >
# include " pow .C"
ʛ֫ͷޮБÛñخεÍÂʛåÌÍÂÐ‘Þ Ð‘ÒòÔ×ʛáñáÜÊÑæ·Ò³é
int main ()
{
std :: cout
std :: cout
std :: cout
std :: cout
std :: cout
<<
<<
<<
<<
<<
pow ( 2.0 , -2) < < "\n " ;
pow ( 1.5 , 2) < < "\n " ;
pow ( 5.0 , 1) < < "\n " ;
pow ( 3.0 , 4) < < "\n " ;
pow ( -2.0 , 9) < < "\n " ;
//
//
//
//
//
outputs
outputs
outputs
outputs
outputs
return 0;
}
Program 23: ¢¤£³ÄÁ“Ž
ØóÛÜØµÙ³áñÖÚèµÉÓèµÛñÍÂɳÙÄËÂÛVU“ÉÏʛԡËÂǵÉÏÔ×ÊÌÍÂÞ
#include
±Ä©¯’°’ ¢›¸
Å
0.25
2.25
5
81
-512
!
áÜʛå›ÛÜٳБáÜáñì ÂÍ ÉŸÎÚá×ÐçٳɳÒßËÂÇµÉ ÛÜØµÙ³áÜÖµèµÉóèµÛñÍÂɳٟ˝ÛVU“É _ôì ËÂÇµÉ Ù³Ê›Ø¯ËÂÉ³Ø ËÒ Ê›ÔÓËÂÇµÉ ÒîΠɳٟÛVYÚɳè YÚáÜÉ‘é ·ÒîÖ ÐçáÜáñì“í
ÛÜÒÈÛÜØ¯ËÂɟ͝εÍÂɟ˝ɳèžÍÂɳáÜÐçËÂÛVU“É ËÂÊ¿ËÂǵÉÏæ¹ÊÌÍ ]ôÛÜØµåèµÛñ͝ɳٟËÂÊÌ͝ì“é
ƹǵÉëÙ³Ê èÚÉâҝɟΠÐçÍäÐç˝ÛÜʛØóÞßɳÙäÇÚБصÛÜÒÞ ÔÜÍÂÊ›Þ ËÂǵÉâεÍÂÉ Separate compilation and object code files.
U¥ÛñʛÖÚÒ Î ÐçÍÂБåÌÍäÐçÎÚÇ ÇÚÐ‘Ò Ê›ØµÉ¿Þ®Ð ÊÌÍ·èµÍÂЬæ_ Б٠] ò˝ÇÚÉàٟʛÞÀÎ ÛñáÜÉŸÍ èµÊ É³Ò ØµÊÌË îÒÉ³É ÛñË¬é ‹É³Ô×ÊÌÍÂÉ Ù³Ê›Þ
ÎÚÛÜá×Ðç˝ÛÜʛؤí
ÛÜÒàáÜʛå›Ûñ٬БáÜáñì Ù³ÊÌÎÚÛÜɟè _ Б٠] ÛÜØ¯ËÂÊ ËÂǵÉßޮБÛÜØ YÚáÜÉÌí ÒîÊ ËÂǵÉßٳʛÞÀÎÚÛÜáñɟÍëÒî˝ÛÜáÜá‹ÇÚБÒë˝Ê
pow.C
˝ÍäÐçØÚÒîá×ÐçËÂÉÃËÂÇµÉ Ô×ÖµØÚÙÄËÂÛÜÊ›Ø èµÉ YÚØÚÛ²ËÂÛÜʛØëÛÜØ¯ËÂÊ Þ®Ð‘ÙäǵÛÜØµÉÃá×Бصå›ÖÚБå›É
ÛñË Ù³Ê›ÞÀÎÚÛÜáÜɳҡÐòεÍÂʛåÌÍäÐçÞ
ËÂÇÚÐçËÈ٬БáñáÜÒ
éÕÆÈǵÛÜÒÈÛÜÒÈÐàæÈБÒîËÂÉÏÊ›Ô ËÂÛÜÞßÉ ËÇ ÐÑËòÙ³Ð‘Ø _ ÉãÐXU“Ê›Û܌XèµDôɳŒ³è £KJÀ
_ôì –˜—°¨ Œ
é
pow
‘
Ž
™
Œ

¢
“
©
Ÿ
£
¯
©

–
ó
Œ
Ä
±
›


¨
¤
¢
˜
—
×
’
¯
©
˜
–
î
—
›

š
ê˜ØœÊ›Ö«Í¿Ù¬Ð‘ҝɑíÃæ¹Éßæ¹Ê›ÖµáÜè ٳʛÞÀÎÚÛÜáÜɏ˝ÇÚÉ YÚáÜÉ
ҝÉÄÎÐÑÍäÐçËÂɳá²ì“é S É Ê›Øµáñì ÇÚÐXU“ÉßËÂÊ ËÂɳáÜá‹ËÇÚÉ
ٳʛÞÀÎÚÛÜáÜÉÄÍ ËÂÇÚÐçËÓÛñËÓҝǵʛֵáÜè½ØÚÊÌËÏå›É³ØµÉŸÍÂÐçËÂÉ¿Ð‘Ø GÉ P«É³pow.C
Ù³Ö«ËäÐ _ áñÉ ÎµÍÂʛåÌÍÂÐ‘Þ ^˜ÛñËÓÙ¬ÐçØ Ë¬í¤ÒÛÜØµÙ³ÉàËÂǵɟÍÂÉ ÛÜÒÓØµÊ
Ô×ֵصٟËÂÛÜÊ›Ø ` _ÚÖµËòБØ
YÚáÜÉÌí«Ù¬Ð‘áñáÜɳè
í«ÒÂгì“éÕÆÈǵÛÜR
Ò YÚáÜÉ Ù³Ê›Ø¯ËäБÛÜØµÒïËÂǵÉÓޮБÙäÇÚÛñØÚÉ
¥

Ä
Œ
¬
±
ã
–
Ä
±

µ
F
Œ
main
pow.o
á×Бصå›ÖÚБå›É ÛÜØµÒî˝͝ÖÚÙÄËÂÛÜÊ›ØµÒ ËÂÇÚÐçËâٟÊÌ͝ÍÂɳÒî΍ʛØÚèÝ˝ʞËÂÇµÉ ÒîËÂÐçËÂɳÞßɳدËÂÒÏÛÜØ ËÂÇµÉ Ô×ֵصٟËÂÛñÊ›Ø _ Êôè«ì ʛÔ
é
pow
Æ ÇÚɿҝɟΠÐçÍÂÐçËÂɿٳʛÞÀÎÚÛÜá×ÐçËÂÛñʛØóٳʛصٳɟεËãÛÜÒÓÞßÊÌÍÂÉëΠʦæ¹ÉŸÍÂÔ×Öµá ËÂÇÚБؽæ¹É¿ÇÚÐKU“É¿ÒÉ³ÉŸØ ҝÊ
¹
ÔªÐçÍ ÒîÖµÍîÎÚ͝ÛÜҝÛÜØµå›áñì“íÉIU“É³Ø εÍÂʛåÌÍäБÞßÒòËÂÇÚÐçËÓ٬БáÜá ˝ÇÚÉ Ô×ֵصٟËÂÛÜʛØ
Ù¬Ð‘Ø _ É Ù³Ê›ÞÀÎÚÛÜáÜɳè ÒîɟΠÐçÍäÐçËÂɟáñì“í
æ Û²ËÂǵʛֵË]¥ØµÊ¦æ ÛÜØµå®Ð _ Ê›Ö«Ë ËÇÚÉ ÒÊ›Ö«ÍÂٟɿٟÊôèµÉZYÚáÜÉ
ÊÌÍ ËÂǵpow
É Ê _ ɳÙÄËÓÙ³ÊôèµÉZYÚáÜÉ
éS¼ÇÚÐçË
pow.C
pow.o
ËÂǵÉÏٳʛÞÀÎÚÛÜáÜɟ͹صɳɳèµÒÈËÂʏÇÚXÐ U“ÉÌíµËÂǵʛֵå›Ç¾í«ÛñÒòÐ èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜÊ›Ø Ê›Ô ËÂǵÉÏÔ×ÖµØÚÙÄËÂÛÜʛØ
é
pow
ÆÈǵÛÜÒ¹Ô×ֵصٟËÂÛÜÊ›Ø èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛØßÛñÒ _É³ÒîËïÎÚÖ«ËòÛñØ ËÂÊ ÐàҝɟΠÐçÍÂÐçËÂ
É YÚáÜÉÓÐ‘Ò æ¹É³áÜá»é ê˜ØžÊ›Ö«ÍÈ٬БҝÉÌí¥ËÇÚÛñÒ Y áñÉ
íµÒÂгì“íµÛÜÒ U“ɟ͝ì ҝǵÊÌÍË µÛñËÈٳʛدËäБÛÜØµÒ ÖÚҙËòËÂǵÉÏáÜÛÜØµÉ³Ò
Header files.
pow.h
// PRE : e >= 0 || b != 0.0
// POST : return value is b^e
double pow ( double b , int e );
" ÛÜØµÙ³É ËÂǵÛÜÒ ÛñÒ ËÂÇµÉ îÇÚɳБèµÉŸÍ ÓʛԫËÂǵÉÈÔ×ֵصٟËÂÛñʛØ
íÌËÂǵÉRYÚáÜÉ
ÛÜÒ Ù¬ÐçáÜáÜɳè¿Ð
é ê˜Ø ËÂǵÉ
¬Ù БáñáÜÛÜØµå ÍÂʛåÌÍÂÐ‘Þ \ í«æ¹ÉãҝÛÜÞÀÎÚáñìÀÍÂÉÄÎ áÜБٳÉã˝ÇÚpow
ÉãÛÜØµÙ³áÜֵҝÛÜÊ›Ø Ê›pow.h
Ô
_ôì ËÂǵÉãÛ܊
صٳŒÄ©áñÖÚFµÒÛÜʛ£ ؞ʛ’ªŒ Ô
í
pow.C
pow.h
ÍÂɳÒîÖÚá²ËÂÛÜØµåÛñØ ËÂǵÉÏÔ×ʛáÜáÜʦæ ÛÜØµåàεÍÂʛåÌÍäÐ‘Þ é
// Prog : callpow3 .C
// Call a function for computing powers .
# include < iostream >
# include " pow .h"
int main ()
{
std :: cout
std :: cout
std :: cout
std :: cout
std :: cout
<<
<<
<<
<<
<<
pow ( 2.0 , -2) < < "\n " ;
pow ( 1.5 , 2) < < "\n " ;
pow ( 5.0 , 1) < < "\n " ;
pow ( 3.0 , 4) < < "\n " ;
pow ( -2.0 , 9) < < "\n " ;
//
//
//
//
//
outputs
outputs
outputs
outputs
outputs
0.25
2.25
5
81
-512
!
return 0;
}
Program 24: ¢¤£³ÄÁ“Ž
ı ©¯’°’ ¢›¸ Å
[ ÍÂÊ›Þ ËÂǵÛÜҷεÍÂʛåÌÍäÐçÞ í ËÂǵÉàٳʛÞÀÎÚÛÜáÜÉÄÍ·Ù¬ÐçØ ËÂÇµÉ³Ø å›É³ØµÉŸÍäÐÑËÂÉ Ð‘Ø Ê _ É³ÙŸË Ù³ÊôèµÉZYÚáÜÉ
é
callpow3.o
ê˜ØµÒîËÂɬÐçè Ê›Ô ËÂǵÉâޮБÙäǵÛÜØµÉãáÜБصå›Ö Ðçå›ÉãÛÜØµÒîËîÍÂֵٟËÂÛÜʛصÒÈÔ×ÊÌÍ IÉ P¥É³Ù³Ö«ËÂÛÜØµåÀËÂÇµÉ _Êôè«ìžÊ›Ô
íÚËÂǵÛÜÒòÊ _ ɳٟË
Ù³Ê èÚÉ Ù³Ê›Ø ËäÐçÛÜØµÒàÐ
Ô×ÊÌÍàËÂǵÉÀáÜÊôÙ³ÐçËÂÛÜʛØÝֵصèµÉŸÍàæ ÇµÛÜÙäÇÝËÂǵɳÒîÉßÛÜØµÒî˝ÍÂֵٟpow
ËÂÛñʛØÚÒâÐçÍÂÉ ËÊ _ É
Ô×ʛֵصèßÛÜØËÂǵÉòÉIP«É³ÙŸ¢¾Öµ’×Ë©µÐ ±Ÿ_ڌ¬á܊ÉȐ“ε’ ÍÂFµÊ›Œ³åÌ£ ÍÂÐ‘Þ é ê»ËÕÛÜÒÃÛÜÞÀÎ ÊÌ͝ËäÐçØ Ë ËÂÊãÖÚØµèµÉŸÍÂҙËäБصè ËÂÇÚÐçË
٬БصصÊÌË
callpow3.o
_ ÉÓÐ‘Ø ÉIP¥É³Ù³Ö«ËäÐ _ÚáÜÉ ÎµÍÂʛåÌÍäÐçÞ ì“ÉŸË ÛñË
Ù³Ê›Ø ËäÐçÛÜØ®Þ®Ð‘ÙäÇÚÛñØÚÉòá×Бصå›ÖÚБå›É Ù³Ê èµÉ Ô×ÊÌÍ
í _ÚÖµË
main
µ
F
Ì

³
Œ
Ž
𠐓–
Ô×ÊÌͷБصÊÌËÂǵɟͷÔ×ֵصٟËÂÛñÊ›Ø ËÂÇÚÐçËòÛñËÈØµÉ³É³èµÒ³íµØÚБÞßɳáñì
é
pow
صáñì æ·ÇµÉ³Ø Ð‘Ø GÉ P«É³Ù³Ö«ËäÐ _ áñÉ ÎµÍÂʛåÌÍäÐçÞ ñÛ Ò _ÚÖµÛÜáñË ÔÜÍÂʛÞ
í ˝ÇÚÉ Ê _ ™ ɟٟË
The linker.
Ù³Ê èÚÉ YÚáÜÉ
ٳʛÞßɳÒßÛÜØ¯ËÂÊ Î áÜЬì“é
VÛ U“ÉŸØ БáÜá·Ê _ ɳŸÙ ËYÚáÜɳÒßËÂÇÚÐçË çÐ callpow3.o
ÍÉ ÛñØ U“Ê›áVU“ɳè¤íÈËÂǵÉ
’•—»š ³Œ £
pow.o
_ÚÖµÛÜáÜèµÒãËÂǵÉßÉIP¥É³Ù³Ö«ËäÐ _ÚáÜÉÀεÍÂʛåÌÍÂÐ‘Þ _ ì å›áÜÖµÛÜØµåžËÂʛå›ÉŸËÇÚÉÄÍ Þ®Ð‘ÙäÇÚÛñØÚɏá×Бصå›ÖÚБå›É ٟÊôèµÉßÔ×ÊÌÍ Ô×ÖµØÚÙÄËÂÛÜʛØ
٬БáñáÜÒ»^ ÛÜØ
` æ Ûñ˝ÇÀޮБÙäǵÛÜØµÉòá×ÐçØÚå›ÖÚБå›É¹Ù³Ê èµÉ Ô×ÊÌÍ ËÂǵɷٟÊÌ͝ÍÂɳҙΠʛصèÚÛñØÚåãÔ×ÖµØÚÙÄËÂÛÜʛØL_ Ê èÚÛñɳÒ
callpow3.o
˜^ ÛÜØ
Ä` é Æ ɟٴǵصÛÜÙ¬ÐçáÜáñì“í ËÂǵÛÜÒ¿ÛÜÒ èÚʛصÉ_ôì ÎÚ֫˝ËÂÛÜØµå½Ð‘áÜáïÊ _ ™ÉŸÙŸËY áñɳҿ˝ʛå›ÉŸËÂǵɟ͏ÛÜØ ËÂʽРҝÛÜØµå›áÜÉ
ÉI¥P ɳٳpow.o
Ö«ËäÐ Ú_ áÜÉ ÚY áÜɑí Бصè ô_ ì Y áñáÜÛÜØµå ÎÚá×ÐçٳɳǵʛáÜèµÉŸÍÂÒãÔ×ÊÌÍàÔ×ÖµØÚÙÄËÂÛÜÊ›Ø _ Ê èµì½áÜÊ Ù¬ÐçËÂÛÜʛصÒÓæ Ûñ˝ÇÝËÂǵÉÀÐ‘ÙŸËÖ Ðçá
áÜÊ Ù¬ÐçËÂÛÜʛصÒïÛÜØ ËÂǵÉãÉG«P ɳٳ֫ËäÐ _ áñÉÌé
" ɟΠÐçÍäÐç˝ɿٟʛÞÀÎ Ûñá×ÐçËÂÛÜÊ›Ø ÛÜғ
U ɟ͝ì ֵҝɳÔ×Öµá˜éãê»ËÏБáÜáñÊÑæ·Ò·ËÂÊ®ÙäÇ ÐçØÚå›ÉàËÂǵÉàèµÉ Ú
Y صÛñËÂÛÜÊ›Ø Ê›ÔÃÐßÔ×ÖµØÚÙÄËÂÛÜʛØ
æ Û²ËÂÇµÊ›ÖµË ÇÚÐKôU ÛÜØµåÝËÂÊÝÍÂɳٟʛÞÀÎ ÛñáÜÉóÐÝҝÛñØÚå›áñɞεÍÂʛåÌÍäÐ‘Þ ËÇ ÐÑËß٬БáÜáñÒÀÛñË¬é ·ÒßáÜʛصå БÒÀËÂÇµÉ Ô×ÖµØÚÙÄËÂÛÜʛØ
èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛؽÍÂɳޮБÛÜØµÒãÖÚØµÙäÇÚБصå›É³è¤í ÛñËëÛñÒëʛصáñì ËÂǵÉÀáñÛÜØ “] ɟÍâËÂÇÚÐçËëÇ ÐçÒâËÂÊóæ¹ÊÌÍ ] ÛñØÝËÂǵÉßɳصè ÃБصè
ËÂǵÉâáñÛÜØ “] ÉŸÍ ÛÜÒòֵҝÖÚБáÜáñì“U ɟ͝ìžÔªÐ‘Òîˬé¹ê»Ë Ô×ʛáÜáÜʦæ ÒïËÂÇÚÐçË ÒîɟΠÐçÍäÐçËÂÉãٳʛÞÀÎÚÛÜá×Ðç˝ÛÜÊ›Ø Ð‘áÜҝÊÀޮР“] ɳÒòÒîɳصҝÉàÔ×ÊÌÍ
Ô×ֵصٟËÂÛÜʛصҹËÂÇÚÐçËòÐçÍÂÉÏÒîÎ É³Ù³Û Y ÙÓËÂʏʛØÚÉÓεÍÂʛåÌÍäÐ‘Þ Ê›Øµáñì“é
" ɟΠÐçÍäÐçËÉ Ù³Ê›ÞÀÎÚÛÜáÜÐçËÂÛÜÊ›Ø ÍÉ Ú
Q ɳٟËÂÒ ËÂÇµÉ îÙ³ÖµÒîËÂʛÞßÉŸÍ ôU ÛÜɟæ ʛԹËÂÇµÉ Ù¬ÐçáÜáÜÛÜØµåžÎµÍÂʛåÌÍäÐçÞ ßÐ‘Ò áÜʛصå
БÒãÐßÔ×ÖÚØµÙŸËÛÜÊ›Ø èµÊôɟÒÓæ·ÇÚÐçËÏÛñËÂÒ ÎµÍÂÉ ·Ð‘صè½Î ʛҙËÂٳʛصèµÛñËÂÛÜÊ›Ø ÎµÍÂʛÞßÛÜҝÉâÛÜØ½ËÂǵɿǵɬБèµÉŸÍ
ÚY áÜÉÌí¤ÛñËÓÛÜÒÏØµÊÌË
ÛÜÞÀÎ ÊÌÍîËäÐ‘Ø ËÏËÂÊ ¥] صʦæ
Û²ËàèµÊôɳÒëËÂǵÛÜÒŸé Ø ËÂǵÉßÊÌËÂÇµÉŸÍ ÇÚБصè¾í ÛñԹ˝ÇÚÉßÔ×ֵصٟËÂÛñÊ›Ø èµÉ ÚY صÛñËÂÛÜÊ›Ø ÛÜÒ
ǵÛÜèµèµÉ³ØëÔÜÍÂÊ›Þ ËÂÇµÉ ¬Ù БáÜáñÛ܊Øµ›å¹¸ εÍÂʛåÌÍÂÐ‘Þ íçٟáÜɬБØâεÍÂÉ ¤Ð‘صèëΠʛÒî˝ٳʛصèÚÛ²ËÂÛÜʛصҤÐçÍÂÉ Ê›ÔôٟÍÂÛñËÂÛñ٬Бá“ÛÜÞÀÎ ÊÌ͝ËÂБصٳÉÌí
ҝÛÜØµÙ³ÉÓËÂǵɟì ޮгì _ Ó
É ËÂǵÉâʛصáñì®ÛÜØµÔ×ÊÌÍÂÞ®Ðç˝ÛÜʛخÐXUÌБÛñá×Ð _ÚáÜÉÓÐ _ ʛ֫ËÈËÂǵÉãÔ×ֵصٟËÂÛñÊ›Ø ÒR_ ɳÇÚÐXU¥ÛÜÊÌͬé
ê˜Ô ì“Ê›Ö ÇÚÐXU“ÉàÙ¬ÐçÍÂɟÔ×ÖÚáñáñìóå›Ê›ØµÉâËÂÇ«ÍÂʛֵå›Ç æ ÇÚÐçËòæ¹ÉàÇÚÐKU“ÉàèµÊ›ØµÉëҝʮԪÐçͳí
БÔÜËÂɟͷÇÚKÐ UôÛÜØµå å›É³Ø pow.C
ɟÍäÐÑËÂɳè
í«ÒÛÜØµÙ³ÉÏá×ÐçËÂÉÄͬíôËÂǵÉÓÔ×ÖµØÚÙÄËÂÛÜÊ›Ø èÚIÉ Y صÛñ˝ÛÜʛخÛÜÒ¹ØÚÊÌ˹صɳɟèÚɟè Ð‘Ø ìôÞßÊÌÍÂÉÌ
é S¼ÇµÉ³Øžì“Ê›Ö _ Ö«ì
pow.o
ٳʛÞßÞßɟ͝ٳÛ×Бá ҝʛÔÜË æÈÐç͝ÉÌí ì“Ê›Ö ÐçÍÂÉãʛÔÜËÂÉ³Ø ÔªÐ‘Ù³ÉŸè æ·ÛñËÂǞËÂǵÉâÐ _ÚҝɳصٳÉàÊ›Ô ÒÊ›Ö«ÍÂٳɟٳÊôèµÉ YÚáÜɳҟí ҝÛñØÚٟÉâËÂǵÉ
U“ɳصèµÊÌ͹èµÊôɳÒïØµÊÌË æÈБدËïÙ³ÖµÒîËÂʛÞßÉÄÍÂҋËÂÊàÞßÊ èÚÛñÔÜìËÂÇµÉ ÒîÊ›ÖµÍÙ³É³Ù³Ê èÚÉÓÛÜØµÒî˝ɬБèßÊ›Ô _ÚÖµìôÛÜØµåàÖ«Î èÚÐçËÂɳҳí ÊÌÍ
ËÂʏèÚÛñҝٳÊU“ɟͷǵʦæ ޏֵÙäǞÞßʛصɟìßËÂǵɟì ÇÚXÐ U“ÉÏΠБÛÜè Ô×ÊÌÍ áÜʛֵÒîì®ÒîʛÔÜË æÈÐÑÍÂÉâèµÉ³ÒÛñ囨¾é
ê˜Ø Ðç٬БèµÉ³ÞßÛÜ٠ҝʛÔÜË æÈÐçÍÂÉÌíòXÐ UÌБÛñá×Ð _ÚÛÜáÜÛñË ì ʛÔÓҝʛ֫ÍÂٳɟٳÊôèµÉ å›ÊôɳÒÀæ·ÛñËÂÇµÊ›Ö«Ë ÒÐ¬ìôÛÜØµå«é ê˜Ø ÊÌÍÂèµÉŸÍßËÂÊ
É U‘БáÜÖÚÐçËÂÉïÊÌÍ ÍÉŸÎµÍÂÊôèµÖµÙ³É ËÂÇµÉ¹Ù³Ê›Ø ËîÍÂVÛ _ÚÖ«ËÂÛÜʛØàʛԵҝֵÙäÇ ÒÊ›ÔÜË æÈÐçÍÂÉïËÂÊ ËÂÇµÉ ÍÂɟÒîΠɳٟ˝VÛ U“ÉÈÐçÍÂɬРʛԫÍÂɳÒîɬÐçÍÂÙäǤí
ÛñË·ÛÜÒ ØµÉ³Ù³É³ÒîÒÂÐç͝ì ËÂÊßÇÚXÐ U“Éàҝʛ֫ÍÂٳɟٳÊôèµÉÌé U“ɳؽÛÜØ ٳʛÞßÞßɟÍÂٟÛ×Бá¤Ù³Ê›Ø ˝IÉ P¥ËÂҟí
ÒîʛÔÜË æÈÐÑÍÂÉ
³

¢
³
Œ
¼
š
‘
Ž
›

”
³
£
Ÿ
±
Œ
ÛÜÒãБè UÌÐçØÚٟÛÜØµå«éÆ¹ÇµÉÞßʛҙËÏεÍÂʛÞßÛñØÚÉŸØ ËÓҝʛÔÜË æÈÐçÍÂÉ ËÂÇÚÐçËÏٳʛÞßɳÒÓæ Û²ËÂÇ ÐçáÜá ҝʛ֫ÍÂÙ³É³Ù³Ê èµÉ YÚáÜɳÒÓÛÜÒÓËÂǵÉ
ÊÌΠɟÍÂÐçËÂÛÜØµåœÒ™ì¥ÒîËÂɟÞ
é Î É³Ø ÒÊ›Ö«ÍÂٟÉÝҝʛÔÜË æÈÐçÍÂÉÝÙ³Ð‘Ø U“ɟ͝ì É Ù³ÛñÉ³Ø ËÂá²ì _ ÉÝБèÚÐçεËÂɳè Бصè
×°š ” Availability of sourcecode.
ì“Ê›ÖóÍÂɬÐçáÜÛ³ ÉÓËÂÇÚÐçËÈæ¹ÉâٳʛֵáÜèóÛñ؞εÍÂÛÜØµÙ³ÛñÎÚáÜÉÓèµÉ³áÜɟ˝ÉãËÂǵÉâÒîÊ›ÖµÍÙ³É³Ù³Ê èÚÉ YÚáÜÉ
0
& ,#$
Q$&*H7
"K(7P
'(
7
% 9 92 7N"L *
( #*
! R*
R6> .*6
$&B
7 /
J
! ÛÜÞÀεÍÂÊU“ɳèžÛñÔ Þ®Ð‘Ø ì®Î ŸÉ ÊÌÎ áñÉãٳʛد˝ÍÂÛV_ÚÖ«ËÂÉÌé ‹
ֵ˷ҝֵÙäÇ½Ð¿Ù³Ê›Ø ËîÍÂÛV_ÚÖ«ËÂÛÜʛ؞ÛñÒÈΠʛÒîҝÛV_ÚáÜÉÏʛØÚá²ì æ·ÇµÉ³ØóËÂǵÉ
ҝʛ֫ÍÂٳɟٳÊôèµÉâÛñÒ·ÐXU‘БÛÜá×Ð _ÚÜá ɑé
ƹǵÉßÔ×ÖÚØµÙŸËÛÜʛØ
æ·ÛÜáÜáÃØµÊÌËb_ÉÀËÂÇµÉ ÊÌØÚá²ìÝÞ®ÐçËÂǵɳޮÐÑËÂÛÜ٬Бá Ô×ֵصٟËÂÛÜÊ›Ø ËÂÇÚÐçËàæ¹ÉßæÈБدË
pow
ËÂÊ ÖµÒÉßÛÜØ ʛ֫ÍàεÍÂʛåÌÍäБÞßÒ³éó
Æ Ê Þ®Ð ]“É ËÂǵɮБèµèµÛñËÂÛñÊ›Ø Ê›ÔÈØµÉŸæ Ô×ÖÚØµÙŸËÛÜʛصÒàɬБÒîì“í æ¹ÉßÙ¬ÐçØ ÎÚÖ«ËàËÂǵÉ
èµÉ YÚØµÛñËÂÛÜÊ›Ø Ê›Ô
^ºÐ‘صèóҝÛñÞßÛÜá×Ðç͹Ô×ֵصٟËÂÛÜʛصҹËÂÇÚÐçËÈæ¹Éâޮгì Бèµè á×ÐçËÂÉÄÍG` ÛÜØ ËÂÊ ÐÒÛñØÚå›áñÉÏÒîÊ›ÖµÍÙ³É³Ù³Ê èÚÉ
pow
ÚY áÜÉ
í ҝЬì“í Бصè ËÂǵÉÈÙ³ÊÌ͝ÍÂɟÒîΠʛصèµÛÜØµåâèµÉ³Ù³á×ÐÑÍäÐçËÂÛÜÊ›ØµÒ ÛÜØ¯ËÂÊëÐÓҝÛÜØµå›áÜɹǵɬБèµÉŸÍYÚáÜÉ
é ÆÈǵÉ
Ê _ ™ÉŸmath.C
ٟËëÙ³Ê èµÉ YÚáÜÉ
ËÂÇµÉ³Ø Ù³Ê›Ø ËÂБÛÜØµÒãÞ®ÐçٴǵÛÜØµÉ¿á×Бصå›ÖÚБå›É¿Ù³ÊôèµÉ Ô×ÊÌÍàБáÜá ʛ֫ÍëÞ®math.h
ÐçËÂǵɳޮÐÑËÂÛÜ٬Бá
math.o
Ô×ֵصٟËÂÛÜʛصҳé
áñËÂǵʛֵå›ÇàØµÊÌË Òî˝ÍÂÛñٟËÂáñìâØÚɟٳɳҝÒÂÐÑ͝ì“í“ÛñË ÛÜÒ å›Ê ÊôèàεÍäБٟËÂÛñٳɋËÂÊÓÛÜØµÙ³áÜÖµèµÉ
ÛÜØàËÂÇµÉ _ ɳå›ÛñØÚصÛÜØµå
ʛÔ
éÓÆÈǵÛÜÒ ÉŸØÚÒîֵ͝ɳÒÓٳʛصҝÛÜÒîËÂɟØÚÙÄì _ ÉŸË æ¹É³É³Ø Ô×ֵصٟËÂÛÜÊ›Ø èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛmath.h
صҷБصè½Ô×ֵصٟËÂÛÜÊ›Ø èµÉ YÚØµÛ ËÂÛÜʛmath.C
صÒïÐçØÚè®ÎÚÖ«ËÂÒ ËÂÇµÉ Ù³ÊôèµÉ ÛÜØ
ÛÜØ¯ËÂÊëËÂÇµÉ ÒÙ³ÊÌÎ É Ê›Ô¡Ð‘áÜá Ô×ÖµØÚÙÄËÂÛÜÊ›ØµÒ èµÉ³Ù³á×ÐÑÍÂɳè ÛÜØ
í¥ÒÉ³É
math.C
" ɳٟ˝ÛÜÊ›Ø é é é ê˜Ø ÐçáÜá Ô×ֵصٟËÂÛñʛL
Ø _ ÊôèµÛÜɳÒÃÛÜØ
í¯æ¹É ٬БØßËÂǵɟÍÂɟÔ×ÊÌÍÂÉ Ù¬Ð‘áñá ËÂǵɷÊÌ˝ÇÚÉÄmath.h
ÍïÔ×ÖµØÚÙÄËÂÛÜʛصҳí
math.C
æ Û²ËÂǵʛֵ˹ÇÚXÐ U¥ÛñØÚå ËÂÊ¿ËÂǵÛÜØ ] Ð _ ʛ֫˹æ ǵɟËÂǵɟÍÈ
ËÂǵɳҝÉãÔ×ÖÚØµÙŸËÛÜʛصÒÈÇÚXÐ U“ÉëÐçáñÍÂɬБè«ì _ ÉŸÉ³Ø èµÉ³Ù³á×Ðç͝ɳè¤é
ê˜Ø å›É³ØµÉŸÍäБá˜í‘ÒÉ U“ÉŸÍäÐçá¥Ê _ ɳÙÄË Ù³Ê èÚÉ Y áñÉ³Ò Þ®Ð³
ì _ É ØµÉ³É³èµÉ³è ËÂÊ å›É³ØµÉŸÍÂÐçËÂÉïÐ‘Ø IÉ P¥É³Ù³Ö«ËäÐ _ÚáÜÉÃεÍÂʛåÌÍäÐ‘Þ í
Бصè Û²Ë æ¹Ê›ÖÚáñè _ ɿٳֵ
Þ _ ɟÍÂҝʛÞßÉãËÂÊ ËÉ³áÜá ËÂǵɿáÜÛÜØ ]“ÉŸÍÏÐ _ ʛ֫ËÏБáñá ʛÔÕËÂÇµÉ³Þ éâê˜ØÚҙËÂɬБè¤í¤Ê _ ɳÙÄËãٟÊôèµÉ
YÚáÜɳÒÃËÂÇÚÐçˋáñʛå›ÛÜ٬БáÜá²Z
ì _ ɳáÜʛصåÏËÂʛå›ÉŸËÂǵɟ͋٬БL
Ø _ É
ÛÜØ ˝ÊëÐ
é ØµáñìËÇÚÉòØÚБÞßÉòʛԍ˝ÇÚÛñÒ
F ÇÚXÐ U“ÉòБáÜᥒ•—™áÜ ³Û _Ú£Ÿ©“ÍÂÐçK£ J͝ìëÔ×ֵصٟËÂÛñʛØÚÒ XÐ U‘БÛÜá×Ð _ áñÉ Ô×ÊÌÍ
áÜVÛ _µÍäÐÑ͝ìëÞ¿ÖµÒîË ËÂǵɳ
Ø _ ɹå›VÛ U“ɳ؏˝ÊÓ˝ÇÚɹáÜÛñaØ ]“ÉÄÍ ÛÜØ©“ÊÌ£ŸÍ±¬èڊ¥Éė ÍÃD¥ËGŒ ÊÏ
ËÂǵɷGÉ P«É³Ù³Ö«ËäÐ _ áñÉòεÍÂʛåÌÍäÐ‘Þ é ê˜Øßʛֵ͋٬Бҝɑíôæ¹É·ÒÊàÔªÐÑÍ ÇÚXÐ U“É ʛصáñì ʛصÉòÊ _ É³ÙŸË YÚáÜÉ
͝ɳҝֵáñËÂÛÜØµå
math.o
ÔÜÍÂʛÞ
í _ ֫˹æ¹ÉâٳБØóÒîËÂÛñáÜá _ÚÖÚÛñáÜèžÐ áÜVÛ _µÍäÐÑ͝L
ì YÚáÜÉ
íµÒÂгì“íµÔÜÍÂÊ›Þ Ûñˬé
[ ÛÜmath.C
å›Ö«ÍÂÉ ÒÙäǵɳޮÐçËÂÛñ٬БáÜáñìÝҝǵÊÑæ·Ò ǵÊÑæ Ê _ ɳٟËÀٟÊôlibmath.a
èµÉ YÚáÜɟҳíïнáñVÛ _µÍäÐç͝ì Бصè YÚØÚБáÜá²ì Ð‘Ø IÉ P¥É Ù³Ö«ËäÐ _ÚáÜÉ ÎµÍÂʛåÌÍäÐçÞðÐÑÍÂÉâÊ _µËäБÛñØÚɟè ÔÜÍÂʛÞðÐ ØôÖµb
Þ _ÉŸÍÈÊ›Ô ÒÊ›Ö«ÍÂٳɳٟÊôèµÉ YÚáÜɟҳé
Libraries.
ê»Ë ÛñÒàÙ³áÜɬÐçÍâËÂÇÚÐçËàæ¹ÉßèµÊ صÊÌËàæÈБدËëËÂÊ ]“ɳɟΜǵɬБèµÉŸÍYÚáÜɳÒàБصè
áÜÛV_µÍäÐÑÍÂÛÜɳÒàʛÔòå›É³ØµÉŸÍäБá¹ÛÜØ¯ËÂɟÍÂÉ³Ò™Ë ÛÜØ ʛ֫͏æ¹ÊÌÍ ]ôÛÜØµå½èµÛñ͝ɳٟËÂÊÌ͝ì“íÃҝÛÜØµÙ³É®æ¹É ^ºÐ‘صèœÊÌËÂÇµÉŸÍÒ ` ޮгì ÇÚÐXU“É
ޮБدìßæ¹ÊÌÍ ]¥ÛÜØµå¿èµÛñÍÂɳٟ˝ÊÌÍÂÛÜɳҳ
é ·É³Ð‘èµÉŸÍYÚáÜɟÒòÐçØÚèžáÜÛV_µÍäÐçÍÂÛñɳÒïҝǵʛֵáÜè _ ÉâÐçËÈҝʛÞßÉÓٳɳد˝ÍäБá¤ÎÚá×БٳÉÌé
SÝÉÓÙ¬Ð‘Ø Þ®Ð ]“É ʛ֫ÍïεÍÂʛåÌÍäÐçÞßÒ ÛÜØµèµÉŸÎ ɳصèµÉ³Ø Ë ÔÜÍÂÊ›Þ ËÂÇµÉ áÜÊôÙ³ÐçËÂÛÜʛØßʛԾǵɬБèµÉŸÍRYÚáÜÉ³Ò _ ìÀæ·ÍÂÛ²ËÂÛÜØµå
Centralization and namespaces
#include
_ÚÖ«Ë ÛÜØàËÂǵÛÜÒ Ù¬ÐçҝÉÌí›æ¹ÉïÇÚÐKU“É ˝ÊÓ˝ɳáÜá ˝ÇÚÉïٟʛÞÀÎ ÛñáÜÉŸÍ ^»æ ǵɳØàæ¹ÉïÒîËäÐÑÍË ÛñËG` æ ǵɟÍÂÉ ËÂÊ ÒîɬÐçÍÂÙäÇ Ô×ÊÌÍ YÚáÜÉŸÒ ËÂÊ
_ ÉÕÛÜØµÙ³áÜÖµèµÉ³è¤é ƹÇÚÛñÒ ÛÜÒ¾ÉIµ
P ÐçٟËÂáñìÏËÂǵɋæÈгìãËÇ ÐÑË ÇµÉ¬Ð‘èµÉŸÍÒ áÜÛV]“É
ÔÜÍÂÊ›Þ ËÂǵÉÕÒîËäБصèÚÐçÍÂèàáÜÛ _ÚÍÂÐç͝ì
iostream
ÐçÍÂÉ ÛñØÚٟáÜÖµèÚÉŸè ¯ËÂǵɳÛñÍïáñÊôÙ¬Ðç˝ÛÜÊ›ØµÒ ÐçÍÂÉô] صÊÑæ·Ø®ËÊ ˝ÇÚɷٳʛÞÀÎÚÛÜáÜɟͬí¯ÒÊàæ¹É èµÊ›Ø ËïÇÚÐXU“É ËÂÊàεÍÂÊ UôÛÜèµÉ Бدì
ÛÜØµÔ×ÊÌÍÂÞ®Ðç˝ÛÜʛخÇÚÉÄÍÂÉÌé " ÛÜÞßÛÜáÜÐçÍÂáñì“í“æ¹ÉâÙ¬ÐçØóËÂɳáÜá¤ËÂǵÉãáñÛÜØ “] ɟÍòæ·ÇµÉŸÍÂÉã˝ÇÚÉãáÜÛV_µÍäÐç͝ÛÜɳÒïæ¹ÉâØµÉ³É³è Ðç͝ÉãËÂÊb_ É
Ô×ʛֵصè¾é å“БÛñؾíôÔ×ÊÌÍ·ËÂǵÉ
ÌU Ðç͝ÛÜʛֵÒÈáñÛVµ_ ÍäÐçÍÂÛÜɟÒÈʛԾËÂǵÉãҙËäБصèÚÐçÍÂèóáÜÛ Ú_ ÍÂÐç͝ì“í ˝ÇÚÉÏٳʛÞÀÎÚÛÜáÜÉÄÍR¥] صÊÑæ·ÒÈ˝ÇÚÛñÒ³é
S É æÈÐ‘Ø ËÓËÂÊ®ÍÂɳޮÐÑÍ ó
Ý
] ËÂÇÚÐçË
ÛñÒÏØµÊÌËÏØµÉ³Ù³É³ÒîÒÂÐçÍÂÛÜá²ì ËÂǵɏØÚБÞßÉëʛԋÐÀΠǯì¥ÒÛñ٬Бá ÚY áÜÉ ËÂǵÉ
Þ®ÐçεÎÚÛÜØµåàʛÔ
Â
Ë
Ê
‘
Ð
Ÿ
Ù
Â
Ë
Ú
Ö
‘
Ð
á
Y
Ú
áÜɳҹÛÜÒÈÛÜÞÀÎÚáÜɳÞßÉŸØ ËäÐç˝ÛÜÊ›Ø èµÉ ÚY صɳè¤é
[ ÛÜØÚБáÜá²ì“í¯Û²Ë ÛÜÒÕå›ÊôÊôèÎÚÍÂБٟËÂÛÜٟÉòËÂÊëÎÚÖ«ËïБáñá Ô×ֵصٟËÂÛÜʛصÒÕʛԤÐãáÜÛVµ
_ ÍäÐÑ͝ì¿ÛÜØ ËÂÊëÐãØÚБÞßɳÒîΠБٟÉÌí ÛñØßÊÌÍÂèµÉŸÍ
ËÂÊ®ÐX“U ʛÛÜè Ù³á×ÐçÒÇµÉ³Ò æ Ûñ˝Çóֵҝɟ͘èÚɟٳá×ÐçÍÂÉŸè½ØÚБÞßɳҟíÒÉ³É " ɟٟËÂÛÜÊ›Ø \ é é é ɟËÓÖµÒ ÖµÒÉëËÂǵÉëØÚБÞßɳÒîΠБٟÉ
ǵɟÍÂÉÌé
ifm
·ÉŸÍÂÉ Ðç͝ɮ˝ÇÚɮǵɬБèµÉŸÍÐ‘صè ÛÜÞÀÎÚáÜɳÞßɳدËäÐçËÂÛÜÊ›Ø YÚáÜɳÒ
‘Ð صè
ËÂÇÚÐçËà͝ɳҝֵáñË ÜÔ ÍÂʛÞ
math.C
ËÂǵɳҝÉãå›ÖµÛÜèµÉ³áÜÛÜØµÉ³Ò¹Ô×ÊÌÍ Ê›Ö«ÍòÛÜØ ˝ɳصèÚɟèóáÜÛV_µÍäÐçÍîì®Ê›Ô Þ®ÐçËÂǵɳޮÐç˝ÛÜ٬БáÚÔ×ÖµØÚÙÄËÂÛÜÊ›ØµÒ ^°ËÂÇÚÐçËÈٳ֫͝ÍÂɳدËÂáñì ³Ù Ê›Ø
ËäБÛñØÚÒ
ʛصáñì `Äé
pow
math.h
! ÛñØÚٟáÜֵҝÛÜʛØ
ÛÜØµÙ³áÜֵҝÛÜʛØ
math.C
math.h
callpow4.C
ٳʛÞÀÎÚÛÜáÜÐçËÂÛÜʛØ
ٳʛÞÀÎÚÛÜá×ÐçËÂÛñʛØ
math.o
callpow4.o
ÐçÍÂÙäǵÛVUôÛÜØµå
áÜÛñØa]ôÛÜØµå
áÜÛÜØ ]¥ÛñØÚå
libmath.a
Figure 17:
’ªŒ¬Ž Ȓ•—™ ¬£Ÿ©“£³—Žß©“šF݌µŒŸ±³”–î©« ¦’§Œë¢¤£ŸŸÁ›£Ÿ©“¨žŽçÅ
namespace ifm {
// PRE : e >= 0 || b != 0.0
// POST : return value is b ^e
double pow ( double b , int e );
}
” —˜’ F“—»šÁ½¥ ŒÄ±¬–â±Ä FµŒ
// math .h
// A small library of mathematical functions.
callpow4
Program 25: ¢¤£ŸŸÁ“Ž ¨ ©¯–ºŠÅ׊
// math .C
// A small library of mathematical functions.
# include < cassert >
# include < IFM / math .h >
namespace ifm {
double pow ( double b , int e)
{
!
assert ( e >= 0 || b != 0.0);
// PRE : e >= 0 || b != 0.0
// POST : return value is b^ e
double result = 1.0;
if ( e < 0) {
// b^e = (1/ b )^( - e )
b = 1.0/ b;
e = - e;
}
for ( int i =0; i < e ; ++ i ) result *= b ;
return result ;
}
}
Program 26: ¢¤£³ŸÁ“Ž ¨ ©¯–ºŠÅ
[ ÛÜØÚБáÜá²ì“í¯ËÂǵɷεÍÂʛåÌÍÂБÞ
٬БáÜáÜÒÕʛ֫ÍïáÜÛV_µÍäÐçÍîì Ô×ֵصٟËÂÛÜʛØ
éÃê»ËïÛÜØµÙ³áñÖÚèµÉ³ÒÃËÂǵÉ
callpow4.C
ifm::pow
ǵɬБèµÉŸÍÚY áÜÉ
ÔÜÍÂÊ›Þ Ð ÙŸÉ³Ø ËÍÂБá¡èµÛñ͝ɳٟËÂÊÌ͝ì
é
math.h
IFM
// Prog : callpow4 .C
// Call library function for computing powers .
# include < iostream >
# include < IFM / math .h >
int main ()
{
std :: cout
std :: cout
std :: cout
std :: cout
std :: cout
<<
<<
<<
<<
<<
ifm :: pow ( 2.0 , -2) < < "\ n" ;
ifm :: pow ( 1.5 , 2) < < "\ n" ;
ifm :: pow ( 5.0 , 1) < < "\ n" ;
ifm :: pow ( 3.0 , 4) < < "\ n" ;
ifm :: pow ( -2.0 , 9) < < "\ n" ;
//
//
//
//
//
outputs
outputs
outputs
outputs
outputs
0.25
2.25
5
81
-512
return 0;
}
Program 27: ¢¤£³ÄÁ“Ž
±Ä©¯’°’ ¢›¸
Å
3.1.9 Using library functions
ʛ֜٬ÐçØ ÛÜޮБå›ÛÜØµÉ ËÇ ÐÑˏæ¹É®æ¹ÉŸÍÂÉ ØµÊÌˏËÂǵÉYµÍÂÒîË¿ËÂʽÎÚÖ«ËÀÐ Ô×ֵصٟËÂÛÜÊ›Ø áÜÛV]“É
ÛÜØ ËÊ Ð áÜÛV_µÍäÐçÍîì“é
pow
ê˜ØµèµÉ³É³è¤íïËÂǵÉóÒîËäБصèÚÐçÍÂè áñÛV_µÍäÐç͝ì Ù³Ê›Ø ËÂБÛÜØµÒÀÐ Ô×ֵصٟËÂÛñʛØ
ËÂÇÚÐçË ÛÜÒÀÉ U“ÉŸØ ÞßÊÌÍÂÉ å›É³ØµÉŸÍäБá
std::pow
ËÂÇÚÐ‘Ø Ê›Ö«ÍÂÒ œÛñË Ù¬Ð‘Ø ÙŸÊ›ÞÀÎ Ö«ËÂÉ e Ô×ÊÌÍ
ÉGP¥Î ʛصɳدËÂÒ é ٳٳÊÌ͝èÚÛñØÚå›á²ì“íòËÂǵÉÝÐÑÍÂå›ÖµÞßÉ³Ø ËÂҮʛÔ
Бصè Û²ËÂҋÍÂÉŸËÖµÍØ U‘БáÜÖµÉ bÐçÍÉ Ê›Ô¤£³Ë Œ´ì ©¯Î ’ É
éÃê˜Ø eÊÌÍÂèµÉŸÍ ËÂÊ ÖµÒÉ ËÂǵÛÜÒ Ô×ֵصٟËÂÛñÊ›Ø¾í¯æ¹É ÇÚÐKU“É
std::pow
double
!
ËÂÊ ÛÜØµÙ³áÜÖµèµÉÀËÂǵɮÇÚɳБèµÉŸÍ
é Æ¹ÇµÛÜÒ ÇÚɳБèµÉŸÍ¿Ù³Ê›Ø ËäÐçÛÜØµÒàèÚɟٳá×ÐçÍäÐÑËÂÛÜʛصÒëÔ×ÊÌÍ Ð U‘ÐçÍÂÛñÉŸË ì ʛÔòÊÌËÂǵɟÍ
cmath
ØôÖµÞßɟ͝ÛÜ٬Бá Ô×ֵصٟËÂÛÜʛصҳé
·ÒÛÜØµåàÔ×ֵصٟËÂÛÜʛصÒïÔÜÍÂÊ›Þ ËÇÚÉ Ò™ËäБصèÚÐçÍÂè®áÜÛV_µÍäÐçÍîìÀÙ¬Ð‘Ø ÇµÉ³áñÎ ÖµÒ ËÂÊ å›ÉŸË¹ÒÇµÊÌ͝ËÂÉÄͬí _ ɟËîËÂɟͬí¥ÊÌ͹ÞßÊÌ͝É
É Ù³ÛÜÉ³Ø¯Ë ÙŸÊôèµÉÌí¹æ ÛñËÂǵʛ֫ËßÇÚÐXU¥ÛÜØµåÝËÂÊ æòÍÂÛñËÂÉ ÐÝÒîÛÜØµå›áÜÉ ØµÉŸæ áÜÛÜØµÉ _ ì ʛ֫ÍÂҝɳáVU“ÉŸÒ³é [ ÊÌÍ®ÉIP«Ð‘ÞÀÎÚáÜÉÌí
ٳʛÞÀÎÚÖ«ËÂÛÜØµå Ù¬ÐçØžÒîΠɟɳèóÖ«Îóʛ֫͹εÍÂÛÜޮБáÜÛ²Ë ì ËÂɟÒîËÈÛÜØ ÍÂʛåÌÍäÐ‘Þ é Ê›Ö ÞßÛñå›Ç ËïÇÚÐXU“É
Ž
¡
”
“
©
³
£
¿
Œ
³
£
Ì

“

º
–
Ž
ÍÂɬÐçáÜÛ ³É³è ËÂǵÛÜҹޏֵÙäǞɳÐçÍÂáÜÛÜÉÄͬí _ÚÖ«Ëòæ·ÇÚÉŸØ æ¹ÉãÐçÍÂÉÏáÜÊôÊ ]ôÛÜØµåàÔ×ÊÌͷҝʛÞßÉ ÎµÍÂÊÌÎ ÉÄÍ·èµVÛ UôÛÜҝÊÌÍ¹Ê›Ô Ð ØÚÐçËÂÖ«ÍäБá
ØôÖµ
Þ _ ɟÍ
í Û²ËÓÛÜÒ ÒÖ Ù³ÛñÉ³Ø ËÓËÂʮҝɬÐÑÍÂÙäÇ ÛÜØ ËÂǵÉàÍäБصå›É
éâê˜ØÚèµÉ³ÉŸè¾í ÛñÔ Ù¬Ð‘Ø _ É
æ·ÍÛñ˝ËÂÉ³Ø Ð‘nÒëÐßε2ÍÂÊôèµÖµÙŸË
í¡ËÂǵɳØÝËÂǵɿҝޮБáÜáñɟÍÓÊ›Ô {2,
Бص.è . . , Þ¿nÖµÒî}
Ë _ É _Ê›ÖÚØµèµÉ³è n _ ì n
ҝÛÜØµÙ³ÉÓËÂǵÉÏèÚÛ U¥ÛÜҝÊÌ͝ÒòÐÑÍÂÉân
ÛÜØ¯ËÂ=ɳåÌÍädd
Ðçá˜íôæ¹ÉÏÉ U“É³Ø å›ÉŸË·
Ð _Ê›ÖÚØµè dÊ›Ô d í ÍÂʛֵØÚèµÉ³èžèÚÊ¦æ Ø¤é
n
n
ÆÈǵɹεÍÂÛÜޮБáÜÛ²Ë ìÏËÂɳҙˋٳʛֵáÜè¿ËÂǵɟÍÂɳÔ×ÊÌ͝
É _ ɹæ·ÍÂ۲˝ËÂɳؿÞßÊÌÍÂÉ¹É ÙŸÛÜÉ³Ø Ëáñì¿Ð‘ÒÃÛÜØ ÍÂʛåÌÍäÐ‘Þ \ í“ֵҝÛÜØµå
ËÂÇµÉ Ô×ֵصٟËÂÛñʛØ
ÔÜÍÊ›Þ ËÂǵÉÀáÜÛ _ÚÍÂÐç͝ì
í æ·ÇµÊ›ÒÉÀÐç͝å›ÖÚÞßÉŸØ ËâБصèÝÍÂɟËÂÖ«ÍÂØÝË ìô΍ɳÒàÐçÍÂÉ
std::sqrt
cmath
é
double
// Program : prime2 .C
// Test if a given natural number is prime .
# include < iostream >
# include < cmath >
int main ()
{
// Input
unsigned int n;
std :: cout < < " Test if n >1 is prime for n =? ";
std :: cin > > n;
// Computation : test possible divisors d up to sqrt (n)
unsigned int bound = ( unsigned int )( std :: sqrt (n ));
unsigned int d;
for ( d = 2; d <= bound && n % d != 0; ++ d );
// Output
if ( d <= bound )
// d is a divisor of n in {2 ,... ,[ sqrt (n )]}
std :: cout < < n < < " = " < < d < < " * " < < n / d < < " .\ n";
else
// no proper divisor found
std :: cout < < n < < " is prime .\ n ";
return 0;
}
Program 28: ¢¤£³ŸÁ“Ž ¢¤£¬—»¨ Œ
ÆÈǵɷεÍÂʛåÌÍÂÐ‘Þ ÛñÒÕÙ³ÊÌÍîÍÂÉ³ÙŸË ÛÜÔ
d <= bound
Å
Òî˝ÛÜáÜáµÇµÊ›áÜèµÒ‹Ð‘ÔÜËÉŸÍ ËÂǵɷáñÊôÊÌÎ¾í›æ¹É·ÇÚÐXU“É áÜɳÔÜËÃËÂǵɷáÜÊ ÊÌÎ
_ ³É ٳБֵҝɏËÂǵÉ
ٳʛصèµÛñËÂÛÜʛØ
Ç ÐçÒãԪБÛñáÜɳè¤é¿ÆÈǵÛÜÒÓÞßÉ¬Ð‘ØµÒ ËÂÇÚÐçËÓæ¹É ÇÚÐXU“É¿Ô×ʛÖÚØµè Ð
n % d != 0
“

º
–

Š
³
Œ
£
èµÛVU¥ÛñҝÊÌͬéÝê˜Ô
ǵʛáÜèµÒÐçÔÜËÂÉŸÍ ËÂÇµÉ áñÊôÊÌÎ¾í æ¹É ÇÚÐXU“ɮ˝ÍÂÛÜɳèœÐ‘áÜá‹ÎÊ›ÒÒÛV_ÚáÜÉßèµÛVUôÛÜҝÊÌÍÂÒ ÒÞ®Ð‘áñáÜɟÍ
d > bound
ÊÌÍ ÉXôW ÖÚБá ËÂÊ
^»æ ÇµÊ›ÒÉ U‘БáÜÖµÉ ÛÜÒ í ҝÛÜØµÙ³É ËÂÇµÉ ÉIP¥ÎÚáÜÛÜٟÛñË®Ù³Ê›Ø U“ÉÄÍÂҝÛÜÊ›Ø ÍÊ›ÖÚØµèµÒ®èµÊÑæ·Ø¾í
ÒÉ³É " ɳٟ˝ÛÜÊ›Ø \ bound
é é `Äí ÒÊ æ¹É®Ù³ÉŸÍËÂБÛÜØµáñìÝÇÚÐXU“É n ØÚÊÌË ÞßÛñҝҝɳè Ð‘Ø ì èµÛVUôÛÜҝÊÌÍ¬é ‹Ö«Ëàæ¹É®Ç ÐXU“É®ËÂÊ _ É Ð
áÜÛñËîËÂáÜɿ٬ÐçÍÂɳÔ×ÖµáïǵɟÍÂÉ Ê›Ö«Í¿ÐçÍÂå›ÖµÞßɳدËÂÒëÐçҝҝֵÞßÉ ËÂÇÚÐçË
æ¹ÊÌÍ ô] ÒàÙ³ÊÌ͝ÍÂɟٟËÂáñì Ô×ÊÌÍ Ò ôW ÖÚÐçÍÂɳҟé
std::sqrt
[ ÊÌÍßÉI«
P БÞÀÎÚáÜÉÌí
Þ¿ÖµÒîË¿ÍÂɟËÂÖ«ÍÂØ
˜^ нáÜÛñËîËÂáÜÉ®ÞßÊÌÍÂÉ æ¹Ê›ÖµáÜèµØ Ë¿Ç ÖµÍîËGÄ` í Ú_ Ö«Ë
11
íµÒÂгì“éòstd::sqrt(121)
ê˜Ø ËÇ ÐÑË á×ÐçËîËÂÉŸÍ Ù³Ð‘ÒÉÌí
æ¹Ê›ÖµáÜè ÇÚÐX“U É ‘U Бš áÜÖµ“É –
10.99998
(unsigned int)(std::sqrt(121))
í БصèLô_ ìÞ®Ð ¥] ÛñØÚåÓËÂǵÛÜÒÃÊ›Ö«Í _ ʛֵصè¤í¯æ¹ÉòÞßÛÜÒÒ ËÂǵɷèµÛV¥U ÛñҝÊÌÍ
ʛÔ
í¯ÉŸÍÍÊ›ØÚɟʛÖÚÒîáñì ٟʛØÚٟáÜÖµèÚÛñØÚå
10
11 121
ÜÛ Ò¹ÎµÍÂÛÜÞßÉÌé
ê»ËëÛÜÒãå›É³ØµÉŸÍäБáñáñì ØµÊÌËâÒÂБÔ×É ËÂÊ ÍÂɳáñì½Ê›Ø ҝʛÞßɏεÍÂɟٳÛÜҝɏҝɳޮБدËÂÛÜÙ³ÒÏʛÔïáÜÛV_µÍäÐçÍîì½Ô×ֵصٟËÂÛñʛØÚҟí É U“ɳØ
ÛÜԋì“ʛ֫ÍãÎ áÜÐçËÂÔ×ÊÌÍÂÞ ÛÜÞÀÎÚáÜɳÞßɳدËÂÒQÚʓÐçËÂÛñØÚå®Î ʛÛÜØ¯ËëÐÑÍÂÛñËÂǵÞßɟËÂÛñÙàБٳٳÊÌ͝èÚÛñØÚå ËÂʞËÂÇµÉ ê ҙËäБصèÚÐçÍÂè
^˜ÒÉ³É " ɳÙÄËÂÛÜÊ›Ø \ é é `´éãÆ¹ÇµÉ Ò WôÖÚÐçÍÂÉàÍÂÊ ÊÌË Ô×ֵصٟËÂÛÜÊ›Ø ÛÜÒ ÒîΠɟٳÛ×Бá ÛñØ ËÂÇµÉ ÒÉ³ØµÒÉàËÂÇÚÐçË ËÇÚÉ ê ÒîËäÐçØÚèÚÐç͝èßÒîËÂÛÜáÜáÚå›ÖÚÐçÍäБدËÂɳɳÒÕËÂǵɷÍÂɳҝֵáñˋʛÔ
˝Z
Ê _ É·ËÂǵ
É QÚʓÐçËÂÛñØÚåÏΠʛÛÜØ¯Ë‹Ø ÖÚ
Þ _ ɟ͋ٳáÜʛҝɟÒîË
ËÂÊ ËÇÚÉÏÍÂɬБá¾Ò W Ö ÐÑÍÂÉâÍÂÊ ÊÌË ÙŸÊ›ØÚÒîXÉ WôֵɳدËÂáñì“íÚstd::sqrt
ʛֵͷР_ Ê U“ÉëÛÜÞÀÎÚáÜɟÞßÉ³Ø ËäÐÑËÂÛÜʛØÀÊ›Ô ËÂǵÉÏÎÚ͝ÛÜޮБáÜÛñË ìËÂɳÒîË·ÛÜÒ
ÒÂБÔ×É‘é ‹Ö«Ë·ÒîÛÜÞßÛÜá×Ðç͋å›ÖÚÐçÍäБدËÂɳɳÒÈèµÊ
صɳٳɟҝÒÂÐçÍÂÛñáñì ÇÚʛáñèžÔ×ÊÌÍòÊÌËÂǵɟͷáñVÛ _µÍäÐç͝ì®Ô×ֵصٟËÂÛÜʛصҳé
š
“

–
áÜҝÊãÛÜØßÊ›Ö«Í ÒÉŸÙ³Ê›ØµèÀÎÚ͝ÛÜÞßɹØôÖµb
Þ _ÉŸÍ ÐÑÎÚÎÚáÜÛñÙ¬ÐçËÂÛÜʛؤí
í¯æ¹É L
è _ÉŸËËÂɟ͋٬БáÜá
ÐëÒîËäÐçØÚèÚÐç͝è áÜÛ _ÚÍÂÐç͝ìÀÔ×ֵصٟËÂÛñÊ›Ø ÛÜØ ÊÌÍÂèµÉŸÍïËÂÊ ÛÜØµÛñ˝Û×БáÜÛ ŸÉòʛ֫¹ÍÈ£Ÿ©¯áÜÛܖÒî“Ë Ž³Ê›–ºŠÔ¡Œ³ÙŸš ͝ʛŒ³ÒŽ ҝɳŽ è ʛ—™ÖµXŒ D¥Ë¹Œ Ø Öµb
Þ _ ÉÄÍÂÒ³í¥ÛÜØµÒî˝ɬБè
Ê›Ô èµÊ›ÛÜØµå¿ÛñËòʛֵ͝ҝɳVá U“ɳҹæ Û²ËÂÇóÐ áÜÊôÊÌξé [ ÊÌÍÈËÂǵÛÜÒ³í¥æ¹Éãæ¹Ê›ÖµáÜè®ÍÂɟÎÚá×ÐçÙ³ÉÏ˝ÇÚÉÓË æ¹Ê áÜÛñØÚɟÒ
ËÂÇÚÐçË
121
ʛÔ
for ( unsigned int i = 0; i < n ; ++ i)
crossed_out[i ] = false ;
ÍÂʛåÌÍäÐçÞ
æ ÛñËÂÇ®ËÂǵÉÏҝÛÜØµå›áÜÉÓáÜÛÜØµÉ
std :: fill ( crossed_out , crossed_out + n , false );
Æ ÇÚÉÓεÍÂÉ ‹Ð‘صè ΍ʛÒîËÂٳʛصèµÛñËÂÛÜÊ›ØµÒ Ê›Ô¾ËÂǵÛÜÒ¹ÒîËäБصèÚÐçÍÂè áÜÛV_µÍäÐçÍîìÀÔ×ֵصٟËÂÛÜÊ›Ø ÉIPµÐ‘ÙÄËÂáñì®Þ®ÐçËÂÙäÇ®ËÂǵÉãʛصɳÒÈʛÔ
¹
Ê›Ö«Í Ê¦æ Ø
Ô×ֵصٟËÂÛñÊ›Ø ÔÜÍÂÊ›Þ Ð‘å›É ! éÈÆ¹ÇµÉZ_ É³ØµÉ YµË ǵɟÍÂÉàÛñҷصÊÌË ËÂǵÉëÒÂÐXUôÛÜØµåÀÊ›Ô Ê›ØµÉëáÜÛÜØµÉâʛÔ
fill
Ù³Ê èÚÉ ‘ËÂǵÛÜÒ ÒÂÐXU¥ÛñØÚå¹èµÊôɟҡصÊÌË¤É U“ɳØâÉIP«ÛÜҙˬíçÒîÛÜØµÙ³É æ¹ÉÕÐçèÚèµÛñ˝ÛÜʛØÚБáÜáñìÈÇÚÐXU“ÉÃËÂÊ
#include <algorithm>
ÛÜØ ËÂÇµÉ _ ɟå›ÛÜØµØÚÛñØÚå Ê›Ô ËÇÚÉÓεÍÂʛåÌÍäÐ‘Þ é
ÆÈǵ
É _ É³ØµÉ YµË¹ÛÜÒïËÂÇÚÐçËïæ¹ÉÓɳáÜÛñÞßÛÜØÚÐçËÂÉò΍ʛҝҝÛV_ÚáÜÉ ÒÊ›Ö«ÍÂٟɳÒòʛԾɟ͝͝ÊÌÍ ^»É U“É³Ø Ðë˝ÍÂÛ U¥Û×Бá áÜÊôÊÌÎ ÇÚБÒïËÂǵÉ
Î ÊÌËÂÉŸØ ËÂÛ×ÐçáÊ›Ô _ ɳÛÜØµåàæ·ÍÂʛصå `ÄíôБصè ËÂÇÚÐçˋæ¹ÉÏÒîÛÜÞÀÎÚáÜÛÜÔÜì¿ËÂǵÉÏÙŸÊ›Ø ËÍÂʛá Q ʦæ ^˜ÒîɳÉâÐçáÜÒÊ " ɳٟ˝ÛÜÊ›Ø \ é é `Äé
3.1.10 Details
Default arguments.
" ʛÞßÉ·Ô×ֵصٟËÂÛÜʛصÒÕÇ ÐXU“ɷ˝ÇÚÉÈεÍÂÊÌÎ ÉŸÍË ìËÂÇÚÐçËÕ˝ÇÚÉÄÍÂÉ ÐçÍÂÉîØ ÐÑËÂÖ«ÍäБá
UÌÐçáÜÖµÉ³Ò Ô×ÊÌÍ
Ê›ØµÉ ÊÌÍïÞßÊÌÍÂÉòʛԤ˝ÇÚɟÛñÍïÔ×ÊÌÍÂޮБá ÐçÍÂå›ÖµÞßɳدËÂÒ³é [ ÊÌ͹ÉIP«Ð‘ÞÀÎÚáÜÉÌí“æ ÇµÉ³Ø YÚáÜáÜÛÜØµåãÐ‘Ø Ðç͝ÍäгìÀʛԤֵصèµÉŸÍÂáñìôÛÜØµå
Ë ôì Î É
í ËÂÇµÉ U‘БáÜÖµÉ
ÛÜÒëÒîÖÚÙäÇ ÐžØÚÐçËÂÖ«ÍäБáUÌÐçáÜÖµÉÌé ê˜Ø ҝֵÙäÇ ÐžÙ¬ÐçҝÉÌí ÛñËëÛñÒâÎ Ê›ÒÒÛ _ áñÉ ËÂÊ ÒîΠɟٳÛÜÔÜì
int
0
ËÂǵÛÜÒLU‘БáÜÖµÉ Ð‘Ò Ð
ãËÂǵÛÜҮБáñáÜÊÑæ·ÒËÂÇµÉ Ù¬Ð‘áñáÜɟͮʛÔÓËÂÇµÉ Ô×ֵصٟËÂÛñʛؼËÂÊ Ê›ÞßÛñˏËÂǵÉ
Œ˜¶çÐÑ©“Í”囒²Öµ–óÞß©“ɳ£îØ ÁÌËë
”¨ БصŒŸèœ
𤖠áÜɟËà˝ÇÚÉßٟʛÞÀÎ ÛñáÜɟÍëÛñØÚÒîɟ͝ËàËÂǵɮèµÉ³ÔªÐ‘ÖµáñË U‘БáÜÖµÉßÛÜØµÒîËÂɬÐçè¾é ê˜Ø
Ù³ÊÌ͝͝ɳÒîΠʛصèµÛÜØµå ٬БFµáÜáï
٬БÒîÉâʛԡ˝ÇÚÉÏÔ×ֵصٟËÂÛÜʛØ
ÔÜÍÂÊ›Þ ÍÂʛåÌÍäÐ‘Þ \ í¥ËÂǵÛÜÒïæ¹Ê›ÖµáÜèžáÜÊ Ê ] БÒÈÔ×ʛáÜáÜʦæ Ò³é
fill
// PRE : [ first , last ) is a valid range
// POST : * p is set to value , for p in [ first , last )
void fill ( int * first , int * last , int value = 0) {
// iteration by pointer
for ( int * p = first ; p != last ; ++ p)
*p = value ;
}
ÆÈǵÛÜÒÈÔ×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘Øóصʦæ _ÉãÙ¬ÐçáÜáÜÉ³è æ ÛñËÂÇ É³ÛñËÂÇµÉŸÍ¹Ë æ¹Ê ÊÌÍÈËÂÇ«ÍÂɳÉâÐçÍÂå›ÖµÞßɳدËÂÒ³í«Ð‘ÒÈÔ×ʛáÜáÜʦæ ҟé
int a [5];
fill (a , a +5);
// means : fill (a , a +5 , 0)
fill (a , a +5 , 1);
˜ê ØÀå›É³ØµÉŸÍäÐçá˜í›ËÂǵɟÍÂÉÈÙ¬Ð‘Ø _ÉòèµÉ³ÔªÐ‘ÖµáñËU‘БáÜÖµÉ³Ò Ô×ÊÌÍ‹Ð‘Ø ì¿ØôÖµÞ_ ɟÍÃʛÔÔ×ÊÌ͝ޮБá«ÐçÍÂå›ÖµÞßɳدËÂÒ³í _ÚÖ«ËÕ˝ÇÚɟҝÉ
ÐçÍÂå›ÖµÞßɳدËÂÒÏޏֵÒîË _ ÉÀÐÑËâٳʛصҝɟٳ֫ËÂÛVU“É ΠʛÒîÛñËÂÛÜʛصÒ
ÐçÞßʛØÚå®ËÂǵÉ
ÐÑÍÂå›ÖµÞßÉ³Ø ËÂҟí¡Ô×ÊÌÍ
ҝʛÞßÉ é Æ¹ÇµÉßÔ×ÖÚØµÙŸËÛÜÊ›Ø Ù¬Ð‘Ø ËÂÇµÉ³Ø _ÉÀ٬БáÜáñÉ³è æ ÛñËÂi,Ç i Ðç+Ø ì 1,Ø . ÖÚ. .Þ, _ kɟÍëʛÔÈٳБáÜá ÐÑÍÂå›kÖµÞßÉ³Ø ËÂÒ _ ÉŸË æ¹É³É³Ø
Бiصè í¥ÐçØÚèËÂǵɷٳʛÞÀÎÚÛÜáÜÉÄÍÃБ֫ËÂʛޮÐçËÂÛÜٳБáÜáñìÏÛÜØµÒÉŸÍîËÂÒÕËÂǵÉòèÚɟԪБֵáñË U‘БáÜֵɳÒÕÔ×ÊÌ͋ËÂǵÉÈÞßÛÜҝҝÛñØÚåÏ٬Бáñá
i−1
ÐçÍÂå›ÖµÞßɳدËÂkÒ³é
Ô×ֵصٟËÂÛÜÊ›Ø Þ®Ð³ìžÇÚXÐ U“ÉàÐ ÒîɟΠÐçÍäÐçËÂÉâèÚɟٳá×ÐçÍäÐÑËÂÛÜʛØóËÂÇÚÐçË·ÒîÎ É³Ù³Û Y ÉŸÒ èµÉ³ÔªÐ‘ÖµáñËÓÐç͝å›ÖÚÞßÉŸØ ËÂÒ³íÚáÜVÛ ]“ÉãÛÜØ
ËÂǵÉÏÔ×ʛáÜáÜʦæ ÛÜØµå èµÉ³Ù³á×ÐçÍÂÐçËÂÛÜÊ›Ø Ê›Ô
é
fill
// PRE : [ first , last ) is a valid range
// POST : * p is set to value , for p in [ first , last )
void fill ( int * first , int * last , int value = 0);
ê˜ØËÇÚÛñÒ ¬Ù БҝÉÌí›ËÂǵÉÈÐ‘ÙŸËÖ çÐ á¥èµÉ YÚØÚÛ²ËÂÛÜʛØàÞ¿ÖÚÒ™Ë ØÚÊÌË ÍÉŸÎ É¬ÐçË ËÂǵÉïèµÉ³ÔªÐ‘ÖµáñËÃÐÑÍÂå›ÖµÞßÉ³Ø ËÂÒ ^»ËÂǵÉÈБٟËÂÖÚБáô͝ÖÚáñɳÒ
ÐçÍÂÉãÐ _ Û²ò
Ë ÞßÊÌ͝ÉÏٟʛÞÀÎ áñÜÛ Ù¬ÐçËÂɟè¾í _ÚÖµËÈËÂǵÛÜÒ¹ÛÜÒ¹ËÂǵÉãÖ«ÎÚҝǵÊÌËG`Äé
Ô×ֵصٟËÂÛñÊ›Ø Þ®Ð³ì Ç XÐ U“ÉÓÒÉ U“ÉÄÍäБá èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛصҳí É U“É³Ø æ Ûñ˝Ç
ËÂǵɿÒÂБÞßÉ¿èÚɟٳá×ÐçÍäÐÑËÂÛVU“ÉàÍÂɳå›ÛÜʛصÒb^»ËÂǵɿá×Ðç˝ËÂÉÄÍãÛñÒãØµÊÌËâБáÜáÜʦæ¹É³è Ô×ÊÌÍ U‘ÐçÍÂÛ×Ð _ÚáÜɟҳí¤ÒÉ³É " ɳÙÄËÂÛÜÊ›Ø \ é é `Äé
ƹÇÚÉ ÎÚ֫͝ΠʛÒîÉ Ê›ÔÚзÔ×ÖµØÚÙÄËÂÛÜÊ›Ø èµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛØëÛñÒ ËÂÊ ÎÚÖ«Ë ÒÖ _ÚҝXÉ WôֵɳدËÃÙ³ÊôèµÉ ÛÜØ¯ËÂÊ ËÂÇµÉ Ô×ֵصٟËÂÛÜÊ›Ø Ò ÒÙ³ÊÌΠɑí
БصèžËÂǵɟ͝Éãޮгì _ ÉÏÒÉ U“ÉŸÍÂБá¡ÎÚá×БٟɳÒïæ ÇµÉŸÍÂÉÏËÂǵÛÜÒ¹ÛÜÒòصɳٟɳҝÒÂÐçÍîì“é
Ø ËÂǵÉàÊÌËÂǵɟÍÓÇÚБصè¤íÉ U“ÉŸÍîì½Ô×ֵصٟËÂÛñÊ›Ø Ù³Ð‘Ø½ÇÚXÐ U“ÉàʛصáñìóÊ›ØµÉ èµÉ YÚØµÛñËÂÛÜʛؤí Бصè ˝ÇÚÛñÒ ÛÜÒ ËÂǵÉàʛصÉ
БáÜá Û²ËÂÒòèµÉ³ÙŸá×ÐçÍäÐç˝ÛÜÊ›ØµÒ ÍÂɳÔ×ɟÍòËÂÊ«é
Function declarations and definitions.
ê˜Ø Ô×ÖÚØµÙŸËÛÜÊ›Ø èµÉ³ÙŸá×ÐçÍäÐç˝ÛÜʛصҳí ËÂǵÉßÔ×ÊÌÍÂޮБáïÐÑÍÂå›ÖµÞßÉ³Ø ËàØÚБÞßɟÒ
Ù¬Ð‘Ø _ÉãʛÞßÛñËîËÂɳè¤é
Function
signatures.
íñé´é³é³í
ÆÈǵÛÜҷޮР]“ɳҷÒîÉ³ØµÒÉ ÒÛÜØµÙ³ÉâËÂǵɳÒîÉàØ ÐçÞßÉ³Ò Ðç͝ÉëʛصáñìžØµÉ³ÉŸèÚɟè½ÛÜØ ËÂǵÉëÔ×ֵصٟËÂÛñÊ›Ø èÚÉIY صÛñ˝ÛÜʛؤéòƹǵÉ
ÛÜÞÀÎ ÊÌÍîËäÐ‘Ø ËÈÛÜØµÔ×ÊÌÍÂÞ®ÐÑËÂÛÜÊ›Ø¤í«ØÚБÞßɳáñì èµÊ›Þ®Ð‘ÛÜØžÐ‘صè ÍÂБصå›ÉëÊ›Ô ËÂǵÉëÔ×ÖµØÚÙÄËÂÛÜʛؤíÐç͝ÉàБáñÍÂɳБè«ìžÒî΍ɳٳÛVYÚɳè
_ôìËÂÇµÉ ÐçÍÂå›ÖµÞßÉ³Ø¯Ë‹Ë ìô΍ɳÒïБصèßËÂǵɷÍÂÉŸËÖµÍØ®Ë ì Î ÉÌé áÜáµËÂÇµÉ³ÒÉ·Ë ì Î É³Ò ËÂʛå›ÉŸËÇÚÉÄÍ Ô×ÊÌÍÂÞ ËÇÚÉ
ŽŸ—°Á›š ©¯–˜” £³Œ
ʛԡ˝ÇÚÉãÔ×ÖµØÚÙÄËÂÛÜʛؤé
ê˜Ø
í«æ¹ÉãٟʛÖÚáñè ËÂǵɟÍÂɟÔ×ÊÌÍÂÉâXÉ W ÖµVÛ UÌÐçáÜÉ³Ø Ëáñìßæ·ÍÂÛ²ËÂÉ ËÂǵÉãèµÉ³Ù³áÜÐçÍäÐçËÂÛñʛØ
math.h
double pow ( double , int );
Æ ÇÚÉãʛصáñìßεÍÂÊ _ÚáÜÉ³Þ ÛÜÒ¹ËÂÇÚÐçËòæ¹ÉÏØµÉ³É³èóËÂǵÉãÔ×ÊÌÍÂޮБá¤ÐçÍÂå›ÖµÞßɳد˹ØÚБÞßɳҹËÂÊ Òî΍ɳٳÛÜÔÜì®ÎµÍÂÉ Ð‘ØµèžÎ ʛÒîË ¹
ٳʛصèµÛñËÂÛÜÊ›ØµÒ³í æ Û²ËÂǵʛֵ˿å›Ê›ÛÜØµå ËÂÊ áñɳصåÌËÂÇ ì Ô×ÊÌÍÂÞ¿Öµá×ÐçËÂÛÜʛصÒàÛÜØ U“Ê›áVU¥ÛñØÚå™ËÂǵÉYµÍÂÒîËßÐÑÍÂå›ÖµÞßÉ³Ø Ë Ð‘Øµè
™ËÂÇµÉ ÒÉŸÙ³Ê›ØµèžÐç͝å›ÖÚÞßÉŸØ Ë «é ƹǵɟÍÂɳÔ×ÊÌÍÂɑíôæ¹É ֵҝÖÚБáÜáñì¿æ·ÍÂÛ²ËÂÉòËÂÇµÉ Ô×ÊÌÍÂÞ®ÐçáÐç͝å›ÖÚÞßÉŸØ Ë ØÚБÞßÉŸÒ‹É U“É³Ø ÛÜØ
Ô×ֵصٟËÂÛÜÊ›Ø èÚɟٳá×ÐçÍäÐÑËÂÛÜʛصҳé
\
)óÐ‘Ø ì ʛԹËÂǵÉßÞ®ÐçËÂǵɳޮÐÑËÂÛÜ٬Бá Ô×ÖÚØµÙŸËÛÜʛصÒëËÂÇÚÐçË ÐçÍÂÉ®ÐXU‘БÛÜá×Ð _ áñÉ Ê›Ø ÒÙ³Û Mathematical functions.
³É دËÂÛVYÚÙãÎ Ê Ù ]“ÉŸË ٬БáñÙ³Öµá×ÐçËÂÊÌÍÂÒÈÐç͝ÉàБáÜÒÊ ÐXUÌБÛñá×Ð _ÚáÜÉÏÔÜÍÂʛÞðËÂǵÉëÞ®ÐÑËÂǞáÜÛ _ÚÍÂÐç͝ì
éÈÆ¹ÇÚÉâÔ×ʛáÜáÜʦæ ÛÜØµå
cmath
ËäÐ _ÚáÜÉ áÜÛÜҙËÂҏÒîʛÞßÉ Ê›Ô·ËÇÚÉŸÞ é áÜáÈÐçÍÂɞÐXUÌБÛñá×Ð _ÚáÜÉ®Ô×ÊÌÍÀËÂÇµÉ ËÇµÍÉ³É QÚʓÐçËÂÛñØÚå ΠʛÛÜØ¯Ë Ø ÖµÞb_ ÉÄÍË ìô΍ɳÒ
í
Бصè
é
float
double
long
double
ØÚБÞßÉ
Ô×ֵصٟËÂÛñʛØ
std::abs
std::sin
std::cos
std::tan
std::asin
std::acos
std::atan
std::exp
std::log
std::log10
std::sqrt
|x|
ҝÛñØ
Ù³Ê›Ò (x)
ËäÐçØ (x)
(x)
ÒîÛÜØ −1
ÙŸÊ›Ò −1(x)
ËÂÐ‘Ø −1(x)
(x)
e
x
áÜØ
áñʛå x
10
x
x
3.1.11 Goals
˹ËÂǵÛÜҹΠʛÛÜØ¯Ë¬íôì“Ê›ÖóÒîÇÚʛֵáÜè é³é³é
¹
Dispositional.
`L_ ÉãÐ _ÚáÜÉÏ˝ʏÉIPôÎÚá×БÛÜØ ËÂǵÉÏÎÚ֫͝ΠʛҝÉÏʛÔ
` ÖµØÚèµÉŸÍÒîËäБصè®ËÂÇµÉ Òîì¥Ø¯ËäÐ P Бصè®ÒÉ³Þ®ÐçØ
\ ß
`L¥] ØµÊ¦æ æ·ÇÚÐç˹ËÂǵÉÏËÂÉÄÍÂÞ ™ÎµÍÂÊ Ù³É³èµÖ«ÍäБá
ÔÜÍÂʛÞ
` ÖµØÚèµÉŸÍÒîËäБصè½ËÇÚÉ Ô×ֵصٟËÂÛÜʛØ
ß
pow
ÔÜÍÂÊ›Þ ÍÂʛåÌÍäÐçÞ \ `L]¥ØµÊ¦æ ËÂÇÚÐçËÓÔ×ÊÌÍÂޮБá ÐÑÍÂå›ÖµÞßÉ³Ø ËÂÒ Ê›Ô Î
×Ô ÖµØµÙŸËÂÛÜʛصҹÛÜØ ËÂÛÜÙŸÒ Ê›Ô Ô×ÖÚØµÙŸËÛÜʛخèÚÉIY صÛñ˝ÛÜÊ›ØµÒ Ð‘Øµè®èµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛصÒ
εÍÂʛåÌÍäБÞßÞßÛñØÚå ãÞßɬБصÒ
ÍÂʛåÌÍäÐ‘Þ Ð‘Øµè½ËÂÇµÉ Ô×ֵصٟËÂÛÜʛصÒ
Бصè
fill_n
fill
ʛÛÜØ¯ËÂÉŸÍ Ë ìôÎÉ¿Ù³Ð‘Ø _ É µÖ ҝɳè½ËÂÊßæ·ÍÂÛñËÉ Ðç͝ÍäÐ³ì » εÍÂÊôٳɟҝҝÛÜØµå
Ô×ÖÚØµÙŸËÛÜʛصҳíÚБصèžÞ¿ÖµËÂÐçËÂÛÜØµåàÔ×ֵصٟËÂÛÜʛصÒ
`L]¥ØµÊ¦æ æ·Ç ì¼ÛñË Þ®Ð ]“ɳҮҝɟØÚÒîÉ ËÂÊ Ù³Ê›ÞÀÎÚÛÜáÜÉ Ô×Öµµ
Ø ÙŸËÂÛÜÊ›Ø èÚIÉ Y صñÛ ËÛÜʛصÒßҝɟΠÐçÍäÐç˝ɳáñì“í БµØ è ËÊ ÎÚÖ«Ë
Ô×ÖÚØµÙŸËÛÜʛصÒòÛÜØ¯ËÂÊ¿áÜVÛ _µÍäÐçÍÂÛñɳҳé
Operational.
^
^
`®å›Û U“ÉÏË æ¹Ê ÍÂɬБҝʛصÒÈæ Ç ì ÛñËÈÛÜÒÈèµÉ³ÒÛñÍÂÐ _ÚáÜÉ ËÂÊ ÒÖ _ èµÛVUôÛÜèµÉ εÍÂʛåÌÍäБÞßÒ¹ÛÜØ¯ËÂʏÔ×ֵصٟËÂÛñʛØÚÒ Y صèóεÍÂÉ ïБصè ΍ʛÒîËÂٳʛصèµÛñËÂÛÜʛصÒÈÔ×ÊÌÍ å›ÛVU“É³Ø Ô×ֵصٟËÂÛñʛØÚÒŸí æ ǵɟ͝ÉâËÂǵÉâεÍÂɳٳʛصèµÛñËÂÛñʛØÚÒÈҝǵʛֵáÜè
\ ` Ú
_ ÉãБÒ
Ð‘Ò¹Î Ê›ÒÒÛ _ áñÉÌíµÐ‘صèžËÂǵÉÓΠʛÒîËÂٳʛصèµÛñËÂÛñʛØÚÒïÒîÇÚʛֵáÜè _ ÉãБÒ
БҹΠʛҝÒîÛV_ÚáÜÉ ¸ÓŒÄ©
ŽŸ–˜£³›šÁ
Y صè ÒîìôØ ËäБÙÄËÂÛÜ٬БáòБصè ҝɳޮÐçØ ËÂÛÜٳБá¹ÉŸÍÍÂÊÌÍÂÒ ÛÜØ Ô×ֵصٟËÂÛÜÊ›Ø èµÉ YÚØµÛñËÂÛÜʛصҳí‹Ð‘صè ÛÜØ εÍÂʛåÌÍäБÞßÒ
` Ú
ËÂÇÚÐçËÈٳʛدËäБÛÜØ Ô×ÖµØÚÙÄËÂÛÜʛØóèµÉ ÚY صÛñËÂÛÜʛصÒ
` ÉIÌU БáñÖ ÐÑËÂÉÓå›ÛV“U ɳØóÔ×ֵصٟËÂÛÜʛ؞٬БáÜá ÉIôP εÍÂɳҝҝÛñʛØÚÒ ®
` æòÍÂÛñËÂÉ ˜^ Þ¿Ö«ËäÐçËÂÛñØÚå Ó
` Ô×ÖµØÚÙÄËÂÛÜʛصҏÔ×ÊÌ͏å›ÛV“U É³Ø ËäÐ‘Ò ô] Ò³í Ð‘ØµèœæòÍÂÛñËÂÉßεÍÂʛåÌÍäÐçÞßÒàÔ×ÊÌÍ å›ÛV“U ɟ؜ËäÐ‘Ò ô] Ò
ß
^
^
^
ê˜ØžÎ Ðç͝ËÂÛñÙ³Öµá×Ðçͬí¯ì“Ê›Ö ҝǵʛÖÚáñè _ ÉãÐ _ÚáÜÉ ËÂʞéŸé¬é
ËÂÇÚÐçËÈֵҝÉãÔ×ÖÚØµÙŸËÛÜʛصÒ
^
^
`®ÒîÖa_èÚÛ U¥ÛÜèµÉ¹Ð å›ÛVU“ɳؿËäÐ‘Ò ] ÛÜØ¯ËÂÊÏҝޮБáÜá ÒÖ Ú
_ ËÂÐ‘Ò ]¥ÒŸíôÐ‘Øµè æ·ÍÂÛ²ËÂÉÈРεÍÂʛåÌÍÂÐ‘Þ Ô×ÊÌÍÕ˝ÇÚɹå›ÛVU“ɟ؏ËäБÒN]
ËÂÇÚÐçËÈֵҝɳÒòÔ×ÖµØÚÙÄËÂÛÜʛصÒÈ˝ʏÍÂɬÐçáÜÛ³É ËÂǵÉÏÒÖ Ú_ ËÂÐ‘Ò ]¥Ò _ ÖµÛÜáÜèžÐ áÜÛVµ
_ ÍäÐÑ͝ì ʛØóì“ʛֵͷΠáÜÐçËÂÔ×ÊÌÍÂÞ í«å›ÛV“U ɟØóËÂÇÚÐçËòì“Ê›Ö Ðç͝ÉâËÂʛáÜèžËÇÚÉãØµÉ³Ù³É³ÒÒÐç͝ìóËÂɟٴǵصÛÜÙ¬Ðçá
` Ú
èµÉŸËäÐçÛÜáÜÒ³é
3.1.12 Exercises
Exercise 79
Ð `
_ `
\ `I^
`
int f ( double i , double j , double k)
{
if ( i > j )
if ( i > k)
return i;
else
return k;
else
if ( j > k)
return j;
else
return k;
}
double g ( int i , int j )
{
double r = 0.0;
for ( int k = i ; k <= j ; ++ k )
r += 1.0 / k;
return r;
}
Exercise 80 ݊©¯–à©“£ŸŒ®–ºŠŒë¢¤£³¥ ¦’ªŒ³¨óŽ Hî— ¶ ©“š JM ¸¹—˜–ºŠ –ºŠŒ ¶ç“’»’ª›¸È—°šÁඟ” 𠱬–˜—š¤Ž
©“šF šF½©¬¢«¢¤£³³¢¤£¬—™©¯–ŒÓ¢¤£³Œ ੓šF ¢“޳–±Ÿ›šF“—»–˜—š¤ŽçÅ
Ð `
bool is_even ( int i)
{
if ( i % 2 == 0) return true ;
}
_ `
^
—»šF¢¤£³Œ ੓šF ¢ “ŽŸ–±Ÿ›šF“—˜–˜—™›š¤Žò¶ç›£À–ºŠŒÈ¶‘“’»’ª›¸¹—»šÁ㶟” 𠱬–˜—š¤ŽçÅ
double inverse ( double x)
{
double result ;
if ( x != 0.0)
result = 1.0 / x;
return result ;
}
^ — \ `Iº– ^ ŠŒ³¨ `
Exercise 81 ݊©¯–®—»ŽÝ–ºŠŒ ›”–ñ¢¤”–óÂ¶Ý–ºŠŒ®¶‘“’°’§›¸¹—»šÁ ¤
¢ £³ŸÁ›£Ÿ©“¨
µF Œî¢Œ³šF“—»šÁ › š º– ŠŒ »— 𥢤”–
𠔍 ³Œ³£ i
³Œ Ž‘±³£¬—™ ŸŒ –ºŠŒß›”–ñ¢¤”–‹—»š ¨ ©¯–ºŠŒ³¨½©¯–˜—™±Ä©¯’ – ŒŸ£¬¨óŽ —§Á›š › £¬—»šÁ⢠“Ž³ŽŸ— ¦§’ Œ  ¥D Œ³£ 㓩 šF
”šFµŒŸ£ ›¸ÈŽçÅ
^
`
# include < iostream >
int f ( int i)
{
return i * i ;
}
int g ( int i)
{
return i * f (i ) * f( f(i ));
}
void h ( int i)
{
std :: cout < < g(i ) < < "\ n";
}
int main ()
{
int i ;
std :: cin > > i;
h (i );
return 0;
}
Exercise 82
—»šF󖺊¥£³ŒŸŒã¢¤£³¥ ¦’ªŒ³¨óŽ¿—»š –ºŠŒò¶‘“’°’§›¸¹—»šÁ¿¢¤£³ŸÁÌ£Ÿ©“¨½Å
# include < iostream >
double f ( double x )
{
return g (2.0 * x );
}
bool g ( double x)
{
return x % 2.0 == 0;
}
void h ()
{
^
`I^
`
std :: cout < < result ;
}
int main ()
{
double result = f (3.0);
h ();
return 0;
}
—»¨¿¢¾’­— ¶ J
Exercise 83
std::pow Å
–ºŠŒÝ¢¤£³ŸÁ›£Ÿ©“¨
ڌ³£³±Ÿ—˜Ž‘Œ ¶Ä£³›¨
KJ ”ŽŸ—»šÁ –ºŠŒ ’•—™ ³£Ÿ©“£KJœ¶Ä”𠬱 ^ –˜—™› š `
Ž³ŽŸ” ¨ ·
Œ –ºŠ©¯– ›š Jڐ›”£Õ¢¾’ª©¯– ¶ç›£¬¨ –ºŠŒÓ’•—™ ¬£Ä©“£KJ·¶Ÿ” 𠱬–˜—š std::sqrt —»Ž·š “–D¥Œ³£KJ
£³Œ¬’•—™©« ¬’§Œ‘Å › £ x © Dô¯© ’­”¡ŒóÂ¶– JÑ¢ Œ double H x 0M ò¸ÏŒÀ’§Œ¬– s(x) ³Œß–ºŠŒLD ©¯’­”¡ŒÀ£³Œ¬–˜” £¬š ŒIF KJ
std::sqrt(
) ë— ¶
Š©¯Ž Dô©¯’•” Œ x À©“šF ¸ÓŒ ©¯ŽŸŽŸ” ¨½Œó–ºŠ©¯–ë¸ÓŒ ›š¤’EJ ‘𠐛¸ –ºŠ©¯– ¶‘›£
Ž‘›¨½ŒÏ¢ “ŽÄ—˜–˜— DôŒ Dô©¯’•” Œ ε 1/2 ¹–ºŠŒ £ŸŒ¬’ª©¯–˜— D¥ŒžŒŸ£¬£³›£ßŽç©¯–˜—»Ž Œ¬Ž
Exercise 84
|s(x) − x|
x
ε,
x.
Œ³£¬›£³¸›£ß±Ä Ÿ©“›š ”šJÚF ›” ±¬Š›”©“š¨½Á«Œ ©J ¹©¯£³ŸŽ³Á›ŽŸ”£Ä©“¨½¨ Œë–ºŠ ©¯–¹ŽŸ”¡–ºŠ±¬ŒŠ
–ºŠ©¯–à—˜–ß±Ÿ›£¬£ŸŒŸ±¬–º’ J ¸Ï›£ ‘Žó”šFµŒ³£ –ºŠ¥—˜Žó£ŸŒ¬’ª©¯–˜— D¥Œ
ç©¯–˜—»šÁࢠ›—°š¤–¹š ” ¨½ ŸŒ³£¿Ž JôŽŸ–Œ³¨ ”ŽçŒIF ›š J ›” £
¢¾’ש¯– ¶‘›£¬¨ —˜Ž ¬—°š ©“£KJ ©“šFà–ºŠ©¯– ©¯’»’ D ©¯’­”¡Œ¬Ž Â¶¹– JÑ¢ Œ unsigned int ©“£³ŒãŒ µ©µ±¬–º’ JࣳŒî¢¤£³Œ¬ŽçŒ³š¤–î^ ©« ¦ ’ªŒ `
—»šœ–ºŠ¥—˜Ž¿Ž J ޳–Œ³¨½Å H‘‰ÕŠ¥—˜Žà—˜Žß© –ºŠŒÄ›£KJ ŒÚŒ³£³±Ÿ—˜Ž‘Œ‘Å M
Exercise 85
©KM
£¬—˜–Œ ©ë¶Ä”𠱬–˜—™›š
// POST : return value is true if and only if n is prime
bool is_prime ( unsigned int n );
Ë æ ÛÜØßεÍÂÛÜÞßɳÒ
“© šF ”ŽçŒ –ºŠ¥—˜Ž ¶Ÿ” 𠱬–˜—î›š —°š © ¢¤£³ÄÁ›£Ÿ©“¨ – ±Ÿ›”š¤–È–ºŠŒ š ” ¨ ³ Œ³£ Â¶
—»š –ºŠŒ
£Ÿ©“šÁ¥Œ {2, . . . , 10000000} H–˜¸Óœ”¯¢ – –Œ³š ¨ž—˜’°’­—™›š¤ŽNM¥Å
˜– ¸¹—°š ¢¤£¬—»¨½Œ½—»Ž ©½¢©“—»£œÂ¶
š ” ¨½ ³ŒŸ£¦Ž (i, i + 2) Ÿ“–ºŠœÂ¶à¸ÈŠ¥—î±¬Š ©“£³Œã¢¤£¬—°¨ Œ‘Å
M äŽ –ºŠŒ ©¬¢«¢¤£³‘©µ±¬Š Â¶Ý©KM –ºŠŒ ŸŒ¬Ž³– H™¨ “ ޳– Œ ±³—™Œ³š¤–VM ›š Œ½– –ºŠ¥—˜ŽÀ¢¤£³¥ ¦’ªŒ³¨
×¶ J ›”
±´©“š –ºŠ¥—»š Â¶ ©ó ŸŒ¬–º–Œ³£ß©¬¢«¢¤£³‘©µ±¬Š Jڐ›” “© £³Œ‹¶Ÿ£³ŒÄŒà–À—»¨¿¢¾’§ŒŸ¨ Œ³š¤– —»–‹—»š¤Ž³–Œ´© F Â¶Ï–ºŠŒÀ›š Œ
›”–º’­—°š ŒIF󗰚 ©KM¥Å
^
`
Exercise 86 ‰‹ŠŒï¶Ä”𠱬–˜—™›š pow —°š ¹£³ŸÁÌ£Ÿ©“¨
š ŒŸŒIF¯Ž |e| ¨ž”’²–˜—­¢¾’­—™±Ä©¯–˜—š¤Žâ– ±Ä›¨¢¤”–Œ be Å
¹Š©“šÁ«Œ –ºŠŒâ¶Ä”𠱬–˜—™›š ³ FJ ŽŸ”¡±¬Šœ–ºŠ©¯–à’ªŒ¬Ž³Ž ¨ž”’­–˜—²¢¾’•—î±´©¯–˜—î›š¤Ž ©“£³Œ ¢ Œ³£º¶ç›£¬¨ ŒGF«Å ›” ¨½©J
”ŽçŒ –ºŠŒÈ¶‘“’°’§›¸¹—»šÁã¶ç©µ±³–îÅ ×¶ e 0 ©“šF e Š©¯ŽÀ ¬—»š ©“K£ J £³Œ™¢¤£³Œ¬Ž‘Œ³š¤––˜—™›š
e=
∞
X
bi 2 i ,
i=0
–ºŠŒ³š
be =
∞
Y
b2
i
bi
.
i=0
^
`
¬£ —˜–Œ ©â¢¤£³ŸÁÌ£Ÿ©“¨ swap.C –ºŠ©¯–FµŒ š Œ¬Ž “© šF ±Ä©¯’°’²Žà© ¶Ä”𠱬–˜—™›š ¶ç›£ã—°š¤–Œ³£³±¬Š©“šÁ
—»šÁߖºŠŒ Dô©¯’•” Œ¬Ž¿Â¶â–˜¸Ó int ¥ ŒŸ±¬–ºŽçÅ ‰ÕŠŒ·¢¤£³ŸÁÌ£Ÿ©“¨ ޳
Š ›”’ FÀŠ©D¥Œà–ºŠŒ ¶ç“’»’ª›¸¹—»šÁ ޳–˜£¬” ±¬–˜” £³Œ‘Å
Exercise 87
# include < iostream >
// your function definition goes here
int main () {
// input
std :: cout < < "i =? " ;
int i ; std :: cin > > i ;
std :: cout < < "j =? " ;
int j ; std :: cin > > j ;
// your function call goes here
// output
std :: cout < < " Values after swapping : i = " < < i
< < " , j = " < < j < < " .\ n ";
return 0;
}
Œ³£ŸŒ —˜ŽÀ©“š Œ µ©“¨¢¾’ªŒ£¬” š Â¶ –ºŠŒž±Ä›¨¢¾’ªŒ¬–ŒIFߢ¤£ŸŸÁ›£Ÿ©“¨
i =? 5
j =? 8
Values after swapping : i = 8 , j = 5.
 F“— ¶IJ –ºŠŒ·¢¤£³ŸÁ›£Ä©“¨ sort_array.C
¶Ä£³›¨
ڌŸ£³±³—˜ŽçŒ
£³Œ¬ŽÄ”’­–˜—»šÁ ¢¤£ŸŸÁ›£Ÿ©“¨ sort_array2.C FµŒ š Œ³Ž ©“šFݱ´©¯’»’­Ž®©â¶Ÿ” 𠱬–˜—š
Exercise 88
^
`
—»š ŽÄ” ±¬Šž¸ ©J –ºŠ©¯–ï–ºŠŒ
// PRE : [ first , last ) is a valid range
// POST : the elements *p , p in [ first , last ) are
//
in ascending order
void sort ( int * first , int * last );
–À¢ Œ³£º¶ç›£¬¨ –ºŠŒ®Ž‘›£¦–˜—°šÁ Â¶–ºŠŒó©“£¬£Ÿ©J½—°š¤–Ý©¯Ž‘±ŸŒŸšF“—»šÁ ›£ FµŒ³£ÌÅ ä– ¨½©J ³Œ®–Œ³¨¿¢¾–˜—»šÁ HÄ ³”–
𠓐 –·©¯’»’ª›¸ÓŒIFӶ琛£À¥ KD̗™›”ŽÓ£³ŒÄ©¯Ž‘›š¤Ž M®–ß”Ž‘Œ std::sort ›£àŽŸ—» ¨ —˜’ש“£ë޳–î©“š
ÛÜÒ F«©“£IF ’­— ¬£Ÿ©“£KJ϶Ÿ”š ±
–˜—š¤Žß—°š –ºŠŒ ³ FJ Â¶®–ºŠŒÏ¶Ä”𠱬–˜—™›š sort –ºŠ©¯–Ï—˜Žß– ³Œ FµŒ š ŒIF«Å ä–
©¯’°’§›¸ÓŒIF ϖºŠ›”ÚÁ“Š
– ±Ÿ›¨¿¢©“£³Œß–ºŠŒžŒ ±³—™Œ³š X± J Â¶ Jڐ›”£ sort ¶Ÿ” 𠱬–˜—î›š ¸¹—»–ºŠÝ–ºŠ©¯–ëÂ¶ std::sort Hî¸ÈŠ¥—™±¬ŠÝŠ©¯Ž
–ºŠŒÀ ŽÑ©“¨ ŒÓ¢¤£³Œ ੓
š F ¢ “޳–±Ä›
š F“—˜–˜—™›š¤Ž®©“
š F ±Ä©“š ³Œ”Ž‘GŒ F ©ä¶Ÿ–Œ³£ include<algorithm> M¥Å
›£à–ºŠ¥—˜Ž Œ ڌ³£Ÿ±³—˜Ž‘Œ ‹—˜–Õ—˜Ž FµŒ¬ŽŸ—»£Ä©« ¦’§Œ HÄ ¬”–Õš “––˜£¬—™±¬–ºE’ J®š ŒÄ±ŸŒ¬Ž³ŽÑ©“K£ J M®–”Ž‘Œ¹¢ ›—°š¤–Œ³£à—»š ±³£ŸŒ
¨ ŒŸš¤– H ++pM ©¯Žë–ºŠŒß›š¤E’ J ³¢ Œ³£Ä©¯–˜—î›š ›šó¢ ›—»š¤–ŒŸ£¦Ž HÄ©¬¢©“£¦–¶Ÿ£Ÿ›¨ —»š —»–˜—™©¯’•— ©¯–˜—™›šœ©“
š F ©¯Ž³ŽŸ—§Á›š
¨ ŒŸš¤– Ȑ¶㱟›” £¦Ž‘Œ M¥Å ×
¶ J ›” ŽÄ” ±Ÿ±ÄŒŸGŒ F —°š Fµ›—°šÁ¿Ž‘ Jڐ›”£ÓŽ‘›£¦–˜—°šÁ¹¶Ÿ”š ±³–˜—î›š Š©¯Ž –ºŠŒ ¢ “ –Œ³š¤–˜— ©¯’
^ Â¶ë ¸Ó` ›£ ‘—°šÁã¶ç›£®±Ÿ›š¤–î©“—»š ŒŸ£¦Ž¿–ºŠ©¯
– Fµ®š “–ϐ ŒŸ££Ÿ©“
š Fµ›¨ ©µ±Ÿ±ŸŒ³Ž³Ž HŒŸŒÀ©¯’­Ž‘ ŒŸ±¬–˜—™›š Å ¥Å M¥Å
ΠɟÍîΠɟËÂÖÚБáò٬БáÜɳصèÚÐçÍ
Ÿ Œ ”Ž‘ŒGF – FµŒ³–Œ³£¬¨ž—°š Œ –ºŠŒ ¸ÓŒÄŒ F«©J H ›šF«©J
ÅÌśÅ
”šF«©JM Â¶ ©“š JÝÁ›— D¥ŒŸšF«©¯– Œ‘Å ›”œ¨½©Jß¶‘›£½Œµ©“¨¿¢¾’§Œ ‘𠐛¸ –ºŠ©¯–ë–ºŠŒ 댳£¦’•—»š ¸ ©¯’»’
±Ä©“¨½Œ Fµ›¸¹šœ›š
 D¥Œ³¨ ³Œ³£
ï ¬”–ոȊ©¯–‹¸ ©¯ŽÓ–ºŠŒâ¸ÓŒŸŒ F«©J H ä–Õ¸ ©¯Žà©Ý‰ÕŠ¥”£¦Ž F«©JµÅ M
£¿¸ÈŠ©¯–ï—˜Žã–ºŠŒà¸ÓŒŸŒ F«©J Â¶â–ºŠŒ –ºŠ ©“š š — D¥Œ³£¦Žç©“K£ J Â¶ë–ºŠŒ ¸¹—˜ŽŸŽ ±Ÿ›š›¶çŒIFµŒ³£Ÿ©¯–˜—™›š Ȗó ³Œ
±ŸŒ³’§Œ‘ ³£Ÿ©¯–ŒIF ›š ”ÚÁ›”Ž³– H ”—»–Œ © FµŒ ”¡©¯–Œ¬’ J ò—»–ò¸¹—˜’°’‹ ³Œ © ©¯–˜”£ F«©JµÅ M
Exercise 89
±´©“š
H ›šF«©J ÅÌśŠ” š –Ž
Å ” ±³Š ©œŽ‘Œ¬– —»Ž
©KM Õ
‰ ŠŒÀ–î©¯Ž —˜Ž¿–ó¸¹£¬—˜–Œž© ¢¤£³ŸÁ›£Ÿ©“¨ –ºŠ©¯–됛”–ñ¢¤”–ºŽ–ºŠŒ¸ÏŒÄŒ F«©J
F«©JM Â¶®© Á›— DôŒ³š —»š¥¢¤”– F«©¯–Œ‘Å
XFµŒ³š¤–˜— ¶ J ©œŽ‘Œ¬– Â¶½ŽÄ”¡ ¦–î©¯Ž ‘Ž – ¸ÈŠ¥—î±¬Š J ›” ±´©“š £³ŒGF“” ±ŸŒÝ–ºŠ¥—˜Ž
𠐓– ”š — ” Œ ®Â¶ ±Ä›”£¦Ž‘Œ ß ¬”–®©¯’°’·—»šF“— D̗NF“”¾©¯’òŽÄ”¡ ¦–î©¯Ž ‘Ž Ž³Š›”’ F ³Œ½ŽŸ¨½©¯’°’ HŽ‘ ŽŸ¨ ©¯’»’
–ºŠ©¯–ß–ºŠXŒ J ±Ÿ›”’ F ŸŒÝ£³ŒÄ©¯’•— ŒIF ¸È—»–ºŠÝ¶‘Œ³¸ ’•—»š Œ¬Ž Â¶ ±Ä FµŒ M¥Å ä–À—˜ŽœÂ¶ ±Ÿ›” £¦Ž‘Œž¢ “޳ŽÄ—™ ¦’ªŒ
¶ç›£½© ŽÄ”¡ ¦–î©¯Ž —»š J ›” £óŽ‘Œ³–▝Ý£³ŒGF“” ±ÄŒ –œ“–ºŠŒ³£óŽŸ”¡ ¦–î©¯Ž ̎çÅH —˜–ºŠ›”–ÏÁ›— D̗»šÁ ©“¸Ó©J
©“š J –ºŠ¥—»šÁ ·›š ŒàŽŸ”¡ ¬–î©¯Ž –ºŠ©¯– Jڐ›” ±ÄŒ³£¦–î©“—»š¤’ Jžš ŒÄIŒ F —˜Žã– FµŒ¬–Œ³£¬¨ —»š Œà¸ÈŠŒ¬–ºŠŒ³£ß©ÀÁ›— D¥Œ³š
Jڌĩ“£À—»ŽÀ© ’ªŒÄ©¬¢ Jڌĩ“£ M¥Å
M
¬£ —˜–Œ ©À¢¤£³ŸÁÌ£Ÿ©“¨ perpetual_calendar.C –ºŠ©¯–·£³ŒÄ© F¯Ž®© F«©¯–Œ·¶Ä£³›¨ –ºŠŒÀ—»š¥¢¤”–Ï©“šF
›”–ñ¢¤”–ºŽ¿–ºŠŒó±Ÿ›£¬£³Œ³Ž™¢ ›šF“—»šÁ ¸ÓŒÄŒ F«©JµÅ½‰ÕŠŒ £Ä©“šÁ«ŒóÂ¶F«©¯–Œ¬Ž –ºŠ©¯– –ºŠŒã¢¤£³ŸÁ›£Ÿ©“¨ ±Ä©“š
¢¤£³‘±ŸŒ¬Ž³Ž Ž³Š›”’ F½Ž³–î©“£¦–Óš Ý’ש¯–Œ³£ –ºŠ©“š «©“š ”¡©“£KJ H ›šF« ©JM¥Åœ‰‹ ŠŒà¢¤£³ŸÁÌ£Ÿ©“¨
Ž³Š›”’ F ±¬ŠŒŸ± ë¸òŠŒ³–ºŠŒ³£Ï–ºŠŒ —»š¥¢¤”– —˜ŽÓ© ’§Œ Á¥©¯’ F«©¯–Œ ‹©“šF — ¶È𠐓– £³Œ ŒŸ±¬– —˜–îÅ š Œ µ©“¨¢¾’ªŒ
£¬” š Â¶¿–ºŠŒÏ¢¤£ŸŸÁ›£Ÿ©“¨ ¨ž—°Á›Š«–·’ªÌ ž’•— ôŒ–ºŠ¥—˜ŽÑÅ
day =? 13
month =? 11
year =? 2007
Tuesday
‰ À޳–˜£¬” ±¬–˜” £³Œ Jڐ›”£·¢¤£³ÄÁ›£Ÿ©“¨ ¨¢¾’ªŒ³¨ ŒŸš¤–ï–ºŠŒàŽŸ”¡ ¬–î©¯Ž ̎‹¶Ä£³›¨
¢¤”–·–ºŠŒã¢¤£ŸŸÁ›£Ÿ©“¨ –ŸÁ«Œ¬–ºŠŒŸ£ ¶Ÿ£³›¨ –ºŠŒ¬Ž‘Œò¶Ÿ” 𠱬–˜—š¤ŽçÅ
©KM ©¯ŽÕ¶Ÿ” 𠱬–˜—î›š¤Ž ò©“šF
^
`I^
`
Exercise 90 ”—»’ F ¼
© ’•—™ ³£Ÿ©“£KJ
¹£³ŸÁ›£Ÿ©“¨
©“šF ¹
£³ŸÁÌ£Ÿ©“¨
¶Ÿ£Ÿ›¨ ¹
£³ŸÁÌ£Ÿ©“¨
Å
›š ÚJ ›”£ ¢¾’ª©¯– ¶ç›£¬¨ ¶Ÿ£Ÿ›¨ –ºŠŒ ’ªŒ¬Ž math.h ©“šF math.C —»š
ôÅ ‘Ž Œž–ºŠ¥—»Ž ’•—™ ³£Ÿ©“£KJœ– «Á Œ³š Œ³£Ä©¯–ŒÝ©“š ŒÚŒÄ±³”–î©« ¦’ªŒÀ^ ¢¤£³ Ÿ`IÁÌ^ £Ÿ©“¨ `
Exercise 91
©KM ¨¿¢¾’§Œ³¨½Œ³š¤–Ó–ºŠŒ ¶‘“’°’§›¸¹—»šÁ⶟” 𠱬–˜—î›š ©“šF –Œ¬ŽŸ–Ó—»–îÅ ›” ¨½©J ¯© Ž³ŽŸ”¨½ŒÀ–ºŠ©¯– –ºŠŒ®– J¦¢ Œ
double ±Ä›¨¢¾’•—Žã¸È—»–ºŠó–ºŠŒ ޳–î©“šF«©“£ F
‹Ž‘ŒŸŒ ŒŸ±¬–˜—™›š Å Å ôÅ߉ՊŒ ¶Ä”𠱬–˜—™›š
—»Žž›š¤E’ J½£³Œ ”—»£ŸIŒ F – ¸Ó›£ ݱЛ£¬£³ŒŸ±¬–º’ J ϗ ¶À–ºŠŒßš Œ´©“£³Œ¬Ž³–Ï—»š¤–Œ™Á¥Œ³£ —»Ž »— š –ºŠŒ D ©¯’­”¡Œß£Ÿ©“^ šÁ« Œ `
Â¶¿–ºŠŒ– JÑ¢ Œ int Å
// POST : return value is the integer nearest to x
int round ( double x );
M Õ
‰ ŠŒÏ¢“޳–±Ÿ›šF“—»–˜—š Â¶¿–ºŠŒÈ¶Ÿ”š ±³–˜—š FµÌŒ³Ž¿š “– ŽÑ©J ¸òŠ©¯–òŠ©¬¢«¢ Œ³š¤Ž — ¶¿–ºŠŒ³£³Œ ©“£³Œ –˜¸Ó
š Œ´©“£³Œ¬Ž³–·—°š¤–Œ™Á«ŒŸ£¦ŽçÅ ¥¢ ŒÄ±³— ¶IJ –ºŠŒ ŸŒ¬Š©D̗£ Â¶ Jڐ›”£¿—»¨¢¾’ªŒ³¨½Œ³š¤––˜—î›š —»š –ºŠŒÓ¢ “޳–^ ±Ä›š \ `
F“—»–˜—š Â¶ Jڐ›”£ò¶Ÿ” 𠱬–˜—š Å
Ù ` èµè ÐÏèµÉ³Ù³áÜÐçÍäÐçËÂÛñʛ؏ʛÔÚì“ʛֵÍÕÔ×ֵصٟËÂÛÜʛؿËÂÊãËÂǵÉRYÚáÜÉ
^ ÍÂʛåÌÍäÐçÞ \ ` БصèßÐ èµÉ YÚØµÛñËÂÛÜʛØ
math.h
ËÂÊ
^ ÍÂʛåÌÍäÐ‘Þ \ `Äé ‹ÖµÛÜáÜèßÐÏáÜVÛ _µÍäÐçÍîì ÔÜÍÂÊ›Þ ËÂǵɳÒîÉ·Ë æ¹Ê YÚáÜɳҳí БصèÀÍÂɟæòÍÂÛñËÂÉÈì“ʛֵÍÕËÂɳÒîË
Ô×ֵصmath.C
ٟËÂÛÜÊ›Ø ÔÜÍÂʛÞðÐ `ïËÊ Ù¬Ð‘áñáËÂǵÉâáÜVÛ _µÍäÐÑ͝L
ì U“ÉŸÍÂÒîÛÜʛØóÊ›Ô ËÂǵÉÏÔ×ÖµØÚÙÄËÂÛÜʛØ
é
^ `
round
ÍÊ É³ÙÄË µ
Ö áÜɟÍ
Exercise 92 ‰‹Š¥—»ŽÀ—˜Žž©“𠐓–ºŠŒ³£ Hîš “
 –Ï–Ì “F — ±³”’²–VM › š ŒÏ¶Ÿ£Ÿ›¨
H ¹£³¥ ¦’ªŒ³¨
http://projecteuler.net/M¥Å
»— šF 𠩝˜– ”£Ÿ©¯’ š ” ¨½Ÿ Œ³£¦Ž a, b < 100 ¶‘›£ È
¸ Š¥—î±¬Š ab Š©¯Ž –ºŠŒ
’ש“£îÁ«Œ¬Ž³–±³£³“Ž³Ž®ŽŸ” ¨ HŽŸ”¨ Â¶ FµŒŸ±³—°¨½©¯’F“—§Á›—˜–ºŽNMôÅ Œ¬–㔎 ŽÑ©Jݔ ¢“¶Ä£³›š¤–ã–ºŠ©¯– 9999 —»Ž®š “–ã–ºŠŒ
©“š¤ŽŸ¸ÓŒ³£ÌÅ
£¬—˜–Œ ©½¢¤£³ÄÁ›£Ÿ©“¨ power_cross_sums.C –ºŠ©¯– ±Ä›¨¢¤”–Œ³Ž –ºŠŒ ŸŒ¬Ž³– a ©“šF b H—»–ºŠ¥—»š
£³Œ´©¯Ž‘›š ©« ¦’ªŒß–˜—»¨½Œ M¥Å ©“š J ›” ©¯’­Ž‘ šF󖺊Œ ŸŒ¬Ž³– a, b ” ¢œ– 1, 000
3.1.13 Challenges
Exercise 93 ‰‹ŠŒ ŽŸ—°¨¢¾’ªŒ¬Ž³–®±Ÿ›¨¿¢¤”–Œ³£Ý¨½ FµŒ¬’ –ºŠ©¯–¿—˜ŽÝ ³ŒŸ—»šÁ
ŽŸ–˜"
” F“—îGŒ Fœ—°š –ºŠŒÄ›£³Œ¬–˜—î±´©¯’౟›¨
µè ɟ˝ɟÍÂÞßÛÜØµÛÜÒî˝ÛÜÙ YÚØµÛñËÂÉ Ð‘Ö«ËÂʛޮÐçËÂʛØ
¢¤” –ŒŸ£ÝŽ‘±³—™Œ³š ±ŸŒ —˜ Ž –ºŠŒ ÐçáñÎÚÇ Ð _ ɟË
H
M¥Å ” ±¬Š ©“š ©“” –›¨½©¯–›š —»Ž
Σ Hñ¶ç›£ Œ µ©“¨¢¾’ªŒ Σ = {0, 1}M¥Å®‰ÕŠŒ³š —˜–¹Š©¯Ž © š —˜–Œ¿Ž‘Œ¬–Ӑ¶
FÒîµËäŒ ÐÑËÂɳš Ò ŒGF  D¥ŒŸ£ © š —˜–Œ
˝ÍäБصҝÛñ˝ÛÜÊ›Ø Ô×ֵصٟËÂÛñʛØ
Q Å ‰‹ŠŒ¿¨½©“—°šœ—»šÁÌ£³IŒ F“—™Œ³š¤– —˜Ž¿–ºŠŒ
δ:Q
Σ → Q.
œŒÀ±Ä©“š D‘—˜ŽŸ”¾©¯’­— Œâ–ºŠ¥—»ŽÕ¶Ä”𠱬–˜—™›šœ©¯ŽÕ¶ç“’»’ª›¸òŽ ¸ÈŠŒ³š ŒXD¥Œ³£ δ(q, σ) = q øӌ F“£Ÿ©“¸ ©“šœ©“£¬£³›¸
¶Ÿ£Ÿ›¨ ŽŸ––Œ q –žŽ³––Œ qÒîËäÈÐђªÍ©«Ë ŸÛÜØµŒ¬’ªå®
ŒIF ÒîË丹
Ð罗˜É –ºŠ σ Å
БٟٳɟεËÂÛÜØµå ÒîËäÐçËÂɟÒ
s Q ©“šFœ©ÝŽŸ”¡ ¦ŽçŒ¬– F Q Â¶
»
—
š
¯
©
°
’
’
E
J
ã
º
–

Š
³
Œ
³
£
ž
Œ
»
—
Ž
©
Å
—§Á›”£³Œ —°Á̔£³Œ FµŒî¢¤—î±³–ºŽ ©
¸¹—˜–ºŠœŽ³––ŒóŽ‘Œ³– Q = {0, 1, 2} ż‰ÕŠŒžŽ³–î©“£¦–˜—°šÁ ޳––Œž—˜Ž
—»
š F“—™±Ä©¯–GŒ F K J ©“š ©“£¬£Ÿ›¸ ±Ÿ›¨ —»šÁ —°š¶Ä£³›¨ 𠐛¸ÈŠŒ³£³Œ 禎šF–ºŠŒà©µ±Ÿ±ÄŒî¢¾–˜—»šÁ ޳––Œ¬Žë©“£³Œ ¨ ©“£ ôŒIF
¸¹—˜–ºŠ Fµ›”¡ ¦’ªŒ ±Ÿ—»£³±¬’ªŒ¬Ž Hšœ–ºŠ¥—˜Ž®±Ä©¯Ž‘Œ ò–ºŠŒ³£³Œ—˜Ž®›š¤E’ J ›š NŒ M¥Å
0
1
0
1
1
0
0
2
1
Figure 18:
FµŒ¬–Œ³£¬¨ž—°š —˜Ž³–˜—™±
š —»–Œ ©“”–›¨½©¯–›š H
M
݊J ±´©“š ¸ÓŒÝ±´©¯’»’ÈŽŸ” ±³Š ©“š ©“”–›¨ ©¯ –›š © ±Ÿ›¨¿¢¤”–Œ³£ ¨æ¹Ê̐ ͝Fµè Œ¬’ 댟±Ä©“” Ž‘Œó—»–·¢ Œ³£º ¶‘›£¬¨žŽ
© ı ›¨¢¤”––˜—™›š ¹š ©“¨ Œ¬’ J –ºŠŒò¶‘“’°’§›¸¹—»šÁ Á›— D¥Œ³š ©“𠗰𥢤”–
БٳٟwɟεËÂÒ Σ H Íš É —˜™–ÉŸŒÀ
ٟËŽçÒ Œ ”¡Œ³š ±ŸŒ
Â¶ Ž J¯¨½ Ÿ“’²Žà¶Ä£³›¨ –ºŠŒ ©¯’ ¢¾Š©« ŸŒ¬– ΣM –ºŠŒ ©“”–›¨½©¯–›š Œ³—»–ºŠŒ³£
®›£
—˜–îÅ ‰ 
Fµ –ºŠ¥—˜Ž ¿–ºŠŒ ¸Ï›£IF w —»Ž ¢¤£³Ì±ÄŒ¬Ž³Ž‘ŒGF Ž J¯¨½ ³“’Ï KJ Ž J¯¨½ ³“’ Ž³–î©“£¦–˜—»šÁ —»š s Š݊Œ³š ŒXD¥ŒŸ£ –ºŠŒ
©“”–›¨ ©¯–›š —»Žà—»š Ž‘›¨ Œ ޳––Œ q ©“
š Fž–ºŠŒ š Œ – ŽIJ ¨ ³“’ —»Ž σ ¹–ºŠŒß©“”–›¨½©¯–›š ŽŸ¸¹—˜–±¬ŠŒ¬Ž¿–
޳––Œ q = δ(q, σ) Š݊Œ³š ©¯’»’ÕŽ J¯¨½ ³“’­Ž®Š© D¥Œó ³ŒÄŒ³š ¢¤£ŸÌ±ŸŒ¬ŽŸŽ‘ŒIF 㖺ŠŒ ©“”–›¨½©¯–›š —»ŽžŒ³—˜–ºŠŒŸ£
—»š ©“š ©µ±Ä±ŸŒî¢¾–˜—°šÁ ޳––Œ q F H™—»š ¸ÈŠ¥—î±¬Š ±´©¯Ž‘Œ w —˜Ž ©µ±Ÿ±ÄŒî¢¾–IŒ FKM ®›£ —°š © 𠐛𠴩µ±Ä±ŸŒî¢¾–˜—°šÁ
޳–– Œ q Q \ F H™—»šœ¸ÈŠ¥—™±¬Š ±´©¯Ž‘Œ w —˜Ž £³Œ ŒÄ±¬–IŒ FKMôÅ
›£ Œ µ©“¨¿ ¢¾’§Œ ¸òŠŒŸš ¸ÓŒ ¶çŒŸGŒ F –ºŠŒ¼©“”–›¨½©¯–›šðÂ¶ —°Á›” £³Œ ¸¹—˜–ºŠ –ºŠ Œ ¸Ó›£ F w =
0101 ȖºŠŒ Ž‘Œ ”¡Œ³š ±ŸŒ Â¶Ž³––Œ¬Ž–ºŠ©¯–â©“£³Œ ŸŒ³—»šÁ D̗˜ŽŸ—»–IŒ F —»Ž 0, 0, 1, 2, 2 ŠӐ›š¤ŽçŒ ”¡Œ³š¤–ºE’ J w —»Ž
£³Œ ŒŸ±¬–GŒ F«Å áÜБصå›Ö Ðçå›É
‰‹ŠŒ L Â¶À–ºŠŒ ©“”–›¨½©¯–›š —˜Žß–ºŠŒ Ž‘Œ³–¿Â¶ž©µ±Ä±ŸŒî¢¾–GŒ FݸӐ›£ F¯ŽçÅ ‰ÕŠ¥—˜ŽÀ—˜Žž
© H™Á¥Œ³š
Œ³£Ÿ©¯ ’°E’ J —°š š —˜ –Œ M󎟔¡ ¦ŽçŒ¬–âÂ¶ ΣçÅ Œ¬– Ž–˜K£ J – FµŒ¬–Œ³£¬¨ž—°š Œß–ºŠŒÀ’ש“šÁ›”¾©›Á«ŒžÂ¶–ºŠŒ ©“”–›¨½©¯–›š
—»š —°Á̔£³Œ Å
ä– –˜”£¬š¤Ž®›”–ò–ºŠ©¯–·–ºŠ¥—»Ž¿—»Ž 𠐓–·ŽŸ” ±¬Š © ŽŸ–˜£Ÿ©“—°Á“Š«– ¶ç›£¬¸ ©“£ F –Ž
©“
š F J ›” š ŒŸGŒ F –ºŠŒ £¬—§Á“Š«–
N— FµŒ´©«Å Hç‰ œ ³ŒóŠ›š Œ¬Ž³– à¸ÓŒ Š© F –ºŠŒ — FµŒÄ© £¦Ž³– ©“
š F –ºŠŒŸš ±Ä©“¨ Œ ”¯¢ ¸¹—˜–ºŠ ©“š ©“”–›¨½©¯–›š
–ºŠ©¯–룳Œ´©¯’­— Œ¬Žž—»V– M¥Å œŒÝ±¬’ש“—»¨ –ºŠ©¯–à–ºŠŒ ©“”–›¨ ©¯–›š ©µ±Ÿ±ŸŒ™¢¾–ºŽ Œ µ©µ±¬–º’ J ©¯’°’¹–ºŠŒó¸Ó›£ F¯Žó–ºŠ©¯–
©“£³Œ F“— D̗»ŽŸ—™ ¦’ªŒ K J 3 — ¶ J ›” —°š¤ –Œ³£¢¤£³Œ¬–à–ºŠŒ ¸Ï›I£ F ©¯Ž © ¬—»š ©“K£ J š ” ¨½ ŸŒ³£ Hî¸ÈŠŒ³£³Œó–ºŠŒ½Œ³¨¿¢¾– J
¸Ó›£ F —»Ž —°š¤–Œ³£¢¤£³Œ¬–GŒ F ©¯Ž 0MôÅ ›£ Œ µ©“¨¢¾’ªŒ 0101 —˜Ž –ºŠŒ ³—»š ©“K£ J 𠔍 ³Œ³£
0 23 + 1 22 + 0 21 + 1 20 = 5,
“© šF󗰚FµŒŸŒGF 5 —˜Žà𠐓– F“— D̗˜ŽŸ— ¦’ªŒ® XJ 3 HÄ©“šFžŠŒ³š ±ÄŒ £³Œ ŒŸ±¬–ŒGFKM¥Å š ¶ç©µ±¬– HÄ©“šF󖺊¥—»Žà—˜Ž –ºŠŒ ŒXJ
– ÞߖºŠÊ Œ¿
è ¢¤£³ÌÂ¶ Â¶ ›” £ ±¬’ש“—»¨bM 떺ŠŒžŽ³––Œ½©ä¶Ÿ–Œ³£ ¢¤ £³‘±ŸŒ¬Ž³ŽÄ —»šÁ w —»Ž –ºŠŒ½›š Œžš ”¨ ³Œ³£ŸŒIF ¸¹—˜–ºŠ
w
3Å
›” ±´©“š –ºŠŒ³£³Œ˜¶ç›£³ŒóŽÑ©JݖºŠ©¯–â–ºŠŒ
Â¶ —§Á›”£³Œ —˜Žó©œ±Ä›¨¢¤”–Œ³£ H—»–ºŠ ©
¬” —˜’­– ™—»š ¢¤£³ŸÁÌ£Ÿ©“¨ M –ºŠ©¯– ±´©“š Ž‘“’ D¥Œ –ºŠŒ FµŒŸ±³—»ŽŸ—î›š ¢¤£³¥ ¦’ªŒ³¨ Â¶ó±¬ŠŒÄ± ‘—»šÁ½¸ÈŠŒ¬–ºŠŒ³£ ©½Á›— D¥Œ³š
𠔍 ³Œ³£ —˜Ž F“— D̗»ŽŸ—™ ¦’ªŒß KJ Å
œŒ ©“£³Œ ޳’ª›¸ãE’ J ©¬¢«¢¤£Ÿ‘©µ±¬Š¥—»šÁ –ºŠŒ ©µ±¬–˜”¾©¯ ’â ±¬Š©¯’»’ªŒ³šÁ«ŒçÅ ›£ ŒXDôŒ³£KJ ŽŸ”¾ ¦Ž‘Œ¬– L Â¶ {0, 1}
¶Ÿ£Ÿ›¨ –ºŠŒ ¶ç“’»’ª›¸È—°šÁ¼’­—»Ž³– ŒŸ—˜–ºŠŒ³£ š F ©
–ºŠ©¯– Š©¯Ž L ©¯ŽÝ—˜–ºŽ ’ש“šÁ›”¡©›Á«Œ ›£ ¢¤£³ D¥Œ
\ –ºŠ©¯–ÀŽŸ”¡±¬Š ©
±´©“š š “–󌯗˜ŽŸ– Hî¸ÈŠ¥—î±¬Š¼¸Ó›”’ F Ž³Š›¸
±Ÿ›¨¿¢¤”––˜—™›š ©¯’¢ ›¸ÓŒ³£ M¥Å
ŒXD¥Œ³š š ” ¨½ ŸŒ³£óÂ¶
–ºŠ©¯–
Œ³£Ÿ“Ž
©“£³Œ ’•—»¨ —˜–ŒGF —»š –ºŠŒŸ—»£
©KM L = {w
{0, 1} | w Š©¯ŽÀ©“š
M L = {w
{0, 1} | w —»ŽLF“— D̗»ŽŸ—™ ¬’§Œ® KJ 5 ¸ÈŠŒ³šœ—»š¤–Œ³£¢¤£³Œ³–ŒIF ©¯ŽÀ© ¬—°š ©“£KJ š ” ¨½ ŸŒ³£ }
± M L = {w
{0, 1} | w Š©¯Žà¨½›£³Œ
FKM L = {w
{0, 1} | w Fµ‘Œ¬Ž 𠐓–ⱟ›š¤–î©“—°š
Œ³£³“Ž¿–ºŠ©“š
©“šF ©“š ŒXD¥Œ³šœš ”¨½ ŸŒ³£ Â¶ß›š Œ¬Ž }
›š Œ¬Ž }
–ºŠ¥£³ŒŸŒž±Ÿ›š¤Ž‘ŒÄ±³”–˜— D¥Œó›š Œ¬Ž }
Exercise 94
”"Fµ ‘” ¢¤” ’ªŒÓ—˜Ž‹¢ “Ž‘ŒGF󐛚 ©Á›£¬— FžÂ¶ 9 9 ±ŸŒ¬ ’°’²Ž Ο”¾ F“— D̗NFµŒGF —°š¤– Ž ”¡©“£ŸŒ
³ µ Œ¬Ž½Â¶ 3 3 ±ŸŒ³’»’­Ž½ŒÄ©µ ±³ŠÅ ›¨½Œ Á›£¬— F ±ŸŒ³’»’­Ž ©“£³Œ ©¯’­£ŸŒÄ© FJ ’»’ªŒIF KJ 𠔍½ ŸŒ³£¦Ž ŸŒ¬–˜¸ÓŒŸŒ³š 1
©“šF 9 –ºŠŒ Á«‘©¯’¹—˜Ž – ’»’¹–ºŠŒž£ŸŒ³¨½©“—°š —»šÁ ±ÄŒ¬’»’­Ž½ KJ 𠔍 ³Œ³£¦Ž ³Œ¬–˜¸ÓŒŸŒŸš 1 ©“šF 9 —»š ŽÄ” ±¬Š
© ¸ ©J –ºŠ©¯– ¸¹—»–ºŠ¥—»š ŒÄ©µ±³Š £Ÿ›¸ 㱟“’•”¨ š ⩓šF ³ Â¶ –ºŠŒó±Ÿ›¨¿¢¾’§Œ³– ŒIF Á›£¬—NF ãŒXD¥Œ³£KJ½š ”¨ ³Œ³£
Ì±Ä±³”£¦Ž Œµ ©µ±¬–º’ J ›š ±ŸŒ‘Å Œ³£³Œ—˜Žß©“š Œµ ©“¨¿¢¾’§Œ Â¶À© ” Fµ ‘” ¢¤” ’ªŒ
1
5
7 4
3 2
9
9
6 7
8
4
2
1
9
7 3
4
7 3
6 5
2
5
6
4
ÉIP«Ð‘ÙŸÂËšÝáñì Ž‘“Ê›’ صDÌɗ°šÁÀ–ºŠŒ¹¢¤” ’§Œ ¹›š ŒÏ¨½©J®–˜£KJ®– FµŒIF“” ±ÄŒ‹¶Ä£³›¨ –ºŠŒ©¯’•£³ŒÄ© FJ ’°’§ŒGFÀš ” ¨½ ³ŒŸ£¦Žâ–ºŠ©¯–
𠔍½ ŸŒ³£ó—»Ž ©œ±Ä©“šF“— F«©¯–Œâ¶‘›£ © ŽÄ”—˜–î©« ¬’§Œ Œ³¨¢¾– J ±ÄŒ¬’»’×Å ‰ÕŠŒ³š –ºŠ¥—˜Ž®š ”¨½ ŸŒ³£ó—»Ž
’»’ªIŒ F󗻚¤– –ºŠŒ ±ŸŒ¬’°’ Ó©“
š F –ºŠŒ FµŒGF“” ±¬–˜—™›š ¢¤£³Ì±ÄŒ¬Ž³Ž —»Ž¿£ŸŒî¢ ŒÄ©¯–ŒGF«Å ‰ÕŠŒ³£³Œ ©“£³Œß–˜¸Ó ŽŸ—»–˜”¡©¯–˜—™›š¤Ž
¸ÈŠŒ³£³ŒÓŽŸ”¡±¬ŠžL
© FµGŒ F“” ±¬–˜—™›š¿¶ç›£ –ºŠŒë±ÄŒ¬’»’Ú—»š £³›¸ r ±Ä“’­” ¨žòš ÊÑcæ ©“Ê›šÔÜËÂFëɟØÝ
š ”ÇÚ¨½
Œ³£ êònҝБ—˜Û܎Õ
ÐKU“ ŸÉ
è½¢Ë©“Ê £¦ì“–˜—™Ê›±³Ö ”’×˝©“Ç £¦Ðђ J Ë
š ʛFÀ
›¸Èɟá܎®
¢«¢¤ÇÚ£ŸÐ琑Ë©µÉ U“±¬ÉŸŠ ͹H ÍÂɟޮБÛÜØµÒ³íôǵʦæ¹É U“ÉŸÍòÛÜÞÀεÍÂÊ _ Ð _ÚáÜÉÌí“Þ¿ÖÚҙË
æ ŒÄ©¯ÇµIŽ ɳJ Ø ©“ì“
֞¶‘Çڐ“XÐ ’°U“’§Éã
ÛÜÞߖºŠÛÜØÚŒ Ðç¤
ËÂɟŠè Œ³£¦ËÂǵ’§‘ÉÓ± ÛÜÞÀÎ “Ê›’•ҝ¨ ÒÛ _ Œ³ŽáñÉÌí¯©¬æ·
_ ÉÓËÂǵÉÏËîÍÂÖ«ËÂÇ
M¥Å
¥Å
Å
’»’ š ” ¨½ ³ ŒŸ£¦Ž F“—˜Ž³–˜—°š ±¬– ¶Ä£³›¨ n ©¯’•£³ŒÄ© FJ ©¬¢«¢ ŒÄ©“£ÀŽ‘›¨ Œ³¸ÈŠŒ³£ŸŒß—»š –ºŠŒßŽÑ©“ ¨ Œ £Ÿ›¸ 㱟“’
” ž
¨ š Ӑ›£ ³ µÅž‰‹Š¥—»Ž¿š ŒÄ±ŸŒ¬Ž³ŽÑ©“£¬—˜’ J ¨½
ØôÖµŒÄÞ©“š¤_ Ž
ɟÍ–ºÒ Š©¯– –ºŠŒž±ÄŒ¬’»’ Š©¯Ž¿– ³Œ ’»’ªIŒ F󸹗»–ºŠ n
ŽŸ—°š ±ŸŒ¸ÏŒ Š©D¥Œ Œ¬’­—°¨ž—°š ©¯–ŒIFÝ©¯’°’ “–ºŠŒ³£
©¯Ž —»¨¢“Ž³ŽŸ—™ ¬’§Œ‘Å
’»’ò“–ºŠŒ³£ ±ÄŒ¬’»’­Ž —°š –ºŠŒ Žç©“¨ Œ®£³›¸ ¿›£ž—°š –ºŠŒ Žç©“¨ Œ ±Ÿ“’•”¨ š ›£ —»š –ºŠŒž ŽÑ©“¨ Œ Ÿ ©“£³Œ ©¯’­£³Œ´© FJ ‘𠐛¸¹š¼š “–Ó– ±Ä›š¤–î©“—»š n ŠٳɳáÜáÜÒ Á¥©“—°š –ºŠŒ ±ŸŒ¬’°’‹Š©¯ŽÀ– ŸŒ ’°’§ŒGF KJ n
–ºŠŒ³š ՎŸ—°š ±ŸŒÏ¸ÏŒãŠ©D¥Œ Œ¬’•—»¨ —»š ©¯–ŒIFž©¯’»’ “–ºŠŒ³£
¶ç›£â–ºŠŒÏ𠔍 ³Œ³£ n ¸¹—˜–ºŠ¥—°šÝ–ºŠŒÏ£³›¸
±Ä“’­” ¨žš Ӑ›£ Ÿ µÅ
\ £¬—˜–Œ ©Ý¢¤£³ÄÁ›£Ÿ©“¨ sudoku.C –ºŠ©¯–ß–î© ôŒ¬Žœ©¯Ž —»š¥¢¤”– © ”"Fµ ‘” ¢¤” ’§Œ½—»š ¶ç›£¬¨ Â¶ ©
Ž‘Œ ” Œ³š ±ÄŒßÂ¶ 81 š ” ¨½ ³ŒŸ£¦Ž ³Œ¬–˜¸ÓŒÄŒ³š 0 ©“šF 9 H–ºŠŒãÁ›£¬— Fߚ ”¨ ³Œ³£¦ŽÓÁ›— DôŒ³š £³›¸ KJ®£³›¸ ‹¸ÈŠŒ³£³Œ
0 —°šF“—î±´©¯–Œ¬Ž¿©“š ŒŸ¨¢¾– J ±ŸŒ¬’°’ M¥Å ‰ÕŠŒãš ” ¨½ ŸŒ³£¦Žâ¨ž—§Á“Š«–ò ŸŒàŽ‘Œî¢©“£Ä©¯–ŒIF KJ ¸ÈŠ¥—˜–Œ¬Ž™¢©µ±ŸŒ¬Ž ‹Ž‘ß–ºŠ©¯–
–ºŠŒ ” Fµ ‘”󢤔 ’§ŒÈ¶Ÿ£Ÿ›¨ ©« Ÿ D¥Œž±Ä›”’ FݱЛš D¥Œ³š —îŒŸš¤–º’EJ ³ŒžŒŸš ±Ÿ FµŒGF ’­— ôŒ –ºŠ¥—»Ž¿—°š © ’§Œ
0 0 0
0 5 0
0 0 6
1 0 0
0 9 0
7 0 0
7 4 0
0 3 2
9 0 0
4 0 0
0 2 0
0 0 0
8 0 0
0 0 0
0 0 9
0 0 0
0 1 0
0 0 5
0 0 4
7 3 0
0 6 5
0 0 7
0 2 0
0 0 4
3 0 0
0 6 0
0 0 0
‰ ŠŒ ¢¤£³ÄÁ›£Ÿ©“¨ Ž³Š›”’ F®š ›¸ –˜£KJ –žŽ‘“’EDôŒ–ºŠŒ ¢¤” ’ªŒÀ KJ ”ŽŸ—°šÁ ›š¤’EJ󖺊Œ –˜¸Ó ¤ŠŒ³£¦’§‘±
‹
“’•¨ Œ¬Ž î– J¦¢ Œ FµŒIF“” ±³–˜—î›š¤Ž ¶Ÿ£³›¨ ©« ³ D¥Œ‘Åœ‰‹ŠŒ ›”–ñ¢¤”–ÓŽ³Š›”’ F ³Œ © H°¢©“£¦–˜— ©¯’»’ J M ±Ä›¨¢¾’ªŒ¬–ŒIF
Á›£¬— F –ºŠ©¯–ò—»Ž ŒŸ—˜–ºŠŒ³£ –ºŠŒÀŽ‘“’•”–˜—™›šœ–ž–ºŠŒã¢¤” ’§Œ ›£À–ºŠŒ¿”š — ” Œ Hî¸ÈŠJ M ¢©“£¦–˜—™©¯’ Ž‘“’•”–˜—™›š
—»š ¸ÈŠ¥—î±¬Š š  ¤ŠŒ³£¦’ªÌ±
“’•¨ Œ¬Ž î– J¦¢ Œ FµŒIF“”¡±¬–˜—î›š¤Ž ©¬¢«¢¾’ J ©“š J ¨½›£³Œ H´©›Á¥©“—»š Œ³¨¢¾– J ±ÄŒ¬’»’­Ž
Ž³Š›”’ F ³Œ—»
š F“—î±´©¯–IŒ FÝ XJ½–ºŠŒF“—°Á̗˜– 0M¥Å
š –ºŠŒ®©« ³ D¥Œ Œ µ©“¨¢¾’ªŒ ò–ºŠŒ ›”–ñ¢¤”–ϐ¶®© ±Ÿ›£¬£³ŒÄ±¬– ¢¤£³ŸÁ›£Ä©“¨ ¸¹—˜’°’‹ ³Œ –ºŠŒÀŽ‘“’•”–˜—™›š
3 9 2
8 5 7
1 4 6
1 8 5
4 9 6
7 3 2
7 4 6
1 3 2
9 5 8
4 7 9
5 2 8
6 1 3
8 5 1
6 7 3
2 4 9
6 2 3
4 1 9
8 7 5
2 8 4
7 3 1
9 6 5
5 6 7
9 2 8
3 1 4
3 9 1
5 6 4
2 8 7
›£ ³£ Œ´© F“—»š Á½–ºŠŒ®—»š¥¢¤”–ö쳐›¨ © ’§Œ —»–à±Ä©“š ŸŒ ±Ÿ›š D¥Œ³š —™Œ³š¤–떝 £³ŒIF“—°£³ŒŸ±³–ë–ºŠŒ ޳–î©“šF«©“£ F
—»š¥¢¤”– –œ–ºŠŒ ’ªŒ ±Ä›š¤–î©“—»š —°šÁ –ºŠŒß¢¤” ’§Œ F«©¯–î©«Å ›£ ±¬ŠŒŸ± 痻šÁ ¸òŠŒ³–ºŠŒ³£ ©“š J ¤ŠŒ³£¦’§‘±
“’•¨ Œ¬Ž î– J¦¢ Œ FµŒIF“”¡±¬–˜—î›š¤Ž½©¬¢«¢¾’ J ◘–À±´©“š ³Œ ”ŽçŒ˜¶Ÿ”’È– ¨ ©“—»š¤–î©“—°š HÄ©“šF ” ¢ F«©¯–ŒNMÀ¶‘›£Ý©“š J
–˜£¬—²¢¾’ªŒ (r, c, n) –ºŠŒ—°š›¶‘›£¬¨½©¯–˜—™›š ¸ÈŠŒ¬–ºŠŒŸ£ n —˜Ž ޳–˜—»’»’Õ©¢ “Ž³ŽŸ— ¦’ªŒ ±´©“šF“—NF«©¯–ŒÈ¶‘›£–ºŠŒ ±ÄŒ¬’»’ —»š
£³›¸ £
±Ÿ“’•”¨ 𠱑Å
›” ¸¹—˜’°
’ F“—»Ž‘±Ÿ D¥ŒŸ£–ºŠ©¯–ï¨ ©“š J "
” Fµ ç” ¢¤” ’§Œ³Žâ–ºŠ©¯–¹– JÑ¢¤—™±Ä©¯’°’EJ ©¬¢«¢ ŒÄ©“£ —»š š Œ³¸ÈŽ™¢©¬¢ Œ³£¦Ž
±Ä©“ɳš èµÛÜ ŸÖµŒ Þ Ž‘“’ D¥IŒ ÇÚFœ
š F ©“£³Œó–ºŠŒ³£³Œ˜¶ç›£³ŒÝŒÄ©¯IŽ J ÀŒ D¥Œ³š — ¶ –ºŠXŒ J ©“£³Œó’ª©« ŸŒ¬’§GŒ F ©¯Ž
Þß
ÐçÍÂK è J J ›” £ ¢¤£³ŸÁ›£Ä©“¨ ©“
›£
Å
Hint: ä–ò—˜Žß© FD̗˜Žç©« ¬’§Œ¿š “– –Ý³¢¾–˜—°¨ž— Œò¶ç›£žŒ ±Ÿ—š X± J ŠŒ³£ŸŒ ŽŸ—°š ±ŸŒ –ºŠ¥—˜Ž ¸È—»’»’ï›š¤’ J½’ªŒÄ© F
– ¨½›£³Œ ±Ä›¨¢¾’•—î±´©¯–IŒ F ©“
š F󌟣¬£³›£ §¢¤£³›š Œ ±Ÿ FµŒ‘Å — D¥Œ³šÝ–ºŠŒ D¥ŒŸK£ J ŽÄ¨½©¯’»’ô¢¤£Ÿ¥ ¦’§ŒŸ¨ ŽÄ— Œ ՎŸ”¡±¬Š
³¢¾–˜—»¨ — ©¯–˜—™›š¤Žà¸Ï›š – Š© D¥Œ®©ó𠐓–˜—™±ŸŒ´©« ¦’§ŒžŒ ŒŸ±¬–â©“š J¯¸ © JÚÅ
\ \
3.2 Recursion
ݗ°£ÀŽç©“š
¨ž—°£ÌÅ
â©Dô©“£¬—™©“š F“—–˜” ¨ 悔ŒÄ©“š —»šÁ
‰ÕŠ¥—˜ŽÓŽ‘ŒÄ±¬–˜—šÝ—°š¤–˜£³ “F ”¡±ŸŒ¬Žâ£ŸŒŸ±³” £¦ŽŸ— D¥ŒÕ¶Ÿ” 𠱬–˜—î›š¤Ž Ú¶Ÿ” 𠱬–˜—š¤ŽÏ–ºŠ©¯–F“—°£³ŒŸ±¬–º’ J ›£â—»š
F“—°£³ŒŸ±¬–º’ J ±´©¯’»’·–ºŠŒŸ¨óŽ‘Œ¬’ D¥Œ¬ŽÑÅ
›”¼¸¹—˜’°’·Ž‘ŒÄŒ –ºŠ©¯– £ŸŒŸ±³” £¦ŽŸ— D¥Œ ¶Ä”𠱬–˜—™›š¤Ž½©“£³Œ D¥Œ³£KJ
𠩝–˜” £Ÿ©¯’Õ—°š ¨½©“š Ý
J ŽÄ—˜–˜”¡©¯–˜—™›š¤Ž Ó©“šF –ºŠ©¯–Ó–ºŠŒX J½’ªŒÄ© F½– ±Ÿ›¨¢©µ±¬– ©“šF £ŸŒÄ© F«©« ¦’ªŒ
±Ä µF Œ ±¬’ª“Ž‘Œ – ¨ ©¯–ºŠŒ³¨½©¯–˜—™±Ä©¯’ ¶Ÿ”š ±³–˜—š µF Œ š —»–˜—š¤ŽçÅ œŒ ¸¹—˜’°’੯’­Ž‘ Œ ¦¢¾’ª©“—°š
Š›¸ £³ŒÄ±³”£¦ŽÄ— ¥D Œ¶Ÿ”š ±³–˜—î›š ±´©¯’»’­Ž ©“£³Œ ¢¤£³Ì±ŸŒ³Ž³Ž‘ŒIF 󩓚F Š›¸ £³ŒŸ±³” £¦ŽŸ—š ±Ä©“š Hš
¢¤£¬—°š ±³—²¢¾’ªŒ M ³Œ £³Œî¢¾’שµ±ŸŒGF ¸¹—˜–ºŠ —˜–Œ³£Ä©¯–˜—š К –ºŠŒ ŒŸšF ÚJ ›” ¸¹—˜’°’ Ž‘ŒŸŒ½–˜¸Ó¼©¬¢
¢¾’•—î±´©¯–˜—î›š¤ŽH Ž‘›£¦–˜—°šÁ ·©“šF “F £Ÿ©“¸¹—»šÁ϶Ÿ£Ÿ©µ±³–’²ŽNM –ºŠ©¯–µF Œ³¨ ›š¤ŽŸ–˜£Ÿ©¯–Œ –ºŠŒÓ¢ ›¸ÓŒ³£ ›£
£³ŒÄ±³”£¦ŽÄ—š Å
¸ÓŒ ©“£³Œ¸ÏŒ Å
3.2.1 A warm-up
)óБدì Þ®ÐÑËÂǵɳޮÐçËÂÛÜٳБáµÔ×ÖÚØµÙŸËÛÜʛصÒòÐÑÍÂÉÓØ ÐÑËÂÖ«ÍäБáÜáñì èµÉ YÚØÚɟè
íµÞßɬБصÛÜØµåëËÂÇÚÐç˹ËÂǵÉÓÔ×ֵص٠”£¦Î ŽŸáñ— ÉÌD¥í̌¬Ôג ÊÌJ ÍïÐçØ ì
ËÂÛÜʛؿËÂÊ
_ ÉòèµÉ YÚØµÉ³èßÐÑÎÚ΍ɬÐçÍÂÒ ÛÜØÛñËÂÒÃÊÑæ·Ø èµÉ YÚØµÛñËÂÛÜʛؤé [ ÊÌÍÕÉI£³PµŒŸÐ籟ÞÀ
í“ËÂǵÉòØ ÖµÞb_ ÉÄÍ
n
Ù¬ÐçØžÍÂɳٳ֫ÍÂÒîÛVU“ɳáñì_ ÉÏèµÉ YÚØÚɟè БҷÔ×ʛáñáÜÊÑæ·Ò³é
n!
n! :=
ÛñÔ
1,
ÜÛ Ô n 1 é
n (n − 1)!,
n>1
ê˜
Ø æ¹É Ù¬Ð‘Ø Ð‘áñÒÊ ÇÚÐXU“É ÍÂɟٳ֫ÍÂҝÛVU“ÉóÔ×ֵصٟËÂÛñʛØÚÒ óÐ Ô×ÖÚØµÙŸËÛÜÊ›Ø Þ®Ð³ì ٬БáÜá¹ÛñËÂÒîɳáÜÔºé Æ¹ÇµÛÜÒ¿ÛÜÒ
صÊÌËÂǵÛÜØµå ÉIP¥ÊÌËÂÛÜÙÌíÚҝÛÜØµÙ³ÉëБÔÜËÂÉŸÍ Ð‘áÜá˜íÚÐ Ô×ֵصٟËÂÛÜʛ؞٬БáÜá¾ÛÜÒ ÖµÒîË ÐçØ ÉIP¥ÎµÍÂɳÒîҝÛÜÊ›Ø ËÂÇÚÐçË Ù³Ð‘Ø ÛÜØóεÍÂÛÜØµÙ³ÛñÎÚáÜÉ
ÐçεΠɬÐÑÍßБدìôæ ǵɟ͝ɞÛÜØ ËÂÇµÉ Ô×ÖÚØµÙŸËÛÜÊ›Ø Ò ÒîÙ³ÊÌÎ ÉÌí¹Ð‘صè ËÂÇÚÐçË ÒÙ³ÊÌΠɞÛÜØµÙ³áÜÖµèµÉ³Ò¿ËÇÚɞÔ×ÖÚØµÙŸËÛÜÊ›Ø _ Ê èµì“é
¥ÛÜØÀÔªÐçٟˬí ˝ÇÚÛñÒÕèµÉ YÚØµÛñËÂÛÜʛؿÉIP«Ð‘ÙŸËÂáñìÞ®ÐçËÂÙäÇµÉ³Ò ËÂǵÉ
·ÉŸÍÉ·ÛÜҋÐÏÍÂɳֵٟ͝ҝVÛ U“É·Ô×ֵصٟËÂÛñʛØÀÔ×ÊÌÍïٳʛÞÀÎÚÖ«ËÂÛÜØµå
n!
Þ®ÐçËÂǵɳޮÐÑËÂÛÜ٬БáÚèµÉ YÚØµÛñËÂÛÜÊ›Ø ÔÜÍÂʛÞðÐ _ Ê U“ÉÌé
// POST : return value is n!
unsigned int fac ( unsigned int n)
{
if ( n <= 1) return 1;
return n * fac (n -1); // n > 1
}
·ÉŸÍÂɑíµËÇÚÉãÉIP¥ÎµÍÂɟҝҝÛÜʛØ
fac(n-1)
ÛÜÒ·Ð
£³ŒÄ±³”£¦ŽŸ— D¥Œž±´©¯’»’
ʛÔ
fac
é
S¼ÛñËÂÇ ÍÂɳٳ֫ÍÂÒÛ U“ɏÔ×ֵصٟËÂÛÜÊ›ØµÒ³í æ¹É¿ÇÚÐXU“ÉàËÂÇµÉ ÒÂБÞßÉàÛÜҝÒîÖÚÉ¿Ð‘Ò æ·ÛñËÂÇ áÜÊôÊÌÎÚÒZ^ " ɳ٠ËÂÛÜÊ›Ø \ é é \ ` ÛñËÈÛÜÒòɳБÒîì®ËÂʏæòÍÂÛñËÂÉÓèµÊ¦æ ØóÔ×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜáñÒ¹æ·ÇµÊ›ÒÉãÉIÌU БáñÖ ÐÑËÂÛÜʛ؞èµÊ ɳÒòصÊÌËÈËÂɟÍÂÞßÛñØ ÐÑËÂÉÌé
·ÉŸÍÉãÛÜÒ¹ËÂǵÉÏҝǵÊÌ͝ËÂɳÒîËòæÈгì ʛԡٟÍÂɬÐÑËÂÛÜØµå ÐçØóÛÜØ Ú
Y ØÚÛ²ËÂÉ ÍÂɳٳ֫ÍÂÒîÛÜÊ›Ø ÕèµÉ Ú
Y صÉÏ˝ÇÚÉÏÔ×ֵصٟËÂÛÜʛØ
Infinite recursion.
T \ void f ()
{
f ();
}
æ ²Û ËÂǜصÊÝÐÑÍÂå›ÖµÞßÉ³Ø ËÂҿБصè ÉIUÌБáñÖ ÐÑËÂÉ ËÇÚÉ ÉIP¥ÎµÍÂɟҝҝÛÜʛØ
é Æ¹ÇµÉ ÍÂÉ³Ð‘ÒÊ›Ø Ô×ÊÌÍ ØÚʛػËÂɟÍÂÞßÛÜØÚÐç˝ÛÜʛØ
f()
ÛÜÒ®Ù³áÜɳÐçÍ ËÂÇµÉ É U‘БáÜÖÚÐçËÂÛñʛؼʛÔ
ٳʛصҝÛÜҙËÂҮʛÔâÐ‘Ø É U‘БáÜÖÚÐçËÂÛÜÊ›Ø Ê›Ô
æ ǵÛÜÙäÇ ÙŸÊ›ØÚÒîÛÜÒîËÂҮʛÔãБØ
f()
É U‘БáÜÖÚÐçËÂÛñÊ›Ø Ê›Ô
æ·ÇµÛÜÙäǾéÄé³éì“Ê›f()
Öóå›ÉŸËÈËÂǵÉÓÎ ÛñٟËÂÖ«ÍÂÉÌé
f()
Û ]“ÉãÔ×ÊÌÍòáÜÊôÊÌÎÚÒ³í¥ËÇÚÉÏÔ×ֵصٟËÂÛÜÊ›Ø èÚIÉ Y صÛñ˝ÛÜÊ›Ø®Ç ÐçÒÈËÂʏޮР]“ÉÓҝ֫ÍÂÉÓËÂÇÚÐç˹ÎÚ͝ʛåÌÍÂɳҝÒÈËÂÊÑæÈÐÑÍÂèµÒ¹ËÉŸÍÂÞßÛ ØÚÐçËÂÛÜÊ›Ø ÛÜÒÈޮБèµÉÏÛñØžÉ U“ÉŸÍîìóÔ×ֵصٟËÂÛÜʛØóٳБáÜá˜é [ ÊÌÍ·ËÂǵÉÏÔ×ÖµØÚÙÄËÂÛÜʛØ
Ð _Ê U“ÉÌí«ËÂǵÛÜÒÈÛÜÒ¹ËÂǵÉãÙ³Ð‘ÒÉ É³Ð‘ÙäÇ
fac
ËÂÛÜÞßÉ
ÛÜҋ٬БáÜáÜɟè®ÍÉ³Ù³Ö«ÍÂҝVÛ U“ÉŸáñì“íôËÂǵ
É U‘БáÜÖµÉ Ê›Ô ËÂÇµÉ Ù¬Ð‘áÜá ÐÑÍÂå›ÖµÞßÉ³Ø Ë _ ɳٳʛÞßɳҋҝޮБáÜáÜÉÄͬíôÐçØÚèßæ·ÇÚɟØ
fac
ËÂǵL
É U‘БáÜÖµÉÀÍÂɬБÙäÇµÉ³Ò í ØµÊ ÞßÊÌÍÉ ÍÂɳٳ֫ÍÂÒîVÛ U“ɮ٬БáÜáÜÒëÐçÍÂÉßΠɟÍÂÔ×ÊÌ͝ÞßÉ³è ¿æ¹É®ÒÂгìÝËÂÇÚÐçËà˝ÇÚÉÀ͝ɳٳ֫ÍÂҝÛÜʛØ
1
N_ ÊÌ˝˝ʛÞßÒïÊ›ÖµË «é
3.2.2 The call stack
ɟ!Ë Òß˝Íîì¼ËÊ ֵصèµÉŸÍÂÒîËäÐçØÚè æ ÇÚÐçË®ÉIP«Ð‘ÙŸËÂáñì ÇÚÐçεΠɟØÚÒ èµÖ«ÍÂÛÜØµå ËÂÇµÉ½É U‘БáÜÖÚÐç˝ÛÜÊ›Ø Ê›Ô
í ÒÂгì“é
ƹÇÚÉ Ô×ÊÌÍÂޮБá¿ÐçÍÂå›ÖµÞßɳدË
ÛÜÒ ÛÜØµÛñËÂÛ×БáñÛ³É³è æ Û²ËÂÇ í¿Ð‘صè ҝÛÜØµÙ³É ËÂǵÛÜÒ ÛÜÒ½åÌ͝ɬÐçËÂɟͽfac(3)
ËÂÇÚÐ‘Ø íàËÂǵÉ
n
ÒîËäÐÑËÂɳÞßɳدË
ÛÜÒ ÉIP¥É³Ù³Ö«ËÂɳè 3 ØÚÉGP¥Ë¬éâÆÈǵÛÜÒYµÍÂÒîËÓÉIUÌБáñÖ ÐÑËÂÉ³Ò ËÂÇµÉ ÉIP¥ÎµÍÂ1ɳÒîҝÛÜʛØ
return n * fac(n-1);
ÐçØÚè ÛÜØ®ÎÐÑ͝ËÂÛÜÙ³Öµá×ÐÑÍ ËÂǵÉÏ͝ÛÜå›Ç ˹ÊÌÎ ÉÄÍäБصè
é " ÛÜØµÙ³É
ÇÚБÒU‘БáÜÖµÉ í¥ËÂǵÉ
n * fac(n-1)
fac(n-1)
n-1
2
Ô×ÊÌÍÂޮБá¤ÐÑÍÂå›ÖµÞßÉ³Ø Ë ÛñÒÈËÂǵɟ͝ɳÔ×ÊÌÍÂÉâÛñØÚÛ²ËÂÛ×БáÜÛ ³É³èÀæ Û²ËÂÇ é
‹Ö«Ë·æÈБÛñË Õæ ÇÚÐçnË·ÛÜ
Ò ™ËÇÚÉ ÀÔ×ÊÌÍÂޮБá¾ÐçÍÂå›ÖµÞßÉ³Ø¯Ë 2 Ö«ËÂʛޮÐÑËÂÛÜÙ ÒîËÂÊÌÍÂБå›ÉâèµÖ«ÍäÐçËÂÛñʛØóÛÜÞÀÎÚáÜÛÜÉ³Ò ËÇ ÐÑË
ɬБÙäÇ Ô×ֵصٟËÂÛÜʛ؞٬БáÜá¤ÇÚБҷ۲ËÂ$
Ò îÊÑæ·Ø ÔÜÍÂÉ³ÒÇ ÛÜØµÒîËÂБصٳÉãʛԡËÂǵÉãÔ×ÊÌÍÂÞ®Ðçá¡ÐÑÍÂå›ÖµÞßÉ³Ø Ë¬í¥Ð‘صèžËÂǵÉâáÜÛñÔ×ɟËÂÛÜÞßÉ
í æ¹É ˝ÇÚÉÄÍÂɳÔ×ÊÌÍÂÉßå›ÉŸË
Ê›Ô ËÂǵÛÜÒëÛñØÚҙËäÐ‘ØµÙ³É ÛñÒâËÂÇµÉ ÍÂɳҙΠɳٟËÂÛ U“ÉÀÔ×ÖµØÚÙÄËÂÛÜÊ›Ø Ù¬Ð‘áÜá»é ê˜Ø É U‘БáÜÖÚÐç˝ÛÜØµå
ÐÀصɟæ ÛñØÚҙËäБصٳÉàÊ›Ô ËÂǵÉàÔ×ÊÌÍÂޮБá¡ÐçÍÂå›ÖµÞßÉ³Ø¯Ë íÊ›Ø ËÂÊÌÎ Ê›Ô ËÇÚÉëεÍÂIÉ U¥ÛÜʛf(n-1)
ÖµÒ ÛÜØµÒîËäÐçØÚٟÉëÔÜÍÂÊ›Þ ËÂǵÉà٬Бáñá
^°ËÂÇÚÐçËïÇÚÐ‘Ò ØµÊÌË ì“ÉŸËï˝ɟÍÂÞßÛÜØÚÐçËÂɟè `´é ‹Ö«Ë næ ǵÛÜÙäÇßÛÜØµÒîËÂÐ‘ØµÙ³É Ê›Ô èÚÊëæ¹É·ÖÚÒîÉ ÛÜØßËÂÇµÉ É U‘БáÜÖÚÐçËÂÛÜʛØ
f(3)
ʛÔ
ÖÚÛ²ËÂɏØÚÐç˝ֵÍÂБáÜáñì“í ÛñËÏæ ÛñáÜT
á _ É¿ËÂǵɏصɟæ ʛصÉÌí¡ËÇÚɿʛصnɏËÂÇÚÐç
Ë N_ ɟáÜʛصå›Ò ËÊ ËÂÇµÉ Ù³Ð‘áÜá
f(n-1)
éÃÆÈǵÛÜÒ ÍÖÚáñÉ ÛÜÒïÛÜØ®áÜÛÜØµÉ·æ·ÛñËÂÇßËÂǵÉÓå›É³ØµÉŸÍäБáÒîÙ³ÊÌÎ É ÍÂÖµáÜɳÒïÔÜÍÂÊ›Þ " ɳÙÄËÂÛÜÊ›Ø \ é é ˝ÇÚÉ ÍÉ³áÜÉ U‘Ð‘Ø Ë
f(n-1)
èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜÊ›Ø ÛÜÒòБáñæÈгì¥ÒïËÂǵÉÏÞßʛÒî˹ÍÂÉ³Ù³ÉŸØ Ë Ê›ØµÉÓËÂÇÚÐçËÈÛÜÒÈÒîËÂÛÜáÜá UôÛÜҝVÛ _ÚáÜɑé
ÆÈǵɿËÂɳÙäǵØÚÛñ٬Бá ÍÂɬБáñÛ ¬ÐçËÂÛñʛؽʛÔÃËÂǵÛÜÒãÛñÒ U“ÉŸÍîì ҝÛñÞÀÎ áñÉÌé U“ÉÄ͝ìôËÂÛñÞßɏРÔ×ÖµØÚÙÄËÂÛÜÊ›Ø ÛñÒãÙ¬ÐçáÜáÜɳè¤í ËÂǵÉ
٬БáñáòÐÑÍÂå›ÖµÞßÉ³Ø Ë¿ÛÜÒÉ UÌÐçáÜÖÚÐçËÂɳè¤í ÐçØÚè ËÂÇµÉ ÍÂɳÒîÖÚá²ËÂÛÜØµå U‘БáÜÖµÉ ÛÜÒ¿ÎÚÖ«ËÀÊ›Ø ËÂǵÉ
æ ǵÛÜÙäÇ ÛÜÒ
Ä
±
¯
©
°
’
Ó
’
³
Ž
î
–
µ
©
±
ҝÛÜÞÀÎÚáñìßÐà͝ɳå›ÛÜʛØóÛÜØ ËÂǵÉãٟʛÞÀÎ Ö«ËÂÉÄ!Í Ò¹ÞßɳÞßÊÌ͝ì“é
Û ]“É ÐÀÒîËäБ٠] Ê›Ô Î ÐçΠɟÍÂÒ·Ê›Ø ì“ʛ֫ÍÓèµÉ³Ò ]íËÂǵÉà٬БáÜá ҙËäБ٠] ÇÚÐ‘Ò ËÂǵÉëεÍÂÊÌΠɟÍîË ìžËÂÇÚÐçË ËÂǵÉàÊ _ ™ÉŸÙŸË
ËÂÇÚÐçËò٬БÞßÉÓá×Бҙ˷ÛÜ
Ò îʛ؞ËÂÊÌÎ «é òΠʛ؞˝ɟÍÂÞßÛÜØÚÐçËÂÛñÊ›Ø Ê›Ô ÐÔ×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜá»í¥ËÂǵÉãËÂÊÌÎ Ê _ ɳٟËòÛÜÒ¹ËäÐ ]“ɳØ
Ê óËÂÇµÉ Ò™ËäБ٠]®Ð‘å“БÛñؾ
é S¼ÇµÉ³ØµÉ U“ÉŸÍòÐâÔ×ֵصٟËÂÛñÊ›Ø Ù³Ð‘áÜáÐçٳٳɳҝÒîɳÒòÊÌÍ Ù´ÇÚБصå›É³ÒïÛ²ËÂÒ Ô×ÊÌÍÂޮБáÐçÍÂå›ÖµÞßɳدˬí Û²Ë
èµÊôɳÒÈÒÊ _ ì БٳٳɳÒîҝÛÜØµå ÊÌÍòÙäÇ ÐçØÚå›ÛñØÚå ËÂǵÉâٟÊÌ͝ÍÂɳÒî΍ʛØÚèµÛÜØµå¿Ê _ ɳÙÄËòÊ›Ø ËÂÊÌΠʛԡ˝ÇÚÉãÒîËäБ٠]é
ÆÈǵÛÜÒÈÇÚÐ‘Ò ÐçáÜá ËÂǵÉÏεÍÂÊÌÎ ÉÄ͝ËÂÛÜɳҹæ¹ÉãæÈÐçØ Ë ÃÉ U“ɟ͝ìžÔ×ÖµØÚÙÄËÂÛÜʛØóÙ¬ÐçáÜá æ¹ÊÌÍ ]¥ÒÈæ ÛñËÂÇ ÛñËÂÒÈÊÑæ·ØóÛÜØµÒîËäÐçØÚٟÉ
ʛԫËÂǵÉïÔ×ÊÌÍÂޮБáôÐçÍÂå›ÖµÞßÉ³Ø Ë Ìæ ÇµÉ³Ø ÛñË Ù¬ÐçáÜáÜÒ Ð‘ØµÊÌËÂÇµÉŸÍ Ô×ֵصٟËÂÛñÊ›Ø ^»ÊÌÍ ËÂǵÉïÔ×ÖÚØµÙŸËÛÜÊ›Ø ÛñËÂҝɳáñԵ͝ɳٳ֫ÍÂҝVÛ U“ÉŸáñaì `Äí
ËÂǵÛÜÒïÛÜØµÒîËÂБصٳ
É _ ɳٳʛÞßÉ³Ò ËÉ³ÞÀÎ ÊÌÍäÐç͝ÛÜáñì¿ÇµÛÜèµèÚɟؾíôÖÚØ¯ËÂÛÜáËÂǵÉÓØµÉ³ÒîËÂɟèžÙ¬Ð‘áñáÇÚБÒïËÂɟÍÂÞßÛÜØÚÐç˝ɳè¤é ïËÈËÇ ÐÑË
ΠʛÛÜØ¯Ë¬í ˝ÇÚÉÓÛÜØµÒîËÂÐ‘ØµÙ³É ÍÂɬÐçεΠɳÐçÍÂÒ¹Ê›Ø ËÊÌÎóʛԤËÂÇµÉ ÒîËäБ٠] БصèžÐçáÜáÜʦæ ҋËÂÇµÉ ÊÌÍÂÛñå›ÛÜØÚБáÔ×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áñáËÂÊ
æ¹ÊÌÍ ]®æ Û²ËÂǞÛñËòБå“ÐçÛÜØ¤é
4
"5
,$
A+*
8*
%*
%1(76>"
%*( A#*K7
N(
* ,
8!*
%2
N(76>"
.
*J
&( Q
Q*
A(.
27P
7
P
%
M/
%7
*
\
Æ Ð _ÚáÜÉ ÒÇµÊÑæ·ÒãÇµÊ¦æ Ë ÇÚÛñÒÏáñÊôÊ ]¥Ò áñÛV]“É Ô×ÊÌÍ
í ‘Ð ÒîҝֵÞßÛÜØµå®ËÇ ÐÑË ÂË ÇµÉ¿ÍÂÛñå›Ç ËÏÊÌΠɟÍäÐçØÚè½Ê›ÔÕËÂǵÉ
f(3)
Þ¿ÖÚá²ËÂÛñÎÚáÜÛÜÙ¬ÐÑËÂÛÜÊ›Ø ÊÌΠɟÍÂÐçËÂÊÌÍ ñÛ Ò Ð‘áñæÈгì¥Ò¡É U‘БáÜÖÚÐçËÂɳèZYµÍÂÒ™Ë¬é µÖ ËîËÂÛÜØµå БØàÊ _ ɳŸÙ Ë Ê›ØëËÂÇµÉ Ò™ËäБ٠] ™ÎÚÖµÒÇµÉ³Ò ÛñˬíµÐçØÚè ËäÐ ]¥ÛñØÚåàËÂǵÉÓËÂÊÌÎ Ê _ ɳٟËòÊ›Ô ™Î ÊÌÎÚÒ Ûñˬé
ٳБáÜá ÒîËäÐçÙ ] ^ _ ÊÌËîËÂʛÞ
n: 3
n: 3
n: 3
n: 3
n: 3
n: 3
n: 3
n: 3
n: 3
n: 2
n: 2
n: 2
n: 2
n: 2
←→
n: 1
Table 5: ‰‹ŠŒ
ËÂÊÌÎ `
É U‘БáÜÖÚÐç˝ÛÜÊ›Ø ÒîÉXWôֵɳصٳÉ
fac(3)
n * fac(n-1)
n * fac(2)
n * (n * fac(n-1))
n * (n * fac(1))
n * (n * 1)
n * (2 * 1)
n * 2
3 * 2
6
БٟËÂÛñʛØ
ÎÚֵҝÇ
3
ÎÚֵҝÇ
2
ÎÚֵҝÇ
1
΍ÊÌÎ
Î ÊÌÎ
Î ÊÌÎ
±´©¯’»’뎳–± ½©“šF 
Š ›¸ —»– Œ D¥“’EDôŒ¬Ž F“” £¬—»šÁ “© š ŒXDô©¯’•”¡©¯–˜—™›š
£³Œ¬Ž ¢ ŒŸ±¬–˜— D¥ŒLDô©¯’•” Œ Â¶ n – ž”Ž‘Œ—»Ž®©¯’•¸ ©JôŽ¿–ºŠŒ ›š Œž› š –³¢
Â¶ fac(3) –ºŠŒ
‹É³Ù¬Ð‘ÖµÒÉ ʛÔë˝ÇÚɽ٬БáÜáãÒîËäБ٠]íãÛÜØ YÚØµÛñËÂÉ ÍÂɳֵٟ͝ҝÛÜʛصÒóèµÊ صÊÌË Ê›Øµáñì¼Ù³Ê›ØµÒÖµÞßɽËÂÛñÞßÉ Ú_ Ö«Ë Ð‘áñҝÊ
ÞßɳÞßÊÌ͝ì“é ·ØµáÜÛV]“É ÛÜØ YÚØµÛñËÂÉëáñÊôÊÌÎÚÒ³íËÂǵɟì ֵҝÖÚБáÜáñìóáÜɬБè ËÂʞÐÀεÍÂʛåÌÍäÐçÞ Ð _ ÊÌ͝ËÂÛÜʛؽБÒÓÒÊ Ê›Ý
Ø Ð‘ÒÓËÂǵÉ
ÞßɳÞßÊÌ͝ì ÍÂÉ³ÒÉŸÍ U“ɳè Ô×ÊÌÍ·ËÂǵÉÏ٬БáÜá¤ÒîËÂБ٠] ÛñÒòÔ×ÖµáÜá˜é
3.2.3 Basic practice
ɟ˹ֵÒïٳʛصҝÛÜèµÉŸÍ Ë æ¹Ê ÞßÊÌÍÂÉ·ÒîÛÜÞÀÎÚáÜÉÈ͝ɳٳ֫ÍÂҝÛVU“ÉÓÔ×ֵصٟËÂÛÜÊ›ØµÒ‹ËÇ ÐÑ˹ÐçÍÂÉ ÒÊ›ÞßÉÄæ ÇÚÐçË ÞßÊÌ͝ɷÛÜØ¯ËÂɟÍÂɳҙËÂÛÜØµå
ËÂÇÚБØ
éãÆ¹ÇÚÉÄì ҝǵÊÑæ ËÂÇÚÐçË ÍÉ³Ù³Ö«ÍÂҝÛVU“É Ô×ֵصٟËÂÛÜʛصÒÏÐçÍÂÉëÎ ÐçÍîËÂÛÜÙ³Öµá×Ðç͝áñìóÐçÞßɳØÚÐ _ÚáÜÉãËÂÊ Ù³ÊÌ͝͝ɳٟËÂØµÉ³ÒÒ
fac
εÍÂÊôʛÔ×Ò®
ʛÔÏËÂǵɳÛñÍßΠʛÒî˝ٳʛصèÚÛ²ËÂÛÜʛصҳíÈБصè ËÂǵÛÜÒßޮР]“ɳÒÀËÂÇµÉ³Þ Ðç˝˝ÍÂБٟËÂVÛ U“É‘é Ø ËÂÇµÉ ÊÌËÂÇµÉŸÍ ÇÚБصè¾í
æ¹É БáÜÒÊ ÒÉ³É ËÂÇÚÐçË ÛñË¿ÛÜÒ É¬Ð‘Ò™ì ËÊ æòÍÂÛñËÂÉßÛÜØµØµÊôÙŸÉ³Ø Ë ˜áÜÊôÊ ]ôÛÜØµåóÍÂɳٳ֫ÍÂÒîVÛ U“É Ô×ֵصٟËÂÛñʛØÚÒàËÂÇÚÐçˏÐç͝ÉU“ÉÄ͝ì
ÛÜØµÉ Ù³ÛÜɳدËòËÂÊ¿É U‘БáÜÖÚÐçËÂɑé
ʛØÚÒîÛÜèµÉŸÍã˝ÇÚÉ ÎµÍÂÊ _ÚáÜÉ³Þ Ê›Ô YÚØµèµÛÜØµå ËÂǵɏåÌÍÂɬÐçËÂɟÒîËâٟʛÞßÞßÊ›Ø èµÛVUôÛÜҝÊÌÍ
ï
Greatest common divisor.
å›Ù³è
ʛÔÚË æ¹ÊãØÚÐçËÂÖ«ÍäÐçá«ØôÖµÞb_ÉŸÍÂÒ
é Æ¹ÇµÛÜÒ ÛÜÒ èÚÉIY صɳèÀÐ‘Ò ËÂǵÉòá×ÐÑÍÂå›É³ÒîËÃØÚÐçËÂÖ«ÍäБáôØôÖµÞb_ÉŸÍ ËÂÇÚÐçË
a, b
èµÛVU¥Ûñ(a,
èÚÉŸÒ b)_ ÊÌËÂÇ
Бصè
æ Ûñ˝ÇÚʛ֫ËÓÍÂɳޮ
ÐçÛÜØµèÚÉÄͬéßê˜ØÝÎ Ðç͝ËÂÛñÙ³Öµá×Ðçͬí¾å›Ù³è
å›ÙŸè
Ô×ÊÌÍ
a
b
(n, 0) =
(0, n) = n
µ áÜɟËÈֵҷБáñÒÊ èµÉ YÚØµÉãå›ÙŸè
é
n>0
(0, 0) := 0
ÆÈǵÉ
Y صèµÒÈå›Ù³è
í _ БÒîɳèóʛ؞ËÂǵÉÏÔ×ʛáÜáÜʦæ ÛÜØµå
Ȕ¡±¬’­— FµŒÄ©“𼩝’•Á«›£¬—»–ºŠ¥¨
(a, b)
Lemma 1 ×¶ b > 0 ¹–ºŠŒŸš
å›Ù³è
(a, b) =
å›Ù³è
(b, a
ÞßÊôè
b).
T \ ɟË
Proof.
_ÉâÐ èµÛVU¥ÛÜÒîÊÌÍòʛÔ
k
èµÛVU
a = (a
b)b + a
ÞßÊ è
b
é [ ͝ʛÞ
b
ÛñËÈÔ×ʛáÜáÜʦæ ÒïËÂÇÚÐçË
ÞßÊôè
" ÛÜØµÙ³É
b a
a
b
èµÛVU
= (a
.
b) +
k
k
k
a
èµÛVU
a
ÞßÊôè
b
Бصè
b/k
b
ÐçÍÂÉÏÛÜØ ˝ɳå›ÉŸÍÂÒ³í¥æ¹Éãå›ÉŸË
a
k
⇔
k
.
ê˜Ø æ¹ÊÌÍÂèµÒ³í ÛÜÔ ÛÜÒÓÐßèµÛVUôÛÜҝÊÌÍ Ê›Ô íËÂǵɳØ
èµÛVUôÛÜèµÉ³Ò ÛÜԋÐçØÚè ›Ê Øµáñì ÜÛ Ô èµÛVU¥ÛÜèµÉ³Ò ÞßÊôè éâÆ¹ÇµÛÜÒ
b
k
Þ É¬Ð‘ØµÒ³íÚËÂÇµÉ èÚkÛ ¥U ÛÜҝÊÌÍÒ Ê›Ô
ß
ÐçÍÂÉàÉGPµkБٟ˝áñìóËÂǵÉàaèµÛVU¥ÛñҝÊÌÍÂÒ ›Ê Ô
ÞßÊ è aéÓÈ
Æ ÇµÛÜÒ bεÍÂÊU“ɳÒ
a ©“šF b
b ©“šF a
b
ËÂÇÚÐçËÈå›Ù³è
‘Ð صè å›Ù³è
ÞßÊôè
Ðç͝ÉâÉXW Ö Ðçá˜é
(a, b)
(b, a
b)
·ÉŸÍÂÉÓÛÜÒïËÂÇµÉ Ù³ÊÌÍîÍÂɳÒîΠʛصèµÜÛ Øµå Ô×ÖµØÚÙÄËÂÛÜÊ›Ø Ô×ÊÌÍòٟʛÞÀÎ Ö«ËÂÛñØÚåãËÂǵÉÏåÌ͝ɬÐçËÂɳҙËòٟʛÞßÞßʛØÀèµÛVU¥ÛÜÒîÊÌÍ
›Ê Ô¡Ë æ¹Ê
U‘БáÜֵɳҳíµÐ‘ٟٳÊÌÍÂèµÛÜØµåËÂÊ ËÂÇµÉ ÖµÙ³áÜÛÜèµÉ¬ÐçØžÐ‘áñå›ÊÌÍÂÛñËÂÇµÞ é
unsigned int
// POST : return value is the greatest common divisor of a and b
unsigned int gcd ( unsigned int a , unsigned int b)
{
if ( b == 0) return a ;
return gcd (b , a % b ); // b != 0
}
Æ ÇÚÉ ÖÚٟáÜÛÜèµÉ¬Ð‘Ø ‘Ð áÜå›ÊÌÍÂÛ²ËÂÇµÞ ÛÜÒRU“ɟ͝ì ԪБҙˬéS ÉãٳБ؞ɬÐçҝÛÜáñìßٳБáÜá ñÛ Ë¹Ô×ÊÌÍ·Ð‘Ø ì
¹
U‘БáÜֵɳÒ
unsigned int
ʛØóʛ֫ÍÈÎ áÜÐçËÂÔ×ÊÌÍÂÞ ¯í æ ÛñËÂǵʛ֫˹صÊÌËÂÛÜÙ³ÛñØÚå¿Ð‘دìžèµÉ³áÜЬì®Ûñ؞ËÂǵÉãÉIUÌБáñÖ ÐÑÂË ÛÜʛؤé
[ ÊÌÍãÍÂɳٳ֫ÍÂÒîÛVU“ÉÀÔ×ֵصٟËÂÛÜʛصҳí¾ÛñËãÛÜÒãʛÔÜËÉ³Ø U“ɟ͝ì ɬБÒîì ËÂÊ ÎµÍÂÊU“É ËÂÇÚÐçË
ËÂǵÉßΠʛÒîËÂٟʛØÚèµÛñ˝ÛÜÊ›Ø ÛÜÒ Ù³ÊÌ͝ÍÂɟٟˬí_ôì ֵҝÛÜØµå ËÂǵɮÖÚØµèµÉŸÍÂá²ì¥ÛÜØµå Þ®ÐçËÂǵɳޮÐÑËÂÛÜ٬Бá èµÉ YÚØµÛñËÂÛÜÊ›Ø èµÛñ͝ɳٟËÂáñì
^˜áÜÛ ]“É
Ô×ÊÌÍ
`Äí ÊÌÍ _ ì ֵҝÛÜØµå ҝʛÞßɏԪБٟËÂÒàËÂÇÚÐçËàÔ×ʛáñáÜÊÑæ ÔÜÍÂÊ›Þ ËÇÚÉßÞ®ÐÑËÂǵɳޮÐçËÂÛÜٳБá èµÉ YÚØµÛñËÂÛÜʛØ
n!
fac
^˜áÜÛ ]“É ɳÞßޮРÔ×ÊÌÍ
`Äé
ÆÈǵÉãÙ³ÊÌ͝ÍÂɳÙÄËÂØµÉ³ÒÒ gcd
εÍÂÊôʛԡޏֵÒîËòÛÜØ U“Ê›áVU“ÉëÐàËÂɟÍÂÞßÛñØ ÐÑËÂÛÜʛØßεÍÂÊôʛԺíÚҝÊÀáÜÉÄË! ÒÈÒîËäÐçÍîË·æ Û²ËÂÇ ËÂǵÛÜÒ Ð‘Ø¯ì
˝ɟÍÂÞßÛÜØÚÐçËÂɟҳíôҝÛñØÚٟÉÏËÂǵÉ
UÌÐçáÜÖµÉ Ê›Ô¡ËÇÚÉÓҝɟٳʛصè ÐçÍÂå›ÖµÞßɳد˹ÛÜÒ_Ê›ÖÚØµèµÉ³è ÔÜÍÂÊ›Þ _ ɳáÜʦæ
٬БáñáËÂÊ
_ôì
Бصgcd
èóå›ÉŸËÂÒòҝޮБáÜáñɟÍïÛÜØ É U“ɟ͝ì ÍÂɳٳ֫ÍÂÒÛ U“bÉâ٬Бáñá ^»æ¹ÉãÇÚÐXU“É ÞßÊôè
`Äé
0
a
b<b
VÛ U“ÉŸØóËÂǵÛÜÒ³íµËÂǵÉâÙ³ÊÌ͝͝ɳٟËÂØµÉ³ÒÒ Ê›Ô ËÇÚÉÏΠʛÒîËÂٟʛØÚèµÛñ˝ÛÜʛ؞Ô×ʛáÜáñÊÑæ·ÒòÔÜÍÂÊ›Þ ÉŸÞßޮР_ôìžÛÜØµèÚֵٟ˝ÛÜʛØ
Ê›Ø é [ ÊÌÍ
íµËÂǵÛÜÒ·ÛñÒ·Ù³áÜɳÐçͬé [ ÊÌÍ
íÚæ¹ÉëÛÜØµèµÖÚÙÄËÂVÛ U“ɳáñì ÐçҝҝֵÞßÉãËÂÇÚÐçËòËÂǵÉâΠʛÒî˝ٳʛصèÚÛ²ËÂÛÜʛØ
=0
b>0
ÛÜÒÓÙ³bÊÌ͝͝ɳٟËëÔ×bÊÌÍâ
БáÜá ٳБáÜáÜÒ ËÂÊ
æ ǵɟ͝ɿ
ËÂÇµÉ ÒÉ³ÙŸÊ›ØÚè ÐÑÍÂå›ÖµÞßÉ³Ø ËÓÇÚБ
Ò U‘БáÜÖµÉ
é " ÛñØÚٟÉ
gcd
b <b
ÞßÊ è ÒÂÐç˝ÛÜÒ YÚɳÒ
íæ¹ÉàޮгìóÐçҝҝֵÞßÉâËÂÇÚÐçË ËÇÚÉàٳБáÜá
Ù³ÊÌ͝͝ɳٟËÂáñìžÍÂɟËÂbÖ«ÍÂØµ=Ò
a
b
gcd(b, a % b)
å›Ù³è
ÞßÊôè é b‹Ö«<
Ë _ bì ˝ÇÚÉÏáÜɳÞßޮРíôå›Ù³è
ÞßÊôè
å›ÙŸè
í¥ÒÊ¿ËÂǵÉâÒîËäÐÑËÂɳÞßɳدË
Correctness and termination.
(b, a
(b, a
b)
return gcd (b , a % b );
Ù³ÊÌ͝͝ɳٟËÂáñì®ÍÂÉÄËÂÖ«ÍÂØµÒòå›Ù³è
(a, b)
é
b) =
(a, b)
\ Æ ÇµÉ Ò ÉXW ÖÚɟØÚٟÉ
¹
Ê›Ô ÛÜÒÕʛØÚÉ
0, 1, 1, 2, 3, 5, 8, 13, 21, . . .
™
—
Ÿ
›

š
µ
©
Ÿ
±
³
±
ï
—
š
”
½
¨
³
Ÿ
Œ
¦
£
Ž
ʛÔÓËÂÇµÉ ÞßʛҙˮԪБÞßʛֵÒÀҝÉXW ÚÖ ÉŸØÚٟɳҞÛÜØ¼Þ®ÐçËÂǵɳޮÐÑËÂÛÜÙ³Ò³é [ ÊÌÍÂÞ®ÐçáÜáñì“í‹ËÂÇµÉ ÒÉXW ÖµÉ³ØµÙ³É ÜÛ ÒßèµÉ YÚØµÉ³è БÒ
Ô×ʛáÜáÜʦæ ҟé
Fibonacci numbers.
F0 := 0,
F1 := 1,
Fn := Fn−1 + Fn−2 ,
n > 1.
ƹÇÚÛñÒÏÞßɳБصҳí¤É U“ɟ͝ì½É³áÜɳÞßÉŸØ ËÓʛԋËÂÇµÉ ÒÉXW ֵɳصٳÉÀÛÜÒ ËÂÇµÉ¿ÒÖµÞ Ê›ÔÃËÂÇµÉ¿Ë æ¹Ê®ÎÚÍÉ U¥ÛÜʛֵÒÏʛصɳҳé [ ÍÂʛÞ
ËÂǵÛÜÒ èµÉ YÚØµÛñËÂÛñÊ›Ø¾í›æ¹É Ù¬ÐçØ ÛñÞßÞßɳèµÛ×ÐçËÂɳá²ìëæ·ÍÂÛ²ËÂÉ·èµÊ¦æ Ø ÐãÍÂɳֵٟ͝ҝÛVU“É Ô×ֵصٟËÂÛñÊ›Ø Ô×ÊÌ͹ٟʛÞÀÎ Ö«ËÂÛñØÚå
[ VÛ _Ê›Ø ÐçٳٳۤØôÖµÞ_ ɟÍÂÒ³í«å›ÉÄ˝ËÂÛÜØµå ËÂɟÍÂÞßÛÜØÚÐç˝ÛÜʛخБصèóÙ³ÊÌ͝͝ɳٟËÂØµÉ³ÒÒòÔ×ÊÌÍ·ÔÜ͝ɳÉÌé
// POST : return value is the n - th Fibonacci number F_n
unsigned int fib ( unsigned int n)
{
if ( n == 0) return 0;
if ( n == 1) return 1;
return fib (n -1) + fib (n -2); // n > 1
}
˜ê Ô ì“Ê›Ö æòÍÂÛñËÂÉ·ÐâÎÚ͝ʛåÌÍäÐ‘Þ ËÊ¿ÙŸÊ›ÞÀÎ Ö«ËÂÉÈËÂÇµÉ [ ÛV_Ê›Ø ÐçÙ³Ù³ÛØ ÖÚÞ_ ɟÍ
ֵҝÛñØÚåë˝ÇÚÛñÒ Ô×ÖµØÚÙÄËÂÛÜʛؤí ì“Ê›Ö
Fn
æ ÛñáÜá«ØµÊÌËÂÛÜٳɹËÂÇÚÐçËÕҝʛÞßɟæ ǵɟ͝É_ ÉÄË æ¹ÉŸÉ³Ø
Бصè
í“ËÂǵÉòεÍÂʛåÌÍÂÐ‘Þ _É³Ù³Ê›ÞßɳÒU“ɟ͝ìÒáÜʦæëé
= 50
Ê›ÖžÉ U“ÉŸØ ØÚÊÌ˝ÛÜÙ³ÉÏÇÚʦæ Þ¿ÖÚÙäÇóÒîáÜÊÑæ¹ÉÄÍ·ÛñË n_ =
ɟٳʛ30
ÞßɳÒïæ Çµnɳ؞
ì“ʛ֞ÛÜØµÙŸÍÂɬБÒîÉ
_ ì ÖµÒîË é
n
1
ÆÈÇµÉ ÍÂÉ¬Ð‘ÒÊ›Ø ÛñÒ¿ËÂÇÚÐçË¿ËÂǵɞޮÐÑËÂǵɳޮÐçËÂÛÜٳБáÕèµÉ YÚØµÛñËÂÛñÊ›Ø Ê›Ô
èµÊ É³Ò ØµÊÌˏáÜɬБèœËÊÝ
Ð‘Ø É Ù³ÛÜɳدË
Fn
БáÜå›ÊÌ͝ÛñËÂÇµÞ í¬ÒÛÜØµÙ³É¹Ð‘áñá U‘БáÜֵɳÒ
í“Ðç͝ɋÍÂɟΠɳÐçËÂɳèµáñìãٳʛÞÀÎÚÖ«ËÂɳè¤í‘ҝʛÞßÉÕʛԫËÂÇµÉ³Þ ÉIPô˝ÍÂɳÞßɟáñì
i , i < n−1
ʛÔÜËÂɳؤé Ê›Ö Ù³Ð‘Ø Ô×ÊÌÍãIÉ PµÐçÞÀÎ FáñÉà
ٴǵɳ٠] ËÂÇÚÐçË ËÂǵɿ٬БáÜá ËÂÊ
ٟʛÞÀÎ Ö«ËÂɟÒ
Бá²ÍÂɬБè«ì Ë æ ÛÜٟÉ
fib(50)
F48
^˜Ê›ØµÙ³É¿èµÛñÍÂɳٟ˝áñì ÛÜØ
í ÐçØÚè½Ê›ØµÙ³É ÛÜØµèµÛñÍÂɟٟËÂáñì ÔÜ͝ʛÞ
é
ÛÜÒÏٳʛÞÀÎÚÖ«ËÂɳè½ËÇµÍÉ³É
ËÂÛÜÞßɟҳí
YaU“ÉÓËÂÛÜÞßfib(n-2)
ɳҳí¥Ð‘صè
ɳÛÜå›Ç¯Ë¹ËÂÛÜÞßɳ
Ò ^˜èµÊ ì“Ê›Ö ҝɳÉëÐàfib(n-1)
Î Ðç˝ËÂÉÄÍÂØ `Äé F47
F46
F45
3.2.4 Recursion versus iteration
[ ÍÂÊ›Þ ÐßÒî˝ÍÂÛñٟËÂáñìžÔ×ÖÚØµÙŸËÛÜʛØÚБá ΠʛÛÜØ¯Ë ʛÔU¥ÛÜɟæâíÍÂɳֵٟ͝ҝÛÜÊ›Ø ÛÜÒ ÒÖ«Î ÉŸÍ QÚֵʛֵҳí ҝÛÜØµÙ³É ÛñË Ù¬Ð‘Ø _É¿ÒîÛÜޏÖ
á×Ðç˝ɳèÀËÂÇ«ÍÂʛֵå›Ç®ÛñËÂɟÍäÐÑËÂÛÜÊ›Ø ^ºÐçØÚè ÐëÙ¬ÐçáÜáÒîËÂБ٠]ßÉIP¥ÎÚáÜÛñÙ³ÛñËÂáñì¿Þ®Ð‘ÛñØ ËäБÛñØÚɟè _ôì ËÂǵɷεÍÂʛåÌÍäÐ‘Þ “æ¹É ٳʛֵáÜè
ҝÛÜÞ¿Öµá×ÐçËÂÉòËÂǵÉãÙ¬ÐçáÜá ÒîËäБ٠]®æ Û²ËÂÇóБ؞Ðç͝Íäгì `ÄéS ÉãèµÊ›Ø ËÈÇÚÐXU“ÉÏ˝ÇÚÉÏÞßÉ¬Ð‘ØµÒ ËÂʿεÍÂÊ U“ÉÓËÂǵÛÜҹǵɟÍÂÉÌí _ÚÖ«Ë
æ¹É æÈÐ‘Ø¯Ë ËÂÊ ÒÇµÊÑæ ÛñËïÔ×ÊÌÍïËÂÇµÉ ÍÂɳֵٟ͝ҝVÛ U“É Ô×ֵصٟËÂÛÜÊ›ØµÒ ËÂÇÚÐçË æ¹É ÇÚXÐ U“É ҝɳɟ؞ÛÜØßËÂÇµÉ ÎµÍÂÉ UôÛÜʛֵÒïҝɳٟËÂÛñʛؾé
ÆÈÇµÉ Ô×ֵصٟËÂÛÜʛØ
ÛÜÒ U“ɟ͝ì®É³Ð‘ÒîìÀËÂÊëæòÍÂÛñËÂÉ·ÛñËÂɟÍäÐÑËÂVÛ U“ɳáñì“í“ҝÛñØÚÙŸÉ ÛñËïÛÜÒ
é Æ¹ÇµÛÜÒ
gcd
î
–
“
©
»
—
’
´
³
Œ
š
F
³
£
Ÿ
Œ
Ÿ
±
”
¦
£
Ÿ
Ž
—
¥
D
Œ
ÞßÉ¬Ð‘ØµÒ ËÂÇÚÐçË¿ËÂǵɟÍÂɞÛñҏʛصáñì Ê›ØµÉ ÍÂɟٳ֫ÍÂҝVÛ U“ÉóٳБáÜá˜í‹Ð‘صèœËÂÇÚÐçˏʛØÚɞÐçεΠɬÐç͝ÒÀÐçË¿ËÂÇµÉ U“ÉŸÍîì ɳصè ʛÔ
ËÂǵÉëÔ×ֵصٟËÂÛÜÊ›Ø _ Ê è«ì“é Æ БÛñá ºÉ³ØµèžÍÉ³Ù³Ö«ÍÂҝÛÜÊ›Ø Ù¬ÐçØ _ÉëÍÂɟÎÚá×Бٳɟè _ ì РҝÛñÞÀÎ áñÉãáÜÊ ÊÌÎ ËÂÇÚÐçË Û²ËÂɟÍäÐç˝VÛ U“ɳáñì
Ö«Î èÚÐçËÂÉ³Ò ËÇÚÉ Ô×ÊÌ͝ޮБáÐç͝å›ÖÚÞßÉŸØ ËÂÒ ÖµØ¯ËÂÛÜá ˝ÇÚÉ ËÂÉÄÍÂÞßÛÜØÚÐçËÂÛÜʛ؏ٳʛصèµÛñËÂÛÜʛØßÛÜÒïҝÐçËÂÛÜÒ YÚɳè¤éÃê˜Ø®ËÂÇµÉ Ù¬Ð‘ÒÉÓʛÔ
íµËÇÚÛñÒÈÖ«Î èÚÐç˝ÉÏٟÊÌ͝ÍÂɳÒî΍ʛØÚèµÒÈËÂʏËÂǵÉÓ˝ÍäБصҝÔ×ÊÌ͝ޮÐçËÂÛÜʛØ
ÞßÊôè é
gcd
(a, b) → (b, a
b)
// POST : return value is the greatest common divisor of a and b
unsigned int gcd2 ( unsigned int a , unsigned int b)
{
while ( b != 0) {
unsigned int a_prev = a;
T \ a = b;
b = a_prev % b ;
}
return a ;
}
›Ê ÖßÒÉ³É ËÂÇÚÐçˋæ¹É å›ÉŸËïáÜʛصå›ÉŸÍ Бصè®áÜɳҝҋ͝ɬБèÚÐ _ÚáÜɷٟÊôèµÉÌí«Ð‘صèßËÂÇÚÐçËÕæ¹É صɳɳè БØßÉIP¥ËîÍäÐ UÌÐÑÍÂÛ×Ð _ÚáÜɹËÂÊ
ÍÂɳÞßɟÞb_ ÉÄÍ·ËÂǵÉâεÍÂÉ UôÛÜʛֵÒU‘БáÜÖµÉëÊ›Ô _ ɳÔ×ÊÌÍÂÉëËÂǵÉàÖ«Î èÚÐçËÂÉâÒîËÂɟЍÛÜØ ËÂǵÉàÒîÎÚÛñ͝ÛñË Ê›Ô " ɳÙÄËÂÛÜÊ›Ø \ é é í
æ¹ÉÏҝǵʛÖÚáñè ËÂǵɟÍÂɟÔ×ÊÌÍÂÉâֵҝÉÏËÂǵÉãÊÌÍÂÛñå›ÛÜaØÚБáÍÂɳֵٟ͝ҝÛVU“ÉâÔ×ÊÌ͝ޏֵá×Ðç˝ÛÜʛؤé
Ö«ÍãÔ×ÖµØÚÙÄËÂÛÜʛØ
Ô×ÊÌÍÏٳʛÞÀÎÚÖ«ËÂÛÜØµå [ VÛ _Ê›Ø ÐçÙ³Ù³Û ØôÖµ
Þ _ ɟÍÂÒ ÛñÒ ØÚÊÌË ËÂБÛÜá ˜É³Øµè ÍÂɟٳ֫ÍÂҝÛVU“ÉÌí _ÚÖ«ËÓÛñË
fib
ÛÜÒ Òî˝ÛÜáÜá ɳБÒîìóËÂÊßæòÍÂÛñËÂÉëÛ²Ë ÛñËÂɟÍÂÐçËÂVÛ U“ɳá²ì“é ɟÞßɳb
Þ _ÉŸÍ·ËÂÇÚÐçË
ÛÜÒ ËÂǵÉàÒÖµÞ Ê›Ô
Бصè
é
S É
Ù¬Ð‘Ø ËÂǵɟ͝ɳÔ×ÊÌÍÂÉëæ·ÍÛñËÂÉãÐ áÜÊôÊÌΞæ ǵʛҝÉëÛñ˝ɟÍäÐçËÂÛñÊ›Ø Ù³Ê›ÞÀÎÚֵ˝FɳnÒ
ÔÜÍÊ›Þ ËÂǵÉâεÍÂFÉ n−1
UôÛÜʛֵҝáñì Ù³Fʛn−2
ÞÀÎÚֵ˝ɳè
U‘БáÜֵɳÒ
ÐçØÚè
ËÇ ÐÑËÈæ¹ÉÏޮБÛÜØ¯ËäБÛÜØ®ÛÜØ ËÂǵiÉ U‘ÐçÍÂÛÜÐ _ÚáÜÉ³Ò FiБصè é
Fi−2
Fi−1
a
b
// POST : return value is the n - th Fibonacci number F_n
unsigned int fib2 ( unsigned int n )
{
if ( n == 0) return 0;
if ( n <= 2) return 1;
unsigned int a = 1; // F_1
unsigned int b = 1; // F_2
for ( unsigned int i = 3; i <= n ; ++ i ) {
unsigned int a_prev = a ; // F_ {i -2}
a = b;
// F_ {i -1}
b += a_prev ;
// F_ {i -1} += F_ {i -2} - > F_i
}
return b ;
}
å“БÛÜØ¤í ˝ÇÚÛñÒëØµÊ›Ø »ÍÂɳٳ֫ÍÂÒîÛVU“ÉLU“ÉŸÍÂҝÛñʛØ
ÛÜÒàÒÖ _ÚÒîËäБدËÂÛ×БáÜá²ì½áñʛØÚå›ÉÄÍàБصè ÞßÊÌÍÂÉ èµÛ Ù³ÖµáñËâËÂÊ
ֵصèÚÉÄÍÂÒîËäБصè ËÂÇÚБØ
í _ÚÖµËß˝ÇÚÛñÒÀËÂÛÜÞßɞfib2
ËÂÇµÉŸÍÉ ÛÜÒ Ð _ É³ØµÉ YµË
ÛñÒßޏֵÙäÇ ÔªÐ‘ÒîËÂɟͳí·ÒÛÜØµÙ³É ÛñË
fib
fib2
ٳʛÞÀÎÚÖ«ËÂɳÒëÉIU“ÉŸÍì ØôÖµÞ_ ɟÍ
é S ǵÛÜáñÉ æ¹Éßæ¹Ê›ÖÚáñè åÌ͝ÊÑæ ʛáñè ÛÜØ æÈБÛñ˝ÛÜØµå
,i
Ô×ÊÌÍÓËÂÇµÉ Ù¬Ð‘áÜá
ËÂÊ®ËÂɟFÍÂiÞß
ÛÜØÚÐç˝n
ÉÌí Œµ©µ±¬–º’ J ›š 囱ŸÛVU“Œ ɳÒÓÖµÒÏËÂǵɿБصÒîæ¹ÉŸÍÏÛÜØ ØµÊ ËÛÜÞßÉÌéb^ ·ØµÔ×ÊÌ͝ËÂÖ
ØÚÐçËÂɳá²ì“íµËÇÚÛñÒ·fib(50)
БصÒîæ¹ÉÄÍ Þ®Ð³ì _ ÉâÛñØÚٟÊÌ͝ÍÂɳٟfib2(50)
˳í ҝÛñØÚٟÉ
ٳʛֵáÜèžÉIP«Ù³ÉŸÉ³è ËÂÇµÉ U‘БáÜÖµÉãÍäÐçØÚå›ÉãÊ›Ô ËÂǵÉãË ì Î É
F50
é`
unsigned int
ê˜ØœËÂǵÛÜÒ¿Ù¬Ð‘ÒÉ æ¹É æ¹Ê›ÖµáÜè εÍÂɳÔ×ɟÍ
Ê U“ÉŸÍ
í‹ÒîÛÜÞÀÎÚáñì ҝÛÜØµÙ³É
ÛÜÒàËÂÊôʽÛÜØµÉ ٟÛÜÉ³Ø ËÔ×ÊÌÍ
fib2
fib
fib
εÍäБٟ˝ÛÜ٬Бá¡ÖÚÒîÉÌéâÆ¹ÇµÉ ÞßÊÌÍÂÉëٳʛÞÀÎÚáÜÛÜÙ³ÐçËÂɳèóÔ×ֵصٟËÂÛñʛؽèµÉ YÚØµÛñËÂÛÜÊ›Ø Ê›Ô
ÛÜÒÓÐÀÞßÊ èµÉŸÍäÐçËÂÉÏεÍÂÛÜÙ³ÉëËÂÊ
fib2
Πгì Ô×ÊÌÍòËÂǵÉãҙΠɳɳèµÖ«ÎóËÂÇÚÐçËÈæ¹Éãå›ÉÄˬé
3.2.5 Primitive recursion
ʛֵå›Çµáñì ҙΠɬР]ôÛÜØµå«í¤Ð®Þ®ÐÑËÂǵɳޮÐçËÂÛÜٳБá¤Ô×ÖÚØµÙŸËÛÜʛؽÛñÒ ¢¤£¬—°¨ž—»–˜— D¥Œ®£³ŒÄ±³”£¦ŽŸ— D¥Œ ÛÜÔÃÛñËÓÙ¬Ð‘Ø _ É¿æòÍÂÛñ˝˝ɳØ
БҹРÔ×ÖÚØµÙŸËÛÜÊ›Ø ÛÜØ ҝֵÙäÇóÐãæÈгìßËÂÇÚÐçË ØµÉ³Ûñ˝ÇÚÉÄ͹èÚÛ²ÍÂɳٟËÂá²ìÀصÊÌ͹ÛÜØµèµÛñÍÂɳٟ˝áñì ٳБáÜáÜÒ Û²ËÂҝɳáÜÔ æ·ÛñËÂÇ
f
٬Бáñá¡ÐÑÍÂå›ÖµÞßÉ³Ø ËÂÒïèµÉŸÎÉ³fصèÚÛñØÚå¿Ê›Ø é [ ÊÌÍòIÉ P«Ð‘ÞÀ
ÎÚáÜÉÌí
f
unsigned int f ( unsigned int n)
\
{
if ( n == 0) return 1;
return f (f(n -1) - 1);
}
ÛÜÒïØµÊÌËÈБáÜáñÊÑæ¹É³è¤í¯ÒÛÜØµÙ³É ÍÂɳٳ֫ÍÂÒîÛVU“ɳáñì®Ù¬ÐçáÜáÜÒ Ûñ˝ҝɳáÜԍæ·ÛñËÂÇ ÐàÐçÍÂå›ÖµÞßɳدËïèµÉŸÎ ɳصèµÛÜØµåàÊ›Ô éÃÆ¹ÇÚÛñÒïèÚÊ É³Ò
ÞßÉ¬Ð‘Ø ËÂÇÚÐçË ËÂÇµÉ ÖµfØÚèµÉŸÍáñì¥ÛÜØµåßÞ®Ðç˝ÇÚɟޮÐçËÂÛÜÙ¬Ðçá Ô×ÖÚØµÙŸËÛÜʛؽÛñÒ ØÚÊÌË ÎµÍÂÛñÞßÛñËÂÛVU“ÉÏÍÂɳٳ֫fÍÂÒÛ U“ÉÌí ÛñË ÖµÒîË
šÞߐ“ɬ– БصÒÏËÂÇÚÐçËâæ¹ÉÇ XÐ U“ÉÀËäÐ ]“É³Ø ËÂǵɏæ·ÍÊ›ØÚå& Ô×ÖµØÚÙÄËÂÛÜʛؤé ê˜ØÚèµÉ³ÉŸè¾í¡ËÂǵÉßÐ _ ÊU“É ÛÜÞÀÎÚáÜɳÞßÉŸØ ËÂÒ
ËÂǵɿޮÐçËÂǵɳޮÐçËÂÛñ٬Бá¾Ô×ÖÚØµÙŸËÛÜʛØÝÒÂÐç˝ÛÜҝÔÜì¥ÛñØÚå
Ô×ÊÌÍâБáÜá í ÐçØÚè½ËÂǵÛÜÒãÔ×ֵصٟËÂÛñÊ›Ø f ÛÜÒÏÊ _ UôÛÜʛֵҝáñì
f(n) = 1
n
εÍÂÛÜÞßÛñ˝VÛ U“É·ÍÂɳֵٟ͝ҝVÛ U“ÉÌé
ê˜ØœËÂÇµÉ É¬ÐçÍÂáñì
˜ËÂÇ Ù³É³Ø ËÖµÍîì“í ÛñËàæÈБ
Ò _ ɳáÜÛñÉ U“ɳè ËÇ ÐÑ˿˝ÇÚÉ Ô×ֵصٟËÂÛÜʛصÒàæ ÇµÊ›Ò
É UÌÐçáÜÖµÉ³ÒÙ³Ð‘Ø ÛÜØ
20
εÍÂÛÜØµÙ³ÛñÎÚáÜ
É _ ÉÀٟʛÞÀÎ Ö«ËÂɟè _ôìÝРޮБÙäǵÛÜØµÉ ÐÑÍÂÉÀIÉ P«Ð‘ÙŸËÂáñì ËÂÇµÉ ÎµÍÂÛÜÞßÛ²ËÂVÛ U“ÉàÍÂɳٳ֫ÍÂÒîVÛ U“ÉÀʛصɳҳé ê˜ØµèÚɟɳè¤í
ËÂÇµÉ Ô×ÖÚØµÙŸËÛÜʛ
Ø U‘БáÜÖµÉ³Ò¿Ê›ØµÉ Ù³Ê›ÞÀÎÚÖ«ËÂÉ³Ò ÛÜØ εÍäБٟËÂÛñÙ³É ^˜ÛÜØµÙ³áÜÖµèµÛÜØµå å›Ù³è
Бصè
`ëٳʛÞßÉ®ÔÜÍÂʛÞ
(a, b)
Fn
εÍÂÛÜÞßÛñ˝VÛ U“É·ÍÂɳֵٟ͝ҝVÛ U“ÉâÔ×ֵصٟËÂÛñʛØÚҟé
ê»ËÈá×ÐçËÂɟ͹ËÂÖ«ÍÂØµÉ³è ʛ֫ËÈËÇ ÐÑËïËÂǵɟÍÂÉãÐçÍÂÉÓٳʛÞÀÎÚÖ«ËäÐ _ÚáÜÉ Ô×ֵصٟËÂÛÜʛصÒïËÂÇÚÐçËÈÐç͝ÉãØµÊÌËïεÍÂÛÜÞßÛñ˝VÛ U“ÉòÍÂÉŸÙ³Ö«Í ÒVÛ U“É‘é ҝÛÜÞÀÎÚáÜÉÀÐçØÚè æ¹É³áñá ]ôØÚÊ¦æ Ø GÉ PµÐ‘ÞÀÎÚáÜɏÛÜÒëËÂǵL
É _ÚÛÜØÚÐç͝ì í
± ôŒ³£¬¨ ©“š š ¶Ä”𠱬–˜—™›š A(m, n)
èµÉ YÚØµÉ³è _ôì

ÜÛ Ô
 n + 1,
ÛñÔ m = 0
A(m, n) =
A(m − 1, 1),
ÛÜÔ m > 0, n = 0 é

A(m − 1, A(m, n − 1)),
m > 0, n > 0
Æ ÇÚÉ ÔªÐ‘ÙŸËËÂÇÚÐçË ËÂǵÛÜҏÔ×ֵصٟËÂÛñÊ›Ø ÛÜÒ¿ØÚÊÌˏεÍÂÛÜÞßÛñËÂÛ U“É ÍÂɳٳ֫ÍÂÒîÛVU“É ÍÂÉ WôÖµÛñÍÂÉ³Ò Ð ÎµÍÂÊ Ê›ÔZ^»ËÂÇÚÐçË æ¹É Úè Ê›Ø Ë
¹
å›ÛVU“ÉÓǵɟÍÂÉ`´é ÒòБáñ͝ɬБè«ìߨµÊÌËÂɳè Ð _ Ê U“É‘í«ÛñËÈÛÜÒ¹ØÚɟٳɳҝÒÂÐÑ͝ì _ÚÖ«ËÈØµÊÌËòÒîÖ Ù³ÛÜɳدËòËÇ ÐÑËÈ˝ÇÚÛñÒïèÚÉIY صñÛ ËÛÜʛØ
ÍÂɳֵٟ͝ҝVÛ U“ɳáñì ֵҝɳÒ
æ Û²ËÂÇóпÐçÍÂå›ÖµÞßɳدËïËÂÇÚÐçËÈèÚÉÄΠɳصèµÒ·Ê›Ø é
A
A
ê»Ë·Þ®Ð³ì®ØµÊÌ
Ë _ ÉãÛñÞßÞßɳèµÛ×ÐçËÂɳá²ìÙŸáÜɬÐçÍÈËÂÇÚÐç˹ËÂǵÉãٟÊÌ͝ÍÂɳÒî΍ʛØÚèµÛÜØµå Ô×ֵصٟËÂÛñʛØ
// POST : return value is the Ackermann function value A (m , n)
unsigned int A ( unsigned int m , unsigned int n ) {
if ( m == 0) return n +1;
if ( n == 0) return A (m -1 ,1);
return A (m -1 , A(m , n -1));
}
‘Ð áñæÈгìôÒÕËÂɟ͝ÞßÛÜØÚÐçËÂɳҳí_ÚÖ«ËP«ÉŸÍÂٟÛÜÒÉ Ð‘Ò ]ôÒ ì“Ê›Ö ˝ÊëҝǵÊÑæ ËÂǵÛÜÒ³éÃÆ Ð _ÚáÜÉ áÜÛÜÒî˝ҋҝʛÞßÉ Ù ]“ÉŸÍÂޮБصØ
Ô×ֵصٟËÂÛÜÊ›Ø U‘БáÜֵɳҟé [ ÊÌÍ
í
áÜÊôÊ ]ôÒ W ÖµÛñËÂÉÈÞßÊôèµÉŸÍäÐç˝ÉÌí _ÚֵˋÒîËäÐçÍîËÂÛÜØµåãÔÜ͝ʛÞ
í“ËÂǵÉ
n)
U‘БáÜÖµÉ³Ò å›ÉÄË IÉ Pô˝ÍÂɳÞßɟáñìÓm
á×ÐçÍÂå›É‘é 3 A(m,
ʛÖë٬БØâ
ÒîËÂÛÜáÜá›ÙŸÊ›ÞÀÎ Ö«ËÂÉ
íÑБá²ËÂǵʛÖÚå›ÇÓËÂǵÛÜÒ¤ËäÐ ]“ɳҡҝ֫m͝ε=ÍÂÛÜҝ4ÛñØÚå›á²ì
A(4, 1)
áÜʛصå ÐçáñÍÂɬБè«ì“é ʛÖ
_ É Ð _ áñÉÃËÂʷٳʛÞÀÎÚֵ˝É
‘БÔÜËÉŸÍ Ð‘áÜá»í 65536
ÇÚÐ‘Ò îʛصáñì( Ðç͝ʛÖÚØµè
ž
¨
°
—
›
Á
«
Š
–
A(4, 2)
2
−3
èµÉ³Ù³ÛÜÞ®Ðçá¡èµÛÜå›ÛñËÒ³é ‹Ö«Ë ËÂǵÉë٬Бáñá¡ËÂÊ
æ·ÛÜáÜá¤ØµÊÌË ËÂɟ͝ÞßÛÜØÚÐçËÂÉ æ Ûñ˝ÇÚÛñØ Ð‘Ø ìžÊ _ÚÒÉŸÍ U‘Ð _ÚáÜÉ
20, 000
A(4,3)
Πɟ͝ÛÜÊôè¤é
ê»Ë Ù¬ÐçØàÛÜØàԪБٟ"
Ë _ É ÒÇµÊ¦æ ØëËÂÇÚÐçË
åÌÍÂʦæ ҡԪБÒîËÂÉÄÍ ËÂÇÚÐ‘Ø Ð‘Ø¯ìãεÍÂÛÜÞßÛ²ËÂVÛ U“É ÍÂɳֵٟ͝ҝVÛ U“É Ô×ֵصٟËÂÛÜʛØ
A(n, n)
ÛÜØ
^ºÐ‘صèžËÂǵÛÜÒÈÛÜÒòРεÍÂÊ Ê›Ô¡ËÂÇÚÐçË
٬БصصÊÌ
Ë _ ÉÏεÍÂÛñÞßÛñËÂVÛ U“ɷ͝ɳٳ֫ÍÂҝVÛ U“KÉ `Äé ɳٳ֫ÍÂҝÛÜʛ؞ÛÜҷРΠʦæ¹ÉŸÍÂÔ×Öµá
n
A
_ÚÖ«Ë Ð‘áñҝʏèÚБصå›ÉŸÍÊ›ÖÚÒ¹ËÂÊ Ê›á˜í¥ÒÛÜØµÙ³ÉÏÛñËÈÛÜҹɬБҙì ËÂʏɳصٳÊôèµb
É ^»ËÂÊ Ê `ïٟʛÞÀÎ áñÛÜÙ¬ÐçËÂɟè ٟʛÞÀÎ Ö«ËäÐÑËÂÛÜʛصҋæ Û²ËÂÇ
U“ɟ͝ì Ô×ɟæ áÜÛÜØµÉ³ÒÈÊ›Ô ÙŸÊôèµÉÌé
T \
n
m
0
1
2
3
0
1
2
3
5
1
2
3
5
13
2
3
4
7
29
4 13 65533 2
Table 6:
65536
›¨½Œ
−3 2
3
4
5
9
61
265536
Dô©¯’•” Œ³Ž Â¶
− 3 n
n+1
n+2
2n + 3
2n+3 − 3
2.
2
..
2| {z } −3
n+3
± ôŒ³£¬¨ ©“š š ŽÈ¶Ÿ”š ±³–˜—š
3.2.6 Sorting
" ÊÌ͝ËÂÛñØÚå®ÐÒÉXWôÖµÉ³ØµÙ³É¿Ê›Ô UÌÐçáÜÖµÉ³Ò ^˜ØôÖµÞ_ ɟÍÂҟí ËÂÉIPôËÂÒ³í ɟ˝ÙÌé `óÛÜØ¯ËÂʮБҝٳɟØÚèµÛÜØµåßÊÌÍÂèµÉŸÍÓÛñÒ Ð U“ɟ͝ì _ БҝÛñÙ
БصèÝÛÜÞÀ΍ÊÌ͝ËäÐ‘Ø¯Ë ÊÌΠɟÍäÐÑËÂÛÜʛؤé [ ÊÌÍëÉIP«Ð‘ÞÀÎÚáÜÉÌí¤Ð®ÒîÎ É³Ù³Û Y ÙU‘БáÜÖµÉÙ³Ð‘Ø _ É¿Ô×ʛֵØÚè Þ¿ÖµÙäÇ ÔªÐ‘Òî˝ɟÍëÛÜØ Ð
ҝÊÌ͝˝ɳè½ËÂÇÚÐ‘Ø ÛÜØ½Ð‘Ø ÖµØÚÒîÊÌ͝ËÂɳè½ÒÉXWôÖµÉ³ØµÙ³É ^˜ÒÉŸÉ$P«ÉÄÍÂÙ³ÛÜÒÉ \ `Äé Ê›Ö ]¥ØµÊÑæ ËÂǵÛÜÒ ÔÜÍÂÊ›Þ èÚБÛÜáñìžáÜÛÜÔ×ÉÌí
Бصè ËÂÇÚÐç!Ë Ò¿æ·Ç ì ì“Ê›Ö ҝÊÌ͝ˏì“ʛֵ
Í Ò³í Ð‘Øµè æ Ç ì ËÂÇµÉžÉŸØ ËÍÂÛñÉ³Ò ÛÜØ Ð ËÂɳáñɟÎÚÇÚÊ›ØµÉ èµÛñÍÂɳٟ˝ÊÌ͝ì ÐÑÍÂÉ
ҝÊÌ͝˝ɳè _ôì ØÚБÞßÉÌé
SÝÉ ÇÚKÐ U“É Ð‘Ò ]“ÉŸè ì“Ê›Ö ÛÜØ P«ÉŸÍÂٟÛÜÒÉ ËÂÊ æ·ÍÛñËÂÉ®ÐóεÍÂʛåÌÍäÐ‘Þ ËÂÇÚÐçË ÒîÊÌ͝ËÂҏРå›Û U“É³ØœÒÉ WôֵɳصٳÉ
ʛÔÈÛÜØ ËÂɟå›ÉŸÍÂÒ * P¥ÉŸÍÂÙ³ÛÜÒîÉ
æÈÐ‘Ò Ð _Ê›ÖµË ޮР]¥ÛÜØµåžËÂǵÛÜÒàÛñØ ËÂÊ Ð Ô×ֵصٟËÂÛÜÊ›Ø ËÂÇÚÐçË ÒÊÌÍîËÂҿБáÜá Ø ÖÚ
Þ _ ɟ͝Ò
èµÉ³ÒÙŸÍVÛ _ ɳè _ ìóÐ å›VÛ U“É³Ø ΠʛÛÜØ ˝ɟ͹ÍäБصå›ÉÌéÕê˜Ø _ ÊÌËÂÇ IÉ P«ÉŸÍÙ³ÛÜҝɳҟíÚì“Ê›Öóæ¹ÉŸÍÉãØµÊÌËòҝ֫ÎÚ΍ʛҝɳèžËÂʏèµÊÀБدì
É Ù³ÛÜɳصٟì ٳʛصҝÛÜèµÉŸÍäÐÑËÂÛÜʛصҳé
·ÉŸÍÂÉ æ¹É æÈÐçØ Ë ËÂʜ٬ÐÑËÂÙäÇ Ö«Î Ê›Ø ËÂǵÛÜÒ Ð‘Øµè ÛÜØ U“ɳÒîËÂÛñå“ÐçËÂÉ ËÂǵÉ
ʛÔãËÂǵɽҝÊÌÍîËÂÛÜØµå
Ä
±
›


¨
¾
¢
ª
’
Œ ¯—˜– J
εÍÂÊ _ÚáÜÉ³Þ é ʛֵå›Çµáñì Òî΍ɬР]¥ÛñØÚå«í ËÂǵɏٳʛÞÀÎÚáÜIÉ P«Û²Ë ìóʛÔïЮεÍÂÊ _ÚáÜÉŸÞ ÛñÒãèµÉ YÚØµÉ³è БÒÏËÂǵɏٟʛÞÀÎ áñIÉ P«ÛñË ì
^»ÍÂֵدËÂÛÜÞßÉ ` ʛÔÏËÂÇµÉ ÔªÐ‘Òî˝ɳÒîË Ð‘áÜå›ÊÌÍÂÛ²ËÂÇµÞ ËÂÇÚÐçËßÒîʛVá U“ɳÒßËÂÇµÉ ÎÚÍÊ _ áñÉ³Þ é ê˜Ø ٳʛÞÀÎÚÖ«ËÂÛÜØµå [ VÛ _ ʛØÚБٳٟÛ
ØôÖµ
Þ _ ɟÍÂÒÏÛÜØ " ɟٟËÂÛÜÊ›Ø é \ é Бصè " ɳٟËÂÛñÊ›Ø é \ é í¤æ¹ÉÇÚKÐ U“É БáñÍÂɳБè«ì½ÒîɳɳØÝËÂÇÚÐçËÏËÂǵɏÍÂֵدËÂÛÜÞßɳÒÓʛÔ
èµÛ ÉÄÍÂÉ³Ø ËÏÐçáÜå›ÊÌÍÂÛñËÂǵÞßÒ¹Ô×ÊÌÍ ËÂǵÉëÒÂÐçÞßÉâεÍÂÊ _ÚáÜÉ³Þ Þ®Ð³ì UÌÐçÍîì ÐÀáÜÊÌË¬é·ÆÈǵÉàÒÂБÞßÉâÛÜҷ˝ÍÂÖµÉàÔ×ÊÌÍÓҝÊÌÍîËÂÛÜØµå
БáÜå›ÊÌ͝ÛñËÂǵÞßÒ³í БÒÈæ¹ÉÏæ ÛÜáñáèµÛÜÒÙ³Ê U“ÉŸÍ ÒîÇÚÊÌÍîËÂáñì“é
ÉÄ˹ÖÚÒ¹ÒîËÂÐçÍË _ ì БØÚБáñ
ì ŸÛÜØµåëʛصÉÏÊ›Ô ËÂÇµÉ îÊ _ U¥ÛÜÊ›ÖµÒ àҝÊÌÍîËÂÛÜØµå БáÜå›ÊÌÍÂÛ²ËÂǵÞßÒÃËÂÇÚÐçˋì“ʛ֞ޮгìÀÇÚXÐ U“É
ٳʛÞßÉ Ö«Îâæ·ÛñËÂÇÏÛÜØ P«ÉŸÍÙ³ÛÜÒÉ é Æ¹ÇÚÉÃҝÛÜÞÀÎÚáÜɟÒîË Ê›ØµÉÃËÇ ÐÑ˾˝ÇÚÉÕБ֫ËÂǵÊÌÍÂҤ٬БØãËÂǵÛÜØ ] ʛÔôÛÜÒ
¨ž—°š —»¨ ”Yڨ͝ÒîË
é VÛ U“ÉŸØ ËÂǵÉÓҝXÉ W ֵɳصٳÉãÊ›Ô U‘БáÜֵɳ
Ò ^˜áÜÉŸË Ò¹Ð‘ÒÒîÖÚÞßÉ ËÇÚÉÄì ÐçÍÂÉÓÛÜØ ˝ɳå›ÉŸÍÂÒ `´í
Yڎ‘›Øµ£¦èږ ÒãËÂǵÉßҝޮБáÜáÜɟÒîËâɟáÜɳÞßɳدËëÊ›Ô ËÂǵÉßҝXÉ W ÖµÉ³ØµÙ³É Õ˝ÇÚÉŸØ ÛñËâÛÜØ ˝ɟÍÂÙäÇÚБصå›É³ÒâËÂǵ¨ž
ÛÜÒ뗰šÉŸáܗ»É³¨ž
Þߔ ɳ¨ دË♎‘æ ›Û²£¦Ë– ÇÝËÂǵÉ
YµÍÂÒîËàɟáÜɳÞßÉ³Ø¯Ë¬éžÆ¹ÇµÉßҝXÉ W ÖÚɟØÚÙŸÉ ØµÊ¦æ ҙËäÐç͝ËÂÒëæ·ÛñËÂÇ ËÇÚÉßÒîޮБáÜáÜɳҙËãɟáÜɳÞßɳدˬí БÒëèµÉ³ÒîÛñÍÂɳè¤
í _ÚÖ«ËëËÂǵÉ
ÍÂɳޮÐçÛÜØµèÚÉÄÍÕÊ›Ô ËÂÇµÉ ÒXÉ W ÖÚɟØÚÙŸÉ ÒîËÂÛÜáñáÚØµÉ³ÉŸèÚÒÕËÂÊ _ ÉòҝÊÌ͝ËÂɟè¾é ‹Ö«Ë‹ËÇÚÛñÒÕÛÜÒÕèµÊ›ØÚÉòÛÜØ ËÂǵÉòÒÂБÞßɹæÈЬì ËÂǵÉ
ҝޮБáñáÜɳÒîËÈɳáÜɟÞßÉ³Ø Ë Ð‘ÞßʛصåËÂǵÉâÍÂɟޮБÛÜØµÛÜØµåÊ›ØµÉ³Ò·ÛÜÒ Ô×ʛֵصè½ÐçØÚè ÛÜØ¯ËÂɟÍÂÙäÇÚБصå›É³èóæ·ÛñËÂÇóËÂǵÉ
Ž‘ŒÄ±Ÿ›
š F
ɳáÜɟÞßÉ³Ø ËÈʛԡ˝ÇÚÉÏҝXÉ W ֵɳصٳÉÌíÐçØÚè ҝÊÀʛؤé
ҝҝֵÞßÛÜØµå ËÂÇÚÐçË ËÇÚÉ ÒÉ WôֵɳصٳɋÛñÒ¾èµÉ³ÒîٟÍÂVÛ _ ɟè _ôìÏРΠʛÛñØ ËÂÉŸÍ ÍÂБصå›É
í
[first, last) ¨ —»š —»¨ ”¨
Ù¬Ð‘Ø _ ÉÏÍÂɬБáñÛ ³É³èžÐ‘ÒòÔ×ʛáñáÜÊÑæ·Ò³é
Ž‘›£¦–
// PRE : [ first , last ) is a valid range
// POST : the elements *p , p in [ first , last ) are in ascending order
void minimum_sort ( int * first , int * last )
{
\
for ( int * p = first ; p != last ; ++ p ) {
// find minimum in nonempty range described by [p , last )
int * p_min = p ; // pointer to current minimum
int * q = p ;
// pointer to current element
while (++ q != last )
if (* q < * p_min ) p_min = q;
// interchange * p with * p_min
std :: iter_swap ( p , p_min );
}
}
ƹÇÚÉ ÒîËäÐçØÚèÚÐç͝è áÜÛV_µÍäÐçÍîì Ô×ÖµØÚÙÄËÂÛÜʛØ
ÛÜØ ˝ɟÍÂÙäÇÚБصå›É³Ò¿ËÇÚÉU‘БáÜÖµÉ³Ò Ê›ÔÈËÂÇµÉ Ê _ ɳٟËÂÒ
std::iter_swap
ΠʛÛÜØ¯ËÂɳèÝËÂÊ _ ìÝÛñ˝ÒãË æ¹Ê ÐçÍÂå›ÖµÞßɳدËÂÒ³é ÆÈǵɟ͝ÉßÛÜÒëБáñÒÊ ÐžÔ×ֵصٟËÂÛÜʛØ
ËÂÇÚÐçËãæ¹É
std::min_element
ٳʛֵáÜèÝֵҝɿËÂÊóå›ÉŸËÏÍÂÛÜè ʛԋËÂÇµÉ ÛÜØµØµÉŸÍãáÜÊôÊÌÎ ¡ÇÚʦæ¹É U“ɟͳí ҝÛÜØµÙ³É æ¹ÉæÈБدËãËÊ Ð‘ØÚБáñì(³É¿ËÇÚɏÔ×ÖµØÚÙÄËÂÛÜʛØ
ÛÜØ èÚÉÄËäБÛÜá˜í¯æ¹ÉÏ͝ɳÔÜÍäБÛÜØ ÔÜÍÂÊ›Þ Ù¬Ð‘áÜáñÛÜØµå Ð‘Ø ì®ØµÊ›Ø ËîÍÂÛVU¥ÛÜБáÒîËäÐçØÚèÚÐç͝è áÜÛ _ÚÍÂÐç͝ìßÔ×ֵصٟËÂÛÜʛØ
minimum_sort
ǵɟÍÂÉÌé
S¼Ç ÐÑË Ù¬ÐçØ æ¹É ÒÂгìœÐ _ Ê›Ö«Ë ËÂÇµÉ ÍÂֵدËÂÛÜÞßÉßʛÔ
Ô×ÊÌÍßÐ å›ÛVU“É³Ø ÍäБصå›É ÆÈÇÚÐçˏÛñË
minimum_sort
èµÉŸÎ ɳصèµÒ ʛØÀËÂǵÉÈÎ áÜÐçËÂÔ×ÊÌÍÂÞ í›ËÂǵÛÜÒÃÛÜҋÔ×ÊÌÍ ÒÖ«ÍÂÉÌé Ø ÐÏÞßÊôèµÉŸÍÂØ í¯ËÂǵɷБáÜå›ÊÌÍÂÛñ˝ÇÚÞ æ·ÛÜáÜá«ÍÂÖµØßޏֵÙäÇ
ԪБÒî˝ɟÍâËÂÇÚÐ‘Ø½Ê›Ø Ð U¥ÛÜØ¯ËäБå›É ٳʛÞÀÎÚÖ«ËÂɟÍÏÔÜÍÂÊ›Þ ËÂÇµÉË æ¹É³Ø¯ËÂÛÜɟËÂǽٳɳدËÂ֫͝ì“é ƹǵɟÍÂÉ¿ÛÜÒÏØÚÊ ÒÖµÙäÇ ËÂǵÛÜØµå
Ð‘Ò ™ËÇÚÉ ÍÂÖµØ ËÂÛñÞßÉÌé ‹Ö«Ë ÛÜÔ æ¹ÉëáñÊôÊ ]žÐçË·æ·Ç ÐÑË·ËÂǵÉàБáñå›ÊÌÍÂÛñËÂÇµÞ èµÊôɳҳíÚæ¹ÉëÙ¬Ð‘Ø YÚØµè Ð ÞßɬБÒîֵ͝ÉâʛÔ
ÍÂÖµØ ËÛÜÞßÉ ËÂÇÚÐçËÈÛÜҹΠáÜÐçËÂÔ×ÊÌÍÂ
Þ ˜ÛÜØµèÚÉÄΠɳصèµÉ³Ø ˬé
èµÊ›ÞßÛÜØÚÐç˝ÛÜØµå ÊÌΠɟÍÂÐçËÂÛÜÊ›Ø ÛÜØ½ËÇÚÉ¿ÒÉ³ØµÒÉ ËÂÇÚÐçËÏÛñËÏÊôٟٳ֫ÍÂÒ U“ÉÄ͝ì ÔÜÍÂXÉ WôֵɳدËÂáñì èµÖ«ÍÂÛÜØµåžÐßÙ¬ÐçáÜá ËÂÊ
ÛÜÒ ËÇÚÉàٟʛÞÀÎÐÑÍÂÛÜҝʛØ
é S ÉàÙ¬Ð‘Ø É U“É³Ø GÉ PµÐ‘ٟ˝áñìóÙ³Ê›ÖµØ¯Ë ËÂǵÉàØôÖµb
Þ _ÉŸÍ
minimum_sort
*q < *p_min
Ê›Ô ÒÖµÙäǽٳʛÞÀÎ Ðç͝ÛÜҝʛصҳíÚèÚÉÄΠɳصèµÛÜØµåßÊ›Ø ËÇÚÉàØ Öµb
Þ _ ÉÄÍ Ê›Ô É³áÜɳÞßÉŸØ ËÂÒ ËÂÇÚÐçË ÐçÍÂÉëËÂL
Ê _ ÉàÒîÊÌ͝ËÂɳè¤é ê˜Ø
ËÂÇµÉ YµÍÂÒîË IÉ P«É³ÙŸÖµËÛÜÊ›Ø Ê›Ô ËÂǵÉ
ÒîËÂÐçËÂɳÞßɳدˬí«ËÂÇµÉ YµÍÂÒîË ÉŸáÜɳÞßɳد˷nÛÜҷٳʛÞÀÎ ÐçÍÂÉ³èžæ·ÛñËÂÇ Ð‘áñá
ҝֵٳٳɟɳèµÛÜØµåßɳáÜɳÞßɳدËÂÒ³éïê˜Øó˝ÇÚwhile
Éâҝɳٳʛصè IÉ P¥É³Ù³Ö«ËÂÛÜʛؤíµËÂǵÉëҝɳٳʛصè ɳáÜɟÞßÉ³Ø ËòÛÜØóٳʛÞÀÎ ÐçÍÉ³èžæ Û²n
ËÂÇ −БáÜ1á
ËÂǵÉ
ÒîÖÚٟٳɳɳèµÛÜØµå®É³áÜɳÞßÉŸØ ËÂÒ³í Бصè ҝÊßʛؤé ê˜Ø ˝ÇÚÉâÒÉ³Ù³Ê›Øµè ˜ËÂÊ ˜á×БÒîË IÉ P«É³ÙŸÖµËÛÜÊ›Ø Ê›Ô ËÇÚÉ
ÒîËäÐÑËÂɳnÞß−ɳد2ˬí YÚØÚБáÜáñì“í¬æ¹É ÇÚXÐ U“É Ê›ØµÉ Ù³Ê›ÞÀÎ Ðç͝ÛÜҝʛؤíÑБصè ËÇ ÐÑ!Ë Ò¾ÛñˬT
é S ÉÕËÂǵɟ͝ɳÔ×ÊÌÍÂÉïÇÚXÐ U“É‹ËÂÇµÉ Ô×ʛáÜáÜwhile
ʦæ ÛñØÚå
Observation 1 ‰ÕŠŒÈ¶Ÿ”š ±³–˜—š minimum_sort Ž‘›£¦–ºŽß© Ž‘Œ ” ŒŸš ±ŸŒóÂ¶ n Œ¬’ªŒ³¨½Œ³š¤–ºŽ¸¹—˜–ºŠ
1 + 2 + ...n − 1 =
n(n − 1)
2
±Ÿ›¨¿¢©“£¬—˜Žç›š¤Ž® ŸŒ¬–˜¸ÓŒŸŒ³š¼Ž‘Œ ” Œ³š ±ÄŒóŒ¬’ªŒ³¨ ŒŸš¤–ºŽçÅ
S¼Ç ìóèµÊ¿æ¹ÉâÒîΠɟٳVÛ YÚ٬БáÜá²ì®Ù³Ê›ÖµØ ËÈËÂǵɳҝÉâٟʛÞÀÎÐÑÍÂÛÜÒÊ›ØµÒ ‹É³Ù¬ÐçÖÚÒîÉàÐ‘Ø ì ÊÌËÂǵɟÍòÊÌΠɟÍäÐÑËÂÛÜʛ؞ÛñÒòÉ³Û ËÂÇµÉŸÍ Î ÉŸÍÔ×ÊÌÍÂÞßɳè¿ÞÖµÙäǏáñÉ³ÒÒ ÔÜÍÂXÉ W ÖÚÉŸØ ËÂáñì^»Ô×ÊÌÍÕÉGPµÐ‘ÞÀÎÚáÜÉÌíçËÂǵÉïèÚɟٳá×ÐçÍäÐÑËÂÛÜÊ›Ø ÒîËäÐç˝ɳÞßÉ³Ø Ë
ÛÜÒ GÉ P«É³Ù³Ö«ËÂɟèžÊ›Øµáñì
ËÂÛñÞßÉ³Ò `Äí¯ÊÌÍïæ Ûñ˝ǮÐçεÎÚÍÊ P¥ÛÜÞ®ÐçËÂɳá²ìàËÂÇµÉ ÒÂБÞßÉ·ÔÜ͝XÉ Wôֵɳصٟì“鋯ÈǵÛÜÒ ÙŸint*
ʛØÚٟɟÍÂØµqÒ =ËÂǵpÉ
n
БҝÒîÛÜ囨µÞßÉ³Ø Ë
æ ǵÛÜÙäÇÝޮгì ÇÚÐçεΠɳØÝÖ«Î ËÂÊ
ËÂÛÜÞßɟҳí¾Ð‘صè ËÂÇµÉ ÉIPôεÍÂɳҝҝÛñʛØ
p_min = q
n(n − 1)/2
«ËÂǵÛÜҹʛصÉãÛñÒòÉ U‘БáÜÖÚÐç˝ɳèžÉ U“ÉŸØ ÞßÊÌÍÂÉÓÔÜÍÂXÉ WôֵɳدËÂáñì“í«ØÚБÞßɳá²ì
ËÂÛñÞßɳҳé
++q != last
n(n − 1)/2 + n
ƹÇÚÉ ËÂÊÌËäÐçáÃØ Öµb
Þ _ ÉÄÍãʛÔÕÊÌΠɟÍäÐÑËÂÛÜʛصÒÓÛÜÒ ËÂǵɟÍÂɳÔ×ÊÌÍÂÉ ÐçËãÞßʛÒîË
Ô×ÊÌÍâҝʛÞßÉ Ù³Ê›Ø ÒîËäÐçØ ËÂÒ
é [ ÊÌÍ á×ÐçÍÂå›É í‘ËÂǵÉÃáÜÛÜØµÉ¬Ðç;ËÂɟÍÂÞ
ÛÜҾصɳå›áÜÛÜå›Û _ cáñ1É n(n
ٳʛÞÀ−Î Ðç1)/2
ÍÂɳèâ˝+
ÊòËÂcǵ2É nW ÖÚБè«ÍäÐçËÂÛÜÙ ËÂÉÄÍÂÞ
c1 , c2
n
c n
Úæ¹ÉëÙ¬Ð‘Ø ËÂǵɟ͝ɳÔ×ÊÌÍÂÉëٳʛصٳáñÖÚèµÉâ˝2Ç ÐÑË·ËÂǵÉâËÂÊÌËÂÐ‘á¡Ø Öµb
Þ _ ÉÄÍ Ê›Ô ÊÌΠɟÍÂÐçËÂÛÜʛصҷصɳɟèÚɟè ˝Ê
c1 n(n − 1)/2
ҝÊÌÍË Ø Öµb
Þ _ ÉÄÍÂÒ ÛÜÒ¡ÎÚ͝ÊÌÎ ÊÌ͝ËÂÛÜʛØÚБá›ËÂÊòËÂÇµÉ ØôÖµ
Þ _ ÉŸÍ Ê›Ô«ÙŸÊ›ÞÀÎÐÑÍÂÛÜÒÊ›ØµÒ _ ÉŸË æ¹É³É³Ø ҝXÉ W ֵɳصٳɹɳáÜɳÞßɳدËÂÒ³é
n
T \ Æ ÇµÛÜÒ ÛÜÞÀÎÚáÜÛÜÉ³Ò ËÂǵÉïÔ×ʛáÜáÜʦæ ÛñØÚå ÛñÔ¥ì“ʛ֏ÞßɬÐçҝ֫ÍÂɋËÂǵɋÍÂֵدËÂÛÜÞßÉÃʛԵ˝ÇÚÉ æ·ÇµÊ›áÜɋҝÊÌÍîËÂÛÜØµå БáÜå›ÊÌ͝ÛñËÂÇµÞ í
È
ËÂǵÉã͝ɳҝֵáñËÂÛÜØµå¿ËÂÛÜÞßÉ
æ·ÛÜáÜá _ ÉÏεÍÂÊÌÎ ÊÌ͝ËÂÛñÊ›Ø ÐçáËÂÊ ËÂǵÉã˝ÛÜÞßÉ
ËÇ ÐÑË·ÛÜÒ _ ɳÛñØÚåÒîÎ É³Ø¯Ë æ Û²ËÂÇ
Ttotal
Tcomp
ٳʛÞÀÎ ÐçÍÂÛñÒÊ›ØµÒ _ ÉŸË æ¹É³ÉŸØ¼ÒîÉXWôÖµÉ³ØµÙ³É É³áÜɟÞßÉ³Ø ËÂҟé " ÛÜØµÙ³É
ÛÜÒÀÛÜØ ËÂÖ«ÍÂØ εÍÂÊÌÎ ÊÌÍîËÂÛÜʛØÚБá¹ËÂÊÝËÂǵÉ
ØôÖµ
Þ _ ɟÍãʛÔïٳʛÞÀÎ ÐçÍÂÛÜÒîʛØÚÒÏÛñËÂÒîɳáÜÔºí¡ËÇÚÛñÒâØôÖµÞ_ ɟÍâÛÜÒëÐ å›ÊôTÊôcomp
è ÛñØÚèµÛÜÙ³ÐçËÂÊÌÍÏÔ×ÊÌÍëËÂǵÉÀÉ Ù³ÛÜɳصٟì Ê›Ô ËÂǵÉ
БáÜå›ÊÌ͝ÛñËÂÇµÞ é
ê˜ÔÈì“Ê›Ö ËÂǵÛÜØ ] Ð _Ê›ÖµË ÒîÊÌ͝ËÂÛÜØµå ÞßÊÌÍÂÉßٳʛÞÀÎÚáÜÛñÙ¬ÐçËÂɳè UÌБáñÖÚÉŸÒ ^»áÜVÛ ]“ÉÀØÚБÞßɳÒàÛñØ ÐóËÂɟáÜɟÎÚǵʛØÚÉßèµÛ ÍÂɳÙÄËÂÊÌ͝aì `´í РٳʛÞÀÎ ÐçÍÂÛñÒÊ›Ø _ ÉŸË æ¹É³ÉŸØ Ë æ¹ÊßɳáñɳÞßÉ³Ø ËÒ·ÞßÛÜå›Ç¯Ë·É U“ÉŸØ _ ɟٳʛÞßÉâËÂǵÉëҝÛñØÚå›áñÉâÞßʛÒîËòËÂÛÜÞßÉ Ù³Ê›ØµÒÖµÞßÛÜØµå ÊÌ΍ɟÍäÐçËÂÛñʛؾé¹ê˜Ø ҝֵÙäÇ½ÐÒÙ³ÉŸØ ÐÑÍÂÛÜÊ«í
ޮгì ɬÐçË Ö«Î½Ð‘áÜÞßʛÒîËÈÉ U“ÉÄ͝ìôËÂǵÛÜØµåßʛÔ
í
Ttotal
comp
ޮР]ôÛÜØµå ˝ÇÚÉÏٳʛÞÀÎ ÐçÍÂÛñÒÊ›Ø®Ù³Ê›ÖµØ Ë ÐçØžÉ U“É³Ø ÞßÊÌ͝TÉã
ÐÑÎÚεÍÂÊÌεÍÂÛÜÐçËÂÉÓÞßɬБҝ֫ÍÂÉÓÊ›Ô¡É Ù³Ûñɳصٟì“é
Æ Ê Ùäǵɳ٠]œËÇ ÐÑËÀБáñá¹ËÇÚÛñÒ¿ÛñÒ ØµÊÌË Ê›Øµáñì åÌ͝ɟì ˝ÇÚɟÊÌ͝ì“í áÜÉŸË¿ÖµÒ Þ®Ð ]“É ҝʛÞßÉ®IÉ PôΠɟÍÂÛñÞßÉ³Ø ËÂҿБصè
ÞßɬБÒîֵ͝ÉëËÂÇµÉ ËÛÜÞßÉëËÂÇÚÐçËÓÛñË ËäÐ ]“ɳÒÏËÊ GÉ P«É³Ù³Ö«ËÂÉ ÐÀÎÚ͝ʛåÌÍäÐ‘Þ æ Û²ËÂÇ ËÂǵɿÔ×ʛáñáÜÊÑæ·ÛÜØµå
Ô×ÖµØÚÙÄËÂÛÜʛؤí
main
Ô×ÊÌÍ UÌÐç͝ÛÜÊ›ÖµÒ U‘БáÜÖµÉ³Ò¾Ê›Ô é Ò¡Ê›Ö«Í ™ËÂÉ³Ò™Ë Ù¬ÐçÒÉ «í¦æ¹ÉÕÖµÒÉ ËÂÇµÉ Öµ
Þ _ áñɳèÓҝXÉ WôֵɳصٳÉ
í
n
0, n−1, 1, n−2, ...
БصèÐ‘ÔÜËÂÉŸÍ ÇÚXÐ U¥ÛÜØµå Ù¬ÐçáÜáÜɳèàËÂǵÉïÔ×ֵصٟËÂÛÜʛØ
ÔÜÍÂÊ›Þ Ð _Ê U“ÉÌíÌæ¹ÉïÙäǵɳ٠] æ ǵɟËÂÇµÉŸÍ æ¹ÉÈØµÊ¦æ
minimum_sort
ÛÜØµèµÉ³É³èóÇÚXÐ U“Éã˝ÇÚÉãБҝٟɳصèÚÛñØÚåÒXÉ W ÖÚɟØÚٟÉ
é ɟҳí«ËÂǵÛÜÒÈεÍÂʛåÌÍÂÐ‘Þ èÚÊ É³Ò·ÊÌ˝ÇÚÉÄÍòËÂǵÛÜØµå›Ò
ÐçÎ Ðç͝ËÕÔÜÍÂÊ›Þ ËÂÇµÉ Ð‘ÙŸËÖ ÐçáÚÒîÊÌ͝ËÂÛÜØµå«í _ ֫ˋБáÜáÚ0,Бèµ1,èµ.ÛñËÂ.ÛÜ.ʛ,ØÚnБá«−ÊÌ1΍ɟÍäÐçËÂÛñʛØÚÒÃÐç͝
É îÙäǵɬÐçÎ ëÛÜØ ˝ÇÚÉòÒÉ³ØµÒÉ·ËÇ ÐÑË
ËÂǵɳÛñÍëØôÖµb
Þ _ÉŸÍàÛÜÒëεÍÂÊÌÎ ÊÌÍîËÂÛÜʛØÚБá ËÂÊ
ÐçË ÞßÊ›Ò™Ë ÃБٳٳÊÌÍÂèµÛÜØµå ËÂÊ Ê›Ö«Í¿Ð _ Ê U“É®áÜÛÜØµÉ ʛÔòÐçÍÂå›ÖµÞßɳدËÂÒ³í
ËÂǵɟì ҝǵʛֵáÜèžËÂǵɟ͝ɳÔ×ÊÌÍÂÉâØµÊÌËÈÞ®Ðç˝˝ɟͬn
é
int main ()
{
int n = 100000; // number of values to be sorted
int * a = new int [n ];
std :: cout < < " Sorting " < < n < < " integers ...\ n";
// create sequence : 0 , n -1 , 1 , n -2 ,...
for ( int i =0; i < n ; ++ i)
if ( i % 2 == 0) a[ i ] = i /2; else a[i ] = n -1 - i /2;
// sort into ascending order
minimum_sort ( a , a+n );
// is it really sorted ?
for ( int i =0; i <n -1;++ i )
if ( a[ i ] != i ) std :: cout < < " Sorting error !\ n";
delete [] a;
return 0;
}
Æ Ð Ú_ áÜÉ ÒÖµÞßÞ®ÐçÍÂ۟ɳÒÏ˝ÇÚÉ¿ÍÂɳҝֵáñ˝ҳé [ ÊÌÍâÉ U“ÉŸÍì ‘U БáÜÖµÉÀÊ›Ô í
ÛÜÒã˝ÇÚÉ ØôÖµÞb_ÉŸÍëʛÔ
å“БٳʛÞÀÎ Ðç͝ÛÜҝʛصÒ
^ 9 ٳʛÞÀÎ Ðç͝ÛÜÒÊ›ØµÒ `ÄíµÐ‘ٟٳÊÌÍÂèµÛÜØµåËÂÊ _ÚÒÉŸÍ UÌÐç˝nÛÜÊ›Ø Gcomp
é¹ê˜Ø ÊÌËÂǵɟͷæ¹ÊÌÍÂèµÒ³í
&
-
10
&
!2(2.*
8#*CBI:
+(- 7"
J
6&2*
/
%2/
/ST *
7&7
>*T
%"K2**
( #,%7 1 1*
2!*
Û
Gcomp=
77..B
\\
n
Gcomp
Time (min)
sec/Gcomp
í é
\ í \
é í \
í é
!
\
é
í í \
\
é ÞßÛÜØµÛÜ޿ֵ޺ҝÊÌ͝Ë
”¨½ ŸŒ³£žÂ¶®±Ä›¨¢©“£¬—»Ž‘›š¤Ž®©“šFž£¬”š¤–˜—°¨ Œ Â¶
Table 7:
é
ÛñÒÕËÂÇµÉ Ð _ ÒîʛáÜÖ«ËÂÉÈ͝ÖÚØ¯ËÂÛÜÞßɹʛԍËÂǵÉòεÍÂʛåÌÍÂÐ‘Þ ÛñØÀÞßÛÜØôÖ«ËÂɟÒÕÐçØÚèßÒîɳٳʛصèµÒ³íôʛØ
ޮБدì
ҝɳٟʛØÚèµÒÈËÂǵÉÏεÍÂʛåÌÍäÐçÞ ØµÉ³ÉŸèÚÒÈËÂʏ΍ɟÍÂÔ×ÊÌÍÂÞ Ê›ØµÉ ÛÜå“БٳʛÞÀÎ ÐçÍÂÛñҝʛؤé
ÆÈǵɷËÂÐ _ÚáÜÉòÒîÇÚʦæ ÒÃËÂÇÚÐçËÃËÂǵɷØôÖµ
Þ _ ɟ͋ʛԍҝɳٳʛصèµÒ‹Î ÉÄÍ Ûñå“БٳʛÞÀÎ ÐçÍÂÛÜÒîʛ؏ÛÜÒÕÐçÍÂʛֵصè é Ô×ÊÌ͹БáÜá
ٳʛصҝÛÜèµÉŸÍÉ³è U‘БáÜÖµÉ³Ò Ê›Ô é Ò ÎµÍÂɳèµÛÜٟ˝ɳè Ð _ Ê U“É‘íËÂǵÉëÍÂÖµØ ËÂÛñÞßÉâÛÜØ εÍäБٟËÂÛñÙ³ÉëÛÜÒ ËÂǵɟ͝ɳÔ×ÊÌÍÂÉ ÛÜØµèµÉ³É³è
εÍÂÊÌÎ ÊÌ͝˝ÛÜʛØÚБáÕËÂÊ ËÂǵÉߨ nÖÚ
Þ _ ÉŸÍ Ê›ÔÈٳʛÞÀÎ ÐçÍÂÛñÒÊ›ØµÒ _ ÉŸË æ¹É³ÉŸØœÒXÉ W ÖµÉ³ØµÙ³É ÉŸáÜɳÞßɳدËÂÒ³é ÆÈǵÛÜÒàØ Öµb
Þ _ ÉÄÍ
WôÖÚБè«ÍÂÖ«ÎÚáÜɳҹÔÜÍÂʛÞðʛصÉãٳʛáñÖÚÞߨ®ËÂÊ ËÂǵÉâØµIÉ PôˬíµÐ‘صèóҝÊÀèµÊ ɳÒÈ˝ÇÚÉÓÍÂÖµØ ËÛÜÞßÉÌé
SÝɏБáÜÒÊ ÒÉ³É ËÂÇÚÐçËÏҝÊÌ͝˝ÛÜØµå Ø ÖÚ
Þ _ ÉŸÍÒ ÖÚÒîÛÜØµå
ÐçεΠɬÐç͝ÒÏËÂ
Ê _ ÉàεÍÂÉŸËË ì ÛÜØµÉ ¨
»
—
š
»
—
¨
”
¨
î
‘
Ž
›

¦
£
–
Ù³ÛÜÉŸØ Ë¬é í í ÛñÒÈØµÊÌËòá×ÐçÍÂå›
É _ ì ËÂÊ èÚЬì Ò¹ÒîËäÐçØÚèÚÐç͝èÚҟí _ Ö«ËÈËÂÊ ÒîÊÌ͝ËòËÇ ÐÑËòÞ®ÐçØ ìߨ ÖÚ
Þ _ ɟ͝ÒÈËäÐ ]“ɳÒ
ÐçεΠɬÐçÍÂÒ ËÂ
Ê _ ÉÈٳʛصÒîËäÐ‘Ø¯Ë¬í›æ¹É¹Ù¬Ð‘ØÀÉ U“ÉŸØÀɳÒîËÂÛñÞ®ÐçËÂÉ
ÞßÊÌÍÂÉ ËÂÇÚБ؏ʛصÉòÇµÊ›Ö«Í VÛ U“É³Ø ËÂÇÚÐçË
ËÂÇµÉ ËÂÛñÞßÉ ËÇ ÐÑËëÛñËÏæ¹Ê›ÖµáÜè ËäÐ ]“ɏËÂÊóҝsec/Gcomp
ÊÌÍË í í ØôÖµ
Þ _ ɟÍÂҟí ÒÂгì“é [ ÊÌÍëËÂǵÛÜÒ³í¾æ¹É èµÉŸÍÂVÛ U“É ÔÜÍÂʛÞ
_ ÒîÉŸÍ U‘ÐçËÂÛÜÊ›Ø ËÂǵɮ͝XÉ WôÖµÛñÍÂÉŸè Ø ÖÚ
Þ _ ɟÍëÊ›Ô ÛÜå“БٳʛÞÀÎ ÐçÍÂÛñҝʛصb
Ò ^ í `âБصè ޏֵáñ˝ÛñÎÚáñì ÛñËàæ Û²ËÂÇ
é éÃÆ¹ÇµÉãÍÂɳÒîÖÚá²ËÂÛÜØµå í ҝɳٳʛصèµÒ Ðç͝ÉâБáñÞßʛÒîËïË æ¹ÊèÚгì¥Ò³é
ÃÒîÒÉ³Ø ËÛ×БáÜáñì ˝ÇÚɽÒÂБÞßÉ YÚå›Ö«ÍÂÉ³Ò ÍÉ³ÒÖµáñË ÔÜÍÂÊ›Þ ÍÂֵصصÛÜØµå ÊÌ˝ÇÚÉÄÍ æ¹É³áñá ]ôØÚÊ¦æ Ø ҝÛÜÞÀÎÚáÜÉ ÒÊÌÍîËÂÛÜØµå
БáÜå›ÊÌ͝ÛñËÂǵÞßÒ¤áÜVÛ ]“É
ÊÌÍ
é ¹Ð‘Øàæ¹Éïèµ
*
Ê _ ɟ˝ËÂÉÄÍ
ɳҳíÌæ¹ÉïÙ¬ÐçØ¾í“ÐçØÚèàÍÂɟٳ֫ÍÂҝÛÜʛØ
Ì ¦’ªŒ îŽç›£¦–
—°š¤Ž‘Œ³£¦– îŽç›£¦–
ǵɳáñÎÚÒÈÖÚÒ¹ËÂʏèÚʏÛñ ¬Ë ”¾
10−9 n(n − 1)/2 Time
ЏÞßÊ èµÉŸÍÂØ Ó
é
ÛÜÒ
^˜ÛÜØ ÒîɳٳʛصèµÒ `òèµÛVU¥ÛñèÚɟè _ôì
БصèóËÂɳáÜáñҷֵҷǵʦæ
sec/Gcomp Time
Gcomp
Æ ÇµÉ‹Î ÐçÍäБèµÛÜå›Þ _ ɳǵÛÜØµèëËÂǵÉ
¹
БáÜå›ÊÌÍÂÛ²ËÂÇµÞ ÛñÒ ËÂǵÛÜÒ ¾ÛÜÔµÐòεÍÂÊ _ÚáÜÉ³Þ ÛÜÒ ^°ËÂÊôÊ `
½
¨
³
Œ
î
£
«
Á
Œ
î
‘
Ž
›

¦
£
–
á×Ðç͝å›ÉÈËÂÊ _ É·ÒîʛáVU“ɳèÀèµÛñÍÂɟٟËÂáñì“í“ÒÖ _ èµÛVUôÛÜèµÉòÛñËÃÛÜØ¯ËÂÊâÒîޮБáÜáÜÉŸÍ ÒîÖa_µÎµÍÂÊ _ÚáÜɳÞßÒ ËÂÇÚÐçˋÐçÍÂÉÈɬБÒîÛÜɟ͋˝ÊâҝʛáVU“É‘í
Бصè ËÂÇµÉ³Ø ÎÚÖµËòËÂǵÉëÊ U“ÉŸÍäБáÜá¡ÒÊ›áÜÖ«ËÂÛÜÊ›Ø ËÂʛå›ÉŸËÂÇµÉŸÍ ÔÜÍÊ›Þ ËÂǵÉëҝʛáÜÖ«ËÂÛñʛØÚÒÈÊ›Ô ËÂǵÉëÒÖ _µÎµÍÂÊ _ÚáÜɳÞßÒ³éÈÆ¹ÇÚÛñÒ
Î ÐçÍäБèµÛÜå›Þ Ûñ
Ò ]ôØÚÊ¦æ ØžÐ‘Ò
é
F“— DÌN— FµŒß©“
š
F ±Ÿ›š ”¡Œ³£
·ÉŸÍÂÉ®ÛÜÒâÇÚʦæ ËÂǵÛÜÒãæ¹ÊÌÍ ]¥ÒàÔ×ÊÌͿҝÊÌ͝˝ÛÜØµå«é ÉÄË ÖÚÒ ÛÜÞ®Ðçå›ÛÜØµÉ¿ËÂÇÚÐçËâËÂǵÉߨôÖµb
Þ _ÉŸÍÂÒâËÂÊ _ ÉßÒîÊÌ͝ËÂɳè
ٳʛÞßÉÈБÒÕÐÏèµÉ³Ù ]Ê›ÔÙ¬Ðç͝èÚÒŸí¯æ·ÛñËÂǏ˝ÇÚÉÈØôÖµ
Þ _ ɟÍÂÒ æòÍÂÛñ˝ËÂÉŸØ Ê›Ø ËÂÇµÉ³Þ é ÆÈǵ
É YÚ͝ÒîˋҙËÂɟÎßÛÜÒ ËÂÊÏÎÐÑ͝ËÂÛñËÂÛñʛØ
ËÂǵɿèÚɟ٠] ÛÜØ¯ËÂÊ®Ë æ¹Ê ҝޮБáñáÜÉŸÍ èµÉ³Ù ]¥ÒãʛԋÇÚБáÜÔ ËÂÇµÉ¿ÒÛ ³É¿É¬Ð‘ÙäÇ¤é¿ÆÈÇµÉ³ÒÉ Ë æ¹ÊžèµÉ³Ù ]¥ÒâÐçÍÂÉàËÂǵɳØÝÒîÊÌ͝ËÂɳè
ÛÜØµèµÉŸÎ ɳصèµÉ³Ø¯ËÂáñì ÔÜÍÂÊ›Þ É¬Ð‘ÙäÇ ÊÌËÂÇµÉŸÍ¬í æ·ÛñËÂÇóËÂǵÉàÒÂÐçÞßÉâÞßɟËÂÇµÊ è _Úֵ˷ËÂǵÉàޮБÛÜØóÛÜØµåÌÍÂɟèÚÛñÉ³Ø Ë·Ê›Ô ËÇÚÛñÒ
ÞßɟËÂÇµÊ è ٟʛÞßɳÒÓʛØÚá²ì ØÚÊ¦æ æ¹É ÇÚXÐ U“É¿ËÊ Þßɟ͝å›É ˝ÇÚÉàË æ¹Ê ҝÊÌ͝ËÂɳè èÚɟ٠]ôÒãÛñØ ËÂÊ Ê›ØµÉ¿ÒîÊÌ͝ËÂɳè½èÚɟ٠]é
‹Ö«Ë·ËÂǵÛÜÒÈÛÜÒÈØµÊÌË ÇÚÐçÍÂè Õæ¹ÉÏÎÚÖµËòËÂǵÉãË æ¹Ê èµÉ³Ù ]ôÒ ÛÜØóÔÜÍÂÊ›Ø¯Ë Ê›Ô ÖµÒ ^ _ ÊÌËÂÇóصʦæ ÇÚXÐ U“ÉãËÂÇµÉ³Û²Í ÒÞ®Ð‘áñáÜɳÒîË
Ù¬Ðç͝è½Ê›Ø ËÂÊÌÎ ` ÐçÒ áÜʛصå®Ð‘Ò·ËÂÇµÉŸÍÉ ÐçÍÂÉàÒîËÂÛñáÜá¡Ù³ÐçÍÂèµÒ ÛÜØ ʛصÉëÊÌ
Í _ ÊÌËÂÇ Ê›Ô ËÂǵÉëèµÉ³Ù ]¥Ò³íËÇÚÉàÒîޮБáÜáÜɟÍòʛÔ
ËÂǵÉòË æ¹Êâ˝ÊÌή٬ÐçÍÂèµ
Ò ^˜ÊÌÍÕËÂǵɷҝÛñØÚå›áñÉòÍÂɳޮÐçÛÜØµÛÜØµåÓ˝ÊÌή٬ÐçÍÂè `ÃÛñÒÕËäÐ ]“ÉŸØßÊ Ð‘ØµèÀÎÚÖ«Ë Ö«ÎÚҝÛÜèµÉòèµÊ¦æ ØßʛØ
ÐâØµÉŸæ èÚɟ٠] ËÂÇÚÐçË ÛÜØÀ˝ÇÚÉ ÉŸØÚèßÍÂÉÄÎÚ͝ɳҝɳدËÂÒ ËÂǵɷÍÂɳÒîÖÚá²ËïÊ›Ô ËÂÇµÉ Ê U“ÉÄÍäБáÜá ҝÊÌ͝ËÂÛÜØµåâεÍÂÊ Ù³É³ÒÒŸé [ ÛÜå›Ö«ÍÂÉ U¥ÛñҝÖÚБáÜÛ ³ÉŸÒ¹ËÇÚÉÏÞßɟÍÂå›ÉÓÒî˝ɟξé
·ÉŸÍÂÉ ÛÜÒ·ÇÚʦæ
Ù³Ð‘Ø _ÉëÍÂɬБáÜÛ ³É³è ÛÜ&
Ø àí¡ÐçҝҝֵÞßÛÜØµå ËÂÇÚÐçË æ¹ÉàÇÚXÐ U“É¿ÐÀÔ×ÖµØÚÙÄËÂÛÜʛØ
ËÂÇÚÐçË ÎÉŸÍÂÔ×Ę̂½
ÍÂÞߌ³Ò£îÁ«ËŒ ÇڙɹŽ‘›Ð _£¦– Ê U“ÉïÊÌ΍ɟÍäÐçËÂÛñʛؿʛԵÞßɟ͝å›ÛÜØµå·Ë æ¹ÊÏÒîÊÌ͝ËÂɳè¿ÒXÉ W ÖÚɟØÚٟɳÒÕÛñØ ËÂÊ Ê›ØµÉïҝÊÌ͝˝ɳè
merge
ҝXÉ W ֵɳصٳÉÌé
Merge-sort.
// PRE : [ first , last ) is a valid range
T \K
2
1
1
1
4
6
2
2
3
5
Figure 19:
4
6
4
3
2
1
3
2
1
3
5
4
6
3
4
5
6
5
Œ³£îÁ›—°šÁ –˜¸Ó Ž‘›£¦–ŒGF FµŒŸ± ‘Ž Â¶ß±Ä©›£ F¯Ž—°š¤–Ý›š Œ Žç›£¦–ŒIF FµŒÄ±
// POST : the elements *p , p in [ first , last ) are in ascending order
void merge_sort ( int * first , int * last )
{
int n = last - first ;
if ( n <= 1) return ;
// nothing to do
int * middle = first + n /2;
merge_sort ( first , middle ); // sort first half
merge_sort ( middle , last );
// sort second half
merge ( first , middle , last ); // merge both halfs
}
ê˜ÔÚ˝ÇÚÉÄÍÂÉïÛÜÒ ÞßÊÌÍÂÉ‹ËÇ ÐçØ¿Ê›ØµÉïɳáñɳÞßÉ³Ø Ë ËÂÊ ÒÊÌ͝ˬíÌ˝ÇÚɹÔ×ֵصٟËÂÛÜÊ›Ø ÒîÎÚáÜÛ²ËÂÒ ËÂÇµÉ ÍäБصå›É
last)
Б[first,
صè
éçÖµÒîË
ÛÜØ¯ËÂÊ Ë æ¹Ê ÍäБصå›É³Ò
Бصè
ʛԵáÜɳصåÌËÂǵÒ
last)
БҋÐÏÍÂɳÞßÛñØÚèµÉŸÍ³í›Ô×ÊÌ[first,
Í¹Ð‘Ø ì¿ÍÂɬÐçmiddle)
á Ø ÖÚÞ_ ÉŸÍ í [middle,
ÛÜÒ ËÂǵɷÒîÞ®
БáÜáÜɳҙËÕÛñØ ËÂɳå›ÉÄ͋åÌÍÂɳn/2
ÐçËÂɟ͋ÊÌÍ ÉXW Ö n/2
ÐçáÚËÂÊ ^ ÍÂʛֵصèµÉ³è ֵΠ`ÄíБصè
ÛÜÒ·ËÂǵÉëá×ÐÑÍÂå›É³ÒîxË·ÛÜØ xË ɟå›ÉŸÍ ҝޮБáñáÜɟÍòÊÌÍ ÉXWôÖÚБá¡ËÂÊ
^! ͝ʛÖÚØµèµÉ³è èµÊÑæ·xØ
`Äxé
ê˜Ô ÛñÒÕÉ U“ɟؾí _ ÊÌËÂÇ U‘БáÜÖµx ɳÒ
Бص
è ÐçÍÂÉÈÉXWôÖÚБáµËÂÊ
í БصèÀÊÌËÂxǵɟÍîæ x ÛÜҝɑí“˝ÇÚÉ YµÍÂÒîËUÌÐçáÜÖµÉ
n
n/2
n/2
n/2
ÛÜÒÈҝޮБáÜáñÉŸÍ _ôì ʛصÉÌé
Ҟ۲ËÂҞصIÉ PôËóÒîËÂÉÄΡí ËÂÇµÉ Ð‘áÜå›ÊÌÍÂÛñ˝ÇÚÞ ÍÂɟٳ֫ÍÂҝVÛ U“ɳá²ì ҝÊÌÍîËÂÒ ËÂǵɽɳáÜɳÞßɳدËÂÒ èÚɟҝٟÍÂVÛ _É³è _ôì _ ÊÌËÂÇ
ÍäБصå›É³ÒŸéßê˜ØÝËÂÇµÉ É³Øµè¤í Û²ËâÙ¬ÐçáÜáÜÒÓËÂǵɏÔ×ֵصٟËÂÛÜʛØ
ʛØÝËÂÇµÉ Ë æ¹Ê ÍäБصå›É³Ò³éßê˜Ø ٟʛÞßÞßÉ³Ø ËÂÛñØÚåÀ˝ÇÚÉ
merge
á×ÐçËîËÂɟͮÔ×ֵصٟËÂÛÜÊ›Ø¤í¹æ¹É ҙËÂÛÜÙ ] ËÂÊ ËÂÇµÉ èÚɟ٠] БØÚБáñʛåÌìœËÂÇÚÐçËßæ¹É ÇÚXÐ U“ɽֵҝɳè Ð _ Ê U“ÉÌé ê˜ÔÓì“Ê›Ö ÇÚXÐ U“É
ֵصèÚÉÄÍÂÒîËÂÊ Êôè ˝ÇÚÉÏèµÉ³Ù ]žÞßÉÄÍÂå›ÛÜØµåëεÍÂÊôٳɟҝҳíµì“ʛ֞æ ÛÜáñáΠɟÍÂٟɳVÛ U“ÉÓËÂǵÉãèµÉ YÚØµÛñËÂÛÜÊ›Ø Ê›Ô
Ð‘Ò _ ɳÛñØÚå
merge
Òî˝ÍÂБÛÜå›Ç ˝Ô×ÊÌ͝æÈÐçÍÂè¤é
// PRE : [ first , middle ) , [ middle , last ) are valid ranges ; in
//
both of them , the elements are in ascending order
void merge ( int * first , int * middle , int * last )
{
int n = last - first ;
// total number of cards
int * deck = new int [ n ]; // new deck to be built
int * left = first ;
// top card of left deck
int * right = middle ; // top card of right deck
for ( int * d = deck ; d != deck + n ; ++ d )
// put next card onto new deck
\
if
( left == middle )
else if ( right == last )
else if (* left < * right )
else
*d
*d
*d
*d
=
=
=
=
* right ++;
* left ++;
* left ++;
* right ++;
//
//
//
//
left deck is empty
right deck is empty
smaller top card left
smaller top card right
// copy new deck back into [ first , last )
int * d = deck ;
while ( first != middle ) * first ++ = * d ++;
while ( middle != last ) * middle ++ = * d ++;
delete [] deck ;
}
Ò Ô×ÊÌÍ
Ï
í æ¹É æ ÛÜáñá Ù³Ê›ÖµØ ËÓËÂǵɿØôÖµÞb_ÉŸÍÓʛԋٳʛÞÀÎ Ðç͝ÛÜҝʛصÒ
¨
»
—
š
°
—
ž
¨
”
¨
î
‘
Ž
›

¦
£
–
_ ÉŸË æ¹É³ÉŸØ ÒîÉXWôֵɳصٳɮɳáÜɟÞßÉ³Ø ËÂÒÏËÂÇÚÐçËëÊ Ù³Ù³Ö«Íëæ·ÇÚÉŸØ Ð ÒÉXW ÖÚɟØÚÙŸÉ Ê›Ô
Ø ÖÚÞ_ ɟ͝ÒëÛÜÒ _É³ÛÜØµåóҝÊÌ͝˝ɳè¤é
n
å“БÛñØ¾í æ¹ÉãÙ¬ÐçØóÐçÍÂå›ÖµÉÓËÂÇÚÐç˹ËÂÇµÉ ËÂÊÌËäÐ‘á Ø ÖÚÞ_ ɟÍÈʛԡÊÌΠɟÍäÐç˝ÛÜʛصÒïÛÜÒïÎÚ͝ÊÌÎ ÊÌ͝ËÂÛÜʛØÚБá ËÂʿ˝ÇÚÛñÒÈØ ÖµÞb_ ÉÄÍ
ʛÔÈٳʛÞÀÎ ÐçÍÂÛÜҝʛصҳé [ ÊÌÍ
íÕ˝ÇÚÛñÒëԪБٟ˿ÛÜÒàØµÊÌË ÒÊ ÛÜÞßÞßɳèµÛ×ÐÑËÂÉÌí¤ËÂǵʛÖÚå›Ç¤í Ð‘Øµè æ¹É®èÚÊ›Ø Ë
½
¨
³
Œ
î
£
«
Á
Œ
™
‘
Ž
›

¦
£
–
ÉIPôΠɳٟËãì“Ê›Ö ËÂʞֵصèµÉŸÍÂÒîËÂБصèÝÛñËÏØµÊÑæâé ‹Ö«ËãÔ×ÊÌÍâËÂǵ
É _ É³ØµÉ YµËãʛ
Ô ^˜ØµÊÌËãʛØÚá²aì `·ËÂǵɏÒîٳɟεËÂÛÜÙ ÍÂɬБèµÉŸÍ³í
æ¹ÉÓæ ÛÜáÜá Ùäǵɳ٠] ËÂǵÛÜÒòÔªÐçٟ˷GÉ P¥Î ɟ͝ÛÜÞßÉ³Ø ËÂБáÜáñì _ ɳáÜʦæëí«ÐçÒòæ¹ÉÏèÚÛñèžÔ×ÊÌÍ
é
¨
»
—
š
°
—
ž
¨
”
¨
î
‘
Ž
›

¦
£
–
áÜá¤ËÂǵÉâٳʛÞÀÎ Ðç͝ÛÜҝʛصÒïËäÐ ]“ÉâÎÚá×БٟÉâèµÖ«ÍÂÛÜØµåËÂǵÉã٬БáÜáÜÒ¹ËÂÊ ËÇÚÉâÔ×ÖÚØµÙŸËÛÜʛØ
ÐÑË·ËÂÇµÉ U‘ÐçÍÂÛñʛÖÚÒ
merge
áÜÉ U“ÉŸáÜÒ Ê›ÔòÍÂɳֵٟ͝ҝÛÜʛؤí‹ÒÊ½áÜÉŸË Öµ
Ò YÚ͝ÒîË ÙŸÊ›ÖÚØ¯Ë ËÂÇµÉ Ø ÖÚ
Þ _ ÉŸÍ Ê›ÔòٳʛÞÀÎ ÐçÍÂÛÜÒîʛØÚZ
Ò _ÉŸË æ¹É³É³Ø ÒÉ WôֵɳصٳÉ
ɳáÜɟÞßÉ³Ø ËÂÒ ËÂÇÚÐçËÕʛصɷ٬БáñáµËÊ
΍ɟÍÂÔ×ÊÌÍÂÞßÒÃÛÜØÀÊÌÍÂèµÉŸÍÕËÂÊâÙÄÍÂɬÐçËÂÉ·ÐãҝÊÌÍîËÂɳèßèµÉ³Ù ]ÀÊ›Ô Ù³ÐçÍÂèµÒ‹ÔÜÍÂʛÞ
merge
n
Ë æ¹Ê ҝÊÌÍîËÂɳèóèµÉ³Ù ]¥ÒŸé
ê»Ë·ÛñÒòÐÑÎÚÎ ÐçÍÉ³Ø ËÈÔÜÍÂÊ›Þ ËÂǵÉÏÔ×ÖÚØµÙŸËÛÜÊ›Ø _Êôè«ì ^ºÐ‘صèóÐçáÜҝʿÔÜÍÂÊ›Þ Ê›ÖµÍòÛÜØµÔ×ÊÌÍÂޮБá èµÉ³ÒÙŸÍÂÛ²ÎÚ˝ÛÜÊ›Ø Ê›Ô¾ËÂǵÉ
ÞßɟÍÂå›ÛñØÚåßεÍÂÊ Ù³É³ÒÒàÐ _ Ê U“KÉ `ÓËÂÇÚÐçË
ٟʛÞÀÎÐÑÍÂÛÜÒÊ›Ø ÛÜÒÏØÚɟɳèµÉ³è Ô×ÊÌÍëÉ U“ÉŸÍîìÝÙ¬Ðç͝èÝËÂÇÚÐçËÏÛÜÒ
¯
©
â
–
¨
“

Ÿ
Ž

–
›

š
Œ
ÎÚÖ«Ë Ê›Ø ËÂǵɮصɟæ èµÉ³Ù ]é ê˜ØµèµÉ³É³è¤í æ¹Éßޮгì ÇÚKÐ U“ÉßËÂÊ Ù³Ê›ÞÀÎ ÐçÍÂɏËÂÇµÉ®Ë æ¹Ê ËÂÊÌÎ Ù¬ÐçÍÂèµÒ ʛÔò˝ÇÚÉßáñɳÔÜË
БصèÝËÂÇµÉ ÍÂÛñå›Ç ËãèÚɟ٠]ÝÛÜØÝÊÌÍÂèµÉŸÍëËÊ YÚØÚè ʛ֫Ëãæ ÇµÛÜÙäÇ Ù¬ÐçÍÂèÝ˝ÊóËäÐ ]“É Ê œØµIÉ P¥Ë¬é ‹Ö«ËëÛñÔïʛØÚÉÊ›Ô ËÂǵÉ
Ë æ¹Ê èµÉ³Ù ]¥
Ò _ ɳٳʛÞßɟÒÈɟÞÀÎÚË ì ^»ËÇÚÛñÒÈÒîÛñËÂÖÚÐçËÂÛÜʛخèµÉ YÚØµÛñËÂɳá²ì®Êôٳٳ֫ÍÂÒ _ ɳÔ×ÊÌ͝ÉÏËÂǵÉÏá×БÒîËÈÙ¬ÐÑÍÂèóÛÜÒ¹ÎÚÖµËÈʛØ
ËÂÇµÉ ØµÉŸæ èµÉ³Ù ]a`´í¡æ¹É èµÊ›
Ø ËãèµÊóБدì Ô×֫͝˝ÇÚÉÄÍëٳʛÞÀÎ ÐçÍÂÛñÒÊ›ØµÒ³é¿ÆÈǵÛÜÒÏÞßɬБصÒÓËÂÇÚÐçË
ٳʛÞÀÎ ÐçÍÂÛñÒÊ›ØµÒ _ ÉŸË æ¹É³ÉŸØ ÒÉ WôֵɳصٳÉÏɳáÜɳÞßɳدËÂÒïÐçÍÉ Î ÉŸÍÂÔ×ÊÌÍÂÞßɟè ÛñØ ÞßÉÄÍÂå›ÛÜØµåâË æ¹Ê ҝÊÌ͝©¯Ë–ÏÉ³è ¨ 赐“É³Ž³Ù – ]¥n
Ò¹ÛÜ−
دËÂ1Ê
ʛصÉãÒîÊÌ͝ËÂɳèóèµÉ³Ù ] æ Ûñ˝Ç
Ù¬ÐÑÍÂèµÒ³é
ØÚʦæ ÛñØÚå ËÂǵÛÜÒ³í¥æ¹ÉãÙ¬nБØóصʦæ εÍÂÊ U“Éãʛ֫ͷޮБÛñØ ÍÂɟҝֵáñˬé
Analyzing merge-sort.
Theorem 2 ‰ÕŠŒÃ¶Ä”𠱬–˜—™›š merge_sort Žç›£¦–ºŽâ©ÀŽ‘Œ ” ŒŸš ±ŸŒ Â¶ n
(n − 1)
×áÜʛå
2
1 Œ¬’§ŒŸ¨ Œ³š¤–ºŽÓ¸¹—˜–ºŠ ©¯–轐“޳–
n
±Ÿ›¨¿¢©“£¬—˜Žç›š¤Ž® ŸŒ¬–˜¸ÓŒŸŒ³š¼Ž‘Œ ” Œ³š ±ÄŒóŒ¬’ªŒ³¨ ŒŸš¤–ºŽçÅ
S ɏèµÉ YÚØµÉ
ËÂÊ _ É ËÂǵÉ
Î Ê›ÒÒÛ _ áñÉ¿Ø ÖµÞb_ ÉÄÍãʛԋٳʛÞÀÎ ÐçÍÂÛÜҝʛصÒ_ ÉÄË æ¹ÉŸÉ³Ø
Proof.
¨žÐ ” ¨ ٳБáÜá ËÂÊ
ҝXÉ W ÖµÉ³ØµÙ³É É³áÜɳÞßɳدËÂÒ·ËÂTÇÚ(n)
ÐçË Ù¬Ð‘Ø ÊôٳֵٟÍÓ赨½
Ö«Í©Ûܓص—»å®
æ ÛñËÇ Ð‘Ø ÐçÍÂå›ÖµÞßÉ³Ø ËòÍäБصå›É
merge_sort
Ê›Ô áÜɳصåÌËÂÇ é [ ÊÌÍÀGÉ PµÐ‘ÞÀÎÚáÜÉÌí
í‹ÒÛÜØµÙ³ÉóÔ×ÊÌÍÀÍÂБصå›É³Ò Ê›Ô áÜɟØÚåÌ˝ÇÚÒ
Бصè í ØµÊ
n
T (0) = T (1) = 0
0
1
ٳʛÞÀÎ ÐçÍÂÛñÒÊ›ØµÒ ÐçÍÂÉâޮБèµÉÌ
é S É Ð‘áÜҝÊßå›ÉŸË
íÒÛÜØµÙ³ÉàÔ×ÊÌÍÏпÍäБصå›ÉàÊ›Ô áÜɳصåÌËÂÇ í
T (2) = 1
Πɟ͝Ô×ÊÌÍÂÞßÒòʛصÉÏٳʛÞÀÎ ÐçÍÂÛÜÒîÊ›Ø ^˜ÛñØóÞßɟÍÂå›ÛÜØµåà
Ë æ¹Ê ҝÊÌÍîËÂɳè èµÉ³Ù ]¥Ò Ê›Ô Ê›ØÚÉÏÙ¬Ðç͝è ɬБÙäÇ ÛÜØ 2˝ʏ¨½Ê›ØµŒ³£îÉâÁ«ÒîŒ Ê̙͝Ž‘Ë›É³£¦è –
T \
èµÉ³Ù ]ÝÊ›Ô Ë æ¹ÊžÙ³ÐçÍÂèµÒ `Äé ê˜Ø Ð ÒîÛÜÞßÛÜá×ÐçÍ·æÈЬì“í¾æ¹ÉÀÙ¬Ð‘Ø ÙŸÊ›Ø U¥ÛñØÚÙŸÉ Ê›Ö«ÍÂҝɳá U“ɳÒâËÂÇÚÐçË
鮯ÈǵɟÍÂÉ
T (3) = 2
ÒîXÉ WôֵɳصٳɳÒÈʛԤáÜɳصåÌËÂÇ Ô×ÊÌÍïæ·ÇÚÛñÙ´Ç®Ê›ØµÉ Ù³Ê›ÞÀÎ ÐçÍÂÛñҝʛØßÒÖ Ù³ÉŸÒ ^°ËÂǵÉYµÍÂÒî˹٬Ðç͝è ޮгìb_ É ËäÐ ]“ɳØ
©Ê “ž
£³Œ ˝ÇÚÉ·áÜɳÔÜË èµÉ³Ù ]Àæ·ÇµÛÜÙäÇßٳʛ3صҝÛÜÒîËÂÒÕʛصáñì Ê›Ô Ê›ØµÉ Ù³ÐçÍÂè `Äí _ÚÖ«Ë ËÂǵÉòޮРP«ÛÜÞ¿ÖµÞ ØôÖµÞ_ ÉŸÍ‹ËÇ ÐÑË èµÉ YÚØµÉ³Ò
ÛÜÒ é
T (3) 2
[ ÊÌÍ å›É³ØµÉŸÍäÐçá
í«æ¹ÉãÇÚXÐ U“ÉãËÂǵÉÏÔ×ʛáÜáÜʦæ ÛÜØµåëÍÂɟٳ֫͝ÍÂɳصٳÉâ͝ɳá×ÐçËÂÛñʛØ
n ) + T ( n ) + n − 1.
n
T (n)
T(
2
2
2
^ é `
Æ Ê ÒîɳÉâËÂǵÛÜÒ³í«áñɟ˷ֵÒòٳʛصҝÛÜèµÉŸÍ·Ð¿ÒÉ WôֵɳصٳÉëÊ›Ô ÉŸáÜɳÞßɳدËÂÒïËÂÇÚÐçË ÐçٟËÂÖÚБáÜáñì ÍÂÉXWôÖµÛñ͝ɳÒòËÂǵÉÏޮРP(
ÛÜÞ¿ÖµÞ ØôÖµÞ_ ɟͮʛÔ
ٳʛÞÀÎ ÐçÍÂÛÜÒÊ›ØµÒ³é Æ¹ÇÚÛñÒ Ø nÖµÞb_ ÉÄͮʛÔâٳʛÞÀÎ ÐçÍÂÛñҝʛصÒÀÛÜÒÀËÂÇµÉ ÒÖµÞ Ê›ÔÓËÂǵÉ
T (n)
ÍÂɳҙΠɳٟËÂÛ U“ÉòØ ÖÚÞ_ ɟ͝ÒÕÛÜØÒÊÌ͝ËÂÛñØÚåÓËÂǵÉÈáÜɳÔÜËÕБصè ËÂǵɹÍÂÛÜå›Ç ËÃÇÚБáÜÔºí›ÎÚáÜÖµÒ ËÂǵÉòØ ÖµÞb_ ÉÄÍÕÊ›Ô Ù³Ê›ÞÀÎ ÐçÍÂÛÜÒîʛØÚÒ
èµÖ«ÍÂÛÜØµåÏ˝ÇÚÉÈÞßɟÍÂå›É¹ÒîËÉŸÎ¾é ÆÈǵÉÈÔ×ÊÌÍÂÞßɟÍÃË æ¹ÊÏØôÖµÞ_ ɟÍÂÒÃÐçÍÉ ^ _ ì ٟʛØÚҙ˝ÍÂֵٟËÂÛÜʛؿʛÔ
ÐçØÚè
èµÉ YÚØµÛñËÂÛÜÊ›ØÊ›Ô `ÕÐÑË ÞßʛÒîË
Бصè
í“æ ǵÛÜáÜɹËÂǵɷá×ÐÑ˝ËÂɟÍÕØôÖµÞ_ ɟÍÕmerge_sort
ÛÜҋÐÑË ÞßʛÒîË
n−1
_ôìÀʛֵ͋ÎÚÍÉ U¥ÛÜʛTÖµÒ ÙŸÊ›ØÚÒîÛÜèµÉŸÍäTÐç(ËÂÛñn/2
ʛØÚÒÃÍÂ)ɳå“Ðç͝èÚÛñTØÚ(å n/2 ) éÃê»ËïÔ×ʛáÜáÜʦæ ÒÃËÂÇÚÐçË
íôËÂÇµÉ Ð‘ÙÄËÂÖÚÐ‘áØ ÖÚÞ
_ ɟÍ
merge
T (n)
Ê›Ô ÙŸÊ›ÞÀÎÐÑÍÂÛÜҝʛصҳí¥Ûñ
Ò _ ʛֵصèµÉ³è _ ì ˝ÇÚÉÏÒÖµÞ Ê›Ô Ð‘áÜáËÂÇ«ÍÂɟÉãØ ÖÚ
Þ _ ɟ͝ҳé
O Ê¦æ æ¹É®Ù¬Ð‘Ø εÍÂÊ U“ÉßËÂÇµÉ Ð‘ÙŸËÂÖÚБá ҙËäÐçËÂɳÞßÉŸØ ËàʛԹËÂǵÉßËÂǵɳÊÌÍÂÉ³Þ é " ÛÜØµÙ³ÉßËÂǵÉ
Ð‘á ¨
Ÿ
Œ
î
£
«
Á
Œ
™
‘
Ž
›

¦
£
–
å›ÊÌÍÂÛñ˝ÇÚÞ ÛñÒ ÍÂɟٳ֫ÍÂҝVÛ U“ÉÌíÓÛñË ÛÜÒ ØÚÐçËÂÖ«ÍäБá ËÇ ÐÑË ËÇÚÉ ÎµÍÂÊôʛÔãÛÜÒ®ÛÜØµèÚֵٟ˝VÛ U“ÉÌé [ ÊÌÍ
í·æ¹É ÇÚXÐ U“É
n = 1
×áÜʛå
íµÒÊËÂǵÉãÒîËÂÐçËÂɳÞßɳد˹ǵʛáÜèµÒòÔ×ÊÌÍ
é
T (1) = 0 = (1 − 1)
[ ÊÌÍ
í¾áÜɟËãÖÚÒãБ2ҝ2ÒîÖÚ ÞßÉ ËÂÇÚÐçËÓËÂǵɿÒîËäÐçËÂɟÞßÉ³Ø ËÏʛԋËÂǵnÉ =
ËÂǵ1ɳÊÌÍÂÉ³Þ ÇµÊ›áÜèµÒÓÔ×ÊÌÍ
U‘БáÜֵɳÒÏÛÜØ
n
2
¯
©
»
’
’
^»ËÂǵÛÜҋÛÜҋËÂÇµÉ ÛÜØµèµÖµÙŸËÂVÛ U“É ǯìôÎ ÊÌ˝ÇÚɟҝÛÜÒ `Äé [ ÍÂÊ›Þ ËÇÚÛñÒ Ç ì Î ÊÌËÂǵɳҝÛÜÒŸí æ¹É صɳɳè®ËÂÊ èµÉŸÍÂVÛ U“É
{1, . . . , n − 1}
ËÂǵ
É UÌБáñÛÜèµÛñË ìßʛԡËÂǵÉÏÒîËäÐç˝ɳÞßÉ³Ø Ë¹Ô×ÊÌÍÈËÂǵÉÏØôÖµb
Þ _ÉŸÍ ÛñËÂҝɟáÜÔ ^»ØÚÊÌ˝ÉÓËÇ ÐÑË
`ÄéÕÆÈǵÛÜÒ
n
n/2 , n/2
1
å›ÊôɟҷБÒÈÔ×ʛáÜáÜʦæ ҟé
T (n)
n
^
W ÖÚÐçËÂÛÜÊ›Ø é ` `
n
T(
) + T( ) + n − 1
2
2
×áÜʛå
n
×áñʛå n
^˜ÛÜØµèµÖµÙŸËÂÛVU“ÉÓǯìôÎ ÊÌËÂǵɳÒîÛÜÒ `
n
n
+(
− 1)
+n−1
(
− 1)
2
2
2
2
2
2
n
×áñʛå
n
×áÜʛå
^ P«ÉŸÍÂٟÛÜÒÉ `
− 1)(
(
− 1)(
2 n − 1) + (
2 n − 1) + n − 1
2
2 ^
×áñʛå
`
= (n − 2)(
n = n2 + n2 2 n − 1) + n − 1
×áÜʛå
(n − 1)(
2 n − 1) + n − 1
×áÜʛå
= (n − 1)
2 n .
Ò Ô×ÊÌÍ
í“áÜÉŸË ÖµÒ Ù³Ê›ØµÙ³áÜÖµèµÉïæ ÛñËÂÇ ÒÊ›ÞßÉïÉGP¥Î ɟ͝ÛÜÞßÉ³Ø ËÒ ËÂÊÏٴǵɳ٠] æ ǵɟ˝ÇÚÉÄÍ ËÂǵÉÈØ ÖµÞb_ ÉÄÍ
ž
¨
»
—
š
™
‘
Ž
›

¦
£
–
ʛԾٳʛÞÀÎ ÐçÍÂÛÜÒÊ›ØµÒ _ÉŸË æ¹É³É³ØžÒîÉXWôֵɳصٳÉÏɳáÜɳÞßÉŸØ ËÂÒïÛÜÒïÛñØÚèµÉ³ÉŸèóÐëå›ÊôÊ è ÛñØÚèµÛÜÙ³ÐçËÂÊÌÍïÔ×ÊÌ͹ËÂÇµÉ ÍÂÖµØ ËÂÛñÞßÉ ÛÜØ
εÍäБٟ˝ÛÜÙ³ÉÌéÃÆ¹ÇÚÉÏÍÂɳҝֵáñ˝ÒòÛÜØžÆ Ð _ÚáÜÉ áñÊôÊ ] U“ɟ͝ì èµÛ ÉÄÍÂÉ³Ø ËòÔÜÍÂÊ›Þ ËÂǵÉãʛصɳÒòÛÜØóÆ Ð _ÚáÜÉ é
" ÛÜØµÙ³É
ÛÜØµÙ³Ö«ÍÂҋޏֵÙäÇ®áÜɳҝÒïٳʛÞÀÎ Ðç͝ÛÜҝʛصÒÕËÂÇÚБØ
í¥Ê›Ö«Í¹ÖÚØµÛñˋǵɟÍÂÉ ÛÜÒ
merge_sort
ÖµÒîË
íÌËÂÇµÉ‹Ø ÖÚ
Þ _ ÉŸÍ¡Ê›Ô )žÉ³å“БٟʛÞÀÎÐÑÍÂÛÜҝʛص
Ò ^ 6 ٳʛÞÀÎ ÐçÍÂÛñminimum_sort
ÒÊ›ØµÒ `ÄíçБٳٳÊÌÍÂèµÛÜØµåÈËÂÊ Æ¹ÇµÉ³ÊÌÍÂÉ³Þ \ é
ê˜ØâÊÌ˝Mcomp
ÇÚÉÄÍ¡æ¹ÊÌÍÂèµÒ³í
×áñʛå
é 10 ÛÜÒ¤ËÂǵÉÃÐ _ÚҝʛáÜÖ«ËÂÉ ÍÂÖµØ ËÛÜÞßÉ Ê›Ô ËÇÚÉ ÎµÍÂʛåÌÍäÐçÞ í
−6
ËÂǵÛÜҷ˝ÛÜÞßÉâÛÜØ ҝɟٳMcomp=
ʛصèÚÒÏБصè 10صÊÌË (n−1)
ÞßÛÜØ ֵ˝ɳҳé 2‹nÖ« ËÓБTime
Ò ÛñØ½Æ Ð _ÚáÜÉ í
ËÂɳáÜáñÒ ÖµÒ ÇÚʦæ Þ®ÐçØ ì
ҝɳٟʛØÚèµÒÈËÂǵÉÏεÍÂʛåÌÍäÐçÞ ØµÉ³ÉŸèÚÒÈËÂʏ΍ɟÍÂÔ×ÊÌÍÂÞ Ê›ØµÉ ÛÜå“БٳʛÞÀÎ ÐçÍÂÛñҝʛؤsec/Gcomp
é
SÝ
É YÚ͝ÒîË Ê _ÚÒÉŸÍ U“É·ËÂÇÚÐçËÃËÂǵÛÜÒÕáÜÐç˝ËÂɟÍÕØôÖµ
Þ _ ɟÍ
æ ÛñËÇ í¯æ·ÇµÉŸÍÂÉò˝ÇÚÉÈÍäÐçËÂÉòʛԍèµÉ³ÙŸÍÂɳБҝÉ
µ
F
Ÿ
Œ
Ÿ
±
³
£
Ä
Œ
¯
©
‘
Ž
³
Œ
Ž
_ ɳٟʛÞßɳÒÕÒîޮБáÜáÜɟÍÃÐçØÚèßÒîޮБáÜáÜÉŸÍ³é ØßʛֵÍÕÎÚá×ÐçËÂÔ×ÊÌÍÂÞ íÌæ¹Éò٬БØßå›ÊãÖµn
Îß˝ÊâÍÂʛֵå›Çµáñì
n = 51, 200, 000
Бصè YÚØµè ËÂÇÚÐçË
ٳʛدËÂÛÜØ ÖÚɟÒòáÜÛ ]“ÉÏËÂǵÛÜÒ¹ÛÜØžÆ Ð _ÚáÜÉ
í í K í \ í \ é
sec/Gcomp
\
í é
n
Mcomp
Time (sec)
sec/Gcomp
é a
\ í é
é \
í é
í é\
\ é \ ” ¨½ ³ŒŸ£óÂ¶ß±Ÿ›¨¿¢©“£¬—˜Ž‘›š¤Žß©“šF £¬” š¤–˜—»¨ Œ Â¶
Table 8:
í í é
é ÞßɟÍÂå›É ˜ÒÊÌ͝Ë
ÆÈǵÛÜÒ ÒÉŸÉ³ÞßÒ ËÂÊÓÛÜØµèÚÛñÙ¬ÐçËÂÉ ËÂÇÚÐçË ËÇÚÉïÍÂֵدËÂÛÜÞßÉ ÛÜÒ ÎµÍÂÊÌÎ ÊÌÍîËÂÛÜʛØÚБá ˝ÊÏËÂǵɹØôÖµÞ_ ÉŸÍ Ê›ÔÚٳʛÞÀÎ ÐçÍÂÛÜÒîʛØÚÒ
›Ê صáñìÝÔ×ÊÌÍ U“ÉÄ͝ì á×ÐçÍÂå›É é ê˜Ô¹ì“Ê›Ö ËÂǵÛÜØ ] Ð _ ʛ֫ËàÛñˬí ˝ÇÚÛñÒëÛÜÒëØµÊÌË ÒÖ«ÍÎµÍÂÛÜÒîÛÜØµå«é ïÇÚɳÐçΜÊÌ΍ɟÍäÐçËÂÛñʛØÚÒ
ËÂÇÚÐçËÀÐçÍÂɞΠÉÄÍÂÔ×ÊÌÍÂÞßɳè n ËÂÛÜÞßɟҳí‹ÒÂгì“í¹É¬ÐçËÀֵμнޏֵÙäÇ ÇµÛÜå›ÇµÉŸÍÀÔÜÍäÐçٟËÂÛÜÊ›Ø Ê›Ô ËÂǵɞ˝ÊÌËäБá¹ÍÂÖµØ ËÂÛÜÞßÉ
æ ǵɳØ
ÛñÒ ÒÞ®Ð‘áÜá˜é ÆÈǵnÛÜÒ ÛÜÒ_É³Ù¬Ð‘ֵҝÉ
ÛÜÒ ÍÂɳá×ÐÑËÂÛVU“ɳáñì á×Ðç͝å›ÉàٳʛÞÀÎ ÐçÍÂɳè ËÂÊßËÂÇµÉ Ö«ÎÚ΍ɟÍ_ ʛֵصè½Ê›Ô
n
×áñʛå
Ê›Ø ËÂÇµÉ Ø ÖµÞb_ ÉÄÍ Ê›Ô·nٳʛÞÀÎ ÐçÍÂÛñÒÊ›ØµÒ _ ÉŸË æ¹É³É³ØœÒÉXWôÖµÉ³ØµÙ³É É³áÜɟÞßÉ³Ø ËÂÒŸé ‹Ö«ËÒîÛÜØµÙ³É
(n − 1)
n
æ¹ÉÓÛÜ囨µÊÌÍÂÉ ËÂǵ2 ÉÓ
ÙäÇÚɳÐçÎóÊÌÎ ÉÄÍäÐçËÂÛÜÊ›ØµÒ ÛñØ Ê›Ö«ÍÈٳʛÞÀÎ ÐçÍÂÛÜÒîʛØßÙ³Ê›ÖµØ Ë¬í¥ËÂǵÛÜÒïٟʛÖÚØ¯Ë¹ÛÜÒïËÂÊôÊ ÊÌεËÂÛÜÞßÛñÒîËÂÛÜÙÈÔ×ÊÌÍ
_ ɳٳʛÞßɟÒ
ҝޮБáñá é ØµáñìÀÐçÒ _ ɟٳʛÞßɳ
Ò U“ɟ͝ìÀáÜÐçÍÂå›ÉÌí›ËÂǵÉòÍÂÐçËÂÛÜÊ _ ÉŸË æ¹É³É³Ø
Бصè
×áñʛå
n
n
n
(n − 1)
n
2
صɳå›áÜÛÜå›Û _ áñÉ Ð‘Øµèžæ¹ÉÏÒîËäÐç͝ËÈËÂʏҝɳÉã˝ÇÚÉÓεÍÂɳèµÛÜٟ˝ɳè εÍÂÊÌÎ ÊÌÍîËÂÛÜʛØÚБáÜÛñË ì“é
[ ÊÌÍ
íËÂǵÛÜÒ·ÎÚǵɳصʛÞßÉ³ØµÊ›Ø èÚÊ É³Ò ØµÊÌË ÒÇµÊ¦æ ҝÛÜØµÙ³É
ÛÜÒ ØµÉ³å›áÜÛÜå›Û _ áñÉãٳʛÞÀÎ Ðç͝ɳè
n
ž
¨
»
—
š
°
—
ž
¨
”
¨
î
ç
Ž
›

¦
£
–
ËÂÊ
БáñÍÂɳБè«ì®Ô×ÊÌÍ ÒÞ®Ð‘áñá é
n(n − 1)/2
n
ÆÈǵÉãÞßʛÒîËò΍ʛҝÛñËÂVÛ U“ÉÓØµÉŸæ·Ò·Ê›Ô Æ Ð _ áñÉ ÛÜÒÈËÇ ÐÑË
ÛÜÒòБٟËÂÖÚБáÜá²ì РεÍäÐçٟËÂÛÜÙ¬Ðçá¾ÒîÊÌ͝ËÂÛÜØµå
merge_sort
БáÜå›ÊÌ͝ÛñËÂÇµÞ é S ǵÛÜáñÉ ÛñË®ËäÐ ]“ɳÒ
ÞßÊÌÍÂÉ ËÂÇÚÐ‘Ø Ë æ¹Ê ǵʛ֫ÍÂÒ ËÊ ÎµÍÂÊ Ù³É³ÒÒ
minimum_sort
ØôÖµ
Þ _ ɟÍÂҟí
èµÊôÉŸÒ ËÇÚÉ ÒÂБÞßÉßÛñØ ÐçÍÂʛֵصè ҝɳٟʛØÚèµÒ³é ƹǵÛÜÒ ÛÜÒ Þ®Ð‘ÛÜØµáñì½èµ1,ÖµÉ 600,
ËÂÊ 000
ËÂǵÉ
ÔªÐ‘ÙŸË ËÂÇÚÐçË merge_sort
×áÜʛå
ÛÜÒÀРޏֵÙäÇ ÒÞ®Ð‘áñáÜɟ͏ØôÖµb
Þ _ÉŸÍ ËÂÇÚБØ
í ËÂǵÉóØôÖµ
Þ _ ÉŸÍ Ê›Ô
ٳʛÞÀÎ ÐçÍÂÛñҝʛ(n
صÒÃØµ−ɳɟ1)èÚɟL
è _ô2ì n
^»ËÂÇÚÐçË Ò æ Ç ì æ¹É ҙæ ÛñËÂÙäǵn(n
ɳèÀÔÜ͝−
Ê›Þ 1)/2ٟʛÞÀÎ ËÂÊ )žÙŸÊ›ÞÀÎ `´é
minimum_sort
Ø¿ËÂǵÉïÊÌËÂÇµÉŸÍ ÇÚБصè¤íÌËÂÇµÉ ËÂÛÜÞßɋصɳɟèÚɟb
è _ ì
Î ÉŸÍ Ù³Ê›ÞÀοÛÜÒ è«ÍäБޮÐç˝ÛÜ٬БáñáñìÓǵÛÜå›ÇµÉŸÍ
merge_sort
ËÂÇÚÐ‘Ø ÛÜØ
Ô×ÊÌÍ
í¥æ¹ÉëÊ _ÚÒÉŸÍ U“É пԪБٟËÂÊÌÍ Ê›Ô ÐÑÍÂʛֵØÚè
éÈê»Ë ޮг
ì _ É
ҝ֫͝εÍÂÛÜÒîÛÜØµminimum-sort
å ËÂÇÚÐçËÏËÂÇµÉ ÔªÐ‘ÙÄËÂÊÌÍëÛÜn
ÒÓËÂ=ǵÛÜ1,
Òãá×600,
ÐçÍÂå›ÉÌ000
í _ÚÖ«ËãËÂǵɏԪБٟËëËÂÇÚÐçËãÛñË
á×Ðç͝å›ÉŸÍâÙ³Ð‘Ø 50
_ É GÉ P¥ÎÚá×БÛÜØµÉ³è¤é
—˜Ž íÑæ ÛñËÂÇÏÛñËÂÒ¤ÍÂɳֵٟ͝ҝVÛ U“ɋҙ˝ÍÂÖµÙ ÛÜÒ¾ÐÈÞßÊÌ͝ÉÃٟʛÞÀÎ áñÛÜÙ¬ÐçËÂɟèãÐçáÜå›ÊÌÍÂÛñËÂÇµÞ ËÇ ÐçØ
merge_sort
ËÂÖ«ÍÂÉÌí¥ËÇÚÉÓIÉ Pô˝ÍäÐëÞßɳÞßÊÌÍîìÀصɳɳèµÉ³è Ô×ÊÌÍÈ˝ÇÚÉÓØµÉŸæ èµÉ³Ù ]íµminimum-sort
ɟ˝ÙÌéÃÆÈǵÉÓÎÚ͝ÛÜÙ³É ËÂÊ Î Ð¬ì®ÛñÒ ËÂÇÚÐç˹áÜɳҝҹٳʛ
Þ Î ÐçÍÂÛÜÒîʛØÚÒ¹Ù¬ÐçØ _ ÉÏèÚʛصÉÓΠɟÍòҝɳٳʛصè¤íµÒÛÜØµÙ³ÉãпáñÊÌËòʛԾËÂÛÜÞßÉ ÛÜҹصɳɳèµÉ³è Ô×ÊÌÍòÊÌËÂǵɟÍòÊÌΠɟÍäÐÑËÂÛÜÊ›ØµÒ³é ‹Ö«Ë
ËÂǵÛÜÒïÛÜÒÈÐàÞßÊôèµÉŸÍÂÐçËÂÉ ÎµÍÂÛÜٳɑí¥ÒÛÜØµÙ³ÉÓæ¹ÉÓ٬Б؞ÞßÊÌÍÉ ËÂÇÚÐ‘Ø Î Ð³ì®Ô×ÊÌÍ·Û²R
Ë _ôìßËÂǵÉÏå“БÛÜØ ÛÜØ ˝ÊÌËäБáÍÂֵدËÂÛÜÞßÉÌé
3.2.7 Lindenmayer systems
ê˜ØËÇÚÛñÒY ØÚБáôҝɳٟËÂÛñʛ؏æ¹ÉïæÈÐ‘Ø Ë ËÊÏεÍÂɳÒîÉ³Ø ËÕБصÊÌËÂǵɟÍÃÐçεÎÚáÜÛÜÙ³ÐçËÂÛÜʛØàÛÜØ æ ǵÛÜÙäÇ ÍÂɳٳ֫ÍÂÒîÛÜÊ›Ø ÛÜÒ ÎµÍÂɟèÚʛÞ
ÛÜØÚБدËÈБصè èµÛ Ù³ÖµáñË ËÂʏÐXU“Ê›ÛÜè ^˜Ð‘Ø Û²ËÂɟÍäÐç˝ÛVU“ÉU“ÉŸÍÂҝÛñÊ›Ø æ¹Ê›ÖµáÜè ÛÜØµèµÉ³É³è®ÍÂÉXWôÖµÛñ͝ÉãÐçØ ÉIPôÎÚáÜÛÜÙ³ÛñË ÒîËäБ٠]a`´é
Òò
Ð _Ê›ØôÖµÒ³í«ËÂǵÛÜÒÈÐçεÎÚáÜÛÜÙ¬Ðç˝ÛÜÊ›ØµÒ áÜɟËÂÒÈÖµÒòè«Íäгæ _ ɬÐçֵ˝ÛÜÔ×ÖµáÎ ÛñٟËÂÖ«ÍÂɳҳé
ÉÄˏֵZ
Ò YµÍÂÒîË Y P ÐçØ
æ ǵÛÜÙäÇ ÛÜÒàҝÛÜÞÀÎÚáñì Ð YÚØÚÛ²ËÂÉÀҝɟ˿ʛÔÈÒîì¥Þ_ ʛáÜҟí Ô×ÊÌÍ¿ÉIPµÐ‘ÞÀÎÚáÜÉ
¯
©
’
¾
¢
Š
«
©
³
¬
Œ
–
Σ
é ɟË
èµÉ³ØµÊÌËÂÉàËÂÇµÉ ÒÉŸËÏʛÔÕБáÜá
ËÂÇÚÐçËÓæ¹É ٬БؽÔ×ÊÌÍÂÞ ÔÜÍÂÊ›Þ ÒîìôÞb_ ʛáñÒ ÛÜØ é
¸Ó›£ F¯Ž
Σ = {F, +, −}
Σ
Σ
[ ÊÌÍ·GÉ PµÐ‘ÞÀÎÚáÜÉÌí
é
F + F+ Σ
O IÉ PôË¬í æ¹
É Y P ÐßÔ×ֵصٟËÂÛÜʛØ
é
Þ®ÐçÎÚÒ É U“ÉŸÍîì½Ò™ì¥
Þ _ ʛá ËÂÊ ÐÀæ¹ÊÌÍÂè¤í¤Ð‘صè½ËÂǵɳÒîɏÐÑÍÂÉ
ËÂǵÉ
é SÝÉãÞßÛÜå›Ç ËïPÔ×ÊÌ:Í·ΣIÉ Pµ→
ÐçÞÀΣÎ áñÉ PÇ XÐ U“ÉÏËÂǵÉÏεÍÂÊ èÚֵٟ˝ÛÜʛصÒ
¢¤£³ F“” ±³–˜—š¤Ž
T \
p
p
Figure 20: ‰ÕŠŒ –˜” £¦–º’§Œ ³Œ˜¶ç›£³Œž©“šF½©ä¶³–Œ³£Ï¢¤£³Ì±ÄŒ¬Ž³ŽŸ—°šÁ –ºŠŒ ±Ä›¨ž¨ ©“šF Ž‘Œ ” Œ³š ±ÄŒ F + F+
σ
F
+
−
→
P(σ)
→
F + F+
→
+
→
−
[ ÛÜØÚБáÜá²ì“íôæ¹É Y PžÐ‘Ø
é
íµÔ×ÊÌÍ·ÉIP«Ð‘ÞÀÎÚáÜÉ
—°š —˜–˜— ©¯’ ÛÜÒÏ
¸ÏÙ¬›Ð‘£IáñF áÜɳsèÝÐ Σ
s=F
Æ ÇµÉ¿ËÍÂÛñÎÚáÜÉ
È
é " ÖÚÙäÇ Ð®Òîì¥ÒîËÉ³Þ å›É³ØµÉŸÍÂÐçËÂɳÒ
»
—
š
µ
F
³
Œ
š
¨
©
J
³
Œ
ó
£
Ž
ô
J
Ÿ
Ž

–
³
Œ
¨
= (Σ, P, s)
БؽÛÜØ Y صÛñ˝ÉëҝÉXW ÖÚɟØÚÙŸÉ Ê›ÔÕæ¹ÊÌ͝èÚÒ
БÒÓÔ×ʛáÜáñÊÑæ·Ò³éàÆ Ê å›ÉŸËÓËÂÇµÉ ØÚÉGP¥ËÏæ¹ÊÌÍÂè
ÔÜÍÂʛÞ
s = w 0 , w1 , . . .
wi
ËÂǵÉÓÎÚÍÉ U¥ÛÜʛֵҹæ¹ÊÌÍÂè
íµæ¹ÉãҝÛÜÞÀÎÚáñì ÒÖ _ ҙËÂÛñËÂÖ«ËÂÉÏБáÜá¤ÒîìôÞb_Ê›áÜÒïÛÜØ
_ôì®ËÂǵɳÛñÍÈεÍÂÊôèµÖµÙŸËÂÛñʛØÚҟé
wi−1
ê˜Øóʛ֫ͷGÉ PµÐ‘ÞÀÎÚáÜÉÌíwËÂi−1
ǵÛÜÒÈìôÛÜɳáÜèµÒ
w0
w1
w2
w3
=
=
=
=
..
.
F,
F+F+
F + F + +F + F + +
F + F + +F + F + + + F + F + +F + F + + +
Æ ÇµÉàØµÉIPôË ÒîËÂɟνÛÜÒÈËÂÊ îè«Íäгæ ÀËÂǵɳҝÉãæ¹ÊÌÍÂèµÒ³í БصèóËÂǵÛÜÒ å›Û U“ɳҷËÂǵÉâÎÚÛÜٟ˝ֵ͝ɳҷæ¹Éëæ¹ÉŸÍÂÉãËäБáV]ôÛÜØµå
È
Ð _ ʛ֫ˬé
ê˜Þ®Ð‘å›ÛÜØµÉÓÐàËÂ֫͝ËÂáÜÉÓҝÛñËîËÂÛÜØµå ÐÑËÈҝʛÞßÉÏ΍ʛÛÜØ Ë Ê›Ø Ð¿áÜÐçÍÂå›ÉÓÎ ÛñɳٳÉÏÊ›Ô Î ÐçÎ ÉŸÍ¬í«æ·ÛñËÂÇ
ÛñËÂÒÈǵɬБèóΠʛÛñØ ËÂÛÜØµå ÛÜØóÒîʛÞßÉãèµÛñÍÂɟٟËÂÛÜʛؤíµÒÉ³É [ ÛÜå›Ö«ÍÂÉ \ ^˜áÜɳÔÜËG`´pé Æ¹ÇÚÉÏËÂ֫͝ËÂáÜÉÏÙ¬Ð‘Ø ÖµØµèµÉŸÍÂÒîËÂБصèžËÂǵÉ
ٳʛÞßޮБصèµÒ í í Бصè
é
ÞßɬБص&
Ò îÞßÊ U“É®Ê›ØµÉ ÒîËÂɟΠÔ×ÊÌ͝æÈÐÑÍÂè
«í
ÞßɬБصÒ&™ËÂÖ«ÍÂØ ٳʛֵدËÂɟÍ
F +
− F
+
Ù³áÜÊ Ù ]ôæ ÛñÒÉ _ ì Ð‘Ø Ð‘Øµå›áÜɏʛÔ
èµÉ³åÌÍÂÉ³ÉŸÒ «í Бصè
ÞßɬБصҙËÂÖ«ÍÂØ Ù³áÜÊôÙ ] æ ÛÜҝÉb_ôìÝÐ‘Ø Ð‘Øµå›áÜÉ Ê›Ô
èµÉ³åÌÍÂÉ³ÉŸÒ «é ƹÇÚɏËÂ֫͝ËÂáÜÉÙ¬Ð‘Ø 90
εÍÂÊôÙ³ÉŸÒÒ Ð‘Ø ì ҝXÉ W ÖÚɟ−ØÚٟÉßʛÔÈÒîÖÚÙäÇ Ù³Ê›ÞßޮБصèµÒ³í _ôì ÉGP«É³Ù³Ö«ËÂÛñØÚåó˝ÇÚɟ90
Þ
ʛصɮБÔÜËÂɟͿÐçØÚÊÌ˝ÇÚÉÄͬé SÝÉ®ÐçÍÂÉßÛñØ ËÂɟ͝ɳÒîËÂɳè ÛÜØ ËÂǵÉßÍÂɳҝֵáñ˝ÛÜØµåžÎ ÐçËÂÇ ËäÐ ]“É³Ø _ôìÝ˝ÇÚÉÀ˝ֵÍîËÂáÜÉÀÊ›Ø ËÂǵÉ
ÎÚÛÜɳٳɿʛÔÕÎ ÐçÎÉŸÍ¬é Æ¹ÇÚÉàÎ ÐçËÂǽå›É³ØµÉŸÍäÐç˝ɳè _ôì ËÂǵɿٳʛÞßޮБصè ҝXÉ W ֵɳصٳÉ
í¡Ô×ÊÌÍãIÉ PµÐçÞÀÎ áñÉÌíÛÜÒ
ÒÇµÊ¦æ Ø ÛÜØ [ Ûñå›ÖµÍÉ \ ^»ÍÂÛñå›Ç GË `Äí БáÜÊ›Øµå æ·ÛñËÂÇ ËÇÚɏΠʛҝÛñËÂÛñÊ›Ø Ð‘Øµè ÊÌÍÂÛÜɳدËäÐçFËÂÛñ+
Ê›Ø F+
Ê›Ô ËÂÇµÉ ËÂ֫͝˝áÜÉÀБÔÜ˝ɟÍ
εÍÂÊôٟɳҝҝÛÜØµå¿ËÂǵÉãٳʛÞßÞ®ÐçØÚè®ÒÉ WôֵɳصٳÉÌé
ÆÈǵÉÓËÂ֫͝ËÂáÜÉ Ù³Ð‘Ø ËÂǵɟ͝ɳÔ×ÊÌÍÂÉÏåÌÍäÐçÎÚǵÛÜ٬БáÜá²ìÀÛÜØ¯ËÂɟ͝εÍÂɟËÈÐçØ ìßæ¹ÊÌÍÂè å›É³ØµÉŸÍäÐçËÂɟè _ôì Ð ÛÜØµèÚɟØÚޮгì“ÉŸÍ
ÒîìôÒîËÂɳÞðÊ U“ÉŸÍÈËÂǵÉëÐçáñÎÚÇ Ð _ ɟË
é
Turtle graphics.
{F, +, −}
\!
[ ÊÌÍ
í¹áÜɟË
èµÉ³ØµÊÌËÂÉ ËÇÚÉ æ¹ÊÌÍÂè ÍÂɳҝֵáñ˝ÛÜØµå
σ
Recursively drawing Lindenmayer systems.
ÔÜÍÂʛÞ
_ôì ËÂÇµÉ ºÔ×ʛÜá è ÒÖ _ÚÒîËÂÛñËÂÖ«ËÂÛñÊ›Ø Ê›ÔÕБáÜá îÒ ì¥Þ_ σ
ʛáÜÒ ÐçÙ³ΣÙ³ÊÌÍÂèµÛÜØµw
åßiËÂÊßËÂǵɳÛñÍ ÎµÍÂÊ èÚֵٟ˝ÛÜʛصҳéâê˜Ø ʛ֫Í
ÍÂֵصصÛÜØµσåÀÉIPµÐçÞÀÎ iáñÉÌíÚæ¹ÉàÇÚÐXU“ÉàÔ×ÊÌÍÓÉIP«Ð‘ÞÀÎÚáÜÉ
Бصè +
Ô×ÊÌÍ
w2 = wF2 = F + F + +F + F + +
wi = +
БáÜá é
i
ÆÈǵÉÀΠʛÛñØ ËëÛñÒëØµÊÑæ ËÂÇÚÐçËëÙ¬ÐçØ æ¹ÉÀÉGP¥ÎµÍÂÉ³ÒÒ σ ÛñØÝËÂɟÍÂÞßÒëÊ›Ô ËÇÚÉ
ÒëʛԹÊÌËÂǵɟÍàҙì¥Þ_ ʛáÜÒ³í
wi−1
БصèÀËÂǵÛÜÒÃÛÜÒÕæ·ÇµÉŸÍÂÉò͝ɳٳ֫ÍÂҝÛÜʛØßٟʛÞßɳÒÕÛñØ ËÂÊÏÎ áÜЬì“é w" i֫εΠʛҝÉÈËÂÇÚÐçË
éÃÆÈǵɳØÀæ¹Éò٬БØ
P(σ) = σ1 σk
Ê _µËäБÛÜØ σ ÐçÒòÔ×ʛáÜáñÊÑæ·Ò³éS É YµÍÂÒîËòÒÖ _ÚÒîËÂÛñËÖµËÉ _ôì
^ ˜ Ô×ʛáÜèóÒÖ _ÚÒîËÂÛñ˝ֵ˝ÛÜÊ›Ø `Äí¥Ð‘صèóÛñ؞ËÂǵÉ
wi
σ
σ1 σk
ÍÂɳÒîÖÚá²ËÂÛÜØµåãæ¹ÊÌÍÂè
æ¹É ÐçεÎÚáñì
º Ô×ʛáñèßÒÖ _ ҙËÂÛñËÂÖ«ËÂÛÜʛ؏ËÂÊàБáÜáµËÂÇµÉ ÒîìôÞb_Ê›áÜÒ³é Æ¹ÇµÛÜҋҝǵʦæ Ò
σ1 σk
(i − 1)
ËÂÇÚÐçË
σk
1
wσi = wσi−1
.
wi−1
Æ ÇµÛÜÒ Ô×ÊÌÍÂÞ¿Öµá×РБáñҝÊãÛñÞÀÎ áñÛÜÉ³Ò¡ËÇ ÐÑËÃ˝ÇÚɹè«Íäгæ ÛñØÚåÓÊ›Ô σ ÛÜÒ Ê _ÚËÂБÛÜØµÉ³è_ôì¿ÒÛÜÞÀÎÚáñìâٳʛص٬ÐçËÂɳØÚÐç˝ÛÜØµå
È
wi
ËÂǵÉëè«Íäгæ ÛñØÚå›ÒòÔ×ÊÌÍ σ1
íæ¹ÉëÒîÛÜÞÀÎÚáñì ٳʛص٬ÐçËÂɳØÚÐç˝ÉâËÂǵÉ
σk é Æ¡Êßå›ÉŸË ËÂÇµÉ Ð‘ÙŸËÖ Ðçá¡æ¹ÊÌÍÂè
è«Íäгæ ÛÜØµå›Ò¹Ê›Ô ÐçáÜá w
íσ µi−1
Ô×ÊÌÍ , . . .ÍÂ,ÖµwØÚi−1
صÛÜØµå ËÂÇ«ÍÂʛֵå›Ç ËÂǵÉÏÒîì¥Þ_ ʛáÜҹʛԾwËÂǵi ÉãÛÜØµÛñ˝Û×Ð‘áæ¹ÊÌÍÂè é
wi
͝ʛåÌÍäÐ‘Þ \ ҝǵ
ÊÑæ·ÒàǵσÊÑæ ˝ÇÚÛñÒâæ¹ÊÌÍ ]¥ÒàÔ×ÊÌͿʛ֫ÍàÍÂֵصصÛÜØµå ÉIPµÐ‘ÞÀÎÚáÜÉ¿æ ÛñËÇ ÎµÍÂÊ èµsÖÚÙÄËÂÛÜʛصÒ
Бصè ÛÜØµÛñËÂÛ×Ðçáæ¹ÊÌÍÂè é " ÛÜØµÙ³É i
Ô×ÊÌÍÏБáÜá íæ¹FÉâèÚ→
Ê
F + F+, + →
+, − →
−
F
P (+) = +, P i (−) = −
i
صÊÌ˷صɳɟèžËÂÊ ÒîaÖ _ÚÒî˝ÛñËÂÖ«ËÂÉ
Бصè
Бصèóå›ÉŸË
+
−
^ é\ `
wi = wFi = wFi−1 + wFi−1 + .
ƹÇÚÉòÎÚ͝ʛåÌÍäÐ‘Þ Ð‘ÒîҝֵÞßɳÒÕËÂÇµÉ ÉGP«ÛÜÒîËÉ³ØµÙ³É Ê›Ô¾ÐâáÜÛV_µÍäÐçÍîì
æ·ÛñËÂÇÀεÍÂɳèµÉ YÚØµÉ³èßËÂ֫͝ËÂáñɷٳʛÞßޮБصè
Ô×ֵصٟËÂÛÜʛصÒ
í
^˜ÙŸÊ›ÖÚØ¯ËÂɟÍÂٟáÜÊôÙ ]ôæ·ÛÜÒÉ ÍÂÊÌËäÐÑËÂturtle
ÛÜʛخæ ÛñËÂÇ ÒÊ›ÞßÉÏБصå›áÜÉ`ïБصè
^˜ÙŸáÜÊôÙ ] forward left
right
æ ÛñҝÉÏ͝ÊÌËäÐçËÂÛÜÊ›ØµÒ æ·ÛñËÂǞÒîʛÞßÉãÐçØÚå›áñÉ` ÛÜØžØÚБÞßɳҙÎÐçÙ³É
é
ifm
ê˜Ø ËÂÇµÉ èµÊôÙ³ÖµÞßɳدËäÐçËÂÛñÊ›Ø Ê›ÔÏ˝ÇÚÉ ÎµÍÂʛåÌÍäÐçÞ í¹æ¹É ÇÚÐXU“É ʛÞßÛñ˝ËÂɳè ˝ÇÚə˝͝ÛVU¥Û×Ðçá½ÎµÍÂÊ èÚֵٟ˝ÛÜʛصÒ
í Бصè ÛÜØ ÒîΠɟٳÛÜÔÜì¥ÛñØÚåÀÐ ÛÜØµèÚɟØÚޮгì“ÉŸÍòÒîìôÒîËÂÉ³Þ íµæ¹ÉëÙ¬Ð‘Ø èµÊÀҝʮÐçÒ·æ¹É³áÜá Ãæ¹Éâæ ÛñáÜá
+→
+, − →
−
ֵҝÖÚБáÜáñì®Ê›Øµáñì®áñÛÜÒî˹εÍÂÊôèµÖµÙŸËÂÛÜʛصÒïÔ×ÊÌÍ·Òîì¥
Þ _ ʛáÜÒ ËÂÇÚÐçË·ÐçÍÂÉÏØµÊÌËÈÞ®ÐçεΠɳè ˝ʏËÂǵɳÞßҝɟáVU“ɳҳé
// Prog : lindenmayer.C
// Draw turtle graphics for the Lindenmayer system with
// production F - > F +F + and initial word F .
# include < iostream >
# include < IFM / turtle >
// POST : the word w_i ^F
void f ( unsigned int i )
if ( i == 0)
ifm :: forward (); //
else {
f(i -1);
//
ifm :: left (90);
//
f(i -1);
//
ifm :: left (90);
//
}
is drawn
{
F
w_ {i -1}^ F
+
w_ {i -1}^ F
+
T \
}
int main () {
std :: cout < < " Number of iterations =? ";
unsigned int n;
std :: cin > > n;
// draw w_n = w_n ( F)
f(n );
return 0;
}
Program 29: ¢¤£³ŸÁ“Ž ’•—»šFµŒŸš ¨½©Jڌ³£ÌÅ
[ ÊÌÍ ÛÜØ«ÎÚÖ«Ë
n = 14
íµËÇÚÉÓεÍÂʛåÌÍäÐ‘Þ æ·ÛÜáÜáεÍÂÊ èÚÖµÙ³ÉÓËÂǵÉâÔ×ʛáñáÜÊÑæ·ÛÜØµåàè«Íäгæ ÛÜØµå«é
Ò
å›ÉŸËÂÒ á×ÐÑÍÂå›ÉŸÍ¬í ÂË ÇµÉßÎÚÛÜٟËÂÖ«ÍÂÉßèµÊôɟҏصÊÌË ÒÉ³ÉŸÞ ËÂÊ ÙäÇÚБصå›É®ÞÖµÙäÇ ÛñËàÍÂÊÌËäÐÑËÂɳҳíÃБصèœÒîʛÞßÉ
ÞßÊÌÍÂÉÈèµn
ɟËäБÛÜáñÒÃèµÉ U“ÉŸáÜÊÌξí Ú_ Ö«ËïÐçÎ Ðç͝ËÕÔÜÍÂÊ›Þ ËÂÇÚÐçËÕ˝ÇÚÉòÛÜÞÀεÍÂɳҝÒîÛÜÊ›Ø ÛÜÒÃËÂǵɷÒÂÐçÞßÉÌé ҝÒîÖÚÞßÉÈì“Ê›ÖßٳʛֵáÜè
è«Íäгæ ËÂǵÉÏÎÚÛÜٟ˝ֵ͝ÉÏÔ×ÊÌÍ
éÕÆ¹ÇµÉ³ØóÉXW ÖÚÐçËÂÛÜÊ›Ø ^ é \ `‹æ¹Ê›ÖµáÜèžå›Û U“É
n=∞
w∞ = w ∞ + w ∞ + .
ƹÇÚÛñÒ ÛÜÒÓÐ
SÝÉÏÇÚÐXU“ÉëÐ Ž‘Œ¬’ ¶ îŽÄ—»¨ž—» ’ª©“£¬—»– J
òËÂÇµÉ è«Íäгæ ÛÜØµåßʛÔ
¶Ÿ£Ÿ©µ±¬–’
w∞
ٳʛصҝÛÜҙËÂÒ Ê›ÔÃË æ¹Ê®ÍÂÊÌËäÐç˝ɳè½è«Íäгæ·ÛÜØµå›Ò ʛÔÕÛ²ËÂҝɳáÜÔºé
S ÉëÙ¬Ð‘Ø ÉIPôËÂɳصè ËÂǵÉâèµÉ YÚØµÛñËÂÛÜʛØóÊ›Ô Ð ÛñØÚèµÉ³ØµÞ®Ð³ì“ÉŸÍòÒîì¥Ò™ËÂɳÞ
Additional features.
ÍÂÊÌËäÐÑËÂÛÜʛØÝÐçØÚå›áñÉ
ËÂÇÚÐçËâޮгì _É èµÛ ÉÄÍÂÉ³Ø ËâÔÜÍÂʛÞ
ËÂÇÚÐçËÈè«Íäгæ ÒòпÒîØÚαʦæQ Ð ]“ÉÏÔ×ÊÌÍ ÛñصÎÚÖ«Ë
é
n=5
90
ËÂÊ ÜÛ ØµÙ³áÜÖµèµÉâÐ
èµÉ³åÌÍÂÉ³É³ÒŸé Æ¹ÇµÛÜÒâÛñÒâÒÇµÊ¦æ ØÝÛÜØ ÍÂʛåÌÍäÐçÞ \ \
// Prog : snowflake.C
// Draw turtle graphics for the Lindenmayer system with
// production F - > F -F ++F -F , initial word F ++ F ++ F and
// rotation angle 60 degrees .
# include < iostream >
# include < IFM / turtle >
// POST : the word w_i ^F
void f ( unsigned int i )
if ( i == 0)
ifm :: forward (); //
else {
f(i -1);
//
ifm :: right (60); //
f(i -1);
//
ifm :: left (120); //
f(i -1);
//
ifm :: right (60); //
f(i -1);
//
}
}
is drawn
{
F
w_ {i -1}^ F
w_ {i -1}^ F
++
w_ {i -1}^ F
w_ {i -1}^ F
int main () {
std :: cout < < " Number of iterations =? ";
unsigned int n;
std :: cin > > n;
// draw w_n = w_n ^ F ++ w_n ^F ++ w_n ^F
f(n );
// w_n ^ F
T \ \
ifm :: left (120);
f(n );
ifm :: left (120);
f(n );
//
//
//
//
++
w_n ^ F
++
w_n ^ F
return 0;
}
Program 30: ¢¤£³ŸÁ“Ž ŽŸš ›¸
© ôŒ‘Å
Æ ÊÀå›ÉŸË·ÞßÊÌÍÂÉ
Q ÉGP«ÛV_ÚÛÜáÜÛ²Ë ì“í æ¹ÉâÙ¬Ð‘Ø Ð‘áñÒÊ ÉIPôËÂɳصè ËÂǵÉëБá²Î ÇÚÐ _ÉŸË Ê›Ô ÒîìôÞb_ ʛáñÒ³é [ ÊÌÍ ÉIP«Ð‘ÞÀÎÚáÜÉÌí
æ¹É ޮгì БèµèßÒîì¥Þ_ ʛáÜÒ æ Ûñ˝ÇÚÊ›Ö«Ë‹Ð‘Ø ì åÌÍäÐçÎÚǵÛÜ٬БáÚÛÜØ¯ËÂɟ͝εÍÂɟËÂÐçËÂÛÜÊ›Ø “ËÂǵΣÉ³ÒÉ ÐçÍÉ ÒîËÂÛÜáñá ֵҝɳÔ×Öµá˜í¯ËÂǵʛֵå›Ç¾í
ҝÛÜØµÙ³É ËÂǵɟì ޮгì_Éóֵҝɳè¼ÛÜØ ÎÚ͝ÊôèµÖµÙŸËÂÛÜʛصҳé [ ÊÌÍ®ÉIPµÐ‘ÞÀÎÚáÜɑí‹ËÂÇµÉ ÛÜØµèÚɟØÚޮгì“ÉŸÍ Òîì¥Ò™ËÂÉ³Þ æ Û²ËÂÇ
íôÛñØÚÛ²ËÂÛ×Ð‘áæ¹ÊÌ͝è
БصèžÎµÍÂÊ èÚֵٟ˝ÛÜʛصÒ
Σ = {F, +, −, X, Y}
X →
X + YF +
Y →
−FX − Y
ì¥ÛñɳáÜèµÒïËÂǵÉ
F“£Ÿ©›Á¥›š ±³”£KDôŒ
^
X
w14
íÚБصå›áÜÉÓʛÔ
ƹÇÚÉÏÙ³ÊÌ͝͝ɳÒîΠʛصèµÛÜØµåÙŸÊôèµÉâÛÜÒ¹ÒÇµÊ¦æ ØóÛñØ
90
èµÉ³åÌÍÂÉ³ÉŸÒ `Äé
͝ʛåÌÍäБÞ
é
// Prog : dragon .C
// Draw turtle graphics for the Lindenmayer system with
// productions X - > X+ YF + , Y - > - FX -Y , initial word X
// and rotation angle 90 degrees
# include < iostream >
# include < IFM / turtle >
void y ( unsigned int i );
// POST : w_i ^ X is drawn
void x ( unsigned int i ) {
// necessary: x and y call each other
\ \ \
if ( i > 0) {
x(i -1);
ifm :: left (90);
y(i -1);
ifm :: forward ();
ifm :: left (90);
}
//
//
//
//
//
w_ {i -1}^ X
+
w_ {i -1}^ Y
F
+
}
// POST : w_i ^ Y is drawn
void y ( unsigned int i ) {
if ( i > 0) {
ifm :: right (90);
// ifm :: forward ();
// F
x(i -1);
// w_ {i -1}^ X
ifm :: right (90);
// y(i -1);
// w_ {i -1}^ Y
}
}
int main () {
std :: cout < < " Number of iterations =? ";
unsigned int n;
std :: cin > > n;
// draw w_n = w_n ^ X
x(n );
return 0;
}
Program 31: ¢¤£³ŸÁ“Ž
F“£Ä©›Á«›š Å
[ ÛÜØÚБáÜá²ì“í›Ê›ØÚÉÈ٬БØÀБèµèÀÒîì¥Þ_ ʛáÜÒ æ·ÛñËÂÇ åÌÍÂÐçÎÚÇÚÛñ٬Бá«ÛÜØ¯ËÂɟ͝εÍÂɟËÂÐçËÂÛÜʛؤé ïʛÞßÞßʛصáñìãÖÚÒîɳèßÒîì¥Þ_ ʛáÜÒ
ÐçÍÂÉ ^ ÖÚÞÀΞʛصÉâÒîËÂÉÄÎ Ô×ÊÌ͝æÈÐçÍÂè¤í«ËÂǵÛÜÒÈèÚÊ É³ÒØ Ë·áÜɬÐXU“ÉëÐà˝ÍäÐçÙ³É`Äí ^°ÍÂɳÞßɳÞ_ ÉŸÍ¹Ù³Ö«ÍÍÉ³Ø Ë ÎÊ›ÒÛñËÂÛÜÊ›Ø `
‘Ð صè f ^ ÖµÞÀÎ _ Б٠½
] ˝Êóá×БÒîËÏÍÂɳÞßɟÞb_ ÉÄÍÂɳè½ÎÊ›ÒÛñËÂÛÜÊ›Ø `Äéê»ËãÛÜÒëБáñҝÊ[ Ë ìôÎÚÛÜٳБá ËÂÊ Ð‘èµèÝØµÉŸæ Òîì¥Þ_ ʛáÜÒ
æ Û²ËÂÇ ] ËÂǵÉÏÒÂБÞßÉÓÛÜØ¯ËÂɟ͝εÍÂɟËÂÐçËÂÛÜÊ›Ø Ð‘Ò
F
íµÒÂгì“é
3.2.8 Details
ÛÜØµèÚɟØÚޮгì“ÉŸÍ¡ÒîìôÒîËÂɳÞßÒ ÐçÍÂɋØÚБÞßɟèàБÔÜËÂÉŸÍ ËÂǵÉÓБصÛÜÒÇ _ÚÛÜʛáñʛå›ÛÜÒîË ·ÍÂÛÜҙËÂÛÜèµÉ
ÛÜØµèÚɟØÚޮгì“ÉŸÍ ^ \ `Óæ·ÇµÊóÎÚ͝ÊÌΠʛҝɳè ËÂÇµÉ³Þ ÛÜØ ËÂÊ ÞßÊ èµÉ³áÕËÂǵÉÀåÌ͝ÊÑæòËÂÇ Ê›Ô¹ÎÚá×ÐçØ ËÂÒ³é
ÛÜØµèÚɟØÚޮгì“ɟ͏ÒîìôÒîËÂɳÞßÒ ^»æ Ûñ˝ǜå›É³ØµÉŸÍäÐçáÜÛ ¬Ðç˝ÛÜʛصҿËÂÊ ºèµÛÜÞßɳصҝÛÜʛØÚБá‹ÒîΠБٳÉ`ÇÚÐXU“ÉóÔ×ʛֵصè Þ®Ð‘Ø ì
ÐçεÎÚáÜÛÜÙ¬ÐÑËÂÛÜÊ›ØµÒ ÛÜØ ٳʛÞÀÎÚֵ˝ɟÍÈåÌÍäÐçÎÚǵÛÜÙ³Ò³é
Lindenmayer systems.
T \ \ 3.2.9 Goals
Dispositional.
¹Ë¹ËÂǵÛÜÒ¹Î
ʛÛÜØ¯Ë¬íôì“Ê›ÖóÒîÇÚʛֵáÜè é³é³é
`ßÖµØÚèµÉŸÍÒîËäБصè ËÂǵÉÀÙ³Ê›ØµÙ³ÉŸÎµË Ê›Ô ÍÂɟٳ֫ÍÂҝÛÜʛؤí БصèÝæ ǯì ÛñËâޮР]“ɳÒâÒîɳصҝÉßËÂÊ èµÉ YÚØÚÉÀОÔ×ÖµØÚÙÄËÂÛÜʛØ
ÂË Ç«ÍÂʛֵå›ÇóÛñËÂҝɟáÜÔ É Ð¬æÈÐÑÍÂÉãËÂÇÚÐçËÈËÂǵɟì èµÊÀصÊÌË
\ `ßÖµØÚèµÉŸÍÒîËäБصèóËÂǵÉâÒîÉ³Þ®Ð‘Ø ËÛÜÙ³Ò¹Ê›Ô ÍÂɳٳ֫ÍÂÒîÛVU“ÉâÔ×ֵصٟËÂÛÜÊ›Ø Ù³Ð‘áÜáÜÒÈБصè _ â
БáñæÈгì¥Ò¹ËÂɟÍÂÞßÛñØ ÐÑËÂÉ `®ÐçεεÍÂɳٳÛ×ÐÑËÂÉ ËÂǵÉÏΠʦæ¹ÉŸÍòÊ›Ô ÍÂɳֵٟ͝ҝÛÜʛØóÛÜØ ҝÊÌ͝ËÂÛñØÚåÐ‘صèóè«Íäгæ ÛñØÚå ÜÛ ØµèµÉ³ØµÞ®Ð¬ì“ÉÄÍòҙì¥ÒîËÂɟÞßÒ³é
ê˜ØžÎ Ðç͝ËÂÛñÙ³Öµá×Ðçͬí¯ì“Ê›Ö ҝǵʛÖÚáñè _ ÉãÐ _ÚáÜÉ ËÂʞéŸé¬é
Operational.
Y صè εÍÂÉ ïБصèžÎÊ›ÒîËÂٳʛصèµÛñËÂÛÜʛصÒïÔ×ÊÌÍòå›ÛVU“ɳ؞͝ɳٳ֫ÍÂҝÛVU“ÉãÔ×ÖµØÚÙÄËÂÛÜʛصÒ
` Ú
` εÍÂÊU“ÉâÊÌÍòèµÛÜÒîεÍÂÊU“ÉÏ˝ɟÍÂÞßÛÜØÚÐçËÂÛñʛخБصèóÙ³ÊÌ͝ÍÂɟٟËÂØµÉ³ÒÒòÊ›Ô ÍÂɳٳ֫ÍÂÒîÛVU“ÉâÔ×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜáñÒ
\ ß
` ËîÍäБصҝá×Ðç˝ɏÍÂɳֵٟ͝ҝÛV“U ÉßÞ®ÐçËÂǵɳޮÐÑËÂÛÜ٬Бá Ô×ÖÚØµÙŸËÛÜÊ›Ø èÚÉIY صÛñ˝ÛÜʛصÒãÛÜØ¯ËÂÊ Ô×ÖÚØµÙŸËÛÜÊ›Ø èÚÉIY ØµÛ ß
^
^
^
ÂË ÛñʛØÚÒ ^
`ß͝ɟæ·ÍÂÛ²ËÂÉÏпå›ÛVU“ÉŸØžÍÂɳٳ֫ÍÂÒîÛVU“ÉâÔ×ֵصٟËÂÛÜÊ›Ø ÛÜØžÛ²ËÂɟÍäÐç˝ÛVU“ÉÓÔ×ÊÌÍÂÞ ^ `ßÍÉ³Ù³Ê›å›ØµÛ ³ÉÏÛÜØµÉ ٟÛÜÉ³Ø ËÈÍÂɳֵٟ͝ҝVÛ U“ÉÏÔ×ÖÚØµÙŸËÛÜʛصҷБصèóÛñÞÀÎÚÍÊ U“É ËÂǵɳÛñ͹ΠÉÄÍÂÔ×ÊÌÍÂÞ®Ð‘ØµÙ³É ^ `®ÙŸÊ›ÖÚØ¯ËïËÂǵÉÓØôÖµb
Þ _ÉŸÍ¹Ê›Ô¤ÊÌΠɟÍäÐç˝ÛÜʛصÒïÊ›Ô Ðëå›VÛ U“ÉŸØ Ë ìô΍ÉÏÛñ؞ÐâÍÂɟٳ֫ÍÂҝÛVU“ÉÏÔ×ÖµØÚÙÄËÂÛÜÊ›Ø Ù¬‘Ð áÜá˜í ֵҝÛÜØµå
ÛÜØµèµÖµÙŸËÂÛÜÊ›Ø Ð‘Ò¹ËÂǵÉãÞ®ÐçÛÜØ ˝Êôʛá ^ `ßæòÍÂÛñËÂÉ ÍÂɟٳ֫ÍÂҝVÛ U“ÉãÔ×ÖÚØµÙŸËÛÜʛصÒÈÔ×ÊÌÍ·å›VÛ U“ɳ؞ËÂÐ‘Ò ]¥ÒŸé
3.2.10 Exercises
Exercise 95
Ð `
_ `
—»šF¿¢¤£³Œ ⩓šF¿¢ “޳–±Ä›šF“—˜–˜—™›š¤Ž¹¶ç›£ –ºŠŒ¹¶ç“’»’ª›¸È—°šÁ £³ŒŸ±³” £¦ŽŸ— DôŒò¶Ä”𠱬–˜—™›š¤ŽçÅ
bool f ( int n)
{
if ( n == 0) return false ;
return ! f (n -1);
}
void g ( unsigned int n )
{
if ( n == 0) {
std :: cout < < " *";
return ;
}
g(n -1);
g(n -1);
}
^
`
\ \
Ù`
unsigned int h ( unsigned int n , unsigned int b ) {
if ( n == 1) return 0;
return 1 + h ( n / b , b );
}
Exercise 96 È£Ÿ D¥Œ
› £ F“—»Ž™¢¤£³ D¥Œ ¶‘›£ ©“š J Â¶ –ºŠŒß¶‘“’»’ª›¸¹—»šÁ £³ŒÄ±³”£¦ŽÄ— D¥Œ®¶Ÿ” 𠬱 –˜—î›š¤Ž –ºŠ©¯–ß—»–
–Œ³£¬¨ —»š ©¯–Œ¬Ž·¶ç›£ž©¯’»’¢ “ŽŸŽŸ—™ ¦’ªŒ ©“£™Á›”¨½Œ³š¤–ºŽçÅš –ºŠ¥—˜Ž¿–ºŠŒŸ›£KJ ŒÚŒ³£³±Ÿ—˜Ž‘Œ 㐠D¥Œ³£ ›¸ Ž³Š›”’ Fóš “–
³ Œë–î© ôŒ³š —»š¤– ©µ±Ÿ±Ÿ›” 𤖠—™Å»Œ‘Å
Jڐ›”½ŽŸŠ›”’ F⢤£³Œ¬–ŒŸšF –ºŠ©¯– –ºŠŒZDô©¯’•” ŒÏ£Ÿ©“šÁ«ŒÀÂ¶ unsigned ^ int
\ `
˜— Ž®Œ ”¡©¯’ – žÅ
Ð `
unsigned int f ( unsigned int n)
{
if ( n == 0) return 1;
return f( f(n -1));
}
_ `
Ù`
// POST : return value is the Ackermann function value A (m ,n )
unsigned int A ( unsigned int m , unsigned int n ) {
if ( m == 0) return n +1;
if ( n == 0) return A (m -1 ,1);
return A(m -1 , A(m , n -1));
}
unsigned int f ( unsigned int n , unsigned int m)
{
if ( n == 0) return 0;
return 1 + f (( n + m ) / 2 , 2 * m );
}
Exercise 97 Ӑ›š¤ŽÄ—NFµŒ³£¿–ºŠŒÈ¶‘“’»’ª›¸¹—»šÁ®£³ŒÄ±³”£¦ŽÄ— D¥ŒÈ¶Ÿ” 𠱬–˜—š
) Ù ¹
ž
Ðç͝ËÂǯì Ò [ ֵصٟËÂÛÜʛØ
–Œ™Á¥Œ³£¦Ž Ó©¯’²Ž‘ ‘𠐛¸¹š ©¯Ž
M(n) :==
©KM ¹£³ D̗ FµŒ ©
Å
FµŒ š ŒIF½›š ©¯’»’ š ›š š Œ Á¥©¯–˜— D¥Œ—»š
n − 10, — ¶ n > 100
M(M(n + 11)), — ¶ n 100.
¶Ÿ” 𠱬–˜—š mccarthy –ºŠ©¯–È—»¨¢¾’ªŒ³¨½Œ³š¤–ºŽ
±
M ݊©¯–Ï©“£ŸŒÀ–ºŠŒ D ©¯’­”¡Œ¬Ž Â¶ –ºŠŒò¶‘“’°’§›¸¹—»šÁ㶑›” £ò¶Ä”𠱬–˜—™›š ±´©¯’»’­Ž
Hî—EM mccarthy(101)
H—»—EM mccarthy(100)
H—»—EM mccarthy(99)
Hî— D M mccarthy(91)
©“£¦–ºŠJ Ž
” 𠱬–˜—š Å
T \ \ ¦¢¾’ש“—»š¼¸òŠJݖºŠŒã¶Ä”𠱬–˜—™›š
±M
—»Žó±Ä©¯’»’ªŒIF
± ©“£¦–ºŠJ Ž ”𠱬–˜—™›š
¸ÈŠ©¯–ò—»Ž–ºŠŒ Dô©¯’•” Œ  ¶ M(n) ¶‘›£ ©“š JóÁ̗ D¥Œ³šœš ”¨½ ŸŒ³£ n
›£³Œ ¢¤£³ŒÄ±³—˜Ž‘Œ³’EJ
^
`I^
`
Exercise 98
£¬—˜–Œ¿©“šFߖŒ¬ŽŸ–·© Ÿ¶ ” 𠱬–˜—î›š –ºŠ©¯–·±Ÿ› ¨¿¢¤”–Œ¬Ž ¬—»š › ¨ —™©¯ ’ ı ÌŒ ±³—™Œ³š¤–ºŽ
žÅ ‰‹ŠŒ¬ŽçŒ¨ © JÝ ³Œ FµŒ š IŒ F °— š Dô©“£¬—™›”Ž®Œ ” — Dô©¯’ªŒ³š¤–·¸ ©J ŽçÅ ›£ Œµ©“¨¢¾’ªŒ
©KM
n
k
, n, k
n
n!
,
:=
k!(n − k)!
k
›£

 0,
n
1,
:=
 n−1
k
›£

 0,
n
1,
:=
 n
k
+
k
n−1
k−1
—¶ n<k
— ¶ n = k ›£ k = 0 ,
, — ¶ n > k, k > 0
—¶ n<k
— ¶ n k, k = 0
— ¶ n k, k > 0
n−1
k k−1
M ݊¥—î±³Š¼Â¶®–ºŠŒ –ºŠ¥£³ŒŸŒ Dô©“£¬—™©“š¤–ºŽ®—˜Žó ŸŒ¬Ž³–âŽÄ”—˜–ŒGFÀ¶ç›£ž–ºŠŒ »— ¨¿¢¾’§Œ³¨½Œ³š¤––˜—î›š ©“šF½¸òŠJ
£îÁ›”¡Œó–ºŠŒÄ›£³Œ¬–˜—î±´©¯’»’ J À ³”–â” šFµŒ³£¢¤—»š Jڐ›”£½©“£îÁ›”¨½Œ³š¤–ºŽ X J ±Ä›¨¢©“£¬—°šÁ ©¯–ë’ªŒÄ©¯Ž³–ë–˜¸Ó
F“— Œ³£³Œ³š¤– —°¨¢¾’ªŒ³¨ Œ³š¤––˜—™›š¤Ž Â¶¿–ºŠŒò¶Ÿ”š ±³–˜—š Å
^
Exercise 99 š
`G^
`^
`
Š ›¸ ¨½©“š J ¸ ©Jô޽±Ä©“š Jڐ›” ›¸¹š

Œ³Ž™¢¤—˜–Œ —˜–ºŽžŽç›¨ Œ³¸ÈŠ©¯–·¢¾Š¥—˜’ª
Ž‘³¢¾Š¥—™±Ä©¯’·©¬¢«¢ Œ´©“£Ÿ©“š ±ŸŒ –ºŠŒ ” Œ³Ž³–˜—î›š —˜Ž © ¨½©¯–ºŠŒ³¨ ©¯–˜—î±´©¯’Ӑ›š ŒçÅ
— D¥Œ³š Ž‘›¨½Œ ©“¨½›”𤖠Â¶
¨ ›š Œ J —°š Š›¸ ¨½©“š J ¸Ó©J Žž±´©“š Jڐ›” ¢©“£¦–˜—˜–˜—™›š¼—»– ”ŽŸ—°š Á –ºŠŒó©Dô©“—»’ª©« ¬’§Œ FµŒŸš ›¨ž—»š ©¯–˜—™›š¤Ž
HÄ Ä©“š š “–Œ¬Ž ©“
š F ±Ÿ›—»š¤Ž M
‰‹ŠŒ FµŒ³š ›¨ —»š ©¯–˜—š¤Žß—°š
©“£³Œ HÄ Ä©“š ‘š “–Œ¬NŽ M
Å
Å
Å
Å
HŸ±Ÿ›—°š¤ŽNM¥Å ‰ÕŠŒ ©“¨½›”š¤–âÂ¶
Å ¶‘›£ Œµ©“¨¿¢¾’§Œ ϱĩ“š ŸŒž›¸¹š IŒ F —°šž¶ç›”£ ¸ ©J Ž H– Á«Œ¬– —°š¤–Œ™Á«Œ³£¦Ž ’ªŒ¬– ŽŽŸ¸¹—˜–±¬Š½–Ý±ŸŒ³š¤–˜—°¨ Œ¬Ž M
(20), (10, 10), (10, 5, 5), (5, 5, 5, 5) Å
“E’ Dô ŒÀ–ºŠŒÓ¢¤£³¥ ¦’ªŒ³¨ ¶‘›£®©“š JóÁ›— D¥ŒŸšœ—»š¥¢¤”–Ï©“¨½›”𤖠K J ¸¹£¬—˜–˜—°šÁ½©¢¤£³ŸÁ›£Ä©“¨ partition
–ºŠ©¯– FµŒ š Œ³Ž–ºŠŒò¶‘“’»’ª›¸¹—»šÁ϶Ÿ” 𠱬–˜—š HÄ©¯’»T
’ D ©¯’­”¡Œ¬Ž– ³ŒÀ” š FµŒ³£¦Ž³–Ì F ©¯Ž®±ŸŒ³š¤–˜—°¨ Œ¬NŽ MôÅ
// PRE : [ first , last ) is a valid nonempty range that describes
//
a sequence of denominations d_1 > d_2 > ... > d_n > 0
// POST : return value is the number of ways to partition amount
//
using denominations from d_1 , ... , d_n
unsigned int partitions ( unsigned int amount ,
unsigned int * first ,
unsigned int * last );
\ \ Ž‘Œ ÚJ ›”£ ¢¤£³ÄÁ›£Ÿ©“¨ – µF Œ¬–Œ³£¬¨ž—°š Œ—°š Š›¸ ¨ ©“š Jó¸ © JôŽZJڐ›” ±Ä©“𼠐›¸¹š
Å
“© šJ ›” £Ï¢¤£³ÄÁ›£Ÿ©“¨ ı ›¨¢¤”–ŒÀ–ºŠŒ¿š ”¨½ ŸŒ³£óÂ¶ ¸ © Jô޹¶‘›£
· ©“šF ^ `
Exercise 100 ” «
¢ ¢ “Ž‘ŒJڐ›”ž¸ ©“š¤–֝®±³£Ÿ©µ± àŽ‘›¨½Œ‘ ³ F J Ž Ž‘ŒŸ±³£ŸŒ¬–ò±Ä FµŒ ¹±Ÿ›š¤ŽŸ—»Ž³–˜—»šÁ®Â¶ d F“—°Á›—»–ºŽ
³Œ³–˜¸ÏŒÄŒ³š 1 ©“šF 9 Å ›”¼Š©D¥Œ Ž‘›¨½Œ¬Š›¸ ¶‘›” šF ›
” –à–ºŠ©¯–Œµ©µ±¬–º’ J k Â¶ –ºŠŒ¬Ž‘Œ F“—°Á›—»–ºŽ ©“£³Œ
1 ŽçÅ
©KM
M
£¬—˜–Œã© ¢¤£³ŸÁ›£Ÿ©“¨ –ºŠ©¯– Á«Œ³š Œ³£Ä©¯–Œ¬Žë©¯’»’Ì¢ “Ž³ŽŸ— ¦’ªŒâ±Ÿ µF Œ¬ŽçÅ®‰ÕŠŒ‹¢¤£³ŸÁ›£Ä©“¨ Ž³Š›”’ FÀ±Ä›š¤–î©“—»š
©â¶Ÿ”š ±³–˜—î›š –ºŠ©¯–·Ž‘“’EDôŒ¬Ž–ºŠŒÓ¢¤£³¥ ¦’ªŒ³¨ ¶‘›£¿Á›— D¥ŒŸš ©“î£ Á›” ¨ Œ³š¤–ºŽ d ©“šF k Å
F«©¬¢¾–·–ºŠŒã¢¤£ŸŸÁ›£Ÿ©“¨
Ž‘ó–ºŠ©¯–È—˜–㩯’­Ž‘ ›”–ñ¢¤”–ºŽ–ºŠŒ¿š ”¨ ³Œ³£ Â¶ ¢ “ŽŸŽŸ—™ ¦’ªŒ ±Ÿ FµŒ¬ŽÑÅ
’­— ô
Œ–ºŠ¥—˜Ž
›£žŒ«©“¨¢¾’ªŒ ò— ¶ d = 2 ©“šF k = 1 ò–ºŠŒ ›”–ñ¢¤”–ò¨ ©J ’§Ì
12 13 14 15 16 17 18 19 21 31 41 51 61 71 81 91
There were 16 possible codes .
^
`
³Œ ¸¹£¬—»–Œ–ºŠŒ¹¶ç“’»’ª›¸È—°šÁ®£³ŒŸ±Ÿ”£¦ŽŸ— D¥Œ¹¶Ÿ”š ±³–˜—î›š —»š —˜–ŒŸ£Ÿ©¯–˜— D¥Œ¹¶ç›£¬¨ ©“šF –Œ¬Ž³–¹¸È—»–ºŠ
©ž¢¤£ŸŸÁ›£Ÿ©“¨ ¸ÈŠŒ¬–ºŠŒ³£ Jڐ›”£ —˜–Œ³£Ÿ©¯–˜— D¥Œ DôŒ³£¦ŽŸ—î›š —˜Ž ±Ÿ›£¬£³ŒÄ±¬–îŠ݊©¯–±´©“š Jڐ›” ю ©Jœ©«^ ³›”`I–ë
^ –ºŠ Œ `
£¬”š¤–˜—°¨ Œ¬Ž®Â¶ß ³“–ºŠ D ©“£¬—™©“š¤–ºŽ¹¶‘›£ D ©¯’­”¡Œ¬Ž Â¶ n ”¯¢ – 100 ¹Žç©J
Exercise 101
unsigned int f ( unsigned int n)
{
if ( n <= 2) return 1;
return f (n -1) + 2 * f(n -3);
}
Exercise 102 ‰‹ŠŒ ¶ç“’»’ª›¸È—°šÁ¹¶Ÿ” 𠱬–˜—š
š F¯Žã©“š Œ¬’§ŒŸ¨ Œ³š¤–øȗ»–ºŠó©¿Á̗ D¥Œ³š Dô©¯’•” Œ x —°š © Žç›£¦–ŒIF
Ž‘Œ ” Œ³š ±ÄŒ Hî— ¶ –ºŠŒ³£³ŒÀ—»Ž¿ŽÄ” ±¬Š ©“š Œ¬’ªŒ³¨ ŒŸš¤–VM¥Å
// PRE : [ first , last ) is a valid range , and the elements *p ,
//
p in [ first , last ) are in ascending order
// POST : return value is a pointer p in [ first , last ) such
//
that * p = x , or the pointer last , if no such pointer
//
exists
int * binary_search ( int * first , int * last , int x)
{
int n = last - first ;
if ( n == 0) return last ;
// empty range
if ( n == 1)
if (* first == x)
return first ;
else
return last ;
// n >= 2
int * middle = first + n /2;
T \ \ if (* middle > x ) {
// x can ’t be in [ middle , last )
int * p = binary_search ( first , middle , x );
if ( p == middle )
return last ; // x not found
else
return p ;
} else
// * middle <= x ; we may skip [ first , middle )
return binary_search ( middle , last , x );
}
݊©¯– —˜Ž –ºŠŒ ¨½©¯—°¨ž”¨ 𠔍 ³Œ³£ T (n) Â¶ ±Ÿ›¨¢©“£¬—˜Ž‘›š¤Ž ŸŒ¬–˜¸ÓŒŸŒ³š Ž‘Œ ” Œ³š ı Œ ¬Œ ’§ŒŸ¨ Œ³š¤–ºŽ
©“šF x –ºŠ©¯–¿–ºŠ¥—»Žâ¶Ÿ” 𠱬–˜—î›š ¢ ŒŸ£º¶‘›£¬¨óŽó— ¶ó–ºŠŒ š ” ¨½ ³ŒŸ£ Â¶žŽ‘Œ ”¡Œ³š ±ŸŒ Œ¬’ªŒ³¨ ŒŸ¤
š –ºŽ »— Ž n ‰£KJ
– š F ©“𠔝¢«¢ Œ³£ Ÿ›”šF ›š T (n) –ºŠ©¯–ß—˜Ž ©¯Ž½Á¥Ì F ©¯Ž ¢ “Ž³ŽŸ— ¦’ªŒ‘Å H ›” ¨ ©J ”‘Ž Œ ^ –ºŠ Œ`
޳––Œ³¨½Œ³š¤–ëÂ¶ ڌ³£³±³—»Ž‘Œ Å M
Exercise 103
^
`
×áñʛå
2
n
2
›£ ©“š Jݚ ©¯–˜”£Ä©¯’ 𠔍½ ŸŒ³£ n
×áñʛå
2
n
2
=
×áÜʛå
2
2 £³ D¥Œ –ºŠŒã¶ç“’»’ª›¸È—°šÁ½–˜¸Ï HšM¥Œ ”¾©¯’­—»–˜—ŽçÅ
n − 1.
Exercise 104 Ý£¬—»–Œã¢¤£³ÄÁ›£Ÿ©“¨óŽ–ºŠ©¯–Õ¢¤£³ F“”¡±ŸŒ –˜”£¦–º’ªŒÁ›£Ÿ©¬¢¾Š¥—™±¬Ž F“£Ÿ©“¸¹—»šÁ“ŽÈ¶‘›£À–ºŠŒÈ¶‘“’°’§›¸¹—°šÁ
^ `
—»šFµŒ³š ¨ ©J Œ³£ Ž J ޳–Œ³¨óŽ (Σ, P, s) Å
Ð `
_ `
í
Σ = {F, +, −} s = F + F + F + F
Бصè
P
å›ÛVU“É³Ø _ ì
F →
FF + F + F + F + F + F − F.
í
Σ = {X, Y, +, −} s = Y
íµÐ‘صè
P
å›ÛVU“É³Ø _ ì
X →
Y+X+Y
Y →
X − Y − X.
[ ÊÌͷ˝ÇÚÉãè«Íäгæ ÛÜØµå«í«ÖµÒÉã͝ÊÌËäÐçËÂÛÜʛ؞Бصå›áÜÉ
èµÉ³åÌÍÉ³É³Ò ÐçØÚè ÛñØ ËÂɟÍîÎÚ͝ɟË
Бصè
БÒ
α = 60
Y
Ÿ“–ºŠ X
îÞßʓ
U ÉÓʛØÚÉÏÒîËÂÉÄÎ Ô×ÊÌ͝æÈÐçÍÂè
«é
Ù` ÛV]“É
_ `´í_ Ö«ËÈæ ÛñËÇ ËÂǵÉÓÎÚ͝ÊôèµÖµÙŸËÂÛÜʛصÒ
X →
X + Y + +Y − X − −XX − Y +
Y →
−X + YY + +Y + X − −X − Y.
\ \
1
2
3
Figure 21: ‰ÕŠŒ ‰ ›¸ÏŒŸ£žÂ¶ ©“𠐛—
Exercise 105 ‰‹ŠŒ
Æ Ê¦æ¹ÉŸÍÂÒ·Ê›Ô Ð‘ØµÊ›Û
¢ ” ’ªŒ H–ºŠ©¯–â±Ä©“š ©µ±³–˜”¡©¯’»’ JÝ ³Œ ³›” Á›Š«– ¶Ÿ £³›¨ Ž³Š³¢¾ŽNM —˜Ž
¤
–ºŠŒ ¶‘“’°’§›¸¹—°šÁ¥Å ‰ÕŠŒ³£³Œó©“£³Œ –ºŠ¥£³ŒÄŒ ¸ÓÌ FµŒ³š ¢Œ™Á“Žß’ש« ³Œ¬’ªŒIF 1, 2, 3 ¹¸È ŠŒ³£³Œ –ºŠ Œ £¦Ž³– ¢ Œ Á Š“’ F¯Ž
© ŽŸ–± ½Â¶ n F“—»Ž ̎ ¹Ž³–± ôŒIF —°š FµŒÄ±³£³ŒÄ©¯ŽÄ—»šÁ ›£ FµŒŸ£óÂ¶ ŽŸ— Œ Ȏ‘ŒŸŒ —°Á›” £³Œ —°Á›” £³Œ ¥Å
‰‹ŠŒàÁ«ç©¯’ —˜Žë– –˜£Ÿ©“š¤Ž»¶çŒ³£–ºŠŒŽŸ–± Â¶ F“—˜Ž ‘Žë–¿¢Œ™Á · KJ󨽐 D̗»šÁ ›š Œ F“—˜Ž ž©¯– ©ž–˜—»¨½Œ
¶Ÿ£Ÿ›¨ ›š Œâ¢Œ™Á – ©“𠐓–ºŠŒŸ£ÌŽ‰ÕŠŒ £¬”’§Œ—˜Ž¿–ºŠ©¯–⩯–·š  –˜—»¨½Œ Ó© ’ª©“£™Á«Œ³£ F“—˜Ž ¨½©J ŸŒó›š –³¢
Â¶ ©žŽŸ¨½©¯’°’§ŒŸ£ ›š ŒçÅ ›£ Œ µ©“¨¢¾’ªŒ ï¸ÓŒ ±Ÿ›”’ F ޳–î©“£¦–ÏX Jó¨  D̗°šÁ –ºŠŒ–³¢¤¨½“޳–F“—˜Ž ߖ ¢ Œ™Á 2
H D¥Œ (1, 2)M ‹–ºŠŒŸš ¨½ D¥Œ¿–ºŠŒàš Œ – F“—˜Ž ò¶Ÿ£³›¨ ¢Œ™Á 1 – ¢Œ™Á 3 H D¥Œ (1, 3)M ‹–ºŠŒ³š ¨  DôŒ
–ºŠŒÀŽÄ¨½©¯’»’ªŒ³£ F“—˜Ž ¶Ÿ£Ÿ›¨ ¢Œ™Á 2 ›š¤–ó–ºŠŒ ’ª©“£îÁ¥Œ³£ F“—˜Ž ›š ¢ Œ™Á 3 Hî¨  DôŒ (2, 3)M Œ³–±‘Å
£¬—˜–Œà© ¢¤£³ŸÁ›£Ä©“¨ hanoi.C –ºŠ©¯–”–ñ¢¤”–ºŽã©Ž‘Œ ” Œ³š ±ÄŒ Â¶·¨  DôŒ¬Ž –ºŠ©¯– FµÌŒ¬Ž –ºŠŒ £³Œ ”—°£³IŒ F
–˜£Ÿ©“š¤Ž»¶çŒ³£ ¶‘›£ Á›— D¥ŒŸš —»š¥¢¤”– n Å
›£ Œ µ©“¨¢¾’ªŒ — ¶ n = 2 –ºŠŒ¼©« ³ D¥Œ —»š —˜–˜— ©¯’àŽ‘Œ ” Œ³š ±ÄŒ
(1, 2)(1, 3)(2, 3) —»Ž ©¯’­£ŸŒÄ© FJœ±Ä›¨¢¾’ªŒ¬–Œ ©“
š F Ž‘“’ D¥Œ¬Žß–ºŠŒâ¢¤” ’ªŒ‘Å ¹ŠŒŸ± –ºŠŒó±Ä›£¬£³ŒŸ ±³–˜š Œ¬Ž³Ž½Â¶
Jڐ›”£â¢¤£³ÄÁ›£Ÿ©“¨ K J½Š©“
š FÝ©¯– ’ªŒÄ©¯Ž³– ¶ç›£ n = 3 ãX J ¨ ©“š ”¡©¯’°E’ J £³Œî¢¤£Ÿ F“” ±³—°šÁ –ºŠŒßŽ‘Œ ” Œ³š ±Ä^ Œ Â¶`
¨  DôŒ¬Ž ›š © ¢¤—îŒÄ±ŸŒ Â¶Ó¢©¬¢ Œ³£ HЛ£ ©“š ©µ±¬–˜”¾©¯’ ‰ ›¸ÓŒ³£žÂ¶ ©“𠐛— ï— ¶ Jڐ›” Š© D¥Œ ›š NŒ M¥Å
Exercise 106 Ӛ –ºŠŒÏÌ±Ä±Ä©¯ŽŸ—™›šÝÂ¶ï¨½© ›£·Ž™¢›£¦–ºŽÏŒXDôŒ³š¤–ºŽ
3.2.11 Challenges
–ºŠ Œ ä –î ©¯’•—™©“š
ı ›¨¢©“š J ©“𠗻𠗾ޑŒ¬’°’²Ž
޳–˜—™± ôŒ³£¦Žà– ³Œß±Ä“’»’ªŒŸ±¬–ŒGF —»š ©“𠩝’ª ³”¨½Å ›£¿–ºŠŒ
Ž‘Ì±Ä±ŸŒ³£ ±¬Š©“¨¢¤ —™›š¤Ž³Š¥—²¢ ‹–ºŠŒ
±Ÿ“’°’§ŒÄ±¬–˜—š ±Ä›¨¢¤£¬—»Ž‘ŒIF  ¶
F“— ³Œ £³ŒŸš¤– ޳–˜—î± Œ³£¦Ž Ó©Dô©“—˜’ש« ¦’ªŒ—°š ¢©µ± ©›Á¥Œ¬Ž Â¶ D¥Œ ޳–˜—î± Œ³£¦Ž
ŒÄ©µ±³ŠÅ
݊Œ³šÝ ¬” J¯—»šÁ © ¢©µ± ©›Á¥Œ J ›” ±´©“š š “–Î猟Œ ¸ÈŠ¥ —î±³Šß޳–˜—î± Œ³£¦Žò—»– ±Ÿ›š¤–î©“—»š¤ŽÑÅ®‰‹ŠŒã±Ÿ›¨¢©“š J
›š¤’ J Á̔¡©“£Ÿ©“š¤–ŒÄŒ¬Ž –ºŠ©¯– ŒÄ©µ±³Š ¢©µ± ©›Á«Œ ±Ÿ›š¤–î©“—»š¤Ž D¥Œ F“— Œ³£³Œ³ 𤖠޳–˜—™± ôŒ³£¦ŽçÅ Œ¬–딎 ©¯ŽŸŽŸ”¨½Œ
–ºŠ©¯– ŒÄ©µ±¬ŠÀ¢ “ŽŸŽŸ—™ ¦’ªŒàŽ‘Œ³’§ŒÄ±¬–˜—š¼Â¶ D¥Œ F“— Œ³£³ŒŸš¤–ò޳–˜—™± ôŒ³£¦Žë—»Ž Œ ”¡©¯’»’ J󒕗 Œ¬E’ J – ³Œß±Ä›š¤–î©“—»š IŒ F
—»š ©“š J Á›— D¥ŒŸš ¢©µ± ©›Á«Œ‘Å ›¸ ¨½©“š J¢©µ± ©›Á«Œ¬L
Ž Fµ Jڐ›”Ýš ŒŸGŒ F󖝐 ¬” J ›š © D¥Œ³£Ä©›Á«Œ —»š ›£ FµŒ³£
–óŠ © DôŒ ©¯’»’ –ºŠŒÀ޳–˜—™± ôŒ³£¦Ž
›£ó–ºŠŒ ±Ä©¯Ž‘Œ Â¶
¸¹—˜–ºŠ
ŽŸ–˜—î± ôŒŸ£¦Ž à©Ýš Œ³¸ÈŽ™¢©¬¢Œ³£Ý±¬’ש“—»¨½IŒ F H´ Ÿ©¯Ž‘GŒ F ›š
±Ÿ›š¤ŽÄ”’­–˜—»šÁ © ¨½©¯–ºŠÀ¢¤£³Â¶‘Œ³Ž³Ž‘›£ M®–ºŠ©¯–¹–ºŠ¥—˜Žã𠔍½ ŸŒ³£¿—˜Ž 763 Å ›¸ F“— F –ºŠŒ ¢¤£³Â¶‘Œ¬ŽŸŽ‘›£ß©“£¬£¬— D¥Œ
©¯–·–ºŠ©¯–ò𠔍½ ŸŒ³£ Ó©“
š F󗘎 —˜–ϱŸ›£¬£³ŒÄ±¬–
£¬—˜–Œ ©ž¢¤£³ŸÁÌ£Ÿ©“¨ –ºŠ©¯–±Ÿ›¨¿¢¤”–Œ¬Ž –ºŠŒ © D¥Œ³£Ÿ©›Á¥Œžš ”¨ ³Œ³£½Â¶ë¢©µ± ©›Á¥Œ¬Ž –ºŠ©¯– J ›”œš ŒŸIŒ F
– ¬” JÀ¶ç›£ © ±Ä“’»’ªŒŸ±¬–˜—™›š Â¶ßŽŸ— Œ n Å H Žž© ŽŸ—»¨¿¢¾’§Œ ±¬ŠŒÄ± J ›” Ž³Š›”’ F Á«Œ¬–›š Œà¢©µ± ©›Á«Œ
›š © DôŒ³£Ÿ©›Á«ŒÀ— ¶ n = 5M¥Å ݊©¯
– Fµ Jڐ›”ÝÁ«Œ¬– ¶ç›£ n = 555
T \ \
Note: š
› £ FµŒ³£ß–žŽ‘“’ D¥ŒÀ–ºŠ¥—»Ž ±¬Š©¯’°’§ŒŸšÁ«Œ—°š ©ó¨ ©¯–ºŠŒ³¨½©¯–˜—™±Ä©¯’°’EJ ‘Ž ›” šFó¸ ©J Jڐ›” š ŒŸŒGF
Ž‘›¨½Œ Ä©¯ŽŸ—î± ‘𠐛¸ã’ªŒIF›Á«Œ½Â¶â¢¤£³¥ Ÿ©« ³—˜’•—˜– J –ºŠŒŸ›£KJµÅ ”–ö琛£½›” £¿¢¤” £¢ “ Ž‘Œ¬Ž —»–Ï—»Žž©¯’²Žç  – 
”޳–·Š©“šF“¸ ©D¥Œ¿¸ÈŠJ J ›” £Ï¢¤£³ÄÁ›£Ÿ©“¨ —»Žß±Ÿ›£¬£³ŒÄ±¬–îÅ
Exercise 107 ×°šFµŒ³š ¨½©Jڌ³£®Ž J ޳–Œ³¨žŽ ±Ä©“š
©¯’­Ž‘ ŸŒÀ”ŽçŒIF – F“£Ä©“¸ H ”—»–Œ £³Œ´©¯’­—»Ž³–˜—î± M ¢¾’ª©“š¤–ºŽ
¸¹—˜–ºŠß–ºŠŒ Á›£Ÿ›¸ò–ºŠë¢¤£³‘±ŸŒ¬Ž³Ž ŽÄ—»¨ž”’ª©¯–ŒGFß KJ–ºŠŒDô©“£¬—”Žò—»–Œ³£Ÿ©¯–˜—š¤ŽÑÅ ›£Ó–ºŠ¥—»Ž Š›¸ÓŒXD¥ŒŸ£ –ºŠŒ³£³Œ
¨ž”޳– ³Œß©¢“Ž³ŽŸ—™ ³—˜’•—˜– J Â¶ß±Ÿ £³ŒÄ©¯–˜—°šÁ ¬£Ÿ©“š ±³ŠŒ¬ŽçÅ Œ³–ò”Žà–ºŠŒŸ£³Œ˜¶‘›£ŸŒ Œ³š¤Š©“š ±ÄŒž›” £FµŒ»¶ç©“”’­–ÈŽ‘Œ¬–
{F, +, −} Â¶âŽIJ ¨ ³“’­Žã¸¹—˜–ºŠ µŒIF®¨ Œ´©“š —»šÁó©“
š FÀ𠐛¸ ”Ž‘Œ Σ = {F, +, −, [, ], f} Å¿‰ÕŠŒëŽ J¯¨½ Ÿ“’ [
—˜Ž FµŒ š ŒGF –óŠ©D¥Œ –ºŠŒ·¶ç“’»’ª›¸È—°šÒîÁ ËäÐçŒ ËÂɹŒŸÒË– Б٠] –ºŠŒ ±³”£¬£ŸŒ³š¤– ޳––Œ Â¶–ºŠŒ –˜”£¦–º’ªŒ H°¢“ŽŸ—˜–˜—™›š ©“šF
F“—»£ŸŒŸ±¬–˜—™›šM —»Žï¢¤”–Ȑ›š½–³¢ Â¶Ó–ºŠŒ
¸ÈŠ¥—™±¬Š —»Ž —»š —»–˜—™©¯’»’ J󌳨¿¢¾– JÚÅ®‰ÕŠŒÏŽ J¯¨½ ³“’ ] ŽçŒ¬–ºŽ
–ºŠŒ¿Ž³––Œ Â¶à–ºŠŒ¿–˜”£¦–º’ªŒ® Ä©µ± –ž–ºŠŒ®›š Œ¹¶‘›” š F½›š –³¢ Â¶à–ºŠŒ¿Ž³––Œ¿Ž³–± ©“
š F £³Œ³¨½ D¥Œ¬Ž
–ºŠŒ –³¢ ޳––ŒÓ¶Ä£³›¨ –ºŠŒ ŽŸ–± Å ‰ÕŠ¥—˜Žß¨ ŒÄ±¬Š©“š —˜ŽÄ¨ ±Ä©“š ŸŒ ”Ž‘IŒ F – £³Œ³¨ ŒŸ¨½ ³ŒŸ£Ý©œ±ÄŒ³£¦–î©“—»š
޳–– Œ ©“šF󣳌¬–˜” £¬š –ó—»–·’ש¯–Œ³£ÌÅ
›£ Œ µ©“¨¢¾’ªŒ — ¶ž–ºŠŒ £³“––˜—î›š ©“šÁ“’ªŒ —»Ž 45 FµŒ Á›£³ŒŸŒ³Ž À–ºŠŒ ¸Ó›£ F FF[+F][−F] ¢¤£Ÿ F“” ±ÄŒ¬Ž
–ºŠŒ F“£Ä©“¸È—°šÁݐ¶ —§Á›”£ŸŒ
Å
p
Figure 22: ‰ÕŠŒ –˜” £¦–º’§Œ ©ä¶³–Œ³£Ï¢¤£³Ì±ÄŒ¬Ž³ŽŸ—°šÁ –ºŠŒž±Ä›¨ž¨ ©“šF Ž‘Œ ” Œ³š ±ÄŒ FF[+F][−F]
‰‹Š¥—»Ž FµÌŒ¬Žë𠐓–¹’ªÌ ®’­— ôŒÀ©D¥Œ³£KJ󎑐³¢¾Š¥—˜Ž³–˜—™±Ä©¯–ŒGF¿¢¾’ש“š¤–RJ Œ³– · ¬”–¹— ¶ J ›”¶‘›£ßŒ«©“¨¢¾’ªŒ –˜£KJ
–ºŠŒã¢¤£Ÿ F“” ±¬–˜—™›š
F →
FF + [+F − F − F] − [−F + F + F]
¸ —˜–ºŠž—°š —˜–˜— ©¯’¸Ï›£IF F Õ£Ÿ“––˜—î›šœ©“šÁ“’ªŒ 22 FµŒ™Á›£ŸŒŸŒ¬Ž ò©“šF ¶‘›” £â—˜–ŒŸ£Ÿ©¯–˜—î›š¤Ž J ›” ¸¹—˜’°’ Ž‘ŒŸŒâ¸òŠ©¯–
¹
¸ÓŒ ¨½ŒÄ©“š Å
ä–룳Œ³¨ ©“—»š¤Žž– Œ ¦¢¾’ª©“—°š ¸ÈŠ©¯–ë–ºŠŒ Ž J¯¨½ Ÿ“’ f ¨½ŒÄ©“š¤ŽçÅ ä–늩¯Ž –ºŠŒóŽç©“¨½Œ Œ ŒÄ±¬–ߐ›š –ºŠŒ
޳––Œ Â¶ –ºŠŒ®–˜”£¦–º’ªŒó©¯ Ž F 댵
±ŸŒî¢¾–Ï–ºŠ©¯– —˜–ZFµÌŒ¬Ž 𠐓–ZF“£Ÿ©“¸ © ’•—»š Œ‘Å ›”¼±Ä©“š —»¨ ©›Á›—»š Œ®–ºŠ©¯–
f ¨½© Œ¬Ž–ºŠŒ –˜”£¦–º’ªŒ
”¨¢ Å
Œ³£³Œ½©“£³Œó–ºŠŒã¶Ÿ”š ±³–˜—î›š¤Ž Â¶ –ºŠŒž’­— ¬£Ÿ©“£KJ turtle –ºŠ©¯–±Ÿ›£¬£³Œ¬Ž ¢ ›šF – –ºŠ¥—˜Ž © F F“—˜–˜—™›š ©¯’
¶Ÿ” 𠱬–˜—î ›š ©¯’•—˜– JµÅ jump £³ŒÄ©¯’•— Œ¬Ž f ·¸òŠ¥—»’§Œ save ©“
š F restore ©“£³ŒÓ¶‘›£ [ ©“šF ] К ›£ FµŒ³£ –
F“£Ÿ©“¸
—§Á›”£ŸŒ
ï¸ÓŒž±´©“š –ºŠŒ³£³Œ˜¶ç›£³ŒÀ”Ž‘Œ –ºŠŒÈ¶‘“’°’§›¸¹—°šÁ󎳖–ŒŸ¨ Œ³š¤–ºŽçÅ
ifm :: forward (2);
ifm :: save ();
ifm :: left (45);
\ ifm :: forward ();
ifm :: restore ();
ifm :: save ();
ifm :: right (45);
ifm :: forward ();
ifm :: restore ();
Œ³£³Œ
Jڐ›” Ž‘ŒÄŒã–ºŠ©¯– ¸ÓŒ ±Ä©“𮢤£³ D̗ FµŒ ©“š —°š¤–Œ™Á«Œ³£â– forward –Œ³’»’•—»šÁ¿—˜–ʍ›¸ ¨
¸ÓŒ ¸ ©“𤖠– ¨  D¥Œò¶‘›£¬¸ ©“£ F HŠŒ FµŒ˜¶Ñ©“”’­–ò–ºŠ©¯–·¸ÓŒ ©¯’­¸ ©J Ž¿”Ž‘ŒIF½ ³Œ˜¶ç›£³Œ —»Ž 1MôÅ
©“š JÀ޳–Œ™¢¾Ž
› ¸ ŠŒ³£³Œ ±Ÿ›¨ Œ³Žß–ºŠŒ ±³ Š©¯’»’ªŒ³šÁ«Œ ¸¹£¬—»–Œ ©½–˜” £¦–º’§ŒßÁ›£Ÿ©¬¢¾Š¥—™±¬Žâ¢¤£³ŸÁÌ£Ÿ©“¨ amazing.C –ºŠ©¯–
¸¹—˜’°’ ‘š Ì± ›”£ Ž‘Ì± ‘޼
š𐓖ºŠŒ³£ ¸Ó›£ F¯Ž ó¸ÓŒ ©“£³Œ ©¯Ž ‘—°šÁ½¶ç›£œ–ºŠŒ ¨ “ŽŸ– ³Œ´©“”–˜— ¶Ÿ”’
£³ŒÄ©¯’•—˜ŽŸ–˜—î±
¸ÈŠ©¯–ŒXD¥ŒŸ£½¢¤—î±³–˜”£³Œ –ºŠ©¯–J ›” ±´©“𠢤£Ÿ F“” ±ÄŒ ”ŽŸ—»šÁ¼–ºŠŒ £³ŒÄ±³”£¦ŽŸ— D¥Œ F“£Ÿ©“¸¹—»šÁ
Ž‘±¬ŠŒŸ¨ Œ ›š –³¢ Â¶ó–ºŠŒ –˜”£¦–º’ªŒ Á›£Ÿ©¬¢¾Š¥—î±³Ž ±Ÿ›¨ ¨½©“šF¯Žó—»š¤–˜£Ÿ F“” ±ÄŒIF Žç ¶Ñ©“£ H–ºŠŒ³£³Œ ©“£³Œ ŽŸ–˜—˜’»’
¨ ›£ŸŒ ±Ä›¨ž¨½©“
š F¯Ž –ºŠ©¯–½©“£³Œ ¨ ›£ŸŒ ›£ ’§Œ¬ŽŸŽ¼±Ä›¨ž¨ ›š Ý ³”–½›” £œ–˜” £¦–º’§Œœ’­— ¬£Ÿ©“£KJ ޳–³¢¾Ž ©¯–
Σ = {F, +, −, [, ], f}M¥Å
×¶ J ›” –ºŠ¥—»š
–ºŠ©¯– Jڐ›” ±Ä©“š ŽŸ”¡ ¬¨ —˜–ß© ±Ÿ£Ÿ©¬¢«¢ J ¢¤£³ŸÁÌ£Ÿ©“¨ ©“
š F ޳–˜—»’»’⌴©“ £¬šœ¶Ä”’»’ ¢ ›—»š¤–ºŽ
Jڐ›” £ŸŒ£¬—§Á“Š«–îÅ ”–ò¸ÓŒž±Ä›”š¤–␛š J ›” £ Ž™¢›£¦–ºŽŸ¨½©“š¤Ž³Š¥—­¢ – Á›— D¥Œ J ›” £ ŸŒ¬Ž³–
Chapter 4
Compound Types
\ \ \
4.1 Structs, or Plain Old Data
™Ž³–˜£¬”
¨ ŒŸ¨½ ³ŒŸ£¦Ž Â¶
”š —™› š
š à”ŽçŒ³£ GFµŒ
FµŒ¬Ž³–˜£¬”¡±¬–›£ÌÅ
±¬– —˜ŽÏ©“šÝ©›ÁÌÁ›£³Œ Á¥©¯–Œ±³’ª©¯Ž³Ž·–ºŠ©¯–Ê©¯Žòš ¿š ›š¤ŽŸ––˜—î±ZF«©¯–î©
– J¦¢ Œ®¢ ›—»š¤–Œ³£½– ¨ Œ³¨ ³Œ³£ š ›š ŽŸ–˜£¬” ±¬– ¿š ›š
HŸ›£ ©“£¬£Ÿ©J Â¶ ŽŸ” ±¬Š – JÑ¢ Œ³ŽNM ›£ £³Œ˜¶‘ŒŸ£³Œ³š ±ŸŒ ©“šF Š©¯Ž
š GŒ F®±Ÿ³¢ J ´©¯Ž³ŽÄ—°Á›š ¨½Œ³š¤–¢ Œ³£Ÿ©¯–›£ë©“šF š ë”Ž‘Œ³£ FµŒ š ŒIF
ŒÄ±¬–˜—î›š ¢©“£Ÿ©›ÁÌ£Ÿ©¬¢¾Š Ӑ¶¿–ºŠŒ ¤–î©“šF«©“£IF H ¤
–î©“šF«©“£IFKM
ÒîËîÍÂֵٟËÂÒ
Ž‘ŒÄ±¬–˜—š øӌ⎟Š›¸ Š›¸
©“£³ŒÓ”Ž‘ŒGFÀ– Á›£³›”¯¢F«©¯–î© ©“šF – ¥ ¦–î©“—°š
Ê̚ Î Œ³Éĸ ÍäÐç– ËÂJÑÊÌ¢ Í Œ³Ê Ž U“¸¹
ɟÍ—˜áñ–ºÊ“Š Б赩¬ÛÜ¢«Øµ¢¾å ’•—î±Ä©¯–˜—™›š ¢ŒŸ±³— ±ã¶Ä”𠱬–˜—™›š ©¯’­—»– JÚÅ ›” ¸¹—»’»’ò©¯’­Ž‘ Ž‘ŒŸŒ Š›¸
±Ä©“š ŠŒ¬’ ¢¼—°š ¨ © ‘—»šÁ š Œ³¸ – JÑ¢ Œ³Ž Œ´©¯Ž J ©“šF —°š¤–˜”—˜–˜— D¥Œ –
”Ž‘Œ‘Å
š½–ºŠ¥—˜Ž
" Ö«ÎÚ΍ʛҝɿæ¹É æÈБدËÏ˝ʞֵҝÉ
ÛñØÝÐßÎÚ͝ʛåÌÍäÐ‘Þ íÛ˜é ÉÌéñí¤Ø ÖÚÞ_ ÉŸÍÒ Ê›ÔÕËÂǵɿÔ×ÊÌÍÂÞ
£
Ÿ
¯
©
˜
–
î
—
›

š
¯
©
’
š
”
½
¨
³
Ÿ
Œ
¦
£
Ž
í æ ǵɟÍÂÉ _ ÊÌËÇ ËÂǵÉàØ ÖÚÞßÉÄÍäÐçËÂÊÌÍ
Бصè½ËÂÇµÉ èµÉ³ØµÊ›ÞßÛÜØÚÐçËÂÊÌÍ ÐÑÍÂÉ ÛÜØ ËÂɟå›ÉŸÍÂÒ³é èµÊôɳÒÓØµÊÌË
n/d
d
ÇÚÐXU“ÉëÐ Ô×ÖÚØµèÚБÞßɳدËäБáË ì Î ÉâÔ×ÊÌÍÈÍäÐçËÂÛñʛnØ Ðçá ØôÖµÞb_ÉŸÍÂÒ³í«ÒÊ¿æ¹ÉãÇÚÐXU“Éã
ËÊ ÛÜÞÀÎÚáÜɳÞßÉŸØ Ë Û²Ëòʛ֫ÍÂÒîɳáVU“ɳҳé
SÝÉßٳʛֵáÜè ʛԹٳʛ֫ÍÂҝÉßÍÂÉÄÎÚ͝ɳҝɳد˿ОÍäÐçËÂÛÜʛØÚБáÃØôÖµÞ_ ɟÍâҝÛÜÞÀÎÚáñì _ôìÝË æ¹Ê U‘БáÜֵɳÒàʛÔïË ìôÎ É
í
int
_ÚÖ«Ë ËÂǵÛÜÒ·æ¹Ê›ÖµáÜè ØµÊÌË_ ÉëÛñØ áñÛÜØµÉâæ ÛñËÇ Ê›ÖµÍ·Î ÉŸÍÂÙ³ÉÄÎÚ˝ÛÜÊ›Ø Ê›Ô ËÇÚÉëÍÂÐçËÂÛÜʛØÚÐ‘á¾ØôÖµÞ_ ɟÍÂÒ ÐçÒ ÐÀèµÛÜÒîËÂÛÜØµÙŸË
Þ®ÐçËÂǵɳޮÐÑËÂÛÜ٬Бá Ù³Ê›ØµÙ³ÉŸÎµË¬é Æ¹ÇÚÉË æ¹Ê Ø ÖÚ
Þ _ ɟ͝Ò
Бصè
N_ ɟáÜʛصåžËÂʛå›ÉŸËÂÇµÉŸÍ «í Бصè ˝ÇÚÛñÒëÛÜÒàБáñҝÊ
n
d
ÍÂÉ QÚɳÙÄËÂɳè ÛñؽޮÐç˝ÇÚɟޮÐçËÂÛÜÙ¬Ðçá¾ØµÊÌËäÐÑËÂÛÜÊ›Ø È˝ÇÚÉ Òîìôb
Þ _Ê›
á Ô×ÊÌÍÓËÂÇµÉ ÒÉŸËÏÊ›Ô ÍäÐçËÂÛñÊ›Ø Ðçá ØôÖµ
Þ _ ɟÍÂÒ ÛÜØµèµÛ Ù¬ÐçËÉ³Ò ËÂÇÚÐçË æ¹É ÐçÍÂÉàèµÉ¬ÐçáÜÛÜØµå æ Û²ËÂÇ Ð Þ®ÐçËÂǵɳޮÐç˝ÛÜ٬БáË ìô΍ÉÌí èµÉ YÚØÚɟè _ ì ÛñËÂ
Ò U‘БáÜÖµÉëÍäÐçØÚå›É
Ûñ˝Ò
š БFØ _ É
Ô×ֵصٟËÂÛÜʛØÚБáÜÛ²Ë ì ^˜ÒîÉ³É " ɳٟËÂÛÜÊ›Ø \ é é `Äé ê˜èµÉ¬ÐçáÜáñì“í æ¹Éëæ¹Ê›ÖµáÜè áñVÛ ]“ÉâËÂÊ®å›ÉŸËÏ
Ð Ë ìôÎ ÉëËÂÇÚÐçË ©“Ù¬
ֵҝɳè áÜVÛ ]“ÉëGÉ P«ÛÜÒî˝ÛÜØµåßÐçÍÂÛñ˝ÇÚÞßÉÄËÂÛÜÙ Ë ìôÎ É³Ò ËÂǵÉëÔ×ʛáÜáÜʦæ ÛÜØµå¿Î ÛñɳٳÉàÊ›Ô Ù³Ê èÚÉ ^»Ô×ÊÌÍÏБèµèÚÛñØÚåË æ¹ÊÀÍÂÐçËÂÛÜʛØÚБá
ØôÖµ
Þ _ ɟÍÂÒ `ïÒîÇÚʦæ ÒÈǵÊÑæ ËÂǵÛÜҹٳʛֵáÜèžáÜÊôÊ ]®áÜÛ ]“ÉÌé
// input
std :: cout < < " Rational number r :\ n";
rational r ;
std :: cin > > r;
std :: cout < < " Rational number s :\ n";
rational s ;
std :: cin > > s;
// computation and output
std :: cout < < " Sum is " < < r + s < < " .\ n" ;
Ê ÉŸÍÂÒßҝÉIU“ÉŸÍäБá ٳʛصٳÉÄÎÚËÒ Ô×ÊÌÍ®èµÉ YÚØµÛÜØµåÝØµÉŸæ Ë ì ΠɳÒL_ Бҝɳè¼Ê›Ø ÉIP«ÛñÒîËÂÛÜØµåÝË ìôÎ ŸÉ Ò³é ê˜Ø¼ËÇÚÛñÒ
ҝɳÙÄËÂÛÜÊ›Ø¤í æ¹ÉòÛÜØ ˝͝ÊôèµÖµÙ³ÉòËÂǵÉòٳʛصٳɟεËïʛÔ
é îÒ ËîÍÂÖµÙŸË ÛÜÒÕֵҝɳèßËÂÊ Ð‘å›åÌÍÂɟå“ÐçËÂÉÈÒÉ U“ŸÉ ÍäÐçá UÌÐçáÜֵɳÒ
–ºŽ Ë ì Î ÌÉ é S¼ÛñËÇ ËÂǵÛÜÒ³í æ¹É Ù¬Ð‘Ø É¬ÐçҝÛÜáñì ß
ʛÔÓèµÛ ÉŸÍÉ³Ø ËÀË ì ΠɳÒÀÛÜØ¯ËÂÊ Ê›ØµÉ U‘БáÜÖµÉóʛÔӎ³Ð –˜£¬Øµ”¡ÉŸ±¬æð
Þ ÊôèµÉ³á¹ËÂǵÉ
Þ ÐçËÂǵɳޮÐÑËÂÛÜ٬БáË ì Î É Ð‘ÒÓÐÀصɟæ Ë ì Î É ÜÛ Ø&àé ·ÉÄÍÂÉ ÛÜÒÓÐ æ¹ÊÌÍ ]¥ÛñØÚåÀεÍÂʛåÌÍÂБÞ
®
YµÍÂÒîËòÒîËÂɟΞËÂÊÑæÈÐÑÍÂèžËÂǵÉÏèÚɟҝÛñÍÂɳè Î Ûñɳ³Ù ÉÏÊ›Ô ³Ù ÊôèµÉãÐ _ ÊU“ÉÌé
// the new type rational
struct rational {
int n;
int d ; // INV : d != 0
};
// POST : return value is the sum of a and b
rational add ( rational a , rational b)
{
rational result ;
result . n = a.n * b .d + a.d * b.n;
result . d = a.d * b .d;
return result ;
}
int main ()
{
// input
std :: cout < < " Rational number r :\ n";
rational r;
std :: cout < < " numerator =?
" ; std :: cin > > r.n ;
std :: cout < < " denominator =? " ; std :: cin > > r.d ;
std :: cout < < " Rational number s :\ n";
rational s;
std :: cout < < " numerator =?
" ; std :: cin > > s.n ;
std :: cout < < " denominator =? " ; std :: cin > > s.d ;
// computation
rational t = add (r , s );
ËÂÇÚÐçËÓޮР]“ÉŸÒ Ð
// Program : userational. C
// Add two rational numbers .
# include < iostream >
\ // output
std :: cout < < " Sum is " < < t.n < < "/" < < t.d < < " .\ n ";
return 0;
}
Program 32: ¢¤£³ÄÁ“Ž ”ŽçŒ³£Ÿ©¯–˜—î›š ©¯’×Å
\ ê˜Ø àí Ð ÒîËîÍÂֵٟ˿èÚÉIY صɳҿРصɟæ Ë ìôÎÉ æ·ÇÚʛÒîÉLUÌБáñÖÚÉßÍäÐçØÚå›É®ÛÜÒë˝ÇÚÉ
ʛÔÃÐ Y P«É³è ØôÖµÞ_ ÉŸÍ Ê›Ô Ë ìôΠɟҳé ê˜Ø½Ê›Ö«Í ٳБҝÉÌíæ¹ÉàèµÉ YÚØµÉ ÐÀصɟæ Ë ìôÎ ÉàØÚБÞßÉŸè ©“£¦–Œ¬ŽŸ— ©“𼢤£³æ· F“Çڔ ʛÒî±¬É –
U‘БáÜÖµÉãÍäÐçØÚå›ÉâÛÜÒòËÂÇµÉ ¹Ðç͝˝ɳҝÛ×Ð‘Ø ÎÚ͝ÊôèµÖµÙŸË
í æ·ÇÚÉÄÍÂÉâæ¹ÉëÛÜØ¯ËÂɟ͝εÍÂÉÄË ÐbU‘Бrational
áÜÖµÉ
БÒòËÂǵÉ
int int
(n, d)
WôÖµÊÌËÂÛñÉ³Ø Ë
é
n/d
" ÛÜØµÙ³É ËÂǵɟÍÂÉÓÛÜÒïØµÊàË ìôÎ É Ô×ÊÌ͹ËÂÇµÉ èµÉ³ØµÊ›ÞßÛÜØÚÐçËÂÊÌÍÕæ ÛñËÂÇßËÂǵÉÓÐçεεÍÂÊÌεÍÂÛ×ÐÑËÂÉU‘БáÜÖµÉ ÍäБصå›É
í
int\{0}
æ¹É Òî΍ɳٳÛÜÔÜìÀ˝ÇÚÉòÍÂXÉ WôÖµÛñ͝ɳÞßÉ³Ø Ë _ôìÀБخÛÜØµÔ×ÊÌÍÂޮБá
í«ÐÏٳʛصèÚÛ²ËÂÛÜÊ›Ø ËÂÇÚÐçË Ç ÐçҋËÂÊëǵʛáÜè
Ô×ÊÌ͋БáÜá¥áÜɟå“Бá¥Ù³Ê›
Þ _ÚÛÜØÚÐçËÂÛÜÊ›ØµÒ Ê›Ô dUÌÐç=áÜÖµ0ɳҳé " ÖµÙäÇßÐ‘Ø ÛñØ U‘ÐçÍ—»Û×Бš دD Ë ©“ÛÜ£¬Ò —™©“ÛÜØµš¤èµ– ÛÜÙ¬Ðç˝ɳè _ôìÐ ٳʛÞßÞßÉ³Ø Ë ÒîËäÐç͝˝ÛÜØµå
æ Û²ËÂÇ
// INV:
ۓ
] É
µÎ ÍÂÉ ÐçØÚèÏΠʛÒîËÂٟʛØÚèµÛñ˝ÛÜÊ›ØµÒÊ›Ô Ô×ֵصٟËÂÛñʛØÚÒ^˜ÒîÉ³É " ɟٟËÂÛÜÊ›Ø é é `´íÑÛñØ U‘ÐçÍÂÛ×БدËÂÒ¤ÐçÍÂÉÃБØãÛÜØµÔ×ÊÌÍÂޮБá
æÈгìâʛÔôèÚÊ Ù³ÖµÞßÉ³Ø ËÛÜØµå¹ËÇÚÉÃεÍÂʛåÌÍäÐ‘Þ ÑËÂǵɟìëÐÑÍÂɋصÊÌË¡ÒîËäБصèÚÐçÍÂèµÛ³ÉŸè¾í‘БصèëÊ›Ö«Í æÈгìãʛÔôæ·ÍÂÛ²ËÂÛÜØµåïËÂǵɳÞ
ÛÜÒÈʛصÉÏΠʛÒîҝVÛ _ÚáÜÉÓÙ³Ê›Ø U“ÉŸØ ËÂÛÜʛؤé
ÆÈǵÉÓË ìôÎ É
ÛÜÒïÍÂɟÔ×ɟ͝ÍÂɳèóËÊ Ð‘ÒòÐ
í ÐçØÚè ÛñË¹Ù¬Ð‘Ø _ ÉÓÖÚÒîɳèóáÜÛV]“ÉÏБدì®ÊÌËÂÇµÉŸÍ¹Ë ìôÎ É rational
³
Ž
˜
–
¬
£
”
³
±
–
Ô×ÊÌÍòIÉ PµÐ‘ÞÀÎÚáÜɑí¥ÛñËòޮЬì ÐÑÎÚ΍ɬÐçÍòБҹÎÐÑÍäБÞßɟËÂÉÄÍÈË ì Î ÉâÐçØÚè ÍÂɟËÂÖ«ÍÂØžË ì Î ÉãÛñ؞Ô×ֵصٟËÂÛÜʛصÒÈáÜVÛ ]“É
é
add
A struct defines a type, not variables.
_ ɳå›ÛñØÚصÛÜØµå«é ƹǵÉãèµÉ YÚØµÛñËÂÛÜʛØ
ÉŸË Ò‹å›ÉÄË ÍÂÛÜèÀÊ›Ô Ê›ØµÉÈΠʛҝҝÛV_ÚáÜÉÈٳʛصÔ×ֵҝÛÜʛØÀÍÂÛñå›Ç ËÕÔÜÍÂÊ›Þ ËÂǵÉ
struct rational {
int n ;
int d ; // INV : d != 0
};
èµÊôɳÒ
èµÉ ÚY ØµÉ ‘U ÐçÍÂÛ×Ð _ áñÉ³Ò Ð‘Øµè
Ê›Ô‹Ë ì Î É
í¡Ð‘áñËÂǵʛֵå›Ç½ËÂÇµÉ Ë æ¹ÊžÞßÛÜèµèµáÜÉëáÜÛñØÚɟÒãáÜÊ Ê ] Üá ÛV]“É
“– èµÉ³ÙŸá×ÐçÍäÐç˝ÛÜÊ›ØµÒ ‘Ð Ò æ¹É n ]¥ØµÊÑæ d˝ÇÚÉŸÞ é Ðçint
U‘ÐçÍÂÛ×Ð _ښ Üá Éà
ËÂǵɟͬí¤Ð‘áñá Ô×ʛ֫ÍãáñÛÜØµÉ³Ò ËÂʛå›ÉŸËÂǵɟÍÏèµÉ YÚØµÉ¿Ð
›Ê Ô
–
¦
J
¢
Œ
ËÂÇµÉ ØÚБÞßÉ
í Ú_ Ö«ËÈÐçË ËÇ ÐÑË Î Ê›ÛÜØ¯Ë¬í صɳ۲ËÂǵɟÍÈÐ U‘ÐçÍÂÛ×Ð _ÚáÜÉ·Ê›Ô¤ËÇ ÐÑËïØµÉŸæ Ë ìô΍ÉÌí¥ØµÊÌÍRUÌÐÑÍÂÛ×Ð _ÚáÜɳÒ
rational
Ê›Ô¡Ë ì Î É
ÇÚÐX“U É 
_ É³É³Ø èµÉ Ú
Y صɳè¤é‹Æ¹ÇµÉÏË æ¹Ê ÞßÛñèÚèµáÜÉ·áÜÛÜØµÉ³Ò
int
int n ;
int d ; // INV : d != 0
ÒîΠɟٳÛÜÔÜì ËÇ ÐÑËïБدìßÐ‘ÙŸËÖ Ðçá ʛԍËÂÇµÉ ØµÉŸæ¼Ë ìôÎ ÉZ^»Û˜é ÉÌé ÐçØ ìÀٟʛØÚÙÄÍÂɟËÂÉ ÍäÐÑËÂÛÜʛØÚÐ‘áµØôÖµÞ_ ɟÍG`îÇÚÐ‘Ò ¥

Ÿ
Œ
¬
±
–
˜^ ÛÜÒ ÍÉŸÎµÍÂɳҝɳدËÂɳèb_ôìa` Ë æ¹ÊÓÊ _ ɳÙÄËÂÒ Ê›ÔÚË ì Î É
ËÂÇÚÐçË Ù³Ð‘Øb_ÉòÐçٳٳɳҝÒîɳè ËÂÇ«ÍÂʛֵå›ÇàËÂÇµÉ¹Ø ÐçÞßÉ³Ò Ð‘Øµè
int
n
ôÒîɳɷËÂǵɷÞßɟÞb_ ÉÄ͋ÐçÙ³Ù³É³ÒÒ _ ɳáÜʦæëé Æ¹ÇµÛÜÒÃÒîÎ É³Ù³Û Y Ù³ÐçËÂÛÜʛ؏ÛÜҋÛÜÞÀ΍ÊÌ͝ËäÐ‘Ø¯Ë ÛÜÔ æ¹ÉÈæÈÐ‘Ø ËÕËÂÊâÛÜÞÀÎÚáÜɟÞßÉ³Ø Ë
d
ÊÌΠɟÍÂÐçËÂÛÜʛصҹʛØóʛ֫ͷصɟæ Ë ì Î ÉâáÜÛ ]“ÉÏÛñØ ËÂǵÉÏÔ×ÖÚØµÙŸËÛÜʛØ
é
add
·ÉŸÍÂÉ·ÛÜҋÐçØ®Ð‘ØÚБáÜʛåÌì Ô×ÊÌ͋˝ÇÚÉòҝÛñËÂÖÚÐç˝ÛÜʛؤé ê˜ÔËÂǵɷֵصÛVU“ɟ͝ҝÛñË ìÐ‘èµÞßÛÜØµÛÜÒî˝ÍäÐÑËÂÛÜʛØëæÈБدËÂÒÕËÂÊâÒîΠɳٳÛñÔÜì
ǵÊÑæ ÐâÒîËÂÖµèµÉ³Ø ËÈÛÜÒÕÍÂɟεÍÂÉ³ÒÉŸØ ËÂɳè ÛÜØ®ËÂǵɳÛñÍ YÚáÜɳҟíôËÂǵɟìßÞßÛÜå›Ç¯Ë‹ÙŸÊ›ÞßÉ Ö«Î æ·ÛñËÂÇßËÂÇ«ÍÂÉ³É ÎÚÛÜɳٟɳҹʛԾèÚÐçËÂÐ
ËÂÇÚÐçˏÐçÍÂÉ ØµÉ³Ù³É³ÒÒÐçÍì žÐ ØÚБÞßɑí‹Ð‘Ø ÛÜèµÉ³Ø ˝VÛ YÚÙ¬ÐçËÂÛÜÊ›Ø Ø ÖÚ
Þ _ ɟͳí Бصè РεÍÂʛåÌÍäÐ‘Þ Ê›Ô Ò™ËÂÖµèµì“é ƹÇÚÛñÒ
èµÉ YÚØµÉ³Ò‹ËÂÇµÉ ™Ë ìôÎÉ ëʛԤÐâÒî˝ÖÚèµÉ³Ø¯ËïБصè БáÜáñÊÑæ·ÒÃÔ×ֵصٟËÂÛñÊ›Ø ÐçáÜÛñË ì ^»ÍÂɳå›ÛÜҙ˝ÍäÐçËÂÛñʛؾí›ÙäÇÚБصå›É ʛԍεÍÂʛåÌÍäÐçÞ
Ê›Ô Ò™ËÂÖµèµì“íµÉŸËÙÌé `àËÂÊ _ ÉÓÍÂɬÐçáÜÛ ³É³è¤í«áÜʛص
å _ ɳÔ×ÊÌÍÂÉâÐ‘Ø ì Òî˝ÖÚèµÉ³Ø¯ËÂÒòБٟËÂÖÚБáÜá²ìßҝǵÊÑæ ֫ξé
*
/K.*C
9 #..$&.*
6,I$
8/
*+BK
BI
M$&
22
A*
6 97@ >#./C%.
"
-B5 7"
+(7.#*
J
\ 4.1.1 Struct definitions.
ê˜Øóå›É³ØµÉŸÍÂБá˜íµÐ Òî˝ÍÂֵٟËòèµÉ YÚØÚÛ²ËÂÛÜÊ›Ø áÜÊôÊ ]ôÒòÐçÒòÔ×ʛáÜáñÊÑæ·Ò³é
éñé²é
struct
G ·ÉŸÍÉÌí ÜÛ ÒâËÂǵÉÀØÚБÞßÉ ›
Ê Ô ËÂǵÉߨÚÉÄæ áñì½ÛÜØ ËîÍÂÊôèµÖµÙ³É³è Òî˝͝ÖÚÙÄË »^ ËÂǵÛÜÒëØÚБÞßɏޏֵÒîË _ É®Ð‘Ø ÜÛ èµÉ³Ø¯ËÂÛVYÚɟͬí
" ɳٟ˝ÛÜÊ›Ø \ é é `ÄíµÐ‘صè ñí é³éŸé¬í ÐÑÍÂÉâØÚБÞßÉ³Ò¹Ê›Ô ÉGP«ÛÜÒî˝ÛÜØµå¿Ë ìô
ΠɳҳéïÆ¹ÇµÉ³ÒÉëÐÑÍÂÉâÙ¬ÐçáÜáÜɳè ËÂǵÉ
”
š FµŒŸ£
›Ê Ô é Æ¹ÇµÉàÛÜèµÉ³Ø ËÂÛ Y ÉÄÍÂÒ í íñé´é³é¬í I ÐçÍÂÉ Ðç͝ÉëËÂǵÉ
F«©¯–¨½Œ³¨½ ŸŒ³£¦Ž
ʛ’ J Ô¡—°ËšÇÚÁ É㖠صJÑɟ¢ æ Œ³Ž Ë ìôÎ É é
ÆÈÇµÉ UÌÐçáÜÖµÉóÍäБصå›É Ê›Ô ÛÜÒ é ÆÈǵÛÜÒ®ÞßɬБصҳíòÐ UÌÐçáÜÖµÉ Ê›ÔÓË ìôÎ É ÛÜҮБØ
...
»ËÂÖ«ÎÚáÜÉ
æ ǵɟÍÂÉ
é
N
(t , t , . . . , t )
P¥ÛÜÒîËÂÛñ1ØÚå 2Ë ìôÎ É³Ò óNÞßÛÜå›Ç Ë _É tiÔ×ֵصè ÐçÞßÉ³Ø ËäÐçá Ë ì Πɳҳí _ Ö«ËëБáÜÒÊ ÖÚÒîɟͺèµÉ YÚØµÉ³è Ë ìôΠɟҳé [ ÊÌÍëÉIP БÞÀÎÚáÜÉÌí“ٳʛصҝÛñèÚÉÄ͋ËÂǵ
É U“ÉŸÙŸËÂÊÌÍïÒîÎ Ð‘ÙŸÉ 3 Ê U“ÉÄÍïËÂǵÉYÚɳáÜè ëé Û U“ɳØÀËÂÇµÉ·Ë ìôÎ É
Ð‘Ò Ð _Ê U“ÉÌí
rational
æ¹ÉÏٳʛֵáÜèóÞßÊôèµÉ³á 3 БҷÔ×ʛáñáÜÊÑæ·Ò³é
struct rational_vector_3 {
rational x;
rational y;
rational z;
};
ñá ËÂǵʛֵå›ÇžÛ²Ë·Ô×ʛáÜáñÊÑæ·ÒÈÔÜ͝ʛÞðËÂǵÉâèµÉ YÚØµÛñËÂÛñʛؾíôáÜɟËòÖÚÒòޮР]“ÉÏÛñËÈÉIP¥ÎÚáÜÛÜٟÛñË ËÂǵÉÏË ìôÎÉ³Ò ñí é³éŸé¬í ØµÉ³É³è½ØÚÊÌË_ ÉàËÂǵÉàÒÂБÞßÉÌé ·ÉÄÍÂÉàÛÜÒÓÐ‘Ø ÉIPµÐçÞÀÎ áñÉ Èê˜Ô
ÛÜÒ ËÂǵÉZU‘БáÜÖµÉëÍäБصå›ÉàÊ›Ô Ë嵂 ÉëË ìôÎ É
í«æ¹ÉÏ٬БØóå›ÉŸË·Ð UÌÐç͝Û×Ð‘Ø Ëòʛԡ˝ÇÚÉÓË ìôÎ É 0, 1, . .æ . Ûñ,˝U
Ç U‘БáÜÖµÉÓÍäБصå›É
unsigned int
int
{−U, −U + 1, . . . , −1, 0, 1, . . . , U − 1, U}
БÒÈÔ×ʛáÜáÜʦæ Ò³é
struct extended_int {
// represents u if n == false and -u otherwise
unsigned int u ; // absolute value
bool
n ; // sign bit
};
Æ ÇÚÉZU‘БáÜÖµÉâÍÂБصå›ÉàÊ›Ô ËÂǵÛÜÒ·Ë ìôÎ ÉàÛñÒ
¹
í } í _ÚÖ«ËÓáÜÛV]“ÉãÛÜØ ËÂǵÉëÍäÐçËÂÛñÊ›Ø Ðçá¡Ù¬ÐçҝÉÌí
{0, 1, . . . , U} { æ¹É·ÛñØ ËÂɟÍîÎÚÍÉŸË U‘БáÜֵɳÒÕèµÛ ÉŸÍÉ³Ø ËÂá²ì Ð
UÌÐçáÜÖµÉ
îÞßɬÐçØÚÒ
ÛÜÔ
Бصè −u ÛÜÔ n = é
(u, n)
u n=
U“ÉŸØ ÛÜÔ Ë æ¹Ê®Òî˝ÍÂֵٟËÓèµÉ YÚØµÛñËÂÛÜʛصÒòÇ ÐXU“ÉàËÂǵÉàÒÂБÞßÉ
^»ËÂǵÉëÎ Ðç͝ËÓÊ›Ô ËÂǵÉ
¨
³
Œ
¨
³
³
Œ
£
™
Ž
¢
Ä
Œ
³
±
—
´
±
¯
©
˜
–
î
—
›

š
èµÉ YÚØµÛñËÂÛÜʛؽɳصٳáÜʛҝɳè ÛÜØ ֵٟ͝áñì _µÍäÐ‘ÙŸÉ³Ò `Äí ˝ÇÚÉÄìÝèµÉ YÚØµÉ
Ë ì Πɳҳí ÐçØÚè Û²ËëÛÜÒãØÚÊÌËãÎ Ê›ÒÒÛ _ áñÉ
“
F
—
³
Œ
Ÿ
£
³
Œ
¤
š
–
ËÂÊ ÍÂɟÎÚá×ÐçÙ³ÉóÊ›ØµÉ Ô×ÊÌÍ®ËÂǵÉóÊÌËÂǵɟͬé ïʛØÚÒîÛÜèµÉŸÍÀËÂǵÛÜÒ ËîÍÂÛVU¥ÛÜБá_ÚÖ«Ë®ÛÜØµÒî˝͝ÖÚÙÄËÂÛVU“ÉóÉIP«Ð‘ÞÀÎÚáÜÉ æ·ÛñËÂÇ Ë æ¹Ê
ÐçεΠÐçÍÂɳدËÂáñì®XÉ W ÖÚБá¤Òî˝ÍÂֵٟËÂÒòèµÉ YÚØÚɟèóÊ U“ÉÄÍ Ð‘ØóɟÞÀÎÚË ì®ÒÉÄË·Ê›Ô GÉ P«ÛÜÒî˝ÛÜØµå¿Ë ìô΍ɳҳé
\ struct S {
};
struct T {
};
void foo ( S s ) {}
int main () {
S s;
T t;
foo ( s ); // ok
foo ( t ); // error : type mismatch
return 0;
}
»ê ˹ÛÜҹБáÜÒîÊëΠʛҝҝÛV_ÚáÜÉòËÂÊ ÖÚÒîÉÓÐç͝ÍäгìßÞßɳÞ_ ɟ͝ҋÛÜØ®Òî˝͝ÖÚÙÄËÂÒ³é [ ÊÌ͹ÉGPµÐ‘ÞÀÎÚáÜÉÌí“ËÂǵÉYÚɳáÜè
ÇÚÐXU“ÉâèµÛÜҝٳֵҝÒîɳè Ð _ ÊU“ÉâٟʛÖÚáñèóБáñ˝ɟÍÂØÚÐçËÂÛVU“ÉŸáñìL_ ÉÏÞßÊôèµÉ³áÜɟè áÜÛ ]“ÉÓ˝ÇÚÛñÒ³é
3
ËÇ ÐÑË æ¹É
struct rational_vector_3 {
rational v [3];
};
4.1.2 Structs and scope
ƹÇÚÉ ÒÙŸÊÌÎ ÉàʛԋÐÀҙ˝ÍÂֵٟËÏÛÜÒ ËÂǵÉëÎ Ðç͝ËÓÊ›Ô ËÂǵÉëεÍÂʛåÌÍäÐ‘Þ ÛÜØ æ·ÇÚÛñÙ´Ç ÛñË Ù³Ð‘Ø _ ÉàÖµÒÉŸè ˜^ ÛÜØ Ð U‘ÐçÍÂÛ×Ð _ áñÉ
èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛؤíÌÊÌÍÃÐçÒÕÐ Ô×ÊÌ͝ޮБá¥Ô×ֵصٟËÂÛÜÊ›Ø Î ÐçÍäБÞßÉŸËÉŸÍ Ë ìôΠɑí¯Ô×ÊÌÍÃÉIP«Ð‘ÞÀÎÚáÜÉ`Äé " ˝ÍÂֵٟ˝Ò_ ŸÉ Ç ÐXU“ɹҝÛÜÞßÛñá×ÐçÍ
ËÂÊ Ô×ֵصٟËÂÛÜʛصÒïǵɟÍÂÉ ËÂÇµÉ ÒÙ³ÊÌ΍ÉÏʛԡÐàÒî˝ÍÂֵٟ˹ÛñÒ ËÂǵÉÏֵصÛÜʛخʛԤËÂǵÉÏÒîÙ³ÊÌΠɳҹʛԡБáÜáÛ²ËÂÒ
í
FµŸŒ ±¬’ש“£Ÿ©¯–˜—™›š¤Ž
æ ǵɟ͝ÉâÐ Òî˝ÍÂֵٟËòèµÉ³Ù³á×ÐÑÍäÐçËÂÛÜÊ›Ø ÇÚБҹËÂǵÉâÔ×ÊÌÍÂÞ
struct
ƹÇÚɋÒî˝ÍÂÖµÙŸË èÚIÉ Y صÛñ˝ÛÜʛØâÛÜÒ ÐòèµÉ³Ù³áÜÐçÍäÐçËÂÛñʛØëБҾæ¹É³áÜá˜í‘БصèàÖÚÒîÖ ÐçáÜáñìÓʛصÉïÐ‘ÙŸËÖ ÐçáÜáñìÓØµÉ³É³èµÒ ËÂǵÉÕèÚÉIY صÛñ˝ÛÜʛØ
ÛÜØãÊÌÍÂèµÉŸÍ¡ËÊòֵҝÉÕÐïÒî˝ÍÂÖµÙŸË¬é ÆÈǵÛÜÒ¤ÛÜҤɬБҙìÏ˝ÊòÉIPôÎÚá×БÛÜØ ÛÜØãÊÌÍÂèµÉŸÍ¡ËÊÈ˝ÍÂБصҝá×ÐçËÂÉ ÐRU‘ÐçÍÂÛ×Ð _ÚáÜÉ èµÉ³ÙŸá×ÐçÍäÐç˝ÛÜʛØ
ʛԫÒî˝͝ÖÚÙÄË Ë ìôÎ ÉÌí‘ÊÌÍ Ð·Ô×ֵصٟËÂÛÜʛØëæ·ÛñËÂÇëÔ×ÊÌÍÂÞ®Ðçá¯Î ÐçÍäÐçÞßɟËÂɟÍÂҾʛԫÒî˝͝ÖÚÙÄË Ë ìôÎ É ÛñØ ËÂÊ Þ®ÐçٴǵÛÜØµÉÃá×Бصå›ÖÚБå›ÉÌí
ËÂǵÉâٟʛÞÀÎ ÛñáÜɟ͹صɳɳèµÒ·ËÂÊ ]¥ØµÊÑæ ËÂǵÉâБÞßÊ›ÖµØ ËÈÊ›Ô ÞßɳÞßÊÌ͝ìß͝XÉ WôÖµÛñÍÂɟè _ôìžÐ‘Ø Ê _ ɳÙÄË·Ê›Ô ËÇÚÉãÒî˝ÍÂֵٟ˳é
‹Ö«Ë ËÂǵÛÜÒòÛÜØµÔ×ÊÌÍÂÞ®ÐçËÂÛÜÊ›Ø ÛÜÒòʛØÚá²ìžÊ _µËäБÛñØ Ð _ áñÉãÔÜÍÂʛÞðËÂǵÉâèµÉ YÚØµÛñËÂÛÜʛØóÊ›Ô ËÇÚÉâÒî˝ÍÂÖµÙŸË Ð‘Ò·áÜʛصåßÐçÒ·ËÂǵÉ
ٳʛÞÀÎÚÛÜáÜÉÄÍÕÇÚБÒÕʛصáñì ÒîÉ³É³Ø ÐãèµÉ³Ù³áÜÐçÍäÐçËÂÛñÊ›Ø Ê›Ô í¯ËÂǵÉòÒî˝ÍÂÖµÙŸË ÛÜҋҝБÛÜèÀËÂÊëÇÚXÐ U“É
é
—°š ±Ÿ›¨¢¾’ªŒ¬–Œà– J¦¢ Œ
4.1.3 Member access
¼Òî˝ÍÂֵٟˋÛÜÒÕÞßÊÌÍÉ¹ËÇ ÐçØ ËÂÇµÉ ¹
Ðç͝ËÂɟҝÛ×БؿÎÚ͝ÊôèµÖµÙŸË‹Ê›ÔÛñËÂÒÃÖÚØµèµÉŸÍÂá²ì¥ÛÜØµåÓË ì ΠɳÒ%# Û²Ë‹Ê ÉŸÍÂҋÒîʛÞßÉ_ БҝÛñÙ
Ô×ֵصٟËÂÛÜʛØÚБáÜÛ²Ë ìœÊ›Ø ÛñËÒ Ê¦æ Ø ÂË ÇÚÐçË®æ¹É ÉIP¥ÎÚá×ÐçÛÜØ صÉIPôË¬é Æ¹ÇµÉ½ÞßʛÒîË®ÛñÞÀÎ ÊÌ͝ËäÐ‘Ø¯Ë ^ºÐçÚØ è БáÜÒîÊ ÞßʛÒîË
U¥ÛñҝVÛ _ÚáÜÉ `ïÔ×ÖµØÚÙÄËÂÛÜʛØÚБáÜÛñË ì®Ê›Ô Ð ™Ò ˝ÍÂÖµÙŸË ÛÜÒÈËÂǵÉàÐ‘Ù³ÙŸÉ³ÒÒ ËÂÊÀËÂǵÉãè ÐÑËäЏÞßɳÞ_ ÉŸÍÒ ^»ËÇÚÉ UÌБñá ÖÚɟÒ
ÛÜØóËÂǵÉ
ti
\ `´í Бصè½ÇµÉŸÍÉàÛÜÒ æ ǵɟÍÂÉë˝ÇÚÉàÛñèÚÉŸØ ËÂÛVYÚÉŸÍÒ íñé´é¬é³í I ٳʛÞßÉëÛñؾé
ê˜Ô
ÛÜÒÈÐ‘Ø ÉIP¥ÎµÍÂɳÒîҝÛÜʛØóÊ›Ô¤Ë ìôÎ É æ ÛñËÂÇU‘БáÜÖµÉ
í¥ËÇÚɟØ
#¼ËÂÇµÉ ˜ËÂÇ ³Ù ʛÞÀÎ Ê›ØµÉ³Ø Ë
(t1 , . . . , tN)
tK
K
›Ê Ô Û²ËÂÒU‘БáÜÖµÉ # Ù³Ð‘Ø _ ÉâБٳٳɟҝҝɳè БÒ
N
»ËÂÖ«ÎÚáÜÉ
t = (t1 , . . . , tN )
é ·ÉŸÍÉÌí
. «ÛÜÒïËÂǵÉ
^˜ÒîɳÉâÆ Ð _ÚáÜÉ ÛñØ ËÂÇµÉ ·ÎµÎ ɳصèµÛ PßÔ×ÊÌÍòÛñËÂÒ¹Òî΍ɳٳÛVYÚÙ³Ò `´é
¨
Ÿ
Œ
½
¨
³
Ÿ
Œ
ž
£
µ
©
Ÿ
±
Ä
±
¬
Œ
³
Ž
®
Ž
³

¢
³
Œ
Ÿ
£
¯
©

–
›

£
ƹÇÚÉòٳʛÞÀΠʛҝ۲ËÂɹÉIP¥ÎµÍÂɳÒîҝÛÜʛØ
Û²ËÂҝɳáÜÔ ÛÜÒ ÐçØßáVUÌÐçáÜÖµÉÌíôÐçØÚèæ¹É ÒÂгì
ÛñҋБØßá UÌБáñÖÚÉòÛÜÔ
ËÂÇÚÐç˹ËÂǵÉÏè ÐÑËäпÞßɟÞb_ ÉÄÍ .ÛÜÒ
é
©µ±Ä±ŸŒ¬ŽŸŽ‘ŒIF ¶ç›£
ÛñØÚÉŸÒ \ Бصè \ Ê›Ô ÍÂʛåÌÍäÐ‘Þ \ ÐçҝҝÛÜ囨 U‘БáÜֵɳҷËÂÊßËÂǵÉâÍÂÐçËÂÛÜʛØÚÐ‘á¾ØôÖµÞ_ ɟÍÂÒ
ËÂÇ«ÍÂʛֵå›Ç ËÂǵÉ
r
ÞßɳÞ_ ÉŸÍ Ð‘Ù³Ù³É³ÒîÒÃÊÌ΍ɟÍäÐçËÂÊÌÍ³í‘æ ǵÛÜáÜɋáÜÛÜØµÉ ɳÞÀÎÚáÜʦì¥Ò ˝ÇÚÉïÞßɟÞb_ ÉÄÍ Ð‘Ù³ÙŸÉ³ÒÒ ÊÌΠɟÍäÐÑËÂÊÌÍ ËÂÊÓʛ֫˝ÎÚÖ«Ë ËÂǵÉ
U‘БáÜÖµÉãʛԡËÂǵÉÏÍäÐÑËÂÛÜʛØÚÐ‘á ØôÖµ
Þ _ ÉŸÍ é Æ¹ÇµÉëБèµèµÛñËÂÛñÊ›Ø Ðçáʛ֫˝ÎÚÖ«Ë·Ê›Ô ÚÛñØÚèµÛÜÙ³ÐçËÂɳÒïËÂÇÚÐç˹æ¹ÉâÛñØ ËÂɟÍîÎÚ͝ɟË
/
ËÂÇµÉ \ ˜ËÂÖ«ÎÚáÜÉ
БÒÈ˝ÇÚÉ WôÖµÊÌËÂtÛñÉ³Ø Ë
é
(n, d)
n/d
4.1.4 Initialization and assignment
SÝÉãÙ¬Ð‘Ø ÛÜØµÛñËÂÛÜБáÜÛ³É·Ê _ É³ÙŸËÒ·Ê›Ô Òî˝͝ÖÚÙÄË·Ë ìôÎ ÉâБصè БҝҝÛñ囨 UÌÐçáÜֵɳÒòËÂʏËÂÇµÉ³Þ í ™ÖµÒîË·áÜÛV]“ÉÓæ¹ÉëèµÊÀÛñËòÔ×ÊÌÍ
Ô×ֵصè ÐçÞßÉ³Ø ËäÐçáË ì Πɳҳé
ê˜ØëáÜÛÜØµÉ Ê›Ô ÍÂʛåÌÍäÐ‘Þ \ Ô×ÊÌÍ ÉGPµÐ‘ÞÀÎÚáÜÉÌí¬ËÂÇµÉ U‘ÐçÍÂÛ×Ð _ÚáÜÉ Ê›Ô Ë ìô΍É
ÛñÒ¾ÛñØÚÛ²ËÂÛ×БáÜÛ³É³è æ Û²ËÂÇ
t
rational
é ê˜Ø®ÐÓÒî˝ÍÂֵٟˬí¯ÛÜØµÛñËÂÛÜБáÜÛ¬ÐÑËÂÛÜʛØëÛÜÒ WôÖµÛñËÂÉÈØÚÐçËÂÖ«ÍäБáñáñìàèµÊ›ØµÉ
ËÂǵ
É U‘БáÜÖµÉÈʛÔËÂǵɷGÉ P¥ÎµÍÂɳҝÒîÛÜʛØ
add (r, s)
Þßɳ
Þ _ ÉŸÍ »æ ÛÜÒîÉÌí ۘé ÉÌé Ô×ÊÌͿɬБÙäǜèÚÐçËäÐóÞßɟb
Þ _ ÉÄÍëҝɟΠÐçÍÂÐçËÂɳáñì“é ·ØµèµÉŸÍàËÂǵɮǵÊôÊ è¾í ˝ÇÚÉßèµÉ³ÙŸá×ÐçÍäÐç˝ÛÜʛØ
ÒîËäÐÑËÂɳÞßɳدË
rational t = add (r , s );
ËÂǵɟÍÂɟÔ×ÊÌÍÂÉ ÇÚÐ‘Ò ËÂÇµÉ É É³ÙŸËóʛÔâÛÜØµÛñËÂÛ×БáñÛ³ÛÜØµå
^»æ·ÛñËÂǼËÂÇµÉ YµÍÂÒî˞ٳʛÞÀÎ Ê›ØµÉ³Ø¯Ë Ê›ÔãËÂÇµÉ U‘БáÜÖµÉ Ê›Ô
` ÐçØÚè
·
^»æ Ûñ˝ÇóËÂǵÉàҝɳٳʛصè t.n
ٳʛÞÀÎ Ê›ØµÉ³Ø Ë `Äé ê˜Ø¯ËÂɟÍÂɳҙËÂÛÜØµå›áñì“íµËÂǵÛÜÒ Ð‘áÜÒîÊÀæ¹ÊÌÍ ]¥Ò æ·ÛñËÂÇ
add (r, s)
" ËîÍÂֵٟËÂÒßËÂǵɟÍÂɳÔ×ÊÌ͝ɽεÍÂÊU¥ÛÜèµÉ Ð æÈЬì ʛÔîԪР]ôÛÜØµå œÐçÍîÍäгì ÛÜØµÛñËÂÛ×БáñÛ¬ÐçËÂÛñʛ؜Бصè
Ðç͝ÍÂЬì Þßɟb
Þ _ ÉÄÍÂÒ³é t.d
БҝÒîÛÜ囨µÞßÉ³Ø Ë _ôì æòÍäÐçεÎÚÛÜØµå ËÂǵɏÐç͝Íäгì½ÛÜØ ˝ʞЮÒî˝ÍÂÖµÙŸË³é ·ÉŸÍÉ ÛÜÒãБØÝÉIP«Ð‘ÞÀÎÚáÜÉàËÂʞÒîÇÚÊ¦æ æ ÇÚÐçËÓæ¹É
ÞßɬБؤé
# include < iostream >
struct point {
double coord [2];
};
int main ()
{
point p;
p . coord [0] = 1;
p . coord [1] = 2;
point q = p;
std :: cout < < q. coord [0] < < " "
// 1
\ < < q. coord [1] < < "\n" ;
// 2
return 0;
}
Æ ÇÚÛñÒÏæ¹ÊÌÍ ]ôÒãÒîÛÜØµÙ³É¿ËÇÚÉ¿èÚÐçËäÐßÞßɳÞ_ ɟÍÂÒ Ê›Ô Ð ÒîËîÍÂֵٟËâÊ _ ɳٟËãÊôٳֵٟΠì½Ð ٳʛدËÂÛÜå›ÖµÊ›ÖµÒ ÎÐÑ͝ËâʛÔÃËÂǵÉ
¹
ޮБÛÜØ®ÞßɳÞßÊÌÍîì“í¥Ð‘صèóҝÛñØÚÙŸÉ ^˜Ûñ؞ٳʛد˝ÍäБÒî˹ËÂÊ Ðç͝Íäгì®Ë ìôÎ ÉŸÒ `¹Ò™ËÍÂֵٟËÈË ì ΠɳÒN]¥ØµÊ¦æ ËÂǵɳÛñÍòÞßɳÞßÊÌ͝ì
ÍÂXÉ W ÖµÛñÍÂɳÞßɳدËÂÒ³é [ ÍÂÊ›Þ ËÂǵÛÜÒ³í«ËÂǵÉãٳʛÞÀÎÚÛÜáÜɟÍÈÙ¬Ð‘Ø YÚå›Ö«ÍÂÉãʛֵËòǵÊÑæ ޮБدì®ÞßɳÞßÊÌ͝ì®Ù³É³áñáÜÒ·ÐÑÍÂÉãËÂÊ _ É
Ù³ÊÌÎÚÛÜɳèžÔ×ÊÌÍòËÂǵÉÏÛÜØµÛñËÂÛ×ÐçáÜÛ ¬Ðç˝ÛÜʛØÀÊ›Ô ÛÜØ
é
q
point q = p
ê˜Ø ËÂÇµÉ ÒÂБÞßÉàæÈгì ^˜Þßɳ
Þ _ ɟ͝æ·ÛÜҝÉâÛñØÚÛ²ËÂÛ×БáÜÛ ¬ÐçËÂÛÜÊ›Ø `Äí«ËÂÇµÉ Ô×ÊÌÍÂޮБá Î ÐçÍÂБÞßɟËÂÉŸÍÒ Ð‘Øµè
ʛÔÕËÂǵÉ
a
b
Ô×ֵصٟËÂÛÜʛØ
ÐçÍÂÉÀÛÜØµÛñ˝Û×БáÜÛ ŸÉ³è½ÔÜÍÊ›Þ ËÂÇµÉ UÌÐçáÜֵɳÒëÊ›Ô Ð‘Øµè ËÂÇµÉ U‘БáÜÖµÉÀʛÔ
Ûñ˝ҝɳáÜÔ
add
r
s
add (r, s)
БáÜÒîÊëÍÂɳҝֵáñËÂҋÔÜÍÂÊ›Þ Ð‘Ø ÛÜØµÛñËÂÛ×БáñÛ ¬ÐçËÂÛñʛؿʛԾР^°ËÂɳÞÀÎ ÊÌÍäÐÑ͝aì ` Ê _ ɳٟˋæ ǵɳØßËÂǵÉ
ÒîËäÐç˝ɳÞßÉ³Ø Ë Ê›Ô
return
ËÂǵÉÏÔ×ÖÚØµÙŸËÛÜʛØ
ÛÜÒ¹IÉ P¥É³Ù³Ö«ËÂɳè¤é
add
ê˜ØµÒîËÂɬБèàÊ›Ô ËÂǵɋР_Ê U“ÉÕèÚɟٳá×ÐçÍäÐÑËÂÛÜʛØÏÒîËäÐçËÂɟÞßÉ³Ø Ë¤ËÂÇÚÐçË¡ÛÜØµÛñËÂÛ×ÐçáÜÛ ³É³Ò æ¹É‹Ù³Ê›ÖµáÜèëБáÜҝÊÈÇÚKÐ U“ÉÕæ·ÍÂÛñËîËÂɳØ
t
rational t ;
t = add ( r , s );
·ÉŸÍÉÌí
ÜÛ Ò
YµÍÂÒîˬíÚБصèžËÇÚÛñÒòèµÉ³ÔªÐ‘ÖµáñË ºÛÜØµÛñËÂÛÜБáÜ۳ɟÒÕËÂǵÉÏè ÐÑËäпÞßɟÞb_ ÉÄÍÂÒ³é ê˜Øóʛ֫Í
µ
F
˜
Œ
ç
¶
“
©
”
²
’
–
»
—
š
˜
—
˜
–
—
¯
©
­
’
—
I
Œ
F
٬БÒîÉÌí‹ËÂǵɟì ÐçÍÉ Ê›ÔÈË ì Î É
¹Ô×ÊÌ͏Ô×ÖÚØµèÚБÞßɳدËäБá‹Ë ì ΠɳҳíÕèÚɟԪБֵáñ˺ÛñØÚÛ²ËÂÛ×БáÜÛ¬ÐçËÂÛÜʛؽèµÊôɳҿصÊÌËÂǵÛÜØµå«í
ÒÊ ËÂÇµÉ UÌÐçáÜֵɳÒßʛÔÏ˝ÇÚÉ èÚÐçint
ËÂÐÝÞßɳÞb_ÉŸÍÂÒÀÐÑÍÂÉ ÖµØÚèµÉ YÚØµÉ³è БÔÜËÂÉŸÍ èµÉ³ÔªÐ‘ÖµáñË ºÛÜØµÛñËÂÛÜБáÜÛ¬ÐÑËÂÛÜÊ›Ø ^˜ÒÉ³É БáñҝÊ
" ɳٟ˝ÛÜÊ›Ø \ é é `Äé ê˜Ø ËÂÇµÉ ØµÉIP¥Ë áÜÛÜØµÉÌí¹ËÂÇµÉ UÌÐçáÜÖµÉ Ê›Ô
ÛÜÒ Ð‘ÒÒÛÜ囨µÉ³è ËÂÊ í Бصè ˝ÇÚÛñÒ
add (r, s)
t
БҝÒîÛÜ囨µÞßÉ³Ø ËÈБå“ÐçÛÜØžÇÚÐçεΠɳصÒÈÞßɳÞ_ ɟͻæ ÛÜҝɑé
t
[ ÊÌÍÀÉ U“ɟ͝ì Ô×ֵصèÚБÞßÉ³Ø ËÂБáòË ìôÎÉ íÃË æ¹Ê ÉIPôεÍÂɳҝҝÛñʛØÚÒßÊ›Ô Ë ìô΍É
¬Ù Ð‘Ø _ ÉßËÂɳҙËÂɳè Ô×ÊÌÍÉ WôÖÚБáÜÛñË ì“í ֵҝÛñØÚåó˝ÇÚÉßÊÌ΍ɟÍäÐçËÂÊÌ͝Ò
Бصè
é ê»Ëàæ¹Ê›ÖµáÜè ËÂǵɟÍÂɟÔ×ÊÌÍÂɮҝɳɳÞ
==
!=
ØÚÐçËÂÖ«ÍäБá ËÊ ÇÚÐXU“É®ËÂÇµÉ³ÒÉ®Ë æ¹Ê ÊÌΠɟÍÂÐçËÂÊÌÍÂÒ Ð‘áñҝʽÔ×ÊÌÍ¿ÒîËîÍÂֵٟËÂÒ³íÕÛÜÞÀÎÚáÜɳÞßɳدËÂɳèÝÛÜØ ҝֵÙäÇ ÐóæÈЬì ËÇ ÐÑË
ËÂǵɟì ٳʛÞÀÎ ÐçÍÂÉÓÞßɳÞ_ ÉŸÍ ˜æ ÛñҝÉÌé
[ ÊÌÍÂޮБáÜáñì“í“ËÂǵÛÜÒ æ¹Ê›ÖµáÜè_ ÉÓÙ³ÊÌ͝ÍÂɟٟËÃÛÜÔ
ÐçØÚè
í¥ËÂÇµÉ³Ø æ¹ÉãÇÚÐXU“É
t = (t1 , . . . , tN)
t = (t1 , . . . tN )
ÛñÔ Ð‘Øµèóʛصáñì®ÛñÔ
Ô×ÊÌÍ
é
t=t
tK = t K
N
‹Ö«ËžÊ›Ö«Í®Ë ìôÎ É rational
Бáñ͝ɬKБè«=ì 1,ҝǵ. ʦ. æ . ,Ò®
ËÂÇÚÐçË®ËÂǵÛÜÒßæ¹Ê›Ø Ëßæ¹ÊÌÍ ] ֵصèµÉŸÍžÞßɟÞb_ ÉÄ͘æ·ÛÜҝÉ
XÉ W Ö ÐçáÜÛñË ì“í æ¹É æ¹Ê›ÖµáÜè ɟÍîÍÂʛصɳʛֵҝáñì ٳʛصٳáÜÖµèµÉ ËÂÇÚÐçË
é Æ¹ÇÚɽÎÚÍÊ _ áñÉ³Þ ÛñÒ ËÂÇÚÐçË ËÂǵÉ
2/3 = 4/6
ʛÔëËÂÇµÉ½Ë ìô΍É
èµÊôɳÒóصÊÌ˞ٳʛÛÜØµÙ³ÛÜèµÉ½æ·ÛñËÂÇ ËÇÚÉ
Ž J¯š¤–±¬–˜—î±´©¯’ Dô©¯’•” Œœ£Ÿ©“šÁ«Œ ÛÜØó
int int
æ·ÇµÛÜÙäÇóæ¹ÉâÛÜèµÉ³Ø¯ËÂÛÜÔÜì ÎÐçÛñrational
ÍÂÒ
ËÂÇÚÐçË·èÚIÉ Y صÉÏËÂǵÉëÒÂБÞßÉÏÍäÐçËÂÛÜʛØÚБá
(n, d)
ØôޑֵŒ³¨ Þ ©“_ š¤ÉŸÍ –˜—î±´©¯’ Dôé ©¯’•” Œ£Ÿ©“šÁ«Œ
n/d
ÆÈǵÉïÒÂÐçÞßɋÇÚÐçεΠɳصҡæ·ÛñËÂÇàÊ›Ö«Í Ë ìô΍É
ÔÜÍÂÊ›Þ Ð _ Ê U“É ҝÛñØÚÙŸÉ _ ÊÌËÂÇëΠБÛñ͝Ò
Бصè
ÐçÍÂÉ¿ÛÜØ ˝ɟ͝εÍÂɟËÂɟè Ð‘Ò í¡Þßextended_int
ɟb
Þ _ ÉÄÍ ˜æ·ÛÜҝÉàXÉ W Ö ÐçáÜÛñË ì æ¹Ê›ÖµáÜè å›VÛ U“É¿ÖµÒ (0,ÛÜØ ËÂǵÛÜ)Ò
0
0=0
٬БÒîÉÌé (0, )
صáñìœËÂǵÉóÛÜÞÀÎÚáÜɳÞßɳدËÂÊÌÍ Ê›ÔÏÐ Òî˝͝ÖÚÙÄË ]¥ØµÊÑæ·Ò ËÂÇµÉ ÒÉ³Þ®ÐçØ ËÂÛÜٳБ
á U‘БáÜֵɞÍÂБصå›ÉÌíÈБصè¼Ô×ÊÌÍß˝ÇÚÛñÒ
ÍÂɬÐçÒÊ›Ø¤í ØµÉ³Ûñ˝ÇÚÉÄÍëεÍÂÊ UôÛÜèµÉ³ÒëXÉ W ÖÚБáÜÛñË ì½ÊÌΠɟÍäÐç˝ÊÌÍÂÒâÔ×ÊÌÍ ÒîËîÍÂֵٟËÂÒ³í ØµÊÌÍ Ð‘Ø¯ìÝÊÌËÂÇµÉŸÍ ÊÌ΍ɟÍäÐçËÂÛñʛØÚÒ
_ ɟì“ʛصè ËÂǵɿÞßɟb
Þ _ ÉÄÍÓБٳٳɟҝҳí¤ÛÜØµÛñËÂÛ×ÐçáÜÛ ¬Ðç˝ÛÜʛؤíµÐ‘صèÝБҝÒîÛÜ囨µÞßÉ³Ø Ë èµÛÜÒîٳֵҝҝɳè Ð _ Ê U“ÉÌé ΠɟÍäÐç˝ÛÜʛصÒ
ËÂÇÚÐçËë͝ɳÒîΠɳÙÄËàËÂǵÉÀҝɳޮБدËÂÛÜÙ¬Ðç
á U‘БáÜÖµÉÀÍäБصå›ÉÀÙ³Ð‘Ø _ ÉÀεÍÂÊ UôÛÜèµÉ³è _ôìÝ˝ÇÚÉ ÛÜÞÀÎÚáÜɳÞßɳدËÂÊÌͬí ËÂǵʛֵå›Ç¾í
ҝɳÉãØµIÉ P¥Ëòҝɳٟ˝ÛÜʛؤé
What about other operations?
\ ʛÖàÞßÛÜå›Ç Ë ÐçÍÂå›ÖµÉ‹ËÂÇÚÐçË É U“ɳؿÞßɳÞ_ ɟͻæ ÛÜÒÉ ÛÜØµÛñ˝Û×БáÜÛ³ÐçËÂÛÜʛØÓБصè¿Ð‘ҝÒîÛÜ囨µÞßÉ³Ø Ë¡Ù³Ê›ÖµáÜèZ_ É ÛñØÚÙŸÊ›Ø ÒÛÜҙËÂÉ³Ø Ëïæ·ÛñËÂÇ®ËÂÇµÉ ÒÉ³Þ®Ð‘Ø¯ËÂÛÜÙ³ÒïʛԤËÂÇµÉ Ë ìôΠɑé ÐçËÂɟͳíôæ¹É æ ÛÜáÜá ÛÜØµèµÉ³É³è É³ØµÙ³Ê›ÖµØ ËÂɟÍÈҝֵÙäÇóÐàҝ۲ËÂÖÚÐçËÂÛÜʛؤí
Ð‘Øµèžæ¹ÉÓæ ÛÜáñáÒÇµÊÑæ ǵʦæ Û²ËòÙ³Ð‘Ø _ ÉÏèµÉ¬Ð‘áñ˹æ Û²ËÂǞɳáñɳå“Ð‘Ø ˝áñì“é
4.1.5 User-defined operators
O ɟæ Ë ì Î É³Ò ÍÂÉ WôÖµÛñÍÂÉ ØµÉŸæ ÊÌ΍ɟÍäÐçËÂÛñʛØÚҟí Ú
_ Ö«Ë æ µ
Ç É³Ø ÛñËïٳʛÞßÉŸÒ ÂË ÊëËÂÇµÉ ØÚБÞßÛÜØµåëʛԤҝֵÙäǞÊÌÎ ŸÉ ÍÂÐçËÂÛÜʛصҳí
í¾æ¹É
ʛصɏáñɳҝÒâØµÛÜÙŸÉ Ð‘Ò™Î É³ÙŸËãÊ›Ô ÍÂʛåÌÍäÐ‘Þ \ îÒ ÇÚʦæ ÒÏÜÛ ØÝáñÛÜØµÉ é Õì èµÉ YÚØÚÛñØÚå®ËÂǵɿÔ×ÖÚØµÙŸËÛÜʛØ
add
æ¹ÉŸÍÂÉâÐ _ÚáÜÉ ËÂʏ΍ɟÍÂÔ×ÊÌÍÂÞ ËÂǵÉãÊÌ΍ɟÍäÐçËÂÛñʛØ
ËÂÇ«ÍÂʛֵå›Ç ËÂǵã
É ÒîËäÐçËÂɟÞßÉ³Ø Ë
t := r + s
rational t = add (r , s );
ê˜èµÉ¬Ð‘áÜá²ì“í ǵʦæ¹É U“ÉŸÍ¬í«æ¹É æ¹Ê›ÖµáÜè®áÜÛV]“ɷ˝ʏÐçèÚè®ÍäÐç˝ÛÜʛØÚÐ‘áØ ÖÚÞ_ ɟ͝ÒïáÜÛV]“É·æ¹ÉÏБèµè ÛÜØ ËÂɟå›ÉŸÍÂÒïÊÌÍRQÚʓÐçËÂÛÜØµå ΠʛÛÜØ¯ËÈØôÖµÞb_ÉŸÍÂÒ³í_ ì ÒîÛÜÞÀÎÚáñìÀæ·ÍÛñËÂÛÜØµå ^˜ÛÜØžÊ›ÖµÍò٬БÒîÉ`
rational t = r + s ;
Æ ÇÚÉ
_ É³ØµÉ YµË¹Ê›Ô¾ËÂǵÛÜÒ¹ÞßÛÜå›Ç ËïØµÊÌË _ ÉÓÛÜÞßÞßɳèµÛ×ÐÑËÂɳáñì Ê _ U¥ÛÜʛֵҳí«ÛÜØ®Î Ðç͝ËÂÛñÙ³Öµá×ÐçÍïҝÛñØÚٟÉÏËÂǵÉÓØÚБÞßÛÜØµåàʛÔ
¹
ËÂǵÉÏÔ×ÖÚØµÙŸËÛÜʛØ
ҝɳɟÞßÒ¹ËÊ _ É WôµÖ ÛñËÂÉÓÍÂɬÐçҝʛØÚÐ _ÚáÜÉ Ú_ ֫˷ٳʛصҝÛñèÚÉÄÍòËÂǵÉÏÉIP¥ÎµÍÂɟҝҝÛÜʛØ
add
rational t = subtract ( multiply (p , q ) , multiply (r , s ));
БصèóÛñ˝ÒîØÚÐç˝ֵÍÂБá Ù³Ê›ÖµØ ËÂÉÄ͝ΠÐç͝Ë
rational t = p * q - r * s;
ËÂʏå›ÉŸË ÐçØóÛÜèµÉ¬Ðëæ ÇÚÐç˹æ¹ÉÏÞßɬБؤé
ÆÈǵÉëØÚÐç˝ֵÍÂÐ‘á¡ØµÊÌËäÐÑËÂÛÜʛØóÙ¬ÐçØ ÛñØÚèµÉ³ÉŸè _ ÉëБÙäǵÛÜÉ U“ÉŸè ÈÐ]“ÉŸì Ô×ɬÐç˝ֵ͝ÉëÊ›Ô ËÂÇµÉ á×Бصå›ÖÚБå›ÉÏÛÜÒ
ËÂÇÚÐçË ÞßʛÒîË Ê›Ô«Û²ËÂÒ ÊÌΠɟÍÂÐçËÂÊÌÍÂÒ ^˜ÒÉ³ÉïÆ Ð _ÚáÜÉ ÛÜØë˝ÇÚÉ ·ÎµÎ ɳصèµÛ PâÔ×ÊÌÍ ËÂÇµÉ Ô×ÖµáÜá¯áÜÛÜÒîËG`¤Ù¬Ð‘ØZ_ É
D¥Œ³Ë£¦Ê ’ª]“‘ɳ© Ø FµËŒIÊF
ËÂÊ æ¹ÊÌÍ ]®Ô×ÊÌÍÈÊÌËÂÇµÉŸÍ¹Ë ìôΠɳÒÈБÒïæ¹É³áñá˜éÃÆÈǵÛÜÒïÞßɬÐçØÚÒ ËÇ ÐÑËïæ¹ÉÏٳБ؞ֵҝÉÓËÂǵÉÓÒÂБÞßÉ ÊÌΠɟÍÂÐçËÂÊ̐ Íï
ÛÜÞÀÎÚáÜɳÞßÉŸØ Ë U‘ÐçÍÂÛñʛÖÚÒÈÊÌΠɟÍÂÐçËÂÊÌÍÂÒ æ¹
É îÊ U“ÉÄÍÂáÜʓБ
è ËÇÚÉÓËÂÊ ]“ɳؤé
ê˜Ø¼ÎµÍÂÛñØÚٟÛñÎÚáÜÉÌí‹ËÂǵÛÜÒ ÛÜÒÀصÊÌËÂǵÛÜØµåÝØµÉŸæ æ¹É Бáñ͝ɬБè«
ì ]ôصÊÑæ ËÇ ÐÑËÀËÂÇµÉ _ÚÛÜØÚÐç͝ìœÊÌΠɟÍäÐç˝ÊÌÍ
ÛÜÒ
+
XÐ UÌÐçÛÜá×Ð _ÚáÜÉÈÔ×ÊÌÍïÒÉ U“ÉÄÍäБáË ìô΍ɳҳíôÔ×ÊÌ͹GÉ PµÐ‘ÞÀÎÚáÜÉ
Бصè
é S¼ÇÚÐçËïÛñҋصɟæ ÛÜҋËÂÇÚÐçËÕæ¹É ٬БخБèµè
É U“É³Ø ÞßÊÌÍÂÉÊ U“ɟ͝áÜʓБèµÒëÊ›Ø Ê›Ö«ÍàÊÑæ·Ø¤í Бصè int
ҝÛÜÞÀÎÚáñì áÜɟdouble
ËãËÂǵÉÀٳʛÞÀÎÚÛÜáÜÉÄÍ YÚå›Ö«ÍÂÉÀʛ֫ËëÔÜÍÊ›Þ ËÂǵÉß٬БáÜá
Î ÐçÍäБÞßÉÄËÂɟÍïË ìôΠɟÒòæ ǵÛÜÙäÇ Ê›ØÚÉÏÛÜÒÈØµÉ³É³èµÉ³è ÛÜØžÐ¿Ù³ÉÄ͝ËäБÛÜØžÙ³Ê›Ø ËÂGÉ P¥Ë¬é
ê˜Ø Ê U“ÉŸÍÂáÜʓÐçèÚÛñØÚå Ð‘Ø ÊÌΠɟÍäÐÑËÂÊÌÍ¬í¹æ¹É½Ù¬ÐçØÚصÊÌË®ÙäÇÚБصå›É ˝ÇÚÉ ÊÌÎ ÉÄÍäÐçËÂÊÌ!Í Ò®ÐçÍÂÛñË ì“í¹ÎµÍÂɳٳɳèµÉ³ØµÙ³É½ÊÌÍ
БҝÒîÊôÙ³Û×ÐÑËÂVÛ U¥Û²Ë ì“í _ Ö«Ë æ¹É¹Ù¬Ð‘ØÀÙÄÍÂɬÐçËÂÉ U“ÉŸÍÂÒîÛÜʛصÒÃÊ›Ô ÛñË æ ÛñËÇ ÐçÍ _ ۲˝ÍäÐç͝ìëÔ×ÊÌÍÂޮБáôÎ ÐçÍäÐçÞßɟËÂɟÍÃБصè¿ÍÂɟËÂÖ«ÍÂØ
Ë ìôΠɟҳé
΍ɟÍäÐçËÂÊÌÍÈÊ U“ÉŸÍÂáÜʓÐçèÚÛñØÚåàÛñÒïҝÛÜÞÀÎÚáñì ÐëÒîΠɳٳÛÜБáÙ¬Ð‘ÒîÉÏʛÔ
é [ ÊÌ͹IÉ P«Ð‘ÞÀÎÚáÜÉÌí
Ÿ
¶
”
š
¬
±
˜
–
î
—
›

¼
š

¥
D
³
Œ
¦
£
ª
’
‘

©
“
F
°
—

š
Á
ÇÚXÐ U¥ÛÜØµåâËÂÇµÉ Ò™ËÍÂֵٟËÂÒ
Бصè
XÐ U‘БÛÜá×Ð _ áñÉÌí›æ¹É ٳʛֵáÜèßèµÉ³Ù³á×ÐÑÍÂÉ·ËÂÇµÉ Ô×ʛáÜáñÊÑæ·ÛÜØµå
rational
extended_int
Ë æ¹Ê Ô×ֵصٟËÂÛñʛØÚÒ ÛñؽËÂÇµÉ ÒÂБÞßÉëεÍÂʛåÌÍäÐçÞ í æ Û²ËÂÇµÊ›ÖµË ÙŸÍÂɬÐç˝ÛÜØµå ÐߨÚБÞßÉàÙ³áÜÐ‘ÒÇ Ô×ÊÌÍâÐ‘Ø ì Ù¬ÐçáÜá ËÂÊ®ËÂǵÉ
Ô×ֵصٟËÂÛÜʛØ
ÛÜØ ˝ÇÚÉ ÎµÍÂʛåÌÍÂÐ‘Þ í ËÂÇµÉ Ù³Ê›ÞÀÎÚÛÜáñÉŸÍ Ù¬ÐçØ YÚØµè ʛ֫˹ÔÜÍÂÊ›Þ ËÂǵÉÓ٬БáñáÎ ÐçÍäБÞßÉŸËÉŸÍ Ë ìôÎ É
square
æ ǵÛÜÙäÇ Ê›Ô ËÂǵÉÏË æ¹ÊÔ×ÖÚØµÙŸËÛÜʛصҹæ¹ÉãÞßɬБؤé
// POST : returns a * a
rational square ( rational a );
// POST : returns a * a
extended_int square ( extended_int a );
\
[ ÖÚØµÙŸËÛÜʛؽÊU“ÉŸÍÂáñʓБèµÛÜØµåßÛÜØ å›É³ØµÉŸÍäБá ÜÛ Ò µ
Ö ÒÉŸÔ×ÖÚá»í _ÚÖ«ËÓØµÊÌËÓØµÉ¬ÐçÍÂáñì Ð‘Ò ÖµÒÉ³Ô×ÖµáÃÐ‘Ò ÊÌΠɟÍäÐÑËÂÊÌÍÓÊ U“ÉÄÍ
áÜʓБèµÛÜØµå«é Æ Ê èµÉ ÚY ØµÉ½Ð‘Ø Ê“U ɟÍÂáÜʓБèµÉ³è ÊÌΠɟäÍ ÐÑËÂÊÌͬíòæ¹É ÇÚÐXU“É ËÂÊ ÖµÒÉ½ËÇÚÉ
éÕê˜Ø®ËÂǵÛÜÒïØµÊÌËäÐçËÂÛÜʛؤí“ËÂǵÉÓØ ÐçÞßÉ Ê›Ô ËÂǵÉÏÊÌ΍ɟÍäÐçËÂÊÌÍ ÛÜÒ¹Ê Ú_ ËÂБÛÜØµÉ³è ô_ 쮶ĔÐÑÎښ ΍±¬É³–˜—™Øµ›èښ ÛñØÚ©¯’À
åàÛ²³Ë¢ Ò Œ³Ë£ŸÊ ©¯]“–É³›Ø £
Ëš Êߐ“–îË©¯Çµ–˜Éë—εš ÍÂÉ Y P
éÏê˜Ø½Ù¬ÐçÒÉ Ê›ÔÃËÂǵÉZÚ_ ÛÜØÚÐç͝ì БèµèÚÛ²ËÂÛÜʛØóÊÌÎ ÉÄÍäÐçËÂÊÌÍÓÔ×ÊÌÍ ËÂǵÉàË ìôÎ É
í
operator
rational
ËÂǵÛÜÒ¹áÜÊ Ê ¥] ÒòБÒòÔ×ʛáñáÜÊÑæ·ÒÈБصè ÍÂɟÎÚá×ÐçٳɳÒò˝ÇÚÉÏÔ×ֵصٟËÂÛÜʛØ
é
add
// POST : return value is the sum of a and b
rational operator + ( rational a , rational b)
{
rational result ;
result .n = a .n * b.d + a.d * b. n;
result .d = a .d * b.d ;
return result ;
}
ê˜Ø ÍÂʛåÌÍäÐ‘Þ \ í«æ¹ÉÏ٬БØóصʦæ ͝ɟÎÚá×БٳÉÏáÜÛÜØµÉ _ ì
rational t = r + s ; // equivalent to rational t = operator + ( r , s );
·ÉŸÍÉÌí¾ËÇÚɿٳʛÞßÞßÉ³Ø¯Ë ÍÂɳÔ×ɟ͝ÒâËÂÊ®ËÂÇµÉ ÔªÐ‘ÙŸËÏËÂÇÚÐçËãБØÝÊÌ΍ɟÍäÐçËÂÊÌÍÏÙ¬ÐçØ Ð‘áÜÒÊ _ É
ÛÜØ Ô×ֵصٟËÂÛÜʛØÚБá
µØ ÊÌËäÐçËÂÛñÊ›Ø ÛñØ Ù³Ê›Ø¯ËÍäБÒî˳í·ÛñË ÐçεΠɬÐÑÍÂÒ®ÛÜØ
ÛñØ
é Æ¹ÇµÉ±Ä©¯Ù³’»’ªÐ‘ŒIáÜF á ÛÜØ Ô×ÖÚØµÙŸËÛÜʛØÚБá
–˜—™Ûñ›Ë š ɳÞÀÎÚÇ rÐçҝ+۳ɳsÒ¾ËÂǵÉïÔªÐ‘ÙŸË ËÂÇÚÐçË Ð‘Ø ÊÌΠɟÍäÐç˝ÊÌÍ
صÊÌËäÐçËÂÛñʛØàÙ¬Ð‘Ø _ ÉïֵҝɳÔ×Öµá¥Ô×ÊÌÍ èµÛÜèÚБٟ˝ÛÜÙÕÎÚ֫͝Η°š ʛҝɟ ҳ훚 ҝ“ÛÜØµ–îÙ³©¯Éï
ÛÜÒÈҝÛÜÞÀÎÚáñì Ð ÒîΠɳٟÛ×Бá¾Ô×ÖÚØµÙŸËÛÜÊ›Ø ÚÛñØ Ð‘Ø ÐçεÎÚáÜÛÜÙ³ÐçËÂÛÜʛؤíôǵʦæ¹É U“ɟͬíÚËÂǵÉãΠʛÛñØ ËÈÛÜÒ¹ËÂÊßÐXU“Ê›ÛÜèóÔ×ֵصٟËÂÛÜʛØÚБá
صÊÌËäÐçËÂÛñʛ؞БصèóֵҝÉÓËÂǵÉâÛñaØ Y P صÊÌËäÐç˝ÛÜʛؤé
ÆÈǵÉàÊÌËÂǵɟͷËÂÇ«ÍÂÉ³É _ БҝÛñÙàÐçÍÂÛñ˝ÇÚÞßÉÄËÂÛÜÙÓÊÌΠɟÍäÐÑËÂÛÜÊ›ØµÒ Ðç͝ÉëҝÛÜÞßÛÜáÜÐçͬíµÐ‘صè ǵɟÍÂÉëæ¹Éàʛصáñì å›ÛVU“ÉâËÂǵɳ۲Í
èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛصҳé
// POST : return value is the difference of a and b
rational operator - ( rational a , rational b );
// POST : return value is the product of a and b
rational operator * ( rational a , rational b );
// POST : return value is the quotient of a and b
// PRE : b != 0
rational operator / ( rational a , rational b );
SÝÉßÙ¬ÐçØ ÐçáÜÒÊ ÊU“ÉŸÍÂáÜʓБè ÂË ÇµÉÀÖµØÚÐç͝ì
ÊÌΠɟÍäÐç˝ÊÌÍ ÛÜØ Ô×ÖÚØµÙŸËÛÜʛØÚБáÕÊÌ΍ɟÍäÐçËÂÊÌÍëØÚÊÌËÂÐçËÂÛÜʛؤí Û²ËëÇÚБÒ
ËÂǵÉâҝБÞßÉÓØ ÐçÞßÉãÐçÒòËÂǵÉ
_ ÛñØ ÑР͝ìU“ÉŸÍÂҝÛÜʛؤí _ÚÖ«Ë·ÛñËòÇÚБÒÈʛØÚá²ì ʛصÉãÛÜØµÒîËÂɬБè Ê›Ô Ë æ¹ÊÎ ÐçÍäÐçÞßɟËÂɟÍÂҟé‹ê˜Ø
ËÂǵÉàÔ×ʛáÜáÜʦæ ÛñØÚå¿ÛÜÞÀÎÚáÜɳÞßÉŸØ ËäÐç˝ÛÜʛؤíôæ¹ÉëֵҝÉëËÂÇµÉ ˜^ ÞßÊ èÚÛ Y ɟè ` îáÜÊ Ù¬Ð‘á¡Ù³ÊÌÎôì(ßÊ›Ô ËÇÚÉàٳБáÜá¡Î ÐçÍÂБÞßɟËÂɟÍ
ÐçÒòËÂǵÉÓÍÂɟËÂÖ«ÍÂØ ‘U БáÜÖµÉÌé
a
// POST : return value is -a
rational operator - ( rational a)
{
a .n = - a .n;
return a ;
}
\a
˜ê Ø ÊÌ͝èÚÉÄÍ ËÂÊ Ù³Ê›ÞÀÎ ÐçÍÂÉÈÍäÐçËÂÛÜʛØÚБáÚØôÖµÞ_ ɟÍÂÒŸí æ¹É صɳɳè®ËÂÇµÉ ÍÂɳáÜÐçËÂÛÜʛØÚБáÚÊÌΠɟÍäÐÑËÂÊÌÍÂÒïБÒÕæ¹É³áÜá˜é ·ÉÄÍÂÉ
ÛÜÒ¹ËÂǵÉãÉ WôÖÚБáÜÛñË ì®ÊÌÎ ÉÄÍäÐçËÂÊÌÍòБÒòБØóÉIP«Ð‘ÞÀÎÚáÜÉÌé
// POST : return value is true if and only if a == b
bool operator == ( rational a , rational b)
{
return a .n * b.d == a.d * b .n;
}
4.1.6 Details
˜ê Ô ËÇÚÉÄÍÂÉëÐç͝ÉâÒÉ U“ÉÄÍäБá Ô×ֵصٟËÂÛÜʛصÒÈÊÌÍ ÊÌÎ ÉÄÍäÐçËÂÊÌÍÂÒòÊ›Ô ËÂǵÉâҝБÞßÉãØÚБÞßÉÓÛÜØóÐ
εÍÂʛåÌÍäÐ‘Þ í ËÂǵɏٳʛÞÀÎÚÛÜáÜɟÍÏÇÚБÒãËÊ YÚå›ÖµÍÉ ʛ֫Ëãæ·ÇµÛÜÙäÇÝʛصÉÀÛÜÒÏÞßÉ¬Ð‘Ø ËãÛÜØ Рٳɟ͝ËÂБÛÜØÝÔ×ֵصٟËÂÛÜÊ›Ø Ù³Ð‘áÜá˜é
ƹÇÚÛñҹεÍÂÊ Ù³É³ÒÒÈÛÜҹ٬БáñáÜɳè
Бصè ʛØÚá²ìßèµÉŸÎ ɳصèµÒòÊ›Ø ËÂǵÉÏË ì ΠɳҹʛԡËÂǵÉÏ٬БáÜá

¥
D
³
Œ
¦
£
ª
’
‘

©
“
F
»
—

š
Á
³
£
¬
Œ
‘
Ž
“

•
’

”
˜
–
™
—
›

š
Î ÐçÍäБÞßÉÄËÂɟÍÂÒ³é U“ÉŸÍÂáñʓБèµÛÜØµå ͝ɳҝʛáÜÖ«ËÂÛÜÊ›Ø ÛÜÒë˝ÇÚÉÄÍÂɳÔ×ÊÌÍÂÉ®èµÊ›ØµÉ®ÐçË Ù³Ê›ÞÀÎÚÛÜáÜÉ¿ËÂÛÜÞßÉÌé Æ¹ÇµÉŸÍÂÉ ÐçÍÂÉÀË æ¹Ê
٬БÒîɳҏËÂÇÚÐçË æ¹É®ØµÉ³É³èœËÊ ٳʛصҝÛÜèµÉŸÍ ®æ¹É®Ù¬ÐçØ É³ÛñËÂǵɟͿÇÚXÐ U“ÉóБØ
Ô×ÖµØÚÙÄËÂÛÜʛ؜ٳБáÜá^˜áÜÛ ]“É
ÛÜØ ÍÂʛåÌÍÂÐ‘Þ \ `ÄíòÊÌÍ Ð Ô×ÖÚØµÙŸËÛÜÊ›Ø Ù³Ð‘”áÜá š ^˜áܔ¾Û ]“©¯É ’­— IŒ F
`Äé Æ Ê
¾
”
¯
©
­
’
—
Œ
I
F
add (r, s)
std::sqrt(2.0)
εÍÂÊôÙŸÉ³ÒÒ ÐçØóÖµØ W ÖÚБáÜVÛ YÚɳè Ô×ÖµØÚÙÄËÂÛÜʛ؞ٳБáÜá¤Ê›Ô¡ËÂǵÉÏÔ×ÊÌÍÂÞ
Overloading resolution.
^ í¾é²éñé²í
`
ËÂÇµÉ Ù³Ê›ÞÀÎÚÛÜáÜÉŸÍ Ç ÐçÒÏËÂÊYÚØµèÝÐßÞ®ÐçËÂÙäǵÛÜØµåßÔ×ÖµØÚÙÄËÂÛÜÊ›Ø èµÉ³ÙŸá×ÐçÍäÐç˝ÛÜÊ›Ø¤é ¹Ð‘ØµèµÛÜèÚÐçËÂɳÒÓÐçÍÉ Ð‘áñá Ô×ÖµØÚÙÄËÂÛÜʛصÒ
ʛÔòØ ÐçÞßÉ
ÒîÖÚÙäÇ ËÂÇÚÐçËà˝ÇÚÉ Ô×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜáïÛÜÒ ÛÜØ ËÂÇµÉ ÒÙ³ÊÌÎ É Ê›Ô·ÒÊ›ÞßÉßèµÉ³ÙŸá×ÐçÍäÐç˝ÛÜÊ›Ø Ê›Ô f é
f
ê˜Ø БèµèµÛñËÂÛñʛؾí ËÂÇµÉØ ÖÚÞ_ ɟÍÏʛÔÕÔ×ÊÌÍÂޮБá Î ÐçÍäБÞßÉÄËÂɟÍÂÒÓÞ¿ÖÚҙËãÞ®ÐÑËÂÙäÇ ËÂǵɿØôÖµÞ_ ɟÍÏʛԋ٬ÐçáÜá ÎÐÑÍäБÞßÉ ËÂɟ͝ҳí Бصè ɬБÙäÇ Ù¬ÐçáÜáÃÎ ÐçÍÂБÞßɟËÂɟÍÏÞ¿ÖµÒîË _ÉÀʛÔïÐ Ë ì Πɏæ·ÇÚʛÒîÉ UÌÐçáÜֵɳÒâÙ¬ÐçØ _ É Ù³Ê›Ø U“ɟ͝ËÂɟè ˝ʞËÂǵÉ
Ù³ÊÌ͝͝ɳÒîΠʛصèµÛÜØµåÔ×ÊÌ͝ޮБáÎ ÐçÍäБÞßÉŸËÉŸÍ¹Ë ì Πɳҳé
ê˜Ø Ð WôÖÚБáÜVÛ YÚɳè Ô×ֵصٟËÂÛÜʛØóٳБáÜá Ê›Ô ËÂǵÉÏÔ×ÊÌÍÂÞ
^ æ ǵɟ͝É
í¤éñéñé²í
`
ÛÜÒòпØÚБÞßɳҙÎÐçÙ³ÉÌí¥Ê›Øµáñì®ËÂǵÛÜÒ¹ØÚБÞßɳÒîΠБٟÉÏÛñÒòҝɳÐçÍÂÙäǵɳè Ô×ÊÌÍ Ù¬ÐçØÚèµÛÜèÚÐç˝ɳҳé
ÆÈǵɟÍÂÉ ÛÜÒ Ê›ØµÉ Ò™Î É³Ù³Û×Ðçá ÍÂÖµáÜÉßËÂÇÚÐç˿ҝʛÞßÉ ËÂÛÜÞßɟÒòޮР]“ÉŸÒòËÂǵÉëáÜÛñÒîË·Ê›Ô Ù³Ð‘ØµèÚÛñè ÐÑËÂɳҷáÜÐçÍÂå›ÉŸÍ¬éÈê˜Ô ҝʛÞßÉã٬БáÜá¤Î ÐçÍäБÞßÉÄËÂɟÍÈË ì Î ÉëÊ›Ô Ð‘Ø ÖµØaWôÖÚБáñÛVYÚɳè
Ô×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜáÕÛÜÒàèµÉ YÚØµÉ³èœÛÜØ ÐóØÚБÞßɳҙÎÐçÙ³É
^˜Ô×ÊÌÍ ÉIP«Ð‘ÞÀÎÚáÜÉ ËÂǵÉߨÚБÞßɳÒîΠБٟÉ
`´í ˝ÇÚÉŸØ ËÂǵÉ
std
ٳʛÞÀÎÚÛÜáÜÉÄÍÃБáÜҝÊãҝɬÐçÍÂÙäÇµÉ³Ò Ô×ÊÌ͋٬БصèµÛÜèÚÐçËÂɳÒÃÛÜØ é Æ¹ÇµÛÜÒÃÛÜÒÕֵҝɟÔ×ÖÚá ޮБÛÜØµáñìàÔ×ÊÌ͋ÊÌΠɟÍäÐÑËÂÊÌÍÂÒÕБصèßБáÜáÜʦæ Ò
ËÂÇµÉ³Þ ËÂÊ _ ɮ٬БáñáÜɳè ÖµØ W ÖÚБáÜVÛ YÚɳè ÛÜØ ÛÜØ Y P صÊÌËäÐçËÂÛÜÊ›Ø¤é Æ¹ÇµÉ®ÎÊ›ÛÜØ Ë Ê›ÔÈֵҝÛÜØµå ÊÌΠɟÍäÐç˝ÊÌÍÂÒàÛÜØ ÛÜØ YaP
صÊÌËäÐçËÂÛñʛØÀæ¹Ê›ÖÚáñ
è _É ÒîΠʛÛÜáÜɟè ÛñÔ¤æ¹ÉÓÇÚБè®ËÂÊàÞßɳدËÂÛÜʛخÐàØÚБÞßɳÒîΠБٳɷҝʛÞßɟæ ÇµÉŸÍÉ ÛÜØ®ËÂÇµÉ ÊÌΠɟÍäÐç˝ÊÌÍ
٬Бáñá˜é
Argument-dependent name lookup (Koenig lookup).
Resolution: Finding the best match.
[ ÊÌ;ɬБÙäÇëٳБصèÚÛñè ÐÑËÂÉ Ô×ÖµØÚÙÄËÂÛÜʛØëÐçØÚèãɬБÙäÇëÙ¬ÐçáÜáÌÎ ÐçÍäБÞßɟ˝ɟͬí¦ÛñË
ÛÜÒ ä٠ǵɳ٠]“ɳè®ÇÚÊ¦æ æ¹É³áÜá¥ËÇÚÉÈ٬Бáñá¥ÎÐÑÍäБÞßɟËÂÉÄÍ Ë ì ΠɹޮÐçËÂÙäÇµÉ³Ò ËÂǵÉòٟÊÌ͝ÍÂɳÒî΍ʛØÚèµÛÜØµåÓÔ×ÊÌÍÂޮБá¥Î çÐ ÍÂБÞßɟËÂɟÍ
Ë ìôÎ É‘é®ÆÈǵɟÍÂÉÀÐçÍÂÉ Ô×Ê›Ö«Í W ÖÚБáÜÛñË ì áÜÉ U“ÉŸáÜÒ³í å›Ê›ÛÜØµå ÔÜÍÂÊ›Þ _ ÉÄ˝ËÂɟÍãËÂʞæ¹ÊÌÍÂҝɑí å›ÛVU“É³Ø ÛñØÝËÂÇµÉ Ô×›Ê áÜáÜʦæ ÛñØÚå
áÜÛÜҙˬé
\ \
^ `
ÒÂÐçÞßÉÌé
éÕÆ¹ÇÚÉ Ë ìô΍ɳÒòʛԤËÂǵÉÓ٬БáÜáÎ ÐçÍÂБÞßɟËÂɟÍïБصè ËÂǵÉÓÔ×ÊÌÍÂޮБáÎ ÐçÍÂБÞßɟËÂɟÍïÐçÍÂÉ ËÂǵÉ
^ \ `
éÝÆ¹ÇµÉŸÍÂÉ®ÛÜÒ ÐžÎµÍÂʛÞßÊÌËÂÛÜÊ›Ø ÜÔ ÍÂÊ›Þ ËÂǵÉß٬БáÜá‹Î ÐçÍÂБÞßɟËÂɟÍâË ì Î ÉßËÂÊ ËÂǵÉ
Ô×ÊÌÍÂÞ®Ðçá ÎÐÑÍäБÞßɟËÂÉÄÍ¿Ë ì Î ÌÉ é S ɞÇÚÐXU“ÉóÒÉ³É³Ø ÒîʛÞßÉ IÉ P«Ð‘ÞÀÎÚáÜÉ³Ò Ô×ÊÌÍ ÎµÍÂʛÞßÊÌ˝ÛÜʛصҳí áÜÛV]“É ÔÜÍÂʛÞ
ËÂÊ
БصèóÔÜÍÂʛÞ
˝Ê
é
bool
int
^ `
float
double
! "# ƹǵɟÍÂÉ ÛÜҮРÒîËäÐçØÚèÚÐç͝è Ù³Ê›Ø U“ÉŸÍÂҝÛñÊ›Ø ÔÜÍÂÊ›Þ ËÂÇµÉ Ù¬Ð‘áÜá
Î çÐ ÍäÐçÞßɟËÂɟÍÈË ìôÎ Ï
É ËÂÊÀËÂǵÉâÔ×ÊÌÍÂÞ®Ðçá¾Î ÐçÍäÐçÞßɟËÂÉŸÍ¹Ë ìôΠɑéS ÉëÇÚÐKU“ÉâÒÉ³É³Ø ËÂÇÚÐçË Ð‘áÜá¤Ô×ÖµØÚèÚБÞßÉŸØ ËäБá
Ðç͝ÛñËÂǵÞßɟËÂÛÜÙòË ì Î ³É ÒÈÙ¬Ð‘Ø _ÉâÙ³Ê›Ø U“ɟ͝ËÂɳè ÛñØ ËÂʿɬБÙäÇóÊÌËÂǵɟÍ_ôì ÒîËäÐçØÚèÚÐç͝èžÙ³Ê›Ø U“ÉŸÍÂҝÛÜʛصҳé
^ `$%!&
'() * ! # ƹÇÚÉÄÍÂÉàÛÜÒ Ð ÖµÒÉÄͺèµÉ YÚØµÉ³è ÙŸÊ›Ø U“ÉŸÍÂÒîÛÜʛؽÔÜÍÊ›Þ ÂË ÇµÉ
Ù¬ÐçáÜáòÎ ÐçÍäÐçÞßɟËÂɟÍÀË ì Î ÉóËÂÊÝËÂÇµÉ Ô×ÊÌÍÂޮБáÈÎ ÐçÍäБÞßÉŸËÉŸÍ Ë ôì ΍ÉÌé SÝÉóæ ÛñáÜáòå›ÉÄËßËÂÊ ÖµÒÉŸÍ˜èÚÉIY ص³É è
Ù³Ê›Ø U“ÉŸÍÂҝÛñʛØÚÒòʛصáñì®á×ÐçËÂÉÄÍòÛñØ ËÂǵÛÜÒ _ ÊôÊ ]é
×Ô ÖµØµÙŸËÂÛñÊ›Ø ÛÜҹ٬БáñáÜɳè
ËÂÇÚБØ
æ ÛñËÂÇ ÍÂɳÒî΍ɳٟËÈËÂÊÀÐëÎ ÐçÍäБÞßÉÄËÂɟͬí¥ÛñÔ¡ËÂǵÉÏÞ®ÐçËÂÙäÇ ËÇ ÐÑË
f
g
Ÿ
¬
Œ
º
–

–
³
Œ
£
ÛÜØµèµÖµÙ³É³Ò Ê›Ø ËÂÇÚÐçË Î ÐçÍÂБÞßɟËÂɟͷÛÜÒ ÐçË áÜɬБÒîË Ð‘Ò å›ÊôÊ è Ð‘Ò ËÂǵÉëÞ®ÐçËÙ´Ç ÛñØÚèµÖµÙ³É³è _ ì é·ê˜Ô ËÂǵÉàÞ®ÐçËÂÙäÇ f
g
ÛÜÒ¹ÍÂɬБáñáñì _ ɟ˝˝ɟͬí ÛÜÒÈ٬БáÜáñɳè
Ô×ÊÌÍò˝ÇÚÉÓÎ ÐçÍäБÞßÉÄËÂɟͬé
f
Ô×ÖÚØµÙŸËÛÜʛØ
ÛÜÒ Ù¬Ð‘áÜáñɳè Ð Ž³–˜£¬—™±¬–º’ J ŸŒ¬–º–Œ³£ ÛÜÔ ÛñËÓÛÜÒ_ ɟËîËÂÉŸÍ ËÂÇÚÐ‘Ø½Ð‘Ø ì ÊÌ˝ÇÚÉÄÍãٳБصèÚÛñè ÐÑËÂÉ ÛÜØ½Ð‘áÜá
f
޳–ÏËÂÇÚ¨½Ð‘©¯Ø –±¬Š ÛñØ ÐçËÈáÜɬБҙ˷ʛصÉÓÎÐÑÍäБÞßɟËÂÉÄͬé
g
Î ÐçÍäБÞßÉÄËÂɟÍÂÒ³í¥Ð‘صèóÒî˝ÍÂÛñٟËÂáñì _ ÉÄ˝ ŸËÂɟŒ¬ÍÈ
g
·ØµèµÉŸÍïËÂǵÛÜÒ èµÉ YÚØµÛñËÂÛÜʛؤí“ËÂǵɟÍÂÉÓÛÜÒïÐÑ˹ÞßʛÒîËïʛصÉ_ ɳÒî˹ޮÐÑËÂÙäǾí_Ú֫˹ÛñËïޮгìÀÇÚÐçεΠɳخËÂÇÚÐçË ËÇÚÉÄÍÂÉ
ÛÜÒòØÚb
Ê _ ɳÒîË·Þ®ÐçËÂÙäǤíµÛÜØžæ ǵÛÜÙäÇóٳБҝÉã˝ÇÚÉãÔ×ÖµØÚÙÄËÂÛÜʛØóÙ¬ÐçáÜá¡ÛñÒ
íÚБصèžËÇÚÉãٳʛÞÀÎÚÛÜáÜɟÍÈÛÜÒîҝֵɳÒ
“
©
¨
¬
°
—
›
Á
¡
”
›


”
Ž
БØóÉÄ͝ÍÂÊÌÍòÞßɳҝÒÂБå›É‘é
·ÉŸÍÂÉãÛÜÒÈБØóIÉ P«Ð‘ÞÀÎÚáÜÉÌé ïʛصҝÛÜèµÉŸÍÈËÂǵÉÏË æ¹Ê Ê U“ÉŸÍÂáñʓБèµÉ³èóÔ×ֵصٟËÂÛÜÊ›Ø èÚɟٳá×ÐçÍäÐÑËÂÛÜʛصÒ
void foo ( double d );
void foo ( unsigned int u );
ê˜ØžËÂǵÉÏÙ³ÊôèµÉâÔÜÍÂБå›ÞßÉ³Ø Ë
float f = 1.0 f ;
foo (f );
ËÂǵÉYµÍÂÒîËÈÊ U“ÉÄÍÂáÜʓБè ÛÜҹٴǵʛҝɟؾíµÒÛñØÚٟÉ
Ù¬ÐçØ _ É ÎµÍÂʛÞßÊÌËÂɳèßËÂÊ
í_ÚÖµËÈʛصáñì®ÒîËÂБصè ÐÑÍÂè
double
Ù³Ê›Ø U“ɟ͝ËÂɳèó˝Ê
éÕê˜Ø float
unsigned int
int i = 1;
foo (i );
ËÂÇµÉ Ù¬Ð‘áÜá›ÛñҤБÞb_ÚÛÜå›ÖµÊ›ÖµÒ³í¬ÒÛñØÚٟÉ
4.1.7 Goals
Ù¬Ð‘Ø _ÉÃҙËäБصèÚÐçÍÂèºÙ³Ê›Ø U“ɟ͝ËÂɟèãËÂÊ _ ÊÌËÂÇ
double
ÐçØÚè
unsigned int
›Ê ÛÜØ¯Ë¬íôì“Ê›ÖóÒîÇÚʛֵáÜè é³é³é
`L]¥ØµÊ¦æ ǵʦæ Òî˝ÍÂֵٟ˝ÒÕÙ¬ÐçØ _ ÉÈÖÚÒîɳè ËÂÊâБå›åÌÍÂɳå“Ðç˝ÉÈÒîÉ U“ÉŸÍäБáÚèµÛ ÉÄÍÂÉ³Ø ËÃË ìôΠɟÒÕÛÜØ¯ËÂÊÏʛØÚÉÈØµÉŸæ Ë ìôÎ É
É _ ÉŸË æ¹É³É³ØÝ˝ÇÚɏÒîì¥Ø¯ËäБٟ˝ÛÜ٬БáÕБصèÝҝɳޮÐçØ ËÂÛÜٳБáUÌÐçáÜֵɏÍäБصå›ÉÊ›ÔïÐ
\ `ßÖµØÚèµÉŸÍÒîËäБصèÝËÂÇµÉ èµÛ ɟÍÂɳصٳb
Òî˝ÍÂÖµÙŸË `L]¥ØµÊ¦æ ËÇ ÐÑË Ô×ֵصٟËÂÛñʛØÚÒòБصèóÊÌÎ ÉÄÍäÐçËÂÊÌÍÂÒ¹Ù¬ÐçØ _ ÉâÊ U“ÉŸÍÂáñʓБèµÉ³è¤é
Dispositional.
¹Ë¹ËÂǵÛÜÒ¹Î
int
é
Operational.
\
ê˜ØžÎ Ðç͝ËÂÛñÙ³Öµá×Ðçͬí¯ì“Ê›Ö ҝǵʛÖÚáñè _ ÉãÐ _ÚáÜÉ ËÂʞéŸé¬é
`®èµÉ YÚØµÉëÒîËîÍÂֵٟËÂÒ æ ǵʛҝÉâҝɳޮБدËÂÛÜ٬Бá U‘БáÜÖµÉâÍäБصå›É³Ò ٟÊÌ͝ÍÂɳÒî΍ʛØÚè ËÂÊÀËÇ ÐÑË Ê›Ô å›ÛVU“É³Ø Þ®ÐçËÂÇµÉ ^
Þ®Ðç˝ÛÜ٬БáÒîɟËÂÒ
\ `ßεÍÂÊU¥ÛñèÚÉ·èÚÉIY صÛñ˝ÛÜʛصÒÕÊ›Ô Ô×ֵصٟËÂÛÜʛصÒïÐçØÚè®ÊU“ÉŸÍÂáÜʓÐçèÚɟè ÊÌ΍ɟÍäÐçËÂÊÌ͝ҋʛخÒî˝ÍÂֵٟ˝ҳí«Ð‘ٳٟÊÌÍÂèµÛÜØµåâËÂÊ
å›ÛV“U ɟØóÔ×ÖµØÚÙÄËÂÛÜʛØÚБáÜÛñË ì ^
^
`ßæòÍÂÛñËÂÉ ÎµÍÂʛåÌÍäÐçÞßÒ ËÂÇÚÐçËÈèÚÉIY صÉâБصèžÖµÒÉâҙ˝ÍÂֵٟËÂÒòБٳٳÊÌ͝èÚÛñØÚå¿ËÂÊ¿å›ÛVU“ɳØóÔ×ֵصٟËÂÛÜʛØÚБáñÛñË ì“é
4.1.8 Exercises
Œ š ŒÝ© – JÑ¢ Œ Tribool ¶ç›£½–ºŠ¥£ŸŒŸŒ Dô©¯’­”¡ŒIF ’§ŸÁÌ—î± —»š –ºŠ¥£³ŒÄŒ NDô©¯’•” ŒGF ’ªŸÁ›—™± à¸ÓŒ
Š©D¥Œ–ºŠŒÀ–˜£¬”–ºŠ Dô©¯’•” Œ¬Ž¿–˜£¬” Œ ¡¶Ñ©¯’²Ž‘Œ ©“šFó”š çš ›¸Èš Å
›£ß–ºŠŒ – J¦¢ Œ Tribool ȗ°¨¢¾’ªŒ³¨ ŒŸš¤– –ºŠŒÀ’ªŸÁ›—™±Ä©¯’¢ Œ³£Ÿ©¯–›£¦Ž
Exercise 108
// POST : returns x AND y
Tribool operator && ( Tribool x , Tribool y );
// POST : returns x OR y
Tribool operator || ( Tribool x , Tribool y );
¸ÈŠŒ³£³Œ
H ∧M ©“šF H ∨M ©“£³Œ FµŒ š ŒIFÝ©µ±Ä±Ÿ›£ F“—°šÁ –ó–ºŠŒò¶‘“’»’ª›¸¹—»šÁ –˜¸Ó î– ©« ¦’ªŒ¬ŽçÅ
^ G` ^ \ `
¶ç©¯’­Ž‘Œ
¶Ñ©¯’²ŽçŒ
¶Ñ©¯’²ŽçŒ
”š çš ›¸Èš ¶Ñ©¯’²ŽçŒ
–˜£¬”¡Œ
¶Ñ©¯’²ŽçŒ
Æ É³ÒîËÈì“ʛ֫ÍòË ì Î É _
ʛԡì“ʛ֫ͷٴǵʛÛÜٟÉÌé
∧
” š ‘š ›¸¹š
–˜£¬” Œ
¶Ñ©¯’²Ž‘Œ
∨
¶Ñ©¯’²ŽçŒ
¶ç©¯’­Ž‘Œ
¶ç©¯’­Ž‘Œ
¶ç©¯’­Ž‘Œ
” š ‘š ›¸¹š ”š ‘š ›¸¹š
” š ‘š ›¸¹š ”š ‘š ›¸¹š
” š ‘š ›¸¹š
–˜£¬” Œ
–˜£¬” Œ
–˜£¬” Œ
ì®æ·ÍÂÛñ˝ÛÜØµå ÐàεÍÂʛåÌÍÂÐ‘Þ ËÂÇÚÐçËÈʛֵËîÎ Ö«ËÂÒïËÂǵɳÒîÉÏËÍÖµËÇ ËäÐ
” š ‘š ›¸¹š –˜£¬” Œ
” š çš › ¸Èš –˜£¬”¡Œ
” š çš › ¸Èš –˜£¬”¡Œ
–˜£¬”¡Œ
–˜£¬”¡Œ
_ÚáÜɟÒÈÛñ؞ҝʛÞßÉÓÔ×ÊÌÍÂÞ®ÐçË
Œ š Œ © – JÑ¢Œ Z_7 ¶‘›£ ±Ÿ›¨¢¤”–˜—»šÁ ¸¹—˜–ºŠ —°š¤–Œ™Á«ŒŸ£¦Ž ¨½ F“”’ª 7 Å œ©¯–ºŠŒ³¨ ©¯–˜—
±Ä©¯’°’EJ ȖºŠ¥—˜Ž®±Ÿ›£¬£³Œ³Ž™¢ ›šF¯Ž –ó–ºŠŒ š —»–Œ £¬—»šÁ 7 = /7 Â¶à£³Œ¬ŽŸ— F“” Œ ±¬’ª©¯ŽŸŽ‘Œ¬Ž ¨  F“” ’§ 7 Å
›£ß–ºŠŒ – J¦¢ Œ Z_7 ¹—»¨¿¢¾’§ŒŸ¨ Œ³š¤–ã© F F“—»–˜—î›š¼©“šF ŽŸ”¾ ¦–˜£Ÿ©µ±¬–˜—™›š ³¢ Œ³£Ÿ©¯–›£¦Ž
Exercise 109
// POST : return value is the sum of a and b
Z_7 operator + ( Z_7 a , Z_7 b );
// POST : return value is the difference of a and b
Z_7 operator - ( Z_7 a , Z_7 b );
©µ ±Ÿ±Ä›£ “F —»šÁ –ž–ºŠŒ·¶ç“’»’ª›¸È—°šÁó–î©« ¬’§Œ H–ºŠ¥—˜Ž –î©« ¦’ªŒ ©¯’­Ž‘ FµŒ š Œ¬Ž ŽÄ”¡ ¦–˜£Ÿ©µ±³–˜—š
”š — ” Œ¿š ” ¨ ³Œ³£ z {0, . . . , 6} ŽŸ” ±¬Š –ºŠ©¯– x = y + zM¥Å
x − y —˜Ž¿–ºŠŒ
^
`I^
\ `
\
+
0
1
2
3
4
5
6
0
0
1
2
3
4
5
6
1
1
2
3
4
5
6
0
2
2
3
4
5
6
0
1
3
3
4
5
6
0
1
2
4
4
5
6
0
1
2
3
Exercise 110 È£³ D‘—NFµŒ FµŒ
– J¦¢ Œ rational Å
5
5
6
0
1
2
3
4
6
6
0
1
2
3
4
5
š —»–˜—š¤ŽÃ¶‘›£ë–ºŠŒ‹¶‘“’»’ª›¸¹—»šÁ ¬—»š ©“£KJ ©“£¬—˜–ºŠ¥¨½Œ¬–˜—³¢ Œ³£Ÿ©¯–›£¦^ Ž\ ›`Gš ^ º– Š Œ `
// POST : return value is the difference of a and b
rational operator - ( rational a , rational b );
// POST : return value is the product of a and b
rational operator * ( rational a , rational b );
// POST : return value is the quotient of a and b
// PRE : b != 0
rational operator / ( rational a , rational b );
F Œ š —˜–˜—š¤ŽÈ¶‘›£ –ºŠŒ·¶‘“’°’§›¸¹—°šÁ ¬ —°š ©“£KJ £ŸŒ¬’ª©¯–˜—™›š ©¯’¢ Œ³£Ÿ©¯–›£¦Žž› š º– ŠŒ
Exercise 111 È£³ ‘D —NFµŒ µ
– J¦¢ Œ rational Å Â š µF ›—°šÁ –ºŠ¥—»Ž –˜£KJ – £³ŒŸ”Ž‘Œ ³¢ ³Œ £Ÿ©¯–›£¦Ž¼–ºŠ©¯– ©“£³Œ ©¯’­£ŸŒÄ© FJ FµŒ š IŒ F«Å
^
\ `I^
`
// POST : return value is true if and only if a != b
bool operator != ( rational a , rational b );
// POST : return value is true if and only if a < b
bool operator < ( rational a , rational b );
// POST : return value is true if and only if a <= b
bool operator <= ( rational a , rational b );
// POST : return value is true if and only if a > b
bool operator > ( rational a , rational b );
// POST : return value is true if and only if a >= b
bool operator >= ( rational a , rational b );
Exercise 112 È£³ D‘—NFµŒ µ
F Œ š —»–˜— š¤ŽÃ¶‘›£ë–ºŠŒ‹¶‘“’»’ª›¸¹—»šÁ ¬ —»š ©“£KJ ©“£¬—˜–ºŠ¥¨½Œ¬–˜—³¢ Œ³£Ÿ©¯–›£¦Ž›š –ºŠŒ
– J¦¢ Œ extended_int H ©›Á«Œ
M ©“šF –Œ¬Ž³–À–ºŠŒŸ¨ —°š ©½¢¤£³ŸÁ›£Ÿ©“¨ Hñ¶ç›£Ý–ºŠ©¯–—»– ±Ä›”’ F ³Œ
ŠŒ¬’ ¢“¶Ÿ”’ – ¢¤£³ D̗NFµŒÀ©“𼐛”–ñ¢¤”– ¶ç©µ±³—»’­—»– Jⶑ›£¿–ºŠŒ¿– J¦¢ Œ extended_int
·©“šF ©ã¶Ä”𠱬–˜—™›šœ–ºŠ©¯–
©¯Ž³ŽŸ—§Á›š¤Žë– ©“š extended_int Dô©¯’•” ŒÀ©D ©¯’­”¡ŒÀÂ¶ë– J¦¢ Œ intM¥Å Žâ—»š –ºŠŒ ¢¤£³ŒXD‘—”ŽŒÚ Œ³£³±Ÿ—˜Ž‘Œ
–˜£KJ –ž£³ŒŸ”Ž‘Œ ±Ÿ FµŒ‘Å
^
\ `I^
`
\ // POST : return value is the sum of a and b
extended_int operator + ( extended_int a , extended_int b );
// POST : return value is the difference of a and b
extended_int operator - ( extended_int a , extended_int b );
// POST : return value is the product of a and b
extended_int operator * ( extended_int a , extended_int b );
// POST : return value is -a
extended_int operator - ( extended_int a );
Exercise 113 Ӑ›š¤ŽŸ— FµŒ³£À–ºŠŒò¶‘“’°’§›¸¹—»šÁ Ž‘Œ³–âÂ¶¿–ºŠ¥£³ŒŸŒ ¶Ä”𠱬–˜—™›š¤ŽçÅ
void foo ( double , double )
{ ... }
void foo ( unsigned int , int )
{ ... }
void foo ( float , unsigned int ) { ... }
// function A
// function B
// function C
› £ ŒÄ©µ±¬Š Â¶–ºŠŒ ¶‘“’°’§›¸¹—»šÁ⶟” 𠱬–˜—î›š ±´©¯’»’­Ž FµŒÄ±³—NFµŒ®– ¸ÈŠ¥—î±³Š Â¶À–ºŠŒ ¶Ä”𠱬–˜—™›š¤Ž H A, B, CM
—˜–Ï£³Œ¬Ž‘“’ D¥Œ¬Ž – ›£ FµŒŸ±³— FµŒž–ºŠ©¯–ã–ºŠŒ ±´©¯’»’ —˜Ž ©“¨½ ³—°Á›”¡›”ŽçÅ ¦¢¾’ש“—»š Jڐ›”£ FµŒŸ±Ÿ—˜ŽŸ—™›š¤Ž ‰‹Š¥—»Ž
Œ ڌŸ£³±³—˜ŽçŒà£³Œ ” —»£³Œ³ŽZJ ›”½–ß£³ŒÄ© F –ºŠŒò¢©“£Ÿ©›Á›£Ÿ©¬¢¾Š ›š  D¥ŒŸ£¦’§‘© F“—°šÁߣ³Œ¬Žç“’­”–˜—î›š —»šÝ–ºŠŒ
Œ¬–î©“—˜’­Ž
Ž‘ŒÄ±¬–˜—š Å
©KM foo(1, 1)
M foo(1u, 1.0f)
±NM foo(1.0, 1)
FKM foo(1, 1u)
ŒNM foo(1, 1.0f)
¶ M foo(1.0f, 1.0)
4.1.9 Challenges
D̗˜ŽÄ”¡©¯’•— Œ
Exercise 114 ‰‹Š¥—»Ž ±¬Š©¯’°’§ŒŸšÁ«ŒóŠ©¯Žó©
ı ›¨¢¤”–ŒŸ£ž Á›£Ÿ©¬¢¾Š¥—™±¬Ž ©D¥›£ÌŠݣ¬—»–Œ½ © ¢¤£³ŸÁ›£Ÿ©“¨ –ºŠ©¯–
©“š ɹ—­¢¤ÞߔÊô’×赩¯–É³Œ á ©
F“—»¨½Œ³š¤ŽŸ—î›š ©¯’됥 ŒŸ±³–îÅ
›£ –ºŠŒ Žç© ôŒ Â¶
æ ©“šÛñ͝F ɳÔÜÍ䨽БÞß
 ¶ ©
Â¶à©ž±³”¡ ŸŒâÁ›— DôŒ³šœ KJ ŒGF›Á«Œ¬Žâ—°š –ºŠ¥£³ŒÄŒIF“—»¨½Œ³š
©¯’»’ª›¸ÈŽ Jڐ›” –
±Ÿ›š ±Ÿ£³Œ¬–Œ³š Œ¬ŽŸŽ ¹–ºŠ¥—»š
ŽŸ—™›š ©¯’ Ž™¢©µ±ŸŒçÅ
‰‹ŠŒà¢¤£³ÄÁ›£Ÿ©“¨ Ž³Š›”’ F ³Œ ©« ¦’ªŒ – F“£Ÿ©“¸ –ºŠŒ ¥ ŒŸ±³–ã—» š ¢ ŸŒ £¦Ž™¢ ŒŸ±³–˜— D¥Œ D̗¸ð©“šF ©¯–Ï’ªŒÄ©¯Ž³–
¢¤£³ D̗ FµŒà–ºŠŒà”ŽçŒ³£ë¸¹—˜–ºŠÝ©ë¢ “ŽŸŽŸ—™ ¬—»’­—»– J½Â¶Ï£³“––˜—°šÁ º– ŠŒß ¥ ŒÄ±¬– “© £³›”šF –ºŠŒà–ºŠ¥£ŸŒŸŒß©ÚŒ¬ŽçÅ ‰ÕŠŒ
F“£Ÿ©“¸¹—»šÁž¸¹—»
š Fµ›¸ ¨ž—§Á“Š«–¡¶ç›£žŒ«©“¨¢¾’ªŒ ’ªÌ ž’•— Œ –º¥Š —»Ž
\ š¤Ž³–ŒÄ© FœÂ¶ž©
±³”¡ ŸŒ Jڐ›” ¨ ©JÝ
¸ ©“š¤–▝½–î© ôŒ ©“𠐓–ºŠŒŸ£¿¢¾’ש¯–›š —î± Ž‘“’•—NF Jڐ›” ¨½©J £³ŒÄ© F
–ºŠŒ ¸¹—»£³Œ˜¶Ä£Ÿ©“¨ Œ ¨  FµŒ¬’‹¶Ÿ£Ÿ›¨ © ’§Œ J ›” ¨½©J © F F –ºŠŒ ¢ “޳ŽÄ—™ ¬—»’­—»– J Â¶ Ž‘±´©¯’­—°šÁ –ºŠŒ¼¥ ŒÄ±¬– ¿–˜£Ÿ©“š¤Ž³’ש¯–˜—»šÁ —˜– Œ¬–±‘Å
Ž‘Œž–ºŠŒ ’­— ¬£Ÿ©“£KJ libwindow –ºŠ©¯–ë—»Ž½©Dô©“—˜’ש« ¦’ªŒÝ©¯–à–ºŠŒ ±Ÿ›” £¦Ž‘Œ
Š›¨ Œ™¢©›Á«ŒÀ–½±³£³Œ´©¯–Œß–ºŠŒÁ›£Ä©¬¢¾Š¥—î±Ä©¯’”–ñ¢¤”–îÅ
×¶Jڐ›” Fµ›š – ‘𠐛
¸ HŸ›£ÏŠ© D¥Œ ¶‘›£îÁ¥“–º–Œ³š MŠ›¸ –¿£³“––Œ ©“šFÏ¢¤£Ÿ ŒŸ±³–Õ–ºŠ¥£³ŒÄŒIF“—°¨ Œ³š¤ŽŸ—™›š ©¯’
¢ ›—°š¤–ºŽ ȊŒ³£³Œ —»Ž®© ±³£Ÿ©¯Ž³Š ±Ÿ›” £¦Ž‘ Œ‘Å
2
“––˜—°šÁ ©à¢ ›—»š¤– (x, y)
©“£³›” š F –ºŠŒÀ›£¬—°Á›—°š K J ©“š ©“šÁ“’§ŒßÂ¶ α H© F“— ©“š¤NŽ MÀ£³Œ³ŽŸ”’­–ºŽ
—»šœ–ºŠŒã¢ ›—°š¤– (x , y ) ¸È—»–ºŠœ±Ÿ‘›£ F“—»š ©¯–Œ¬Ž
ٳʛÒ
ҝÛÜØ
x
α −
x

Ò
Ü
Û
Ø
³
Ù
›
Ê
Ò α
=
.
y
α
α
y
š
3
› £ FµŒŸ£ –œ£³“––Œ © ¢ ›—°š¤– (x, y, z)
©“£³›” šF –ºŠŒ z 䩯—˜Ž Jڐ›” ŽŸ—»¨¿¢¾’EJ ŒŸŒî¢ z
”𠱳Щ“šÁ«ŒIF ©“šF £Ÿ“––Œ (x, y) ©¯Ž ©« ³ DôŒ‘Å J ŽIJ ¨ ¨ Œ¬–˜£KJ ZJڐ›” ±´©“š Á›”£ŸŒ ›”–⊍›¸ –ºŠ¥—˜Ž
¸Ó›£ ̎¹¶‘›£À–ºŠŒ “–ºŠŒ³£ ©µŒ¬ŽçÅ Œ³š ŒŸ£Ÿ©¯’¢ Œ³£¦Ž™¢ ŒÄ±¬–˜— DôŒâ¢¤£³ ŒÄ±¬–˜—î›šœ—˜Žà𠐓–·Ž‘ ŒÄ©¯ŽIJ ¬”–ò— ¶ Jڐ›” ¸ ©“𤖷–¿¢¤£³ ŒÄ±¬–ã© ¢›—»š¤–
›š¤– –ºŠŒ z = 0 ª¢¾’ª©“š Œ H¨ ©›Á›—»š Œ –ºŠ©¯–ž–ºŠ¥—»Ž ¢¾’ª©“š Œ —˜Ž –ºŠŒ ±Ä›¨¢¤”–ŒŸ£ Ž‘±³£³ŒÄŒ³š –ºŠ©¯– Jڐ›”
¸ ©“𤖠– F“£Ä©“¸ ›š M –ºŠ¥—»Žž—˜Ž 𠐓–¿Š©“I£ F«Å ¨½©›Á›—°š Œ –ºŠ©¯– v = (vx , vy, vz ) —»Žó–ºŠŒ D̗™Œ³¸ ¢ ›—»š¤–
\ H°¢ “ŽÄ—˜–˜—š Â¶
J ›” 
£ Œ J Œ MôÅ vz > 0 ¶ç›£Œ µ©“¨¢¾’ªŒâ¨½ŒÄ©“š¤ŽÏ–ºŠ©¯– J ›”Ý©“£ŸŒëŽŸ—»–º–˜—»šÁ—»š ¶Ä£³›š¤–·Â¶Ï–ºŠŒ
Ž‘±³£ŸŒŸŒ³š Š݊Œ³š ÚJ ›” ¤
¢ £³ ŒÄ¬± –à–ºŠŒ¢ ›—°š¤– p = (x, y, z) ›š¤– º– ŠŒžŽ‘±³£³ŒÄŒ³š –ºŠŒž—°¨½©›Á«Œ¿¢ ›—»š¤–
Š©¯Ž®±ŸÌ›£ “F —°š ©¯–Œ¬Ž
(x − t(vx − x), y − t(vy − y)),
¸ÈŠŒ³£³Œ
t=
z
.
vz − z
‰ÕŠŒÏ¢¤£³ ŒŸ±¬–˜—™›š –ºŠ¥”Ž®›š¤’ J ¸Ó›£ ̎ — ¶ vz = z Å
\
4.2 Type Variants
›š –Ï ŸŒ¬’•—îŒXD¥ŒÀ–ºŠŒ – J¦¢ Œ‘Å
𠐛š J¯¨ ›”Ž
‰ÕŠ¥—˜ŽÏŽ‘ŒŸ±³–˜—î›š Œ¦¢¾’ש“—»š¤Žâ–˜¸Ïß¸ ©J ŽÂ¶ ¥ ¦–î©“—°š —»šÁ Dô©“£¬— ©“š¤–ºŽ Â¶à©ÀÁ›— D¥Œ³š – J¦¢ Œ –ºŠ©¯–
Š ©É³D¥Ô×ɟŒ ÍÂɳ–ºØµŠÙ³Œ É Ë Žçìô©“΍¨ É³Ò Œ Dô©¯’•” Œ £Ÿ©“šÁ¥Œ¼ ¬”– F“— Œ³£ —°šð±ÄŒ³£¦–î©“—»š ¶Ÿ” 𠱬–˜—î›š ©¯’•—˜– J ©¯Ž™¢ŒŸ±¬–ºŽçÅ
Œ³š ©« ¦’ªŒï¶Ÿ” 𠱬–˜—š¤Žâ–ó©µ±Ÿ±ŸŒ™¢¾–Ó©“šF®£³Œ³–˜”£¬š ’EDô﩯ʛ’•” صŒ³Ò
˘˩“ì šÎ F®É³Ò —»šó¢©“£
–˜—™±³”’ש“£ ±¬ Š©“šÁ«Œ –ºŠŒ Dô©¯’•” Œ¬ŽóÂ¶ –ºŠŒ³—»£Ï¶‘›£¬¨ ©¯’¤¢©“£Ä©“¨ Œ¬–Œ³£¦ŽÑÅ
©¯’»’ª›¸
”Žë– FµŒ š Œ Dô©¯’­”¡Œ¬Ž ©¯Ž ³ŒŸ—»šÁ 𠐛𠙍½ F“— ©« ¦’ªŒ š ŽÄ” ±¬Š © ¸ ©J󖺊©¯–È–ºŠŒß±Ÿ›¨
¢¤—»’§Œ³£ ±´©“š FµŒ³–ŒŸ±¬–®—˜’°’§Œ Á¥©¯’㨽 F“— ±´©¯–˜—š¤ŽçÅ
Œ˜¶çŒ³£³Œ³š ±ÄŒœ– J¦¢ Œ¬Ž ©“
š F ±Ÿ›š¤ŽŸ– î– J¦¢ Œ¬Ž
±´©“š ŸŒ ±Ä›¨½ ¬—°š IŒ F ©“
š F 𠩝–˜”£Ä©¯’»’ J ±Ÿ›¨½Œ ”¯¢ —°š —»¨¢¾’ªŒ³¨½Œ³š¤–˜—»šÁ ¶Ÿ” 𠱬–˜—î›š ©¯’•—˜– J
¶ç›£À޳–˜£¬”¡±¬–ºŽçÅ
4.2.1 Reference types
ÉŸË ÖµÒ ØµÊÑæ ˝͝ìãËÂÊ ÛÜÞÀÚ
Î áÜɳÞßÉ³Ø¯Ë ÂË ÇµÉ¹Ð‘èµèµÛñËÂÛÜʛØâБҝҝÛÜ囨µÞßÉ³Ø¯Ë ÊÌÎ ÉÄÍäÐçËÂÊÌÍ
Ô×ÊÌÍ ËÇÚÉïҙ˝ÍÂֵٟË
+=
rational
ÔÜÍÂÊ›Þ ÍÊ›åÌÍäÐ‘Þ é òŸÉ ÍÂÉÏÛÜÒ·ÐçØ çР˝ËÂɟÞÀÎÚË
rational operator += ( rational a , rational b ) {
a .n = a. n * b.d + a. d * b.n ;
a .d *= b .d;
return a ;
}
S¼ÛñËÂÇ ËÂǵÛÜÒ³í¥æ¹ÉâٳБ؞æ·ÍÛñËÂÉ
rational r ;
r.n = 1; r .d = 2;
// 1/2
rational s ;
s.n = 1; s .d = 3;
// 1/3
r += s;
std :: cout < < r .n < < "/ " < < r. d < < "\ n";
ʛּޮгìœÐ‘áñÍÂɳБè«ì ÒÉ³É ËÂÇÚÐçË ËÂǵÉóʛ֫˝ÎÚÖµËÀʛÔÓ˝ÇÚÛñÒ æ ÛÜáñáòصÊÌËL_ Éó˝ÇÚɞèÚɟҝÛñÍÂɳè
é ɳٳБáÜá
5/6
ÔÜÍÂÊ›Þ " ɳٟ˝ÛÜÊ›Ø é é æ ÇÚÐçË®ÇÚÐçεΠɳصÒßæ ǵɳØ
^˜ÉXW ÖµÛVUÌÐçáÜÉ³Ø Ëáñì“í
`ÀÛÜÒ
r += s
operator+= (r, s)
É U‘БáÜÖÚÐçËÂɟè
ÐçØÚè
ÐÑÍÂÉ É U‘БáÜÖÚÐçËÂɳè¤íòБصè¼ËÇÚÉó͝ɳҝֵáñËÂÛÜØµå U‘БáÜÖµÉ³Ò ÐçÍÂÉ ÖµÒÉŸè ËÂÊ ÛÜØµÛñËÂÛÜБáÜ۳ɮËÂǵÉ
r
s
Ô×ÊÌÍÂޮБá Î ÐçÍÂБÞßɟËÂÉŸÍÒ Ð‘Øµè
ʛÔÃËÂǵɏÔ×ֵصٟËÂÛñʛØ
é¿ÆÈǵÉUÌБáñÖÚɟÒãÊ›Ô Ð‘Øµè
ÐÑÍÂɏصÊÌË
operator+=
r
s
ÙäÇÚБصå›É³è _ôì ËÂǵÉÏÔ×ÖÚØµaٟ˝ÛÜʛ؞٬bÐçáÜá˜é
·É³ØµÙ³ÉÌí æ·ÛñËÂÇÝËÂǵÉßÐ _Ê U“ÉßÛÜÞÀÎÚáÜɟÞßÉ³Ø ËäÐÑËÂÛÜÊ›Ø Ê›Ô
í ËÂǵÉ
Ê›Ô ËÂǵÉßÉIPôÎÚ͝ɳҝҝÛÜʛØ
operator+=
D
¯
©
­
’
¡
”
Œ
ÛñÒ ÛÜØµèÚɟɳè
í _ÚÖ«Ë ËÂǵɹèµÉ³ÒÛñÍÂɟè
í ËÂǵɹÛÜØµÙŸÍÂɟÞßÉ³Ø Ë Ê›Ô í“èµÊôɟÒÃØµÊÌË ÇÚÐçÎµÎ É³Ø¤é Æ¹ÇÚÐçË! Ò
r += s
r
æ Ç¯ì®æ¹Éãå›ÉŸË
Б5/6
ÒÈʛ֫˝ÎÚÖµËòÛÜØ ËÂǵÉâÐ _Ê U“Œ ÉÓÎڌÄÛܱ¬É³– Ù³ÉãÊ›Ô Ù³Ê èÚɑé
1/2
\
˜ê ؞ÊÌÍÂèµÉŸÍ¹ËÂÊ ÛÜÞÀÎÚáÜɟÞßÉ³Ø Ë
εÍÂÊÌΠɟÍÂá²ì“í æ¹ÉÓޏֵÒîË¹ÉŸØ Ð _ áñÉ Ô×ÖÚØµÙŸËÛÜÊ›ØµÒ¹ËÊ Ù´ÇÚБصå›É ÂË ÇµÉ
operator+=
U‘БáÜÖµÉ³Ò Ê›Ô ËÂǵɳÛñͷ٬БáÜá¤Î ÐçÍäБÞßÉÄËÂɟÍÂÒ³é " ֫͝εÍÂÛÜҝÛñØÚå›á²ì“íµæ¹ÉâèÚÊߨµÊÌË·ØÚÉŸÉ³è 
Ð ØÚÉÄæ ٳʛصٳÉÄÎÚËÓÔ×ÊÌÍ·ËÂÇÚÐçË ›Ê Ø
ËÂǵÉÏÔ×ÖÚØµÙŸËÛÜʛØóҝÛÜèµÉ ¥æ¹ÉÏҝÛÜÞÀÎÚáñìÀØÚɟɳè ÐàØÚÉÄæ Ù³ÐçËÂɳå›ÊÌ͝ì Ê›Ô Ë ì Πɳҳé
Definition.
ê˜Ô ÛÜÒ·ÐçØ ì®Ë ìôÎ ÉÌí«ËÂǵɳØ
ÛÜÒ¹ËÂǵÉãٟÊÌ͝ÍÂɳÒî΍ʛØÚèµÛÜØµå
»^ ͝ɬБè Ð‘Ò ÍÂɳÔ×ÉÄÍÂÉ³ØµÙ³É ßÊÌÍ ™ ÍÂɳÔ×ɟ͝ɳصٳÉãËÂÊ `Äéµê˜Ø
U‘БáÜֵɷÍäБصå›É ÐçØÚèßÔ×ֵصٟË£³ÛñŒ˜Ê›¶çØ Œ³Ð磳á܌³ÛñšË ì“ı í Œß – ÑJ ¢ÜÛ Œ ҋÛÜèµÉ³Ø¯ËÂÛÜÙ¬ÐçáÚËÂÊ é ÆÈÇµÉ èµÛ ÉÄÍÂÉ³ØµÙ³É ÛÜҋÜÛ ØÀËÂÇµÉ ÛÜØµÛñËÂÛÜБáÜÛ¬ÐÑËÂÛÜʛØ
Бصè БÒîҝÛÜ囨µÞßÉ³Ø Ë¹ÒîÉ³Þ®Ð‘Ø ËÛÜÙ³Ò³é
U‘ÐçÍÂÛ×Ð _ÚáÜÉÈʛԍÍÂɳÔ×ÉÄÍÂÉ³ØµÙ³É Ë ìôÎ É ^ºÐ‘áÜҝÊâ٬БáÜáÜɟèßÐ
` Ù¬Ð‘Ø _ ÉòÛÜØµÛñËÂÛ×ÐçáÜ۳ɳè¿Ê›ØµáñìÔÜÍÂʛÞ
‘Ð Ø
Ê›Ô¡Ë ì Î É í«ÊÌÍ ÐçØ ì®Ë ìôÎ ÉÏæ ǵʛҝÉ
UÌБáñÖÚɟÒòÙ¬ÐçØ £³Œ˜_¶çŒ³ÉÏ£³Ù³Œ³Ê›š Ø ±ÄU“Œ ɟÍîËÂɳèóËÂÊ éµÆ¹ÇµÉâÛÜØµÛñËÂÛÜБáÜÛ¬ÐÑËÂÛÜʛØ
ޮР]“’ Dô³É ©¯Ò¹’•Ûñ” ËòŒ БØ
ʛԡËÂǵÉÏáVUÌÐçáÜÖµÉ ÃБصÊÌËÂǵɟÍÈØ ÐçÞßÉÏÔ×ÊÌÍÈËÂǵÉÏÊ _ ɳٟË_ ɳǵÛÜØµè ËÂǵÉãáVU‘БáÜÖµÉÌé S ÉâБáñҝÊ
ÒÂгì ËÂÚÇ Ðç˹ËÂǵÉÏ©¯Í’­ÉŸ— Ôש¯ÉŸŽÍÂɳصٳÉ
ËÂÊ¿ËÂÇÚÐçËòÊ _ ɳٟ˳éÕÆ¹ÇµÉãÔ×ʛáñáÜÊÑæ·ÛÜØµå ÉIPµÐ‘ÞÀÎÚáÜÉ ÒîÇÚʦæ Ò¹ËÂǵÛÜÒ³é
£ŸŒ˜¶‘Œ³£¦Ž
int i = 5;
int & j = i ;
// j becomes an alias of i
j = 6;
std :: cout < < i < < "\n" ;
// changes the value of
// outputs 6
i
ÂÍ ÉŸÔ×ɟÍÂɳصٳɮ٬БصصÊÌË _ ÉÀÙäÇÚБصå›É³èÝËÂʞÍÂɟÔ×ɟÍàËÂÊ Ð‘ØµÊÌËÂǵɟÍâÊ _ ɳÙÄËàБÔÜËÂÉÄÍëÛÜØµÛñËÂÛÜБáÜÛ¬ÐÑËÂÛÜʛؤé ê˜Ô æ¹É
á×Ðç˝ɟÍòБҝҝÛÜ囨 ҝʛÞßɟËÂǵÛÜØµåàËÂÊ ËÂǵÉÏ͝ɳÔ×ɟÍÂÉ³ØµÙ³É‘í æ¹ÉÏÛÜØžÔªÐ‘ÙÄË Ð‘ÒîҝÛÜ囨žËÂÊ ËÂÇµÉ ÍÂɳÔ×ÉÄ͝ÍÂɳèóËÂÊb_ôì Ûñˬé
ê˜Ø æòÍÂÛñËÂÛÜØµå
ÛÜØËÇÚÉòÐ _ ÊU“ÉïÎÚÛÜɳٳÉÈʛÔÙ³Ê èµÉÌí¯æ¹É¹ËÂǵɟÍÂɟÔ×ÊÌÍÂÉòÙäÇÚБصå›É¹Ë¥Çµ ɌÄU‘±¬Ð‘– áÜÖµÉ¹Ê›Ô ËÊ í“ҝÛÜØµÙ³É
i 6
ÛñҷБØóБáÜÛ×БjÒïʛ=Ô 6 é
j
ê˜Ø ËÂÉÄÍÂØÚБáÜáñì“í Ð i UÌÐçáÜÖµÉßÊ›Ô Ë ì Î É ÛÜÒâ͝ɟεÍÂɳҝɳدËÂɳè _ôìÝËÂǵÉßÐçèÚè«ÍÂɟҝÒàʛÔïËÂǵÉÀÊ _ ɳÙÄËàÛñËëÍÂɟÔ×ɟÍÂÒ
ËÂÊ«éÕÆÈǵÛÜÒÈIÉ PôÎ áÜБÛÜØµÒïæ Ç ì®æ¹ÉãØÚɟɳè БØóVá U‘БáÜÖµÉ ËÂʏÛÜØµÛñËÂÛ×БáñÛ ³É ÐàÍÂɳÔ×ɟ͝ɳصٳÉâË ìôÎ É U‘ÐçÍÂÛ×Ð _ÚáÜɑíµÐ‘Øµèžæ ǯì
ËÂǵÛÜØµå›Ò¹áÜVÛ ]“É
int & j ;
int & k = 5;
// error : j must be an alias of something
// error : the literal 5 has no address
èµÊ›
Ø Ë·æ¹ÊÌÍ ]é Ø ì ÉIPôÎÚ͝ɳҝҝÛÜÊ›Ø Ê›Ô ÍÂɟÔ×ɟÍÂɳصٳÉàË ìôÎ ÉãÛÜÒ Ð‘Ø á UÌБáñÖÚÉãÛñËÂҝɟáÜÔºé SÝÉëÙ³Ð‘Ø ËÂǵɟÍÂɳÔ×ÊÌÍÂÉâÖÚÒîÉàÐ
ÍÂɳÔ×ÉÄÍÂÉ³ØµÙ³É ËÂÊ ÛÜØµÛñ˝Û×БáÜ۟ɷБصÊÌËÂǵɟÍï͝ɳÔ×ɟÍÂɳصٳÉ
í _ÚÖµËï˝ÇÚÉŸØ æ¹É èµÊ›Ø ˹å›ÉŸËÈÐâÍÂɟÔ×ɟÍÂɳصٳÉÏËÂÊ í _ Ö«Ë
r
rr
r
БصÊÌËÂǵɟÍÈÍÂɳÔ×ɟ͝ɳصٳÉâËÂÊ ËÂǵÉãÊ _ ɳٟËÈÍÂɳÔ×ɟÍîÍÂɳè ËÂÊ_ôì
r
int i = 5;
int & j = i ;
int & k = j ;
// j becomes an alias of i
// k becomes another alias of i
4.2.2 Call by value and call by reference
S¼ÇµÉ³Ø ОÔ×ÖµØÚÙÄËÂÛÜÊ›Ø ÇÚБÒàÐ Ô×ÊÌ͝ޮБáÃÎ ÐçÍÂБÞßɟËÂɟÍâÊ›Ô ÍÂɳÔ×ɟ͝ɳصٳÉßË ì Î ÉÌí ËÂǵÉÀٟÊÌ͝ÍÂɳÒî΍ʛØÚèµÛÜØµåóٳБáÜá Î Ð
ÍäБÞßÉÄËÂÉŸÍ Þ¿ÖµÒîË_ÉàÐ‘Ø áVU‘БáÜÖµÉ Úæ ǵɳØóËÂǵÉëÔ×ֵصٟËÂÛÜÊ›Ø Ù¬ÐçáÜá¡ÛñÒ É U‘БáÜÖÚÐçËÂɳè¤íµËÂǵÉëÛÜØµÛñËÂÛÜБáÜÛ¬ÐÑËÂÛÜÊ›Ø®Ê›Ô Ë嵂 É
\ Ô×ÊÌÍÂޮБáµÎ ÐçÍäБÞßÉÄËÂÉŸÍ Þ®Ð ]“ɳҋÛñËïÐ‘Ø Ð‘áÜÛ×БÒÃÊ›Ô ËÂÇµÉ Ù¬Ð‘áñá Î çÐ ÍäБÞßÉÄËÂɟͬé ê˜Ø®ËÂǵÛÜÒÃæÈЬì“í¯æ¹É ٬БخÛÜÞÀÎÚáÜɳÞßÉŸØ Ë
Ô×ֵصٟËÂÛÜʛصҹËÂÇÚÐçËÈÙ´ÇÚБصå›ÉÓËÂÇµÉ U‘БáÜֵɳÒòʛԡËÂǵɳ۲ͷ٬ÐçáÜáÎ ÐçäÍ Ð‘Þßɟ˝ɟÍÂÒ³é·ÉŸÍÉãÛÜÒòБØóÉGPµÐ‘ÞÀÎÚáÜÉÌé
void increment ( int & i )
{
++ i;
}
int main ()
{
int j = 5;
increment ( j );
std :: cout < < j < < "\ n" ; // outputs 6
return 0;
}
˜ê Ô ÐàÔ×ÊÌÍÂޮБá ÎÐÑÍäБÞßɟËÂÉÄÍ¹Ê›Ô ÐàÔ×ֵصٟËÂÛÜÊ›Ø Ç Ðçҹ͝ɳÔ×ɟÍÂɳصٳÉÏË ìôÎ ÉÌí¥æ¹ÉÓÇÚÐXU“É
ÒîÉ ´
±
¯
©
»
’
’
´
K
J
™
Ÿ
£
˜
Œ
‘
¶
³
Œ
Ÿ
£
³
Œ
š
Ÿ
±
Œ
ޮБدËÂÛÜÙ³Ò¤æ Ûñ˝ÇëÍÂɳÒîÎ ÉŸÙŸË ËÂÊ ËÂÇÚÐçË Î ÐçÍÂБÞßɟËÂɟͳé WôÖµÛVU‘БáÜɳدËÂáñì“íÑæ¹ÉïÒÂгìëËÂÇÚÐçË æ¹É
˝ÇÚÉ Î ÐçÍÂБÞßɟËÂɟÍ
¢
¯
©
³
Ž
Ž
_ôì®ÍÂɟÔ×ɟÍÂɳصٳÉÌé
ê˜ÔòËÂÇµÉ Ô×ÊÌÍÂޮБá‹Î ÐçÍÂБÞßɟËÂÉŸÍ ÛñҿصÊÌ˿ʛÔò͝ɳÔ×ɟÍÂÉ³ØµÙ³É Ë ì Î ÉÌíÃæ¹É ÇÚÐXU“É
ÒîÉ³Þ®Ð‘Ø ËÛÜÙ³Ò
Ä
±
¯
©
»
’
’
´
X
J
ô
D
¯
©
­
’
¡
”
Œ
æ¹ÉâÎ Ð‘ÒÒ ËÇÚÉãÎÐÑÍäБÞßɟËÂÉÄ
Í _ôì UÌÐçáÜÖµÉÌé ·ØµèµÉŸÍ Ù¬ÐçáÜá"_ ìžÍÂɳÔ×ÉÄÍÂɳصٳÉÌí ËÂǵÉàБèµè«ÍÂɳÒîÒ Ê›ÔR^˜ÊÌÍÓЏÍÂɟÔ×ɟÍÂɳصٳÉ
ËÂÊ `¿ËÇÚÉ Ù³Ð‘áÜáòÎ ÐçÍÂБÞßɟËÂÉŸÍ ÛÜÒÀֵҝɳè¼ËÂÊ ÛÜØµÛñËÂÛÜБáÜÛ ³ÉßËÂÇµÉ Ô×ÊÌÍÂÞ®ÐçáÈÎ ÐçÍäÐçÞßɟËÂÉŸÍ òÖµØÚèµÉŸÍ®Ù³Ð‘áÜá _ôì UÌÐçáÜÖµÉ
ҝɳޮÐçØ ËÂÛÜٟҳí¥ÛñËòÛÜÒïËÂÇµÉ U‘БáÜÖµÉÏÊ›Ô ËÂǵÉÏ٬БáÜá Î ÐçÍäБÞßÉÄËÂɟÍïËÂÇÚÐçËÈÛÜÒÈֵҝɳè Ô×ÊÌÍòÛÜØµÛñËÂÛ×БáñÛ ¬ÐçËÂÛñʛؾé
ÆÈǵL
É _ БҝÛñÙ ÍÂÖµáÜÉÀÛÜÒãËÂÊóΠБҝÒàОΠÐçÍäÐçÞßɟËÂÉŸÍ _ôìÝ͝ɳÔ×ɟÍÂɳصٳɮʛصáñì ÛÜÔ ËÂǵÉÀÔ×ֵصٟËÂÛÜÊ›Ø ÛÜØ WôֵɳҙËÂÛÜʛØ
Ð‘ÙŸËÖ ÐçáÜáñì¿ØµÉ³É³èµÒ‹ËÂÊàÙäÇÚБصå›É·ËÂǵɷٳБáÜá Î ÐçÍÂБÞßɟËÂɟ
Í U‘БáÜÖµÉÌé ê˜ÔËÂÇÚÐçˋÛÜÒ ØµÊÌˋËÂÇµÉ Ù³Ð‘ÒÉÌí¥Ù³Ð‘áÜaá _ôì U‘БáÜÖµÉòÛÜÒ
ÞßÊÌÍÂR
É QÚIÉ P«Û _ áñÉÌí›ÒÛÜØµÙ³ÉÈÛñËÕБáÜáÜʦæ ÒÃÐ á×Ðç͝å›ÉŸÍ‹ÙŸá×БҝÒÃʛÔÙ¬ÐçáÜá¥Î ÐçÍäБÞßɟ˝ɟÍÂÒ ^˜Vá U‘БáÜֵɳÒ
Í UÌБáñÖÚɟÒÕÛÜØµÒî˝ɬБè
“
©
š
F
Ê›Ô á UÌБáñÖÚɟÒòʛصáñì `Äé
4.2.3 Return by value and return by reference
ƹÇÚÉßÍÂÉÄËÂÖ«ÍÂØ Ë ì ΠɮʛԷÐóÔ×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘Ø _ É®ÐóÍÂɳÔ×ÉŸÍÉ³ØµÙ³É Ë ì Î É Ð‘Òëæ¹É³áÜá˜í ÛñØ æ·ÇÚÛñÙ´Ç Ù¬Ð‘ÒîÉ®æ¹É®ÇÚÐXU“É
ÒÉŸÞ®Ð‘Ø ËÂÛñÙ³Ò
^˜ÊÌËÂǵɟ͝æ·ÛÜҝÉÌíôæ¹É
`ÄéÃê˜Ô¡ËÂǵÉÏÔ×ÖµØÚÙÄËÂÛÜÊ›Ø ÍÉŸËÂÖ«ÍÂØµÒ
£³Œ¬Í–˜É³” Ô×£¬ÉŸš ÍÂɟ´ØÚK J ٟÉ̙£Ÿí Œ˜Ë¶‘ǵŒ³É£ŸŒ³Ôך Öµ±ŸØµŒ ٟËÂÛÜÊ›Ø Ù¬Ð‘áÜá IÉ PôÎÚ͝ɳҝҝÛÜÊ›Ø ÛñÒâÐ‘Ø £³á Ǔ¬Ð‘–˜” áñÖÚ£¬É š Ûñ˝ KҝJ ɳáÜDôÔºí©¯’•Б” صŒ è æ¹É Ù¬ÐçØÝֵҝÉÀÛñËÓæ ÇµÉŸÍÉ U“ÉŸÍ
Ðß
Vá U‘БáÜֵɳÒÈÐçÍÂÉãIÉ P¥ÎÉ³ÙŸËÂɳè¤é
ÆÈǵÛÜÒÕÞßɬБصÒÕËÇ ÐÑˋËÂǵɷÔ×ֵصٟËÂÛñʛØßÛñËÂҝɳáñԍÙäÇÚÊ Ê›ÒÉ³
Ò ^ _ôìÀֵҝÛñØÚåãÍÂɳÔ×ɟÍÂɟØÚÙŸÉ Ë ì Î É³Ò ÊÌÍ ØÚÊÌË ` æ·ÇÚÉÄËÂǵɟÍ
ÛñËÂÒ¤Ù¬ÐçáÜáÌÎ ÐçÍäБÞßɟ˝ɟÍÂҤБصèã͝ɟËÂÖ«ÍÂØ U‘БáÜÖµÉÃÐçÍÂÉÃVá U‘БáÜÖµÉ³Ò ÊÌÍ¾Í U‘БáÜֵɳҳé " ɳٟËÂÛÜÊ›Ø \ é é K ÐçØÚè " ɳٟËÂÛñÊ›Ø \ é \ é
èµÊôÙ³ÖµÞßÉ³Ø¯Ë ËÂǵɳҝɿÙäÇÚʛÛñٳɳÒÓÔ×ÊÌÍâÒîʛÞßÉàʛÔÕËÂÇµÉ ÊÌΠɟÍäÐÑËÂÊÌÍÂÒÓÊ›Ø Ô×ֵصèÚБÞßÉ³Ø ËÂБá Ë ìôΠɟҳí _ Ö«ËÏʛصáñì ØµÊÑæ
æ¹ÉÏÖÚØµèµÉŸÍÂҙËäБصèžËÂǵÉÏÞßɳÙäÇ ÐçØÚÛñÒÞ ËÂÇÚÐçËòޮР]“ɳҹҝֵÙäÇ Ù´ÇµÊ›ÛÜٟɳÒÈ΍ʛҝҝVÛ _ÚáÜÉÌé
Ò Ð·Ù³Ê›ØµÙŸÍÉŸËÂÉïIÉ P«Ð‘ÞÀÎÚáÜÉÌíÑáÜÉŸË ÖµÒ Ù³Ê›ØµÒÛÜèµÉŸÍ ËÂÇµÉ Ô×ʛáÜáÜʦæ ÛÜØµ
å U“ÉŸÍÂҝÛÜÊ›Ø Ê›Ô«ËÂÇµÉ Ô×ֵصٟËÂÛÜʛØ
ËÂÇÚÐçˏIÉ PµÐçٟËÂáñì ÞßÊôèµÉ³áÜÒë˝ÇÚÉ _ ɳÇÚXÐ U¥ÛÜÊÌ͏ʛԷËÂÇµÉ ÎÚÍÉ ºÛÜØµÙŸÍÉ³ÞßÉ³Ø ËÊÌΠɟÍÂÐçËÂÊÌÍ
ÛñË ÛñØÚÙÄÍÂincrement
ɳÞßɳدËÂҏ۲ËÂÒ
++
Vá U‘БáÜÖµÉ Î ÐçÍäБÞßɟ˝ɟÍòБصè ÍÂɟ˝ֵ͝ØÚÒòÛñËòБÒòБØóVá U‘БáÜÖµÉÌé
int & increment ( int & i )
{
\ return ++ i;
}
ê˜Ø å›É³ØµÉŸÍäБá»í¡æ¹ÉÀÞ¿ÖµÒîËâޮР]“ɏҝ֫ÍÂɏËÂÇÚÐçËàÐ‘Ø ÉIP¥ÎµÍÂɳÒîҝÛÜÊ›Ø Ê›Ô ÍÂɳÔ×ɟ͝ɳصٳÉÀË ìôÎ É¿ËÂÇÚÐçËâæ¹É¿ÍÂɟËÂÖ«ÍÂØ
ÍÂɳÔ×ÉÄÍÂҿ˝ʽÐ
Ê _ ɳÙÄË¬é Æ Ê ÖÚØµèµÉŸÍÂҙËäÐ‘Øµè æ·ÇÚÐç˿ОËÂɳÞÀÎ ÊÌÍÂÐç͝ì½Ê _ É³ÙŸË ÛñÒ³í áÜÉŸË ÖµÒ
š
›

š
™

–
³
Œ

¨

¢
›

Ÿ
£
“
©
K
£
J
ٳʛصҝÛÜèµÉŸÍÈËÂǵÉÏÔ×ʛáÜáÜʦæ ÛÜØµåàÔ×ֵصٟËÂÛÜʛؤé
int & foo ( int i)
{
return i ;
}
Æ ÇÚÛñÒÀÛÜÒßБÒN]¥ÛÜØµåÝÔ×ÊÌÍß˝͝ʛÖa_ÚáÜɑíïҝÛÜØµÙ³ÉóËÂǵÉóÔ×ÊÌÍÂÞ®ÐçáÈÎ ÐçÍäÐçÞßɟËÂɟÍ
¹
͝ÖÚØµÒßʛ֫ËÀʛÔÓҝٟÊÌÎ Éóæ ÇµÉ³Ø ËÂǵÉ
i
Ô×ֵصٟËÂÛÜʛØàÙ¬ÐçáÜá ËÂÉÄÍÂÞßÛÜØÚÐçËÂÉ³ÒŸé Æ¹ÇµÛÜÒ ÞßɬÐçØÚÒ¾ËÂÇÚÐçË ËÂǵÉïÐçҝҝÊôٟÛ×ÐçËÂɳèàÞßɟÞßÊÌ͝ìÓÛÜÒ ÔÜÍÂɟɳè ÐçØÚèàËÂǵÉïÐçèÚè«ÍÂɟҝÒ
ÉIPôÎ Û²ÍÂÉ³Ò ^˜ÒÉ³É " ɳٟËÂÛÜÊ›Ø \ é é `´é ê˜Ô æ¹ÉãØµÊ¦æ æ·ÍÂÛñ˝ÉÏÔ×ÊÌÍòIÉ P«Ð‘ÞÀÎÚáÜÉ
int i = 3;
int & j = foo (i );
// j refers to expired object
std :: cout < < j < < "\n" ; // undefined behavior
ËÂǵÉÓÍÂɳÔ×ɟÍÂɟØÚÙŸÉ ÍÂɟÔ×ɟÍÂÒò˝ÊÀБØóÉGP¥ÎÚÛñÍÂɳè Ê _ ɳÙÄˬíÚБصè ËÂǵÉÓÍÂɳҝֵáñËÂÛñØÚå _ ÉŸÇ ÐXUôÛÜÊÌÍÈÊ›Ô ËÂǵÉÏεÍÂʛåÌÍÂÐ‘Þ ÛÜÒ
ֵصèÚIÉ Y صɳè¤é j
Reference Guideline:
S¼ÇµÉ³ØµÉ U“ÉŸÍ ì“Ê›ÖóÙÄÍÂɬÐçËÂÉâБØóÐçáÜÛ×БҹÔ×ÊÌͷБØóÊ _ ™ÉŸÙŸË¬í«É³ØµÒÖ«ÍÂÉÏËÂÇÚÐçËò˝ÇÚÉÏÊ _ ™ÉŸÙŸË
èµÊôɳÒÈØµÊÌË·ÉGP¥ÎÚÛñÍÂÉ
_ ɳÔ×ÊÌÍÂÉÏËÂǵÉâÐçáÜÛ×БҴé
ÛÜØµå«é
ÆÈǵÉòٳʛÞÀÎÚÛÜáÜÉŸÍ ÖµÒÖÚБáÜá²ì ØÚÊÌ˝ÛÜٳɳÒU¥ÛÜʛáÜÐçËÂÛÜÊ›ØµÒ Ê›ÔËÂǵÉ
ɳÔ×ÉÄÍÂɳصٳÉ
ÖµÛÜèµÉ³áñÛÜØµÉ¹Ð‘صèÀÛÜҝҝֵɳҋÐÓæÈÐÑÍÂØ
4.2.4 More user-defined operators
ɟË! ÒÃå›ÉÄË_ Б٠]àËÂÊÓËÂǵÉÈБèµèµÛñËÂÛÜʛؿБҝÒîÛÜ囨µÞßÉ³Ø Ë ÊÌ΍ɟÍäÐçËÂÊÌÍ
Rational numbers: addition assignment.
Ô×ÊÌÍëʛ֫ÍãØµÉŸæ Òî˝ÍÂֵٟË
é ê˜Ø ÊÌÍÂèµÉŸÍÏËÂÊ Y P ʛֵÍãԪБÛÜáñɳèÝÐçËîËÂɳÞÀεËÏÔÜÍÂÊ›Þ ËÇÚÉ_ ɳå›ÛñØÚصÛÜØµå ʛÔ
rational
ËÂǵÛÜҹҝɳÙÄËÂÛÜÊ›Ø¤í«æ¹ÉãØµÉ³É³èóËÊ Ð‘èµèžË æ¹ÊÙ´ÇÚÐçÍÂБٟËÂɟ͝Òòʛصáñì“é
Ò·ÛñØóËÂǵÉãεÍÂÉ UôÛÜʛֵҷÔ×ֵصٟËÂÛÜʛØ
íÚËÂǵÉâÔ×ÊÌÍÂޮБá Î ÐçÍäÐçÞßɟËÂÉŸÍ Þ¿ÖµÒîË_ÉâΠБҝҝɳè ÐçÒ Ð
increment
ÍÂɳÔ×ÉÄÍÂɳصٳÉÌíБصèžËÂ
Ê _ ÉâٳʛÞÀÎÚáÜÛÜÐ‘Ø Ë æ·ÛñËÂÇ®ËÂǵÉãֵҝÖÚБá¾ÒÉ³Þ®ÐçØ ËÂÛÜٟÒÈÊ›Ô í«æ¹ÉãaБáÜÒÊ ÍÂɟ˝ֵ͝؞ËÂǵÉãÍÂɟҝֵáñË
+=
БÒòР͝ɳÔ×ɟÍÂɳصٳÉ
// POST : b has been added to a ; return value is the new value of a
rational & operator += ( rational & a , rational b)
{
a .n = a. n * b.d + a. d * b.n ;
a .d *= b .d;
return a ;
}
Æ ÇµÉÕÊÌËÂÇµÉŸÍ Ðç͝ÛñËÂǵÞßɟËÂÛÜÙ ÐçҝҝÛÜ囨µÞßɳدˤÊÌΠɟÍäÐç˝ÊÌÍÂÒ Ðç͝ÉÕҝÛñÞßÛÜá×Ðçͬí¦ÐçØÚèëæ¹ÉÃèµÊ›Ø Ë¡áÜÛÜÒî˾ËÂÇµÉ³Þ ÇÚÉÄÍÂɋÉIP È
ÎÚáÜÛÜÙ³Û²ËÂáñì“顯 ʛå›ÉŸËÂÇµÉŸÍ æ Û²ËÂǿ˝ÇÚÉÈÐç͝ÛñËÂǵÞßɟËÂÛÜًБصèÍÂɟá×ÐçËÂÛÜʛØÚБáôÊÌΠɟÍäÐç˝ÊÌÍÂÒ èÚÛñҝٳֵҝҝɳè ÛÜØ " ɟٟËÂÛÜÊ›Ø é é í
æ¹ÉÏØÚʦæ ÇÚKÐ U“ÉâÐàÖÚÒîɳÔ×Öµá ҝɟËòÊ›Ô ÊÌÎ ÉÄÍäÐçËÂÛÜʛصÒïʛ؞ÍÂÐçËÂÛÜʛØÚÐ‘á Ø ÖÚÞ_ ɟ͝ҳé
\ \
ÉŸËžÖµÒ áÜÊôÊ ] ÐçË
͝ʛåÌÍäБÞ
Ê›ØµÙ³É ÞßÊÌÍÂÉÌí·æ·ÛñËÂÇ ËÇÚÉ
Rational numbers: input and output.
Ô×ֵصٟËÂÛÜʛخØÚБÞßÉ
ÍÂÉÄÎ áÜБٳɳè _ôì
БصèÀËÂÇµÉ ×Ô ÖµØµÙŸËÂÛÜʛØßٳБáÜá
ÍÂɟÎÚá×Бٳɟè_ ì
add
operator+
add (r, s)
é " ËÂÛÜáÜá»íôæ¹ÉãٳБØóÒîÎ ÊÌËÈÎ ÊÌËÂÉŸØ ËÂÛ×Ðçá ÛÜÞÀεÍÂÊ U“ÉŸÞßÉ³Ø ËÂÒ ÜÛ ØµÒîËÂɬÐçèžÊ›Ô æòÍÂÛñËÂÛÜØµå
r + s
std :: cout < < " Sum is " < < t.n < < "/" < < t.d < < "\n" ;
ÛÜØ áÜÛÜØµÉ íµæ¹É è ÍÂÐçËÂǵɟÍÈæ·ÍÂÛñ˝É
std :: cout < < " Sum is " < < t < < "\ n";
µÖ ÒîËÈáÜÛV]“É æ¹ÉâÐÑÍÂÉÓèÚʛÛñØÚå ÛñËÈÔ×ÊÌÍòÔ×ÖµØÚèÚБÞßÉŸØ ËäБá Ë ì Πɳҳé ÔÜËÂÉÄÍ·ÐçáÜá˜íôæ¹É æÈБدËÈ˝ʿËÂǵÛÜØ ]®Ê›Ô¡Ð ÍÂÐçËÂÛÜʛØÚБá
ØôÖµÞ_ ɟÍòБÒòпÒîÛÜØµå›áÜÉUÌБáñÖÚÉÏÔÜÍÂÊ›Þ ËÂǵÉãÒîÉŸË ÐçØÚèžØÚÊÌËòÐ‘Ò¹Ë æ¹Ê U‘БáÜֵɳÒÈÔÜÍÂÊ›Þ ËÂǵÉâÒÉŸË é
[ ÍÂÊ›Þ æ ÇÚÐçËòæ¹ÉëÇÚXÐ U“ÉëèµÊ›ØÚÉëÐ _ ÊU“ÉÌíì“Ê›Ö Ù¬Ð‘Ø å›ÖµÉ³ÒÒ·ËÇ ÐÑË Ð‘áÜá¾æ¹ÉëÇÚÐXU“ÉâËÂÊßèµÊÀÛÜҷ˝ÊßÊ U“ɟ͝áÜʓБè
ËÂÇµÉ Ê›ÖµËîΠ֫ˏÊÌΠɟÍäÐÑËÂÊÌÍ
éœê˜Ø èÚÛñҝٳֵҝҝÛÜØµå ËÂǵɞʛ֫˝ÎÚÖ«Ë¿ÊÌΠɟÍäÐç˝ÊÌÍ ÛÜØ " ɳٟËÂÛÜÊ›Ø \ é é K æ¹ÉžÇÚÐXU“É
<<
ÐçÍÂå›ÖµÉ³è ËÂÇÚÐçËòËÂǵÉëʛ֫˝ÎÚÖ«Ë Òî˝͝ɬБÞðΠБÒîҝɳè ËÂÊßБصè ÍÂɟËÂÖ«ÍÂØµÉ³è _ ìžËÂǵÉëʛ֫˝ÎÚÖ«Ë ÊÌÎ ÉÄÍäÐçËÂÊÌͷޏֵÒîË_ É
БØóá UÌБáñÖÚɑíÚÒîÛÜØµÙ³ÉÏ˝ÇÚÉãʛ֫˝ÎÚÖµËòÊÌΠɟÍÂÐçËÂÊÌÍÈÞßÊôèµVÛ YÚɳÒïËÂǵÉÏÒî˝ÍÂɬÐçÞ é XÐ UôÛÜØµåÍÂɳÔ×ÉÄÍÂɳصٳÉâË ìôÎÉ³Ò ÐçËòʛ֫Í
èµÛÜÒîΠʛҝБá˜íµËÂǵÛÜÒ Ù¬Ð‘Ø É¬ÐçҝÛÜáñì _ ÉëèµÊ›ØµÉ Èæ¹ÉàÒîÛÜÞÀÎÚáñì®ÎÐçÒÒ Ð‘Øµè ÍÂɟËÂÖ«ÍÂØ ËÂǵÉàʛ֫˝ÎÚÖ«Ë ÒîËÍÉ¬Ð‘Þ ^»æ·ÇµÊ›ÒÉ
Ë ìôÎ ÉÏÛÜÒ
`¹Ð‘ÒòÐ ÍÂɟÔ×ɟÍÂɳصٳÉ
std::ostream
// POST : a has been written to o
std :: ostream & operator < < ( std :: ostream & o , rational r)
{
return o < < r.n < < " /" < < r .d;
}
Æ ÇµÉŸÍÉ ÛÜÒ ØµÊ ÍÂÉ¬Ð‘ÒÊ›Ø ËÂÊ ÒîËÂÊÌΜÇÚÉÄÍÂÉ ®Ô×ÊÌÍ ËÂÇµÉ ÛñصÎÚÖ«Ë¬í æ¹Éßæ¹Ê›ÖµáÜè ÛñØ ËÂǵɮÒÂБÞßÉßÔªÐçҝǵÛÜʛ؜áÜÛ ]“É
È
ËÂÊ ÍÂɟÎÚá×БٳɿËÂÇµÉ¿Ë æ¹ÊóÛñصÎÚÖ«ËÏÒîËäÐç˝ɳÞßÉ³Ø ËÒ
Бصè
_ôì ËÂǵÉ
std::cin >> r.n;
std::cin >> r.d;
ҝÛÜØµå›áÜÉÓÒîËÂÐçËÂɳÞßɳدË
std :: cin > > r;
^ºÐ‘صèóËÂǵÉëҝБÞßÉâÔ×ÊÌÍ ËÇÚÉâÛÜØ«Î Ö«Ë·Ê›Ô `Äé ·å“БÛÜØ¤íÚæ¹ÉâØÚɟɳè ËÂÊ Î Ð‘ÒÒÓБصèóÍÂÉÄËÂÖ«ÍÂØ ËÂǵÉëÛÜØ«ÎÚÖµËòÒî˝͝ɬБÞ
^˜Ê›ÔÃË ì Î É
` БÒÏЮ͝ɳsÔ×ɟÍÂɳصٳɑé ê˜Ø БèµèÚÛ²ËÂÛÜÊ›Ø¤íæ¹É¿ÞÖµÒîË Î Ð‘ÒÒÓËÂǵÉàÍäÐçËÂÛñÊ›Ø Ðçá ØôÖµÞ_ ɟÍ
Ó
ËÂÇÚÐç˹æ¹ÉãæÈstd::istream
ÐçØ Ë¹ËÂʏ͝ɬБè БÒòÐàÍÂɳÔ×ɟÍÂɟØÚٟÉÌíҝÛñØÚٟÉÏËÂǵÉÏÛÜØ«ÎÚÖµËÈÊÌÎ ÉÄÍäÐçËÂÊÌÍÈÇÚБҹËÂÊ ÞßÊ èÚÛñÔÜìßÛñËÂÒ ÌU ÐçáÜÖµÉÌé
ÆÈÇµÉ ÊÌΠɟÍäÐç˝ÊÌÍ µY ÍÂÒîË¿ÍÂɬÐçèÚÒ¿ËÂÇµÉžØ ÖÚÞßÉÄÍäÐçËÂÊÌÍ¿ÔÜÍÂÊ›Þ ËÂǵɞÒîËîÍÂÉ¬Ð‘Þ íÕÔ×ʛáÜáÜʦæ¹É³è_ ì РҝɟΠÐçÍäÐÑËÂÛÜØµå
ÙäÇÚÐçÍäБٟ˝ɟͬíÐçØÚè ÚY ØÚБáÜá²ì ˝ÇÚÉãèµÉ³ØµÊ›ÞßÛÜØÚÐçËÂÊÌÍ¬é‹ÆÈÇ ÖÚÒŸí æ¹ÉëÙ¬ÐçØ ÍÉ¬Ð‘è пÍÂÐçËÂÛÜʛØÚÐ‘á¤ØôÖµÞ_ ɟͷÛÜØ ʛصÉâå›Ê
_ôì ɳدËÂɟÍÂÛñØÚåÔ×ÊÌÍ ÉI«
P БÞÀÎÚáÜÉ
é
1/2
// POST : r has been read from i
// PRE : i starts with a rational number of the form " n /d"
std :: istream & operator > > ( std :: istream & i , rational & r)
{
char c ; // separating character , e .g . ’/ ’
return i > > r.n > > c > > r.d ;
}
˜ê ؞ٳʛد˝ÍäБҙËïËÂÊ
í¥ËÂǵÛÜØµå›ÒïÙ¬Ð‘Ø å›Ê æ·ÍÂʛصå«íôɑé å«éñíôÛÜԾ˝ÇÚÉ ÖµÒÉÄͷɳدËÂɟ͝ҹ˝ÇÚÉÓÙäÇÚÐçÍäБÙÄËÂɟÍ
operator<<
ҝÉXW ÖµÉ³ØµÙ³É æ ǵɳخÎÚ͝ʛÞÀÎÚ˝ɳè®Ô×ÊÌÍ ÐâÍäÐÑËÂÛÜʛØÚÐ‘áØ ÖµÞb_ ÉÄͬé áÜҝʫíôæ¹É εÍÂÊ _ Ð _Úáñì èÚÊ›Ø ËïæÈÐ‘Ø ËïËÂÊ
A/B
БٳٟɟεË
БÒÏÐßÍÂÐçËÂÛÜʛØÚÐ‘á¡ØôÖµÞb_ÉŸÍÏБÒÓʛ֫ÍãÛñصÎÚÖ«ËÓÊÌΠɟÍÂÐçËÂÊÌÍÓèµÊôɳҟéàÆÈǵɟ͝ɏÐÑÍÂÉ ÞßɳÙäÇ ÐçØÚÛñҝÞßÒòËÂÊ
èµÉ¬Ð‘á æ Û²3.4
ËÂǞҝֵÙäÇ ÛÜҝÒîÖÚɟҳí _ Ö«ËÈæ¹ÉÏæ¹Ê›
Ø ËòèµÛÜÒîٳֵҝÒÈ˝ÇÚɟÞðǵɟÍÂɑé
\ ÄÉ ËâÖµÒâٟʛØÚٟáÜÖµèÚÉ ËÂǵÛÜÒÏҝɳٟ˝ÛÜÊ›Ø æ Û²ËÂÇ Ð _ ɬÐçֵ˝ÛVYÚɳè U“ɟ͝ҝÛÜʛØÝÊ›Ô ÍÂʛåÌÍäÐçÞ éS¼Ç ÐÑËâޮР]“ÉŸÒ
ËÂǵÛÜÒU“ÉŸÍÂҝÛÜÊ›Ø®É U“ÉŸØ صÛÜٟɟÍïÛÜÒÃËÂÇµÉ ÔªÐ‘ÙŸË ËÇ ÐÑˋÛÜØÀ˝ÇÚÉ
Ô×ֵصٟËÂÛÜʛؤí“ËÂÇµÉ ØµÉŸæ Ë ì Î É ÛÜÒÕÖÚÒîɳè®ÉIPµÐ‘ÙÄËÂáñì
main
áÜÛV]“ÉÏÐ‘Ø ÐçËÂʛÞßÛÜÙ àÔ×ֵصèÚБÞßɳدËäБáË ìôÎ ÉÏҝֵÙäÇ Ð‘Ò
é
ê˜ØÝËÂǵɏҙΠ۲ÍÂÛñËÏÊ›Ô " ɳٟ˝ÛÜÊ›Ø é é Ê›Ø ÞßÊôèµÖµá×Ðçint
ÍÂÛ³ÐçËÂÛÜÊ›Ø¤í æ¹ÉÐ‘ÙŸËÖ ÐçáÜáñì ÒîÎÚáÜÛ²ËÏ˝ÇÚɿεÍÂʛåÌÍäÐ‘Þ ÛÜØ¯ËÂÊ
ËÂÇÚÐçË ÙŸÊ›Ø ËäБÛñØÚÒòËÂǵÉàèÚIÉ Y صÛñ˝ÛÜʛØóÊ›Ô ËÂǵÉàÒî˝ÍÂÖµÙÄË
í¤ÐçáÜʛصå
ËÂÇ«ÍÂɳZ
É YÚáÜÉŸÒ ·ÐbY áñÉ
rational.h
rational
æ Û²ËÂÇ èµÉ³Ù³áÜÐçÍäÐçËÂÛñʛØÚÒ Ê›ÔËÂǵÉòÊ U“ɟ͝áÜʓБèµÉ³èÀÊÌÎ ÉÄÍäÐçËÂÊÌÍÂÒ ô
Ð Y áñÉ
ËÂÇÚÐçËÕÙ³Ê›Ø ËÂБÛÜØµÒÃ˝ÇÚÉòèµÉ YÚØÚÛ rational.C
ËÂÛÜÊ›ØµÒ¹Ê›Ô ËÂǵɳÒîÉâÊÌΠɟÍÂÐçËÂÊÌÍÂÒ YÚØÚБáÜáñì“í¥
Ð YÚáÜÉ
ËÂÇÚÐçËÈٳʛدËäБÛÜØµÒ¹ËÂǵÉâޮБÛñخεÍÂʛåÌÍÂÐ‘Þ é
userational2.C
ïË ËÂÇµÉ ÒÐ‘ÞßÉÃ˝ÛÜÞßÉÌí¦æ¹ÉÕÎÚÖ«Ë Ê›Ö«Í ØµÉŸæ Ë ì Î É
БصèëËÂÇµÉ ÊÌ΍ɟÍäÐçËÂÛñʛØÚҾʛØàÛñË ÛÜØ ËÂÊòØÚБÞßɳÒîΠБٳÉ
ÛÜØóÊÌÍÂèµÉŸÍ·ËÂÊÀXÐ U“Ê›ÛÜèóΠʛÒîҝVÛ _ÚáÜÉÏØ ÐçÞßÉÏٟá×Бrational
ҝǵɳҳé P«ÉŸÍÂٟÛÜҝÉ
Ð‘Ò ]ôÒ·ì“Ê›ÖóËÂÊßБÙÄËÂÖÚБáÜáñì®ÛÜØ¯ËÂɳåÌÍäÐÑËÂÉ
ifm
??
ËÂǵÉâØµÉŸæ ÍäÐç˝ÛÜʛØÚÐ‘á ØôÖµ
Þ _ ɟÍÈË ì Î ÉâÛñØ ËÂÊ¿ËÂǵÉâÞ®ÐçËÂÇ áÜVÛ _µÍäÐçÍîì ËÇ ÐÑËòì“Ê›Ö ÇÚXÐ U“É _ÚÖµÛÜáñËÈÛÜØ P«ÉŸÍÙ³ÛÜÒÉ í
ҝʿËÂÇÚÐçË ÍÂʛåÌÍäÐçÞ _ ɳáÜʦæ Ù¬Ð‘Ø _ ÉãٟʛÞÀÎ ÛñáÜɳè®ÖµÒÛÜØµåËÂǵÛÜÒ¹áÜÛ _ÚÍÂÐç͝ì“é
// Program : userational2.C
// Add two rational numbers .
# include < iostream >
# include " rational .C "
int main ()
{
// input
std :: cout < < " Rational number r :\ n";
rational r;
std :: cin > > r;
std :: cout < < " Rational number s :\ n";
rational s;
std :: cin > > s;
// computation and output
std :: cout < < " Sum is " < < r + s < < " .\ n" ;
return 0;
}
Program 33: ¢¤£³ŸÁ“Ž ”Ž‘Œ³£Ä©¯–˜—î›š ©¯’ Å
// Program : rational .h
// Define a type for rational numbers , and declare
// operations on it .
# include < iostream >
M"@.6#9"K(P
#*.*6N7
*C7
A*
"
BIE$:#*
/
%M$&SB
)2 Q*C$&K
A'(%6#(
K*
(6#
"
%*TF/
$
5*E$7
I
.*
operator+
%*
/ %**'"
7
-*
/
M.P0J
.#*
*
r + s
/1J
.*!#6%"
. :2
,)$& 7
%*
J
#A"
*T
%I
+.*
\ namespace ifm {
// the new type rational
struct rational {
int n ;
int d ; // INV : d != 0
};
// POST : return value is the sum of a and b
rational operator + ( rational a , rational b );
// POST : a has been written to o
std :: ostream & operator < < ( std :: ostream & o , rational a );
// POST : a has been read from i
// PRE : i starts with a rational number of the form " n /d"
std :: istream & operator > > ( std :: istream & i , rational & a );
}
Program 34: ¢¤£³ŸÁ›Ž £Ÿ©¯–˜—î›š ©¯’×Å׊
// Program : rational .C
// Define a type rational and operations on it
// the new type rational
struct rational {
int n;
int d ; // INV : d != 0
};
// POST : return value is the sum of a and b
rational operator + ( rational a , rational b )
{
rational result ;
result . n = a.n * b .d + a.d * b.n;
result . d = a.d * b .d;
return result ;
}
// POST : b has been added to a ; return value is the new value of a
rational & operator += ( rational & a , rational b ) {
a.n = a .n * b.d + a.d * b. n;
a.d *= b.d;
return a;
\ }
// POST : a has been written to o
std :: ostream & operator < < ( std :: ostream & o , rational a )
{
return o < < a.n < < "/" < < a.d ;
}
// POST : a has been read from i
// PRE : i starts with a rational number of the form " n/d "
std :: istream & operator > > ( std :: istream & i , rational & a)
{
char c ; // separating character , e.g . ’/ ’
return i > > a.n > > c > > a. d;
}
Program 35: ¢¤£³ÄÁ“Ž £Ÿ©¯–˜—™›š ©¯’ªÅ
·ÉŸÍÂÉãÛÜÒÈБØóÉIP«Ð‘ÞÀÎÚáÜÉ ÍÂÖµØóʛԡ˝ÇÚÉÓεÍÂʛåÌÍäÐ‘Þ é
Rational number r:
1/2
Rational number s:
1/3
Sum is 5/6.
4.2.5 Const-types
ɟËÏÖÚÒÓٳʛÞßÉZ_ Б٠] ËÂÊ®ËÂǵɿБèµèµÛñËÂÛÜÊ›Ø ÊÌÎ ÉÄÍäÐçËÂÊÌÍÓÔ×ÊÌÍÓÍäÐç˝ÛÜʛØÚÐ‘á ØôÖµÞ_ ɟÍÂÒ ÔÜÍÊ›Þ ÍÂʛåÌÍäÐçÞ é á ËÂǵʛֵå›Ç ˝ÇÚÛñÒàÊÌΠɟÍäÐç˝ÊÌÍ èÚÊ É³Ò
ÛñØ ËÂɳصè ËÂÊ Ù´ÇÚБصå›ÉßËÂǵÉLU‘БáÜÖµÉ³Ò Ê›ÔòÛ²ËÂÒ Ù¬Ð‘áÜá‹Î ÐçÍÂБÞßɟËÂɟ͝ҳí ËÂǵÉ
š
“

–
É Ù³ÛÜɳصٟìÔªÐ‘ØÚÐçËÂÛÜÙ¹ÛÜØì“Ê›ÖÀÞßÛÜå›Ç Ë ÒîÖÚå›å›ÉŸÒîËÕ˝ÊâÒîΠɟɳèßÖ«ÎÀËÂǵÛÜÒ ÊÌΠɟÍäÐÑËÂÊÌÍ _ ì¿ÖÚÒîÛÜØµåãÍÂɳÔ×ÉÄÍÂÉ³ØµÙ³É·Ë ìô΍ɳÒ
БدìôæÈгì
// POST : return value is the sum of a and b
rational operator + ( rational & a , rational & b )
{
rational result ;
result .n = a .n * b.d + a.d * b. n;
result .d = a .d * b.d ;
return result ;
}
ê˜ØµèµÉ³É³è¤í‹ËÂǵÛÜÒ U“ÉŸÍÂÒîÛÜÊ›Ø ÛÜÒ¿Ù³ÊÌ͝ÍÂɟٟËÀÐçØÚè Î ÊÌËÂɳدËÂÛ×БáÜá²ìÝԪБÒîËÉŸÍ ËÂÇÚÐ‘Ø ËÂÇµÉ ÎµÍÂÉ UôÛÜÊ›ÖµÒ Ê›ØÚɑí ҝÛÜØµÙ³É®ËÂǵÉ
ÛÜØµÛñËÂÛÜБáÜÛ¬ÐÑËÂÛÜʛØâʛԍÐÏÔ×ÊÌÍÂÞ®Ðçá¥ÎÐÑÍäБÞßɟËÂÉÄÍ ÛÜÒÕèµÊ›ØµÉ _ôì¿Ù³ÊÌÎôìôÛÜØµå ÖµÒîË
ÐçèÚè«ÍÂɟҝҳí“ÍäÐçËÂǵɟÍÃËÂÇÚБØ
›

š
Œ
UÌÐçáÜÖµÉ³Ò Ð‘Ò¡ÛÜØëËÂǵɋÞßɳ
Þ _ ÉŸÍ ˜æ ÛñÒÉ Ù³ÊÌÎôìãËÂÇÚÐçË ËäÐ ]“É³Ò ÎÚá×БٳÉÃֵصèÚÉÄÍ ËÂǵɋ٬ÐçáÜá _ ì UÌБáñÖÚÉÕҝɳޮБدË–˜ÛܸÓ
ٳҟ é
int
U“ÉŸØ ÛñÔ¡ËÂǵÉÏÒÂXÐ U¥ÛÜØµå ÛñÒòҝޮÐçáÜá ÛÜØ ˝ÇÚÛñÒòIÉ P«Ð‘ÞÀÎÚáÜÉÌíôì“Ê›Ö ٳБØóÛÜޮБå›ÛñØÚÉòËÂÇÚÐçË·ÞßɟÞb_ ÉÄ͘æ·ÛÜÒÉ Ù³ÊÌÎ ì
Ù¬Ð‘Ø _ ÉàεÍÂÉŸËË ì GÉ P¥Î É³ØµÒÛ U“É¿ÛñؽÒîËîÍÂֵٟËÂÒ ËÂÇÚÐçËÓÐç͝ɿÞßÊÌ͝Éëɳá×Ð _ÊÌÍäÐçËÂÉâËÇ ÐçØ
¤ÛÜØ Ù³Ê›Ø ËÍÂБÒîˬí
rational
\ ٬Бáñá _ ì®ÍÂɳÔ×ɟÍÂɟØÚٟÉëÛÜÒÈԪБÒîËòÔ×ÊÌÍ
Ë ì ΠɳҳíµÉ U“ÉŸØóËÂǵÉãÞßʛÒîËÈٳʛÞÀÎÚáÜÛñÙ¬ÐçËÂɳè®Ê›ØµÉ³Ò³é
¯
©
»
’
’
·ØµÔ×ÊÌ͝ËÂÖµØÚÐçËÂɳá²ì“í‹ËÂǵÉó٬БáñáÈÎ ÐçÍäÐçÞßɟËÂɟÍÂÒ¿Þ¿ÖÚÒ™Ë _ Éóá UÌБáñÖÚÉŸÒ ÖµØµèÚÉÄÍÀ٬Бáñá_ôì ÍÂɳÔ×ɟ͝ɳصٳÉÌíÈҝÊÝæ¹É
٬Б
Ø Ëïæ·ÍÂÛñ˝ɷËÂÇµÉ IÉ P¥ÎµÍÂɟҝҝÛÜʛØ
í¥Ô×ÊÌÍÈÉIP«Ð‘ÞÀÎÚáÜÉÌí¯É U“ɳØóÛÜÔ
ÐçÍÂÉU‘ÐçÍÂÛ×Ð _ áñÉ³Ò Ê›Ô¤Ë ì Î É
^»æ·Ç ì `Äé " ˝ÛÜáÜá˜íËÂǵaÉ¿+ԪБÒîbËÂÉÄ+Í U“cɟ͝ҝÛÜʛØÝÞßÛÜå›Ç¯Ë æ¹ÊÌÍ ] ÛÜØ½Ê›a,
ÖµÍâb,
ÐçεÎÚcáÜÛÜÙ¬ÐÑËÂÛÜÊ›Ø ÛñËÏèµÊôɳÒÏÒÊ ÛÜØ
rational
ÍÂʛåÌÍäÐ‘Þ í Ô×ÊÌ͹IÉ PµÐçÞÀÎ áñÉÌí ÒîÛÜØµÙ³É ÛÜØßËÂǵÛÜҋεÍÂʛåÌÍÂÐ‘Þ í›æ¹É ٬БáÜá
æ·ÛñËÂÇßVá U‘БáÜֵɷÊÌ΍ɟÍäБصèµÒ
operator+
ʛصáñì“é
صɏáÜɳҝÒÏÊ _ UôÛÜʛֵb
Ò ^˜Ð‘صèÝޏֵÙäÇ ÞßÊÌ͝Éàè ÐçØÚå›ÉÄÍÂÊ›ÖµÒ ` εÍÂÊ _ÚáÜÉŸÞ ÍÂɳޮБÛÜØµÒ³íËÇÚʛֵå›Ç ÓÛÜØ½Î БÒîҝÛÜØµå
ËÂÇµÉ Î ÐçÍäБÞßɟ˝ɟÍÂҮБҮÍÂɳÔ×ÉŸÍÉ³ØµÙ³É³Ò³í æ¹É
ËÂÇµÉ ÊÌΠɟÍäÐç˝ÊÌÍßËÂÊ ÙäÇÚБصå›É ËÂÇµÉ U‘БáÜֵɳҮʛÔãÛñËÂҮ٬БáÜá
Î ÐçÍäБÞßÉÄËÂɟÍÂÒ ÛñØ ËÂǵ
É YµÍÂÒîËïÎÚá×ÐçÙ³ÉÌí¥É U“ÉŸØžÛÜ©¯Ô ’»Ë’ªÇڐ›¸ Ðç˹ÇÚÐçεΠɳصÒïֵصÛÜØ ËÉ³Ø ËÂÛñÊ›Ø ÐçáÜáñì“é¡ê˜ØžÔ×ֵصٟËÂÛÜʛصҋËÂÇÚÐçËÈÐÑÍÂÉ
á×Ðç͝å›ÉŸÍ ËÂÇÚÐ‘Ø ËÂÇµÉ Ð _ Ê U“É
íÛñË Ù³Ð‘Ø É¬Ð‘ÒÛÜá²ìóÇÚÐçÎµÎ É³Ø ËÂÇÚÐçË æ¹ÉàÞßÊ èµÛÜÔÜì ҝʛÞßÉëÊ›Ô ËÂǵÉà٬БáÜá
operator+
Î ÐçÍäБÞßÉÄËÂɟÍÂҹҝÛÜÞÀÎÚáñì _ôì ÞßÛÜÒîËäÐ ]“ÉÌé
O ÊÌË Þ®Ð ]ôÛÜØµå ҝֵÙäÇ ÞßÛñÒîËäÐ ]“ɳÒòÛÜÒ ËÂǵÉâεÍÂÛÜÞßÉÏÍÂɳÒî΍ʛØÚÒîVÛ _ÚÛÜáÜÛñË ì Ê›Ô ËÂǵÉëÎÚ͝ʛåÌÍäБÞßÞßɟͬíµÊ›Ô ٳʛ֫ÍÂҝɑí
_ÚÖ«Ë·ËÂǵÉâٟáÜÉ U“ÉŸÍ εÍÂʛåÌÍÂБÞßÞßɟ͹٬БáñáÜÒÈ˝ÇÚÉãÎÚ͝ʛåÌÍäБÞßÞßÛÜØµåàá×Бصå›ÖÚБå›ÉÓÔ×ÊÌÍ ÇµÉ³áñÎ æ·ÇµÉ³ØµÉ U“ÉŸÍ ΠʛÒîҝVÛ _ÚáÜÉÌé
ê˜Ø ˝ÇÚÛñÒïÒîÎÚÛñÍÂÛñˬí¯ËÂǵÉÏÐ _ Ê U“
É îÉ Ù³ÛÜɟØÚÙÄì Y P¿Ô×ÊÌÍ
ÛñҹР_ Бè ÞßÊ U“É‘í¥ÒÛÜØµÙ³ÉÓÛñ˹ÛÜØ¯ËÍÂÊ èÚֵٳɟÒ
operator+
Ð ØÚÉÄæ ΍ʛҝҝVÛ _ÚáÜÉÓҝʛ֫ÍÂÙ³ÉãÊ›Ô ÉŸÍîÍÂÊÌÍÂÒ³é
ê˜Ô‹ËÂǵÛÜÒÓҝʛֵصèµÒÏËÂÊ ÊžÐ _ ҙ˝ÍäБٟËÏÔ×ÊÌÍãì“ʛ־í¾ÇµÉŸÍÂÉ¿ÛÜÒãÐ‘Ø IÉ P«Ð‘ÞÀÎÚáÜÉëæ ÇµÉŸÍÉÛñËÏÛÜÒÏҝÛÜÞÀÎÚáñì æ·ÍÂʛصå®ËÂÊ
ÞßÊ U“ɹ˝ÊãÙ¬ÐçáÜá _ ì »ÍÂɳÔ×ɟÍÂɟØÚٟɷҝɳޮÐçØ ËÂÛÜÙŸÒ ›ËÂǵÉòٳʛÞÀÎÚÛÜáñÉŸÍ ÇÚБÒÃØÚÊÏÙäÇÚБصٳÉòËÂÊÏèµÉŸËÂɳÙÄËÕËÂǵÛÜÒ ÉŸÍîÍÂÊÌ͋ÒîÛÜØµÙ³É
ÛñË·ÛÜÒòÎÚÖ«ÍÂɳáñì ҝɳޮÐçØ ËÂÛÜٳБá˜é ïʛصҝÛÜèµÉŸÍ·ËÇÚÉãÖµØ ÐÑ͝ìóÒÖ _µËÍäÐçٟËÂÛÜʛØóÊÌ΍ɟÍäÐçËÂÊÌÍ·Ô×ÊÌÍ ËÂǵÉãË ì Î É
rational
ÔÜÍÂÊ›Þ " ɳٟËÂÛñÊ›Ø é é é
// POST : return value is -a
rational operator - ( rational a)
{
a .n = - a .n;
return a ;
}
ïÇ ÐçØÚå›ÛñØÚåàËÂǵÛÜÒ¹ËÂÊ
rational operator - ( rational & a)
{
a .n = - a .n;
return a ;
}
ÚÇ Ð‘Ò¿Ðóè«ÍäБÒîËÂÛñÙ ^ºÐ‘صè ֵصèµÉ³ÒÛñ͝ɳè `âٳʛصҝÉXWôÖµÉ³ØµÙ³É ÀËÂǵÉßÉIP¥ÎµÍÂɳÒîҝÛÜʛØ
æ ÛÜáñá‹ÒîËÂÛñáÜá‹ÇÚÐXU“É ˝ÇÚÉßҝБÞßÉ
-a
U‘БáÜÖµÉ Ð‘Ò _ ɳÔ×ÊÌÍÂÉÌí _ÚÖµË ÛñËÕæ·ÛÜáÜáµÇÚÐXU“É·ËÂÇµÉ Ð‘èµèµÛñËÂÛñÊ›Ø Ðçá«É É³ÙÄË¹Ê›Ô Ù´ÇÚБصå›ÛÜØµåÏËÂǵÉU‘БáÜÖµÉ Ê›Ô é SÝÉ ÇÚÐXU“É
a
Ð‘ٳٟÛÜèµÉ³Ø ËäÐçáÜáñ
ì ٟ͝ɬÐçËÂɳèóпٳʛÞÀÎÚáÜÉÄËÂɳáñìßèµÛ ɟÍÂɳد˷ÊÌ΍ɟÍäÐçËÂÊÌͳé
ÒÏÞ®Ð‘Ø ì ÊÌËÂǵɟÍÏǵÛÜå›
Ç ºáñÉ U“ɳá εÍÂʛåÌÍäБÞßÞßÛÜØµåá×Бصå›ÖÚБå›É³Ò³í Ê ÉŸÍÂÒëÐßÞßɳÙäÇÚБصÛÜÒÞ ËÇ ÐÑË #
ÛÜÔÈÎÚ͝ÊÌΠɟÍÂáñì ֵҝɟè # ÐçáÜáÜʦæ ÒàËÂÇµÉ ÙŸÊ›ÞÀÎ ÛñáÜɟÍëËÂʽèµÉŸËÂÉ³ÙŸË ÖµØÚèµÉ³ÒîÛñÍÂɳè ÙäÇÚБصå›É³ÒÊ›
Ô U‘БáÜÖµÉ³ÒÐ‘Ò ÛÜØ ËÂǵÉ
εÍÂÉ UôÛÜʛֵÒÈGÉ PµÐ‘ÞÀÎÚáÜÉÌé Æ¹ÇµÉÓÛÜèµÉ¬ÐàÛÜÒïËÂÊ
ËÂÇÚÐçËòÐàٳɟ͝ËäÐçÛÜØ U‘БáÜÖµÉ æ ÛÜáñáØµÊÌË _ ÉÓÙ´ÇÚБصå›É³è¤íµÐ‘صè
›¨ž
ËÂǵɳؿáÜÉŸË ËÇÚÉïٟʛÞÀÎ ÛñáÜɟ͡ٴǵɳ٠] æ ǵɟ˝ÇÚÉÄ¢¤Í £³æ¹
É ]“—»Ž‘ɳŒ ÉŸÎ Ê›ÖµÍ ÎµÍÂʛÞßÛñҝÉÌé ê˜ØàËÂǵÉïÙ¬ÐçáÜá _ ì »ÍÂɳÔ×ɟÍÂɟØÚÙŸÉ U“ÉÄÍÂҝÛÜʛØ
ʛԡ˝ÇÚÉÓÖµØÚÐç͝ì®ÒÖ _µËÍäÐçٟËÂÛÜÊ›Ø ÊÌΠɟÍäÐÑËÂÊÌͬí¥ËÂǵ
É ^˜ÔªÐ‘áÜÒîÉ `‹ÎÚ͝ʛÞßÛÜÒÉ Ù¬Ð‘Ø _ ÉÏå›VÛ U“ɳØóÐçÒòÔ×ʛáÜáñÊÑæ·Ò³íôֵҝÛÜØµå ËÂǵÉ
]“ÉŸì æ¹ÊÌÍÂè
é
const
rational operator - ( const rational & a)
{
\ a .n = - a .n ; // error : a was promised to be constant
return a ;
}
˜ê ØÀٳʛÞÀÎÚÛÜáñÛÜØµå·ËÂǵÛÜÒUÌÐç͝Û×Ð‘Ø ËÃʛÔ˝ÇÚÉÈÊÌΠɟÍÂÐçËÂÊÌͬí›ËÂǵÉÈٳʛÞÀÎÚÛÜáÜÉŸÍ æ·ÛÜáÜá¥ÛÜÒîÒÖµÉ Ð‘ØÀÉÄ͝ÍÂÊÌÍÕÞßɳҝÒÂБå›É‘í“΍ʛÛÜØ Ë
ÛÜØµå ʛ֫ËÈËÂǵÉãÞßÛñÒîËäÐ ]“ÉÌéSÝÉã٬БØóËÂÇµÉ³Ø YaPžÛñË_ôì ɳÛñËÂǵɟÍòå›Ê›ÛÜØµå_ÐçÙ ] ËÂʏ٬БáÜá _ôì U‘БáÜÖµÉãÒîÉ³Þ®Ð‘Ø ËÛÜÙ³Ò³í
ÊÌ
Í _ôì ÛÜØ ˝͝ÊôèµÖµÙ³ÛÜØµå Р͝ɳҝֵáñ
Ë UÌÐç͝Û×Ð _ÚáÜÉÓáÜÛV]“ÉÓÛÜØ
Ð _ ÊU“ÉÌé
operator+
[ ÍÂÊ›Þ ËÂǵɮÒî˝ÍÂÛÜÙÄËÂáñìÝÔ×ֵصٟËÂÛñÊ›Ø Ðçá‹Î ʛÛÜØ¯ËàʛÔRU¥ÛÜɟæâí ËÂǵÛÜÒëεÍÂʛÞßÛÜҝɏÞßɳÙäÇ ÐçØÚÛñÒÞ ÛÜÒàҝ֫ΠÉÄÍ QÚÖÚʛֵҳí
Бصè ËÂǵɟÍÂÉ ÐçÍÂÉÀεÍÂʛåÌÍäБÞßÞßÛñØÚå á×Бصå›ÖÚБå›É³ÒëÛñØ ÖµÒÉ®ËÂÇÚÐçË èµÊ›
Ø ËàÇÚXÐ U“É Û²
Ë ^ ֵҝɳè ËÂÊ _ ɮҝֵٴǜÐ
á×Бصå›ÖÚБå›ÉÌí›ÖµØ¯ËÂÛÜá¥ËÂǵÉ
]“ÉÄìôæ¹ÊÌÍÂè æÈÐçҋБèµèµÉ³èÛÜØ í“ÞßÊÌËÂVÛ U‘ÐçËÂɟb
è _ ìÛ²ËÂÒ ÒÖµÙ³Ù³É³ÒÒ‹ÛÜ
Ø `Äé
const
áÜÒîÊ«í«ØÚÊ _Êôè«ì®Ô×ÊÌÍÂٳɳҷÖÚÒÈËÂÊ Þ®Ð ]“ÉÏֵҝÉãʛԡËÂǵÉÏÎÚ͝ʛÞßÛÜÒÉ ÞßɳÙäÇÚБصÛÜÒÞ é ‹Ö«ËÈËÂǵÉãæ·ÇÚʛáñÉÓ΍ʛÛÜØ ËÈʛÔ
ǵÛÜå›Ç ºáÜIÉ U“ɳá¯ÎµÍÂʛåÌÍÂБÞßÞßÛÜØµåïá×Бصå›ÖÚБå›É³Ò¾ÛÜÒ ËÂʷޮР]“ÉÃ˝ÇÚÉÕÎÚ͝ʛåÌÍäБÞßÞßɟ!Í Ò áÜÛÜÔ×ÉÕɬБҝÛÜÉÄÍ ÌËÂÇµÉ Ù³Ê›ÞÀÎÚÛÜáÜÉÄͤÛÜÒ
ʛ֫ÍïÔÜÍÂÛÜɟØÚè®ÐçØÚè®Ù¬ÐçØßÇÚɟáñÎ ÖÚÒÕËÂÊàXÐ U“Ê›ÛÜèßޮБدìËÂÛñÞßÉ ºÙ³Ê›ØµÒÖµÞßÛÜØµå ɟÍîÍÂÊÌÍÂÒ³éÕÆÈǵÉ
ÞßɳÙäÇÚБصÛÜҝÞ
const
ÛÜÒÏáÜVÛ ]“ɏРÙäǵɳ٠]ÝèµÛÜå›Û²Ë _ôì εÍÂÊ UôÛÜèµÛÜØµåžÐçèÚèµÛñ˝ÛÜʛØÚБá ÍÂɳèµÖµØµèÚÐ‘Ø ËãèÚÐçËäÐ ^»ËÂǵÉ
]“ÉŸì æ¹ÊÌÍÂè `Äí¡æ¹É
ޮР]“Éßҝ֫ÍÂÉßËÂÇÚÐçË¿ÛÜØµÙ³Ê›ØµÒÛñÒîËÂɳصٳÛÜɟÒàÛÜØ ˝ÇÚÉßæ·ÇÚʛáñÉÀèÚÐçËäÐóÒÉŸË ^»ËÂǵÉÀεÍÂʛåÌÍäÐçÞ const
`âÐçÍÂÉ Ð‘Ö«ËÂʛޮÐç˝ÛÜ٬БáÜá²ì
èµÉŸËÂɳÙÄËÂɳè¤é
ê˜Ô ÛÜÒ·ÐçØ ì®Ë ìôÎ ÉÌí«ËÂǵɳØ
Definition.
const
ÛÜÒâ˝ÇÚÉ
Ë ì Î É ^˜Ù³Ê›ØµÒîË ˜Ë ìôÎ ÉßÔ×ÊÌÍëҝǵÊÌ͝ËG`ãÊ›Ô í Бصè ÛñËÂÒîɳáÜÔ ÛÜÒãËÂǵÉ
Ÿ
±
›

¤
š
³
Ž
–
¡
”
¯
©
•
’
—
G
Œ
F
éÃÆÈǵÉïٳʛصÒîË WôÖÚБáñÛVYÚɳèZU“ÉŸÍÂҝÛñÊ›ØÊ›Ô ÇÚÐ‘Ò ÉIPµÐçٟËÂáñìë˝ÇÚÉïҝБÞßÉ U‘БáÜÖµÉ ÍäБصå›É¹Ð‘صè¿Ô×ÖڔصšÙŸËFµÛ܌³Ê›£¦ØÚ’ БJ áܗ°ÛñšË ì Á
Б– J¦Ò ¢ Œ é Æ¹ÇµÉÀʛصáñìÝèµÛ ɟÍÂɳصٳÉßÛÜÒãËÂÇÚÐçË Ð‘Ø ÉIPôÎÚ͝ɳҝҝÛÜÊ›Ø Ê›Ô¹Ù³Ê›ØµÒîË»Ë ìôÎ ÉßÛÜÒâØÚÊÌËàБáÜáÜʦæ¹É³èÝËÂÊ ÙäÇÚБصå›É
ÛñËÂÒ UÌÐçáÜÖµÉ ^˜ÛÜØ ÊÌ˝ÇÚÉÄÍâæ¹ÊÌÍÂèµÒ³í Û²ËëÛÜÒãٳʛصÒîËäБدËG` ËÂǵÛÜÒãÛÜÒâʛ֫ÍâεÍÂʛÞßÛñҝÉÌí ÐçØÚèÝ˝ÇÚɏٳʛÞÀÎÚÛÜáÜɟÍÏÙäǵɳ٠]¥Ò
æ ǵɟ˝ÇÚÉÄÍòæ¹
É ]“ɳɟΠËÂÇÚÐç˹εÍÂʛÞßÛÜÒîÉÌé
ê˜Ô æ¹ÉÓæ·ÍÂÛñ˝ÉÏÔ×ÊÌÍ·IÉ PµÐçÞÀÎ áñÉ
const int n = 5;
n = 6;
ËÂÇµÉ ÙŸÊ›ÞÀÎ ÛñáÜÉŸÍ æ ÛñáÜá ÛÜÒÒÖµÉÐ‘Ø ÉŸÍÍÊÌÍëÞßɳҝҝБå›ÉÙŸÊ›ØÚٟɟÍÂØµÛÜØµå ÂË ÇµÉÐ‘ÒÒÛñ囨ÚÞßÉŸØ Ë
í¡ÒîÛÜØµÙ³É ÇÚБÒ
n = 6
n
ËÂǵÉÏٳʛصÒîË˜Ë ì Î É
é
const int
ÕБáÜÖµÉ³Ò¹Ê›Ô Ù³Ê›ØµÒîË»Ë ìôÎ ÉÏޏֵÒîËòÐ‘á²æÈЬìôÒR_ ÉâÛÜØµÛñ˝Û×БáÜ۟ɳè¤é"S Í ÛñËÂÛÜØµå
const int n ; // error : uninitialized constant
ÛÜÒÈÛÜáÜáÜɟå“Бá^ºÐ‘صè ޮР]“ɳÒÈØÚʿҝɳصҝɑí ҝÛñØÚٟÉãæ¹ÉÏ٬БØóØµÉ U“ÉŸÍ БҝҝÛñ囨óÐ UÌБáñÖÚÉÓËÂÊ
n
á×Ðç˝ɟÍG`Äé
4.2.6 What exactly is constant?
ɟËÈÖÚҹٳʛصҝÛñèÚÉÄ͹ҝʛÞßÉ áVU‘БáÜÖµÉ Ê›Ô¾Ë ì Î É
éµê˜Ô¤ËÂǵÉÓÖÚØµèµÉŸÍÂá²ì¥ÛÜØµåëË ìôÎ É ÜÛ ÒïØµÊÌËòÐâÍÂɳÔ×ɟ͝ɳصٳÉ
const
Ë ìôΠɑíôËÂǵɳخËÂÇµÉ Vá U‘БáÜÖµÉ ÛÜҹБÒîҝÊôÙ³ÛÜÐçËÂɳèßæ Û²ËÂÇ®ÐâٳʛصÒîËäÐçØ Ë é [ ÊÌ͹ÉIPµÐçÞÀÎ áñÉ̯í ˝ÇÚÉ èµÉ³ÙŸá×ÐçÍäÐç˝ÛÜʛØ
¥ ŒŸ±¬–
*
/
/4,
0G:$/
&*
22
24
A07
#6%"@"
A&7O
A BI
DU M/
A
7
5D 292*SB@ BI
/
O
.*
7
%+
-
O"
(7
2* -"
#, 2&7
(Q"K( %G%,S
&*
%< J
-2*
.
8*SB$&B>J
A= <
\ ÚΠ͝ʛÞßÛÜҝɳÒÓËÂÇÚÐçËÏËÂÇµÉ UÌÐçáÜÖµÉ Ê›Ô‹ËÂÇµÉÊ _ É³ÙŸË _ ɳǵÛÜØµè ËÂÇµÉ U‘ÐçÍÂÛÜÐ Ú_ áÜÉ æ ÛÜáÜá ØµÊÌË
_ ÉàÞßÊ èÚÛ Y ɟè¾éRS ÉàޮЬì ^ºÐ‘ٳٟÛÜèµÉ³Ø ËäÐçáÜáñìa` ˝͝ìžËÂÊßÙäÇÚɳÐçËÏÐçÍÂʛֵصè ÂË ÇµÛÜҷεÍÂʛÞßÛÜÒÉ _ôì µ
Ö ÒÛñØÚnå®ÐçØÚÊÌ˝ÇÚÉÄÍ
ØÚБÞßÉÓÔ×ÊÌÍò˝ÇÚÉÏÊ _ ™ÉŸÙŸË¬í _Úֵ˹ËÂǵÉãٳʛÞÀÎÚÛÜáÜÉŸÍ æ·ÛÜáÜá Ù¬ÐÑËÂÙäÇóÖµÒ
const int n = 5
const int n = 5;
int i & = n ; // error : const - qualification is discarded
i = 6;
SÝɷ٬БصصÊÌËïÖµÒÉ Ð‘Ø®ÉIPôÎÚ͝ɳҝҝÛÜÊ›Ø®Ê›Ô Ë ìôÎ É
ÂË ÊàÛñØÚÛ²ËÂÛ×БáÜÛ³É^˜ÊÌ͹БÒîҝÛÜ囨ÀËÂÊ `‹ÐçØ ÉGP¥ÎµÍÂɳҝÒîÛÜʛخʛÔ
const
Ë ìôÎ É íÒÛÜØµÙ³ÉâËÇ ÐÑË·æ¹Ê›ÖµáÜè ٟÍÂɳÐçËÂÉ Ð ÞßÊ èÚÛ YÐ _ áñÉӑРáÜÛ×БÒÈÔ×ÊÌÍÏÐ‘Ø Ê _ ™ÉŸÙŸË ËÂÇÚÐçËòæÈБҷεÍÂʛÞßÛÜҝɟèžËÂÊ
_ ÉÏٳʛصÒîËäБدˬé
ØßËÂÇµÉ ÊÌ˝ÇÚÉÄÍïÇÚБصè¾í БØßáVU‘БáÜÖµÉ ^ºÐ‘ÙŸËÂÖÚБáñáñì“í“Ð‘Ø ì ÉIP¥ÎµÍÂɟҝҝÛÜÊ›Ø `ÕÊ›ÔË ìô΍É
ÛñÒÕËÂÇµÉ Ð‘áñÛ×БÒ
const
Ê›Ô ÐçØ Ê _ ™ ɟٟˬí _ÚÖµËÏËÂÇÚÐçËÓÊ _ ɳٟËãÛÜÒ
صɳٳɳÒîÒÂÐçÍÂÛÜá²ì ٳʛصÒîËäБدËâÛñ˝ҝɳáÜÔºéàÆ¹ÇµÉÙŸÊ›ØÚÒ™Ë W Ö ÐçáÜÛVYÚÙ¬ÐçËÂÛñʛØ
š
“

–
ÛÜØßËÂǵÛÜÒ Ù³Ð‘ÒÉÓÛÜÒ Þßɟ͝ɳáñìßÐâεÍÂʛÞßÛñҝÉòËÂÇÚÐçˋËÂÇµÉ Ê _ É³ÙŸË Ò U‘БáÜÖµÉ æ ÛñáÜá ØµÊÌË _É ÞßÊôèµÛVYÚɳè
ËÂǵÉ
–ºŠ¥£³›”ÚÁ“Š
БáÜÛÜБÒïÛÜØ W ÖÚɟÒîËÂÛÜʛؤé·
ɟÍÂÉÏÛÜÒòБØóÉIP«Ð‘ÞÀÎÚáÜÉ ËÂÇÚÐçËòÛÜáÜáÜÖµÒîËîÍäÐçËÂɳÒÕËÂǵÛÜÒÈ΍ʛÛÜØ ˬé
int n = 5;
const int & i = n ;
int & j = n ;
i = 6;
j = 6;
//
//
//
//
i becomes a non - modifiable alias of n
j becomes a modifiable alias of n
error : n is modified through const - reference
ok : n receives value 6
·ÉŸÍÉÌíïæ¹ÉóèµÊ Ú
Ø ÊÌË ÇÚÐKU“É РٳʛصÒîËäБدË
í _ÚÖµËÀРٳʛصÒîËäÐçØ Ë
^˜ØÚБÞßɳáñì `´é Ø
i
¥ ٬БŒŸáܱ¬áñɳ– èžÐ
Œ ¬¢¤£³Œ¬Ž³ŽŸ—™›š
ÉIPôÎÚ͝ɳҝҝÛÜÊ›ØžÊ›Ô Ë ìôÎ É
ÛÜÒÈБáÜҝʏ
é
const
±Ÿ›š¤ŽŸ– ™£³Œ˜¶çŒ³£³Œ³š ±ÄŒ
4.2.7 Const-references
[ Ûñ͝ÒîËÃʛÔБáñá˜í‘ËÂÇµÉ Ë ìôÎ ÉŸØ ÐçÞßÉ
ÛÜÒ Î ÐçÍÉ³Ø ËÂǵɳÒî۳ɳè БÒ
^ `Äí›Û˜é ÉÌé æ¹É¹å›ÉŸË ٳʛصÒîËäÐçØ Ë
const
const
U‘БáÜֵɳÒëÊ›Ô ÍÂɟÔ×ɟÍÂɳصٳÉßË ìôΠɑé ïʛصÒî˘͝ɳÔ×ɟÍÂɳصٳɟҏÐÑÍÂÉ U“ɟ͝ìÝÖÚÒîɳÔ×ÖµáïБصè ʛÔÜËÂÉ³Ø ÐçεΠɬÐçÍâÛÜØÝÍÂɬÐçá ºáÜÛñÔ×É
Ù³Ê èÚɑé ÉÄËÖµÒ Ù³Ê›ÞßL
É _ Б٠] ËÂÊ Ê›Ö«ÍÔªÐçÒîËÂɟb
Í U“ÉŸÍÂҝÛñʛ؜ʛÔ
Ô×ÊÌ͏ÍÂÐçËÂÛÜʛØÚБáÕØôÖµÞb_ÉŸÍÂÒ³é ê»ËÂÒ
operator+
îÒÂБÔ×É U“ÉŸÍÂҝÛñʛØóÛÜÒïËÂǵÛÜÒ
// POST : return value is the sum of a and b
rational operator + ( const rational & a , const rational & b ) {
rational result ;
result .n = a .n * b.d + a.d * b. n;
result .d = a .d * b.d ;
return result ;
}
ƹÇÚÉàÔªÐçٟËÓËÂÇÚÐçË ËÂǵÛÜÒ Ù³Ê›ÞÀÎÚÛÜáñÉ³Ò·Ù³Ê›Ø YµÍÂÞßÒ·ËÇ ÐÑË æ¹É ÐçÍÂÉ ØµÊÌËÓÙäÇ ÐçØÚå›ÛñØÚåÀ˝ÇÚÉZU‘БáÜÖµÉ³Ò Ê›Ô ËÂǵÉàÔ×ÊÌÍÂޮБá
Î ÐçÍäБÞßÉÄËÂɟÍÂÒ ÊÌÍ æ·ÛñËÂǵÛÜØ ˝ÇÚÉ_ Êôè«ìÀÊ›Ô ËÂǵÛÜÒÕÔ×ÖµØÚÙÄËÂÛÜÊ›Ø¤é ‹Ö«Ë ËÂǵɟÍÂÉ æÈÐ‘Ò Ð‘ØµÊÌËÂÇµÉŸÍ ÎµÍÂÊ _ÚáÜÉ³Þ ËÂÇÚÐçË
æ¹É ÐçεΠÐçÍÂɳدËÂaáñìžèÚÛñbèÚØ Ë ÒÊ›áVU“Éëì“ÉÄËòΠБҝÒîÛÜØµåÀÎÐÑÍäБÞßɟËÂÉÄÍÂÒ_ôìžÍÂɳÔ×ɟÍÂɟØÚٟɿÍÂÉ WôÖµÛñÍÂÉ³Ò á UÌБáñÖÚɟÒÓÐ‘Ò Ù¬Ð‘áÜá
Î ÐçÍäБÞßÉÄËÂɟÍÂÒ³í“ÐçØÚè ËÂǵÛÜÒ ÒÉIU“ÉŸÍÂɳáñì ÍÂɟÒî˝ÍÂÛÜÙÄËÂÒ ËÂǵÉòÐÑÎÚÎÚáÜÛñ٬Р_ÚÛÜáÜÛñË ìÏʛԵËÂǵÉòÊÌÎ ÉÄÍäÐçËÂÊÌͬé [ ÊÌ͝ËÂÖµØÚÐçËÂɳáñì“íÌ˝ÇÚÛñÒ
ÛÜÒÃÐ ØµÊ›Ø ˜ÛÜÒÒÖµÉ Ù³Ê›ØµÒîË ˜ÍÉ³Ô×ɟÍÂɳصٳɟ
Ò ^˜ÛÜØ¿ÎÐÑ͝ËÂÛÜÙ³Öµá×ÐÑͬíÌÔ×ÊÌÍÂޮБá ÎÐÑÍäБÞßɟËÂÉÄÍÂÒ Ê›ÔٳʛصÒîË ˜ÍÂɳÔ×ÉÄÍÂÉ³ØµÙ³É »Ë ì Î É`
Ù¬Ð‘Ø _ ÉãÛñØÚÛ²ËÂÛ×БáÜÛ ³É³è®ÔÜÍÂÊ›Þ Í UÌÐçáÜֵɳҷÐçÒÈæ¹É³áñá˜é ÆÈǵÛÜÒÈÞßɬБصÒïËÂÇÚÐç˹æ¹ÉâٳБ؞æ·ÍÛñËÂÉ
const int & i = 3;
\ ‹É³ÇµÛÜØµèã˝ÇÚÉÃҝٳɟØÚɟҳíçËÂǵÉÃٳʛÞÀÎÚÛÜáÜɟ͍ٟÍÂɬÐç˝ɳÒ
Ð ËÂɳÞÀ΍ÊÌÍäÐç͝ì Ê _ ɳٟˤËÂÇÚÐç˾ǵʛáÜèµÒËÂǵÉU‘БáÜÖµÉ íçБصèãËÂǵÉ
ï
Бèµè«ÍÂɳҝҋʛԍËÂǵÛÜÒÕËÂɟÞÀÎ ÊÌÍäÐç͝ì¿Ê _ É³ÙŸË ÛñÒ ÖµÒÉ³èßËÂÊëÛÜØµÛñ˝Û×БáÜÛŸÉ ËÂÇµÉ Ù³Ê›ØµÒîË»ÍÂɳÔ×ɟÍÂɟØÚÙŸÉ éÃÆ¹ÇµÉ 3ٳʛÞÀÎÚÛÜáÜɟÍ
ޮР]“ɳÒàÒîÖµÍÉ®ËÇ ÐÑËàËÂǵÉÀËÂɳÞÀÎ ÊÌÍäÐÑ͝ìÝÊ _ É³ÙŸË èµÊôɳÒàØµÊÌË IÉ PôÎÚÛñÍÂÉ _ ɳÔ×ÊÌÍÂÉßËÂǵÉßٳʛصÒîiË ˜ÍÂɳÔ×ÉÄÍÂÉ³ØµÙ³É ËÇ ÐÑË
ÍÂɳÔ×ÉÄÍÂÒ·ËÂÊ¿ÛñË ^˜ÒÉ³ÉÏËÂÇµÉ É³Ô×ɟÍÂɟØÚÙŸÉ ÖµÛÜèµÉ³áÜÛñØÚÉ Ê›Ø Ð‘å›É \ `´é
ÆÈǵɿÒÂБÞßÉëÇÚÐçεΠɟØÚÒ æ·ÇÚɟØÝÐßÔ×ÊÌÍÂޮБá Ô×ֵصٟËÂÛñÊ›Ø Î ÐçÍäÐçÞßɟËÂÉŸÍ Ê›ÔÃٳʛصÒîË »ÍÂɳÔ×ÉŸÍÉ³ØµÙ³É ˜Ë ì Î ÉÀÛÜÒ ÛÜØµÛ ËÂÛ×ÐçáÜ۳ɳè ÔÜÍÂʛÞðÐ‘ØžÍ U‘БáÜÖµÉÌé
Î ÐçÍäБÞßÉÄËÂɟÍãÊ›Ô¹Ë ì Î É
ÛñÒâËÂǵɟÍÂɳÔ×ÊÌ͝ÉÀËÂǵÉßБáÜá ˜ÛÜØ ºÊ›ØµÉ¿èÚIÉ U¥ÛÜÙ³É ÒÖµÛñËäÐ _ÚáÜɏÔ×ÊÌÍàÉ U“ɟ͝ì
const
ÎÚ֫͝ΠʛҝÉ
ËÂǵɏ٬БáÜá Î ÐçÍäБÞßɟ˝ɟÍâÛñÒëÐ‘Ø Vá U‘БáÜÖµÉÌí¾ËÂÇµÉ ÛÜØµÛñ˝Û×БáÜÛ ³ÐçËÂÛÜÊ›Ø ÛÜÒ U“ɟ͝ì É Ù³ÛÜÉŸØ L
Ë ^»Ê›ØÚá²ì Ûñ˝Ò
—
¶
Бèµè«ÍÂÉ³ÒÒ ØµÉ³É³èµÒžËÂÊ _É Ù³ÊÌÎÚÛÜɳè `ÄíÓÐçØÚè ÊÌËÂǵɟ͝æ ÛñҝÉÌí æ¹É ɟҝҝɳدËÂÛ×БáÜá²ì ÔªÐçáÜ
á _ÐçÙ ] ËÂʜٳБáÜá _ôì UÌÐçáÜÖµÉ
ҝɳޮÐçØ ËÂÛÜٟҳé
ɳÒîÎÚÛñËÂÉ ËÂǵÛÜÒ³í¹ËÂǵɟÍÂÉ ÐçÍÉ Ò™ËÂÛÜáÜá ÒîÛñËÂÖÚÐçËÂÛÜÊ›ØµÒ æ·ÇµÉŸÍÂÉ ÛÜÒÀεÍÂɳÔ×ɟÍäÐ _ áñÉ Ê U“ÉŸÍ
ÐçÒ Ð
Î ÐçÍäБÞßÉÄËÂÉŸÍ Ë ìôΠɑé ê˜Ô ÛñÒÕÐÓÔ×ֵصè ÐçÞßÉ³Ø ËäÐçáôË ìôÎ ÉÈÊÌÍ ÐÓÒî˝͝ÖÚÙÄËÕæ·ÛñËÂǿҝޮБáÜá¥ÞßɟÞßÊÌ͝const
ìâÍÂÉ WôÖµÛñÍÂɳÞßÉŸØ ËÂÒ³í
ÛñËïèµÊ ɳҹØÚÊÌËïΠгìßÊ ó˝ʿÞßÊ U“É ËÂÊ
í¥ÒîÛÜØµÙ³É ËÂÇµÉ ÒÂXÐ U¥ÛÜØµå ÛÜØ®ÇÚБصèÚáñÛÜØµåëVá U‘БáÜֵɷΠÐçÍäБÞßÉÄËÂɟÍÂÒ
const
ÛÜҹҝʏҝޮБáÜ"
á ^˜ÊÌÍÈÉ U“ɳØóصʛصIÉ P«ÛñÒîËÂɳدGË `‹ËÂÇÚÐçËÈÛñËïæ¹Ê›
Ø Ë¹Ù³Ê›ÞÀΠɟØÚҝÐçËÂÉ Ô×ÊÌÍÈËÂÇµÉ ^˜ÒîáÜÛÜå›Ç ˝áñaì ` ÞßÊÌÍÂÉÓٳʛÒîËÂáñì
Ð‘Ù³ÙŸÉ³ÒÒ ËÂÊÀËÂǵÉëÔ×ÊÌ͝ޮБá¡Ô×ֵصٟËÂÛñÊ›Ø Î ÐçÍÂБÞßɟËÂɟÍòÛÜØ ËÂǵÉëÔ×ֵصٟËÂÛÜÊ›Ø _Êôè«ì“é·ê˜ØµèµÉ³É³è¤íÙ³Ð‘áÜ"
á _ ìžÍÂɟÔ×ɟÍÂɳصٳÉ
БèµèµÒïÊ›ØµÉ ÛÜØµèÚÛ²ÍÂɳٟËÂÛñÊ›Ø ¾ËÂÊ áÜÊôÊ ] Ö«Î ËÂǵ
É U‘БáÜÖµÉ Ê›Ô¾ÐëÔ×ÊÌÍÂޮБá Ô×ÖÚØµÙŸËÛÜʛØßÎÐÑÍäБÞßɟËÂÉÄÍïÖµØÚèµÉŸÍ¹Ù³Ð‘áÜá _ôì ÍÂɳÔ×ÉÄÍÂɳصٳÉïҝɳޮÐçØ ËÂÛÜٟҳíçæ¹É ÇÚKÐ U“ÉÕËÂÊ áÜÊôÊ ]ÏÖ«Î ÛñËÂÒ Ð‘èµè«ÍÂÉ³ÒÒ ÐçØÚèë˝ÇÚɟؿáñÊôÊ ]Ï֫ο˝ÇÚɋБٟËÂÖÚБá U‘БáÜÖµÉ
ÐçËòËÂÇÚÐçË Ð‘èµè«ÍÂɳÒîÒ³é òØÚèµÉŸÍ·Ù¬Ð‘£¦ŽŸáÜá – _ôì U‘БáÜÖµÉâÒîÉ³Þ®Ð‘Ø ËÛÜÙ³Ò³í«ËÂǵÉàБèµè«ÍÂɳÒîÒ Ê›Ô ËÂÇµÉ U‘БáÜÖµÉëÛÜÒ îÇÚÐçÍÂè«æ Ûñ͝ɳ
è ^ºÐ‘صè ÍÂɳÔ×ɟÍÂÒòËÂÊ ÒÊ›ÞßÉÓÊ _ ɳٟËòʛ؞ËÂǵÉãٳБáÜá ÒîËäÐçÙ ]í ÒîÉ³É " ɳÙÄËÂÛÜÊ›Ø é \ é \ `Äé
áÜҝʫí›Û²ËÕÛñÒÃʛÔÜËÉ³Ø Ù³Ê›Ø U“ɳصÛÜɳدËÕËÂÊÏֵҝÉïËÂǵÉòÔ×ÊÌ͝ޮБáôÎ ÐçÍäБÞßÉÄËÂÉŸÍ Ð‘ÒÕÐ áÜÊôٳБá U‘ÐçÍÂÛ×Ð _ÚáÜɹÐçØÚèÞßÊôèµÛÜÔÜì
ÛñËÂR
Ò U‘БáÜÖµb
É ^˜ÒÉ³É
Ð _ Ê U“É ` µÔ×ÊÌÍòËÇ ÐÑˬí«ÛñËÂÒïË ìôÎ ÉãޏֵÒîËÈØµÊÌË _ ÉãпٳʛصÒîË ˜Ë ìôΠɑé
operator-
4.2.8 Const-types as return types.
ïʛØÚÒ™Ë ˜Ë ìôÎÉ³Ò Þ®Ð³ìóБáñҝʮÐçεΠɬÐçÍ Ð‘Ò ÍÂÉŸËÖµÍØ Ë ì Î É³Ò Ê›Ô Ô×ÖµØÚÙÄËÂÛÜʛصҳí ÖµÒîËÓáÜÛ ]“ÉëБدì ÊÌËÂÇµÉŸÍ Ë ìô΍ɳҳé ê˜Ø
ËÂÇÚÐçËÈ٬БÒîÉÌíÚ˝ÇÚÉ
εÍÂʛÞßÛÜҝɳÒïËÂÇÚÐç˹ËÂǵÉÏÔ×ÖµØÚÙÄËÂÛÜʛØóÙ¬ÐçáÜá¤ÉIP¥ÎµÍÂɳÒîҝÛÜʛØóÛñ˝ҝɳáÜÔ¾ÛÜÒÈٳʛصÒîËäБدˬé
const
ê˜ÔËÂǵɹÍÂɟËÂÖ«ÍÂØ Ë ì Î ÉòÛñÒÃØµÊÌˋÐÓ͝ɳÔ×ɟÍÂɳصٳÉòË ì Î ÉÌí›ËÂǵÉÈÔ×ÖÚØµÙŸËÛÜʛØÀ٬Бáñá«IÉ P¥ÎµÍÂɳÒîҝÛÜʛØÀÛÜÒÕÐ‘Ø Í UÌБáñÖÚÉÈБصè
ǵɳصٳÉÏØÚÊÌËÈÞßÊ èÚÛ YÐ _ áñÉ Ð‘Ø¯ìôæÈгì“éÃê˜ØžËÂǵÛÜÒï٬БÒîÉÌí«ËÂǵÉ
]“ÉŸì æ¹ÊÌÍÂèóÛÜÒ¹áÜɳå“Ðçá _ Ö«ËÈÇÚÐ‘Ò¹ØµÊ É É³ÙŸË¬é
const
ïʛØÚÒ™Ë ˜Ë ìô΍ɳÒÈ˝ÇÚÉÄÍÂɳÔ×ÊÌÍÂÉãʛØÚá²ì ޮР]“ÉãÐ èµÛ ÉÄÍÂɳصٳÉÏÛÜÔ¡ËÂǵÉÏÔ×ÖµØÚÙÄËÂÛÜʛ؞ÍÂÉÄËÂÖ«ÍÂØµÒ·ÐàÍÂɳÔ×ɟ͝ɳصٳÉÌé
O ÊÌËÂÉžËÇ ÐÑËÀÛñË ÛÜÒ
å›É³ØµÉŸÍäБáñáñì UÌБáñÛÜè ËÂÊÝÍÂɟÎÚá×ÐçٳɞÍÂÉŸËÖµÍØ Ë ì Î É _ ì
·æ·ÇµÛÜáÜÉ
ËÂǵÛÜÒ¿ÒÂБÔ×ɳá²ì æ¹ÊÌÍ ]ôÒ Ô×Ê̚ ͏“Ë– ǵɞÔ×ÊÌÍÂޮБá Î ÐçÍÂБÞßɟËÂÉŸÍ Ë ìô΍ɳҳíïÛñË¿Ù¬Ð‘Ø Ô×ÊÌ͏ËÂÇµÉ ÍÂÉÄËÂÖ«const
ÍÂØ Ë ìôÎ É ÍÂɳҝֵáñˏÛÜØ
ÒîìôØ ËäБÙÄËÂÛÜ٬БáñáñìßÙ³ÊÌ͝͝ɳٟ
Ë _ÚÖ«ËÈҝɳޮБدËÂÛÜÙ¬ÐçáÜáñì æòÍÂʛصåÙŸÊôèµÉÌé
ÒßÐ‘Ø GÉ PµÐ‘ÞÀÎÚáÜÉÌíÃáÜÉŸË ÒÍÉŸÎÚá×БٳÉ
_ ì
ÐçÒ ËÂÇµÉ ÍÂÉÄËÂÖ«ÍÂØ Ë ìôÎ ÉóʛÔ
rational
const rational&
operator+
const rational & operator + ( const rational & a , const rational & b ) {
rational result ;
result .n = a .n * b.d + a.d * b. n;
result .d = a .d * b.d ;
return result ;
}
ê˜ØÝÉIP¥É³Ù³Ö«ËÂÛÜØµå®ËÂǵÉ
ÒîËäÐç˝ɳÞßÉ³Ø Ë³íËÂǵɿÍÂÉÄËÂÖ«ÍÂØ U‘БáÜÖµÉ »^ ÛÜØ ˝ÇÚÛñÒÏٳБҝÉÀЮٳʛصÒîË»ÍÂɳÔ×ɟ͝ɳصٳÉ`Ó˝Ê
_ É Î Ð‘Òîҝɳè ËÂÊóËÂǵÉßreturn
٬БáÜáñɟÍëÊ›Ô ËÂǵÉßÔ×ֵصٟËÂÛÜÊ›Ø ÛñÒëÛÜØµÛñËÂÛ×ÐçáÜÛ³É³è æ ñÛ ËÇÝËÂǵÉÀÉIP¥ÎµÍÂɟҝҝÛÜʛØ
é O ʦæ
result
\ ÍÂɳٳБáÜá¹ËÂÇÚÐçË ËÂǵÉóÛñØÚÛ²ËÂÛ×БáÜÛ¬ÐçËÂÛÜÊ›Ø Ê›ÔÓÐ ^˜Ù³Ê›ØµÒîË` ÍÂɳÔ×ÉÄÍÂÉ³ØµÙ³É ÔÜÍÂÊ›Þ ÐçØ áVUÌÐçáÜֵɞҝÛÜÞÀÎÚáñì ޮР]“É³Ò ÛñË Ð‘Ø
БáÜÛÜБÒïʛԡËÂǵÉÏáVU‘БáÜÖµÉÌé ‹Ö«ËòËÂǵÉÏáVU‘БáÜÖµÉÓÛÜØ W ÖÚɟÒîËÂÛÜÊ›Ø ^˜ØÚБÞßɳáñì
`¹ÛÜÒòÐàáÜÊôٳБá UÌÐç͝Û×Ð _ÚáÜÉ æ ǵʛҝÉ
result
ÞßɳÞßÊÌ͝ìžÛÜÒÏÔÜÍÂɳɳè ÐçØÚè½æ ǵʛҝɿБèµè«ÍÂÉ³ÒÒ _ ɳٳʛÞßɳÒÓÛÜØ UÌÐçáÜÛÜè æ ǵɳؽ˝ÇÚÉ¿Ô×ֵصٟËÂÛÜʛؽ٬БáÜá ËÂÉÄÍÂÞßÛÜØÚÐçËÂɳÒ
^˜ÒÉŸÉ " ɳٟ˝ÛÜÊ›Ø \ é é Бصè " ɳٟËÂÛñÊ›Ø é \ é `Äé Æ¹ÇÚÉÈٳʛصҝÉXW ÖµÉ³ØµÙ³É ÛÜÒ ËÂÇÚÐçËÃËÂǵÉÈ͝ɟËÂÖ«ÍÂØµÉ³è ÍÂɟÔ×ɟÍÂɳصٳɷæ·ÛÜáÜá
_ ÉÏËÂǵÉàБáÜÛ×ÐçÒÈÊ›Ô ÐçØ IÉ P¥ÎÚÛñÍÂɟè Ê _ ɳٟ˳íБصè ֵҝÛÜØµå¿ËÂǵÛÜÒòÍÂɟÔ×ɟÍÂɳصٳÉëÍÂɟҝֵáñËÂÒ·ÛñØ ÖÚØµèµÉ YÚØµÉ³è _ ɳÇÚÐXU¥ÛñÊÌÍ
ʛԡ˝ÇÚÉÏεÍÂʛåÌÍäÐ‘Þ é
ÍîÍÂÊÌÍÂÒ áÜVÛ ]“É ËÂǵÛÜÒ®ÐçÍÂÉ U“ɟ͝ì¼ÇÚÐçÍÂè¼ËÂÊ Y صè ^ºÐ‘Øµè æ¹É ٬БصصÊÌË®ÍÂɳáÜÛÜÐ _Úáñì Ù³Ê›ÖµØ¯ËžÊ›Ø Ù³Ê›ÞÀÎÚÛÜáÜɟÍ
æÈÐçÍÂØµÛÜØµå›ÒëÇµÉŸÍÉ `Äí ҝÛÜØµÙ³ÉÀ˝ÇÚÉÀεÍÂʛåÌÍÂБÞ
æ¹ÊÌÍ ]ÝБÒàÛÜØ ˝ɳصèÚɟè¾í Ô×ÊÌÍ GÉ PµÐ‘ÞÀÎÚáÜɏÛÜÔïËÂǵÉßÞßɳÞßÊÌ͝ì
ËÂÇÚÐçËàæÈÐ‘Ò ÐçҝҝÊôٟÛ×ÐçËÂɳè ËÂÊ ËÂǵɮIÉ P¥ÎÚÛñÍÉ³è ¨½
Ê _ © J É³ÙŸË ÛÜÒàØµÊÌË ÛÜÞßÞßɟèÚÛÜÐçËÂɳáñì ͝ɳֵҝɳè¤é ‹Ö«Ë Ê›Ø ÐçØÚÊÌ˝ÇÚÉÄÍ
ÎÚá×ÐçËÂÔ×ÊÌÍÞ í ËÂǵÉÓÎÚ͝ʛåÌÍäÐ‘Þ Þ®Ð¬ì _ ɳÇÚXÐ U“ÉâèµÛ ÉÄÍÂÉ³Ø Ëáñì®ÊÌÍ·IÉ U“É³Ø ٟÍäБÒîǾé
4.2.9 When to use const?
S¼ÇµÉ³ØµÉ U“ÉŸÍ·ì“Ê›Ö ËÂǵÛÜØ ]®Ð _ ʛ֫ËïËÂǵÉãÐçεεÍÂÊÌεÍÂÛ×ÐçËÂÉòË ì Î ÉÏÊ›Ô ÐZU‘ÐçÍÂÛ×Ð _ÚáÜɑí«ÐàÔ×ÊÌÍÂޮБáÔ×ֵصٟËÂÛÜÊ›Ø Î ÐçÍäБÞ
ɟËÂÉÄͬí¤ÊÌÍâÐßÔ×ֵصٟËÂÛÜÊ›Ø Ò ÍÂɟËÂÖ«ÍÂØ UÌБáñÖÚɑí ÛñËÏÛÜÒ å›ÊôÊ è εÍäБÙÄËÂÛÜÙ³ÉàËÂÊßËÂǵÛÜØ ] Ð _Ê›ÖµËÓٟʛØÚÒ™Ë W Ö ÐçáÜÛVYÚÙ¬ÐçËÂÛñʛØ
ÐçËãËÂÇµÉ ÒÂБÞßÉ ËÂÛÜÞßɑé ÔÜËÂÉÄÍàБáÜá»í¾ì“Ê›Ö ҝǵʛֵáÜè ]ôصÊÑæ æ ÇÚÐçËÏì“Ê›Ö æÈÐ‘Ø ËÏËÂÊóèµÊžæ·ÛñËÂǽ˝ÇÚÉ UÌÐç͝Û×Ð _ÚáÜÉÌí
Î ÐçÍäБÞßÉÄËÂɟͬí¯ÊÌÍ ÍÂɟ˝ֵ͝
Ø U‘БáÜÖµZ
É ^»ÛÜԍì“ʛ֮èÚÊ›Ø Ë¬í ËÂǵÛÜÒÃÎ ÐçÍäБåÌÍäÐÑÎ ÇßÛñÒ É U“É³Ø ÞßÊÌÍÂÉ·ÛÜÞÀ΍ÊÌ͝ËäБدËG`ÄíÌҝÊàì“Ê›Ö
БáÜÒîb
Ê ]ôØÚÊ¦æ æ ǵɟËÂǵɟÍÈËÂǵÉÓÎÚ͝ʛåÌÍäÐ‘Þ ØµÉ³É³èµÒòËÂʏÙäÇ ÐçØÚå›ÉÏÛñËÂÒ U‘БáÜÖµÉÏÐçË·ÒîʛÞßÉÓ΍ʛÛÜØ ˬé
ÆÈÇµÉ _ÐçҝÛÜÙ ÍÂÖµáÜÉÓËÂÊ Ô×ʛáÜáñÊÑæ ÛñÒÈËÂǵÛÜÒ
·ÒîÉâٳʛصÒîË
Ë ì ΠɳÒòæ·ÇµÉ³ØµÉ U“ÉŸÍÈËÂǵÛÜÒòÛñҹ΍ʛҝҝÛV_ÚáÜÉÏБصèóޮР]“ÉŸÒòÐ èµÛ ÉÄÍÂɳصٳɛéÚê»Ë
БáñæÈгìôÒÈޮР]“ɳҷРèµÛ ÉÄÍÂɳصٳÉÏÛÜØžÙ³Ê›ØµØµÉ³ÙŸËÛÜʛ؞æ Û²ËÂÇ ÍÉ³Ô×ɟÍÂɳصٳÉãË ì ΠɳҬé
Const Guideline:
−
ê˜ØµèÚɟɳè¤íÈÛ²ËÀÛÜҏÞßÊÌÍÂÉ ËÇ ÐçØ ËÂǵɞεÍÂʛÞßÛÜÒÉ Ê›Ô Ù³Ê›ØµÒîËäÐ‘Ø¯Ë U‘БáÜֵɞËÂÇÚÐçˏèµÛÜÒîËÂÛñØÚå›ÖµÛÜÒîÇÚɟҿËÂÇµÉžË ì Î É
ÔÜÍÂÊ›Þ æ·ÇµÛÜáÜÉ æ¹ÉߨµÉ³É³è áVU‘БáÜֵɳÒâËÂÊ ÛÜØµÛñ˝Û×БáÜÛŸÉ Ð‘Øµè БҝҝÛñ囨 ËÊ Ê _ ɳٟËÂÒàÊ›Ô¹Ë ìôÎ É
const
ÛñҷεÍÂɳÔ×ɟÍÂÐ _ÚáÜÉâËÂÊ
íÍ U‘БáÜÖµÉ³Ò·ÒÖ Ù³É Ô×ÊÌÍ
éS ÉàÇÚÐKU“É ÐçáÜҝʮÐçÍÂå›ÖµÉ³è ËÂÇÚÐçË
const
const
Ûñ؞ޮБدì®ÒÛñËÂÖÚÐçËÂÛñʛØÚҟí¥ÒÛÜÞÀÎÚáñìßÔ×ÊÌÍòÉ Ù³ÛÜɳصٟì ÍÂɬБÒîʛØÚҟé ʛÖó٬БصصÊÌËÈÛÜ囨µÊÌÍÂÉÓËÂǵɳҝÉâÔªÐçٟËÂÒ³íµÉ U“ɳØ
ÛÜÔ¾ì“Ê›ÖóèµÊ›Ø ËÈÙ¬ÐçÍÂÉâÐ _ ʛ֫˹ËÂǵÉÏεÍÂʛÞßÛÜÒîÉ ÞßɳÙäÇ ÐçØÚÛñÒÞ ÊÌËÂǵɟ͝æ ÛñҝÉÌé
ê˜Ô ÛÜÒÓØµÊÌËÏÐÀÍÂɳÔ×ÉŸÍÉ³ØµÙ³É¿Ë ì Î ÉÌí ËÂǵɳؽ˝ÇÚÉ W ֵɳÒîËÂÛÜÊ›Ø æ ǵɟ˝ÇÚÉÄÍ
ޮР]“ÉŸÒÓЮèµÛ ɟÍÂɳصٳÉ
const
ÔÜÍÂÊ›Þ ÇÚБÒßֵҝÖÚБáÜá²ì صÊÌËßҝֵÙäÇ ÐÝÙ³áñɬÐçͮБصÒîæ¹ÉÄͬíÈæ·ÛñËÂÇ Ê›ØµÉ IÉ P«ÙŸÉŸÎµËÂÛÜÊ›Ø ½ÛñØ ÍÉŸËÂÖ«ÍÂØ Ë ì ΠɳҮʛÔ
]“ÉŸìôæ¹ÊÌ͝è ÍÂɳБáÜáñì½Þ®Ð ]“ɳÒãØÚÊ èµÛ ɟÍÂɳصٳÉ
Ô×ֵصٟËÂÛÜʛصÒâËÂÇÚÐçËâèµÊ ØÚÊÌËãÍÂɟËÂÖ«ÍÂØ ÍÂɟÔ×ɟÍÂɳصٳɳҟíÃËÂǵÉ
const
БصèóҝǵʛֵáÜè ËÂǵɟÍÂɳÔ×ÊÌÍÂÉ _ ÉÏʛÞßÛñ˝ËÂɳè¤é
ê˜Ø ˝ÇÚÉ®ÒÂÐçÞßÉÀÒîÎÚÛñÍÂÛñ˳í ËÂǵÉ
]“ÉŸìôæ¹ÊÌ͝èœÛÜÒëË ìôÎÚÛÜٳБáÜáñì½Ê›ÞßÛñ˝ËÂɟè Ô×ÊÌÍ Ô×ÊÌÍÂޮБá Ô×ֵصٟËÂÛÜÊ›Ø Î Ð ÍäБÞßÉÄËÂɟÍÂÒ ËÂÇÚÐçËãÐç͝ɿصÊÌË ÍÂɟÔ×ɟÍÂɳconst
صٳɳҟé ê˜Ø ËÂǵÛÜÒ ÒÛñËÂÖÚÐç˝ÛÜʛؤí
ÛÜÒ
ÍÂɟèÚֵصèÚÐ‘Ø Ë³íËÂǵʛÖÚå›Ç ÛñÔ
š
“

–
const
ОÔ×ÊÌÍÂÞ®Ðçá Î ÐçÍÂБÞßɟËÂɟÍâÛÜÒâʛÔïٟʛØÚÒ™Ë ˜Ë ìô΍ÉÌí æ¹É εÍÂʛÞßÛÜҝɿصÊÌËâËÂÊ ÖµÒÉËÂǵÉÀÔ×ÊÌÍÂޮБá Î ÐçÍäБÞßɟ˝ɟÍëÐçÒàÐ
ÞßÊôèµVÛ Y Ð _ÚáÜɏáÜÊôٳБá UÌÐÑÍÂÛ×Ð _ÚáÜÉÌé ‹Ö«Ë¿ËÂǵÛÜÒàεÍÂʛÞßÛÜҝÉßÛÜҿصɳÛñËÂǵɟͿصɳٳɟҝÒÂÐç͝ì ËÂÊ ÎÚÍÉ U“É³Ø ËÀБٳٳÛñèÚÉŸØ ËäБá
ÞßÊôèµVÛ YÚÙ¬ÐÑËÂÛÜÊ›Ø Ê›Ô ËÂǵÉë٬БáÜá¤Î ÐçÍäБÞßÉÄËÂÉŸÍ ^˜Ù¬Ð‘áÜá _ôì UÌБáñÖÚÉâБáñÍÂɳБè«ì ËäÐ ]“É³Ò Ù¬ÐçÍÂÉâÊ›Ô ËÂǵÛÜÒ `ÄíÚØµÊÌÍ èµÊôÉ³Ò Û²Ë
ÛÜØ QÚÖµÉ³ØµÙ³É ËÂǵÉÓʛֵ˝ҝÛÜèµ
É _ ɳÇÚXÐ U¥ÛÜÊÌÍïʛԾËÂǵÉÓÔ×ÖÚØµÙŸËÛÜÊ›Ø Ûñ؞БدìßæÈгì“éÕê˜Ø ԪБٟˬí«ÛñÔ¾ì“Ê›Ö æ·ÍÂÛñËÉ Ô×ÖµØÚÙÄËÂÛÜʛصÒ
Ô×ÊÌͮРáñVÛ _µÍäÐç͝ì ^˜ÒÉŸÉ " ɳٟËÂÛÜÊ›Ø é é `ÄíÕì“Ê›Ö _ÉŸËËÂÉŸÍ ÍÂɳÔÜÍäБÛñؼÔÜÍÊ›Þ ÒÖµÙäǼٟʛØÚÒ™Ë ˜Ë ìô΍ÉóÖµÒÂБå›ÉÌíÈБÒÀÛ²Ë
ֵصØÚɟٳɳҝÒÂÐÑÍÂÛÜáñìÍÂɳÒî˝͝ÛÜٟËÂÒ ì“Ê›Ö ÛÜÔ ì“Ê›Ö áÜÐçËÂɟÍïèµÉ³ÙŸÛÜèµÉ ËÂÊ Ù´ÇÚБصå›É ËÂÇµÉ Ô×ֵصٟËÂÛÜʛخèµÉ YÚØµÛñËÂÛÜʛؤí“ì“ʛ֞ÐÑÍÂÉ
ٳʛÞßÞßÛñËîËÂɳèËÊëËÂÇµÉ Ù³Ê›ØµÒîË »Ë ì Î É Î ÐçÍäБÞßÉÄËÂɟ
Í ^»É U“É³Ø ÛÜÔ ËÂǵÛÜÒÕËÂÖ«ÍÂØµÒïÊ›Ö«Ë ËÂZ
Ê _É ÛÜÞÀεÍäБٟËÂÛñ٬Бá `Äí‘ÖÚØµáÜɟҝÒ
ì“Ê›Ö БáñÒÊ ÙäÇÚБصå›ÉÏ˝ÇÚÉÏǵɬБèµÉŸ
Í YÚáÜÉÏËÇ ÐÑËòÙŸÊ›Ø ËäБÛñØÚÒïËÂǵÉÏÔ×ÖµØÚÙÄËÂÛÜʛØóèµÉ³Ù³áÜÐçÍäÐçËÂÛñʛؾé
\ Üá ҝʫíÚØµÊÌË Ð‘áñá U‘ÐçÍÂÛÜÐ _ÚáÜɳҹËÂÇÚÐçË Ù³Ê›ÖµáÜè _ ÉëèµÉ³Ù³á×ÐÑÍÂɳè
ÛñØ Ð¿ÎµÍÂʛåÌÍäÐçÞ Ðç͝ÉâË ìôÎÚÛÜ٬Бáñáñì®èµÊ›ØÚÉ
const
ҝʫíÕҝÛÜÞÀÎÚáñì _ ɟ٬Бֵҝɞ۲ˏޮР]“ɳÒ^˜ÊÌÍÀÐÑÎÚ΍ɬÐçÍÂÒ ËÂÊ Þ®Ð ]“É`âØµÊ èµÛ ÉÄÍÂɳصٳɞÛñØ ËÂÇµÉ Ù³Ê›Ø ËÂÉGP¥ËÀʛÔÈËÂǵÉ
èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜÊ›Ø¤é ·ÒïБخÉIPµÐçÞÀÎ áñÉÌí ٟʛØÚÒîÛÜèµÉŸÍïáÜÛÜØµÉ ÛÜØ ÍÂʛåÌÍÂÐ‘Þ \ ÛñË
΍ʛҝҝÛV_ÚáÜÉÈËÂÊàèµÉ³Ù³á×Ðç͝ɷËÂǵÉ
—˜Ž ޮР]“ÉÈÐÏèµÛ ɟÍÂɳصٳÉÌí¯ÒÛÜØµÙ³É
U‘ÐçÍÂÛ×Ð _ÚáÜÉ Ð‘
Ò _É³ÛÜØµåãʛÔٳʛصÒîË˜Ë ì Î É
í_ÚÖµËÃÛñËÕèµÊôɳÒîØ ËÃ
ËÂǵÛÜR
Ò U‘ÐçÍÂÛ×Ð t_ÚáÜÉÓÊ Ù³Ù³Ö«ÍÂҷʛصٳÉÏʛصáñì БÔÜËÂconst
ɟÍîæÈÐçÍÂèµrational
Ò³íµÐ‘صèžËÂǵÛÜÒ¹Ê Ù³Ù³Ö«ÍÍÂɳصٳÉãÛÜҙֵÒîËÈËÂÇ«ÍÂɳÉãáÜÛÜØµÉ³ÒR_ ɳáñÊÑæâé
[ ÊÌÍïٳʛصٟÍÂɟ˝ɳصɳҝҳí¥áñÉŸË ÖµÒ Òî˝ÛñÎÚÖÚáÜÐçËÂÉïËÂÇÚÐçËï
Ð UÌÐÑÍÂÛ×Ð _ÚáÜɹËÂÇÚÐçË ÛñҋÞßɬБدËÕ˝ÊëÇÚÐKU“ɷٳʛصÒîËäÐ‘Ø¯Ë U‘БáÜÖµÉ
ҝǵʛֵáÜèžèµÉ YÚØµÛñËÂɟáñì®å›ÉŸËòٳʛصÒîË ˜Ë ì Î ÉãÛñÔ ÛñËÂÒÈҝٳÊÌ΍ÉãÒîΠБصÒòÞßÊÌÍÂÉ ËÂÇÚÐ‘Ø áÜÛÜØµÉ³Ò¹Ê›Ô Ù³Ê èµÉÌé
4.2.10 Goals
˹ËÂǵÛÜҹΠʛÛÜØ¯Ë¬íôì“Ê›ÖóÒîÇÚʛֵáÜè é³é³é
¹
Dispositional.
`ßÖµØÚèµÉŸÍÒîËäБصèžËÂǵÉãБáÜÛ×ÐçÒïٳʛصٳɟεË_ ɟÇÚÛñØÚè ÍÂɳÔ×ɟ͝ɳصٳÉâË ôì ΠɟҷБصèžËÇÚÉ ÉŸÔ×ɟÍÂÉ³ØµÙ³É ÖµÛÜèµÉ³áÜÛÜØµÉ ` ÖµØÚèµÉŸÍÒîËäБصè ËÂǵÉÈèµÛ ÉŸÍÉ³ØµÙ³É
_ ÉŸË æ¹É³É³Ø
‘Ð صè
ÒîÉ³Þ®Ð‘Ø ËÛÜÙ³Ò Ô×ÊÌÍ
\ ß
´
±
¯
©
»
’
’
K
J
D
ô
¯
©
•
’
”
Œ
´
±
¯
©
»
’
’
K
ß
J
Ÿ
£
˜
Œ
‘
¶
³
Œ
Ÿ
£
³
Œ
š
Ÿ
±
Œ
Ô×ÖÚØµÙŸËÛÜʛ؞ΠÐçÍäБÞßÉÄËÂɟÍÂÒ
`ßÖµØÚèµÉŸÍÒîËäБصèóٳʛصÒîË ˜Ë ìôÎ ÉŸÒ Ð‘Øµè ˝ÇÚÉ ¹Ê›ØµÒîË
Operational.
ÖÚÛñèÚɟáÜÛÜØµÉÌé
ê˜ØžÎ Ðç͝ËÂÛñÙ³Öµá×Ðçͬí¯ì“Ê›Ö ҝǵʛÖÚáñè _ ÉãÐ _ÚáÜÉ ËÂʞéŸé¬é
`®Ò™ËäÐçËÂɹÉIP«Ð‘ÙŸËÃÎÚÍÉ Ð‘Øµè ΍ʛÒîËÂٳʛصèµÛñËÂÛÜÊ›ØµÒ Ô×ÊÌÍÕÔ×ֵصٟËÂÛÜʛصÒÃÛÜØ U“Ê›áVUôÛÜØµå Ô×ÊÌÍÂޮБá¥Î ÐçÍäÐçÞßɟËÂÉŸÍ Ë ìô΍ɳÒ
^
ÌÊ ÍÈÍÂɟËÂÖ«ÍÂØ Ë ì ΠɳÒòʛԡÍÂɳÔ×ÉÄÍÂɳصٳÉàБصè ÊÌÍÈٳʛصÒîË»Ë ì Î É ^ \ `ßæòÍÂÛñËÂÉÓÔ×ֵصٟËÂÛÜʛصÒïËÂÇÚÐçËòÞßÊôèµÛÜÔÜì ^»ÒÊ›ÞßÉÓÊ›Ô ` ËÂǵɳÛñÍÈ٬Бáñá¤Î ÐçÍÂБÞßɟËÂɟ͝Ò
^ ` YÚØµè Òîì¥Ø¯ËäБٟËÂÛñ٬Бá Бصè ҝɳޮБدËÂÛÜÙ¬Ðçáɟ͝͝ÊÌÍÂÒòÛñخεÍÂʛåÌÍÂБÞßҋËÂÇÚÐçËÈÐç͝ÉÏèµÖµÉ ËÂÊ ÛÜÞÀεÍÂÊÌΠɟ͋ÇÚБØ
èµáÜÛÜØµå Ê›Ô ÍÂɟÔ×ɟÍÂɳصٳÉâË ì Î É³Ò ^
` YÚØµè Òîì¥Ø¯ËäБٟËÂÛñ٬Бá Бصè ҝɳޮБدËÂÛÜÙ¬Ðçáɟ͝͝ÊÌÍÂÒòÛñخεÍÂʛåÌÍÂБÞßҋËÂÇÚÐçËÈÐç͝ÉÏèµÖµÉ ËÂÊ ÛÜÞÀεÍÂÊÌΠɟ͋ÇÚБØ
èµáÜÛÜØµå Ê›Ô Ù³Ê›ØµÒîË ˜Ë ìôÎ ÉŸÒ ^ ` YÚØµè ËÂǵɏèµÉ³Ù³áÜÐçÍäÐçËÂÛñʛØÚÒ·ÛÜØ Ðßå›VÛ U“ɟؽεÍÂʛåÌÍäÐ‘Þ æ·ÇµÊ›ÒÉàË ì ΠɳÒÓҝǵʛֵáÜè _É¿ÙŸÊ›ØÚÒ™Ë Ð‘ÙŸÙ³ÊÌÍÂèµÛÜØµå
ËÂÊ¿ËÂÇµÉ ïʛصÒîË ÖµÛÜèµÉ³áÜÛÜØµÉÌé
4.2.11 Exercises
Exercise 115 Ӑ›š¤ŽŸ— FµŒ³£À–ºŠŒò¶‘“’°’§›¸¹—»šÁ϶ѩ“¨ž—˜’ J Â¶¹¶Ÿ” 𠱬–˜—š¤Ž
T foo (S i)
{
return ++ i;
}
¸ —˜–ºŠ
¹
³Œ³—°šÁݐ›š Œ®Â¶ –ºŠŒ – J¦¢ Œ¬Ž int int& ©“šF const int& Ó©“šF
³Œ³—°šÁݐ›š Œ Â¶ –ºŠŒ
– ¦J ¢ Œ¬Ž int const int int& “© šF const int& ÅLH牋Š¥—»Ž FµŒ š Œ¬Ž F“— Œ³£ŸŒ³š¤– ¶Ÿ” 𠱬–˜—š¤ŽNMôÅ
©KM
°— šF º– ŠŒó±Ÿ›¨ ¬—»š ©¯–˜—™›š¤ŽžÂ¶
“© šF
¶ç›£À¸ÈŠ¥—ŠÝ–ºŠŒß£ŸŒ¬ŽŸ”’­–˜—»šÁ붟”š ±³–˜—š FµŒ š —»–˜—š
—»Ž¿ŽIJ š¤î– ©µ±¬–˜—™±Ä©¯’°’EJ Dô©¯’•—NF ©“šF݌ ¦¢¾ª’ ©“—°š ÚJ ›”£®©“š¤ŽŸ¸ÓŒ³£ÌÅ
\ \
M
¨ ›šÁݖºŠŒÝ±Ÿ›¨ ¬—»š ©¯–˜—™›š¤Žâ¶‘›” š Fݗ°š ©KM
šF –ºŠŒÝ±Ÿ›¨ ¬—»š ©¯–˜—™›š¤Ž Â¶
©“šF
¶‘›£
¸ÈŠ¥—î±³Šß–ºŠŒÏ£ŸŒ¬ŽŸ”’­–˜—»šÁ¹¶Ä”𠱬–˜—™›š FµŒ š —˜ –˜—™›š »— Žã©¯’­Ž‘ Ž‘Œ³¨ ©“š¤–˜—î±Ä©¯’°’EJ Dô©¯’•—NF ¨ Œ´©“š —»šÁ–ºŠ©¯–
¶Ä”𠱬–˜—™›š¼±´©¯’»’­ŽÀ©¯’­¸ © J ŽàŠ©D¥Œà¸ÓŒ¬’»’ GFµŒ š ŒGF ôD ©¯’•” ŒÀ©“šF½Œ ŒÄ±¬– Œ¦¢¾’ש“—»š J › ” £®©“š¤ŽÄ¸ÏŒŸ£ÌÅ
±M
› £ ©¯’»’â±Ä›¨½ ¬—°š ©¯–˜—î›š¤Ž ¶‘›”šF —»š M
Ž™¢›šF“—»šÁ㶟”š ±³–˜—š foo Å
Á›— D¥Œ ¢¤£ŸŒŸ±³—»Ž‘Œ ¢ “ŽŸ–±Ÿ›šF“—˜–˜—™›š¤Ž¿¶ç›£ –ºŠŒ ±Ä›£¬£³Œ
^
`I^
`I^
^
Exercise 116 Ý£¬—»–Œ ©â¶Ÿ”š ±³–˜—î›š –ºŠ©¯–·ŽŸ¸ ©¬¢¾Ž¿–ºŠŒ Dô©¯’•” Œ¬Ž®Â¶¿–˜¸Ï int Dô©“£¬—™©« ¦’ªŒ¬ŽçÅ
[ ÊÌÍ·ÉGPµÐ‘ÞÀÎÚáÜÉÌí
`
\ `
int a = 5;
int b = 6;
// here comes your function call
std :: cout < < a < < "\n" ; // outputs 6
std :: cout < < b < < "\n" ; // outputs 5
صÊÌÍÂÞ®ÐçáÜ۳ɳÒ
Œ ¸ “© š¤–ž– Š ©D¥Œ¼©½¶Ÿ” 𠱬–˜—î›š –ºŠ©¯–
© £Ÿ©¯–˜—™›š ©¯’ëš ”¨ ³ Œ³£ — ،‘Å
–˜£Ÿ©“š¤Ž»¶ç›£¬¨óŽà—˜–¹—»š¤– º– ŠŒ¿”š — ” Œà£³Œî¢¤£ŸŒ¬Ž‘Œ³š¤––˜—™›š —»š È
¸ Š¥—î±¬Š š ”¨½Œ³£Ÿ©¯–›£ ©“šF FµŒ³š ›¨ —»š ©¯– ›£
©“£³Œ£³Œ¬’ש¯–˜— D¥Œ¬’ J®¢¤£¬—»¨ Œ ©“šF –ºŠŒ FµŒŸš ›¨ž—»š ©¯–›£—˜Ž ¢ “ŸŽ —»–˜— D¥Œ‘Å ›£žŒ«©“¨¢¾’ªŒ
Exercise 117
21
−14
—˜Ž 𠐛£¬¨½©¯’•— ŒIF –
−3
.
2
‰ÕŠŒ³£³Œ ©“£ŸŒÀ–˜¸Óó𠩝–˜”£Ä©¯’D¥Œ³£¦ŽŸ—™›š¤Ž Â¶¿–ºŠ¥—˜Ž¹¶Ÿ” 𠱬–˜—š
// POST : r is normalized
void normalize ( rational & r );
// POST : return value is the normalization of r
rational normalize ( const rational & r );
 ¨¢¾’ªŒ³¨½Œ³š¤–␛š
Hint: Jڐ›” ¨½©J
ŒžÂ¶ –ºŠŒŸ¨ Ó©“šF ©“£îÁ›”¡Œ ¸ÈŠJ Jڐ›” Š ©DôŒ ¬± Š“ŽçŒ³šœ—» –㐠¥D Œ³£À–ºŠŒž
“–ºŠŒ³£ ›š Œ‘Å
¸ ©“š¤–Ó–ó”Ž‘Œ –ºŠŒ ¶Ÿ” 𠱬–˜— š gcd ¶Ä³£ ›¨
ŸŒ ±¬–˜—™›š Å ¹¨  F“— ŒIF ¶‘›^£Ï¢\ ©“`I£Ÿ^ ©“¨ \ `
Œ¬–Œ³£¦Ž Â¶¿– ÑJ ¢ Œ int HŠ›¸ FµÌŒ³Ž–ºŠ¥—»Ž¿¨½ F“— ±´©¯–˜—î›š ª’ Ì ’­— ôŒ M¥Å
Exercise 118 È£³ D‘—NFµŒ © FµŒ
š —˜–˜—™›š Â¶¿–ºŠŒÈ¶‘“’»’ª›¸¹—»šÁ㶟” 𠱬–˜—š Å
// POST : return value indicates whether the linear equation
//
a * x + b = 0 has a real solution x ; if true is
//
returned , the value s satisfies a * s + b = 0
bool solve ( double a , double b , double & s );
\ ‰ Œ¬ŽŸ–Jڐ›”£·¶Ä”𠱬–˜—™›šœ—°š © ¢¤£ŸŸÁ›£Ÿ©“¨ð¶‘›£®©¯– ’§Œ´©¯Ž³– –ºŠŒÏ¢©“—»£¦Ž (a, b) ¶Ä£³›¨
–ºŠŒ Ž‘Œ³–
{(2, 1), (0, 2), (0, 0), (3, −4)}.
^
\ `
ŒÄ±Ÿ›š¤ŽŸ— µF Œ³£ –ºŠŒ¾¶‘“’»’ª›¸¹—»šÁ¹¢¤£³ŸÁÌ£Ÿ©“¨óŽÓ©“šF◠FµŒ³š¤–˜— ¶IJ –ºŠŒ µF ŒÄ±¬’ª©“£Ä©¯–˜—î›š¤Ž HŸÂ¶RDô©“£¬—
©« ¦’ªŒ¬Žë› £ ‘¶ ›£¬¨ ©¯’“¢©“£Ä©“¨ Œ¬–Œ³£¦Ž M—°š ¸òŠ¥—™±¬ŠLJڐ›”ݱŸ›”’ F £³Œ™¢¾’ª©µ±ÄŒ¿©¿– J¦¢ Œ
K J—˜–ºŽë±Ä›š¤Ž³– ND¥ŒŸ£¦ŽŸ—š
const Å
Exercise 119
©KM ¹£³ŸÁ›£Ä©“¨
H Ó©›Á«Œ
M ¹£³ŸÁ›£Ä©“¨
H Ó©›Á«Œ
± M ¹£³ŸÁ›£Ä©“¨
FKM ¹£³ŸÁ›£Ä©“¨
Œ M ¹£³ŸÁ›£Ä©“¨
M
M
H Ó©›Á«Œ H Ó©›Á«Œ
H Ó©›Á«Œ
KM
M
M
^
`
»— šF ©¯’»’à ¨ž—˜ŽŸ–î© ôŒ¬Ž Hî— ¶ ©“š J M —°š –ºŠŒÓ¶‘“’°’§›¸¹—°šÁߢ¤£³ŸÁ›£Ÿ©“¨žŽ ੓šFœ Œ ¦¢¾’ª©“—°š ¸ÈŠJ
–ºŠŒ¬Ž‘Œ ©“£³Œß¨ —˜Ž³–î© Œ¬ŽçÅ ’»’¾¢¤£ŸŸÁ›£Ÿ©“¨žŽ ŽŸŠ©“£³Œ®–ºŠŒÓ¶‘“’»’ª›¸¹—»šÁ –˜¸Ó¿¶Ÿ” 𠱬–˜—š FµŒ š —»–˜—î›š¤Žž©“šF
› 𤒠J F“— Œ³£À—°š –ºŠŒ³—°£ main ¶Ÿ” 𠱬–˜—š¤ŽçÅ
Exercise 120
int foo ( int & i ) {
return i += 2;
}
const int & bar ( int & i ) {
return i += 2;
}
©KM
M
int main ()
{
const int i = 5;
int & j = foo ( i );
}
int main ()
{
int i = 5;
const int & j = foo ( i );
}
\ ±M
int main ()
{
int i = 5;
const int & j = bar ( foo ( i ));
}
FKM int main ()
{
int i = 5;
const int & j = foo ( bar ( i ));
}
ŒM
int main ()
{
int i = 5;
const int j = bar (++ i );
}
4.2.12 Challenges
ٳʛ
Þ ³Ž –î©“šF«©“£ F’•—™ ¬£Ä©“£KJ ©¯’­Ž‘ß±Ÿ›š¤–î©“—°š¤Žâ©¿– JÑ¢Œ ¶‘›£à±Ÿ›¨¿¢¤”–˜—°šÁู—˜–ºŠ
Å
±Ÿ›¨¢¾’ªŒ š ” ¨½ ŸŒ³£ó¸ÈŠŒ³£³Œ Ÿ“–ºŠ –ºŠŒž£³Œ´©¯’Ó©“šF –ºŠŒž—»¨ ©›Á›—»š ©“£KJ󢩓£¦–©“£³Œ
double Ž¿Š©¯Ž– ¦J ¢ Œ std::complex<double> H J ›” š ŒÄIŒ F – #include <complex> —»š ›£IFµŒ³£
–ÀÁ«Œ¬–ï–ºŠ¥—»Žâ– ¦J ¢ Œ‘Å 𠐛£ FµŒ³£ –ÀÁ«Œ³–·©ó© ±Ÿ›¨¿¢¾’§Œ ®š ”¨½ ŸŒ³£ ¸¹—˜–ºŠž£³Œ´©¯’Ú¢©“£¦– r ©“šFߗ»¨ ©›Á›—»š ©“£KJ
¢©“£¦– i RJڐ›” ±Ä©“š ”Ž‘Œ –ºŠŒ Œ ¦¢¤£³Œ³Ž³ŽŸ—š
Exercise 121 ‰‹ŠŒ ÎÚáÜÉIP½ØôÖµÞ_ ɟÍÂÒ
std :: complex < double >(r ,i ); // r and i are of type double
ϖºŠŒŸ£¬¸È—»Ž‘Œ
±Ä›¨¢¾’ªŒë𠔍½ ŸŒ³£¦Žò¸Ó›£ ੯Ž Œ¦¢ ŒÄ±¬–ŒIF«Å ’»’¥–ºŠŒò޳–î©“šF«©“£ F ³¢ Œ³£Ÿ©¯–›£¦Ž HÄ©“£¬—»–ºŠ
¨ Œ³–˜—î± ¹£³Œ¬’ש¯–˜—î›š ©¯’ M ©“
š Fž¨ ©¯–ºŠŒ³¨½©¯–˜—™±Ä©¯’¥¶Ä”𠱬–˜—™›š¤Ž H std::sqrt std::abs std::pow śÅÌÅ M
©“£³Œž©D ©“—˜’ש« ¦’§ŒçÅ ‰ÕŠŒó³¢ Œ³£Ä©¯–›£¦Ž ©¯’²Žçó¸Ó›£ ž—»š ¨ — ڌGF Œ¦¢¤£³Œ¬ŽŸŽŸ—î›š¤Ž ¸ÈŠŒ³£ŸŒ ›š Œó³¢ Œ³£Ÿ©“šF —»Ž
Â¶ – J¦¢ Œ std::complex<double> ©“
š Fœ–ºŠŒ “–ºŠŒ³£ ›š Œ Â¶ – J¦¢ Œ double Å ¶ ±Ÿ›” £¦Ž‘Œ bJ ›”
±Ä©“𠩝’²Ž‘ —»š¥¢¤”–Ï©“
š Fݐ›”–ñ¢¤”–Ó±Ÿ›¨¿¢¾ ’§Œ 𠔍½ ŸŒ³£¦ŽçÅ
³
Œ
³
£
à
Œ
»
—
â
Ž
º
–

Š
À
Œ
µ
©
¬
±
–˜”¾©¯’ñ³Š©¯’»’ªŒ³šÁ«Œ —»¨¿¢¾’§ŒŸ¨ Œ³š¤–ï–ºŠŒï¶ç“’»’ª›¸È—°šÁ ¶Ä”𠱬–˜—™›šß¶‘›£ Ž‘“’ D̗»šÁ󱳔¡ ¬—™±
Œ ”¡©¯–˜—î›š¤Ž® D¥Œ³£À–ºŠŒž±Ÿ›¨¿¢¾’§Œ 𠔍 ³Œ³£¦Ž
// POST : return value is the number of distinct ( complex ) solutions
//
of the cubic equation ax ^3 + bx ^2 + cx + d = 0. If there
//
are infinitely many solutions ( a=b= c=d =0) , the return
//
value is -1. Otherwise , the return value is a number n
//
from {0 ,1 ,2 ,3} , and the solutions are written to s1 ,.. , sn
int solve_cubic_equation ( std :: complex < double > a ,
std :: complex < double > b ,
std :: complex < double > c ,
std :: complex < double > d ,
\ std :: complex < double >& s1 ,
std :: complex < double >& s2 ,
std :: complex < double >& s3 );
¬£ —˜–Œ ©¿¢¤£³ŸÁÌ£Ÿ©“¨ –ºŠ©¯–ò–Œ¬Ž³–ºŽJ ›” £ò¶Ä”𠱬–˜—™›š Å ›£ Œµ©“¨¿¢¾’§Œ Jڐ›” ¨½©J ŽÄ”¡ ¦Ž³–˜—»–˜”–Œ–ºŠŒ
Ž‘“’•”–˜—™›š¤Ž £³Œ¬–˜” £¬š ŒIF KJ –ºŠŒ ©« ³ DôŒß¶Ÿ”š ±³–˜—î›š —»š¤– ax3 + bx2 + cx + d = 0 ©“šF ±¬ŠŒŸ±
¸ÈŠŒ¬–ºŠŒ³£ß–ºŠŒ Œ ¦¢¤£³Œ³Ž³ŽŸ—î›š —»šFµŒÄŒIF ŒXDô©¯’•”¡©¯–Œ³Ž– HÄ©¬¢«¢¤£³ ¯—°¨½©¯–Œ¬’ J M ¹ÐçÍŒ³èÚ£Ÿ¥Ð‘ØµÅ Ê Ò¹Ô×ÊÌÍÂÞ¿Öµá×Ð
šF󖺊Œš ŒÄ±ŸŒ¬ŽŸŽç©“£KJ –ºŠŒÄ›£KJ ”šFµŒ³£ –ºŠŒ ôŒXJ¯¸Ó›£ F
Å
Hint: ›”
\ 4.3 Classes
Œ¬–ò¨ Œ–Œ¬’»’ Jڐ›” –ºŠ¥—»Žà—»š ±³’§“ŽŸ—°šÁ
‘𠐛¸ ¸ÓŒ ¨ —°Á“Š«–òŽ‘ŒŸŒ³¨ —»¨¿¢ “ŽŸ—°šÁ
”–·–˜£¬”޳–ò¨½Œ — ¶à¸ÓŒ ŒXD¥Œ³£ßŽŸŠ›¸ —»šJ ›” £ÀŽ‘ŒÄ±¬–˜—š
댳’­—™XŒ D¥Œ ¨½Œ—»–ºŽÈ¶ç›£ Jڐ›”£ ›¸È𠢤£³“–ŒŸ±³–˜—š
—»’»’
¨ž—»–ºŠ Œ³š —»š
H M
’ª©µ±
‰ Š¥—˜Ž Ž‘ŒÄ±¬–˜—î›š —°š¤–˜£³ F“” ±ÄŒ¬Žœ–ºŠŒ ±Ÿ›š ±ÄŒî¢¾–ݐ¶ ±¬’ª©¯ŽŸŽ‘Œ¬Ž ©¯Ž ©“šðŒ –Œ³š¤ŽŸ—™›š Â¶ –ºŠŒ
Õ
޳–˜£¬”¡±¬–·±Ä›š ±ŸŒî¢¾–¶Ä£³›¨
ŒÄ±¬–˜—š Å ¥Å ›” ¸È—»’»’ ’ªŒÄ©“£¬š ©« Ÿ›”–F«©¯–Œ³š ±Ä©¬¢¾ŽŸ”’ª©¯–˜—™›š
©¯Ž © F“—»Ž³–˜—»šÁ›” —˜Ž³Š¥—°šÁž¶çŒÄ©¯–˜” £³ŒœÂ¶ ±¬’ש¯Ž³Ž‘Œ¬ŽÑÅ ‰ÕŠ¥—˜Žà¶‘ Œ´©¯–˜”£³ŒÝ¨ © ôŒ¬Ž½– JÑ¢ Œ½—»¨¿¢¾’§Œ
¨½Œ³š¤––˜—î›š¤Ž ¨ ›£³Œ½Žç©ä¶çŒ ©“šF Œ ¯—™ ¦’ªŒ‘Å
›” ¸¹—»’»’ £¦Ž³–¿’§Œ´©“£¬š ±¬’ש¯Ž³Ž‘Œ³Ž ¶çŒÄ©¯–˜” £³Œ
K J ¶çŒÄ©¯–˜”£ŸŒ ¶‘›£½£Ÿ©¯–˜—î›š ©¯’ š ” ¨½ ³ŒŸ£¦Ž ž©“šF –ºŠŒ³š Ž‘ŒŸŒ –˜¸Ï ±Ÿ›¨¢¾’ªŒ¬–Œ ±³’ª©¯Ž³ŽçŒ¬Ž —°š
±Ä›š š ŒŸ±¬–˜—™›š ¸È—»–ºŠ £Ÿ©“
š Fµ›¨ 𠔍 ³Œ³£ÀÁ¥Œ³š Œ³£Ÿ©¯–˜—™›š Å
4.3.1 Encapsulation
ê˜Ø½ËÇÚÉàεÍÂÉ UôÛÜÊ›ÖµÒ Ë æ¹Ê ҝɟٟËÂÛÜÊ›ØµÒ³íæ¹É ÇÚÐXU“É¿èµÉ YÚØµÉ³è Юصɟæ ҙ˝ÍÂÖµÙŸË Ë ìôÎ É
æ·ÇµÊ›ÒÉZUÌÐçáÜÖµÉ
rational
ÍäБصå›É¹ÞßÊôèµÉ³áñÒ ËÂǵÉÈÞ®ÐÑËÂǵɳޮÐçËÂÛÜٳБá¯Ë ì Î É ^»ËÂǵɹҝɟËÕÊ›Ô ÍäÐÑËÂÛÜʛØÚÐ‘á¥Ø ÖÚÞ_ ÉŸÍÒ `Äí“Ð‘Øµè æ¹É¹ÇÚÐXU“ÉòÒÇµÊ¦æ Ø
ǵÊÑæ ÛñË¹Ù¬Ð‘Ø _ ÉÓXÉ WôÖµÛñÎµÎ É³è®æ Û²ËÂǮҝʛÞßÉ ÖµÒÉ³Ô×Öµá¤Ô×ÖÚØµÙŸËÛÜʛØÚБáÜÛñË ì ^ºÐçÍÂÛñ˝ÇÚÞßÉÄËÂÛÜÙòБصè ÍÂɳáÜÐçËÂÛÜʛØÚБáÚÊÌΠɟÍäÐ ËÂÊÌÍÂҟíÚÛñصÎÚÖ«ËòБصèžÊ›Ö«ËÎÚÖ«GË `Äé
Æ ÊžÞßÊÌ˝VÛ UÌÐÑËÂÉëËÂǵɿËîÍäБصҝÛñËÂÛñʛؽÔÜÍÂÊ›Þ Òî˝͝ÖÚÙÄËÂÒÏ˝ʞٳá×ÐçҝҝɳÒãÛÜØ½ËÂǵÛÜÒÏҝɳÙÄËÂÛÜÊ›Ø ^˜Ð‘صèÝÛÜØ½Î ÐçÍîËÂÛÜÙ³Öµá×ÐçÍ
ËÂǵÉÀÐçÒîΠɳٟËëÊ›Ô É³ØµÙ¬ÐçÎÚҝֵá×Ðç˝ÛÜÊ›Ø `Äí¤áÜɟËëÖµÒãÒîËäÐç͝ËâÊ œæ·ÛñËÂÇÝЮËÂǵʛֵå›Ç ËëGÉ P¥Î ɟ͝ÛÜÞßÉ³Ø Ë³é " Ö«ÎµÎ Ê›ÒÉ ì“Ê›Ö
ÇÚXÐ U“ÉÀÎ Ö«ËàËÂǵÉßÒîËîÍÂֵٟË
БصèœÐ‘áñáÕËÂǵÉÀÔ×ֵصٟËÂÛÜʛØÚБáñÛñË ì½ËÂÇÚÐçËâæ¹ÉßÇ XÐ U“ÉßèµÉ U“ɳáñÊÌΠɳè ÛÜØ ËÂÊóÐ
صÛÜٳɮáÜVÛ _µÍäÐÑ͝ì“é ê˜Ø P«ÉŸÍrational
Ù³ÛÜҝÉ
ì“ʛ֜ÇÚXÐ U“É БٟËÂÖÚБáÜá²ìÝèµÊ›ØµÉÀËÂǵÛÜÒ³í Ô×ÊÌÍ ËÂǵ
É U“ÉÄ͝ì _ÐçҝÛÜL
Ù U“ÉŸÍÂÒîÛÜʛ؜ʛÔ
??
ËÂÇµÉ Ë ìô΍É
ÔÜÍÊ›Þ ÍÊ›åÌÍäÐ‘Þ ÐçØÚè ÍÂʛåÌÍäÐ‘Þ é O ʦæ ì“Ê›Ö ÇÚXÐ U“ÉßҝʛáÜè ËÂǵÉÀáÜÛ _ÚÍÂÐç͝ì
ËÂÊ Ð¿Ù³ÖµÒî˝ʛrational
ÞßÉŸÍ «áÜÉŸË Ò¹Ù¬Ð‘áÜá¤ÛñË ÕÆ ^
`´é ÕÆ ÛñÒòÛÜØµÛñ˝Û×БáÜáñìÇÚÐçεÎôì®æ Û²ËÂÇ
¯
©
˜
–
™
—
›

š
¯
©
’
‹
‰
¥
Š
°
—
š
‘
»
—

š
Á
𠱑Å
ËÂǵɿÔ×ÖÚØµÙŸËÛÜʛØÚБáÜÛñË ìžËÇ ÐÑËÏ˝ÇÚÉ¿áÜVÛ _µÍäÐÑ͝ìóεÍÂÊ U¥ÛÜèµÉ³Ò³í¾Ð‘صè½ÒîËäÐç͝˝ÒÏæ¹ÊÌÍ ]ôÛÜØµåßæ ÛñËÂÇ ÛñË¬é ‹Ö«ËÓËÂǵɳØÝÒîʛÞßÉ
ֵثΠáñɬБÒÂБدËÈÛÜҝҝֵɳÒòٳʛÞßÉÓֵξé
" ʛÞßÉ Ù³Ê èµÉßèÚÉIU“ɳáÜÊÌΠɳè ÐÑË
ÃÆ صɳɳèµÒëËÂÊ ÛÜØµÛñËÂÛÜБáÜÛ³É Ð
Issue 1: Initialization is cumbersome.
صɟæ U‘ÐçÍÂÛ×Ð _ÚáÜÉ æ Û²ËÂÇ ËÂµÇ É ÍÂÐçËÂÛÜʛØÚÐ‘á¡ØôÖµÞb_ÉŸÍ
¤Ô×ÊÌÍÓËÂǵÛÜÒ³íËÂǵÉàεÍÂʛåÌÍäБÞßÞßɟͷÛÜØ Ù´ÇÚÐç͝å›É¿Þ¿ÖµÒîË
r
1/2
æ·ÍÛñËÂÉ
rational r ; // default - initialization of r
r.n = 1;
// assignment to data member
r.d = 2;
// assignment to data member
Æ ÇÚÉÏèµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛØ
¹
èµÉ³ÔªÐ‘Öµáñ˘ÛÜØµÛñËÂÛ×ÐçáÜÛ³É³Ò í_ ֫˹ËÂǵÉãБٟËÂÖÚБá U‘БáÜÖµÉÏÊ›Ô Þ¿ÖµÒîËR_ ÉÓεÍÂÊ rational r
U¥ÛñèÚɟèÀËÂÇ«ÍÂʛֵå›Ç
ÐçҝҝÛÜ囨µÞßɳدËÂÒ á×ÐçËÂɟͳé ÃÆœËÂɳáÜáµrì“Ê›ÖÀËÂÇÚÐçËÃËÂÇµÉŸì æ¹Ê›ÖµáÜè¿ÎµÍÂɳÔ×ɟrÍïËÂÊãÛÜØµÛñËÂÛ×ÐçáÜÛ³É
ÔÜÍÂÊ›Þ ËÂǵÉëØôÖµÞßɟ–˜Íä¸Ó
ÐÑː ÊÌÍòБصè èÚɟØÚʛÞßÛñØ ÐÑËÂÊÌÍÈÛÜØóʛصÉëå›Ê«í Бصèóì“Ê›Ö ͝ɬБáÜ۟ÉÏËÂÇÚÐçËòËÂǵɟì Ç ÐXU“ÉàРΠʛÛÜØ¯rË
\ µÇ ɟÍÂÉÌé ê˜ØµèÚɟɳè¤íÕÛÜÔ¹ËÂǵÉÀεÍÂʛåÌÍäБÞßÞßÉÄÍàÐçË ÕÆ Ô×ÊÌÍÂå›ÉŸËÂÒ Ê›ØµÉ®Ê›ÔÈ˝ÇÚÉ Ð‘ÒîҝÛÜ囨µÞßÉ³Ø ËÒ³í ÇÚÐ‘Ò ÖµØµèµÉ YÚØµÉ³è U‘БáÜÖµÉb^ºÐ‘صè ì“Ê›Öóå›ÉÄËòËÂÊ¿ÇÚБصèµáÜÉ ËÂǵÉ
_ÚÖµåÍÉŸÎ ÊÌ͝ËÂÒ `ÄéÃê˜Ô¡ËÂǵÉÏÒî˝ÍÂֵٟËòÛÜÒ¹á×ÐçÍÂå›ÉÄÍ ^»Ù³rʛصҝÛÜèµÉŸÍ¹ËÂǵÉ
IÉ P«Ð‘ÞÀÎÚáÜÉ Ê›Ô
Ê›Ø Î Ð‘å›É \ `Äí¥ËÂǵÉãεÍÂÊ _ÚáÜÉŸÞ ÛÜÒ·ÐçÞÀÎ áñÛVYÚɳè¤é
rational_vector_3
Ø ì®áÜɟå“Бá UÌÐçáÜÖµÉÏʛԤËÂǵÉÓË ì Î É
Þ¿ÖµÒîËÈÇ XÐ U“É
Issue 2: Invariants cannot be guaranteed.
Рصʛ؟ ɟÍÂÊ èÚɟØÚʛÞßÛñØ ÐÑËÂÊÌͬé Ê›Ö ÇÚÐXU“É®ÒîËÂñÛ ÎÚÖµá×ÐçËÂɟè ˝ÇÚÛñҏÐçҏÐçØœÛÜØ UÌÐç͝Û×Ð‘Ø Ëërational
ÛÜØ ÍÂʛåÌÍäÐçÞ í _Ú«Ö Ë
ËÂǵɟÍÂÉÏÛÜÒÈØµÊæÈгì Ê›Ô É³ØµÔ×ÊÌÍÂÙ³ÛÜØµå ËÂǵÛÜÒÈÛÜØ U‘ÐçÍÂÛ×ÐçØ Ë¬é ê»ËòÛÜҹΠʛҝҝÛV_ÚáÜÉÓÔ×ÊÌÍ·Ð‘Ø ì“ʛصÉÏËÂÊ¿æòÍÂÛñËÂÉ
rational r ;
r.n = 1;
r.d = 0;
БصèßËÂÇôÖµÒ UôÛÜʛá×Ðç˝ÉÈËÂǵÉ
Ê›Ô ËÂÇµÉ·Ë ìô΍ÉÌí ËÂÇµÉ Ù³ÊÌÍîÍÂɳٟËÂØµÉ³ÒîÒïʛԍËÂÇµÉ ÛÜØ ËÂÉÄÍÂØÚБáÚ͝ɟεÍÂɳҝɳدËäÐçËÂÛñʛؾé
°— š¤–Œ™Á›£¬—»– J
Ê›Ö ÞßÛñå›Ç Ë ÐÑÍÂå›ÖµÉëËÂÇÚÐçË ÛñË æ¹Ê›ÖµáÜè _É WôÖµÛñËÂÉëҙËÂÖ«Î Ûñè ˝ʮæòÍÂÛñËÂÉ
í¤Ð‘صè ÉIU“ɳؽËÂǵÉëεÍÂÊ r.d = 0
åÌÍäБÞßÞßÉÄ͹ÐçË ÃÆ ٬Б
Ø Ë _ ÉÓËÂÇÚÐçËòÒîËÂÖ«ÎÚÛÜè¤é ‹Ö«ËòÛÜØ ÃÆ ÒÈÐçεÎÚáÜÛÜÙ¬ÐÑËÂÛÜʛؤí ËÂǵÉ
UÌÐçáÜÖµÉ³Ò·Ê›Ô ÍÂÐçËÂÛÜʛØÚБá
ØôÖµÞ_ ɟÍÂÒ®ÐÑÍÂÛÜÒÉ ÔÜÍÂÊ›Þ ÙŸÊ›ÞÀÎ áñÛÜÙ¬ÐçËÂɟè ٳʛÞÀÎÚÖµËÂÐçËÂÛÜʛصҿҝʛÞßɟæ ÇµÉŸÍÉ É³áÜÒÉ ÛÜØ ËÂÇµÉ ÎµÍÂʛåÌÍäÐ‘Þ ·ËÇÚɟҝÉ
ٳʛÞÀÎÚÖ«ËäÐçËÂÛñʛØÚÒ Þ®Ð¬ìâÍÂɳҝֵáñËÕÛÜØÀÐ ³ÉŸÍÊâèµÉ³ØµÊ›ÞßÛÜØÚÐçËÂÊÌÍ ÒîÛÜÞÀÎÚáñì _ ìÞßÛñÒîËäÐ ]“ÉÌí“ÐçØÚè ÛÜØÀБáñáÜÊÑæ·ÛÜØµåU‘БáÜÖµÉ
ËÊ _ É ÐçҝҝÛÜ囨µÉ³èÀËÂÊ
í“ËÂÇµÉ ÞßÛÜÒîËäÐ ]“ÉÈÔ×֫͝˝ÇÚÉÄÍ ÎµÍÂÊÌΠБå“ÐçËÂɳÒÃÛÜØµÒîËÂɳБèÀÊ›Ô _ ɳÛñØÚåÏæ Ûñ˝ÇÚè«ÍäÐ³æ·Ø ÔÜÍÂʛÞ
0
Ù³Ûñ͝ٳֵá×ÐçËÂÛÜÊ›Ø ^ºÐ‘å“ÐçÛÜØ¤íôì“r.d
ʛÖóå›ÉŸËÈËÂÊ ÇÚБصèµáÜÉ ËÂǵ
É _ Öµå¿ÍÂɟΠÊÌÍËÒ `Äé
Ê›Ö ËÇÚÛñaØ ]âÐ _ Ê›Ö«Ë ÇÚʦæ _ÊÌËÂÇàÛÜÒÒÖµÉ³Ò ÙŸÊ›ÖÚáñZ
è _ ɹБèµè«ÍÂɳҝҝɟè¿ÛñØ ËÇÚɋØÚGÉ P¥Ë ÍÂɟáÜɬБҝÉïʛԥ˝ÇÚÉ ÍÂÐçËÂÛÜʛØÚБá
ØôÖµ
Þ _ ɟÍÂÒ®áÜÛ _ÚÍÂÐç͝ì“íòБصè ì“Ê›Ö ٳʛÞßÉ Ö«Î æ·ÛñËÂÇ ËÂǵɽÔ×ʛáÜáñÊÑæ·ÛÜØµå ҝʛáÜÖ«ËÂÛÜÊ›Ø Ò Ð‘ØµÊÌËÂǵɟͮÎÚÛÜÉ³Ù³É Ê›Ô
Ô×ֵصٟËÂÛÜʛØÚБáÜÛ²Ë ì ʛØÝ˝ÇÚÉ¿Ë ìôÎ É
í¡ì“Ê›Ö èÚIÉ Y ØµÉ Ð Ô×ֵصٟËÂÛÜÊ›Ø ËÇ ÐÑËëٟÍÂɳÐçËÂɳÒà
Ð UÌÐçáÜÖµÉÊ›Ô Ë ìô΍É
rational
ÔÜÍÂÊ›Þ Ë æ¹Ê U‘БáÜֵɳÒÈÊ›Ô Ë ìôÎ É
é
rational
int
// PRE : d != 0
// POST : return value is n/d
rational create_rational ( int n , int d ) {
// somehow check here that d != 0
rational result ;
result .n = n ;
result .d = d ;
return result ;
}
ʛÖóËÂÇµÉ³Ø Ð‘è U¥ÛñÒÉ ÃÆ ËÂÊßֵҝÉãËÂǵÛÜÒ·Ô×ֵصٟËÂÛÜʛØóæ·ÇµÉ³ØµÉ U“ÉŸÍ ËÂÇµÉŸì æÈÐ‘Ø ËòËÂÊÀÛÜØµÛñ˝Û×БáÜÛŸÉ ÊÌÍ Ð‘ÒÒîÛÜ囨óËÂÊ
ÐàÍäÐçËÂÛÜʛØÚБáØôÖµÞb_ÉŸÍ¬é [ ÊÌÍ·ÉIP«Ð‘ÞÀÎÚáÜÉÌí
rational r = create_rational (1 , 2);
æ¹Ê›ÖµáÜèžÛñØÚÛ²ËÂÛ×БáÜÛ³É æ ÛñËÂÇ
ÛÜØžÊ›ØµÉÏå›Ê«íµÐ‘صèóÐçËÈËÂǵÉÓÒÂБÞßÉ ËÂÛÜÞßÉ Þ®Ð ]“ÉÓҝ֫ÍÂÉÓËÂÇÚÐç˹ËÂǵÉÏèÚɟØÚʛÞßÛ r
1/2
ØÚÐçËÂÊÌÍÈÛÜÒÈØµÊ›Ø ŸÉŸÍÂÊ«é
" ÖµÙ´ÇëйÙÄÍÂɬÐçËÂÛñʛØâÔ×ֵصٟËÂÛÜʛØÏٳɟ͝ËÂБÛÜØµáñì ޮР]“ÉŸÒ¾ÒîɳصҝÉÕÔ×ÊÌÍ¡Òî˝͝ÖÚÙÄËÂÒ¡ÛñØãå›É³ØµÉŸÍÂБá˜í_ Ö«Ë ËÂÇµÉ Ë æ¹ÊòÛÜÒîҝֵɳÒ
Ð _ Ê U“É èµÊ›
Ø ËÏÍÂɬÐçáÜáñì å›ÊóгæÈгì“é߯¹ÇÚÉ¿ÍÂɬБÒîÊ›Ø ÛÜÒãËÂÇÚÐçËÏËÂǵÛÜÒÏÒÂБÔ×ÉÀÙÄÍÂɬÐçËÂÛñʛØÝÙ¬Ð‘Ø _ ɏٳÛñÍÂٟÖÚÞU“ɳدËÂɳè
_ôì ØµÊÌËÓֵҝÛÜØµå Ûñˬéëê˜Ø½ÔªÐ‘ٟˬí ì“ʛ֫ÍãБè U¥ÛÜٟɿÞßÛñå›Ç Ë ØµÊÌËÏÇÚKÐ U“ÉàÍÂɳБÙäÇÚɟè ËÂǵɿεÍÂʛåÌÍÂБÞßÞßÉŸÍ ÐÑË ÃÆÏí
БصèßÉ U“É³Ø ÛÜÔ ÛñËÕèµÛÜè¤í ËÂǵÉÈÎÚ͝ʛåÌÍäБÞßÞßɟÍÃÞßÛÜå›Ç¯
Ë _É·ËÂÊôÊâá×Ð Ÿì ^˜ÊÌÍ ËÂÊ ÊëÒîËÂÖ _a_ ÊÌÍÂØ ` ËÂÊëÔ×ʛáÜáÜʦæ¼Ûñˬé ê»Ë‹ÛÜÒ
ËÂǵɟÍÂɟÔ×ÊÌÍÂÉÓÒîËÂÛÜáÜáÚÎ Ê›ÒÒÛ _ áñÉòËÂÊàæ·ÍÛñËÂÉ
Бصè®Ô×ÊÌÍÂå›ÉŸËòÐ _Ê›Ö«ËïèÚÐçËäÐâÞßɳ
Þ _ ɟ͋БҝÒîÛÜ囨µÞßÉ³Ø Ë¬í
rational r;
\ Бصè ÛñËïÛÜÒïÒî˝ÛÜáÜáΠʛÒîҝÛV_ÚáÜÉ·ËÂʿБÒîҝÛÜ囨 ËÂÊ
é ‹
ɳǵÛÜØµè ˝ÇÚÛñÒ áÜÛÜɳÒïÛñØ ÔªÐ‘ÙÄËÈÐëޏֵÙäÇ áÜÐçÍÂå›ÉŸÍïεÍÂÊ _ÚáÜÉ³Þ í
0
r.d
Бҹì“Ê›Ö èµÛÜҝٳÊU“ÉŸÍòØÚÉGP¥Ë¬é
ÜÔ ËÂɟÍóÇ XÐ UôÛÜØµå ֵҝɳè ËÂÇµÉ ÍäÐç˝ÛÜʛØÚБá
Issue 3: The internal representation cannot be changed.
ØôÖµÞ_ ɟÍÂÒïáñÛV_µÍäÐç͝ì Ô×ÊÌͷҝʛÞßÉ ËÛÜÞßÉÌí Ã
Æ ÐçεεÍÂʓБÙäǵɳÒïì“Ê›Ö æ·ÛñËÂÇ â
Ð ÍÂÉXW ÖÚŸÉ ÒîË·Ô×ÊÌÍòÐZU“ÉŸÍÂÒîÛÜÊ›Ø æ·ÛñËÂÇ Ð
á×Ðç͝å›ÉŸÍTU‘БáÜֵɋÍäÐçØÚå›É‘íÌҝÛÜØµÙ³É‹ËÇÚÉÄìàÇÚÐKU“É‹Ê _ ÒîÉŸÍ U“ɳè ËÂÇÚÐçË ÛÜØ¯ËÂɟÍÂÞßɟèÚÛÜÐçËÂÉ UÌÐçáÜÖµÉ³Ò ÒÊ›Þßɟ˝ÛÜÞßÉ³Ò¤Ê U“ÉÄÍ QÚÊÑæâé
ʛ֏ÍÂɳٳБáÜáôËÂÇµÉ¹Ë ìôÎ É
ÔÜÍÂÊ›Þ Ð‘å›É \ БصèÍÂɳБáÜÛ³É ËÇ ÐÑËÕʛصÉïËÂǵÛÜØµå ì“Ê›Ö ٳʛֵáÜè
extended_int
ɬБÒîÛÜáñì èµÊãÛñÒÃËÂÊÏÙäÇÚБصå›ÉÈËÂÇµÉ¹Ë ìôÎ ÉÈÊ›ÔØ ÖÚÞßÉÄÍäÐçËÂÊÌÍÕБصè èµÉ³ØµÊ›ÞßÛÜØÚÐç˝ÊÌÍ ÔÜÍÂʛÞ
ËÂÊ
Бصè ÒîËÂÊÌÍÂÉ ËÂÇµÉ ÒÛñ囨 Ê›Ô ËÂÇµÉ ÍäÐÑËÂÛÜʛØÚБáÚØôÖµb
Þ _ÉŸÍïҝɟΠÐçÍÂÐçËÂɳáñìßБҹÐâèÚÐçËäÐâÞßɟÞbint
_ ÉÄÍ Ê›Ô Ëunsigned
ìôÎ É
é int
Ô×ÊÌÍ
bool
IÉ P«Ð‘ÞÀÎÚáÜÉ áÜVÛ ]“ÉÓËÂǵÛÜÒ
struct rational {
unsigned int n ;
// absolute value of numerator
unsigned int d ;
// absolute value of denominator
bool is_negative; // sign of the rational number
};
»ê ËòÛÜÒ·ÐçáÜҝʿØÚÊÌËÈËÂÊ ÊÇÚÐçÍÂè ËÂʏÍÂÉÄæ·ÍÂÛñ˝ÉÓ˝ÇÚÉÏáÜÛV_µÍäÐÑ͝ì YÚáÜɳÒ
Бصè
ËÂÊÍÉ QÚɳٟË
rational.h
rational.C
ËÂǵÛÜÒ¹ÙäÇÚБصå›ÉâÛÜØ ÍÂɟεÍÂÉ³ÒÉŸØ ËäÐç˝ÛÜʛؤé
‹Ö«Ë ҝǵÊÌ͝ËÂá²ìÀБÔÜËÉŸÍ ì“Ê›ÖßÇÚÐXU“É ҝǵÛñεΠɳèÀËÂǵÉòØÚÉÄæ U“ɟ͝ҝÛÜʛخʛÔì“ʛ֫ÍïáÜÛV_µÍäÐÑ͝ì ËÂÊ ÃÆ ^»ì“ʛ֮ÇÚÐXU“É
É U“ɳ؜ÛÜØµÙ³áÜÖµèµÉ³è ËÂǵɮÒÂБÔ×É ÙŸÍÂɳÐçËÂÛÜÊ›Ø Ô×ÖÚØµÙŸËÛÜʛØ
ÔÜÍÂÊ›Þ Ð _ ÊU“É ÛÜØ ËÂǵɮÇÚÊÌ΍ɮ˝Ê
create_rational
ÍÂɳÒîʛVá U“ÉëÛÜҝÒîÖÚÉŸÒ Ð‘Øµè \ Ð _ Ê U“É `Äíµì“Ê›Ö ÍÂÉ³Ù³É³Û U“É Ð‘Ø Ð‘ØµåÌ͝ì ΠǵʛصÉëÙ¬ÐçáÜá¡ÔÜÍÊ›Þ ËÂǵÉâޮБØÚБå›ÉŸÞßÉ³Ø ËÈʛÔ
ÃÆ ›ËÂǵÉòεÍÂʛåÌÍäБÞßÞßÉÄÍ ÍÂɟΠÊÌ͝˝ҋËÂÇÚÐçˋБáñËÂǵʛֵå›Ç ËÂÇµÉ ÐÑÎÚÎÚáÜÛñÙ¬ÐçËÂÛÜÊ›Ø¿Ù³Ê èÚÉòÒîËÂÛÜáñáÚٟʛÞÀÎ ÛñáÜÉ³Ò æ ÛñËÇ ËÂǵÉ
صɟæ U“ÉŸÍÂҝÛñʛØóʛԡËÂǵÉãáÜVÛ _µÍäÐç͝ì“í
æ¹ÊÌÍ ]¥Ò·Ð‘Ø ìôÞßÊÌÍÂÉ š “–ºŠ¥—»šÁ
ÔÜËÂɟͮËäÐ ]¥ÛÜØµå Ð W ÖÚÛñÙ ] áÜÊôÊ ] ÐçËßËÂÇµÉ ÐçεÎÚáÜÛÜÙ¬Ðç˝ÛÜÊ›Ø Ù³Ê èÚɑíÈì“ʛּҝֵèµèÚɟØÚá²ì ÍÂɬБáñÛ ³Éžæ·Ç ÐÑËÀËÂǵÉ
εÍÂÊ _ÚáÜÉ³Þ ÛñÒ ËÂǵÉÓÙ³ÊôèµÉ ÛÜÒïÙ³áñÖµËîËÂɟÍÂɳè®Ö«Î æ ÛñËÂÇ®IÉ PôεÍÂɳҝҝÛñʛØÚÒ¹Ê›Ô ËÂǵÉÓÔ×ÊÌÍÂÞ
Бصè
í«Ð‘Ò
.n
.d
ÛÜØ
rational r ;
r.n = 1;
r.d = 2;
ñá ͝ɬБè«ì®ËÂǵÛÜÒÈÎ ÐçÍîËÂÛÜÙ³Öµá×Ðç͹ÎÚÛÜɳٟÉâÊ›Ô Ù³Ê èÚÉãèµÊôɳÒòØÚÊÌËòæ¹ÊÌÍ ]žÐ‘Ø ìôÞßÊÌÍÂÉ ÕпÍäÐç˝ÛÜʛØÚÐ‘á¤ØôÖµÞb_ÉŸÍ·ÛñҷصÊÑæ
ÍÂɟεÍÂÉŸÒÉ³Ø ËÉ³è _ôì
èÚÐçËäÐÀÞßɟÞb_ ÉÄÍÂÒ³í _ÚÖ«Ëã˝ÇÚÉ^˜Ê›áñè ` ÐÑÎÚÎÚáÜÛñÙ¬ÐçËÂÛÜÊ›Ø ÙŸÊôèµÉÊ _ U¥ÛÜʛֵҝá²ì èµÊôɳÒÏØµÊÌË
ŒÄŒ ÞßɳÞ_ ÉŸÍ¿Ê›Ô Ë ìôÎ É
ÛÜØµÛñËÂÛÜБáÜÛ ³ÉÀ˝ÇÚÉ ^˜Øµ–ºÉŸŠ¥æ
£³`à
é O ʦæðì“Ê›Ö ͝ɳåÌÍÂɟËߨµÊÌË¿ËÂÊÝÇÚÐXU“ɞεÍÂÊU¥ÛÜèµÉ³è ËÂǵÉ
bool
Ô×ֵصٟËÂÛÜʛ؞ÛÜØ ËÂǵÉ
YµÍÂÒîËÈÎ áÜÐ‘Ù³É «ÛÜØµèµÉ³É³è¤í«ËÂǵÉÏÒîËäÐçËÂɟÞßÉ³Ø Ë
create_rational
rational r = create_rational (1 , 2);
æ¹Ê›ÖµáÜè ҙËÂÛÜáÜá¥æ¹ÊÌÍ ]íôÐçҝҝֵÞßÛÜØµå ËÂÇÚÐçË ì“Ê›ÖÀÇÚÐKU“ÉòÙ³ÊÌ͝ÍÂɟٟËÂáñìÐ‘èÚÐçεËÂɳèËÂǵÉòèµÉ YÚØµÛñËÂÛÜʛؿʛÔËÂǵÉÈÔ×ÖµØÚÙÄËÂÛÜʛØ
ËÊ èµÉ¬Ðçá æ ÛñËÂÇ ËÂǵÉàØµÉŸæ ÍÂÉÄÎÚ͝ɳҝɳدËäÐçËÂÛÜÊ›Ø¤é ‹Ö«Ë ËÂǵÉàÎÚÍÊ _ áñÉ³Þ ÛÜÒÓÞ¿ÖÚÙäÇ ÞßÊÌÍÂÉ
create_rational
ÔªÐçÍ »ÍÂɬБÙäǵÛÜØµåàБصèÀÞ®ÐçØÚÛñÔ×ɳÒîËÂÒÃÛñËÂҝɟáÜÔÛÜØ ɬБÙäǮБصèÀÉ U“ÉŸÍîìÀÊôٟٳ֫͝ÍÂÉ³ØµÙ³É Ê›Ô
ÊÌÍ
ÛÜØ ËÂǵÉ
.n
.d
ÐçεÎÚáÜÛÜÙ¬ÐÑËÂÛÜʛØßÙ³Ê èÚɑí«ÒÛÜØµÙ³É ËÂǵÉÓè ÐÑËäÐëÞßɳÞ_ ɟÍÂÒ ÇÚÐXU“ÉÓÙäÇ ÐçØÚå›ÉŸè ËÂǵɳÛñ͹ÞßɳБصÛÜØµå ^»ËÂǵɟì®ÞßÛÜå›Ç¯Ë É U“ɳØ
ÇÚXÐ U“ÉëÙäÇ ÐçØÚå›ÉŸèóËÂǵɳÛñÍòØ ÐçÞßÉ³Ò ` ÃÛÜØóáÜÉÄ˝ËÂÛÜØµå ÃÆ Ð‘Ù³Ù³ÉŸÒÒ ØôÖµÞßɟÍÂÐçËÂÊÌÍòБصè èµÉ³ØµÊ›ÞßÛÜØÚÐçËÂÊÌÍïËÂÇ«ÍÂʛֵå›Ç
èÚÐçËäÐïÞßɳ
Þ _ ɟÍÂÒ ËÂÇÚÐçË¡Ðç͝ɋÒîΠɟٳVÛ YÚÙÃËÊ Ð¹Ù³ÉŸÍËäÐçÛÜØãÍÂÉÄÎÚ͝ɳҝɳدËäÐçËÂÛÜʛؤíÑì“Ê›ÖàÐçÍÂÉÕØÚʦæ ٳʛÞßÞßÛñËîËÂɳè ËÂÊòËÇ ÐÑË
ÍÂɟεÍÂÉŸÒÉ³Ø ËÂÐçËÂÛÜʛؤí Бصè ì“Ê›Ö ٬Б
Ø ËëÙ´ÇÚБصå›ÉÀÛ²Ëâæ Û²ËÂǵʛֵËâÐ‘Ò ]ôÛÜØµå ÃÆ ËÂÊ ÙäÇÚБصå›ÉÀÛñËÂÒâÐçεΠáñÛÜÙ¬ÐçËÂÛñʛØ
Ù³Ê èÚÉãБҹæ¹É³áÜ
á ^»æ·ÇÚÛñÙ´Ç ËÂÇµÉŸì®æ ÛÜáñáÍÂɳÔ×ֵҝÉÌíÚÊ›Ô Ù³Ê›Ö«ÍÂÒîÉ `Äé
\ S¼ÇÚÉŸØ ËÂǵÉ
ÃÆ
Þ Ð‘ØÚБå›É³Þßɳد˷ÍÂɳБáÜ۳ɟÒÏËÂÇÚÐçË ËÇÚɿصɟæ ÍäÐçËÂÛñÊ›Ø Ðçá ØôÖµÞ_ ɟÍÂÒ æ·ÛñËÂÇ ÉGP¥ËÂɳصèµÉ³è
®
U‘БáÜÖµÉ ÍäБصå›ÉÓÐçÍÂÉ ÖµÒÉŸáÜɳҝҹÔ×ÊÌÍïËÂÇµÉ³Þ í¯ËÂǵɟìÀËÂɟ͝ÞßÛÜØÚÐçËÂÉò˝ÇÚÉ ÙŸÊ›Ø ËÍäÐçٟËïæ Ûñ˝ÇÀì“ʛ־é ÛÜÒÂÐÑÎÚ΍ʛÛÜØ ËÂɟè®Ð‘Ò
ì“ʛ֏ÐçÍÂÉÌíÌì“ʛֿÒîËÂÛÜáñá¯ÍÂɳБáÜÛ ³ÉÕËÂÇÚÐçË æ ÇÚÐçË ì“ʛ֏صɳɳè ËÂÊÓXÐ U“Ê›ÛÜè ҝֵÙäǏ˝͝ʛÖa_ÚáÜÉŸÒ ÛÜØàËÂÇµÉ Ô×Ö«ËÂÖ«ÍÂɹÛÜÒ
Œ³š Ôܱ´Í©¬Ê›¢ Þ
пÞßɳÙäÇ ÐçØÚÛñÒÞ ËÂÇÚÐçË
ËÂǵÉâÐçٟËÂÖÚБá¤ÍÂɟεÍÂÉ³ÒÉŸØ ËäÐç˝ÛÜʛØóÊ›Ô ËÂǵÉÏË ì Î É
ŽËŸǵ”Éž
’ª©¯ÙŸ–˜—™Öڐ›Ò™š ËÂʛÞßɟͬíïÐçØÚè¼ÐçˏËÂǵɞÒÂÐçÞß
Š¥— É FµŒ¬ËŽ ÛñÞßÉ Ê ÉŸÍÂÒ ËÂÇµÉ Ù³ÖµÒîËÂʛÞßɟÍ
rational
£³Œî¢¤£³Œ¬ŽçŒ³š¤––˜—î›š —»
š FµŒî¢ ŒŸ
š FµŒ³š¤–
æÈгì¥ÒÈÊ›Ô æ¹ÊÌÍ ]ôÛÜØµå¿æ·ÛñËÂÇ®ÍäÐçËÂÛÜʛØÚÐ‘á Ø Öµb
Þ _ ÉÄÍÂÒ³é
ê˜Ø í ɳص٬ÐÑÎ ÒîÖÚáÜÐçËÂÛÜʛØÝÛñÒëXÐ UÌÐçÛÜá×Ð _ÚáÜÉ ËÂÇ«ÍÂʛֵå›Ç ËÂǵÉÀֵҝÉÀʛԹٳá×БÒîҝɳҳí БصèÝæ¹ÉÀҙËäÐç͝Z
Ë _ ìÝIÉ P ÎÚá×БÛÜØµÛÜØµåàǵʦæ ËÊ ÇµÛÜèµÉ ËÂǵÉÏÍÂÉÄÎÚ͝ɳҝɳدËäÐçËÂÛÜÊ›ØžÊ›Ô ÐàË ì Î ÉÏÔÜÍÂÊ›Þ ËÇÚÉãÙ³ÖµÒîËÂʛÞßɟͳé
4.3.2 Public and private
·ÉŸÍÉãÛÜÒòÐàÎÚ͝ɳáÜÛÜÞßÛÜØÚÐçÍîì
U“ÉŸÍÂҝÛñʛØóʛÔ
class
struct rational
ËÂÇÚÐç˹ËäÐ ]“ÉŸÒ·Ù¬Ðç͝ÉãÊ›Ô èÚÐçËÂРǵÛÜèµÛÜØµå«é
class rational {
private :
int n;
int d ; // INV : d != 0
};
ê˜Ø ÂË ÇµÉ ÒÂÐçÞßÉÝæÈЬì ÐçÒ Ð
íàÐ
Бå›åÌÍÂɳå“ÐçËÉ³Ò ÒÉ U“ÉŸÍÂБá èÚÛ ÉŸÍÂÉŸØ Ë Ë ìôÎ É³Ò ÛÜØ¯ËÂÊ Ð
struct
class
صɟæ Ë ì Î ÉÌíR_ÚֵˏËÂǵÉ
]“ÉŸì æ¹ÊÌÍÂè ÛÜØµèµÛÜÙ¬ÐçËÂɟҏËÂÇÚÐçË
ޮгì Êôٳٳ֫ͬíïÍÂÉ³Ð‘á µ
©
Ÿ
±
Ÿ
±
³
Œ
³
Ž
Ý
Ž
³
£
¬
Œ
³
Ž
˜
–
¬
£
™
—
¬
±
˜
–
î
—
›

š
class
۳ɟèžËÂÇ«ÍÂʛֵå›Ç ËÂǵ
É ]“ÉŸìôæ¹ÊÌ͝èÚÒ
Бصè
é
public
private
ðèÚÐçËÂÐ Þßɳ
Þ _ ÉŸÍ ÛñÒ
ÛÜԷБصè ʛصáñì ÛÜÔòÛñËÂÒ¿èÚɟٳá×ÐçÍäÐÑËÂÛÜÊ›Ø ÐçεΠɬÐçÍÂҿҝʛÞßɟæ·ÇµÉŸÍÂÉ Ð‘ÔÜËÂÉŸÍ Ð
’­—™± ØÚÊ
ҙΠɳٳVÛ YÚɟͳí Ð‘Øµè ¢¤æ·”¾ÛñË ¦Ç½
ÒîΠɳٟÛVYÚɟÍâÛñØ _ ÉŸË æ¹É³ÉŸØ¾é ê»ËâÛñÒ
ÊÌËÂǵɟ͝æ ÛñҝÉÌé
¤
¢
¬
£
—
ô
D
¯
©

–
Œ
public:
private:
ê˜Ø Î Ðç͝˝ÛÜÙ³Öµá×ÐçͬíÛÜÔÕËÂÇµÉ Ù³á×ÐçҝÒãèµÉ YÚØµÛñËÂÛñÊ›Ø ^»ÒÉ³É " ɟٟËÂÛÜÊ›Ø é é _ ɳáñÊÑæ Ô×ÊÌÍãËÂǵÉàÎÚ͝ɳٳÛÜҝɿÞßɬБصÛÜØµå®Ê›Ô
ËÂǵÛÜÒâ˝ɟÍÂÞ `ãٳʛدËäБÛÜØµÒëØµÊ
ÒîÎ É³Ù³Û Y ÉÄͬí БáÜá èÚÐçËÂОÞßɳ
Þ _ ɟÍÂÒâÐçÍÂÉßεÍÂVÛ U‘ÐçËÂÉ _ ì èÚɟԪБֵáñˬé ê˜Ø
public:
ٳʛد˝ÍäБÒî˳í Ð Òî˝͝ÖÚÙÄË·ÛÜÒÈÐ Ù³á×БÒîÒÈæ·ÇÚÉÄÍÂÉëБáñá è ÐÑËäÐàÞßɳb
Þ _ÉŸÍÂÒ¹ÐçÍÂÉÏÎÚaÖ _ÚáÜÛñ
Ù _ôì èÚɟԪБֵáñˬé ê˜Ô¾ÐâèÚÐçËäÐãÞßɟb
Þ _ ÉÄ͋ÛÜÒÕÎÚ͝VÛ UÌÐÑËÂÉÌíôÛ²Ëï٬БصصÊÌË _ ÉÓÐçٳٳɳҝÒîɳè _ ìßÙ³ÖµÒîËÂʛÞßÉÄÍÂҋËÂÇ«ÍÂʛֵå›ÇÀËÂÇµÉ Þßɳ
Þ _ ɟÍ
БٳٟɳҝÒâÊÌ΍ɟÍäÐçËÂÊÌͳé ê˜Ô ÐßèÚÐçËäÐßÞßɳ
Þ _ ÉŸÍ ÛÜÒÓÎÚÖ _ áñÛÜÙÌíËÂǵɟÍÂɏÐçÍÂÉ ØµÊžÒîÖÚÙäÇ ÍÉ³Òî˝ÍÂÛñٟËÂÛÜÊ›ØµÒ³é ·ØµèµÉŸÍÏʛ֫Í
Ð _ Ê U“ÉÏèÚIÉ Y صÛñ˝ÛÜÊ›Ø Ê›Ô
íµËÇÚÉÏÔ×ʛáÜáÜʦæ ÛñØÚåàæ·ÛÜáÜáËÂǵɟ͝ɳÔ×ÊÌÍÂÉâØµÊÌËòٳʛÞÀÎÚÛÜáÜÉ
class rational
rational r ;
r.n = 1;
// error : n is private
r.d = 2;
// error : d is private
int i = r. n ; // error : n is private
˜ê Ø ÎÐÑ͝ËÂÛÜÙ³Öµá×ÐÑͬíÑ˝ÇÚɹÐçҝҝÛÜ囨µÞßɳدË
_ ɳٳʛÞßÉŸÒ ÛÜÞÀΠʛҝÒîÛV_ÚáÜÉ^°æ ǵÛÜÙäÇàÛÜÒ å›ÊôÊ è `Äí _ÚÖ«ËÃÐçË Ð ^°ËÂÊôÊ `
r.d = 0
ǵÛÜå›Ç εÍÂÛÜÙ³É ¿ØµÊÑæ ì“Ê›Ö«Í Ù³ÖµÒîËÂʛÞßɟÍàٳБصØÚÊÌËëèÚÊ ÐçØ ìô˝ÇÚÛñØÚåóæ·ÛñËÂÇ Ð ÍÂÐçËÂÛÜʛØÚБáÕØôÖµÞb_ÉŸÍ¬í Бصè É U“ɳØ
ì“ʛ֮٬БصصÊÌË ÛÜÞÀÎÚáÜɟÞßÉ³Ø Ë
íôҝЬì“íôБÒÕì“ʛֵ֮ҝɳèßËÂÊâèÚÊà۲ˋÛÜØ ÍÂʛåÌÍäÐçÞ éS¼ÇÚÐçˋæ¹É ÐÑÍÂÉ
operator+
ÒîËÂÛñáÜáµá×Б٠]¥ÛÜØµåãÛÜÒÕÒîʛÞßÉÈæÈгì
ʛԤБٳٳɳÒîҝÛÜØµåâËÂǵɷɟØÚÙ³ÐçÎÚҝֵá×ÐçËÂɳèÍÂɟεÍÂÉ³ÒÉŸØ ËäÐç˝ÛÜÊ›Ø¤é ÆÈǵÛÜÒÕÔ×ÖÚØµÙŸËÛÜʛØÚБáÜÛñË ì
ÛÜҹεÍÂÊ UôÛÜèµÉ³è _ ìóРҝɳٟʛØÚèžÙ¬ÐçËÂɳå›ÊÌÍîì Ê›Ô Ù³á×БҝÒÈÞßɳ
Þ _ ɟÍÂÒŸí¥ØÚБÞßɳáñì
é
¨½Œ³¨½ ŸŒ³£ ¶Ä”𠱬–˜—™›š¤Ž
2
*
*
2%,
R
A #$&.*6
2
,#7
7%*
-
J
M "
-7#"
N"KB? 7
N /C.*
.*
--
>/
% ,0
$
%*
9 2A.)
K$&.:
K
#6%"
N$&
7
(&
%*
%
A
7
N%+
J
K( K*SB
\ 4.3.3 Member functions
ɟËÃÖÚÒÃØµÊÑæ¼ÐçèÚèËÂǵÉÈÞßÛñҝҝÛÜØµå Ô×ֵصٟËÂÛÜʛØÚБáÜÛ²Ë ìãËÂÊ
ËÂÇ«ÍÂʛֵå›Ç ÞßɳÞ_ ÉŸÍ Ô×ÖÚØµÙŸËÛÜʛصҳé
class rational
ê»Ëâæ¹Ê›ÖµáÜè ÒÉ³É³Þ ØÚÐç˝ֵÍÂБáÃ˝ÊóÒîËäÐçÍîËâæ Û²ËÂÇÝÒÂБÔ×É ÙŸÍÂɬÐç˝ÛÜʛؤí"_ÚÖ«ËëҝÛÜØµÙ³ÉËÂǵɟÍÂÉßÐçÍÉ ÒîΠɟٳÛVYÚÙ ÞßɳÞ_ ɟÍ
Ô×ֵصٟËÂÛÜʛصÒàÍÂɳҝÉÄÍ U“ɳè Ô×ÊÌÍ ËÂǵÛÜÒàÎÚÖµÍîΠʛҝÉÌíÃáÜÉŸË ÖµÒYÚ͝Òî˿ҝǵÊÑæ Ë æ¹Êîå›É³ØµÉŸÍäБá½ÞßɳÞ_ ɟÍâÔ×ÖµØÚÙÄËÂÛÜʛصÒ
ËÂÇÚÐçˏåÌÍäÐ‘Ø¯Ë ÒÂÐçÔ×ÉóБٳٟɳҝҏ˝ʽËÂÇµÉžØ ÖµÞßɟÍäÐçËÂÊÌ͏Бصè èµÉ³ØµÊ›ÞßÛÜØÚÐç˝ÊÌÍàÊ›Ô Ð ÍäÐçËÂÛÜʛØÚБáïØ ÖµÞb_ ÉÄÍ ^°æ¹É áÜá
èµÛÜҝٳֵҝb
Ò _ ɳáÜÊ¦æ æ ÇÚÐçË
Бصè
ÞßÉ¬Ð‘Ø ÇµÉŸÍÂÉ Ð‘Øµè ÛÜÔòì“Ê›Ö æ¹Ê›ØÚèµÉŸÍæ Ç¯ì æ¹É Ù¬Ð‘Ø ÖµÒÉ
Бصè
_ ɟÔ×ÊÌÍÂÉÀËÂǵɟì *this
ÐÑÍÂÉßèµÉ³Ù³á×Ðç͝ɳèconst
˝ÇÚÛñÒëÛÜÒàОҙΠɳٳÛ×Ðçá‹Ô×ɬÐç˝ֵ͝ÉßʛÔÈٟá×БҝÒëÒîÙ³ÊÌÎ ÉÌí IÉ PôÎ áÜБÛÜØµÉ³è ÛÜØ
n
d
" ɳٟ˝ÛÜÊ›Ø é é `Äé
class rational {
public :
// POST : return value is the numerator of * this
int numerator () const
{
return n;
}
// POST : return value is the denominator of * this
int denominator () const
{
return d;
}
private :
int n;
int d ; // INV : d != 0
};
ê˜Ô
r
ÛñÒ·Ð UÌÐÑÍÂÛ×Ð _ÚáÜÉÓÊ›Ô¡Ë ì Î É
rational
int n = r. numerator ();
int d = r. denominator ();
íµÔ×ÊÌÍ·ÉGPµÐ‘ÞÀÎÚáÜÉÌí ËÂǵÉãÙ³ÖµÒî˝ʛÞßɟÍÈ٬Б؞ËÂÇµÉ³Ø æ·ÍÂÛñ˝É
// get numerator of r
// get denominator of r
ֵҝÛÜØµåã˝ÇÚÉòÞßɳÞ_ ɟÍÃÐ‘Ù³ÙŸÉ³ÒÒ ÊÌÎ ÉÄÍäÐçËÂÊÌ͋БҋÔ×ÊÌ͋èÚÐçËäÐÓÞßɳÞb_ÉŸÍÂÒ³é ÆÈǵɷٟÖÚҙËÂʛÞßɟÍÕ٬БØß٬БáñáµËÇÚɟҝÉòË æ¹Ê
Ô×ֵصٟËÂÛÜʛصҳíÒîÛÜØµÙ³ÉëËÂǵɟì ÐçÍÂÉàèµÉ³ÙŸá×ÐçÍÂɳè
é ٳٟɳҝÒÓÒîΠɳٟÛVYÚɟÍÂÒ ÇÚÐXU“É ˝ÇÚÉàҝБÞßÉëÞßɬБصÛÜØµåÀÔ×ÊÌÍ
public
Þßɳ
Þ _ ɟ͹Ô×ֵصٟËÂÛÜʛصÒòБÒÈÔ×ÊÌÍ èÚÐçËäÐ ÞßɳÞ_ ɟÍÂÒ ÐàεÍÂÛVU‘ÐçËÂÉÏÞßɳÞ_ ɟ͹Ô×ֵصٟËÂÛÜʛØóٳБصØÚÊÌË _ Éã٬БáÜáñɳè _ ì
ËÂǵÉÃÙ³ÖµÒîËÂʛÞßÉŸÍ¬é ÆÈǵÛÜÒ ]ôÛÜØµèëÊ›Ô¥Ð‘ÙŸÙ³É³ÒÒ ËÊÈËÂǵÉÃÍÂɟεÍÂÉ³ÒÉŸØ ËäÐç˝ÛÜʛØâÛÜÒ QÚIÉ P«Û _ áñÉÌíçÒîÛÜØµÙ³ÉÃ˝ÇÚÉÃÙ³ÊÌ͝͝ɳÒîΠʛصèµÛÜØµå
Þßɳ
Þ _ ÉŸÍ Ô×ֵصٟËÂÛñʛØÚÒ Ù¬ÐçØ É¬Ð‘ÒîÛÜáñZ
ì _ ÉÈБèÚÐçεËÂɟèËÂÊÏРصɟæ ÍÂɟεÍÂɳÒîÉ³Ø ËäÐÑËÂÛÜÊ›Ø Û²Ë ÛÜÒÃБáÜҝÊÓÒÂБÔ×ɑí ҝÛñØÚٟÉÈÛ²Ë ÛÜÒ
صÊÌËïÎ Ê›ÒÒÛ _ áñÉòËÂÊ ÙäÇÚБصå›É ËÂǵ
É UÌБáñÖÚɟÒïʛԾËÂÇµÉ èÚÐçËäÐãÞßɳb
Þ _ÉŸÍÂÒÕ˝ǵ͝ʛÖÚå›ÇßËÂÇµÉ Ô×ֵصٟËÂÛÜʛصÒ
Бصè
é ·Ò Ðžå›É³ØµÉŸÍäБáÕÍÂÖµáÜÉÀʛÔïËÂÇôÖµ
Þ _¾í БáÜáÃèÚÐçËäОÞßɳ
Þ _ ɟ͝ÒâʛÔÈОٳá×ÐçҝÒënumerator
ҝǵʛֵáÜè _ É
denominator
εÍÂVÛ U‘ÐçËÂÉ ^»ÊÌËÂǵɟ͝æ ÛñҝÉÌí ì“Ê›Ö ɳصٳʛ֫ÍäБå›É ˝ÇÚÉßٟÖÚҙËÂʛÞßɟÍâËÊ Ð‘Ù³Ù³É³ÒîÒ ËÇÚÉ è ÐÑËäОÞßɳ
Þ _ ɟÍÂÒŸí¡æ Û²ËÂÇÝËÂǵÉ
Öµå›áñì®Ù³Ê›ØµÒXÉ W ÖµÉ³ØµÙ³É³Ò ÞßɳدËÂÛÜʛصɳè ÛÜØ ê˜ÒÒîÖÚÉ Ð _ Ê U“KÉ `Äé
ê˜ØëÊÌÍÂèµÉŸÍ¡ËÂÊ·Ù¬ÐçáÜáôйÞßɳÞ_ ɟ;Ô×ֵصٟËÂÛÜÊ›Ø¤í¦æ¹É‹ØµÉ³É³è БØàÉGP¥ÎµÍÂÉ³Ò ÒÛÜÊ›Ø Ê›Ô ËÂǵÉëÙ³áÜÐ‘ÒÒ Ë ìôÎ ÉàÔ×ÊÌÍ æ·ÇµÛÜÙäÇóæ¹É
ËÂǵÉàÔ×ֵصٟËÂÛÜʛؤíÐçØÚè ËÂǵÛÜÒ·ÉIP¥ÎµÍÂɳÒîҝÛÜÊ›Ø ^ºÐçεΠɬÐç͝ÛÜØµå
µ
©
Ÿ
±
Ÿ
±
³
Œ
³
Ž
Ž
_ ɳÔ×ÊÌ͝ÉÏËÂÇµÉ ` ÛÜÒÈБØ
æ·ÇµÊ›Ò
É UÌБáñÖÚÉÓޮгì®ÊÌÍÈޮгìߨµÊÌ
Ë _ÉãÞßÊ èÚÛ Y ɟè_ ì
ËÂǵÉÏÔ×ÖÚØµÙŸËÛÜʛ.Øó٬Бáñá˜é —»¨¿¢¾’­—™±³—˜–ӱĩ¯’°’‹©“£îÁ›” ¨ Œ³š¤–
The implicit call argument and *this.
\ S¼ÛñËÂǵÛÜØóɬÐçÙ´Ç ÞßɟÞb_ ÉÄÍòÔ×ֵصٟËÂÛñʛؾí«ËÂǵÉãáVUÌÐçáÜÖµÉ
ÍÂɳÔ×ɟÍÂÒòËÂÊ ËÂǵÛÜÒÈÛÜÞÀÎÚáÜÛÜÙ³Û²Ë Ù¬Ð‘áñá Ðç͝å›ÖÚÞßÉŸØ Ë
*this
БصèÀÉIôP ÎÚá×БÛÜØµÒ ËÂǵɷÐÑÎÚ΍ɬÐçÍäБصٳÉÈʛÔ
ÛÜØ¿ËÂǵÉÈΠʛҙËÂٳʛصµè ÛñËÂÛÜÊ›ØµÒ Ê›ÔËÂÇµÉ¹Ë æ¹ÊâÞßɳÞ_ ÉŸÍ Ô×ֵصٟËÂÛñʛØÚÒ
*this
Ð _ ʓU ÉÌé ê»ËèµÊ É³Ò ØÚÊÌË ÉG¥P ÎÚá×БÛÜØ æ·Ç ì Б؜БÒîËÂɟ͝ÛÜÒ ] ÐçεΠɳÐçÍÂÒ ÛÜØ
í_ Ö«Ëàæ¹Éßæ ÛñáÜá å›ÉŸËàËÂÊ ËÂǵÛÜÒ
*this
á×Ðç˝ɟͬé
]“ÉŸìôæ¹ÊÌÍÂè ÐçÔÜËÂɟÍâ˝ÇÚÉ¿Ô×ÊÌÍÂޮБáÃÐç͝å›ÖÚÞßÉŸØ ËÓáÜÛÜҙËãÊ›Ô Ð ÞßɳÞ_ ɟÍ
Ô×ֵصٟËÂÛÜʛ؞͝ɳÔ×ɟÍÂÒÈËÂʏËÂǵÉÏÛÜÞÀÎÚáÜÛÜÙ³Û²ËïÐçÍÂå›ÖµÞßɳدË
ÐçØÚè ËÂǵɟÍÂɳÔ×ÊÌÍÂÉÏεÍÂʛÞßÛÜҝɳÒïËÂÇÚÐç˹ËÂǵÉÏÞßɳÞ_ ɟÍ
*this
Ô×ֵصٟËÂÛÜʛخ٬БáñáèµÊôɳÒïØµÊÌËïÙäÇÚБصå›É ËÂǵÉÌU ÐçáÜÖµÉ »^ ÍÂɟεÍÂɳÒîÉ³Ø ËÂɟè ô_ ì ËÂǵÉÌU БáñÖÚɟÒïʛԤ˝ÇÚÉ èÚÐçËÂÐâÞßɳÞ_ ɟÍÂÒ `
ʛÔ
éS ÉãÙ¬ÐçáÜá¤ÒÖµÙ´Ç Ð ÞßɳÞ_ ɟÍïÔ×ֵصٟËÂÛñÊ›Ø Ð
é
Const member functions.
const
±Ä›š¤Ž³–·¨½Œ³¨½ ŸŒ³£ ¶Ÿ” 𠱬–˜—š
*this
Member function call.
ƹÇÚÉÏå›É³ØµÉŸÍäÐçá¡ÒîìôØ ËäÐPžÊ›Ô пÞßɟÞb_ ÉÄ͹Ô×ÖÚØµÙŸËÛÜʛØó٬Бáñá ÛÜÒ
é ^ í¤éñé²éñí `
·ÉŸÍÉÌí ÛñÒ Ð‘ØàÉGP¥ÎµÍÂɳҝÒîÛÜʛØàʛԫйٳá×Ð‘ÒÒ¾Ë ìôÎ ÉÕÔ×ÊÌÍ æ ǵÛÜÙäÇàÐÈÞßɳÞ_ ɟͤÔ×ֵصٟËÂÛÜʛØàÙ¬ÐçáÜáÜɳè ÛÜÒãèÚɟٳá×ÐçÍÂɟè¾í íñé³éŸé³í ÐçÍÂɏ˝ÇÚÉ Ù¬Ð‘áÜáÕÐçÍÂå›ÖµÞßɳدËÂÒ³í ÐçØÚè
ÛñÒãËÂÇµÉ ÞßɟÞb_ ÉÄÍ
.
БٳٟɳҝҮÊÌΠɟÍäÐÑËÂÊÌͬé ê˜Ø¼ÞßʛÒîËÀٳБҝɳҳí ÛÜÒ®Ð‘Ø áVU‘БáÜÖµÉóÊ›Ô ËÂÇµÉ Ù³á×ÐçҝÒÀË ìôÎ ÉÌí¹Ë ìôÎÚÛÜÙ¬ÐçáÜáñì Ð
U‘ÐçÍÂÛ×Ð _ÚáÜɑé
S Û²ËÂǵÛÜØ ËÂǵÉ_ Ê è«ì ›Ê Ô¤ÐâÞßɟÞb_ ÉÄÍÕÔ×ֵصٟËÂÛñÊ›Ø Ê›Ô¤Ð
Ù³á×Ðçҝҳí«Ð‘دìßÞßɳÞ_ ɟÍ^˜èÚÐçËäÐãÞßɟÞb_ ÉÄÍ Ê›Ô¤ÞßɳÞ_ ÉŸÍ Ô×ֵصٟËÂÛñÊ›Ø Ã
` ʛԤ˝ÇÚÉ Ò БÞßÉ Ù³á×ÐçҝÒï٬БØ_ ÉÓБٳٟfɳҝҝɳè
æ Û²ËÂÇµÊ›ÖµË ÐßεÍÂÉIYaP
¤ÛÜØ ËÂǵÛÜÒÓ٬БÒîÉÌí æ¹É¿ÛñÞÀÎ áñÛÜÙ³ÛñËÂá²ì БٳٳɳÒîÒãÛñËÓÔ×ÊÌÍ
éëê˜Ø½Ê›Ö«ÍÏÉIµP ÐçÞÀÎ áñÉÌí
.
*this
ËÂǵɮÉIP¥ÎµÍÂɟҝҝÛÜʛØ
ÛÜØ ËÂǵÉßÍÂɟËÂÖ«ÍÂØ ÒîËäÐç˝ɳÞßÉ³Ø ËëʛÔÈËÂǵɮÞßɳÞ_ ɟÍàÔ×ֵصٟËÂÛñʛØ
ÍÂɳÔ×ɟÍÂÒ ËÂÊ
n
numerator
ËÂÇµÉ èÚÐçËäÐÏÞßɳÞb_ÉŸÍ ʛÔ
éÃÆÈÇµÉ Ù¬ÐçáÜá
ËÂǵɟ͝ɳÔ×ÊÌÍÂÉ èµÊôÉ³Ò æ·ÇÚÐçˋæ¹É ÉIôP Î É³ÙŸË ÃÛ²Ë
ÍÂɟ˝ֵ͝ØÚÒ¹ËÂǵÉâØ ÖµÞßɟÍänÐçËÂÊÌ͹*this
ʛԾËÂǵÉãÍäÐÑËÂÛÜʛØÚÐ‘áØ r.numerator()
ÖÚÞ_ ÉŸÍ é
S¼ÛñËÂǵÛÜØ ÞßɟÞb_ ÉÄÍÓÔ×ÖÚØµÙŸËÛÜÊ›ØµÒ³í æ¹É ٬БØÝБáÜÒÊ Ð‘Ù³Ù³rɟҝÒâÞßɳÞ_ ÉŸÍÒ Ô×ÊÌÍëÊÌËÂǵɟÍãÉI¥P εÍÂɟҝҝÛÜʛصÒâʛÔÃËÂǵÉ
ÒÂБÞßÉÏÙ³á×ÐçҝÒòË ìô΍ÉãËÂÇ«ÍÂʛֵå›ÇóËÂǵÉâÞßɟÞb_ ÉÄÍ·ÐçٳٳɳҝҷÊÌΠɟÍäÐç˝ÊÌÍ ˜^ áñÛV“] ÉâпٳֵÒîËÂʛÞßɟÍÈæ¹Ê›ÖµáÜèóèµÊÀÛñË Ä` é áÜá
БٳٟɳҝҝɳÒÓËÂÊßÙ³áÜÐ‘ÒÒ ÞßɳÞ_ ɟÍÂÒÈæ Ûñ˝ÇÚÛñØ ÞßɳÞb
_ ÉŸÍ Ô×ֵصٟËÂÛÜÊ›ØµÒ Ê›Ô ËÂǵÉàÒÂБÞßÉâÙ³á×Ð‘ÒÒ ÐçÍÂÉ
í
”
š
Ÿ
£
¬
Œ
³
Ž
˜
–
¬
£
î
—
³
±

–
I
Œ
F
ÍÂɳå“ÐÑÍÂèµáÜÉ³ÒÒ Ê›Ôòæ·ÇµÉŸËÂÇµÉŸÍ ËÂǵɮÞßɳÞb
_ ɟÍàÛÜØôW ֵɳÒîËÂÛñʛ؜ÛÜÒàÎÚÖ _ áñÛÜÙÀÊÌÍ¿ÎÚ͝ÛVÌU ÐÑËÂÉÌé Æ¹ÇµÉ
Бصè
ÒîΠɟٳÛVÚY ɟÍÂÒòÐçÍÂÉÏʛصáñì®ÍÂɳáÜÉ ‘U Бد˷Ô×ÊÌÍòËÂǵÉãÙ³ÖµÒî˝ʛÞßɟͬíÚ_ ֫˷صÊÌËòÔ×ÊÌÍ ÞßɳÞ_ ɟ͹public:
Ô×ֵصٟËÂÛÜʛصÒÈʛÔ
Access to members within member functions.
private:
ËÂǵÉÏÙ³á×БҝÒÈÛñËÂÒîɳáÜÔºé
)žÉ³
Þ _ ɟÍòÔ×ÖÚØµÙŸËÛÜʛصҷÐç͝ÉãҝʛÞßÉÄËÂÛÜÞßɳÒïÐçáÜÒÊ ÍÂɳÔ×ɟ͝͝ɳè ËÂÊ ÐçÒ
¨ Œ³–ºŠ F¯Ž
ʛԡËÂǵÉÏÙ³á×Бҝҟé
˜ê ØóËÂǵÉâÒîÎÚÛñ͝ÛñËÈÊ›Ô " ɳٟËÂÛÜÊ›Ø é é íµÛñËÈæ¹Ê›ÖµáÜè _ÉâֵҝɳÔ×Öµá¡ËÊ
ҝʛ֫ÍÂÙ³Éòʛ֫ˋËÂǵÉÈÞßɳÞb_ÉŸÍÃÔ×ÖÚØµÙŸËÛÜʛØÀèµÉ YÚØµÛñËÂÛÜʛصҳí›ÛÜØ ÊÌÍÂèµÉŸÍ‹ËÂÊâБáÜáÜʦæ ҝɟΠÐçÍÂÐçËÂɷٟʛÞÀÎ Ûñá×ÐçËÂÛÜÊ›Ø¤é¾Æ¹ÇÚÛñÒ
æ¹ÊÌÍ ]ôÒëáÜÛV]“É¿Ô×ÊÌÍàÊÌÍÂèµÛÜØÚÐç͝ì½Ô×ֵصٟËÂÛÜʛصҳí¡ÉIP«Ù³ÉÄÎÚËâËÂÇÚÐçËëÛÜØ Ð Þßɳ
Þ _ ɟÍãÔ×ÖÚØµÙŸËÛÜÊ›Ø èµÉ YÚØÚÛ²ËÂÛÜÊ›Ø Ê›Ö«ËÂÒîÛÜèµÉ
Ê›Ô ËÂǵÉóÙ³áÜÐ‘ÒÒ èµÉ YÚØµÛñËÂÛñʛؾíÃËÂǵɞÔ×ֵصٟËÂÛÜÊ›Ø ØÚБÞßÉ ÞÖµÒîb
Ë _ É W ÖÚБáÜVÛ YÚÉ³è æ ÛñËÂÇ ËÂǵÉóÙ³á×БÒîÒ ØÚБÞßÉÌé ê˜Ø
ËÂÇµÉ ÇµÉ¬Ð‘èµÉŸÍ Y áñÉ
æ¹É æ¹Ê›ÖµáÜè ËÂÇµÉ³Ø æ·ÍÂÛñ˝ÉàʛØÚá²ì ËÂǵɿèµÉ³ÙŸá×ÐçÍäÐç˝ÛÜʛصZ
Ò ^ºÐ‘ÒÓֵҝÖÚÐ‘á æ·ÛñËÂǵÛÜØ
rational.h
ØÚБÞßɳÒîΠБٟÉ
`
Member functions and modularization.
ifm
class rational {
public :
// POST : return value is the numerator of * this
\ \
int numerator () const ;
// POST : return value is the denominator of * this
int denominator () const ;
private :
int n;
int d ; // INV : d != 0
};
ƹÇÚÉ Þ®Ðç˝ٴǵÛÜØµåßèµÉ YÚØµÛñËÂÛÜʛصҷæ¹Ê›ÖµáÜè ËÂÇµÉ³Ø ÐçεΠɬÐçÍÏÛÜØ ËÂÇµÉ Ò ʛ֫ÍÂٳɿٳÊôèµÉ YÚáÜÉ
^ºÐçå“БÛÜØ
rational.C
æ Û²ËÂǵÛÜØ ØÚБÞßɟÒîΠБٳÉ
íБصèžÐ‘ÔÜËÂɟͷÛÜØµÙ³áÜÖµèµÛÜØµå
` БÒòÔ×ʛáñáÜÊÑæ·Ò³é
¹
ifm
rational.h
int rational :: numerator () const
{
return n ;
}
int rational :: denominator () const
{
return d ;
}
4.3.4 Constructors
ٳʛصÒî˝ÍÂֵٟËÂÊÌÍ ÛÜÒ¡ÐòÒîΠɟٳÛ×Бá“ÞßɳÞ_ ɟ;Ô×ֵصٟËÂÛÜʛØâËÇ ÐÑˡεÍÂÊU¥ÛÜèµÉ³Ò¾ÒÂБÔ×ɋÛÜØµÛñËÂÛ×БáñÛ¬ÐçËÂÛñÊ›Ø Ê›Ô¥Ù³á×ÐçÒÒ U‘БáÜֵɳҟé
ƹÇÚÉÓØÚБÞßÉ Ê›Ô¡ÐëٳʛصÒî˝͝ÖÚÙÄËÂÊÌÍÈٳʛÛÜØµÙ³ÛÜèµÉ³Ò‹æ·ÛñËÂÇßËÂǵÉÓØÚБÞßÉ Ê›Ô¤ËÂǵÉÏٟá×Бҝҳí¥Ð‘صè#¼ËÇÚÛñÒ èµÛÜÒîËÂÛÜØµå›ÖµÛÜҝǵɳÒ
ٳʛصÒî˝͝ÖÚÙÄËÂÊÌÍÂÒÈÔÜÍÂʛÞðÊÌ˝ÇÚÉÄÍòÔ×ֵصٟËÂÛñʛØÚÒ # Ûñ˹èµÊôɳÒÈØµÊÌË·ÇÚXÐ U“ÉâÐàÍÂÉŸËÖµÍØ Ë ìôΠɑí ÐçØÚè ٳʛصҝÉXW ÖÚÉŸØ ËÂáñì ØµÊ
ÍÂɟ˝ֵ͝b
Ø U‘БáÜÖµÉÌé Ù³áÜÐ‘ÒÒ ÖµÒÖÚБáÜáñìâÇÚÐ‘Ò ÒÉ U“ÉŸÍäÐçá«Ù³Ê›ØµÒî˝ÍÂֵٟËÂÊÌ͝ҳí¯Ð‘صè¿ËÂǵɹٳʛÞÀÎÚÛÜáÜÉÄ"
Í YÚå›Ö«ÍÂÉ³Ò Ê›Ö«Ë æ ǵÛÜÙäÇ
ʛصɷÛÜÒÕÞßɬБدËÕÛñØ®ÐÏå›VÛ U“ÉŸØßÙ³Ê›Ø ËÂGÉ P¥
Ë ^»ÖÚÒîÛÜØµåãËÂǵÉò͝ÖÚáñÉ³Ò‹Ê›Ô Ê U“ÉŸÍÂáÜʓÐçèÚÛñØÚåÓÍÂɳÒîʛáÜÖ«ËÂÛÜʛؤí“ҝɳɷËÂÇµÉ ÓÉÄËäБÛÜáÜÒ
Ê›Ô " ɟٟËÂÛÜÊ›Ø é `Äé
ÆÈǵÉãÒîì¥Ø¯ËäÐ P Ê›Ô Ð Ù³Ê›ØµÒî˝ÍÂֵٟ˝ÊÌÍ·èµÉ YÚØµÛñËÂÛÜÊ›Ø Ô×ÊÌÍ Ð Ù³á×ÐçÒÒ ÛÜÒòБÒÈÔ×ʛáÜáÜʦæ Ò³é
^
·ÉŸÍÉÌí
í í¤éñéñé²í I `
^ `´í¾é²éñé²í ^ íñé´é¬é³í
— Œ³£
^ í²éÄé¬é³í G
`Äí¤é²éñéñí
`
ÐçÍÂÉÓËÂǵÉâÔ×ÊÌÍÂÞ®Ðçá¤ÐçÍÂå›ÖµÞßÉ³Ø ËÒïÊ›Ô ËÂǵÉãٟʛØÚҙ˝ÍÂֵٟËÂÊÌͬéÕê˜ØžËÂǵÉ
^
`
ɟ͝ҳí¥Ð‘Øµè —»š —»–˜—™©¯’
ÐÑÍÂÉãèÚÐçËÂпÞßɳ
Þ _
íñé³é³éŸí
ÐçÍÂÉÏÉIP¥ÎµÍÂɳÒîҝÛÜʛصÒ
›Ê Ô·Ë ìô΍ɳҏæ·ÇÚʛÒîÉ U‘БáÜÖµÉ³ÒÙ¬Ð‘Ø _ É Ù³Ê›Ø U“ÉÄ͝ËÂɳè ËÂÊ ËÂÇµÉ ÍÂɳҙΠɳٟËÂÛ U“ÉžèÚÐçËäÐ ÞßɳÞ_ ÉŸÍ Ë ìôÎ ÉŸÒ³é Æ¹ÇµÉ³ÒÉ
U‘БáÜÖµÉ³Ò ÐÑÍÂÉòֵҝɟèÀËÂÊâÛÜØµÛñ˝Û×БáÜ۟ɋËÂǵɷèÚÐçËäÐÓÞßɳÞ_ ɟÍÂҟí _ ɳÔ×ÊÌÍÂÉ
ÛñÒÕÉIP¥É³Ù³Ö«ËÂɳè¤í«ÐçØÚè ÛÜØËÂǵÉòÊÌÍÂèµÉŸÍ
ÛÜØëæ·ÇÚÛñÙ´ÇãËÂÇµÉ ÞßɳÞ_ ɟÍÂÒ¡ÐçÍÂÉÕèÚɟٳá×ÐçÍÂɟèàÛÜØëËÂÇµÉ Ù³á×Ðçҝҳé ê˜ØàÊÌËÂǵɟ͡æ¹ÊÌÍÂèµÒ³í‘ËÂÇµÉ ÊÌ͝èÚÉÄÍ ÛÜØëËÂÇµÉ ÛñØÚÛ²ËÂÛ×БáÜ۳ɟÍ
ÛÜÒëÛñ囨ÚÊÌ͝ɳè¤T
í _ÚÖµËëÛñËëÛÜÒâå›ÊôÊôè εÍäБÙÄËÂÛÜٳɿËÂÊ ÖµÒÉÀËÂǵÉßèµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛØÝÊÌ͝èÚÉÄÍ ÇÚÉÄÍÂÉßБÒëæ¹É³áñá˜éžê˜ÔÈОèÚÐçËÂÐ
\ ÞßɳÞ_ ŸÉ Í·ÛÜÒ ØµÊÌËÓáÜÛÜÒîËÂɟè ÛñØ ËÂǵÉàÛÜØµÛñ˝Û×БáÜ۟ɟͬíÚÛñË ÛÜÒ èµÉ³ÔªÐ‘ÖµáñË ºÛÜØµÛñËÂÛÜБáÜ۳ɟè¾é·ê˜Ø ˝ÇÚÉàٟʛØÚҙ˝ÍÂֵٟËÂÊÌÍ
_ Ê èµì
í¥æ¹ÉãÙ¬ÐçØ ÒîËÂÛÜáÜáÒÉŸË ÊÌÍòÙäÇÚБصå›ÉÏËÂÇµÉ UÌБáñÖÚɟÒòʛԡҝʛÞßÉÓÊ›Ô ËÂǵÉãèÚÐçËÂÐ ÞßɟÞb_ ÉÄÍÂÒ³é
[ ÊÌÍ ËÂǵÉâË ìôÎ É
í ǵɟÍÂÉàÛÜҷРٳʛصÒî˝ÍÂֵٟ˝ÊÌÍ ËÂÇÚÐçË ÛñØÚÛ²ËÂÛ×БáÜ۳ɳҹЏÍäÐÑËÂÛÜʛØÚÐ‘á¤ØôÖµÞ_ ÉŸÍ ÔÜ͝ʛÞ
rational
Ë æ¹Ê ÛÜØ¯ËÂɳå›ÉŸÍÒ³é
// PRE : d != 0
// POST : * this is initialized with numerator / denominator
rational ( int numerator , int denominator)
: n ( numerator) , d ( denominator)
{
// somehow check that d != 0
}
Æ ÊÖÚÒîÉÏËÂǵÛÜÒÈٳʛصÒî˝͝ÖÚÙÄËÂÊÌÍ·ÛñØóÐ UÌÐç͝Û×Ð _ÚáÜÉÓèµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛؤíôæ¹ÉÓæ¹Ê›ÖµáÜèžÔ×ÊÌÍòÉIPµÐçÞÀÎ áñÉ æ·ÍÂÛñ˝É
rational r (1 ,2); // initializes r with value 1/2
ê˜Øóå›É³ØµÉŸÍäÐçá˜í¥ËÂǵÉâèµÉ³Ù³áÜÐçÍäÐçËÂÛñʛØ
^ í¾é²éñé²í
`
èµÉ YÚØµÉ³Ò ÐU‘ÐçÍÂÛÜÐ _ÚáÜÉ Ê›ÔôË ì Î É Ð‘Øµè ÐçË¡ËÂÇµÉ ÒÂБÞßÉ ËÂÛÜÞßÉÃÛÜØµÛñËÂÛÜБáÜÛ³ÉŸÒ ÛñË"_ ìëÙ¬ÐçáÜáÜÛÜØµå¹ËÂǵÉïÐçεεÍÂÊÌεÍÂÛ×ÐçËÂÉ
ٳʛصÒî˝͝ÖÚÙÄËÂÊÌÍòæ·ÛñËÂÇ Ù¬Ð‘áÜá¤Ðç͝å›ÖÚÞßÉŸØ ËÂÒ
í²é³é³é³í
é
ÆÈǵÉãٳʛصÒî˝ÍÂֵٟËÂÊÌÍò٬БØóБáÜҝÊ_ ÉÏ٬БáÜáÜɟèžÉIPôÎ áñÛÜÙ³ÛñËÂá²ì®Ð‘ÒÈÛÜØ
rational r = rational (1 , 2);
ƹÇÚÛñÒ ÛÜØµÛñËÂÛ×БáñÛ ³É³Ò صÊÌË µè ÛñÍÂɳÙÄËÂáñìàÔÜÍÂÊ›Þ Ë æ¹ÊÏÛÜØ ˝ɳå›ÉŸÍÂÒ³í _ÚÖ«ËÃÔÜÍÂÊ›Þ Ð‘ØÉIP¥ÎµÍÂɳÒîҝÛÜÊ›Ø ›Ê ÔµË ìôÎ É
ËÂÇÚÐçË®ÛÜÒßٟʛØÚҙ˝ÍÂÖµrٟËÂɳè _ôì ËÂÇµÉ ÉIPôÎÚáÜÛÜÙ³ÛñËÀٳʛصÒî˝ÍÂֵٟËÂÊÌͮٳБáÜá
^»·
æ ÇÚÛñٴǼÛÜrational
ÒßʛÔÓË ìôÎ É
rational(1,2)
`Äé
rational
4.3.5 Default constructor
©¯–˜—š Ô×ÊÌÍ ËÂÇµÉ ]ôÛÜØµè ʛÔ
ê˜Ø " ɳÙÄËÂÛÜÊ›Ø é é íòæ¹É ÇÚÐXU“É ÛÜØ¯ËÍÂÊôèµÖµÙ³É³è¼ËÂÇµÉ ËÉŸÍÂÞ
µ
F
˜
Œ
ç
¶
“
©
”
²
’
–
»
—
š
˜
—
˜
–
—
¯
©
­
’
—
ÛÜØµÛñËÂÛÜБáÜÛ ¬ÐÑËÂÛÜÊ›Ø ËÂÇÚÐç˹ËäÐ ]“ɳÒÈÎÚá×ÐçÙ³ÉãÛñ؞èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛصҹáÜÛV]“É
rational r ;
[ ÊÌÍÈÔ×ÖÚØµèÚБÞßɳدËäБáË ì ΠɳҳíµèµÉ³ÔªÐ‘ÖµáñË ˜ÛÜØµÛñËÂÛ×ÐçáÜÛ¬Ðç˝ÛÜʛ؏áñɬÐXU“ɳÒÈ˝ÇÚÉU‘БáÜÖµÉÓÛÜØ W ֵɳÒîËÂÛÜÊ›Ø ÖµØÚèµÉ YÚØµÉ³è¤í _ÚÖ«Ë
×Ô ÊÌÍÈÙ³á×БÒîÒ Ë ì Πɳҳí¥ËÇÚÉ
ÛÜҹБ֫ËÂʛޮÐç˝ÛÜ٬БáÜá²ì ٬БáÜáÜɟè®ËÊ¿ÛñØÚÛ²ËÂÛ×БáÜÛ³ÉÈ˝ÇÚÉU‘БáÜÖµÉÌéÃê˜Ô
µ
F
˜
Œ
Ñ
¶
“
©

”
­
’
–
Ÿ
±
›

¤
š
³
Ž
˜
–
¬
£
¡
”
¬
±

–
›

£
εÍÂÉ³ÒÉŸØ Ë¬í‘˝ÇÚÉÕèµÉ³ÔªÐ‘Öµáñ˾ٳʛصÒî˝ÍÂֵٟ˝ÊÌÍ ÛÜÒ¤ËÂÇµÉ‹ÖµØµÛ WôÖµÉÃٳʛصÒî˝ÍÂֵٟ˝ÊÌÍ¡æ·ÛñËÂÇëÐçØàɳÞÀÎµË ìÓÔ×ÊÌ͝ޮБá¯ÐçÍÂå›ÖµÞßÉ³Ø Ë
áÜÛÜҙˬé
ÕìœÎµÍÂÊ U¥ÛÜèµÛÜØµå½Ð½èµÉ³ÔªÐ‘ÖµáñˏٳʛصÒî˝͝ÖÚÙÄËÂÊÌÍ¬í‹æ¹É Ù¬Ð‘Ø ËÂÇ ÖÚҏޮР]“É ҝ֫ÍÂɞËÂÇÚÐçˏٳá×БÒîÒË ìôÎ É UÌÐçáÜֵɳÒ
ÐçÍÂÉ
εÍÂÊÌÎ ÉÄÍÂáñì ÛÜØµÛñËÂÛ×БáñÛ ³É³è¤éïê˜Ø Ù¬ÐçҝÉàÊ›Ô ËÂǵÉëÙ³á×ÐçҝÒ
^˜ÊÌÍ ÐçØ ì ÐÑÍÂÛñËÂǵÞßɟËÂÛñÙÓË ì Î É `Äí
¯
©
­
’
¸
©
J
Ž
rational
èµÉ³ÔªÐ‘ÖµáñË ˜ÛÜØµÛñËÂÛ×ÐçáÜÛ ¬Ðç˝ÛÜʛ؜æ Û²ËÂÇ U‘БáÜÖµÉ
ҝɳɳÞßÒ ËÂ
Ê _É½ËÂÇµÉ Ù³Ð‘ØµÊ›ØÚÛñ٬БáÏٴǵʛÛÜٟÉÌíÓБصè ǵɟÍÂÉ ÛñÒ ËÂǵÉ
Ù³ÊÌ͝͝ɳÒîΠʛصèµÛÜØµåèµÉ³ÔªÐçÖÚá²Ë·Ù³Ê›ØµÒîËîÍÂֵٟËÂÊÌͬ0é
\ // POST : * this is initialized with 0
rational ()
: n (0) , d (1)
{}
ê˜ØžÔªÐ‘ÙÄË¬í¥æ¹É
εÍÂÊU¥ÛÜèµÉÏÐàèµÉ³ÔªÐ‘Öµáñ˹ٳʛصÒî˝͝ÖÚÙÄËÂÊÌÍÈÛÜÔ æ¹ÉÓæÈÐçØ Ë¹ËÂǵÉÓٳʛÞÀÎÚÛÜáÜɟÍÕËÂÊ Ðçٳٳɟε˹ËÂǵÉ
¨ž”ŽŸ–
µè ɳٳá×ÐÑÍäÐçËÂÛÜʛØ
éëÆ¹ÇÚÛñÒÏޮР]“É³Ò Ù³á×БÒîÒÓË ì ΠɳÒÓÒÂБÔ×ɟÍÏËÂÇÚÐ‘Ø Ô×ÖµØÚèÚБÞßÉŸØ ËäБá¡Ë ì Πɳҳí¤ÒÛñØÚٟɿ۲Ë
rational r
ÛÜÒÈØµÊÌËÈ΍ʛҝҝÛV_ÚáÜÉ ËÂʏٳÛñÍÂÙ³ÖµÞU“É³Ø ËòРٳʛصÒî˝ÍÂֵٟ˝ÊÌÍ·Ù¬ÐçáÜá¤ÛÜØžèµÉ³Ù³áÜÐçÍÂÛÜØµåÐU‘ÐçÍÂÛ×Ð _ áñÉÌé
ÆÈǵÉÕÙ¬ÐçÍÂɳÔ×Öµá›ÍÂɬÐçèÚÉÄÍ æ ÛñáÜáÌØµÊÌËÂÛÜÙ³É ËÂÇÚÐçˤËÂǵɟ͝ɋ޿ÖÚÒ™Ë _É‹Ð‘ØãÉIP«ÙŸÉŸÎµËÂÛÜʛØâËÂÊÈËÂǵÛÜÒ ÍÂÖµáÜÉ ÍÂʛåÌÍäÐ‘Þ \
ÛÜØ " ɳٟ˝ÛÜÊ›Ø é ٳʛدËäБÛÜØµÒ ËÂÇµÉ èµÉ³ÙŸá×ÐçÍäÐç˝ÛÜʛØàÒîËäÐç˝ɳÞßÉ³Ø Ë
Бá²ËÂǵʛÖÚå›ÇàÛñØ ËÇ ÐÑË ÎµÍÂʛåÌÍäÐ‘Þ í
rational r;
ËÂǵÉÕË ì Î É
ÛÜÒ ÐÈҙ˝ÍÂÖµÙŸË æ·ÛñËÂÇµÊ›Ö«Ë¾Ð‘Ø ìãٳʛصÒî˝ÍÂֵٟ˝ÊÌÍÂÒ³é Æ¹ÇµÛÜÒ ÛÜÒ¾ÛÜØàԪБÙÄË ËÂǵɋʛصáñìÏÉIP¥Ù³ÉŸÎµËÂÛÜʛØ
Ô×ÊÌÍ¿ÐóÙ³á×Ðçҝrational
Òëæ Ûñ˝ÇÚʛ֫ËëÐ‘Ø ì ٟʛØÚҙ˝ÍÂֵٟËÂÊÌÍÂҟí ˝ÇÚÉßèµÉ³ÔªÐçÖÚá²ËàٳʛصÒî˝ÍÂֵٟ˝ÊÌÍ ÛÜÒëÛÜÞÀÎÚáÜÛÜٟÛñËÂáñìóεÍÂÊ U¥ÛñèÚɟè _ ì
ËÂǵɮٳʛÞÀÎÚÛÜáÜɟͳí Бصè ÛñË ÒîÛÜÞÀÎÚáñìÝèµÉ³ÔªÐ‘ÖµáñË ºÛÜØµÛñËÂÛÜБáÜÛ ³ÉŸÒÏËÂǵɮèÚÐçËäÐóÞßɳ
Þ _ ÉŸÍÒ ‹ÛÜÔòÐóèÚÐçËäÐ Þßɳ
Þ _ ɟÍâÛÜÒ
Ê›Ô Ù³á×БÒîÒ·Ë ìôÎ ÉÌí ËÂǵÛÜÒ·ÛÜØ ËÂÖ«ÍÂØ Ù¬ÐçáÜáÜÒò˝ÇÚÉàèµÉ³ÔªÐçÖÚá²Ë ٳʛصÒî˝͝ÖÚÙÄËÂÊÌÍÓÊ›Ô ËÂǵÉàÙ³ÊÌ͝ÍÂɟÒîΠʛصèµÛÜØµåÀÙ³á×БÒîÒ³é Æ¹ÇÚÛñÒ
IÉ P¥Ù³ÉŸÎµËÂÛÜʛØÝÇÚБ
Ò _ ɳɟØÝޮБèµÉàÒÊ ËÇ ÐÑËâÒîËîÍÂֵٟËÂb
Ò ^»æ ǵÛÜÙäÇ ÇÚБÒÏÛÜØµÇµÉŸÍÂÛñ˝ɳè½ÔÜÍÊ›Þ Ûñ˝ÒÓεÍÂɟٳ֫ÍÂҝÊÌÍ
`RYµËÈÛÜØ ˝ʏËÂǵÉÏÙ³á×БҝÒÈٳʛصٳɟεËòʛ
Ô àé
4.3.6 User-defined conversions
ïʛØÚҙ˝ÍÂֵٟËÂÊÌÍÂÒÕæ ÛñËÂÇ Ê›ØÚÉ ÐçÍÂå›ÖµÞßÉ³Ø ËÃÎÚá׳РìÀÐÏÒîΠɳٟÛ×Бá ͝ʛáÜÉ ËÂǵɟìÀÐçÍÂÉ
é
”
‘
Ž
³
Œ
£
µ
F
Œ
š
I
Œ
F
Ÿ
±
›

š
ô
D
³
Œ
¦
£
Ÿ
Ž
î
—
›

¤
š
Ž
[ ÊÌÍò˝ÇÚÉÏÙ³á×ÐçҝÒ
í«ËÂǵÉâٟʛØÚҙ˝ÍÂÖµŸÙ ËÂÊÌÍ
rational
// POST : * this is initialized with value i
rational ( int i)
: n ( i ) , d (1)
{}
ÛÜÒïÐãÖÚÒîɟͺèµÉ YÚØµÉ³è Ù³Ê›Ø U“ÉÄÍÂҝÛÜʛخÔÜÍÂʛÞ
ËÂÊ
é·ØµèµÉŸÍ ËÂǵÛÜÒÕٳʛصÒî˝ÍÂֵٟËÂÊÌͳí
_É³Ù³Ê›ÞßɳÒ
int
Ð ™Ë ìôÎ Éóæ·ÇµÊ›ÒÉ U‘БáÜֵɳÒßÙ¬Ð‘Ø _ É Ù³Ê›Ø int
U“ɟ͝ËÂɟè rational
ËÂÊ
«é ÆÈǵÛÜÒ Ô×ÊÌÍ®ÉIPµÐ‘ÞÀÎÚáÜÉ ÞßÉ¬Ð‘ØµÒ ËÂÇÚÐçË
rational
æ¹ÉžÙ³Ð‘Ø εÍÂÊ UôÛÜèµÉžÐ ٬Бáñá·Ðç͝å›ÖÚÞßÉŸØ Ë¿Ê›Ô·Ë ìôÎ É
æ ÇµÉ³ØµÉ U“ÉŸÍßÐ Ô×ÊÌÍÂÞ®ÐçáÈÔ×ֵصٟËÂÛñÊ›Ø ÐçÍÂå›ÖµÞßɳدˏʛÔ
int
Ë ìôÎ É
ÛñÒëIÉ P¥ÎÉ³ÙŸËÂɳè ÃÛÜØÝËÂǵÉÀÛÜÞÀÎÚáÜÛñÙ³ÛñËÓÙ³Ê›Ø U“ÉŸÍÂҝÛÜÊ›Ø ËÂÇÚÐçËãËäÐ ]“ɳÒëÎÚá×ÐçÙ³ÉÌí¡ËÇÚÉ Ù³Ê›Ø U“ÉŸÍîËÂÛÜØµå
ٳʛصÒî˝͝rational
ÖÚÙÄËÂÊÌÍÓÛÜÒ Ù¬ÐçáÜáÜɳè¤
é S¼ÛñËÂÇ ÖµÒÉŸÍ ºèµÉ YÚØµÉ³è½ÙŸÊ›Ø U“ÉŸÍÂÒîÛÜÊ›ØµÒ³íæ¹Éàå›Ê _ ɟì“Ê›Øµè ˝ÇÚÉâҝɟËÏʛÔ
F«©“ËÂǵ£ FÉ
ËÂÇÚÐçË ÐçÍÉ _ÚÖÚÛñáñË ºÛñØ ^˜áÜVÛ ]“ÉÏËÂǵÉëʛصÉëÔÜÍÂʛÞ
ËÂÊ
`´í _ÚÖ«Ë ÛÜØ ٳʛد˝ÍäБ޳Òî–îË·©“ËšÊÀ
—ɳš¤Ò¹Ž ÛÜØµÙ³Ê›ÞÀÎÚáÜÉŸËÉ ` ÒîËäБصèÚÐçÍÂè Ù³Ê›Ø U“ÉŸÍÂҝÛñÊ›Ø ÍÖÚáñɳint
^˜±ŸÒ›Ê›š ÞßDôÉČ³Ë£¦Û܎ŸÞß
Ò ÒîËÂ۲Πֵá×double
ÐÑËÂɳè _ ìžËÂÇµÉ ÒîËäБصèÚÐçÍÂè¤íµæ¹É
ޮР]“É ËÂǵÉÓÍÂÖµáÜɳÒÈʛֵ͝ҝɳVá U“ɳҟé
ÆÈÇµÉŸÍÉ ÐçÍÂÉóÞßɬÐçØÚÛñØÚå›Ô×ÖµáÈÖµÒÉŸÍ ˜èÚIÉ Y صɳè¼Ù³Ê›Ø U“ÉŸÍÂҝÛÜÊ›ØµÒ ËÇ ÐÑËß٬Б
Ø Ë _ ÉóÍÂɬÐçáÜÛ ³É³è _ ì ٳʛصÒî˝͝ÖÚÙ ËÂÊÌÍÂҟé [ ÊÌÍ IÉ PµÐ‘ÞÀÎÚáÜɑí ÛÜÔ æ¹ÉÀæÈÐ‘Ø¯Ë ÐžÙ³Ê›Ø U“ÉŸÍÂҝÛñÊ›Ø ÔÜÍÂʛÞ
ËÂÊ
í æ¹ÉÀ٬Б
Ø ËàБèµè Ð
rational
double
Ù³ÊÌ͝͝ɳÒîΠʛصèµÛÜØµåóٳʛصÒî˝͝ÖÚÙÄËÂÊÌÍëËÂÊóËÂÇµÉ Ë ì Î É
í ҝÛñØÚٟÉ
ÛÜÒãØÚÊÌËàОٳá×БÒîÒâË ìôÎ ÉÌé U“ɳØ
double
double
Ù³Ê›Ø U“ÉŸÍÂҝÛÜʛصÒÏËÂʞҝʛÞßɿٳá×ÐçҝÒÏË ì Î É ÞßÛÜå›Ç ËÓØµÊÌË _ ɏΠʛÒîҝVÛ _ÚáÜÉ ÛÜØ ËÂǵÛÜÒÓæÈгì ÏÛÜÔ ÛÜÒâØµÊÌË îÊ›Ö«Í Ë ìôÎ É ^ _Ú֫˷ٳʛÞßɟÒòÔÜÍÂÊ›Þ ÐáÜÛ _ÚÍÂÐç͝ì“í¥ÒÂгì `ÄíÚæ¹Éã٬БصصÊÌË ÒÛñÞÀÎ á²ì®Ð‘èµè ЏٟʛØÚҙ˝ÍÂֵٟËÂÊÌÍòËÂÊ éê˜ØžÒÖµÙ´Ç
ҝÛñËÖ ÐÑËÂÛÜÊ›ØµÒ³í‘æ¹É¹ÒÛÜÞÀÎÚáñìãËÂɳáÜá
Ë ìô΍Éòǵʦæ ÛñËÂÒ U‘БáÜÖµÉ³Ò ÒÇµÊ›ÖµáÜè _ É¹Ù³Ê›Ø U“ɟ͝ËÂɟè ËÂÊÓËÂǵÉÈËäÐÑÍÂå›ÉŸË Ë ìôΠɑé
›” £ ˝Ê
ƹÇÚÉÈÙ³Ê›Ø U“ÉŸÍÂҝÛÜʛØßÔÜ͝ʛÞ
í¯Ô×ÊÌ͋GÉ PµÐ‘ÞÀÎÚáÜÉÌí›ÙŸÊ›ÖÚáñè _ ÉÈèÚʛصɹËÂÇ«ÍÂʛֵå›ÇÀÐÓÞßɳ
Þ _ ɟÍ
rational double
Ô×ֵصٟËÂÛÜÊ›Ø Ø ÐçÞßɳè
áñVÛ ]“É ËÂǵÛÜÒ³é
operator double
// POST : return value is double - approximation of * this
operator double ()
\ {
return double (n )/ d;
}
ê˜Ø ›å ɳصɟÍäБá»í‹ËÂǵÉóÞßɳÞ_ ɟ͏Ô×ÖµØÚÙÄËÂÛÜʛØ
Ç ÐçÒÀÛÜÞÀÎÚáÜÛÜÙ³Û²ËëÍÂɟËÂÖ«ÍÂØ Ë ìôÎÉ Ð‘Øµè ÛÜØµèÚֵٳɟÒ
РֵҝÉÄͺèµÉ YÚØµÉ³è Ù³Ê›Ø U“ÉŸÍÂҝÛÜʛØÝËÊ ËÂÇµÉË ì operator
Î É ËÂÇÚÐçã
Ë ÛÜÒãБ֫ËÂʛޮÐçËÂÛñ٬БáÜáñì ÛÜØ U“Ê ]“³É èÝæ ǵ³É ØµÉ U“ÉŸÍãËÂǵÛÜÒÏÛÜÒ
صɳٳɳÒîÒÂÐç͝ì“é
4.3.7 Member operators
áÜáÚÔ×ֵصٟËÂÛÜʛØÚБáÜÛ²Ë ì ʛԍÍÂÐçËÂÛÜʛØÚБáÚØôÖµÞ_ ɟÍÂÒÃËÂÇÚÐçËÕæ¹É·Ç ÐXU“É εÍÂÉ UôÛÜʛֵҝáñì εÍÂÊU¥ÛÜèµÉ³èßËÂÇ«ÍÂʛֵå›Ç îå›áÜÊ _ Бá
Ô×ֵصٟËÂÛÜʛص
Ò ^
í
íñé³éŸé ` Þ¿ÖµÒîË ØµÊ¦æ _ É ÍÉ³Ù³Ê›ØµÒÛÜèµÉŸÍÂɟè¾íôҝÛÜØµÙ³É èµÛñÍÂɟٟËÂáñìÀБٳٳɳÒîÒ ÛÜØµåÀËÂǵÉëèÚÐçËäoperator+
ЏÞßɳb
Þ _ÉŸÍÂÒÈoperator+=
ÛÜÒ ØµÊ®áÜʛصå›ÉŸÍ·Î ʛÒîҝÛV_ÚáÜÉÌé·ê˜ØÚҙËÂɬБè¤í æ¹Éëæ·ÛÜáÜá¾ÖµÒÉëËÂǵÉëÞßɳÞ_ ɟÍòÔ×ÖµØÚÙÄËÂÛÜʛصÒ
Бصè
Ô×ÊÌÍòØµÊ›Ø ºÞßÊôèµÛÜÔÜìôÛÜØµåàБٳٟɳҝÒò˝ʏËÂÇµÉ ÍÂɟεÍÂɳÒîÉ³Ø ËäÐÑËÂÛÜʛؤíµÐ‘صèóРٳʛØ
numerator
Òî˝͝ÖÚÙÄËÂÊÌÍ·Ô×ÊÌÍòÍÂɟËÂÖ«denominator
ÍÂØµÛÜØµåÐ ͝ɳҝֵáñˬ
é èµèµÛñËÂÛÜÊ›Ø Ô×ÊÌÍ IÉ P«Ð‘ÞÀÎÚáÜÉ ËÂǵɳØóæ¹ÊÌÍ ]ôÒòáñÛV]“ÉÏ˝ÇÚÛñÒ ^˜Ð‘صè _ ɳٳʛÞßɟÒ
Ð _ Û²ËòáñɳصåÌËÂÇ ì `
// POST : return value is the sum of a and b
rational operator + ( rational a , rational b)
{
int rn = a. numerator () * b. denominator () +
a. denominator () * b. numerator ();
int rd = a. denominator () * b. denominator ();
return rational ( rn , rd );
}
‹Ö«ËóֵصèÚÉÄÍóБٟٳɳҝҞ͝ɳÒî˝ÍÂÛñٟËÂÛÜʛصҳí·ËÇÚÉÄÍÂÉÝÐç͝É
Ò ʛÞßÉ ËÂǵÛÜØµå›Ò®ËÂÇÚÐçË æ¹É½Ù¬Ð‘صصÊÌ˞èµÊ ÎÚ͝ÊÌΠɟÍÂáñì
ËÂÇ«ÍÂʛֵå›Çóå›áÜÊ _ Бá¤Ô×ֵصٟËÂÛÜʛصҳé Ò Ð‘Ø ÉGPµÐ‘ÞÀÎÚáÜÉÌí«ÙŸÊ›ØÚÒîÛÜèµÉŸÍ
鹯ÈǵÛÜÒòÊÌΠɟÍÂÐçËÂÊÌÍòØÚɟɳèµÒòËÂÊ
ÙäÇÚБصå›É®ËÇÚÉ U‘БáÜÖµÉßʛÔòÐ ÍÂÐçËÂÛÜʛØÚБáÕØôÖµÞb_ÉŸÍ¬í_ÚÖ«ËàËÂǵɟÍÂÉ®ÛÜoperator+=
Ò ØµÊ Ò™Î É³Ù³ÛVYÚÙ®ÞßɳÞ_ ɟÍâÔ×ÖÚØµÙŸËÛÜÊ›Ø ËÇ ÐÑË
БáÜáñÊÑæ·Ò¿ÖµÒ ˝ÊÝèµÊ ËÂǵÛÜÒ³é S ÉóÙ¬Ð‘Ø Ê›Øµáñì ҝÛÜÞ¿Öµá×ÐçËÂÉÀ˝ÇÚɞٴÇÚБصå›É ËÂÇ«ÍÂʛֵå›ÇœËÂÇµÉ Ð‘èµèµÛñËÂÛÜʛ؜Бصè БØ
БҝÒîÛÜ囨µÞßÉ³Ø Ë¬íôáÜÛV]“É ËÂǵÛÜÒ³é
// POST : b has been added to a ; return value is the new value of a
rational & operator += ( rational & a , rational b)
{
return a = a + b ;
}
ƹÇÚÛñÒÓæ¹ÊÌÍ ]¥Ò_ÚÖµËÏÛÜÒÓÛÜØµÉ Ù³ÛÜɳدËb^˜Ù³Ê›ØµÒÛÜèµÉŸÍÏá×Ðç͝å›ÉŸÍÏÒî˝ÍÂֵٟËÂÒ `Äí¤ÒÛÜØµÙ³Éàæ¹ÉbYµÍÂҙËãٟʛØÚҙ˝ÍÂֵٟËãÐ‘Ø ÛñØ ËÂÉŸÍ ÞßɳèµÛ×Ðç˝ÉòÍÂɳÒîÖÚá²Ë
æ ǵÛÜÙäÇ ÛñÒ ÒÖ _ÚҝÉXWôֵɳدËÂáñì®Ù³ÊÌÎÚÛÜɟè _ Б٠]ßÛÜØ¯ËÂÊ éÕê˜Ø ԪБٟ˳í
æÈБÒ
a + b
a
operator+=
èµÉ³ÒÛÜ囨µÉ³è ËÂÊÀXÐ U“Ê›ÛÜè ÉIPµÐ‘ÙÄËÂáñì®ËÂǵÛÜÒ¹èµÉŸËÂʛ֫ÍòËÇ ÐÑËÈæ¹ÉãØµÉ³É³èžËÂÊ¿ËäÐ ]“ÉÏØµÊÑæâé
_ ɟËîËÂÉŸÍ æÈгì ËÂÊßå›ÊÀÛÜÒ·ËÊ ÍÂɬБáñÛ³É
Ð‘Ò Ð ÎÚÖa_ÚáÜÛñÙâÞßɳÞ_ ɟÍÈÔ×ֵصٟËÂÛÜÊ›Ø ^ºÐ
operator+
`´í ÇÚXÐ U¥ÛÜØµåÓʛصáñìàʛصɹÔ×ÊÌÍÂޮБá«ÐÑÍÂå›ÖµÞßÉ³Ø ËR^»Ô×ÊÌÍ `Äí“ÐçØÚè
ËäÐ ]¥ÛñØÚå ËÂǵÉïÍÂʛáÜÉïÊ›Ô ¨ Œ³é ¨ ÆÈ ³ÇµŒ³ÛÜ£ Ò
b
*this
a
áÜ³Ê ¢ Ê Œ³]¥£ÄÒÈ©¯–Ð‘›ÒÈ£ Ô×ʛáÜáÜʦæ Ò³é
// POST : b has been added to * this ; return value is
//
the new value of * this
\ rational & operator += ( rational b)
{
n = n * b.d + d * b. n;
d *= b.d ;
return * this ;
}
S¼ÛñËÂǵÛÜØÏËÂǵÛÜÒ ÞßɳÞ_ ɟͤÔ×ֵصٟËÂÛñʛؾíÑËÂǵɟÍÂÉÕÛÜÒ ØµÊ·ÎµÍÂÊ _ÚáÜÉ³Þ ÛÜØ ÐçٳٳɳҝÒîÛÜØµå·ËÂǵɋèÚÐçËäйÞßɳÞ_ ɟÍÂÒ¤èµÛñÍÂɟٟËÂáñì“í
ҝÛÜØµÙ³ÉÃËÂÇµÉ Ð‘ÙŸÙ³É³ÒÒ ÍÉ³Òî˝ÍÂÛñٟËÂÛÜʛصҤèµÊ صÊÌË ÐçεÎÚáñìÓËÂÊ ÞßɟÞb_ ÉÄͤÔ×ÖÚØµÙŸËÛÜÊ›ØµÒ³é Æ¹ÇµÛÜÒ"U“ɟ͝ҝÛÜʛØëʛÔ
ÛÜÒÓБÒÓÉ Ù³ÛÜɳدËãÐ‘Ò ËÂǵɿʛصÉàεÍÂÉ ôU ÛÜʛֵҝáñìóֵҝɟèÝÔ×ÊÌÍ
í¤ÐçØÚè ÛñËÓÙ¬ÐçØ ÛÜØ operator+
ËÂÖ«ÍÂØ É U“ɳØ
struct rational
ÒÉŸÍ “U ÉëБҷÐ_ БҝÛñÒÈÔ×ÊÌÍ Ð¿ÞßÊÌ͝ÉÏÒîÖÚٟٳÛÜØµÙŸËòÛÜÞÀÎÚáÜɳÞßɳدËäÐçËÂÛÜʛ؏ʛÔ
operator+
// POST : return value is the sum of a and b
rational operator + ( rational a , rational b)
{
return a += b;
}
ʛ֏ÞßÛÜå›Ç ËÃÐÑÍÂå›ÖµÉòËÂÇÚÐçËÃÉ U“ɳØ
operator+
Prefer nonmember operators over member operators.
ҝǵʛֵáÜè_ ɳٳʛÞßÉ ÐàÞßɳÞ_ ɟ͋Ô×ÖµØÚÙÄËÂÛÜÊ›Ø Ê›Ô
íµÐ‘صè ÛÜØµèÚɟɳè¤íôËÂǵÛÜÒ æ¹Ê›ÖµáÜèß
εÍÂÊ _ Ð _Úáñì
class rational
БáÜáñÊÑæ ОÒîáÜÛÜå›Ç ˝áñì ÞßÊÌÍÂÉ¿É Ù³ÛñÉ³Ø ËàÛñÞÀÎ áñɳÞßÉ³Ø ËÂÐçËÂÛÜÊ›Ø¤é¿ÆÈǵɟ͝ÉÀÛÜÒâʛصɏÛÜÞÀÎ ÊÌ͝ËäÐçØ Ë ÍÂɬÐçÒÊ›Ø ËÂÊ ]“ɳɟÎ
ËÂǵÛÜÒ¹ÊÌΠɟÍÂÐçËÂÊÌÍòå›áÜÊ _ Бá˜í ˝ÇÚʛֵå›Ç¤íµÐ‘صèžËÂǵÛÜÒ¹ÇÚБҹËÂÊ èµÊ¿æ ÛñËÂÇ ÖµÒÉŸÍ˜èÚÉIY صɳèžÙ³Ê›Ø U“ɟ͝ҝÛÜʛصҳé
XÐ U¥ÛÜØµå ËÂǵÉãÙŸÊ›Ø U“ÉŸÍÂÒîÛÜÊ›Ø ÔÜÍÂʛÞ
ËÂÊ
ËÇ ÐÑËÈæ¹ÉÏå›ÉŸËÈËÂÇ«ÍÂʛֵå›ÇžËÂǵÉÏٳʛصÒî˝ÍÂֵٟËÂÊÌÍ
int
rational
// POST : * this is initialized with value i
rational ( int i );
æ¹ÉâÙ³Ð‘Ø Ô×ÊÌÍ ÉIP«Ð‘ÞÀÎÚáÜÉ æ·ÍÂÛ²ËÂÉÓÉIP¥ÎµÍÂɳÒîҝÛÜÊ›ØµÒ áÜÛV]“É
ÊÌÍ
íÚæ·ÇµÉŸÍÂÉ ÛÜÒòÊ›Ô¡Ë ì Î É
é
ê˜ØßٳʛÞÀÎÚÛÜáÜÛñØÚå ˝ÇÚÛñÒ³í›ËÂǵɷٳʛÞÀÎÚÛÜáÜÉÄ͋Ðçֵ˝ʛޮÐçËÂÛÜÙ¬ÐçráÜáñìÏ+ÛÜØµ2ÒÉŸÍËÒ 2Ðã+ٟʛrØ U“ɟ͝˝ÛÜØµåârٳʛصÒî˝͝ÖÚÙÄËÂÊÌÍ rational
Ù¬ÐçáÜá˜é O ʦæëí
ÇÚXÐ U¥ÛÜØµå
ÐçÒàÐ ÞßɟÞb_ ÉÄÍÏæ¹Ê›ÖµáÜè½ÍÂɳÞßÊU“É¿ËÂǵɏҝɳٳʛصè Î Ê›ÒÒÛ _ ÛñáÜÛñË ì ʛԋæòÍÂÛñËÂÛÜØµå
é
operator+
2 + r
S¼Ç ì ɟ!Ë Ò YµÍÂÒîË ÒÉŸÉëæ ÇÚÐçË ÇÚÐçεΠɟØÚÒÈæ ǵɳØ
ÛÜҷٳʛÞÀÎÚÛÜáÜɳè¤éïê˜Ô
ÛÜÒ Ð¿ÞßɳÞb_ÉŸÍ
r + 2
operator+
Ô×ֵصٟËÂÛÜʛؤí¥ËÂǵɳØ
îÞßÉ¬Ð‘ØµÒ r + 2
r. operator + (2)
˜ê Ø ÙŸÊ›ÞÀÎ ÛñáÜÛÜØµå¿ËÇÚÛñÒ³íËÂÇµÉ Ù³Ê›ÞÀÎÚÛÜáÜɟͷÛÜØµÒÉŸÍËÂÒ ÂË ÇµÉàÙ³Ê›Ø U“ÉŸÍÂҝÛñÊ›Ø ÔÜÍÂÊ›Þ ÂË ÇµÉ Ù¬Ð‘áÜá ÐçÍÂå›ÖµÞßÉ³Ø Ë·Ë ì Î É
ËÂÊëËÂÇµÉ Ô×ÊÌ͝ޮБáÐÑÍÂå›ÖµÞßÉ³Ø ËÃË ìôÎ É
ʛÔ
í«Ð‘صè®É U“ÉŸÍ ì ËÂǵÛÜØµåâæ¹ÊÌÍ ]ôÒ¹Ð‘Ò ÉIPôΠɳٟËÂint
ɟè¾é
rational operator+
íµÇµÊÑæ¹IÉ U“ÉŸÍ¬íµæ¹Ê›ÖÚáñèžÞßɬБØ
2 + r
2. operator + ( r )
æ µÇ ÛÜÙäÇóޮР]“ɳÒòصÊÀÒîɳصҝÉâæ ÇÚÐç˝ҝÊôÉ U“ÉÄͬéïê˜Ô æ¹ÉÏæ·ÍÂÛñ˝ÉâÐ_ ÛñØ ÐÑ͝ì ÊÌΠɟÍäÐç˝ÊÌÍ Ð‘Ò·Ð¿ÞßɟÞb_ ÉÄÍòÔ×ֵصٟËÂÛñʛؾí
ËÂÇµÉ³Ø ËÇÚÉ YµÍÂÒîËã٬Бáñá ÐçÍÂå›ÖµÞßÉ³Ø Ë
_ ɿʛÔÕËÂÇµÉ ÍÂɳÒîΠɟٟËÂÛVU“ɿٳá×БÒîÒÏË ìô΍ÉÌé¿ê˜ÞÀÎ áñÛÜÙ³ÛñË·Ù³Ê›Ø U“ɟ͝ҝÛÜʛصÒ
¨

”
³
Ž
–
èµÊØµÊÌËÈæ¹ÊÌÍ ]®ÇµÉŸÍÂÉ ËÂǵɟì ʛصáñì БèÚÐçε˹٬Бáñá¡ÐÑÍÂå›ÖµÞßÉ³Ø ËÂÒ ËÊÔ×ÊÌÍÂÞ®Ðçá ÐçÍÂå›ÖµÞßɳدËïË ì ΠɳÒÈÊ›Ô Ù³Ê›ØµÙŸÍÉŸËÂÉ
Ô×ֵصٟËÂÛÜʛصҳí _ÚÖ«Ë ËÂǵɟì ٬БصصÊÌ
Ë _ ɏÉGP¥Î ɳÙÄËÂɳè ËÂÊ NYÚØµè
ËÂÇµÉ Ù³á×ÐçÒÒ æ ǵʛҝÉ
ÇÚÐ‘Ò ËÂÊ_ É
operator+
ÐçεÎÚáÜÛÜɳè¤é
\ 4.3.8 Nested types
ƹÇÚÉÄÍÂÉ®ÛÜÒ ÐžËÂǵÛñÍÂè Ù¬ÐçËÂɟå›ÊÌ͝ì ʛÔÈÙ³á×БҝÒàÞßɟÞb_ ÉÄÍÂÒ³í Бصè ËÂÇµÉ³ÒÉ ÐçÍÂÉ
éÝÆ Ê ÞßÊÌËÂÛVU‘ÐçËÂÉ
ËÂǵɳҝɑí áÜÉÄËòÖµÒòٳʛÞßÉ_ÐçÙ ] ËÂÊ ê˜ÒÒÖµÉ Ð _ ÊU“ÉÌí«ËÂǵÉâʛصÉãٟʛØÚٟɟÍÂØµÛÜØµåš ËŒ¬ÇµŽ³ÉϖŒGÛÜØ F ˝ɟ– ÍÂJ¦ØÚ¢ БŒ¬á Ž ÍÂɟεÍÂɳÒîÉ³Ø ËäÐÑËÂÛÜʛØ
Ê›Ô ÍäÐçËÂÛñÊ›Ø ÐçáòØ ÖÚ
Þ _ ɟ͝ҳé ê˜Ô ì“Ê›Ö ËÂǵÛÜØ ] Ð _Ê›ÖµË ٳʛصҝÉXW ÖÚÉŸØ ËÂáñì ÇÚÛñèÚÛñØÚå ËÂǵÉóÍÂɟεÍÂɳÒîÉ³Ø ËäÐÑËÂÛÜÊ›Ø Ê›ÔÓÐ
ÍäÐç˝ÛÜʛØÚÐ‘áØ ÖÚ
Þ _ ɟ͹ÔÜÍÊ›Þ ËÂǵÉÏٟÖÚҙËÂʛÞßɟͬíô˝ÇÚÉŸØ ì“Ê›Ö ÎÚÍÊ _Ð _ á²ì®Ð‘áÜҝÊàæÈБدËïËÂÊ ÇµÛÜèµÉ ËÂǵÉÏØ ÖµÞßɟÍäÐçËÂÊÌÍ
Бصè èµÉ³ØµÊ›ÞßÛÜØÚÐçËÂÊÌÍ¤Ë ìôÎ ÉÌé ·Ò ÛÜØµèµÛÜÙ¬ÐçËÂɟèàÛÜØàËÂÇµÉ IÉ PµÐçÞÀÎ áñÉÌíçËÂǵɳÒîÉ Ë ì Î É³Ò ÞßÛÜå›Ç¯Ë ÛñØ ËÂÉŸÍØ ÐçáÜáñìÏÙäÇ ÐçØÚå›É‘í
_ÚÖ«ËâÛÜØÝ˝ÇÚÉ¿Þßɳ
Þ _ ɟÍÏÔ×ֵصٟËÂÛÜʛصÒ
ÐçØÚè
í¡ì“Ê›Ö ҙËÂÛÜáÜá εÍÂʛÞßÛÜҝÉàËÂÊ ÍÂɟËÂÖ«ÍÂØ
numerator
denominator
U‘БáÜֵɳҳé
int
_ ɟ˝˝ɟ͹ҝʛáÜÖ«ËÂÛÜʛØÀæ¹Ê›ÖµáÜè _ É ËÂÊëεÍÂʛÞßÛñÒÉ Ê›ØµáñìßÐâË ì Î É æ ÛñËÇ ÙŸÉŸÍËäБÛñØ ÎµÍÂÊÌÎ ÉÄ͝ËÂÛÜɳҟí _ôì®ÒÐ¬ìôÛÜØµå
Ô×ÊÌÍ IÉ P«Ð‘ÞÀÎÚáÜÉ ËÂÇÚÐçË ËÂǵÉÝÔ×ÖµØÚÙÄËÂÛÜʛصÒ
Бصè
ÍÂɟËÂÖ«ÍÂØ Ð‘Ø ÛÜØ ËÂɟåÌÍäБáÓË ì Î É
numerator
denominator
^ " ɳÙÄËÂÛÜÊ›Ø \ é \ é `Äé Æ¹ÇµÉ³Øßì“Ê›Öß٬БخÛÜØ ˝ɟÍÂØÚБáÜáñì ÙäÇÚБصå›É ÔÜÍÂÊ›Þ Ê›ØµÉ ÛÜØ ˝ɳåÌÍäБáµË ìôÎ ÉÈËÂÊàÐâèµÛ ɟÍÂÉ³Ø¯Ë Ê›ØµÉ
æ Û²ËÂǵʛֵËÈÐçØÚصʦì¥ÛÜØµå ËÂǵÉãٟÖÚҙËÂʛÞßɟͬéÃÆ ɳÙäǵصÛÜ٬Бáñáñì“íôËÂǵÛÜÒ¹Ù¬Ð‘Ø _ ÉãèµÊ›ØµÉãБÒòÔ×ʛáñáÜÊÑæ·Ò³é
class rational {
public :
// nested type for numerator and denominator
typedef int rat_int ;
...
// realize all functionality in terms of rat_int
// instead of int , e.g .
rational ( rat_int numerator , rat_int denominator ); // constructor
rat_int numerator () const ;
// numerator
...
private :
rat_int n;
rat_int d ; // INV : d != 0
};
ê˜ØóÙ³ÖµÒî˝ʛÞßɟÍÈÙ³ÊôèµÉÌí«ËÂǵÛÜÒ¹Ù¬Ð‘Ø _ ÉâֵҝɳèžÔ×ÊÌÍ ÉIP«Ð‘ÞÀÎÚáÜÉ áÜÛV]“É ËÂǵÛÜÒ³é
typedef rational :: rat_int rat_int ;
rational r (1 ,2);
rat_int numerator = r. numerator ();
rat_int denominator = r. denominator ();
// 1
// 2
SÝÉòБáñ͝ɬБè«ì ҝɳÉÈʛصÉòʛÔÚËÂǵÉÈεÍÂÊÌÎ ÉÄ͝ËÂÛÜÉ³Ò ËÂÇÚÐçË ËÂǵÉÈØµÉ³ÒîËÂɳèË ì Î É
ޏֵÒîËÃÇÚÐXU“É
rational::rat_int
ÛÜØ ÊÌÍÂèµÉŸÍÓÔ×ÊÌÍ ËÂǵÛÜÒÈËÂÊßæ¹ÊÌÍ 
] é [ ÊÌÍÓÉGPµÐ‘ÞÀÎÚáÜÉÌíaU‘БáÜÖµÉ³Ò Ê›Ô Ë ìôÎ É
ޏֵÒîË_ ÉàÙ³Ê›Ø U“ɟ͝ËÂÛV_ÚáÜÉãËÂÊßÛñˬé ê˜Ô
ì“Ê›ÖóÇÚÐX“U ÉâҝÉÄË Ö«Î É “U ɟÍîìôËÂǵÛÜØµå¿Ù³áÜɬБصáñì“í¥ì“ʛ֞٬БØóصʦæ Ô×ÊÌÍòÉIP«int
БÞÀÎÚáÜÉ ÍÂɟÎÚá×Ð‘Ù³É ËÂǵÉãáÜÛÜØµÉ
typedef int rat_int ;
_ôì®ËÂǵÉãáÜÛÜØµÉ³Ò
typedef ifm :: integer rat_int ;
БصèžËÂÇ ÖµÒòÛÜÞßÞßɟèÚÛÜÐçËÂɳáñì¿å›ÉŸËòÉIP«Ð‘ÙŸËÈÍäÐçËÂÛÜʛØÚÐ‘á Ø ÖµÞb_ ÉÄÍÂÒïæ ÛñËÂǵʛ֫ËÈБدìžÊU“ÉŸÍ QÚʦæ Ûñҝҝֵɳҳé
\ ÛÜØ¯ËÍÂÊôèµÖµÙ³É³ÒÈÐëØµÉŸæ ØÚБÞßÉ Ô×ÊÌÍòÐ‘Ø ÉIP«ÛñÒîËÂÛÜØµåàË ìôÎ É
–
¦
J
¢
G
Œ
µ
F
˜
Œ
¶
µ
F
Ÿ
Œ
¬
±
×
’
“
©
Ÿ
£
¯
©
˜
–
î
—
›

š
ÛÜØ¯ËÂÊóÛñËÂÒãҝٳÊÌΠɑéóê»ËàèµÊôɟÒ
ÛÜØ ˝͝ÊôèµÖµÙ³ÉÀОصɟæ Ë ìôÎ ÉÌéžê˜Ø ԪБٟˬí ˝ÇÚÉ ØÚÉÄæ ØÚБÞßÉ Ù³Ð‘Ø _ ÉÀֵҝɳè
š
“

–
ÒîìôØÚʛدì¥Þßʛֵҝáñì æ ÛñËÇ ËÇÚÉ Ê›áÜè ØÚБÞßÉëÛÜØ½Ð‘áÜá Ù³Ê›Ø ËÂÉGP¥ËÂÒ³éâê˜Ø½ËÂÇµÉ Ð _Ê U“É Ù³Ê èÚÉ‘í¤æ¹ÉàÒîɳɿ˝ÇÚÛñÒ Ë æ·ÛÜÙ³É
æ Û²ËÂǵÛÜØ ËÂǵÉëٟá×БҝÒ
íÚËÂǵÉâË ìôΠɳèµÉ³Ô èµÉ³Ù³áÜÐçÍäÐçËÂÛñʛ؞ÛÜØ¯ËÍÂÊôèµÖµÙ³É³Ò ЏصɳÒîËÂɟè Ë ì Î É
íÐ
rational
rat_int
ØµÉŸæ ØÚБÞßÉãÔ×ÊÌÍ ËÂǵÉëË ì Î É
éÓê˜Ø ˝ÇÚÉâÙ³ÖµÒîËÂʛÞßÉŸÍ ÙŸÊôèµÉÌíËÂǵÉàÙ³áÜÐ‘ÒÒ Ò ØÚɟÒîËÂɳè Ë ìôÎ É ^»ËÇ ÐÑË Ù¬Ð‘Ø _ É
БٳٟɳҝҝɳèßֵҝÛñØÚå ËÂǵÉÈҝٳÊÌΠɹint
ÊÌÎ ÉÄÍäÐçËÂÊÌͬí“ÛÜÔµËÂǵɹصɳÒîËÂɳèË ì ΠɹèµÉ³Ù³á×ÐçÍÂÐçËÂÛÜÊ›Ø ÛÜÒ ÎÚÖ _ áñÛÜÙ`¡ÍÂɳٟɳÛVU“ɳÒÕÐ ØÚÉÄæ
^˜ÒÇµÊÌ͝˝ɟGÍ `ïØ ÐçÞßÉÌé
ê˜ØßÍÂÉ¬Ð‘á ˜áÜÛÜÔ×É ÙŸÊôèµÉÌí ˝ÇÚÉÄÍÂÉ ÐçÍÂÉ·ØÚɟÒîËÂɳèßË ìôΠɟÒïÊ›Ô ØÚɟÒîËÂɳèßË ìôÎ ÉŸÒ Ê›Ô ØµÉ³ÒîËÂɳèßË ìô΍ɳҳíñé¬éŸé³í¥Ð‘صè
Ë ìôÎ ÉŸØ ÐçÞßɳÒÈ˝ɳصèóËÂÊ å›ÉŸ
Ë U“ɟ͝ìžáÜʛصåèµÖµÉãËÂʏËÂǵÛÜÒ³é Æ¹ÇµÉãË ìô΍ɳèµÉ³Ô ÞßɳÙäÇÚБصÛÜÒÞ Ð‘áÜáÜʦæ Ò¹ÖµÒòËÊ ]“ɳɟÎ
ʛ֫ͷٟÊôèµÉÏ͝ɬБèÚÐ _ÚáÜÉÌé
Typedef declarations.
4.3.9 Class definitions
SÝÉàØµÊ¦æ ÇÚÐXU“ÉàÒ É³É³Ø ËÂǵÉëޮРÊÌÍ ÛÜØµåÌÍÂɟèÚÛñÉ³Ø ËÂÒòʛÔÃÐÀÙ³á×Бҝҟé [ ÊÌÍÂޮБáÜáñì“íµÐÀٟá×Ð‘ÒÒ èµÉ YÚØµÛñËÂÛñʛØóÇÚÐ‘Ò ËÂǵÉ
Ô×ÊÌÍÂÞ
− class
é²éñé
− æ ÇµÉŸÍÉ ÜÛ Ò¿Ð‘Ø ÛÜèµÉ³Ø ˝ÛVYÚÉŸÍ¬é½ÆÈǵɮҝÉXW ÖÚɟØÚÙŸÉžÊ›Ô Òëޮгì _É ɟÞÀÎÚË ì“é&ÕÐçÙ´Ç ÛñÒÀÐ‘Ø ©µ±Ä±ŸŒ¬Ž³Ž Ž ¢ ŒŸ±³— Œ³£ ^ public: ÊÌÍ private: `´íïÊÌÍßÐ ¨½Œ³¨½ ŸŒ³£ FµŒŸ±¬’ש“£Ÿ©¯–˜—™›š é Þßɳ
Þ _ ɟ͡èµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛØëÛñÒ Ð·èµÉ³Ù³áÜÐçÍäÐçËÂÛñʛØëÒîËäÐç˝ɳÞßÉ³Ø Ë¡ËÂÇÚÐçË Ë ì Î Ûñ٬БáÜáñìÏèµÉ³Ù³áÜÐçÍÂÉ³Ò ÐòÞßɳÞb_ÉŸÍ Ô×ֵصٟËÂÛñʛؾí
Ð èÚÐçËÂÐ Þßɳ
Þ _ ɟͳí¾ÊÌÍëРصɳÒî˝ɳè Ë ì Î ÉÌé ïʛáÜáÜɳÙÄËÂÛVU“ɳáñì“íËÇÚɟҝÉßÐçÍÂɏ٬БáÜáñɳè
ʛԋËÂǵÉÀٟá×Бҝҳí
¨
Ÿ
Œ
½
¨
³
Ÿ
Œ
¦
£
Ž
Бصè ËÂǵɳÛñÍ ØÚБÞßɟҷ޿ÖÚҙ
Ë _ ÉàÛÜèµÉ³Ø¯ËÂVÛ YÚɟÍÂҟé ٟá×Ð‘ÒÒ èµÉ YÚØµÛñËÂÛÜʛ؞ÛÜØ ˝͝ÊôèµÖµÙ³É³Ò Рصɟæ Ë ìôÎ ÉÌíÐ‘Øµè ˝ÇÚÛñÒ
Ë ìôÎ ÉÏÛÜÒÈ٬БáÜáñɳèóÐ
íÚБÒòÊÌεΠʛҝɳèžËÊ Ð Ô×ÖµØÚèÚБÞßÉŸØ ËäБáË ì Î ÉÌé
±¬’ש¯Ž³Ž– J¦¢ Œ
Þßɳb
Þ _ÉŸÍ Ô×ֵصٟËÂÛÜÊ›Ø èµÉ YÚØµÛñËÂÛÜʛخÛÜÒ¹ÐàèµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛخÐçÒ¹æ¹ÉŸáÜá˜í _ÚÖ«ËÈÛÜÔ ËÂǵÉÓÙ³á×БҝÒïèµÉ YÚØµÛñËÂÛñÊ›Ø èµÊ ɳÒ
صÊÌË¿Ù³Ê›Ø ËäÐçÛÜØ ËÂÇµÉ èµÉ YÚØÚÛ²ËÂÛÜÊ›Ø Ê›Ô Ð Þßɳ
Þ _ ÉŸÍ Ô×ֵصٟËÂÛÜʛؤí ËÂǵÛÜÒ Ô×ÖÚØµÙŸËÛÜʛ؜޿ֵÒîË¿Ç XÐ U“É Ð Þ®ÐÑËÂÙäÇÚÛñØÚå
"
èµÉ YÚØµÛñËÂÛÜÊ›Ø ÒÊ›ÞßÉÄæ ǵɟÍÂÉëɟáÜÒÉ ^˜ÒÉŸÉ ɳٟËÂÛÜÊ›Ø é é `Äé áñá Þßɳ
Þ _ ɟÍòÔ×ÖµØÚÙÄËÂÛÜÊ›Ø èÚIÉ Y صÛñ˝ÛÜʛصÒÈËÂʛå›ÉÄËÂǵɟÍ
Ô×ÊÌÍÂÞ ËÂǵÉ
é
±³’ª©¯Ž³Ž —»¨¿¢¾’§ŒŸ¨ Œ³š¤––˜—™›š
Ø ìžÞßɳÞ_ ɟÍÈèµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛØóÊ›Ô Ð¿Ù³á×БÒîÒ ÛÜҷҝБÛÜèóËÂÊÀÇÚÐXU“É
éòê»ËÂÒòèÚɟٳá×ÐçÍ
¬
±
×
’
¯
©
³
Ž
À
Ž
ç
Ž
Ÿ
±
³

¢
Œ
ÐçËÂÛ U“ɏÍÂɳå›ÛñʛØÝÛÜÒÓËÂǵÉÀÙ³á×БÒîÒâèµÉ YÚØµÛñËÂÛÜʛؤé¹á×ÐçҝÒâҝٟÊÌÎ É èµÛ ɟÍÂÒâÔÜÍÊ›Þ áÜÊ Ù¬Ð‘á ҝٳÊÌÎ É ^ " ɳٟËÂÛñÊ›Ø \ é é `
ÛÜØ Ê›ØµÉ Ð‘ÒîΠɟٟˬéÓÆ¹ÇÚÉë΍ÊÌËÂÉ³Ø ËÛ×Бá ÒîÙ³ÊÌÎ ÉàʛÔÃÐÀÞßɳÞ_ ɟÍòèÚɟٳá×ÐçÍäÐÑËÂÛÜÊ›Ø ÛÜÒ ØµÊÌËÓʛصáñì ËÂǵÉëÎÐÑÍË Ê›Ô ËÂǵÉ
Ù³á×ÐçÒÒ èµÉ YÚØµÛñËÂÛÜÊ›Ø N_É³áÜʦæ ã˝ÇÚÉ·èÚɟٳá×ÐçÍäÐÑËÂÛÜʛؤí _ÚÖ«Ë Û²ËïÒîΠБصҋËÂǵÉ
Ù³á×ÐçÒÒ èµÉ YÚØµÛñËÂÛÜʛؤí
ËÂǵÉ
È
¸

Š
“

ª
’
Œ
“
©
š
F
Ô×ÊÌÍÂޮБáÕÐçÍÂå›ÖµÞßɳدËëáÜÛñÒîËÂÒëÐçØÚè _ Ê èµÛÜɳÒëʛÔÈБáÜáÃÞßɳ
Þ _ ɟÍãÔ×ÖµØÚÙÄËÂÛÜÊ›Ø èµÉ YÚØÚÛ²ËÂÛÜʛصҳé ê˜Ø ÒîÇÚÊÌÍîˬí Оٳá×ÐçҝÒ
Þßɳ
Þ _ ɟ͹٬ÐçØ _ ÉÏÖÚÒîɳ
è îÉ U“ÉŸÍì æ ǵɟÍÂÉ ÀÛÜØ ˝ÇÚÉÏÙ³á×Ðçҝҳé
ê˜Ô¾Ë æ¹Ê Ù³á×ÐçҝÒïèµÉ YÚØÚÛ²ËÂÛÜÊ›ØµÒ Ô×ÊÌÍÂÞ èµÛÜÒ Ê›ÛÜØ¯ËïèµÉ³Ù³á×ÐÑÍäÐçËÂVÛ U“ÉòÍÂɳå›ÛÜʛصҳí¯ËÂǵɟÍÂÉÓÛÜÒïØµÊàÎÚÍÊ _ áñÉ³Þ ÛÜØ ֵҝÛÜØµå
ËÂǵÉÏÒÂБÞßÉÓØÚБÞßÉÓÔ×ÊÌÍ·Þßɳ
Þ _ ɟ͝ÒïʛT
Ô _ ÊÌËÂÇ Ù³á×БҝÒîɳҳé
Class Scope.
\ 4.3.10 Random numbers
SÝÉ·ØÚʦæ Ç ÐXU“ÉÓБáñáÚËÂǵÉòÞßɬБصÒÕËÂÊãÎ Ö«Ë ËÊ›å›ÉŸËÂǵɟÍïÐãٳʛÞÀÎÚáÜɟËÂÉòБصèßֵҝɳÔ×ÖµáÛÜÞÀÎÚáÜɳÞßÉŸØ ËäÐç˝ÛÜʛØàʛԍËÂǵÉ
Ë ìôÎ É
БÒòпٟá×БҝÒòÛÜØ a_ Ö«ËòҝÛÜØµÙ³ÉÓæ¹ÉâÇÚÐXU“ÉëБá²ÍÂɬБè«ì®ÒÉ³ÉŸØ ÞßʛÒîËÈÊ›Ô ËÂǵÉãØµÉ³ÙŸÉ³ÒÒÂÐçÍîì
Ù³Ê èÚɋÛÜrational
Ø " ɳٟËÂÛÜÊ›Ø é Бصè ÛÜØëËÂǵÛÜÒ ÒÉŸÙŸËÂÛÜÊ›Ø¤í‘æ¹É áñɬÐXU“É‹ËÂǵÉïÔ×ÖµáÜáôÙ³áÜÐ‘ÒÒ Ð‘Ò P¥ÉŸÍÂÙ³ÛÜÒîÉ \ \ БصèàÙ³Ê›Ø ËÂÛñØôÖµÉ
ǵɟÍÂÉÏæ ÛñËÂÇ Ð ÔÜÍÂÉ³ÒÇ Ù³áÜБҝҹËÂÇÚÐçË·ÇÚБÒòÐ áÜÛñ˝ËÂáñÉ ÞßÊÌÍÂÉÓÉ³Ø ËÉŸÍËäБÛñØÚÞßÉŸØ Ë¹ÛÜØóҙËÂÊÌÍÂÉÌé
ÃáÜЬìôÛÜØµåàå“БÞßɳÒïʛخËÂǵÉÓٳʛÞÀÎÚÖµËÉŸÍ æ¹Ê›ÖµáÜè _ É ÎµÍÂÉŸËË ìL_ ÊÌ͝ÛÜØµåëæ ÛñËÂǵʛ֫ËïҝʛÞßÉ ÖµØ«ÎµÍÂɳèµÛÜٟËÂÐ _ÚÛÜá ÛñË ì ÃÐàÙäǵɳҝҹÎÚ͝ʛåÌÍäÐ‘Þ ÒÇµÊ›ÖµáÜè ØÚÊÌËòÐ‘á²æÈЬìôÒïٳʛÞßÉ Ö«Îžæ·ÛñËÂÇ®ËÂǵÉÏҝБÞßÉ Ê›áÜè ÞßÊ U“ɳҹÛÜØ®ÍÂɬÐçٟËÂÛÜʛخËÂÊ
ì“Ê›Ö«Í ÒÂБÞßÉãʛáÜè ÞßÊ U“ɳҳíÐçØÚè ÛñؽÐçØ Ð‘ÙŸËÂÛÜÊ›Ø å“ÐçÞßÉÌíÚ˝ÇÚÉâɳصɳÞßÛÜɳÒÈҝǵʛֵáÜè ØÚÊÌË Ð‘áñæÈгì¥ÒÈÎ ÊÌÎ Ö«Î ÐÑË
ËÂǵÉâҝБÞßÉÏ˝ÛÜÞßÉÏБصè áÜÊôÙ¬ÐÑËÂÛÜʛؤé‹ê˜Ø ÊÌ͝èÚÉÄÍ·ËÂÊßÐçٴǵÛÜIÉ U“ÉëֵصεÍÂɟèÚÛñٟËäÐ _ÚÛÜáÜÛ²Ë ì“í¯ËÂǵÉãεÍÂʛåÌÍäÐçÞ Ë ìôÎÚÛÜٳБáÜáñì
ֵҝɳҷÐ
é ÆÈǵÛÜÒ¹ËÂɟÍÂÞ ÛÜÒÈÞßÛÜҝáÜɳБèµÛÜØµå«í¯ËÂǵʛֵå›Ç¤í«ÒÛÜØµÙ³ÉÏËÂǵÉãØ ÖÚ
Þ _ ɟ͝Ò
Ÿ
£
“
©
š
µ
F
›

¨
š
”
¨
³
³
Œ

£
«
Á
³
Œ
š
³
Œ
Ÿ
£
¯
©

–
›

£
ÐçÍÂÉÓÛÜØ®ÍÂɬÐçáÜÛñË ìßå›É³ØµÉŸÍäÐÑËÂɳèóÐçٳٳÊÌÍÂèµÛÜØµåàËÂʿҝʛÞß
É Y P«É³è ÍÂÖµáÜÉÌí¥ÛÜØ ҝֵÙäÇóÐëæÈгìßËÂÇÚÐçËïËÂǵɟì
ËÂÊ
_ ÉÓÍäБصèµÊ›Þ é ‹Ö«Ë·Ô×ÊÌÍòÞ®Ð‘Ø ìßÎÚ֫͝ΠʛÒîÉ³Ò ^»ÛÜØµÙ³áÜÖµèµÛÜØµåàå“БÞßÉ³Ò `Äí ËÂǵÛÜÒ¹ÛÜÒòٟʛÞÀÎ áñɟËÂɳáñìÀÒÖ Ù³©¬ÛÜ¢«ÉŸ¢ Ø Œ´Ë¬©“íµ£ Бصè
æ¹ÉÏ٬БáÜá¤ÒÖµÙäÇ ØôÖµ
Þ _ ɟÍÂÒ
é
¢¾Ž‘Œ³” Fµ›£Ÿ©“
š Fµ›¨
ÒîÛÜÞÀÎÚáÜÉ Ð‘Øµè æ ÛÜèµÉ³áñì ºÖµÒÉ³èßËÂÉŸÙ´ÇµØµÛ W ÖÚÉ Ê›Ô¾å›ÉŸËËÛÜØµå Ð ÒîÉXWôֵɳصٳÉ
Ê›Ô ÎÚҝɟÖÚèµÊÌÍäÐçØÚèµÊ›Þ ØôÖµÞ_ ɟÍÂÒ¾ÛÜÒ ËÂǵÉ
é ÛVU“ɳØàÐ
í
’­—°š ŒÄ©“£ëÐç±ÄØÚ›è šÁ›Ð £¬” Œ³š¤–˜— ©¯’Ú¨½Œ¬–ºŠí  áÜF ɟËëÖÚÒâٳʛصҝ¨ÛÜèµÉŸ”Íë
’­–˜—²Ë¢¾Çµ’•Éß
—ҝ£ É WôaֵɳصٳÉ
í Ð
БØ
 Ž‘Œ¬– ʛcÔ¡ØÚÐçËÂÖ«ÍäБᤨ½
Ž èµmÉ YÚØµÉ³è _ ì ËÂǵÉÓÍŽ‘ÖµŒÄáÜIŒ É F x0
ØôÖµ ÞF“”
_ ’•ÉŸ”ÍÂÒ¹
Linear congruential generators.
x1 , x2 , . . .
xi = (axi−1 + c)
ÞßÊôè
m,
i > 0.
Ò Þ®ÐçáÜá“ÉIPµÐ‘ÞÀÎÚáÜÉÃÛÜÒ¾ËÂǵɋÎÚҝɳֵèµÊÌÍäБصèµÊ›Þ ØôÖµÞ_ ÉŸÍ å›É³ØµÉŸÍäÐçËÂÊÌÍ
íÌèµÉ YÚØµÉ³è _ôìâ˝ÇÚɋÔ×ʛáÜáÜʦæ ÛÜØµå
knuth8
Î ÐçÍäБÞßÉÄËÂɟÍÂÒ³é
a = 137,
ƹÇÚÉÏҝÉXW ֵɳصٳÉ
c = 187,
í
x1 , x2 , . . .
í
í
m = 28 = 256,
x0 = 0.
ʛԡØôÖµÞ_ ɟÍÂÒïËÂÇÚÐçËÈæ¹Éãå›ÉÄË·ÔÜÍÂÊ›Þ ËÂǵÛÜÒ¹ÛÜÒ
í
í
í
í
í
í
í
í
í
í
í
í
187 206 249 252 151 138 149 120 243 198 177 116 207 130 77
í í
í
í
í í
í í
í í
í í
í í
í
í
í
í
240 43 190 105 236 7 122 5 104 99 182 33 100 63 114 189 224 155
í
í
í
í
í
í í
í
í
í í
í í í
í í
í
174 217 220 119 106 117 88 211 166 145 84 175 98 45 208 11 158
í
í
í í
í í í
í í í í í
í
í
í
í
í
í
73 204 231 90 229 72 67 150 1 68 31 82 157 192 123 142 185 188
í í í í
í
í
í í
í í í
í
í
í í
í
í í
87 74 85 56 179 134 113 52 143 66 13 176 235 126 41 172 199 58
í í í
í
í í
í í
í
í í
í
í
í í í í í
197 40 35 118 225 36 255 50 125 160 91 110 153 156 55 42 53 24
í
í í í
í í
í
í
í í í
í
í í
í í í í
í
147 102 81 20 111 34 237 144 203 94 9 140 167 26 165 8 3 86 193
í
í í í
í í í
í
í í í í
í
í í í
í í í
4 223 18 93 128 59 78 121 124 23 10 21 248 115 70 49 244 79 2
í
í
í í
í
í
í
í
í
í
í í
í
í
í
í í
205 112 171 62 233 108 135 250 133 232 227 54 161 228 191 242 61
í í í í í
í
í
í
í í í í
í í
í
í í
í
96 27 46 89 92 247 234 245 216 83 38 17 212 47 226 173 80 139
í
í í
í
í
í
í
í í
í
í
í
í í í
í í
30 201 76 103 218 101 200 195 22 129 196 159 210 29 64 251 14
í í
í
í
í
í í í
í
í í
í
í í
í
í
í í
57 60 215 202 213 184 51 6 241 180 15 194 141 48 107 254 169 44
í
í í
í
í
í í
í
í
í
í í
í
í í í
í
71 186 69 168 163 246 97 164 127 178 253 32 219 238 25 28 183
í
í
í í
í
í
í
í
í
í í í
í
í í í
í
170 181 152 19 230 209 148 239 162 109 16 75 222 137 12 39 154
í
í
í
í í
í í
í
í í
í é¬é³é
37 136 131 214 65 132 95 146 221 0 187
\
[ ÍÂʛÞðǵɟ͝Éãʛؤí¥ËÂǵÉÏҝÉXWôֵɳصٳÉÏÍÂɟΠɳÐçËÂÒÈÛñËÂҝɳáñÔ ^˜Ûñ؞å›É³ØµÉŸÍäÐçá˜í¥ËÂÇµÉ Î ÉŸÍÂÛÜÊ èžÙ¬ÐçØóØµÉ U“ÉŸÍ_ ÉãáñʛØÚå›ÉÄÍ
ËÂÇÚБØ
´` é ‹Ö«ËÏÖµØ ËÂÛñá ËÂǵÛÜÒ Î Ê›ÛÜØ ˳í¾Û²ËÏÐçεΠɬÐçÍÂÒÓËÂÊ_ É ÎÚÍÉŸËË ì ÍäБصèµÊ›Þ ^ºÐ‘áñËÂǵʛֵå›Ç½Ð Ù³áñʛҝɟÍÏáÜÊôÊ ]
m
ÍÂÉ “U ɳБáÜÒïËÂÇÚÐçËÈÛñ˹ÛÜҹصÊÌ˹ÍäБصèµÊ›Þ ÐçËòБáÜá èÚÊ ì“Ê›ÖóèµÛÜÒÙŸÊ U“ÉŸÍòÐàÒî˝͝ÛV]¥ÛÜØµå ҝÛÜ囨 ʛԡصʛثÍäБصèµÊ›ÞߨµÉ³ÒÒ `Äé
ê˜ØžÊÌÍÂèµÉŸÍÈËÂÊ Þ®Ð “] É ËÂǵÉÓÞ®Ð‘å›ØµÛñËÂÖµèµÉ·Ê›Ô¤ËÂǵÉÏÍÂБصèÚÊ›Þ Ø ÖµÞb_ ÉÄÍÂÒïÛÜØµèµÉŸÎ ɳصèµÉ³Ø ËÈÔÜÍÂÊ›Þ ËÂǵÉÓÞßÊôè
ÖµáÜÖµÒ³í«ÛñËòÛÜҹٳʛÞßÞßʛخÎÚÍÂБٟËÂÛÜٟÉÓ˝Ê
˝ÇÚÉÏØôÖµÞ_ ɟÍÂÒÈҝʿËÂÇÚÐç˹ËÂǵɟìóÐÑÍÂÉÏÍÉ¬Ð‘á¤ØôÖµÞ_ ɟÍÂÒÈÛÜØ
š
›

¬
£
½
¨
¯
©
•
’
—
Œ
é
ËÂǵÉÏÛÜØ ËÂÉÄÍ ÌU Ðçá
[0, 1)
͝ʛåÌÍäÐ‘Þ _ ɳáñÊÑæ¼Ù³Ê›Ø¯ËäБÛÜØµÒ ËÂǵɷèµÉ Ú
Y صÛñËÂÛÜÊ›Ø¿Ê›Ô ÐÓÙ³á×БÒîÒ
ÛÜØÀØÚБÞßɳÒîΠБٟÉ
Ô×ÊÌ͋å›É³Ø
random
ifm
ɟÍäÐÑËÂÛÜØµåãØµÊÌÍÂÞ®ÐçáÜ۳ɳèàÎÚҝɳֵèµÊÌÍäБصèµÊ›Þ ØôÖµÞb
_ ɟÍÂÒÃБٳٳÊÌ͝èÚÛñØÚåÓËÂÊÏËÂǵÉòáÜÛñØÚɳÐçÍÃٳʛصåÌÍÂÖµÉ³Ø ËÂÛÜБá«ÞßɟËÂǵÊôè¤é
ƹÇÚÉÄÍÂÉßÛÜÒ ÐóٳʛصÒî˝͝ÖÚÙÄËÂÊÌÍàËÂÇÚÐçË Ð‘áñáÜÊÑæ·ÒãËÂǵÉßÙ³ÖµÒî˝ʛÞßɟÍëËÂÊ ÎµÍÂÊ¥U ÛÜèµÉ ËÂǵÉÀÎ ÐçÍäÐçÞßɟËÂɟÍÂÒ
í
a, c, m, x0
Бصè½Ð ÞßɳÞ_ ÉŸÍ Ô×ֵصٟËÂÛñʛØ
ËÂÊ®å›ÉŸË ËÂǵÉëÍÂɳҙΠɳٟËÂÛ “U ɿصÉIôP ËÓɳáÜɳÞßÉŸØ Ë ÛñØ ËÇÚÉà
ÒîÉXôW ֵɳصٳÉ
ʛԡ˝ÇÚÉ
xi
é
operator()
// Prog : random .h
// define a class for pseudorandom numbers .
namespace ifm {
// class random : definition
class random {
public :
// POST : * this is initialized with the linear congruential
//
random number generator
//
x_i = ( a * x_ {i -1} + c ) mod m
//
with seed x0 .
random ( unsigned int a , unsigned int c ,
unsigned int m , unsigned int x0 );
// POST : return value is the next pseudorandom number
//
in the sequence of the x_i , divided by m
double operator ()();
private :
const unsigned int a_ ; // multiplier
const unsigned int c_ ; // offset
const unsigned int m_ ; // modulus
unsigned int xi_ ;
// current sequence element
};
} // end namespace ifm
Program 36: ¢¤£³ÄÁ“Ž £Ÿ©“šFµ›¨ Å׊
ÆÈǵÉÓÔ×ֵصٟËÂÛÜʛØ
ÇÚБÒïØµÊ¿ÐçÍÂå›ÖµÞßɳدËÂҋÛÜØ ʛ֫Íï٬БÒîÉb^°ËÂÇÚÐçË! ÒÕæ Ç ìÀÛñËÂÒïèµÉ³Ù³áÜÐçÍäÐçËÂÛñʛØÀÛÜÒ
í æ operator()
ǵÛÜÙäÇ Ð‘èµÞßÛñ˝ËÂɳèµáñì®áñÊôÊ ]¥Ò·Ð _ÚÛñË Ô×ÖµØµØ ì `Äí Бصè ÛñË ÊU“ÉŸÍÂáñʓБèµÒ ËÂǵÉ
operator()()
—î›É š Ù³á×±ÄÐ穯ҝ’°Ò ’
í«ÒÉ³ÉãÆ Ð _ÚáÜÉ ÛÜØßËÂÇµÉ ·ÎµÎ ɳصèµÛ Pé ê˜Ø å›É³ØµÉŸÍÂБá˜í¥ÛÜÔ
ÛÜÒ¹Ð‘Ø ÉIPôÎÚ͝ɳҝҝÛÜÊ›Ø ¶ŸÊ›” Ô¾š ҝ±¬Ê›–˜Þß
£Ä©¯æ –›Çµ£ ÛÜÙäÇóÇÚБҹËÂǵÉÏÞßɳÞb_ÉŸÍ¹Ô×ÖµØÚÙÄËÂÛÜʛØ
Ë ³ìô¢ Î Œ³ÉÓ
operator
\ ^`I^ I
íñé²éñé²í Ù¬Ð‘Ø _Éãֵҝɳè
^ íñé²éñéñí G `
ËÂǵɳØ
áñÛV]“ÉÏпÔ×ֵصٟËÂÛÜʛØ
`
ËÂǵÉâÉGP¥ÎµÍÂɳҝÒîÛÜʛØ
ÛÜÒ¤ÉXW ÖÚÛ UÌБáñÉ³Ø Ë ËÂÊòÐï٬БáÜá‘Ê›Ô ËÂÇµÉ ÞßɳÞ_ ɟ͍Ô×ֵصٟËÂÛñʛØ
æ Û²ËÂÇÏÐçÍÂå›ÖµÞßɳدËÂÒ
í²é³é³é³í G
Ô×ÊÌÍÈËÂǵÉâÉIPôÎÚ͝ɳҝҝÛÜʛØ
éSÝÉÏæ ÛÜáÜáҝɳÉâÒîÖÚÙäÇ Ù¬ÐçáÜoperator()
áÜÒ¹ÛÜØ ÍÂʛåÌÍäÐçÞ Ð‘Øµè ÍÂʛåÌÍäБÞ
_É³áÜʦæëé
·ÉŸÍÂÉ ÛñÒÀËÂǵÉóÛÜÞÀÎÚáÜɳÞßɳدËäÐçËÂÛñÊ›Ø Ê›Ô ËÂÇµÉ Ù³áÜБҝÒ
ÛÜØ æ ǵÛÜÙäÇ æ¹ÉóÒÉŸÉ ÇµÊ¦æ
random
operator()
Ö«Î èÚÐçËÂɳÒÀ˝ÇÚÉ U‘БáÜÖµÉóʛÔÓËÂÇµÉ èÚÐçËäÐ ÞßɟÞb_ ÉÄÍ
ËÂÊ _ ÉóËÂǵÉóÍÂɳÒî΍ɳٟËÂÛVU“É صÉIPôˮɳáÜɳÞß
ÉŸØ ËßÛÜØ ËÂǵÉ
x_i
ҝXÉ W ֵɳصٳÉëʛԡ˝ÇÚÉ é
xi
// Prog : random .C
// implement a class for pseudorandom numbers .
# include < IFM / random .h >
namespace ifm {
// class random : implementation
random :: random ( unsigned int a , unsigned int c ,
unsigned int m , unsigned int x0 )
: a_ ( a ) , c_ (c ) , m_ (m ) , xi_ ( x0 )
{}
double random :: operator ()()
{
// update xi acording to formula ,...
xi_ = ( a_ * xi_ + c_ ) % m_ ;
// ... normalize it to [0 ,1) , and return it
return double ( xi_ ) / m_ ;
}
} // end namespace ifm
Program 37: ¢¤£ŸŸÁ“Ž £Ÿ©“šFµ›¨ Å
)óÐ‘Ø ì½Ù³Ê›ÞßÞßʛصáñìžÖÚÒîɳè ÍäБصèµÊ›Þ ØôÖµÞ_ ɟÍãå›É³ØµÉŸÍäÐçËÂÊÌ͝ÒâÐçÍÉÊ _µËäБÛñØÚɟè ÛÜØ½ÉIPµÐ‘ÙÄËÂáñì ËÂǵÛÜÒÓæÈЬì“é
[ ÊÌÍ ÉIP«Ð‘ÞÀÎÚáÜÉÌíÌËÂǵɹæ¹É³áÜá ]¥ØµÊ¦æ Ø å›ÉŸØÚÉÄÍäÐçËÂÊÌÍ
ÍÂɟ˝ֵ͝ØÚÒÃÎÚҝɳֵèµÊÌÍäБصèµÊ›Þ Ø ÖµÞb_ ÉÄÍÂÒÕÛñØ
a = 25214903917,
[0, 1)
drand48
БٳٟÊÌÍÂèµÛÜØµå¿ËÂÊ¿ËÂǵÉÏÎ ÐçÍÂБÞßɟËÂɟ͝Ò
c = 11,
m = 248 ,
Бصè ЏÒîɳɳè ÙäÇÚʛÒîÉ³Ø _ ì ˝ÇÚÉâÙ³ÖµÒîËÂʛÞßɟͬé ê»Ë ÛÜÒòÙ³áÜɬÐçÍòËÂÇÚÐçË·æ¹ÉãØµÉ³É³è Џá×ÐÑÍÂå›ÉâÞßÊ èÚÖµáÜÖµÒïËÂÊÀÊ _µËäÐçÛÜØ
Ð ÖÚÒîɳÔ×Öµá¡å›É³ØµÉŸÍÂÐçËÂÊÌͬí«ÒÛñØÚٟÉ
ÛñÒ·Ð‘Ø Ö«ÎÚ΍ɟÍ_Ê›ÖÚØµè Ô×ÊÌÍòËÂǵÉÏØôÖµÞ_ ɟÍÈÊ›Ô èµÛ ɟÍÂÉ³Ø¯Ë·Ø ÖÚÞ_ ÉŸÍÒ¹ËÇ ÐÑË
-
A%+
.*
"@*
6Q7
(
JQ#*
random
Q$&BK
:
22
m
H%*
6L.1
6
A$&BLO6I
,$
unsigned
int
(7.#* %Q 8{0, BI. . . , 232 −1} *
/
double
J
#"5
*
-."
! (. 7 6 *
+(7*
6
7
8"L/
%(2!
*
6
%(7
\\
æ ÉÏ٬Б؞ΠʛÒîҝÛV_Úáñì®å›ÉŸËòÔÜÍÂÊ›Þ ËÂǵÉãå›ÉŸØÚÉÄÍäÐçËÂÊÌͬéÕÆ¹ÇÚÛñÒÈÞßÉ³Ð‘ØµÒ¹ËÇ ÑÐ Ë
¹
ÔÜÍÂʛÞðÐ _ ÊU“ÉãÛÜÒ¹ÍäÐç˝ÇÚÉÄÍ·Ð
knuth8
ËÂʦì å›É³ØµÉŸÍäÐçËÂÊÌͳé
·ÉÄÍÂÉòÛñÒÕÐÓå“БÞßÉ‹ËÇ ÐÑËÃì“Ê›Ö ٳʛֵáÜè¿ÎÚá×гìàæ·ÛñËÂÇ “
ì ʛֵÍÕÔÜÍÂÛÜɟØÚè¿æ ǵÛÜáÜÉ
The game of choosing numbers.
æÈБÛñ˝ÛÜØµåÔ×ÊÌÍ ÐèµÉ³á×гì“É³è ˝ÍäÐçÛÜØ¤éÃ
БÙäÇ Ê›Ô ì“Ê›Ö ÛñØÚèµÉŸÎÉ³ØµèÚÉŸØ ËÂáñì®æòÍÂÛñËÂɳÒÈèµÊÑæ·Ø Ð‘Ø ÜÛ Ø¯ËÂɳå›ÉŸÍ_ ÉŸË æ¹É³É³Ø
ÐçØÚè é Æ¹ÇÚɟØóËÂǵÉâØôÖµÞ_ ɟÍÂÒÈÐç͝ÉâٳʛÞÀÎ ÐçÍÂɟè¾éÕê˜Ô ËÂǵɟìžÐçÍÂÉãÉXWôÖÚБá»íµËÇÚÉÏå“БÞßÉÓÛÜҷпè«Íäгæëé‹ê˜Ô ËÂǵÉ
ôØ ÖµÞ_ ɟ6ÍÂÒ èµÛ ɟÍ_ôì¿Ê›ØµÉÌí¯ËÇÚÉïÎÚá×гì“ÉŸÍÃæ Ûñ˝ǿËÂǵÉÈҝޮБáÜáñÉŸÍ ØôÖµÞ_ ÉŸÍ å›ÉŸËÒ [ \ ÔÜÍÂÊ›Þ ËÂǵÉÈʛØÚɹæ Û²ËÂÇ
ËÂǵÉÏá×ÐçÍÂå›ÉŸÍÈØ ÖÚÞ_ ɟͳéÕê˜Ô¾ËÂǵÉÏË æ¹ÊØôÖµÞb_ÉŸÍÂÒ¹èµÛ ÉŸÍ_ôì®Ë æ¹Ê¿ÊÌÍ·ÞßÊÌÍÂɑí¥ËÂǵÉÏÎÚá×гì“ÉŸÍÈæ ÛñËÇ ËÂǵÉÏá×ÐçÍÂå›ÉÄÍ
ØôÖµ
Þ _ ɟÍãå›ÉŸËÂÒ [ ÔÜÍÂÊ›Þ ËÂǵɏʛصɿæ ÛñËÂÇ ËÂÇµÉ ÒÞ®ÐçáÜáÜɟÍÓØ ÖÚÞ_ ɟͳé ʛÖÝ٬БؽÍÂɟΠɬÐÑËâËÂǵÛÜÒÏÖµØ ËÂÛÜá
ËÂǵÉÓ˝ÍäБÛÜØžÐç͝ÍÂÛ U“É³Ò ^»ÊÌÍ·ÖµØ ËÛÜá ʛصÉãÊ›Ô ì“Ê›Ö ÍÂÖµØÚÒòʛ֫ËòÊ›Ô Ù¬Ð‘ÒÇ¤íÚБصèžÇµÊÌΠɳÔ×ÖµáÜá²ì®ÛñË! Òïì“Ê›Ö«Í ÔÜ͝ÛÜɳصè `Äé
ê˜Ô ì“Ê›Ö ËÂǵÛÜØ ] Ð _ ʛ֫ËëǵÊÑæ ËÂʞÎÚá×гì ËÂǵÛÜÒÏå“БÞßÉÌí Û²!Ë ÒÏØµÊÌËëÊ _ UôÛÜʛֵÒãæ·Ç ÐÑËãËÂʞèÚÊ«é ØµÉ ËÂǵÛÜØµå
Ê _ UôÛÜʛֵҳí ËÂǵʛֵå›Ç ì“ʛֽÒîÇÚʛֵáÜè ØµÊÌË æòÍÂÛñËÂÉâèÚÊ¦æ Øó˝ÇÚÉàҝБÞßÉâØ ÖÚ
Þ _ ÉŸÍ ÛÜØ É U“ɟ͝ì ͝ʛÖÚØµè¤íÒîÛÜØµÙ³É
Ë—˜ŽÇµÉ³Ø ì“ʛ֫͋ÔÜÍÂÛÜɳصL
è W ÖÚÛñÙ ]ôáñì¿áÜɬÐç͝ØÚÒ ËÂÊãIÉ P¥ÎÚáÜʛ۲ËÃ˝ÇÚÛñ
Ò _ ì¿æòÍÂÛñËÂÛñØÚåÓèµÊ¦æ ØßÐÓØôÖµ
Þ _ ÉŸÍ ËÂÇÚÐç
Ë _ ɬÐçËÂÒ ì“ʛ֫Í
ØôÖµ
Þ _ ÉŸÍ ^ _ ì èµÉ³ÒîÛÜ囨óʛԡ˝ÇÚÉÏå“БÞßÉÌí¥ËÇÚÛñÒÈÛñÒ·Ð‘á²æÈЬìôÒïΠʛҝҝVÛ _ÚáÜKÉ `Äé
Ê›Ö ÒÇµÊ›ÖÚáñè ËÂǵɟÍÂɳÔ×ÊÌÍÂÉ ÐçèÚè ÒîʛÞßÉ ÖµØ«ÎÚ͝ɳèµÛÜٟËäÐ _ÚÛÜáñÛñË ì ËÂʜì“Ê›Ö«Í ÙäǵʛÛÜٳɳҟé
Ê›Ö Ù³Ê›ÖµáÜè¤íÓÔ×ÊÌÍ
IÉ P«Ð‘ÞÀÎÚáÜÉÌíÒÉŸÙŸÍÂɟËÂá²ì ÍÂʛáÜá ÐÀèµÛÜÙ³É ÛÜØ É U“ÉŸÍîì ͝ʛÖÚØµè½Ð‘Øµè æòÍÂÛñËÂÉàèµÊ¦æ Ø ËÂÇµÉ ØôÖµb
Þ _ÉŸÍ ËÂÇÚÐçË ÛñËÓÒîÇÚʦæ ҟé
‹Ö«Ë P«ÉÄÍÂÙ³ÛÜÒÉ \ ÍÉ U“ɬБáÜÒÈËÂÇÚÐç˹ì“ʛ֫ͷÔÜÍÂÛñɳصèóÙ¬Ð‘Ø IÉ PôÎÚáÜʛÛñËïËÂǵÛÜÒÈБÒÈæ¹É³áÜá˜é
Ê›Ö ÞÖµÒîËÈҝʛÞßɳǵʦæ Y صɟ˝ÖÚØµÉÏì“ʛֵÍòÍäБصèµÊ›ÞðÙäǵʛÛÜٳɟҳí _ÚÖ«Ë ÇµÊ¦æ ê˜Ø ÊÌ͝èÚÉÄÍ·ËÂÊÀGÉ P¥Î ɟ͝ÛÜÞßÉ³Ø Ë
æ Û²ËÂǜèµÛ ɟÍÂÉ³Ø¯Ë èµÛÜÒîËîÍÂVÛ _ÚÖ«ËÂÛÜʛصҳí ì“Ê›Ö èµÉ³Ù³ÛÜèµÉ ËÂÊ èµÉ YÚØµÉžÐçØÚèœÛÜÞÀÎÚáÜɳÞßÉ³Ø¯Ë Ð ÙŸá×БҝÒ
ËÂÇÚÐçË ÍÊ›áÜáÜÒò˝ÇÚÉàèµÛÜٟÉàÛÜØ ҝֵٴǽРæÈгìžËÂÇÚÐçË·ËÂǵÉëÎÚÍÊ _Ð _ ÛñáÜÛñË ì Ô×ÊÌÍÓØôÖµb
Þ _ÉŸÍ ËÂÊßٳʛÞßloaded_dice
ÉëÖ«Î ÛÜÒ XÉ W Ö Ðçá
i
ËÂÊ Ð ÎµÍÂɳÒîΠɟٳVÛ YÚɳè U‘БáÜÖµÉ
^ºÐ½ÔªÐ‘Û²ÍÀèµÛÜÙ³É Ç ÐçÒ
Ô×ÊÌÍßБáÜá
`Äé Æ¹ÇµÉ³Ø ì“Ê›Ö
pi = 1/6
. . , 6}
ٳʛֵáÜè áÜÉÄËàèµÛ ÉŸÍÉ³Ø ËàáñʓБèµÉ³pè i èµÛÜٳɳÒâÎÚá×гìÝБå“БÛÜØµÒîËã
ɬБÙäÇ ÊÌËÂǵɟͬí Бصè iÛÜØÝËÂ{1,
ǵÛÜÒã. æÈ
Ьì èµÛÜÒÙ³Ê U“ÉŸÍ ҝֵÛñË Ð _ÚáÜÉÏÎÚÍÊ _Ð _ ÛñáÜÛñËÂÛÜɟҹ˝ÊÀÖµÒÉ Ð‘å“БÛÜØµÒîËÈì“Ê›Ö«Í ÔÜÍÂÛÜɟØÚè ^»æ·ÇµÊÀÛÜ
Ò _ ìžËÂǵÉâæÈÐ³ìžØÚÊÌË ÒîËÂÖµè«ì¥ÛÜØµå ٟʛÞÀÎ Ö«ËÂÉÄÍ
ҝٳÛñÉ³ØµÙ³É `Äé
͝ʛåÌÍäÐ‘Þ ÒÇµÊÑæ·Ò РҝֵÛñËäÐ _ÚáÜÉÏÙ³á×БÒîÒ·èµÉ YÚØµÛñËÂÛÜÊ›Ø ^»ËÂÇÚÐçËòÛÜØóËÂÖ«ÍÂØžÍÉ³áÜÛÜɳÒòʛ؞ËÂǵÉâٟá×БҝÒ
ÔÜÍÂÊ›Þ Ð _ Ê U“ÉÌí æ Ûñ˝ǼËÂǵɽØÚÊÌ͝ޮБáÜÛ ¬ÐÑËÂÛÜÊ›Ø ËÂÊ ËÂǵɽÛÜØ¯ËÂÉŸÍ U‘Бá
`Äé SÝɽæ·ÛÜáÜá å›ÉÄ˞ËÂÊ ËÂǵrandom
ɽٳáÜБҝÒ
ÛÜÞÀÎÚáÜɳÞßÉŸØ ËäÐç˝ÛÜÊ›Ø ^ºÐ‘صè ËÂǵÉãÞßɬÐçØÚÛñØÚå ʛԾËÂǵÉãèÚÐçËäÐ Þßɳ
Þ _ ɟÍÂ[0,
Ò `Õ1)
ÛÜØ ÍÂʛåÌÍäÐ‘Þ _ ɳáÜʦæëé
1
# include < IFM / random .h >
// Prog : loaded_dice.h
// define a class for rolling a loaded dice .
namespace ifm {
// class loaded_dice : definition
class loaded_dice {
public :
// PRE : p1 + p2 + p3 + p4 + p5 <= 1
// POST : * this is initialized to choose the number
//
i in {1 ,... ,6} with probability pi , according
//
to the provided random number generator; here ,
//
p6 = 1 - p1 - p2 - p3 - p4 - p5
loaded_dice ( double p1 , double p2 , double p3 , double p4 ,
double p5 , ifm :: random & generator);
// POST :
//
//
unsigned
\ return value is the outcome of rolling a loaded
dice , according to the probability distribution
induced by p1 ,... , p6
int operator ()();
private :
// p_upto_i is p1 + ... + pi
const double p_upto_1 ;
const double p_upto_2 ;
const double p_upto_3 ;
const double p_upto_4 ;
const double p_upto_5 ;
// the generator ( we store an alias in order to allow
// several instances to share the same generator)
ifm :: random & g;
};
} // end namespace ifm
Program 38: ¢¤£ŸŸÁ“Ž ’ª‘© FµŒIF F“—™±ŸŒ‘Å܊
Æ Ê ÛÜØµÛñËÂÛ×ÐçáÜÛ³ÉàËÂǵÉßáÜʓБèµÉ³è èµÛÜÙ³É‘í æ¹ÉßÇÚÐXU“ÉÀËÂÊ ÎµÍÂÊU¥ÛÜèµÉÀËÂǵÉÀεÍÂÊ _ Ð _ÚÛÜáÜÛñ˝ÛÜɳÒ
^
p 5 p6 =
P5
`´í¤Ð‘صè½ËÂǵÉàÍäБصèµÊ›Þ ØôÖµÞ_ ɟÍÓå›É³ØµÉŸÍÂÐçËÂÊÌÍÓËÂÇÚÐçËÓÛÜÒ_ ɟÛÜØµå ֵҝɟè½ËÂÊ pБ1ٟ,ËÂ.ÖÚ.Б.áñ,áñìž
ÍÂʛáñá ËÂǵÉ
1 − i=1 pi
ËÂÊâÍÂɬÐçáÜÛ³ÉÈËÂǵɷÔ×ֵصٟËÂÛÜʛØÚБáÜÛ²Ë ì ÊÌԍÍÂʛáÜáÜÛÜØµåÓËÂÇµÉ èµÛÜÙ³ÉòʛØÚٟÉÌé
èµÛÜÙ³ÉÌé ·å“БÛÜØ¤í¯æ¹ÉòÊ U“ÉÄÍÂáÜʓБè
operator()
·Ê¦æ èÚÊÈæ¹ÉÕÛñÞÀÎ áñɳÞßÉ³Ø Ë ËÂǵÛÜÒ¾Ô×ÖÚØµÙŸËÛÜʛØÚБáÜÛñË ì S ÉÕÎ Ðç͝˝ÛñËÂÛÜʛØÓËÂǵÉÕÛñØ ËÂÉŸÍ UÌБá
ÛÜØ ËÂÊ ÍÂÛÜå›Ç Ë ºÊÌΠɳØ
[0, 1)
6
ÛÜØ¯ËÂÉŸÍ U‘БáÜÒ³í¥æ·ÇµÉŸÍÂÉÏÛÜØ ËÂÉÄÍ UÌÐçá ÇÚБÒÈáÜɳصåÌËÂÇ
i
p1
p2
pi
p3
p1 + p 2
0
p4
x
p1 + p 2 + p 3
p5
p6
1
Æ ÇµÉ³Ø æ¹É è«Íäгæ ÐëØôÖµÞ_ ÉŸÍ ÐçËïÍäБصèµÊ›Þ ÔÜÍÂʛÞ
È
í ÖÚÒîÛÜØµåàʛֵ͹å›ÉŸØÚÉÄÍäÐçËÂÊÌͬéÃê˜Ô¤ËÂÇµÉ ØôÖµÞ_ ɟÍ
x
[0, 1)
ËÂÇÚÐçË¡æ¹É å›ÉŸË æ¹ÉŸÍÉ‹ËÍÂÖµáñìÏÍäБصèµÊ›Þ íÑ˝ÇÚÉŸØ¿Û²Ë æ¹Ê›ÖµáÜèàɳصè Ö«Î ÛÜØàÛÜØ ËÉŸÍ U‘Ð‘á æ Û²ËÂÇëεÍÂÊ _ Ð _ÚÛÜáÜÛñË ì ÉIP«Ð‘ÙŸËÂá²ì
é ·ØµèµÉŸÍ ËÂǵÉòБҝҝֵÞÀεËÂÛÜʛØàËÂÇÚÐçËÃÊ›Ö«Í Î ÒîɳֵèÚÊÌÍÂБصèÚÊ›Þ Ø ÖÚÞ_ ɟ͝Ò_ ɳÇÚiÐXU“É·áÜÛV]“É ÍÂБصèÚÊ›Þ Ø ÖÚÞ_ ɟ͝Ò
pi
ÛÜØžÐ¿ÒÖµÛñËÂÐ _ÚáÜÉ æÈгì“íµæ¹ÉÓËÂǵɟÍÂɟÔ×ÊÌÍÂÉãèµÉ³ÙŸá×ÐçÍÂÉ Ð‘Ò¹ËÂǵÉãʛ֫ËÂٟʛÞßÉÏʛԾÍÂʛáÜáÜÛñØÚåë˝ÇÚÉÏèµÛÜÙ³ÉÏÛÜÔ ÐçØÚè ʛصáñì®ÛÜÔ
i
ɳصèµÒòÖ«Î ÛñØóÛÜØ ËÉŸÍ U‘Бá éÕÆ¹ÇÚÛñÒÈÛñÒÈËÂǵÉÏ٬БҝÉã
ÛÜÔ ÐçØÚè ʛصáñì ÛÜÔ
x
i
p1 + . . . + pi−1
x < p1 + . . . + pi .
ÆÈǵÛÜÒâÉIP¥ÎÚá×БÛñØÚÒãËÂǵÉÀèÚÐçËäОÞßɳÞ_ ɟ͝Ò
íñé³éŸé³í
^°æ¹ÉÀèµÊ›Ø ËàØµÉ³É³è
p_upto_1
p_upto_5
^
`òБصè
^
` `ÄéÈÆ¹ÇÚÉâٳʛصÒî˝ÍÂֵٟËÂÊÌÍ ÛÜØ ͝ʛåÌÍäÐ‘Þ ÒÛÜÞÀÎÚáñì®ÒÉŸËÒ ËÂǵɳҝÉëp_upto_0
ÞßɳÞ_ ɟ͝Ò
=0
p_upto_6 = 1
ÔÜÍÂÊ›Þ ËÂǵÉòèÚÐçËäРεÍÂÊ U¥ÛÜèµÉ³è¤í Бصè ËÂǵɷÛÜÞÀÎÚáÜɟÞßÉ³Ø ËäÐÑËÂÛÜʛØëʛÔ
ֵҝɳÒÃËÂÇµÉ³Þ ÛñØÀÉIPµÐçٟËÂáñì ËÂǵÉ
æÈгì®ËÂÇÚÐç˹æÈБÒòÉŸØ U¥ÛñҝÛÜʛصɳè _ ì ˝ÇÚÉÓεÍÂÉ UôÛÜʛֵÒòXÉ W ÖÚÐçËÂÛÜʛؤé operator()
\
// Prog : loaded_dice.C
// implement a class for rolling a loaded dice .
# include < IFM / loaded_dice.h >
namespace ifm {
// class loaded_dice : implementation
loaded_dice:: loaded_dice
( double p1 , double p2 , double p3 , double p4 , double p5 ,
ifm :: random & generator)
: p_upto_1 ( p1 ) ,
p_upto_2 ( p_upto_1 + p2 ) ,
p_upto_3 ( p_upto_2 + p3 ) ,
p_upto_4 ( p_upto_3 + p4 ) ,
p_upto_5 ( p_upto_4 + p5 ) ,
g ( generator)
{}
unsigned int loaded_dice :: operator ()()
{
double x = g ();
if ( x <= p_upto_1 ) return 1;
if ( x <= p_upto_2 ) return 2;
if ( x <= p_upto_3 ) return 3;
if ( x <= p_upto_4 ) return 4;
if ( x <= p_upto_5 ) return 5;
return 6;
}
} // end namespace ifm
Program 39: ¢¤£³ŸÁ“Ž ’§‘© FµŒGF F“—ŒçÅ
O ʦæ ì“Ê›ÖÀ٬БØÀٟʛÞÀÎÐÑÍÂÉ Ë æ¹ÊãèµÛ ɟÍÂɳدˋáÜʓÐçèÚɟèèµÛÜٳɟÒÃËÂÊ
YÚØµèÀʛ֫ËÃæ·ÇµÛÜÙäÇ Ê›ØµÉ¹ÛÜÒ_ÉŸËËÂɟÍÃÛÜØ¿ËÂǵÉ
å“БÞßÉ Ê›Ô¾ÙäǵÊôʛҝÛÜØµå ØôÖµÞ_ ɟÍÂҟé ÍÂʛåÌÍÂБÞ
èµÊ É³Ò ËÂǵÛÜÒ³í«ÐçҝҝֵÞßÛÜØµåëËÂÇÚÐçË ì“ʛ֞ÐçÍÂÉÓֵҝÛÜØµå¿ÐëáÜʓБèµÉ³è
èµÛÜÙ³ÉëËÂÇÚÐçËòεÍÂɳÔ×ɟÍÂÒÏá×Ðç͝å›ÉŸÍ Ø ÖÚÞ_ ɟ͝ҳí Бصè ì“ʛ֫ÍÓÔÜÍÂÛÜɳصè ÖÚÒîɳÒÓÐÀáÜʓБèµÉ³è èµÛÜÙ³ÉâËÇ ÐÑË ÒîËäгì¥Ò ÞßÊÌ͝ÉëÛÜØ
ËÂǵÉâÞßÛñèÚèµáÜɑé‹ê»ËòËÂÖ«ÍÂØµÒ ʛ֫ËòËÂÇÚÐçË·ÛÜØžËÂǵÛÜÒòҝɟ˝˝ÛÜØµå«íµì“Ê›Öóæ·ÛÜØóÛÜØ ËÂǵÉëáÜʛصåÍÂֵؤía_ Ö«Ë·ØÚÊÌËô_ ìžÞÖµÙäÇ
^ [
Ê›Ø ÐK“U ÉÄÍäБå›É ΠɟÍÏÍÂʛֵØÚè Ä` é ¥P ɟÍÂÙ³ÛÜÒîÉ \ Ù´ÇÚБáñáÜɳصå›É³Ò ì“Ê›Ö ËÂÊÚY صè½ËÂǵÉ_ ɳÒîËÏáÜʓБèµÉ³è
0.12
èµÛÜÙ³ÉÓËÂÇÚÐç˹ì“Ê›ÖóٳʛֵáÜèžÎÊ›ÒÒÛVÚ_ áñì®ÖµÒÉÏÛÜØžËÂǵÛÜÒ¹å“БÞßɑé
// Prog : choosing_numbers.C
// let your loaded dice play against your friend ’s dice
// in the game of choosing numbers .
# include < iostream >
# include < IFM / loaded_dice.h >
\
// POST : return value is the payoff to you ( possibly negative ) ,
//
given the numbers of you and your friend
int your_payoff ( unsigned int you , unsigned int your_friend)
{
if ( you == your_friend) return 0;
// draw
if ( you < your_friend ) {
if ( you + 1 == your_friend ) return 2; // you win 2
return -1;
// you lose 1
} // now we have your_friend < you
if ( your_friend + 1 == you ) return -2; // you lose 2
return 1;
// you win 1
}
int main () {
// the random number generator; let us use the generator
// ANSIC instead of the toy generator knuth8 ; m = 2^31;
ifm :: random ansic (1103515245u , 12345 u , 2147483648u , 12345 u );
// your strategy may be to prefer larger numbers and use
// the distribution (1/21 , 2/21 , 3/21 , 4/21 , 5/21 , 6/21)
double p = 1.0/21.0;
ifm :: loaded_dice you (p , 2*p , 3* p , 4* p , 5* p , ansic );
// your friend ’s strategy may be to stay more in the middle
// and use the distribution (1/12 , 2/12 , 3/12 , 3/12 , 2/12 , 1/12)
double q = 1.0/12.0;
ifm :: loaded_dice your_friend (q , 2* q , 3* q , 3* q , 2* q , ansic );
// now simulate 1 million rounds ( the train may be very late ...)
int your_total_payoff = 0;
for ( unsigned int round = 0; round < 1000000; round ++) {
your_total_payoff += your_payoff ( you () , your_friend ());
}
// output the result :
std :: cout < < " Your total payoff is "
< < your_total_payoff < < "\n ";
return 0;
}
Program 40: ¢¤£ŸŸÁ“Ž
±¬Š‘“ŽŸ—»šÁ š ” ¨½ ŸŒ³£¦ŽçÅ
\ 4.3.11 Details
" ʛÞßɟ˝ÛÜÞßɳҳíÌæ¹É·æÈÐçØ Ë‹ËÊëåÌÍäÐ‘Ø¯Ë ØµÊ›ØµÞßɳÞb_ÉŸÍÃÔ×ÖÚØµÙŸËÛÜÊ›ØµÒ Ð‘Ù³ÙŸÉ³ÒÒ ËÂÊëËÂǵÉòÛÜØ ËÂÉÄÍ
ØÚБá¥ÍÂɟεÍÂÉŸÒÉ³Ø ËÂÐçËÂÛÜʛؿʛÔРٟá×Ð‘ÒÒ³é ÆÃìôÎÚÛÜ٬БáôÔ×ÖÚØµÙŸËÛÜÊ›ØµÒ Ô×ÊÌÍÃæ·ÇµÛÜÙäÇ¿ËÂǵÛÜÒ Þ®Ð ]“É³Ò ҝɳصҝÉòÐçÍÂÉïËÂǵÉïÛÜØ¾Ð‘صè
ʛ֫˝ÎÚÖ«Ë ÊÌΠɟÍäÐÑËÂÊÌÍÂÒ
ÐçØÚè
éÏê˜ØÚèµÉ³ÉŸè¾í æ·ÍÂÛñ˝ÛÜØµåÀÊ›Ö«Ë ÊÌÍ ÍÂɬБèµÛÜØµåßÛÜØ¯ËÂÊÀËÂǵÉ
ÛÜØ¯ËÂɟÍÂØÚБáÃÍÂɟεÍÂÉ³ÒÉŸØ Ëäoperator<<
Ðç˝ÛÜÊ›Ø Ê›ÔÜËÂÉ³Ø ÍÉXWôÖµÛñoperator>>
ÍÂɟÒàҝʛÞßÉ ]ôØÚʦæ áñɳèµå›ÉÀʛÔÈ˝ÇÚÛñÒâÍÂɟεÍÂɳÒîÉ³Ø ËäÐÑËÂÛÜÊ›Ø ËÂÇÚÐçËàå›Ê ɳÒ
_ ɟì“Ê›Øµèžæ·ÇÚÐçËÈÊÌËÂǵɟͷÔ×ֵصٟËÂÛñʛØÚÒÈØµÉ³É³è¤é
SÝÉ Ù³Ð‘ØµØÚÊÌË¡ÍÂɬБÒîÊ›Ø Ð _ á²ìãæòÍÂÛñËÂÉ
ÐçØÚè
Ð‘Ò Þßɟb
Þ _ ÉÄÍÂ
Ò ^»æ ǯìâØµÊÌË `Äí _ÚÖ«Ë
operator<<
operator>>
æ¹É¹Ù¬Ð‘؏ޮР]“É ËÂǵɳҝɹÔ×ֵصٟËÂÛÜʛصÒ
ʛԵËÂǵÉÈٟá×Ð‘ÒÒ³é ·ÒÕÐ ÔÜÍÂÛñɳصè¾í¯Ð Ô×ֵصٟËÂÛÜʛؿÇÚÐ‘Ò ÖµØµÍÉ³Òî˝ÍÂÛñٟËÂɳè
š ɟÍÂF¯ÒŸŽ é ê»ËïÛÜÒïÙ³áñɬÐçÍ ËÂÇÚÐçˋËÂǵÉ
БٳٟɳҝÒïËÂÊàËÂǵɷεÍÂVÛ U‘ÐçËÂÉ Ù³áÜБҝÒïÞßɳ¶Ÿ
Þ £¬—™_ Œ³
Þ¿ÖÚҙËïèµÉ³Ù³á×Ðç͝ÉÓÐâÔ×ÖµØÚÙÄËÂÛÜʛØßËÂÊ
¬
±
ª
’
¯
©
Ÿ
Ž
Ž
_ É¿ÛñËÂÒÓÔÜÍÂÛÜɟØÚè¤í¾Ð‘صè صÊÌËÏËÂÇµÉ ÊÌËÂǵɟÍãæÈгì½ÐçÍÂʛֵصè¤í ҝÛÜØµÙ³É¿Ûñ!Ë ÒÓ˝ÇÚɿٳá×ÐçÒÒ ËÂÇÚÐçËÏÇ ÐçÒÏËÂʮεÍÂÊÌËÂɳÙÄËâÛñ˝Ò
εÍÂVÛ U‘Бٟì“í¤Ð‘صè صÊÌË ËÂǵÉàÔ×ÖÚØµÙŸËÛÜʛؤé [ ÊÌÍÂÞ®ÐçáÜáñì“í Ð
ÛÜÒÓÐÀÞßɳ
Þ _ ÉŸÍ èµÉ³ÙŸá×ÐçÍäÐç˝ÛÜʛØ
Ÿ
¶
¬
£
î
—
Ÿ
Œ
š
F
µ
F
Ä
Œ
¬
±
×
’
“
©
Ÿ
£
¯
©
˜
–
î
—
›

š
ʛԡ˝ÇÚÉãÔ×ÊÌÍÂÞ
Friend functions.
friend
− ƹÇÚÛñÒÈèµÉ³ÙŸá×ÐçÍäÐç˝ÛÜʛخޮР]“É³Ò ËÂǵÉÓÍÂɳÒîΠɟٟËÂÛVU“ÉÓÔ×ֵصٟËÂÛÜʛ؞РÔÜ͝ÛÜɳصèžÊ›Ô¾ËÂǵÉÏٟá×БҝÒÈБصèžåÌÍÂÐ‘Ø ËÂÒÈБٟٳɳҝҹËÂÊ
БáÜá¤èÚÐçËäÐàÞßɳ
Þ _ ɟ͝ҳíôæ ǵɟ˝ÇÚÉÄÍòËÂǵɟì Ðç͝ÉãÎÚÖ _ áñÛÜÙ ÊÌͷεÍÂÛVU‘ÐçËÂɑé [ ÊÌÍÈËÂǵÉãÙ³áÜБҝÒ
íµæ¹ÉÏٳʛֵáÜè
rational
ÍÂɟæòÍÂÛñËÂÉÓËÂǵÉ
ÒîɳٟËÂÛÜʛØóБҷÔ×ʛáÜáñÊÑæ·ÒÈËÂÊ èÚɟٳá×ÐçÍÂÉãÛÜØ‹Ð‘صè ʛֵËîÎ Ö«ËòÊÌΠɟÍäÐÑËÂÊÌÍÂÒòËÊ _ ÉâÔÜ͝ÛÜɳصèµÒ
private
ʛԡ˝ÇÚÉãÙ³á×БÒîÒ³é
class rational {
private :
friend std :: ostream & operator < < ( std :: ostream & o , rational r );
friend std :: istream & operator > > ( std :: istream & i , rational & r );
int n ;
int d ; // INV : d != 0
};
ê˜ØÀËÂǵÉòèµÉ YÚØµÛñËÂÛñÊ›Ø Ê›ÔËÂǵɳÒîÉ·ÊÌΠɟÍÂÐçËÂÊÌÍÂÒ³í›æ¹Éò٬БØÀËÂǵɳØßÐçٳٳɳҝÒÕËÂǵÉòØ ÖÚÞßÉÄÍäÐçËÂÊÌÍÕБصèÀèµÉ³ØµÊ›ÞßÛÜØÚÐ ËÂÊÌÍ ËÂÇ«ÍÂʛֵå›Ç
Бصè
Ð‘Ò æ¹ÉÈֵҝɳè ËÂÊÏèµÊãÛ²Ë ÛÜØ " ɳÙÄËÂÛÜÊ›Ø é \ é é ê˜ÔÚÎ Ê›ÒÒÛ _ áñÉÌí›ÔÜÍÂÛÜɳصèèÚɟٳá×ÐçÍäÐÑËÂÛÜʛصÒ
ҝǵʛֵáÜL
è _ É·KÐ U“.n
ʛÛñèÚɟè¾í ҝ.d
ÛÜØµÙ³ÉÈËÂǵɟìÀٳʛÞÀεÍÂʛÞßÛñҝÉïɳص٬ÐçÎÚҝֵá×Ðç˝ÛÜÊ›Ø _ÚÖ«Ë ÒÊ›ÞßÉÄËÂÛÜÞßɳҳíÌ˝ÇÚÉÄìÀÐçÍÉ ÖµÒÉ³Ô×Öµá
ÛÜØ ÊÌÍÂèµÉŸÍ·ËÂÊ¿ÒÂXÐ U“ÉâֵصصɳٳɳÒîÒÂÐç͝ìžÞßɳÞb_ÉŸÍïÔ×ֵصٟËÂÛÜʛصҳé
4.3.12 Goals
˹ËÂǵÛÜҹΠʛÛÜØ¯Ë¬íôì“Ê›ÖóÒîÇÚʛֵáÜè é³é³é
¹
Dispositional.
`L_ ÉãÐ _ÚáÜÉÏ˝ʏÉIPôÎÚá×БÛÜØ ËÂǵÉÏÎÚ֫͝ΠʛҝÉÏÊ›Ô Ð Ù³á×БÒîÒòÛÜØ \ `ßÖµØÚèµÉŸÍÒîËäБصèžËÂǵÉãØÚÉÄæ Ò™ì¥Ø ËÂБٟËÂÛÜٳБá¾Ð‘صèóҝɳޮБدËÂÛÜÙ¬ÐçáËÂɟÍÂÞßÒòÐ‘ÒÒÊ Ù³Û×ÐçËÉ³è æ·ÛñËÂÇ ÛÜØžÎ Ðç͝ËÂÛñÙ³Öµá×ÐçÍ
í
íµÐçØÚè
µ© ±Ÿ±ÄŒ¬Ž³ŽŽ™¢ ŒŸ±Ÿ— Œ³£¦Ž ½
¨ Œ³¨½ ŸŒ³£ ¶Ÿ” 𠱬–˜—š¤Ž
±Ÿ›š¤Ž³–˜£¬”¡±¬–›£¦Ž
Бصè
ÛÜØžèµÉŸËäÐçÛÜá˜é
`ßÖµØÚèµÉŸÍÒîËäБصèžËÂǵÉÏÙ³á×БÒîҝɳÒ
ifm::random
ifm::loaded_dice
Ù³áÜБҝҝɳҟí
Operational.
\ ê˜ØžÎ Ðç͝ËÂÛñÙ³Öµá×Ðçͬí¯ì“Ê›Ö ҝǵʛÖÚáñè _ ÉãÐ _ÚáÜÉ ËÂʞéŸé¬é
` YÚØµè Òîì¥Ø¯ËäБٟËÂÛñ٬БáÐçØÚè ҝɳޮÐçØ ËÂÛÜٳБáɟÍîÍÂÊÌÍÂÒ¹ÛÜØ Ðëå›ÛVU“É³Ø Ù³á×БÒîÒïèÚÉIY صÛñ˝ÛÜʛخБصè ÛñÞÀÎ áñɳÞßÉ³Ø ËÂÐ ^
ËÂÛñÊ›Ø \ `®èµÉ³ÒîٟÍÂÛV_ É
U‘БáÜÖµÉÏÍÂБصå›ÉâБصè Ô×ÖÚØµÙŸËÛÜʛØÚБáÜÛñË ìßÊ›Ô ÐàË ìôÎ ÉÏå›ÛVU“É³Ø _ôì пٟá×БҝÒÈèµÉ YÚØÚÛ²ËÂÛÜÊ›Ø ^
` ÐçèÚè Ô×ÖµØÚÙÄËÂÛÜʛØÚБáÜÛñË ìÀ˝ÊÀÐ å›ÛVU“ɳØóÙ³áÜБҝҹËÂÇ«ÍÂʛֵå›ÇžÞßɳÞ_ ɟ͹Ô×ֵصٟËÂÛÜʛصÒ
^
`ßæòÍÂÛñËÂÉÓҝÛñÞÀÎ áñÉ Ù³á×БÒîÒÉ³Ò·Ê›Ø ì“ʛֵÍòÊ¦æ Ø ^
^
`ßæ¹ÊÌÍ ] æ·ÛñËÂÇ Ð‘Øµè ÐçÍÂå›ÖµÉãÐ _ ʛ֫˹ÎÚҝɳֵèµÊÌÍäБصèµÊ›Þ
Ø ÖµÞb_ ÉÄÍÂÒ³é
4.3.13 Exercises
Exercise 122 È£³ D‘—NFµŒ®©â¶Ä”’»’¾—»¨¿¢¾’§Œ³¨½Œ³š¤––˜—š
Â¶ë£Ÿ©¯–˜—™›š ©¯’ 𠔍½ ŸŒ³£¦Žß©¯Ž © ±¬’ש¯Ž³Ž – J¦¢ Œ ©“šF
–Œ¬Ž³–ט–îÅ߉ՊŒÏ– JÑ¢ŒâŽ³Š›”’ F® ŒŸ£©¯’»’¤©“£¬—˜–ºŠ¥¨½Œ¬–˜—î± ³¢ Œ³£Ä©¯–›£¦Ž H𠱬’•”"F“—»šÁ —°š ·©“šF FµŒÄ±³£³Œ³¨½Œ³š¤–
©“šF¿–ºŠŒâ ©“£¬—»–ºŠ¥¨ Œ¬–˜—™±â©¯Ž³ŽŸ—§Á›š ¨ Œ³š¤–ºŽ M £³Œ¬’ש¯–˜—î›š ©¯’¾³¢ Œ³£Ÿ©¯–›£¦Ž ©¯Žò¸ÓŒ¬’»’¤©¯Žò—°š È©“šF®›”–ñ¢¤”–Õ©“šF
”ŽçŒ³£ GFµŒ š ŒGF ±Ÿ›š D¥ŒŸ£¦ŽŸ—š¤ŽLH²¶Ÿ£³›¨ int ©“šF®– doubleM¥Å Žà©“š —»š Dô©“£¬— ©“𤖠‹—»– ޳ Š›”’ Fߊ“’ F
–ºŠ©¯–Ó–ºŠŒÀ—»š¤–ŒŸ£¬š ©¯’‹£³Œî¢¤£³Œ³Ž‘Œ³š¤––˜—î›š¼—˜Žš ›£¬¨½©¯’•— GŒ F HŽ‘ŒŸŒ ©¯’²Ž‘ ڌ³£Ÿ±³—˜Ž‘Œ MôÅ ›£ ©¯’»’ÖºŠŒ
¶Ÿ” 𠱬–˜—î›š ©¯’•—˜– J J ›”¢¤£³ D̗NFµŒ FµŒŸ±³— FµŒÏ¸ÈŠŒ¬–ºŠŒŸ£ã—»–ÕŽ³Š›”’ Fß ŸŒÓ£³ŒÄ©¯’•— GŒ F X JÀ¨ Œ³¨ ³Œ³£Õ¶Ÿ” 𠱬–˜—š¤Ž
›£ KJ 𠐛𠍽Œ³¨½ ŸŒ³£à¶Ÿ” 𠱬–˜—š¤ŽçÅ ‰‹ŠŒ½±¬’ª©¯ŽŸŽ Ž³Š›”’ F ©¯’²ŽçÝŠ© D¥Œ ©Ýš Œ¬Ž³–GŒ F 𠔍½Œ³£Ÿ©¯–›£Ý©“
š F
FµŒ³š ›¨ —»š ©¯–›£ – J¦¢ Œ – ©µ±¬Š¥—™XŒ D¥Œ ¨ ›£³Œ
Œ ¯— ¬—˜’•—˜– J
©“
š F –ºŠŒ³£³Œ ŽŸŠ›”’ F ³Œ © ±Ÿ›^ š D¥ ŒŸ`I£¦^ ŽŸ—š `
¶Ÿ” 𠱬–˜—î›š ¶Ÿ£³›¨ Dô©¯’•” Œ³Ž Â¶¿–ºŠ¥—˜Ž¿– J¦¢ Œ‘Å
Exercise 123
©Ý±³’ª©¯Ž³Ž
KJ
Œ³¸¹£¬—»–Œë–ºŠŒÏ޳–˜£¬” ±³– Tribool –ºŠ©¯–Jڐ›” Š©D¥Œ FµŒXD¥Œ¬’ª³¢ ŒGFÀ—»š
©KM ¨ © ‘—»šÁž–ºŠŒ F«©¯–¨ Œ³¨ ³Œ³£¦ŽÓ¢¤£¬— Dô©¯–Œ
M © F F“—°šÁ ±Ä›£¬£³Œ¬Ž™¢ ›šF“—°šÁ ©µ±Ä±ŸŒ¬Ž³Žò¶Ÿ”š ±³–˜—š¤Ž
ڌ³£³±³—»Ž‘Œ
—°š¤–
± M © F F“—°šÁ ©“𠵩 ±Ÿ±ŸŒ³Ž³ŽÃ¶Ä”𠱬–˜—™›š is_bool() const –ºŠ©¯–Õ£³Œ¬–˜”£¬š¤Žã–˜£¬” ŒÏ— ¶ë©“šFž›š¤’EJߗ ¶ã–ºŠŒ
Dô©¯’•” Œ¿—˜Ž 𠐓ò
– ” š ‘š ›¸¹š Ï©“šF
FKM © F F“—°šÁž”Ž‘Œ³£ GFµŒ š ŒIFݱЛš D¥Œ³£¦ŽŸ—™›š¤Žò¶Ä£³›¨
©“šF󖝐󖺊Œ – JÑ¢ Œ bool Å
^
`
Exercise 124
©KM
°— šF ©¯’»’ Œ³£¬£³›£¦Žë—»š –ºŠŒï¶ç“’»’ª›¸¹—»šÁ뢤£³ÄÁ›£Ÿ©“¨½Å — ž–ºŠŒ³¨ ©“šF FµŒ¬Ž‘±³£¬— ³Œ º– ŠŒï¶Ä”𠱬–˜—™›š
©¯’•—˜– J Â¶ó–ºŠŒ – J¦¢ Œ Clock À KJ ¢¤£³ D̗NF“—°šÁ ¢¤£³Œ 䩓šF ¢“޳–±Ÿ›šF“—»–˜—š¤Žë¶‘›£ º– ŠŒ ^ ¨½ `GŒ³^ ¨½ Ÿ\ Œ³` £
¶Ä”𠱬–˜—™›š¤ŽçÅ
\
# include < iostream >
class Clock {
Clock ( unsigned int h , unsigned int m , unsigned int s );
void tick ();
void time ( unsigned int h , unsigned int m ,
unsigned int s );
private :
unsigned int h_ ;
unsigned int m_ ;
unsigned int s_ ;
};
Clock :: Clock ( unsigned int & h ,
unsigned int & m ,
unsigned int & s )
: h_ ( h ) , m_ ( m ) , s_ ( s )
{}
void Clock :: tick ()
{
h_ += ( m_ += ( s_ + = 1 ) / 6 0 ) / 6 0 ;
h_ %= 24; m_ %= 60; s_ %= 60;
}
void Clock :: time ( unsigned int & h ,
unsigned int & m ,
unsigned int & s )
{
h = h_ ;
m = m_ ;
s = s_ ;
}
int main () {
Clock c1 (23 , 59 , 58);
tick ();
unsigned int h ;
unsigned int m ;
unsigned int s ;
time (h , m , s );
std :: cout < < h < < " : " < < m < < " : " < < s < < " \ n " ;
return 0;
}
_ ` ê˜ÞÀÎÚáÜɳÞßÉŸØ Ë¹Ð‘Ø Ê›Ö«ËÎÚÖµËòÊÌΠɟÍÂÐçËÂÊÌÍÈÔ×ÊÌÍò˝ÇÚÉãÙ³á×БÒîÒ
Exercise 125 Ý£¬—»–Œ ©ß¢¤£³ŸÁ›£Ÿ©“¨
Clock
é
^
`
random_triangle.C –½ŽÄ—»¨ž”’ª©¯–Œ®–ºŠŒ ¶ç“’»’ª›¸¹—»šÁ £Ÿ©“šFµ›¨
¢¤£³Ì±ÄŒ¬Ž³ŽàÁ›£Ÿ©¬¢¾Š¥—™±Ä©¯’»’ JµÅ ›š¤ŽŸ—NFµŒŸ£ © ڌIF󖘣¬—™©“šÁ“’ªŒ t ©“šFݱ³ŠÌ“Ž‘Œß©“𼩓£Ì ³—˜–˜£Ÿ©“£KJ D¥ŒŸ£¦–Œ Â¶ t
©¯Ž © ŽŸ–î©“£¦–˜—»šÁÀ¢ ›—°š¤–îК Œ´©µ±¬Š ޳–Œî¢ 㱬ŠÌ“Ž‘Œ ©¯Ž © š Œ – ¢ ›—°š¤– –ºŠŒÀ¨ž— F¬¢ ›—»š¤–â ŸŒ¬–˜¸ÓŒŸŒ³š –ºŠŒ
±³” £¬£³Œ³š¤–‹¢ ›—°š¤–Ï©“
š F © H — ¶‘›£¬¨ž’EJM £Ÿ©“šFµ›¨ó’ J Ž‘Œ¬’ªŒŸ±¬–ŒGF D¥Œ³£¦–Œ Â¶ t Å
‰‹ŠŒóŽŸ—»¨ ”’ש¯–˜—î›š ©¯–ÀŒ´©µ±¬Š ޳–Œî¢F“£Ÿ©“¸ÈŽó–ºŠŒÝ±³” £¬£³Œ³š¤–·¢ ›—°š¤–ë—»š¤– ©
—»šFµ›¸ Å
Ž‘Œž–ºŠŒ
¸¹—»
š Fµ›¸ ¥ ŒŸ±³– ifm::wio FµŒ š ŒGF —»š <IFM/window> ¶ç›£ ÁÌ£Ÿ©¬¢¾Š¥—î±´©¯’Ӑ›”–ñ¢¤”– ੓šF ±³ŠÌ“Ž‘Œ
–ºŠŒ½–˜£¬—™©“šÁ“’ªŒ½¸¹—»–ºŠ D¥ŒŸ£¦–˜—Œ³Ž (0, 0) (512,
0) ©“šF (256, 512) Å Ž‘Œ –ºŠŒ½£Ÿ©“šFµ›¨ š ” ¨½ ŸŒ³£
Á«Œ³š ŒŸ£Ÿ©¯–›£ ansic ¶Ÿ£³›¨ ¹£³ŸÁ›£Ÿ©“¨
Å –Ï ³Œ Á›—»š ·–ºŠŒÏ¢¤£ŸŸÁ›£Ÿ©“¨ Ž³Š›”’ F £³ŒÄ© Fž—»š ©óŽ‘ŒŸŒGFë¶ç›£
\
–ºŠŒ £Ÿ©“šFµ›¨ š ” ¨½ ³ŒŸ£Á«Œ³š ŸŒ £Ÿ©¯–›£ ©“šF º– ŠŒ š ” ¨ ³ Œ³£ Â¶àŽŸ—°¨ž”’ש¯–˜—î›š Ž³–Œ™¢¾Žà– ¢Œ³£º¶‘›£¬¨ Å ^ › £ `
–Œ¬Ž³–˜—°šÁ ¢¤” £¢ “‘Ž Œ¬Ž ¹’ªŒ¬– –ºŠŒ ŸŽ —»¨ ”’ש¯–˜—î›š ¬£ ”š ¶‘› £ «© Ÿ›”– ޳–Œî¢¾ŽçÅ
Exercise 126 Ӑ›š¤ŽŸ— FµŒ³£ –ºŠŒ Á«ŒŸš Œ³£Ÿ©¯–›£ ansic ”ŽçŒIF½—»š È£³ÄÁ›£Ÿ©“¨
Å —»š ±ÄŒž–ºŠŒ ¨  “F ”’•”Ž
—˜ Ž m = 231 À–ºŠŒ½—»š¤–Œ³£¬š ©¯’౟›¨¿¢¤”––˜—™›š¤Ž Â¶ –ºŠŒ½Á¥Œ³š Œ³£Ÿ©¯–›£ ¸¹—˜’°’뱟Œ³£¦–î©“—°š¤’EJ  D¥ ŒŸ£ › ¸ — ¶
¬—˜–ºŽ ©“£³Œ ”Ž‘ŒGF – £³Œî¢¤£³Œ¬ŽçŒ³š¤– unsigned int Dô©¯’­”¡Œ¬ŽçÅ
Œ¬Ž ¢¤—˜–Œ –ºŠ¥—˜Ž –ºŠŒ½Ž‘Œ ”¡Œ³š Ÿ± ŒœÂ¶
¢¾Ž‘Œ³” Fµ›£Ÿ©“šFµ›¨ 𠔍 ³ Œ³£¦Ž ±Ä›¨¢¤”–ŒIF K J –º ŠŒãÁ¥Œ³š Œ³£Ÿ©¯–›£ —˜Ž ±Ÿ›£¬£ŸŒŸ±¬– ©“šF ±Ÿ›—°š ±³—NFµŒ³Žã¸¹—˜–º^ Šž—» –ºŽ`
¨½©¯–ºŠŒŸ¨½©¯–˜—î±´©¯’ FµŒ š —˜˜– —™›š Å ¦¢¾’ש“—»š –º¥Š —»Ž
—»
š F © ’ª‘© FµGŒ F “F —î±ÄŒ –ºŠ©¯– ³Œ´©¯–ºŽ –ºŠŒó¶ç©“—°£ F“—™±ŸŒ —°š –ºŠŒœÁ¥©“¨½Œ Â¶¼±¬ŠÌ“^ ŽŸ—°š Á `
𠔍 ³Œ³£¦ŽÑÅ H‘‰ÕŠ¥—˜Žà—˜ŽÀ©ó–ºŠŒŸ›£KJ Œ ڌ³£Ÿ±³—˜Ž‘ŒçÅ M
Exercise 127
4.3.14 Challenges
Š©¯– —»Žã–º ŠŒ ³Œ¬Ž³–ï’ª‘© FµŒGF F“—Œ‹¶‘›£·¢¾’שJ —°šÁߖºŠŒâÁô©“¨ Œ Â¶¿±¬ŠÌ“ŽÄ—»šÁÀš ” ¨½ ŸŒ³£¦Ž
— D¥ŒÝ—»–ºŽF“—˜Ž³–˜£¬— ¬”–˜—™›š
›” ±Ÿ›”’ F¼–˜£KJ – ©¬¢«¢¤£³ ¯—»¨ ©¯–Œ –ºŠŒ F“—˜ŽŸ–˜£¬—™ ¬”–˜—î›š Œ¬¢ Œ³£¬—»¨½Œ³š
–’»’ J à›£ Žç›¨ Œ¬Š›¸ ±Ÿ›¨¿
¤
¢

”
–Œ®—˜–îÅ H Hint: —»
𠐛£ FµŒ³£ – šF © ŽÄ”—˜–î©« ¬’§Œ®–ºŠŒÄ›£³Œ¬–˜—î±´©¯’ï¨  FµŒ¬’
Ž‘Œ´©“£³±¬Š ¶‘›£ –ºŠŒ –Œ³£¬¨
Œ³£³ îŽÄ”¨ Á¥©“¨½Œ¬Ž ߐ›£ F“—°£³ŒŸ±¬–º’ JœÁ« – –ºŠŒ ±Ÿ›£¬£ŸŒ¬Ž™¢ ›šF“—°šÁ ±³Š©¬¢
–Œ³£ —°š http://www.inf.ethz.ch/personal/gaertner/cv/lecturenotes/ra.pdf Å š ±ŸŒ
Jڐ›” Š© D¥Œã¶‘›£¬¨ ”’ש¯–IŒ F –ºŠŒ¢¤£Ÿ¥ ¦’§ŒŸ¨ ©¯Ž © Œ³£³ îŽÄ”¨ Á¥©“¨ Œ J ›” ±Ä©“š Ž‘“’ D¥Œ —˜–딍ŽÄ—»šÁ
^ ¶‘› £`
Œ µ©“¨¿¢¾’§Œ –ºŠŒ¸ÓŒ‘ ™—»š¤–ŒŸ£º¶ç©µ±ŸŒ http://banach.lse.ac.uk/form.html
Exercise 128
\
Appendix A
C++ Operators
Description
ҝٟÊÌÎ É
ÒÖ _Úҝٟ͝ÛñεË
Ô×ֵصٟËÂÛÜʛ؞٬БáÜá
ٳʛصÒîËîÍÂֵٟËÂÛÜʛØ
Þßɳ
Þ _ ɟÍÈÐçٳٳɳҝÒ
Þßɳ
Þ _ ɟÍÈÐçٳٳɳҝÒ
Î Ê›Ò™Ë ºÛÜØµÙŸÍÉ³ÞßÉ³Ø Ë
Î Ê›Ò™Ë ºèµÉ³ÙŸÍÉ³ÞßÉ³Ø Ë
è«ì¥ØÚБÞßÛñ٠٬БÒîË
ÒîËÂÐçËÂÛÜÙÓ٬БҙË
ÍÂɟÛÜØ ËÂÉÄ͝εÍÂɟËò٬БÒîË
ٳʛصÒîËò٬БҙË
Ë ìô΍ÉãÛÜèµÉ³Ø¯ËÂVÛ YÚÙ¬Ðç˝ÛÜʛØ
εÍÂÉ ˜ÛÜØµÙŸÍÂɳÞßÉŸØ Ë
εÍÂÉ ˜èµÉ³ÙŸÍÂɳÞßÉŸØ Ë
èµÉŸÍÂɟÔ×ɟÍÂɳصٳÉ
Бèµè«ÍÂɳÒîÒ
_ÚÛñË æ ÛñҝÉÓٳʛÞÀÎÚáÜɳÞßɳدË
áÜʛå›ÛñÙ¬Ð‘á ØµÊÌË
ҝÛñ囨
ҝÛñ囨
ÒÛ ³É³Ê›Ô
صɟæ
èµÉ³áÜÉÄËÂÉ
Ù¬ÐçÒîË
Þßɳ
Þ _ ɟÍï΍ʛÛÜØ ËÂÉÄÍ
Þßɳ
Þ _ ɟÍï΍ʛÛÜØ ËÂÉÄÍ
Operator
::
[]
()
()
.
->
++
-dynamic_cast<>
static_cast<>
reinterpret_cast<>
const_cast<>
typeid
++
-*
&
~
!
+
sizeof
new
delete
(
)
->*
.*
é³é¬é
\ Arity
\
Prec.
!
\
\
\
\
\
\
Assoc.
ÍÂÛÜå›Ç¯Ë
áÜɳÔÜË
áÜɳÔÜË
ÍÂÛÜå›Ç¯Ë
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
ÍÂÛñå›Ç Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛñå›Ç Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛñå›Ç Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛñå›Ç Ë
ÍÂÛÜå›Ç¯Ë
áÜɳÔÜË
áÜɳÔÜË
\\
Þ¿ÖµáñËÂÛñÎÚáÜÛÜÙ³ÐçËÂÛÜʛØ
èµVÛ UôÛÜҝÛÜÊ›Ø ^˜ÛÜØ¯ËÂɳå›ÉŸÍG`
ÞßÊ èÚÖµáÜÖµÒ
БèµèµÛñËÂÛñʛØ
ÒÖ _µËÍäÐçٟËÂÛÜʛØ
ʛ֫˝ÎÚÖ«Ë áÜɳÔÜËÈҝǵÛÜÔÜË
ÛÜØ«ÎÚÖ«Ë ÍÂÛÜå›Ç¯Ë¹ÒÇµÛÜÔÜË
áÜɟҝÒ
åÌÍÂɳÐçËÂɟÍ
áÜɟҝÒòÉ WôÖÚБá
åÌÍÂɳÐçËÂɟÍòXÉ WôÖÚБá
ÉXW ÖÚБáÜÛñË ì
ÛÜØµXÉ W ÖÚБáÜÛñË ì
_ÚÛñË æ ÛñҝÉÏБصè
_ÚÛñË æ Ûñҝ
É P«ÊÌÍ
_ÚÛñË æ ÛñҝÉÓÊÌÍ
áÜʛå›Ûñ٬Бá¤Ð‘صè
áÜʛå›Ûñ٬Бá ÊÌÍ
БÒîҝÛÜ囨µÞßÉ³Ø Ë
Þ¿ÖµáñËÈБҝҝÛñ囨ÚÞßÉŸØ Ë
èµVÛ U БҝÒîÛÜ囨µÞßÉ³Ø Ë
ÞßÊ èžÐ‘ÒîҝÛÜ囨µÞßÉ³Ø Ë
Бèµè ÐçҝҝÛÜ囨µÞßɳدË
ÒÖ _ ÐçҝҝÛÜ囨µÞßɳدË
ÍÂÒîÇÚÛñÔÜË Ð‘ÒîҝÛÜ囨µÞßÉ³Ø Ë
áÜÒîÇÚÛñÔÜË·ÐçҝҝÛÜ囨µÞßɳدË
Бصè ÐçҝҝÛÜ囨µÞßɳدË
P¥ÊÌÍ Ð‘ÒîҝÛÜ囨µÞßÉ³Ø Ë
ÊÌͷБҝҝÛñ囨ÚÞßÉŸØ Ë
ҝɟáÜɳٟËÂÛñʛØ
IÉ P¥Ù³ÉŸÎµËÂÛÜʛØ
ÒÉ WôֵɳصٳÛÜØµå
é³é¬é
*
/
%
+
<<
>>
<
>
<=
>=
==
!=
&
^
|
&&
||
=
*=
/=
%=
+=
-=
>>=
<<=
&=
^=
|=
?
throw
,
\
\
\
K K \
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
áÜɳÔÜË
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛÜå›Ç¯Ë
ÍÂÛñå›Ç Ë
áÜɳÔÜË
Table 9: ¹£³ŒŸ±ÄŒIFµŒ³š ±ÄŒ¬Ž ©“šF ©¯ŽŸŽ‘Ì±³— ©¯–˜— D̗»–˜—îŒ¬Ž Â¶ Œ³£Ÿ©¯–›£¦ŽçÅ
³¢
\ Index
ËÂǵÛÜÒ³í \ ^»áÜÛÜØµÉ_Ú͝ɬРa
] `´í \n
\ _ÚÛñËÈÒîìôÒîËÂÉ³Þ í \0
·ÍÛñËÂǵÞßɟËÂÛÜÙ U‘БáÜÖÚÐçËÂÛñʛØ
ÖÚáñÉ í Ðç͝ÛñËÂǵÞßɟËÂÛÜÙ·ÉIP¥ÎµÍÂɳÒîҝÛÜʛؤí \
Ðç͝ÛñËÂǵÞßɟËÂÛÜÙ·ÊÌΠɟÍäÐç˝ÊÌÍÂÒ³í Ðç͝ÛñËÂǵÞßɟËÂÛÜÙòË ì Î ÉÌí
Ðç͝ÛñË ì“í ÐçÍîÍäгì“í \
БÒÈÔ×ÖµØÚÙÄËÂÛÜÊ›Ø Ðç͝å›ÖÚÞßÉŸØ Ë¬í !
èµÛÜÞßɳصҝÛÜʛؤí è«Íäг
æ _ Б٠]¥ÒŸí ɳáÜɟÞßÉ³Ø Ë¬í \ Y P«É³èžáÜɳصåÌËÂǤí ÛÜØµÙ³Ê›ÞÀÎÚáÜÉŸËÉ·Ë ìôÎ ÉÌí \
ÛÜØµèµIÉ P í \
ÛÜØµÛñËÂÛÜБáÜÛ ¬ÐÑËÂÛÜʛؤí \
ÛÜØµÛñËÂÛÜБáÜÛ ¬ÐÑËÂÛÜʛØÀÔÜÍÂÊ›Þ Òî˝͝ÛÜØµåáÜÛ²ËÂɟÍäБá»í ÛÜØµÛñËÂÛÜБáÜÛ ³ÉÄÍ áÜÛÜҙˬí \
Þ¿ÖÚá²ËÂÛÜèµÛÜÞßɳصҝÛÜʛØÚБá°í ÒîÛÜޏֵá×ÐÑËÂÛÜÊ›Ø _ôì ʛØÚɟèÚÛñÞßɳصҝÛÜʛØÚБáÓÐç͝ÍÂЬì“í
^ ³ÉŸÍÂÊÀÙäÇÚÐçÍäÐçٟËÂɟÍG`´í БٳٟɳҝÒ
èÚÐçËäÐàÞßɳÞ_ ɟͬí \ Þßɳ
Þ _ ɟ͹Ô×ֵصٟËÂÛÜʛؤí \ БٳٟɳҝÒò͝ɳÒî˝ÍÂÛñٟËÂÛÜʛصÒ
εÍÂVÛ U‘ÐçËÂÉÌí \ ÎÚaÖ _ÚáÜÛñÙÌí \ БٳٟɳҝҷҙΠɳٳVÛ YÚɟÍ
εÍÂVÛ U‘ÐçËÂÉÌí \ ÎÚaÖ _ÚáÜÛñÙÌí \ Ù ]“ÉŸÍÂÞ®ÐçØÚØ Ô×ÖµØÚÙÄËÂÛÜʛؤí \
БèµèµÛñËÂÛÜÊ›Ø Ð‘ÒÒîÛÜ囨µÞßÉ³Ø Ë¹ÊÌÎ ÉÄÍäÐçËÂÊÌͬí БèµèµÛñËÂÛÜÊ›Ø ÊÌΠɟÍÂÐçËÂÊÌͬí Бèµè«ÍÂɳҝÒ
Ê›Ô ÐàÞßɳÞßÊÌ͝ìßٟɳáÜá˜í Ê›Ô Z
Ð UÌÐÑÍÂÛ×Ð _ÚáÜÉÌí \ Бèµè«ÍÂɳҝÒòÊÌΠɟÍäÐÑËÂÊÌͬí K Бè ÖµÒîËÂÞßɳدË
Ê›Ô Ðç͝ÍÂЬì Ðç͝å›ÖÚÞßÉŸØ Ë¬í !
БáÜå›ÊÌ͝ÛñËÂǵÞ
٬БÙäÇµÉ ºÊ _ÚáÜÛ U¥ÛÜʛֵҳí Бáñ˝ɟÍÂØÚÐçËÂÉÓèµÉ³ØµÛ×Бá˜í O " ê
ÍäБصèµÊ›Þ ØôÖµb
Þ _ÉŸÍÈå›É³ØµÉŸÍäÐçËÂÊÌͳí \ БدËÂVÛ U‘БáÜɳصٳÉÌí ÐçεÎÚáÜÛÜÙ¬ÐÑËÂÛÜʛØßεÍÂʛåÌÍäÐ‘Þ í ÐçÍÂå›ÖµÞßÉ³Ø¯Ë ºèµÉŸÎÉ³ØµèÚÉŸØ ËÈáÜÊôÊ ]ô֫Ρí \a
·ÍÂÛ²ËÂǵÞßɟËÂÛÜÙ U‘БáÜÖÚÐçËÂÛÜÊ›Ø ÖµáÜÉ í
·ÍÂÛ²ËÂǵÞßɟËÂÛÜÙ U‘БáÜÖÚÐçËÂÛÜÊ›Ø ÖµáÜÉ \ í ØµÊÌË·ÒîɳáÜÔºèµÉ³ÒîٟÍÂÛV_ÚÛÜØµå«í K Ê›Ô Î Ê›ÛñØ ËÂɟ͝ҳí Ê›Ö«Ë ºÊ›Ô _ ʛֵصèóÛÜØµèµIÉ P í K
ΠʛÛÜØ¯ËÂɟ͹ËÂÊ«í ÍäБصèµÊ›Þ Бٳٳɟҝҳí \
ҝɳֵٟ͝ÛñË ì Ûñҝҝֵɳҳí ÒÖ _ÚҝٟÍÂÛ²ÎÚ˳í \
ÒÖ _ÚҝٟÍÂÛ²ÎÚËòÊÌΠɟÍÂÐçËÂÊÌͬí \
ֵصèÚÉÄÍÂáñì¥ÛñØÚå Ë ìôΠɑí \
³ÉŸÍÊ ˜ËÂɟ͝ÞßÛÜØÚÐçËÂɳè¤í ÐçÍîÍäÐ³ì ˜ËÊ ˜Î ʛÛÜØ¯ËÂɟÍÈÙ³Ê›Ø U“ÉŸÍÂҝÛÜʛؤí K
" ¹êîêÃÙ³ÊôèµÉÌí БÒîҝɟ͝ËÂÛñʛؾí \
БÒîҝÛÜ囨µÞßÉ³Ø Ë
\
ÞßɳÞ_ ɟͻæ ÛÜҝɑí \ Ê›Ô ÐàÒî˝ÍÂֵٟËUÌÐçáÜÖµÉÌí \ Ê›Ô ÍÂɳÔ×ÉÄÍÂɳصٳÉÌí \
ΠʛÛÜØ¯ËÂɟͬí K БҝÒîÛÜ囨µÞßÉ³Ø Ë¹ÊÌÎ ÉÄÍäÐçËÂÊÌͬí БҝÒîÊôÙ³Û×ÐÑËÂVÛ U“ÉÓÊÌΠɟÍäÐÑËÂÛÜʛؤí
БҝÒîÊôÙ³Û×ÐÑËÂVÛ U¥Û²Ë ì
áÜɳÔÜˬí ÍÂÛÜå›Ç¯Ë¬í БҝÒîÊôÙ³Û×ÐÑËÂVÛ U¥Û²Ë ìÀÊ›Ô ÊÌΠɟÍÂÐçËÂÊÌͬí
Ðç˝ËÂБ٠]“ɟͬí Б֫ËÂʛޮÐç˝ÛÜÙ ÒîËÂÊÌÍÂБå›ÉãèµÖ«ÍäÐç˝ÛÜʛؤí Б֫ËÂʛޮÐç˝ʛØ
èµÉŸËÂɟÍÂÞßÛñØÚÛñÒîËÂÛÜ
Ù YÚØµÛñËÂɑí Ð _ ì¥áÜʛصÛ×Ð‘Ø ÞßɟËÂÇµÊ è¾í \
_ БҝÉ
Ê›Ô Z
Ð QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËòØ ÖµÞb_ ÉÄÍòҙì¥ÒîËÂÉŸÞ í " ê
εÍÂʛåÌÍäБÞßÞßÛÜØµåëáÜБصå›Ö Ðçå›ÉÌí _ ɳÇÚXÐ U¥ÛñÊÌÍ
ÛÜÞÀÎÚáÜɳÞßɳدËäÐçËÂÛñʛØÀèµÉ YÚØÚɟè¾í \
ÖµØÚèµÉ YÚØµÉ³è¤í \
ÖµØÚҙΠɳٳVÛ YÚɳè¤í \
_ÚÛÜØÚÐç͝ì®IÉ PôΠБصҝÛÜʛØ
Ê›Ô ØÚÐçËÂÖ«ÍäÐ‘á Ø Öµb
Þ _ ÉÄͬí Ê›Ô ÍÂɬÐçá¾Ø Öµb
Þ _ ÉÄͬí _ÚÛÜØÚÐç͝ì®ÊÌÎ ÉÄÍäÐçËÂÊÌͬí _ÚÛÜØÚÐç͝ìßÍÂÉÄÎÚ͝ɳҝɳدËäÐçËÂÛÜʛØ
Ê›Ô ÛÜØ¯
Ë U‘БáÜÖµÉÌí Ê›Ô ÖµØµÒÛÜ囨µÉ³èžÛñØ Ë UÌÐçáÜֵɏí _ÚÛÜØÚÐç͝ì®ÒÉ³ÐçÍÂÙäǤí \ \ _ÚÛÜØÚÐçÍì ˜ËÂÊ ˜èÚɟٳÛÜޮБá Ù³Ê›Ø U“ɟ͝ҝÛÜʛؤí _ÚÛÜØµÊ›ÞßÛ×Бá Ù³ÊôÉ Ù³ÛÜɳدˬí \ \ _ÚÛñˬí _ÚÛñË æ ÛÜÒîÉÏÊÌ΍ɟÍäÐçËÂÊÌ͝ҳí _ÚáÜÊôÙ ]í ) " í
_ Ê èµì
Ê›Ô èµÊÒ™ËäÐçËÂɳÞßÉŸØ Ë¬í
Ê›Ô Ô×ÊÌÍòÒîËäÐçËÂɟÞßÉ³Ø Ë¬í Ê›Ô Ô×ֵصٟËÂÛÜʛؤí Ê›Ô æ ǵÛÜáñÉ ÒîËäÐçËÂɟÞßÉ³Ø Ë¬í \
_ Ê Ê›á˜í ‹Ê
ʛáÜÉ¬Ð‘Ø¤í ‹Ê Ê›áÜɬБ
Ø U‘БáÜÖÚÐçËÂÛñÊ›Ø ÚÖ áñÉÌí
‹Ê ʛáÜÉ¬Ð‘Ø IÉ P¥ÎµÍÂɳÒîҝÛÜÊ›Ø¤í ‹Ê Ê›áÜÉ¬Ð‘Ø Ô×ÖÚØµÙŸËÛÜʛؤí ٳʛÞÀÎÚáÜɟ˝ɳصɳҝҳí _µÍÂɬР] ҙËäÐçËÂɳÞßÉŸØ Ë¬í
_µÍÂÖ«ËÂÉ ˜Ô×ÊÌÍÂÙ³ÉâÐçεÎÚ͝ʓБÙäǾí _ÚÖ _a_ áñÉ ºÒÊÌÍîˬí \\
_򅵌ǒ \
_ÚÖµÛÜáñË ˜ÛÜØ®Ë ì Î ÉÌí \ _ÚÖ«ÍÂÒîˬí ÒîËÂБصè ÐÑÍÂè¤í \
Ù¬ÐçٴǵÉÌí Ù¬ÐçÙ´ÇµÉ ˜Ê _ÚáÜÛVU¥ÛñʛÖÚÒÈБáñå›ÊÌÍÂÛñËÂÇµÞ í Ù¬ÐçáÜá¾ÐçÍÂå›ÖµÞßÉ³Ø ËÒ³í Ù¬ÐçáÜá _ôì®ÍÂɳÔ×ɟ͝ɳصٳÉÌí \ Ù¬ÐçáÜá _ô
ì UÌÐçáÜÖµÉÌí \ Ù¬ÐçáÜá¤ÒîËäБ٠]í \ Ù¬ÐçØÚٟɳáÜá×Ðç˝ÛÜʛØ
ÛÜØ Q ʓÐÑËÂÛÜØµåàΠʛÛÜØ ËÈٳʛÞÀÎÚÖ«ËäÐç˝ÛÜÊ›ØµÒ³í ¹ÐçÍÂèÚÐ‘ØµÊ Ò¹Ô×ÊÌÍÂÞ¿Öµá×Ðôí \ Ù¬ÐçÒîË ^»Ô×ÖÚØµÙŸËÛÜʛØÚÐ‘á ØµÊÌËäÐçËÂÛÜÊ›Ø `Äí Ù¬ÐçÒîË·GÉ P¥ÎµÍÂɳҝÒîÛÜʛؤí Ù³ÉŸØ ËÍäÐçá¾ÎµÍÂÊ Ù³É³ÒÒÛñØÚå¿ÖµØµÛñË ^ `Äí ÙäÇÚÐçÍ
áÜÛñ˝ɟÍäБá˜í εÍÂʛÞßÊÌËÂÛÜʛØßËÂÊ ^˜ÖµØµÒÛÜ囨µÉ³è ` ÛÜØ ˬí Ë ìôΠɑí ÙäÇÚÐçÍäБÙÄËÂɟͬí í
ٳʛد˝ÍÂʛá˜í áÜÛÜØµ
É _µÍÂɬР]í ÙäǵÊôʛҝÛñØÚå¿ØôÖµ
Þ _ ɟÍÂÒ
å“БÞßÉÌí \\
ïÇôÖ«ÍÂÙäǤí áÜʛ
Ø ³Ê ^ `Äí ïÇôÖ«ÍÂÙä
Ç Æ Ö«ÍÂÛñØÚå ËÂǵɳҝÛñÒ³í Ù³áÜБҝÒ
БٳٟɳҝҷҙΠɳٳVÛ YÚɟͳí \ ٳʛصÒî˝͝ÖÚÙÄËÂÊÌͬí \ \
èµÉ YÚØµÛñËÂÛÜʛؤí \ ÛÜÞÀÎÚáÜɳÞßÉŸØ ËäÐç˝ÛÜʛؤí \ Þßɳ
Þ _ ɟ͹èµÉ³Ù³áÜÐçÍäÐçËÂÛñʛؾí \ \ ÞßɳÞ_ ɟ͹Ô×ֵصٟËÂÛÜʛؤí \ Þßɳ
Þ _ ɟ͹Ô×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜá˜í \ Þßɳ
Þ _ ɟ͹ÊÌΠɟÍÂÐçËÂÊÌͬí \ ÞßɟËÂǵÊôè¤í \ صɳÒîËÂɳèóË ì Î ÉÌí \ εÍÂVÛ U‘ÐçËÂÉÏÞßɳb
Þ _ÉŸÍ¬í \ ÎÚaÖ _ÚáÜÛñÙÏÞßɟb
Þ _ ÉÄͬí \ Ù³á×ÐçҝÒòÒîÙ³ÊÌÎ ÉÌí \ Ù³á×ÐçҝÒÈË ì Î ÉÌí \ ïʛáÜá×ÐçË ÎµÍÂÊ _ÚáÜÉŸÞ í ïʛáÜá×ÐçË ‘í ÊÌËÇ ÐÑÍ ^ `Äí
ٳʛÞßޮБصè®áÜÛÜØµÉÏÐçÍÂå›ÖµÞßɳدˬí ٳʛÞßÞßɳدˬí \ ٳʛÞÀÎÚÛÜá×ÐÑËÂÛÜʛؤí ҝɟΠÐçÍäÐÑËÂÉÌí !
ٳʛÞÀÎÚÛÜáÜÉÄͬí ٳʛÞÀÎÚáÜIÉ PߨôÖµb
Þ _ÉŸÍ¬í \ ٳʛÞÀÎÚáÜIÉ P¥ÛñË ì
Ê›Ô ÐëεÍÂÊ _ÚáÜÉ³Þ í \
Ê›Ô Ð‘ØžÐ‘áÜå›ÊÌÍÂÛñ˝ÇÚÞ í \
ٳʛÞÀΠʛÒîÛñËÂÉ IÉ PôÎÚ͝ɳҝҝÛÜʛؤí \
ٳʛÞÀΠʛֵصè ÒîËäÐçËÂɟÞßÉ³Ø Ë¬í ٳʛÞÀÎÚÖ«ËäÐ _ÚáÜÉ Ô×ֵصٟËÂÛÜʛؤí ٳʛÞÀÎÚÖ«ËÂɟÍ
ޮБÛÜØ ÞßɳÞßÊÌ͝ì“í ÞßɳÞßÊÌ͝ìßٟɳáÜá˜í εÍÂÊôٳɟҝҝÊÌͬí U“Ê›Ø O ɳֵޮБصؤí ٳʛصèµÛñËÂÛÜʛØ
Ê›Ô Ðëæ ÇµÛÜáÜÉÓÒîËÂÐçËÂɳÞßɳدˬí Ê›Ô Ð‘Ø ÛÜÔ ÒîËÂÐçËÂɳÞßɳدˬí ٳʛصèµÛñËÂÛÜʛØÚБáÊÌΠɟÍäÐç˝ÊÌͬí ٳʛصÒîË
Þßɳ
Þ _ ɟ͹Ô×ֵصٟËÂÛÜʛؤí \ ïʛØÚҙË
ÖÚÛñèÚɟáÜÛÜØµÉÌí \ ٳʛصÒîË WôÖÚБáÜÛ Y ɟè Ë ìô΍ÉÌí \ ٳʛصÒîË »ÍÂɳÔ×ɟ͝ɳصٳÉÌí \ ٳʛصÒîË »Ë ìôÎ ÉÌí \ ÛÜØµÛñËÂÛ×ÐçáÜÛ ¬Ðç˝ÛÜʛؤí \ í \ ٳʛصÒîËäÐçØ Ë¬í ٳʛصÒîËäÐçØ ËòIÉ P¥ÎµÍÂɳÒîҝÛÜʛؤí \
ٳʛصÒî˝͝ÖÚÙÄËÂÊÌͬí \ \
èµÉ³ÔªÐ‘Öµáñˬí \ ÉIPôÎ áñÛÜÙ³Ûñ˹٬ÐçáÜá˜í \ ÛÜØµÛñËÂÛÜБáÜÛ³ÉÄͬí \ \
ٳʛدËäБÛÜØµÉŸÍ³í K ÛñËÂÉÄÍäÐçËÂÛÜʛؤí K ٳʛدËÂÛÜØ ÖÚÉÏÒîËäÐÑËÂɳÞßɳدˬí ٳʛد˝ÍÂʛá¤ÙäÇÚÐçÍäБٟ˝ɟͬí ٳʛد˝ÍÂʛá QÚÊÑæâí ÛñËÂÉÄÍäÐçËÂÛÜʛؤí ÖµÞÀΡí
áÜÛÜØµÉ¬ÐÑͬí ҝɳáñɳٟËÂÛÜʛؤí ٳʛد˝ÍÂʛá¤ÒîËäÐÑËÂɳÞßɳدˬí ٳʛد˝ÍÂʛá U‘ÐçÍÂÛ×Ð _ÚáÜɑí Ù³Ê›Ø U“ÉŸÍÂҝÛñʛØ
Ðç͝ÍÂЬì®ËÂʿΠʛÛÜØ¯ËÂɟͬí K
IÉ PôÎ áñÛÜÙ³Ûñˬí QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯Ë¬í ÛÜÞÀÎÚáÜÛÜٟÛñˬí ÛÜØ¯ËÂɳåÌÍäБá»í εÍÂʛÞßÊÌËÂÛÜʛؤí ÒîËäÐçØÚèÚÐç͝è¾í \ ÖµÒÉŸÍ ˜èµÉ YÚØÚɟè¾í \ ٳʛ֫Πʛ؞ٳʛáÜáÜɳÙÄËÂÊÌ!Í Ò ÎµÍÂÊ _ÚáÜÉŸÞ í ãí ÍäБÞßÉŸÍ ÒïÍÂÖµáÜÉÌí ٟÍîìôεËÂʛÒîìôÒîËÂÉ³Þ í K
èÚÐçËäÐàɳص٬ÐÑÎ ÒîÖÚáÜÐçËÂÛÜʛؤí \ èÚÐçËäÐàÞßɳ
Þ _ ɟÍ
БٳٟɳҝҷÔ×ÊÌͳí \ Ê›Ô ÒîËîÍÂֵٟˬí \ É )žÊÌÍÂå“Б
Ø ÒÈá×гæ Ò³í èµÉ _ÚÖµå›å›ÛÜØµåÊ›Ö«ËÎÚ֫ˬí \
èµÉ³Ù³ÛñÞ®Ð‘á ˜ËÊ _ÚÛÜØÚÐç͝ìÙ³Ê›Ø U“ÉÄÍÂҝÛÜʛؤí èµÉ³Ù³áÜÐçÍäÐçËÂÛñʛؾí áÜÊ Ù¬Ð‘á˜í \
Ê›Ô ÐàÙ³á×ÐçҝÒòÞßɟb
Þ _ ÉÄͬí \ Ê›Ô ÐàÔ×ֵصٟËÂÛÜʛؤí Ê›Ô Z
Ð U‘ÐçÍÂÛ×Ð _ÚáÜɑí \ Ê›Ô ÔÜÍÂÛñɳصè¾í \ Òî˝͝ÖÚÙÄˬí \ èµÉ³Ù³áÜÐçÍäÐçËÂÛñÊ›Ø ÒîËÂÐçËÂɳÞßɳدˬí èµÉ³Ù³áÜÐçÍäÐçËÂÛ U“ÉÓ͝ɳå›ÛÜʛؤí \ èµÉ³ÔªÐ‘ÖµáñËòÐçÍÂå›ÖµÞßɳدË
Ê›Ô ÐàÔ×ÖµØÚÙÄËÂÛÜʛؤí èµÉ³ÔªÐ‘ÖµáñËÈٳʛصÒî˝͝ÖÚÙÄËÂÊÌͬí \ èµÉ³ÔªÐ‘ÖµáñËÈÛÜØµÛñËÂÛÜБáÜÛ ¬ÐÑËÂÛÜʛØ
Òî˝ÍÂֵٟ˳í \ èµÉ³ÔªÐ‘ÖµáñË ˜ÛÜØµÛñËÂÛ×ÐçáÜÛ ¬Ðç˝ÛÜʛØ
_ôì èµÉ³ÔªÐ‘ÖµáñËÈٳʛصÒî˝ÍÂֵٟ˝ÊÌͬí \ èµÉ YÚØµÛñËÂÛÜʛØ
Ê›Ô ÐàÙ³á×БÒîÒ³í \ Ê›Ô ÐàÔ×ÖµØÚÙÄËÂÛÜʛؤí Ê›Ô Z
Ð UÌÐÑÍÂÛ×Ð _ÚáÜÉÌí \
Òî˝ÍÂֵٟ˳í \ èµÉ³áÜɟ˝ÉãIÉ PôεÍÂɳҝҝÛñʛؾí \
èµÉ³ØµÊÌÍÂޮБáÜÛ ³É³è®ØôÖµ
Þ _ ɟͬí \ \
èµÉŸÍÂɳÔ×ÉÄÍÂɳصٳÉëÊÌÎ ÉÄÍäÐçËÂÊÌͬí K èµÉŸÍÂɳÔ×ÉÄÍÂɳصٳÛÜØµå«í K èµÉŸËÂɟ͝ÞßÛÜØµÛÜÒîËÂÛÜ
Ù Y صÛñ˝ÉãÐçֵ˝ʛޮÐçËÂʛؤí [ ëí èµÛÜÞßɳصҝÛÜʛØ
^˜Þ¿ÖÚá²ËÂÛÜèµÛÜÞßɳصҝÛÜʛØÚБá ` Ðç͝Íäгì“í èµÛñÍÂɳÙÄËÂVÛ U“É
ÛÜØµÙ³áÜÖµèµÉÌí \ ֵҝÛÜØµå«í èµÛÜҝ٬ÐÑÍÂèµÛÜØµå¿ÙŸÊ›ØÚҙˬí \ èµÛÜҝٟ͝ÛÜÞßÛÜØÚÐ‘Ø Ë
Ê›Ô Ð WôÖÚБè«ÍäÐç˝ÛÜÙÓXÉ WôÖÚÐçËÂÛñʛؾí èµVÛ U¥ÛñèÚÉÏБصèóÙŸÊ›Ø W ֵɟͬí \\
èµVÛ U¥ÛñҝÛÜÊ›Ø Ð‘ÒÒÛÜ囨µÞßɳد˹ÊÌΠɟÍäÐÑËÂÊÌͬí èµÊ ÒîËÂÐçËÂɳÞßɳدˬí
_ 晏ǓҒ
èµÊ›Þ®Ð‘ÛÜØ
Ê›Ô ÐàÔ×ÖµØÚÙÄËÂÛÜʛؤí \
èµÊ›Ö _ áñÉÌí è«ÍäБصè
ÍäБصèµÊ›Þ ØôÖµb
Þ _ÉŸÍÈå›É³ØµÉŸÍäÐçËÂÊÌͳí \ è«ì¥ØÚБÞßÛÜÙ ÞßɟÞßÊÌ͝ì®Ð‘áÜáñÊôÙ¬Ðç˝ÛÜʛؤí è«ì¥ØÚБÞßÛÜ٠εÍÂʛåÌÍÂБÞßÞßÛÜØµå«í è«ì¥ØÚБÞßÛÜ٠ҙËÂÊÌÍäБå›ÉÏèµÖµÍÂÐçËÂÛÜʛؤí ì¥ØÚБÞßÛÜÙ " ˝ÊÌÍäБå›É
ÖµÛÜèµÉ³áÜÛÜØµÉÌí ɳèµÛñËÂÊÌͳí É É³ÙŸË
Ê›Ô ÐàÔ×ÖµØÚÙÄËÂÛÜʛؤí \
Ê›Ô ÐàÒîËäÐÑËÂɳÞßÉ³Ø¯Ë¬í ›Ê Ô Ð‘Ø ÉIP¥ÎµÍÂɟҝҝÛÜʛؤí \
É É³ÙŸË ^˜ÒÉ³Þ®Ð‘دËÂÛÜÙ¬ÐçáËÂɟÍÂÞ `´í \ ɳáñɳÞßÉ³Ø Ë
Ê›Ô ÐçÍîÍäгì“í \ ɳص٬ÐÑÎ ÒîÖÚáÜÐçËÂÛÜʛØ
Ê›Ô èÚÐçËäÐ í \ ÉXW ÖÚБáÜÛñË ì
ΠʛÛÜØ¯ËÂɟͬí K ÍäÐçËÂʛҙËÂÇµÉ³ØµÉ³Ò " ÛÜÉ U“ÉÌí \ ÖµÙ³áÜÛÜèµÉ¬Ð‘؞БáÜå›ÊÌÍÂÛ²ËÂÇµÞ í \
ÖµáÜɟͬí É³Ê›ØµÇ ÐÑÍÂè ^ `Äí É U‘БáÜÖÚÐç˝ÛÜʛØ
Ê›Ô Ð‘Ø IÉ P¥ÎµÍÂɟҝҝÛÜʛؤí \
ÊÌÍÂèµÉŸÍòÊ›Ô ÊÌΠɟÍÂБصèÚҟí ҝǵÊÌ͝ËòÙ³ÛñÍÂٟÖÚ۲ˬí É U‘БáÜÖÚÐç˝ÛÜÊ›Ø ÒîXÉ WôֵɳصٳÉÌí P«Ù³ÉŸá \ _ Öµå«í \
ÉIP¥É³Ù³Ö«ËäÐ _ÚáÜɑí ÉIP¥É³Ù³Ö«ËÂÛÜʛؤí ÉIPôÎÚáÜÛÜÙ³ÛñË¹ÙŸÊ›Ø U“ÉŸÍÂÒîÛÜʛؤí ÉIPôÎ Ê›ØµÉ³Ø Ë
Ê›Ô Z
Ð QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËÈØôÖµÞb_ÉŸÍ¬í ÉIPôεÍÂɳҝҝÛñʛؾí \
ÐçÍÂÛ²ËÂǵÞßɟËÂÛÜÙÌí \
‹ÊôʛáñɬБؤí ٬Бҙˬí ٳʛÞÀΠʛÒîÛñËÂÉÌí \
ٳʛصÒîËäÐçØ Ë¬í \
èµÉ³áÜɟ˝ÉÌí \
É É³ÙŸË Ê›Ôºí \
É U‘БáÜÖÚÐçËÂÛñÊ›Ø Ê›Ôºí \
É U‘БáÜÖÚÐçËÂÛñÊ›Ø ÒÉ WôֵɳصٳÉÌí Ô×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜá˜í áÜÛñ˝ɟÍäБá˜í \ Vá U‘БáÜÖµÉÌí ÞßÛ P¥É³è¤í صɟæëí a
Ê›Ô Ë ìôÎÉ U“Ê›ÛÜè¤í ÊÌÍÂèµÉŸÍòÊ›Ô É É³ÙŸËÂÒ³í εÍÂÛÜÞ®ÐçÍîì“í \
Í U‘БáÜÖµÉÌí Ë ìôÎ ÉÏʛԺí \
\
UÌÐçáÜÖµÉãʛԺí \
UÌÐÑÍÂÛ×Ð Ú
_ áÜÉÌí \ ÉIPôÎÚ͝ɳҝҝÛÜʛ؞ÒîËäÐçËÂɟÞßÉ³Ø Ë¬í ÉIPôÎÚ͝ɳҝҝÛÜÊ›Ø ËÍÂɳÉÌí ԪБٟ˝ÊÌÍÂÛÜØµåØ ÖµÞb_ ÉÄÍÂÒ³í \
ԪБÛñÍòèµÛÜÙ³ÉÌí \\
ԪБáÜÒîÉÌí [ VÛ _Ê›Ø ÐçٳٳۤØôÖµ
Þ _ ɟÍÂÒ³í \ YÚáÜÉÌí !
YÚØµÛñËÂ
É QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËòØ ÖµÞb_ ÉÄÍòҙì¥ÒîËÂÉŸÞ í Y P«É³è ΠʛÛÜØ ËÈØ ÖÚ
Þ _ ɟͳí QÚʓÐçˬí [ áÜʓÐÑËÂÛÜØµå ʛÛñØ Ë ·ÍÛñËÂǵÞßɟËÂÛÜÙ ÖÚÛñèÚɟáÜÛÜØµÉ í [ áÜʓÐÑËÂÛÜØµå ʛÛñØ Ë ·ÍÛñËÂǵÞßɟËÂÛÜÙ ÖÚÛñèÚɟáÜÛÜØµÉ \ í QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËÈٳʛÞÀÎÚÖµËÂÐçËÂÛÜʛصÒ
٬Бصٳɳáñá×ÐçËÂÛÜʛؤí èµÛ ÉŸÍÉ³Ø ËòÒÛ ³ÉŸÒ³í XÉ WôÖÚБáñÛñË ìßËÂɳÒîˬí ÍÂɳá×ÐÑËÂVÛ U“ÉÓɟ͝ÍÂÊÌͳí QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËÈÙ³Ê›Ø U“ɟ͝ҝÛÜʛصҳí QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËÈØôÖµb
Þ _ÉŸÍ
èµÉ³ØµÊÌÍÂޮБáÜÛ ŸÉ³è¤í \ \
IÉ P¥ÎÊ›ØÚÉŸØ Ë¬í ÛÜØ YÚØÚÛ²Ë ì“í \ \
Þ®Ð‘Ø ËÛÜҝÒÂÐôí O Ð O í \ \
صÊÌÍÂޮБáÜÛ ŸÉ³è¤í ҝÛÜ囨¤í ҝÛÜ囨µVÛ YÚ٬Бصè¤í QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËÈØôÖµb
Þ _ÉŸÍÈÒîì¥ÒîËÉ³Þ í _ БҝÉÌí á×ÐçÍÂå›ÉŸÒîËÈIÉ P¥Î ʛصɳدˬí εÍÂɳٳÛÜÒîÛÜʛؤí ҝޮБáÜáñɳÒî˹IÉ PôÎ Ê›ØµÉ³Ø Ë¬í QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯Ë¹Ë ì Î ÉÌí QÚÊôÊÌÍÈÔ×ֵصٟËÂÛÜʛؤí Ô×ÊÌÍòÒîËäÐçËÂɟÞßÉ³Ø Ë¬í _ Êôè«ì“í ÛÜØµÛñË ˜ÒîËäÐçËÂɟÞßÉ³Ø Ë¬í ÛñËÂɟÍÂÐçËÂÛÜʛؤí ËÂɟÍÂÞßÛñØ ÐÑËÂÛÜʛؤí Ô×ÊÌÍÂޮБá¤ÐÑÍÂå›ÖµÞßÉ³Ø Ë¬í ÔÜÍäÐçٟËäБá˜í \ í \
ÔÜÍÂÛñɳصèóèµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛؤí \ Ô×ֵصٟËÂÛÜʛØ
Ù ]“ÉŸÍÂÞ®ÐçØÚؤí \
_ Ê èµì“í ٬Бáñá˜í ٬Бáñá¡ÐÑÍÂå›ÖµÞßÉ³Ø ËÂҟí ٬Бáñá _ ì®ÍÂɳÔ×ɟÍÂɟØÚٟÉÌí \ ٬Бáñá _ ì UÌБáñÖÚɑí \ èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛؤí èµÉ³ÔªÐ‘ÖµáñËòÐçÍÂå›ÖµÞßɳدˬí èµÉ YÚØµÛñËÂÛÜʛؤí èµÊ›Þ®Ð‘ÛÜØ¤í \
É É³ÙŸË¬í Ô×ÊÌÍÂޮБá¤ÐÑÍÂå›ÖµÞßÉ³Ø Ë¬í Ô×ÊÌÍÂޮБá«Î ÐçÍäÐçÞßɟËÂɟÍÕʛԍÍÂɳÔ×ÉŸÍÉ³ØµÙ³É Ë ìôÎ ÉÌí \ ޮБÛÜØ¤í \ Þ¿ÖµËÂÐçËÂÛÜØµå«í !\
Ê U“ÉŸÍÂáÜʓБèµÛÜØµå«í \ ΠʛÒî˝ٳʛصèÚÛ²ËÂÛÜʛؤí εÍÂɳٳʛصèµÛñËÂÛñʛؾí ÍÂɳֵٟ͝ҝVÛ U“ÉÌí \ \
ÍÂɳֵٟ͝ҝVÛ U“ÉâٳБáÜá˜í \ \
ÍÂÉŸËÖµÍØ _ôì ÍÂɳÔ×ɟ͝ɳصٳÉÌí \ ÍÂÉŸËÖµÍØ _ôì UÌÐçáÜÖµÉÌí \ ÍÂÉŸËÖµÍØžË ìôÎ ÉÌí ÍÂÉŸËÖµÍØ UÌÐçáÜÖµÉãÊ›Ô ÍÉ³Ô×ɟÍÂɳصٳÉãË ì Î ÉÌí \ ҝٳÊÌ΍ÉÌí ҝٳÊÌ΍ÉâÊ›Ô Ô×ÊÌ͝ޮБá¤ÐçÍÂå›ÖµÞßɳدËÂÒ³í ҝÛÜ囨ÚÐç˝ֵ͝ÉÌí U‘БáÜÖµÉÌí U“Ê›ÛÜè¤í Ô×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜá
WôÖÚБáñVÛ YÚɳè¤í \a
ÖµaØ WôÖÚБáÜVÛ YÚɳè¤í \a
Ô×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜá¤ÊÌÎ ÉÄÍäÐçËÂÊÌͬí \
Ô×ֵصٟËÂÛÜʛØÚБá ÊÌ΍ɟÍäÐçËÂÊÌÍòصÊÌËäÐçËÂÛñʛؾí \
Ô×ֵصٟËÂÛÜʛØÚБáÎµÍÂʛåÌÍÂБÞßÞßÛÜØµåëá×Бصå›ÖÚБå›ÉÌí \ Ô×ֵصٟËÂÛÜʛØÚБáñÛñË ì
Ê›Ô ÐàÒî˝͝ÖÚÙÄˬí \ Ê›Ô ÐëË ìôΠɑí \ Ê›Ô Ð‘Ø ÊÌΠɟÍäÐÑËÂÊÌͬí Ô×ֵصèÚБÞßÉ³Ø ËÂБáË ìôÎ ÉÌí \ \
å“БÞßÉ
ÙäÇÚÊ Ê›ÒÛÜØµå¿ØôÖµÞb_ÉŸÍÂÒ³í \\
å“ÐçÍ _ Бå›ÉÓٳʛáñáÜɳٟËÂÛñʛؾí \
ÐçÖÚÒîÒ³í ÈÐç͝á [ ÍÂÛÜɟèµÍÛÜÙäǾí å›áÜÊ _ Бá ҝٟÊÌÎ ÉÌí å›áÜÊ _ Бá U‘ÐçÍÂÛ×Ð _ áñÉÌí å›ÊÌËÂÊ¿ÒîËäÐç˝ɳÞßÉ³Ø Ë³í
åÌÍÂɬÐÑËÂɳÒîËòٳʛÞßÞßʛخèµVÛ U¥ÛÜÒîÊÌͬí \
å›ÖµÛÜèµÉ³áÜÛÜØµÉ
ì¥ØÚБÞßÛÜÙ " ËÂÊÌÍÂБå›ÉÌí ÇÚБáñËÂÛñØÚåàεÍÂÊ _ÚáÜÉ³Þ í í ÇÚÐçÍÂÞßʛصÛÜÙ Ø ÖÚÞ_ ɟͳí ǵɬБèµÉŸÍ
YÚáÜÉÌí !
Ê›Ô ËÂǵÉÏÒîËäБصèÚÐçÍÂè áÜÛV_µÍäÐç͝ì“í \
ÛÜʛҙ˝ÍÂÉ¬Ð‘Þ í \ ǵɬÐçξí ǵIÉ PµÐçèÚɟٳÛÜޮБááñÛñËÂɟÍäÐçá˜í ǵÛÜèµÛÜØµå
Ê›Ô ØÚБÞßÉÌí
ÛÜèµÉ³Ø¯ËÂÛVYÚɟͬí \
ê ٳʛÞÀÎÚáÜÛ×ÐçØÚٟÉÌí \
ê ÒîËäÐçØÚèÚÐç͝è í ÐçÍÂÛñ˝ÇÚÞßÉÄËÂÛÜÙ ÊÌÎ ÉÄÍäÐçËÂÛÜʛصҳí èµÊ›aÖ _ÚáÜÉÓIÉ PôËÂɳصèµÉ³èóεÍÂɳٳÛñҝÛÜʛؤí \
ҝÛÜØµå›áÜÉÓIÉ PôËÂɳصèµÉ³èóεÍÂɳٳÛÜÒîÛÜʛؤí \
UÌÐçáÜÖµÉÏÍäÐçØÚå›É‘í ê ÒîËäÐçØÚèÚÐç͝è í \
ÛÜÔ¡ÒîËäÐçËÂɟÞßÉ³Ø Ë¬í ٳʛصèµÛñËÂÛÜʛؤí ÛÜÔ ˜É³áÜҝÉÏÒîËäÐç˝ɳÞßÉ³Ø Ë³í ÛÜÔ×Þ ÛÜØ¯ËÂɳå›ÉŸÍ¬í ÛÜÞÀÎÚáÜɳÞßÉŸØ ËäÐç˝ÛÜʛØÀèµÉ YÚØµÉ³è _ ɳÇÚXÐ U¥ÛñÊÌͬí \
ÛÜÞÀÎÚáÜÛÜٟÛñË Ù³Ê›Ø U“ÉŸÍÂҝÛñʛؾí Òî˝ÍÂÉ³Ð‘Þ ËÊ _ Ê Ê›á˜í ÛÜØµÙ³áÜÖµèµÉÓèµÛñÍÂɳٟ˝VÛ U“ÉÌí \ UÌÐÑÍÂÛ×БدËÈæ·ÛñËÂǞБصå›áÜ
É _ÚÍÂБ٠]“ÉŸËÂÒ³í ! UÌÐÑÍÂÛ×БدËÈæ·ÛñËÂÇ WôÖµÊÌËÂɳҳí !
ÛÜØµÙ³Ê›ÞÀÎÚáÜÉŸËÉ Ðç͝Íäгì®Ë ìôΠɑí \
ÛÜØµÙ³Ê›ÞÀÎÚáÜÉŸËÉ·Ë ìôÎ ÉÌí \ ÛÜØµèµÉ³Ø ËÂÐçËÂÛÜʛؤí \ ÛÜØµèµÉIP
Ê›Ô ÐçÍîÍäгì ɟáÜɳÞßɳدˬí \
ÛÜØµèµÛñÍÂɟٟËÂÛÜʛؤí K ÛÜØ YÚØµÛñËÂÉ áÜÊ ÊÌξí ÛÜØ YÚØµÛñËÂÉ ÍÂɟٳ֫ÍÂҝÛÜʛؤí \ ÛÜØ Y P ÊÌΠɟÍÂÐçËÂÊÌÍÈØµÊÌËäÐçËÂÛÜʛؤí \
ÛÜØµÛñ˝Û×БáÜÛ ³ÐçËÂÛÜʛØ
_ôì ٳʛصÒî˝͝ÖÚÙÄËÂÊÌͬí \ _ôì ³ÉŸÍÊ«í
ٳʛصÒîË »Ë ìôÎ ÉÌí \ í \ Þßɳ
Þ _ ÉŸÍ »æ ÛÜÒîÉÌí \ Ê›Ô ÐàÒî˝͝ÖÚÙÄ
Ë U‘БáÜÖµÉÌí \ Ê›Ô Z
Ð U‘ÐçÍÂÛ×Ð _ÚáÜɑí Ê›Ô ÐçÍîÍäгì“í \
Ê›Ô ÍÂɟÔ×ɟÍÂɳصٳÉÌí \
ΠʛÛÜØ¯ËÂɟͬí K ÛÜØµÛñ˝Û×БáÜÛ ŸÉŸÍ
Ê›Ô Ù³Ê›ØµÒîËîÍÂֵٟËÂÊÌͬí \ \
ÛÜØµÛñ˝Û×БáÜÛ ŸÉŸÍ áÜÛñÒîË
Ðç͝ÍÂЬì“í \
ÛÜØ«ÎÚÖ«ËÈÊÌΠɟÍäÐç˝ÊÌͬí \
ÛÜØ«ÎÚÖ«ËÈÒî˝ÍÂɬÐçÞ í \
ÛÜØ«ÎÚÖ«Ë Ê›Ö«ËÎÚÖ«Ë¹É Ù³ÛñÉ³Ø ì“í \
ÛÜØµÒÉÄÍË ºÒîÊÌ͝ˬí \\
ÛÜØ¯Ë¬í
ÛÜØ¯ËÂɳå›ÉŸÍòèµVÛ U¥ÛñҝÛÜʛؤí
ÛÜØ¯ËÂɳå›ÉŸÍòèµVÛ U¥ÛñҝÛÜÊ›Ø ÊÌΠɟÍäÐç˝ÊÌͬí
ÛÜØ¯ËÂɳåÌÍäÐçá Ù³Ê›Ø U“ɟ͝ҝÛÜʛصҳí ÛÜØ¯ËÂɳåÌÍäÐçáË ì Î ÉÌí ÛÜØ¯ËÂɳåÌÍÂÛ²Ë ì
Ê›Ô ÍÂÉÄÎÚ͝ɳҝɳدËäÐçËÂÛÜʛؤí \ ÛÜØ UÌÐÑÍÂÛ×БدË
Ê›Ô ÐàÒî˝͝ÖÚÙÄˬí \ ÛÜʛҙ˝ÍÂÉ¬Ð‘Þ í \ ê " ê * ÒîËÂБصè ÐÑÍÂè \ í \
Ûñ˝ɟÍäÐçËÂÛñʛؾí Ê U“ÉŸÍ Ð Ù³Ê›Ø ËÂБÛÜØµÉŸÍ¬í K Ê U“ÉŸÍ БØóÐç͝Íäгì“í K Ûñ˝ɟÍäÐçËÂÛñÊ›Ø ÒîËÂÐçËÂɳÞßɳدËÂÒ³í XÉ W ÖÚÛ UÌБáñɳصٳÉãʛԺí Ûñ˝ɟÍäÐçËÂÊÌͳí K í !\
çʛҝɟÎÚÇ
ÖÚҹεÍÂÊ _ÚáÜÉ³Þ í ÖµÞÀÎóÒîËäÐÑËÂɳÞßɳدËÂÒ³í
ØôÖ«ËÂÇ%)žÊÌÍîÍÂÛÜÒ ÍäÐÑËË ÐçáÜå›ÊÌÍÂÛñËÂÇµÞ í ]¥Ø Ö«ËÂÇ
ÍäБصèµÊ›Þ ØôÖµÞb_ÉŸÍÈå›É³ØµÉŸÍäÐçËÂÊÌͳí \ ÊôɳصÛÜå¿áÜÊ Ê ]¥Ö«Î¾í \a
á×гì“ʛ֫ËÈÊ›Ô ÎµÍÂʛåÌÍäÐ‘Þ í \ áÜɬÐçÒîËÈٳʛÞßÞßÊ›Ø Þ¿ÖµáñËÂÛñÎÚáÜɑí
áÜɳÔÜ˷БҝÒîÊôÙ³Û×ÐÑËÂVÛ U¥Û²Ë ì“í áÜɳÔÜË Ð‘ÒÒîÊôÙ³Û×ÐÑËÂVÛ U“ÉÌí áÜVÛ _µÍäÐÑ͝ì“í ! ÒîËäБصèÚÐçÍÂè¤í \ ÛÜØµèÚɟØÚޮгì“ɟ͹ҙì¥ÒîËÂÉŸÞ í \
БáñÎÚÇÚÐ _ ɟ˳í \
ÔÜÍäБٟËÂБá˜í \
åÌÍäÐçÎÚǵÛÜ٬Бá ÛñØ ËÂɟÍîÎÚ͝ɟËäÐçËÂÛñʛؾí \!
ÛÜØµÛñËÂÛ×Ðçáæ¹ÊÌÍÂè¤í \
εÍÂÊôèµÖµÙŸËÂÛÜʛصҳí \
ÛÜØµèÚɟØÚޮгì“ÉŸÍ³í ·ÍÂÛÜҙËÂÛÜèµ
É ^ \ `Äí \ \ \
áÜÛÜØµ
É _µÍÂɬР] ÙäÇÚÐçÍäБÙÄËÂɟͬí áÜÛÜØµÉ¬ÐÑÍòٟʛØÚåÌ͝ÖÚÉŸØ ËÂÛ×Ðçá å›É³ØµÉŸÍäÐçËÂÊÌͳí \ áÜÛÜØµÉ¬ÐÑÍòٟʛØÚåÌ͝ÖÚÉŸØ ËÂÛ×Ðçá ÞßɟËÂǵÊôè¤í \ áÜÛÜØµÉ¬ÐÑÍòÙŸÊ›Ø ËÍÂʛá QÚʦæëí áÜÛÜØ ]“ɟͳí !
ÛÜØô
Ö P í !
áÜÛñ˝ɟÍäБá˜í \ _ Êôʛá»í ÙäÇ ÐÑͬí èµÊ›aÖ _ÚáÜɑí QÚʓÐçˬí ǵIÉ PµÐ‘èµÉ³ÙŸÛÜޮБá˜í í ÛÜØ ˳í
áÜʛصåèµÊ›Ö _ÚáÜÉÌí \
ÊôٟËÂБá˜í Òî˝ÍÂÛñØÚå«í ÖµØÚÒîÛÜ囨µÉ³èžÛÜØ¯Ë¬í áÜʓБèµÉ³è èµÛÜÙ³ÉÌí \\
áÜÊ Ù¬Ð‘á èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛؤí \
áÜÊ Ù¬Ð‘á ҝٳÊÌ΍ÉÌí áÜʛå›ÛÜٳБáÎ ÐçÍÂɳدËÂǵɳҝɳҳí áÜʛå›ÛÜٳБá ÊÌΠɟÍäÐÑËÂÊÌÍÂÒ³í áÜʛå›ÛÜٳБáÎ ÐçÍÂɳدËÂǵɳҝɳÒ
áÜɬÐçèÚÛñØÚå ÊÌÎ ÉÄÍäБصè¤í ҝɳٟʛØÚèÚÐçÍîìžÊÌÎ ÉÄÍäБصè¤í áÜʛصå¿èµÊ›aÖ _ÚáÜɑí \
áÜʛصå¿ÛÜØ ˳í áÜÊ Ê ]¥Ö«Î
ÐçÍÂå›ÖµÞßÉ³Ø¯Ë ºèµÉŸÎÉ³ØµèÚÉŸØ Ë¬í \a
áÜÊ ÊÌξí ÛÜØ YÚØµÛñËÂÉÌí εÍÂʛåÌÍÂɳÒîÒòËÂʦæÈÐçÍÂèµÒïËÂɟÍÂÞßÛñØ ÐÑËÂÛÜʛؤí áVU‘БáÜÖµÉÌí áVU‘БáÜÖµÉ »ËÂÊ ˜Í UÌБáñÖÚÉÓÙ³Ê›Ø U“ÉŸÍÂҝÛñʛؾí )óБ٠" í !
ޮБÙäǵÛÜØµÉ ɟÎÚҝÛÜáñʛؾí ޮБÙäǵÛÜØµÉ á×Бصå›ÖÚБå›ÉÌí í !
ޮБÙÄÍÂÊ«í \
ޮБÛñØ Ô×ֵصٟËÂÛÜʛؤí \ ޮБÛñØ ÞßɳÞßÊÌÍîì“í )óБصèµÉ³Vá _µÍÂÊÌËÈҝÉÄˬí \ ޮБدËÂÛÜҝҝÐ
Ê›Ô Z
Ð QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËÈØôÖµÞb_ÉŸÍ¬í Þ®Ðç˝ÇÚɟޮÐçËÂÛÜÙ¬Ðçá ÛÜØµèµÖµÙŸËÂÛÜʛؤí \ )žÙ ¹ÐçÍËÇ ì Ò [ ÖÚØµÙŸËÛÜʛؤí \ \
Þßɳ
Þ _ ɟÍÈÐçٳٳɳҝÒ
ÛÜØžÐ¿ÒîËîÍÂֵٟˬí \ Þßɳ
Þ _ ɟÍÈÐçٳٳɳҝÒòÊÌΠɟÍäÐÑËÂÊÌͬí \ Þßɳ
Þ _ ɟ͹Ô×ֵصٟËÂÛñʛؾí \ БٳٟɳҝҷÔ×ÊÌͳí \ БصèóٳʛصÒî˳í \ ٬Бáñá˜í \ ÛÜÞÀÎÚáÜÛÜٟÛñË Ù¬ÐçáÜá¤ÐçÍÂå›ÖµÞßɳدˬí \ Þßɳ
Þ _ ɟ͹ÊÌ΍ɟÍäÐçËÂÊÌÍ
Ê›Ô Ù³áÜБҝҳí \ Þßɳ
Þ _ ɟ͹ҙΠɳٳVÛ YÚÙ¬ÐÑËÂÛÜʛØ
Ê›Ô ÐàÒî˝͝ÖÚÙÄˬí \ Þßɳ
Þ _ ÉŸÍ ˜æ ÛñÒÉ Ð‘ÒÒîÛÜ囨µÞßÉ³Ø Ë¬í \ Þßɳ
Þ _ ÉŸÍ ˜æ ÛñÒÉ ÛÜØµÛñËÂÛÜБáÜÛ ¬ÐÑËÂÛÜʛؤí \ ÞßɳÞßÊÌÍîìßٳɳáÜá»í Бèµè«ÍÂɳҝҟí ÞßɳÞßÊÌÍîìßáÜɬР]í Þßɟ͝å›É ºÒÊÌÍîˬí \\
ٳʛÞÀÎÚáÜIÉ P¥ÛñË ì“í \
)žÉŸÍÒÉ³ØµØµÉãεÍÂÛÜÞßɳҟí ÞßɟËÂÇµÊ è
Ê›Ô Ù³á×Ðçҝҳí \ ÞßÛÜØµÛÜ޿ֵ޺ҝÊÌ͝˳í \
ٳʛÞÀÎÚáÜIÉ P¥ÛñË ì“í \
ÞßÛ P¥É³è GÉ P¥ÎµÍÂɳҝÒîÛÜʛؤí ÞßÊôèµÖµá×ÐçÍÛ ¬ÐçËÂÛñʛؾí !\
ÞßÊôèµÖµáÜֵҹБҝÒîÛÜ囨µÞßÉ³Ø Ë¹ÊÌÎ ÉÄÍäÐçËÂÊÌͬí ÞßÊôèµÖµáÜÖµÒïÊÌΠɟÍÂÐçËÂÊÌͬí
Þ¿ÖÚá²ËÂÛÜèµÛÜÞßɳصҝÛÜʛØÚБáµÐÑ͝Íäгì“í èµÛÜÞßɳصҝÛÜʛؤí ҝÛÜÞ¿Öµá×ÐçËÂÛÜʛ
Ø _ôìÓʛصɳèµÛÜÞßɳصҝÛÜʛØÚБá‘Ðç͝Íäгì“í Þ¿ÖÚá²ËÂÛñÎÚáÜÛÜÙ¬ÐÑËÂÛÜʛØÀÐçҝҝÛÜ囨µÞßɳد˹ÊÌΠɟÍäÐç˝ÊÌͬí Þ¿ÖÚá²ËÂÛñÎÚáÜÛÜÙ¬ÐÑËÂÛÜÊ›Ø ÊÌ΍ɟÍäÐçËÂÊÌͳí í Þ¿ÖµËÂÐçËÂÛÜØµåàÔ×ֵصٟËÂÛÜʛؤí !\
ØÚБÞßÉ
Ù³á×БÒîǾí \ ǵÛÜèµÛÜØµå«í
Ê›Ô ÐàÙ³á×БÒîÒ³í \ Ê›Ô ÐàÔ×ÖµØÚÙÄËÂÛÜʛؤí Ê›Ô ÐëË ìôÎ ÉÌí \ Ê›Ô Z
Ð UÌÐÑÍÂÛ×Ð _ÚáÜÉÌí \ Ê›Ô Ô×ÊÌÍÂޮБá¤ÐÑÍÂå›ÖµÞßÉ³Ø Ë¬í WôÖÚБáÜÛ Y ɟè¾í \ ÖµØ W ÖÚБáÜVÛ YÚɳè¤í \ ØÚБÞßɳÒîΠБٟÉÌí \ ØÚБÞßɳÒîΠБٟÉÏÒîÙ³ÊÌÎ ÉÌí ØµÉ³ÒîËÂɟèóË ì Î ÉÌí \ صɟæ IÉ P¥ÎµÍÂɟҝҝÛÜʛؤí a
صÊÌÍÂޮБáÜÛ ³É³è QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËòØ ÖµÞb_ ÉÄÍ¬í ØôÖµáÜá ΠʛÛñØ ËÂɟͳí K
ØôÖµáÜá ΠʛÛñØ ËÂÉŸÍ U‘БáÜÖµÉÌí K
ØôÖµáÜá¤ÒîËÂÐçËÂɳÞßÉ³Ø¯Ë¬í ØôÖµÞßɟ͝ÛÜÙÓáÜÛÜÞßÛñËÂÒ
ʛT
Ô QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËïË ìôΠɳҟí \
Ê›Ô ÛÜØ¯ËÂɳåÌÍäБáË ì Πɳҳí Ê _ ™ÉŸÙŸË¬í \
ÖµØÚØÚБÞßɟè¾í \
Ê _ ™ÉŸÙŸË·ÙŸÊôèµÉÌí !
ÊÌΠɳ؞ҝʛ֫ÍÂÙ³ÉâÒîʛÔÜË æÈÐÑÍÂÉÌí ! ÊÌΠɟÍÂБصè¾í É U‘БáÜÖÚÐçËÂÛÜÊ›Ø ÊÌÍÂèµÉŸÍ¬í ÊÌÎ ÉÄÍäÐçËÂÛÜØµå ÒîìôÒîËÂÉ³Þ ^ " `´í !
ÛÜØô
Ö P í !
)óБ٠" í !
·ØµÛ Pí !
S¼ÛÜØµèµÊÑæ·Ò³í !
ÊÌÎ ÉÄÍäÐçËÂÊÌÍ
БèµèµÛñËÂÛÜʛؤí БèµèµÛñËÂÛÜÊ›Ø Ð‘ÒÒîÛÜ囨µÞßÉ³Ø Ë¬í Бèµè«ÍÂɳҝҟí K ÐçÍÂÛ²ËÂǵÞßɟËÂÛÜÙÌí ÐçÍÂÛ²ËÂǵÞßɟËÂÛÜÙ ÐçҝҝÛÜ囨µÞßɳدˬí ÐçÍÂÛ²Ë ì“í БҝÒîÛÜ囨µÞßÉ³Ø Ë¬í БҝÒîÊôÙ³Û×ÐÑËÂVÛ U¥Û²Ë ì“í
_ÚÛÜØÚÐç͝ì“í _ÚÛÜØµèµÛÜØµå«í
_ÚÛñË æ ÛÜÒîÉÌí ٳʛصèµÛñËÂÛÜʛØÚБá»í Ù³Ê›Ø U“ÉŸÍÂҝÛÜʛؤí \ èµÉŸÍÂɳÔ×ÉÄÍÂɳصٳÉÌí K èµVÛ U¥ÛñҝÛÜÊ›Ø Ð‘ÒÒÛÜ囨µÞßɳدˬí Ô×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜá˜í \
Ô×ֵصٟËÂÛÜʛØÚÐ‘á ØµÊÌËäÐç˝ÛÜʛؤí \
Ô×ֵصٟËÂÛÜʛØÚБáÜÛ²Ë ì“í ÛÜØ Y P صÊÌËäÐçËÂÛÜʛؤí \
ÛÜØ«ÎÚ֫ˬí \
ÛÜØ¯ËÂɳå›ÉŸÍòèµVÛ U¥ÛÜÒîÛÜʛؤí
áÜɳÔÜË Ð‘ÒÒîÊôÙ³Û×ÐÑËÂVÛ U“ÉÌí áÜʛå›ÛÜٳБá˜í ÞßÊôèµÖµáÜÖµÒ³í
ÞßÊôèµÖµáÜֵҹБҝÒîÛÜ囨µÞßÉ³Ø Ë¬í Þ¿ÖÚá²ËÂÛñÎÚáÜÛÜÙ¬ÐÑËÂÛÜʛؤí í Þ¿ÖÚá²ËÂÛñÎÚáÜÛÜÙ¬ÐÑËÂÛÜʛØÀÐçҝҝÛÜ囨µÞßɳدˬí ÊÌΠɟÍÂБصè¾í ʛ֫˝ÎÚ֫ˬí \
Ê U“ÉŸÍÂáÜʓБèµÛÜØµå«í \ ΠʛÒîË ºèµÉ³ÙŸÍÂɟÞßÉ³Ø Ë¬í ΠʛÒîË ºÛÜØµÙŸÍÂɟÞßÉ³Ø Ë¬í εÍÂÉ ˜èÚɟٟÍÂɳÞßɳدˬí εÍÂÉ ˜ÛÜØµÙŸÍÂɳÞßɳدˬí εÍÂɳٳɟèÚɟØÚٟÉÌí
ÍÂɳáÜÐçËÂÛÜʛØÚБá˜í ÍÂÉŸËÖµÍØ UÌÐçáÜÖµÉÌí \
ÒÖ _ÚҝٟÍÂÛñεˬí \ í K
Ò Ö _µËÍäБٟ˝ÛÜÊ›Ø¤í Ò Ö _µËÍäБٟ˝ÛÜʛØóБÒîҝÛÜ囨µÞßÉ³Ø Ë³í ÂË ÉŸÍÂØÚÐçÍîì“í ÖµØ ÐÑ͝ì“í ÖµØ ÐÑ͝ì ÞßÛÜØôÖµÒ³í ÖµØ ÐÑ͝ì®Î áñÖÚҟí ÊÌΠɟÍÂÐçËÂÊÌ͹ËÂÊ ]“ɳؤí Ê U“ÉÄÍÂáÜʓБèµÉ³è¤í ÊÌÍÂèµÉŸÍòÊ›Ô É É³ÙŸËÂÒ³í " í !
Ê›Ö«Ë ºÊ›Ô _ ʛֵصè Ðç͝Íäгì ÛÜØµèµIÉ P í K
ʛ֫˝ÎÚÖ«ËòÊÌ΍ɟÍäÐçËÂÊÌͳí \
ʛ֫˝ÎÚÖ«Ëòҙ˝ÍÂÉ¬Ð‘Þ í \
ÊU“ÉŸÍ QÚÊÑæ
ʛT
Ô U‘БáÜÖµÉ ÍäБصå›ÉÌí \
ÊU“ÉŸÍÂáÜʓБèµÛÜØµå
ÐçÍÂå›ÖµÞßÉ³Ø¯Ë ºèµÉŸÎ ɟØÚèµÉ³Ø¯ËÈáÜÊôÊ ]ôֵξí \a
_ ɳÒîËòÞ®ÐçËÂÙäǤí \a
Ê›Ô Ô×ֵصٟËÂÛÜʛصҳí \ Ê›Ô ÊÌΠɟÍÂÐçËÂÊÌÍÂÒ³í \ ÊU“ÉŸÍÂáÜʓБèµÛÜØµå ÍÂɳҝʛáñֵ˝ÛÜʛؤí \a
‘Ð صÛÜØµÛ˜í \ \
Î ÐçÍäБáñáÜɳá ٳʛÞÀÎÚÖ«ËÂɟͬí \
ΠБÒîË »ËÂÇµÉ ºÉŸØÚè ΠʛÛÜØ ˝ɟͬí K *) " í
Πɟ͝ޏ֫ËäÐç˝ÛÜʛؤí ΠɟÍîΠɟËÂÖÚБá¤Ù¬Ð‘áñɳصè ÐÑͬí ÎÚÛñÎ ÉÌí ÎÚá×ÐçËÂÔ×ÊÌÍÞ í !
ΠʛÛÜØ¯ËÈÊ›Ô èµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛؤí í
ΠʛÛÜØ¯ËÂɟͬí K\
БèµèµÛÜØµå Б؞ÛÜØ ËÂɟå›ÉŸÍ¬í K ÐçÍÂÛñ˝ÇÚÞßÉÄËÂÛÜÙÌí K БҝҝÛñ囨ÚÞßÉŸØ Ë¬í K ٳʛÞÀÎ ÐçÍÂÛÜÒîʛؾí K XÉ WôÖÚБáñÛñË ì“í K ÛÜØµÛñËÂÛ×ÐçáÜÛ ¬Ðç˝ÛÜʛؤí K ØôÖµáÜá˜í K
ØôÖµáÜá U‘БáÜÖµÉÌí K
ΠБÒîË »ËÂÇµÉ ºÉ³Øµè¤í K ÒÖ _ÚҝٟÍÂÛñεËòÊÌΠɟÍäÐÑËÂÊÌͬí K
Ò Ö _µËÍäБÙÄËÂÛÜʛؤí K
ËÂÊ Ðç͝Íäгì“í Ë ìôΠɑí K\
ΠʛÛñØ ËÂÉŸÍ¹Ë ìô΍É
ֵصèÚÉÄÍÂáñì¥ÛñØÚå Ë ìôΠɑí K\
Î ÊÌÍîËÂÛÜØµå«í Î Ê›Ò™Ë ºèµÉ³ÙŸÍÉ³ÞßÉ³Ø ËÈÊÌÎ ÉÄÍäÐçËÂÊÌͬí Î Ê›Ò™Ë ºÛÜØµÙŸÍÉ³ÞßÉ³Ø Ë¹ÊÌ΍ɟÍäÐçËÂÊÌͳí ΠʛҙËÂٳʛصèµÛñËÂÛÜʛØ
Ê›Ô ÐàÔ×ֵصٟËÂÛÜʛؤí Î ÊÌËÉ³Ø ËÂÛÜБá ҝٳÊÌΠɑí εÍÂÉ ˜èµÉ³ÙŸÍÂɳÞßÉŸØ ËòÊÌΠɟÍäÐç˝ÊÌͬí εÍÂÉ ˜ÛÜØµÙŸÍÂɳÞßÉŸØ ËÈÊÌΠɟÍäÐÑËÂÊÌͬí εÍÂɳٟɳèµÉ³ØµÙ³ÉëÊ›Ô ÊÌ΍ɟÍäÐçËÂÊÌͳí
εÍÂɳٟÛÜҝÛÜʛØ
Ê›Ô Z
Ð QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËÈØôÖµb
Þ _ÉŸÍÈÒîì¥ÒîËÉ³Þ í εÍÂɳٟʛØÚèµÛñ˝ÛÜʛØ
Ê›Ô ÐàÔ×ֵصٟËÂÛÜʛؤí εÍÂɳèµÛÜÙ³ÐçËÂÉÌí \
εÍÂÛÜÞ®ÐÑ͝ìßIÉ PôÎÚ͝ɳҝҝÛÜʛؤí \
εÍÂÛÜÞßÛ²ËÂVÛ U“É·ÍÂɟٳ֫ÍÂҝÛÜʛؤí \ εÍÂVÛ U‘ÐçËÂÉ
Ù³á×ÐçҝÒòÞßɟb
Þ _ ÉÄͬí \ εÍÂVÛ U‘ÐçËÂÉ ñí \ εÍÂÊ Ù³É³èµÖ«ÍäБá εÍÂʛåÌÍäБÞßÞßÛÜØµå«í εÍÂÊ Ù³É³ÒÒÊÌͳí εÍÂÊ èÚֵٟ˝ÛÜʛØ
Ê›Ô Ð ÛÜØµèÚɟØÚޮгì“ÉŸÍÈÒîìôÒîËÂÉ³Þ í \
εÍÂʛåÌÍäÐçÞ
á×гì“ʛ֫ˬí \ U‘БáÜÛÜè¤í \ εÍÂʛåÌÍäÐçÞ Ò™ËäÐçËÂÉÌí εÍÂʛåÌÍäÐçÞßÞßÛÜØµåëá×Бصå›ÖÚБå›ÉÌí Ô×ֵصٟËÂÛÜʛØÚБá˜í \ εÍÂʛÞßÊÌËÂÛñʛؾí _ Ê Ê›á¤ËÊÛÜØ¯Ë¬í ÙäÇÚÐçÍòËÊ ^˜ÖµØµÒÛÜ囨µÉ³è ` ÛÜØ ˳í QÚʓÐç˹ËÂÊ èµÊ›Ö _ÚáÜÉÌí ÎÚҝɳֵè«ÍÂʓБصèµÊ›Þ ØôÖµ
Þ _ ɟÍÂÒ³í \ ÎÚÖ _ÚáÜÛÜÙ
Ù³á×ÐçҝÒòÞßɟb
Þ _ ÉÄͬí \ ÎÚÖ _ÚáÜÛÜÙ ²í \ ìôËÂÇÚБå›ÊÌÍÉ¬Ð‘Ø ËîÍÂÛñÎÚáÜÉÌí WôÖÚБáñÛVYÚɳè ×Ô ÖµØµÙŸËÂÛñʛØó٬БáÜá»í \a
WôÖÚБáñÛVÚ
Y ɳè Ú
Ø Ð‘Þßɑí \ WôÖÚБدËÂÖµÞ Ù³Ê›ÞÀÎÚֵ˝ɟͬí \
í ÍäБصèµÊ›Þ БٳٳɟҝÒ
ÛÜØóÐÑ͝Íäгì“í \
ÍäБصèµÊ›Þ БٳٳɟҝҷÞßɳÞßÊÌÍîì ^ ) `Äí ÍäБصèµÊ›Þ ØôÖµ
Þ _ ɟͬí \ ÍäБصèµÊ›Þ ØôÖµ
Þ _ ɟÍÈå›É³ØµÉŸÍäÐç˝ÊÌͬí \ O " ê í \ è«ÍäБصè í \ ]¥Ø ÖµËÇ í \ ÍäБصå›É
Ê›Ô Î Ê›ÛÜØ¯ËÂɟÍÂҟí ! ÍäÐç˝ÛÜʛØÚÐ‘á ØôÖµ
Þ _ ɟÍÂÒ³í \ \
ÍÂɳֵٟ͝ҝÛÜʛØ
ÛÜØ YÚØÚÛ²ËÂÉÌí \ εÍÂÛÜÞßÛñËÂÛ U“ÉÌí \ ËäБÛÜá ºÉ³Øµè¤í \ ÍÂɳֵٟ͝ҝVÛ U“ÉâٳБáÜá˜í \ \
ÍÂɳֵٟ͝ҝVÛ U“ÉâÔ×ֵصٟËÂÛñʛؾí \ \
Ù³ÊÌ͝ÍÂɟٟËÂØµÉ³ÒÒ³í \ ËÂɟÍÂÞßÛñØ ÐÑËÂÛÜʛؤí \ ÍÂɳԪÐçٟËÂÊÌÍÂÛÜØµå«í ÍÂɳÔ×ÉÄÍÂɳصٳÉÌí \
БҝҝÛñ囨ÚÞßÉŸØ Ë¬í \
ÛÜØµÛñËÂÛ×ÐçáÜÛ ¬Ðç˝ÛÜʛؤí \
ɟÔ×ɟÍÂÉ³ØµÙ³É ÖµÛÜèµÉ³áÜÛÜØµÉÌí \ ÍÂɳÔ×ÉÄÍÂɳصٳÉâË ìô΍ÉÌí \
ÍÂɳáÜÐçËÂÛÜʛØÚБáÊÌ΍ɟÍäÐçËÂÊÌ͝ҳí ÍÂɳáÜÐçËÂVÛ U“ÉÓɟ͝͝ÊÌÍ
ÛÜØ QÚʓÐç˝ÛÜØµå ΍ʛÛÜØ ËÈٳʛÞÀÎÚÖ«ËäÐçËÂÛñʛØÚҟí ÍÂɳÒîÉŸÍ U“É³è ØÚБÞßÉÌí \
ÍÂÉŸËÖµÍØ _ôì ÍÂɳÔ×ɟ͝ɳصٳÉÌí \ ÍÂÉŸËÖµÍØ _ôì UÌÐçáÜÖµÉÌí \ ÍÂɟ˝ֵ͝ØóÒîËäÐç˝ɳÞßÉ³Ø Ë³í í
ÍÂÉŸËÖµÍØžË ìôÎ ÉÌí ÍÂÉŸËÖµÍØ UÌÐçáÜÖµÉÌí IÉ U“ÉŸÍÂÒÉ ¡Ê›áÜÛÜÒÇ O ÊÌËäÐçËÂÛñʛؾí ÍÂÛÜå›Ç¯ËòÐ‘ÒÒÊ Ù³Û×ÐçËÂÛ U¥ÛñË ì“í ÍÂÖµØ ËÛÜÞßÉ ÉŸÍÍÂÊÌͳí Í U‘БáÜÖµÉÌí )
" ÐçÍîÍÂÖµÒ «ÍÂÖµáÜÉÌí ҝٟÊÌÎ É
å›áÜÊ _ Бá˜í áÜÊ Ù¬Ð‘á˜í ØÚБÞßɳÒîΠБٟÉÌí Ê›Ô ÐàèµÉ³Ù³á×ÐÑÍäÐçËÂÛÜʛؤí Ê›Ô ÐàÔ×ֵصٟËÂÛÜʛØóèµÉ³ÙŸá×ÐçÍäÐç˝ÛÜʛؤí ҝɟå›ÞßÉ³Ø ËäÐÑËÂÛÜÊ›Ø ÔªÐ‘Öµáñˬí K
ҝɟáÜɳٟËÂÛñʛؾí ҝɟáÜɳٟËÂÛñʛ؞ÒîËäÐÑËÂɳÞßɳدËÂÒ³í ҝɟáÜÔ ºèµÉ³ÒÙÄÍÂVÛ _ÚÛÜØµå«í K ÒÉŸÞ®Ð‘Ø ËÂÛñ٬Бá U‘БáÜÖµÉÓÍäБصå›É
Ê›Ô ÐàÒî˝͝ÖÚÙÄˬí \ ÒÉŸÞ®Ð‘Ø ËÂÛñÙ³Ò³í \ ÒÉŸØ ËÂÛÜØµÉ³á»í ҝÉÄÎÐÑÍäÐçËÂÉÏٳʛÞÀÎÚÛÜá×Ðç˝ÛÜʛؤí !
ÒÉ WôֵɳصٳÉâΠʛÛñØ Ë¬í " ÇµÉ ÉŸÍ ÒîËîÍÂÊ ]“ÉÌí " ÇµÉ ÉŸÍ¬í ·É³Ø«Í
ì ) é ^ ! `Äí ҝǵÊÌ͝ËòÙ³Ûñ͝ٳֵÛñËÈÉ UÌÐçáÜÖÚÐçËÂÛÜʛؤí ҝǵÊÌ͝ËòÛÜØ¯Ë¬í ҝǵÊÌ͝˝ɳÒîËÈÎÐÑËÂǞεÍÂÊ _ÚáÜÉ³Þ í ҝÛñèÚÉÏÉ É³ÙŸË¬í \
" ÛÜIÉ U“ÉâÊ›Ô ÍäÐç˝ʛÒîËÂǵɳصɳҳí \ ҝÛñ囨
Ê›Ô Z
Ð QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËÈØôÖµb
Þ _ÉŸÍ¬í ҝÛñ囨 ÐÑËÂÖ«ÍÂÉÓÊ›Ô ÐàÔ×ÖÚØµÙŸËÛÜʛؤí ҝÛñ囨ÚɟèóÙäÇ ÐÑͬí ҝÛñ囨ÚÛ Y ٳБصè
Ê›Ô Z
Ð QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯ËÈØôÖµb
Þ _ÉŸÍ¬í " ÛÜØµå›áÜ
É )žÊ èÚÛ Y Ù³ÐçËÂÛÜÊ›Ø ÖµáÜɑí ҝʛ֫ÍÂٟɳٳÊôèµÉÌí XÐ UÌÐçÛÜá×Ð _ÚÛÜáÜÛ²Ë ì“í !
ÒîΠБå›ÇµÉŸËîËÂÛ¤Ù³ÊôèµÉÌí Òî΍ɳٳÛ×Бá¤ÙäÇÚÐçÍäБÙÄËÂɟͬí ÒîËÂБصè ÐÑÍÂèžÙ³Ê›Ø U“ÉŸÍÂҝÛñʛؾí \ ÒîËÂБصè ÐÑÍÂèžÉŸÍîÍÂÊÌͬí \
ÒîËÂБصè ÐÑÍÂèžÛÜØ«ÎÚ֫ˬí ÒîËÂБصè ÐÑÍÂèžáÜÛ _ÚÍÂÐç͝ì“í \ Þ®ÐçËÂǵɳޮÐÑËÂÛÜ٬БáÚÔ×ֵصٟËÂÛÜʛصҳí \
ÒîËÂè ٳɟÍîͬí \
ÒîËÂè Ù³ÛÜØ¤í \
ÒîËÂè ٳʛ֫ˬí \
ÒîËÂè YÚáÜá˜í ÒîËÂè Πʦæëí !
ÒîËÂè Ò W Íîˬí !
ÒîËäÐçØÚèÚÐç͝èžÊ›Ö«ËÎÚ֫ˬí \
ÒîËäÐÑËÂɳÞßɳدˬí _µÍÂɬР]í
ٳʛÞÀΠʛֵصè¤í Ù³Ê›Ø ËÛÜØôÖµÉÌí Ù³Ê›Ø ËîÍÂʛá˜í èµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛؤí èµÊ«í
IÉ P«ÉŸÙ³Ö«ËÂÛÜʛؤí IÉ P¥ÎµÍÂɟҝҝÛÜʛؤí Ô×ÊÌͬí å›ÊÌËÂÊ«í
ÛÜÔºí ÛÜÔ ºÉŸáÜҝÉÌí ÛñËÂɟÍÂÐçËÂÛÜʛؤí ÖÚÞÀξí
ØôÖµáÜá˜í ÍÂɟËÂÖ«ÍÂØ¤í í
ҝɳáÜɟٟËÂÛÜʛؤí Òîæ Û²ËÂÙäÇ¾í æ ǵÛÜáÜɑí ÒîËäÐÑËÂÛÜÙÓÒîËÂÊÌÍäÐçå›ÉãèµÖ«ÍäÐçËÂÛñʛؾí ÒîËäÐÑËÂÛÜ
Ù UÌÐÑÍÂÛ×Ð _ÚáÜÉÌí í
ÒîËÂè ٳɟÍîͬí \
ÒîËÂè Ù³ÛÜØ¤í \
ÒîËÂè ٳʛÞÀÎÚáÜIÉ Pí \ ÒîËÂè ٳʛ֫ˬí \
ÒîËÂè Ò W¯ÍË¬í !
ÒîËÂÊÌÍÂБå›ÉãèµÖ«ÍäÐç˝ÛÜʛؤí Б֫ËÂʛޮÐçËÂÛñÙÌí è«ì¥ØÚБÞßÛÜÙÌí ÒîËäÐç˝ÛÜÙÌí Òî˝͝ÛÜØµåáÜÛ²ËÂɟÍäБá»í Òî˝͝ÛÜØµåÞ®Ðç˝ٴǵÛÜØµå«í ØôÖ«ËÂÇ %)žÊÌ͝͝ÛÜÒ ÍäÐçËîË Ð‘áñå›ÊÌÍÂÛñËÂÇµÞ í Ê _ UôÛÜʛֵҷБáñå›ÊÌÍÂÛñËÂÇµÞ í Òî˝͝ÖÚÙÄˬí \ БҝҝÛñ囨ÚÞßÉŸØ Ë¬í \ èÚÐçËäÐàÞßɳ
Þ _ ɟͬí \ èµÉ³Ù³á×ÐçÍÂÐçËÂÛÜʛؤí \ èµÉ³ÔªÐ‘ÖµáñËÈÛÜØµÛñËÂÛÜБáÜÛ¬ÐÑËÂÛÜʛؤí \ èµÉ YÚØµÛñËÂÛÜʛؤí \ Ô×ֵصٟËÂÛÜʛØÚБáÜÛ²Ë ì“í \ ÛÜØµÛñËÂÛÜБáÜÛ ¬ÐÑËÂÛÜʛؤí \ Þßɳ
Þ _ ɟÍÈБٟٳɳҝҳí \ Þßɳ
Þ _ ɟ͹Òî΍ɳٳVÛ YÚÙ¬Ðç˝ÛÜʛؤí \ ֵصèÚÉÄÍÂáñì¥ÛñØÚå Ë ìôΠɑí \ U‘БáÜÖµÉÏÍÂБصå›ÉÌí \ ÒîÉ³Þ®Ð‘Ø ËÛÜ٬Бá˜í \ Ò™ì¥Ø ËÂБٟËÂÛÜٳБá˜í \ ÒÖ _Úҝٟ͝ÛñεË
Ê›Ô ÐçÍîÍäгì ɟáÜɳÞßɳدˬí \
ÒÖ _Úҝٟ͝Ûñε˷ÊÌÎ ÉÄÍäÐçËÂÊÌÍ
Ðç͝ÍÂЬì“í \
ΠʛÛÜØ¯ËÂɟͬí K
ÒÖ _µËÍäÐçٟËÂÛÜʛ؞БҝҝÛÜ囨µÞßɳد˹ÊÌΠɟÍäÐÑËÂÊÌͬí ÒÖ _µËÍäÐçٟËÂÛÜÊ›Ø ÊÌΠɟÍäÐç˝ÊÌͬí " ÖµèµÊ ]¥Ö¤í \ ÒîæÈÐÑÎÚÎÚÛÜØµå
Ê›Ô ÞßɳÞßÊÌÍîì“í Òîæ·ÛñËÂÙäǞҙËäÐçËÂɳÞßÉŸØ Ë¬í ÒîìôØ ËäÐçٟËÂÛÜÙ¬Ðçá U‘БáÜÖµÉÓÍäБصå›É
Ê›Ô ÐàÒî˝͝ÖÚÙÄˬí \ ÒîìôØ ËäÐ P í \ ÒîìôØ ËäÐ PžÉÄ͝ÍÂÊÌͬí \ ËäÐçÛÜá ºÉŸØÚè®ÍÂɳֵٟ͝ҝÛÜʛؤí \ ËÂɟÞÀÎ ÊÌÍäÐç͝ìÀÊ _ ɳٟ˳í \ ÍÂɳÔ×ÉÄÍÂɳصٳÉâËÂÊ«í \ ËÂÉÄÍÂØÚÐç͝ì ÊÌΠɟÍäÐÑËÂÊÌͬí ËÂÊÌ΍ʛáÜʛå›ÛÜ٬БáҝÊÌ͝ËÂÛÜØµå«í Æ Ê¦æ¹ÉŸÍÂÒÈÊ›Ô ÐçØÚʛۻí \ \
˝͝ÖÚÉ‘í Æ Ö«ÍÂÛñØÚå¿Þ®Ð‘ÙäǵÛÜØµÉÌí Æ Ö«ÍÂÛñØÚå«í á×Ð‘Ø ^ \ `Äí
ËÂ֫͝˝áÜÉÓåÌÍäÐçÎÚǵÛÜÙ³Ò³í \
Ë æ¹Ê ÒÈٳʛÞÀÎÚáÜɳÞßÉŸØ Ë¬í Ë ìô΍ÉÌí \ ÐçÍÂÛ²ËÂǵÞßɟËÂÛÜÙÌí
_ Ê Ê›á˜í _ÚÖµÛÜáñË ˜ÛÜØ¤í \ ÙäÇÚÐçͬí Ù³á×Ðçҝҳí \ ٳʛصÒîˬí \ ٳʛصÒîË WôÖÚБáÜÛVYÚɳè¤í \ èµÊ›aÖ _ÚáÜɑí QÚʓÐçˬí QÚʓÐçËÂÛÜØµåàΠʛÛÜØ¯Ë¬í Ô×ÖµØÚÙÄËÂÛÜʛØÚБáÜÛñË ìßʛԺí \ Ô×ÖµØÚèÚБÞßÉŸØ ËäБá»í \ ÛÜØµÙ³Ê›ÞÀÎÚáÜɟËÂɑí \ ÛÜØµÙ³Ê›ÞÀÎÚáÜɟËÂÉ Ðç͝Íäгì“í \
ÛÜØ ˳í
ÛÜØ ˝ɳåÌÍäБá˜í áÜʛصåèµÊ›Ö _ÚáÜÉÌí \
áÜʛصåÛñØ Ë¬í ØÚБÞßÉÓʛԺí \ Ê›Ô Z
Ð UÌÐÑÍÂÛ×Ð _ÚáÜÉÌí \ Ê›Ô Ð‘Ø IÉ P¥ÎµÍÂɳÒîҝÛÜʛؤí \
Ê›Ô Ô×ÊÌÍÂޮБá¤ÐÑÍÂå›ÖµÞßÉ³Ø Ë¬í ΠʛÛÜØ¯ËÂɟͬí K\
ÍÂɳÔ×ɟ͝ɳصٳÉÌí \
ҝǵÊÌ͝ËòÛÜØ ˬí ҝÛÜ囨µÉ³èóÙäÇÚÐçͬí ÖµØÚèµÉŸÍáñì¥ÛÜØµåÐàÒî˝ÍÂֵٟˬí \ ÖµØÚèµÉŸÍáñì¥ÛÜØµåÐ‘ØóÐÑ͝Íäгì“í \
ÖµØÚÒîÛÜ囨µÉ³èžÙäÇÚÐçͬí ÖµØÚÒîÛÜ囨µÉ³èžÛÜØ¯Ë¬í \
ÖµØÚÒîÛÜ囨µÉ³èžáÜʛصå¿ÛÜØ ˳í ÖµØÚÒîÛÜ囨µÉ³èžÒÇµÊÌ͝ËòÛÜØ¯Ë¬í UÌÐçáÜÖµÉÏÍäÐçØÚå›ÉÏʛԺí \ U“Ê›ÛÜè¤í Ë ìôΠɟèÚɟԺí \ ÖµØÚÐç͝ì ÞßÛÜØôÖµÒïÊÌÎ ÉÄÍäÐçËÂÊÌͬí ÖµØÚÐç͝ì ÊÌΠɟÍäÐÑËÂÊÌͬí ÖµØÚÐç͝ì®ÎÚáÜÖµÒÈÊÌ΍ɟÍäÐçËÂÊÌͳí ֵصèÚɟٳÛÜèÚÐ _ÚáÜÉ ÎµÍÂÊ _ÚáÜÉ³Þ í ֵصèÚIÉ Y صɳè _ ɳÇÚXÐ U¥ÛÜÊÌͬí \
ֵصèÚÉÄÍ QÚÊÑæ
ʛT
Ô U‘БáÜÖµÉ ÍäБصå›ÉÌí \
ֵصèÚÉÄÍÂáñì¥ÛñØÚå Ë ìôÎ É
Ê›Ô ÐëΠʛÛÜØ¯ËÂɟÍÈË ì Î ÉÌí K\
·ØµÛ Pí !
ÖµØµØ ÐçÞßɳè Ê _ ɳٟˬí \
ÖµaØ WôÖÚБáÜVÛ YÚɳè Ô×ֵصٟËÂÛÜÊ›Ø Ù¬Ð‘áÜá˜í \a
ÖµØaWôÖÚБáÜÛ Y ÉŸè ØÚБÞßÉÌí \ ֵصҝÛÜ囨µÉ³è Ù´ÇÚÐçͳí ֵصҝÛÜ囨µÉ³è ÛÜØ ˬí \
ֵصҝÛÜ囨µÉ³è áÜʛصåÛÜØ¯Ë¬í ֵصҝÛÜ囨µÉ³è ҝǵÊÌ͝˷ÛñØ Ë¬í ֵصÒîΠɳٟVÛ YÚɳè _ ɳÇÚÐXU¥ÛñÊÌͬí \
ÖµÒÉŸÍ ºèµÉ YÚØµÉ³è Ù³Ê›Ø U“ÉÄÍÂҝÛÜʛؤí \ ֵҝÛÜØµå¿èµÛñÍÂɳٟ˝VÛ U“ÉÌí U‘БáÜÛÜè εÍÂʛåÌÍäÐ‘Þ í \ U‘БáÜÖµÉ
Ê›Ô ÐZU‘ÐçÍÂÛ×Ð _ÚáÜɑí \ ›Ê Ô Ð‘Ø ÉIP¥ÎµÍÂɟҝҝÛÜʛؤí \
U‘БáÜÖµb
É ^˜ÒÉ³Þ®Ð‘دËÂÛÜÙ¬ÐçáËÂɟÍÂÞ `´í \ U‘БáÜÖµÉÓÍäБصå›É
Ê›Ô ÐàÒî˝͝ÖÚÙÄˬí \ Ê›Ô ÐëË ìôΠɑí \ Ê›Ô Ë ìôÎÉ _ Ê Ê›á˜í Ê›Ô Ë ìô΍ÉãèµÊ›Ö _ÚáÜÉÌí Ê›Ô Ë ìôÎÉ QÚʓÐçˬí Ê›Ô Ë ìô΍ÉãÛÜØ¯Ë¬í Ê›Ô Ë ìô΍ÉãֵصҝÛÜ囨µÉ³è ÛÜØ ˬí Ê U“ÉŸÍ QÚÊÑæâí \
ҝɳޮÐçØ ËÂÛÜٳБá˜í \ ÒîìôØ ËäБÙÄËÂÛÜ٬Бá»í \ ֵصèÚÉÄÍ QÚÊÑæâí \
U‘ÐçÍÂÛ×Ð _ áñÉÌí \ Бèµè«ÍÂɳҝÒòʛԺí \ ٳʛد˝ÍÂʛá˜í å›áÜÊ _ Бá˜í ØÚБÞßÉÓʛԺí \ ÒîËäÐÑËÂÛÜÙÌí í
Ë ìôÎ ÉÏʛԺí \ U‘БáÜÖµÉãʛԺí \ U‘ÐçÍÂÛ×Ð _ áñÉÏèµÉ³ÙŸá×ÐçÍäÐç˝ÛÜʛؤí \ U‘ÐçÍÂÛ×Ð _ áñÉÏèµÉ YÚØµÛñËÂÛñʛؾí \
UôÛÜҝVÛ _ÚÛÜáÜÛ²Ë ì
Ê›Ô ØÚБÞßÉÌí U“Ê›ÛÜè¤í U“Ê›ÛÜèžÔ×ÖÚØµÙŸËÛÜʛؤí U“Ê›Ø O É³ÖµÞ®Ð‘ØµØ Ù³Ê›ÞÀÎÚÖ«ËÂÉŸÍ³í æ·ÇÚÛñáÜÉ ÒîËäÐç˝ɳÞßÉ³Ø Ë³í
_ Êôè«ì“í æ µÇ Ûñ˝ɳÒîΠБٳÉÌí S¼ÛÜØµèµÊÑæ·Ò³í !
æ Û²ÍÂɳÔÜÍäБÞßÉ ÞßÊ èµÉ³á˜í \ )
åÌÍäÐçÎÚǵÛÜÙ³Ò¹Ô×ÊÌÍÂÞ®ÐçË¬í ³ÉŸÍÊ ºÛÜØµÛñËÂÛÜБáÜÛ¬ÐÑËÂÛÜʛؤí
³ÉŸÍÊ ˜ ËÂɟ͝ÞßÛÜØÚÐçËÂɳè Ðç͝Íäгì“í