ایران سرفراز- نرم افزار وپروژهای دانشجویی


نرم افزار وپروژهای دانشجویی

فصل سوم انشعاب

<!-- /* Font Definitions */ @font-face {font-family:Helvetica; panose-1:2 11 5 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Courier; panose-1:2 7 4 9 2 2 5 2 4 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Tms Rmn"; panose-1:2 2 6 3 4 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Helv; panose-1:2 11 6 4 2 2 2 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"New York"; panose-1:2 4 5 3 6 5 6 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:System; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"MS Mincho"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-alt:"MS 明朝"; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Batang; panose-1:2 3 6 0 0 1 1 1 1 1; mso-font-alt:바탕; mso-font-charset:129; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:宋体; mso-font-charset:134; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:PMingLiU; panose-1:2 1 6 1 0 1 1 1 1 1; mso-font-alt:新細明體; mso-font-charset:136; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1 134742016 16 0 1048576 0;} @font-face {font-family:"MS Gothic"; panose-1:2 11 6 9 7 2 5 8 2 4; mso-font-alt:"MS ゴシック"; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Dotum; panose-1:2 11 6 0 0 1 1 1 1 1; mso-font-alt:돋움; mso-font-charset:129; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:SimHei; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:黑体; mso-font-charset:134; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:MingLiU; panose-1:2 1 6 9 0 1 1 1 1 1; mso-font-alt:細明體; mso-font-charset:136; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134742016 16 0 1048576 0;} @font-face {font-family:Mincho; panose-1:2 2 6 9 4 3 5 8 3 5; mso-font-alt:明朝; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Gulim; panose-1:2 11 6 0 0 1 1 1 1 1; mso-font-alt:굴림; mso-font-charset:129; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:Century; panose-1:2 4 6 3 5 7 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Angsana New"; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65537 0;} @font-face {font-family:"Cordia New"; panose-1:2 11 3 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65537 0;} @font-face {font-family:Mangal; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:32768 0 0 0 0 0;} @font-face {font-family:Latha; panose-1:2 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1048576 0 0 0 0 0;} @font-face {font-family:Sylfaen; panose-1:1 10 5 2 5 3 6 3 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:67110535 0 0 0 159 0;} @font-face {font-family:Vrinda; panose-1:1 1 6 0 1 1 1 1 1 1; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:65539 0 0 0 1 0;} @font-face {font-family:Raavi; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131072 0 0 0 0 0;} @font-face {font-family:Shruti; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:262144 0 0 0 0 0;} @font-face {font-family:Sendnya; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Gautami; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:2097152 0 0 0 0 0;} @font-face {font-family:Tunga; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:4194304 0 0 0 0 0;} @font-face {font-family:"Estrangelo Edessa"; panose-1:3 8 6 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:-2147459008 0 128 0 0 0;} @font-face {font-family:"Arial Unicode MS"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:1627421319 -2147483648 8 0 66047 0;} @font-face {font-family:BNazaninBold; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-alt:"Times New Roman"; mso-font-charset:178; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:"Adobe Caslon Pro Bold"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Adobe Caslon Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Adobe Garamond Pro Bold"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Adobe Garamond Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Arno Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Caption"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Display"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro SmText"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Subhead"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Light Display"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Smbd"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Smbd Caption"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Smbd Display"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Smbd SmText"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arno Pro Smbd Subhead"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Bell Gothic Std Black"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bell Gothic Std Light"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bickham Script Pro Regular"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:script; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:7 0 0 0 147 0;} @font-face {font-family:"Bickham Script Pro Semibold"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:script; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:7 0 0 0 147 0;} @font-face {font-family:"Birch Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Blackoak Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Brush Script Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Chaparral Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Charlemagne Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Cooper Std Black"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eccentric Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Garamond Premr Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Garamond Premr Pro Smbd"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Giddyup Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Hobo Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Kozuka Gothic Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Gothic Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Gothic Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro B"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro EL"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro H"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro L"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro M"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Kozuka Mincho Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"\@Kozuka Mincho Pro R"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:515 134676480 16 0 131077 0;} @font-face {font-family:"Letter Gothic Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Lithos Pro Regular"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Mesquite Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Minion Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Minion Pro Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Minion Pro Med"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Minion Pro SmBd"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Myriad Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Myriad Pro Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Myriad Pro Light"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Nueva Std Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"OCR A Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Orator Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Poplar Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Prestige Elite Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Rosewood Std Regular"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Stencil Std"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Tekton Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Tekton Pro Cond"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Tekton Pro Ext"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:"Trajan Pro"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:135 0 0 0 155 0;} @font-face {font-family:Marlett; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Lucida Console"; panose-1:2 11 6 9 4 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-2147482993 6144 0 0 31 0;} @font-face {font-family:"Lucida Sans Unicode"; panose-1:2 11 6 2 3 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-2147476737 14699 0 0 63 0;} @font-face {font-family:Verdana; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:536871559 0 0 0 415 0;} @font-face {font-family:"Arial Black"; panose-1:2 11 10 4 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Comic Sans MS"; panose-1:3 15 7 2 3 3 2 2 2 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Impact; panose-1:2 11 8 6 3 9 2 5 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Georgia; panose-1:2 4 5 2 5 4 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Medium"; panose-1:2 11 6 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Palatino Linotype"; panose-1:2 4 5 2 5 5 5 3 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-536870009 1073741843 0 0 415 0;} @font-face {font-family:"Trebuchet MS"; panose-1:2 11 6 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Webdings; panose-1:5 3 1 2 1 5 9 6 7 3; mso-font-charset:2; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"MV Boli"; panose-1:2 0 5 0 3 2 0 9 0 0; mso-font-charset:1; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 0 256 0 0 0;} @font-face {font-family:AngsanaUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65536 0;} @font-face {font-family:BrowalliaUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65536 0;} @font-face {font-family:"Browallia New"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65537 0;} @font-face {font-family:CordiaUPC; panose-1:2 11 3 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777219 0 0 0 65536 0;} @font-face {font-family:DilleniaUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:EucrosiaUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:FreesiaUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:IrisUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:JasmineUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:KodchiangUPC; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:LilyUPC; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:Aharoni; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:David; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"David Transparent"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:FrankRuehl; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Levenim MT"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:Miriam; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Miriam Transparent"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Miriam Fixed"; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Fixed Miriam Transparent"; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:Narkisim; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:Rod; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Rod Transparent"; panose-1:0 0 0 9 0 0 0 0 0 0; mso-font-charset:177; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:6145 0 0 0 32 0;} @font-face {font-family:"Traditional Arabic"; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:24577 0 0 0 64 0;} @font-face {font-family:"Arabic Transparent"; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:Andalus; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:24577 0 0 0 64 0;} @font-face {font-family:"Simplified Arabic"; panose-1:2 1 0 0 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:"Simplified Arabic Fixed"; panose-1:2 1 0 9 0 0 0 0 0 0; mso-font-charset:178; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:8193 0 0 0 64 0;} @font-face {font-family:Kartika; panose-1:2 2 5 3 3 4 4 6 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:8388611 0 0 0 1 0;} @font-face {font-family:"\@MS Gothic"; panose-1:2 11 6 9 7 2 5 8 2 4; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:FantasyMatrix; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:FantasyMatrixSmall; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Jokerman Alts LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"University Roman Alts LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Smudger Alts LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"HolidayPi BT"; panose-1:5 12 1 2 1 2 9 2 2 2; mso-font-charset:2; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"OldDreadfulNo7 BT"; panose-1:4 8 8 5 6 1 7 1 8 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"MisterEarl BT"; panose-1:3 8 8 2 2 3 2 2 2 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Calligraph421 BT"; panose-1:3 6 7 2 5 4 2 2 2 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Blackletter686 BT"; panose-1:3 4 8 2 2 6 8 4 8 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Cataneo BT"; panose-1:3 2 8 2 4 5 2 6 8 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Staccato222 BT"; panose-1:3 9 7 2 3 4 7 2 4 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"ParkAvenue BT"; panose-1:3 2 6 2 5 5 6 8 7 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Square721 BT"; panose-1:2 11 5 4 2 2 2 6 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Broadway BT"; panose-1:4 4 9 5 8 11 2 2 5 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:135 0 0 0 27 0;} @font-face {font-family:"Microsoft Sans Serif"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:1627421663 -2147483648 8 0 66047 0;} @font-face {font-family:"Scruff LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Odessa LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Highlight LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"One Stroke Script LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Mekanik LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Tiranti Solid LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Pump Demi Bold LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Quixley LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"La Bamba LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Rage Italic LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Ruach LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Westwood LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Smudger LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Milano LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Victorian LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"University Roman LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Academy Engraved LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Orange LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"John Handy LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Jokerman LET"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:131 0 0 0 9 0;} @font-face {font-family:"Agency FB"; panose-1:2 11 5 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Arial Narrow"; panose-1:2 11 5 6 2 2 2 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Arial Rounded MT Bold"; panose-1:2 15 7 4 3 5 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Blackadder ITC"; panose-1:4 2 5 5 5 16 7 2 13 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bodoni MT"; panose-1:2 7 6 3 8 6 6 2 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bodoni MT Black"; panose-1:2 7 10 3 8 6 6 2 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Bodoni MT Condensed"; panose-1:2 7 6 6 8 6 6 2 2 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Book Antiqua"; panose-1:2 4 6 2 5 3 5 3 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Bookman Old Style"; panose-1:2 5 6 4 5 5 5 2 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Bradley Hand ITC"; panose-1:3 7 4 2 5 3 2 3 2 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Calisto MT"; panose-1:2 4 6 3 5 5 5 3 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Castellar; panose-1:2 10 4 2 6 4 6 1 3 1; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Century Gothic"; panose-1:2 11 5 2 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Century Schoolbook"; panose-1:2 4 6 4 5 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Copperplate Gothic Bold"; panose-1:2 14 7 5 2 2 6 2 4 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Copperplate Gothic Light"; panose-1:2 14 5 7 2 2 6 2 4 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Curlz MT"; panose-1:4 4 4 4 5 7 2 2 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Edwardian Script ITC"; panose-1:3 3 3 2 4 7 7 13 8 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Elephant; panose-1:2 2 9 4 9 5 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Engravers MT"; panose-1:2 9 7 7 8 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Bold ITC"; panose-1:2 11 9 7 3 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Demi ITC"; panose-1:2 11 8 5 3 5 4 2 8 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Light ITC"; panose-1:2 11 4 2 3 5 4 2 8 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Eras Medium ITC"; panose-1:2 11 6 2 3 5 4 2 8 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Felix Titling"; panose-1:4 6 5 5 6 2 2 2 10 4; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Forte; panose-1:3 6 9 2 4 5 2 7 2 3; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Franklin Gothic Book"; panose-1:2 11 5 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Demi"; panose-1:2 11 7 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Demi Cond"; panose-1:2 11 7 6 3 4 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Heavy"; panose-1:2 11 9 3 2 1 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Franklin Gothic Medium Cond"; panose-1:2 11 6 6 3 4 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"French Script MT"; panose-1:3 2 4 2 4 6 7 4 6 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Garamond; panose-1:2 2 4 4 3 3 1 1 8 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:Gigi; panose-1:4 4 5 4 6 16 7 2 13 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Gill Sans MT Ext Condensed Bold"; panose-1:2 11 9 2 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans MT"; panose-1:2 11 5 2 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans MT Condensed"; panose-1:2 11 5 6 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans Ultra Bold"; panose-1:2 11 10 2 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gill Sans Ultra Bold Condensed"; panose-1:2 11 10 6 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Gloucester MT Extra Condensed"; panose-1:2 3 8 8 2 6 1 1 1 1; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Goudy Old Style"; panose-1:2 2 5 2 5 3 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Goudy Stout"; panose-1:2 2 9 4 7 3 11 2 4 1; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Haettenschweiler; panose-1:2 11 7 6 4 9 2 6 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"Imprint MT Shadow"; panose-1:4 2 6 5 6 3 3 3 2 2; mso-font-charset:0; mso-generic-font-family:decorative; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"MS Outlook"; panose-1:5 1 1 0 1 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Maiandra GD"; panose-1:2 14 5 2 3 3 8 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Monotype Corsiva"; panose-1:3 1 1 1 1 2 1 1 1 1; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"OCR A Extended"; panose-1:2 1 5 9 2 1 2 1 3 3; mso-font-charset:0; mso-generic-font-family:modern; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Palace Script MT"; panose-1:3 3 3 2 2 6 7 12 11 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Papyrus; panose-1:3 7 5 2 6 5 2 3 2 5; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Perpetua; panose-1:2 2 5 2 6 4 1 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Perpetua Titling MT"; panose-1:2 2 5 2 6 5 5 2 8 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Pristina; panose-1:3 6 4 2 4 4 6 8 2 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Rage Italic"; panose-1:3 7 5 2 4 5 7 7 3 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Rockwell; panose-1:2 6 6 3 2 2 5 2 4 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Rockwell Condensed"; panose-1:2 6 6 3 5 4 5 2 1 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Rockwell Extra Bold"; panose-1:2 6 9 3 4 5 5 2 4 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Script MT Bold"; panose-1:3 4 6 2 4 6 7 8 9 4; mso-font-charset:0; mso-generic-font-family:script; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Tw Cen MT"; panose-1:2 11 6 2 2 1 4 2 6 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Tw Cen MT Condensed"; panose-1:2 11 6 6 2 1 4 2 2 3; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:"Wingdings 2"; panose-1:5 2 1 2 1 5 7 7 7 7; mso-font-charset:2; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Wingdings 3"; panose-1:5 4 1 2 1 8 7 7 7 7; mso-font-charset:2; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Bookshelf Symbol 7"; panose-1:5 1 1 1 1 1 1 1 1 1; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Lucida Sans"; panose-1:2 11 6 2 3 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Lucida Sans Typewriter"; panose-1:2 11 5 9 3 5 4 3 2 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"MS Reference Sans Serif"; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:536871559 0 0 0 415 0;} @font-face {font-family:"MS Reference Specialty"; panose-1:5 0 5 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Tw Cen MT Condensed Extra Bold"; panose-1:2 11 8 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:7 0 0 0 3 0;} @font-face {font-family:ZWAdobeF; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:536885895 0 0 0 511 0;} @font-face {font-family:"Euro Sign"; panose-1:2 11 6 3 2 2 1 2 1 1; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:3 2 0 0 1 0;} @font-face {font-family:"Lucida Bright"; panose-1:2 4 6 3 7 5 5 2 4 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:7 0 0 0 147 0;} @font-face {font-family:CourierNewPSMT; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:CourierNewPS-BoldMT; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:SymbolMT; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-alt:"MS Gothic"; mso-font-charset:128; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:1 134676480 16 0 131072 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} ins {mso-style-type:export-only; text-decoration:none;} span.msoIns {mso-style-type:export-only; mso-style-name:""; text-decoration:underline; text-underline:single;} span.msoDel {mso-style-type:export-only; mso-style-name:""; text-decoration:line-through; color:aqua;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

فصل سوم

انشعاب

آنچه که در این فصل یاد خواهید گرفت

- نحوهی استفاده از انشعاب برای کنترل روند اجرای برنامه

و ...) if else ،if ،goto) - دستورات انشعاب شرطی و غیرشرطی

(do while ،for ،while ) - دستورات تکرار برنامه به تعداد معین و نامعین

(continue ،break) - خروج از بدنه حلقه و نادیده گرفتن برخی از دستورات حلقه و برگشت به ابتدای حلقه

مقدمه

همه دستورات برنامهی شما به ترتیب اجرا م یشوند. متاسفانه آن زیاد سودمند نیست، مگر اینکه شما بخواهید برنام هتان در

هر بار اجرا دقیقا کار یکسانی انجام دهد. در حقیقت اغلب نمی خواهید همه کد اجرا شوند، بلکه می خواهید متناسب با مقدار

یک متغیر کاری انجام شود یا نشود. این بدین معنی است که شما نیاز دارید برنامه ی خود را قادر سازید در زمان اجرا

براساس شرایط برنامه، دستوراتی را انتخاب کرده و اجرا کند، این پروسه انشعاب 1 خوانده م یشود و دو روش برای انجام آن

وجود دارد: غیرشرطی 2 یا شرطی 3. همانطور که از نامش پیداست، انشعاب غیرشرطی در هر زمان که اجرای برنامه به آنجا

برسد اتفاق می افتد. برای مثال، زمانی که کامپایلر با فراخوانی یک متد مواجه می شود، یک انشعاب غیرشرطی اتفاق می افتد.

کامپایلر اجرای متد جاری را متوقف می کند و به متد فراخوانی شده می رود. زمانی که متد فراخوانی شده تمام شود، اجرای

برنامه به دستور بعد از فراخوانی متد در متد اصلی بر می گردد.

انشعاب شرطی، پیچیدهتر است. در زمان اجرا متدها براساس ارزیابی شرطی های معینی می توانند منشعب شوند. برای مثال،

ممکن است یک انشعاب ایجاد کنید تا فقط در صورتی که درآمد کارمندان پیمانی از یک میزان بیشتر باشد، مالیات آن را

.if, else, switch تعدادی دستور فراهم می سازد که انشعاب شرطی را پشتیبانی م یکنند، همچون #C . محاسبه کند

کاربرد این دستورت بعداً در این فصل بررسی می شوند.

روش دیگری که پردازش گامبهگام دستورات را می شکند، بوسیله ایجاد حلقه است. یک حلقه باعث میشود، یک مجموعه از

دستورات تا زمانی که شرطی برقرار است تکرار گردند. ("برنامه داده هایی را از ورودی می گیرد تا زمانیکه کاربر دستور توقف

1 Branching

2 unconditional

3 Conditional

#C برنامه نویسی

57

در do while, while, for چندین دستور برای ایجاد حلقه فراهم می کند، که #C .(" دهد یا 10 عدد دریافت شده باشد

این فصل بررسی خواهند شد.

-1-3 دستورات انشعاب غیرشرطی

سادهترین مثال برای انشعاب غیرشرطی فراخوانی متد است. زمانی که یک فراخوانی متد فرا می رسد، هیج عمل تست برای

ارزیابی حالت شی انجام نمیشود. برنامه برای شروع متد جدید فورا منشعب می شود. می توانید یک متد را بوسیله نوشتن نام

آن فراخوانی کنید. برای مثال :

UpdateSalary ( ) ; // invokes the method up date salary

همانطور که قبلا در این فصل شرح دادیم، زمانی که کامپایلر با یک فراخوانی متد مواجه می شود، اجرای متد جاری را متوقف

می کند و به متد جدید منشعب م یشود. زمانی که متد جدید اجرایش را کامل می کند، کامپایلر به متد اصلی بر می گردد. این

1 بصورت شماتیک نشان داده می شود. - پروسه در شکل 3

1- اجرای یک برنامه دارای چند متد - شکل 3

1 اجرای - 1 پیش بینی می کند، انشعاب غیرشرطی چندین متد کاملاً طبیعی و معمول است. در شکل 3 - همانطور که شکل 3

()1Method شروع می شود. دستور اول و دوم خود را اجرا می کند. سپس کامپایلر فراخوانی متد ()Main برنامه در متدی بنام

1() انشعاب می کند، تا سه دستور اول آن اجرا می شود. با Method را می بیند. برنامه بصورت غیرشرطی به خط اول متد

است. ()A1Method مجدداً اجرای برنامه منشعب می شود. این انشعاب برای شروع اجرای ()A1Method رسیدن به فراخوانی

بر می گردد. اجرای برنامه با اولین دستور بعد از فراخوانی ()A1Method اجرا م یگردد و از ()A1Method چهار دستور

1() ادامه می یابد. در این لحظه اجرای برنامه به دستور سوم در Method 1() ادامه می یابد. اجرای برنامه تا انتهای Method در

2() اجرا Method 2() اجرای برنامه منشعب می شود. همه دستورات Method بر می گردد. مجددا در فراخوانی ()Main

پایان می یابد، خود برنامه پایان می پذیرد. ()Main ادامه می یابد. زمانی که ()Main می گردد و سپس دستور چهارم

شروع می شود، اما به یک متد بنام ()Main 1 ببینید. اجرا در - می توانید تاثیر فراخوانی های متد را در مثال 3

در هر متد برای نشان دادن محلی است که برنامه در حال اجرا ()WriteLine انشعاب می کند. دستورات ()SomeMethod

است.

1- مثال 3

using System;

class Functions

{

static void Main( )

200f6/

فصل سوم- انشعاب

58

{

Console.WriteLine( "In Main! Calling SomeMethod( )..." );

SomeMethod( );

Console.WriteLine( "Back in Main( )." );

}

static void SomeMethod( )

{

Console.WriteLine( "Greetings from SomeMethod!" );

}

}

خروجی بصورت زیر است :

In Main! Calling SomeMethod( )...

Greetings from SomeMethod!

Back in Main( ).

پیش می رود. (بعضی مواقع احضار یک متد را بصورت ()SomeMethod شروع می شود و تا احضار ()Main جریان برنامه در

فراخوانی متد بیان می کنند). در آن نقطه جریان برنامه به متد منشعب م یشود. زمانی که متد کامل می شود، جریان برنامه با

دستور بعد از فراخوانی متد ادامه می یابد.

break, continue, و goto م یتوانید با استفاده از یکی از کلمات کلیدی انشعاب غیرشرطی همچون

یک انشعاب غیرشرطی را ایجاد کنید. چهار مورد اول در این فصل بررسی م یشوند. throw یا return

-2-3 دستورات انشعاب شرطی

اگرچه متدها بصورت غیرشرطی انشعاب میکنند، اغلب میخواهید براساس شرطی که در طول اجرای برنامه ارزیابی

میکنید، انشعاب نمایید، این عمل با عنوان انشعاب شرطی معروف است. دستورات انشعاب شرطی به شما اجازه میدهند،

منطقی همچون " اگر سن شما بالای 25 سال است، ممکن است یک ماشین کرایه کرده باشید" را بنویسید.

تعدادی ساختار فراهم میکند که به شما اجازه می دهند، انشعابهای شرطی در برنامههایتان بنویسید. این ساختارها در #C

بخشهای بعدی شرح داده میشوند.

if -1-2 دستورات -3

میگوید: اگر یک شرط برقرار است، پس دستوراتی را اجرا کن، در غیر if سادهترین دستور انشعاب است. دستور if

اینصورت از آنها بگذر. شرط یک عبارت بولین است. این عبارت شامل دستوراتی است که به یک مقدار ارزیابی میشود. یک

ارزیابی میشود. false یا true عبارت بولین با مقدار

بصورت زیر است: if توصیف رسمی دستور

if ( (عبارت

دستور 1

عبارت if است که در مستندات کامپایلر مییابید. آن به شما نشان میدهد، دستور if این ساختار نوعی توصیف از دستور

ارزیابی گردد، دستور 1 اجرا می شود. توجه کنید که دستور 1 true را در داخل پرانتزها م یگیرد و اگر عبارت به مقدار

2 ارائه شده است.) - می تواند یک بلوک از دستورات در داخل {} باشد. (همانطور که در مثال 3

2 - مثال 3

using System;

namespace Branching

{

class Test

{

#C برنامه نویسی

59

static void Main( )

{

int valueOne = 10;

int valueTwo = 20;

int valueThree = 30;

Console.WriteLine( "Testing valueOne against valueTwo..." );

if ( valueOne > valueTwo )

{

Console.WriteLine( "ValueOne: {0} larger than ValueTwo: {1}",valueOne,

valueTwo );

}

Console.WriteLine( "Testing valueThree against valueTwo..." );

if ( valueThree > valueTwo )

{

Console.WriteLine( "ValueThree: {0} larger than ValueTwo: {1}",

valueThree, valueTwo );

} // end if

} // end Main

} // end class

} // end namespace

که م یتوانید یک دستور بنویسید، م یتوانید بجای آن بلوکی از دستورات را در داخل {} #C در هر جایی از

بنویسید.

20 و 30 اعلان گردید. ، به ترتیب با مقادیر 10 valueOne,valueTwo,valueThree در این برنامهی ساده، سه متغیر

است: valueTwo بزرگتر از valueOne اول تست میکند، آیا if دستور

if (ValueOne>ValueTwo)

{

Console Write Line("Value One:{0}Laser then Value Two: {1}"

ValueOne , ValueTwo);

}

بر میگرداند) و false شکست میخورد ( مقدار if 20 ) است، دستور valueTwo( 10 ) کوچکتر از valueOne( چون

است: valueTwo بزرگتر از valueThree را اجرا نمیکند. سپس تست می کند آیا if بدنهی دستور

if (ValueThree>ValueTwo)

{

Console. Write Line("Value Three:{0}longer than Value Two:{1}",

Value Three , Value Two);

}

بر میگرداند، سپس دستور را اجرا true 20 ) است، عبارت بولین مقدار valueTwo( 30 ) بزرگتر از valueThree( چون

اول if فراخوانی میشود. خروجی منعکس میکند که WriteLine میکند. دستور در این مثال بلوکی است که متد

دوم موفق است. if شکست میخورد، ولی

Testing Value One against Value Two….

Testing Value Three against Value Two…

Value Three : 30 larger than Value Two : 20

if -2-2 بلوک های تک دستوری -3

2 هر کدام فقط یک دستور واحد در بردارند( یک فراخوانی - نشان داده شده در مثال 3 if توجه کنید که بلوک دستورهای

2 را - را ننویسید. پس ممکن است مثال 3 if در چنین مواردی میتوانید آکولادهای باز و بسته بلوک .(()WriteLine از

3 نشان داده شده، رونویسی کنید. - بصورتی که در مثال 3

فصل سوم- انشعاب

60

using System;

namespace Branching

{

class Test

{

static void Main( )

{

int valueOne = 10;

int valueTwo = 20;

int valueThree = 30;

Console.WriteLine( "Testing valueOne against valueTwo..." );

if ( valueOne > valueTwo )

Console.WriteLine( "ValueOne: {0} larger than ValueTwo: {1}",

valueOne, valueTwo );

Console.WriteLine( "Testing valueThree against valueTwo..." );

if ( valueThree > valueTwo )

Console.WriteLine( "ValueThree: {0} larger than ValueTwo: {1}",

valueThree, valueTwo );

} // end Main

} // end class

} // end namespace

باشد، استفاده از آکولادها ایده خوبی است. دو دلیل وجود دارد: if حتی در صورتی که فقط یک دستور در بلوک

اول اینکه، خواندن و فهم کدها بوسیله آکولادها راحتتر است. کدی که خواندن آن راحتتر باشد نگهداری آن نیز راحتتر

است.

منظور از نگهداری کد تغییراتی است که با تغییر نیازها یا رفع عیوب بر روی دستورات داده م یشود.

اضافه میشود، اضافه کردن if دلیل دوم استفاده از آکولادها، دوری از یک خطای معمول است. وقتی دستور دیگری به

را به 3 تغییر valueThree 4 را ملاحظه کنید. برنامهنویس مقدار - آکولادها فراموش میشود. کد نشان داده شده در مثال 3

اضافه کرده است. if داده است و یک دستور دوم به بلوک

4- مثال 3

using System;

namespace Branching

{

class Test

{

static void Main( )

{

int valueOne = 10;

int valueTwo = 20;

int valueThree = 10;

Console.WriteLine( "Testing valueOne against valueTwo..." );

if ( valueOne > valueTwo )

Console.WriteLine( "ValueOne: {0} larger than ValueTwo: {1}",

valueOne, valueTwo );

Console.WriteLine( "Testing valueThree against valueTwo..." );

if ( valueThree > valueTwo )

Console.WriteLine( "ValueThree: {0} larger than ValueTwo: {1}",

valueThree, valueTwo );

Console.WriteLine( "Good thing you tested again!" );

} // end Main

} // end class

} // end namespace

#C برنامه نویسی

61

حال قبل از خواندن هر چیزی، کد را مرور کرده و خودتان تصمیم بگیرید که خروجی چه چیزی باید باشد. با نگاهکردن به

پاراگراف قبلی گول نخورید. پس با اینکه فکر می کنید که می دانید خروجی چه چیزی خواهد شد، به موارد زیر نگاهی

بیاندازید.

Testing Value One against Value Two

Testing Value Three against Value Two

Good thing you tested again

آیا متعجب شدید ؟

برنامهنویس به دلیل فقدان آکولادها و فرورفتگی فریب میخورد. بخاطر دارید که فرورفتگی یک فضای خالی است و بوسیله

است. if بخشی از بلوک (" Good thing ..." ) کامپایلر نادیده گرفته میشود. از نگاه برنامهنویس دستور دوم

if ( valueThree > valueTwo )

Console.WriteLine( "ValueThree: {0} larger than ValueTwo: {1}",

valueThree, valueTwo);

Console.WriteLine("Good thing you tested again!");

نیست. از نظر if را به عنوان بدن هی آن اجرا میکند. دستور دوم بخشی از دستور if کامپایلر فقط اولین دستور بعد از

شبیه زیر است . if کامپایلر دستور

if ( valueThree > valueTwo )

Console.WriteLine(“ValueThree: {0} larger than ValueTwo:{1}", valueThree,

valueTwo);

Console.WriteLine("Good thing you tested again!");

باشد، بایستی همانطور که در زیر میبینید، آکولادها را بکار برید. if اگر می خواهید دستور دوم بخشی از

if ( valueThree > valueTwo )

{

Console.WriteLine( "ValueThree: {0} larger than ValueTwo: {1}",

valueThree, valueTwo);

Console.WriteLine("Good thing you tested again!");

}

if آکولادها را بکار می برند، حتی اگر بدنه if به دلیل جلوگیری از سردرگمی، در همه دستورات #C بیشتر برنام هنویسان

فقط یک خط باشد.

سبک های آکولادها

وجود دارد، اما بیشتر برنامهنویسان یکی از سه سبک را بکار خواهند if چندین روش برای شکل دادن آکولادها در دستور

برد.

سبک اول

if (condition)

{

// statement

}

سبک دوم

if (condition)

{

// statement

}

سبک سوم

if (condition){

// statement

}

فصل سوم- انشعاب

62

سه سبک مختلف

را تو رفته if قرار میدهد و محتوای بلوک if سبک اول که در این کتاب استفاده میشود، آکولادها را در زیر کلمه کلیدی

میکند. سبک دوم کمتر استفاده میشود. آکولادها را به همراه محتوای آنها تو رفته میکند. سبک سوم آکولاد باز را در

معروف است.( اختصار K&R قرار می دهد. سبک سوم به سبک if و آکولاد بسته را در زیر دستور if همان خط دستور

هستند. کتاب آنها بسیار بانفوذ بود که C که نویسندگان اولین کتاب زبان برنامهنویسی (Kernighan ,Ritchie کلمات

کمتر واضح است، این کتاب K&R بیشتر برنامهنویسان یک تعهد قوی به این سبک آکولادها احساس میکنند. چون سبک

اولین سبک را بکار خواهد برد.

-3-2 ارزیابی کوتاه 1 -3

قطعه کد زیر را ملاحظه کنید:

int x=8;

int y= 15;

if ( ( x==8) // ( y==12) )

ارزیابی true پرانتزگذاری شده است، پس باید پارانتزهای بیرونی به if کمی پیچیده است. کل دستور if در اینجا دستور

12 ) که y==) 8) و x==) : ارزیابی شود. در داخل پارانتزهای بیرونی دو عبارت وجود دارد true به if شوند تا اینکه دستور

ارزیابی میشود و لازم true 8) به x==) مساوی 8 است، عبارت اول x مجزا می شوند. چون (||) or بوسیله یک عملگر

ارزیابی میشود. true مساوی 12 است، مهم نیست و کل عبارت به y 12 ) ارزیابی گردد و اینکه آیا y==) نیست عبارت دوم

بطور مشابه این قطعه کد را ملاحظه کنید:

int x=8;

int y=12;

if ( ( x==5) & & (y==12) )

ارزیابی خواهد شد. در چنین false به and است، عمل false باز نیازی نیست عبارت دوم ارزیابی شود، چون عبارت اول

ارزیابی کوتاه انجام خواهد داد. تست دوم هرگز انجام نخواهد شد. این ویژگی به شما اجازه م یدهد، آن #C مواردی کامپایلر

را قبل از انجام هر کاری روی مقدار تست کنید که از احتمال یک استثناء دوری میکند. این یک مثال کوتاه است.

public bool QuotientOverTwenty(float dividend, float divisor)

{

if ( divisor != 0 && dividend / divisor > 20 )

{

return true;

}

return false;

}

در این کد فقط میخواهیم تصمیم بگیریم آیا باقیمانده بزرگتر از 20 است. اما برای دوری از استثناء تقسیم بر صفر بایستی

ارزیابی شود، هرگز بخش false به if مطمئن شویم که مقسوم علیه صفر نباشد. با ارزیابی کوتاه در صورتی که بخش اول

دوم اجرا نخواهد شد. دوماً اینکه مختصر بوده و فهم آن سادهتر از نوشتن آن است.

public bool QuotientOverTwenty(float dividend, float divisor)

{

bool retVal = false;

1 Short circuit evaluation

#C برنامه نویسی

63

if ( divisor != 0 )

{

if ( dividend / divisor > 20 )

retVal = true;

}

return retVal;

}

if.. else -4-2 دستورات -3

است، یک مجموعه از دستورات اجرا شود، در غیر اینصورت true اغلب میخواهید با توجه به اینکه نتیجه یک شرط

مجموعه دیگری اجرا گردد. این عمل یک منطق همانند این را مجاز می دارد:" اگر سن شما بیشتر از 25 باشد، ممکن است

یک ماشین کرایه کرده باشید، در غیر این صورت بایستی از قطار استفاده کنید".

2 را تغییر دهید - اجرا میشود. برای مثال، می توانید مثال 3 else بخش مربوط به " در غیر اینصورت" منطق بالا، در دستور

5 می بینید. - است یا نه؟ پیام مناسبی چاپ کند. همانطور که در مثال 3 valueTwo بزرگتر از valueOne تا با اینکه آیا

5 - مثال 3

using System;

namespace Branching

{

class Test

{

static void Main( )

{

int valueOne = 10;

int valueTwo = 20;

Console.WriteLine( "Testing valueOne against valueTwo..." );

if ( valueOne > valueTwo )

{

Console.WriteLine( "ValueOne: {0} larger than ValueTwo: {1}",

valueOne, valueTwo );

} // end if

else

{

Console.WriteLine("Nope, ValueOne: {0} is NOT larger than ValueTwo:

{1

}", valueOne, valueTwo );

} // end else

} // end Main

} // end class

} // end namespace

خروجی بصورت زیر است :

Testing valueOne against valueTwo...

Nope, ValueOne: 10 is NOT larger than ValueTwo: 20

اجرا م یشود و در صورتی که else رد شده و بدنه دستور if شکست میخورد، بدنه دستور if چون عمل تست در دستور

رد خواهد شد. else اجرا میشود و بدنه دستور if تست موف قآمیز باشد، بدنه دستور

فصل سوم- انشعاب

64

تو در تو if -5-2 دستورات -3

امکان پذیر است. برای مثال، فرض کنید یک برنامهای نیاز if برای ادارهکردن شرطهای پیچیده، تودرتو کردن دستورهای

دارید که دما را ارزیابی کرده و اطلاعات زیر را برگرداند:

- اگر دما کمتر از 32 درجه باشد، باید یخ زدگی جاده را هشدار دهد.

- اگر دما دقیقا مساوی 32 درجه باشد، باید به شما درباره احتمال یخ زدگی گزارش دهد.

- اگر دما بزرگتر از 32 درجه باشد، باید اطمینان دهد که یخ زدگی اصلا وجود ندارد.

تودرتو if 6 یکی از این رو شها را با استفاده از دستور - راههای مناسب زیادی برای نوشتن این برنامه وجود دارد. مثال 3

ارائه میکند.

6- مثال 3

using System;

class Values

{

static void Main( )

{

int temp = 32;

if ( temp <= 32 )

{

Console.WriteLine( "Warning! Ice on road!" );

if ( temp == 32 )

{

Console.WriteLine("Temp exactly freezing, beware of water." );

}

else

{

Console.WriteLine( "Watch for black ice! Temp: {0}", temp );

}

}

}

}

6 بدین صورت است: ابتدا تست میکند آیا دما کمتر یا مساوی 32 است. اگر باشد، یک هشدار چاپ می کند: - منطق مثال 3

if ( temp<=32)

Console. Write line ( " warning Ice on road ");

سپس برنامه بررسی م یکند، آیا دما مساوی 32 درجه است، اگر باشد یک پیام چاپ میکند و اگر نباشد، باید دما کمتر از 32

بوده و برنامه پیام بعدی را چاپ میکند.

بدین صورت است: " چون آن انجام نشده پس else اول است. پس منطق if دوم درون دستور if توجه کنید که دستور

دما کمتر یا مساوی 32 است و چون مساوی 32 نیست، پس باید کمتر از 32 باشد".

بکار میبرند. #C است، که بعضی از برنامهنویسان else if بوسیله عبارت if روش دیگر، زنجیرکردن بیش از یک دستور

دیگری if عبور میکند، که با دستور else باشد، کنترل برنامه به false اول را تست میکند. اگر if برنامه شرط دستور

6 را رونویسی کنید تا با سه تست مشخص - دنبال میشود که شرط متفاوتی را تست میکند. برای مثال، می توانید مثال 3

7 نشان داده می شود. - کند، آیا دما از درجه یخبندان بزرگتر، کوچکتر یا مساوی است. همانطور که در مثال 3

7- مثال 3

using System;

class Values

#C برنامه نویسی

65

{

static void Main( )

{

int temp = 32;

if ( temp < 32 )

{

Console.WriteLine( "Warning! Ice on road!" );

}

else if ( temp == 32 )

{

Console.WriteLine("Temp exactly freezing, beware of water." );

}

else

{

Console.WriteLine( "Watch for black ice! Temp: {0}", temp );

}

}

}

است false اول را تست می کند، آیا دما کوچکتر از 32 است؟ چون دما دقیقاً 32 است. عبارت اول if این مثال ابتدا شرط

هرگز اجرا (else است، پس دستور سوم ( دستور true دوم if عبور میکند. دستور else if و کنترل به دستور

نمیگردد. لطفاً توجه کنید که این کد معادل کد زیر است:

using System;

class Values

{

static void Main( )

{

int temp = 32;

if ( temp < 32 )

{

Console.WriteLine( "Warning! Ice on road!" );

}

else

{

if ( temp == 32 )

{

Console.WriteLine("Temp exactly freezing, beware of water." );

}

else

{

Console.WriteLine( "Watch for black ice! Temp: {0}", temp );

}

}

}

}

else از else if استفاده میکنید، مطمئن شوید که دستور تست نهایی به جای else if در هر حالت، اگر از عبارت

استفاده کرده باشد تا اگر هیچ کدام از شرطها برقرار نبود، این دستور اجرا گردد.

switch -6-2 دستورات -3

تودرتو برای خواندن، اشکالیابی و کنترل درستبودن مشکل هستند. زمانی که یک مجموعه پیچیده از if دستورات

این است: " یک مقدار switch یک روش قدرتمندی است. منطق دستور switch انتخابها وجود داشته باشد، دستور

معین را برگزین و بر طبق آن عمل کن"

switch ( expression )

{

فصل سوم- انشعاب

66

case constant- expression

Statement

Jump- Statement

[ default: statement 1]

}

مقدار case در داخل پرانتزها گذاشته میشود. هر دستور switch عبارتی که براساس آن سویچ میکنید، در بالای دستور

ثابتی را با عبارت مقایسه میکند. عبارات ثابت میتوانند یک مقدار ثابت، شمارشی، سمبل یا حرف باشند.

شروع میکند و تا پایین ادامه میدهد و یک مقدار منطبق با عبارت را جستجو میکند. اگر case کامپایلر از اولین دستور

به یک دستور case ها منطبق گردد، دستور یا بلوک دستورات اختصاص یافته به آن اجرا میشوند. باید بلوک case یکی از

switch اجرا میگردد، اجرای دستور بعد از آکولاد بسته switch در یک دستور break پرش خاتمه یابد. زمانی که یک

ادامه مییابد.

8 از کاربر سوال میشود، وابستگی سیاسی خود را از میان دموکرات، جمهوریخواه یا مترقی انتخاب کند. برای - در مثال 3

سادگی مثال، دموکرات بصورت ثابت انتخاب شده است.

8 - مثال 3

class Values

{

enum Party

{

Democrat,

Republican,

Progressive

}

static void Main()

{

// hard wire to Democratic

Party myChoice = Party.Democrat;

// switch on the value of myChoice

switch ( myChoice )

{

case Party.Democrat:

Console.WriteLine( "You voted Democratic." );

break;

case Party.Republican:

Console.WriteLine( "You voted Republican." );

break;

case Party.Progressive:

Console.WriteLine( "You voted Progressive." );

break;

}

Console.WriteLine( "Thank you for voting." );

}

}

خروجی شبیه زیر است :

You voted Democratic.

Thank you for voting

بکار می برد. در ابتدا، انتخاب کاربر بوسیلهی دستور switch پیچیده، یک دستور if 8 به جای یک دستور - مثال 3

آن با مقدار مورد نظر منطبق م یباشد. ( در این مثال case ارزیابی می شود و بلوکی از دستورات اجرا می شوند که switch

.(Democrat

به ترتیب اجرا میشوند. می توانید بدون اینکه از آکولادها استفاده کنید، بیش از یک break و case دستورات مابین دستور

به ترتیب جای آکولاد باز و بسته می باشند. ممکن است یک کاربر چیزی به غیر از break و case دستور قرار دهید،. دستور

#C برنامه نویسی

67

case 9 مشاهده می کنید، ممکن است بخواهید یک - دموکرات، جمهوری خواه و مترقی انتخاب کند و همانطور که در مثال 3

پیش فرض ایجاد کنید که با یک انتخاب نامعتبر دستورات آن اجرا گردد..

9- مثال 3

using System;

class Values

{

enum Party

{

Democrat,

Republican,

Progressive

}

static void Main()

{

// hard wire to Democratic

Party myChoice = Party.Democrat;

// switch on the value of myChoice

switch ( myChoice )

{

case Party.Democrat:

Console.WriteLine( "You voted Democratic." );

break;

case Party.Republican:

Console.WriteLine( "You voted Republican." );

break;

case Party.Progressive:

Console.WriteLine( "You voted Progressive." );

break;

default:

Console.WriteLine( "You did not make a valid choice." );

break;

}

Console.WriteLine( "Thank you for voting." );

}

}

خروجی شبیه زیر است :

You did not make a valid choice.

Thank you for voting.

را اجرا خواهد کرد. در این مثال default را انتخاب نکند، دستورات case اگر کاربر یکی از مقادیر متناسب با یک دستور

یک پیام چاپ می شود که به کاربر می گوید انتخاب معتبری انجام نداده است. در کد برنامه اصلی، این قطعه کد داخل یک

قرار می گیرد تا زمانی که یک انتخاب معتبر صورت گیرد. while حلقه

ها case -7-2-3 سرازیر شدن یا پرش به

با کد case سرازیر شدنی 1" ایجاد میکنیم که چندین دستور " case دستورات یکسانی اجرا کنند، یک case اگر دو

یکسان را گروهبندی میکند. همانطور که در اینجا میبینید:

case Compassionate Republican :

case Republican :

Console.WriteLine( "you voted Republican./n");

Console.Write line( "do not you feel compassioned");

در این مثال اگر کاربر یکی از دو مورد جمهوری یا جمهوری دلسوز را انتخاب کند، مجموعه دستورات یکسانی اجرا خواهند

شد.

1 Falling through

فصل سوم- انشعاب

68

اول این معیار case اولی هیچ کدی نداشته باشد، میتوانید سرازیر شوید. در این مثال case توجه کنید فقط در صورتی که

اول دستوری اجرا کرده، case دوم سرازیر شوید. با این وجود، اگر بخواهید در case را برآورده میکند. پس میتوانید به

بعدی مورد نظر بکار برید. کلمه کلیدی case را جهت پرش به goto بعدی سرازیر شود. باید کلمه کلیدی case سپس به

یک انشعاب غیرشرطی است. زمانی که کامپایلر این دستور را می بیند، کنترل برنامه فورا به جایی که آن اشاره میکند goto

انتقال می یابد. حتی اگر آن در داخل یک دستور انشعاب شرطی گذاشته شده باشد.

یک پیام چاپ شده و به NewLeft ایجاد کنید. ممکن است بخواهید با انتخاب NewLeft برای مثال، اگر یک بخش

سرازیر گردد. ممکن است کد زیر را بنویسید : Democrat

case NewLeft:

Console. write line("the New Left members are Voting Democratic");

case Democrat :

Console. write line(" you Voted Democratic./n");

Break;

این کد کامپایل نخواهد شد و با یک خطا شکست می خورد:

Control cannot fall through from one case label(case'4') To another

این یک پیام خطای گمراه کننده است. در صورتی که برچسب اولی دستوری نداشته باشد، کنترل اجرا می تواند از یک

را با مقدار شمارشی آن ( 4) به جای مقدار case برچسب به برچسب دیگری سرازیر گردد. توجه کنید که پیام خطا نام

فقط نام ثابت است. NewLeft نمایش می دهد. بخاطر دارید که (NewLeft) سمبلیک آن

const int Democrat = 0;

const int Compassioned Republican = 1;

const int Republican = 2;

const int Progressive = 3;

const int NewLeft = 4;

بکار برید: goto بعدی باید یک دستور case یک دستور دارد، برای سرازیر شدن به NewLeft مربوط به case چون

case NewLeft:

Console.write line("the New Left members are Voting Democratic");

Goto case Democrat;

case Democrat;

Console. write line("you Voted Democratic./n");

Break;

قرار NewLeft بعد از Democrat همانطور که انتظار دارید این کد کامپایل و اجرا خواهد شد. توجه کنید که لازم نیست

گیرد.

روی رشتهها switch -8-2 دستورات -3

روی یک رشته را نیز پیشنهاد میکند. پس switch قابلیت #C . یک ثابت صحیح بود switch در مثالهای قبلی مقدار

روی رشتهها رونویسی کنید switch 9 را برای - 10 می بینید، می توانید مثال 3 - همانطور که در مثال 3

10- مثال 3

using System;

class Values

{

static void Main( )

{

String myChoice = "NewLeft";

// switch on the string value of myChoice

switch ( myChoice )

#C برنامه نویسی

69

{

case "NewLeft":

Console.WriteLine(

"The NewLeft members are voting Democratic." );

goto case "Democrat";

case "Democrat":

Console.WriteLine( "You voted Democratic.\n" );

break;

case "CompassionateRepublican": // fall through

case "Republican":

Console.WriteLine( "You voted Republican.\n" );

Console.WriteLine( "don't you feel compassionate?" );

break;

case "Progressive":

Console.WriteLine( "You voted Progressive.\n" );

break;

default:

Console.WriteLine( "You did not make a valid choice." );

break;

}

Console.WriteLine( "Thank you for voting." );

}

}

-3-3 دستورات تکرار

موقعیتهای زیادی وجود دارد که میخواهید یک کار را چندین بار انجام دهید، بطوریکه در هر مرحله شاید یک مقدار تغییر

کند. این عمل را تکرار یا حلقه گویند. معمولا عمل یکسانی را روی هر قلم داده از یک کلکسیون ( مجموعه ای از اقلام داده )

تکرار خواهید کرد.

این عمل همانند برنامهنویسی یک خط مونتاژ است. در روی خط مونتاژ ممکن است یک صد بدنه ماشین را گرفته و روی هر

کدام یک شیشه نصب کند. در یک برنامه تکراری ممکن است روی همه کادرهای متنی فرم کار کنید، بطوریکه مقدار هر

کدام را گرفته و با استفاده از آن مقادیر یک پایگاه داده را بروز کنید.

فراهم میکند. foreach و for, while, do… while یک دنباله وسیع از دستورات تکرار همچون حلقههای #C

goto, for, while, do… می توانید حلقه ایجاد کنید. بقیه این فصل کاربرد goto همچنین با استفاده از دستور

را بررسی می کند. while

goto -1-3 ایجاد حلقهها با -3

استفاده شد. ایجاد یک حلقه، switch به عنوان یک انشعاب غیرشرطی در دستور goto قبلا در این فصل دستور

ریشه همه دستورهای حلقه دیگر است. goto است. در حقیقت دستور goto معمولترین کاربرد

استفاده نشود. چون خطایابی برنامه را کاهش داده و goto در برنامهنویسی ساخت یافته توصیه میشود از دستور

ایجاد می شوند. آن به ندرت در خارج از goto اشکال یابی برنامه را نیز مشکل تر می کند. چون این مشکلات بوسیله دستور

را بررسی می کنیم : goto استفاده می شوند. حال نحوه ایجاد حلقه با دستور switch دستور

به آن برچسب goto -1 ایجاد یک برچسب 2- دستور

فصل سوم- انشعاب

70

goto برچسب، شناسه ای است که بعد از آن یک کالن قرار م یدهند. می توانید در کد خود برچسب قرار داده و کلمه کلیدی

مرتبط if با یک دستور goto 11 می بینید، معمولاً دستور - را برای پرش به آن برچسب بکار برید. همانطور که در مثال 3

می گردد.

11- مثال 3

using System;

public class Tester

{

public static void Main( )

{

int counterVariable = 0;

repeat: // the label

Console.WriteLine(

"counterVariable: {0}", counterVariable );

// increment the counter

counterVariable++;

if ( counterVariable < 10 )

goto repeat; // the dastardly deed

خروجی شبیه زیر است :

counterVariable: 0

counterVariable: 1

counterVariable: 2

counterVariable: 3

counterVariable: 4

counterVariable: 5

counterVariable: 6

counterVariable: 7

counterVariable: 8

counterVariable: 9

بکار بردید. با این وجود، در صورت استفاده از چندین برچسب و goto این کد بسیار پیچیده نیست. شما فقط یک دستور

دنبال کردن اجرای برنامه بسیار مشکل است. goto دستور

while 5-3-2 حلقه

این است: " تا زمانی که شرط درست است، این کار را انجام بده" گرامر دستور به صورت زیر است : while مفهوم حلقه

while ( Boolean Expression ) Statement

،while ارزیابی می گردد. دستور اجرا شده توسط true یا false معمولا عبارت بولین عبارتی است که به یک مقدار

را نشان می دهد. while 12 کاربرد حلقه - می تواند بلوکی از دستورات در داخل آکولادها باشد. مثال 3

12- مثال 3

using System;

public class Tester

{

public static void Main( )

{

int counterVariable = 0;

// while the counter variable is less than 10

// print out its value

#C برنامه نویسی

71

while ( counterVariable < 10 )

{

Console.WriteLine( "counterVariable: {0}", counterVariable );

counterVariable++;

}

}

}

خروجی شبیه زیر است :

counterVariable: 0

counterVariable: 1

counterVariable: 2

counterVariable: 3

counterVariable: 4

counterVariable: 5

counterVariable: 6

counterVariable: 7

counterVariable: 8

counterVariable: 9

خود-توصیف است و آن while 11 یکسان هستند، اما منطق کد کمی واض حتر است. دستور - 12 با مثال 3 - نتایج کد مثال 3

از 10 کوچکتر است، این پیام را چاپ کن و counterVariable شبیه یک جمله انگلیسی خوانده م یشود "تا زمانی که

را افزایش بده . counterVariable

را تست م یکند. این عمل اطمینان counterVariable قبل از وارد شدن به حلقه، مقدار while توجه کنید که حلقه

با 11 مقداردهی اولیه شده باشد، counterVariable می دهد که اگر شرط نادرست باشد، حلقه اجرا نخواهد شد. پس اگر

هرگز حلقه اجرا نخواهد شد.

do… while -3-3 حلقه -3

while هدف شما را برآورد نمی کند. در موقعیت های خاصی ممکن است بخواهید مفهوم while در بعضی مواقع یک حلقه

را معکوس کنید. عبارت " اجرا کن تا زمانی که شرط برقرار است" با " تا زمانی که شرط برقرار است اجرا کن" کاملاً متفاوت

ابتدا کاری را do while را می رساند. به عبارت دیگر حلقه while را و دومی مفهوم do… while است. کد اولی مفهوم

انجام داده، سپس شرط را بررسی می کند. این نوع حلقه، حداقل یک بار اجرا خواهد شد.

را بکار برید. گرامر بدین do… while برای اینکه مطمئن شوید ابتدا عمل انجام شده، سپس شرط تست می شود حلقه

نوشته می شود و به دنبال آن دستور یا دستورات بدنه حلقه نوشته می شود. بعد از do صورت است که ابتدا کلمه کلیدی

نوشته می شود و شرط به دنبال آن در داخل پرانتزها مشخص می شود و بعد از شرط یک while دستورات بدنه کلمه کلیدی

سمی کالن (;) قرار می گیرد.

do Statement while(Boolean Expression);

12 را رونویسی می کند. - مثال 3 do… while 13 برای استفاده از حلقه - مثال 3

13- مثال 3

using System;

public class Tester

{

public static void Main( )

{

int counterVariable = 11;

فصل سوم- انشعاب

72

// display the message and then test that the value is

// less than 10

do

{

Console.WriteLine( "counterVariable: {0}", counterVariable );

counterVariable++;

} while ( counterVariable < 10 );

}

}

خروجی بصورت زیر است :

counter variable : 11

شکست می خورد و بدنه حلقه while را با 11 مقدار دهی اولیه می کند و تست counterVariable 13 ، ابتدا - در مثال 3

فقط یکبار اجرا می شود.

for -4-3 حلقه -3

12 ، الگوی دستورات تکراری را آشکار می کند. یک متغیر را مقداردهی اولیه - در مثال 3 while بررسی دقیق حلقه

اجازه می دهد همه این for حلقه .(counterVariable < متغیر را تست میکند ( 10 .(counterVariable) میکند

نوشته می شود که گرامر آن بصورت زیر است for با کلمه کلیدی for مراحل را در یک دستور واحد ترکیب کنیم. یک حلقه

:

for([initializes];[BooleanExpression];[iterates];)

Statement

بخش اول سرآیند، مقداردهنده اولیه است که یک متغیر را مقداردهی اولیه می کند. بخش دوم عبارت بولین است و شرط

پایان را مشخص می کند. بخش سوم تکرار کننده است که مقدار متغیر شمارنده را بروز می کند. همه اینها در داخل پرانتزهای

14 نشان داده می شود. - در مثال 3 for باز و بسته قرار گرفت هاند. یک نمونه از حلقه

14- مثال 3

using System;

public class Tester

{

public static void Main( )

{

for ( int counter = 0; counter < 10; counter++ )

{

Console.WriteLine(

"counter: {0} ", counter );

}

}

}

خروجی بصورت زیر است :

counter: 0

counter: 1

counter: 2

counter: 3

counter: 4

counter: 5

counter: 6

#C برنامه نویسی

73

counter: 7

counter: 8

counter: 9

در بخش عبارت بولین سرآیند counter با صفر مقداردهی اولیه می شود. مقدار counter در قسمت اول سرآیند متغیر

افزایش داده می شود. counter تست م یگردد. در نهایت در بخش تکرارکنندهی سرآیند، مقدار

بخش مقداردهی اولیه فقط یکبار در شروع حلقه اجرا م یگردد. شمارنده صحیح ایجاد شده و با صفر مقداردهی می شود و

اجرا شده و مقداری نمایش داده for از 10 کوچکتر است. بدنه حلقه counter سپس عمل تست اجرا می شود. چون

counter افزایش داده م یشود. مقدار counter می شود. بعد از تکمیل حلقه بخش تکرار کننده سرآیند اجرا می گردد و

مجدداً اجرا می شود. for ارزیابی گردد، بدنه حلقه true تست م یشود. اگر شرط به

for در قسمت تکرارکننده، لازم نیست حتماً عملگر ++ استفاده شود. می توان از هر عبارتی استفاده کرد. در حلقه

نتیجه یکسانی خواهند داشت. counter ++ و ++counter دستورات

ارزیابی true که با صفر شروع می شود، اگر تست به counter بدین صورت است "برای هر مقداری از for منطق دستور

را بروز کن " counter گردد، عملی را انجام بده و مقدار

( break دستور ) for خارج شدن از حلقه

را بصورت دائمی خاتمه for خارج شویم. برای اینکه حلقه for با وجود درست بودن شرط، ممکن است بخواهیم از حلقه

را بکار برید. break دهید، دستور انشعاب غیرشرطی

16 را - منشعب می شود. مثال 3 for را متوقف می کند و اجرای برنامه به دستور بعد از حلقه for حلقه break دستور

ملاحظه کنید.

16- مثال 3

using System;

public class Tester

{

public static void Main( )

{

for ( int counter = 0; counter < 10; counter++ )

{

Console.WriteLine( "counter: {0} ", counter );

// if condition is met, break out.

if ( counter == 5 )

{

{

Console.WriteLine( "Breaking out of the loop" );

break;

}

}

Console.WriteLine( "for loop ended" );

}

}

}

خروجی بصورت زیر است :

counter: 0

counter: 1

counter: 2

counter: 3

فصل سوم- انشعاب

74

counter: 4

counter: 5

Breaking out of the loop

for loop ended

تست می کند آیا شمارنده از 5 کوچکتر است؟ اگر مقداری کوچکتر از 5 پیدا شود از حلقه خارج for در این مثال حلقه

می گردد.

continue دستور

در بعضی از مواقع ممکن است به جای خارج شدن از حلقه، مفهومی بصورت زیر را پیاده کنید " بقیه دستورات را تا آخر

را continue حلقه اجرا نکرده و از بالای حلقه مجدداً شروع کنید. برای پیاده سازی این مفهوم دستور انشعاب غیرشرطی

بکار برید.

چندین نقطه خروج برای حلقه ایجاد می کنند، که فهم و نگهداری کد را مشکل تر می سازند و continue و break کاربرد

بهتر است با دقت استفاده شوند.

را ارائه می کند. این کد یک سیستم پردازش ترافیک سیگنالی continue و break 17 مکانیزم کار هر دو دستور - مثال 3

ایجاد می کند.

17- مثال 3

using System;

public class Tester

{

public static int Main( )

{

string signal = "0"; // initialize to neutral

while ( signal != "X" ) // X indicates stop

{

Console.Write( "Enter a signal. X = stop. A = Abort: " );

signal = Console.ReadLine( );

// do some work here, no matter what signal you

// receive

Console.WriteLine( "Received: {0}", signal );

if ( signal == "A" )

{

// faulty - abort signal processing

// Log the problem and abort.

Console.WriteLine( "Fault! Abort\n" );

break;

}

if ( signal == "0" )

{

// normal traffic condition

// log and continue on

Console.WriteLine( "All is well.\n" );

continue;

}

// Problem. Take action and then log the problem

// and then continue on

Console.WriteLine( "{0} -- raise alarm!\n", signal );

}

return 0;

}

}

#C برنامه نویسی

75

سیگنال ها بوسیله واردکردن کارکترهای حرف بزرگ و اعداد از صفحه کلید شبیه سازی می شوند. بوسیله متد

رشته پایان می یابد. A یک خط متنی خوانده و در متغیر رشتهای قرار می دهد. با فشار دادن ()Console.ReadLine

الگوریتم ساده است، دریافت یک " 0" (صفر) به معنی شرایط عادی است و فقط یک عمل ثبت رویداد لازم است. با دریافت

شبیه سازی شده) مشکلی ثبت شده و پروسه خاتمه می یابد. در نهایت برای هر رویداد "A " با حرف بزرگ ) Abort سیگنال

نیز خاتمه می یابد. این while باشد، هشدار داده می شود، اما حلقه "X" دیگر، یک هشدار داده می شود. اگر سیگنال

نمونه ای از خروجی مثال است:

Enter a signal. X = stop. A = Abort: 0

Received: 0

All is well.

Enter a signal. X = stop. A = Abort: 1

Received: 1

1 -- raise alarm!

Enter a signal. X = stop. A = Abort: X

Received: X

X -- raise alarm!

این دومین نمونه از خروجی است :

Enter a signal. X = stop. A = Abort: A

Received: A

Fault! Abort

اجرا شده و بدون دادن هشداری به برنامه از حلقه if است. دستور A نکته ی این تمرین مربوط به زمان دریافت سیگنال

خارج می شود. زمانی که سیگنال 0 است. یک هشدار نامطلوب داده شده و برنامه از بالای حلقه ادامه م ییابد. مطمئن باشید

را استفاده می کنید. A و X که حروف بزرگ

for عناصر اختیاری سرآیند حلقه

سه بخش مقداردهی اولیه، عبارت بولین و تکرارکننده را دارد و گرامر آن بصورت زیر for به خاطر دارید که سرآیند حلقه

است:

for([Initializes];[BooleanExpression]; [Aerators])

Statement

18 می بینید، می توانید خارج از سرآیند حلقه - اختیاری هستند. همانطور که در مثال 3 for همه بخش های سرآیند حلقه

مقدارها را مشخص کنید. ،for

18- مثال 3

using System;

public class Tester

{

public static void Main( )

{

int counter = 0;

// some work here

counter = 3;

// more work here

for ( ; counter < 10; counter++ )

{

Console.WriteLine("counter: {0} ", counter );

}

}

}

فصل سوم- انشعاب

76

خروجی شبیه زیر است :

counter: 3

counter: 4

counter: 5

counter: 6

counter: 7

counter: 8

counter: 9

مقداردهی اولیه شده و تغییر داده شده است. توجه کنید که یک ; for قبل از شروع حلقه counter در این مثال متغیر

برای نگه داشتن محل مربوط به دستور مقداردهی اولیه گذاشته شده است.

- ندارید، می توانید بخش تکرار کننده را خالی بگذارید. مثال 3 for در داخل حلقه counter اگر دلیلی برای افزایش مقدار

19 را ببینید.

19- مثال 3

using System;

public class Tester

{

public static void Main( )

{

for ( int counter = 0; counter < 10; ) // no increment

{

Console.WriteLine( "counter: {0} ", counter );

// do more work here

counter++; // increment counter

}

}

}

را بدون مقدار اولیه و تکرار کننده، بصورت زیر ایجاد کنیم: for در صورتی که حلقه

for ( ; counter< 10; )

for ایجاد کرد هاید و البته اغلب استفاده نمی شود. ننوشتن تمام بخش های سرآیند for بوسیله while شما یک حلقه

امکان پذیر است، که یک حلقه بی نهایت ایجاد می گردد:

for ( ; ; )

خارج م یشوند. break ایجاد کنید. از یک حلقه ب ینهایت با دستور true ) while) می توانید حلقه بینهایت را با حلقه

20 نشان داده شده است. - یک حلقه بی نهایت در مثال 3

20- مثال 3

using System;

public class Tester

{

public static void Main( )

{

int counterVariable = 0; // initialization

for ( ; ; ) // forever

{

Console.WriteLine( "counter: {0} ", counterVariable++ ); // increment

if ( counterVariable > 10 ) // test

#C برنامه نویسی

77

break;

}

}

}

خروجی شبیه زیر است :

counter: 0

counter: 1

counter: 2

counter: 3

counter: 4

counter: 5

counter: 6

counter: 7

counter: 8

counter: 9

10counter:

برای مشخص کردن حالتی که یک حلقه بی شمار مرحله ادامه یابد، یک حلقه ب ینهایت را بکار برید. برای مثال، اگر برنامه شما

در انتظار یک رویداد از سیستم است، شرایط خارج شدن از حلقه م یتواند استثناء بوده و در داخل بدنه حلقه مدیریت شود.

-4-3 خلاصه

انشعاب باعث می شود برنامه از حالت اجرای ترتیبی دستورات خارج شود.

فراخوانی متد، معمول ترین انشعاب غیرشرطی است. بعد از کامل شدن اجرای متد، اجرای برنامه به نقطه بعد از

فراخوانی متد بر می گردد.

با دستورات انشعاب شرطی، برنامه شما قادر است براساس شرایط زمان اجرا انشعاب کند. معمولاً براساس مقدار

یک یا چند متغیر یا شی عمل می کند.

یک دستور را اجرا می کند، در غیر اینصورت آن را رد می کند. if باشد، ساختار true • اگر یک شرط

ارزیابی گردد، شرط true متصل شده باشند. اگر شرط اول به or دو شرط بوسیله عملگر if • اگر در یک دستور

دوم هرگز ارزیابی نخواهد شد. این ویژگی را میان بر زدن گویند.

false باشد، مجموعه ای از دستورات اجرا گردند و اگر true اجازه می دهد اگر یک شرط if else • ساختار

باشد، مجموعه متفاوت دیگری اجرا شوند.

تودرتو بکار بریم. if • برای ارزیابی شر طهای پیچیده تر، می توانیم دستورات

اجازه می دهد مقدار یک عبارت با چند مقدار ثابت مقایسه گردد و عمل خاصی متناسب با مقدار switch • دستور

منطبق شده انجام گیرد.

را داشته باشند تا اگر هیچ مقدار منطبق پیدا نشد، default بخش switch • در عمل بهتر است دستورات

دستورات آن بخش اجرا شوند.

تکرار یا حلقه به شما اجازه م یدهد یک عمل چندین بار انجام شود. معمولا تکرارها با یک عبارت شرطی کنترل

می شوند.

فصل سوم- انشعاب

78

برای هدایت اجرای برنامه به نقطه دیگر استفاده می شود و معمولا استفاده از آن توصیه نمی شود. goto • دستور

ارزیابی شود، بلوکی از دستورات را اجرا م یکند. قبل از هر تکرار شرط true تا زمانی که شرط آن while • حلقه

تست می شود.

است، با این تفاوت که شرط در انتهای تکرار تست می شود. پس تضمین می شود که while شبیه do…while • حلقه

بدنه حلقه حداقل یکبار اجرا خواهد شد.

می تواند یک یا چند متغیر را for برای اجرای دستور به تعداد معینی استفاده م یشود. سرآیند حلقه for • حلقه

مقداردهی for مقداردهی اولیه کرده، یک شرط منطقی را تست کند و متغیرها را تغییر دهد. کاربرد معمول حلقه

اولیه یک شمارنده است. شرط حلقه قبل از شروع هر تکرار تست م یشود و بعد از هر تکراری شمارنده را تغییر

می دهد

mohsen_mahyar@yahoo.com.

 

   + MOHSEN GHASEMI - ۱۱:٥۱ ‎ب.ظ ; ۱۳۸٩/٤/۳