! " $#&%' (*),+- (.)/+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>) >FG9QBF.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+-E4, 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.
E9e`,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.T1[? ;<@ 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.qL7dc3657/'(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/kmCndl!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[7Nh=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,_/MBF43$!Pr!` ^+PN )X/ ) )D3 O)"F^>F s1f1,F
P )39$CBF8E)PDfH>' 7s9,))^9->FG)`89,=)>F b X=/3E,F^QBFE; 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'=1LM7{
U+012 SRuR:)+.TR#US\V$ ,/M0:<657\'I=1"7N SPu`:/)+.-fVh
/M0:<657PL=<Lt Kuv57j'jC.<C.QK657Bu`:/)+.T
_v5&10Z1L3 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 sae1,_/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 .VM2Qsj<:!:<: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>),=3h4) )^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)o1Ee3>):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,)^FPe>^ /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^FGM4PN. ]/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`:)MBF"`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:/VJB8Z1q)|:!:/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, 3xe / :]H>`FG `9/gT>"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)Ck).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!.TF+~*!. :<
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@'jC01~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~01LtZ12,+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)jLM-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=]=3hD9^/ `>)/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`<: SB1[M NY<: /,)+.
.Q<Fd< 'j7~01LtZ12,+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~01LtZ12+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-^=VuVgo& # :/)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:<65701['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 'jC01~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'jC01~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"7NQ1[) 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'jC01~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/kmYmCn/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!.TEu10"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 ):FB4,
`$/>)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:6570V 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`WA+n93
/FGF^1`)f1)oGeP),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`>) fbJk)
) `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>^FW4,
`/ 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
)FGP 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)veP /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'7YBFX`>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 s98zeM / 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)ojeP) ),:
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^`>933e/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 >g4F
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^ 1o /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:<!./C1[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&!.<9Qu <: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)+.Tj'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)+.ji)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[=FY)J)y5&10.ANd:!:!10.Q u=-j6573ST<u .QD)1q<:g.@i'A7N
657<' .Q2Lt5&C.qo65C+K5CY) ./h:!F
1[F&,)657AQ10"~1"7N.O;!Vx657 R'M.|)J<1q)J,)x /'j'^10
./h12<1 )JQRb97f.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`![~{2Tuvx5&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.xQ10" ,) CM01[z y./C:!FQ1[F&!. :
- 657yQ10"~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
<./ % /)jQ10"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 657D+./
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:!1LtD
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:!1LtDQ :!1[y@LM://N:/'
a2 + b 2 = c 2
65C+W+[Du.zV$(3,
Z14,0.<5)
W+[ _vV65CNY:<,H0:!1LtD!.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@_V65CNY:<}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
MQu
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:<!.<.|+[9657657<: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 A4,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 ,^DAYe`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 ,= AYe3h8`$/ 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;/
DS/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>)Oe/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<:!1Lt01q 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 W657ST[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./1Us012<.]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 =V65&1[7N-K;!7cuv57< u` )@ <L7<:/+: i/ S :!100V o-cu`O<F+~t+E10ST:?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<M2R# ,+.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!. 657J<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:<!./Cc 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) ;!VO+[
o
-uv57<:<G657j7 LM7
eval
S|^LM://N:/' 10. 7.Q,)y+. 1[&LMCST:I657A,sj1[ 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"7NzLM1L7z./V+'A;/ 5C+.B657
W!W65C+\657A7 LM7X SG657KLM://N:/' O657^ [S<B S31[P10.3C.Q) +.^6571[&LMC| SQ:Ai [1[.
LM1L7)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^)J0STC9Z1[,: /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"7NLM:/&;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)FeP{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:<!./C01"7N].Q/<L7!.c S i)Y:gPN: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`)8ZAY1)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
Ah
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'&`)!`>^)Pe&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 )1tBF 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)))ReP /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)MO'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`39QH)> 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,=)XeF^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 ,^ _/` Ge ,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^WeP 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/DkW9)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]:<!./C01"7N
LM:</N
:/' C LM7tSQ:z657SQ" u1[7N1"&LM76.
i!o A i;2o # i2o
i,)!o ;
o+go
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);
1Ds1[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 Ro"@
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- - -ndP_`!<:) 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
3Qu 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 70k&[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`:gjL@
+ ,+.<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"'IKQu+.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 ':gIVhh: .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=:g2MS 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/km$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 )^ve/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>FGeb
) 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 ,ceFG,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 P2T) #
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
z4, 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
>^ ePgDF^,=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[7NL=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 3Vhh: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.cZ10d
- ]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`:gz1"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.Iu`![~{2Qu 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[2bc! 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[)JuBeW;!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'ABLYL7<: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<2G_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`GNY<<:<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:!1LtD<-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<:!1Lt 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 )^9e`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^39FReb 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/:!1LtP<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:!:VQ/<+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 FRePJ)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) ) Y9 )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`>)Pefb-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/:!1Lt<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/ -^Cm/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)GFWeF^.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 ,=_ EeP) &^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»³»Á ³ ³³¸Ïij ª¸Ó³£ó©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 ¢¤£³ DNFµ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 ÍïÊ»Ô ÒÉXW çÖµ ɳص 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 º¬
©£³ ±Ä©FNF«©¯³È¶ç£Á«¬º°Á ש« ³¬ 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¥³£¦Ñ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Û UKÉ `Äé ê»ËïËÂǵɳخ٬ÐáÜáñÒËÂǵÛÜÒ Ô×Öµ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Ð UL
É 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 ɳÙÖµËÛÜÊØ¤íËÂǵÉ
Ô×ÊÌÍÂÞ®Ðá ÐçÍÂåÖµÞßÉ³Ø ËÒ
_ ɳÇÚÐKU É áÜÛ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µ
_ ÍäÐÑÍì¿ÛÜØ ËÂÊëÐãØÚÐÞßɳÒîÎ ÐÙÉÌí ÛñØßÊÌÍÂèµÉÍ
ËÂÊ®ÐXU ÊÛÜè Ù³á×ÐçÒÇµÉ³Ò æ ÛñËÇóÖµÒÉÍèÚÉÙ³á×ÐçÍÂÉè½ØÚÐÞßɳÒíÒÉ³É " ÉÙËÂÛÜÊØ \ é é é ÉËÓÖµÒ ÖµÒÉëËÂǵÉëØÚÐÞßɳÒîÎ ÐÙÉ
ǵÉÍÂÉÌé
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)
êØ ËÇ ÐÑË á×ÐçËîËÂÉÍ Ù³ÐÒÉÌí
æ¹ÊÖµáÜè ÇÚÐXU É 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 ÐáñÖ ÐÑËÂÉÓåÛVU ɳØóÔ×ֵصÙËÂÛÜÊØÙ¬ÐáÜá ÉIôP εÍÂɳÒÒÛñÊØÚÒ ®
` æòÍÂÛñËÂÉ ^ Þ¿Ö«ËäÐçËÂÛñØÚå Ó
` Ô×ÖµØÚÙÄËÂÛÜÊØµÒÔ×ÊÌÍåÛVU É³Ø ËäÐÒ ô] Ò³í ÐØµèæòÍÂÛñËÂÉßεÍÂÊåÌÍäÐçÞßÒàÔ×ÊÌÍ åÛVU ÉØËäÐÒ ô] Ò
ß
^
^
^
êØÎ ÐçÍËÂÛñÙ³Öµá×Ðçͬí¯ìÊÖ ÒǵÊÖÚáñè _ ÉãÐ _ÚáÜÉ ËÂÊéé¬é
ËÂÇÚÐçËÈÖµÒÉãÔ×ÖÚØµÙËÛÜÊØµÒ
^
^
`®ÒîÖa_èÚÛ U¥ÛÜèµÉ¹Ð åÛVUɳؿËäÐÒ ] ÛÜØ¯ËÂÊÏÒÞ®ÐáÜá ÒÖ Ú
_ ËÂÐÒ ]¥ÒíôÐØµè æ·ÍÂÛ²ËÂÉÈРεÍÂÊåÌÍÂÐÞ Ô×ÊÌÍÕËÇÚɹåÛVUÉØËäÐÒN]
ËÂÇÚÐçËÈÖµÒɳÒòÔ×ÖµØÚÙÄËÂÛÜÊØµÒÈËÊÍÂɬÐçáÜÛ³É ËÂǵÉÏÒÖ Ú_ ËÂÐÒ ]¥Ò _ ÖµÛÜáÜèÐ áÜÛVµ
_ ÍäÐÑÍì ÊØóìÊֵͷΠáÜÐçËÂÔ×ÊÌÍÂÞ í«åÛVU ÉØóËÂÇÚÐçËòìÊÖ ÐçÍÉâËÂÊáÜèËÇÚÉãØµÉ³Ù³É³ÒÒÐçÍìóËÂÉٴǵصÛÜÙ¬Ðçá
` Ú
èµÉËäÐçÛÜáÜÒ³é
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 ¨½ ³£¦ ³¬¸Óij 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 ³»»Õ©¢ ³ ¦ª ±´©FNF«©¯È¶£º ±Ä¬» »
£³¸ £
±¨ ±Å
¸¹°
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ÉÍì ÍÂɳٳ֫ÍÂÒÛ UbÉâÙ¬Ðáñá ^»æ¹ÉãÇÚÐ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Û UKÉ `Äé ɳٳ֫ÍÂÒÛÜÊØÛÜҷРΠʦæ¹ÉÍÂÔ×Öµá
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
Ë æ¹Ê ÒÊÌÍîËÂɳèóèµÉ³Ù ]¥Òé
ê»Ë·ÛñÒòÐÑÎÚÎ ÐçÍÉ³Ø ËÈÔÜÍÂÊÞ ËÂǵÉÏÔ×ÖÚØµÙËÛÜÊØ _Êôè«ì ^ºÐصèóÐçáÜÒÊ¿ÔÜÍÂÊÞ ÊÖµÍòÛÜØµÔ×ÊÌÍÂÞ®Ðá èµÉ³ÒÙÍÂÛ²ÎÚËÛÜÊØ ÊÔ¾ËÂǵÉ
ÞßÉÍÂåÛñØÚåßεÍÂÊ Ù³É³ÒÒàÐ _ Ê UKÉ `ÓËÂÇÚÐçË
ÙÊÞÀÎÐÑÍÂÛÜÒÊØ ÛÜÒÏØÚÉɳèµÉ³è Ô×ÊÌÍëÉ 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)
ÞßÛÜØ ÖµËɳҳé 2nÖ« ËÓÐ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ÉâÔ×ֵصÙËÂÛÜÊØ Ù¬ÐáÜáñÒ
\ ß
` ËîÍäÐØµÒá×ÐçËÉÍÂɳÙÖµÍÒÛVU ÉßÞ®ÐçËÂǵɳޮÐÑËÂÛÜÙ¬Ðá Ô×ÖÚØµÙËÛÜÊØ èÚÉ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°Á»º
³³¸Ïij 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
ÊÔ¡Ë ì Î É
ÇÚÐXU É
_ É³É³Ø èµÉ Ú
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ÉÍÂáÜÊÐçèÚÉè ÊÌÎÉÍäÐçËÂÊÌÍÒÊØ®ÒîËÍÂÖµÙËÒ³í«ÐÙ³ÙÊÌÍÂèµÛÜØµåâËÂÊ
åÛVU ÉØóÔ×ÖµØÚÙÄËÂÛÜÊØÚÐáÜÛñË ì ^
^
`ßæòÍÂÛñËÂÉ ÎµÍÂÊåÌÍäÐçÞßÒ ËÂÇÚÐçËÈèÚÉ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 È£³ DNFµ 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 È£³ DNFµ µ
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ôÎÚÍɳÒÒÛÜÊØ ÛñÒâÐØ £³á U̬РáñÖÚ£¬É ÛñË 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ËÂÉÄ+Í UcÉÍÒÛÜÊØÝÞßÛÜåÇ¯Ë æ¹ÊÌÍ ] ÛÜØ½Ê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 È£³ DNFµ © 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 ÖµÉ³ØµÙ³É³Ò ÞßɳدËÂÛÜÊØµÉ³è ÛÜØ êÒÒîÖÚÉ Ð _ Ê UKÉ `Äé
êØëÊÌÍÂèµÉÍ¡ËÂÊ·Ù¬ÐçáÜáôйÞßɳÞ_ É;Ô×ֵصÙËÂÛÜÊØ¤í¦æ¹Éصɳɳè ÐØàÉ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ôÉijË£¦ÛÜÞß
Ò ÒîËÂ۲Πֵá×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_ÚáÜÉãËÂÊßÛñˬé êÔ
ìÊÖóÇÚÐXU ÉâÒÉÄË Ö«Î É 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_ Ö«Ë·ØÚÊÌËô_ ìÞÖµÙäÇ
^ [
ÊØ ÐKU ÉÄÍäÐåÉ Î ÉÍÏÍÂÊÖµØÚè Ä` é ¥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 È£³ DNFµ®©â¶Ä»¾»¨¿¢¾§³¨½³¤î©¯î
¶룩¯ ©¯ ¨½ ³£¦ß©¯ © ±¬×©¯³ 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¼ÛÜØµèµÊÑæ·Ò³í !
æ Û²ÍÂɳÔÜÍäÐÞßÉ ÞßÊ èµÉ³áí \ )
åÌÍäÐçÎÚǵÛÜÙ³Ò¹Ô×ÊÌÍÂÞ®ÐçË¬í ³ÉÍÊ ºÛÜØµÛñËÂÛÜÐáÜÛ¬ÐÑËÂÛÜÊØ¤í
³ÉÍÊ ËÂÉÍÞßÛÜØÚÐçËÂɳè ÐçÍÍäгìí
© Copyright 2026 Paperzz