! " $#&%' (*),+- (.)/+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 2025 Paperzz