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


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

توابع ریاضی و ویژوال بیسیک مقدمه درس اول :

<!-- /* 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:TimesNewRoman; 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:"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;} /* 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";} 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;} -->

Mohsen_mah yar@yahoo.com

 

١

توابع ریاضی و ویژوال بیسیک مقدمه درس اول :

 

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

دارید تا از برخی توابع ریاضی استفاده نمائید . ویژوال بیسیک 6 دارای

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

شده اند . در این مقاله ابتدا با این توابع آشنا شده و سپس چگونگی

ایجاد سایر توابع ریاضی را که در میان این مجموعه وجود ندارند

خواهید دید . در پایان نیز با توابع ریاضی موجود در دات نت آشنا می

شوید . Mohsen_mahyar@yahoo.com

 

 

توابع ریاضی موجود در ویژوال بیسیک 6

قدرمطلق) : مقدار بدون علامت یک عدد را برمی گرداند . ) Abs - تابع

است که double آرک تانژانت) : خروجی تابع عددی از نوع ) Atn - تابع

برابر زاویه ای است که تانژانت آن عدد ورودی تابع است .

است که double کسینوس ) : خروجی تابع عددی از نوع ) Cos - تابع

برابر کسینوس زاویه ورودی است .

است که double توان نمانی) : خروجی تابع عددی از نوع ) Exp - تابع

به توان ورودی تابع است . e برابر

تابع کف یا تابع جزء صحیح) : نزدیکترین عدد صحیح ) Int - تابع

Mohsen_mahyar@yahoo.com

 

 

مساوی یا کوچکتر نسبت به عدد ورودی را برمی گرداند .

است که double لگاریتم ) : خروجی تابع عددی از نوع ) Log - تابع

یا همان e برابر لگاریم طبیعی عدد ورودی است ( لگاریتم بر مبنای عدد

( Ln

است double گرد کردن ) : خروجی تابع عددی از نوع ) Round - تابع

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

علامت) : خروجی تابع عددی از نوع صحیح است که نشان ) Sgn - تابع

دهنده علامت عدد ورودی است .

است که double سینوس ) : خروجی تابع عددی از نوع ) Sin - تابع

برابر سینوس زاویه ورودی است .

است که برابر double جذر) : خروجی تابع عددی از نوع ) Sqr - تابع

ریشه دوم یا جذر عدد ورودی است .

است که double تانژانت) : خروجی تابع عددی از نوع ) Tan - تابع

برابر با تانژانت زاویه ورودی ( برحسب رادیان ) می باشد .

می توان صحیح یا اعشاری n ) ام یک عدد n نکته : برای محاسبه توان

باشد ) از اپراتور ^ استفاده نمائید . برای مثال :

2^5=32

9^0.5=3

4.2^3.7=202.31

چگونگی ایجاد سایر توابع ریاضی که در ویژوال بیسیک 6 وجود ندارند

جدول زیر چگونگی محاسبه سایر توابع ریاضی که در ویژوال بیسیک 6

وجود ندارند را نشان می دهد :

٣

Sec(X) = 1 / Cos(X) سکانت

Cosec(X) = 1 / Sin(X) کسکانت

Cotan(X) = 1 / Tan(X) کتانژانت

Arcsin(X) = Atn(X / Sqr(1-X * X )) آرک سینوس

Arccos(X) = Atn(-X / Sqr(1-X * X)) + 2 * Atn( آرک کسینوس ( 1

Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) - آرک سکانت * ( 1

(2 * Atn(1))

Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - آرک کسکانت

1) * (2 * Atn(1))

Arccotan(X) = Atn(X) + 2 * Atn( آرک کتانژانت ( 1

HSin(X) = (Exp(X) - Exp(-X)) / سیونس هیپربولیک 2

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

۴

HCos(X) = (Exp(X) + Exp(-X)) / کسینوس هیپربولیک 2

HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(- تانژانت هیپربولیک

X))

HSec(X) = 2 / (Exp(X) + Exp(-X)) سکانت هیپربولیک

HCosec(X) = 2 / (Exp(X) - Exp(-X)) کسکانت هیپربولیک

HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(- کتانژانت هیپربولیک

X))

HArcsin(X) = Log(X + Sqr(X * X + آرک سینوس هیپربولیک (( 1

HArccos(X) = Log(X + Sqr(X * X - آرک کسینوس هیپربولیک (( 1

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

۵

HArctan(X) = Log((1 + X) / (1 - X)) / آرک تانژانت هیپربولیک 2

HArcsec(X) = Log((Sqr(1-X * X) + 1) / X) آرک سکانت هیپربولیک

HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + آرک کسکانت هیپربولیک / ( 1

X)

HArccotan(X) = Log((X + 1) / (X - 1)) / آرک کتانژانت هیپربولیک 2

LogN(X) = Log(X) / Log(N) N لگاریتم بر مبنای

در ویژوال بیسیک 6 e و π اعداد

در برنامه های خود ثوابت زیر را e برای استفاده از عدد پی و عدد

تعریف نمائید :

Const Pi = 3.14159265358979

Const e = 2.71828182845904

همچنین عدد پی را می توان به صورت زیر تعریف کرد :

Pi = 4*Atn(1)

تبدیل رادیان / درجه

۶ Mohsen_mahyar@yahoo.com

 

 

چون اکثر توابع مثلثاتی بر حسب رادیان کار می کنند گاهی اوقات نیاز

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

یک زاویه که بر حسب رادیان می باشد به درجه آنرا در 180 ضرب کرده

و سپس بر عدد پی تقسیم می کنیم :

Degree(x) =x*180/Pi

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

پی ضرب کرده و سپس بر 180 تقسیم می کنیم :

Rad(x) =x*Pi/180

VB.Net توابع ریاضی و

مجموعه توابع ریاضی در در ویژوال بیسیک دات نت وجود دارند بسیار

System.Math قویتر و کاملتر هستند . این مجموعه توابع در کلاس

موجود می باشند :

برای نشان دادن پایه لگاریتم PI و E دو ثابت به اسم Math - در کلاس

طبیعی و عدد پی وجود دارند .

آرک سینوس) ، ) Asin ، ( آرک کسینوس ) Acos : - توابع مثلثاتی

آرک تانژانت خارج قسمت تقسیم ) Atan آرک تانژانت) ، 2 ) Atan

تانژانت ) ) Tan ، ( سینوس ) Sin ، ( کسینوس ) Cos ، ( ورودی ها

حاصلضرب کامل دو ) BigMul ، ( قدرمطلق ) Abs : - توابع عمومی

خارج قسمت نقسیم ) DivRem ، ( تابع سقف ) Ceiling ، ( عدد 32 بیتی

باقیمانده نقسیم ) IEEERemainder ، ( تابع کف ) Floor ، ( دو عدد

٧

مینیمم بین دو عدد ) ، ) Min ، ( ماکزیمم بین دو عدد ) Max ، ( دو عدد

تابع جذر ) ) Sqrt ، ( تابع علامت ) Sign ، ( تابع گرد کردن ) Round

سینوس ) Sinh ، ( کسینوس هیپربولیک ) Cosh : - توابع هیپربولیک

تانژانت هیپربولیک ) ) Tanh ، ( هیپربولیک

) Log ، ( به توان مقدار ورودی e عدد ) Exp : - توابع نمایی و لگاریتمی

تابع توان ) ) Pow ، ( لگاریتم بر پایه 10 ) Log لگاریتم ) ، 10

تصحیح چند اشتباه

در نوشتن مقاله "توابع ریاضی و ویژوال بیسیک" چند اشتباه رخ داده

بود که یکی از دوستان عزیر و خوانندگان این وبلاگ لطف کرده و این

اشتباهات را ذکر کردند :

"سلام بسیار عالی بود...مدت ها بود به دنبال این فرمولها می گشتم. اما

به توان e برابر exp خروجی تابع - pi=4*atn( با اجازه چند نکته : - ( 1

در فارسی به تابع جزء صحیح مشهور int عدد ورودی می باشد. - تابع

ام عدد از فرمول زیر استفاده می n است. - برای به دست آوردن ریشه

ام با تشکر " n ریشه = x^(1/n) : شود

این اشتباهات در مقاله فعلی تصحیح شده است .

مدیریت رشته ها در ویژوال بیسیک 6

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٨

مدیریت رشته ها در ویژوال بیسیک 6

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

کنید عبارتند از :

کد اسکی اولین کاراکتر رشته ورودی را بر می گرداند . : Asc تابع ý

فرمت کلی آن بصورت زیر است :

Asc(string)

کد یونیکد اولین کاراکتر را بر می گرداند . AscW - تابع

رشته ای را بر می گرداند که معادل کد اسکی ورودی : Chr تابع ý

است .

فرمت کلی آن بصورت زیر است :

Chr(charcode)

بر حسب یونیکد عمل می کند . ChrW - تابع

تمام کاراکترهای رشته ورودی را به حروف کوچک : LCase تابع ý

تبدیل می کند .

فرمت کلی آن بصورت زیر است :

LCase(string)

٩

تمام کاراکترهای رشته ورودی را به حروف کوچک : UCase تابع ý

تبدیل می کند .

فرمت کلی آن بصورت زیر است :

UCase(string)

رشته ای را بر می گرداند که شامل تعداد مشخصی از : Left تابع ý

کاراکترهای سمت چپ رشته ورودی است .

فرمت کلی آن بصورت زیر است :

Left(string, length)

رشته ورودی : String

طول رشته مورد نظر : Length

مثال :

Left(“abcdef”,3)=”abc”

رشته ای را بر می گرداند که شامل تعداد مشخصی : Right تابع ý

از کاراکترهای سمت راست رشته ورودی است .

فرمت کلی آن بصورت زیر است :

Right(string, length)

مثال :

Right(“abcdef”,3)=”def”

١٠

تعداد مشخصی کاراکتر فاصله بر می گرداند . : Space تابع ý

فرمت کلی آن بصورت زیر است :

Space(number)

طول رشته ورودی را بر می گرداند . : Len تابع ý

فرمت کلی آن بصورت زیر است :

Len(string)

Len(“abcdefg”)= مثال : 7

هایی که در ابتدا یا انتهای رشته space این تابع : Trim تابع ý

باشد را حذف می کند .

فرمت کلی آن بصورت زیر است :

Trim(string)

فقط از چپ و راست عمل می کنند . RTrim و LTrim - توابع

مثال :

Trim(“ abc”)=”abc”

این تابعی یک رشته بر می گرداند که شامل تعداد : Mid تابع ý

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

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

Mid(string, start[, length])

١١

رشته ورودی . : string

محل شروع اولین کاراکتر رشته ای که می خواهیم از رشته : start

ورودی استخراج کنیم .

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

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

به بعد استخراج خواهند شد . start کاراکترها از

Mid(“abcdefg”,2,3)=bcd : مثال

این تابع محل اولین وقوع یک رشته را درون رشته : Instr تابع ý

دیگر نشان می دهد .

فرمت کلی آن بصورت زیر است :

InStr([start, ]string1, string2[, compare])

این پارامتر اختیاری است و محل شروع جستجو را نشان می : Start

دهد . اگر این پارامتر وارد نشود جستجو از ابتدای رشته آغاز می شود .

رشته ای که جستجو در آن انجام می شود . : String1

رشته مورد جستجو : String2

این پارامتر اختیاری است و نوع جستجو را نشان می دهد . : Compare

اگر این پارامتر 0 داده شود جستجوی متنی انجام می شود و اگر 1 داده

شود جستجوی باینری انجام می شود .

Instr(3,”abcdabg”,”ab”)= مثال : 5

١٢

برابر صفر باشد مقدار بازگشتی صفر است . اگر string اگر طول رشته 1

است . Null باشد مقدار بازگشتی نیز Null برابر string یا 2 string1

خواهد start برابر صفر باشد مقدار بازگشتی string اگر طول رشته 2

پیدا نشود مقدار بازگشتی صفر string درون 1 string بود . اگر رشته 2

باشد مقدار بازگشتی string بزرگتر از طول رشته 1 start است . اگر

صفر است .

می باشد یعنی عمل جستجو Instr برعکس تابع : InstrRev تابع ý

را از انتهای رشته انجام می دهد .

فرمت کلی آن بصورت زیر است :

InstrRev(stringcheck, stringmatch[, start[, compare]])

رشته ای را برمی گرداند که در آن یک رشته : Replace تابع ý

خاص با رشته دیگری به تعداد دفعات مشخصی جایگزین شده

است .

فرمت کلی آن بصورت زیر است :

Replace(expression, find, replace[, start[, count[,

compare]]])

رشته اصلی : Expression

رشته مورد جستجو : Find

رشته جایگزین : Replace

محل شروع جایگزینی . در صورتیکه این متغیر وارد نشود : Start

جایگزینی از ابتدا رشته انجام می شود .

تعداد دفعات جایگزینی . در صورتیکه این متغیر وارد نشود : Count

١٣

جایگزینی در تمام رشته انجام خواهد شد .

نوع جستجو را نشان می دهد . اگر این پارامتر 0 داده شود : Compare

جستجوی متنی انجام می شود و اگر 1 داده شود جستجوی باینری

انجام می شود .

مثال :

Replace(“abcadea”,”a”,”x”)=”xbcxdex”

برابر صفر باشد مقدار بازگشتی رشته ای expression اگر طول رشته

صفر باشد مقدار بازگشتی find با طول صفر است . اگر طول رشته

صفر باشد مقدار replace است . اگر طول رشته expression خود

ها حذف شده است . find ای است که در آن تمام expression بازگشتی

باشد مقدار بازگشتی expression بزرگتر از طول رشته start اگر

برابر صفر باشد مقدار count رشته ای با طول صفر است . اگر

است . expression بازگشتی خود

رشته ای را برمی گرداند که کاراکترهای آن : StrReverse تابع ý

به ترتیب عکس کاراکترهای رشته ورودی است .

فرمت کلی آن بصورت زیر می باشد :

StrReverse(expression)

مثال :

StrReverse(“abcd”)=”dcba”

١۴

آرایه ای از تعداد مشخصی رشته برمی گرداند که این : Split تابع ý

از درون یک ( delimiter ) رشته ها توسط یک کاراکتر جداکننده

رشته استخراج شده اند .

فرمت کلی آن بصورت زیر است :

Split(expression[, delimiter[, limit[, compare]]])

رشته اصلی : Expression

این پارامتر اختیاری است و کاراکتر جداسازی را نشان می : Delimiter

دهد . در صورتیکه این پارامتر وارد نشود کاراکتر فاصله ( “ “ ) برای

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

است برگردانده می شود expression یک آرایه تک عضوی که شامل کل

.

تعداد رشته های موجود در آرایه را نشان می دهد . در : Limit

صورتیکه این پارامتر داده نشود کلیه رشته های جداشده در آرایه

خروجی قرار می گیرند .

نوع جستجو را نشان می دهد . اگر این پارامتر 0 داده شود : Compare

جستجوی متنی انجام می شود و اگر 1 داده شود جستجوی باینری

انجام می شود .

مثال :

Dim Ar(3) as String

Ar=Split(“a#bd#cde”,”#”)

١۵

تعدادی رشته موجود در یک آرایه را بهم متصل می : Join تابع ý

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

فرمت کلی آن بصورت زیر است :

Join(sourcearray[, delimiter])

آرایه شامل رشته هایی که می خواهیم بهم متصل کنیم : Sourcearray

.

کاراکتری که برای اتصال رشته ها بهم استفاده می شود . : Delimiter

این کاراکتر در بین رشته اهی اتصالی می آید و اگر داده نشود از کاراکتر

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

بدون هیچ جداکننده ای بهم متصل می شوند .

مثال :

Dim Ar(3) as String

Ar(1)=”ab”

Ar(2)=”c”

Ar(3)=”def”

Join(Ar,”*”)=”ab*c*def”

این تابع دو رشته ورودی را با هم مقایسه می : StrComp تابع ý

کند .

فرمت کلی این تابع بصورت زیر است :

StrComp(string1, string2[, compare])

١۶

رشته اول : String1

رشته دوم : String2

نوع مقایسه را نشان می دهد . اگر این پارامتر 0 داده شود : Compare

مقایسه متنی انجام می شود و اگر 1 داده شود مقایسه باینری انجام می

شود .

باشد مقدار بازگشتی 1- است . اگر دو string کوچکتر از 2 string اگر 1

بزرگتر از string رشته مساوی باشند مقدار بازگشتی صفر است . اگر 1

باشد مقدار بازگشتی 1 است . string2

در یک رشته ورودی تغییراتی را اعمال می کند . : StrConv تابع ý

فرمت کلی آن بصورت زیر است:

StrConv(string, conversion)

رشته ورودی : String

نوع عمل تبدیل را نشان می دهد . مقادیر ممکن این متغیر : Conversion

عبارتند از :

توضیح مقدار

تبدیل به حروف بزرگ 1

تبدیل به حروف کوچک 2

تبدیل اولین کاراکتر هر لغت در

رشته به حرف بزرگ

3

تبدیل به یک رشته یونیکد 64

تبدیل از رشته یونیکد به کدپیچ

پیش فرض سیستم

128

١٧

مثال :

StrConv("hello my friend",3)="Hello My Freind"

کار با فایل در ویژوال بیسیک

کار با فایل در ویژوال بیسیک - بخش اول

مقدمه

بعلت عدم وجود اشاره گر در ویژوال بیسیک عملیات کار با فایلها در آن

نسبتاً ساده می باشد .

بطور کلی فایلها بر دو نوع هستند :

این فایلها فقط شامل کاراکترهای اسکی و : Text File 1 - فایلهای متنی

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

شامل هر نوع کاراکتری می توانند : Binary File 2 - فایلهای باینری

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

اجرائی ، فایلهای گرافیکی و غیره

ویژوال بیسیک می تواند با هر دو نوع فایل کار کند .

چگونگی باز کردن فایلها

١٨

قبل از اینکه بتوان عملیات ورودی/خروجی را روی یک فایل انجام داد

ابتدا بایستی آنرا باز کرد . باز کردن فایلها در ویژوال بیسیک توسط

انجام می شود . فرمت کلی این دستور بصورت زیر است Open دستور

:

Open filename [For mode] [Access access][lock] As

filenumber [Len=reclen]x[#]

[ پارامترهای داخل کروشه اختیاری هستند . ]

نام فایلی است که می خواهیم آنرا باز کنیم . filename

حالت باز کردن فایل است . این حالتها عبارتند از : mode

فایل بعنوان ورودی باز می شود . : Input -

فایل بعنوان خروجی باز می شود . : Output -

فایل از نوع باینری باز می شود . : Binary -

فایل طوری باز می شود که بتوان به انتهای آن چیزی : Append -

اضافه کرد .

Random -

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

عبارتند از :

خواندن فایل : Read -

نوشتن در فایل : Write -

خواندن و نوشتن فایل : ReadWrite -

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

انواع دسترسیها عبارتند از :

دسترسی اشتراکی : Shared -

١٩

Lock Read -

Lock Write -

Lock Read Write -

عددی است که ویژوال بیسیک از آن برای دسترسی به filenumber

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

1 تا 511 باشد . برای بدست آوردن اولین شماره آزاد می توان از تابع

استفاده کرد . FreeFile

طول بافر فایل است . این عدد بایستی از 32767 کو چکتر باشد . : reclen

مشخص شده وجود نداشته و filename در صورتی که فایلی که توسط

باز شده باشد Random و یا Output ،Binary ،Append فایل برای

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

نادیده Len در صورتی که فایل بصورت باینری باز شده باشد پارامتر

گرفته می شود .

چگونگی بستن فایل

استفاده می Close پس از پایان کار با فایل برای بستن آن از دستور

کنیم . فرمت این دستور بصورت زیر است :

Close #filenumber

بدون هیچ پارامتری تمام فایلهای باز را می بندد . Close دستور

کار با دایرکتوری

٢٠

می توان نام فایلهای موجود در یک Dir توسط دستور : Dir 1 - گرفتن

دایرکتوری را بر اساس پارامترهایی که به آن می دهیم پیدا کنیم . برای

مثال :

Myfile=Dir$("c:\text\*.txt)"x

را که C:\TEXT دستور فوق نام اولین فایل موجود در دایرکتوری

قرار می دهد . اگر دستور فوق را Myfile باشد در متغیر txt پسوند آنها

بدون پارامتر مجدداً اجرا کنیم نام دومین فایل برگرداننده می شد و الی

آخر

دارای یک پارامتر اختیاری است که نوع فایلهای مورد نظر را نیز می Dir

توان با آن مشخص نمود . مثال :

Myfile=Dir$("c:\text\*.txt",vbNormal)x

مقادیر ممکن این پارامتر عبارتند از :

vbDirectory ، vbSystem ،vbHidden ،vbNormal

ChDir 2 - تغییر دایرکتوری : برای تغییر دایرکتوری از دستور

استفاده می شود مثال :

ChDir "c:\windows\system32"x

استفاده می ChDrive 3 - تغییر درایو : برای تغییر درایو از دستور

شود مثال :

ChDrive "E:"x

٢١

MKDir 4 - ساخت دایرکتوری : برای ایجاد دایرکتوری جدید از دستور

استفاده می شود مثال :

MKDir "c:\MyFolder"x

RmDir 5 - حذف دایرکتوری : برای حذف دایرکتوری از دستور

استفاده می شود مثال :

RmDir "C:\MyFoler"x

کار با فایل در ویژوال بیسیک - بخش دوم

خواندن از فایل :

می توان Input Line و Input توسط دستورهای : Input 1 - دستور

محتوای فایلهای متنی و باینری را خواند .

به دو صورت بکار می رود : Input دستور

Filenumber,ReadData# Input

ReadData=Input(Charnum,Filenumber)x

قرار می دهد . ReadData دستور اول کل یک فایل را خوانده و در متغیر

Filenumber بایت از فایلی با شماره Charnum دستور دوم ، تعداد

قرار می دهد . ReadData را خوانده و در متغیر

این دو دستور تمام کاراکترهای موجود در فایل را می خوانند . برای

استفاده Line Input اینکه بتوان فایل را خط به خط خواند ، از دستور

٢٢

کنید :

Filenumber,ReadData# Line Input

بیشتر برای خواندن فایلهای متنی استفاده Line Input البته از دستور

می شود زیرا ممکنست در فایل باینری هیچ کاراکتر انتهای خط (

وجود نداشته باشد و یکباره کل فایل خوانده شود . ( CRLF

از این دستور برای خواندن فایلهای باینری با : Get 2 - دستور

استفاده میشود : ( Random Access ) دسترسی تصادفی

Get #Filenumber,[Recordnum%],ReadData

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

قرار می دهد . علامت ReadData می خواند و در متغیر Filenumber

اختیاری است و در Recordnum کروشه نشان می دهد که پارامتر

صورتیکه ذکر نشود داده ها از رکورد بعدی فایل ( جائیکه اشاره گر فایل

آنجا قرار دارد ) خوانده می شوند .

نوشتن در فایل :

توسط این دستور می توان اطلاعاتی را در فایل قرار : Print 1 - دستور

داد :

Print #FileNumber,WriteData

را در فایلی با شماره WriteData دستور فوق محتویات متغیر

می توان اطلاعات را Print می نویسد . بوسیله دستور FileNumber

بصورت خط به خط در فایل نوشت برای مثال :

Hello Visual Basic"+Vbcrlf",1# Print

در ویژوال ( CRLF ) نشان دهنده کاراکتر انتهای خط Vbcrlf عبارت

بیسیک می باشد .

٢٣

این دستور برای نوشتن داده ها در فایلهای باینری با : Put 2 - دستور

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

FileNumber,[Recordnum],WriteData# Put

را در رکورد شماره WriteData این دستور محتویات متغیر

قرار می دهد . Recordnum

تعیین محل رکورد در فایلهای با دسترسی تصادفی :

برای منتقل کردن اشاره گر فایل به یک رکورد در یک فایل باینری با

استفاده می شود . این دستور محل Seek دسترسی اتفاقی ، از دستور

یک بایت را در فایل می گیرد و اشاره گر فایل را در آنجا قرار می دهد

می توانند با این رکورد کار کنند : Get و Put بنابراین دستورات

FileNumber,RecordNumber# Seek

تشخیص انتهای فایل :

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

را بر می False یا True استفاده می کنیم . این دستور یکی از مقادیر

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

استفاده می شود : Do-While حلقه های

EOF(FileNumer))x) Do While Not

.

.

.

Loop

٢۴

حلقه فوق تا زمانیکه فایل موردنظر به انتها نرسیده باشد اجرا خواهد

شد .

بدست آوردن طول یک فایل :

می توان طول محتویات یک فایل را بدست آورد : LOF بوسیله دستور

FileSize=LOF(FileNumber)x

بدست آوردن محل اشاره گر فایل :

می توان محل جاری اشاره گر فایل را بدست آورد . Loc توسط دستور

اجرا شدن این دستور محل اشاره گر را تغییر نمی دهد :

FilePosition=Loc(FileNumber)x

کار با فایل در ویژوال بیسیک - بخش سوم

سایر عملیات کار با فایل :

استفاده می Kill 1 - حذف فایل : برای حذف یک یا چند فایل از دستور

شود :

Kill "C:\Temp\MyFile.txt"x

C:\Temp\*.txt"x" Kill

2 - انتقال فایل : برای انتقال یک فایل از یک دایرکتوری به دایرکتوری

استفاده می شود . مبدا و مقصد بایستی روی یک Name دیگر از دستور

درایو باشند . اگر دایرکتوری مبدا و مقصد یکی باشد فایل تغییر نام داده

می شود :

C:\Temp\File1.txt" To "C:\Temp2\File2.txt"x" Name

٢۵

3 - کپی کردن فایل : برای کپی کردن یک فایل از یک دایرکتوری به

استفاده می شود : FileCopy دایرکتوری دیگر از دستور

FileCopy "\File1.txt\ To "C:\Temp\File2.txt"x

4 - بدست آوردن تاریخ و زمان آخرین تغییر فایل و یا زمان ایجاد فایل :

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

تعریف کرده و سپس توسط این دستور Variant یک متغیر از نوع

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

Variant Dim FileInfo As

FileInfo=FileDateTime("C:\Temp\MyFile.txt")x

5 - استخراج طول فایل : برای بدست آوردن طول یک فایل بر حسب بایت

استفاده می شود : FileLen از دستور

FileSize=FileLen("C:\MyFile.txt")x

SetAttr 6 - تغییر صفت یک فایل : برای تغییر صفت یک فایل از دستور

استفاده می شود . پارامترهای این دستور عبارتند از :

0 : فایل معمولی

2 : فایل مخفی

4 : فایل سیستمی

FileNumber,FileAttrib SetAttr

مقابله با خطاهای کار با فایل :

در زمان کار با فایلهای احتمال زیادی وجود دارد که خطا بوجود آید .

بنابراین بایستی در زمان کار با فایلها در صورت ممکن از روتینهای

٢۶

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

52 : شماره یا نام فایل صحیح نیست

53 : فایل پیدا نشد

54 : حالت فایل صحیح نیست

55 : فایل قبلاً باز شده

58 : فایل از قبل وجود دارد

59 : طول رکورد صحیح نیست

61 : دیسک پر است

62 : عبور از انتهای فایل

63 : شماره رکورد صحیح نیست

70 : دسترسی ممنوع است

71 : دیسک آماده نیست

76 : مسیر پیدا نشد

استفاده Select-Case در هنگام مقابله با خطا بهتراست از یک ساختار

کنید :

Err Select Case

Case 71

MsgBox "Drive is Not Ready"x

.

.

.

End Select

های ویندوز API

 

 

٢٧

های ویندوز API

های ویندوز و چگونگی استفاده از آنها API امروز قصد دارم در مورد

در ویژوال بیسیک بطور خلاصه توضیح دهم و همچنین دو مثال

پراستفاده را نیز در این زمینه بیان کنم که عبارتند از چگونگی پخش

و ساخت یک تایمر با دقت بالا : Wav فایلهای

Application مخفف API واژه : Windows API 1 - آشنایی با

های ویندوز مجموعه ای API . می باشد Programming Interface

از توابع از پیش آماده موجود در سیستم عامل هستند که شما می توانید

آنها را در برنامه های خود فراخوانی کنید . این توابع در چندین کتابخانه

ویندوز ذخیره شده اند . برای دسترسی به این توابع در ویژوال DLL

کنید . برای مثال : declare بیسیک ابتدا باید آنها را برنامه خود

Declare Function sndPlaySound Lib "winmm.dll" Alias

sndPlaySoundA" (ByVal lpszSoundName As String, "

Long ByVal uFlags As Long) As

sndPlaySound از تابع Declare همانطور که می بینید مثال فوق یک

موجود است . کلمه Winmm.dll می باشد که این تابع در کتابخانه

دارد . سایر بخشها dll نشان می دهد که این تابع نام دیگری در Alias

مربوط به تعریف پارامترهای تابع می باشند که در مورد مثال فوق ، این

دارد . Long تابع دو پارامتر ورودی و یک خروجی از نوع

در برنامه می توانید از آن استفاده نمائید . API کردن Delare پس از

 

 

٢٨

استفاده Wav تابعی که برای پخش فایلهای : Wav 2 - پخش فایلهای

است که در بالا با آن آشنا شدید . sndPlaySound می شود تابع

uFlags و پارامتر Wav نام و مسیر فایل lpzSoundName پارامتر

چگونگی پخش فایل را مشخص می کند . مقادیر ممکن این پارامتر

عبارتند از :

پخش شود که آنرا Wav اجازه می دهد طوری فایل : SND_ASYNC -

تان را هر Wav بتوان وقفه داد . بعبارت دیگر قادر خواهید بود فایل

زمان که بخواهید پخش کنید و مطمئن باشید که حتما شنیده می شود .

را بطور ممتد پخش می کند . Wav فایل : SND_LOOP -

پیدا نشود صدای دیگری Wav اگر فایل : SND_NODEFAULT -

ویندوز ) default پخش نخواهد شد ( مثلا برخی صداهای

کنترل به برنامه داده نمی Wav در طول پخش فایل : SND_SYNC -

ای را در پس زمینه Wav شود . این پارامتر در زمانیکه می خواهید فایل

برنامه تان پخش کنید مناسب نمی باشد .

ای قبلا در حال پخش باشد ، فایل Wav اگر فایل : SND_NOSTOP -

شما آنرا دچار وقفه نمی کند . از این پارامتر زمانی استفاده می Wav

مان هیچوقت در وسط کار قطع نشود . Wav شود که بخواهیم فایل

Or اگر بخواهید از بیش از یکی از این پارامترها استفاده کنید توسط

آنها را ترکیب نمائید مثال :

or ding.wav", SND_ASYNC\" & sndPlaySound App.path

SND_LOOP

نکته : برای استفاده از توابع صوتی پیچیده تر بایستی از

می باشد استفاده کنید . در DirectX که یکی از اجزای DirectSound

 

 

٢٩

بعدا صحبت خواهم کرد . DirectSound مورد

3 - ساخت یک تایمر با دقت بالا : شاید تا بحال از کنترل تایمر موجود در

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

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

کنترل مفید نخواهد بود .

Kernel32.dll موجود در کتابخانه API یک GetTickCount تابع

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

برحسب میلی ثانیه برمی گرداند :

() "Private Declare Function GetTickCount Lib "kernel32

As Long

برای بررسی طی شدن یک مدت زمانی خاص شما ابتدا باید مقدار این

قرار دهید سپس در یک TempTime تابع را در یک متغیر کمکی مثل

جدید و زمان GetTickCount باید اختلاف زمان Do-Loop حلقه

را با مقدار زمانی که می خواهید سپری شود مقایسه کنید : TempTime

TempTime = GetTickCount()x

GetTickCount() - TempTime > Do While DesiredTime

'Do some things

Loop

توسط کد بالا می توان یک عملیات خاص را برای یک مدت زمانی

مشخص اجرا کرد .

کد زیر نشان می دهد که چگونه می توان دستورات خاصی را در فواصل

زمانی خاص اجرار کرد :

 

 

٣٠

ExitFunction = False

GetTickCount()x = TempTime

Do While not(ExitFunction)x

GetTickCount() - TempTime then > If DesiredTime

'Reset the temporary variable

GetTickCount()x = TempTime

'Do some things

End If

Loop

برنامه benchmark می توان برای GetTickCount همچنین از تابع

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

خاص را بدست آورد .

ایجاد ساختارهای داده ای در ویژوال بیسیک

بخش اول

ایجاد ساختارهای داده ای در ویژوال بیسیک - بخش اول

مقدمه :

ساختارهای داده ای از نظر تعداد اعضا به دو دسته استاتیک و دینامیک

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

های دو بعدی ، تعداد اعضای آنها در زمان طراحی برنامه مشخص می

 

 

٣١

شود و در طول اجرای برنامه ثابت است اما تعداد اعضای ساختارهای

داده ای دینامیک در طول اجرای برنامه تغییر می کند . لیست پیوندی (

و درختهای باینری ( ( Queue ) صف ، ( Stack ) پشته ، ( LinkList

نمونه هایی از ساختارهای داده ای دینامیک هستند . ، (Tree Binary

لیست پیوندی شامل مجموعه ای از عناصر داده ای است که اضافه و

حذف اعضا در هر جای لیست ممکن است .

پشته یک ساختار داده ای مهم در کامپایلرها و سیستم های عامل است

که عمل اضافه و حذف عناصر از ابتدای آن انجام می شود .

صف یک ساختار داده ای است که عمل اضافه کردن از انتها و عمل حذف

کردن از ابتدای آن انجام می شود .

درختهای دودویی برای جستجوی بسیار سریع ، ذخیره سازی داده ها و

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

: Variant نوع داده

برای متغیرهایی بکار می رود که بطور صریح نوع variant نوع داده

آنها تعریف نشده است مثال :

Variant Dim value As

این نوع داده می تواند هر نوع داده ای را در خود ذخیره کند . همچنین

برای ایجاد ساختارهای داده ای مثل لیست های پیوندی ، صف ، پشته و

درخت مناسب است .

و VarType می توان توسط توابع variant نوع داده موجود در

یک مقدار صحیح برمی VarType تعیین کرد . تابع TypeName

است . variant گرداند که نشان دهنده نوع ذخیره شده در

مثال :

Dim value as Variant

 

 

٣٢

value=”Hello”x

برابر 4 خواهد بود . VarType( value ) در اینصورت مقدار بازگشتی

یک رشته برمی گرداند که نشان دهنده نام نوع داده TypeName تابع

است . variant ذخیره شده در

: Dynamic Memory Allocation اخذ حافظه بطور دینامیک

برای ایجاد و نگهداری ساختارهای داده ای دینامیک بایستی در هنگام

اجرای برنامه بتوان فضای بیشتری برای نگهداری داده های جدید بدست

می توان در ویژوال بیسیک حاقظه New آورد . با استفاده از کلمه کلیدی

دینامیک گرفت :

Set NewNode=New ListNode

یک شی از ساختار داده ای مورد نظر ماست . ListNode که

کلاسهای خود ارجاعی :

( Pointer ) کلاس خودارجاعی نوعی کلاس است که دارای یک اشاره گر

به یک شی از همان نوع کلاس باشد . برای مثال اگر کلاس ما به اسم

باشد و متغیر زیر را در آن تعریف کنیم ، این کلاس یک ClistNode

کلاس خود ارجاعی است :

ClistNode Private mNextNode as

برای لینک دادن اعضای یک ساختار داده ای دینامیک mNextNode از

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

به یک شی دیگر از همان کلاس ) . شی های خودارجاعی می ClistNode

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

صف ، پشته و درخت را ایجاد کنند .

 

 

٣٣

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

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

و نشان دهنده انتهای ( Nothing ) به شی دیگری اشاره نمی کند

ساختار داده است .

ایجاد ساختارهای داده ای در ویژوال بیسیک - بخش دوم

لیست پیوندی

همانطور که گفته شد لیست پیوندی مجموعه ای از یکسری داده است که

این داده ها از نوع اشیا خودارجاعی هستند . ( هر شی خودارجاعی دارای

برای نگهدار مقدار و یک اشاره گر به شی بعدی variant یک متغیر نوع

است ) . هر عضو لیست پیوندی را یک گره گویند . هر لیست پیوندی از

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

طریق قسمت لینک موجود در هر گره قابل دسترس هستند . همچنین

تنظیم می شود که انتهای لیست را نشان Nothing لینک آخرین گره با

می دهد .

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

لیست پیوندی قابل تغییر است . بعبارت دیگر لیست های پیوندی

بصورت دینامیک هستند و طول آنها قابل تغییر است اما سایز آرایه

ثابت است . ( البته ویژوال بیسطک از آرایه های با سایز متغیر نیز

پشتیبانی می کند اما این عمل تغییر سایز اتوماتیک نیست .)

عمل درج در لیست پیوندی ساده است و تنها بایستی دو اشاره گر

تغییر یابد .

 

٣۴

لیست های پیوندی را می توان به سادگی با قراردادن هر عضو جدید در

شده نگهداری کرد . sort محل صحیح بصورت

اعضای لیست پیوندی در حافظه بصورت پیوسته ذخیره نمی شوند

بنابراین نمی توان فورا به هر عضو لیست دسترسی داشت ( بر خلاف

آرایه ) .

برای ایجاد لیست پیوندی در ویژوال بیسیک نیاز به سه کلاس است :

کلاسی است که هر گره از لیست را توصیف می : ClistNode 1 – کلاس

کند :

private mNodeData as Variant

ClistNode private mNextNode as

public Property Get Data() as Variant

Data=mNodeData

Property End

Variant)x Public Property Let Dta(ByVal vNewValue as

MNodeData=vNewValue

End Property

NextNode() as ClistNode Public Property Get

Set NextNode=mNextNode

End Property

Property Let NextNode(Byval vNewValue as Public

Variant)x

mNextNode=vNewValue Set

End Property

برای توصیف لیست پیوندی . Clist 2 – کلاس

برای mLastNode و ClistNode برای اشاره به اولین mFirstNode

بکار می رود . زمانیکه یک clist در یک شی ClistNode اشاره به آخرین

 

 

٣۵

تنظیم می شوند . روال Nothing ایجاد می شود این دو متغیر با Clsit

برمی گرداند که می ClistIterator یک شی Property Get Iterator

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

Private mFirstNode as ClistNode

as ClistNode Private mLastNode

Public Function IsEmpty() as boolean

Is Nothing,True,False)x IsEmpty=IIf(mFirstNode

End function

as variant)x Public Sub InsertAtFront(insertItem

Dim tempNode as ClistNode

If IsEmpty() then

mFirstNode=New ClistNode Set

Set mLastNode=mFirstNode

Else

tempNode=mFirstNode Set

ClistNode Set mFirstNode=New

MFirstNode.NextNode=tempNode

if End

MFirstNode.Data=insertItem

End sub

InsertAtBack(insertItem as Variant)x Public sub

Dim tempNode as ClistNode

IsEmpty() then If

Set mLastNode=New ClistNode

mFirstNode=mLastNode Set

Else

Set tempNode=mLastNode

ClistNode Set mLastNode=New

TempNode.NextNode=mLastNode

if End

MLastNode.Data=insertItem

End sub

RemoveFromFront()x Public function

Dim removeItem as Variant

If IsEmpty() then

٣۶

list is empty Msgbox

RemoveFromFront=Null

Exit function

if End

RemoveItem=mFirstNode.Data

If mFirstNode Is mLastNode then

mFirstNode=Nothing Set

Set mLastNode=Nothing

Else

mFirstNode=mFirstNode.NextNode Set

End if

RemoveFromFront=removeItem

function End

Public Function RemoveFromBack()x

Variant Dim removeItem as

Dim current as ClistNode

If IsEmpty() then

empty Msgboc list is

RemovefromBack=Null

Exit function

if End

RemoveItem=mLastNode.Data

If mFirstNode Is mLastNode then

mFirstNode=nothing Set

Set mLastNode=Nothing

Else

current=mFirstNode Set

While Not current.NextNode Is mLastNode

current=current.NextNode Set

Wend

mLastNode=current Set

Current.NextNode=nothing

if End

RemoveFromBack=removeItem

End function

Iterator() as variant Public property Get

Dim iter as ClistIterator

٣٧

ClistIterator Set iter=New

Iter.StartNode=mFirstNode

Set Iterator=iter

property End

: InsertAtFront عملکرد روال

برای تعیین خالی بودن لیست IsEmpty فراخوانی – a

New به mLastNode و mFirstNode اگر لیست خالی باشد – b

اشاره می کنند . ClsitNode

به tempNode اگر لیست خالی نباشد گره جدید توسط اشاره دادن – c

New به گره mFirstNode اولین گره لیست و سپس اشاره دادن

به mFirstNode.NextNode و سپس اشاره دادن ClsitNode

ساخته می شود . tempNode

با مقدار مورد نظر mFirstNode.Data تنظیم – d

: InsertAtBack عملکرد روال

برای تعیین خالی بودن لیست IsEmpty فراخوانی – a

New به mLastNode و mFirstNode اگر لیست خالی باشد – b

اشاره می کنند . ClsitNode

به tempNode اگر لیست خالی نباشد گره جدید توسط اشاره دادن – c

New به گره mLastNode آخرین گره لیست و سپس اشاره دادن

به tempNode.NextNode و سپس اشاره دادن ClsitNode

ساخته می شود . mLastNode

با مقدار مورد نظر mLastNode.Data تنظیم – d

: RemoveFromFront عملکرد روال

برگشت داده می شود . Null اگر لیست خالی باشد – a

removeItem به mFirstNode اگر لیست خالی نباشد داده – b

٣٨

اختصاص داده می شود .

mLastNode و mFirstNode اگر لیست فقط یک گره داشته باشد – c

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

برابر mFirstNode اگر گره بیش از یک عضو داشته باشد – d

می شود . mFirstNode.NextNode

برگشت داده می شود . removeItem مقدار – e

: RemoveFromBack عملکرد روال

برگشت داده می شود . Null اگر لیست خالی باشد – a

removeItem به mLastNode اگر لیست خالی نباشد داده – b

اختصاص داه می شود .

با mLastNode و mFirstNode اگر لیست یک گره داشته باشد – c

مقدار دهی می شوند و گره از لیست حذف می شود . Nothing

برابر current اگر لیست بیش از یک گره داشته باشد متغیر – d

روی گره های current می شود . سپس با استفاده از mFirstNode

لیست حرکت می کنیم تا به گره ای برسیم که به آخرین گره اشاره می

به آن اشاره می کند current را به گره ای که mLastNode کند . سپس

می کنیم تا Nothing را current.NextNode قرار می دهیم و مقدار

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

برگشت داده می شود . removeItem مقدار – e

این کلاس برای حرکت روی گره های لیست : ClistIterator 3 – کلاس

و دستکاری هر گره بکار می رود . از حرکت کننده ها برای چاپ لیست و

می توان استفاده کرد . این Clist یا انجام دادن عملی بر روی هر عضو

و mBookmark به نامهای ClistNode کلاس دارای دو متغیر از نوع

Clist به اولین گره در mFirstNode است . متغیر mFirstNode

٣٩

موقعیت فعلی حرکت کننده بر mBookmark اشاره می کند و متغیر

این دو StartNode Property Let را نشان می دهد . روال Clist روی

اگر مقدار NextItem متغیر را مقدار دهی اولیه می کند . تابع

برگشت می دهد و در Null ، باشد Null برابر mBookmark

و مقدار mBookmark.Data را برابر tempData غیراینصورت مقدار

قرار می دهد . تابع mBookmark.NextNode را برابر mBookmark

برمی True اگر لیست دارای چندین عضو باشد HasMoreItems

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

می کند .

Private mBookmark as ClistNode

as ClistNode Private mFirstNode

Public Property Let StartNode(Byval vNewValue as

variant)x

Set mFirstNode=vNewValue

Set mBookmark=mFirstNode

property End

Public function NextItem()x

Dim tempData as varaint

then mBookmark Is nothing If

NextItem=Null

Else

TempData=mBookmark.Data

mBookmark=mBookmark.NextNode Set

NextItem=tempData

End if

function End

Public function HasMoreItems() as boolean

mBookmark Is HasMoreItems=IIf(Not

nothing,True,False)x

End function

ResetmBookmark()x Public sub

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

۴٠

MBookmark=mFirstNode

End sub

ایجاد ساختارهای داده ای در ویژوال بیسیک - بخش سوم

مثالی از استفاده از کلاسهای لیست پیوندی :

ابتدا کلاسهایی که در جلسه قبل معرفی شد را به پروژه تان اضافه کنید .

Clist سپس در بخش کدنویسی فرمتان ، ابتدا یک شی از نوع کلاس

بصورت زیر تعریف کنید :

Dim list as New Clist

و AddLast ،AddFirst با نامهای CommandButton در فرمتان سه

قرار دهید . ListMember با نام TextBox و نیز یک ShowList

بنویسید : AddFirst کد زیر را برای رویداد کلیک شدن دکمه

Call list.InsertAtFront(ListMember.text)x

بنویسید : AddLast کد زیر را برای رویداد کلیک شدن دکمه

Call list.InsertAtBack(ListMember.text)x

بنویسید : ShowList کد زیر را برای رویداد کلیک شدن دکمه

Dim elements as New ClistIterator

elements=list.Iterator Set

If elements.HasMoreItems=false then msgbox ("list is

empty")x

Else

elements.HasMoreItems While

۴١

Msgbox(elements.NextItem)x

Wend

if end

پشته :

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

می LIFO توانند اضافه شوند . بهمین دلیل به پشته ، ساختمان داده

مقدار دهی می شود که Nothing گویند . قسمت لینک آخرین گره پشته با

نشان دهنده پایین پشته است .

هستند . Pop و Push روالهای اصلی پشته

از بالای پشته Pop یک گره جدید به بالای پشته اضافه می کند و Push

گره ای را حذف کرده و مقدار داده آن را بر می گرداند .

ایجاد ساختارهای داده ای در ویژوال بیسیک - بخش چهارم

کلاس پشته :

همانطور که در بخش قبل گفته شد پشته نوعی لیست پیوندی است که

گره های جدید فقط به انتهای آن اضافه شوند . روالهای اصلی پشته

هستند . Pop و Push

از بالای پشته Pop یک گره جدید به بالای پشته اضافه می کند و Push

گره ای را حذف کرده و مقدار داده آن را بر می گرداند .

و بصورت زیر پیاده سازی Clist یک کلاس پشته را با استفاده از کلاس

می کنیم :

Private list As New Clist

as Variant)x Public Sub Push(value

List.InsertAtFront(value)x

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

۴٢

End sub

Variant Public Function Pop As

Pop=list.RemoveFromFront()x

End Function

IsStackEmpty() As Boolean Public Function

IsStackEmpty=list.IsEmpty()x

function End

Public Property Get Iterator() as variant

Iterator=list.Iterator Set

End Property

تعریف شده است . سپس Clist در این کلاس ابتدا یک شی از نوع کلاس

توسط متد Pop و InsertAtFront توسط متد Push متدهای

پیاده سازی شده اند . RemoveFromFront

یک برنامه نمونه :

را که کد آن Stack برای نوشتن یک برنامه برای کار با پشته ابتدا کلاس

را در بالا دیدید به پروژه تان اضافه کنید . سپس در بخش کد مربوط به

بصورت زیر تعریف کنید : Stack فرمتان ابتدا یک شی از نوع کلاس

Dim mStack as New Stack

و Pop و Push با نامهای CommandButton سپس در فرمتان سه

قرار دهید . StackMember با نام TextBox و نیز یک ShowStack

بنویسید : Push کد زیر را برای کلیک شدن دکمه

mStack.push(StackMember.text)x

بنویسید : Pop کد زیر را برای کلیک شدن دکمه

۴٣

StackMember.text=mStack.Pop()x

بنویسید : ShowStack کد زیر را برای کلیک شدن دکمه

Dim elements as New ClistIterator

elements=mStack.Iterator Set

If elements.HasMoreItems=false then msgbox "stack is

empty"x

Else

While elemets.HasMoreItems

elements.NextItem Msgbox

Wend

ایجاد ساختارهای داده ای در ویژوال بیسیک - بخش پنجم

صف :

صف نوعی ساختار داده ای است که گره ها از ابتدای صف ( سر صف

اضافه می ( tail حذف می شوند و از انتهای صف ( ته صف ( head

است . صف دارای دو FIFO شوند . بنابر این ، صف یک ساختار داده ای

است که اولین متد ، عنصری DelQueue و AddQueue متد به نامهای

را به انتهای صف اضافه می کند و دومین متد ، عنصری را از ابتدای

صف حذف می کند .

استفاده می کنیم : Clist از کلاس Cqueue برای ایجاد کلاس

Private list as New Clist

AddQueue(value as Variant)x Public Sub

(List.InsertAtBack(value

End sub

Function DelQueue() as Variant Public

۴۴

DelQueue=list.RemoveFromFront

function End

Public property Get Iterator() as Variant

Iterator=list.Iterator Set

End Property

درخت :

لیستهای پیوندی ، پشته ها و صف ها جزو ساختارهای داده ای خطی

هستند در حالیکه یک درخت ، یک ساختار داده ای دو بعدی با

خصوصیات ویژه ای است . گره های درخت دارای دو یا چند لینک

هستند . در اینجا در مورد درختهای دودویی یا باینری بحث می کنیم که

در آن همه گره ها دارای دو لینک هستند . گره ریشه اولین گره در درخت

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

گفته می Leaf می گویند . به گره بدون فرزند ، برگ یا Siblings گره

شود .

درختهای جستجوی باینری درخت هایی هستند که در آنها مقدار فرزند

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

گره پدر می باشد .

ایجاد ساختارهای داده ای در ویژوال بیسیک - بخش ششم

۴۵

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

برای ایجاد درختهای جستجوی باینری در ویژوال بیسیک نیاز به ایجاد

دو کلاس داریم :

که هر ند درخت دودویی را توصیف می کند . CTreeNode 1 - کلاس

برای Variant از نوع mNodeData این کلاس دارای یک متغیر به نام

نگهداری داده هر گره است . همچنین دارای دو متغیر اشاره گر به نامهای

می باشد که به ترتیب به فرزند چپ و فرزند راست mRight و mLeft

درخت اشاره می کنند .

Let Data مقدار داده هر گره را بر می گرداند و متد Get Data متد

مقدار داده هر گره را تنظیم می کند .

Left Let آدرس فرزند چپ هر گره را برمی گرداند و متد Get Left متد

فرزند چپ هر گره را تنظیم می کند .

Let آدرس فرزند راست هر گره را برمی گرداند و متد Get Right متد

فرزند راست هر گره را تنظیم می کند . Right

برای اضافه کردن فرزند به یک گره به کار می رود . اگر Insert متد

مقدار گره ای که می خواهیم بعنوان فرزند به درخت اضافه کنیم کوچکتر

از مقدار خود گره باشد بعنوان فرزند چپ و در غیر اینصورت بعنوان

فرزند راست به گره اضافه می شود . اضافه شدن نیز بدین صورت است

که ابتدا بررسی می شود آیا گره قبلا فرزندی داشته است یا نه ؟ اگر

باشد ) این گره Nothing برابر mRight و یا mLeft ) نداشته باشد

جدید مستقیما به گره متصل می شود اما اگر گره قبلا فرزندی داشته

برای آن فرزند اضافه می شود و اینکار تا جایی ادامه Insert باشد متد

می یابد که به گره ای برسیم که فرزندی نداشته باشد :

۴۶

Private mLeft as CtreeNode

CtreeNode Private mRight as

Private mNodeData as Variant

variant Public Property Get Data() as

Data=mNodeData

End property

vNewValue as Variant)x Public Property Let Data(Byval

MNodeData=vNewValue

End property

Get Left() as variant Public Property

Set Left=mLeft

End property

Left(Byval vNewValue as variant)x Public Property Let

Set mLeft=vNewValue

property End

Public Property Get Right() as variant

Right=mRight Set

End Property

variant)x Public Property Let Right(Byval vNewValue as

Set mRight=vNewValue

End Property

as variant)x Public Sub Insert(value

If value

If mLeft Is Nothing Then

mLeft=New CtreeNode Set

MLeft.Data=value

Else

MLeft.Insert(value)x

if End

mNodeData then<Elseif value

If mRight Is Nothing then

CtreeNode mRight=New Set

MRight.Data=value

۴٧

Else

MRight.Insert(value)x

End if

if End

End sub

این کلاس برای ایجاد درخت بکار می رود . این کلاس : CTree 2 - کلاس

برای تعریف ریشه CTreeNode از نوع mRoot دارای متغیری بنام

برای نمایش دادن mOutputString درخت است . همچنین یک متغیر

اعضای درخت دارد .

Private mRoot as CtreeNode

as String Private mOutputString

Public Sub InsertNode(value as Varaint)x

then If mRoot Is Nothing

CtreeNode Set Mnode=New

MRoot.Data=value

Else

MRoot.Insert(value)x

End if

sub End

Public PreorderTraversal()x

MOutputString=””x

PreorderHelper(mRoot)x Call

End sub

CtreeNode)x Private Sub PreorderHelper(node As

If node Is nothing Then

Exit sub

if End

x“ “ & node.Data & MOutputString=mOutputString

۴٨

PreorderHelper(node.left)x Call

Call PreorderHelper(node.right)x

sub End

Public Sub InorderTraversal()x

MOutputString=””x

InorderHelper(mRoot)x Call

End sub

CtreeNode)x Private Sub InorderHelper(node as

If node Is nothing then

Exit sub

End if

InorderHelper(node.Left)x Call

x“ “ & node.Data & MOutputString=mOutputString

Call InorderHelper(node.Right)x

End sub

PostorderTraversal()x Public

MOutputString=””x

PostorderHelper(mRoot)x Call

End sub

CtreeNode)x Private Sub PostorderHelper(node as

If node Is Nothing then

Exit sub

End if

PostorderHelper(node.Left)x Call

PostorderHelper(node.Right)x Call

x“ “ & node.Data & MOutputString=mOutputString

End sub

Varaint Public Property Get Output() as

۴٩

Output=mOutputString

End Property

ایجاد ساختارهای داده ای در ویژوال بیسیک - بخش پایانی

انواع روشهای پیمایش عناصر درخت :

در این روش ابتدا عناصر نیمه سمت چپ درخت ، : InOrder 1 - روش

سپس ریشه و در آخر عناصر نیمه سمت راست درخت نمایش داده می

شوند .

در این روش ابتدا ریشه درخت ، سپس عناصر : PreOrder 2 - روش

نیمه سمت چپ و در پایان عناصر نیمه سمت راست درخت نمایش داده

می شوند .

در این روش ابتدا عناصر نیمه سمت چپ : PostOrder 3 - روش

درخت ، سپس عناصر نیمه سمت راست درخت و در پایان ریشه درخت

نمایش داده می شوند .

مثال : درخت زیر را در نظر بگیرید :

درخت : 1،3،4،5،6،7،8 InOrder نتیجه پیمایش

درخت : 5،3،1،4،7،6،8 PreOrder نتیجه پیمایش

درخت : 1،4،3،6،8،7،5 PostOrder نتیجه پیمایش

: CTree بررسی متدهای کلاس

۵٠

را برابر مقدار value باشد Null اگر گره ریشه برابر : InsertNode متد

مربوط به گره Insert گره ریشه قرار می دهد . در غیر اینصورت متد

ریشه فراخوانی می شود .

رشته چاپ عناصر ریشه را خالی می کند و : PreorderTraversal متد

را فراخوانی می کند . Preorder سپس متد پیمایش

رشته چاپ عناصر ریشه را خالی می کند و : InorderTraversal متد

را فراخوانی می کند . Inorder سپس متد پیمایش

رشته چاپ عناصر ریشه را خالی می کند : PostorderTraversal متد

را فراخوانی می کند . Postorder و سپس متد پیمایش

عناصر پیمایش شده درخت را برمی گرداند . : Get Output متد

یک برنامه نمونه :

را به پروژه تان اضافه کنید . CTree و CTreeNode ابتدا کلاسهای

سپس متغیر زیر را در قسمت کدنویسی فرمتان تعریف کنید :

Dim mTree as New Ctree

Command و دو Value با نام Textbox سپس در فرمتان یک

قرار دهید . Show و Insert با نامهای Button

بنویسید : Insert کد زیر را برای وارد کردن عنصر به درخت برای دکمه

mTree.InsertNode(Value.Text)x

بنویسید : Show درخت برای دکمه InOrder کد زیر را برای پیمایش

Call mTree.InorderTraversal

۵١

: Collection شی

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

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

می توانند دارای نوعهای Collection در واقع عناصر موجود در یک

قابلیت رشد دینامیک دارد . Collection داده ای متفاوت باشند . شی

ایجاد می شوند . توسط متد New توسط کلمه کلیدی Collection شی

Remove عضو اضافه کرد و توسط متد Cllection می توان به Add

توسط متد Collection می توان عضوی را از آن حذف کرد . هر عضو از

می توان تعداد Count قابل دستیابی است . با استفاده از خاصیت Item

را تعیین نمود . بصورت پیش فرض Collection اعضای موجود در

اضافه می شوند ولی توسط Collection اعضای جدید به انتهای

می توان محل اضافه شدن را تغییر داد . Add آرگومانهای اختیاری متد

یک شماره می گیرد که موقعیت عضوی را که می خواهیم Remove متد

آنرا حذف کنیم مشخص می کند .

را نمایش داد : Collection توسط دستورات زیر می توان اعضای یک

Dim mCollection as New Collection

Variant Dim element as

.

.

.

For Each element In mCollection

element Msgbox

۵٢

Collection برای اشاره به هر عضو variant متغیری از نوع element

می باشد

 

Mohsen_mah yar@yahoo.com

 

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