Вы находитесь на странице: 1из 215

Äîðîãèå ó÷åíèêè!

Ýòî ó÷åáíîå ïîñîáèå ðàçðàáîòàíî âñåìèðíî èçâåñòíîé êîðïîðàöèåé Ìàéêðîñîôò,


ìèðîâûì ëèäåðîì â ïðîèçâîäñòâå ïðîãðàììíîãî îáåñïå÷åíèÿ, â ðàìêàõ èíèöèàòèâû
«Ïàðòíåðñòâî â îáðàçîâàíèè». Çàäà÷à èíèöèàòèâû — ïðåäîñòàâèòü øêîëàì âîçìîæíîñòü
ïîâûøåíèÿ êà÷åñòâà îáó÷åíèÿ çà ñ÷åò èñïîëüçîâàíèÿ èíôîðìàöèîííûõ òåõíîëîãèé â
ó÷åáíîì ïðîöåññå.
Èíôîðìàöèîííûå òåõíîëîãèè îáëàäàþò äîñòàòî÷íûì ïîòåíöèàëîì äëÿ òîãî, ÷òîáû
äàòü âàì âîçìîæíîñòü ïðèîáðåñòè íàâûêè, êîòîðûå áóäóò íåîáõîäèìû â áóäóùåé ðàáî-
òå, — íàâûêè ýôôåêòèâíîé îáðàáîòêè èíôîðìàöèè è óïðàâëåíèÿ åþ, íàâûêè îáùåíèÿ
è ñîâìåñòíîé (ãðóïïîâîé) ðàáîòû. Äëÿ ðàçâèòèÿ ýòèõ è äðóãèõ íàâûêîâ, ïîëó÷èâøèõ
íàçâàíèå «íàâûêè XXI âåêà», è ñëóæàò ðàçðàáîòàííûå Ìàéêðîñîôò ó÷åáíûå ïîñîáèÿ.
Ó÷àñòèå Ìàéêðîñîôò â ñîçäàíèè ýòèõ ó÷åáíèêîâ îáåñïå÷èâàåò âûñîêîå êà÷åñòâî ó÷åá-
íûõ ïîñîáèé è ïåðåäà÷ó ýêñïåðòíîãî çíàíèÿ, íàêîïëåííîãî âíóòðè êîðïîðàöèè, íåïîñðåä-
ñòâåííî ó÷èòåëþ è ó÷åíèêó. Íåêîòîðûå ó÷åáíûå êóðñû Ìàéêðîñîôò ñåðèè «Ïàðòíåðñòâî â
îáðàçîâàíèè» ïðåäíàçíà÷åíû äëÿ ïîäãîòîâêè ãðàìîòíûõ ïîëüçîâàòåëåé ïåðñîíàëüíûõ
êîìïüþòåðîâ, äðóãèå êóðñû ïðåäíàçíà÷åíû äëÿ ðåáÿò, áîëåå ãëóáîêî èíòåðåñóþùèõñÿ èí-
ôîðìàöèîííûìè òåõíîëîãèÿìè è æåëàþùèõ ñòàòü ñïåöèàëèñòàìè â ýòîé îáëàñòè.
Ó÷åáíûå êóðñû Ìàéêðîñîôò ñåðèè «Ïàðòíåðñòâî â îáðàçîâàíèè» ïåðåâåäåíû íà
ÿçûêè ìíîãèõ ñòðàí ìèðà è óñïåøíî èñïîëüçóþòñÿ âî ìíîãèõ ñòðàíàõ.
Âû äåðæèòå â ðóêàõ ó÷åáíîå ïîñîáèå «Îñíîâû ïðîãðàììèðîâàíèÿ íà ïðèìåðå Visual
Basic .NET», êîòîðîå ïîìîæåò âàì ïîãðóçèòüñÿ â óâëåêàòåëüíûé ìèð îáúåêòíî-îðèåíòèðî-
âàííîãî ïðîãðàììèðîâàíèÿ è ïî÷óâñòâîâàòü ñåáÿ òâîðöîì, ñïîñîáíûì ñîçäàâàòü èíòåðåñ-
íûå ïðîãðàììû. Ýòî ó÷åáíîå ïîñîáèå ïîçâîëèò âàì ëó÷øå ïîíÿòü ðàáîòó ïðîãðàììèñòà.
Ñðåäè äðóãèõ ó÷åáíèêîâ, ðàçðàáîòàííûõ êîìïàíèåé Ìàéêðîñîôò, âû íàéäåòå ñëå-
äóþùèå:
q Ó÷åáíûå ïðîåêòû ñ èñïîëüçîâàíèåì Microsoft Office. Êóðñ ïðåäïîëàãàåò âûïîë-
íåíèå ðàçëè÷íûõ óâëåêàòåëüíûõ ïðîåêòîâ, çíàêîìÿùèõ ó÷åíèêîâ ñ íåêîòîðûìè,
ðàíåå íåèçâåñòíûìè îáëàñòÿìè äåÿòåëüíîñòè (íàïðèìåð, ñ òàêèìè, êàê îñíîâû
ìàðêåòèíãà, ãðàìîòíîå ñîñòàâëåíèå ðåçþìå è ïîèñê ðàáîòû, îïòèìàëüíûå ïîäõîäû
ê ñîâåðøåíèþ ïîêóïîê è äð.).
q Îñíîâû êîìïüþòåðíûõ ñåòåé. Êóðñ çíàêîìèò ñ îñíîâàìè ãðàìîòíîãî ïîñòðîåíèÿ è
ïîääåðæêè êîìïüþòåðíûõ ñåòåé è Èíòåðíåòà, ïîìîãàÿ ó÷àùèìñÿ ïðèîáðåñòè çíà-
íèÿ è íàâûêè, âîñòðåáîâàííûå â ñåãîäíÿøíåì âûñîêîòåõíîëîãè÷íîì îáùåñòâå.
q Ïåðñîíàëüíûé êîìïüþòåð: íàñòðîéêà è òåõíè÷åñêàÿ ïîääåðæêà. Êóðñ äàåò íå-
îáõîäèìóþ òåîðåòè÷åñêóþ è ïðàêòè÷åñêóþ ïîäãîòîâêó äëÿ ðàáîòû â êà÷åñòâå
ñïåöèàëèñòîâ ñëóæáû òåõíè÷åñêîé ïîääåðæêè. Ïðîãðàììà êóðñà âêëþ÷àåò îáó-
÷åíèå ðåìîíòó è íàñòðîéêå êîìïüþòåðîâ, áàçàì äàííûõ è îñíîâàì ðàáîòû ñëóæá
òåõíè÷åñêîé ïîìîùè.
Ìû æåëàåì âàì óñïåõîâ íà ïóòè îáðåòåíèÿ íîâûõ çíàíèé è áóäåì ðàäû, åñëè âàì
ïîíðàâèòñÿ íàø êóðñ! Î ñâîèõ âïå÷àòëåíèÿõ îá ýòîì ó÷åáíîì êóðñå âû ìîæåòå ðàññêà-
çàòü íàì, íàïèñàâ ïî ýëåêòðîííîé ïî÷òå íà àäðåñ: mailto:russia@microsoft.com
Ñ ñàìûìè íàèëó÷øèìè ïîæåëàíèÿìè,
ñîòðóäíèêè ðîññèéñêîãî Ïðåäñòàâèòåëüñòâà Ìàéêðîñîôò
http://www.microsoft.com/rus
Ðåêîìåíäàöèè ïî èñïîëüçîâàíèþ ó÷åáíî-ïðîãðàììíîãî êîìïëåêñà
1. Ó÷åáíî-ïðîãðàììíûé êîìïëåêñ ïî êóðñó «Îñíîâû ïðîãðàììèðîâàíèÿ íà ïðèìå-
ðå Visual Basic .NET» ïîçâîëÿåò íàó÷èòüñÿ ðàçðàáàòûâàòü ïðîåêòû íà ÿçûêå
îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ Visual Basic .NET. Â ñîñòàâ
ó÷åáíî-ïðîãðàììíîãî êîìïëåêñà âõîäÿò:
q ó÷åáíîå ïîñîáèå ïî ÿçûêó îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ Visual
Basic .NET;
q êîìïüþòåðíûé ïðàêòèêóì íà êîìïàêò-äèñêå Microsoft-CD, êîòîðûé ñîäåðæèò
äèñòðèáóòèâ ñèñòåìû îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ Visual
Basic 2005 Express Edition, ó÷åáíîå ïîñîáèå â ôîðìàòå Web-ñòðàíèö, à òàêæå îò-
âåòû íà çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ, ò. å. ãîòîâûå ïðîåêòû íà
ÿçûêå ïðîãðàììèðîâàíèÿ Visual Basic .NET;
q ìåòîäè÷åñêîå ïîñîáèå äëÿ ó÷èòåëåé ïî îñíîâàì îáúåêòíî-îðèåíòèðîâàííîãî ïðî-
ãðàììèðîâàíèÿ íà ÿçûêå Visual Basic .NET, äîñòóïíîå äëÿ çàãðóçêè ñ web-ñåðâå-
ðà www.microsoft.com\rus\education
2. Ìèíèñòåðñòâîì îáðàçîâàíèÿ è íàóêè ÐÔ äëÿ îáó÷åíèÿ ïðîãðàììèðîâàíèþ ðåêî-
ìåíäîâàíà ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET. Ðóññêóþ âåðñèþ Visual
Basic .NET 2003 êîìïàíèÿ Ìàéêðîñîôò ïðåäëàãàåò äëÿ ó÷åáíûõ çàâåäåíèé ïî
ñïåöèàëüíûì íèçêèì öåíàì è ñ ðàñøèðåííûìè óñëîâèÿìè ïî èñïîëüçîâàíèþ
(ñïåöèàëüíàÿ ïðîãðàììà ëèöåíçèðîâàíèÿ äëÿ ñðåäíèõ ó÷åáíûõ çàâåäåíèé:
http://www.microsoft.com/Rus/Licensing/Volume/Academic/PilSa.mspx). Îáëåã÷åí-
íàÿ âåðñèÿ Visual Basic 2005 Express Edition ïî ðàçðåøåíèþ Microsoft ðàçìåùåíà
íà CD-äèñêå, êîòîðûé âõîäèò â ñîñòàâ ó÷åáíî-ìåòîäè÷åñêîãî êîìïëåêñà.
3. Â ïðîöåññå âûïîëíåíèÿ ïðîåêòîâ â ñèñòåìàõ îáúåêòíî-îðèåíòèðîâàííîãî ïðî-
ãðàììèðîâàíèÿ ïðîèçâîäèòñÿ çàïèñü èíôîðìàöèè íà äèñê. Ïîýòîìó íåîáõîäè-
ìî ïåðåä çàïóñêîì ïðîåêòîâ ñêîïèðîâàòü çààðõèâèðîâàííûå ïàïêè ïðîåêòîâ ñ
Microsoft-CD íà æåñòêèé äèñê.
4. Â òåêñòå ïîñîáèÿ ïðèíÿòû ñëåäóþùèå øðèôòîâûå âûäåëåíèÿ:
q êóðñèâîì âûäåëåíû âàæíûå ïîíÿòèÿ è òåðìèíû, à òàêæå íàçâàíèÿ äèàëîãîâûõ
îêîí, ïóíêòîâ ìåíþ è óïðàâëÿþùèõ ýëåìåíòîâ (òåêñòîâûõ ïîëåé, êíîïîê
è ò. ä.) ãðàôè÷åñêîãî èíòåðôåéñà;
q øðèôòîì Courier âûäåëåíû òåêñòû ïðîãðàìì íà ÿçûêå ïðîãðàììèðîâàíèÿ
Visual Basic.
5. Ïðàêòè÷åñêèå çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ, ïðèâåäåííûå â êîíöå
ïàðàãðàôîâ, îáîçíà÷àþòñÿ çíà÷êîì .
6. Ìàòåðèàëû, ñîäåðæàùèå äîïîëíèòåëüíóþ èíòåðåñíóþ èíôîðìàöèþ, âûäåëåíû
çíà÷êîì .
7. Ïàðàëëåëüíî èçëîæåíèþ îñíîâ ïðîãðàììèðîâàíèÿ íà ÿçûêå Visual Basic .NET
ïðåäëàãàåòñÿ ñîâåðøèòü «ïóòåøåñòâèå âî âðåìåíè», â íà÷àëå 12 ãëàâ ïðåäñòàâ-
ëåíà èñòîðèÿ ðàçâèòèÿ Microsoft ÷åðåç ñîçäàíèå ðàçëè÷íûõ âåðñèé îïåðàöèîí-
íûõ ñèñòåì è ÿçûêà ïðîãðàììèðîâàíèÿ Basic.
Ãëàâà 1

Ïðîãðàììû
â ïîâñåäíåâíîé æèçíè

1.1. Ïðîãðàììû â ïîâñåäíåâíîé æèçíè


1.2. ×åì çàíèìàþòñÿ ïðîãðàììèñòû
1.3. ×òî òàêîå ïðîãðàììà
1.4. Âîçìîæíîñòè ÿçûêîâ ïðîãðàììèðîâàíèÿ
1.5. Ñèíòàêñèñ ÿçûêîâ ïðîãðàììèðîâàíèÿ

 èþëå 1975 ãîäà Áèëëîì Ãåéòñîì è


Ïîëîì Àëëåíîì áûëà ñîçäàíà êîì-
ïàíèÿ Microsoft. Â íàñòîÿùåå âðåìÿ êîðïîðàöèÿ
Microsoft ÿâëÿåòñÿ âåäóùèì ðàçðàáîò÷èêîì ïðî-
ãðàììíîãî îáåñïå÷åíèÿ äëÿ êîìïüþòåðîâ. Îïå-
ðàöèîííàÿ ñèñòåìà Windows è åå ðàçëè÷íûå
âåðñèè âîò óæå áîëåå 15 ëåò óñòàíàâëèâàþòñÿ íà
áîëüøèíñòâî ïåðñîíàëüíûõ êîìïüþòåðîâ â ìèðå.
ßçûê ïðîãðàììèðîâàíèÿ Visual Basic ÿâëÿåòñÿ
îäíèì èç íàèáîëåå ðàñïðîñòðàíåííûõ ÿçûêîâ
îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ.
6 Ãëàâà 1

1.1. Ïðîãðàììû â ïîâñåäíåâíîé


æèçíè
Âî ìíîæåñòâå ñàìûõ îáû÷íûõ ïðåäìåòîâ âîêðóã íàñ
çàëîæåíû ïðîãðàììû, à åùå áîëüøå ðàçíûõ âåùåé
ñîçäàíî è ïðîâåðåíî ñ ïîìîùüþ ïðîãðàìì. Â íàøå
âðåìÿ ïðîãðàììû èñïîëüçóþòñÿ íå òîëüêî â êàëüêó-
ëÿòîðàõ, ðîáîòàõ è êîìïüþòåðàõ. Ñåé÷àñ ïðîãðàì-
ìèðóåìûìè ñòàëè ìíîãèå áûòîâûå ïðèáîðû è èã-
ðóøêè, è äàæå â àâòîìîáèëÿõ åñòü ïðîãðàììû.
Íàïðèìåð, â àâòîìîáèëå ïî÷òè ìèëëèîí äåòà-
ëåé, è ìíîãèå èç íèõ íàâåðíÿêà ïðîåêòèðîâàëèñü ñ
ïîìîùüþ êîìïüþòåðà. Àýðîäèíàìèêó êîðïóñà, ñêî-
ðåå âñåãî, ðàçðàáàòûâàëè è òåñòèðîâàëè ñ ïîìîùüþ
ìîäåëè àýðîäèíàìè÷åñêîé òðóáû íà êîìïüþòåðå.
Ñèäåíüÿ òîæå, íàâåðíîå, áûëè ñïðîåêòèðîâàíû íà
êîìïüþòåðå è âêëþ÷åíû â 3D-ìîäåëü àâòîìîáèëÿ.
Êðîìå òîãî, ìíîãèå äåòàëè ìîãëè áûòü ñäåëàíû ðîáî-
òàìè, êîòîðûìè óïðàâëÿþò êîìïüþòåðû.
 àâòîìîáèëå ìîãóò áûòü ñèñòåìà GPS (Global
Positioning System — ñèñòåìà ãëîáàëüíîãî ïîçèöèî-
íèðîâàíèÿ), ìèêðîâîëíîâêà è ñòåðåîñèñòåìà. Ýòè
ïðèáîðû ìîæíî ïðîãðàììèðîâàòü è äèñòàíöèîííî
óïðàâëÿòü èìè. Ýòî çíà÷èò, ÷òî â íèõ åñòü ïðîãðàì-
ìû, îïðåäåëÿþùèå, ÷òî ýòè ïðèáîðû äåëàþò, êîãäà
ìû íàæèìàåì èõ êíîïêè. Ýòè ïðîãðàììû ïîñòîÿííî
õðàíÿòñÿ â ÷èïàõ íà ïëàòàõ â ýòèõ ïðèáîðàõ, íî ïîÿ-
âèëèñü îíè òàì áëàãîäàðÿ òîìó, ÷òî èõ êîãäà-òî íà-
ïèñàëè ëþäè.
Ñàìîå õàðàêòåðíîå äëÿ ïðîãðàìì — òî, ÷òî îíè
ìîãóò äåëàòü ïî÷òè âñ¸, ðåøàòü ïðàêòè÷åñêè ëþáûå
çàäà÷è. Ñåé÷àñ ïðîãðàììû ïîâñåìåñòíî èñïîëüçóþò-
ñÿ íà ðàáîòå è äîìà, äëÿ íàïèñàíèÿ ïèñåì, ïîäñ÷åòà
ðàñõîäîâ è ò. ä. Ïî÷òè âî âñåõ êîìïàíèÿõ äëÿ ó÷åòà
äåíåã, êëèåíòîâ, ïîêóïîê è ïðîèçâåäåííûõ òîâàðîâ
òîæå èñïîëüçóþòñÿ ïðîãðàììû. Äëÿ õðàíåíèÿ, èçâ-
ëå÷åíèÿ, ïðîñìîòðà è ôèëüòðàöèè èíôîðìàöèè åñòü
îãðîìíîå ìíîæåñòâî ðàçíûõ ïðîãðàìì. Êðîìå òîãî,
ìíîæåñòâî ïðîãðàìì ïèøóòñÿ äëÿ èññëåäîâàíèÿ
ñëîæíûõ ïðîáëåì — íàïðèìåð, ïðîáëåì èñêóññò-
Ïðîãðàììû â ïîâñåäíåâíîé æèçíè 7

âåííîãî èíòåëëåêòà, ãëîáàëüíîãî ïîòåïëåíèÿ èëè


ãåíåòèêè. Åñòü ñïåöèàëüíûå ïðîãðàììû äëÿ ïðîåê-
òèðîâàíèÿ ìàøèí, ðèñîâàíèÿ, èãð — êàêóþ áû çà-
Âîïðîñû äëÿ
äà÷ó âû íè ïðèäóìàëè, äëÿ åå ðåøåíèÿ, âåðîÿòíî,
ðàçìûøëåíèÿ óæå åñòü ïðîãðàììà. Âñïîìíèòå îá ýëåêòðîííîé ìó-
1. Ïåðå÷èñëèòå íå ìåíåå çûêå: ìîæíî ñïîðèòü î òîì, õîðîøà îíà èëè íå
÷åòûðåõ ïðèìåðîâ ïðè- î÷åíü, íî áåññïîðíî òî, ÷òî îíà íàïèñàíà íà êîìïüþ-
ìåíåíèÿ êîìïüþòåðîâ òåðå. Äà, åùå ñóùåñòâóþò ïðîãðàììû äëÿ ðàáîòû â
â ïîâñåäíåâíîé æèçíè.
Èíòåðíåòå, ñåòåâûå ïðîãðàììû è ïðîãðàììû âèðòó-
àëüíîé ðåàëüíîñòè!
Êðîìå òîãî, íåêîòîðûå ëþäè ïèøóò ïðîãðàììû
ïðîñòî ðàäè èíòåðåñà! Îäíà øêîëüíàÿ ó÷èòåëüíèöà
íàïèñàëà ïðîãðàììó, àâòîìàòè÷åñêè ñîñòàâëÿâøóþ
äîìàøíèå çàäàíèÿ ïî ìàòåìàòèêå. Åå ñåñòðà íàïèñà-
ëà ïðîãðàììó, êîòîðàÿ ïèñàëà ÿïîíñêèå ñòèõè õîê-
êó è ïåðåâîäèëà èõ íà èñëàíäñêèé. Øêîëüíèêè
ñîáèðàþò ðîáîòîâ èç êîíñòðóêòîðà Ëåãî è ïèøóò
ïðîãðàììû ïî óïðàâëåíèþ èìè.

1.2. ×åì çàíèìàþòñÿ ïðîãðàììèñòû


Ìíîãèå ëþäè ñ÷èòàþò, ÷òî ïðîãðàììèñòû — ýòî íå-
ïîíÿòíûå ëè÷íîñòè, êîòîðûå ñèäÿò çà êîìïüþòåðà-
ìè, íàáèðàÿ íåïîíÿòíûå òåêñòû, ïîåäàþò çàñîõøèå
áóòåðáðîäû è ïüþò êîôå, ðàáîòàÿ íî÷è íàïðîëåò.
Õîòÿ òàêîå ïðåäñòàâëåíèå ÷àñòî îêàçûâàåòñÿ âåð-
íûì, íå ýòî ãëàâíîå.
Õîðîøóþ ïðîãðàììó íåëüçÿ ñîòâîðèòü çà îäíó
íî÷ü. Íóæíî äîëãî ðàáîòàòü, ïëàíèðîâàòü è ïðîâå-
ðÿòü, ÷òîáû ñîçäàòü ïðîãðàììó, êîòîðàÿ áóäåò äå-
ëàòü òî, ÷òî äîëæíà. Êðîìå òîãî, ïðîãðàììà äîëæíà
ïîçâîëÿòü ëåãêî èçìåíÿòü åå, â íåé íå äîëæíî áûòü
îøèáîê è ñ íåé äîëæíî áûòü óäîáíî ðàáîòàòü. Â ñî-
çäàíèè áîëüøèõ ïðîãðàìì ìîãóò ó÷àñòâîâàòü ñîòíè
ïðîãðàììèñòîâ, à èìè íóæíî óïðàâëÿòü, îðãàíèçî-
âûâàòü èõ è êîíòðîëèðîâàòü.
Ïîýòîìó, õîòÿ íàïèñàíèå ïðîãðàìì — îäíà èç
çàäà÷ ïðîãðàììèñòîâ, ïðîãðàììèñòû äåëàþò è ìíî-
æåñòâî äðóãèõ âåùåé:
8 Ãëàâà 1

q Ðåøàþò, ÷òî áóäåò äåëàòü ïðîãðàììà.


q Ïðîåêòèðóþò ïîëüçîâàòåëüñêèé èíòåðôåéñ.
q Ðåøàþò, êàêîé ÿçûê ïðîãðàììèðîâàíèÿ èñ-
ïîëüçîâàòü.
q Ïðîåêòèðóþò àðõèòåêòóðó ïðîãðàììû è ðå-
øàþò, êàê ÷àñòè ïðîãðàììû áóäóò âçàèìîäåé-
ñòâîâàòü ìåæäó ñîáîé.
q Îïðåäåëÿþò ñòèëè íàïèñàíèÿ è îôîðìëåíèÿ
êîäà ïðîãðàììû.
q Ðåøàþò, êòî áóäåò ïèñàòü êîíêðåòíûå ÷àñòè
ïðîãðàììû.
q Ôîðìèðóþò ðàñïèñàíèå ðàçðàáîòêè è ñëåäÿò
çà òåì, ñêîëüêî âðåìåíè óõîäèò íà íàïèñàíèå
êîäà.
q Îáó÷àþò äðóãèõ ïðîãðàììèñòîâ ðàáîòå ñ èíñò-
ðóìåíòàìè ðàçðàáîòêè ïðîãðàìì.
q Ïîäãîòàâëèâàþò è îáåñïå÷èâàþò ðàáîòó êîìïü-
þòåðîâ è ñåòåé, èñïîëüçóåìûõ äðóãèìè ïðî-
ãðàììèñòàìè.
q Ïèøóò ïðîãðàììíûé êîä.
q Ïèøóò äîêóìåíòàöèþ ê ïðîãðàììíîìó êîäó.
q Ñîçäàþò áàçû äàííûõ äëÿ õðàíåíèÿ èíôîðìà-
öèè, êîòîðàÿ èñïîëüçóåòñÿ ïðîãðàììàìè èëè
ñîçäàåòñÿ èìè.
q Êîíòðîëèðóþò ñîçäàíèå ýëåìåíòîâ îôîðìëå-
íèÿ è ãðàôèêè.
q Êîíòðîëèðóþò ââîä äàííûõ â áàçû äàííûõ.
q Òåñòèðóþò ïðîãðàììíûé êîä è ïðîâåðÿþò ïðà-
âèëüíîñòü åãî ðàáîòû.
q Ïîäãîòàâëèâàþò ïðîãðàììû ê óñòàíîâêå íà
êîìïüþòåðû ïîëüçîâàòåëåé èëè ñåðâåðû.
q Ðåøàþò, êàêèå íîâûå âîçìîæíîñòè äîáàâèòü
â ïðîãðàììó.
Ïðîãðàììû â ïîâñåäíåâíîé æèçíè 9

q Èñïðàâëÿþò íàéäåííûå ïîëüçîâàòåëÿìè


îøèáêè.
Âîïðîñû äëÿ q Îáó÷àþò ïîëüçîâàòåëåé ðàáîòå ñ ïðîãðàììîé.
ðàçìûøëåíèÿ q Ïèøóò äîêóìåíòàöèþ è îáó÷àþùèå ìàòåðèà-
1. Ñ ïîìîùüþ Èíòåðíåòà ëû ê ïðîãðàììå.
èëè äðóãèõ ðåñóðñîâ
Êàê âèäèòå, íàïèñàíèå ïðîãðàììíîãî êîäà —
âûÿñíèòå, êàêîâà çàð-
ïëàòà ó ïðîãðàììèñòîâ ýòî òîëüêî îäíà èç ìíîæåñòâà âåùåé, êîòîðûìè çà-
è äðóãèõ ñïåöèàëèñòîâ íèìàþòñÿ ïðîãðàììèñòû.
ïî êîìïüþòåðàì â ìå-
ñòå, ãäå âû æèâåòå.
2. Êàêèå êîìïàíèè — ðàç- 1.3. ×òî òàêîå ïðîãðàììà
ðàáîò÷èêè ïðîãðàì-
ìíîãî îáåñïå÷åíèÿ âû Êîìïüþòåðíàÿ ïðîãðàììà ñîñòîèò èç ñòðîê êîäà,
çíàåòå? çàïèñàííîãî íà ñïåöèàëüíîì ÿçûêå, ïðèáëèæåí-
íîì ê îáû÷íîìó ÷åëîâå÷åñêîìó ÿçûêó. Ïðîãðàììó
ìîæíî ïèñàòü íà îäíîì èç ìíîæåñòâà ÿçûêî⠗
ÿçûê ìîæíî âûáèðàòü ïî åãî âîçìîæíîñòÿì è ïî-
òðåáíîñòÿì âàøåé ïðîãðàììû. Êîãäà ïðîãðàììà íà-
ïèñàíà, îíà êîìïèëèðóåòñÿ — ïðåîáðàçóåòñÿ â ÿçûê,
ïîíÿòíûé êîìïüþòåðó, ÷òîáû êîìïüþòåð ñìîã åå
âûïîëíèòü.
Íà îäíîì è òîì æå ÿçûêå ïðîãðàììèðîâàíèÿ
ìîæíî ïèñàòü ïðîãðàììû ðàçíûõ òèïîâ. Íàïðè-
ìåð, ìîæíî íàïèñàòü èãðó, ïðîãðàììó äëÿ ïðîñìîò-
ðà ðèñóíêîâ â âèäå ñëàéä-øîó è ïðîãðàììó,
ïðîñ÷èòûâàþùóþ òðàåêòîðèþ ðàêåòû, — âñå íà îä-
íîì è òîì æå ÿçûêå ïðîãðàììèðîâàíèÿ. Ýòè ïðî-
ãðàììû äåëàåò ðàçíûìè êîä, êîòîðûé âû íàïè-
øåòå, — èìåííî îí ïðèäàåò ïðîãðàììàì ðàçíóþ
ôóíêöèîíàëüíîñòü.
Êîä, êîòîðûé âû ïèøåòå, îïðåäåëÿåò, ÷òî ïðî-
ãðàììà áóäåò äåëàòü. Êîä îïðåäåëÿåò, ÷òî ïðîèçîé-
äåò, êîãäà âû íàæìåòå êíîïêó èëè âûáåðåòå ïóíêò â
ñïèñêå. Âàø êîä îáåñïå÷èâàåò «ðàçóì» ïðîãðàì-
ìû — îí îïðåäåëÿåò, êàê ïðîãðàììà áóäåò ïðèíè-
ìàòü ðåøåíèÿ, ñêîëüêî ðàç îíà áóäåò âûïîëíÿòü
êàêèå-òî äåéñòâèÿ è êàêèå âû÷èñëåíèÿ îíà áóäåò
ïðîèçâîäèòü. Ìîæíî íàïèñàòü êîä äëÿ âûïîëíåíèÿ
ðàñ÷åòîâ, íàïèñàíèÿ òåêñòà, ðåàãèðîâàíèÿ íà äåéñò-
10 Ãëàâà 1

âèÿ ïîëüçîâàòåëÿ, ñáîðà äàííûõ èëè ïîêàçà èíôîð-


ìàöèè íà ýêðàíå.
Ïèñàòü êîä íå òàê óæ ïðîñòî, íî ýòî ìîæåò îêà-
Ïåðâûå êîìïüþòåðíûå ïðî- çàòüñÿ î÷åíü èíòåðåñíî è çàõâàòûâàþùå. Èçó÷èâ
ãðàììû ïðèõîäèëîñü ïè- ÿçûê ïðîãðàììèðîâàíèÿ, âû ïîëó÷èòå íîâîå ñðåäñò-
ñàòü íà ìàøèííîì ÿçûêå. âî âûðàæåíèÿ ñâîåãî ñòðåìëåíèÿ òâîðèòü, èññëåäî-
Ïîñòåïåííî áûëè ñîçäà- âàòü, ðåøàòü ïðîáëåìû è èãðàòü. Ïðîãðàììèðîâàíèå
íû ìàøèííî-íåçàâèñèìûå ïîõîæå íà ðàáîòó ñ ãëèíîé, ìåòàëëîì èëè ìàòåìàòè-
ÿçûêè ïðîãðàììèðîâàíèÿ,
èñïîëüçîâàâøèåñÿ äëÿ
êîé.
ðåøåíèÿ ðàçíûõ çàäà÷:

q FORTRAN 1.4. Âîçìîæíîñòè ÿçûêîâ


(ðàñøèôðîâûâàåòñÿ
êàê FORmula ïðîãðàììèðîâàíèÿ
TRANslator —
òðàíñëÿòîð ôîðìóë) — Êîìïüþòåðíûå ÿçûêè èñïîëüçóþòñÿ ïðàêòè÷åñêè
ÿçûê, ïðåäíàçíà÷åííûé äëÿ òîãî æå, äëÿ ÷åãî è îáû÷íûå ÷åëîâå÷åñêèå ÿçû-
äëÿ íàó÷íûõ è êè, — äëÿ ñîîáùåíèé. Îíè ïîçâîëÿþò ñîîáùèòü
òåõíè÷åñêèõ ðàñ÷åòîâ. êîìïüþòåðó, ÷òî îí äîëæåí äåëàòü, ÷òîáû ðåøèòü
q COBOL çàäà÷ó.
(ðàñøèôðîâûâàåòñÿ Çíàåòå ëè âû, ÷òî ïîñòîÿííî ïîÿâëÿþòñÿ íîâûå
êàê COmmon ÿçûêè ïðîãðàììèðîâàíèÿ? Çà ïîñëåäíèå 50 ëåò áûëî
BusinessOriented ñîçäàíî ìíîæåñòâî ðàçíûõ ÿçûêîâ ïðîãðàììèðîâà-
Language — íèÿ. Êàê è ÷åëîâå÷åñêèå ÿçûêè, íåêîòîðûå ÿçûêè
ñòàíäàðòíûé ÿçûê
ïðîãðàììèðîâàíèÿ áîëüøå íå èñïîëüçóþòñÿ. Íà èõ
äëÿ äåëîâîãî
ïðèìåíåíèÿ) — ÿçûê ìåñòî ïðèøëè äðóãèå ÿçûêè. Íåêîòîðûå ÿçûêè ïðî-
â îñíîâíîì, ãðàììèðîâàíèÿ ðàçâèâàþòñÿ è èñïîëüçóþòñÿ óæå
ïðåäíàçíà÷àâøèéñÿ 20 èëè 30 ëåò.
äëÿ êîììåð÷åñêèõ Ïðè ñîçäàíèè íîâîãî ÿçûêà ïðîãðàììèðîâàíèÿ
ïðèëîæåíèé, îáû÷íî áåðóòñÿ ëó÷øèå ÷åðòû è âîçìîæíîñòè óæå
îáðàáàòûâàâøèõ ñóùåñòâóþùèõ ÿçûêîâ, ê íèì äîáàâëÿåòñÿ ÷òî-òî
áîëüøèå îáúåìû
íîâîå, è ïîëó÷àåòñÿ íîâûé ÿçûê. Ñîâðåìåííûå ÿçû-
íå÷èñëîâûõ äàííûõ.
êè ïðîãðàììèðîâàíèÿ ó÷èòûâàþò èçìåíåíèÿ â
q LISP
êîìïüþòåðàõ è ðàçâèòèå ðàíåå ñîçäàííûõ ïðîãðàìì.
(ðàñøèôðîâûâàåòñÿ
êàê List Processing —
Ïåðâûå êîìïüþòåðíûå ïðîãðàììû ïðèõîäè-
îáðàáîòêà ñïèñêîâ) — ëîñü ïèñàòü íà ìàøèííîì ÿçûêå, äëÿ òîãî ÷òîáû
ÿçûê, ñîçäàííûé èõ ñðàçó ïîíèìàë êîìïüþòåð. Ýòè ïðîãðàììû
äëÿ èññëåäîâàíèé ïðåäñòàâëÿëè ñîáîé äëèííûå ïîñëåäîâàòåëüíîñòè
â îáëàñòè åäèíèö è íóëåé. Ýòî áûëî î÷åíü íåóäîáíî! Ïîýòî-
èñêóññòâåííîãî ìó áûëè ñîçäàíû ïðîãðàììû, íàçâàííûå êîìïèëÿ-
èíòåëëåêòà. òîðàìè. Êîìïèëÿòîðû ìîãëè ïðåîáðàçîâûâàòü â
Ïðîãðàììû â ïîâñåäíåâíîé æèçíè 11

q BASIC ïîíÿòíóþ êîìïüþòåðó ôîðìó êîä, íàïèñàííûé íà


(ðàñøèôðîâûâàåòñÿ áîëåå óäîáíûõ äëÿ ëþäåé ÿçûêàõ. Ïî÷òè âñå ñî-
êàê Beginner’s All-Purpose âðåìåííûå ÿçûêè ïðîãðàììèðîâàíèÿ — êîìïèëè-
Symbolic Instruction
Code — óíèâåðñàëüíûé
ðóåìûå. Ýòî çíà÷èò, ÷òî íàïèñàííûå íà íèõ
ÿçûê ñèìâîëüíûõ ïðîãðàììû, íàïîìèíàþùèå îáû÷íûé àíãëèéñêèé
èíñòðóêöèé äëÿ òåêñò, ïðåîáðàçóþòñÿ â ïîíÿòíûé êîìïüþòåðó
íà÷èíàþùèõ) — ÿçûê, âèä.
îòëè÷àþùèéñÿ ïðîñòîòîé Íà÷èíàÿ íîâûé ïðîåêò, âû äîëæíû ðåøèòü, êà-
èñïîëüçîâàíèÿ. êîé ÿçûê ïðîãðàììèðîâàíèÿ áóäåòå èñïîëüçîâàòü.
q Pascal (íàçâàí åãî
Åñòü ëè ó âûáðàííîãî ÿçûêà âñå íóæíûå âîçìîæíî-
ñîçäàòåëåì Âèðòîì â
÷åñòü âåëèêîãî ôèçèêà ñòè? Ëåãêî ëè åãî èñïîëüçîâàòü? Çíàåòå ëè âû ýòîò
Áëåçà Ïàñêàëÿ) — ÿçûê? Óñòàíîâëåí ëè îí íà âàøåì êîìïüþòåðå?
ÿçûê, ïîçâîëÿþùèé Çíàòü áîëüøå îäíîãî ÿçûêà ïðîãðàììèðîâàíèÿ íè-
ëåãêî êîäèðîâàòü êîãäà íå âðåäíî!  ýòîì ïîñîáèè áóäåò èçó÷àòüñÿ
îñíîâíûå Visual Basic .NET, íî áóäåò ðàññêàçàíî òàêæå íå-
àëãîðèòìè÷åñêèå ìíîãî è î J# è C#.
ñòðóêòóðû.
Çàòåì ïîÿâèëèñü íîâûå
ÿçûêè, ñ òåìè èëè èíûìè
ïðåèìóùåñòâàìè íàä ñó-
ùåñòâîâàâøèìè ðàíåå.
1.5. Ñèíòàêñèñ ÿçûêîâ
Âîò íåñêîëüêî ïðèìåðîâ: ïðîãðàììèðîâàíèÿ
q C è Ñ++ — ÿçûêè,
ïîçâîëÿþùèå  ïóòåøåñòâèÿõ âàì ìîæåò ïîíàäîáèòüñÿ íàéòè ÷å-
ñîçäàâàòü áûñòðî è ëîâåêà, ðàçãîâàðèâàþùåãî ïî-àíãëèéñêè. Íà ëþáîì
ýôôåêòèâíî ÿçûêå ìîæíî ñôîðìóëèðîâàòü âîïðîñ «Ãîâîðèòå ëè
âûïîëíÿþùèéñÿ âû ïî-àíãëèéñêè?» Íàïðèìåð:
ïðîãðàììíûé êîä.
q Java — ÿçûê,
Àíãëèéñêèé: Do you speak English?
îáåñïå÷èâàþùèé
ïëàòôîðìåííóþ Íåìåöêèé: Sprechen Sie Englisch?
íåçàâèñèìîñòü, ò. å.
ïîçâîëÿþùèé Èñïàíñêèé: Habla ingles?
ñîçäàâàòü ïðîãðàììû,
êîòîðûå âûïîëíÿþòñÿ Ïîðòóãàëüñêèé: Você fala inglås?
â ñðåäå ðàçëè÷íûõ
îïåðàöèîííûõ ñèñòåì.  ýòèõ ïðèìåðàõ îòëè÷àþòñÿ íå òîëüêî ñëîâà, íî
Íà ñëåäóþùåì ýòàïå ðàçâè- è ïîðÿäîê ñëîâ â ïðåäëîæåíèÿõ — ñóùåñòâèòåëü-
òèÿ áûëè ñîçäàíû îáúåêòíî- íûå, ãëàãîëû è ìåñòîèìåíèÿ ðàñïîëîæåíû ïî-ðàç-
îðèåíòèðîâàííûå ÿçûêè íîìó. Ñëîâà è ïîðÿäîê èõ ðàçìåùåíèÿ îáðàçóþò
ïðîãðàììèðîâàíèÿ, ïîçâî-
ñèíòàêñèñ ÿçûêà. Ñèíòàêñèñ ÿçûêà îïðåäåëÿåò ïðà-
ëÿþùèå âèçóàëüíî êîíñò-
ðóèðîâàòü ãðàôè÷åñêèé âèëà, ïîçâîëÿþùèå ñîñòàâëÿòü ïðàâèëüíûå ïðåäëî-
èíòåðôåéñ ïðèëîæåíèé: æåíèÿ íà ýòîì ÿçûêå.
12 Ãëàâà 1

q Visual Basic — ÿçûê, Êàê è ó ÷åëîâå÷åñêèõ ÿçûêîâ, ó ëþáîãî ÿçûêà


ñîçäàííûé ïðîãðàììèðîâàíèÿ òîæå åñòü ñèíòàêñèñ. Ñèíòàê-
êîðïîðàöèåé Microsoft ñèñ — ýòî ñëîâàðü, íàáîð ãðàììàòè÷åñêèõ ïðàâèë è
äëÿ ðàçðàáîòêè
ñòðóêòóð, îáðàçóþùèõ ÿçûê ïðîãðàììèðîâàíèÿ. Ñèí-
ïðèëîæåíèé
ñ ãðàôè÷åñêèì òàêñèñ îïðåäåëÿåò ïðàâèëà íàïèñàíèÿ ïðàâèëüíûõ
èíòåðôåéñîì â ñðåäå ñòðîê êîäà è îáúåäèíåíèÿ ýòèõ ñòðîê â ðàáîòàþùóþ
îïåðàöèîííîé ïðîãðàììó.
ñèñòåìû Windows. Íàïðèìåð, âî âñåõ ñîâðåìåííûõ ÿçûêàõ ïðîãðàì-
q Delphi — ñðåäà ìèðîâàíèÿ åñòü îïåðàòîð If...Then...Else. Îïå-
ðàçðàáîòêè (ÿçûê ðàòîð If...Then...Else — îäèí èç ñïîñîáîâ,
Object Pascal), ïîçâîëÿþùèõ ïðîãðàììå ïðèíÿòü ðåøåíèå, èñõîäÿ
ñîçäàííàÿ êîìïàíèåé èç èìåþùåéñÿ ó íåå èíôîðìàöèè. Ðàññìîòðèì ïðè-
Borland äëÿ ðàçðàáîòêè ìåð ðàçíîãî ñèíòàêñèñà îïåðàòîðîâ If...Then...
ïðèëîæåíèé
ñ ãðàôè÷åñêèì
Else â ÿçûêàõ Visual Basic .NET, C# è J#. Íå âîë-
èíòåðôåéñîì â ñðåäå íóéòåñü, åñëè âû íå ïîíèìàåòå, ÷òî îçíà÷àþò ýòè îïå-
îïåðàöèîííîé ðàòîðû. Ïðîñòî ïîêà îáðàòèòå âíèìàíèå íà
ñèñòåìû Windows. ïîõîæèå ýëåìåíòû è ðàçëè÷èÿ ìåæäó ðàçíûìè
 íàñòîÿùåå âðåìÿ ìíî- ÿçûêàìè. Ýòè ðàçëè÷èÿ îïðåäåëÿþòñÿ ñèíòàêñèñîì
ãèå ïðîãðàììèñòû âûáè- ðàçíûõ ÿçûêîâ.
ðàþò èíòåãðèðîâàííóþ
ñèñòåìó ïðîãðàììèðîâà- Íà Visual Basic .NET:
íèÿ Visual Studio .NET íà
ïëàòôîðìå .NET Frame- If x>5 Then
work, êîòîðàÿ ïðåäîñòàâ-
MessageBox.Show("ß áîëüøå 5.")
ëÿåò âîçìîæíîñòü ñîçäà-
âàòü ïðèëîæåíèÿ íà ðàç- Else
ëè÷íûõ ÿçûêàõ îáúåêòíî- MessageBox.Show ("ß íå áîëüøå 5.")
îðèåíòèðîâàííîãî ïðî- End If
ãðàììèðîâàíèÿ, â òîì
÷èñëå òàêèõ, êàê: Íà C#:
q Visual Basic .NET —
ìîùíûé è ïðîñòîé if (x>5)
â ïðèìåíåíèè ÿçûê. {
MessageBox.Show ("ß áîëüøå 5.");
q J# (÷èòàåòñÿ J-øàðï) —
ÿçûê, ñîçäàííûé íà }
îñíîâå ÿçûêà Java. else
q C# (÷èòàåòñÿ
{
C-øàðï) — ÿçûê, MessageBox.Show ("ß íå áîëüøå 5.");
ñîçäàííûé íà îñíîâå }
ÿçûêîâ C è C++.
Ïðîãðàììû â ïîâñåäíåâíîé æèçíè 13

Íà J#:

if (x>5)
Âîïðîñû äëÿ {
ðàçìûøëåíèÿ MessageBox.Show ("ß áîëüøå 5.");
}
1. Ïðîàíàëèçèðóéòå ïðè- else
âåäåííûé ïðèìåð. Â êà- {
êèõ ÿçûêàõ ïðîãðàììè- MessageBox.Show ("ß íå áîëüøå 5.");
ðîâàíèÿ ñèíòàêñèñ îïå- }
ðàòîðà îäèíàêîâ, à êà-
êèõ — ðàçëè÷àåòñÿ?
Èçó÷àÿ ÿçûê ïðîãðàììèðîâàíèÿ, íóæíî èçó-
÷èòü åãî ñèíòàêñèñ, ñòðóêòóðó è ïðàâèëà íàïèñà-
íèÿ ïðîãðàìì. Íóæíî çíàòü ïðàâèëà ïóíêòóàöèè
ÿçûêà, à òàêæå åãî çàðåçåðâèðîâàííûå ñëîâà. Ýòè
ñëîâà íàçûâàþòñÿ çàðåçåðâèðîâàííûìè, ïîòîìó ÷òî
îíè èñïîëüçóþòñÿ òîëüêî êàê êîìàíäû ÿçûêà. Çà-
ðåçåðâèðîâàííûå ñëîâà, íàçûâàåìûå òàêæå êëþ÷å-
âûìè ñëîâàìè, èìåþò îñîáîå çíà÷åíèå è îáû÷íî
âûïîëíÿþò ñïåöèàëüíûå ôóíêöèè — îíè óêàçûâà-
þò ïðîãðàììå, ÷òî äåëàòü. Íàïðèìåð, ñëîâà If è
Else ÿâëÿþòñÿ çàðåçåðâèðîâàííûìè â áîëüøèíñòâå
ÿçûêîâ ïðîãðàììèðîâàíèÿ. Îíè èñïîëüçóþòñÿ â
îïåðàòîðàõ ïðèíÿòèÿ ðåøåíèé â ïðîãðàììàõ.
Èçó÷àÿ ÿçûê ïðîãðàììèðîâàíèÿ, íóæíî èçó÷àòü
íå òîëüêî ñèíòàêñèñ, íî è ôóíêöèîíàëüíîñòü è âîç-
ìîæíîñòè ýòîãî ÿçûêà. Íå çàáûâàéòå, ÷òî íå íà ëþ-
Ðàññìîòðèì íåêîòîðûå áîì ÿçûêå ïðîãðàììèðîâàíèÿ ìîæíî ñäåëàòü ÷òî
ýëåìåíòû ñèíòàêñèñà, óãîäíî. Íî âî âñåõ ñîâðåìåííûõ ÿçûêàõ ïðîãðàììè-
îäèíàêîâûå â ÿçûêàõ C# ðîâàíèÿ åñòü îñíîâíûå ôóíêöèîíàëüíûå âîçìîæíî-
è J#. Â C# è J# êàæäàÿ ñòè, êîòîðûå ìîæíî èñïîëüçîâàòü.
ñòðîêà êîäà çàêàí÷èâàåò-
ñÿ òî÷êîé ñ çàïÿòîé. Áëî-
êè êîäà ïîìåùàþòñÿ â
Ïðèâåäåì íåêîòîðûå ýëåìåíòû ñèíòàêñèñà ÿçû-
ôèãóðíûå ñêîáêè, ò. å. êà Visual Basic .NET:
ñèìâîëû { è }. Ñòðîêà
êîììåíòàðèÿ íà÷èíàåòñÿ q Êîíöû ñòðîê êîäà íå ïîìå÷àþòñÿ ñïåöèàëüíû-
ñ ñèìâîëîâ //. ßçûê C# è ìè ñèìâîëàìè, íàïðèìåð òî÷êîé ñ çàïÿòîé (;).
J# ÷óâñòâèòåëåí ê ðåãèñò-
ðó ñèìâîëîâ. MyCase â
íèõ — ýòî íå òî æå ñàìîå, q Ñòðîêè êîììåíòàðèåâ íà÷èíàþòñÿ ñ ñèìâîëà
÷òî myCase èëè MYCASE. «àïîñòðîô» (').
14 Ãëàâà 1

q Äëÿ âûäåëåíèÿ áëîêîâ êîäà íå èñïîëüçóþòñÿ


ôèãóðíûå ñêîáêè { è }.

Âîïðîñû äëÿ q Visual Basic .NET ÍÅ ÷óâñòâèòåëåí ê ðåãèñò-


ðàçìûøëåíèÿ ðó. MyCase — ýòî òî æå ñàìîå, ÷òî è myCase
1. Î êàêèõ ðàçëè÷èÿõ ñèí- èëè MYCASE.  Visual Basic ýòè òðè îáîçíà÷å-
òàêñèñà ÿçûêîâ ïðî- íèÿ ñ÷èòàþòñÿ îäèíàêîâûìè.
ãðàììèðîâàíèÿ Visual
Basic .NET, C# è J#
âû óçíàëè?
Òåñò ïî òåìå «Ïðîãðàììû â ïîâñåäíåâíîé æèçíè»
1. Ñèíòàêñèñ ÿçûêà ïðîãðàììèðîâàíèÿ, â ÷àñòíîñòè, îïðåäåëÿåò

m Ñëîâàðü, ïðàâèëà çàïèñè îïåðàòîðîâ è ñòðóêòóðû ÿçûêà

m Ïîñëåäîâàòåëüíîñòü ñòðîê ïðîãðàììû

m Òèï ÿçûêà ïðîãðàììèðîâàíèÿ

m Âûáîð êîìïèëÿòîðà

2. ×òî ïðîèñõîäèò ñ ïðîãðàììîé ïðè êîìïèëÿöèè?

m Ñîõðàíåíèå ïðîãðàììû íà æåñòêîì äèñêå

m Ïåðåâîä ïðîãðàììû íà äðóãîé ìàøèííî-íåçàâèñèìûé ÿçûê


ïðîãðàììèðîâàíèÿ

m Ïðåîáðàçîâàíèå ïðîãðàììíîãî êîäà â ïîíÿòíóþ êîìïüþòåðó ôîðìó

m Ïðåîáðàçîâàíèå ïðîãðàììíîãî êîäà â ïîíÿòíóþ ÷åëîâåêó ôîðìó

3. Ìíîæåñòâî ÿçûêîâ ïðîãðàììèðîâàíèÿ ïîÿâèëîñü ïîòîìó, ÷òî

m Ó÷åíûì íóæíî ÷òî-òî äåëàòü

m Êàæäûé ÿçûê ïðåäíàçíà÷åí äëÿ ðåøåíèÿ çàäà÷ îïðåäåëåííîãî òèïà

m Êàæäîé êîìïüþòåðíîé ôèðìå íóæåí ñâîé ÿçûê ïðîãðàììèðîâàíèÿ

m Êàæäîé ñòðàíå íóæåí ñâîé ÿçûê ïðîãðàììèðîâàíèÿ

4. Ïðîãðàììà íà ñîâðåìåííîì ÿçûêå ïðîãðàììèðîâàíèÿ ñîñòîèò èç

m Ïîñëåäîâàòåëüíîñòåé íóëåé è åäèíèö

m Ñòðîê êîäà, íàïèñàííîãî íà ÿçûêå, ïðèáëèæåííîì ê ÷åëîâå÷åñêîìó

m Ìàòåìàòè÷åñêèõ ôîðìóë

m Ëîãè÷åñêèõ ôîðìóë
Ãëàâà 2

Ñèñòåìà
ïðîãðàììèðîâàíèÿ
Visual Basic .NET
2.1. Visual Basic .NET è IDE
2.2. Çàïóñê è íàñòðîéêà Visual Basic .NET
2.3. Ñîçäàíèå ïåðâîãî ïðîåêòà
2.4. Êîíñòðóèðîâàíèå ãðàôè÷åñêîãî èíòåðôåéñà ïðîåêòà
2.5. Ñîçäàíèå ïðîãðàììíîãî êîäà ïðîåêòà
2.6. Ïîñòðîåíèå ðåøåíèÿ
2.7. Çàïóñê ïðîåêòà
2.8. Ñîõðàíåíèå ïðîåêòà
2.9. Âûâîä ñîîáùåíèé íà ôîðìó

ßçûê BASIC (Beginner’s


All-Purpose Symbolic
Instruction Code) — ïðîñòîé ÿçûê ïðî-
ãðàììèðîâàíèÿ äëÿ íà÷èíàþùèõ —
áûë ñîçäàí â 1964 ãîäó. Â 1975 ãîäó
Áèëë Ãåéòñ è Ïîë Àëëåí ðàçðàáîòà-
ëè èíòåðïðåòàòîð ÿçûêà BASIC äëÿ
ïåðñîíàëüíûõ êîìïüþòåðîâ. Çàòåì
â ñåðåäèíå 80-õ ãîäîâ XX âåêà ïîÿ-
âèëàñü ñèñòåìà ïðîãðàììèðîâàíèÿ
Microsoft Quick BASIC, à â 1991 ãîäó —
ñèñòåìà ïðîãðàììèðîâàíèÿ è ÿçûê
Visual Basic.
Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET 17

2.1. Visual Studio .NET è IDE


Ñèñòåìà ïðîãðàììèðîâàíèÿ Microsoft Visual Studio
Ìåæäó ïðî÷èì, ìîæíî íà- .NET — ýòî èíñòðóìåíò ðàçðàáîòêè ïðîãðàìì, ïî-
áèðàòü òåêñòû ïðîãðàìì çâîëÿþùèé ïèñàòü ïðîãðàììû íà íåñêîëüêèõ ÿçû-
â îáû÷íîì òåêñòîâîì ðå- êàõ ïðîãðàììèðîâàíèÿ, èçâåñòíûõ êàê ÿçûêè .NET.
äàêòîðå âðîäå Notepad Âìåñòå ñ Visual Studio .NET ïîñòàâëÿþòñÿ ñëåäóþ-
èëè Microsoft Word. Ïðàâ- ùèå ÿçûêè .NET:
äà, ïèñàòü ïðîãðàììû òà-
êèì îáðàçîì î÷åíü q Visual Basic .NET
íåóäîáíî.
q C# (ïðîèçíîñèòñÿ Ñè-øàðï)
q J# (ïðîèçíîñèòñÿ Äæåé-øàðï)
q C++ (ïðîèçíîñèòñÿ Cè ïëþñ ïëþñ)
q ASP .NET (äëÿ ñîçäàíèÿ web-ñòðàíèö)

Äëÿ ðàáîòû ñî âñåìè ýòèìè ÿçûêàìè Visual Stu-


dio .NET ïðåäîñòàâëÿåò îäèí è òîò æå èíòåðôåéñ
IDE. IDE ðàñøèôðîâûâàåòñÿ êàê Integrated Develop-
ment Environment (Èíòåãðèðîâàííàÿ ñðåäà ðàçðà-
áîòêè).
Èíòåãðèðîâàííàÿ ñðåäà ðàçðàáîòêè Visual Studio
.NET îáëåã÷àåò ðàçðàáîòêó ïðîãðàìì. Íàïðèìåð,
åñëè âû äîáàâëÿåòå íà ôîðìó êíîïêó, ñèñòåìà ïðî-
ãðàììèðîâàíèÿ Visual Studio .NET àâòîìàòè÷åñêè
ñîçäàåò êîä äëÿ ýòîé êíîïêè. Êîíå÷íî, Visual Studio
.NET íå ìîæåò íàïèñàòü çà âàñ âåñü êîä, òàê êàê ñèñ-
òåìà ïðîãðàììèðîâàíèÿ íå çíàåò, ÷òî äîëæíà äåëàòü
âàøà ïðîãðàììà. Íî ñèñòåìà ïðîãðàììèðîâàíèÿ, áå-
çóñëîâíî, ìîæåò óìåíüøèòü îáúåì êîäà (è çàòðàòû
âðåìåíè), êîòîðûé âàì ïðèõîäèòñÿ ïèñàòü ñîáñòâåí-
íîðó÷íî.
Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Studio .NET
ïîìîãàåò îáíàðóæèâàòü è èñïðàâëÿòü îøèáêè äî
çàïóñêà ïðîãðàììû. Îíà àâòîìàòè÷åñêè ðàñêðàøè-
âàåò êîä â çàâèñèìîñòè îò íàçíà÷åíèÿ ýòîãî êîäà.
Íàïðèìåð, êîììåíòàðèè âñåãäà îòîáðàæàþòñÿ çå-
ëåíûì öâåòîì, êëþ÷åâûå ñëîâà — ñèíèì, à ñèíòàê-
ñè÷åñêèå îøèáêè ïîä÷åðêèâàþòñÿ âîëíèñòîé
êðàñíîé ëèíèåé.
18 Ãëàâà 2

Visual Studio .NET ïîìîãàåò óïîðÿäî÷èâàòü êîä,


õðàíÿ åãî â íåñêîëüêèõ îòäåëüíûõ ôàéëàõ. Ýòî ïî-
çâîëÿåò ðàçäåëèòü ïðîãðàììó íà ôóíêöèîíàëüíûå
áëîêè. Íàïðèìåð, êîä êàæäîé ôîðìû ìîæíî õðà-
íèòü â îòäåëüíîì ôàéëå.
Visual Studio .NET ïîçâîëÿåò ëåãêî êîìïèëèðî-
âàòü è çàïóñêàòü ïðîãðàììû — äëÿ ýòîãî íóæíî ñäå-
ëàòü âñåãî íåñêîëüêî ùåë÷êîâ ìûøüþ.
Ñ ïîìîùüþ óòèëèò îòëàäêè, âõîäÿùèõ â Visual
Studio .NET, ìîæíî èñêàòü îøèáêè â ïðîãðàììå è
îòñëåæèâàòü åå âûïîëíåíèå.
 ñëåäóþùåì ïàðàãðàôå âû óçíàåòå, êàê ñ ïîìî-
ùüþ Visual Studio .NET íàïèñàòü ïåðâóþ ïðîãðàììó.
Âû âñòðåòèòå òàêæå è ïðèìåðû êîäà íà C# è J#.

2.2. Çàïóñê è íàñòðîéêà Visual


Studio .NET
×òîáû çàïóñòèòü Visual Studio .NET 2003:

1. Ùåëêíèòå íà êíîïêå Ïóñê.


2. Âûáåðèòå ïóíêò Ïðîãðàììû.
3. Âûáåðèòå ïóíêò Microsoft Visual Studio .NET
2003.

4. Âûáåðèòå ïóíêò Microsoft Visual Studio .NET


2003.

Ïåðâîå, ÷òî âû óâèäèòå íà ýêðàíå, çàïóñòèâ


Visual Studio .NET, — íà÷àëüíóþ ñòðàíèöó (Íà÷àëü-
Íà Ðàáî÷åì ñòîëå ìîæíî íàÿ ñòðàíèöà). Ïî óìîë÷àíèþ áóäåò îòêðûòà âêëàäêà
ñîçäàòü çíà÷îê äëÿ áûñò- Ïðîåêòû. Îáû÷íî íà íåé ïðèâîäèòñÿ ñïèñîê íåäàâíî
ðîãî çàïóñêà Visual Studio. îòêðûâàâøèõñÿ ïðîåêòîâ (Îòêðûòèå ñóùåñòâóþ-
Îí ïîçâîëÿåò áûñòðî çàïó- ùåãî ïðîåêòà). Äëÿ îòêðûòèÿ ñóùåñòâóþùåãî ïðî-
ñòèòü Visual Studio .NET —
ïðîñòî ñäåëàéòå íà ýòîì
åêòà ùåëêíóòü ïî êíîïêå Îòêðûòü ïðîåêò, à äëÿ
çíà÷êå äâîéíîé ùåë÷îê íà÷àëà ñîçäàíèÿ íîâîãî ïðîåêòà — ùåëêíóòü ïî
ìûøüþ! êíîïêå Ñîçäàòü ïðîåêò.
Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET 19

Âêëàäêà Ìîé ïðîôèëü ïîçâîëÿåò íàñòðîèòü Visual


Studio .NET ïîä âàø ñòèëü ðàáîòû, ñîîòâåòñòâåííî
âàøèì ïðåäïî÷òåíèÿì.
1. Ùåëêíèòå ïî ÿðëû÷êó âêëàäêè Ìîé ïðî-
ôèëü.
20 Ãëàâà 2

2. Â ïîÿâèâøåìñÿ äèàëîãîâîì îêíå â âûïàäàþ-


ùåì ñïèñêå Ïðîôèëü: âûáåðèòå ïóíêò Ðàçðà-
áîò÷èê íà Visual Studio.

3. Óáåäèòåñü, ÷òî â âûïàäàþùèõ ñïèñêàõ âû-


áðàíû íàñòðîéêè ïî óìîë÷àíèþ:
q Ñõåìà êëàâèàòóðû: [Ïàðàìåòðû ïî óìîë-
÷àíèþ]
q Ìàêåò îêíà: Visual Studio ïî óìîë÷àíèþ
q Îòáîð ðàçäåëîâ: (áåç ôèëüòðà)

4. Â ïóíêòå Îòîáðàçèòü ðàçäåëû âûáåðèòå îï-


öèþ Èíòåãðèðîâàííàÿ ñïðàâêà.

5. Â âûïàäàþùåì ñïèñêå Ïðè çàïóñêå âûáåðè-


òå ïóíêò Ïîêàçàòü íà÷àëüíóþ ñòðàíèöó.

6. Ïåðåéäèòå íà âêëàäêó Ïðîåêòû, ùåëêíóâ


ïî åå ÿðëû÷êó â âåðõíåé ÷àñòè ñòðàíèöû.

2.3. Ñîçäàíèå ïåðâîãî ïðîåêòà


Òåïåðü, íàñòðîèâ ñèñòåìó ïðîãðàììèðîâàíèÿ Visual
Studio .NET, ìû ðàçáåðåìñÿ ñ âêëàäêîé Ïðîåêòû.
Ýòà âêëàäêà, êàê óæå ãîâîðèëîñü â § 2.2, ïîçâîëÿåò
è ñîçäàâàòü íîâûå ïðîåêòû, è îòêðûâàòü óæå ñóùå-
ñòâóþùèå. Êîãäà âû ñîçäàäèòå ñâîé ïåðâûé ïðîåêò,
îí ïîÿâèòñÿ â ñïèñêå ñóùåñòâóþùèõ ïðîåêòîâ. ×òî-
áû îòêðûòü ñóùåñòâóþùèé ïðîåêò, íóæíî âûáðàòü
åãî èç ñïèñêà ùåë÷êîì ìûøüþ.
À òåïåðü ïðèñòóïèì ê ñîçäàíèþ ïåðâîãî ïðîåêòà
«Ïðèâåò, Ìèð». Ýòîò ïðîåêò âûâåäåò íà ýêðàí îêíî
ñ ñîîáùåíèåì "Ïðèâåò, Ìèð".

1. Ùåëêíèòå íà êíîïêå Íîâûé ïðîåêò, ÷òîáû


ñîçäàòü íîâûé ïðîåêò. Îòêðîåòñÿ äèàëîãîâîå
îêíî Ñîçäàòü ïðîåêò.
Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET 21

 îêíå Ñîçäàòü ïðîåêò âû óâèäèòå, ÷òî â ëåâîé


÷àñòè, â ïàíåëè Òèïû ïðîåêòîâ: ïåðå÷èñëåíî ìíî-
æåñòâî òèïîâ ïðîåêòîâ, êîòîðûå ìîæíî ñîçäàâàòü â
Visual Studio .NET. Ñ íåêîòîðûìè èç ýòèõ òèïîâ âû
âñêîðå ïîçíàêîìèòåñü. Ïðîåêò «Ïðèâåò, Ìèð» áóäåò
ïðèëîæåíèåì Windows, ïîýòîìó â ïðàâîé ÷àñòè îêíà
(ïàíåëü Øàáëîíû:) íåîáõîäèìî âûáðàòü øàáëîí
Ïðèëîæåíèå Windows. Â îêíå Ñîçäàòü ïðîåêò íóæ-
íî âûáðàòü íå òîëüêî òèï ïðîåêòà è øàáëîí, íî è
èìÿ ïðîåêòà è ïàïêó, â êîòîðîé áóäóò ðàçìåùàòüñÿ
åãî ôàéëû.

2. Âûáåðèòå òèï ïðîåêòà Ïðîåêòû Visual Basic


â ïàíåëè Òèïû ïðîåêòîâ:.

3. Âûáåðèòå øàáëîí Ïðèëîæåíèå Windows â


ïàíåëè Øàáëîíû:.

4. Ââåäèòå Ïðèâåò_Ìèð â êà÷åñòâå èìåíè ïðî-


åêòà â òåêñòîâîì ïîëå Èìÿ (â èìåíè ïðîåêòà
ëó÷øå íå èñïîëüçîâàòü ïðîáåëû).
22 Ãëàâà 2

5. Âûáåðèòå ïàïêó, â êîòîðîé õîòèòå ñîõðàíèòü


ïðîåêò. Â ïàïêå, êîòîðóþ âû âûáðàëè äëÿ
ðàçìåùåíèÿ ïðîåêòà, áóäåò ñîçäàíà íîâàÿ
ïàïêà Ïðèâåò_Ìèð, è ïðîåêò "Ïðèâåò_Ìèð"
áóäåò ñîõðàíåí â ñîçäàííîé ïàïêå.
6. Íàæìèòå êíîïêó OK. Îòêðîåòñÿ íîâûé ñî-
çäàííûé ïðîåêò, è íà ýêðàíå áóäóò îòîáðà-
æåíû ôîðìà Form1.vb (â ëåâîé ÷àñòè) è
Solution Explorer (â ïðàâîé ÷àñòè). Íè-
÷åãî ñëîæíîãî, ïðàâäà?

2.4. Êîíñòðóèðîâàíèå ãðàôè÷åñêîãî


èíòåðôåéñà ïðîåêòà
Îêíî Êîíñòðóêòîð ôîðì (Form Design Window).
×àùå âñåãî ìû áóäåì ñîçäàâàòü ïðèëîæåíèÿ Win-
dows, íà÷èíàþùèåñÿ ñ ôîðìû. Ôîðìà — ýòî ýëåìåíò
ãðàôè÷åñêîãî èíòåðôåéñà, ñ ïîìîùüþ êîòîðîãî îñó-
ùåñòâëÿåòñÿ âçàèìîäåéñòâèå ïîëüçîâàòåëÿ ñ ïðîãðàì-
ìîé. Ôîðìà ïðåäñòàâëÿåò ñîáîé ïîëå ñ ðàçìåùàåìûìè
íà íåì îáúåêòàìè ðàçíûõ òèïî⠗ êíîïêàìè, òåêñòî-
âûìè ïîëÿìè. Ïðè íàæàòèè êíîïêè çàïóñêàåòñÿ
êîä, âûïîëíÿþùèé çàïëàíèðîâàííûå äåéñòâèÿ.
Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET 23

 îñíîâíîé ðàáî÷åé îáëàñòè â ëåâîé ÷àñòè îêíà


áóäåò îòîáðàæåíà ïóñòàÿ ôîðìà, íà êîòîðîé íåò êíî-
ïîê è äðóãèõ îáúåêòîâ. Ýòà îáëàñòü íàçûâàåòñÿ îê-
Ëþáîå îêíî â Visual Studio íîì Êîíñòðóêòîð ôîðì. ßðëû÷îê ýòîãî îêíà ñîäåð-
.NET ìîæíî çàêðûòü ùåë÷- æèò íàäïèñü Form1.vb [Design].
êîì ïî êíîïêå ñî çíà÷êîì
«õ» â âåðõíåì ïðàâîì óãëó Îêíî Îáëàñòü ýëåìåíòîâ (Toolbox). Äîñòóï ê
ýòîãî îêíà. Áîëüøèíñòâî çíà÷èòåëüíîé ÷àñòè ôóíêöèé Visual Studio .NET âû-
îêîí â Visual Studio .NET ïîëíÿåòñÿ ñ èñïîëüçîâàíèåì ðàçëè÷íûõ îêîí. Íà-
ìîæíî îòêðûòü ñîîòâåò- ïðèìåð, ÷òîáû ïîìåñòèòü íà ôîðìó îáúåêòû òèïà
ñòâóþùèìè êîìàíäàìè èç
êíîïîê è òåêñòîâûõ ïîëåé, íóæíî âîñïîëüçîâàòüñÿ
ìåíþ Âèä (View).
îêíîì Îáëàñòü ýëåìåíòîâ. Â ýòîì îêíå ñîäåðæàòñÿ
Ìîæíî àâòîìàòè÷åñêè âñå îáúåêòû, êîòîðûå ìîæíî ïîìåñòèòü íà ôîðìó, —
ñêðûòü îêíî, ùåëêíóâ íà êíîïêè, ïåðåêëþ÷àòåëè, òåêñòîâûå ïîëÿ, âûïàäàþ-
çíà÷êå â âèäå êíîïêè äëÿ ùèå ñïèñêè è ò. ä.
êðåïëåíèÿ áóìàãè, ðàñïî-
ëîæåííîì â âåðõíåì ïðà-
âîì óãëó îêíà. Ïðè
àâòîìàòè÷åñêîì ñêðûòèè
îêíà îíî ïåðåñòàåò îòî-
áðàæàòüñÿ íà ýêðàíå. Íà
ïàíåëè, êîòîðàÿ îòîáðà-
çèòñÿ âäîëü ïðàâîãî êðàÿ
îêíà, áóäóò ïðèñóòñòâî-
âàòü âêëàäêè äëÿ àâòîìà-
òè÷åñêè ñêðûòûõ îêîí.
Åñëè ïîäâåñòè êóðñîð ê
âêëàäêàì íà ýòîé ïàíåëè,
òî ñêðûòûå îêíà áóäóò
îòîáðàæàòüñÿ. Àâòîìàòè-
÷åñêîå ñêðûòèå îêîí —
î÷åíü óäîáíûé ñïîñîá
óâåëè÷åíèÿ ðàáî÷åé ïëî-
ùàäè îêíà. Åñëè ùåëê-
íóòü ïî çíà÷êó êíîïêè äëÿ
áóìàã â îêíå, âûäâèíóâ- 1. Îòêðîéòå ìåíþ Âèä (View) â ñòðîêå ìåíþ.
øåìñÿ èç ïàíåëè, ðåæèì
àâòîìàòè÷åñêîãî ñêðûòèÿ 2. Âûáåðèòå ïóíêò Îáëàñòü ýëåìåíòîâ (Tool-
äëÿ ýòîãî îêíà áóäåò âû- box) — îòêðîåòñÿ îêíî Îáëàñòü ýëåìåíòîâ.
êëþ÷åí.
3. Äâîéíûì ùåë÷êîì ïî ïóíêòó Button ïîìåñ-
òèòå íà ôîðìó êíîïêó. (Ýòà êíîïêà ìîæåò
îêàçàòüñÿ ñïðÿòàííîé ïîä îêíîì Îáëàñòü
ýëåìåíòîâ.)
24 Ãëàâà 2

Ïåðåìåùåíèå êíîïêè è èçìåíåíèå åå ðàçìåðîâ.


Òåïåðü, ïîìåñòèâ êíîïêó íà ôîðìó, ìû ìîæåì ïåðå-
ìåñòèòü ýòó êíîïêó â íóæíîå íàì ìåñòî è ïðèäàòü åé
òðåáóåìûé ðàçìåð.

1. Ïîäâåäèòå êóðñîð ìûøè ê êíîïêå, íàæìèòå


ëåâóþ êíîïêó ìûøè è, óäåðæèâàÿ åå íàæà-
òîé, ïåðåòàùèòå êíîïêó â öåíòð ôîðìû, ïî-
ñëå ÷åãî îòïóñòèòå êíîïêó ìûøè.
2. ×òîáû èçìåíèòü ðàçìåð êíîïêè, ïîäâåäèòå
êóðñîð ìûøè ê îäíîìó èç áåëûõ êâàäðàòè-
êîâ âîêðóã êíîïêè (ýòî ìåòêè èçìåíåíèÿ
ðàçìåðà).
3. Íàæìèòå ëåâóþ êíîïêó ìûøè, è, óäåðæè-
âàÿ åå íàæàòîé, ïåðåìåùàéòå ìåòêó, ÷òîáû
ðàñòÿíóòü èëè ñæàòü êíîïêó äî òðåáóåìîãî
ðàçìåðà.
Íè÷åãî ñëîæíîãî, ïðàâäà? Òåïåðü ìû äîáàâèì
êîä, êîòîðûé çàñòàâèò ïðîãðàììó âûïîëíÿòü äåéñò-
âèÿ ïðè íàæàòèè ýòîé êíîïêè.

2.5. Ñîçäàíèå ïðîãðàììíîãî êîäà


ïðîåêòà
Êîãäà ìû äîáàâèëè êíîïêó íà ôîðìó, Visual Studio
.NET àâòîìàòè÷åñêè äîáàâèë ê êîäó ýòîé ôîðìû íå-
ñêîëüêî íîâûõ ñòðîê. Âçãëÿíèòå íà ïðèìåð íèæå.
Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET 25

Public Class Form1


Inherits System.Windows.Forms.Form

Êîä, àâòîìàòè÷åñêè ñîçäàííûé êîíñòðóêòîðîì ôîðì


Windows
Private Sub Button1_Click(ByVal sender As_
System.Object, ByVal e As System.EventArgs)_
Handles Button1.Click

End Sub
End Class

Íåïîíÿòíî? Ìû ðàçáåðåìñÿ ñî âñåì, ÷òî çäåñü íà-


ïèñàíî, íåìíîãî ïîçæå. À ïîêà ïðîñòî íàéäèòå
ôðàãìåíò êîäà ñî ñëîâîì Button1_Click. Ýòîò
ôðàãìåíò âûïîëíÿåòñÿ, êîãäà ïîëüçîâàòåëü ùåëêàåò
ïî êíîïêå, êîòîðóþ ìû ïîìåñòèëè íà ôîðìó. Ïîêà â
äàííîì ôðàãìåíòå íå ïðåäóñìîòðåíî äåéñòâèé ðåàê-
öèè íà ùåë÷îê. Ìû äîëæíû ñîîáùèòü ïðèëîæåíèþ,
÷òî îíî äîëæíî äåëàòü ïðè ùåë÷êå ïî ýòîé êíîïêå.
Èìåííî â ýòîì è çàêëþ÷àåòñÿ ñìûñë ïðîãðàììèðî-
âàíèÿ!

1. Ñäåëàéòå äâîéíîé ùåë÷îê ïî êíîïêå Button1.


Îòêðîåòñÿ îêíî Ðåäàêòîð êîäà.

2. Ùåëêíèòå ïî ïóñòîé ñòðîêå íàä ñòðîêîé


End Sub.

3. Ââåäèòå â ïóñòóþ ñòðîêó ñ êëàâèàòóðû ñòðî-


êó êîäà (òî÷íî òàê, êàê ïîêàçàíî íèæå):

Private Sub Button1_Click(ByVal sender As_


System.Object, ByVal e As System.EventArgs)_
Handles Button1.Click
MessageBox.Show("Ïðèâåò, Ìèð.")
End Sub

Ýòîò êîä áóäåò âûïîëíÿòüñÿ, êîãäà ïîëüçîâàòåëü


áóäåò ùåëêàòü ïî êíîïêå íà ôîðìå.
26 Ãëàâà 2

2.6. Ïîñòðîåíèå ðåøåíèÿ


Òåïåðü íóæíî ïîñòðîèòü ðåøåíèå. Ïðè ïîñòðîåíèè
ðåøåíèÿ êîä, íàïèñàííûé âàìè è Visual Studio
.NET, êîìïèëèðóåòñÿ â ïîíÿòíûå êîìïüþòåðó èíñò-
ðóêöèè.
1. Îòêðîéòå ìåíþ Ïîñòðîåíèå (Build) â ñòðîêå
ìåíþ.
2. Âûáåðèòå ïóíêò Ïîñòðîèòü ðåøåíèå (Build
Solution) — íà÷íåòñÿ ïîñòðîåíèå ðåøåíèÿ.

Ïðîöåññ ïîñòðîåíèÿ ðåøåíèÿ áóäåò îòîáðàæàòü-


ñÿ â îêíå Âûâîä. Åñëè â ïðîãðàììíîì êîäå íå áûëî
ñäåëàíî îøèáîê, ïîñëå çàâåðøåíèÿ ïîñòðîåíèÿ â
îêíå Âûâîä áóäåò âûâåäåíî ñîîáùåíèå î òîì, ÷òî ïî-
ñòðîåíèå âûïîëíåíî óñïåøíî.
Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET 27

 ïðîãðàììíîì êîäå ìîãëè áûòü ñäåëàíû îøèá-


êè, ïóñòü, íàïðèìåð, âìåñòî MessageBox âû íàáðàëè
mMessageBox. Åñëè Visual Basic ìîæåò îïðåäåëèòü,
ãäå ïðîèçîøëà îøèáêà, îí ïîä÷åðêèâàåò ýòî ìåñòî â
ïðîãðàììíîì êîäå ñèíåé âîëíèñòîé ëèíèåé. Êðîìå
òîãî, îòêðûâàåòñÿ îêíî Ñïèñîê çàäà÷ (Task List), ñî-
äåðæàùåå ñïèñîê îøèáîê, êîòîðûå íóæíî èñïðà-
âèòü. Äâîéíîé ùåë÷îê ïî ñîîáùåíèþ îá îøèáêå
ïåðåìåùàåò êóðñîð â êîäå ê ýòîé îøèáêå.

 îêíå Âûâîä (Output) ïîÿâèòñÿ ñîîáùåíèå î


òîì, ÷òî ïîñòðîåíèå âûïîëíèòü íå óäàëîñü.

Åñëè ïîñòðîåíèå âûïîëíèòü íå óäàëîñü, âåðíè-


òåñü íàçàä è ââåäèòå ñòðîêó êîäà òî÷íî â òîì âèäå, â
êàêîì îíà ïðèâåäåíà â ýòîì êóðñå. Çàòåì åùå ðàç ïî-
ïûòàéòåñü ïîñòðîèòü ðåøåíèå, êàê ïîêàçàíî ðàíåå.
28 Ãëàâà 2

2.7. Çàïóñê ïðîåêòà


Âàì óäàëîñü ñêîìïèëèðîâàòü ïðîãðàììó. Ýòî áîëü-
øîé øàã ê òîìó, ÷òîáû ñòàòü ïðîãðàììèñòîì! Òåïåðü
ñêîìïèëèðîâàííóþ ïðîãðàììó ìîæíî çàïóñòèòü.
1. Îòêðîéòå ìåíþ Îòëàäêà (Debug).

2. Âûáåðèòå â ýòîì ìåíþ ïóíêò Íà÷àòü (Start).


(Íà ýêðàíå ïîÿâèòñÿ ôîðìà ïðîåêòà ñ êíîï-
êîé, êîòîðóþ âû íà íåå ïîìåñòèëè.)

3. Ùåëêíèòå íà êíîïêå, ïîÿâèòñÿ


îêíî ñîîáùåíèÿ ñ òåêñòîì «Ïðè-
âåò, Ìèð». Èìåííî ýòî è äîëæíà
áûëà äåëàòü ïðîãðàììà! Ïîçäðàâ-
ëÿåì! Âû òîëüêî ÷òî ñîçäàëè âàø
ïåðâûé ïðîåêò íà ÿçûêå Visual Basic .NET!
4. Íàæìèòå êíîïêó OK, ÷òîáû çàêðûòü îêíî
ñîîáùåíèÿ. (Îêíî ñîîáùåíèÿ çàêðîåòñÿ, íî
îñíîâíîå îêíî ïðîåêòà îñòàíåòñÿ îòêðûòûì.
Ìîæåòå åùå ðàç íàæàòü êíîïêó, è îêíî ñîîá-
ùåíèÿ ïîÿâèòñÿ ñíîâà.)
Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET 29

5. Íàæìèòå êíîïêó ñî çíà÷êîì â âåðõíåì


ïðàâîì óãëó ôîðìû, ÷òîáû çàêðûòü ïðî-
ãðàììó.

Ïîñëå çàâåðøåíèÿ âûïîëíåíèÿ ïðîãðàììû â îêíå


Âûâîä (Debug) îòîáðàæàåòñÿ îòëàäî÷íàÿ èíôîðìà-
öèÿ. ×òîáû ïîñìîòðåòü âûâåäåííûå ñîîáùåíèÿ ïîë-
íîñòüþ, âàì, âåðîÿòíî, ïðèäåòñÿ âîñïîëüçîâàòüñÿ
ëèíåéêîé ïðîêðóòêè.

2.8. Ñîõðàíåíèå ïðîåêòà


Ñîõðàíåíèå ïðîåêòà. Ïîðà ñîõðàíèòü âàø ïðîåêò.
Ñîõðàíåíèå âûïîëíÿåòñÿ òàê æå, êàê è â äðóãèõ
ïðîãðàììàõ â îïåðàöèîííîé ñèñòåìå Windows.

1. Îòêðîéòå ìåíþ Ôàéë (File).


2. Â ìåíþ Ôàéë (File) âûáåðèòå êîìàíäó Ñîõðà-
íèòü âñå (Save All).
3. ×òîáû âûéòè èç Visual Studio .NET, îòêðîé-
òå ìåíþ Ôàéë (File).
4. Â ìåíþ Ôàéë (File) âûáåðèòå êîìàíäó Âûõîä
(Exit).

Ôàéëû è ïàïêè ðåøåíèÿ. Êîãäà âû ñîçäàåòå ïðè-


ëîæåíèå íà Visual Basic, ñîçäàåòñÿ öåëûé íàáîð
ôàéëîâ. Âû äîëæíû çíàòü, êàêèå ýòî ôàéëû è äëÿ
÷åãî îíè ïðåäíàçíà÷åíû. Íà ðèñóíêå íèæå ïîêàçàí
îáû÷íûé íàáîð ôàéëîâ ðåøåíèÿ.
30 Ãëàâà 2

Ïåðåéäèòå â ïàïêó ..\practicum\unit2\, â êîòîðîé


âû ñîçäàëè ïðîåêò «Ïðèâåò, Ìèð». Îòêðîéòå ýòó
ïàïêó, è âû óâèäèòå, ÷òî äëÿ ïðîåêòà áûëà ñîçäàíà
îòäåëüíàÿ ïàïêà, íàçâàííàÿ Ïðèâåò_Ìèð. Çàéäèòå â
ïàïêó Ïðèâåò_Ìèð, ÷òîáû ïîñìîòðåòü ôàéëû, ñî-
çäàííûå äëÿ âàøåãî ïðîåêòà Visual Studio .NET.
 ïàïêå áóäóò ñëåäóþùèå ôàéëû:
Ïðèâåò_Ìèð.sln — ýòî ôàéë ðåøåíèÿ, â êîòîðîì
õðàíèòñÿ îïèñàíèå âñåõ ôàéëîâ è íàñòðîåê ýòîãî
ðåøåíèÿ. Âîîáùå-òî â ðåøåíèå ìîæíî âêëþ÷èòü
íåñêîëüêî ïðîåêòîâ, íî â ðåøåíèè «Ïðèâåò, Ìèð»
ïðîåêò òîëüêî îäèí — ýòî ôàéë Ïðèâåò_Ìèð.vbproj.
Ê ôàéëó Ïðèâåò_Ìèð.sln ñèñòåìà îáðàùàåòñÿ,
êîãäà âû îòêðûâàåòå ðåøåíèå.
Ôàéë Form1.vb ñîäåðæèò ôîðìó è ñâÿçàííûé ñ
íåé êîä.
Îòêðîéòå ïàïêó ..\bin\, ñäåëàâ ïî åå çíà÷êó äâîé-
íîé ùåë÷îê ìûøüþ.  ïàïêå ..\bin\ ñîäåðæèòñÿ èñ-
ïîëíÿåìûé ôàéë, ïîëó÷åííûé êîìïèëÿöèåé
ïðîãðàììû íà Visual Basic. Ýòî ôàéë Ïðèâåò_Ìèð.exe.
Åãî ìîæíî çàïóñòèòü íà äðóãîì êîìïüþòåðå, äàæå
åñëè íà íåì íå óñòàíîâëåíà ñèñòåìà ïðîãðàììèðîâà-
íèÿ Visual Studio .NET.*

* Äëÿ âûïîëíåíèÿ ïðîãðàìì íà ÿçûêàõ .NET íà êîìïüþòåðàõ


äîëæíà áûòü óñòàíîâëåíà .NET Framework. Â Windows XP,
íà÷èíàÿ ñ Service Pack2, îíà âõîäèò â ñîñòàâ îïåðàöèîííîé
ñèñòåìû.
Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET 31

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ

2.1. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET


ñîçäàòü ïðîåêò «Ïðèâåò, Ìèð», îïèñàííûé â
Microsoft-CD ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìî-
ðàñïàêîâûâàþùåìñÿ àðõèâå Ïðèâåò_Ìèð.exe.
2.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Ìîå èìÿ», êîòîðûé äîëæåí
âûâîäèòü íà ýêðàí îêíî ñîîáùåíèÿ, ñîäåðæà-
ùåå âàøå èìÿ. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â
ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå Ìîå_èìÿ.exe.

2.9. Âûâîä ñîîáùåíèé íà ôîðìó


×àñòî âàøèì ïðîãðàììàì ïîíàäîáèòñÿ âåñòè äèàëîã
ñ ïîëüçîâàòåëåì. Âîçìîæíî, ïðîãðàììà äîëæíà áó-
äåò ñîîáùèòü ÷òî-òî ïîëüçîâàòåëþ, ïîçâîëèòü åìó
ââåñòè êàêèå-òî äàííûå èëè ÷òî-òî óêàçàòü.

Îêíî ñîîáùåíèé. Òàêèå ñèòóàöèè âñòðå÷àþòñÿ


íàñòîëüêî ÷àñòî, ÷òî Visual Studio .NET ïîääåðæè-
âàåò íàáîð ñòàíäàðòíûõ îêîí, íàïðèìåð îêîí ñîîá-
ùåíèé (MessageBox), äëÿ îáðàáîòêè òàêèõ ñèòóàöèé.
 ïåðâîé íàïèñàííîé âàìè ïðîãðàììå âû èñïîëü-
çîâàëè ñòðîêó êîäà, âûâîäèâøóþ íà ýêðàí îêíî ñî-
îáùåíèÿ:
MessageBox.Show("Ïðèâåò, Ìèð.")

Âèä îêíà ñîîáùåíèÿ âñòðîåí â Visual Basic .NET.


Âàì íå íóæíî ñîçäàâàòü âèä îêíà, ÷òîáû èñïîëüçî-
 ÿçûêå C# îêíî ñîîáùå- âàòü åãî â ïðîåêòå. Âñå, ÷òî íóæíî ñäåëàòü â ïðîãðàì-
íèÿ âûçûâàåòñÿ ïî÷òè òàê
ìå — âûçâàòü ìåòîä Show() è çàäàòü òåêñò, êîòîðûé
æå, êàê è â Visual Basic
.NET. Òî÷íî òàê æå îíî íóæíî âûâåñòè íà ýêðàí. Ñèíòàêñèñ èñïîëüçîâàíèÿ
âûçûâàåòñÿ è â ÿçûêå J#: îêíà ñîîáùåíèÿ òàêîâ:

{ MessageBox.Show("Òåêñò ñîîáùåíèÿ")
MessageBox.Show
("Ïðèâåò, Ìèð"); Îáðàòèòå âíèìàíèå, ÷òî òåêñò ñîîáùåíèÿ äîëæåí
} áûòü ïîìåùåí â êàâû÷êè.
32 Ãëàâà 2

Ôóíêöèÿ âûâîäà ñîîáùåíèé MsgBox(). Ôóíê-


öèÿ MsgBox() ïîçâîëÿåò âûâîäèòü ñîîáùåíèÿ ñ ïî-
ìîùüþ îêíà ñîîáùåíèé, â êîòîðîì ìîæíî ðàçìåñòèòü
îïðåäåëåííûé íàáîð êíîïîê è èíôîðìàöèîííûé çíà-
÷îê î òèïå ñîîáùåíèÿ.
MsgBox("Ñîîáùåíèå"
[,×èñÊîä1+×èñÊîä2][,"Çàãîëîâîê"])

Àðãóìåíò "Ñîîáùåíèå" âûâîäèòñÿ â îêíî ñîîáùå-


íèé, àðãóìåíò ×èñÊîä1+×èñÊîä2 îïðåäåëÿåò âíåø-
íèé âèä ïàíåëè, à ñòðîêà "Çàãîëîâîê" ïå÷àòàåòñÿ â
ñòðîêå çàãîëîâêà ïàíåëè. Ïîñëåäíèå äâà àðãóìåíòà
íå ÿâëÿþòñÿ îáÿçàòåëüíûìè, ïîýòîìó çàêëþ÷àþòñÿ
â êâàäðàòíûå ñêîáêè.
Íàïðèìåð, äëÿ ôóíêöèè MsgBox("Ñîîáùåíèå",
48 + 3, "Çàãîëîâîê") áóäåò âûâåäåíî ñëåäóþùåå
îêíî ñîîáùåíèé:

Âíåøíèé âèä îêíà ñîîáùåíèé ìîæíî ìåíÿòü, èñ-


ïîëüçóÿ ðàçëè÷íûå çíà÷åíèÿ ×èñÊîä1 è ×èñÊîä2.
Çíà÷åíèå ×èñÊîä1 îïðåäåëÿåò âèä ïèêòîãðàììû, êî-
òîðàÿ ïîìåùàåòñÿ â îêíî ñîîáùåíèé, à çíà÷åíèå ×èñ-
Êîä2 îïðåäåëÿåò íàáîð êíîïîê, ðàçìåùàåìûõ â îêíå.
Çíà÷åíèÿ ×èñÊîä1 è ×èñÊîä2, îïðåäåëÿþùèå âèä
îêíà ñîîáùåíèé

×èñÊîä1 Òèï ñîîáùåíèÿ Ïèêòîãðàììà


16 Îøèáêà

32 Âîïðîñ

48 Âíèìàíèå

64 Èíôîðìàöèÿ
Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET 33

×èñÊîä2 Íàáîð êíîïîê

0 ÎÊ

1 ÎÊ, Îòìåíà

2 Ñòîï, Ïîâòîðèòü, Ïðîïóñòèòü

3 Äà, Íåò, Îòìåíà

4 Äà, Íåò

5 Ïîâòîðèòü, Îòìåíà

Ýëåìåíò óïðàâëåíèÿ Label (Íàäïèñü). Label


ïðåäíàçíà÷åí äëÿ îòîáðàæåíèÿ òåêñòà èëè èçîáðà-
æåíèé, êîòîðûå ïîëüçîâàòåëü íå ìîæåò èçìåíèòü ñ
êëàâèàòóðû. Îòîáðàæàåìûé íà íàäïèñè òåêñò ñîäåð-
æèòñÿ â ñâîéñòâå Text. Ñâîéñòâî Alignment ïîçâî-
ëÿåò çàäàòü âûðàâíèâàíèå òåêñòà íà íàäïèñè.
Íàïðèìåð, äëÿ âûâîäà íà íàäïèñü Label1 òåê-
ñòà «Ïðèâåò, Ìèð» íåîáõîäèìî â ïðîãðàììíûé êîä
ââåñòè ñëåäóþùóþ ñòðîêó:

Label1.Text = "Ïðèâåò, Ìèð."

Ýëåìåíò óïðàâëåíèÿ TextBox (Òåêñòîâîå ïîëå).


TextBox èñïîëüçóåòñÿ äëÿ ïðèåìà äàííûõ, ââîäè-
ìûõ ïîëüçîâàòåëåì, èëè äëÿ îòîáðàæåíèÿ òåêñòà.
Íà ýëåìåíò óïðàâëåíèÿ TextBox îáû÷íî ïîìåùà-
åòñÿ ðåäàêòèðóåìûé òåêñò, õîòÿ åãî ìîæíî òàêæå
ñäåëàòü äîñòóïíûì òîëüêî äëÿ ÷òåíèÿ. Â òåêñòîâûå
ïîëÿ ìîæíî âûâîäèòü íåñêîëüêî ñòðîê òåêñòà, ðàç-
ìåùàòü òåêñò â ñîîòâåòñòâèè ñ ðàçìåðîì ýëåìåíòà
óïðàâëåíèÿ è äîáàâëÿòü îñíîâíûå ýëåìåíòû ôîðìà-
òèðîâàíèÿ.
Íàïðèìåð, äëÿ âûâîäà â òåêñòîâîå ïîëå Text-
Box1 òåêñòà «Ïðèâåò, Ìèð» íåîáõîäèìî â ïðîãðàì-
ìíûé êîä ââåñòè ñëåäóþùóþ ñòðîêó:

TextBox1.Text = "Ïðèâåò, Ìèð."


34 Ãëàâà 2

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


2.3. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ìîäåðíèçèðîâàòü ïðîåêò «Ïðèâåò, Ìèð», äîáà-
âèâ âûâîä ñîîáùåíèÿ ñ èñïîëüçîâàíèåì ôóíê-
Microsoft-CD
öèè âûâîäà ñîîáùåíèé, íàäïèñè è òåêñòîâîãî
ïîëÿ. Çàãîòîâêà ïðîåêòà ñîäåðæèòñÿ â ñàìî-
ðàñïàêîâûâàþùåìñÿ àðõèâå Ïðèâåò_Ìèð.exe.
2.4. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ìîäåðíèçèðîâàòü ïðîåêò «Ìîå èìÿ», äîáàâèâ
âûâîä ñîîáùåíèÿ ñ èñïîëüçîâàíèåì ôóíêöèè
âûâîäà ñîîáùåíèé, íàäïèñè è òåêñòîâîãî ïîëÿ.
Çàãîòîâêà ïðîåêòà ñîäåðæèòñÿ â ñàìîðàñïàêî-
âûâàþùåìñÿ àðõèâå Ìîå_èìÿ.exe.
Òåñò ïî òåìå
«Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET»
1. Â Visual Studio .NET ïðîåêò õðàíèòñÿ

m  îäíîì ôàéëå ïðîåêòà

m  îäíîì ôàéëå ðåøåíèÿ

m  èåðàðõè÷åñêîé ñèñòåìå ïàïîê ðåøåíèÿ

m  ïàïêå ïðîåêòà

2. Ñ ïîìîùüþ êàêîãî îêíà âûáèðàþòñÿ ýëåìåíòû óïðàâëåíèÿ äëÿ


ðàçìåùåíèÿ èõ íà ôîðìå?

m Ðåäàêòîð êîäà (Code)

m Êîíñòðóêòîð ôîðì (Form Design Window)

m Îáëàñòü ýëåìåíòîâ (Toolbox)

m Îêíî ñâîéñòâ (Properties)

3. Ïåðåä çàïóñêîì ïðîãðàììû íà âûïîëíåíèå íóæíî

m Ñêîìïèëèðîâàòü ïðîãðàììó

m Ñîõðàíèòü ïðîåêò

m Íàñòðîèòü ïðîôèëü

m Çàïóñòèòü ñïðàâî÷íóþ ñèñòåìó

4. Visual Studio .NET ìîæíî íàñòðàèâàòü ïîä êîíêðåòíîãî ïîëüçîâàòåëÿ


íà ñòðàíèöå

m Ïðîåêòû (Projects)

m Ðåñóðñû â ñåòè (Online Resources)

m Ñïðàâêà (Help)

m Ìîé ïðîôèëü (Profile)


Ãëàâà 3

Àëãîðèòìû è ïðîãðàììû

3.1. Îñíîâíûå ýëåìåíòû êîäà


3.2. Àëãîðèòìû â ôîðìå ïñåâäîêîäà
3.3. Êîììåíòàðèè â êîäå

 1981 ãîäó
áûëà ðàçðà-
áîòàíà îïåðàöèîííàÿ ñè-
ñòåìà MS-DOS (Microsoft
Disk Operation System —
äèñêîâàÿ îïåðàöèîííàÿ
ñèñòåìà) äëÿ ïåðñîíàëü-
íûõ êîìïüþòåðîâ.
MS-DOS òðåáîâàëà ââî-
äà êîìàíä ñ êëàâèàòóðû
â êîìàíäíîé ñòðîêå. Â
îïåðàöèîííîé ñèñòåìå
Windows ñóùåñòâóåò âîç-
ìîæíîñòü ïåðåõîäà â ðå-
æèì MS-DOS, êîòîðûé
èíîãäà ïðåäïî÷èòàþò
îïûòíûå ïðîãðàììèñòû.
Àëãîðèòìû è ïðîãðàììû 37

3.1. Îñíîâíûå ýëåìåíòû êîäà


Âî âñåõ ÿçûêàõ ïðîãðàììèðîâàíèÿ èñïîëüçóþòñÿ
áàçîâûå ýëåìåíòû îäíèõ è òåõ æå âèäîâ, õîòÿ ñèí-
òàêñèñ, ñ ïîìîùüþ êîòîðîãî ýòè ýëåìåíòû çàïèñû-
âàþòñÿ, ñâîé â êàæäîì ÿçûêå. Èç ýòèõ ýëåìåíòîâ
ìîæíî ñîñòàâëÿòü ëþáûå, äàæå ñàìûå ñëîæíûå ïðî-
ãðàììû.
Ïîìíèòå ñòðîêó êîäà, êîòîðóþ âû äîáàâèëè â
ïðîåêò «Ïðèâåò, Ìèð»? Îíà âûãëÿäåëà òàê:
MessageBox.Show("Ïðèâåò, Ìèð.")

Ýòà ñòðîêà âûâîäèò íà ýêðàí èíôîðìàöèþ äëÿ


ïîëüçîâàòåëÿ ñ èñïîëüçîâàíèåì ìåòîäà Show îáúåêòà
MessageBox. Âî ìíîãèõ îáúåêòíî-îðèåíòèðîâàííûõ
ÿçûêàõ ïðîãðàììèðîâàíèÿ åñòü òàêîé ìåòîä, ñîîá-
ùàþùèé èíôîðìàöèþ ïîëüçîâàòåëþ, õîòÿ åãî ñèí-
òàêñèñ ðàçíûé â ðàçíûõ ÿçûêàõ. Åñòü è äðóãèå
ýëåìåíòû êîäà, ïîääåðæèâàåìûå âñåìè ÿçûêàìè
ïðîãðàììèðîâàíèÿ.
Âîò íåñêîëüêî ïðèìåðîâ äðóãèõ ýëåìåíòîâ ïðî-
ãðàìì, ïîääåðæèâàåìûõ âñåìè ÿçûêàìè:
q Ïåðåìåííûå èñïîëüçóþòñÿ äëÿ õðàíåíèÿ èí-
ôîðìàöèè, íàïðèìåð ÷èñåë èëè òåêñòà. Ýòî
«êîíòåéíåðû» äëÿ õðàíåíèÿ èíôîðìàöèè èëè
ðåçóëüòàòîâ âû÷èñëåíèé.
q Îïåðàòîðû ïðèñâàèâàíèÿ ïîìåùàþò, èëè çà-
ïèñûâàþò, çíà÷åíèÿ â ïåðåìåííûå. Çíà÷åíèå
ìîæåò áûòü ÷èñëîì, òåêñòîì, çíà÷åíèåì äðó-
ãîé ïåðåìåííîé èëè ðåçóëüòàòîì âû÷èñëåíèé.
q Îïåðàòîðû ñðàâíåíèÿ ïîçâîëÿþò ñðàâíèâàòü
çíà÷åíèå ïåðåìåííîé ñ ÷èñëîì èëè ñî çíà÷å-
íèåì äðóãîé ïåðåìåííîé. Ýòè îïåðàòîðû êàê
áû çàäàþò âîïðîñ, îòâåò íà êîòîðûé — âñåãäà
«èñòèíà» èëè «ëîæü», ò. å. «äà» èëè «íåò».
q Îïåðàòîðû ïðèíÿòèÿ ðåøåíèÿ ðåøàþò, ÷òî
äåëàòü äàëüøå. Ïðèíèìàåìîå ðåøåíèå îñíî-
âûâàåòñÿ íà ðåçóëüòàòàõ ñðàâíåíèÿ. Åñëè ðå-
çóëüòàò ñðàâíåíèÿ «èñòèíà», òî âûáèðàåòñÿ
38 Ãëàâà 3

ïåðâûé âàðèàíò äàëüíåéøèõ äåéñòâèé. Åñëè


ðåçóëüòàò ñðàâíåíèÿ «ëîæü», òî âûáèðàåòñÿ
âòîðîé âàðèàíò. Îïåðàòîðû ïðèíÿòèÿ ðåøå-
íèÿ ÷àñòî íàçûâàþòñÿ îïåðàòîðàìè âåòâëåíèÿ,
ïîñêîëüêó ïîñëåäîâàòåëüíîñòü âûïîëíåíèÿ
ïðîãðàììû ìîæíî «ðàçâåòâëÿòü» ñ ïîìîùüþ
ýòèõ îïåðàòîðîâ.
q Îïåðàòîðû öèêëà èñïîëüçóþòñÿ äëÿ ìíîãî-
êðàòíîãî âûïîëíåíèÿ êàêèõ-íèáóäü äåéñòâèé.
Ýòè îïåðàòîðû óìåíüøàþò êîëè÷åñòâî êîäà,
êîòîðîå âàì ïðèäåòñÿ ïèñàòü, ñîçäàâàÿ ïðî-
ãðàììó, åñëè êàêèå-òî äåéñòâèÿ íóæíî ïîâòî-
ðÿòü ìíîãî ðàç.
Èçó÷àÿ ïðîãðàììèðîâàíèå, âû óçíàåòå, êàê ñ ïî-
ìîùüþ îïåðàòîðîâ ýòèõ âèäîâ çàñòàâëÿòü êîìïüþ-
òåð äåëàòü òî, ÷òî âàì õî÷åòñÿ. Èçó÷àÿ Visual Basic
.NET (èëè ëþáîé äðóãîé ÿçûê ïðîãðàììèðîâàíèÿ),
âû äîëæíû áóäåòå çàïîìíèòü ñèíòàêñèñ, ñ ïîìîùüþ
êîòîðîãî â ýòîì ÿçûêå ïðîãðàììèðîâàíèÿ çàïèñûâà-
þòñÿ îñíîâíûå ýëåìåíòû ïðîãðàìì.

3.2. Àëãîðèòì â ôîðìå ïñåâäîêîäà


Ðàññìîòðèì, êàê ïëàíèðîâàòü è îðãàíèçîâûâàòü ïðî-
ãðàììó åùå äî òîãî, êàê âû íà÷íåòå ïèñàòü åå êîä.
Ìíîãèå ïðîãðàììèñòû ñíà÷àëà ñîçäàþò àëãîðèòì,
êîòîðûé ìîæåò áûòü çàïèñàí íà òàê íàçûâàåìîì
ïñåâäîêîäå, à ïîòîì ïåðåâîäÿò èõ íà íàñòîÿùèé
ÿçûê ïðîãðàììèðîâàíèÿ. Àëãîðèòì ìîæíî çàïèñàòü
íà åñòåñòâåííîì ÿçûêå (àíãëèéñêîì, ðóññêîì èëè âà-
øåì ðîäíîì), îáúÿñíèâ, ÷òî ïðîãðàììà äîëæíà äå-
ëàòü, øàã çà øàãîì.
Íà ïñåâäîêîäå îïèñûâàåòñÿ ñòðóêòóðà ïðîãðàì-
ìû è ïîñëåäîâàòåëüíîñòü åå ðàáîòû. Àëãîðèòì íà
ïñåâäîêîäå äîëæåí áûòü äîñòàòî÷íî ïîíÿòíûì, ÷òî-
áû âû è äðóãèå ïðîãðàììèñòû ìîãëè â íåì ðàçî-
áðàòüñÿ, ïîñêîëüêó îí çàêëàäûâàåò îñíîâó äëÿ
íàïèñàíèÿ íàñòîÿùåãî êîäà ïðîãðàììû. Àëãîðèòì
Àëãîðèòìû è ïðîãðàììû 39

ñîñòîèò èç îïåðàòîðîâ ðàçíûõ áàçîâûõ âèäî⠗ îïå-


ðàòîðîâ ïðèñâàèâàíèÿ, ñðàâíåíèÿ, ïðèíÿòèÿ ðåøå-
íèé è ò. ä. Ñîçäàâ àëãîðèòì, ñðàâíèòåëüíî íåñëîæíî
Íà÷èíàòü ïèñàòü ïðîãðàì- çàïèñàòü åãî â âèäå ïðîãðàììíîãî êîäà.
ìó ñ ñîçäàíèÿ àëãîðèòìà Ïðåäïîëîæèì, íàì íóæíî íàïèñàòü ïðîãðàììó,
â ôîðìå ïñåâäîêîäà êîòîðàÿ âû÷èñëèò ñðåäíþþ ñòîèìîñòü áåíçèíà â
óäîáíî, ïîòîìó ÷òî ïîòîì ðóáëÿõ çà ëèòð, åñëè áåíçèí ïîêóïàëñÿ íà çàïðàâ-
ïñåâäîêîä ìîæíî ïðåîá- êàõ ðàçëè÷íûõ ôèðì. ×òî ýòà ïðîãðàììà äîëæíà äå-
ðàçîâàòü â êîä íà ðàçíûõ
ëàòü? ×òîáû îòâåòèòü íà ýòîò âîïðîñ, ìû ñíà÷àëà
ÿçûêàõ ïðîãðàììèðîâà-
íèÿ, è íå ïðèõîäèòñÿ ñ ñà- íàïèøåì ïðîãðàììó ñ ïîìîùüþ ïñåâäîêîäà. Âîò
ìîãî íà÷àëà ïðèâÿçû- äåéñòâèÿ, êîòîðûå íàøà ïðîãðàììà äîëæíà áóäåò
âàòüñÿ ê îäíîìó ÿçûêó. âûïîëíÿòü, ÷òîáû âû÷èñëèòü ñðåäíþþ ñòîèìîñòü
Ñíà÷àëà íóæíî îïèñàòü ñ áåíçèíà:
ïîìîùüþ ïñåâäîêîäà ëî-
ãèêó ðàáîòû è ñòðóêòóðó
1. Ïðîñóììèðîâàòü âñå äåíüãè, êîòîðûå ìû ïî-
ïðîãðàììû. Çàòåì ïñåâ-
äîêîä íóæíî «ïåðåâåñòè» òðàòèëè íà áåíçèí, è çàïèñàòü ýòó ñóììó â
íà òîò ÿçûê ïðîãðàììèðî- ïåðåìåííóþ (TotalRub).
âàíèÿ, êîòîðûé âû ðåøè- 2. Íàéòè îáùåå êîëè÷åñòâî êóïëåííîãî áåíçè-
òå èñïîëüçîâàòü. íà è çàïèñàòü ýòî êîëè÷åñòâî â äðóãóþ ïåðå-
ìåííóþ (TotalLiter).
3. Ðàçäåëèòü çíà÷åíèå ïåðâîé ïåðåìåííîé
(TotalRub) íà çíà÷åíèå âòîðîé ïåðåìåííîé
(TotalLiter). Ðåçóëüòàò äåëåíèÿ çàïèñàòü
â òðåòüþ ïåðåìåííóþ (RubPerLiter).
4. Âûâåñòè ñîîáùåíèå, â êîòîðîì óêàçàíà ñðåä-
íÿÿ öåíà áåíçèíà.

Ïñåâäîêîä ïîêàçûâàåò, ÷òî äîëæíà áóäåò äåëàòü


ïðîãðàììà. Òåïåðü ìîæíî íàïèñàòü êîä, âûïîëíÿþ-
ùèé äåéñòâèÿ, ïåðå÷èñëåííûå â ïñåâäîêîäå.
Âîò åùå îäèí ïðèìåð, íà ýòîò ðàç ñ áîëüøèì êîëè-
÷åñòâîì øàãîâ. Ýòî ïðèìåð îïèñàíèÿ ïðîãðàììû äëÿ
ðîáîòà, êîòîðûé áóäåò çàìåíÿòü ïðîêîëîòûå øèíû.

1. Îïðåäåëèòü, êàêàÿ øèíà ïðîêîëîòà (îïåðà-


òîð ñðàâíåíèÿ).
2. Îïðåäåëèòü ðàçìåð ïðîêîëîòîé øèíû (îïå-
ðàòîð ñðàâíåíèÿ).
40 Ãëàâà 3

3. Åñëè íåò øèíû íóæíîãî äëÿ çàìåíû ðàçìå-


ðà, òî ïîëó÷èòü øèíó äëÿ çàìåíû ñî ñêëàäà
(îïåðàòîðû ñðàâíåíèÿ è ïðèíÿòèÿ ðåøåíèÿ).
4. Ïîäíÿòü àâòîìîáèëü ñ ïîìîùüþ äîìêðàòà.
5. Ñíÿòü êîëïàê, ÷òîáû äîáðàòüñÿ äî êðåïëå-
íèÿ øèíû.
6. Ñíÿòü øèíó, îòêðó÷èâàÿ ïî î÷åðåäè âñå ãàé-
êè ñ ïîìîùüþ ãàå÷íîãî êëþ÷à (îïåðàòîð
öèêëà).
7. Óäàëèòü ïðîêîëîòóþ øèíó.
8. Íàäåòü íîâóþ øèíó.
9. Çàêðóòèòü ïî î÷åðåäè âñå ãàéêè ñ ïîìîùüþ
ãàå÷íîãî êëþ÷à (îïåðàòîð öèêëà).
10. Âåðíóòü íà ìåñòî êîëïàê è çàêðåïèòü åãî.
11. Óáðàòü äîìêðàò.
 ýòîì ïñåâäîêîäå åñòü îïåðàòîðû ïðèñâàèâàíèÿ,
îïåðàòîðû ñðàâíåíèÿ, îïåðàòîðû ïðèíÿòèÿ ðåøå-
íèé è îïåðàòîðû öèêëà. Íàïðèìåð, íóæíî çàïîìè-
íàòü ðàçìåð ïðîêîëîòîé øèíû — ýòî äåëàåò îïåðàòîð
ïðèñâàèâàíèÿ. Íóæíî ñðàâíèòü ðàçìåð ïðîêîëîòîé
øèíû ñ ðàçìåðàìè øèí, êîòîðûå åñòü â çàïàñå, —
ýòî îïåðàòîð ñðàâíåíèÿ. Ïîñëå îïåðàòîðà ñðàâíåíèÿ
èñïîëüçóåòñÿ îïåðàòîð ïðèíÿòèÿ ðåøåíèÿ. Åñëè ó íàñ
åñòü øèíà íóæíîãî ðàçìåðà, ìû ìîæåì ïðîäîëæàòü
ðàáîòó, â ïðîòèâíîì ñëó÷àå íóæíî ñíà÷àëà îáðàòèòüñÿ
íà ñêëàä. Îòêðó÷èâàíèå ãàåê è èõ çàêðó÷èâàíèå ìîæ-
íî âîñïðèíèìàòü êàê öèêëè÷åñêè ïîâòîðÿþùèåñÿ
îïåðàöèè. Ýòè îïåðàöèè íóæíî ïîâòîðÿòü äëÿ êàæ-
äîé ãàéêè — ñíà÷àëà ïðè îòêðó÷èâàíèè, à ïîòîì
ïðè çàêðó÷èâàíèè.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


3.1. Çàïèøèòå â ôîðìå ïñåâäîêîäà àëãîðèòì âêëþ-
Microsoft-CD ÷åíèÿ êîìïüþòåðà, çàïóñêà îïåðàöèîííîé ñèñ-
òåìû Windows è ñèñòåìû ïðîãðàììèðîâàíèÿ
Visual Studio .NET.
Àëãîðèòìû è ïðîãðàììû 41

3.3. Êîììåíòàðèè â êîäå


Êîììåíòàðèè. Ñîâðåìåííûå ÿçûêè ïðîãðàììèðîâà-
Äîáàâëÿéòå â êîä êîì- íèÿ, âêëþ÷àÿ ÿçûêè èç Visual Studio .NET, ïîçâîëÿþò
ìåíòàðèè, íî íå ïåðåñòà- äîáàâëÿòü â êîä ïðîãðàìì êîììåíòàðèè. Êîììåíòà-
ðàéòåñü. Êîììåíòèðóÿ êîä, ðèè íå êîìïèëèðóþòñÿ âìåñòå ñ ïðîãðàììîé è íå
âû îáúÿñíÿåòå åãî íàçíà- âûïîëíÿþòñÿ ïðè åå âûïîëíåíèè. Îíè ïîçâîëÿþò
÷åíèå, à íå ïèøåòå ðî- äîáàâëÿòü â ïðîãðàììó çàìå÷àíèÿ, ïîÿñíÿþùèå åå
ìàí. ðàáîòó è íàçíà÷åíèå. Êîììåíòàðèè ïîìîãàþò âñïîì-
íèòü, ÷òî äåëàþò îòäåëüíûå ÷àñòè ïðîãðàìì, è ïî-
çâîëÿþò äðóãèì ïðîãðàììèñòàì ëåã÷å ðàçáèðàòüñÿ â
íàïèñàííîì âàìè êîäå.
Êîììåíòàðèè ñëåäóåò äîáàâëÿòü â êîä âñåãäà.
Íàëè÷èå êîììåíòàðèå⠗ ýòî ïðèçíàê îïûòíîñòè
ïðîãðàììèñòà è õîðîøåãî ñòèëÿ ïðîãðàììèðîâàíèÿ.
Õîðîøèé ïðîãðàììèñò âñåãäà âûäåëèò âðåìÿ íà äî-
êóìåíòèðîâàíèå è îáúÿñíåíèå íàïèñàííîãî èì êîäà.
Åñëè âû èçìåíÿåòå èëè äîáàâëÿåòå êàêèå-òî ôóíê-
öèè â ïðîãðàììó, äîáàâüòå â íåå êîììåíòàðèè. Êðî-
ìå òîãî, äîáàâëÿéòå êîììåíòàðèè ê òðóäíûì äëÿ
ïîíèìàíèÿ ÷àñòÿì ïðîãðàììû èëè ê ÷àñòÿì, âûïîë-
íÿþùèì ñëîæíûå èëè ðåäêî èñïîëüçóåìûå äåéñò-
âèÿ èëè âû÷èñëåíèÿ.
 Visual Basic .NET êîììåíòàðèé â ñòðîêå íà÷è-
íàåòñÿ ñ ñèìâîëà àïîñòðîôà ('). Ëþáàÿ ñòðîêà â êîäå,
íà÷èíàþùàÿñÿ ñ àïîñòðîôà, ñ÷èòàåòñÿ êîììåíòàðè-
Òîëüêî â Visual Basic .NET åì è íå áóäåò êîìïèëèðîâàòüñÿ âìåñòå ñ ïðîãðàììîé
êîììåíòàðèè îáîçíà÷à- è âûïîëíÿòüñÿ.
þòñÿ àïîñòðîôîì. Â ÿçû- Ó êîììåíòàðèåâ åñòü åùå îäíà âàæíàÿ ôóíêöèÿ
êàõ â C# è J# ñòðîêè êðîìå äîêóìåíòèðîâàíèÿ ïðîãðàìì. Ïîñêîëüêó
êîììåíòàðèåâ íà÷èíàþò- ñòðîêè êîììåíòàðèåâ íå êîìïèëèðóþòñÿ è íå âû-
ñÿ ñ äâóõ ñèìâîëîâ êîñîé
ïîëíÿþòñÿ, ìîæíî ïîìå÷àòü ñòðîêè êîäà êàê ñòðîêè
÷åðòû (//).
êîììåíòàðèåâ, ÷òîáû ýòè ñòðîêè íå âûïîëíÿëèñü.
Ýòîò ïðèåì íàçûâàåòñÿ «çàêîììåíòèðîâàòü ñòðîêó
êîäà». Ñ ïîìîùüþ çàêîììåíòèðîâàíèÿ ôðàãìåíòîâ
êîäà ìîæíî ðàçûñêèâàòü îøèáêè â ïðîãðàììàõ.
Åñëè â âàøåé ïðîãðàììå åñòü îøèáêà, ìîæåòå ïî
î÷åðåäè çàêîììåíòèðîâàòü îòäåëüíûå ñòðîêè èëè
öåëûå áëîêè êîäà, ïîêà îøèáêà íå ïåðåñòàíåò ïîÿâ-
ëÿòüñÿ. Îøèáêà, ñêîðåå âñåãî, áóäåò íàõîäèòüñÿ â
42 Ãëàâà 3

ñòðîêå, êîòîðóþ âû çàêîììåíòèðîâàëè ïîñëåäíåé,


ïðåæäå ÷åì îøèáêà èñ÷åçëà. Óäîáíî, ïðàâäà?

Ïñåâäîêîä â êà÷åñòâå êîììåíòàðèåâ. Ñ ïîìîùüþ


êîììåíòàðèåâ ìîæíî îïèñàòü ñòðóêòóðó ïðîãðàì-
ìû. Åñëè âû óæå íàïèñàëè ïñåâäîêîä, îïèñûâàþ-
ùèé ðàáîòó âàøåé ïðîãðàììû, âîñïîëüçóéòåñü ýòèì
ïñåâäîêîäîì. Ñêîïèðóéòå è âñòàâüòå ïñåâäîêîä â
ïðîãðàììó è ïîìåñòèòå àïîñòðîô â íà÷àëå êàæäîé
ñòðîêè ïñåâäîêîäà, ÷òîáû ïðåâðàòèòü åãî â êîììåí-
òàðèè. À òåïåðü íàïèøèòå íàñòîÿùèé êîä íà Visual
Basic .NET ïîä êàæäîé ñòðîêîé ïñåâäîêîäà. Ó âàñ
ïîëó÷èòñÿ ïðîãðàììà, êîòîðàÿ íå òîëüêî ðàáîòàåò,
íî è óæå äîêóìåíòèðîâàíà!
Âîò ïðèìåð, îñíîâàííûé íà ïñåâäîêîäå âû÷èñ-
ëåíèÿ ñðåäíåé öåíû áåíçèíà, êîòîðûé áûë îïèñàí â
ïðåäûäóùåì ïàðàãðàôå. Îáðàòèòå âíèìàíèå, ÷òî
ïñåâäîêîä îáðàçóåò êîììåíòàðèè ê ïðîãðàììå.

‘Ïðîñóììèðîâàòü âñå äåíüãè, êîòîðûå ìû


‘ïîòðàòèëè íà áåíçèí, è çàïèñàòü ýòó ñóììó â
‘ïåðåìåííóþ (TotalRub).
Dim TotalRub As Double
TotalRub = 800 + 1700 + 1350

‘Íàéòè îáùåå êîëè÷åñòâî êóïëåííîãî áåíçèíà è


‘çàïèñàòü ýòî êîëè÷åñòâî â äðóãóþ ïåðåìåííóþ
‘(TotalLiter).
Dim TotalLiter As Double
TotalLiter = 50 + 100 + 75
‘Ðàçäåëèòü çíà÷åíèå ïåðâîé ïåðåìåííîé
‘(TotalRub) íà çíà÷åíèå âòîðîé ïåðåìåííîé
‘(TotalLiter). Ðåçóëüòàò äåëåíèÿ çàïèñàòü â
‘òðåòüþ ïåðåìåííóþ (RubPerLiter).
Dim RubPerLiter As Double
RubPerLiter = TotalRub / TotalLiter
‘Âûâåñòè ñîîáùåíèå, â êîòîðîì óêàçàíà ñðåäíÿÿ
‘öåíà áåíçèíà.
MessageBox.Show (RubPerLiter)

Îòñòóïû è ïðîáåëüíûå ñèìâîëû. Õîòÿ âû, âîç-


ìîæíî, ïîíÿëè íå âåñü ïîêàçàííûé âûøå êîä íà
Àëãîðèòìû è ïðîãðàììû 43

ÿçûêå Visual Basic .NET, ìû õîòèì, ÷òîáû âû îáðà-


òèëè âíèìàíèå íà ïàðó âåùåé. Âî-ïåðâûõ, âñå êîì-
ìåíòàðèè íà÷èíàþòñÿ ñ àïîñòðîôà. Êðîìå òîãî,
Ïî óìîë÷àíèþ Visual Basic êîììåíòàðèè âûäåëÿþòñÿ â ïðîãðàììàõ çåëåíûì
.NET àâòîìàòè÷åñêè äåëà- öâåòîì. Ýòî ïîçâîëÿåò ëåãêî çàìå÷àòü èõ â êîäå.
åò îòñòóïû â íà÷àëå ñòðîê Âî-âòîðûõ, îáðàòèòå âíèìàíèå íà ïóñòóþ ñòðîêó ïå-
êîäà, çàâèñÿùèå îò êîäà â ðåä êàæäûì êîììåíòàðèåì. Ýòè ïóñòûå ñòðîêè äå-
ýòèõ ñòðîêàõ. Õîòÿ àâòî- ëÿò êîììåíòàðèè è êîä íà ÷àñòè, âûïîëíÿþùèå
ìàòè÷åñêèé îòñòóï ìîæíî
îòäåëüíûå äåéñòâèÿ. Ïîäåëåííóþ íà òàêèå ÷àñòè
îòêëþ÷èòü, ëó÷øå åãî âñå
æå èñïîëüçîâàòü. ïðîãðàììó ïðîùå ÷èòàòü è ïîíèìàòü.
Âî ìíîãèõ ñëó÷àÿõ Visual Basic .NET àâòîìàòè-
÷åñêè äîáàâëÿåò ïðîïóñêè è îòñòóïû, ÷òîáû êîä
áûëî ëåã÷å ÷èòàòü. Íî åñëè õîòèòå, âû ìîæåòå äî-
áàâëÿòü äîïîëíèòåëüíûå ïðîïóñêè è îòñòóïû. Îíè
îáëåã÷àþò ÷òåíèå è ïîíèìàíèå êîäà è êîììåíòàðè-
åâ. Visual Basic .NET è äðóãèå ÿçûêè .NET íå îáðà-
ùàþò âíèìàíèÿ íà ïóñòûå ñòðîêè è îòñòóïû. Îíè
èãíîðèðóþòñÿ ïðè êîìïèëÿöèè ïðîãðàììû.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


3.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Öåíà áåíçèíà», îïèñàííûé â
ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìî-
Microsoft-CD ðàñïàêîâûâàþùåìñÿ àðõèâå Öåíà_áåíçèíà.exe.
3.3. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Öâåò ðûáîê». Â òåêñòîâûå
ïîëÿ ââîäÿòñÿ êîëè÷åñòâà êðàñíûõ, ñèíèõ,
æåëòûõ è çåëåíûõ ðûáîê, à òàêæå èõ îáùåå
êîëè÷åñòâî, è ñîçäàåòñÿ ñîáûòèéíàÿ ïðîöåäó-
ðà, âû÷èñëÿþùàÿ ïðîöåíò ðûáîê êàæäîãî öâå-
òà è âûâîäÿùàÿ ýòè ïðîöåíòû â òåêñòîâûå
ïîëÿ. Ïåðåâåñòè òåêñò íà íàäïèñÿõ è êíîïêàõ,
à òàêæå êîììåíòàðèè â ïðîãðàììíîì êîäå ñ
àíãëèéñêîãî ÿçûêà íà ðóññêèé. Çàãîòîâêà ïðî-
åêòà ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ
àðõèâå Öâåò_ðûáîê.exe.
Òåñò ïî òåìå «Àëãîðèòìû è ïðîãðàììû»
1. Êàêèå îïåðàòîðû â ÿçûêàõ ïðîãðàììèðîâàíèÿ èñïîëüçóþòñÿ äëÿ
ìíîãîêðàòíîãî ïîâòîðåíèÿ îäíèõ è òåõ æå äåéñòâèé?

m Îïåðàòîðû ñðàâíåíèÿ

m Îïåðàòîðû öèêëà

m Îïåðàòîðû âåòâëåíèÿ

m Îïåðàòîðû ïðèñâàèâàíèÿ

2. Ïñåâäîêîä — ýòî

m ßçûê ïðîãðàììèðîâàíèÿ

m Àëãîðèòì, çàïèñàííûé íà åñòåñòâåííîì ÿçûêå

m Êîììåíòàðèè â ïðîãðàììå

m Ïðîãðàììà íà ìàøèííîì ÿçûêå

3. Êîììåíòàðèè, îòñòóïû è èíòåðâàëû íåîáõîäèìû â ïðîãðàììå

m ×åëîâåêó äëÿ ëó÷øåãî ïîíèìàíèÿ ïðîãðàììû

m Êîìïüþòåðó äëÿ ïðàâèëüíîãî âûïîëíåíèÿ ïðîãðàììû

m È ÷åëîâåêó, è êîìïüþòåðó

m Íè ÷åëîâåêó, íè êîìïüþòåðó

4. Îïåðàòîðû âåòâëåíèÿ èñïîëüçóþòñÿ äëÿ

m Ìíîãîêðàòíîãî âûïîëíåíèÿ îäíîé è òîé æå ñåðèè êîìàíä

m Ñðàâíåíèÿ çíà÷åíèÿ ïåðåìåííîé ñ ÷èñëîì èëè ñî çíà÷åíèåì äðóãîé


ïåðåìåííîé

m Ïðèñâàèâàíèÿ ïåðåìåííîé çíà÷åíèÿ

m Âûïîëíåíèÿ îäíîé ñåðèè êîìàíä, åñëè óñëîâèå âûïîëíÿåòñÿ, è äðóãîé


ñåðèè, åñëè óñëîâèå íå âûïîëíÿåòñÿ
Ãëàâà 4

Ôîðìû è ýëåìåíòû
óïðàâëåíèÿ

4.1. Ôîðìà — îñíîâà ãðàôè÷åñêîãî èíòåðôåéñà


4.2. Ñâîéñòâà ôîðìû
4.3. Ýëåìåíòû óïðàâëåíèÿ è èõ ñâîéñòâà
4.4. Ãåíåðàöèÿ ñîáûòèé

 1985 ãîäó
áûëà ðàçðà-
áîòàíà äëÿ ïåðñîíàëüíûõ
êîìïüþòåðîâ îïåðàöèîí-
íàÿ ñèñòåìà ñ ãðàôè÷å-
ñêèì èíòåðôåéñîì
Windows 1.0. Ïîëüçîâà-
òåëü ïîëó÷èë âîçìîæíîñòü
óïðàâëÿòü êîìïüþòåðîì ñ
ïîìîùüþ ùåë÷êîâ ìûøüþ
ïî ïèêòîãðàììàì è ïóíê-
òàì ìåíþ. Ïðè æåëàíèè
ïîëüçîâàòåëü ïåðåõîäèë â
ðåæèì MS-DOS, ãäå ââî-
äèë êîìàíäû ñ êëàâèàòó-
ðû â êîìàíäíîé ñòðîêå.
46 Ãëàâà 4

4.1. Ôîðìà — îñíîâà ãðàôè÷åñêîãî


èíòåðôåéñà
Ïðèëîæåíèå Windows (Windows Application) èìååò
ãðàôè÷åñêèé ïîëüçîâàòåëüñêèé èíòåðôåéñ, ïîçâî-
ëÿþùèé ïîëüçîâàòåëþ âçàèìîäåéñòâîâàòü ñ ïðèëî-
æåíèåì. Ïîëüçîâàòåëüñêèé èíòåðôåéñ åñòü íå ó âñåõ
ïðîãðàìì — íåêîòîðûå ïðîãðàììû âûïîëíÿþò âñå,
÷òî íóæíî, ñàìè èëè ðàáîòàþò â ôîíîâîì ðåæèìå,
íå òðåáóÿ îò ïîëüçîâàòåëÿ íèêàêèõ äåéñòâèé ïîñëå
çàïóñêà.
Êîãäà âû ñîçäàåòå ïðèëîæåíèå Windows íà Visual
Basic, Visual Studio àâòîìàòè÷åñêè äîáàâëÿåò â âàø
ïðîåêò ôàéë ôîðìû Form1.vb. Â ýòó ôîðìó ìîæíî
äîáàâëÿòü ýëåìåíòû óïðàâëåíèÿ, íàïðèìåð êíîïêè,
íàäïèñè, òåêñòîâûå ïîëÿ, âûïàäàþùèå ñïèñêè
è ò. ä. Ýòè ýëåìåíòû óïðàâëåíèÿ ïîçâîëÿþò ïîëüçî-
âàòåëþ âçàèìîäåéñòâîâàòü ñ ïðîãðàììîé. Ïðåäïî-
ëîæèì, ÷òî â ïðèëîæåíèè åñòü ôîðìà äëÿ îïèñàíèÿ
ïðîêîëîòûõ øèí, â êîòîðîé çàäàåòñÿ èíôîðìàöèÿ
îá ýòèõ øèíàõ. Âîò ïðèìåðíûé ñïèñîê ýëåìåíòîâ
óïðàâëåíèÿ, êîòîðûå âàì ïîíàäîáÿòñÿ, ñ îïèñàíèåì
èõ íàçíà÷åíèÿ:

q Òåêñòîâîå ïîëå, â êîòîðîì óêàçûâàåòñÿ ìàðêà


àâòîìîáèëÿ.

q Ãðóïïà ïåðåêëþ÷àòåëåé, ñ ïîìîùüþ êîòîðûõ


ìîæíî óêàçàòü, êàêàÿ øèíà ïðîêîëîòà (ïðà-
âàÿ ïåðåäíÿÿ, ëåâàÿ ïåðåäíÿÿ, ïðàâàÿ çàäíÿÿ,
ëåâàÿ çàäíÿÿ).
q Ôëàæîê, êîòîðûé óñòàíàâëèâàåòñÿ, åñëè çà-
ìåíà íóæíà ýêñòðåííî.

q Âûïàäàþùèé ñïèñîê, â êîòîðîì ìîæíî âû-


áðàòü íóæíûé ðàçìåð øèíû äëÿ çàìåíû.

q Êíîïêà, ïðè íàæàòèè êîòîðîé âûïîëíÿåòñÿ


ïîèñê ïîäõîäÿùèõ øèí äëÿ çàìåíû.
Ôîðìû è ýëåìåíòû óïðàâëåíèÿ 47

q Òåêñòîâîå ïîëå, â êîòîðîì îòîáðàæàåòñÿ èí-


ôîðìàöèÿ î ïîäõîäÿùèõ íàéäåííûõ øèíàõ,
âêëþ÷àÿ èõ ïðîèçâîäèòåëÿ, ìîäåëü, ðàçìåð,
êîëè÷åñòâî â çàïàñå è öåíó.

Òàêèì îáðàçîì, íà ôîðìå áóäóò äâà òåêñòîâûõ


ïîëÿ, ÷åòûðå ïåðåêëþ÷àòåëÿ, âûïàäàþùèé ñïèñîê,
ôëàæîê è êíîïêà. Èõ ìîæíî ðàñïîëîæèòü íà ôîðìå
ìíîæåñòâîì ðàçíûõ ñïîñîáî⠗ èìåííî çäåñü è íà-
÷èíàåòñÿ ñàìîå èíòåðåñíîå. Ôîðìà — ýòî òî æå ñà-
ìîå, ÷òî õîëñò äëÿ õóäîæíèêà, à ýëåìåíòû
óïðàâëåíèÿ — òî æå, ÷òî êðàñêè. Íî íóæíî áûòü àê-
êóðàòíûì. Ôîðìà äîëæíà âûïîëíÿòü çàäà÷ó, äëÿ
âûïîëíåíèÿ êîòîðîé îíà ïðåäíàçíà÷åíà. Îíà äîë-
æíà ñîîòâåòñòâîâàòü òðåáîâàíèÿì ïðîãðàììû. Åé
äîëæíî áûòü ëåãêî ïîëüçîâàòüñÿ, è íà íåé íå äîë-
æíî áûòü íè÷åãî ëèøíåãî. Ñîçäàâàÿ ôîðìó, íóæíî
ñíà÷àëà ðåøèòü: äëÿ ÷åãî íóæíà ýòà ôîðìà? ×òî îíà
äîëæíà äåëàòü?
Ôîðìà äîëæíà àêêóðàòíî âûãëÿäåòü. Íà íåé íå
äîëæíî áûòü êó÷è ðàçíîöâåòíûõ ýëåìåíòîâ èëè ðàç-
äðàæàþùèõ âèçóàëüíûõ ýôôåêòîâ, âðîäå ìåðöàþ-
ùåãî òåêñòà — ýòî áóäåò îòâëåêàòü ïîëüçîâàòåëÿ.
Ýëåìåíòû óïðàâëåíèÿ äîëæíû ðàñïîëàãàòüñÿ â ÷åò-
êîì è ëîãè÷íîì ïîðÿäêå. Íóæíî ïðîäóìàòü ðàñïî-
ëîæåíèå ýëåìåíòîâ, â êîòîðûå ïîëüçîâàòåëü áóäåò
ââîäèòü èíôîðìàöèþ, ðàáîòàÿ ñ ïðîãðàììîé. Èíî-
ãäà íóæíî ïðåäóïðåæäàòü ïîëüçîâàòåëÿ, ÷òî îí íå
ââåë âñþ íóæíóþ èíôîðìàöèþ èëè ââåë íåâåðíóþ
èíôîðìàöèþ. Ñîçäàâàÿ ôîðìû, ïîïûòàéòåñü ïðåä-
ñòàâèòü ñåáÿ ïîëüçîâàòåëåì è ïîäóìàéòå, êàê ìîæíî
áóäåò ðàáîòàòü ñ âàøåé ïðîãðàììîé.
Ñîçäàâàÿ ôîðìó, íóæíî ïîìíèòü, ÷òî âñå ïðèëî-
æåíèÿ Windows âûãëÿäÿò áîëåå èëè ìåíåå ïîõîæå.
Ïîëüçîâàòåëü áóäåò îæèäàòü, ÷òî âàøå ïðèëîæåíèå
ñîîòâåòñòâóåò îïðåäåëåííûì ñòàíäàðòàì è âåäåò ñåáÿ
ñîîòâåòñòâåííî. Íàïðèìåð, ïåðâîå ìåíþ â ñòðîêå
ìåíþ ïðèëîæåíèé Windows — ýòî îáû÷íî ìåíþ
Ôàéë, â êîòîðîì îáû÷íî åñòü ïóíêò Âûõîä, ïðè âû-
áîðå êîòîðîãî ïðîãðàììà çàâåðøàåò ðàáîòó.
48 Ãëàâà 4

Ïîëüçîâàòåëü ïðèäåò â çàìåøàòåëüñòâî è îñòà-


íåòñÿ íåäîâîëüíûì, åñëè, íàïðèìåð, ïðè ùåë÷êå ïî
êíîïêå ñ íàäïèñüþ Âû÷èñëèòü ðåçóëüòàò öâåò
ôîíà îêíà ñòàíåò êðàñíûì, à òåêñò âñåõ íàäïèñåé
îêàæåòñÿ íàïèñàííûì ïî-ôðàíöóçñêè.
Êàê âû óæå çíàåòå, êîãäà âû ñîçäàåòå íîâîå
ïðèëîæåíèå Windows, Visual Studio àâòîìàòè÷å-
ñêè äîáàâëÿåò â íåãî ôîðìó Form1.vb. Ýòî îñíîâ-
íàÿ, èëè íà÷àëüíàÿ, ôîðìà ïðèëîæåíèÿ. Èìåííî
åå ïîëüçîâàòåëü âèäèò ïðè çàïóñêå ïðîãðàììû.
Ñ îñíîâíîé ôîðìû ïîëüçîâàòåëü ìîæåò îáðàòèòüñÿ
ê ëþáîé äðóãîé ÷àñòè ïðèëîæåíèÿ ñ ïîìîùüþ ðàñ-
ïîëîæåííîé íà íåé ñòðîêè ìåíþ èëè ïàíåëè èíñò-
ðóìåíòîâ.
Âûáèðàÿ ïóíêòû ìåíþ èëè íàæèìàÿ êíîïêè â
îñíîâíîé ôîðìå, ïîëüçîâàòåëü ìîæåò îòêðûâàòü
äðóãèå ôîðìû. Ýòè ôîðìû ìîãóò ïðåäíàçíà÷àòüñÿ
äëÿ ââîäà èëè îòîáðàæåíèÿ èíôîðìàöèè èëè äëÿ
âçàèìîäåéñòâèÿ ñ ïðîãðàììîé äðóãèìè ñïîñîáàìè.
Îáû÷íî ó êàæäîé ôîðìû åñòü êîíêðåòíîå ïðåäíàç-
íà÷åíèå, çàêëþ÷àþùååñÿ, íàïðèìåð, â îòîáðàæåíèè
ðåçóëüòàòîâ èãðû, ââîäå äàííûõ èëè íàñòðîéêå ïðî-
ãðàììû. Ïîñëå òîãî, êàê ïîëüçîâàòåëü ââåäåò íóæ-
íóþ èíôîðìàöèþ èëè ïðîñìîòðèò ïîêàçàííóþ, îí
îáû÷íî çàêðûâàåò ôîðìó è âîçâðàùàåòñÿ ê îñíîâíîé
ôîðìå. Õîòÿ Visual Studio ñîçäàåò òîëüêî ôîðìó
Form1, â ïðîåêò ìîæíî äîáàâèòü ñòîëüêî äðóãèõ
ôîðì, ñêîëüêî âàì ïîíàäîáèòñÿ.

4.2. Ñâîéñòâà ôîðìû


Òåïåðü ìû ìîæåì íà÷èíàòü ñîçäàíèå ïðîåêòà «Çàìå-
íà øèíû». Ñíà÷àëà íåîáõîäèìî ñîçäàòü íîâóþ ôîð-
ìó, çàòåì ðàçìåñòèòü íà íåé ýëåìåíòû óïðàâëåíèÿ è
çàäàòü çíà÷åíèÿ èõ ñâîéñòâ, è, íàêîíåö, ñîçäàòü ïðî-
ãðàììíûé êîä îáðàáîò÷èêîâ ñîáûòèé, íà êîòîðûå
ðåàãèðóþò ýëåìåíòû óïðàâëåíèÿ.
Ôîðìû è ýëåìåíòû óïðàâëåíèÿ 49

Ñîçäàíèå ôîðìû ïðîåêòà è èçìåíåíèå åå ñâîéñòâ.


Êîãäà âû ñîçäàåòå íîâîå ïðèëîæåíèå Windows, ôîðìà
Form1 ñîçäàåòñÿ àâòîìàòè÷åñêè. Åå ðàçìåð ïî óìîë÷à-
íèþ — 300 × 300 ïèêñåëåé. Çíà÷åíèå ñâîéñòâ, óñòà-
íîâëåííûõ ïî óìîë÷àíèþ, ìîæíî ëåãêî óçíàòü â
îêíå Ñâîéñòâà (Properties). Êðîìå òîãî, â îêíå ñâîéñòâ
ìîæíî è èçìåíÿòü çíà÷åíèÿ ñâîéñòâ.
Ñîçäàâ ïðîåêò, îäèí ðàç ùåëêíèòå ëåâîé êíîï-
êîé ìûøè ïî ôîðìå Form1, ÷òîáû âûáðàòü åå. Íà-
æìèòå êëàâèøó {F4}, ÷òîáû îòêðûòü îêíî Ñâîéñòâà.

1. Ïîñêîëüêó ñåé÷àñ âûáðàíà ôîðìà Form1, òî


â îêíå Ñâîéñòâà îòîáðàæàþòñÿ ñâîéñòâà ýòîé
ôîðìû. Çàìåòüòå, ÷òî ïî óìîë÷àíèþ ïîäñâå-
÷èâàåòñÿ ñâîéñòâî Text.
50 Ãëàâà 4

2. Ïðîêðóòèòå âíèç ñïèñîê ñâîéñòâ ôîðìû è


íàéäèòå â íåì ñâîéñòâî Size. Îáðàòèòå âíè-
ìàíèå íà çíà÷îê «ïëþñ» ðÿäîì ñî ñâîéñòâîì
Size. Ýòî ïîêàçûâàåò, ÷òî ñâîéñòâî Size
ìîæíî ðàçâåðíóòü, ÷òîáû äîáðàòüñÿ äî äðó-
ãèõ ñâîéñòâ.

3. Ùåëêíèòå ïî çíà÷êó «ïëþñ» ðÿäîì ñî ñâîé-


ñòâîì Size. Îòêðîþòñÿ ñâîéñòâà Height è
Width. Çíà÷åíèå ñâîéñòâà Height (âûñîòà)
ôîðìû Form1 ðàâíî 300, è çíà÷åíèå ñâîéñòâà
Width (øèðèíà) òîæå ðàâíî 300. Äàâàéòå èç-
ìåíèì ðàçìåð ôîðìû Form1.

4. Âûïîëíèòå äâîéíîé ùåë÷îê ïî ñâîéñòâó Width,


÷òîáû ïîëó÷èòü âîçìîæíîñòü èçìåíèòü åãî
çíà÷åíèå (300). Íàæìèòå êëàâèøó {Backspa-
ce}, ÷òîáû î÷èñòèòü çíà÷åíèå ñâîéñòâà.
Ôîðìû è ýëåìåíòû óïðàâëåíèÿ 51

5. Ââåäèòå ÷èñëî 450. Íàæìèòå êëàâèøó {Enter}.


Âîò è âñå! Âû òîëüêî ÷òî èçìåíèëè øèðèíó
ôîðìû — çíà÷åíèå åå ñâîéñòâà Width. Ïî-
ñìîòðèòå, êàê èçìåíèëàñü øèðèíà ôîðìû íà
ýêðàíå, êîãäà âû íàæàëè êëàâèøó {Enter}.
Êðîìå òîãî, òåïåðü â ñâîéñòâå Width â îêíå
Ñâîéñòâà ïîêàçàíî íîâîå çíà÷åíèå.

À òåïåðü äàâàéòå èçìåíèì çíà÷åíèå ñâîéñòâà


BackColor ôîðìû Form1. Ñâîéñòâî BackColor —
ýòî öâåò ôîíà ôîðìû è ýëåìåíòîâ óïðàâëåíèÿ, ðàñ-
ïîëîæåííûõ íà íåé. Â îêíå Ñâîéñòâà ïðîêðóòèòå
ñïèñîê, ÷òîáû íàéòè ñâîéñòâî BackColor. Ùåëêíè-
òå ïî çíà÷åíèþ Control. Ñïðàâà ïîÿâèòñÿ çíà÷îê ñî
ñòðåëêîé âíèç. Ùåëêíèòå ïî ýòîìó çíà÷êó. Îòêðîåò-
ñÿ îêíî ñ ïàëèòðîé. Ïåðåéäèòå â ýòîì îêíå íà âêëàä-
êó Custom. Âûïîëíèòå äâîéíîé ùåë÷îê ïî ëþáîìó
êâàäðàòèêó ñ öâåòîì, ÷òîáû âûáðàòü ýòîò öâåò. À òå-
ïåðü ïîñìîòðèòå íà ôîðìó!
Ïîñòðîéòå ðåøåíèå è çàïóñòèòå ïðîåêò. Ïîñìîò-
ðèòå, êàê òåïåðü âûãëÿäèò ôîðìà! Êðîìå òîãî, òå-
ïåðü îíà ïðÿìîóãîëüíàÿ, à íå êâàäðàòíàÿ!
Òåïåðü âû çíàåòå, êàê èçìåíÿòü çíà÷åíèÿ ñâîéñòâ
ôîðìû ñ ïîìîùüþ îêíà Ñâîéñòâà. Ïðîñìîòðèòå
ñïèñîê ñâîéñòâ ôîðìû Form1 è ïîçíàêîìüòåñü ñ
íèìè. Îêíî Ñâîéñòâà ïîçâîëÿåò âàì èçìåíÿòü çíà-
÷åíèÿ ñâîéñòâ ôîðìû íà ýòàïå ïðîåêòèðîâàíèÿ, ò. å.
âî âðåìÿ ñîçäàíèÿ ôîðìû. Êàê âû âñêîðå óâèäèòå,
îêíî Ñâîéñòâà ïîçâîëÿåò èçìåíÿòü çíà÷åíèÿ ñâîéñòâ
íå òîëüêî ôîðìû, íî è êíîïîê, òåêñòîâûõ ïîëåé è
äðóãèõ ýëåìåíòîâ óïðàâëåíèÿ.
52 Ãëàâà 4

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


4.1. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
Microsoft-CD ñîçäàòü ôîðìó äëÿ ïðîåêòà «Çàìåíà øèíû»,
îïèñàííóþ â ïàðàãðàôå.

4.3. Ýëåìåíòû óïðàâëåíèÿ è èõ


ñâîéñòâà
Âû óæå çíàåòå, êàê ïîìåñòèòü íà ôîðìó êíîïêè.
Êàê âû íàâåðíÿêà óæå âèäåëè, â îêíå Îáëàñòü ýëå-
ìåíòîâ äîñòóïíî ìíîæåñòâî äðóãèõ ýëåìåíòîâ
óïðàâëåíèÿ. Ðàññìîòðèì, êàê èñïîëüçîâàòü ñàìûå
ðàñïðîñòðàíåííûå èç íèõ è êàê çàäàâàòü çíà÷åíèÿ
èõ íàèáîëåå ïîëåçíûõ ñâîéñòâ. Íà÷íåì ñ íàäïèñåé.
Íàäïèñè. Íàäïèñü (Label) — ýòî ýëåìåíò óïðàâ-
ëåíèÿ, ïîçâîëÿþùèé ðàçìåùàòü íà ôîðìå òåêñò.
Ýòîò ýëåìåíò ÷àñòî èñïîëüçóåòñÿ äëÿ ñîîáùåíèÿ ïîëü-
çîâàòåëþ êàêèõ-òî ñâåäåíèé èëè äëÿ óêàçàíèÿ ïî-
ðÿäêà ââîäà èíôîðìàöèè â ôîðìå.
Îòêðîéòå îêíî Îáëàñòü ýëåìåíòîâ è âûïîëíèòå
äâîéíîé ùåë÷îê ïî ýëåìåíòó óïðàâëåíèÿ Label.
Ýòîò ýëåìåíò áóäåò äîáàâëåí íà ôîðìó. Ïåðåòàùèòå
åãî â ïîäõîäÿùåå ìåñòî. Äëÿ ýòîãî ïîäâåäèòå ê íåìó
êóðñîð ìûøè, íàæìèòå ëåâóþ êíîïêó ìûøè è,
óäåðæèâàÿ åå íàæàòîé, ïåðåìåùàéòå ìûøü. Âûáå-
ðèòå ýëåìåíò è îòêðîéòå îêíî Ñâîéñòâà. Â ýòîì
îêíå òåïåðü îòîáðàæàåòñÿ ñïèñîê ñâîéñòâ ýëåìåíòà
Label. Ïðîêðóòèòå ñïèñîê, ÷òîáû äîáðàòüñÿ äî ñâîé-
ñòâà Text, äâîéíûì ùåë÷êîì ïî íåìó âûäåëèòå
òåêñò è óäàëèòå åãî, íàæàâ êëàâèøó {Backspace}.
Óñòàíîâèòå çíà÷åíèå Ââåäèòå ìàðêó àâòîìîáèëÿ.
Òåêñòîâûå ïîëÿ. Òåêñòîâûå ïîëÿ (TextBox) ìîæ-
íî èñïîëüçîâàòü äëÿ âûâîäà èíôîðìàöèè íà ýêðàí è
äëÿ ïîëó÷åíèÿ èíôîðìàöèè îò ïîëüçîâàòåëÿ.  îêíå
Îáëàñòü ýëåìåíòîâ ñäåëàéòå äâîéíîé ùåë÷îê ïî
ýëåìåíòó TextBox. Íà ôîðìó áóäåò äîáàâëåí ýëå-
ìåíò TextBox1. Ïåðåòàùèòå ýòîò ýëåìåíò òàê, ÷òî-
Ôîðìû è ýëåìåíòû óïðàâëåíèÿ 53

áû îí íàõîäèëñÿ ñïðàâà îò íàäïèñè Label1. Â îêíå


Ñâîéñòâà íàéäèòå ñâîéñòâî Text, âûïîëíèòå ïî íåìó
äâîéíîé ùåë÷îê è íàæìèòå êëàâèøó {Backspace},
÷òîáû óäàëèòü òåêñò. Óñòàíîâèòå çíà÷åíèå False
ñâîéñòâà ReadOnly, ÷òîáû ïîëüçîâàòåëü ñìîã ââî-
äèòü òåêñò â ýòî òåêñòîâîå ïîëå. (Çíà÷åíèå False
óñòàíîâëåíî ïî óìîë÷àíèþ.)
Òåêñòîâûå ïîëÿ ÷àñòî èñïîëüçóþòñÿ äëÿ âûâîäà
áîëüøèõ îáúåìîâ èíôîðìàöèè. Åñëè òåêñò äåéñòâè-
òåëüíî äëèííûé, âû, âåðîÿòíî, çàõîòèòå äîáàâèòü ê
òåêñòîâîìó ïîëþ ïîëîñû ïðîêðóòêè. Äîáàâüòå íà
ôîðìó åùå îäèí ýëåìåíò TextBox. Óñòàíîâèòå çíà-
÷åíèå True åãî ñâîéñòâà Multiline. Çàäàéòå çíà÷å-
íèå 100 ïèêñåëåé åãî ñâîéñòâà Height. Äëÿ ñâîéñòâà
Width òîæå çàäàéòå çíà÷åíèå 100 ïèêñåëåé. Åñëè
äëÿ ñâîéñòâà Multiline óñòàíîâëåíî çíà÷åíèå
False, âàì íå óäàñòñÿ èçìåíèòü çíà÷åíèå ñâîéñòâà
Height. Óñòàíîâèòå çíà÷åíèå Vertical ñâîéñòâà
Scrollbars. Óñòàíîâèòå çíà÷åíèå True ñâîéñòâà
ReadOnly, ÷òîáû ïîëüçîâàòåëü íå ìîã ââîäèòü òåêñò
â ýòî òåêñòîâîå ïîëå.

Ïåðåêëþ÷àòåëè. Ïåðåêëþ÷àòåëè (RadioButton)


ïîçâîëÿþò ïîëüçîâàòåëþ âûáèðàòü îäèí âàðèàíò
èç íåñêîëüêèõ ïðåäëîæåííûõ. Ïîëüçîâàòåëü ìî-
æåò âêëþ÷èòü òîëüêî îäèí ïåðåêëþ÷àòåëü, ò. å.
îäèí âàðèàíò èç íåñêîëüêèõ. Â îêíå Îáëàñòü ýëå-
ìåíòîâ âûïîëíèòå äâîéíîé ùåë÷îê ïî ýëåìåíòó
RadioButton. Íà ôîðìó áóäåò äîáàâëåí ýëåìåíò
RadioButton1 — ýòî îäèí ïåðåêëþ÷àòåëü (îäèí
âàðèàíò).
Âûáåðèòå ýëåìåíò RadioButton1 íà ôîðìå, ùåëê-
íèòå ïî íåìó ïðàâîé êíîïêîé è âûáåðèòå êîìàíäó
Êîïèðîâàòü èç îòêðûâøåãîñÿ ìåíþ. Ùåëêíèòå â
ïóñòîì ìåñòå íà ôîðìå Form1, ùåëêíèòå ïðàâîé
êíîïêîé ìûøè è âûáåðèòå èç ìåíþ êîìàíäó Âñòà-
âèòü. Íà ôîðìå ïîÿâèòñÿ åùå îäèí ïåðåêëþ÷àòåëü
RadioButton2. Ïîâòîðíî âûçûâàÿ êîìàíäó Âñòà-
âèòü, ñîçäàéòå ïåðåêëþ÷àòåëè RadioButton3 è
RadioButton4.
54 Ãëàâà 4

Âûáåðèòå RadioButton1 è îòêðîéòå îêíî Ñâîéñò-


âà. Ïðîêðóòèòå ñïèñîê ñâîéñòâ è íàéäèòå â íåì ñâîé-
ñòâî Text. Èçìåíèòå åãî çíà÷åíèå ñ RadioButton1
 ÿçûêàõ J# è C# ôîðìû íà Ëåâîå,ïåðåäíåå. Èçìåíèòå çíà÷åíèÿ ñâîéñòâà
ñîçäàþòñÿ òî÷íî òàê æå, Text äðóãèõ ïåðåêëþ÷àòåëåé: ó RadioButton2 — íà
êàê è â Visual Basic .NET. Ëåâîå,çàäíåå, ó RadioButton3 — íà Ïðàâîå,ïå-
Ýòî íåñëîæíî áëàãîäàðÿ ðåäíåå, ó RadioButton4 — íà Ïðàâîå,çàäíåå.
Visual Studio .NET. Âñå, ÷òî
íóæíî — ýòî îòêðûòü îêíî Ôëàæêè. Ôëàæêè (CheckBox) òîæå ïîçâîëÿþò
Îáëàñòü ýëåìåíòîâ è ïå- ïîëüçîâàòåëþ äåëàòü âûáîð, íî â îòëè÷èå îò ïåðå-
ðåòàùèòü íóæíûå ýëåìåí-
êëþ÷àòåëåé èç ãðóïïû ôëàæêîâ ìîæíî âûáèðàòü
òû íà ôîðìó. Çàòåì íóæíî
îòêðûòü îêíî Ñâîéñòâà è ñðàçó íåñêîëüêî âàðèàíòîâ (â òîì ÷èñëå âñå).  îêíå
íàñòðîèòü ñâîéñòâà ýëå- Îáëàñòü ýëåìåíòîâ âûïîëíèòå äâîéíîé ùåë÷îê ïî
ìåíòîâ. ýëåìåíòó CheckBox. Íà ôîðìó áóäåò äîáàâëåí ýëå-
ìåíò CheckBox1. Îòêðîéòå îêíî Ñâîéñòâà è èçìå-
íèòå çíà÷åíèå ñâîéñòâà Text íà Ýêñòðåííî.

Âûïàäàþùèé ñïèñîê. Âûïàäàþùèé ñïèñîê


(ÑomboBox) ïðåäîñòàâëÿåò ïîëüçîâàòåëþ íàáîð ïóíê-
òîâ äëÿ âûáîðà. Êîãäà ïîëüçîâàòåëü âûáèðàåò îäèí
èç ïóíêòîâ ñïèñêà, âûáðàííûé ïóíêò îòîáðàæàåòñÿ
â âåðõíåé ñòðîêå. Â îêíå Îáëàñòü ýëåìåíòîâ âûïîë-
íèòå äâîéíîé ùåë÷îê ïî ýëåìåíòó ÑomboBox. Íà
ôîðìó áóäåò äîáàâëåí ýëåìåíò ÑomboBox1.
Îòêðîéòå îêíî Ñâîéñòâà è èçìåíèòå çíà÷åíèå
ñâîéñòâà Text íà Âûáåðèòå ðàçìåð øèíû. Íàéäèòå
â ñïèñêå ñâîéñòâ ñâîéñòâî Items. Ùåëêíèòå ïî çíà-
÷åíèþ (Êîëëåêöèÿ). Ðÿäîì ñ íèì ïîÿâèòñÿ êíîïêà ñ
ìíîãîòî÷èåì. Ùåëêíèòå ïî ýòîé êíîïêå, îòêðîåòñÿ
îêíî, â êîòîðîì ìîæíî ââåñòè ñïèñîê ïóíêòîâ, êîòî-
ðûå áóäóò îòîáðàæàòüñÿ â âûïàäàþùåì ñïèñêå.
Êàæäûé ïóíêò ñïèñêà äîëæåí íà÷èíàòüñÿ ñ íîâîé
ñòðîêè. Ââîäÿ êàæäûé ïóíêò, íàæèìàéòå êëà-
âèøó {Enter}, ÷òîáû ñîçäàòü íîâóþ ñòðîêó. Ââåäèòå
â îêíå ÷èñëî 12, íàæìèòå {Enter}, ââåäèòå 13, íà-
æìèòå {Enter}, ââåäèòå 14, íàæìèòå {Enter} è ââåäè-
òå 15. Íàæìèòå êíîïêó OK, ÷òîáû çàêðûòü îêíî.

Êíîïêè. Äîáàâüòå íà ôîðìó êíîïêó Button.


Óñòàíîâèòå äëÿ åå ñâîéñòâà Text çíà÷åíèå Çàìåíèòü
øèíó. Èçìåíèòå öâåò ôîíà (ñâîéñòâî BackColor) íà
Ôîðìû è ýëåìåíòû óïðàâëåíèÿ 55

êðàñíûé. Íàéäèòå â ñïèñêå ñâîéñòâ ñâîéñòâî Font.


Ùåëêíèòå ïî ýòîìó ñâîéñòâó, ÷òîáû ïîÿâèëàñü êíîï-
êà ñ ìíîãîòî÷èåì. Ùåëêíèòå ïî ýòîé êíîïêå, ÷òîáû
Ó ôîðìû è ìíîãèõ ýëåìåí- îòêðûòü îêíî âûáîðà øðèôòà. Â ýòîì îêíå èçìåíèòå
òîâ óïðàâëåíèÿ åñòü îäèíà- íà÷åðòàíèå øðèôòà íà ïîëóæèðíîå: ñâîéñòâó Bold
êîâûå ïî ñìûñëó ñâîéñòâà. ïðèñâîéòå çíà÷åíèå True. Íàæìèòå êíîïêó OK,
Âîò íåêîòîðûå ðàñïðî- ÷òîáû çàêðûòü îêíî âûáîðà øðèôòà.
ñòðàíåííûå ñâîéñòâà: Ïîñòðîéòå ðåøåíèå è çàïóñòèòå ïðîåêò. Ïîïðî-
q BackColor — öâåò áóéòå ùåëêàòü ïî ðàçíûì ýëåìåíòàì óïðàâëåíèÿ â
ôîíà; îêíå çàïóñòèâøåãîñÿ ïðèëîæåíèÿ. ×òî ïðîèçîéäåò,
q Enabled — äîñòóï ê
åñëè ùåëêíóòü ïî âûïàäàþùåìó ñïèñêó? ×òî áóäåò,
ýëåìåíòó; åñëè âûáðàòü îäíó èç ïîçèöèé ïåðåêëþ÷àòåëÿ, êà-
êóþ-òî äðóãóþ ïîçèöèþ, óñòàíîâèòü èëè ñáðîñèòü
q ForeColor — öâåò;
ôëàæîê? Ïîïðîáóéòå ââåñòè òåêñò â òåêñòîâîå ïîëå
q Location — ìåñòî, â
ñïðàâà îò íàäïèñè Ââåäèòå ìàðêó àâòîìîáèëÿ. Îá-
êîòîðîì ýëåìåíò
íàõîäèòñÿ;
ðàòèòå âíèìàíèå íà òî, ÷òî âòîðîå òåêñòîâîå ïîëå ñå-
ðîå è âû íå ìîæåòå ââåñòè â íåãî òåêñò. Íàæìèòå
q Name — èìÿ;
êíîïêó ñî çíà÷êîì â âåðõíåì ïðàâîì óãëó îêíà,
q Size (Height, Width) — ÷òîáû çàêðûòü âàøå ïðèëîæåíèå.
ðàçìåð (âûñîòà, Ïîýêñïåðèìåíòèðóéòå ñ ðàçíûìè ñâîéñòâàìè ýëå-
øèðèíà);
ìåíòîâ óïðàâëåíèÿ, êîòîðûå âû ïîìåñòèëè íà ôîð-
q Text — òåêñò èëè ìó. Ìîæåòå ïåðåìåùàòü ýëåìåíòû ïî ôîðìå, ÷òîáû
íàäïèñü; îíà âûãëÿäåëà àêêóðàòíåå è áûëà óäîáíåå â èñïîëü-
q Visible — âèäèì çîâàíèè. Ìîæåòå äîáàâèòü íàäïèñè, ïîÿñíÿþùèå
ýëåìåíò èëè íåâèäèì. ïîëüçîâàòåëþ íàçíà÷åíèå êàæäîãî ýëåìåíòà óïðàâëå-
íèÿ è äàþùèå óêàçàíèÿ, êàêóþ èíôîðìàöèþ íóæíî
ââîäèòü. Êàê, ïî âàøåìó ìíåíèþ, äîëæíû ðàñïîëà-
ãàòüñÿ ýëåìåíòû íà ôîðìå? Êàêîé ýëåìåíò äîëæåí
áûòü ïåðâûì? Êàêîé äîëæåí áûòü ïîñëåäíèì?
Âû òîëüêî ÷òî ñîçäàëè ôîðìó äëÿ ïðîåêòà «Çàìå-
íà øèíû». Ñîçäàâàÿ åå, âû ïîçíàêîìèëèñü ñ íåñêîëü-
êèìè âèäàìè ýëåìåíòîâ óïðàâëåíèÿ è íåêîòîðûìè
èõ ñâîéñòâàìè. ×òîáû ôîðìà çàðàáîòàëà, íóæíî äî-
áàâèòü ê íåé êîä íà Visual Basic .NET.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


4.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
Microsoft-CD íà ôîðìó äëÿ ïðîåêòà «Çàìåíà øèíû» ïîìåñ-
òèòå ýëåìåíòû óïðàâëåíèÿ, îïèñàííûå â ïà-
ðàãðàôå.
56 Ãëàâà 4

4.4. Ãåíåðàöèÿ ñîáûòèé


Ñîáûòèÿ ãåíåðèðóþòñÿ â ðåçóëüòàòå äåéñòâèé ïîëü-
çîâàòåëÿ. Íàïðèìåð, ñîáûòèÿ ãåíåðèðóþòñÿ, êîãäà
ïîëüçîâàòåëü íàæèìàåò êíîïêó, âûáèðàåò ïóíêò â
âûïàäàþùåì ñïèñêå èëè èçìåíÿåò òåêñò â òåêñòîâîì
ïîëå. Ùåë÷êè èëè äâîéíûå ùåë÷êè ïî ýëåìåíòàì
óïðàâëåíèÿ, ïåðåìåùåíèå êóðñîðà íà ýòè ýëåìåíòû
óïðàâëåíèÿ èëè ñ íèõ òîæå ãåíåðèðóþò ñîáûòèÿ.
Êîãäà ïðîèñõîäÿò ýòè ñîáûòèÿ, èñïîëíÿåòñÿ êîä
Visual Basic .NET, ñâÿçàííûé ñ íèìè. Èìåííî êîä
Visual Basic .NET çàñòàâëÿåò ïðîãðàììó äåëàòü òî,
÷òî îíà äîëæíà äåëàòü.
Êîãäà âû ñîçäàâàëè ïðèëîæåíèå «Ïðèâåò, Ìèð»,
âû âûïîëíèëè äâîéíîé ùåë÷îê ïî êíîïêå è îò-
êðûëîñü îêíî ðåäàêòîðà êîäà, â êîòîðîì âû ââåëè
êîä â îáðàáîò÷èê ñîáûòèÿ Button1_Click. Ñîáû-
òèå Button1_Click — ýòî ñîáûòèå ïî óìîë÷àíèþ
äëÿ êíîïêè (íàæàòèå ýòîé êíîïêè). Ó êàæäîãî ýëå-
ìåíòà óïðàâëåíèÿ åñòü ñîáûòèå ïî óìîë÷àíèþ. Êîã-
äà âû ðàáîòàåòå â ðåäàêòîðå ôîðì, äâîéíîé ùåë÷îê
ïî ýëåìåíòó óïðàâëåíèÿ ñîçäàåò îáðàáîò÷èê ñîáû-
òèÿ ïî óìîë÷àíèþ äëÿ ýòîãî ýëåìåíòà (åñëè ýòîò îá-
ðàáîò÷èê íå ñîçäàâàëñÿ ðàíåå) è îòêðûâàåò ýòîò
îáðàáîò÷èê â ðåäàêòîðå êîäà.

Íàïðèìåð:
q Äëÿ êíîïêè ñîáûòèå ïî óìîë÷àíèþ — Click
(ùåë÷îê ïî êíîïêå).
q Äëÿ òåêñòîâîãî ïîëÿ ñîáûòèå ïî óìîë÷àíèþ —
TextChanged (èçìåíåíèå òåêñòà).
q Äëÿ ïîçèöèè ïåðåêëþ÷àòåëÿ ñîáûòèå ïî óìîë-
÷àíèþ — CheckedChanged (âêëþ÷åíèå/âû-
êëþ÷åíèå).
q Äëÿ ôëàæêà ñîáûòèå ïî óìîë÷àíèþ —
CheckedChanged (óñòàíîâêà/ñáðîñ ôëàæêà).
q Äëÿ âûïàäàþùåãî ñïèñêà ñîáûòèå ïî óìîë÷à-
íèþ — SelectedIndexChanged (âûáîð ïóíê-
òà ñïèñêà).
Ôîðìû è ýëåìåíòû óïðàâëåíèÿ 57

 ïðîåêòå «Çàìåíà øèíû» äîáàâèì êîä â îáðà-


áîò÷èêè ñîáûòèé ïî óìîë÷àíèþ äëÿ ýëåìåíòîâ íà
ôîðìå, êîòîðóþ ìû òîëüêî ÷òî ñîçäàëè. Ýòîò êîä áó-
äåò âûâîäèòü íà ýêðàí îêíî, â êîòîðîì áóäåò ñîîá-
ùàòüñÿ òèï ýëåìåíòà, ñãåíåðèðîâàâøåãî ñîîáùåíèå.
 ðåäàêòîðå ôîðì âûïîëíèòå äâîéíîé ùåë÷îê ïî
î÷åðåäè ïî êàæäîìó ýëåìåíòó óïðàâëåíèÿ íà ôîðìå.
Äëÿ êàæäîãî ýëåìåíòà áóäåò îòêðûâàòüñÿ ðåäàêòîð
êîäà, â êîòîðîì áóäåò ñîçäàí îáðàáîò÷èê ñîáûòèÿ ïî
óìîë÷àíèþ äëÿ ýòîãî ýëåìåíòà. Âñòàâüòå â êàæäûé
ñîçäàâàåìûé îáðàáîò÷èê ñëåäóþùóþ ñòðîêó êîäà:
MessageBox.Show(sender.GetType.Name)

Ïîñòðîéòå ðåøåíèå è çàïóñòèòå ïðîåêò. Ïîïðî-


áóéòå ùåëêàòü ïî ðàçíûì ýëåìåíòàì óïðàâëåíèÿ,
èçìåíÿòü òåêñò â òåêñòîâîì ïîëå è âûáèðàòü ðàçíûå
ïóíêòû èç âûïàäàþùåãî ñïèñêà. Êàæäûé ðàç, êîãäà
êàêîé-òî ýëåìåíò ñãåíåðèðóåò ñîáûòèå ïî óìîë÷à-
íèþ, áóäåò âûâåäåíî îêíî, ñîîáùàþùåå òèï ýëåìåí-
òà, ñãåíåðèðîâàâøåãî ñîáûòèå.
 ñëåäóþùèõ ãëàâàõ ïðîåêò «Çàìåíà øèíû» áó-
äåò äîðàáîòàí òàê, ÷òî â îáðàáîò÷èêàõ ñîáûòèé áó-
äåò ðàçìåùàòüñÿ êîä, âûïîëíÿþùèé âñå, ÷òî äîëæíî
äåëàòü ýòî ïðèëîæåíèå. Íàïðèìåð, ïðè íàæàòèè
êíîïêè Çàìåíèòü øèíó â òåêñòîâîì ïîëå áóäåò âû-
âîäèòüñÿ ñïèñîê ïîäõîäÿùèõ òèïîâ øèí.
Ó êàæäîãî ýëåìåíòà óïðàâëåíèÿ åñòü ìíîæåñòâî
ñîáûòèé, ïîìèìî ñîáûòèÿ ïî óìîë÷àíèþ. Ó áîëüøèí-
ñòâà ýëåìåíòîâ óïðàâëåíèÿ åñòü äåñÿòêè ñîáûòèé. Íà-
ïðèìåð, ó òåêñòîâîãî ïîëÿ åñòü òàêèå ñîáûòèÿ:
q TextChanged (èçìåíåíèå òåêñòà — ñîáûòèå
ïî óìîë÷àíèþ);
q Click (ùåë÷îê ïî òåêñòîâîìó ïîëþ);
q DoubleClick (äâîéíîé ùåë÷îê ïî òåêñòîâîìó
ïîëþ);
q MouseEnter (ïîïàäàíèå êóðñîðà ìûøè íà òåê-
ñòîâîå ïîëå);
q MouseLeave (óõîä êóðñîðà ìûøè ñ òåêñòîâîãî
ïîëÿ);
58 Ãëàâà 4

q è ìíîæåñòâî äðóãèõ.
×òîáû óâèäåòü âñå ñîáûòèÿ, êîòîðûå åñòü ó ýëå-
 C# è J# ó ýëåìåíòîâ ìåíòà, ùåëêíèòå ïî íåìó ïðàâîé êíîïêîé è âûáåðè-
óïðàâëåíèÿ åñòü òàêèå æå òå èç îòêðûâøåãîñÿ ìåíþ êîìàíäó Ïðîñìîòðåòü
ñîáûòèÿ, êàê è â Visual êîä. Îòêðîåòñÿ îêíî ðåäàêòîðà êîäà. Íàä ýòèì îê-
Basic .NET. Ýòî ïîòîìó, íîì åñòü äâà âûïàäàþùèõ ñïèñêà. Â ïðàâîì ñïèñêå
÷òî ýòè ýëåìåíòû óïðàâ-
ëåíèÿ ïðèíàäëåæàò ê ïëàò-
ïåðå÷èñëåíû âñå ñîáûòèÿ ýëåìåíòà óïðàâëåíèÿ. Äëÿ
ôîðìå .NET; Visual Studio ñîáûòèé, âûäåëåííûõ æèðíûì øðèôòîì, óæå ñîçäà-
ïðîñòî óïðîùàåò ðàáîòó ñ íû îáðàáîò÷èêè ñîáûòèé.
íèìè.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


4.3. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
â ïðîåêòå «Çàìåíà øèíû» ñîçäàòü äëÿ ýëå-
Microsoft-CD ìåíòîâ óïðàâëåíèÿ îáðàáîò÷èêè ñîáûòèé,
îïèñàííûå â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñî-
äåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Çàìåíà_øèíû.exe.
4.4. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Öåíà ïèööû», ïîçâîëÿþùèé
êëèåíòàì îïðåäåëÿòü ñòîèìîñòü èõ çàêàçîâ.
Çàãîòîâêà ïðîåêòà, ñîäåðæàùàÿ ïðîãðàì-
ìíûé êîä ïðîåêòà, õðàíèòñÿ â àðõèâå
Öåíà_ïèööû.exe. Ñîçäàòü ôîðìó, èçìåíèòü
íàäïèñü â çàãîëîâêå ôîðìû è ïîìåñòèòü íà
íåå ñëåäóþùèå ýëåìåíòû óïðàâëåíèÿ:
q 3 ïåðåêëþ÷àòåëÿ;
q 2 íàäïèñè;
q 8 ôëàæêîâ:
Ôîðìû è ýëåìåíòû óïðàâëåíèÿ 59

4.5. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET


ñîçäàòü ïðîåêò «Êðåñòèêè-íîëèêè», ïîçâîëÿ-
þùèé ðåàëèçîâàòü íà êîìïüþòåðå øèðîêî èç-
âåñòíóþ èãðó «Êðåñòèêè-íîëèêè». Çàãîòîâêà
ïðîåêòà, ñîäåðæàùàÿ ïðîãðàììíûé êîä ïðîåê-
òà, õðàíèòñÿ â àðõèâå Êðåñòèêè-íîëèêè.exe.
Ñîçäàéòå ôîðìó, èçìåíèòå íàäïèñü â çàãîëîâêå
ôîðìû è ïîìåñòèòå íà íåå ýëåìåíòû óïðàâëå-
íèÿ òàê, êàê îïèñàíî íèæå:
1. Ùåëêíèòå â ïóñòîì ìåñòå íà ôîðìå, ÷òîáû
âûáðàòü åå. Èçìåíèòå çíà÷åíèå åå ñâîéñòâà
Text íà Tic Tac Toe.
2. Ñîçäàéòå 9 ýëåìåíòîâ Label c èìåíàìè îò
Label1 äî Label9. Ðàñïîëîæèòå èõ òàê,
÷òîáû ýëåìåíò Label1 áûë â âåðõíåì ëåâîì
óãëó, à Label9 — â íèæíåì ïðàâîì. Ìîæ-
íî ñýêîíîìèòü âðåìÿ, ñîçäàâ îäèí ýëåìåíò
Label è íàñòðîèâ åãî ñâîéñòâà, à çàòåì ñêî-
ïèðîâàâ åãî â áóôåð è âñòàâèâ èç íåãî, ÷òîáû
ïîëó÷èòü âîñåìü êîïèé. Ïðèñâîéòå ñâîéñò-
âàì ýëåìåíòà ñëåäóþùèå çíà÷åíèÿ:

Height 48

Width 48
Font Microsoft Sans Serif, Bold, 36
BackColor Ìîæíî íå èçìåíÿòü
Text Ìîæíî íå èçìåíÿòü

3. Ñîçäàéòå íàäïèñü Label10 ïîä ïðåäûäóùè-


ìè äåâÿòüþ:

Height 25
Width 175
Font Microsoft Sans Serif, Bold, 16
BackColor Ìîæíî íå èçìåíÿòü
Text Ìîæíî íå èçìåíÿòü
60 Ãëàâà 4

4. Ñîçäàéòå 3 íàäïèñè ñ èìåíàìè îò Label11


äî Label13. Èçìåíèòå çíà÷åíèÿ èõ ñâîéñòâà
Text íà X Wins, O Wins è Ties, êàê ïîêàçà-
íî â ïðèìåðå.
5. Ñîçäàéòå 3 òåêñòîâûõ ïîëÿ ñ èìåíàìè îò
TextBox1 äî TextBox3. Ïîìåñòèòå èõ ðÿ-
äîì ñ ìåòêàìè, ñîçäàííûìè íà øàãå 4.
6. Ñîçäàéòå êíîïêó Button1. Èçìåíèòå çíà÷å-
íèå åå ñâîéñòâà Text íà Play Again.
7. Ñîçäàéòå êíîïêó Button2. Èçìåíèòå çíà÷å-
íèå åå ñâîéñòâà Text íà End.
Òåñò ïî òåìå «Ôîðìû è ýëåìåíòû óïðàâëåíèÿ»
1. Íà ôîðìó ìîãóò áûòü ïîìåùåíû

m Ïðîãðàììíûé êîä

m Ýëåìåíòû óïðàâëåíèÿ

m Äðóãàÿ ôîðìà

m Êîììåíòàðèè ê ïðîãðàììå

2. Çíà÷åíèÿ ñâîéñòâ ôîðìû è ýëåìåíòîâ óïðàâëåíèÿ ìîãóò áûòü çàäàíû ñ


ïîìîùüþ îêíà

m Îáëàñòü ýëåìåíòîâ

m Êîíñòðóêòîð

m Ñâîéñòâà

m Âûâîä

3. Êàêîé ýëåìåíò óïðàâëåíèÿ ìîæåò íå òîëüêî îòîáðàæàòü òåêñò, íî è


ïîëó÷àòü åãî îò ïîëüçîâàòåëÿ?

m Òåêñòîâîå ïîëå

m Íàäïèñü

m Êíîïêà

m Âûïàäàþùèé ñïèñîê

4. Êàêóþ ôóíêöèþ âûïîëíÿþò ñîáûòèÿ â Visual Basic .NET?

m Îñóùåñòâëÿþò çàïóñê ïðîåêòà íà âûïîëíåíèå

m Îñóùåñòâëÿþò êîìïèëÿöèþ ïðîåêòà

m Îñóùåñòâëÿþò ïîñòðîåíèå ðåøåíèÿ

m Âûçûâàþò âûïîëíåíèå ñâÿçàííîãî ñ íèìè ïðîãðàììíîãî êîäà


Ãëàâà 5

Ñâîéñòâà è ìåòîäû
5.1. Ñ ÷åãî íà÷èíàåòñÿ êîä
5.2. ×òåíèå çíà÷åíèé ñâîéñòâ â êîäå
5.3. Ïðèñâàèâàíèå çíà÷åíèé ñâîéñòâàì â êîäå
5.4. IntelliSense è òî÷å÷íàÿ íîòàöèÿ
5.5. Ìåòîäû

 1991 ãîäó áûë ñîçäàí ÿçûê îáúåêòíî-îðèåíòèðîâàííîãî


ïðîãðàììèðîâàíèÿ Visual Basic 1.0 äëÿ ïåðñîíàëüíûõ
êîìïüþòåðîâ. Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic 1.0 ïîëó÷èëà
ãðàôè÷åñêèé èíòåðôåéñ, êîòîðûé ïîçâîëèë âèçóàëüíî êîíñòðóèðîâàòü
èíòåðôåéñ ïðîåêòîâ. Óæå â ïåðâîé âåðñèè ñèñòåìà ïðîãðàììèðîâàíèÿ
èìåëà IDE (Integrated Development Environment — Èíòåãðèðîâàííàÿ ñðåäà
ðàçðàáîòêè), âêëþ÷àâøóþ îêíà Îáëàñòü ýëåìåíòîâ (Toolbox), Êîíñòðóê-
òîð ôîðì (Design), Ïðîãðàììíûé êîä (Code) è Ñâîéñòâà (Properties).
Ñâîéñòâà è ìåòîäû 63

5.1. Ñ ÷åãî íà÷èíàåòñÿ êîä


Ñîçäàâàòü ôîðìû è çàäàâàòü â îêíå Ñâîéñòâà (Pro-
Ñ ïîìîùüþ îêíà Ñâîéñòâà perties) çíà÷åíèÿ ñâîéñòâ èíòåðåñíî, íî ýòî òîëüêî
çàäàþòñÿ íà÷àëüíûå çíà- íà÷àëî! Îêíîì Ñâîéñòâà ïîëüçîâàòüñÿ íåñëîæíî, íî
÷åíèÿ ñâîéñòâ ôîðìû è åå îíî íå ñëèøêîì óíèâåðñàëüíîå. ×òî, åñëè ïîëüçîâà-
ýëåìåíòîâ. Âî âðåìÿ ðà- òåëü çàõî÷åò èçìåíèòü öâåò ôîíà ôîðìû, ðàáîòàÿ ñ
áîòû ïðîãðàììû çíà÷åíèÿ ïðîãðàììîé? ×òî, åñëè ïîëüçîâàòåëþ ïîíàäîáèòñÿ
ñâîéñòâ èçìåíÿþòñÿ ñ ïî- èçìåíèòü ðàçìåð èëè íà÷åðòàíèå øðèôòà? Êàê ïðî-
ìîùüþ êîäà.
ãðàììà ìîæåò óçíàòü î òîì, óñòàíîâëåí ëè ôëàæîê è
âûáðàíà ëè êàêàÿ-òî ïîçèöèÿ ïåðåêëþ÷àòåëÿ? Ïî-
ñêîëüêó ó ïîëüçîâàòåëåé íå áóäåò äîñòóïà ê îêíó
Ñâîéñòâà, êîãäà îíè çàïóñòÿò ïðîãðàììó, êàê æå
âñå ýòî ñäåëàòü?
Îòâåò ïðîñò: ñ ïîìîùüþ êîäà íà Visual Basic
.NET! Ìîæíî ñäåëàòü âñå, ïåðå÷èñëåííîå âûøå, è
ìíîãî ÷åãî åùå, ñ ïîìîùüþ êîäà. Ìîæíî íàïèñàòü
êîä, êîòîðûé áóäåò ñ÷èòûâàòü çíà÷åíèÿ ñâîéñòâ
ýëåìåíòîâ óïðàâëåíèÿ è çàïèñûâàòü â ýòè ñâîéñòâà
íîâûå çíà÷åíèÿ. Ýòî ïðîñòàÿ è ìîùíàÿ âîçìîæ-
íîñòü.
À ãäå æå íàõîäèòñÿ âåñü ýòîò êîä? Ýòîò êîä ïè-
×òîáû îòðåäàêòèðîâàòü øåòñÿ â ðåäàêòîðå êîäà.  áîëüøèíñòâå ñëó÷àåâ îí
îáðàáîò÷èê ñîáûòèÿ ïî
íàõîäèòñÿ â îáðàáîò÷èêàõ ñîáûòèé ýëåìåíòîâ óïðàâ-
óìîë÷àíèþ ó ýëåìåíòà
óïðàâëåíèÿ, âûáåðèòå ýòîò ëåíèÿ ôîðìû. Ïîìíèòå ñîáûòèå íàæàòèÿ êíîïêè?
ýëåìåíò íà ôîðìå è âû- Êîãäà ïîëüçîâàòåëü âûïîëíÿåò êàêîå-òî äåéñòâèå,
ïîëíèòå ïî íåìó äâîéíîé íàïðèìåð íàæèìàåò êíîïêó, êîä â îáðàáîò÷èêå ýòî-
ùåë÷îê. Îòêðîåòñÿ îêíî ãî ñîáûòèÿ âûïîëíÿåòñÿ è ìîæåò ñ÷èòûâàòü èëè çà-
ðåäàêòîðà êîäà, è îáðà- ïèñûâàòü çíà÷åíèÿ ñâîéñòâ ýëåìåíòîâ óïðàâëåíèÿ.
áîò÷èê áóäåò ãîòîâ äëÿ ðå- Äîáàâëÿÿ êîä â îáðàáîò÷èêè ñîáûòèé ýëåìåíòîâ
äàêòèðîâàíèÿ. Îáðàáîò-
óïðàâëåíèÿ, âû äåëàåòå ïåðâûé øàã ê ðàáîòàþùåé
÷èêè äðóãèõ ñîáûòèé ìîæ-
íî âûáðàòü èç âûïàäàþ- ïðîãðàììå. Ïîìíèòå ôîðìó ïðîåêòà «Çàìåíèòü
ùåãî ñïèñêà â âåðõíåì øèíó», êîòîðóþ ìû ñîçäàëè ðàíüøå? Ñ åå ïîìîùüþ
ïðàâîì óãëó îêíà ðåäàê- âû íå ìîãëè ñäåëàòü íè÷åãî, ïîêà íå äîáàâèëè ê íåé
òîðà êîäà. êîä.

5.2. ×òåíèå çíà÷åíèé ñâîéñòâ â êîäå


Äàâàéòå ðàññìîòðèì ïðèìåðû ÷òåíèÿ çíà÷åíèé
ñâîéñòâ â êîäå íà Visual Basic .NET. Âî-ïåðâûõ, êàê
64 Ãëàâà 5

ñ÷èòûâàòü çíà÷åíèÿ ñâîéñòâ, êîòîðûå çàäàþòñÿ â


îêíå Ñâîéñòâà (Properties), è, âî-âòîðûõ, êàê ñ÷è-
òûâàòü çíà÷åíèÿ ñâîéñòâ, êîòîðûå çàäàþò ïîëüçîâà-
òåëè âî âðåìÿ ðàáîòû ñ ïðîãðàììîé?
Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå
åãî «×òåíèå ñâîéñòâ». Îòêðîéòå îêíî Îáëàñòü ýëå-
ìåíòîâ (Toolbox) è ïîìåñòèòå íà ôîðìó êíîïêó. Îò-
êðîéòå îêíî Ñâîéñòâà è èçìåíèòå çíà÷åíèå ñâîéñòâà
Text êíîïêè Button1 íà ×èòàòü òåêñò.
Âûïîëíèòå äâîéíîé ùåë÷îê ïî êíîïêå, ÷òîáû
îòðåäàêòèðîâàòü êîä îáðàáîò÷èêà íàæàòèÿ êíîïêè.
Ââåäèòå â íåãî ñëåäóþùèé êîä:

MessageBox.Show(Button1.Text)

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ ×èòàòü òåêñò. Ïîÿâèòñÿ îêíî ñîîáùå-
íèÿ ñ òåêñòîì «×èòàòü òåêñò» — ýòî çíà÷åíèå ñâîé-
ñòâà Text ýëåìåíòà óïðàâëåíèÿ Button1. Êîä
ïðî÷èòàë çíà÷åíèå ñâîéñòâà Text ýëåìåíòà Button1
è âûâåë ýòî çíà÷åíèå íà ýêðàí â îêíå ñîîáùåíèÿ.
Âîò åùå îäèí ïðèìåð. Äîáàâüòå íà ôîðìó Form1
åùå îäíó êíîïêó. Ñ ïîìîùüþ îêíà Ñâîéñòâà èçìå-
íèòå çíà÷åíèå åå ñâîéñòâà Text íà Ðàçìåð ôîðìû.
Ñäåëàéòå äâîéíîé ùåë÷îê ïî êíîïêå Button2, ÷òî-
áû îòðåäàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Ââåäè-
òå â îáðàáîò÷èê ñëåäóþùóþ ñòðîêó êîäà:

MessageBox.Show(Form1.ActiveForm.Height & "," &_


Form1.ActiveForm.Width)

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ Ðàçìåð ôîðìû. Ïîÿâèòñÿ îêîøêî ñîîá-
ùåíèÿ ñ òåêñòîì «300,300» (èëè äðóãèì, åñëè âû èç-
ìåíèëè ðàçìåð ôîðìû). Âàø êîä òîëüêî ÷òî îòîáðàçèë
âûñîòó è øèðèíó ôîðìû Form1, ðàçäåëèâ èõ çàïÿòîé!
Çíà÷åíèÿ êàêèõ åùå ñâîéñòâ ìîæåò ÷èòàòü êîä
íà Visual Basic .NET? Íà ñàìîì äåëå êîä íà Visual
Basic .NET ìîæåò ðàáîòàòü ñî âñåìè ñâîéñòâàìè ýëå-
ìåíòà óïðàâëåíèÿ, ïåðå÷èñëåííûìè â îêíå Ñâîéñò-
Ñâîéñòâà è ìåòîäû 65

âà. Êîä ìîæåò ÷èòàòü çíà÷åíèÿ ñâîéñòâ âðîäå Height


è Width, BackColor, ForeColor è êîîðäèíàò X è Y.
Îäíàêî çíà÷åíèÿ ìíîãèõ ñâîéñòâ â îêíå Ñâîéñòâà
çàäàþòñÿ ïðè ñîçäàíèè ïðîãðàììû è íå èçìåíÿþòñÿ
ïðè åå âûïîëíåíèè. Ïîýòîìó ÷èòàòü ýòè çíà÷åíèÿ â
êîäå íå ñëèøêîì ïîëåçíî.
Ãîðàçäî ïîëåçíåå âîçìîæíîñòü ñ÷èòûâàòü çíà÷å-
íèÿ ñâîéñòâ ýëåìåíòîâ, êîòîðûå ìîãóò èçìåíÿòüñÿ
âî âðåìÿ ðàáîòû ïðîãðàììû, íàïðèìåð ñ÷èòûâàòü
òåêñò èç òåêñòîâîãî ïîëÿ èëè çíà÷åíèå ñâîéñòâà
Checked ó ôëàæêà. Êàêîé òèï ó àâòîìîáèëÿ? Êàêàÿ
øèíà ïðîêîëîòà? Êàêîâ ðàçìåð øèíû?
Âîò áîëåå áëèçêèé ê ïðàêòèêå ïðèìåð. Äàâàéòå
íàïèøåì êîä, êîòîðûé áóäåò ñîîáùàòü íàì, óñòàíîâ-
ëåí ôëàæîê èëè íåò. Îòêðîéòå îêíî Îáëàñòü ýëå-
ìåíòîâ è äîáàâüòå íà ôîðìó ôëàæîê CheckBox1.
Äîáàâüòå íà Form1 åùå îäíó êíîïêó. Îòêðîéòå îêíî
Ñâîéñòâà è èçìåíèòå çíà÷åíèå ñâîéñòâà Text êíîï-
êè Button3 íà Ïðîâåðü ìåíÿ. Âûïîëíèòå äâîéíîé
ùåë÷îê ïî êíîïêå Button3, ÷òîáû îòðåäàêòèðîâàòü
îáðàáîò÷èê åå íàæàòèÿ. Ââåäèòå â îáðàáîò÷èê ñëåäó-
þùóþ ñòðîêó êîäà:

MessageBox.Show(CheckBox1.Checked)

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ Ïðîâåðü ìåíÿ. Êàêîå ñîîáùåíèå áóäåò
âûâåäåíî? Óñòàíîâèòå ôëàæîê è åùå ðàç íàæìèòå
êíîïêó ñ íàäïèñüþ Ïðîâåðü ìåíÿ. ×òî òåïåðü áóäåò
â îêíå ñîîáùåíèÿ? Ïðè êàæäîì íàæàòèè êíîïêè
âûâîäèòñÿ îêíî ñîîáùåíèÿ, â êîòîðîì ñîîáùàåòñÿ,
óñòàíîâëåí ëè ôëàæîê (ò. å. âûâîäèòñÿ çíà÷åíèå
ñâîéñòâà Checked ôëàæêà). Åñëè ôëàæîê óñòàíîâ-
ëåí, áóäåò âûâåäåíî True.
È ïîñëåäíèé ïðèìåð. Ïîñìîòðèì, êàê íàäî ñ÷è-
òûâàòü è âûâîäèòü íà ýêðàí òåêñò, êîòîðûé ïîëüçî-
âàòåëü íàáðàë â òåêñòîâîì ïîëå.
Äîáàâüòå íà ôîðìó Form1 òåêñòîâîå ïîëå. Îò-
êðîéòå îêíî Ñâîéñòâà è óäîñòîâåðüòåñü, ÷òî óñòàíîâ-
ëåíî çíà÷åíèå False ñâîéñòâà ReadOnly. Çàäàéòå
66 Ãëàâà 5

äëÿ ñâîéñòâà Text çíà÷åíèå Ïå÷àòàòü çäåñü. Äîáàâü-


òå íà ôîðìó Form1 åùå îäíó êíîïêó. Èçìåíèòå çíà-
÷åíèå ñâîéñòâà Text êíîïêè Button4 íà ×èòàòü
 J# è C# çíà÷åíèÿ òåêñò. Âûïîëíèòå äâîéíîé ùåë÷îê ïî ýòîé êíîïêå,
ñâîéñòâ ýëåìåíòîâ óïðàâ- ÷òîáû îòðåäàêòèðîâàòü êîä â îáðàáîò÷èêå åå íàæà-
ëåíèÿ ñ÷èòûâàþòñÿ òàê æå, òèÿ. Ââåäèòå ñëåäóþùóþ ñòðîêó êîäà:
êàê è â Visual Basic .NET.
Âîò ïðèìåð êîäà íà J# MessageBox.Show(TextBox1.Text)
èëè C#, âûâîäÿùåãî çíà-
÷åíèå ñâîéñòâà Text òåê-
ñòîâîãî ïîëÿ: Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Âûïîëíèòå äâîé-
íîé ùåë÷îê â òåêñòîâîì ïîëå è íàæìèòå êëàâèøó
{ {Backspace}, ÷òîáû ñòåðåòü òåêñò. Ââåäèòå êàêîé-
MessageBox.Show
(textBox1.Text);
íèáóäü íîâûé òåêñò. Íàæìèòå êíîïêó ñ íàäïèñüþ
} ×èòàòü òåêñò. ×òî áóäåò âûâåäåíî â îêíå ñîîáùå-
íèÿ? Èçìåíèòå òåêñò â òåêñòîâîì ïîëå è åùå ðàç íà-
Çà èñêëþ÷åíèåì òî÷êè ñ
çàïÿòîé â êîíöå ñòðîêè è
æìèòå êíîïêó ñ íàäïèñüþ ×èòàòü òåêñò. ×òî
ôèãóðíûõ ñêîáîê, êîä ïðîèçîéäåò?
âûãëÿäèò òàê æå, êàê è â Ýòè ïðèìåðû ïîêàçàëè, êàê ñ ïîìîùüþ êîäà íà
Visual Basic .NET. Êðîìå Visual Basic .NET ñ÷èòûâàòü çíà÷åíèÿ ñâîéñòâ ýëå-
òîãî, â J# è C# îáîçíà÷å- ìåíòîâ óïðàâëåíèÿ è ôîðìû. Íî ýòî òîëüêî ïîëîâè-
íèå textBox1 íà÷èíàåòñÿ íà âîçìîæíîñòåé, ïîòîìó ÷òî â êîäå íà Visual Basic
ñî ñòðî÷íîé áóêâû t. .NET ìîæíî è çàäàâàòü íîâûå çíà÷åíèÿ ñâîéñòâ.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


5.1. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «×òåíèå ñâîéñòâ», îïèñàííûé â
Microsoft-CD ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìî-
ðàñïàêîâûâàþùåìñÿ àðõèâå ×òåíèå_ñâîéñòâ.
exe.

5.3. Ïðèñâàèâàíèå çíà÷åíèé


ñâîéñòâàì â êîäå
Êîíå÷íî, çäîðîâî, ÷òî ìû ìîæåì ñ÷èòûâàòü çíà÷å-
íèÿ ñâîéñòâ ñ ïîìîùüþ êîäà íà Visual Basic .NET.
Íàø êîä ìîæåò ïîëó÷àòü èíôîðìàöèþ î äåéñòâèÿõ
ïîëüçîâàòåëÿ. Ïðîãðàììà ìîæåò âûïîëíÿòü ôðàã-
ìåíòû êîäà â îòâåò íà äåéñòâèÿ ïîëüçîâàòåëÿ. À âåð-
íî ëè îáðàòíîå? ×òî, åñëè íàì íóæíî çàäàòü íîâûå
Ñâîéñòâà è ìåòîäû 67

çíà÷åíèÿ íåñêîëüêèõ ñâîéñòâ ýëåìåíòîâ óïðàâëåíèÿ


âî âðåìÿ ðàáîòû ïðîãðàììû? Íàïðèìåð, ÷òî åñëè
íàì õî÷åòñÿ, ÷òîáû ôëàæîê «Ýêñòðåííî» âñåãäà áûë
óñòàíîâëåí ïðè çàïóñêå ïðîãðàììû? Ìû õîòèì, ÷òî-
áû ïðîãðàììà îòîáðàæàëà âñå äîñòóïíûå ðàçìåðû
øèí â òåêñòîâîì ïîëå, åñëè ïîëüçîâàòåëü íàæìåò
êíîïêó ñ íàäïèñüþ Ñìåíèòü øèíó. Ìû õîòèì, ÷òî-
áû ñïèñîê äîñòóïíûõ ðàçìåðîâ øèí àâòîìàòè÷åñêè
çàãðóæàëñÿ â âûïàäàþùèé ñïèñîê, êîãäà ïîëüçîâà-
òåëü ââîäèò íîìåð àâòîìîáèëÿ.
Êîíå÷íî, âñå ýòî ìîæíî ñäåëàòü ñ ïîìîùüþ êîäà
íà Visual Basic .NET! Ïðèñâàèâàòü çíà÷åíèÿ ñâîéñò-
âàì ýëåìåíòîâ óïðàâëåíèÿ òàê æå ïðîñòî, êàê è ñ÷è-
òûâàòü óæå çàäàííûå çíà÷åíèÿ. ×òîáû ïðèñâîèòü
çíà÷åíèå ñâîéñòâó, â êîäå íà Visual Basic .NET
èñïîëüçóåòñÿ îïåðàòîð ïðèñâàèâàíèÿ. êîäå îïåðà-
òîð ïðèñâàèâàíèÿ âûãëÿäèò êàê ïðîñòîå ðàâåíñòâî:

TextBox1.Text = "Ïðèñâàèâàíèå"

Ïðàâàÿ ÷àñòü ðàâåíñòâà (ñïðàâà îò çíàêà «ðàâ-


íî») âû÷èñëÿåòñÿ ïåðâîé. Çàòåì âû÷èñëåííîå çíà÷å-
íèå ïðèñâàèâàåòñÿ ëåâîé ÷àñòè ðàâåíñòâà (ñëåâà îò
çíàêà «ðàâíî»).
Âîò íåñêîëüêî ïðèìåðîâ ïðèñâàèâàíèÿ çíà÷åíèé
ñâîéñòâàì ñ ïîìîùüþ êîäà íà Visual Basic .NET.
Ïåðâûé ïðèìåð çàïèñûâàåò òåêñò â òåêñòîâîå ïîëå.
Ýòî ïðåêðàñíûé ñïîñîá ñîîáùàòü ÷òî-íèáóäü ïîëüçîâà-
òåëþ — èì ìîæíî ïîëüçîâàòüñÿ âìåñòî îòîáðàæåíèÿ
îòäåëüíûõ îêîí ñîîáùåíèé. Ñîçäàéòå íîâîå ïðèëî-
æåíèå Windows è íàçîâèòå åãî «Óñòàíîâêà ñâîéñòâ».
Äîáàâüòå íà ôîðìó êíîïêó è äâà òåêñòîâûõ ïîëÿ.
 îêíå Ñâîéñòâà (Properties) çàäàéòå äëÿ ñâîéñòâà
Text êíîïêè Button1 çíà÷åíèå Óñòàíîâèòü òåêñò.
Î÷èñòèòå ñâîéñòâà Text òåêñòîâûõ ïîëåé TextBox1
è TextBox2, âûïîëíèâ ïî íèì äâîéíîé ùåë÷îê è íà-
æàâ êëàâèøó {Backspace}. Âûïîëíèòå äâîéíîé ùåë-
÷îê ïî êíîïêå Button1, ÷òîáû îòðåäàêòèðîâàòü
îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â îáðàáîò÷èê ñëå-
äóþùóþ ñòðîêó êîäà:
68 Ãëàâà 5

TextBox2.Text = TextBox1.Text

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Ââåäèòå êà-


Îáðàáîò÷èê ñîáûòèÿ êîé-íèáóäü òåêñò â TextBox1 è íàæìèòå êíîïêó ñ
Form_Load ÷àñòî èñïîëü- íàäïèñüþ Óñòàíîâèòü òåêñò. ×òî ïðîèçîéäåò? Êàê
çóåòñÿ äëÿ èíèöèàëèçàöèè âèäèòå, òåêñò èç òåêñòîâîãî ïîëÿ TextBox1 áûë
ïðîãðàììû. Èíèöèàëèçà- «ñêîïèðîâàí» â TextBox2. Êîä íà Visual Basic .NET
öèÿ óñòàíàâëèâàåò îïðå- ñ÷èòûâàåò çíà÷åíèå ñâîéñòâà Text òåêñòîâîãî ïîëÿ
äåëåííûå çíà÷åíèÿ, ïðåæ-
TextBox1 è ïðèñâàèâàåò ñ÷èòàííîå çíà÷åíèå ñâîéñò-
äå ÷åì ôîðìà îòîáðàæà-
åòñÿ íà ýêðàíå. Íàïðè- âó Text òåêñòîâîãî ïîëÿ TextBox2.
ìåð, ìîæíî äîáàâèòü â Äàâàéòå äîáàâèì êîä, êîòîðûé áóäåò àâòîìàòè÷å-
îáðàáîò÷èê êîä, óñòàíàâ- ñêè óñòàíàâëèâàòü îäèí ôëàæîê è ñáðàñûâàòü äðóãîé,
ëèâàþùèé ðàçìåð ôîðìû êîãäà ïîëüçîâàòåëü çàïóñêàåò ïðèëîæåíèå. Äîáàâüòå
è öâåò åå ôîíà èëè âû- íà ôîðìó Form1 ôëàæîê è çàäàéòå äëÿ åãî ñâîéñòâà
áèðàþùèé îïðåäåëåííóþ Text çíà÷åíèå Ýêñòðåííî. Äîáàâüòå íà ôîðìó åùå
ïîçèöèþ ïåðåêëþ÷àòåëÿ
îäèí ôëàæîê è çàäàéòå äëÿ åãî ñâîéñòâà Text çíà÷å-
ïåðåä îòîáðàæåíèåì ôîð-
ìû íà ýêðàíå. íèå Îáÿçàòåëüíî. Âûïîëíèòå äâîéíîé ùåë÷îê â ïó-
ñòîì ìåñòå íà ôîðìå (íå íà ýëåìåíòàõ óïðàâëåíèÿ).
Îòêðîåòñÿ îáðàáîò÷èê ñîáûòèÿ Form1_Load. Êîä
ýòîãî îáðàáîò÷èêà âûïîëíÿåòñÿ, êîãäà ôîðìà âûâî-
äèòñÿ íà ýêðàí ïðè çàïóñêå ïðîãðàììû. Äîáàâüòå â
ýòîò îáðàáîò÷èê ñëåäóþùèå äâå ñòðîêè:

CheckBox1.Checked = True
CheckBox2.Checked = False

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Êàêîé ôëàæîê


óñòàíîâëåí? Âàø êîä àâòîìàòè÷åñêè óñòàíîâèë çíà-
÷åíèå ñâîéñòâà Checked äâóõ ôëàæêîâ ïðè çàãðóçêå
 ÿçûêàõ J# è C# çíà÷å- ôîðìû.
íèÿ ñâîéñòâàì ïðèñâàè- Ìû çíàåì, ÷òî 14 — ýòî ñàìûé ðàñïðîñòðàíåí-
âàþòñÿ òî÷íî òàê æå, êàê è
íûé ðàçìåð øèíû. Äàâàéòå ñäåëàåì òàê, ÷òîáû êîä
â Visual Basic .NET. Êîä,
ïðèâåäåííûé íèæå, ïîêà- àâòîìàòè÷åñêè âûáèðàë 14 â âûïàäàþùåì ñïèñêå
çûâàåò, êàê ïðèñâàèâàòü ðàçìåðà øèíû. Ñíà÷àëà äîáàâüòå âûïàäàþùèé ñïè-
çíà÷åíèå ñâîéñòâó Checked ñîê ComboBox1 íà ôîðìó Form1. Ñ ïîìîùüþ îêíà
ôëàæêà â C# èëè J#. Ñâîéñòâà â ñïèñêå ComboBox1 óñòàíîâèòå äëÿ ñâîé-
ñòâà Items çíà÷åíèÿ 12, 13, 14, 15 è 16. Íå çàáû-
{
âàéòå íàæèìàòü {Enter}, ÷òîáû íà÷èíàòü ñ íîâîé
checkBox1.Checked =
True; ñòðîêè êàæäûé íîâûé ïóíêò ñïèñêà. Âûïîëíèòå
} äâîéíîé ùåë÷îê ïî ôîðìå (íå ïî âûïàäàþùåìó
Ñâîéñòâà è ìåòîäû 69

ñïèñêó), ÷òîáû îòðåäàêòèðîâàòü êîä â îáðàáîò÷èêå


Form1_Load. Äîáàâüòå â îáðàáîò÷èê ñëåäóþùóþ
ñòðîêó êîäà:

ComboBox1.SelectedItem = "14"

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Êàêîé ïóíêò îòî-


áðàæàåòñÿ â âûïàäàþùåì ñïèñêå? Êàê íåîáõîäèìî
èçìåíèòü êîä, ÷òîáû â âûïàäàþùåì ñïèñêå àâòîìà-
òè÷åñêè âûáèðàëñÿ ïóíêò 13?

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


5.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
Microsoft-CD ñîçäàòü ïðîåêò «Óñòàíîâêà ñâîéñòâ», îïèñàí-
íûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ
â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå Óñòàíîâêà_
ñâîéñòâ.exe.

5.4. IntelliSense è òî÷å÷íàÿ íîòàöèÿ


Òåïåðü âû çíàåòå, êàê ñ ïîìîùüþ Visual Basic .NET
÷èòàòü è çàïèñûâàòü çíà÷åíèÿ ñâîéñòâ ôîðì è ýëå-
ìåíòîâ óïðàâëåíèÿ. Åñëè ó êàæäîé ôîðìû è ýëåìåíòà
óïðàâëåíèÿ òàê ìíîãî ñâîéñòâ, êàê çà íèìè óñëåäèòü?
Íå ñëèøêîì óäîáíî ïîñòîÿííî ïåðåêëþ÷àòüñÿ ìåæ-
äó ðåäàêòîðîì êîäà è îêíîì Ñâîéñòâà, ÷òîáû âûÿñ-
íèòü, êàêèå ñâîéñòâà íàì íóæíû. Ìîæåò áûòü, åñòü
áîëåå óäîáíûé ñïîñîá?
Ìîæíî èñïîëüçîâàòü IntelliSense. Ýòî ÷àñòü Visual
Studio. IntelliSense ñîõðàíÿåò íàì ìíîãî âðåìåíè
ïðè ðåäàêòèðîâàíèè êîäà â îêíå ðåäàêòîðà. Intelli-
Sense çíàåò, ê êàêîìó ýëåìåíòó óïðàâëåíèÿ âû îáðà-
ùàåòåñü è êàêèå ó íåãî åñòü ñâîéñòâà. Îíî âûâîäèò
ñïèñîê ñâîéñòâ è ïîçâîëÿåò âàì âûáèðàòü èç íåãî
íóæíîå. Èñïîëüçóåìîå ÷àùå âñåãî ñâîéñòâî ïîäñâå÷è-
âàåòñÿ, êîãäà IntelliSense îòîáðàæàåò ñïèñîê. Íàïðè-
ìåð, äëÿ òåêñòîâîãî ïîëÿ èçíà÷àëüíî ïîäñâå÷èâàåòñÿ
ñâîéñòâî Text. Ñ ïîìîùüþ ñòðåëîê ââåðõ è âíèç íà
êëàâèàòóðå ìîæíî ïðîñìàòðèâàòü ñïèñîê è âûáè-
70 Ãëàâà 5

ðàòü òî ñâîéñòâî, êîòîðîå âàì òðåáóåòñÿ. Ïðè íàæà-


òèè êëàâèøè {Tab} âûáðàííîå ñâîéñòâî äîáàâëÿåòñÿ
â êîä. Èñïîëüçóÿ IntelliSense, âàì íå ïðèäåòñÿ çàïî-
ìèíàòü âñå ñâîéñòâà âñåõ ýëåìåíòîâ óïðàâëåíèÿ.
Êðîìå òîãî, äàííîå ñðåäñòâî çàìåòíî ñîêðàùàåò ïî-
òðåáíîñòü â íàáîðå äëèííûõ èìåí íà êëàâèàòóðå!
Ïîïðîáóéòå åãî èñïîëüçîâàòü! Ñîçäàéòå íîâîå
ïðèëîæåíèå Windows è íàçîâèòå åãî «IntelliSense».
Ïîìåñòèòå íà ôîðìó òåêñòîâîå ïîëå è êíîïêó.
Âûïîëíèòå äâîéíîé ùåë÷îê ïî êíîïêå, ÷òîáû îòðå-
äàêòèðîâàòü êîä â îáðàáîò÷èêå íàæàòèé íà íåå.

1. Ââåäèòå ñ êëàâèàòóðû TextBox1 è íàæìèòå


êëàâèøó «òî÷êà» {.}. Êàê òîëüêî âû ââåäåòå
òî÷êó, IntelliSense îòîáðàçèò ñïèñîê ñâîéñòâ
ýëåìåíòà TextBox1. Ïîñêîëüêó TextBox1 —
òåêñòîâîå ïîëå, ýòîò ñïèñîê áóäåò òàêèì æå,
êàê è äëÿ ëþáîãî äðóãîãî òåêñòîâîãî ïîëÿ íà
ôîðìå. Ïî óìîë÷àíèþ â ñïèñêå IntelliSense
ïîäñâå÷èâàåòñÿ ÷àùå âñåãî èñïîëüçóåìîå ñâîé-
ñòâî.  íàøåì ñëó÷àå ïî óìîë÷àíèþ ïîäñâå-
÷èâàåòñÿ ñâîéñòâî Text.

2. Òåïåðü ââåäèòå áóêâó «R». IntelliSense ïðî-


êðóòèò ñïèñîê äî ïåðâîãî ïî àëôàâèòó ñâîé-
ñòâà, íà÷èíàþùåãîñÿ ñ «R». Ïî ìåðå ââîäà
IntelliSense èùåò â ñïèñêå ñâîéñòâî, íàèáî-
ëåå ñîîòâåòñòâóþùåå ââåäåííûì áóêâàì.
Ñâîéñòâà è ìåòîäû 71

Êîãäà ñâîéñòâî ïîäñâå÷è-


âàåòñÿ â ñïèñêå IntelliSense,
ðÿäîì ïîÿâëÿåòñÿ ïîä-
ñêàçêà, êðàòêî åãî îïèñû-
âàþùàÿ. Ýòà ïîäñêàçêà,
íàïðèìåð, ìîæåò ñîîá-
ùèòü, åñëè ñâîéñòâî äî-
ñòóïíî òîëüêî äëÿ ÷òåíèÿ
(Read Only, ò. å. åìó íåëü-
çÿ ïðèñâàèâàòü çíà÷åíèå).
Êðîìå òîãî, ïîäñêàçêà ñî- 3. Ñ ïîìîùüþ ñòðåëêè âíèç ïðîêðóòèòå ñïèñîê
îáùàåò, êàêèå çíà÷åíèÿ è íàéäèòå ñíîâà ñâîéñòâî Text. Âûáåðèòå
ìîæíî ïðèñâàèâàòü ñâîé- ñâîéñòâî Text, ÷òîáû îíî áûëî ïîäñâå÷åíî.
ñòâó, íàïðèìåð, ñòðîêó
(òåêñò) èëè öåëîå ÷èñëî.

4. Íàæìèòå êëàâèøó {Tab}. Ïîñìîòðèòå, ÷òî


ïîëó÷èëîñü! Ïîñëå TextBox1. â êîä äîáàâëå-
íî ñëîâî Text.

5. Òåïåðü ââåäèòå ="Clifford". Êîä áóäåò âû-


ãëÿäåòü òàê:

TextBox1.Text = "Clifford"
72 Ãëàâà 5

Ïðàâäà, ïðîñòî è óäîáíî? IntelliSense, êðîìå


òîãî, ïîìîãàåò èçáåãàòü îøèáîê ïðè íàáîðå òåêñòà.
Ýòî î÷åíü âàæíî!
Ñîçäàâàÿ ïðîãðàììû íà Âû, íàâåðíîå, çàìåòèëè, ÷òî êàæäîìó ïóíêòó
ÿçûêàõ C# è J# ñ ïîìî- ñïèñêà IntelliSense ñîîòâåòñòâóåò ìàëåíüêèé çíà÷îê.
ùüþ Visual Studio, òîæå Ñâîéñòâà ïîìå÷åíû çíà÷êàìè â âèäå ðóêè, óêàçûâàþ-
ìîæíî èñïîëüçîâàòü Intelli- ùåé íà ëèñò áóìàãè. Ìåòîäû îáîçíà÷åíû ôèîëåòîâûì
Sense. Ýòî ñðåäñòâî ðà- «êèðïè÷èêîì». (Ìû ñêîðî ðàçáåðåìñÿ, ÷òî òàêîå ìå-
áîòàåò òî÷íî òàê æå, êàê è
òîäû). Â çàâèñèìîñòè îò òîãî, äëÿ êàêîãî ýëåìåíòà
â Visual Basic .NET. Ïðî-
ñòî ââåäèòå èìÿ ýëåìåí- óïðàâëåíèÿ ìû ïðîñìàòðèâàåì ñïèñîê, â íåì ìîãóò
òà, à çàòåì òî÷êó. áûòü è ïóíêòû ñ äðóãèìè çíà÷êàìè.
IntelliSense âûâåäåò ñïè-
ñîê äîñòóïíûõ ñâîéñòâ è
ìåòîäîâ. Ïîñêîëüêó ÿçûêè
J#, C# è Visual Basic .NET
îñíîâàíû íà ïëàòôîðìå
.NET, ñïèñîê ñâîéñòâ è ìå-
òîäîâ ýëåìåíòîâ áóäåò
îäèíàêîâûì äëÿ âñåõ òðåõ
ÿçûêîâ.

Âû îáðàòèëè âíèìàíèå íà òî, ÷òî íóæíî áûëî


ââåñòè òî÷êó, ïðåæäå ÷åì ïîÿâèëñÿ ñïèñîê Intelli-
Sense? Ýòî ïîòîìó, ÷òî â Visual Basic .NET èñïîëüçóåò-
ñÿ ñèíòàêñèñ ñ çàïèñüþ «÷åðåç òî÷êó» — Dot-çàïèñü
(òî÷å÷íàÿ íîòàöèÿ). Ââåäÿ èìÿ ýëåìåíòà óïðàâëåíèÿ,
íàïðèìåð TextBox1, ââåäèòå òî÷êó. Çàòåì ââåäèòå
èìÿ ñâîéñòâà. Òî÷êà ñîåäèíÿåò èìÿ ýëåìåíòà è èìÿ
ñâîéñòâà. Âîò îáùàÿ ôîðìà (ñèíòàêñèñ) îáðàùåíèÿ ê
ñâîéñòâó ýëåìåíòà:

Ýëåìåíò.Ñâîéñòâî
ÝëåìåíòÓïðàâëåíèÿ.Ñâîéñòâî

Âîò íåñêîëüêî ïðèìåðîâ òàêîé çàïèñè:

TextBox1.Text
CheckBox1.Checked
Form1.ActiveForm.Height
Ñâîéñòâà è ìåòîäû 73

Îáðàòèòå âíèìàíèå, ÷òî â ïîñëåäíåì ïðèìåðå


ActiveForm — ýòî ñâîéñòâî Form1, à Height —
ñâîéñòâî ActiveForm. Ïîýòîìó äëÿ èõ ñîåäèíåíèÿ
íóæíû äâå òî÷êè. IntelliSense çíàåò, êîãäà ó ñâîéñò-
âà åñòü ñîáñòâåííûå ñâîéñòâà. Åñëè âû íå óâåðåíû,
åñòü ëè ñâîè ñâîéñòâà ó íåêîòîðîãî ñâîéñòâà, ââåäèòå
åùå îäíó òî÷êó ïîñëå èìåíè ñâîéñòâà, è IntelliSense
âûâåäåò ñïèñîê. Åñëè IntelliSense íå âûâîäèò ñïèñ-
êà, çíà÷èò, ëèáî äîïîëíèòåëüíûõ ñâîéñòâ íåò è íóæ-
íî óäàëèòü ïîñëåäíþþ òî÷êó, ëèáî âû íåïðàâèëüíî
íàáðàëè èìÿ ýëåìåíòà èëè ñâîéñòâà.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


5.4. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
Microsoft-CD âûïîëíèòü ïðîåêò «IntelliSense», îïèñàííûé â
ïàðàãðàôå.

5.5. Ìåòîäû
Íàâåðíîå, âû çàìåòèëè, ÷òî ðÿäîì ñ íåêîòîðûìè
ïóíêòàìè â ñïèñêå IntelliSense ñòîÿò ôèîëåòîâûå
çíà÷êè â âèäå êèðïè÷èêà. Ýòî ìåòîäû. Ñâîéñòâà —
ýòî õàðàêòåðèñòèêè ýëåìåíòà, íàïðèìåð, ñâîéñòâà
ìàøèíû — öâåò, êîëè÷åñòâî ìåñò, âåñ è ìîùíîñòü
äâèãàòåëÿ. Ìåòîäû — ýòî äåéñòâèÿ, êîòîðûå ìîæåò
âûïîëíèòü ýëåìåíò. Íàïðèìåð, ìàøèíà ìîæåò ïî-
âåðíóòü íàëåâî, îñòàíîâèòüñÿ èëè çàãëóøèòü ìî-
òîð. Ìåòîäû íå ïåðå÷èñëåíû â îêíå Ñâîéñòâà. Èõ
íóæíî âûçûâàòü â êîäå.
Íàïðèìåð, ó áîëüøèíñòâà ýëåìåíòîâ óïðàâëå-
íèÿ åñòü ìåòîäû Hide (ñêðûòü) è Show (îòîáðàçèòü).
Åñëè âûçâàòü ìåòîä Hide ýëåìåíòà, ýòîò ýëåìåíò
ñòàíåò íåâèäèìûì, õîòÿ è îñòàíåòñÿ íà ôîðìå.
Åñëè âûçâàòü ìåòîä Show, ýëåìåíò ñòàíåò âèäèìûì.
Íåêîòîðûå ìåòîäû ïîçâîëÿþò âûïîëíÿòü äåéñòâèÿ,
êîòîðûå îáû÷íî âûïîëíÿåò ïîëüçîâàòåëü. Íàïðè-
ìåð, ó êíîïêè åñòü ìåòîä PerformClick. Åñëè âû-
çâàòü ýòîò ìåòîä, òî áóäåò ñûìèòèðîâàíî íàæàòèå
êíîïêè.
74 Ãëàâà 5

Íåêîòîðûå ìåòîäû òðåáóþò ñîîáùåíèÿ èì îïðå-


äåëåííîé èíôîðìàöèè ïðè âûçîâå. Ýòà èíôîðìàöèÿ
îïðåäåëÿåò, ÷òî ìåòîä áóäåò äåëàòü è êàêèå áóäóò ðå-
çóëüòàòû åãî âûçîâà. Èíôîðìàöèÿ, ïåðåäàâàåìàÿ
ìåòîäó, íàçûâàåòñÿ àðãóìåíòàìè ìåòîäà. Ó ìåòîäà
ìîæåò áûòü îäèí èëè íåñêîëüêî àðãóìåíòîâ. Íåêî-
òîðûå àðãóìåíòû ìîãóò áûòü íåîáÿçàòåëüíûìè.
Íàïðèìåð, ìåòîä Show îêíà ñîîáùåíèÿ ïðèíèìàåò
â êà÷åñòâå àðãóìåíòà ñòðîêó òåêñòà. Ýòîò àðãóìåíò
îïðåäåëÿåò, ÷òî áóäåò âûâåäåíî â îêíå ñîîáùåíèÿ. Âû
óæå èñïîëüçîâàëè ìåòîä Show îêíà ñîîáùåíèÿ, õîòÿ,
âåðîÿíî, íå îñîçíàâàëè, ÷òî âûçûâàëè ìåòîä ñ àðãó-
ìåíòîì.

MessageBox.Show("Ïðèâåò, Ìèð")

 ýòîé ñòðîêå êîäà "Ïðèâåò, Ìèð" — ýòî àðãó-


ìåíò ìåòîäà Show.
Èòàê, çàïîìíèì ñëåäóþùåå. Ìåòîäû âûïîëíÿþò
êàêèå-òî äåéñòâèÿ. Ìåòîäû âûçûâàþòñÿ èç êîäà, äî
íèõ íåëüçÿ äîáðàòüñÿ èç îêíà Ñâîéñòâà. Íåêîòîðûå
ìåòîäû òðåáóþò çàäàíèÿ îïðåäåëåííûõ àðãóìåíòîâ
ïðè âûçîâå. Ìíîãèå ìåòîäû âîçâðàùàþò çíà÷åíèÿ,
êîòîðûå ìîæíî èñïîëüçîâàòü â êîäå.

Âûçîâ ìåòîäîâ â êîäå. Ñèíòàêñèñ âûçîâà ìåòîäà


ïîõîæ íà ñèíòàêñèñ ÷òåíèÿ èëè çàïèñè çíà÷åíèÿ
ñâîéñòâà. Äëÿ ñîåäèíåíèÿ èìåíè ýëåìåíòà è ìåòîäà
èñïîëüçóåòñÿ òî÷êà. Íåêîòîðûì ìåòîäàì, íàïðèìåð
Button.Hide è Button.Show, àðãóìåíòû íå íóæíû.
Äðóãèì, íàïðèìåð MessageBox.Show, äëÿ ðàáîòû
íóæíû àðãóìåíòû. Ñèíòàêñèñ âûçîâà ìåòîäà ñëåäó-
þùèé:

Ýëåìåíò.Ìåòîä (Àðãóìåíò1, Àðãóìåíò2, ..., Àðãóìåíò N)

Ïîìíèòå, ïðè âûçîâå ìåòîäà Show îêíà ñîîáùå-


íèÿ MessageBox âû çàäàâàëè àðãóìåíò?

MessageBox.Show("Ïðèâåò, Ìèð")
Ñâîéñòâà è ìåòîäû 75

Ïîðàáîòàåì ñ ìåòîäàìè, ïîçâîëÿþùèìè ñêðû-


âàòü è äåëàòü âèäèìûìè ýëåìåíòû óïðàâëåíèÿ, ñòè-
ðàòü òåêñò â òåêñòîâûõ ïîëÿõ è çàäàâàòü ïîçèöèþ
Âåðîÿòíî, âû óæå äîãàäà- êóðñîðà. Äëÿ íà÷àëà ñîçäàéòå íîâîå ïðèëîæåíèå
ëèñü, ÷òî â ÿçûêàõ J# è Windows è íàçîâèòå åãî «Ìåòîäû». Äîáàâüòå íà ôîð-
C# ìåòîäû âûçûâàþòñÿ ìó äâå êíîïêè è òåêñòîâîå ïîëå. Èçìåíèòå çíà÷åíèå
òî÷íî òàê æå, êàê â Visual ñâîéñòâà Text êíîïêè Button1 íà Ïîêàçàòü. Èçìå-
Basic .NET. Âîò ïðèìåð íèòå çíà÷åíèå ñâîéñòâà Text êíîïêè Button2 íà
êîäà íà J#, óäàëÿþùåãî
Ñêðûòü.  îáðàáîò÷èê íàæàòèÿ êíîïêè Button1
òåêñò èç òåêñòîâîãî ïîëÿ
è ïîìåùàþùåãî êóðñîð â ââåäèòå ñëåäóþùèé êîä:
ýòî òåêñòîâîå ïîëå. Êîä
TextBox1.Show()
íà C# âûãëÿäèò òî÷íî òàê
æå.
 îáðàáîò÷èê íàæàòèÿ êíîïêè Button2 ââåäèòå
{ ñëåäóþùèé êîä:
textBox1.ResetText();
textBox1.Focus(); TextBox1.Hide()
}
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó
ñ íàäïèñüþ Ñêðûòü, à çàòåì — êíîïêó ñ íàäïèñüþ
Ïîêàçàòü. Êàæäûé ðàç, êîãäà âû íàæèìàåòå
êíîïêó, ïðîãðàììà âûïîëíÿåò ìåòîäû ýëåìåíòà
TextBox.
Äîáàâüòå íà ôîðìó åùå îäíó êíîïêó. Èçìåíèòå
çíà÷åíèå ñâîéñòâà Text êíîïêè Button3 íà Ñáðîñ.
 îáðàáîò÷èê íàæàòèÿ êíîïêè Button3 ââåäèòå ñëå-
äóþùèé êîä:

TextBox1.ResetText()
TextBox1.Focus()

Ìåòîä ResetText óäàëÿåò âåñü òåêñò èç òåêñòî-


âîãî ïîëÿ.
Ìåòîä Focus ïîìåùàåò êóðñîð â òåêñòîâîå ïîëå.
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Ââåäèòå â òåêñòî-
âîå ïîëå êàêîé-íèáóäü òåêñò è íàæìèòå êíîïêó ñ
íàäïèñüþ Ñáðîñ. Èç òåêñòîâîãî ïîëÿ èñ÷åçíåò âåñü
òåêñò, è îíî áóäåò ãîòîâî ê ââîäó íîâîãî òåêñòà.
Òåïåðü âû ìîæåòå ÷èòàòü è çàïèñûâàòü çíà÷åíèÿ
ñâîéñòâ è âûçûâàòü ìåòîäû â êîäå íà Visual Basic
.NET. Êàê âû âèäåëè, áîëüøàÿ ÷àñòü êîäà ðàçìåùà-
76 Ãëàâà 5

åòñÿ â îáðàáîò÷èêàõ ñîáûòèé ýëåìåíòîâ óïðàâëåíèÿ.


×òîáû îòêðûòü êîä îáðàáîò÷èêà ñîáûòèÿ ïî óìîë÷à-
íèþ, ïðîñòî âûïîëíèòå äâîéíîé ùåë÷îê ïî ýëå-
ìåíòó óïðàâëåíèÿ — îòêðîåòñÿ ðåäàêòîð êîäà ñ
ãîòîâûì ê ðåäàêòèðîâàíèþ îáðàáîò÷èêîì. ×òîáû
ïðî÷èòàòü èëè çàïèñàòü çíà÷åíèå ñâîéñòâà èëè âû-
çâàòü ìåòîä, ââåäèòå èìÿ ýëåìåíòà è òî÷êó. Intelli-
Sense ïîêàæåò ñïèñîê äîñòóïíûõ ñâîéñòâ è ìåòîäîâ
ýëåìåíòà. Âûáåðèòå íóæíîå âàì ñâîéñòâî èëè ìåòîä
è íàæìèòå êëàâèøó {Tab}, ÷òîáû ââåñòè åãî â êîä.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


5.5. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Ìåòîäû», îïèñàííûé â ïàðàã-
Microsoft-CD
ðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñ-
ïàêîâûâàþùåìñÿ àðõèâå Ìåòîäû.exe.
Òåñò ïî òåìå «Ñâîéñòâà è ìåòîäû»
1. Ñ ïîìîùüþ êîäà â ïðîãðàììàõ

m Ìîæíî òîëüêî ñ÷èòûâàòü çíà÷åíèÿ ñâîéñòâ

m Ìîæíî òîëüêî çàäàâàòü çíà÷åíèÿ ñâîéñòâ

m Ìîæíî âûïîëíÿòü è òî, è äðóãîå

m Íåëüçÿ äåëàòü íè òî, íè äðóãîå

2. Êàêàÿ ñòðîêà êîäà îïðåäåëèò è ñîîáùèò ïîëüçîâàòåëþ, âûáðàíà ëè


ïîçèöèÿ ïåðåêëþ÷àòåëÿ?

m MessageBox.Show(RadioButton1.Checked)

m MessageBox.Show(Radio.Property)

m MessageBox.Show(RadioButton1.Selected)

m MessageBox.Show(RadioButton1.Unchecked)

3. Âñå îïåðàòîðû ïðèñâàèâàíèÿ â Visual Basic âûïîëíÿþòñÿ â ïîðÿäêå

m Ñëåâà íàïðàâî

m Ñïðàâà íàëåâî

m Ïðîèçâîëüíîì — ýòî áåçðàçëè÷íî

m Êàæäûé îïåðàòîð ïî-ñâîåìó

4. Êàê óñòàíîâèòü ôëàæîê ñ ïîìîùüþ êîäà?

m CheckBox1.Checked = Yes

m CheckBox1.Unchecked = False

m CheckBox1.Checked = True

m CheckBox1.Selected = True
Ãëàâà 6

Ïðèñâàèâàíèå
è ïåðåìåííûå
6.1. Ïðèñâàèâàíèå
6.2. Ïåðåìåííûå
6.3. Îáúÿâëåíèå ïåðåìåííûõ
6.4. Ïåðåìåííûå â ïðîãðàììàõ

 1992 ãîäó
áûëà ñîçäàíà
äëÿ ïåðñîíàëüíûõ êîìïüþ-
òåðîâ îïåðàöèîííàÿ ñèñ-
òåìà ñ ãðàôè÷åñêèì
èíòåðôåéñîì Windows 3.1,
à â 1993 ãîäó âûïóùåíà
îïåðàöèîííàÿ ñèñòåìà
Windows for Workgroups
3.11 äëÿ ðàáîòû â ëîêàëü-
íîé ñåòè. Ãðàôè÷åñêèé
èíòåðôåéñ ýòèõ ñèñòåì
ïîçâîëÿåò ïîëüçîâàòåëþ
óïðàâëÿòü êîìïüþòåðîì ñ
ïîìîùüþ ùåë÷êîâ ìûøüþ
ïî ïèêòîãðàììàì è ïóíê-
òàì ìåíþ. Ïðè æåëàíèè
ïîëüçîâàòåëü ìîã ïåðåéòè
â ðåæèì êîìàíäíîé ñòðî-
êè MS-DOS.
Ïðèñâàèâàíèå è ïåðåìåííûå 79

6.1. Ïðèñâàèâàíèå
Òåïåðü âû çíàåòå, êàê ñ÷èòûâàòü è çàïèñûâàòü çíà-
÷åíèÿ ñâîéñòâ ñ ïîìîùüþ êîäà. Äëÿ ýòîãî ñëóæèò
îïåðàòîð ïðèñâàèâàíèÿ. Îïåðàòîð ïðèñâàèâàíèÿ çà-
ïèñûâàåò â îáúåêò çíà÷åíèå äðóãîãî îáúåêòà.  êîäå
îïåðàòîð ïðèñâàèâàíèÿ âûãëÿäèò êàê ïðîñòîå ðà-
âåíñòâî:

TextBox1.Text = "Ïðèñâàèâàíèå"

Íàïîìíèì, ÷òî îïåðàòîðû ïðèñâàèâàíèÿ âû÷èñ-


ëÿþòñÿ â ïîðÿäêå ñïðàâà íàëåâî. Ïåðâîé âû÷èñëÿåò-
ñÿ ÷àñòü ñïðàâà îò çíàêà «ðàâíî». Ïîòîì ëåâîé ÷àñòè
îïåðàòîðà (ñëåâà îò çíàêà «ðàâíî») ïðèñâàèâàåòñÿ
âû÷èñëåííîå çíà÷åíèå ÷àñòè ñïðàâà îò çíàêà «ðàâ-
íî». Â ïðèâåäåííîì âûøå îïåðàòîðå ïðèñâàèâàíèÿ
ïåðâûì âû÷èñëÿåòñÿ çíà÷åíèå Ïðèñâàèâàíèå. Çàòåì
ýòî çíà÷åíèå ïîìåùàåòñÿ â ñâîéñòâî TextBox1.Text.
Êðîìå òîãî, íóæíî ïîìíèòü, ÷òî çíà÷åíèå â ïðà-
âîé ÷àñòè îïåðàòîðà ïðèñâàèâàíèÿ äîëæíî èìåòü
òèï (òåêñò, ÷èñëî, öâåò è ò. ä.), ñîãëàñóþùèéñÿ ñ òè-
ïîì îáúåêòà èç ëåâîé ÷àñòè. Âû ïîéìåòå, ÷òî ýòî
çíà÷èò, ðàññìîòðåâ ñëåäóþùèé ïðèìåð êîäà:

TextBox1.Text = "Òåêñò"

Çäåñü ñëåâà îò çíàêà «ðàâíî» ðàçìåùåíî ñâîéñò-


âî Text ýëåìåíòà TextBox1, êîòîðîå ìîæåò áûòü
Ïîêà ÷òî ìû íàçûâàëè òåê-
òîëüêî òåêñòîì, ïîýòîìó ñïðàâà îò çíàêà «ðàâíî»
ñòîâûå ïåðåìåííûå «òåê-
ñòîì». Â ïëàòôîðìå .NET äîëæåí áûòü òîæå òåêñò. Åñëè ñïðàâà áóäåò íå
âñå òåêñòîâûå ïåðåìåííûå òåêñò, à ÷òî-òî äðóãîå, òî ïðè ïîïûòêå ïîñòðîèòü
íàçûâàþòñÿ ñòðîêàìè, ò. å. ïðîåêò ïðîèçîéäåò îøèáêà. Ïîñêîëüêó â íàøåì
èìåþò òèï String. Åñëè ñëó÷àå "Òåêñò" — ýòî òåêñò, ò. å. èìåííî òî, ÷òî
âû èñïîëüçóåòå êîä äëÿ çà- ìîæåò íàõîäèòüñÿ â ñâîéñòâå Text, îøèáêè íå ïðî-
ïèñè çíà÷åíèÿ â ñòðîêîâóþ èñõîäèò.
ïåðåìåííóþ, íå çàáûâàéòå
Ñëåäóþùèé êîä íå áóäåò êîìïèëèðîâàòüñÿ, ïî-
ïîìåùàòü òåêñò â êàâû÷-
êè, íàïðèìåð: ñêîëüêó ìû ïûòàåìñÿ ïîìåñòèòü â òåêñòîâîå ñâîéñò-
âî Text çíà÷åíèå öâåòà, ForeColor:
Button1.Text = _
"Ùåëêíóòü çäåñü" TextBox1.Text = TextBox1.ForeColor 'îøèáêà
80 Ãëàâà 6

Ñëåäóþùèé êîä ïðàâèëüíûé, ïîñêîëüêó ïðàâàÿ


÷àñòü ðàâåíñòâà — ýòî öåëîå ÷èñëî, à â ñâîéñòâî
Height ìîæíî çàïèñûâàòü òîëüêî öåëûå ÷èñëà:

TextBox1.Height = 200

Ñëåäóþùèé êîä íåïðàâèëüíûé, ïîñêîëüêó ïûòà-


åòñÿ çàïèñàòü â ñâîéñòâî Height äðîáíîå ÷èñëî:

TextBox1.Height = 200.5 'îøèáêà

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


6.1. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Ïðûæîê ëÿãóøêè», îñóùåñò-
âëÿþùèé ïðûæêè ñëîâà "Ëÿãóøêà" èç êðàéíå-
Microsoft-CD ãî ëåâîãî òåêñòîâîãî ïîëÿ â ïîñëåäîâàòåëüíîñòü
òåêñòîâûõ ïîëåé. Çàãîòîâêà ïðîåêòà, ñîäåðæà-
ùàÿ ãðàôè÷åñêèé èíòåðôåéñ ïðîåêòà, õðàíèò-
ñÿ â àðõèâå Ïðûæîê_ëÿãóøêè.exe. Ñîçäàòü
îáðàáîò÷èêè ñîáûòèé ùåë÷êîâ ïî êíîïêàì ñ
íàäïèñÿìè Ïðûæîê.

6.2. Ïåðåìåííûå
Ïåðåìåííûå èñïîëüçóþòñÿ â êîäå äëÿ õðàíåíèÿ èí-
ôîðìàöèè, êîòîðàÿ ìîæåò â äàëüíåéøåì ïîíàäîáèòü-
ñÿ ïðîãðàììå. Ïåðåìåííûå â êîäå ïîõîæè íà
ïåðåìåííûå â ìàòåìàòèêå. Îíè õðàíÿò êàêèå-òî çíà-
÷åíèÿ.  ëþáîé ìîìåíò âðåìåíè â ïåðåìåííóþ ìîæ-
íî çàïèñàòü íîâîå çíà÷åíèå.
Ïðèñâàèâàíèå è ïåðåìåííûå 81

 êîäå ïåðåìåííûå èñïîëüçóþòñÿ äëÿ çàïîìèíà-


íèÿ èíôîðìàöèè. Åñëè áû â êîäå íåëüçÿ áûëî èñïîëü-
çîâàòü ïåðåìåííûå, âàøåé ïðîãðàììå ïðèøëîñü áû
çàïðàøèâàòü ó âàñ èíôîðìàöèþ êàæäûé ðàç, êîãäà
îíà áûëà áû íóæíà. Ïðåäñòàâüòå, ÷òî âàøåé ïðî-
ãðàììå íóæíî áûëî áû òðè ðàçà èñïîëüçîâàòü âîçðàñò
ïîëüçîâàòåëÿ! Âû íàâåðíÿêà áàëè áû íåäîâîëüíû,
åñëè áû îíà ñïðîñèëà ó âàñ âîçðàñò òðè ðàçà:

Ââåäèòå âàø âîçðàñò.


Ââåäèòå âàø âîçðàñò.
Ââåäèòå âàø âîçðàñò.

Ïðîãðàììå, èñïîëüçóþùåé ïåðåìåííûå, äîñòàòî÷-


íî áóäåò çàäàòü âîïðîñ òîëüêî îäèí ðàç. Îòâåò áóäåò
ñîõðàíåí â ïåðåìåííîé, êîòîðàÿ è áóäåò èñïîëüçî-
âàòüñÿ â êîäå êàæäûé ðàç, êîãäà ýòà èíôîðìàöèÿ
ïîíàäîáèòñÿ ïðîãðàììå.
Êàê âû óæå âèäåëè, ïåðåìåííûå ïîçâîëÿþò ñýêî-
íîìèòü âðåìÿ. Îíè óìåíüøàþò êîëè÷åñòâî èíôîð-
ìàöèè, êîòîðóþ äîëæåí ââîäèòü ïîëüçîâàòåëü. Êðîìå
òîãî, îíè óìåíüøàþò êîëè÷åñòâî îøèáîê. Åñëè áû
âàì ïðèøëîñü ðàç çà ðàçîì ââîäèòü äëèííîå ÷èñëî,
âû áû ðàíî èëè ïîçäíî äîïóñòèëè îøèáêó.
Ïåðåìåííûå èñïîëüçóþòñÿ äëÿ õðàíåíèÿ íå òîëü-
êî ââåäåííîé ïîëüçîâàòåëåì èíôîðìàöèè, íî è ðå-
çóëüòàòîâ âû÷èñëåíèé â ïðîãðàììå. Ïåðåìåííûå
èñïîëüçóþòñÿ òàêæå äëÿ âûïîëíåíèÿ ñðàâíåíèé, ïî
ðåçóëüòàòàì êîòîðûõ îïðåäåëÿåòñÿ, ÷òî äàëüøå äîë-
æíà äåëàòü ïðîãðàììà, è äëÿ ïåðåñ÷åòà, íàïðèìåð,
êîëè÷åñòâà ïîâòîðåíèé êàêîãî-òî äåéñòâèÿ.
Çíàíèå òîãî, êàê ñîõðàíÿòü èíôîðìàöèþ â ïåðå-
ìåííûõ, ÿâëÿåòñÿ áàçîâûì â ïðîãðàììèðîâàíèè.
Ïåðåìåííûå èñïîëüçóþòñÿ âî âñåõ ÿçûêàõ ïðîãðàì-
ìèðîâàíèÿ. Îíè ñîâåðøåííî íåîáõîäèìû äëÿ âûïîë-
íåíèÿ âû÷èñëåíèé îïðåäåëåííûõ òèïîâ è íåêîòîðûõ
äåéñòâèé â ïðîãðàììå.
 ïëàòôîðìå .NET åñòü íåñêîëüêî îñíîâíûõ òè-
ïîâ ïåðåìåííûõ, êîòîðûå èíîãäà íàçûâàþò áàçîâû-
ìè. Âû óæå èñïîëüçîâàëè òèï String, çàïèñûâàÿ
82 Ãëàâà 6

çíà÷åíèÿ â ñâîéñòâî Text. Âû èñïîëüçîâàëè òèï


Integer (öåëûå ÷èñëà), çàïèñûâàÿ çíà÷åíèÿ â ñâîéñò-
âî Height ôîðì. Âû èñïîëüçîâàëè òèï Boolean
Ïîñêîëüêó C# è J# — ýòî (áóëåâû ëîãè÷åñêèå âåëè÷èíû, True èëè False),
òîæå ÿçûêè .NET, â íèõ èñ- íàïðèìåð, çàïèñûâàÿ çíà÷åíèÿ â ñâîéñòâî Visible.
ïîëüçóþòñÿ òå æå áàçîâûå ×àùå âñåãî èñïîëüçóþòñÿ òàêèå áàçîâûå òèïû:
òèïû, ÷òî è â Visual Basic String (òåêñòîâûå ñòðîêè), Integer (öåëûå ÷èñëà),
.NET, — ñòðîêè, öåëûå Single (äðîáíûå ÷èñëà) è Boolean (True èëè False).
÷èñëà, äðîáíûå ÷èñëà, áó-
ëåâû (ëîãè÷åñêèå) çíà÷å-
Ýòè òèïû äîñòóïíû âî âñåõ ÿçûêàõ ïðîãðàììèðîâà-
íèÿ è äðóãèå. íèÿ .NET, âêëþ÷àÿ Visual Basic .NET, C# è J#.
Âîò ïðèìåðû äîïóñòèìûõ çíà÷åíèé äëÿ êàæäîãî
èç ýòèõ òèïîâ:

Òèï Çíà÷åíèå Êîììåíòàðèé


String "Hello" Òåêñò äîëæåí áûòü â
êàâû÷êàõ
Integer 123 Öåëûå ÷èñëà (áåç çíàêîâ
Êîãäà âû âûáèðàåòå ñâîé- ïîñëå çàïÿòîé)
ñòâî èëè ìåòîä â ñïèñêå Single 55.12 Äðîáíûå ÷èñëà
IntelliSense, âûâîäèòñÿ ïîä- Boolean True Ìîæåò áûòü òîëüêî True èëè
ñêàçêà ê ïîäñâå÷åííîìó False
ïóíêòó ñïèñêà. Â ýòîé ïîä-
ñêàçêå óêàçûâàåòñÿ òèï
ñâîéñòâà èëè òèïû àðãó- Âîò ïðèìåðû ïðèñâàèâàíèÿ çíà÷åíèé ñâîéñòâàì
ìåíòîâ ìåòîäà. ðàçíûõ òèïîâ:

TextBox1.Text = "Òåêñò"
TextBox1.Visible = True
TextBox1.Width = 1000

Äðóãèå òèïû ïåðåìåííûõ. Â Visual Basic .NET


ìîæíî îáúÿâëÿòü ïåðåìåííûå ìíîæåñòâà ðàçíûõ
òèïîâ. Êðîìå áàçîâûõ òèïîâ (String, Integer,
Boolean, Single è äðóãèõ), åñòü è áîëåå ñëîæíûå
òèïû. Ýòè òèïû âñòðîåíû â ïëàòôîðìó .NET è ìîãóò
èñïîëüçîâàòüñÿ âñåìè ÿçûêàìè .NET. Ìíîãèå èç
ýòèõ òèïî⠗ ñâîéñòâà òàê íàçûâàåìûõ ñèñòåìíûõ
êëàññîâ. Ñèñòåìíûå êëàññû (System classes) ñîäåð-
æàò êîä, îáåñïå÷èâàþùèé ðàáîòó ÿçûêîâ .NET. Äëÿ
ðàáîòû ñ ÿçûêàìè .NET ñëåäóåò óìåòü èñïîëüçîâàòü
ñèñòåìíûå êëàññû.
Ïðèñâàèâàíèå è ïåðåìåííûå 83

Ïîêà ÷òî âàì íå íóæíî ðàçáèðàòüñÿ â êëàññå


System. Âðåìÿ îò âðåìåíè ìû áóäåì ðàññìàòðèâàòü
ôðàãìåíòû êîäà, èñïîëüçóþùèå ñâîéñòâà èëè ìåòî-
äû ñèñòåìíûõ êëàññîâ, ïîýòîìó íåïëîõî, åñëè âû
ñìîæåòå èõ óçíàâàòü. Ðàññìîòðèì ïðèìåð, èñïîëü-
çóþùèé ñèñòåìíûå êëàññû äëÿ óñòàíîâêè öâåòà ôîíà
ôîðìû.
Ñîçäàéòå ïðèëîæåíèå «Öâåò» è äîáàâüòå íà ôîð-
ìó Form1 êíîïêó. Èçìåíèòå çíà÷åíèå åå ñâîéñòâà
Text íà Óñòàíîâèòü öâåò. Âûïîëíèòå äâîéíîé ùåë-
÷îê ïî ýòîé êíîïêå, ÷òîáû îòðåäàêòèðîâàòü îáðàáîò-
÷èê íàæàòèÿ íà íåå.
Äîáàâüòå â îáðàáîò÷èê ñëåäóþùèé êîä:
Dim MyColor As System.Drawing.Color
MyColor = System.Drawing.Color.Blue
Form1.ActiveForm.BackColor = MyColor

Ïîñòðîéòå è çàïóñòèòå âàøå ïðèëîæåíèå. Íàæìè-


òå êíîïêó Button1. Ìû îáúÿâèëè â êîäå ïåðåìåííóþ
MyColor òèïà System.Drawing.Color. Ýòîé ïåðå-
ìåííîé áûëî ïðèñâîåíî çíà÷åíèå System.Drawing.
Color.Blue — îäèí èç îïðåäåëåííûõ â ñèñòåìå öâå-
òîâ. Ïîòîì ñâîéñòâó BackColor ôîðìû Form1 áûëî
ïðèñâîåíî çíà÷åíèå ïåðåìåííîé MyColor. Îáðàòèòå
âíèìàíèå, ÷òî ñâîéñòâó BackColor íóæíî ïðèñâàè-
âàòü çíà÷åíèÿ òèïà System.Drawing.Color.
Ìîæåòå ïîïðîáîâàòü èçó÷èòü êëàññ System ñàìî-
ñòîÿòåëüíî. ×òîáû ñäåëàòü ýòî, ïðîùå âñåãî íàáðàòü
System. (íå çàáóäüòå òî÷êó) â îêíå ðåäàêòîðà êîäà.
IntelliSense âûâåäåò ñïèñîê âñåõ ìåòîäîâ è ñâîéñòâ
ñèñòåìíûõ êëàññîâ. Âûáåðèòå èç ñïèñêà ñâîéñòâî
èëè ìåòîä è ââåäèòå åùå îäíó òî÷êó, ÷òîáû óâèäåòü,
åñòü ëè ó íåãî ñîáñòâåííûå ñâîéñòâà èëè ìåòîäû.
 ýòîì ñïèñêå ìíîãî ÷åãî èíòåðåñíîãî!

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


6.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
Microsoft-CD ñîçäàòü ïðîåêò «Öâåò», îïèñàííûé â ïàðàã-
ðàôå. Ãîòîâûé ïðîåêò õðàíèòñÿ â àðõèâå
Öâåò.exe.
84 Ãëàâà 6

6.3. Îáúÿâëåíèå ïåðåìåííûõ


Ïåðåä èñïîëüçîâàíèåì ïåðåìåííîé â ïðîãðàììå, ýòó
ïåðåìåííóþ íóæíî îáúÿâèòü. ×òîáû îáúÿâèòü ïåðå-
ìåííóþ, íóæíî íàïèñàòü ñòðîêó êîäà, â êîòîðîé
óêàçûâàåòñÿ èìÿ ýòîé ïåðåìåííîé è åå òèï. Âñå ïå-
ðåìåííûå â ïðîãðàììàõ íà Visual Basic .NET íóæíî
îáúÿâëÿòü. Äàæå åñëè áû íå áûëî òàêîãî òðåáîâàíèÿ
ñèíòàêñèñà, ïåðåìåííûå îáúÿâëÿòü ïîëåçíî, ïîñêîëü-
êó ýòî ïîçâîëÿåò âàì ïðîäóìàòü ïðèìåíåíèå ïåðåìåí-
íîé è âûáðàòü äëÿ íåå ïðàâèëüíûé òèï. Îáúÿâëåíèå
ïåðåìåííûõ óñêîðÿåò êîìïèëÿöèþ ïðîãðàììû è ïî-
âûøàåò ýôôåêòèâíîñòü åå ðàáîòû. Êðîìå òîãî, îíî
ïðåäîòâðàùàåò îøèáêè, ñâÿçàííûå ñ íåïðàâèëüíûì
íàïèñàíèåì èìåí ïåðåìåííûõ â êîäå.

Îïåðàòîð îáúÿâëåíèÿ ïåðåìåííûõ. ×òîáû îáúÿ-


âèòü ïåðåìåííóþ â êîäå íà Visual Basic .NET, èñïîëü-
çóåòñÿ îïåðàòîð Dim. Ñèíòàêñèñ ýòîãî îïåðàòîðà
ñëåäóþùèé:

Dim ÈìÿÏåðåìåííîé As ÒèïÏåðåìåííîé

Âîò íåñêîëüêî ïðèìåðîâ îáúÿâëåíèÿ ïåðåìåí-


íûõ ðàçíûõ òèïîâ:
Dim MyName As String
Dim MyWeight As Integer
Dim NoBrainer As Boolean
Dim DVDPrice As Single

Ïåðâàÿ ïåðåìåííàÿ, MyName, îáúÿâëåíà êàê ñòðî-


êîâàÿ (òèï String). Ýòî çíà÷èò, ÷òî â ïåðåìåííîé
 C# è J# ïåðåìåííûå MyName ìîæíî õðàíèòü òîëüêî ñòðîêè òåêñòà. Âòî-
îáúÿâëÿþòñÿ íåìíîãî ðàÿ ïåðåìåííàÿ, MyWeight, îáúÿâëåíà êàê öåëî÷èñ-
ïî-äðóãîìó. Ñíà÷àëà ïè- ëåííàÿ (òèï Integer).  íåé ìîæíî õðàíèòü öåëûå
øåòñÿ òèï ïåðåìåííîé, à ÷èñëà. Ïåðåìåííàÿ NoBrainer îáúÿâëåíà êàê ëî-
ïîòîì åå èìÿ. Êðîìå òîãî,
ãè÷åñêàÿ (òèï Boolean), à ïåðåìåííàÿ DVDPrice —
òèïû íàçûâàþòñÿ òîæå
ïî-äðóãîìó. Íàïðèìåð, êàê äðîáíîå ÷èñëî (òèï Single).
int èñïîëüçóåòñÿ âìåñòî Âàæíî âûáèðàòü äëÿ ïåðåìåííûõ óäîáíûå èìå-
Integer, à decimal — íà. Èìåíà ïåðåìåííûõ äîëæíû áûòü êîðîòêèìè, íî
âìåñòî Single. ïîíÿòíûìè. Èñïîëüçóéòå â íèõ àááðåâèàòóðû òîëü-
Ïðèñâàèâàíèå è ïåðåìåííûå 85

êî ïðè íåîáõîäèìîñòè. Ìíîãèå ïðîãðàììèñòû èñïîëü-


çóþò ñòèëü îôîðìëåíèÿ èìåí, ïðè êîòîðîì êàæäîå
ñëîâî â èìåíè ïåðåìåííîé íà÷èíàåòñÿ ñ áîëüøîé
áóêâû. Íàïðèìåð: CamelCase, MyName, Winnebago-
TopSpeed, LocalSpeedLimit. Â Visual Basic ïåðâàÿ
áóêâà èìåíè àâòîìàòè÷åñêè äåëàåòñÿ áîëüøîé.  J#
è C# îíà îñòàåòñÿ îáû÷íîé.
 êîäå íà Visual Basic .NET ìîæíî îáúÿâèòü
ñêîëüêî óãîäíî ïåðåìåííûõ. Ìîæíî îáúÿâëÿòü ïå-
ðåìåííûå ëþáîãî òèïà, ïîçâîëåííîãî ïëàòôîðìîé
.NET. Ðåêîìåíäóåòñÿ îáúÿâëÿòü âñå íóæíûå íàì
ïåðåìåííûå â íà÷àëå êîäà. Òàêèì îáðàçîì, ìû áó-
äåì çíàòü, ãäå èñêàòü îáúÿâëåíèÿ ïåðåìåííûõ è
ëåãêî ñìîæåì îïðåäåëèòü, êàêîé òèï ó êàæäîé ïå-
ðåìåííîé. Êðîìå òîãî, íàø êîä áóäåò àêêóðàòíûì
è õîðîøî îðãàíèçîâàííûì. Åñëè íàì ïîíàäîáèòñÿ
ñîçäàòü åùå îäíó ïåðåìåííóþ, ìû âåðíåìñÿ â íà-
÷àëî êîäà è îáúÿâèì åå ðÿäîì ñ îñòàëüíûìè ïåðå-
ìåííûìè.

Ëîêàëüíûå è ãëîáàëüíûå ïåðåìåííûå. Ïåðå-


ìåííûå ìîæíî îáúÿâëÿòü êàê ãëîáàëüíûå èëè ëî-
êàëüíûå. Ïîêà ÷òî ìû ïèñàëè òîëüêî êîä âíóòðè
îáðàáîò÷èêîâ ñîáûòèé ýëåìåíòîâ óïðàâëåíèÿ, íà-
ïðèìåð, êîä, îáðàáàòûâàþùèé íàæàòèå íà êíîïêó.
Ïåðåìåííûå, êîòîðûå ìû îáúÿâèì â îáðàáîò÷èêå,
áóäóò ëîêàëüíûìè. Çíà÷åíèÿ ëîêàëüíûõ ïåðåìåí-
íûõ ìîæíî ñ÷èòûâàòü èëè çàïèñûâàòü òîëüêî â êîäå
îáðàáîò÷èêà, â êîòîðîì îíè îáúÿâëåíû. Ê íèì íåëü-
çÿ îáðàòèòüñÿ èç äðóãîãî ìåñòà â êîäå ôîðìû (íàïðè-
ìåð, èç äðóãîãî îáðàáîò÷èêà). Çíà÷åíèÿ ëîêàëüíûõ
ïåðåìåííûõ ñîõðàíÿþòñÿ òîëüêî âî âðåìÿ âûïîëíå-
íèÿ êîäà îáðàáîò÷èêà. Êîãäà îáðàáîò÷èê çàêàí÷èâàåò
ñâîå âûïîëíåíèå, çíà÷åíèÿ åãî ëîêàëüíûõ ïåðåìåí-
íûõ òåðÿþòñÿ. Ïðèìåð ëîêàëüíîé ïåðåìåííîé — ïå-
ðåìåííàÿ, îáúÿâëåííàÿ â îáðàáîò÷èêå íàæàòèÿ íà
êíîïêó.
×òîáû îáúÿâèòü ëîêàëüíûå ïåðåìåííûå â îáðà-
áîò÷èêå, ïîìåñòèòå îïåðàòîð Dim â íà÷àëî êîäà îá-
ðàáîò÷èêà.
86 Ãëàâà 6

Ïðèìåð:

Private Sub Button1_Click(ByVal sender As_


System.Object, ByVal e As System.EventArgs)_
Handles Button1.Click
Dim MyName As String
MyName = "Bill"
TextBox1.Text = MyName
End Sub

Äî ñèõ ïîð ìû íå èñïîëüçîâàëè íèêàêèõ ãëîáàëü-


íûõ ïåðåìåííûõ. Çíà÷åíèÿ ãëîáàëüíûõ ïåðåìåí-
íûõ ìîæíî ñ÷èòûâàòü è çàïèñûâàòü èç âñåãî êîäà
ôîðìû. Äîñòóï ê íèì åñòü ó âñåõ îáðàáîò÷èêîâ ñîáû-
òèé è èç äðóãèõ ìåñò êîäà ôîðìû. Çíà÷åíèÿ ãëîáàëü-
íûõ ïåðåìåííûõ ñîõðàíÿþòñÿ, ïîêà ôîðìà îñòàåòñÿ
îòêðûòîé. Ïðèìåð ãëîáàëüíîé ïåðåìåííîé — ïåðå-
ìåííàÿ-ñ÷åò÷èê, ïîäñ÷èòûâàþùàÿ, ñêîëüêî ðàç áûëè
íàæàòû âñå êíîïêè íà ôîðìå.
×òîáû îáúÿâèòü ãëîáàëüíóþ ïåðåìåííóþ, êîòî-
ðóþ ìîæåò èñïîëüçîâàòü âåñü êîä ôîðìû, íóæíî ïî-
ìåñòèòü îïåðàòîð Dim â òåëî ôîðìû. Ëó÷øå âñåãî
îáúÿâëÿòü ãëîáàëüíûå ïåðåìåííûå â êîäå ôîðìû
ñðàçó ïîñëå òàêîé ñòðîêè:

Windows Form Designer generated code

Ýòà ñòðîêà êîäà çàêëþ÷åíà â ðàìêó, è ñëåâà îò


íåå íàõîäèòñÿ çíà÷îê «ïëþñ». Îáúÿâëÿéòå ñâîè ïå-
ðåìåííûå ñðàçó ïîñëå ýòîé ñòðîêè. Ïîñìîòðèòå íà
ïðèìåð:

Windows Form Designer generated code


Dim TotalButtonClicks As Single

Ïåðåìåííàÿ TotalButtonClicks áóäåò ãëîáàëü-


íîé. Åå çíà÷åíèå ìîæíî áóäåò ñ÷èòûâàòü èëè çàïè-
ñûâàòü âî âñåì êîäå ôîðìû, âêëþ÷àÿ îáðàáîò÷èêè
ñîáûòèé.
Ïðèñâàèâàíèå è ïåðåìåííûå 87

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


6.3. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «×èñëî Pi», îñóùåñòâëÿþùèé
Microsoft-CD âûâîä ÷èñëà π â òåêñòîâûå ïîëÿ â ðàçëè÷íûõ
ôîðìàòàõ. Ñîçäàéòå ôîðìó ñëåäóþùåãî âèäà:

 îáðàáîò÷èêå íàæàòèÿ íà êíîïêó îáúÿâèòå ïå-


ðåìåííûå ñëåäóþùèõ òèïîâ: Integer, Single,
Double, String. Ïðèñâîéòå êàæäîé ïåðåìåííîé çíà-
÷åíèå, ðàâíîå ÷èñëó π. Ýòî çíà÷åíèå â Visual Basic
îáîçíà÷àåòñÿ òàê: Math.PI. Âûâåäèòå çíà÷åíèå êàæ-
äîé ïåðåìåííîé â ñîîòâåòñòâóþùåì òåêñòîâîì ïîëå.

6.4. Ïåðåìåííûå â ïðîãðàììàõ


Îáúÿâèâ ïåðåìåííóþ, âû ìîæåòå èñïîëüçîâàòü åå â
ñâîåì êîäå. Ïåðâîå, ÷òî íóæíî ñäåëàòü â êîäå, — çà-
äàòü íà÷àëüíîå çíà÷åíèå ïåðåìåííîé. Ìîæíî çàäàòü
ëþáîå çíà÷åíèå ïåðåìåííîé, åñëè îíî ïðàâèëüíîãî
òèïà. Äëÿ çàäàíèÿ çíà÷åíèÿ ïåðåìåííîé èñïîëüçóåò-
ñÿ îïåðàòîð ïðèñâàèâàíèÿ. Âîò íåñêîëüêî ïðèìåðîâ:

Dim MyName As String


MyName = "Ìîå èìÿ"

Dim MyWeight As Integer


MyWeight = 128

Dim DrivingDistance As Single


DrivingDistance = 12.8
88 Ãëàâà 6

Ïåðåìåííàÿ MyName îáúÿâëåíà êàê ïðèíàäëåæà-


ùàÿ ê òèïó String, è åé ïðèñâîåíà ñòðîêà "Ìîå
èìÿ". Ïåðåìåííàÿ MyWeight îáúÿâëåíà êàê Integer
 C# è J# èíèöèàëèçàöèÿ è åé ïðèñâîåíî çíà÷åíèå 128, öåëîå ÷èñëî. Ïåðåìåí-
ïåðåìåííîé íóæíûì çíà- íàÿ DrivingDistance îáúÿâëåíà êàê Single, è åé
÷åíèåì äåëàåòñÿ òàê: ïðèñâîåíî çíà÷åíèå 12.8, äåñÿòè÷íàÿ äðîáü.
Åñòü î÷åíü óäîáíûé ñïîñîá îáúåäèíÿòü â îäíîé
int myOrbit;
myOrbit=123000;
ñòðîêå êîäà îáúÿâëåíèå ïåðåìåííîé è ïðèñâàèâàíèå
åé íà÷àëüíîãî çíà÷åíèÿ. Ýòîò ñïîñîá ãàðàíòèðóåò,
÷òî ó ïåðåìåííîé ñ ñàìîãî íà÷àëà áóäåò ïðàâèëüíîå
çíà÷åíèå. Èñïîëüçîâàíèå ïåðåìåííîé, êîòîðîé íå
ïðèñâîåíî íà÷àëüíîå çíà÷åíèå, ìîæåò ïðèâåñòè ê
íåïðàâèëüíîé ðàáîòå ïðîãðàììû.
Dim MyAge As Integer = 100

Òåïåðü, îáúÿâèâ ïåðåìåííóþ è ïðèñâîèâ åé íà-


÷àëüíîå çíà÷åíèå, ìîæíî èñïîëüçîâàòü åå â êîäå
êàæäûé ðàç, êîãäà âàì íóæíî ýòî çíà÷åíèå. Êàê âû
äóìàåòå, ÷òî áóäåò âûâåäåíî â îêíå ñîîáùåíèÿ?
Dim MyName As String
MyName = "Joe Cooker"
MessageBox.Show(MyName)

×òî áóäåò âûâåäåíî â TextBox1?


Dim MyName As String
MyName = "Peter, Paul and Mary"
TextBox1.Text = MyName

Çíà÷åíèå ïåðåìåííîé ìîæíî èçìåíÿòü ñ ïîìîùüþ


îïåðàòîðîâ ïðèñâàèâàíèÿ. Êàêîå èìÿ áóäåò âûâåäå-
íî â TextBox1 â ñëåäóþùåì ïðèìåðå? Ïåðåìåííîé
MyName ïðèñâîåíî çíà÷åíèå "Bill", çàòåì — "Bob",
à çàòåì — "Ben". Ïîñêîëüêó ïîñëåäíåå çíà÷åíèå
MyName — "Ben", èìåííî îíî áóäåò âûâåäåíî â
TextBox1.
Dim MyName As String
MyName = "Bill"
MyName = "Bob"
MyName = "Ben"
TextBox1.Text = MyName
Ïðèñâàèâàíèå è ïåðåìåííûå 89

Ìîæíî ïðèñâîèòü ïåðåìåííîé çíà÷åíèå äðóãîé


ïåðåìåííîé. ×òî áóäåò âûâåäåíî â îêíå ñîîáùåíèÿ?
Dim MyName As String
Âîò íåáîëüøîé ïðèìåð Dim YourName As String
êîäà íà J# èëè C#. Êàê MyName = "Allen Ginsberg"
âèäèòå, åñòü è îáùèå ÷åð- YourName = MyName
òû, è îòëè÷èÿ ýòîãî êîäà MessageBox.Show(YourName)
îò êîäà íà Visual Basic.
NET. Îáðàòèòå âíèìàíèå Âîò ïðèìåð, ñîäåðæàùèé îøèáêó: ìû ïûòàåìñÿ
íà îáúÿâëåíèå ïåðåìåí- ïðèñâîèòü ïåðåìåííîé çíà÷åíèå ïåðåìåííîé äðóãîãî
íûõ. òèïà. Ïîìíèòå, ïåðåìåííûå îáúÿâëÿþòñÿ êàê ïðè-
string MyName; íàäëåæàùèå ê îïðåäåëåííîìó òèïó. Èì ìîæíî ïðè-
string YourName; ñâîèòü çíà÷åíèÿ òîëüêî ýòîãî òèïà. Ýòîò êîä íåëüçÿ
MyName = ñêîìïèëèðîâàòü:
"Allen Ginsberg";
YourName = myName; ‘Îøèáêà
MessageBox.Show Dim MyName As String
(YourName); Dim DVDPrice As Single
MyName = "Paul Bunion"
DVDPrice = MyName

Äàâàéòå íàïèøåì ïðîãðàììó, â êîòîðîé ïåðåìåí-


íûå èñïîëüçóþòñÿ! Ñîçäàéòå íîâîå ïðèëîæåíèå Win-
dows â Visual Studio .NET. Íàçîâèòå åãî «Èìåíà».
Îòêðîéòå îêíî Îáëàñòü ýëåìåíòîâ è äîáàâüòå íà ôîð-
ìó Form1 êíîïêó è äâà òåêñòîâûõ ïîëÿ. Î÷èñòèòå
ñâîéñòâî Text îáîèõ òåêñòîâûõ ïîëåé. Óñòàíîâèòå
çíà÷åíèå Ïîêàçàòü èìåíà ñâîéñòâà Text êíîïêè. Óñòà-
íîâèòå çíà÷åíèå True ñâîéñòâà ReadOnly îáîèõ òåêñòî-
âûõ ïîëåé. Äâîéíûì ùåë÷êîì ïî êíîïêå Button1
îòêðîéòå â ðåäàêòîðå êîäà îáðàáîò÷èê åå íàæàòèÿ.
Ââåäèòå â îáðàáîò÷èê ñëåäóþùèå ñòðîêè êîäà:
Dim XName As String
Dim YName As String
XName = "X is my name"
YName = "Y is my name"
TextBox1.Text = XName
TextBox2.Text = YName

Ïîñòðîéòå è çàïóñòèòå ïðèëîæåíèå. Íàæìèòå


êíîïêó ñ íàäïèñüþ Ïîêàçàòü èìåíà. Â âàøåì êîäå
îáúÿâëåíû äâå ñòðîêîâûå ïåðåìåííûå XName è YName.
90 Ãëàâà 6

Ïåðåìåííûå õðàíÿò äâå ñòðîêè òåêñòà (çàêëþ÷åí-


íûå â êàâû÷êè). Ñâîéñòâó Text ïîëÿ TextBox1 áó-
äåò ïðèñâîåíî çíà÷åíèå ïåðåìåííîé XName. Ñâîéñòâó
Text ïîëÿ TextBox2 áóäåò ïðèñâîåíî çíà÷åíèå ïåðå-
ìåííîé YName. Ïîïðîáóéòå èçìåíÿòü çíà÷åíèÿ XName
è YName â êîäå è ñíîâà çàïóñêàòü ïðîãðàììó.
À òåïåðü èçìåíèì ïðîãðàììó. Äîáàâüòå íà ôîð-
ìó åùå îäíî òåêñòîâîå ïîëå. Î÷èñòèòå åãî ñâîéñòâî
Text. Óáåäèòåñü, ÷òî äëÿ ñâîéñòâà ReadOnly ýòîãî
òåêñòîâîãî ïîëÿ óñòàíîâëåíî çíà÷åíèå False. Âû-
ïîëíèòå äâîéíîé ùåë÷îê ïî êíîïêå Button1, ÷òîáû
îòðåäàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Èçìåíèòå
êîä, ÷òîáû îí âûãëÿäåë òàê:
Dim XName As String
Dim YName As String
Dim ZName As String
ZName = TextBox3.Text
XName = ZName
YName = XName
TextBox1.Text = XName
TextBox2.Text = YName

Ïîñòðîéòå è çàïóñòèòå ïðèëîæåíèå. Ââåäèòå â


òðåòüå òåêñòîâîå ïîëå êàêîé-íèáóäü òåêñò. Íàæìèòå
êíîïêó ñ íàäïèñüþ Ïîêàçàòü èìåíà. ×òî ïðîèçîé-
äåò? Âàø êîä îáúÿâëÿåò òðè ñòðîêîâûå ïåðåìåííûå.
Ïåðåìåííîé ZName ïðèñâàèâàåòñÿ çíà÷åíèå ñâîéñò-
âà Text òåêñòîâîãî ïîëÿ TextBox3. Ïåðåìåííîé
XName ïðèñâàèâàåòñÿ çíà÷åíèå ïåðåìåííîé ZName
(êîòîðîé ðàíåå áûëî ïðèñâîåíî çíà÷åíèå ñâîéñòâà
Text òåêñòîâîãî ïîëÿ TextBox3). Ïåðåìåííîé YName
ïðèñâàèâàåòñÿ çíà÷åíèå ïåðåìåííîé XName (êîòîðîé
áûëî òîëüêî ÷òî ïðèñâîåíî çíà÷åíèå ïåðåìåííîé
ZName). Çàòåì êîä ïîìåùàåò â ñâîéñòâî Text ïîëÿ
TextBox1 çíà÷åíèå ïåðåìåííîé XName, à â ñâîéñòâî
Text ïîëÿ TextBox2 — çíà÷åíèå YName. Ýòîò êîä
ïîêàçûâàåò, êàê ïîìåñòèòü â ïåðåìåííóþ çíà÷åíèå
äðóãîé ïåðåìåííîé.
Âîò åùå îäèí ïðèìåð — îí ïîêàæåò âàì, êàê èñ-
ïîëüçîâàòü ãëîáàëüíûå ïåðåìåííûå. Ñîçäàéòå íîâîå
ïðèëîæåíèå Windows è íàçîâèòå åãî «Êîëè÷åñòâî
Ïðèñâàèâàíèå è ïåðåìåííûå 91

ùåë÷êîâ». Äîáàâüòå íà ôîðìó Form1 òðè êíîïêè.


 ðåäàêòîðå êîäà íàéäèòå ñëåäóþùóþ ñòðîêó:
Windows Form Designer generated code
Ñðàçó ïîñëå íåå ââåäèòå ñëåäóþùåå:
Dim Number As Integer
Çàìå÷àíèå. Ïåðåìåííîé Number àâòîìàòè÷åñêè
ïðèñâàèâàåòñÿ çíà÷åíèå 0.
Âûïîëíèòå äâîéíîé ùåë÷îê ïî êíîïêå Button1
â ðåäàêòîðå ôîðì è äîáàâüòå â îáðàáîò÷èê ñëåäóþ-
ùèé êîä:
Number = Number + 1
MessageBox.Show(Number)
Äîáàâüòå òàêîé æå êîä â îáðàáîò÷èêè íàæàòèé
êíîïîê Button2 è Button3.
Ïîñòðîéòå è çàïóñòèòå ïðèëîæåíèå. Íàæèìàé-
òå êíîïêè â ïðîèçâîëüíîì ïîðÿäêå. Ïðè êàæäîì
íàæàòèè áóäåò âûâîäèòüñÿ îêíî ñîîáùåíèÿ, â êîòî-
ðîì áóäåò óêàçàíî îáùåå êîëè÷åñòâî íàæàòèé. Ýòîò
êîä ðàáîòàåò, ïîòîìó ÷òî ìû îáúÿâèëè ïåðåìåííóþ
Number êàê ãëîáàëüíóþ â êîäå ôîðìû. Ýòà ïåðåìåí-
íàÿ èñïîëüçóåòñÿ äëÿ õðàíåíèÿ îáùåãî êîëè÷åñòâà
íàæàòèé. Ïðè êàæäîì íàæàòèè êíîïêè çíà÷åíèå
ýòîé ïåðåìåííîé óâåëè÷èâàåòñÿ íà 1. Çíà÷åíèå â
ãëîáàëüíîé ïåðåìåííîé ôîðìû ñîõðàíÿåòñÿ, ïîêà
ôîðìà íå áóäåò çàêðûòà.
Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ
6.4. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Èìåíà», îïèñàííûé â ïàðàãðàôå.
Ãîòîâûé ïðîåêò õðàíèòñÿ â àðõèâå Èìåíà.exe.
Microsoft-CD 6.5. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Êîëè÷åñòâî ùåë÷êîâ», îïè-
ñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò õðàíèòñÿ
â àðõèâå Êîëè÷åñòâî_ùåë÷êîâ.exe.
6.6. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
îòêðûòü ïðîåêò «Íàéäè îøèáêè», íàéòè è èñ-
ïðàâèòü îøèáêè â ïðîãðàììíîì êîäå. Ãîòîâûé
ïðîåêò õðàíèòñÿ â àðõèâå Íàéäè_îøèáêè.exe.
Òåñò ïî òåìå «Ïðèñâàèâàíèå è ïåðåìåííûå»
1. Òèïîì ïåðåìåííîé íå ÿâëÿåòñÿ

m Boolean

m Form1.Button1

m Single

m System.Drawing.Color

2. Äàííûå êàêîãî òèïà âñåãäà õðàíÿòñÿ â ñâîéñòâå Text òåêñòîâîãî ïîëÿ?

m Single

m Integer

m Boolean

m String

3. Ïåðåìåííûå êàêîãî òèïà ìîãóò ïðèíèìàòü îäíî çíà÷åíèå èç äâóõ


âîçìîæíûõ?

m Single

m Integer

m Boolean

m String

4. Ïðåæäå ÷åì èñïîëüçîâàòü ïåðåìåííóþ â ïðîãðàììå, îáÿçàòåëüíî íóæíî

m Ïðèñâîèòü ïåðåìåííîé çíà÷åíèå

m Îáúÿâèòü ïåðåìåííóþ

m Îáíóëèòü ïåðåìåííóþ

m Âûâåñòè çíà÷åíèå ïåðåìåííîé â òåêñòîâîå ïîëå


Ãëàâà 7

Îïåðàöèè
7.1. Àðèôìåòè÷åñêèå îïåðàöèè
7.2. Ñòðîêîâûå îïåðàöèè
7.3. Ëîãè÷åñêèå îïåðàöèè
7.4. Îòëàäêà êîäà

 1993 ãîäó
áûëà ñîçäàíà
îïåðàöèîííàÿ ñèñòåìà ñ
ãðàôè÷åñêèì èíòåðôåé-
ñîì Windows NT äëÿ ñåð-
âåðîâ è ðàáî÷èõ ñòàíöèé,
êîòîðàÿ ñîäåðæàëà óòè-
ëèòû äëÿ ðàáîòû â ëîêàëü-
íîé ñåòè è â Èíòåðíåòå.
Îïåðàöèîííàÿ ñèñòåìà
îáåñïå÷èâàëà áîëüøóþ
èíôîðìàöèîííóþ áåçî-
ïàñíîñòü (èñïîëüçîâàëà
ôàéëîâóþ ñèñòåìó NTFS,
ïîçâîëÿëà óñòàíàâëèâàòü
ïîëèòèêè áåçîïàñíîñòè
äëÿ ðàáî÷èõ ãðóïï è äð.).
Íà îñíîâå Windows NT â
ïîñëåäóþùèå ãîäû áûëè
ðàçðàáîòàíû îïåðàöèîí-
íûå ñèñòåìû Windows
2000 è Windows XP.
94 Ãëàâà 7

7.1. Àðèôìåòè÷åñêèå îïåðàöèè


Ïðèìåðû àðèôìåòè÷åñêèõ îïåðàöèé, êîòîðûå âû
èñïîëüçîâàëè ñ ïåðâîãî êëàññà íà óðîêàõ ìàòåìàòè-
êè, — ñëîæåíèå, âû÷èòàíèå, óìíîæåíèå è äåëåíèå.
 ïðîãðàììèðîâàíèè òîæå åñòü òàêèå îïåðàöèè.
Êðîìå òîãî, èìåþòñÿ è äðóãèå îïåðàöèè, ïîçâîëÿþ-
ùèå, íàïðèìåð, âûïîëíÿòü ñëîæíûå ðàñ÷åòû è îáú-
åäèíÿòü òåêñòîâûå ñòðîêè.
Îïåðàöèè îáû÷íî îáðàáàòûâàþò äâà çíà÷åíèÿ,
õîòÿ äëÿ íåêîòîðûõ íóæíî òîëüêî îäíî. Ýòè çíà÷å-
íèÿ íàçûâàþòñÿ îïåðàíäàìè. Âîò îáùèé ñèíòàêñèñ
îïåðàöèè:
Îïåðàíä1 Îïåðàöèÿ Îïåðàíä2

Ïðèìåð:
3 + 4

 âûðàæåíèè 3 + 4 åñòü äâà îïåðàíäà (3 è 4) è îïå-


ðàöèÿ (+). Îïåðàöèÿ âûïîëíÿåò äåéñòâèå (â äàííîì
ñëó÷àå ñëîæåíèå) íàä äâóìÿ îïåðàíäàìè (3 è 4).
Êîìïüþòåðíûå ïðîãðàììû îòëè÷íî ïîäõîäÿò äëÿ
âûïîëíåíèÿ âû÷èñëåíèé. Îíè íèêîãäà íå îøèáàþò-
ñÿ è íå óñòàþò äåëàòü îäíî è òî æå ðàç çà ðàçîì. Çâó-
÷èò ñëèøêîì õîðîøî, ÷òîáû áûòü ïðàâäîé? Âû
ïðàâû, òóò åñòü ïðîáëåìà. Ïðîãðàììû ìîãóò âûïîë-
íÿòü âû÷èñëåíèÿ, íî íå ìîãóò ïîäãîòàâëèâàòü çàäà-
÷è äëÿ ðåøåíèÿ. Åñëè âû ïðîãðàììèñò, ýòî äîëæíû
äåëàòü âû.
Èìåííî ïîýòîìó âàæíî ïîíèìàòü, êàê èñïîëü-
çóþòñÿ â ïðîãðàììàõ àðèôìåòè÷åñêèå îïåðàöèè.
Èìåííî îíè ñîîáùàþò ïðîãðàììå, êàêèå äåéñòâèÿ
íóæíî âûïîëíèòü, ÷òîáû ðåøèòü çàäà÷ó. Ïîñêîëüêó
êîìïüþòåðû ïðåäíàçíà÷åíû äëÿ âû÷èñëåíèé, âî âñåõ
ÿçûêàõ ïðîãðàììèðîâàíèÿ åñòü ñòàíäàðòíûé íàáîð
àðèôìåòè÷åñêèõ îïåðàöèé. Ïîñêîëüêó ýòè îïåðà-
öèè øèðîêî ðàñïðîñòðàíåíû, âî âñåõ ÿçûêàõ èõ îáî-
çíà÷àþò ïî÷òè îäèíàêîâî.
Âîò ñïèñîê ñàìûõ ðàñïðîñòðàíåííûõ àðèôìåòè-
÷åñêèõ îïåðàöèé è èõ îáîçíà÷åíèé â ìàòåìàòèêå è â
Îïåðàöèè 95

êîäå ïðîãðàìì. Îáðàòèòå âíèìàíèå íà òî, ÷òî â ïðî-


ãðàììàõ ïî-äðóãîìó îáîçíà÷àåòñÿ òîëüêî óìíîæå-
íèå: * âìåñòî òî÷êè (·).
 ÿçûêàõ C# è J# îïåðà-
öèè îáîçíà÷àþòñÿ òàê æå,
Îïåðàöèÿ Îáû÷íîå Ñèìâîë â
êàê è â Visual Basic .NET.
îáîçíà÷åíèå ïðîãðàììàõ
Ñëîæåíèå îáîçíà÷àåòñÿ +,
âû÷èòàíèå –, óìíîæåíèå *, Ñëîæåíèå + +
äåëåíèå /.
Âû÷èòàíèå – –
Óìíîæåíèå · *
Äåëåíèå / /

Àðèôìåòè÷åñêèå îïåðàöèè ÷àùå âñåãî èñïîëüçóþò-


ñÿ â îïåðàòîðàõ ïðèñâàèâàíèÿ. Îïåðàòîð ïðèñâàèâà-
íèÿ âûãëÿäèò êàê ðàâåíñòâî, â íåì èñïîëüçóåòñÿ çíàê
«ðàâíî». Îïåðàöèè è îïåðàíäû ðàçìåùàþòñÿ ñïðàâà
îò çíàêà «ðàâíî». Âûðàæåíèå ñïðàâà îò çíàêà «ðàâíî»
âû÷èñëÿåòñÿ, è ðåçóëüòàò âû÷èñëåíèé çàïèñûâàåòñÿ â
ïåðåìåííóþ ñëåâà îò çíàêà «ðàâíî». Âûðàæåíèå ñïðà-
âà îò çíàêà «ðàâíî» äîëæíî èìåòü çíà÷åíèå òîãî æå
òèïà, ÷òî è ïåðåìåííàÿ ñëåâà îò çíàêà ðàâíî, èíà÷å
êîä íå ñêîìïèëèðóåòñÿ. Âîò íåñêîëüêî ïðèìåðîâ èñ-
ïîëüçîâàíèÿ àðèôìåòè÷åñêèõ îïåðàöèé â îïåðàòî-
ðàõ ïðèñâàèâàíèÿ:

Dim FormWidth as Integer


FormWidth = 200 + 300

Dim FormHeight as Integer


FormHeight = 1000 / 2

Äàííûå ïðèìåðû î÷åíü ïðîñòûå — â êàæäîì èç


íèõ ïî äâà îïåðàíäà è îäíîé îïåðàöèè. Â íàñòîÿùèõ
ïðîãðàììàõ ÷àùå âñåãî âûïîëíÿþòñÿ ñëîæíûå ðàñ-
÷åòû, è íóæíî èñïîëüçîâàòü íåñêîëüêî îïåðàíäîâ è
îïåðàöèé â êàæäîì îïåðàòîðå. Ê ñ÷àñòüþ, äëÿ áîëü-
øèíñòâà îïåðàöèé â îäíîì îïåðàòîðå ìîæíî èñïîëü-
çîâàòü ñòîëüêî îïåðàöèé, ñêîëüêî íóæíî. Êðîìå
òîãî, â êà÷åñòâå îïåðàíäîâ ìîæíî èñïîëüçîâàòü ïå-
ðåìåííûå. Îïåðàöèè ìîæíî âûïîëíÿòü è íàä ïåðå-
96 Ãëàâà 7

ìåííûìè — åñëè ýòè ïåðåìåííûå ïîäõîäÿò ïî òèïó.


À åùå ìîæíî çàïèñàòü â ïåðåìåííóþ çíà÷åíèå âûðà-
æåíèÿ, â êîòîðîì èñïîëüçóåòñÿ ñàìà ýòà ïåðåìåí-
Ñêîáêè ìîæíî èñïîëüçî- íàÿ. Äàâàéòå ðàçáåðåì áîëåå ñëîæíûå ïðèìåðû.
âàòü â îïåðàòîðàõ òî÷íî Ïåðâûé ïðèìåð âû÷èñëÿåò äëèíó îêðóæíîñòè, åñëè
òàê æå, êàê â îáû÷íûõ ìà- èçâåñòåí äèàìåòð.
òåìàòè÷åñêèõ çàäà÷àõ. Òî,
÷òî íàõîäèòñÿ â ñêîáêàõ, Dim Circum As Single
âû÷èñëÿåòñÿ ïåðâûì. Dim Diameter As Integer
Ïðèìåð: Dim Pi As Single
Pi = 3.14159
(5+7)/(1+5)= 2 Diameter = 18
Circum = Diameter * Pi
Çäåñü ñíà÷àëà âû÷èñëÿ-
åòñÿ (5+7), ïîòîì (1+5), MessageBox.Show(Circum)
çàòåì âûïîëíÿåòñÿ äåëå-
íèå. Îòâåò ðàâåí 2.  ñëåäóþùåì ïðèìåðå âû÷èñëÿåòñÿ ñðåäíÿÿ
öåíà áåíçèíà çà äâà ìåñÿöà — ìàðò è àïðåëü. Îáðà-
Áåç ñêîáîê ìû áû ïîëó÷è- òèòå âíèìàíèå íà ñêîáêè — îíè èñïîëüçóþòñÿ, ÷òî-
ëè äðóãîé îòâåò: áû ñëîæèòü öåíû è îáúåìû, ïðåæäå ÷åì äåëèòü.
5+7/1+5 = 17 Dim MarchCost As Single = 809.6
Dim AprilCost As Single = 1661.55
Ñ ïîìîùüþ ñêîáîê âû ìî-
æåòå óêàçàòü ïðîãðàììå, Dim MarchLitres As Single = 50.6
â êàêîì ïîðÿäêå íóæíî Dim AprilLitres As Single = 100.7
âûïîëíÿòü âû÷èñëåíèÿ. Dim CostPerLitres As Single
CostPerLitres = (MarchCost + AprilCost) /_
(MarchLitres + AprilLitres)
MessageBox.Show(CostPerLitres)

 ïåðåìåííóþ ìîæíî çàïèñàòü çíà÷åíèå âûðà-


æåíèÿ, â êîòîðîì èñïîëüçóåòñÿ ýòà æå ïåðåìåííàÿ.
Ïîñìîòðèòå íà ñëåäóþùèé ïðèìåð è ïîïûòàéòåñü
îïðåäåëèòü, ÷òî áóäåò âûâåäåíî â îêíå ñîîáùåíèÿ.

Dim MileCounter as Integer


MileCounter = 100
MileCounter = MileCounter + 200
MileCounter = MileCounter + 400
MessageBox.Show(MileCounter)

 îêíå ñîîáùåíèÿ áóäåò âûâåäåíî 700, çíà÷åíèå


ïåðåìåííîé MileCounter ïðè âûçîâå ýòîãî îêíà.
Âîò ïî÷åìó ýòî ïîëó÷àåòñÿ. Ïåðâûå äâå ñòðîêè êîäà
Îïåðàöèè 97

îáúÿâëÿþò ïåðåìåííóþ MileCounter è çàäàþò åå


íà÷àëüíîå çíà÷åíèå 100. Òðåòüÿ ñòðîêà êîäà áåðåò
òåêóùåå çíà÷åíèå ïåðåìåííîé MileCounter (100) è
ïðèáàâëÿåò ê íåìó 200 — ïîëó÷àåòñÿ 300. Íå çàáû-
âàéòå, ïåðâîé âñåãäà âû÷èñëÿåòñÿ ïðàâàÿ ÷àñòü îïå-
ðàòîðà ïðèñâàèâàíèÿ. Çàòåì ëåâîé ÷àñòè îïåðàòîðà
ïðèñâàèâàíèÿ (MileCounter) ïðèñâàèâàåòñÿ çíà÷å-
íèå ïðàâîé ÷àñòè (300). ×åòâåðòàÿ ñòðîêà êîäà áåðåò
òåêóùåå çíà÷åíèå ïåðåìåííîé MileCounter (òåïåðü
300) è äîáàâëÿåò ê íåìó 400, ïîëó÷àåòñÿ 700. Ýòî
çíà÷åíèå ïðèñâàèâàåòñÿ MileCounter, îíî æå îòî-
áðàæàåòñÿ â îêíå ñîîáùåíèÿ. Äëÿ ëåâîé ÷àñòè îïå-
ðàòîðà ïðèñâàèâàíèÿ íå âàæíî, êàê áûëî âû÷èñëåíî
çíà÷åíèå ïðàâîé ÷àñòè, åñëè îíî ïîäõîäèò ïî òèïó.
Ïîýòîìó MileCounter ìîæåò íàõîäèòüñÿ â ïðàâîé
÷àñòè îïåðàòîðà ïðèñâàèâàíèÿ òî÷íî òàê æå, êàê è
ëþáàÿ äðóãàÿ ïåðåìåííàÿ.
Ïðèñâàèâàíèå ïåðåìåííîé çíà÷åíèÿ âûðàæåíèÿ,
ñîäåðæàùåãî ñàìó ýòó ïåðåìåííóþ, — ýòî îáû÷íûé
ïðèåì ïðîãðàììèðîâàíèÿ, ïîääåðæèâàåìûé âñåìè
ÿçûêàìè .NET. Îí èçáàâëÿåò íàñ îò íåîáõîäèìîñòè
èñïîëüçîâàòü äîïîëíèòåëüíóþ ïåðåìåííóþ äëÿ õðà-
íåíèÿ ïðîìåæóòî÷íîãî çíà÷åíèÿ. Êàê âèäíî èç ïðè-
ìåðà, êîòîðûé ìû òîëüêî ÷òî ðàññìîòðåëè, ýòîò
ïðèåì î÷åíü óäîáåí äëÿ ïîäñ÷åòîâ ñóììû íàáîðà
ýëåìåíòîâ. Î÷åíü ÷àñòî âñòðå÷àåòñÿ ñòðîêà êîäà âèäà
variable = variable + 1, èñïîëüçóåìàÿ äëÿ óâå-
ëè÷åíèÿ íà 1 çíà÷åíèÿ ïåðåìåííîé. Îíà èñïîëüçó-
åòñÿ, íàïðèìåð, ïðè ïîäñ÷åòå êîëè÷åñòâà ïîâòî-
ðåíèé â öèêëàõ.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


7.1. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Öåíà áåíçèíà-1», îïèñàííûé â
ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìî-
Microsoft-CD
ðàñïàêîâûâàþùåìñÿ àðõèâå Öåíà_áåíçèíà-1.exe.
7.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Äèàìåòð îêðóæíîñòè», îïè-
98 Ãëàâà 7

ñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåð-


æèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Äèàìåòð_îêðóæíîñòè.exe.
7.3. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Ïóòü», îïèñàííûé â ïàðàãðà-
ôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïà-
êîâûâàþùåìñÿ àðõèâå Ïóòü.exe.
7.4. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Öåíà áåíçèíà-2», â êîòîðîì
âû÷èñëÿåòñÿ öåíà áåíçèíà, íåîáõîäèìîãî äëÿ
ïðåîäîëåíèÿ îïðåäåëåííîãî ðàññòîÿíèÿ, åñëè
çàäàíû äëèíà ïðîáåãà â êèëîìåòðàõ, äëÿ êîòî-
ðîé òðåáóåòñÿ ëèòð ãîðþ÷åãî, è öåíà ëèòðà ãî-
ðþ÷åãî. Ñîçäàéòå ôîðìó, ðàçìåñòèâ íà íåé
ñëåäóþùèå ýëåìåíòû óïðàâëåíèÿ:
1. ×åòûðå òåêñòîâûõ ïîëÿ, ÷òîáû ìîæíî áûëî
îòîáðàæàòü:
q ðàññòîÿíèå;
q äëèíó ïðîáåãà â êèëîìåòðàõ, äëÿ êîòî-
ðîé òðåáóåòñÿ ëèòð ãîðþ÷åãî;
q öåíó ëèòðà ãîðþ÷åãî;
q ñòîèìîñòü áåíçèíà.
2. ×åòûðå íàäïèñè äëÿ îïèñàíèÿ òåêñòîâûõ
ïîëåé.
3. Êíîïêó, ïðè íàæàòèè êîòîðîé áóäåò íà÷è-
íàòüñÿ âû÷èñëåíèå.
Äëÿ ïðåîáðàçîâàíèÿ çíà÷åíèé ñòðîêîâîãî òèïà,
ââîäèìûõ â òåêñòîâûå ïîëÿ, â ÷èñëà èñïîëüçîâàòü
ôóíêöèþ Val(). Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìî-
ðàñïàêîâûâàþùåìñÿ àðõèâå Öåíà_áåíçèíà_2.exe.

7.2. Ñòðîêîâûå îïåðàöèè


Íå âî âñåõ ïðîãðàììàõ çàäà÷à ñâîäèòñÿ òîëüêî ê âû-
÷èñëåíèÿì, èíîãäà ïðîãðàììå íóæíî ðàáîòàòü ñ òåê-
ñòîâûìè ñòðîêàìè. Âû çíàåòå, ÷òî â Visual Basic
.NET è äðóãèõ ÿçûêàõ ïðîãðàììèðîâàíèÿ ìîæíî
Îïåðàöèè 99

«ñêëàäûâàòü» òåêñò? Íà ñàìîì äåëå ýòî íå òî æå ñàìîå


ñëîæåíèå, ÷òî è äëÿ ÷èñåë. «Ñëîæåíèå» òåêñòîâûõ
ñòðîê íàçûâàåòñÿ êîíêàòåíàöèåé — ýòî òåõíè÷åñêèé
 ÿçûêàõ C# è J# àìïåð- òåðìèí, îáîçíà÷àþùèé ñîåäèíåíèå äâóõ ñòðîê.
ñåíä (&) íå èñïîëüçóåòñÿ Â Visual Basic .NET îïåðàöèÿ êîíêàòåíàöèè çàäàåò-
äëÿ ñîåäèíåíèÿ òåêñòîâûõ ñÿ ñ ïîìîùüþ çíàêîâ «àìïåðñåíä» (&) èëè «ïëþñ»
ñòðîê. Èñïîëüçóåòñÿ ïëþñ (+). Îíè èñïîëüçóþòñÿ òî÷íî òàê æå, êàê îïåðàöèÿ
(+). Ïîñìîòðèòå íà ñëåäó- ñëîæåíèÿ, íî ñî ñòðîêàìè, à íå ñ ÷èñëàìè.
þùóþ ñòðîêó êîäà:
Âîò ïðèìåðû èñïîëüçîâàíèÿ îïåðàöèè êîíêàòå-
fullName = "Bill " + íàöèè:
"Bob";
"Bill" & "Mike
"1" & "2"
"Bill" + "Mike
"1" + "2"

Ñîåäèíÿÿ òåêñòîâûå ñòðîêè ñ ïîìîùüþ îïåðàöèè


êîíêàòåíàöèè, Visual Basic. NET íå âñòàâëÿåò ìåæ-
äó ñòðîêàìè ïðîáåëû. Âû äîëæíû óêàçàòü â êîäå,
íóæíî ëè äîáàâëÿòü ïðîáåëû. Ýòî ìîæíî ñäåëàòü
äâóìÿ ñïîñîáàìè:

"Bill" & " " & "Mike"

èëè
"Bill " & "Mike"

Âîò ïðèìåð èñïîëüçîâàíèÿ îïåðàöèè êîíêàòåíà-


öèè â îïåðàòîðå ïðèñâàèâàíèÿ:

Dim MyName as String


MyName = "Èìÿ" & "Ôàìèëèÿ"

Âîò ïðèìåð, âûïîëíÿþùèé êîíêàòåíàöèþ ñòðî-


êîâûõ ïåðåìåííûõ è âûâîäÿùèé ðåçóëüòàòû â òåê-
ñòîâîå ïîëå:

Dim FirstName As String


Dim LastName As String
FirstName = "Bob"
LastName = "Marley"
TextBox1.Text = FirstName & " " & LastName
100 Ãëàâà 7

Âû çàìåòèëè, êàê ïðîãðàììå íà Visual Basic


.NET áûëî ïðèêàçàíî âñòàâèòü ïðîáåë ìåæäó çíà÷å-
íèÿìè FirstName è LastName?

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


7.5. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Èìÿ, ôàìèëèÿ», îïèñàííûé â
Microsoft-CD ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñà-
ìîðàñïàêîâûâàþùåìñÿ àðõèâå Èìÿ_ôàìèëèÿ.
exe.

7.3. Ëîãè÷åñêèå îïåðàöèè


 ñîñòàâ ëîãè÷åñêèõ âûðàæåíèé ìîãóò âõîäèòü ëî-
ãè÷åñêèå ïåðåìåííûå, ëîãè÷åñêèå çíà÷åíèÿ, îïåðà-
òîðû ñðàâíåíèÿ, à òàêæå ëîãè÷åñêèå îïåðàöèè.
Ëîãè÷åñêèå âûðàæåíèÿ ìîãóò ïðèíèìàòü ëèøü äâà
çíà÷åíèÿ True (Èñòèíà) èëè False (Ëîæü).
Îïåðàòîðû ñðàâíåíèÿ =, <, >, , <= è >= ñðàâíè-
âàþò âûðàæåíèå â ëåâîé ÷àñòè îïåðàòîðà ñ âûðàæå-
íèåì â ïðàâîé ÷àñòè îïåðàòîðà è ïðåäñòàâëÿþò
ðåçóëüòàò â âèäå ëîãè÷åñêîãî çíà÷åíèÿ True èëè
False. Ïðèìåðû:

5 > 3 = True
"A" = "B" = False

Íàä ýëåìåíòàìè ëîãè÷åñêèõ âûðàæåíèé ìîãóò


ïðîèçâîäèòüñÿ ëîãè÷åñêèå îïåðàöèè, êîòîðûå íà
ÿçûêå Visual Basic îáîçíà÷àþòñÿ ñëåäóþùèì îáðà-
çîì: ëîãè÷åñêîå óìíîæåíèå — And, ëîãè÷åñêîå ñëî-
æåíèå — Or è ëîãè÷åñêîå îòðèöàíèå — Not. Ïðè
çàïèñè ñëîæíûõ ëîãè÷åñêèõ âûðàæåíèé èñïîëüçó-
þòñÿ ñêîáêè. Ïðèìåðû:

(5 > 3) And ("A" = "B") = False


(5 > 3) Or ("A" = "B") = True
Not (5 > 3) = False
Îïåðàöèè 101

Îïåðàöèÿ Not (Íå) — ýòî ñïåöèàëüíàÿ îïåðàöèÿ,


îáðàáàòûâàþùàÿ òîëüêî îäèí îïåðàíä. Êðîìå òîãî,
îïåðàíä äîëæåí áûòü áóëåâûì çíà÷åíèåì (True (Èñ-
 ÿçûêå C# âìåñòî îïå- òèíà) èëè False (Ëîæü)). Îïåðàòîð Not èçìåíÿåò
ðàòîðà Not èñïîëüçóåòñÿ çíà÷åíèå False íà True èëè çíà÷åíèå True íà False.
âîñêëèöàòåëüíûé çíàê (!). Ïîñìîòðèòå íà ñëåäóþùèå ïðèìåðû.
Âîò ïðèìåð åãî èñïîëüçî-
âàíèÿ â êîäå íà C#: Not (True)
Not (Not (True))
textBox3.Visible =
!(textBox1.Visible); Âðÿä ëè âàì ìîæåò ïîíàäîáèòüñÿ ïîñëåäíåå âû-
ðàæåíèå, íî îíî òîæå ïðàâèëüíîå!
Ñëåäóþùèé ïðèìåð äåìîíñòðèðóåò, êàê èñïîëü-
çîâàòü îïåðàöèþ Not, ÷òîáû ñäåëàòü ïåðâîíà÷àëüíî
âèäèìûìè, à çàòåì — íåâèäèìûìè òåêñòîâûå ïîëÿ.
Íå çàáûâàéòå, îïåðàöèÿ Not ðàáîòàåò ñ áóëåâûìè
ïåðåìåííûìè (ïåðåìåííûìè òèïà Boolean).
TextBox1.Visible = True
TextBox2.Visible = True

è
TextBox1.Visible = Not True
TextBox2.Visible = Not True

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


7.6. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Ëîãèêà», îïèñàííûé â ïàðàã-
Microsoft-CD
ðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñ-
ïàêîâûâàþùåìñÿ àðõèâå Ëîãèêà.exe.

7.4. Îòëàäêà êîäà


Âû ìíîãîãî äîñòèãëè! Âû ñîçäàëè, ïîñòðîèëè è çàïó-
ñòèëè ìíîæåñòâî ïðîåêòîâ. Âîçìîæíî, íå âñå âàøè
ïðîåêòû ñêîìïèëèðîâàëèñü ñ ïåðâîé ïîïûòêè, íî
âû, âåðîÿòíî, óæå íàó÷èëèñü ïîíèìàòü, â ÷åì îøèáêè
â âàøåì êîäå, è êàê ýòè îøèáêè èñïðàâëÿòü. Ðàññìîò-
ðèì, êàê èñïîëüçîâàòü ñïåöèàëüíûå èíñòðóìåíòû
äëÿ ïîèñêà îøèáîê. Èñïðàâëåíèå îøèáîê â êîäå íà-
çûâàåòñÿ îòëàäêîé. Îòëàäêà — íåîáõîäèìûé øàã
äëÿ ïîëó÷åíèÿ ïðîãðàìì, ðàáîòàþùèõ áåç îøèáîê è
102 Ãëàâà 7

âûäàþùèõ ïðàâèëüíûå ðåçóëüòàòû. Ñíà÷àëà âû


óâèäèòå, êàê Visual Studio ïîìîãàåò îòëàæèâàòü êîä
åùå ïðè åãî íàïèñàíèè.
1. Ñîçäàéòå íîâîå ïðèëîæåíèå Windows, íàçî-
âèòå åãî «Îòëàäêà». Äîáàâüòå íà ôîðìó Form1
îäíó êíîïêó è îäíî òåêñòîâîå ïîëå. Âû-
ïîëíèòå äâîéíîé ùåë÷îê ïî êíîïêå Button1
è ââåäèòå ñëåäóþùèé êîä:

MyName = "Bill"
TextBox1.Text = MyName

2. Îáðàòèòå âíèìàíèå, ÷òî åùå äî ïîñòðîåíèÿ


ïðîåêòà Visual Studio .NET ïîä÷åðêíåò
MyName â ïåðâîé è âòîðîé ñòðîêàõ âîëíèñ-
òîé ñèíåé ëèíèåé. Ýòî îçíà÷àåò, ÷òî ïåðå-
ìåííàÿ MyName íå îáúÿâëåíà. Ñèíÿÿ ëèíèÿ
ïðåäóïðåæäàåò âàñ, ÷òî â êîäå ÷òî-òî íåïðà-
âèëüíî, åùå äî òîãî, êàê âû ïîïûòàåòåñü åãî
ñêîìïèëèðîâàòü.

3. Ïîïûòàéòåñü ïîñòðîèòü ïðîåêò. Â îêíå Âû-


âîä (Output) ïîÿâèòñÿ ñîîáùåíèå, ÷òî ïî-
ñòðîåíèå âûïîëíèòü íå óäàëîñü. Â ñïèñêå
çàäàíèé Ñïèñîê çàäà÷ (Task List) áóäåò ñîîá-
ùåíî, ïî÷åìó ïîñòðîåíèå íå óäàëîñü. Âû
óâèäèòå â ýòîì ñïèñêå äâå ñòðîêè, ñîîáùàþ-
ùèå, ÷òî èìÿ MyName íå îáúÿâëåíî.
Îïåðàöèè 103

4. Âûïîëíèòå äâîéíîé ùåë÷îê ïî ïåðâîìó ñî-


îáùåíèþ â ñïèñêå Ñïèñîê çàäà÷ (Task List).
 êîäå êóðñîð ïåðåìåñòèòñÿ â òî ìåñòî, â êî-
òîðîì îáíàðóæåíà îøèáêà.

5. Çàìåòüòå, ÷òî èìÿ MyName ïîäñâå÷åíî —


èìåííî â íåì è çàêëþ÷àåòñÿ ïðîáëåìà, êîòî-
ðóþ íóæíî ðåøèòü. Äîáàâüòå â îáðàáîò÷èê
ñëåäóþùóþ ñòðîêó êîäà (ïåðåä íàïèñàííû-
ìè ðàíåå):
Dim MyName As String

Âîëíèñòûå ñèíèå ëèíèè èñ÷åçíóò.

6. Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Îí ñêîìïèëè-


ðóåòñÿ áåç îøèáîê. Âû óñïåøíî îòëàäèëè
ïðîãðàììó.

Ïîøàãîâîå âûïîëíåíèå êîäà. Visual Studio .NET


íå ìîæåò ñàìîñòîÿòåëüíî îáíàðóæèòü íåêîòîðûå
îøèáêè â êîäå. Ïðîãðàììà ìîæåò ñêîìïèëèðîâàòü-
ñÿ, íî ðåçóëüòàòû åå ðàáîòû áóäóò íåïðàâèëüíûìè.
Ýòî ïðîèñõîäèò, åñëè îøèáêè èìåþòñÿ â ëîãèêå ðà-
áîòû ïðîãðàììû, à íå â ñèíòàêñèñå.
 òàêèõ ñëó÷àÿõ áûâàåò ïîëåçíî ïîøàãîâî âûïîë-
íèòü êîä, ñòðîêó çà ñòðîêîé, ÷òîáû óâèäåòü, êàê îí
âûïîëíÿåòñÿ è êàêîâû ðåçóëüòàòû åãî âûïîëíåíèÿ.
Îáû÷íî â êîäå çàäàåòñÿ òî÷êà îñòàíîâà, à çàòåì, íà÷è-
íàÿ ñ ýòîé òî÷êè, êîä âûïîëíÿåòñÿ ïîøàãîâî. Òî÷êà
îñòàíîâà ñëóæèò çíàêîì îñòàíîâêè — âûïîëíåíèå
ïðåðûâàåòñÿ â ñòðîêå êîäà, êîòîðóþ âû ïîìåòèëè
òî÷êîé îñòàíîâà. Íàæèìàéòå êíîïêó {F11} äëÿ âû-
ïîëíåíèÿ ïî î÷åðåäè êàæäîé ñòðîêè êîäà.
104 Ãëàâà 7

1. Íàéäèòå â îáðàáîò÷èêå íàæàòèÿ êíîïêè


Button1 ñëåäóþùóþ ñòðîêó:
MyName = "Bill"
Ïîìåñòèòå êóðñîð â ýòó ñòðîêó. Ùåëêíèòå
ïî íåé ïðàâîé êíîïêîé ìûøè è âûáåðèòå â
ïîÿâèâøåìñÿ ìåíþ ïóíêò Âñòàâèòü òî÷êó
îñòàíîâà (Insert Breakpoint).

2. Ñòðîêà áóäåò âûäåëåíà êîðè÷íåâûì öâåòîì, è


ðÿäîì ñ íåé íà ïîëå ïîÿâèòñÿ êîðè÷íåâûé êðó-
æîê. Ïîñòðîéòå è çàïóñòèòå ïðîãðàììó. Êîãäà
ôîðìà çàãðóçèòñÿ, íàæìèòå êíîïêó íà íåé.

3. Íà÷íåò âûïîëíÿòüñÿ îáðàáîò÷èê. Êîãäà âû-


ïîëíåíèå äîéäåò äî ñòðîêè, â êîòîðóþ âû ïî-
ìåñòèëè òî÷êó îñòàíîâà (MyName = "Bill"),
âûïîëíåíèå ïðåðâåòñÿ. Ýòà ñòðîêà êîäà åùå
íå âûïîëíèëàñü. Îíà âûäåëåíà æåëòûì öâå-
òîì, è â êîðè÷íåâîì êðóæêå ðÿäîì ñ íåé òå-
ïåðü ïîêàçàíà æåëòàÿ ñòðåëêà.
Îïåðàöèè 105

4. Â ðåäàêòîðå êîäà ïîäâåäèòå êóðñîð ê ïåðå-


ìåííîé MyName. Ïîÿâèòñÿ ïîäñêàçêà, ïîêà-
çûâàþùàÿ çíà÷åíèå ýòîé ïåðåìåííîé. Ïîêà
÷òî â íåé íåò íè÷åãî (MyName = Nothing),
ïîòîìó ÷òî ïåðåìåííàÿ áûëà îáúÿâëåíà, íî
åé íå ïðèñâàèâàëîñü çíà÷åíèå.

5. Â ðåäàêòîðå êîäà ïîäâåäèòå êóðñîð ê ñâîéñò-


âó Text ýëåìåíòà TextBox1. Ïîÿâèòñÿ ïîä-
ñêàçêà, ñîîáùàþùàÿ âàì çíà÷åíèå ñâîéñòâà
Text. Â äàííûé ìîìåíò Text = TextBox1.

6. Íàæìèòå êëàâèøó {F11}. Ïðè ýòîì âûïîëíèò-


ñÿ òåêóùàÿ ñòðîêà êîäà (MyName = "Bill"), è
áóäåò âûäåëåíà æåëòûì ñëåäóþùàÿ. Â ðå-
äàêòîðå êîäà ïîäâåäèòå êóðñîð ê èìåíè ïåðå-
ìåííîé MyName â ñòðîêå MyName = "Bill".
Ïîäñêàçêà ñîîáùèò, ÷òî MyName = "Bill",
ïîñêîëüêó ýòîé ïåðåìåííîé òîëüêî ÷òî áûëî
ïðèñâîåíî çíà÷åíèå.
106 Ãëàâà 7

7. Â ðåäàêòîðå êîäà ïîäâåäèòå êóðñîð ê ñâîéñò-


âó Text ýëåìåíòà TextBox1. Ïîäñêàçêà ñîîá-
ùèò, ÷òî Text = TextBox1. Ýòî çíà÷åíèå íå
èçìåíèëîñü.

8. Åùå ðàç íàæìèòå êëàâèøó {F11}. Ñòðîêà


êîäà áóäåò âûïîëíåíà, è ñëåäóþùàÿ ñòðîêà
âûäåëèòñÿ æåëòûì öâåòîì. Ïîäâåäèòå êóð-
ñîð ìûøè ê èìåíè ïåðåìåííîé MyName â
ñòðîêå MyName = Bill. Ïîäñêàçêà ñîîá-
ùèò, ÷òî MyName = "Bill", ïîñêîëüêó çíà-
÷åíèå ýòîé ïåðåìåííîé íå èçìåíÿëîñü.

9. Â ðåäàêòîðå êîäà ïîäâåäèòå êóðñîð ê ñâîéñò-


âó Text ýëåìåíòà TextBox1. Ïîäñêàçêà ñîîá-
ùèò, ÷òî Text = "Bill", ïîñêîëüêó ìû
òîëüêî ÷òî ïðèñâîèëè ýòîìó ñâîéñòâó çíà÷å-
íèå ïåðåìåííîé MyName.

Åùå ðàç íàæìèòå êëàâèøó {F11}. Îïÿòü ïîÿ-


âèòñÿ ôîðìà, ïîñêîëüêó îáðàáîò÷èê çàêîí÷èë
âûïîëíÿòüñÿ. Íàæìèòå êíîïêó ñî çíà÷êîì
â óãëó ôîðìû, ÷òîáû çàêðûòü åå.
Îïåðàöèè 107

10. Â ðåäàêòîðå êîäà ùåëêíèòå ïðàâîé êíîïêîé


â íà÷àëå ñòðîêè ñ òî÷êîé îñòàíîâà. Èç ïîÿ-
âèâøåãîñÿ êîíòåêñòíîãî ìåíþ âûáåðèòå
ïóíêò Óäàëèòü òî÷êó îñòàíîâà (Remove
Breakpoint), ÷òîáû óäàëèòü òî÷êó îñòàíîâà.

Âû çàêîí÷èëè ñåàíñ îòëàäêè. Î÷åíü óäîáíî èìåòü


âîçìîæíîñòü âûïîëíÿòü êîä øàã çà øàãîì. Ìîæíî
îòñëåäèòü ðàáîòó ñâîåé ïðîãðàììû. Èíîãäà ìîæíî
òàêèì îáðàçîì îáíàðóæèòü, ÷òî âû ñëó÷àéíî óêàçàëè
ïðîãðàììå âûïîëíÿòü êîä íå â òîì ïîðÿäêå, â êàêîì
íóæíî, èëè èñïîëüçîâàëè â îïåðàòîðå ïðèñâàèâàíèÿ
íå òó ïåðåìåííóþ. Ïîøàãîâîå âûïîëíåíèå ïðîãðàì-
ìû ïîçâîëÿåò îïðåäåëèòü, ãäå èìåííî ïðîãðàììà íà-
÷èíàåò ðàáîòàòü íåïðàâèëüíî. Âûïîëíÿÿ ñòðîêè êîäà,
ìîæíî îòñëåæèâàòü çíà÷åíèÿ ñâîéñòâ è ïåðåìåí-
íûõ, ïîäâîäÿ ê íèì êóðñîð ìûøè â îêíå ðåäàêòîðà
êîäà. Ýòè çíà÷åíèÿ îáíîâëÿþòñÿ ïðè âûïîëíåíèè
ñòðîê êîäà.
Ðàññìîòðåííûå ìåòîäèêè îòëàäêè ñòàíîâÿòñÿ
âåñüìà ïîëåçíûìè, êîãäà êîä ñòàíîâèòñÿ ñëîæíûì.
Ñëîæíûé êîä ñëîæíåå îòëàæèâàòü. Ñêîðî âû óçíàå-
òå, êàê óïðàâëÿòü ïîðÿäêîì âûïîëíåíèÿ êîäà ñ ïî-
ìîùüþ îïåðàòîðîâ âåòâëåíèÿ è öèêëîâ. Îòëàäî÷íûå
èíñòðóìåíòû íåçàìåíèìû äëÿ îòñëåæèâàíèÿ âû-
ïîëíåíèÿ ýòèõ îïåðàòîðîâ â ïðîãðàììàõ.
108 Ãëàâà 7

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


7.7. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ïîòðåíèðîâàòüñÿ â èñïîëüçîâàíèè íàâûêîâ îò-
ëàäêè íà ïðèìåðå ïðîåêòà «Îòëàäêà». Ãîòîâûé
Microsoft-CD
ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ
àðõèâå Îòëàäêà.exe. Âû äîëæíû çàïèñàòü â
òåêñòîâîì ôàéëå, â äîêóìåíòå Word èëè ïðî-
ñòî íà áóìàãå, îòâåòû íà òðè âîïðîñà:
1. Êàêîå çíà÷åíèå âû ââåëè â òåêñòîâîå ïîëå
íà ôîðìå?
2. Êàêîå êîíå÷íîå çíà÷åíèå ó ïåðåìåííîé
AnswerOne?
3. Êàêîå êîíå÷íîå çíà÷åíèå ó ïåðåìåííîé
AnswerTwo?
Êîä â ôîðìå íàìåðåííî ñäåëàí çàïóòàííûì è
ñëîæíûì, ÷òîáû âû íå ïûòàëèñü óãàäàòü, êàê ïðî-
ãðàììà ïîëó÷àåò îòâåòû. Ïîìåñòèòå òî÷êó îñòàíîâà
â êîäå è îòñëåæèâàéòå åãî âûïîëíåíèå øàã çà øà-
ãîì. ×òîáû óçíàòü çíà÷åíèå ïåðåìåííîé, ïîäâåäèòå
ê íåé êóðñîð ìûøè ïîñëå òîãî, êàê ñòðîêà êîäà âû-
ïîëíèòñÿ.

7.8. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET


ñîçäàòü ïðîåêò äëÿ âû÷èñëåíèÿ îáúåìîâ êóáà
è ñôåðû. Ñîçäàéòå ôîðìó âðîäå ýòîé:
Îïåðàöèè 109

Äëèíà ðåáðà êóáà ââîäèòñÿ â ïåðâîì òåêñòîâîì


ïîëå, à ðàäèóñ ñôåðû — âî âòîðîì.
Èç êóðñà ãåîìåòðèè âîçüìåì ôîðìóëû äëÿ âû-
÷èñëåíèé:
q Îáúåì êóáà — ýòî äëèíà åãî ðåáðà â òðåòüåé
ñòåïåíè (óìíîæåííàÿ ñàìà íà ñåáÿ 3 ðàçà).
q Îáúåì ñôåðû — ýòî äðîáü 4/3, óìíîæåííàÿ íà
÷èñëî π è íà ðàäèóñ â òðåòüåé ñòåïåíè.  êà÷å-
ñòâå çíà÷åíèÿ π ìîæíî èñïîëüçîâàòü 3,14 èëè
Math.PI.

Äîïîëíèòåëüíîå çàäàíèå. Ñìîæåòå ëè âû ïîäî-


áðàòü òàêèå çíà÷åíèÿ äëèíû ðåáðà è ðàäèóñà, êîòîðûå
äàâàëè áû îäèíàêîâûå îáúåìû, õîòÿ áû ñ òî÷íîñòüþ â
4 äåñÿòè÷íûõ ðàçðÿäà?
Åñëè âû õîðîøî ðàçáèðàåòåñü â ìàòåìàòèêå, ìî-
æåòå ïîïðîáîâàòü äîáàâèòü íà ôîðìó åùå îäíó ÷àñòü,
êîòîðàÿ âû÷èñëÿåò äëèíó ðåáðà êóáà è ðàäèóñ ñôå-
ðû ïî çàäàííûì îáúåìàì.
Òåñò ïî òåìå «Îïåðàöèè»
1. ×òî èñïîëüçóåòñÿ äëÿ èçìåíåíèÿ ïîðÿäêà âûïîëíåíèÿ îïåðàöèé?

m Ñêîáêè

m Òî÷êè

m Àìïåðñåíäû

m Ïëþñû

2. Êàêàÿ îïåðàöèÿ èñïîëüçóåòñÿ äëÿ êîíêàòåíàöèè ñòðîê?

m And

m Not

m &

m =

3. Êàêèì áóäåò ðåçóëüòàò îïåðàöèè Variable = "5" & "5"?

m 55

m 10

m 25

m 5

4. Ðåçóëüòàòîì êàêîé ëîãè÷åñêîé îïåðàöèè ÿâëÿåòñÿ True?

m 2 * 2 = 5

m Not (3 * 3 = 9)

m 2 * 2 = 5 And 3 * 3 = 9

m 2 * 2 = 5 Or 3 * 3 = 9
Ãëàâà 8

Âåòâëåíèå: íåïîëíàÿ
ôîðìà
8.1. Áóëåâà ëîãèêà
8.2. Îïåðàöèè ñðàâíåíèÿ
8.3. Îïåðàòîð If...Then
8.4. Ìíîæåñòâåííûå óñëîâèÿ
8.5. Áóëåâû îïåðàöèè â êîäå

 1994 ãîäó
íà îñíîâå
ñèñòåìû ïðîãðàììèðîâà-
íèÿ Visual Basic áûëà ñî-
çäàíà ñèñòåìà ïðîãðàì-
ìèðîâàíèÿ äëÿ ïðèêëàä-
íûõ ïðîãðàìì, êîòîðàÿ
ïîëó÷èëà íàçâàíèå Visual
Basic for Applications (VB
äëÿ ïðèëîæåíèé). Ïåðâûé
âàðèàíò VBA 1.0 ïîÿâèëñÿ
â ñîñòàâå MS Office 4.0, à
â ñîñòàâ MS Office 2000
âîøëà ñèñòåìà VBA 6.0,
êîòîðàÿ èñïîëüçóåòñÿ â
øåñòè ïðèëîæåíèÿõ —
Word, Excel, PowerPoint,
Access, Outlook è Front-
page.
112 Ãëàâà 8

8.1. Áóëåâà ëîãèêà


Êîìïüþòåðíûå ïðîãðàììû õîðîøî óìåþò èñïîëüçî-
âàòü áóëåâó ëîãèêó. Â ýòîé ëîãèêå îòâåòû íà âñå âî-
ïðîñû âñåãäà èëè «äà» (True) èëè «íåò» (False) —
íåò íèêàêèõ «âîçìîæíî», «ïîõîæå» èëè «ïî÷òè».
Âîò íåñêîëüêî ïðèìåðîâ åå èñïîëüçîâàíèÿ.

4 = 4
4 äåéñòâèòåëüíî ðàâíî 4? Äà, True.

3 = 1 + 3
3 äåéñòâèòåëüíî ðàâíî 1 + 3? Íåò, False.

3 = (6 + 12)/(1 + 5)
3 äåéñòâèòåëüíî ðàâíî (6 + 12)/(1 + 5)? Äà, True.

Êàê âèäèòå, â êàæäîì ïðèìåðå îòâåò — èëè


«äà», èëè «íåò». Èìåííî òàê ïðîãðàììà ïðèíèìàåò
ðåøåíèÿ. Åñëè îòâåò «äà» (True), ïðîãðàììà äåëàåò
îäíî. Åñëè îòâåò «íåò» (False) — äðóãîå.
Êàê è â ìàòåìàòèêå, â áóëåâîé ëîãèêå åñòü ñâîè
îïåðàöèè. Íî ýòè îïåðàöèè ðàáîòàþò íå ñ ÷èñëàìè, à
òîëüêî ñ áóëåâûìè îïåðàíäàìè, ò. å. ñî çíà÷åíèÿìè
True è False. Îíè ïîçâîëÿþò îáðàáàòûâàòü çíà÷å-
íèÿ True è False ñïåöèàëüíûìè ñïîñîáàìè. Ñ èõ
ïîìîùüþ ìîæíî îáúåäèíÿòü áóëåâû âûðàæåíèÿ, ñî-
ñòàâëÿÿ áîëåå ñëîæíûå âûðàæåíèÿ.
Åñòü òðè áóëåâûõ (ëîãè÷åñêèõ) îïåðàöèè: AND,
OR è NOT. Îïåðàöèè AND è OR îáðàáàòûâàþò äâà îïå-
ðàíäà. Îïåðàöèÿ NOT îáðàáàòûâàåò îäèí îïåðàíä. Âñå
ýòè îïåðàöèè âîçâðàùàþò ðåçóëüòàò áóëåâîãî òèïà
(Boolean). Ó êàæäîé èç ýòèõ îïåðàöèé åñòü ïðàâè-
ëà, îïðåäåëÿþùèå åå ðåçóëüòàò â çàâèñèìîñòè îò
çíà÷åíèé îïåðàíäîâ. Äàâàéòå ïîñìîòðèì íà íåñêîëü-
êî áóëåâûõ çàäà÷, èñïîëüçóþùèõ ýòè îïåðàöèè, ÷òî-
áû ïîíÿòü, êàê ðàáîòàþò îïåðàöèè.
Âåòâëåíèå: íåïîëíàÿ ôîðìà 113

Îïåðàöèÿ ëîãè÷åñêîãî óìíîæåíèÿ AND


3 = 1 + 2 AND 2 = 1 + 1
Ðåçóëüòàò — True.
Çäåñü ó íàñ åñòü äâà óòâåðæäåíèÿ, îáúåäèíåííûõ
îïåðàöèåé AND. Ñíà÷àëà ìû âû÷èñëÿåì âûðàæåíèå
3=1+2. Îíî ïðàâèëüíî, ò. å. True. Ïîòîì âû÷èñëÿåì
âûðàæåíèå 2=1+1, êîòîðîå òîæå ïðàâèëüíî — True.
Çàòåì ìû ïðîâåðÿåì âûðàæåíèå True AND True, êîòî-
ðîå ïî ïðàâèëàì âûïîëíåíèÿ îïåðàöèè AND òîæå äàåò
îòâåò True: åñëè îáà îïåðàíäà îïåðàöèè AND ðàâíû
True, òî îòâåò ýòîé îïåðàöèè — òîæå True.
3 = 1 + 2 AND 5 = 2 + 2
Ðåçóëüòàò — False.
Îïÿòü ó íàñ åñòü äâà âûðàæåíèÿ, îáúåäèíåííûõ
îïåðàöèåé AND. Ñíà÷àëà ìû âû÷èñëÿåì 3=1+2, ïî-
ëó÷àÿ ðåçóëüòàò True. Çàòåì âû÷èñëÿåì 5=2+2 —
ðàâåíñòâî íå âûïîëíÿåòñÿ, çíà÷èò, ðåçóëüòàò — False.
Çàòåì âû÷èñëÿåì âûðàæåíèå True AND False, êîòî-
ðîå ïî ïðàâèëàì îïåðàöèè AND äàñò ðåçóëüòàò False:
åñëè õîòÿ áû îäèí îïåðàíä îïåðàòîðà AND ðàâåí
False, ðåçóëüòàò âûïîëíåíèÿ îïåðàöèè áóäåò òîæå
False.
Âàì ïîíàäîáèòñÿ íåêîòîðîå âðåìÿ, ÷òîáû çàïîì-
íèòü ïðàâèëà âûïîëíåíèÿ ëîãè÷åñêèõ îïåðàöèé, íî
ïîñòåïåííî âû ê íèì ïðèâûêíåòå. Ê ñ÷àñòüþ, ìîæíî
ïåðå÷èñëèòü âñå âîçìîæíûå ñî÷åòàíèÿ îïåðàíäîâ
îïåðàöèè AND â ïðîñòîé òàáëèöå. Èõ íå îáÿçàòåëüíî
çàïîìèíàòü; ìîæåòå ïðîñòî îáðàùàòüñÿ ê ýòîé òàá-
ëèöå, êîãäà âàì áóäåò íóæíî.

Ëåâûé Ïðàâûé Ëåâûé îïåðàíä AND


îïåðàíä îïåðàíä ïðàâûé îïåðàíä
(ðåçóëüòàò îïåðàöèè)
True True True
True False False
False True False
False False False
114 Ãëàâà 8

Îïåðàöèÿ ëîãè÷åñêîãî ñëîæåíèÿ OR


3 = 1 + 2 OR 5 = 2 + 2
Ðåçóëüòàò — True.
Ñíà÷àëà ìû âû÷èñëÿåì 3=1+2, ðåçóëüòàò — True.
Çàòåì âû÷èñëÿåì 5=2+2, ðåçóëüòàò — False. Çàòåì
âû÷èñëÿåì True OR False. Ñîãëàñíî ïðàâèëàì îïå-
ðàöèè OR ìû ïîëó÷èì ðåçóëüòàò True: åñëè õîòÿ áû
îäèí îïåðàíä îïåðàöèè OR ðàâåí True, òî ðåçóëüòàò
îïåðàöèè — òîæå True. Âñå âîçìîæíûå ñî÷åòàíèÿ
îïåðàíäîâ äëÿ îïåðàöèè OR ïåðå÷èñëåíû â òàáëèöå:

Ëåâûé Ïðàâûé Ëåâûé îïåðàíä OR


îïåðàíä îïåðàíä ïðàâûé îïåðàíä
(ðåçóëüòàò îïåðàöèè)
True True True
True False True
False True True
False False False

Îïåðàöèÿ ëîãè÷åñêîãî îòðèöàíèÿ NOT


Îïåðàöèÿ NOT îáðàáàòûâàåò òîëüêî îäèí îïåðàíä.
Îíà ïðîñòî ïðåîáðàçóåò çíà÷åíèå False â True, à
çíà÷åíèå True — â False. Âîò ïðèìåðû èñïîëüçîâà-
íèÿ îïåðàöèè NOT.
NOT(3 = 1 + 2) Ðåçóëüòàò — False.
3 = 1 + 2 — ðåçóëüòàò True. NOT True — ðåçóëüòàò
False.
NOT(5 = 2 + 2) Ðåçóëüòàò — True.
5 = 2 + 2 — ðåçóëüòàò False. NOT False — ðåçóëü-
òàò True.

Îïåðàíä NOT îïåðàíä


(ðåçóëüòàò îïåðàöèè)
True False
False True
Âåòâëåíèå: íåïîëíàÿ ôîðìà 115

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


8.1. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Ëîãè÷åñêèå îïåðàöèè», êîòî-
ðûé ñòðîèò òàáëèöû èñòèííîñòè ëîãè÷åñêèõ
Microsoft-CD
îïåðàöèé. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñà-
ìîðàñïàêîâûâàþùåìñÿ àðõèâå Ëîãè÷åñêèå_
îïåðàöèè.exe.

8.2. Îïåðàöèè ñðàâíåíèÿ


Êîìïüþòåðû ìîãóò ðåøàòü î÷åíü ñëîæíûå ëîãè÷å-
ñêèå (áóëåâû) çàäà÷è, íî îíè íå óìåþò èõ ñîñòàâ-
ëÿòü. Ýòî äîëæíû äåëàòü ïðîãðàììèñòû, êîòîðûå
ñîçäàþò ïðîãðàììû, ðåøàþùèå ëîãè÷åñêèå çàäà÷è.
Êîãäà êîä âûïîëíÿåòñÿ, ïðîãðàììà ðåøàåò çàäà÷ó.
Îòâåòîì áóäåò True èëè False. Ïðîãðàììà «ïðèíè-
ìàåò ðåøåíèÿ», â çàâèñèìîñòè îò òîãî, âûïîëíÿþò-
ñÿ êàêèå-òî óñëîâèÿ (True) èëè íå âûïîëíÿþòñÿ
(False).
Âû óæå çíàåòå, ÷òî çíàê «ðàâíî» îáîçíà÷àåò
îïåðàöèþ ïðèñâàèâàíèÿ, íî îí ìîæåò îáîçíà÷àòü è
îïåðàöèþ ñðàâíåíèÿ. Â ïðèìåðàõ, êîòîðûå ìû ðàñ-
ñìîòðåëè ðàíüøå, çíàê «ðàâíî» çàäàåò âîïðîñ «Ðàâ-
íà ëè ëåâàÿ ñòîðîíà ïðàâîé? Äà èëè íåò, True èëè
False?» Åñòü è äðóãèå îïåðàöèè ñðàâíåíèÿ, ïîçâî-
ëÿþùèå âûÿñíèòü, áîëüøå ëåâàÿ ñòîðîíà ïðàâîé (>)
èëè ìåíüøå (<). Âñå ýòè îïåðàöèè çàäàþò âîïðîñ, îò-
âåò íà êîòîðûé — True èëè False. Ïðèìåðû:

3 < 4
Çàäàåòñÿ âîïðîñ: 3 ìåíüøå, ÷åì 4?
Äà, True.

2 > 5
Çàäàåòñÿ âîïðîñ: 2 áîëüøå, ÷åì 5?
Íåò, False.

Âîò ñïèñîê ÷àñòî èñïîëüçóåìûõ îïåðàöèé ñðàâ-


íåíèÿ:
116 Ãëàâà 8

Îïåðàöèÿ Çíà÷åíèå Âîïðîñ


ñðàâíåíèÿ
= Ðàâíî Ëåâàÿ ñòîðîíà ðàâíà
ïðàâîé?
> Áîëüøå Ëåâàÿ ñòîðîíà áîëüøå
ïðàâîé?
< Ìåíüøå Ëåâàÿ ñòîðîíà ìåíüøå
ïðàâîé?
>= Áîëüøå èëè Ëåâàÿ ñòîðîíà áîëüøå èëè
ðàâíî ðàâíà ïðàâîé?
<= Ìåíüøå Ëåâàÿ ñòîðîíà ìåíüøå èëè
èëè ðàâíî ðàâíà ïðàâîé?
<> Íå ðàâíî Ëåâàÿ ñòîðîíà íå ðàâíà
ïðàâîé?

Âîçìîæíî, âû ðàíüøå íå âñòðå÷àëèñü ñ îïåðà-


öèÿìè >=, <= è <>. Â êàæäîé òàêîé îïåðàöèè îáúå-
äèíåíû äâå îïåðàöèè ñðàâíåíèÿ, îáúåäèíåííûå
ëîãè÷åñêîé îïåðàöèåé OR. Íàïðèìåð, >= çíà÷èò:
ëåâàÿ ñòîðîíà áîëüøå ïðàâîé èëè (OR) ëåâàÿ ñòîðîíà
ðàâíà ïðàâîé? Îïåðàöèÿ <> çíà÷èò: ëåâàÿ ñòîðîíà
ìåíüøå ïðàâîé èëè ëåâàÿ ñòîðîíà áîëüøå ïðàâîé?
Èíûìè ñëîâàìè, îïåðàöèÿ <> ñïðàøèâàåò, íå ðàâ-
íû ëè äðóã äðóãó ëåâàÿ è ïðàâàÿ ñòîðîíû?
Âîò íåñêîëüêî ïðèìåðîâ èñïîëüçîâàíèÿ îïåðà-
öèé ñðàâíåíèÿ â áóëåâûõ âûðàæåíèÿõ. Âîçìîæíî,
âàì ïîíàäîáèòñÿ âîçâðàùàòüñÿ íàçàä è ñìîòðåòü â
òàáëèöó îïåðàöèè OR, ÷òîáû ïîíÿòü, êàê ðàáîòàåò
êàæäîå âûðàæåíèå.

3 <= 3
3 < 3 åñòü False. 3 = 3 åñòü True.
False OR True = True.
Çíà÷èò, ðåçóëüòàò îïåðàöèè «3 ìåíüøå èëè ðàâ-
íî 3» — True.

2 >= 3
2 > 3 åñòü False. 2 = 3 åñòü False.
False OR False = False
Çíà÷èò, ðåçóëüòàò îïåðàöèè «2 áîëüøå èëè ðàâ-
íî 3» — False.
Âåòâëåíèå: íåïîëíàÿ ôîðìà 117

3 <> 4
3 < 4 åñòü True. 3 > 4 åñòü False.
True OR False = True.
Ñ ïîìîùüþ îïåðàöèé Çíà÷èò, ðåçóëüòàò îïåðàöèè «3 íå ðàâíî 4» — True.
ñðàâíåíèÿ ñòðîêè ìîæíî
ñðàâíèâàòü òàê æå, êàê è 3 <> 3
÷èñëà. 3 < 3 åñòü False. 3 > 3 åñòü False.
False OR False = False.
"ABC" < "DEF" Çíà÷èò, ðåçóëüòàò îïåðàöèè «3 íå íå ðàâíî 3» —
"ABC" ìåíüøå "DEF"? Äà, False, ò. å. 3 ðàâíî 3.
True.
Âî âñåõ ýòèõ ïðèìåðàõ ìû ñðàâíèâàëè ÷èñëà. Íî
"DEF" >= "ABC"
"DEF" áîëüøå èëè ðàâíî ñ ïîìîùüþ îïåðàöèé ñðàâíåíèÿ ìîæíî ñðàâíèâàòü è
"ABC"? Äà, True. òåêñòîâûå ñòðîêè, è ïðîñòî áóëåâû çíà÷åíèÿ, íàïðè-
ìåð, òàê:

"ABC" = "DEF"
"ABC" ðàâíî "DEF"? Íåò, False.

True = True
True ðàâíî True? Äà, True.

True = False
True ðàâíî False? Íåò, False.

8.3. Îïåðàòîð If...Then


Çàäàòü â ïðîãðàììå âîïðîñ, îòâåò íà êîòîðûé — äà,
True, èëè íåò, False, ìîæíî ñ ïîìîùüþ áóëåâîé ëî-
ãèêè: îïåðàöèé ñðàâíåíèÿ è ëîãè÷åñêèõ (áóëåâûõ)
îïåðàöèé. À êàê ðåàãèðîâàòü íà ïîëó÷åííûé îòâåò?
 çàâèñèìîñòè îò îòâåòà ìîæíî âûïîëíÿòü êàêèå-òî
äåéñòâèÿ èëè íåò. Åñëè îòâåò True, ïðîãðàììà ÷òî-òî
äåëàåò. Åñëè îòâåò False, îíà íè÷åãî íå äåëàåò. Âîò
ïðèìåðû ïðèíÿòèÿ ðåøåíèÿ â ïðîãðàììå.
Åñëè óñòàíîâëåí ôëàæîê Super Size, ïîêàçàòü
áîëüøóþ êàðòèíêó.
Ðàñøèôðóåì ïîäðîáíåå:
Ôëàæîê Super Size óñòàíîâëåí? Îòâåò True.
Ïîêàçàòü áîëüøóþ êàðòèíêó.
118 Ãëàâà 8

Ôëàæîê Super Size óñòàíîâëåí? Îòâåò False.


Íå ïîêàçûâàòü áîëüøóþ êàðòèíêó.
Åñëè çíà÷åíèå ïåðåìåííîé TotalLitres áîëüøå 0,
òî âû÷èñëèòü öåíó áåíçèíà.
Ïîäðîáíåå:
Çíà÷åíèå ïåðåìåííîé TotalLitres > 0? Îòâåò
True. Âû÷èñëèòü öåíó áåíçèíà.
Çíà÷åíèå ïåðåìåííîé TotalLitres > 0? Îòâåò
False. Íå âû÷èñëÿòü öåíó áåíçèíà.
 ïðèìåðàõ çàäàþòñÿ âîïðîñû, íà êîòîðûå ìîæ-
íî îòâåòèòü True èëè False. Â ýòèõ âîïðîñàõ èñïîëü-
çóþòñÿ îïåðàöèè ñðàâíåíèÿ. Îòâåòû íà âîïðîñû —
âñåãäà True èëè False. Åñëè îòâåò — True, òî âû-
ïîëíÿþòñÿ êàêèå-òî äåéñòâèÿ. Åñëè îòâåò False, òî
íèêàêèå äåéñòâèÿ íå âûïîëíÿþòñÿ.
Âû çàìåòèëè, ÷òî â ïðèìåðàõ èñïîëüçóþòñÿ ñëî-
âà «åñëè» è «òî»? Åñëè óñëîâèå âûïîëíÿåòñÿ (True),
òî ÷òî-òî ïðîèñõîäèò. Åñëè óñëîâèå íå âûïîëíÿåòñÿ
(False), íè÷åãî íå ïðîèñõîäèò. Åñëè âû õîòèòå, ÷òî-
áû ïðîãðàììà ïðèíèìàëà ðåøåíèÿ, èñïîëüçóéòå îïå-
ðàòîð «åñëè...òî» (If...Then). Â Visual Basic .NET
ñèíòàêñèñ ýòîãî îïåðàòîðà òàêîé:
If Óñëîâèå Then
Ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ
End If
Âîò ïðèìåð êîäà íà Visual Basic .NET:
If myAge = 15 Then
MessageBox.Show("I am 15.")
End If

Ñëîâî If — êëþ÷åâîå ñëîâî Visual Basic .NET,


ïîýòîìó îíî âûäåëåíî ïîëóæèðíûì øðèôòîì. Óñëî-
âèå èäåò ñðàçó ïîñëå ñëîâà If. Â óñëîâèè ñ ïîìîùüþ
îïåðàöèè ñðàâíåíèÿ çàäàåòñÿ âîïðîñ, íà êîòîðûé
äàåòñÿ îòâåò True èëè False. Çíà÷åíèå ïåðåìåííîé
myAge ðàâíî 15?
Ñëîâî Then èäåò ñðàçó ïîñëå óñëîâèÿ. Ýòî òîæå
êëþ÷åâîå ñëîâî Visual Basic.NET, ïîýòîìó îíî âûäå-
ëåíî ïîëóæèðíûì øðèôòîì. Ïîñëå ñëîâà Then èäåò
Âåòâëåíèå: íåïîëíàÿ ôîðìà 119

êîä, êîòîðûé äîëæåí âûïîëíÿòüñÿ, åñëè âûïîëíÿ-


åòñÿ óñëîâèå (îòâåò íà âîïðîñ — True). Ýòîò êîä çà-
ïèñàí ñ îòñòóïîì äëÿ óäîáñòâà âîñïðèÿòèÿ. Åñëè
óñëîâèå âûïîëíÿåòñÿ (True), ïðîãðàììà âûâîäèò
îêíî ñîîáùåíèÿ ñ òåêñòîì «I am 15.» Ñëîâà End If
ïîñëå óñëîâíîãî êîäà — ýòî òîæå êëþ÷åâûå ñëîâà.
Ñëîâà End If çàâåðøàþò îïåðàòîð If...Then.
Ïîïðîáóåì ïðèìåíèòü ýòè îïåðàòîðû! Ñîçäàéòå
íîâîå ïðèëîæåíèå Windows è íàçîâèòå åãî «If_Then».
Ïîìåñòèòå íà ôîðìó òåêñòîâîå ïîëå è êíîïêó.
Âûïîëíèòå ïî êíîïêå äâîéíîé ùåë÷îê, ÷òîáû îòðå-
äàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â îá-
ðàáîò÷èê ñëåäóþùèé êîä:
Dim myAge As Integer
myAge = 15
If myAge = 15 Then
TextBox1.Text = "I am 15."
End If

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó.


Êîä îáúÿâëÿåò ïåðåìåííóþ myAge è ïðèñâàèâàåò åé
çíà÷åíèå 15. Ïîñëå êëþ÷åâîãî ñëîâà If çàäàåòñÿ âî-
ïðîñ: myAge ðàâíî 15? Îòâåò — True, ïîñêîëüêó ìû
òîëüêî ÷òî ïðèñâîèëè ïåðåìåííîé myAge çíà÷åíèå
15. Ïîñêîëüêó îòâåò True, âûïîëíÿåòñÿ êîä ïîñëå
êëþ÷åâîãî ñëîâà Then.  òåêñòîâîì ïîëå ïîÿâëÿåòñÿ
òåêñò «I am 15.»
À òåïåðü èçìåíèì êîä ñ myAge = 15 íà:
myAge = 14

Åùå ðàç ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå


êíîïêó. ×òî ïðîèçîéäåò? Íè÷åãî? Íà ýòîò ðàç myAge
ïðèñâîåíî çíà÷åíèå 14. Ïîñëå êëþ÷åâîãî ñëîâà If
çàäàåòñÿ âîïðîñ: myAge ðàâíî 15? Òåïåðü îòâåò —
False, è êîä ïîñëå êëþ÷åâîãî ñëîâà Then íå âûïîë-
íÿåòñÿ. Íè÷åãî íå ïðîèñõîäèò. Òåêñò â òåêñòîâîì
ïîëå íå èçìåíÿåòñÿ.
Äàâàéòå ðàçáåðåì åùå îäèí ïðèìåð. Äîáàâüòå íà
ôîðìó ôëàæîê è êíîïêó. Ñîçäàéòå îáðàáîò÷èê íà-
æàòèÿ âòîðîé êíîïêè:
120 Ãëàâà 8

If CheckBox1.Checked = True Then


TextBox1.Text="I am checked."
End If
Âñå îïåðàòîðû óñëîâíîãî
êîäà ìåæäó If...Then... Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Óñòàíîâèòå ôëà-
End If ëó÷øå âûäåëÿòü îò-
ñòóïîì. Ýòî ñäåëàåò êîä
æîê è íàæìèòå âòîðóþ êíîïêó. Óñëîâèå âûïîëíÿåò-
áîëåå ïîíÿòíûì. Äàæå ñÿ — True (âû óñòàíîâèëè ôëàæîê), è òåêñò â
åñëè âåñü êîä, âûïîëíÿþ- òåêñòîâîì ïîëå èçìåíèòñÿ íà «I am checked.»
ùèéñÿ ïî óñëîâèþ, — ýòî Åùå ðàç çàïóñòèòå ïðîåêò. Íà ýòîò ðàç íàæìèòå
òîëüêî îäèí îïåðàòîð, åãî âòîðóþ êíîïêó, íå óñòàíàâëèâàÿ ôëàæîê. ×òî ïðîè-
ñòîèò âûäåëèòü îòñòóïîì. çîéäåò? Íè÷åãî. Íà ýòîò ðàç óñëîâèå íå âûïîëíÿåò-
Ïî óìîë÷àíèþ Visual Studio ñÿ — False (ôëàæîê íå óñòàíîâëåí), è òåêñò íå
.NET àâòîìàòè÷åñêè âûäå-
ëÿåò òàêîé êîä îòñòóïàìè.
èçìåíèòñÿ. Âàøà ïðîãðàììà ïðèíÿëà ðåøåíèå (èç-
ìåíÿòü ëè òåêñò) èñõîäÿ èç óñëîâèÿ (óñòàíîâëåí ëè
If CheckBox1.Checked = ôëàæîê).
True Then
MessageBox.Show
("Danger!")
End If
Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ
8.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «If_Then», êîòîðûé îïèñàí â
Microsoft-CD
ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñà-
ìîðàñïàêîâûâàþùåìñÿ àðõèâå If_Then.exe.

8.4. Ìíîæåñòâåííûå óñëîâèÿ


Èíîãäà ïðîãðàììàì íåîáõîäèìî ïðèíèìàòü ìíîæå-
ñòâî ðåøåíèé îäíî çà äðóãèì. Íàïðèìåð, íóæíî
ïðîâåðèòü, óñòàíîâëåí ëè ôëàæîê, âûáðàíà ëè ïîçè-
öèÿ ïåðåêëþ÷àòåëÿ, çàòåì ñðàâíèòü äâà ÷èñëà, è
ïðîâåðèòü, îñòàâèë ëè ïîëüçîâàòåëü ïóñòûì òåêñòî-
âîå ïîëå. Âñå ýòî íóæíî ñäåëàòü â îäíîé ïðîãðàììå.
Êàê? Ê ñ÷àñòüþ, íå ñëèøêîì ñëîæíî.  êîäå ìîæíî
èñïîëüçîâàòü ñòîëüêî îïåðàòîðîâ If...Then, ñêîëüêî
íóæíî. Êàê è äðóãèå îïåðàòîðû, îíè âûïîëíÿþòñÿ â
òîì ïîðÿäêå, â êàêîì âñòðå÷àþòñÿ â êîäå. Äàâàéòå
ñîçäàäèì ïðèëîæåíèå, äåìîíñòðèðóþùåå èñïîëüçî-
âàíèå íåñêîëüêèõ îïåðàòîðîâ If...Then.
Âåòâëåíèå: íåïîëíàÿ ôîðìà 121

Ïðåäïîëîæèì, ÷òî â ïðîãðàììå åñòü ôëàæîê


CheckBox1 ñ íàäïèñüþ Òðåâîãà. Åñëè ôëàæîê óñòà-
íîâëåí, ïðîãðàììà èçìåíÿåò öâåò ôîíà (BackColor)
ôîðìû íà êðàñíûé, òåêñò â òåêñòîâîì ïîëå — íà
«Ïîæàð» è âûâîäèò îêíî ñîîáùåíèÿ ñ òåêñòîì
«Îïàñíîñòü! Îïàñíîñòü!» Âñå ýòî ìîæíî ñäåëàòü ñ ïî-
ìîùüþ òðåõ îòäåëüíûõ îïåðàòîðîâ If...Then. Êàæ-
äûé èç ýòèõ îïåðàòîðîâ áóäåò ïðîâåðÿòü, óñòàíîâëåí
ëè ôëàæîê Alarms. Åñëè äà (True), òî áóäåò âûïîë-
íÿòüñÿ ñîîòâåòñòâóþùèé êîä.
Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå
åãî «Ïîæàðíàÿ òðåâîãà». Äîáàâüòå íà ôîðìó ôëà-
æîê, òåêñòîâîå ïîëå è êíîïêó. Èçìåíèòå çíà÷åíèå
ñâîéñòâà Text êíîïêè Button1 íà Òðè óñëîâèÿ.
Âûïîëíèòå äâîéíîé ùåë÷îê ïî êíîïêå, ÷òîáû îòðå-
äàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â îá-
ðàáîò÷èê ñëåäóþùèé êîä:

If CheckBox1.Checked = True Then


Form.ActiveForm.BackColor = System.Drawing._
Color.Red
End If
If CheckBox1.Checked = True Then
TextBox1.Text = "Ïîæàð"
End If
If CheckBox1.Checked = True Then
MessageBox.Show("Îïàñíîñòü! Îïàñíîñòü!")
End If

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Óñòàíîâèòå ôëà-


æîê è íàæìèòå êíîïêó ñ íàäïèñüþ Òðè óñëîâèÿ.
Îïåðàòîðû If...Then âûïîëíÿòñÿ îäèí çà äðóãèì.
Ïåðâûé îïåðàòîð If...Then èçìåíèò öâåò ôîíà ôîð-
ìû íà êðàñíûé. Âòîðîé îïåðàòîð èçìåíèò òåêñò â
òåêñòîâîì ïîëå íà «Ïîæàð». Òðåòèé îïåðàòîð âûâå-
äåò îêíî ñîîáùåíèÿ ñ òåêñòîì «Îïàñíîñòü! Îïàñ-
íîñòü!» Âî âñåõ îïåðàòîðàõ If...Then â ïðèìåðå
«Ïîæàðíàÿ òðåâîãà» ïðîâåðÿëîñü îäíî è òî æå óñëî-
âèå. Ýòî áûëî óñëîâèå

If CheckBox1.Checked = True Then


122 Ãëàâà 8

Íî â áëîêàõ If...Then âûïîëíÿëèñü ðàçíûå îïå-


ðàòîðû. Âû òîæå ñ÷èòàåòå, ÷òî îäèí è òîò æå êîä
ïîâòîðÿåòñÿ ñëèøêîì ìíîãî ðàç? Åñòü ëè ëó÷øåå
ðåøåíèå? Â Visual Basic .NET è áîëüøèíñòâå ñîâðå-
ìåííûõ ÿçûêîâ ïðîãðàììèðîâàíèÿ â îäíîì áëîêå
If...Then ìîæíî èñïîëüçîâàòü ìíîæåñòâî îïåðàòî-
ðîâ.
Òàê ÷òî êîä â ïðèëîæåíèè «Ïîæàðíàÿ òðåâîãà»
ìîæíî ïåðåïèñàòü, óïðîñòèâ åãî çà ñ÷åò óäàëåíèÿ
ëèøíèõ áëîêîâ. Îòêðîéòå ïðèëîæåíèå «Ïîæàðíàÿ
òðåâîãà». Äîáàâüòå íà ôîðìó åùå îäíó êíîïêó. Èç-
ìåíèòå åå òåêñò íà «Îäíî óñëîâèå». Âûïîëíèòå ïî
íåé äâîéíîé ùåë÷îê, ÷òîáû îòðåäàêòèðîâàòü îáðà-
áîò÷èê åå íàæàòèÿ. Äîáàâüòå â îáðàáîò÷èê ñëåäóþ-
ùèé êîä:

If CheckBox1.Checked = True Then


Form.ActiveForm.BackColor = System.Drawing._
Color.Red
TextBox1.Text = "Ïîæàð"
MessageBox.Show("Îïàñíîñòü! Îïàñíîñòü!")
End If

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Óñòàíîâèòå ôëà-


æîê è íàæìèòå êíîïêó ñ íàäïèñüþ Îäíî óñëîâèå.
Âûïîëíèòñÿ îäèí îïåðàòîð If...Then. Ìû ïîëó÷èì
îòâåò True, è âñå îïåðàòîðû â áëîêå If...Then áóäóò
âûïîëíåíû îäèí çà äðóãèì. Â ïðîãðàììå âûïîëíÿ-
þòñÿ òå æå äåéñòâèÿ, ÷òî è ðàíüøå. Îäíàêî íà ýòîò
ðàç óñëîâèå ïðîâåðÿåòñÿ òîëüêî îäèí ðàç. Òàêîé êîä
ëåã÷å ïîíèìàòü è ïèñàòü.
Èñïîëüçóÿ ïîñëåäîâàòåëüíîñòè îïåðàòîðîâ
If...Then, ìîæíî âûáèðàòü ðàçíûå âàðèàíòû â êîäå
(óñòàíàâëèâàòü ïåðåêëþ÷àòåëè).
Ðàññìîòðèì ïðèìåð.
Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå
åãî «Âûáîð öâåòà». Ïîìåñòèòå íà ôîðìó òðè ïåðå-
êëþ÷àòåëÿ è êíîïêó. Ñ ïîìîùüþ îêíà Ñâîéñòâà
Âåòâëåíèå: íåïîëíàÿ ôîðìà 123

(Properties) çàäàéòå ñëåäóþùèå çíà÷åíèÿ ñâîéñòâ.


Èçìåíèòå çíà÷åíèå ñâîéñòâà Text ó RadioButton1 íà
Red, ó RadioButton2 — íà Green, à ó RadioButton3 —
íà Blue. Ó êíîïêè Button1 èçìåíèòå çíà÷åíèå
ñâîéñòâà Text íà Óñòàíîâèòü öâåò. Óñòàíîâèòå
ñâîéñòâî Checked ó RadioButton1 â çíà÷åíèå True.
Âûïîëíèòå äâîéíîé ùåë÷îê ïî êíîïêå Button1, ÷òî-
áû îòðåäàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Äîáàâü-
òå â íåãî òàêîé êîä:

Dim myColor As System.Drawing.Color


If RadioButton1.Checked = True Then
myColor = System.Drawing.Color.Red
End If
If RadioButton2.Checked = True Then
myColor = System.Drawing.Color.Green
End If
If RadioButton3.Checked = True Then
myColor = System.Drawing.Color.Blue
End If

Form.ActiveForm.BackColor = myColor

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Óñòàíîâèòå îäèí


èç ïåðåêëþ÷àòåëåé è íàæìèòå êíîïêó ñ íàäïèñüþ
Óñòàíîâèòü öâåò. Ôîðìà è êíîïêè ïðèîáðåòóò âû-
áðàííûé öâåò. Âûáåðèòå äðóãîé ïåðåêëþ÷àòåëü è
íàæìèòå êíîïêó ñ íàäïèñüþ Óñòàíîâèòü öâåò.
Öâåò ôîðìû è êíîïîê ñòàíåò äðóãèì!
Ïîñìîòðèòå íà êîä. Ïîñëåäîâàòåëüíîñòü îïåðà-
òîðîâ If...Then ïîçâîëÿåò âûáèðàòü ðàçíûå âàðè-
àíòû îòâåòà íà âîïðîñ: «Êàêîé ïåðåêëþ÷àòåëü
âûáðàí?» Êîãäà êîä âûïîëíÿåòñÿ, ïðîãðàììà ïî-
ñòåïåííî îïðåäåëÿåò, êàêàÿ ïîçèöèÿ âûáðàíà.
Îïðåäåëèâ, êàêàÿ ïîçèöèÿ âûáðàíà, ïðîãðàììà âû-
ïîëíÿåò ñîîòâåòñòâóþùèé îïåðàòîð, óñòàíàâëèâàþ-
ùèé öâåò.
124 Ãëàâà 8

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


8.3. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Ïîæàðíàÿ òðåâîãà», êîòî-
ðûé îïèñàí â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñî-
Microsoft-CD
äåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Ïîæàðíàÿ_òðåâîãà.exe.
8.4. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Âûáîð öâåòà», êîòîðûé îïè-
ñàí â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â
ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå Âûáîð_öâåòà.
exe.

8.5. Áóëåâû îïåðàöèè â êîäå


Ìû óæå ðàçîáðàëèñü, êàê ñ ïîìîùüþ áóëåâûõ îïå-
ðàöèé îáúåäèíÿòü âûðàæåíèÿ äëÿ ðåøåíèÿ ñëîæ-
íûõ ëîãè÷åñêèõ çàäà÷. Äàâàéòå ðàçáåðåì ïðèìåð, â
êîòîðîì îïåðàöèÿ AND èñïîëüçóåòñÿ äëÿ îäíîâðå-
ìåííîé ïðîâåðêè âûïîëíåíèÿ äâóõ óñëîâèé.
Ìîäèôèöèðóåì ïðèëîæåíèå «Âûáîð öâåòà», äî-
áàâèâ â íåãî ôëàæîê, êîòîðûé ïîçâîëèò îòêëþ÷àòü
èçìåíåíèå öâåòà. Ñ ïîìîùüþ îïåðàöèè AND ñîçäà-
äèì ñîñòàâíîå óñëîâèå, êîòîðîå áóäåò ïðîâåðÿòü óñòà-
íîâêó ïåðåêëþ÷àòåëåé è ñîñòîÿíèå ôëàæêà.
Îòêðîéòå ïðèëîæåíèå «Âûáîð öâåòà». Äîáàâüòå
íà ôîðìó ôëàæîê. Èçìåíèòå çíà÷åíèå åãî ñâîéñòâà
Text íà Öâåò ñóùåñòâóåò. Îòðåäàêòèðóéòå êîä îá-
ðàáîò÷èêà íàæàòèÿ êíîïêè Button1. Çàìåíèòå êîä
â íåì íà ñëåäóþùèé:

Dim myColor As System.Drawing.Color


If RadioButton1.Checked = True And CheckBox1._
Checked = True Then
myColor = System.Drawing.Color.Red
End If
If RadioButton2.Checked = True And_
CheckBox1.Checked = True Then
myColor = System.Drawing.Color.Green
End If
Âåòâëåíèå: íåïîëíàÿ ôîðìà 125

If RadioButton3.Checked = True And CheckBox1._


Checked = True Then
myColor = System.Drawing.Color.Blue
End If
Ïîìíèòå, îïåðàöèþ AND
èñïîëüçóþò, åñëè ïðîâå- Form.ActiveForm.BackColor = myColor
ðÿþò, ðàâíû ëè îáà îïå-
ðàíäà True. Åñëè íóæíî Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó
ïðîâåðèòü, ðàâåí ëè õîòÿ ñ íàäïèñüþ Óñòàíîâèòü öâåò. Íè÷åãî íå ïðîèçîé-
áû îäèí îïåðàíä True, äåò! Öâåò íå èçìåíèòñÿ. À òåïåðü óñòàíîâèòå ôëà-
èñïîëüçóþò îïåðàöèþ OR. æîê ñ íàäïèñüþ Öâåò ñóùåñòâóåò è åùå ðàç
íàæìèòå êíîïêó ñ íàäïèñüþ Óñòàíîâèòü öâåò.
Ôîðìà è ýëåìåíòû óïðàâëåíèÿ ñòàíóò êðàñíûìè.
Âîò ÷òî ïðîèñõîäèò â ïðîãðàììå. Â óñëîâèå â áëîêå
If...Then ìû äîáàâèëè ñëåäóþùèé êîä:
And CheckBox1.Checked = True

Ýòî äîïîëíèòåëüíîå óñëîâèå. Òåïåðü, ÷òîáû öâåò


èçìåíèëñÿ, äîëæíû âûïîëíÿòüñÿ îáà óñëîâèÿ. Íà-
ïðèìåð:
RadioButton2.Checked = True And CheckBox1._
Checked = True

Îáà ýòèõ âûðàæåíèÿ äîëæíû áûòü ðàâíû True.


Ïîìíèòå, True AND True = True. Åñëè õîòÿ áû
îäíî èç âûðàæåíèé, îáúåäèíÿåìûõ îïåðàöèåé AND,
ðàâíî False, òî ðåçóëüòàò òîæå áóäåò ðàâåí False,
è öâåò íå èçìåíèòñÿ.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


8.5. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Âûáîð öâåòà-2», êîòîðûé
îïèñàí â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåð-
Microsoft-CD æèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Âûáîð_öâåòà_2.exe.
8.6. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Âûáîð ïîäàðêà», êîòîðûé ïî-
ìîæåò ïîêóïàòåëÿì âûáðàòü ïîäàðêè. Ãîòîâûé
ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ
àðõèâå Âûáîð_ïîäàðêà.exe.
126 Ãëàâà 8

1. Ñîçäàéòå ôîðìó è ïîìåñòèòå íà íåå âûïàäà-


þùèé ñïèñîê Combobox. Çàäàéòå äëÿ åãî
ñâîéñòâà Text çíà÷åíèå «Ñïèñîê ïîäàðêîâ».
Çàïîëíèòå êîëëåêöèþ Items íàçâàíèÿìè
ïîäàðêîâ.
2. Ïîìåñòèòå íà ôîðìó òåêñòîâîå ïîëå. Ñäå-
ëàéòå åãî ìíîãîñòðî÷íûì.
3. Ïðè âûáîðå ïîäàðêîâ â âûïàäàþùåì ñïèñ-
êå, â òåêñòîâîå ïîëå äîëæíû áûòü âûâåäå-
íû íàçâàíèÿ, êàê ìèíèìóì, äâóõ ïðåäìåòîâ.
4. Òåêñò âûáðàííîãî ïóíêòà ñîäåðæèòñÿ â
ñâîéñòâå SelectedItem.
5. Åñëè âû õîòèòå, ÷òîáû äâà ïðåäìåòà âûâî-
äèëèñü â ðàçíûå ñòðîêè â òåêñòîâîì ïîëå,
ïîìåñòèòå ìåæäó íèìè ñïåöèàëüíóþ êîí-
ñòàíòó Visual Basic, íàïðèìåð òàê:

TextBox1.Text = "A" & vbNewLine & "B".

Ðàçóìååòñÿ, âìåñòî A è B íóæíî âûâîäèòü


íàçâàíèÿ ïóíêòîâ âûïàäàþùåãî ñïèñêà.
8.7. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Ïðîâåðêà», êîòîðûé îñóùåñò-
âèò ïðîâåðêó ñêëîííîñòè ê ïðîãðàììèðîâà-
íèþ. Ñîçäàéòå ôîðìó, ïîõîæóþ íà ýòó:
Âåòâëåíèå: íåïîëíàÿ ôîðìà 127

Ïðè íàæàòèè êíîïêè ñ íàäïèñüþ Evaluate Re-


sults ñëîæèòå ÷èñëà èç 6 òåêñòîâûõ ïîëåé. Ïîñêîëü-
êó ñîäåðæèìîå òåêñòîâîãî ïîëÿ — ñòðîêà, à íå
÷èñëî, åå íóæíî áóäåò ïðåîáðàçîâàòü â ÷èñëî. Visual
Basic .NET ïîçâîëÿåò äåëàòü ýòî ñ èñïîëüçîâàíèåì
ôóíêöèè Val().
Åñëè ðåçóëüòàò áîëüøå 40, âûâåäèòå â òåêñòîâîì
ïîëå ñîîáùåíèå, ÷òî ó÷àùèéñÿ — ïðåêðàñíûé êàí-
äèäàò äëÿ ïðîõîæäåíèÿ êóðñà ïðîãðàììèðîâàíèÿ.
Åñëè ðåçóëüòàò â ïðåäåëàõ 20–39, íóæíî ñîîá-
ùèòü, ÷òî óñïåøíîñòü îáó÷åíèÿ íå ãàðàíòèðóåòñÿ,
íî ìîæíî ïîïðîáîâàòü.
Åñëè ðåçóëüòàò ìåíüøå 20, òî ïðåäëîæèòå ó÷å-
íèêó âûáðàòü äðóãîå çàíÿòèå.
À êàêîâ âàø ñîáñòâåííûé ðåçóëüòàò?
8.8. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Èãðà», â êîòîðîì íóæíî ïî-
ïàñòü ïî ïîÿâëÿþùåéñÿ è èñ÷åçàþùåé ìèøåíè.
1. Èçìåíèòå ðàçìåðû ôîðìû: âûñîòó (Height)
íà 250, à øèðèíó (Width) íà 500. Íàçîâèòå
ôîðìó Zap. Äîáàâüòå íà íåå ýëåìåíòû óïðàâ-
ëåíèÿ, ÷òîáû îíà âûãëÿäåëà òàê, êàê íà ðè-
ñóíêå:

2. Öåëü èãðû — ùåëêíóòü ïî äâèæóùåéñÿ ìè-


øåíè. Êîä áóäåò äâèãàòü ìèøåíü, ÷òîáû ïî
íåé áûëî òðóäíî ïîïàñòü êóðñîðîì. Êíîïêà
ñ íàäïèñüþ Start èíèöèàëèçèðóåò è çàïóñ-
êàåò èãðó. Êíîïêà ñ íàäïèñüþ Stop çàâåðøà-
128 Ãëàâà 8

åò èãðó. Êíîïêà ñ íàäïèñüþ Exit çàêðûâàåò


ïðîãðàììó. Òðè ïåðåêëþ÷àòåëÿ ïîçâîëÿþò
âûáèðàòü óðîâåíü ñëîæíîñòè. Äîáàâüòå ýëå-
ìåíò PictureBox äëÿ ðàçìåùåíèÿ ðèñóíêà
ìèøåíè.
3. Ðèñóíîê ìèøåíè, ìèøåíü.gif, õðàíèòñÿ íà
äèñêå. Âûáåðèòå ýòîò ðèñóíîê äëÿ îòîáðà-
æåíèÿ â ýëåìåíòå PictureBox. Äàííûé ýëå-
ìåíò ñëóæèò äëÿ îòîáðàæåíèÿ êàðòèíîê.
Äëÿ ñâîéñòâà SizeMode âûáåðèòå çíà÷åíèå
StretchImage.
4. Ïðîãðàììà èñïîëüçóåò ýëåìåíò Timer, ÷òî-
áû çàñòàâèòü êîä âûïîëíÿòüñÿ ÷åðåç îïðå-
äåëåííûå èíòåðâàëû âðåìåíè. Ñîçäàâ ôîðìó,
íàéäèòå ýëåìåíò Timer â îêíå Îáëàñòü ýëå-
ìåíòîâ (Toolbox) è âûïîëíèòå ïî íåìó äâîé-
íîé ùåë÷îê. Ýëåìåíò Timer ÿâëÿåòñÿ ÷àñòüþ
ôîðìû, íî íåâèäèì ïîëüçîâàòåëþ.
5. Îáúÿâèòå ïåðåìåííóþ òèïà Integer äëÿ
ïîäñ÷åòà óäà÷íûõ ïîïàäàíèé.
6. Îáúÿâèòå ïåðåìåííóþ òèïà Integer äëÿ
ïîäñ÷åòà îáùåãî êîëè÷åñòâà ïîïûòîê.
7.  îáðàáîò÷èêå íàæàòèÿ êíîïêè ñ íàäïèñüþ
Start ñîçäàéòå êîä, êîòîðûé áóäåò äåëàòü
ñëåäóþùåå:

q Ñáðàñûâàòü â 0 çíà÷åíèÿ ïåðåìåííûõ-


ñ÷åò÷èêîâ ïîïàäàíèé è ïîïûòîê.
q Óñòàíàâëèâàòü äëÿ ñâîéñòâà Enable ýëå-
ìåíòà óïðàâëåíèÿ Timer çíà÷åíèå True.
q Åñëè âûáðàíà ïîçèöèÿ ïåðåêëþ÷àòåëÿ
RadioButton1, óñòàíàâëèâàòü äëÿ ñâîé-
ñòâà Interval ýëåìåíòà Timer çíà÷åíèå
900, à âûñîòû è øèðèíû ðèñóíêà — 40.
q Åñëè âûáðàíà ïîçèöèÿ ïåðåêëþ÷àòåëÿ
RadioButton2, óñòàíàâëèâàòü äëÿ ñâîé-
ñòâà Interval ýëåìåíòà Timer çíà÷åíèå
850, à âûñîòû è øèðèíû ðèñóíêà — 35.
Âåòâëåíèå: íåïîëíàÿ ôîðìà 129

qÅñëè âûáðàíà ïîçèöèÿ ïåðåêëþ÷àòåëÿ


RadioButton3, óñòàíàâëèâàòü äëÿ ñâîé-
ñòâà Interval ýëåìåíòà Timer çíà÷åíèå
800, à âûñîòû è øèðèíû ðèñóíêà — 30.
8.  îáðàáîò÷èêå íàæàòèÿ êíîïêè ñ íàäïèñüþ
Stop, óñòàíîâèòå äëÿ ñâîéñòâà Enable ýëå-
ìåíòà Timer çíà÷åíèå False.
9.  îáðàáîò÷èêå íàæàòèÿ êíîïêè ñ íàäïèñüþ
Exit çàâåðøèòå ïðîãðàììó êîìàíäîé End.
10.  îáðàáîò÷èê ùåë÷êà ïî ýëåìåíòó Picture-
Box äîáàâüòå êîä, êîòîðûé äîáàâèò åäèíèöó
ê çíà÷åíèþ ñ÷åò÷èêà Hits è îòîáðàçèò ýòî
çíà÷åíèå â òåêñòîâîì ïîëå «Hits».
11.  îáðàáîò÷èê ñîáûòèÿ Timer (ñäåëàéòå äâîé-
íîé ùåë÷îê ïî ýòîìó ýëåìåíòó, ÷òîáû ñî-
çäàòü îáðàáîò÷èê), äîáàâüòå ñëåäóþùèé êîä,
÷òîáû ìèøåíü äâèãàëàñü. Îí ïîäðàçóìåâàåò,
÷òî ðàçìåð ôîðìû ðàâåí 250 × 550 åäèíèö:

Dim MyRandomGenerator As System.Random


MyRandomGenerator = New System.Random
Dim RandomX As Integer
Dim RandomY As Integer
RandomX = MyRandomGenerator.Next(1, 550)
RandomY = MyRandomGenerator.Next(1, 250)
PictureBox1.SetBounds(RandomX, RandomY,_
Me.Width, Me.Height, System.Windows._
Forms.BoundsSpecified.Location)

12. Ïîñëå ýòîãî êîäà äîáàâüòå â îáðàáîò÷èê


êîä, äîáàâëÿþùèé åäèíèöó ê çíà÷åíèþ ñ÷åò-
÷èêà ïîïûòîê è ïîìåùàþùèé ýòî çíà÷åíèå
â TextBox «Total».
13.  íà÷àëå êîäà îáðàáîò÷èêà ñîáûòèÿ Timer
ñäåëàéòå öâåò ôîíà ôîðìû ñåðûì. Ïðè ïî-
ïàäàíèè â ìèøåíü öâåò ôîíà äîëæåí ñòàòü
êðàñíûì.
Òåñò ïî òåìå «Âåòâëåíèå: íåïîëíàÿ ôîðìà»
1. Ïîñëå êàêîãî êëþ÷åâîãî ñëîâà â îïåðàòîðå If...Then ðàçìåùåíî
óñëîâèå?

m End If

m Then

m If

m Else

2. ×òî îçíà÷àåò îïåðàöèÿ ñðàâíåíèÿ <>?

m Áîëüøå èëè ðàâíî

m Ìåíüøå èëè ðàâíî

m Ìåíüøå

m Íå ðàâíî

3. Êîãäà ëîãè÷åñêàÿ îïåðàöèÿ And âîçâðàùàåò çíà÷åíèå True?

m Åñëè ðàâíî True çíà÷åíèå ëåâîãî èëè ïðàâîãî îïåðàíäà

m Åñëè çíà÷åíèÿ îáîèõ îïåðàíäîâ ðàâíû True

m Åñëè çíà÷åíèÿ îáîèõ îïåðàíäîâ íå ðàâíû True

m Ïðè ëþáîì çíà÷åíèè îïåðàíäîâ

4. Êîãäà ëîãè÷åñêàÿ îïåðàöèÿ OR âîçâðàùàåò çíà÷åíèå False?

m Åñëè ðàâíî False çíà÷åíèå ëåâîãî èëè ïðàâîãî îïåðàíäà

m Åñëè çíà÷åíèÿ îáîèõ îïåðàíäîâ ðàâíû False

m Åñëè çíà÷åíèÿ îáîèõ îïåðàíäîâ íå ðàâíû False

m Ïðè ëþáîì çíà÷åíèè îïåðàíäîâ


Ãëàâà 9

Âåòâëåíèå: ïîëíàÿ ôîðìà

9.1. Âëîæåííûå îïåðàöèè If...Then


9.2. Ïðîòèâîïîëîæíûå óñëîâèÿ
9.3. Îïåðàòîð If...Then...Else
9.4. Ïîøàãîâîå âûïîëíåíèå If
9.5. Îïåðàòîðû If â Ñ# è J#
9.6. Áóëåâû îïåðàöèè è îïåðàöèè ñðàâíåíèÿ â Ñ# è J#

 1995 ãîäó
áûëà ñîçäàíà
îïåðàöèîííàÿ ñèñòåìà äëÿ
ïåðñîíàëüíûõ êîìïüþòå-
ðîâ ñ ãðàôè÷åñêèì èí-
òåðôåéñîì Windows 95,
êîòîðàÿ ñîäåðæàëà óòèëè-
òû äëÿ ðàáîòû â Èíòåðíåòå.
Ãðàôè÷åñêèé èíòåðôåéñ
ýòîé ñèñòåìû èñïîëüçó-
åòñÿ ïðàêòè÷åñêè áåç èç-
ìåíåíèé â ïîñëåäóþùèõ
âåðñèÿõ îïåðàöèîííûõ
ñèñòåì äëÿ ïåðñîíàëüíûõ
êîìïüþòåðîâ Windows
98/Me.
132 Ãëàâà 9

9.1. Âëîæåííûå îïåðàòîðû If…Then


Âíóòðü îïåðàòîðà If…Then ìîæíî ïîìåñòèòü
åùå îäèí îïåðàòîð If…Then. Âòîðîé îïåðàòîð
If…Then áóäåò âûïîëíÿòüñÿ, òîëüêî åñëè óñëîâèå â
ïåðâîì âûïîëíÿåòñÿ. Âòîðîé îïåðàòîð íàõîäèòñÿ
âíóòðè ïåðâîãî. Ãîâîðÿò, ÷òî îïåðàòîð If…Then
âëîæåí âíóòðü äðóãîãî îïåðàòîðà.
Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâè-
òå åãî «Ôëàæêè». Äîáàâüòå íà ôîðìó äâà ôëàæêà è
êíîïêó. Èçìåíèòå çíà÷åíèå ñâîéñòâà Text êíîïêè
íà Ôëàæêè óñòàíîâëåíû?. Âûïîëíèòå äâîéíîé
ùåë÷îê ïî êíîïêå, ÷òîáû îòðåäàêòèðîâàòü îáðàáîò-
÷èê åå íàæàòèÿ. Äîáàâüòå â îáðàáîò÷èê ñëåäóþùèé
êîä:

If CheckBox1.Checked = True Then


If CheckBox2.Checked = True Then
MessageBox.Show("Îáà ôëàæêà_
óñòàíîâëåíû.")
End If
End If

Ïîñòðîéòå è çàïóñòèòå ïðèëîæåíèå. Óñòàíîâèòå


ïåðâûé ôëàæîê è íàæìèòå êíîïêó ñ íàäïèñüþ
Ôëàæêè óñòàíîâëåíû?. ×òî ïðîèçîéäåò? Íè÷åãî.
Òåïåðü óñòàíîâèòå âòîðîé ôëàæîê è ñíîâà íàæìèòå
êíîïêó ñ íàäïèñüþ Ôëàæêè óñòàíîâëåíû?. Íà ýòîò
ðàç ïîÿâèòñÿ îêíî ñ ñîîáùåíèåì «Îáà ôëàæêà óñòà-
íîâëåíû.» Êàê âèäèòå, â ïåðâîé ñòðîêå êîäà åñòü
óñëîâèå:

If CheckBox1.Checked = True Then

Çà ýòèì óñëîâèåì èäåò îïåðàòîð, êîòîðûé áóäåò


âûïîëíÿòüñÿ, òîëüêî åñëè âûïîëíÿåòñÿ óñëîâèå.
Ýòî åùå îäèí îïåðàòîð If…Then, âëîæåííûé â ïåð-
âûé. Âî âëîæåííîì îïåðàòîðå If…Then åñòü ñâîå
óñëîâèå:

If CheckBox2.Checked = True Then


Âåòâëåíèå: ïîëíàÿ ôîðìà 133

 ýòîò îïåðàòîð âëîæåí ñëåäóþùèé:

MessageBox.Show("Îáà ôëàæêà óñòàíîâëåíû.")


Ìîæíî âêëàäûâàòü äðóã â
äðóãà ñòîëüêî îïåðàòîðîâ Òàê ÷òî æå ïðîèñõîäèò? Åñëè óñëîâèå â ïåðâîì
If…Then, ñêîëüêî çàõîòèòå, îïåðàòîðå âûïîëíÿåòñÿ (ôëàæîê CheckBox1 óñòà-
íî áîëüøå òðåõ-÷åòûðåõ íîâëåí), òî âûïîëíÿåòñÿ âëîæåííûé îïåðàòîð. Ýòî
âëîæåííûõ îïåðàòîðîâ áó- åùå îäèí îïåðàòîð If…Then. Åñëè óñëîâèå âî âòîðîì
äåò òðóäíî ïîíÿòü, è â íèõ îïåðàòîðå òîæå âûïîëíÿåòñÿ (ôëàæîê CheckBox2
òðóäíî áóäåò íàõîäèòü
îøèáêè. Îáÿçàòåëüíî äå-
óñòàíîâëåí), âûïîëíÿåòñÿ ñëåäóþùèé âëîæåííûé
ëàéòå îòñòóïû, èñïîëüçóÿ îïåðàòîð, è íà ýêðàí âûâîäèòñÿ îêíî ñîîáùåíèÿ.
âëîæåííûå îïåðàòîðû. Îáà óñëîâèÿ äîëæíû âûïîëíÿòüñÿ, èíà÷å îêíî ñîîá-
ùåíèÿ íå áóäåò âûâîäèòüñÿ. È Checkbox1, è Check-
box2 äîëæíû áûòü óñòàíîâëåíû.
Îáðàòèòå âíèìàíèå íà òî, ÷òî End If äëÿ ïåð-
âîãî îïåðàòîðà If…Then èäåò ïîñëå End If äëÿ
âòîðîãî If…Then. Ñ ïîìîùüþ âëîæåíèÿ ìîæíî ñî-
âìåùàòü ìíîæåñòâî îïåðàòîðîâ If…Then, ÷òîáû
êàêîé-òî êîä âûïîëíÿëñÿ òîëüêî ïðè âûïîëíåíèè
âñåõ óñëîâèé.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


9.1. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
Microsoft-CD ñîçäàòü ïðîåêò «Ôëàæêè», îïèñàííûé â ïà-
ðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìî-
ðàñïàêîâûâàþùåìñÿ àðõèâå Ôëàæêè.exe.

9.2. Ïðîòèâîïîëîæíûå óñëîâèÿ


Äî ñèõ ïîð äåéñòâèÿ â óñëîâíîì îïåðàòîðå âûïîëíÿ-
ëèñü ïðè âûïîëíåíèè óñëîâèÿ. Åñëè óñëîâèå íå âû-
ïîëíÿëîñü, íè÷åãî íå ïðîèñõîäèëî. À ÷òî, åñëè íàì
íóæíî âûïîëíèòü êàêèå-òî äåéñòâèÿ è â òîì ñëó÷àå,
åñëè óñëîâèå íå âûïîëíÿåòñÿ?
Íó, âî-ïåðâûõ, ìîæíî íàïèñàòü åùå îäèí îïåðà-
òîð If…Then ñ ïðîòèâîïîëîæíûì óñëîâèåì è ïîìåñ-
òèòü â íåãî íóæíûå ñòðîêè êîäà. Äàâàéòå ïîïðîáóåì!
134 Ãëàâà 9

Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå åãî


«IfThenOtherwise». Äîáàâüòå íà ôîðìó äâà ôëàæêà
è êíîïêó. Èçìåíèòå çíà÷åíèå ñâîéñòâà Text êíîïêè
íà IfThen. Ïîìåñòèòå â îáðàáîò÷èê åå íàæàòèÿ ñëå-
äóþùèé êîä:

If CheckBox1.Checked = True Then


Form.ActiveForm.BackColor = System.Drawing._
Color.Red
End If

If CheckBox1.Checked = False Then


Form.ActiveForm.BackColor = System.Drawing._
Color.Blue
End If

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ IfThen. Ôîðìà ñòàíåò ñèíåé. Óñòàíîâèòå
ôëàæîê CheckBox1 è åùå ðàç íàæìèòå êíîïêó ñ
íàäïèñüþ IfThen. Ôîðìà ñòàíåò êðàñíîé.
Êàê ðàáîòàåò ýòîò êîä? Â ïåðâîì îïåðàòîðå
If…Then óñëîâèå ïðîâåðÿåò, óñòàíîâëåí ëè ôëàæîê:
CheckBox1.Checked = True. Åñëè óñëîâèå âûïîë-
íÿåòñÿ, òî öâåò ôîíà (BackColor) ôîðìû èçìåíÿ-
åòñÿ íà êðàñíûé. Âòîðîé îïåðàòîð If…Then
ñîäåðæèò óñëîâèå, ïðîâåðÿþùåå, ñáðîøåí ëè ôëà-
æîê: CheckBox1.Checked = False (ïðîòèâîïî-
ëîæíîå óñëîâèå). Åñëè ýòî óñëîâèå âûïîëíÿåòñÿ, òî
öâåò ôîíà ôîðìû ìåíÿåòñÿ íà ñèíèé. Äà, â êîäå åñòü
ïîâòîðåíèÿ, íî îí ðàáîòàåò! Åãî íåäîñòàòîê — ïðè-
ñóòñòâèå äâóõ ïî÷òè îäèíàêîâûõ îïåðàòîðîâ. Òàêîé
ïîäõîä îòíèìàåò ëèøíåå âðåìÿ è ìîæåò ñòàòü ïðè-
÷èíîé îøèáîê.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


9.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «IfThenOtherwise», îïèñàííûé
Microsoft-CD â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñà-
ìîðàñïàêîâûâàþùåìñÿ àðõèâå IfThenOtherwise.
exe.
Âåòâëåíèå: ïîëíàÿ ôîðìà 135

9.3. Îïåðàòîð If…Then…Else


 ÿçûêå Visual Basic .NET åñòü àëüòåðíàòèâíàÿ
Èñïîëüçîâàíèå äâóõ îïå- âîçìîæíîñòü, èçáàâëÿþùàÿ îò íåîáõîäèìîñòè ïî-
ðàòîðîâ If…Then ñ ïðîòè- âòîðÿòü ñòðîêè êîäà è óïðîùàþùàÿ åãî ïîíèìàíèå.
âîïîëîæíûìè óñëîâèÿìè Ýòà àëüòåðíàòèâà — îïåðàòîð If…Then…Else. Ýòîò
îòíèìàåò âðåìÿ è ìîæåò îïåðàòîð òðåáóåò òîëüêî îäíîãî óñëîâèÿ, íî ïîçâîëÿ-
ïðèâåñòè ê îøèáêàì. åò âûáèðàòü, êàêèå îïåðàòîðû âûïîëíÿòü ïðè âû-
Âìåñòî ýòîãî èñïîëüçóéòå ïîëíåíèè óñëîâèÿ, à êàêèå — ïðè íåâûïîëíåíèè.
íîâûé âèä îïåðàòîðà,
Îïåðàòîð If…Then…Else èñïîëüçóåòñÿ âìåñòî äâóõ
If…Then…Else, ÷òîáû óïðî-
ñòèòü âàø êîä. îäèíàêîâûõ îïåðàòîðîâ If…Then ñ ïðîòèâîïîëîæ-
íûìè óñëîâèÿìè. Âîò åãî ñèíòàêñèñ:

If Óñëîâèå Then
Ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ 1
Else
Ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ 2
End If

Êàê ðàáîòàåò ýòîò êîä? Ñíà÷àëà ïðîâåðÿåòñÿ óñëî-


âèå. Åñëè îíî âûïîëíÿåòñÿ, òî âûïîëíÿåòñÿ Ïîñëå-
äîâàòåëüíîñòü îïåðàòîðîâ 1.  ïðîòèâíîì ñëó÷àå
âûïîëíÿåòñÿ Ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ 2.
Ñîçäàäèì ïðîãðàììó «If-Then-Else» ñ ïîìîùüþ
îïåðàòîðà If…Then…Else è äîêàæåì, ÷òî îíà ðàáî-
òàåò òî÷íî òàê æå, êàê è ñ äâóìÿ îòäåëüíûìè îïåðà-
òîðàìè If…Then ñ ïðîòèâîïîëîæíûìè óñëîâèÿìè.
Äîáàâüòå íà ôîðìó åùå îäíó êíîïêó. Èçìåíèòå
çíà÷åíèå åå ñâîéñòâà Text íà If-Then-Else.  îá-
ðàáîò÷èê åå íàæàòèÿ ââåäèòå ñëåäóþùèé êîä:

If CheckBox1.Checked = True Then


Form.ActiveForm.BackColor = System.Drawing.
Color.Red
Else
Form.ActiveForm.BackColor = System.Drawing.
Color.Blue
End If

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ If-Then-Else. Ôîðìà ñòàíåò ñèíåé. Óñòà-
íîâèòå ôëàæîê CheckBox1 è åùå ðàç íàæìèòå
136 Ãëàâà 9

êíîïêó ñ íàäïèñüþ If-Then-Else. Ôîðìà ñòàíåò


êðàñíîé. Ïðîãðàììà äåëàåò ñ ïîìîùüþ îäíîãî îïå-
ðàòîðà òî æå ñàìîå, ÷òî ðàíüøå äåëàëà ñ ïîìîùüþ
Îáðàòèòå âíèìàíèå íà òî, äâóõ! Êîä ïðîâåðÿåò, âûïîëíÿåòñÿ ëè óñëîâèå
÷òî îïåðàòîðû ïîñëå CheckBox1.Checked = True. Åñëè äà, òî âûïîëíÿ-
Then è Else çàïèñàíû ñ åòñÿ ïåðâûé îïåðàòîð è ôîðìà ñòàíîâèòñÿ êðàñíîé.
îòñòóïîì. Visual Studio  ïðîòèâíîì ñëó÷àå âûïîëíÿåòñÿ âòîðîé îïåðàòîð
.NET äåëàåò ýòî àâòîìà- è ôîðìà ñòàíîâèòñÿ ñèíåé.
òè÷åñêè — îôîðìëåííûé
òàêèì îáðàçîì êîä ëåã÷å
Äàâàéòå ðàçáåðåì åùå îäèí ïðèìåð ñ If…Then…
÷èòàòü, è îí âûãëÿäèò àê- Else. Ñîçäàäèì ïðîãðàììó «If-Then-Else-2», ïîìåñ-
êóðàòíåå. òèâ â êàæäóþ ÷àñòü îïåðàòîðà If…Then…Else íå ïî
îäíîìó îïåðàòîðó, à ïî íåñêîëüêî. Â îïåðàòîðå
If…Then…Else ïîñëå If…Then è Else ìîæíî ðàçìå-
ùàòü ñêîëüêî óãîäíî ñòðîê êîäà.
Ââåäèòå êîä îáðàáîò÷èêà íàæàòèÿ êíîïêè
Button1:

If CheckBox1.Checked = True Then


Form.ActiveForm.BackColor = System.Drawing._
Color.Red
MessageBox.Show("I'm red.")
TextBox1.Text = "I’m red.
Else
Form.ActiveForm.BackColor = System.Drawing._
Color.Blue
MessageBox.Show("I'm blue.")
TextBox1.Text = "I'm blue."
End If

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ If-Then-Else, à çàòåì óñòàíîâèòå ôëàæîê
CheckBox1 è åùå ðàç íàæìèòå êíîïêó ñ íàäïèñüþ
If-Then-Else.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


9.3. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «If-Then-Else», îïèñàííûé â
Microsoft-CD ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñà-
ìîðàñïàêîâûâàþùåìñÿ àðõèâå If_Then_Else.
exe.
Âåòâëåíèå: ïîëíàÿ ôîðìà 137

9.4. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET


ñîçäàòü ïðîåêò «If-Then-Else-2», îïèñàííûé
â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â
ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå If_Then_Else_2.
exe.
9.5. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Ãîëüô». Ñîçäàéòå ôîðìó âðî-
äå ýòîé:

Êîãäà ïðîãðàììà çàïóñêàåòñÿ, ñâîéñòâà Text


íàäïèñåé äîëæíû áûòü ïóñòûìè, à ïîëüçîâàòåëü
äîëæåí ââåñòè â òåêñòîâûå ïîëÿ êîëè÷åñòâà î÷êîâ,
íàáðàííûõ ó÷àñòíèêàìè. Ïðè íàæàòèè êíîïêè ñ íàä-
ïèñüþ Compute äîëæíî âû÷èñëÿòüñÿ ñðåäíåå êîëè-
÷åñòâî î÷êîâ. Ïîñêîëüêó ñîäåðæèìîå òåêñòîâîãî
ïîëÿ — ñòðîêà, à íå ÷èñëî, åå ïðèäåòñÿ ïðåîáðàçî-
âûâàòü â ÷èñëî. Visual Basic .NET ïîçâîëÿåò ñäåëàòü
ýòî ñ ïîìîùüþ ôóíêöèè Val(), íàõîäÿùåé ÷èñ-
ëîâîå çíà÷åíèå ñòðîêè, êîòîðîå ìîæíî ïðèñâîèòü
ïåðåìåííîé, íàïðèìåð X.

X = Val(TextBox1.Text)

Äëÿ êàæäîãî èãðîêà, åñëè åãî ÷èñëî î÷êîâ áîëü-


øå ñðåäíåãî, âûâåäèòå ñîîáùåíèå âðîäå «Õîðîøèé
ðåçóëüòàò» â ñîîòâåòñòâóþùåé íàäïèñè, â ïðîòèâ-
íîì ñëó÷àå âûâåäèòå ñîîáùåíèå «Òðåíèðóéòåñü».
138 Ãëàâà 9

9.4. Ïîøàãîâîå âûïîëíåíèå If


À òåïåðü âîñïîëüçóåìñÿ îòëàäî÷íûìè ñðåäñòâàìè
Visual Studio .NET è ïîøàãîâî âûïîëíèì êîä â îïå-
ðàòîðå If…Then…Else. Òàêèì îáðàçîì ìû ñìîæåì
óâèäåòü, êàê îí âûïîëíÿåòñÿ âíóòðè ïðîãðàììû.
Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå
åãî «Step-In-If». Ïîìåñòèòå íà ôîðìó îäíó êíîïêó è
îäèí ôëàæîê. Óñòàíîâèòå äëÿ ñâîéñòâà Checked
ôëàæêà çíà÷åíèå True. Êîãäà ïðèëîæåíèå çàïóñ-
òèòñÿ, ôëàæîê áóäåò óñòàíîâëåí. Âûïîëíèòå äâîé-
íîé ùåë÷îê ïî êíîïêå, ÷òîáû îòðåäàêòèðîâàòü
îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â îáðàáîò÷èê ñëå-
äóþùèé êîä:
Dim MyValue As Integer
MyValue = 1
If CheckBox1.Checked = True Then
MyValue = 2
Else
MyValue = 3
End If

1. Óñòàíîâèòå òî÷êó îñòàíîâà â ïåðâîé ñòðîêå


êîäà (MyValue = 1), âûïîëíèâ äâîéíîé ùåë-
÷îê â ñåðîé îáëàñòè ñëåâà îò ýòîé ñòðîêè èëè
ùåëêíóâ ïðàâîé êíîïêîé ïî ýòîé ñòðîêå è
âûáðàâ èç êîíòåêñòíîãî ìåíþ ïóíêò Âñòà-
âèòü òî÷êó îñòàíîâà (Insert Breakpoint).

2. Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Êîãäà îòêðî-


åòñÿ ôîðìà, íàæìèòå êíîïêó. Êîä âûïîë-
íèòñÿ äî ñòðîêè ñ òî÷êîé îñòàíîâà.
Âåòâëåíèå: ïîëíàÿ ôîðìà 139

3. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


òåêóùóþ ñòðîêó êîäà MyValue = 1. Ïîäñâå-
òèòñÿ ñëåäóþùàÿ ñòðîêà.

4. Åùå ðàç íàæìèòå êëàâèøó {F11}, ÷òîáû âû-


ïîëíèòü ñòðîêó êîäà
If CheckBox1.Checked = True Then
Ïîñêîëüêó ôëàæîê CheckBox1 óñòàíîâëåí,
áóäåò ïîäñâå÷åíà ñëåäóþùàÿ ñòðîêà êîäà —
MyValue = 2.
140 Ãëàâà 9

5. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ñòðîêó êîäà MyValue = 2. Áóäåò ïîäñâå÷åíà
ñòðîêà End If.

6. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ñòðîêó êîäà
End If
Áóäåò ïîäñâå÷åíà ñëåäóþùàÿ ñòðîêà.

7. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ñòðîêó êîäà
End Sub
Îïÿòü ïîÿâèòñÿ ôîðìà.
Âåòâëåíèå: ïîëíàÿ ôîðìà 141

8. Ñáðîñüòå ôëàæîê CheckBox1 è íàæìèòå êíîï-


êó. Ïîâòîðèòå ïîøàãîâîå âûïîëíåíèå îïåðà-
òîðà, íàæèìàÿ êëàâèøó {F11} è íàáëþäàÿ,
êàêèå ñòðîêè êîäà áóäóò ïîäñâå÷èâàòüñÿ è
âûïîëíÿòüñÿ. Íà ýòîò ðàç âûïîëíèòñÿ îïåðà-
òîð ïîñëå Else, ò. å. ñòðîêà MyValue = 3.

Âîò è âñå! Òåïåðü âû âèäåëè, êàê âûïîëíÿåòñÿ


îïåðàòîð If…Then…Else ïðè ðàáîòå ïðîãðàììû!

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


9.6. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Step-In-If». Ïðîâåñòè ïîøàãî-
Microsoft-CD
âîå âûïîëíåíèå ïðîåêòà òàê, êàê ýòî îïèñàíî â
ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìî-
ðàñïàêîâûâàþùåìñÿ àðõèâå Step_In_If.exe.

9.5. Îïåðàòîðû If â C# è J#
 ÿçûêàõ C# è J# åñòü óñëîâíûå îïåðàòîðû, ðàáîòà-
þùèå òî÷íî òàê æå, êàê If…Then è If…Then…Else â
ÿçûêå Visual Basic .NET. Íî èõ ñèíòàêñèñ íåìíîãî
äðóãîé. Âîò ïðèìåð èç C#:

int MyAge;
MyAge=15;
if (MyAge==15)
{
MessageBox.Show("I am 15.");
MessageBox.Show("I am still 15.");
}
142 Ãëàâà 9

Ñíà÷àëà ìû îáúÿâëÿåì öåëî÷èñëåííóþ ïåðåìåí-


íóþ MyAge è ïðèñâàèâàåì åé íà÷àëüíîå çíà÷åíèå.
Çàòåì ìû íà÷èíàåì óñëîâíûé îïåðàòîð ñ êëþ÷åâîãî
ñëîâà if — îáðàòèòå âíèìàíèå, ÷òî âñå áóêâû â íåì
ñòðî÷íûå. Çà ýòèì ñëîâîì èäåò óñëîâèå MyAge==3.
Óñëîâèå ïîìåùåíî â ñêîáêàõ. Âû, íàâåðíîå, îáðàòè-
ëè âíèìàíèå íà äâà çíàêà «ðàâíî» ïîäðÿä. Â ÿçûêå
C# òàê îáîçíà÷àåòñÿ îïåðàöèÿ ñðàâíåíèÿ (â Visual
Basic .NET îíà îáîçíà÷àåòñÿ îäíèì çíàêîì). Îïåðà-
òîðû, êîòîðûå äîëæíû âûïîëíÿòüñÿ ïðè âûïîëíåíèè
óñëîâèÿ, ïîìåùåíû â ôèãóðíûå ñêîáêè — {...}.
×òîáû êîä áûëî óäîáíåå ÷èòàòü, íåêîòîðûå ïðîãðàì-
ìèñòû ïîìåùàþò ôèãóðíûå ñêîáêè â îòäåëüíûõ
ñòðîêàõ. Çàìåòüòå, ÷òî êàæäûé îïåðàòîð çàêàí÷èâà-
åòñÿ òî÷êîé ñ çàïÿòîé. Êðîìå òîãî, êëþ÷åâîå ñëîâî
Then âîîáùå íå èñïîëüçóåòñÿ!
Êîä íà ÿçûêå J# áóäåò òî÷íî òàêèì æå, êàê è
íà C#.
Äàâàéòå ðàçáåðåì îïåðàòîð If…Then…Else íà
ÿçûêå C#. Ïîñìîòðèòå, ÷òî åñòü îáùåãî ìåæäó ýòè-
ìè îïåðàòîðàìè â C# è Visual Basic .NET è ÷åì îíè
îòëè÷àþòñÿ.

int MyAge;
MyAge=15;
if (MyAge==16)
{
MessageBox.Show("I am 15.");
MessageBox.Show("I am still 15.");
}
else
{
MessageBox.Show("I am 16.");
MessageBox.Show("I am still 16.");
}

Óñëîâèå ñíîâà ïîìåùåíî â ñêîáêè. Çàìåòüòå, ÷òî


íà ýòîò ðàç çäåñü äâà áëîêà îïåðàòîðî⠗ îäèí ïîñëå
óñëîâèÿ è îäèí ïîñëå else. Êàæäûé áëîê ïîìåùåí â
ôèãóðíûå ñêîáêè. Çàìåòüòå, ÷òî êàæäûé îïåðàòîð
Âåòâëåíèå: ïîëíàÿ ôîðìà 143

çàêàí÷èâàåòñÿ òî÷êîé ñ çàïÿòîé. Êëþ÷åâîå ñëîâî


Then íå èñïîëüçóåòñÿ.
 J# ñèíòàêñèñ îïåðàòîðà If…Then…Else òî÷íî
òàêîé æå, êàê è â C#.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


9.7. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Ìàãè÷åñêèé êâàäðàò». Ñîçäàé-
òå òàêóþ ôîðìó, êàê ïîêàçàíî íà ðèñóíêå,
Microsoft-CD èëè, åñëè æàëü òðàòèòü âðåìÿ, èñïîëüçóéòå
ñàìîðàñïàêîâûâàþùèéñÿ àðõèâ Ìàãè÷å-
ñêèé_êâàäðàò.exe.

Ñîçäàéòå ïðîãðàììíûé êîä, êîòîðûé ÷èñëà îò


1 äî 9 ðàçìåùàåò â ìàññèâå ðàçìåðîì 3 × 3 òàê, ÷òî-
áû ñóììà â êàæäîé ñòðîêå, êàæäîì ñòîëáöå è êàæ-
äîé äèàãîíàëè áûëà îäèíàêîâîé.
Ïðè íàæàòèè êíîïêè ñ íàäïèñüþ Check the Totals
äîëæíû âû÷èñëÿòüñÿ ñóììû òðåõ ñòðîê, òðåõ ñòîëá-
144 Ãëàâà 9

öîâ è äâóõ äèàãîíàëåé, ðåçóëüòàòû äîëæíû îòîáðà-


æàòüñÿ â ïîëÿõ îò TextBox10 äî TextBox17 (îò
ëåâîãî íèæíåãî óãëà äî âåðõíåãî ïðàâîãî). Ïîñêîëü-
êó ñîäåðæèìîå òåêñòîâîãî ïîëÿ — ñòðîêà, à íå ÷èñ-
ëî, åå ïðèäåòñÿ ïðåîáðàçîâûâàòü â ÷èñëî. Visual
Basic .NET ïîçâîëÿåò ñäåëàòü ýòî ñ èñïîëüçîâàíèåì
ôóíêöèè Val(), êîòîðàÿ íàõîäèò ÷èñëîâîå çíà÷åíèå
ñòðîêè.
Êàæäàÿ ñóììà äîëæíà áûòü ðàâíà 15. Ñóììà
÷èñåë â äåâÿòè òåêñòîâûõ ïîëÿõ äîëæíà áûòü ðàâ-
íà 45.

9.6. Áóëåâû îïåðàöèè è îïåðàöèè


ñðàâíåíèÿ â C# è J#
Âû äîëæíû çíàòü åùå êîå-÷òî î ðàçëè÷èÿõ ìåæäó
ÿçûêîì Visual Basic .NET è ÿçûêàìè C# è J# ïðè èñ-
ïîëüçîâàíèè îïåðàòîðîâ If…Then è If…Then…Else.
Âî-ïåðâûõ, áóëåâû îïåðàöèè îáîçíà÷àþòñÿ ïî-äðó-
ãîìó. Âìåñòî And, Or è Not, C# è J# èñïîëüçóþò &&,
|| è !:

Áóëåâà îïåðàöèÿ Visual Basic.NET C# J#

È And && &&

Èëè Or || ||

Íå Not ! !

ßçûê Ñ#. Âîò ïðèìåð èñïîëüçîâàíèÿ áóëåâûõ


îïåðàòîðîâ È (&&) è Íå (!) â C#:

bool isBilled=true;
bool isLate=false;
bool isDone;
isDone = isBilled && !isLate;
MessageBox.Show(isDone.ToString());
Âåòâëåíèå: ïîëíàÿ ôîðìà 145

Îáðàòèòå âíèìàíèå íà êëþ÷åâûå ñëîâà bool (òèï


Boolean), true è false — îíè âñå íàáðàíû ñòðî÷-
íûìè áóêâàìè. Ïåðåìåííûå isBilled, isLate è
isDone îáúÿâëåíû êàê bool (òèï Boolean). Îáðà-
òèòå âíèìàíèå íà îïåðàöèþ È (&&) è îïåðàöèþ
Íå (!) â C#. Ïîñêîëüêó C# è J# íå âûïîëíÿþò àâòî-
ìàòè÷åñêèõ ïðåîáðàçîâàíèé çíà÷åíèé ðàçëè÷íûõ
òèïîâ â ñòðîêîâûå, èñïîëüçóåòñÿ ìåòîä ToString.

ßçûê J#. Âîò òàêîé æå êîä íà J#:


boolean isBilled=true;
boolean isLate=false;
boolean isDone;
isDone=isBilled && !isLate;
MessageBox.Show(System.Convert.ToString(isDone));

Êîä âûãëÿäèò ïî÷òè òàê æå, êàê êîä íà C#, íî


åñòü è íåêîòîðûå îòëè÷èÿ. Îáðàòèòå âíèìàíèå íà òî,
êàê îáúÿâëÿåòñÿ ïåðåìåííàÿ boolean (òèï Boolean).
Âñå ïåðåìåííûå — isBilled, isLate è isDone —
îáúÿâëåíû êàê boolean. Â êîäå íà J# òàêæå
ïî-äðóãîìó óêàçûâàåòñÿ ïðåîáðàçîâàíèå çíà÷åíèÿ
òèïà Boolean â ñòðîêó — ñ ïîìîùüþ ìåòîäà
System.Convert.ToString.
Íåêîòîðûå îïåðàöèè ñðàâíåíèÿ â ÿçûêàõ C# è
J# îáîçíà÷àþòñÿ íå òàê, êàê â Visual Basic .NET. Âû
óæå âèäåëè, ÷òî ïðîâåðêà ðàâåíñòâà îáîçíà÷àåòñÿ
== âìåñòî =. Êðîìå òîãî, ïðîâåðêà íåðàâåñòâà â C#
è J# îáîçíà÷àåòñÿ != âìåñòî <>. Âîò òàáëèöà ñ îáî-
çíà÷åíèÿìè îïåðàöèé ñðàâíåíèÿ:

Îïåðàöèÿ ñðàâíåíèÿ Visual Basic .NET C# J#


Ðàâíî = == ==
Áîëüøå ÷åì > > >
Ìåíüøå ÷åì < < <
Áîëüøå èëè ðàâíî >= >= >=
Ìåíüøå èëè ðàâíî <= <= <=
Íå ðàâíî <> != !=
146 Ãëàâà 9

Ïîñìîòðèòå íà êîä íà ÿçûêàõ J# èëè C#, êîòî-


ðûé èñïîëüçóåò îïåðàòîð ñðàâíåíèÿ «íå ðàâíî»:

int MyAge;
MyAge=15;
if (MyAge!=16)
{
MessageBox.Show("I am not 16.");
}

Êîãäà âûïîëíÿåòñÿ ýòîò êîä, âûâîäèòñÿ îêíî ñ


ñîîáùåíèåì «I am not 16.».
Êàê âèäèòå, ðàçëè÷èé ìåæäó îïåðàòîðàìè
If…Then è If…Then…Else â Visual Basic .NET è
C# èëè J# íåìàëî, íî åñòü è îáùèå ÷åðòû! Ýòè îïå-
ðàòîðû äåëàþò òî æå ñàìîå, ïðîñòî çàïèñûâàþòñÿ
ïî-äðóãîìó.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


9.8. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Áðîñîê ìîíåòû», èìèòèðóþ-
ùèé íà êîìïüþòåðå áðîñêè ìîíåòû. Ñîçäàéòå
Microsoft-CD òàêóþ ôîðìó, êàê ïîêàçàíî íà ðèñóíêå, èëè,
åñëè æàëü òðàòèòü âðåìÿ, èñïîëüçóéòå ñàìîðàñ-
ïàêîâûâàþùèéñÿ àðõèâ Áðîñîê_ìîíåòû.exe.

Îáúÿâèòå ïåðåìåííûå òèïà Integer äëÿ ïîäñ÷å-


òà âûèãðûøåé è ïðîèãðûøåé. Ïðèáàâëÿéòå åäèíè-
Âåòâëåíèå: ïîëíàÿ ôîðìà 147

öû ê èõ çíà÷åíèÿì è îòîáðàæàéòå ýòè çíà÷åíèÿ â


ñîîòâåòñòâóþùèõ òåêñòîâûõ ïîëÿõ.
 ïðîãðàììíîì êîäå â çàâèñèìîñòè îò òîãî, êà-
êàÿ âûáðàíà ïîçèöèÿ ïåðåêëþ÷àòåëÿ, îòîáðàæàéòå
â TextBox1.Text èëè «Heads», èëè «Tails».
Ïðè íàæàòèè êíîïêè ñ íàäïèñüþ Flip ãåíåðèðóé-
òå ñëó÷àéíîå ÷èñëî ñ ïîìîùüþ òàêîãî êîäà:

Dim MyRandomGenerator As System.Random


MyRandomGenerator = New System.Random
Dim RanNum As Integer
' Generate random value between 0 and 2 - not
including 2.
RanNum = MyRandomGenerator.Next(0, 2)

Åñëè ñëó÷àéíîå ÷èñëî ðàâíî 0, òî TextBox2.Text


äîëæíî áûòü ðàâíî «Heads», èíà÷å îíî äîëæíî áûòü
ðàâíî «Tails».
Åñëè TextBox1.Text ðàâíî TextBox2.Text, òî
ïðèáàâüòå 1 ê êîëè÷åñòâó âûèãðûøåé, èíà÷å ïðèáà-
âüòå 1 ê êîëè÷åñòâó ïðîèãðûøåé.
Îòîáðàçèòå êîëè÷åñòâà âûèãðûøåé è ïðîèãðû-
øåé â ñîîòâåòñòâóþùèõ ïîëÿõ.
Äîáàâüòå ïîëÿ äëÿ ïîäñ÷åòà ïðîöåíòîâ âûèãðû-
øåé è ïðîèãðûøåé.
Òåñò ïî òåìå «Âåòâëåíèå: ïîëíàÿ ôîðìà»
1. Êàê ðåêîìåíäóåòñÿ çàïèñûâàòü âëîæåííûå îïåðàòîðû If?

m Ïîìåùàòü â êâàäðàòíûå ñêîáêè

m Ïîìåùàòü â ôèãóðíûå ñêîáêè

m Âûäåëÿòü æèðíûì øðèôòîì

m Âûäåëÿòü îòñòóïàìè

2. Åñëè îïåðàòîð If âëîæåí â äðóãîé îïåðàòîð If, òî ñêîëüêî äîëæíî


áûòü îïåðàòîðîâ End If?

m 0

m 1

m 2

m 3

3. Åñëè óñëîâèå â îïåðàòîðå If íå âûïîëíÿåòñÿ, òî êàêîé êîä áóäåò


âûïîëíÿòüñÿ?

m Êîä ïîñëå îïåðàòîðà Then

m Êîä ïîñëå îïåðàòîðà Else

m Íèêàêîé êîä íå áóäåò âûïîëíÿòüñÿ

m Áóäóò âûïîëíÿòüñÿ îáà êîäà

4. Ñêîëüêî ñòðîê êîäà ìîæåò ñëåäîâàòü çà îïåðàòîðàìè Then èëè Else?

m 0

m 1

m 2

m Ñêîëüêî óãîäíî
Ãëàâà 10

Öèêëû ñî ñ÷åò÷èêîì

10.1. Öèêëû For...Next


10.2. Ïîøàãîâîå âûïîëíåíèå öèêëà For...Next
10.3. Ïðîåêòû ñ èñïîëüçîâàíèåì For...Next
10.4. Âëîæåííûå öèêëû
10.5. Âûõîä èç öèêëîâ
10.6. Öèêëû â Ñ# è J#

 1996 ãîäó
áûë ñîçäàí
ÿçûê îáúåêòíî-îðèåíòè-
ðîâàííîãî ïðîãðàììèðî-
âàíèÿ Visual Basic 5.0, à â
1998 ãîäó — Visual Basic 6.0.
Ýòè ÿçûêè ïîëó÷èëè øèðî-
êîå ðàñïðîñòðàíåíèå, òàê
êàê ìîãëè èñïîëüçîâàòüñÿ
êàê ïðîãðàììèñòàìè-ïðî-
ôåññèîíàëàìè äëÿ ðàçðà-
áîòêè êîììåð÷åñêèõ ïðè-
ëîæåíèé, òàê è íà÷èíàþ-
ùèìè ïðîãðàììèñòàìè â
ïðîöåññå îáó÷åíèÿ.
150 Ãëàâà 10

10.1. Öèêëû For...Next


Öèêëû èñïîëüçóþòñÿ äëÿ ìíîãîêðàòíîãî âû-
ïîëíåíèÿ îäíèõ è òåõ æå îïåðàòîðîâ êîäà. Èíîãäà
ïðîãðàììå íóæíî ïîâòîðÿòü êàêèå-òî äåéñòâèÿ ðàç
çà ðàçîì, ïîêà îíà íå âûïîëíèò èõ íóæíîå êîëè÷å-
ñòâî ðàç. Ïîýòîìó âî âñåõ ÿçûêàõ ïðîãðàììèðîâà-
íèÿ ïîääåðæèâàþòñÿ öèêëû. Öèêëû î÷åíü ïîëåçíû.
Âî-ïåðâûõ, îíè óìåíüøàþò îáúåì êîäà, êîòîðûé
âàì íóæíî ïèñàòü. Ïîâòîðÿþùèåñÿ äåéñòâèÿ çàïè-
ñûâàþòñÿ â öèêëå òîëüêî îäèí ðàç. Âî-âòîðûõ, îíè
óìåíüøàþò âåðîÿòíîñòü îøèáîê.
Âîò ïðèìåð ïîëåçíîñòè öèêëîâ â ïðîãðàììàõ.
Ïðåäïîëîæèì, ÷òî âàì íóæíî ñëîæèòü âñå ÷èñëà îò
1 äî 100. Ýòî ìîæíî ñäåëàòü, íàïèñàâ îäíî äëèííîå
âûðàæåíèå, íàïðèìåð:

Dim TotalCount As Integer


TotalCount = 0
TotalCount = 1 + 2 + 3 + 4 ‘è òàê äàëåå

Ýòî î÷åíü íåóäîáíî!

À êàê íàñ÷åò âîò òàêîãî?

Dim TotalCount As Integer


TotalCount = 0
TotalCount = TotalCount + 1
TotalCount = TotalCount + 1
TotalCount = TotalCount + 1
TotalCount = TotalCount + 1
‘è òàê äàëåå

Òîæå ïëîõî. Ýòó ñòðîêó ïðèøëîñü áû ïîâòîðèòü


100 ðàç! À åñëè áû íóæíî áûëî ïðîñóììèðîâàòü ÷èñ-
ëà îò 1 äî 1000? Êàê áû âû ñäåëàëè ýòî?

Îïåðàòîð For…Next. Âîò çäåñü-òî íàì è ïðèãî-


äÿòñÿ öèêëû. Êàê ìû óæå ãîâîðèëè, öèêëû åñòü âî
âñåõ ÿçûêàõ ïðîãðàììèðîâàíèÿ, è îíè ïîçâîëÿþò
èñïîëíÿòü îäèí è òîò æå êîä ìíîæåñòâî ðàç. ×àñòî
Öèêëû ñî ñ÷åò÷èêîì 151

âû çíàåòå çàðàíåå, ñêîëüêî ðàç íóæíî âûïîëíèòü


êîä. Â íàøåì ïðèìåðå íóæíî ïðîñóììèðîâàòü âñå
÷èñëà îò 1 äî 1000, ïîýòîìó êîä íóæíî âûïîëíèòü
1000 ðàç. Åñëè âû çíàåòå, ñêîëüêî ðàç äîëæåí âû-
ïîëíèòüñÿ êîä, èñïîëüçóéòå öèêë ñ ïðåäâàðèòåëüíî
çàäàííûì ÷èñëîì ïîâòîðåíèé.
 Visual Basic .NET, öèêë ñ ïðåäâàðèòåëüíî çà-
äàííûì ÷èñëîì ïîâòîðåíèé ñîçäàåòñÿ ñ ïîìîùüþ
îïåðàòîðà For…Next. Âîò ñèíòàêñèñ òàêîãî öèêëà:

Dim Ñ÷åò÷èê As Integer


For Ñ÷åò÷èê = Íà÷àëüíîåÇíà÷åíèå To Êîíå÷íîå
Çíà÷åíèå
Ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ
Next

Îáðàòèòå âíèìàíèå íà òî, ÷òî For, Next è To —


ýòî êëþ÷åâûå ñëîâà. Îíè âûäåëåíû ñèíèì öâåòîì è
íà÷èíàþòñÿ ñ çàãëàâíûõ áóêâ. Ñ÷åò÷èê (ñ÷åò÷èê
öèêëà) — ïåðåìåííàÿ, êîòîðóþ íóæíî îáúÿâëÿòü
êàê öåëî÷èñëåííóþ. Åå íóæíî îáúÿâèòü, ïðåæäå
÷åì èñïîëüçîâàòü â öèêëå For…Next. (Äëÿ íåå ìîæ-
íî çàäàòü ëþáîå èìÿ.) Ïåðåìåííàÿ ñ÷åò÷èê îòñëå-
æèâàåò, ñêîëüêî ðàç âûïîëíèëñÿ öèêë. Ê çíà÷åíèþ
ýòîé ïåðåìåííîé ìîæíî îáðàùàòüñÿ âíóòðè öèêëà.
Íà÷àëüíîå çíà÷åíèå è êîíå÷íîå çíà÷åíèå äîë-
æíû áûòü öåëûìè ÷èñëàìè, öåëî÷èñëåííûìè ïåðå-
ìåííûìè, èëè âûðàæåíèÿìè öåëî÷èñëåííîãî òèïà,
íàïðèìåð 3 + 1 èëè X + 1. Ïðè êàæäîì âûïîëíåíèè
öèêëà çíà÷åíèå ïåðåìåííîé ñ÷åò÷èê óâåëè÷èâàåòñÿ
íà 1. Êîãäà çíà÷åíèå ñ÷åò÷èêà ñòàíîâèòñÿ áîëüøå,
÷åì êîíå÷íîå çíà÷åíèå, âûïîëíåíèå öèêëà çàâåð-
øàåòñÿ.
Äàâàéòå íàïèøåì êîä, â êîòîðîì èñïîëüçóåòñÿ
öèêë For…Next. Äëÿ íà÷àëà ìû ñîçäàäèì öèêë, êî-
òîðûé âûïîëíèòñÿ äâà ðàçà è áóäåò âûâîäèòü çíà÷å-
íèå ïåðåìåííîé-ñ÷åò÷èêà ïðè êàæäîì âûïîëíåíèè.
Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå åãî
«For-Next». Ïîìåñòèòå íà ôîðìó êíîïêó. Âûïîëíè-
òå ïî íåé äâîéíîé ùåë÷îê, ÷òîáû îòðåäàêòèðîâàòü
152 Ãëàâà 10

îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â îáðàáîò÷èê ñëå-


äóþùèé êîä:

Dim LoopCounter As Integer


Ëó÷øå âûäåëÿòü êîä ìåæ-
äó îïåðàòîðàìè For è For LoopCounter = 1 To 2
Next ñ ïîìîùüþ îòñòóïà. MessageBox.Show(LoopÑounter)
Äåëàÿ îòñòóïû â êîäå, âû Next
áûñòðåå ðàçáåðåòåñü, êà-
êèå îïåðàòîðû áóäóò ïî-
âòîðíî âûïîëíÿòüñÿ â Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó.
öèêëå. Êîä ñ îòñòóïàìè Ïîÿâèòñÿ ñîîáùåíèå ñ öèôðîé 1, òåêóùèì çíà÷åíè-
ïðîùå ÷èòàòü è îòëàæè- åì ïåðåìåííîé LoopCounter. Íàæìèòå êíîïêó OK.
âàòü. Ïîÿâèòñÿ ñîîáùåíèå ñ öèôðîé 2, òåêóùèì çíà÷åíè-
åì ïåðåìåííîé LoopCounter. Íàæìèòå êíîïêó OK.
Âûïîëíåíèå öèêëà çàêîí÷èòñÿ, ïîýòîìó áîëüøå ñî-
îáùåíèé íå áóäåò.
Âîò êàê ýòî ðàáîòàåò. Â êîäå âû îáúÿâèëè ïåðå-
ìåííóþ LoopCounter òèïà Integer. Â îïåðàòîðå
For âû ïðîèíèöèàëèçèðîâàëè LoopCounter çíà÷å-
íèåì 1 è çàäàëè äëÿ åå çíà÷åíèÿ âåðõíèé ïðåäåë 2.
 öèêëå áóäóò âûïîëíÿòüñÿ îïåðàòîðû, ïîìåùåí-
íûå ìåæäó For è Next. Ïðè êàæäîì âûïîëíåíèè
öèêëà çíà÷åíèå LoopCounter óâåëè÷èâàåòñÿ íà 1.
 îêíå ñîîáùåíèÿ áóäåò âûâåäåíî òåêóùåå çíà÷åíèå
ïåðåìåííîé LoopCounter (ñíà÷àëà 1, ïîòîì 2). Êîã-
äà çíà÷åíèå LoopCounter äîñòèãíåò 3, âûïîëíåíèå
öèêëà çàâåðøèòñÿ è îêíî ñîîáùåíèÿ âûâîäèòüñÿ
áîëüøå íå áóäåò. Êîíåö öèêëà!
Ïî óìîë÷àíèþ çíà÷åíèå ñ÷åò÷èêà óâåëè÷èâàåòñÿ
íà 1 ïðè êàæäîì âûïîëíåíèè öèêëà. Ìîæíî ñäåëàòü
òàê, ÷òîáû îíî óâåëè÷èâàëîñü íà áîëüøóþ âåëè÷è-
íó, èñïîëüçóÿ êëþ÷åâîå ñëîâî Step, êàê â ýòîì ïðè-
ìåðå:

Dim LoopCounter As Integer


For LoopCounter = 0 To 100 Step 5
MessageBox.Show(LoopCounter)
Next

Çäåñü çíà÷åíèå ïåðåìåííîé LoopCounter óâåëè-


÷èâàåòñÿ íà 5 ïðè êàæäîì âûïîëíåíèè öèêëà.  îê-
Öèêëû ñî ñ÷åò÷èêîì 153

íàõ ñîîáùåíèé áóäóò âûâîäèòüñÿ çíà÷åíèÿ 0, 5, 10,


15, è ò. ä.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


10.1. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
Microsoft-CD .NET ñîçäàòü ïðîåêò «For-Next», îïèñàííûé
â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñà-
ìîðàñïàêîâûâàþùåìñÿ àðõèâå For_Next.exe.

10.2. Ïîøàãîâîå âûïîëíåíèå öèêëà


For…Next
Äàâàéòå èçó÷èì öèêë For…Next, êîòîðûé âû òîëüêî
÷òî íàïèñàëè, ñ ïîìîùüþ îòëàäî÷íûõ èíñòðóìåíòîâ
Visual Studio .NET. Ìû áóäåì ïîøàãîâî âûïîëíÿòü
öèêë. Âîò ÷òî äëÿ ýòîãî íóæíî ñäåëàòü:

1. Ïîñòàâüòå òî÷êó îñòàíîâà â ñòðîêå êîäà, ñî-


äåðæàùåé îïåðàòîð For. Ïîñòðîéòå è çàïóñ-
òèòå ïðèëîæåíèå.

2. Îòêðîåòñÿ ôîðìà. Íàæìèòå êíîïêó Button1.


Êîä âûïîëíèòñÿ äî òî÷êè îñòàíîâà. Ñòðîêà ñ
òî÷êîé îñòàíîâà áóäåò ïîäñâå÷åíà.
154 Ãëàâà 10

3. Íàæìèòå êëàâèøó {F11}. Ïîäñâå÷åííàÿ ñòðî-


êà êîäà âûïîëíèòñÿ.
For LoopCounter = 1 To 2
Ïîäâåäèòå êóðñîð ìûøè ê ïåðåìåííîé Loop-
Counter â ñòðîêå For LoopCounter = 1 To 2.
Åå çíà÷åíèå ðàâíî 1.

4. Íàæìèòå êëàâèøó {F11}. Ïîäñâå÷åííàÿ ñòðî-


êà êîäà âûïîëíèòñÿ.
MessageBox.Show(LoopCounter)
 îêíå ñîîáùåíèÿ áóäåò öèôðà 1. Íàæìèòå
êíîïêó OK, ÷òîáû çàêðûòü îêíî ñîîáùåíèÿ.

5. Íàæìèòå êëàâèøó {F11}. Ïîäñâå÷åííàÿ ñòðî-


êà êîäà âûïîëíèòñÿ.
Next
6. Ïåðâîå âûïîëíåíèå öèêëà For çàêîí÷åíî.
Íàæìèòå êëàâèøó {F11}. Ïîäñâå÷åííàÿ
ñòðîêà êîäà âûïîëíèòñÿ.
For LoopCounter = 1 To 2
Ïîäâåäèòå êóðñîð ê ïåðåìåííîé LoopCounter
â îïåðàòîðå For. Çíà÷åíèå ïåðåìåííîé áóäåò
ðàâíî 2.
Öèêëû ñî ñ÷åò÷èêîì 155

7. Íàæìèòå êëàâèøó {F11}. Ïîäñâå÷åííàÿ ñòðî-


êà êîäà âûïîëíèòñÿ.
MessageBox.Show(LoopCounter)
 îêíå ñîîáùåíèÿ áóäåò öèôðà 2. Íàæìèòå
êíîïêó OK, ÷òîáû çàêðûòü îêíî ñîîáùåíèÿ.

8. Íàæìèòå êëàâèøó {F11}. Ïîäñâå÷åííàÿ ñòðî-


êà êîäà âûïîëíèòñÿ.
Next

9. Âûïîëíåíèå öèêëà çàêîí÷åíî. Íàæìèòå êëà-


âèøó {F11}. Ïîäñâå÷åííàÿ ñòðîêà âûïîëíèòñÿ.
For LoopCounter = 1 To 2
Ïîäâåäèòå êóðñîð ê ïåðåìåííîé LoopCounter
â îïåðàòîðå For. Çíà÷åíèå ïåðåìåííîé áóäåò
ðàâíî 3.
156 Ãëàâà 10

10. Íàæìèòå êëàâèøó {F11}. Ïîäñâå÷åííàÿ


ñòðîêà êîäà âûïîëíèòñÿ.
End Sub
Ôîðìà ïîÿâèòñÿ îïÿòü.

Âû òîëüêî ÷òî ïîøàãîâî âûïîëíèëè êîä â öèêëå


For…Next. Âû óâèäåëè, êàê ýòîò öèêë âûïîëíÿåòñÿ
â ïðîãðàììå!

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


10.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
Microsoft-CD .NET ïðîâåñòè ïîøàãîâîå âûïîëíåíèå ïðîåêòà
«For-Next» òàê, êàê ýòî îïèñàíî â ïàðàãðàôå.
Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâû-
âàþùåìñÿ àðõèâå For_Next.exe.

10.3. Ïðîåêòû ñ èñïîëüçîâàíèåì


For…Next
Ñëîæåíèå ÷èñåë îò 1 äî 1000. Ñ ïîìîùüþ öèêëà
For…Next ìîæíî ñêëàäûâàòü áîëüøîå êîëè÷åñòâî
÷èñåë. Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçî-
âèòå åãî «Ñëîæåíèå». Ïîìåñòèòå íà ôîðìó êíîïêó è
èçìåíèòå çíà÷åíèå åå ñâîéñòâà Text íà Ñëîæèòü.
Âûïîëíèòå ïî íåé äâîéíîé ùåë÷îê, ÷òîáû îòðåäàê-
òèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â îáðà-
áîò÷èê ñëåäóþùèé êîä:

Dim Counter As Integer


Dim Total As Integer = 0
For Counter = 1 To 1000
Total = Total + Counter
Next
MessageBox.Show(Total)
Öèêëû ñî ñ÷åò÷èêîì 157

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ Ñëîæèòü. Ïîÿâèòñÿ îêíî ñîîáùåíèÿ ñ
ñóììîé, ïîëó÷åííîé â ðåçóëüòàòå ñëîæåíèÿ âñåõ ÷è-
Êîãäà öèêë For…Next çà- ñåë îò 1 äî 1000. Âû íàïèñàëè êîä, è ïðîãðàììà âû-
êàí÷èâàåò âûïîëíÿòüñÿ, ÷èñëèëà îòâåò áûñòðåå, ÷åì âû óñïåëè âûòàùèòü
âûïîëíÿåòñÿ ïåðâàÿ ñòðî- êàëüêóëÿòîð!
êà êîäà ïîñëå îïåðàòîðà Êàê ýòîò êîä ðàáîòàåò? Ñíà÷àëà ìû îáúÿâèëè
Next.  íàøåì ïðèìåðå äâå öåëî÷èñëåííûõ ïåðåìåííûõ: Counter è Total.
ýòî ñòðîêà MessageBox.
Show(Total).
Counter îòñëåæèâàåò, ñêîëüêî ðàç âûïîëíèëñÿ
öèêë.  Total õðàíèòñÿ ñóììà ñëîæåííûõ ÷èñåë.
 îïåðàòîðå For íà÷àëüíîå çíà÷åíèå Counter çà-
äàíî ðàâíûì 1, à êîíå÷íîå çíà÷åíèå — ðàâíûì
1000. Ýòî ïîòîìó, ÷òî ìû õîòèì âûïîëíèòü öèêë
1000 ðàç, ñóììèðóÿ ÷èñëà îò 1 äî 1000. Îïåðàòîð,
êîòîðûé íóæíî ïîâòîðÿòü ìíîãî ðàç, ïðèáàâëÿåò
òåêóùåå çíà÷åíèå Counter ê çíà÷åíèþ Total è ñî-
õðàíÿåò ðåçóëüòàò â Total. Ïðè êàæäîì âûïîëíå-
íèè öèêëà çíà÷åíèå Counter ïðèáàâëÿåòñÿ ê
çíà÷åíèþ Total (0 + 1 = 1, 1 + 2 = 3, 3 + 3 = 6,
6 + 4 = 10, è ò. ä.). Êîãäà Counter äîñòèãàåò çíà-
÷åíèÿ 1000, âûïîëíåíèå öèêëà çàêàí÷èâàåòñÿ.
Âûïîëíÿåòñÿ ñòðîêà êîäà ïîñëå îïåðàòîðà Next.
 ýòîé ñòðîêå âûçûâàåòñÿ îêíî ñîîáùåíèÿ, â êîòî-
ðîì âûâîäèòñÿ çíà÷åíèå Total.

Ñëîæåíèå ñòðîê. Ïîìíèòå, âíóòðü öèêëà For…Next


ìîæíî ïîìåùàòü êàêîé óãîäíî êîä. Ìîæíî àâòîìà-
òè÷åñêè ñîñòàâëÿòü äëèííûå òåêñòîâûå ñòðîêè, âû-
âîäèòü ñíîâà è ñíîâà ðàçäðàæàþùèå ñîîáùåíèÿ èëè
èçìåíÿòü ñâîéñòâà â çàâèñèìîñòè îò çíà÷åíèÿ ñ÷åò-
÷èêà öèêëà. Âîò åùå îäèí ïðèìåð èñïîëüçîâàíèÿ
öèêëà.

Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå


åãî «Ñëîæåíèå ñòðîê». Ïîìåñòèòå íà ôîðìó êíîïêó
è èçìåíèòå çíà÷åíèå åå ñâîéñòâà Text íà Ñëîæèòü
ñòðîêè. Âûïîëíèòå ïî íåé äâîéíîé ùåë÷îê, ÷òîáû
îòðåäàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â
îáðàáîò÷èê ñëåäóþùèé êîä:
158 Ãëàâà 10

Dim Message As String


Dim i As Integer = 0
Message = "ÑÒÐÎÊÀ."
For i = 1 To 5
MessageBox.Show(Message)
Message = Message & vbNewLine & Message
Next

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó ñ


íàäïèñüþ Ñëîæèòü ñòðîêè. Â îêíå ñîîáùåíèé áóäåò
âûâåäåíî ñîîáùåíèå «ÑÒÐÎÊÀ.». Â îêíå ñîîáùåíèé
ùåëêíèòå ïÿòü ðàç ïî êíîïêå OK, öèêë âûïîëíèòñÿ
ïÿòü ðàç. Îáðàòèòå âíèìàíèå íà òî, âî ñêîëüêî ðàç
óâåëè÷èëîñü ñîîáùåíèå.

Öèêë è âëîæåííûé óñëîâíûé îïåðàòîð. Ñîçäàé-


òå ïðîåêò «Öâåò ôîðìû». Ïîìåñòèòå íà ôîðìó êíîï-
êó è èçìåíèòå çíà÷åíèå ñâîéñòâà Text ýòîé êíîïêè
íà Óñòàíîâèòü öâåò. Âûïîëíèòå äâîéíîé ùåë÷îê
ïî íåé, ÷òîáû îòðåäàêòèðîâàòü îáðàáîò÷èê åå íàæà-
òèÿ. Äîáàâüòå â îáðàáîò÷èê ñëåäóþùèé êîä:

Dim i As Integer = 0
For i = 2 To 6
If i < 3 Or i > 5 Then
MessageBox.Show(i)
Form1.ActiveForm.BackColor = System._
Drawing.Color.Red
Else
MessageBox.Show(i)
Form1.ActiveForm.BackColor = System._
Drawing.Color.Blue
End If
Next

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ Óñòàíîâèòü öâåò. Â îêíàõ ñîîáùåíèÿ
Öèêëû ñî ñ÷åò÷èêîì 159

áóäåò âûâîäèòüñÿ òåêóùåå çíà÷åíèå ñ÷åò÷èêà öèê-


ëà. Çàìåòüòå, ÷òî íà ýòîò ðàç ìèíèìàëüíîå çíà÷åíèå
ñ÷åò÷èêà ðàâíî 2, à ìàêñèìàëüíîå — 6. Îïåðàòîð
If…Then…Else âíóòðè öèêëà For…Next ðåøàåò, êàê
ðàñêðàñèòü ôîðìó â çàâèñèìîñòè îò çíà÷åíèÿ ñ÷åò-
÷èêà öèêëà.  öèêëå âûâîäèòñÿ îêíî ñîîáùåíèÿ,
êîòîðîå ïîçâîëÿåò îòñëåæèâàòü çíà÷åíèå ñ÷åò÷èêà
öèêëà. Êðîìå òîãî, âûâîä îêíà ñîîáùåíèÿ çàìåäëÿ-
åò ðàáîòó öèêëà, ÷òîáû ìîæíî áûëî çàìåòèòü èçìå-
íåíèå öâåòà ôîðìû.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ

10.3. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic


.NET ñîçäàòü ïðîåêò «Ñëîæåíèå», îïèñàí-
Microsoft-CD íûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ
â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå Ñëîæå-
íèå.exe.
10.4. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Ñëîæåíèå ñòðîê», îïè-
ñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåð-
æèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Ñëîæåíèå_ñòðîê.exe.
10.5. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Öâåò ôîðìû», îïèñàí-
íûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèò-
ñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå Öâåò_
ôîðìû.exe.
10.6. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Ïîäñ÷åò êðîëèêîâ»,
âû÷èñëÿþùèé êàê áóäåò ðàñòè ïîïóëÿöèÿ
êðîëèêîâ â êàæäîì ïîêîëåíèè. Ñîçäàéòå òà-
êóþ ôîðìó, êàê ïîêàçàíî íà ðèñóíêå, èëè,
åñëè æàëü òðàòèòü âðåìÿ, èñïîëüçóéòå ñà-
ìîðàñïàêîâûâàþùèéñÿ àðõèâ Ïîäñ÷åò_
êðîëèêîâ.exe.
160 Ãëàâà 10

Ïðåäñòàâèì ñåáå, ÷òî åñòü îñòðîâ, íà êîòîðîì äëÿ


êðîëèêîâ äîñòàòî÷íî åäû è íåò õèùíèêîâ. Ïðåäïî-
ëîæèì, ÷òî íà îñòðîâ ïîìåñòèëè ïàðó êðîëèêîâ è
÷òî â êàæäîì èõ âûâîäêå áóäåò ÷åòûðå êðîëèêà.
Òîãäà ïîñëå ïåðâîãî ïîêîëåíèÿ áóäåò 2 + 4 = 6 êðî-
ëèêîâ. Ïîñëå äâóõ ïîêîëåíèé áóäåò 6 + 12 = 18
êðîëèêîâ.
Óêàçûâàéòå íîìåð ïîêîëåíèÿ, êîëè÷åñòâî êðî-
ëèêîâ, è êîëè÷åñòâî êðîëèêîâ íà êâàäðàòíûé ôóò
ïëîùàäè, ïîëàãàÿ, ÷òî îñòðîâ èìååò ïëîùàäü â îäíó
êâàäðàòíóþ ìèëþ, à â ìèëå 5280 ôóòîâ.
Ïðåäîñòàâüòå ïîëüçîâàòåëþ âîçìîæíîñòü óêàçû-
âàòü, äëÿ ñêîëüêèõ ïîêîëåíèé êðîëèêîâ âûïîëíÿòü
ðàñ÷åò.
×òîáû ðåçóëüòàòû áûëî ëåã÷å ÷èòàòü, èñïîëü-
çóéòå êîíñòàíòû Visual Basic vbTab è vbNewLine.
×òîáû ôîðìàòèðîâàòü âûâîä, èñïîëüçóéòå ôóíê-
öèþ Format, íàïðèìåð:

VariableX = Format(VariableX, "###, ###, ###,


###, ##0")

èëè

VariableY = Format(VariableY, ###, ##0.0000")


Öèêëû ñî ñ÷åò÷èêîì 161

10.4. Âëîæåííûå öèêëû


Çíàåòå ëè âû, ÷òî ìîæíî ïîìåñòèòü îäèí öèêë
For…Next âíóòðü äðóãîãî? Âíóòðåííèé öèêë For…Next
áóäåò âûïîëíÿòüñÿ ðàç çà ðàçîì ïðè êàæäîì âûïîë-
íåíèè âíåøíåãî öèêëà For…Next. Òàê ñêîëüêî æå
ðàç âûïîëíèòñÿ êîä âíóòðè âíóòðåííåãî öèêëà? Äà-
âàéòå ðàññìîòðèì ïðèìåð, ÷òîáû îïðåäåëèòü îòâåò
íà ýòîò âîïðîñ.
Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå
åãî «Öèêë â öèêëå». Ïîìåñòèòå íà ôîðìó êíîïêó.
Âûïîëíèòå ïî íåé äâîéíîé ùåë÷îê, ÷òîáû îòðåäàê-
òèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â îáðà-
áîò÷èê ñëåäóþùèé êîä:
Dim i As Integer
Dim k As Integer
For i = 1 To 3
Dim Total As Integer = 0
For k = 1 To 4
Total = Total + 1
Next
Next
MessageBox.Show("Total= " & Total)
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó.
Ïîÿâèòñÿ îêíî ñîîáùåíèÿ ñ òåêñòîì «Total = 12».
Ýòî îáùåå êîëè÷åñòâî âûïîëíåíèé êîäà âíóòðè âíóò-
ðåííåãî öèêëà. Ïîñìîòðèòå íà êîä. Âû çàìåòèëè,
÷òî 12 — ýòî 3 (êîëè÷åñòâî âûïîëíåíèé âíåøíåãî
öèêëà) óìíîæèòü íà 4 (êîëè÷åñòâî âûïîëíåíèé âíóò-
ðåííåãî öèêëà)? Ïðàâèëüíî! Ïðè êàæäîì âûïîëíå-
íèè âíåøíåãî öèêëà âíóòðåííèé öèêë èñïîëíÿåòñÿ
4 ðàçà. Ïîñêîëüêó âíåøíèé öèêë âûïîëíèëñÿ
3 ðàçà, âíóòðåííèé öèêë âûïîëíèëñÿ 4 · 3 = 12 ðàç.
Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ
10.7. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Öèêë â öèêëå», ïîä-
ñ÷èòûâàþùèé êîëè÷åñòâî ïîâòîðåíèé òåëà
Microsoft-CD âëîæåííîãî öèêëà. Ãîòîâûé ïðîåêò ñîäåð-
æèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Öèêë_â_öèêëå.exe.
162 Ãëàâà 10

10.5. Âûõîä èç öèêëîâ


Èíîãäà íóæíî ïðåðâàòü âûïîëíåíèå öèêëà äî òîãî,
êàê çíà÷åíèå ñ÷åò÷èêà äîñòèãíåò âåðõíåãî ïðåäåëà.
Ýòî ìîæíî ñäåëàòü ñ ïîìîüþ îïåðàòîðà Exit For.
Äàííûé îïåðàòîð ïîìåùàåòñÿ âíóòðü îïåðàòîðà
If…Then âíóòðè öèêëà. Óñëîâèå â îïåðàòîðå
If…Then óêàçûâàåò êîäó, êîãäà íóæíî ïðåðâàòü âû-
ïîëíåíèå öèêëà. Äàâàéòå íàïèøåì êîä, â êîòîðîì
áóäåò èñïîëüçîâàòüñÿ îïåðàòîð Exit For.
Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå
åãî «Âûõîä èç öèêëà». Ïîìåñòèòå íà ôîðìó êíîïêó.
Èçìåíèòå çíà÷åíèå ñâîéñòâà Text ýòîé êíîïêè íà
Âûéòè èç öèêëà. Âûïîëíèòå ïî íåé äâîéíîé ùåë-
÷îê, ÷òîáû îòðåäàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ.
Äîáàâüòå â îáðàáîò÷èê ñëåäóþùèé êîä:

Dim i As Integer = 0
For i = 1 To 5
MessageBox.Show("i inside= " & i)
If i = 3 Then
Exit For
End If
Next
MessageBox.Show("i outside= " & i)

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ Âûéòè èç öèêëà íåñêîëüêî ðàç. Áóäóò
ïîÿâëÿòüñÿ îêíà ñîîáùåíèÿ ñî çíà÷åíèÿìè ñ÷åò÷è-
êà öèêëà. Êîãäà ýòî çíà÷åíèå ñòàíåò ðàâíûì 3, óñëî-
âèå â áëîêå If…Then âûïîëíèòñÿ è âûïîëíèòñÿ
îïåðàòîð Exit For. Âûïîëíåíèå öèêëà çàâåðøèòñÿ
áåç âûïîëíåíèÿ îñòàâøèõñÿ ïîâòîðîâ. Îáðàòèòå âíè-
ìàíèå, ÷òî îêíà ñ ñîîáùåíèåì «i inside = 4» íåò. Êîãäà
öèêë çàâåðøèòñÿ, âûïîëíèòñÿ êîä ïîñëå îïåðàòîðà
Next. Ïîÿâèòñÿ îêíî ñ ñîîáùåíèåì «i outside = 3».
Âîò åùå îäèí ïðèìåð èñïîëüçîâàíèÿ Exit For.
Ìû èçìåíèì ïðîãðàììó «Âûõîä èç öèêëà». Äîáàâü-
òå íà ôîðìó ôëàæîê è åùå îäíó êíîïêó. Èçìåíèòå
çíà÷åíèå ñâîéñòâà Text êíîïêè íà Ïðîâåðèòü.
Âûïîëíèòå äâîéíîé ùåë÷îê ïî íîâîé êíîïêå, ÷òîáû
Öèêëû ñî ñ÷åò÷èêîì 163

îòðåäàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Èçìåíèòå


êîä îáðàáîò÷èêà:
Dim Index As Integer
For Index = 1 To 5
If Index = 4 Then
CheckBox1.Checked = True
End If
If CheckBox1.Checked = True Then
MessageBox.Show("Exit on: " & Index)
Exit For
End If
Next

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ Ïðîâåðèòü. Öèêë For…Next áóäåò âû-
ïîëíÿòüñÿ, ïîêà çíà÷åíèå ïåðåìåííîé Index íå ñòà-
íåò ðàâíûì 4. Çàòåì ñâîéñòâî Checked ôëàæêà
CheckBox1 áóäåò óñòàíîâëåíî â True. Ïîñêîëüêó
Checkbox1 áóäåò óñòàíîâëåí, áóäåò âûâåäåíî îêíî
ñîîáùåíèÿ ñî çíà÷åíèåì ïåðåìåííîé Index è âû-
ïîëíèòñÿ îïåðàòîð Exit For. Âûïîëíåíèå öèêëà çà-
âåðøèòñÿ.
Åùå ðàç íàæìèòå êíîïêó ñ íàäïèñüþ Ïðîâå-
ðèòü, íå ñáðàñûâàÿ ôëàæîê CheckBox1. ×òî ïðîè-
çîéäåò íà ýòîò ðàç? Îïåðàòîð Exit For áóäåò âûïîë-
íåí ïðè Index = 1.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


10.8. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Âûõîä èç öèêëîâ»,
îïèñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñî-
Microsoft-CD äåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Âûõîä_èç_öèêëîâ.exe.
10.9. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Ïðîñòûå ÷èñëà», íàõî-
äÿùèé âñå ïðîñòûå ÷èñëà îò 2 äî 5000. Ñî-
çäàéòå òàêóþ ôîðìó, êàê ïîêàçàíî íà
ðèñóíêå, èëè, åñëè æàëü òðàòèòü âðåìÿ, èñ-
ïîëüçóéòå ñàìîðàñïàêîâûâàþùèéñÿ àðõèâ
Ïðîñòûå_÷èñëà.exe.
164 Ãëàâà 10

Ïðîñòîå ÷èñëî — ýòî ÷èñëî, êîòîðîå íàöåëî (áåç


îñòàòêà) äåëèòñÿ òîëüêî íà 1 è íà ñàìî ñåáÿ. Ïåðâûå
ïðîñòûå ÷èñëà — ýòî 2, 3, 5, 7. ×èñëà 4, 6, 8, è 9 —
íå ïðîñòûå, ïîòîìó ÷òî îíè íàöåëî äåëÿòñÿ, íàïðè-
ìåð, íà 2 èëè, â ñëó÷àå 9, íà 3.
Ïðè íàæàòèè êíîïêè ñ íàäïèñüþ Calculate äîë-
æíû âû÷èñëÿòüñÿ ïðîñòûå ÷èñëà äî 5000. Îíè äîë-
æíû âûâîäèòüñÿ â òåêñòîâîì ïîëå.
Ïîìåñòèòå öèêë For âíóòðü äðóãîãî öèêëà For.
Âíåøíèé öèêë äîëæåí ïåðåáèðàòü ÷èñëà îò 2 äî
5000. Âíóòðåííèé öèêë äîëæåí ïðîâåðÿòü, äåëèòñÿ
ëè ÷èñëî íà âñå ÷èñëà îò 2 äî ñàìîãî ýòîãî ÷èñëà ìè-
íóñ 1.
Âàì, âåðîÿòíî, ïîíàäîáèòñÿ ïåðåìåííàÿ äëÿ òîãî,
÷òîáû ïîìå÷àòü, ÿâëÿåòñÿ ëè ïðîâåðÿåìîå â äàííûé
ìîìåíò ÷èñëî ïðîñòûì. Åå çíà÷åíèå ìîæíî óñòàíî-
âèòü ðàâíûì True ïåðåä çàïóñêîì íà÷àëüíîãî öèê-
ëà, à åñëè îêàæåòñÿ, ÷òî ÷èñëî íå ïðîñòîå, èçìåíèòü
çíà÷åíèå íà False.
Âíóòðè âíóòðåííåãî öèêëà ñëåäóåò ïðîâåðÿòü,
äåëèòñÿ ëè ÷èñëî íàöåëî íà çíà÷åíèå ïåðåìåí-
íîé-ñ÷åò÷èêà âíóòðåííåãî öèêëà. Åñëè äà, çíà÷èò,
îíî íå ïðîñòîå.
Ïðåäïîëîæèì, ÷òî ó íàñ åñòü ÷èñëà X è Y. Êàê
óçíàòü, åñòü ëè îñòàòîê îò äåëåíèÿ X / Y? Åñòü íå-
ñêîëüêî ñïîñîáîâ. Ïîñêîëüêó ìû ïðîâåðÿåì âàøå
Öèêëû ñî ñ÷åò÷èêîì 165

óìåíèå îáðàùàòüñÿ ñ öèêëàìè, à íå âàøå çíàíèå ìà-


òåìàòèêè, ìû ïîêàæåì âàì ïðîñòîé ñïîñîá. Ýòî ñïî-
ñîá ñ èñïîëüçîâàíèåì îïåðàöèè Mod. Ïðåäïîëîæèì,
÷òî ó íàñ åñòü ïåðåìåííàÿ Remainder (îñòàòîê):

Remainder = X Mod Y

Åñëè ïî çàâåðøåíèè âíóòðåííåãî öèêëà äëÿ ñëå-


äÿùåé ïåðåìåííîé âñå åùå óñòàíîâëåíî çíà÷åíèå
True, çíà÷èò, ïðîâåðÿåìîå ÷èñëî — ïðîñòîå. Ìåæäó
âûâîäèìûìè ïðîñòûìè ÷èñëàìè â òåêñòîâîì ïîëå
ëó÷øå âñòàâëÿòü ïðîáåëû.

10.10. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic


.NET ñîçäàòü ïðîåêò «Ïåíñèÿ», êîòîðûé
áóäåò âû÷èñëÿòü ñóììû, íàêîïèâøèåñÿ íà
ïåíñèîííîì ñ÷åòó. Ñîçäàéòå òàêóþ ôîðìó,
êàê ïîêàçàíî íà ðèñóíêå, èëè, åñëè æàëü
òðàòèòü âðåìÿ, èñïîëüçóéòå ñàìîðàñïàêî-
âûâàþùèéñÿ àðõèâ Ïåíñèÿ.exe.

Íà ôîðìå óêàçûâàåòñÿ âîçðàñò, â êîòîðîì âû íà-


÷èíàåòå îòêëàäûâàòü äåíüãè, âîçðàñò, â êîòîðîì âû
ïðåêðàùàåòå ýòî äåëàòü, ñóììà, îòêëàäûâàåìàÿ êàæ-
äûé ãîä, è ïðîöåíò ïî âêëàäó.
166 Ãëàâà 10

Ìû èçó÷àëè öèêëû, è ïîõîæå, çäåñü î÷åíü óäîá-


íî èõ ïðèìåíèòü. Íà÷àëüíûé è êîíå÷íûé âîçðàñò
ðàçóìíî èñïîëüçîâàòü êàê ïðåäåëû äëÿ öèêëà. Íå
çàáóäüòå, ÷òî â òåêñòîâûõ ïîëÿõ ñîäåðæàòñÿ ñòðîêè,
à íå ÷èñëà, è íóæíî ïðèìåíÿòü ôóíêöèþ Val() äëÿ
èõ ïðåîáðàçîâàíèÿ.
Ïðîãðàììà äîëæíà âûâîäèòü âîçðàñò, ñóììó íà
ñ÷åòó ïî êàæäîìó ãîäó, ñóììó âêëàäîâ è ïðèáûëü,
ò. å. ðàçíîñòü ñóììû íà ñ÷åòó è ñóììû âêëàäîâ.
Äëÿ ôîðìàòèðîâàíèÿ âûâîäà èñïîëüçóéòå ôóíê-
öèþ Format, íàïðèìåð:

VariableX = FormatCurrency(VariableX)

Ïîäñêàçêà 1. Äîáàâëÿéòå ãîäîâóþ ñóììó âêëàäà,


ïðåæäå ÷åì âû÷èñëÿòü ïðîöåíòû.
Ïîäñêàçêà 2. Ñóììà íà ñ÷åòó ñ ó÷åòîì ïðèðîñòà —
ýòî ñóììà íà íåì, óìíîæåííàÿ íà (1 + ïðîöåíò) (íà-
ïðèìåð, äëÿ 9% ñóììó íàäî óìíîæèòü íà 1,09).

10.6. Öèêëû â C# è J#
Êàê è âî âñåõ ñîâðåìåííûõ ÿçûêàõ ïðîãðàììèðîâà-
íèÿ, â C# è J# òîæå åñòü öèêëû! Â C# è J# åñòü
àíàëîãè öèêëà Visual Basic .NET For…Next, íî êîä
âûãëÿäèò ïî-äðóãîìó.

Öèêë íà ÿçûêå Ñ#. Âîò êàê âûãëÿäèò òàêîé


êîä â Ñ#:

for (int Counter = 1; Counter < 4; Counter++)


{
MessageBox.Show(Counter.ToString());
}

Ýòîò êîä âûãëÿäèò íå òàê, êàê îïåðàòîð For…Next,


íî äåëàåò òî æå ñàìîå. Â C# íåò îïåðàòîðà Next è
êëþ÷åâîå ñëîâî for ïèøåòñÿ ñòðî÷íûìè áóêâàìè.
Êîä, êîòîðûé äîëæåí âûïîëíÿòüñÿ â öèêëå, ïîìå-
Öèêëû ñî ñ÷åò÷èêîì 167

ùàåòñÿ â ôèãóðíûå ñêîáêè. Êîä â ñêîáêàõ ïîñëå for


óïðàâëÿåò âûïîëíåíèåì öèêëà.
Îáúÿâëåíèå ïåðåìåííîé-ñ÷åò÷èêà öèêëà è èíè-
öèàëèçàöèÿ åå íà÷àëüíûì çíà÷åíèåì:

int Counter = 1;

Óñëîâíîå âûðàæåíèå, îïðåäåëÿþùåå, êîãäà çà-


âåðøèòñÿ öèêë:

Counter < 4;

Óâåëè÷åíèå çíà÷åíèÿ ñ÷åò÷èêà íà 1:

Counter++

Ýòî âûðàæåíèå ìîæíî çàïèñàòü êàê:

Counter = Counter + 1

Öèêë íà ÿçûêå J#. Âîò òàêîé æå êîä íà J#. Îí


âûãëÿäèò òàê æå, çà èñêëþ÷åíèåì òîãî, ÷òî J# èñ-
ïîëüçóåò ôóíêöèþ System.Convert.ToString äëÿ
ïðåîáðàçîâàíèÿ çíà÷åíèÿ Counter èç öåëîãî ÷èñëà â
ñòðîêó äëÿ âûâîäà â îêíå ñîîáùåíèÿ.

for (int Counter = 1; Counter < 4; Counter++)


{
MessageBox.Show(System.Convert.ToString(Counter));
}

Õîòÿ êîä âûãëÿäèò íå òàê, êàê îïåðàòîð For…Next


â Visual Basic .NET, îí èìååò òîò æå ñìûñë — ïîçâî-
ëÿåò ìíîãîêðàòíî èñïîëíÿòü îäèí è òîò æå êîä.
Òåñò ïî òåìå «Öèêëû ñî ñ÷åò÷èêîì»
1. Êàêîå ñëîâî íå ÿâëÿåòñÿ êëþ÷åâûì â îïåðàòîðå öèêëà ñî ñ÷åò÷èêîì?

m For

m Next

m Counter

m To

2. Ñêîëüêî ðàç áóäåò âûïîëíåíî òåëî öèêëà âî âëîæåííîì öèêëå ñî


ñ÷åò÷èêîì, åñëè âíåøíèé öèêë ïîâòîðèòñÿ 2 ðàçà, à âíóòðåííèé —
5 ðàç?

m 2

m 5

m 7

m 10

3. Ïðåæäåâðåìåííûé âûõîä èç öèêëà ðåàëèçóåòñÿ ñ ïîìîùüþ îïåðàòîðà

m Exit For

m End If

m End Sub

m Exit

4. Êàêèì áóäåò çíà÷åíèå ïåðåìåííîé Counter ïîñëå çàâåðøåíèÿ öèêëà ñî


ñ÷åò÷èêîì For Counter = 1 To 2?

m 0

m 1

m 2

m 3
Ãëàâà 11

Öèêëû ñ óñëîâèåì
11.1. Öèêëû Do While...Loop
11.2. Ïîøàãîâîå âûïîëíåíèå öèêëà Do While...Loop
11.3. Öèêëû Do Until...Loop
11.4. Ïðîåêòû ñ èñïîëüçîâàíèåì Do...Loop
11.5. Öèêëû ñ ïîñòóñëîâèåì
11.6. Öèêëû â C# è J#
11.7. Âûõîä èç öèêëîâ

 2003 ãîäó
áûëà ñîçäàíà
îïåðàöèîííàÿ ñèñòåìà
Windows XP äëÿ ñåðâåðîâ,
ðàáî÷èõ ñòàíöèé è ïåðñî-
íàëüíûõ êîìïüþòåðîâ.
Îïåðàöèîííàÿ ñèñòåìà
îáåñïå÷èâàåò èíôîðìà-
öèîííóþ áåçîïàñíîñòü ïðè
ðàáîòå â ëîêàëüíîé ñåòè è â
Èíòåðíåòå (èñïîëüçóåò
ôàéëîâóþ ñèñòåìó NTFS,
ïîçâîëÿåò óñòàíàâëèâàòü
ïîëèòèêè áåçîïàñíîñòè
äëÿ ðàáî÷èõ ãðóïï è äî-
ìåíîâ è ïð.). Windows XP
îáúåäèíèëà äîñòîèíñòâà
ïîëüçîâàòåëüñêèõ îïåðà-
öèîííûõ ñèñòåì Windows
95/98/Me è ïðîôåññèîíàëü-
íûõ Windows NT/2000.
170 Ãëàâà 11

11.1. Öèêëû Do While…Loop


Åñòü ìíîæåñòâî îïåðàöèé, êîòîðûå íóæíî ïîâòî-
ðÿòü, ïîêà ÷òî-òî íå ïðîèçîéäåò. Ýòî «÷òî-òî» ïðåä-
ñòàâëÿåò ñîáîé óñëîâèå ïðåêðàùåíèÿ ïðîöåññà. Êîä
â öèêëå ñ íåîïðåäåëåííûì êîëè÷åñòâîì ïîâòîðåíèé
âûïîëíÿåòñÿ íåèçâåñòíîå çàðàíåå ÷èñëî ðàç. Îí ïå-
ðåñòàåò âûïîëíÿòüñÿ, êîãäà âûïîëíÿåòñÿ (èëè ïåðå-
ñòàåò âûïîëíÿòüñÿ) êàêîå-òî óñëîâèå. Åñòü äâà âèäà
òàêèõ öèêëîâ: do while è do until. Öèêë do while
âûïîëíÿåòñÿ, ïîêà âûïîëíÿåòñÿ óñëîâèå. Öèêë
do until âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà íå âûïîë-
íèòñÿ óñëîâèå. Èñïîëüçóÿ öèêëû ñ íåîïðåäåëåííûì
÷èñëîì ïîâòîðåíèé, íóæíî óìåòü âûáèðàòü òðåáóå-
ìûé âèä.
Öèêë Do While…Loop âûïîëíÿåò áëîê êîäà ðàç
çà ðàçîì, ïîêà âûïîëíÿåòñÿ çàäàííîå óñëîâèå. Êàê
òîëüêî óñëîâèå ïåðåñòàåò âûïîëíÿòüñÿ, âûïîëíåíèå
öèêëà çàâåðøàåòñÿ. Óñëîâèå, óïðàâëÿþùåå öèêëîì
Do While…Loop, ÿâëÿåòñÿ åãî ÷àñòüþ. Âîò ñèíòàêñèñ
öèêëà Do While… Loop â Visual Basic.NET:

Do While (Óñëîâèå)
Ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ
Loop

Îáðàòèòå âíèìàíèå íà òî, ÷òî Do, While è Loop —


ýòî êëþ÷åâûå ñëîâà. Îíè âûäåëÿþòñÿ ñèíèì öâåòîì.
Óñëîâèå çàêëþ÷åíî â ñêîáêè. Óñëîâèåì ìîæåò áûòü
ëþáîå áóëåâî âûðàæåíèå, ðåçóëüòàòîì âû÷èñëåíèÿ
êîòîðîãî ÿâëÿåòñÿ True èëè False, íàïðèìåð X < 4.
Êîä, êîòîðûé âû õîòèòå âûïîëíèòü â öèêëå, ïîìå-
ùàåòñÿ ìåæäó îïåðàòîðàìè Do While è Loop.  íà÷à-
ëå êàæäîãî âûïîëíåíèÿ öèêëà ïðîâåðÿåòñÿ óñëîâèå.
Åñëè îíî âûïîëíÿåòñÿ, òî êîä â öèêëå âûïîëíÿåòñÿ.
Åñëè óñëîâèå íå âûïîëíÿåòñÿ, íà÷èíàåò âûïîëíÿòü-
ñÿ êîä ïîñëå öèêëà.
Òåïåðü ìû ïîêàæåì âàì ïðèìåð öèêëà Do While…
Loop. Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçî-
âèòå åãî «Do-While-Loop». Ïîìåñòèòå íà ôîðìó
Öèêëû ñ óñëîâèåì 171

êíîïêó. Âûïîëíèòå ïî êíîïêå äâîéíîé ùåë÷îê, ÷òî-


áû îòðåäàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Âñòàâü-
òå â îáðàáîò÷èê ñëåäóþùèé êîä:
Êîä ìåæäó îïåðàòîðàìè
Do While è Loop ëó÷øå Dim WhileValue As Integer
âûäåëÿòü ñ ïîìîùüþ îò-
WhileValue = 0
ñòóïà. Åñëè ýòî ñäåëàòü,
Do While (WhileValue < 2)
áóäåò ëåãêî ïîíÿòü, êàêîé
MessageBox.Show(WhileValue)
êîä áóäåò âûïîëíÿòüñÿ â
öèêëå. Ïðè ýòîì óïðîñ- WhileValue = WhileValue + 1
òèòñÿ ÷òåíèå è îòëàäêà Loop
êîäà.
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó
íà ôîðìå. Ïîÿâèòñÿ îêíî ñîîáùåíèÿ ñ ÷èñëîì 0. Íà-
æìèòå êíîïêó OK. Ïîÿâèòñÿ íîâîå îêíî ñîîáùåíèÿ
ñ ÷èñëîì 1. Íàæìèòå êíîïêó OK. Âû âåðíóëèñü ê
ôîðìå. Áîëüøå îêîí ñîîáùåíèé íå ïîÿâèòñÿ.
Êàê ðàáîòàåò ýòîò êîä? Ìû îáúÿâèëè ïåðåìåí-
íóþ WhileValue. Èçíà÷àëüíî åé ïðèñâîåíî çíà÷å-
íèå 0. Ïðè êàæäîì âûïîëíåíèè öèêëà çíà÷åíèå
WhileValue óâåëè÷èâàåòñÿ íà 1.  íà÷àëå öèêëà
îïåðàòîð Do While ïðîâåðÿåò, âûïîëíÿåòñÿ ëè óñëî-
âèå WhileValue < 2. Åñëè äà, òî âûâîäèòñÿ îêíî ñî-
îáùåíèÿ è çíà÷åíèå WhileValue óâåëè÷èâàåòñÿ.
Åñëè íåò, âûïîëíåíèå öèêëà çàâåðøàåòñÿ. Öèêë âû-
ïîëíèòñÿ äâàæäû, ïðåæäå ÷åì óñëîâèå ïåðåñòàíåò
âûïîëíÿòüñÿ. Ïåðâûé ðàç â îêíå ñîîáùåíèÿ îòîáðà-
çèòñÿ çíà÷åíèå 0. Âî âòîðîé ðàç — 1. Ïðè òðåòüåì
âûïîëíåíèè îïåðàòîðà WhileValue = 2. Óñëîâèå
2 < 2 íå âûïîëíÿåòñÿ. Öèêë çàâåðøàåòñÿ, è îêíî ñî-
îáùåíèÿ íå ïîÿâëÿåòñÿ.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


11.1. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Do-While-Loop», îïè-
Microsoft-CD ñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåð-
æèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Do_While_Loop.exe.
172 Ãëàâà 11

11.2. Ïîøàãîâîå âûïîëíåíèå öèêëà


Do While…Loop
Äàâàéòå âîñïîëüçóåìñÿ îòëàäî÷íûìè èíñòðóìåíòà-
ìè Visual Studio .NET è îòñëåäèì øàã çà øàãîì âû-
ïîëíåíèå öèêëà â ïðîãðàììå «Do-While-Loop».

1.  îêíå Êîä (Code) óñòàíîâèòå òî÷êó îñòàíîâà


íà îïåðàòîðå Do While.

2. Çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó íà ôîð-


ìå. Êîä âûïîëíèòñÿ äî òî÷êè îñòàíîâà è áó-
äåò ïîäñâå÷åíà ñòðîêà ñ ýòîé òî÷êîé.

3. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ïîäñâå÷åííóþ ñòðîêó êîäà.

Do While (WhileValue < 2)

Ïîäâåäèòå êóðñîð ê ïåðåìåííîé WhileValue.


Åå çíà÷åíèå ðàâíî 0.
Öèêëû ñ óñëîâèåì 173

4. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ïîäñâå÷åííóþ ñòðîêó êîäà.
MessageBox.Show(WhileValue)
Ïîÿâèòñÿ îêíî ñîîáùåíèÿ ñ öèôðîé 0. Íà-
æìèòå êíîïêó OK.

5. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ïîäñâå÷åííóþ ñòðîêó êîäà.
WhileValue = WhileValue + 1
Çíà÷åíèå WhileValue óâåëè÷èòñÿ íà 1.

6. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ïîäñâå÷åííóþ ñòðîêó êîäà.
Loop
Öèêë âûïîëíèòñÿ åùå ðàç.
174 Ãëàâà 11

7. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ïîäñâå÷åííóþ ñòðîêó êîäà.
Do While (WhileValue < 2)
Ïîäâåäèòå êóðñîð ê ïåðåìåííîé WhileValue.
Òåïåðü åå çíà÷åíèå ðàâíî 1.

8. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ïîäñâå÷åííóþ ñòðîêó êîäà.
MessageBox.Show(WhileValue)
Ïîÿâèòñÿ îêíî ñîîáùåíèÿ ñ öèôðîé 1. Íà-
æìèòå êíîïêó OK.

9. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ïîäñâå÷åííóþ ñòðîêó êîäà.
WhileValue = WhileValue + 1
Çíà÷åíèå WhileValue óâåëè÷èòñÿ åùå íà 1.
Öèêëû ñ óñëîâèåì 175

10. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ïîäñâå÷åííóþ ñòðîêó êîäà.
Loop
Öèêë íà÷íåò âûïîëíÿòüñÿ ñíîâà.

11. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ïîäñâå÷åííóþ ñòðîêó êîäà.
Do While (WhileValue < 2)
Ïîäâåäèòå êóðñîð ê ïåðåìåííîé WhileValue.
Åå çíà÷åíèå ðàâíî 2. Óñëîâèå WhileValue < 2
ïåðåñòàëî âûïîëíÿòüñÿ, ïîýòîìó âûïîëíå-
íèå öèêëà çàâåðøàåòñÿ. Îêíî ñîîáùåíèÿ áîëü-
øå íå ïîÿâëÿåòñÿ, è çíà÷åíèå WhileValue
íå óâåëè÷èâàåòñÿ.
176 Ãëàâà 11

12. Íàæìèòå êëàâèøó {F11}, ÷òîáû âûïîëíèòü


ïîäñâå÷åííóþ ñòðîêó êîäà.
End Sub
Âûïîëíåíèå îáðàáîò÷èêà çàâåðøàåòñÿ. Ñíî-
âà îòîáðàæàåòñÿ ôîðìà.

Òåïåðü âû âèäåëè, êàê âûïîëíÿåòñÿ öèêë


Do While…Loop.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


11.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
Microsoft-CD .NET ñîçäàòü ïðîåêò «Do-While-Loop». Ïðî-
âåñòè ïîøàãîâîå âûïîëíåíèå ïðîåêòà òàê,
êàê ýòî îïèñàíî â ïàðàãðàôå. Ãîòîâûé ïðî-
åêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ
àðõèâå Do_While_Loop.exe.

11.3. Öèêëû Do Until…Loop


Öèêë Do Until…Loop âûïîëíÿåò áëîê îïåðàòîðîâ
êîäà, ïîêà êàêîå-òî óñëîâèå íå ñòàíåò èñòèííûì.
Ýòî óñëîâèå ìîæåò áûòü ëþáûì áóëåâûì âûðàæåíè-
åì, ðåçóëüòàòîì âû÷èñëåíèÿ êîòîðîãî áóäåò True
èëè False. Âîò ñèíòàêèñ öèêëà Do Until…Loop â
Visual Basic .NET:

Do Until (Óñëîâèå)
Ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ
Loop
Öèêëû ñ óñëîâèåì 177

Ñëîâà Do, Until è Loop — êëþ÷åâûå. Îíè âûäå-


ëåíû ñèíèì öâåòîì. Èñòèííîñòü óñëîâèÿ ïðîâåðÿåò-
ñÿ â íà÷àëå âûïîëíåíèÿ öèêëà. Åñëè óñëîâèå ëîæíî,
òî âûïîëíÿåòñÿ êîä â öèêëå. Êîãäà óñëîâèå â îïåðà-
òîðå Do, Until ñòàíîâèòñÿ èñòèííûì, öèêë çàâåð-
øàåòñÿ.
Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå
åãî «Do-Until-Loop». Ïîìåñòèòå êíîïêó íà ôîðìó.
Âûïîëíèòå äâîéíîé ùåë÷îê ïî ýòîé êíîïêå, ÷òîáû
îòðåäàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â
îáðàáîò÷èê ñëåäóþùèé êîä:

Dim UntilValue As Integer


UntilValue = 0
Do Until (UntilValue > 1)
MessageBox.Show(UntilValue)
UntilValue = UntilValue + 1
Loop

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó.


Ïîÿâèòñÿ îêíî ñîîáùåíèÿ ñ öèôðîé 0. Íàæìèòå OK.
Ïîÿâèòñÿ îêíî ñîîáùåíèÿ ñ öèôðîé 1. Íàæìèòå OK.
Âûïîëíåíèå öèêëà çàêîí÷èòñÿ, è ñíîâà ïîÿâèòñÿ
ôîðìà.
Êàê ðàáîòàåò öèêë Do Until…Loop? Ñíà÷àëà ìû
îáúÿâèëè ïåðåìåííóþ UntilValue è ïðîèíèöèàëèçè-
ðîâàëè åå çíà÷åíèåì 0. Çíà÷åíèå ïåðåìåííîé Until-
Value èñïîëüçóåòñÿ â óñëîâèè, ÷òîáû îïðåäåëèòü,
äîëæåí ëè öèêë âûïîëíÿòüñÿ ñíîâà. Ïðè êàæäîì
âûïîëíåíèè öèêëà çíà÷åíèå ïåðåìåííîé UntilValue
óâåëè÷èâàåòñÿ íà 1.  îïåðàòîðå Do Until ñîäåð-
æèòñÿ îïåðàòîð ñðàâíåíèÿ, ïðîâåðÿþùèé, áîëüøå
ëè çíà÷åíèå UntilValue, ÷åì 1. Ïðè ïåðâîé ïðîâåðêå
çíà÷åíèå UntilValue ðàâíî 0. Óñëîâèå ëîæíî, è âû-
ïîëíÿåòñÿ êîä âíóòðè öèêëà. Âûâîäèòñÿ îêíî ñîîáùå-
íèÿ, è çíà÷åíèå UntilValue óâåëè÷èâàåòñÿ íà 1.
Ïðè âòîðîé ïðîâåðêå çíà÷åíèå UntilValue ðàâíî 1.
Óñëîâèå ïî-ïðåæíåìó ëîæíî, è êîä â öèêëå âûïîë-
íÿåòñÿ åùå ðàç. Íî ïðè òðåòüåé ïðîâåðêå çíà÷åíèå
UntilValue ðàâíî 2. Óñëîâèå ëîæíî (2 > 1), è âû-
ïîëíåíèå öèêëà çàêàí÷èâàåòñÿ.
178 Ãëàâà 11

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


11.3. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Do-Until-Loop», îïè-
Microsoft-CD
ñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåð-
æèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Do_Until_Loop.exe.

11.4. Ïðîåêòû ñ èñïîëüçîâàíèåì


Do…Loop
À òåïåðü äàâàéòå ðàçáåðåì ïðèìåðû ñ öèêëàìè Do
While…Loop è Do Until…Loop, â êîòîðûõ èñïîëü-
çóþòñÿ áóëåâû âûðàæåíèÿ, íå çàâèñÿùèå íàïðÿìóþ
îò çíà÷åíèÿ ïåðåìåííîé-ñ÷åò÷èêà. Ïåðâûé ïðèìåð
èñïîëüçóåò öèêë Do While…Loop ñ áóëåâûì âûðàæå-
íèåì, ïðîâåðÿþùèì, áîëüøå ëè çíà÷åíèå ïåðåìåí-
íîé íóëÿ èëè ðàâíî åìó. Åñëè çíà÷åíèå ïåðåìåííîé
ñòàíåò ìåíüøå íóëÿ, âûïîëíåíèå öèêëà çàâåðøèòñÿ.
Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå
åãî «Do-While-Loop-2». Ïîìåñòèòå íà ôîðìó êíîïêó.
Èçìåíèòå çíà÷åíèå ñâîéñòâà Text ýòîé êíîïêè íà
Âû÷èñëèòü. Âûïîëíèòå äâîéíîé ùåë÷îê ïî íåé,
÷òîáû îòðåäàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Äî-
áàâüòå â íåãî ñëåäóþùèé êîä:

Dim Index As Integer = 0


Dim Controller As Integer = 167
Do While (Controller >= 0)
Index = Index + 1
Controller = Controller - (23 * Index)
Loop
MessageBox.Show(Controller)

Ïîñòðîéòå è çàïóñòèòå ïðîåêò «Do-While-Loop-2».


Íàæìèòå êíîïêó ñ íàäïèñüþ Âû÷èñëèòü. Ïîÿâèòñÿ
îêíî ñîîáùåíèÿ ñ ÷èñëîì –63. Êàê ýòîò êîä ðàáîòà-
åò? Ìû îáúÿâèëè äâå öåëî÷èñëåííûå ïåðåìåííûå
Index è Controller è çàäàëè èõ íà÷àëüíûå çíà÷å-
íèÿ. Çíà÷åíèå ïåðåìåííîé Index óâåëè÷èâàåòñÿ
Öèêëû ñ óñëîâèåì 179

íà 1 ïðè êàæäîì âûïîëíåíèè öèêëà. Ïðè êàæäîì


âûïîëíåíèè öèêëà äëÿ ïåðåìåííîé Controller âû-
÷èñëÿåòñÿ íîâîå çíà÷åíèå — ïî áîëåå ñëîæíîé ôîð-
ìóëå. Ýòî çíà÷åíèå âû÷èñëÿåòñÿ ïóòåì óìíîæåíèÿ
çíà÷åíèÿ Index íà 23 è âû÷èòàíèÿ ðåçóëüòàòà óìíî-
æåíèÿ èç ñòàðîãî çíà÷åíèÿ ïåðåìåííîé Controller.
Ïðè êàæäîì âûïîëíåíèè öèêëà çíà÷åíèå ïåðåìåí-
íîé Controller áóäåò óìåíüøàòüñÿ. Ñëîæíî íà-
âñêèäêó ñêàçàòü, ñêîëüêî ðàç öèêë âûïîëíèòñÿ,
ïðåæäå ÷åì çíà÷åíèå ïåðåìåííîé Controller ñòà-
íåò ìåíüøå 0, è öèêë çàâåðøèòñÿ. Íî ýòî íè÷åãî íå
çíà÷èò, ïîñêîëüêó äëÿ áóëåâà âûðàæåíèÿ âàæíî
çíà÷åíèå òîëüêî ïåðåìåííîé Controller, à íå ïåðå-
ìåííîé Index.
Âî âòîðîì ïðèìåðå ìû èñïîëüçóåì öèêë Do
While…Loop ñ áóëåâûì âûðàæåíèåì, êîòîðîå ïðîâå-
ðÿåò, âûáðàí ëè ïåðåêëþ÷àòåëü RadioButton3. Ïðè
êàæäîì âûïîëíåíèè öèêëà âûáèðàåòñÿ íîâûé ïåðå-
êëþ÷àòåëü.
 ïðîåêòå «Do-While-Loop-2» äîáàâüòå íà ôîðìó
åùå îäíó êíîïêó. Èçìåíèòå çíà÷åíèå ñâîéñòâà
Text ýòîé êíîïêè íà While. Äîáàâüòå íà ôîðìó òðè
ïåðåêëþ÷àòåëÿ. Âûïîëíèòå äâîéíîé ùåë÷îê ïî íî-
âîé êíîïêå, ÷òîáû îòðåäàêòèðîâàòü îáðàáîò÷èê åå
íàæàòèÿ. Äîáàâüòå â îáðàáîò÷èê òàêîé êîä:
Dim Index As Integer = 0
RadioButton1.Checked = True
Do While (RadioButton3.Checked = False)
Index = Index + 1
If Index = 1 Then
RadioButton1.Checked = True
End If
If Index = 2 Then
RadioButton2.Checked = True
End If
If Index = 3 Then
RadioButton3.Checked = True
End If
Loop
MessageBox.Show(Index)
180 Ãëàâà 11

Ïîñòðîéòå è çàïóñòèòå ïðèëîæåíèå. Îáðàòèòå


âíèìàíèå íà òî, ÷òî âûáðàíà ïîçèöèÿ ïåðåêëþ÷àòå-
ëÿ RadioButton1. Íàæìèòå êíîïêó ñ íàäïèñüþ
While. Êîä âûáåðåò ïîçèöèþ ïåðåêëþ÷àòåëÿ Radio-
Button3, è â îêíå ñîîáùåíèÿ áóäåò âûâåäåíî çíà÷å-
íèå ïåðåìåííîé Index. Åñëè ó âàñ î÷åíü õîðîøàÿ
ðåàêöèÿ èëè î÷åíü ñòàðûé êîìïüþòåð, âû ìîæåòå
çàìåòèòü, êàê íà ìãíîâåíèå áûëà âûáðàíà ïîçèöèÿ
ïåðåêëþ÷àòåëÿ RadioButton2.
Âîò ÷òî ïðîèñõîäèò. Ìû îáúÿâëÿåì ïåðåìåííóþ
Index, ÷òîáû îòñëåæèâàòü, ñêîëüêî ðàç âûïîëíèòñÿ
êîä â öèêëå. Îäíàêî ýòà ïåðåìåííàÿ íå èñïîëüçóåòñÿ
â áóëåâîì âûðàæåíèè, óïðàâëÿþùåì öèêëîì Do
While…Loop. Âìåñòî ýòîãî Index èñïîëüçóåòñÿ äëÿ
ïåðåáîðà ïåðåêëþ÷àòåëåé. Áóëåâî âûðàæåíèå â öèê-
ëå Do While…Loop ïðîâåðÿåò, âûáðàí ëè ïåðåêëþ-
÷àòåëü RadioButton3. Êàê òîëüêî óñëîâèå Radio-
Button3.Checked = True âûïîëíÿåòñÿ, öèêë çà-
âåðøàåòñÿ.
 òðåòüåì ïðèìåðå ìû èñïîëüçóåì îïåðàòîð Do
Until…Loop. Áóëåâî âûðàæåíèå ñðàâíèâàåò çíà÷å-
íèå ñâîéñòâà Text òåêñòîâîãî ïîëÿ ñî çíà÷åíèåì
ñòðîêîâîé ïåðåìåííîé, êîòîðîå èçìåíÿåòñÿ ñ êàæ-
äîé èòåðàöèåé öèêëà. Äîáàâüòå òåêñòîâîå ïîëå íà
ôîðìó ïðîåêòà «Do-Until-Loop-2». Îñòàâüòå çíà÷å-
íèå TextBox1 ñâîéñòâà Text òåêñòîâîãî ïîëÿ. Äî-
áàâüòå íà ôîðìó êíîïêó è èçìåíèòå çíà÷åíèå ñâîéñòâà
Text ýòîé êíîïêè íà Ñðàâíèòü òåêñòû. Âûïîëíèòå
äâîéíîé ùåë÷îê ïî íîâîé êíîïêå, ÷òîáû îòðåäàêòè-
ðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â îáðàáîò-
÷èê ñëåäóþùèé êîä:

Dim MatchText As String = ""


Dim Index As Integer = 0
Do Until (MatchText = TextBox1.Text)
Index = Index + 1
If Index = 2 Then
MatchText = "Text"
End If
If Index = 3 Then
MatchText = "Box1"
Öèêëû ñ óñëîâèåì 181

End If
If Index = 4 Then
MatchText = "TextBox1"
End If
Loop
MessageBox.Show("Ïðè çíà÷åíèè ñ÷åò÷èêà " &_
Index & " òåêñòû ðàâíû")

Ïîñòðîéòå è çàïóñòèòå ïðèëîæåíèå. Íàæìèòå


êíîïêó ñ íàäïèñüþ Ñðàâíèòü òåêñòû. Â ïîÿâèâ-
øåìñÿ îêíå ñîîáùåíèÿ áóäåò ïîêàçàíî çíà÷åíèå ïå-
ðåìåííîé Index, ïðè êîòîðîì òåêñòû ñîâïàëè.
 êîäå èñïîëüçóåòñÿ îïåðàòîð Do Until…Loop.
Ïåðåìåííàÿ Index èñïîëüçóåòñÿ òîëüêî äëÿ îïðåäå-
ëåíèÿ çíà÷åíèÿ ïåðåìåííîé MatchText. Áóëåâî âûðà-
æåíèå ñðàâíèâàåò çíà÷åíèå ïåðåìåííîé MatchText è
çíà÷åíèå ñâîéñòâà Text òåêñòîâîãî ïîëÿ TextBox1.
Ïðè ÷åòâåðòîì âûïîëíåíèè êîäà â öèêëå çíà÷åíèå
Index áóäåò ðàâíî 4, è MatchText = "TextBox1".
Áóëåâî âûðàæåíèå ñòàíåò èñòèííûì, ïîñêîëüêó
"TextBox1" = "TextBox1", è âûïîëíåíèå öèêëà
çàâåðøèòñÿ.
À ÷òî, åñëè ñâîéñòâó Text òåêñòîâîãî ïîëÿ Text-
Box1 ïðèñâîèòü çíà÷åíèå Òåêñò? Ñìîæåòå ëè âû äî-
áàâèòü â êîä åùå îäèí îïåðàòîð If..Then, ÷òîáû
êîä âñå ðàâíî ðàáîòàë?

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


11.4. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
Microsoft-CD .NET ñîçäàòü ïðîåêò «Do-While-Loop-2»,
îïèñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñî-
äåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Do_While_Loop_2.exe.

11.5. Öèêëû ñ ïîñòóñëîâèåì


 ïðåäûäóùèõ ïàðàãðàôàõ öèêëû Do While…Loop
è Do Until…Loop èñïîëüçîâàëèñü ñ ïðåäóñëîâèåì,
182 Ãëàâà 11

ò. å. óñëîâèå ðàñïîëàãàëîñü â íà÷àëå öèêëà. Îäíàêî


ìîæíî èñïîëüçîâàòü öèêëû Do While…Loop è
Do…Loop Until è ñ ïîñòóñëîâèåì, ò. å. ÷òîáû óñëî-
âèå ðàñïîëàãàëîñü â êîíöå öèêëà. Â òàêèõ öèêëàõ
îïåðàòîðû âíóòðè öèêëîâ áóäóò âñåãäà âûïîëíÿòü-
ñÿ õîòÿ áû îäèí ðàç. Ïîòîì áóäåò ïðîâåðÿòüñÿ âû-
ïîëíåíèå óñëîâèÿ. Âîò ïðèìåð îïåðàòîðà Do…Loop
While ñ ïîñòóñëîâèåì:

Dim WhileValue As Integer


WhileValue = 0
Do
MessageBox.Show(WhileValue)
WhileValue = WhileValue + 1
Loop While (WhileValue < 2)

À âîò ïðèìåð îïåðàòîðà Do…Loop Until:

Dim UntilValue As Integer


UntilValue = 0
Do
MessageBox.Show(UntilValue)
UntilValue = UntilValue + 1
Loop Until (UntilValue > 1)

Îïåðàòîðû îò Do è äî Loop âûïîëíÿòñÿ êàê ìè-


íèìóì îäèí ðàç. Çàòåì áóäåò ïðîâåðåíî âûïîëíåíèå
óñëîâèÿ, ÷òîáû îïðåäåëèòü, äîëæåí ëè öèêë âûïîë-
íÿòüñÿ åùå ðàç.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


11.5. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Öèêëû ñ ïîñòóñëîâè-
Microsoft-CD åì», îïèñàííûé â ïàðàãðàôå. Ãîòîâûé ïðî-
åêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ
àðõèâå Öèêëû_ñ_ïîñòóñëîâèåì.exe.

11.6. Öèêëû â J# è C#
Äàâàéòå ïîñìîòðèì íà öèêëû ñ íåîïðåäåëåííûì êî-
ëè÷åñòâîì ïîâòîðåíèé â C# è J#.
Öèêëû ñ óñëîâèåì 183

Öèêëû â ÿçûêå C#. Íà C# ìîæíî íàïèñàòü êîä,


äåëàþùèé òî æå, ÷òî è îïåðàòîðû Do While…Loop è
Do…Loop While â Visual Basic .NET. Â C# íåò ýêâè-
âàëåíòîâ îïåðàòîðàì Do Until…Loop èëè Do…Loop
Until.
Âîò êàê íàïèñàòü òàêîé öèêë (while è loop çà-
ïèñûâàþòñÿ ñòðî÷íûìè áóêâàìè) íà C#. Çäåñü óñëî-
âèå ïðîâåðÿåòñÿ â íà÷àëå âûïîëíåíèÿ öèêëà:
int WhileValue=0;
While (WhileValue<5)
{
MessageBox.Show(WhileValue.ToString());
WhileValue=WhileValue+1;
}

À âîò êîä íà C# äëÿ öèêëà do…while loop (do,


while è loop çàïèñûâàþòñÿ ñòðî÷íûìè áóêâàìè),
èñòèííîñòü óñëîâèÿ â êîòîðîì ïðîâåðÿåòñÿ ïîñëå
âûïîëíåíèÿ êîäà â öèêëå:
int WhileValue=0;
do
{
MessageBox.Show(WhileValue.ToString());
WhileValue=WhileValue+1;
}
while(WhileValue<5);

Öèêëû â ÿçûêå J#. À òåïåðü ïîñìîòðèì íà êîä


íà J#, êîòîðûé î÷åíü ïîõîæ íà êîä íà C#.  J# íåò
ýêâèâàëåíòîâ îïåðàòîðàì Do Until…Loop èëè
Do…Loop Until èç Visual Basic .NET. Âîò êàê ñîçäà-
åòñÿ öèêë (while è loop çàïèñûâàþòñÿ ñòðî÷íûìè
áóêâàìè) íà J#. Çäåñü öèêë ïðîâåðÿåò èñòèííîñòü
óñëîâèÿ â íà÷àëå âûïîëíåíèÿ:
int WhileValue=0;
while (WhileValue<5)
{
MessageBox.Show(System.Convert.ToString
(WhileValue));
WhileValue=WhileValue+1;
}
184 Ãëàâà 11

Âîò êîä íà J# äëÿ öèêëà (do, while è loop çàïè-


ñûâàþòñÿ ñòðî÷íûìè áóêâàìè), ïðîâåðÿþùåãî èñ-
òèííîñòü óñëîâèÿ ïîñëå âûïîëíåíèÿ êîäà â öèêëå:

int WhileValue=0;
do
{
MessageBox.Show(System.Convert.ToString
(WhileValue));
WhileValue=WhileValue+1;
}
while (WhileValue<5);

11.7. Âûõîä èç öèêëîâ


Èç öèêëîâ Do While…Loop, Do Until…Loop, Do…Loop
While è Do…Loop Until ìîæíî âûéòè ñ èñïîëüçîâà-
íèåì îïåðàòîðà Exit Do. Ñ ïîìîùüþ îïåðàòîðà
If…Then ïðîâåðÿåòñÿ èñòèííîñòü óñëîâèÿ, óïðàâëÿ-
þùåãî âûïîëíåíèåì îïåðàòîðà Exit Do. Åñëè óñëî-
âèå èñòèííî, òî âûïîëíÿåòñÿ îïåðàòîð Exit Do è
âûïîëíåíèå öèêëà çàâåðøàåòñÿ. Èñïîëüçóéòå Exit
Do, åñëè âû õîòèòå çàâåðøèòü âûïîëíåíèå öèêëà äî
òîãî, êàê åãî óïðàâëÿþùåå óñëîâèå ñòàíåò èñòèí-
íûì (èëè ëîæíûì).
Äàâàéòå ðàçáåðåì ïðèìåð âûõîäà èç öèêëà Do
Until…Loop. Ñîçäàéòå íîâîå ïðèëîæåíèå Windows
è íàçîâèòå åãî «Exit-Do». Ïîìåñòèòå íà ôîðìó êíîï-
êó. Âûïîëíèòå äâîéíîé ùåë÷îê ïî êíîïêå, ÷òîáû
îòðåäàêòèðîâàòü îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â
îáðàáîò÷èê ñëåäóþùèé êîä:
Dim UntilValue As Integer
UntilValue = 0
Do Until (UntilValue > 10)
MessageBox.Show(UntilValue)
UntilValue = UntilValue + 1
If UntilValue = 5 Then
Exit Do
End If
Loop
MessageBox.Show("Exit Value= " & UntilValue)
Öèêëû ñ óñëîâèåì 185

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


íà ôîðìå. Ïðè êàæäîì âûïîëíåíèè öèêëà çíà÷åíèå
ïåðåìåííîé UntilValue áóäåò óâåëè÷èâàòüñÿ íà 1 è
ýòè çíà÷åíèÿ áóäóò âûâîäèòüñÿ â îêíàõ ñîîáùåíèé.
Çàêðûâàéòå êàæäîå îêíî ñîîáùåíèÿ íàæàòèåì êíîï-
êè OK. Êîãäà çíà÷åíèå UntilValue äîñòèãíåò 5,
óñëîâèå â îïåðàòîðå If…Then ñòàíåò èñòèííûì. Áó-
äåò âûïîëíåí îïåðàòîð Exit Do. Âûïîëíåíèå öèêëà
çàâåðøèòñÿ, è íà÷íåò âûïîëíÿòüñÿ êîä çà îïåðàòî-
ðîì Do Until…Loop. Ýòîò êîä âûâåäåò íà ýêðàí îêíî
ñîîáùåíèÿ ñ òåêñòîì «Exit Value= 5». Íàæìèòå â
ýòîì îêíå êíîïêó OK, ÷òîáû âåðíóòüñÿ íà ôîðìó.
Òî÷íî òàêîé æå îïåðàòîð Exit Do ìîæíî èñïîëü-
çîâàòü äëÿ âûõîäà èç öèêëîâ Do While…Loop äî òîãî,
êàê óïðàâëÿþùåå óñëîâèå ñòàíåò ëîæíûì.
Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ
11.6. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Exit-Do», îïèñàííûé â
ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñà-
Microsoft-CD ìîðàñïàêîâûâàþùåìñÿ àðõèâå Exit_Do.exe.
11.7. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Ìèøåíü», â êîòîðîì
êîìïüþòåð ïûòàåòñÿ ïîïàñòü â ìèøåíü. Çà-
ãîòîâêà ïðîåêòà õðàíèòñÿ â ñàìîðàñïàêîâûâà-
þùåìñÿ àðõèâå Ìèøåíü.exe. Ôîðìà äîëæíà
âûãëÿäåòü ïðèìåðíî òàê:
186 Ãëàâà 11

 çàãîòîâêå ïðîåêòà ñîäåðæèòñÿ êîä äëÿ îáðà-


áîò÷èêà íàæàòèé êíîïêè ñ íàäïèñüþ New Game,
ïîòîìó ÷òî â íåì èñïîëüçóþòñÿ ãðàôè÷åñêèå âîç-
ìîæíîñòè, íå ðàññìàòðèâàþùèåñÿ â ýòîì êóðñå. Âû
äîëæíû íàïèñàòü êîä äëÿ îáðàáîò÷èêà íàæàòèé
êíîïêè ñ íàäïèñüþ Play.
Öåëü èãðû — ïîäñ÷èòàòü êîëè÷åñòâî ïîïûòîê,
íåîáõîäèìûõ äëÿ ïîïàäàíèÿ â ìàëåíüêóþ òî÷êó â
öåíòðå ìèøåíè. Ðàçìåð ýòîé òî÷êè — 1 ïèêñåëü.
Ïîñêîëüêó ðàçìåð ðèñóíêà 200 × 200 ïèêñåëåé, êî-
îðäèíàòû òî÷êè â öåíòðå — 100, 100.
Ñãåíåðèðóéòå ñëó÷àéíîå öåëîå çíà÷åíèå äëÿ ïå-
ðåìåííîé X, èñïîëüçóåìîé äëÿ èçìåðåíèÿ ãîðèçîí-
òàëüíîé êîîðäèíàòû. Ñãåíåðèðóéòå ñëó÷àéíîå öåëîå
çíà÷åíèå äëÿ ïåðåìåííîé Y, èñïîëüçóåìîé äëÿ èçìåðå-
íèÿ âåðòèêàëüíîé êîîðäèíàòû. Äëÿ ãåíåðàöèè ñëó÷àé-
íîãî ÷èñëà â äèàïàçîíå 0–200 èñïîëüçóåòñÿ òàêîé êîä:
Dim MyRandomGenerator As System.Random
MyRandomGenerator = New System.Random
Dim RanNum As Integer

‘ Ãåíåðèðóåì ñëó÷àéíîå ÷èñëî îò 0 äî 200 – íå


‘âêëþ÷àÿ 200.
RanNum = MyRandomGenerator.Next(0, 200)

Âû óìååòå èñïîëüçîâàòü öèêëû ñ íåîïðåäåëåí-


íûì êîëè÷åñòâîì ïîâòîðåíèé, è çäåñü î÷åíü óäîáíî
ïðèìåíèòü òàêîé öèêë. Åãî âûïîëíåíèå çàêîí÷èòñÿ,
êîãäà X è Y îäíîâðåìåííî ñòàíóò ðàâíû 100.
Ñ÷èòàéòå êîëè÷åñòâî âûïîëíåíèé öèêëà. Ðåçóëü-
òàò âûâîäèòå â òåêñòîâîå ïîëå TextBox1.
Âîò êîä äëÿ îòîáðàæåíèÿ ïîïàäàíèÿ íà ìèøåíè:
g.DrawEllipse(MyPen, New Rectangle(X, Y, 1, 1))

11.8. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic


.NET ñîçäàòü ïðîåêò «Ìîíåòà», èìèòèðóþ-
ùèé ïîäáðàñûâàíèå ìîíåòû. Âû êîãäà-íè-
áóäü èíòåðåñîâàëèñü, ñêîëüêî ðàç íóæíî
ïîäáðîñèòü ìîíåòó, ÷òîáû òðè ðàçà ïîäðÿä
âûïàëà ðåøêà? À ÷åòûðå ðàçà? À ïÿòü? Çàãî-
Öèêëû ñ óñëîâèåì 187

òîâêà ôîðìû ïðîåêòà õðàíèòñÿ â ñàìîðàñïà-


êîâûâàþùåìñÿ àðõèâå Ìîíåòà.exe. Ôîðìà
äîëæíà âûãëÿäåòü ïðèìåðíî òàê:

Êîä äëÿ ãåíåðàöèè ñëó÷àéíî âûïàäàþùèõ 0 èëè


1 òàêîé:
Dim MyRandomGenerator As System.Random
MyRandomGenerator = New System.Random
Dim RanNum As Integer
‘ Ãåíåðèðóåì ñëó÷àéíîå çíà÷åíèå ìåæäó 0 è 2 –
‘íå âêëþ÷àÿ 2.
RanNum = MyRandomGenerator.Next(0, 2)
Ïðåäïîëîæèì, ÷òî 1 — ýòî ðåøêà, à 0 — îðåë.
Ïðîäîëæàéòå ãåíåðèðîâàòü ñëó÷àéíûå ÷èñëà, ïîêà
íå ïîëó÷èòå ñòîëüêî åäèíèö ïîäðÿä, ñêîëüêî óêàçà-
íî â òåêñòîâîì ïîëå TextBox1. Åñëè âûïàäàåò 0, íà-
÷èíàéòå ñíà÷àëà. Ïîìåñòèòå êîëè÷åñòâî ñäåëàííûõ
ïîïûòîê â TextBox2.
Ïðè òåñòèðîâàíèè ëó÷øå äîáàâèòü â öèêë îïåðà-
òîð, êîòîðûé ïðåêðàòèò âûïîëíåíèå, åñëè êîëè÷åñò-
âî ñäåëàííûõ ïîïûòîê ñòàíåò áîëüøå êàêîãî-òî î÷åíü
áîëüøîãî ÷èñëà.
11.9. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Ñðåäíÿÿ îöåíêà», âû-
÷èñëÿþùèé ñðåäíþþ îöåíêó äëÿ ïîñëåäîâà-
òåëüíîñòè îöåíîê. Çàãîòîâêà ôîðìû ïðîåêòà
õðàíèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Ñðåäíÿÿ_îöåíêà.exe. Ôîðìà äîëæíà âûãëÿ-
äåòü ïðèìåðíî òàê:
188 Ãëàâà 11

Ýòà ïðîãðàììà èñïîëüçóåò ôóíêöèþ InputBox(),


êîòîðàÿ âûâîäèò ïîêàçàííîå íèæå îêíî.

Ýòî íîâàÿ äëÿ âàñ âîçìîæíîñòü, ïîýòîìó íèæå ïðè-


âåäåí êîä, êîòîðûé âàì ïîíàäîáèòñÿ. Îáúÿâèòå ïåðå-
ìåííóþ, â êîòîðîé áóäåò õðàíèòüñÿ ââåäåííàÿ îöåíêà:
Dim GradeIn As String = "None Entered"

Çàòåì âíóòðè öèêëà ñ íåîïðåäåëåííûì êîëè÷åñò-


âîì ïîâòîðåíèé íóæíî ïîìåñòèòü òàêîé êîä:
GradeIn = InputBox("Enter A, B, C, D, or F",_
"Enter letter grade", "")

Ïîëüçîâàòåëü ñìîæåò ââîäèòü ñòîëüêî îöåíîê,


ñêîëüêî åìó íóæíî. Êîãäà îí çàõî÷åò çàêîí÷èòü
ââîä, îí äîëæåí ëèáî íå ââîäèòü íèêàêîé îöåíêè,
ëèáî íàæàòü êíîïêó ñ íàäïèñüþ Cancel. Â ëþáîì èç
ýòèõ ñëó÷àåâ ïåðåìåííàÿ GradeIn áóäåò ïóñòîé. Ïó-
ñòàÿ ñòðîêà îáîçíà÷àåòñÿ äâóìÿ êàâû÷êàìè ïîäðÿä,
áåç ïðîáåëà ìåæäó íèìè.
Îöåíêà A — ýòî 4 áàëëà, B — 3, C — 2, D — 1, à
F — 0. Èãíîðèðóéòå ëþáûå äðóãèå áóêâû èëè öèô-
ðû. Ïîëüçîâàòåëü ìîæåò ââîäèòü êàê ñòðî÷íûå, òàê
è çàãëàâíûå áóêâû.
Âñå ââåäåííûå îöåíêè äîëæíû îòîáðàæàòüñÿ â
òåêñòîâîì ïîëå âíèçó îêíà äëÿ ïðîâåðêè.
Êîãäà âñå îöåíêè áóäóò ââåäåíû, âû÷èñëèòå
ñðåäíþþ îöåíêó.
Òåñò ïî òåìå «Öèêëû ñ óñëîâèåì»
1. Äî êàêèõ ïîð ïðîäîëæàåòñÿ âûïîëíåíèå öèêëà Do…While Loop?

m Ïîêà óñëîâèå íå ñòàíåò èñòèííûì

m Ïîêà óñëîâèå íå ñòàíåò ëîæíûì

m Ïîêà çíà÷åíèå ñ÷åò÷èêà íå äîñòèãíåò ìàêñèìàëüíîãî çíà÷åíèÿ

m Áåñêîíå÷íî

2. Äî êàêèõ ïîð ïðîäîëæàåòñÿ âûïîëíåíèå öèêëà Do…Until Loop?

m Ïîêà óñëîâèå íå ñòàíåò èñòèííûì

m Ïîêà óñëîâèå íå ñòàíåò ëîæíûì

m Ïîêà çíà÷åíèå ñ÷åò÷èêà íå äîñòèãíåò ìàêñèìàëüíîãî çíà÷åíèÿ

m Áåñêîíå÷íî

3. Ïðåæäåâðåìåííûé âûõîä èç öèêëà ðåàëèçóåòñÿ ñ ïîìîùüþ îïåðàòîðà

m Exit For

m End Do

m Exit Do

m Stop Do

4. Ãäå â öèêëå Do…While Loop ðàçìåùàåòñÿ óñëîâèå?

m Ïîñëå êëþ÷åâîãî ñëîâà Do

m Ïîñëå êëþ÷åâîãî ñëîâà While

m Ïîñëå êëþ÷åâîãî ñëîâà Loop

m Âíóòðè òåëà öèêëà


Ãëàâà 12
Ïîäïðîãðàììû è ôóíêöèè
12.1. ×òî òàêîå ïîäïðîãðàììû?
12.2. Ñîçäàíèå è âûçîâ ïîäïðîãðàìì
12.3. Ïîäïðîãðàììû ñ àðãóìåíòàìè
12.4. Ñîçäàíèå è âûçîâ ñîáñòâåííûõ ôóíêöèé
12.5. Âñòðîåííûå ôóíêöèè
12.6. Ôóíêöèè â J# è C#

 2003 ãîäó áûëà ñîçäàíà ñèñòåìà îáúåêòíî-îðèåíòèðîâàííîãî


ïðîãðàììèðîâàíèÿ Visual Basic .NET 2003, à â 2005 ãîäó — ñèñòå-
ìà îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ Visual Basic 2005 Express
Edition. Visual Basic .NET ÿâëÿåòñÿ ñèñòåìîé âèçóàëüíîãî îáúåêòíî-îðèåíòèðî-
âàííîãî ïðîãðàììèðîâàíèÿ íà ïëàòôîðìå .NET Framework — íîâîé êîìïüþòåð-
íîé ïëàòôîðìå ðàçðàáîòêè ïðèëîæåíèé â îïåðàöèîííîé ñèñòåìå Windows.
Ïëàòôîðìà .NET Framework ïðåäîñòàâëÿåò âîçìîæíîñòü ñîçäàâàòü ïðèëîæåíèÿ
íà ðàçëè÷íûõ ÿçûêàõ îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ: Visual
Basic .NET, J# (÷èòàåòñÿ «Äæåé-øàðï»), ñîçäàííîì íà îñíîâå ÿçûêà Java, C#
(÷èòàåòñÿ «Cè-øàðï»), ñîçäàííîì íà îñíîâå ÿçûêîâ C è C++.
Îñíîâíûì êîìïîíåíòîì .NET Framework ÿâëÿåòñÿ îáùåÿçûêîâàÿ ñðåäà âûïîë-
íåíèÿ ïðîãðàìì (CLR — Common Language Runtime), êîòîðàÿ îáåñïå÷èâàåò
êîìïèëÿöèþ ïðîãðàìì â äâà ýòàïà. Ñíà÷àëà ïðîãðàììà, íàïèñàííàÿ íà îáúåêò-
íî-îðèåíòèðîâàííîì ÿçûêå, êîìïèëèðóåòñÿ â ïðîìåæóòî÷íûé êîä íà ÿçûêå Mic-
rosoft Intermediate Language, à çàòåì — â ìàøèííûé êîä.
Ïîäïðîãðàììû è ôóíêöèè 191

12.1. ×òî òàêîå ïîäïðîãðàììû?


Êîãäà âû ïèøåòå ïðîãðàììó, ðàçäåëèòå åå íà íåçà-
âèñèìûå ÷àñòè, âûïîëíÿþùèå îïðåäåëåííûå çàäà-
÷è â ïðèëîæåíèè, è îôîðìèòå êàæäóþ ÷àñòü â âèäå
ïîäïðîãðàììû. Â âàøåì ïðèëîæåíèè ìîæåò áûòü
ñòîëüêî ïîäïðîãðàìì, ñêîëüêî âàì íóæíî. Íåçà÷åì
æàäíè÷àòü, ñîçäàâàÿ ïîäïðîãðàììû, — ñîçäàéòå
ñòîëüêî, ñêîëüêî õîòèòå, íî ñòàðàéòåñü ïèñàòü ïîä-
ïðîãðàììû, âûïîëíÿþùèå ÷åòêî îïðåäåëåííûå çà-
äà÷è.
Çà÷åì íóæíû ïîäïðîãðàììû? Èõ èñïîëüçîâàíèå
äåëàåò êîä áîëåå ïîíÿòíûì, åãî ñòàíîâèòñÿ ëåã÷å îò-
ëàæèâàòü, ïîñêîëüêó îí äåëèòñÿ íà ìàëî çàâèñÿùèå
äðóã îò äðóãà ÷àñòè. Íàìíîãî ëåã÷å íàïèñàòü è îòëà-
äèòü íåñêîëüêî íåáîëüøèõ ïðîãðàìì, ÷åì îäíó áîëü-
øóþ ïðîãðàììó. Ïîñëå îòëàäêè ïîäïðîãðàììû îíà
ãîòîâà ê èñïîëüçîâàíèþ è áóäåò ðàáîòàòü âñåãäà,
êîãäà îíà âàì ïîíàäîáèòñÿ.
Ïîäïðîãðàììû ïîìîãàþò ñýêîíîìèòü ìíîãî âðå-
ìåíè, åñëè âû ïèøåòå ñëîæíûé êîä, ê êîòîðîìó
íóæíî îáðàùàòüñÿ èç ðàçíûõ ìåñò â ïðîãðàììå. Èõ
ìîæíî èñïîëüçîâàòü ìíîãî ðàç. Íàïèñàâ ïîäïðîã-
ðàììó, âû ìîæåòå èñïîëüçîâàòü åå (îáðàùàòüñÿ ê
íåé) èç ëþáîãî ìåñòà ïðîãðàììû.
Èç ïîäïðîãðàìì ìîæíî âûçûâàòü äðóãèå ïîä-
ïðîãðàììû.
Ïîäïðîãðàììû òàêæå ïîçâîëÿþò ðàçäåëèòü íà-
ïèñàíèå áîëüøîé ïðîãðàììû ìåæäó íåñêîëüêèìè
ïðîãðàììèñòàìè. Êàæäîìó ïðîãðàììèñòó íóæíî
áóäåò íàïèñàòü îïðåäåëåííûé íàáîð ïîäïðîãðàìì
äëÿ ïðèëîæåíèÿ. Îí áóäåò îòâå÷àòü çà íàïèñàíèå è
îòëàäêó ýòèõ ïîäïðîãðàìì è çà òî, ÷òîáû îíè ïðà-
âèëüíî âçàèìîäåéñòâîâàëè ñ äðóãèìè ÷àñòÿìè ïðî-
ãðàììû.
Ïîäïðîãðàììû ÷àñòî èñïîëüçóþòñÿ äëÿ âûïîë-
íåíèÿ âû÷èñëåíèé, ôîðìàòèðîâàíèÿ è âûâîäà èí-
ôîðìàöèè, íàñòðîéêè ïîëüçîâàòåëüñêîãî èíòåðôåéñà,
âûâîäà ïðèãëàøåíèé ê ââîäó äàííûõ è âûïîëíåíèÿ
ââîäà/âûâîäà.
192 Ãëàâà 12

12.2. Ñîçäàíèå è âûçîâ


ïîäïðîãðàìì
Ñîçäàíèå ñîáñòâåííûõ ïîäïðîãðàìì äëÿ ïðèëîæå-
íèé — ýòî åùå îäíà ÷àñòü ïðîãðàììèðîâàíèÿ. Ýòî
íåìíîãî ïîõîæå íà ñîçäàíèå ôîðì — íóæíî ñíà÷àëà
ïðåäñòàâèòü ñåáå, ÷òî äîëæíà äåëàòü ïîäïðîãðàììà,
à ïîòîì íàïèñàòü ñîîòâåòñòâóþùèé êîä. Ïîäïðîã-
ðàììû ïîõîæè íà ìàëåíüêèå ïðîãðàììû, è â íèõ
ìîãóò èñïîëüçîâàòüñÿ ëþáûå îïåðàòîðû, êîòîðûå âû
èçó÷èëè ðàíüøå!

Ñîçäàíèå ïîäïðîãðàììû. Ñåé÷àñ ìû íàïèøåì


ïîäïðîãðàììó è ðàññìîòðèì, êàê èñïîëüçîâàòü åå â
ïðèëîæåíèè. Ìû íà÷íåì ñ èçó÷åíèÿ ñèíòàêñèñà
ïîäïðîãðàìì, à ïîòîì ïîçíàêîìèìñÿ ñ òåì, êàê ñî-
çäàâàòü êîä äëÿ íåå. Âîò ñèíòàêñèñ ïîäïðîãðàììû:

Private Sub ÈìÿÏîäïðîãðàììû()


Ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ
End Sub

Îáðàòèòå âíèìàíèå íà òî, ÷òî Private, Sub è


End Sub — ýòî êëþ÷åâûå ñëîâà. Îíè âûäåëåíû ñè-
íèì öâåòîì. Êëþ÷åâîå ñëîâî Private îçíà÷àåò,
÷òî ê ýòîé ïîäïðîãðàììå ìîæíî îáðàùàòüñÿ òîëü-
êî èç êîäà â äàííîé ôîðìå. Ïîäïðîãðàììó ìîæíî
íàçâàòü êàê óãîäíî, íî ëó÷øå âûáðàòü ïîíÿòíîå
èìÿ, ÷òîáû ìîæíî áûëî ðàçîáðàòüñÿ, äëÿ ÷åãî
íóæíà ýòà ïîäïðîãðàììà. Îáðàòèòå âíèìàíèå íà
ïàðó ñêîáîê ïîñëå èìåíè ïîäïðîãðàììû. Åñëè ïîä-
ïðîãðàììå íóæíî ïåðåäàòü êàêóþ-òî èíôîðìà-
öèþ, òî ïåðåìåííûå, â êîòîðûõ õðàíèòñÿ ýòà
èíôîðìàöèÿ, óêàçûâàþòñÿ ìåæäó ñêîáêàìè. Âû
óæå âèäåëè ýòî â îáðàáîò÷èêàõ ñîáûòèé â ïðåäû-
äóùèõ ïàðàãðàôàõ. Îïåðàòîðû êîäà ïîäïðîãðàì-
ìû ïîìåùàþòñÿ ìåæäó ñòðîêàìè ñ îïåðàòîðàìè
Sub è End Sub. Îïåðàòîðû âûïîëíÿþòñÿ ïî ïîðÿä-
êó. Â ïîäïðîãðàììàõ ìîæíî èñïîëüçîâàòü ïî÷òè
ëþáûå îïåðàòîðû.
Ïîäïðîãðàììû è ôóíêöèè 193

À òåïåðü ìû íàïèøåì ïîäïðîãðàììó è ïîñìîò-


ðèì, êàê âûçâàòü åå èç êîäà. Ñîçäàéòå íîâîå ïðèëî-
æåíèå Windows è íàçîâèòå åãî «Ïîäïðîãðàììà».
Êîä â ïîäïðîãðàììå ëó÷- Îòêðîéòå îêíî ðåäàêòîðà êîäà. Íàéäèòå ñòðîêó
øå âûäåëèòü îòñòóïîì,
÷òîáû â äàëüíåéøåì áûëî Êîä, àâòîìàòè÷åñêè ñîçäàííûé êîíñòðóêòîðîì ôîðì
ëåã÷å ïîíÿòü, êàêîé êîä Windows
ïðèíàäëåæèò ê ïîäïðîã-
ðàììå. Â ñëåäóþùóþ çà íåé ñòðîêó äîáàâüòå òàêîé êîä:

Private Sub MyMessage()


MessageBox.Show("Ýòî ñîîáùåíèå âûâåäåíî_
ïîäïðîãðàììîé Sub MyMessage.")
End Sub

Êàê âèäèòå, ïðè âûïîëíåíèè êîäà â ïîäïðîãðàì-


ìå MyMessage áóäåò âûâåäåíî îêíî ñîîáùåíèÿ ñ òåê-
ñòîì «Ýòî ñîîáùåíèå âûâåäåíî ïîäïðîãðàììîé Sub
MyMessage.» Íî êàê ñäåëàòü òàê, ÷òîáû ýòîò êîä âû-
ïîëíèëñÿ?

Âûçîâ ïîäïðîãðàììû. ×òîáû âûïîëíèòü êîä


âíóòðè ïîäïðîãðàììû, íóæíî âûçâàòü ýòó ïîäïðîã-
ðàììó â êîäå ïðîãðàììû. Êîãäà ïîäïðîãðàììó âû-
çûâàþò, âûïîëíÿåòñÿ êîä â ýòîé ïîäïðîãðàììå.
Ñèíòàêñèñ âûçîâà ïîäïðîãðàììû ïðîñò. Íóæíî ïðî-
ñòî óêàçàòü èìÿ ïîäïðîãðàììû è ïàðó ñêîáîê çà
íèì. Âîò ñèíòàêñèñ âûçîâà ïîäïðîãðàììû:

SubName()

À òåïåðü äàâàéòå âûçîâåì ïîäïðîãðàììó, êîòî-


ðóþ âû òîëüêî ÷òî íàïèñàëè.
 ïðîåêòå «Ïîäïðîãðàììà» ïîìåñòèòå íà ôîðìó
Form1 êíîïêó. Èçìåíèòå çíà÷åíèå ñâîéñòâà Text
ýòîé êíîïêè íà Ñîîáùåíèå. Âûïîëíèòå äâîéíîé
ùåë÷îê ïî êíîïêå, ÷òîáû îòðåäàêòèðîâàòü îáðàáîò-
÷èê åå íàæàòèÿ. Äîáàâüòå â îáðàáîò÷èê ñëåäóþùóþ
ñòðîêó êîäà:

MyMessage()
194 Ãëàâà 12

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ Ñîîáùåíèå. Ïîÿâèòñÿ îêíî ñîîáùåíèÿ ñ
òåêñòîì «Ýòî ñîîáùåíèå âûâåäåíî ïîäïðîãðàììîé
Sub MyMessage.» Êàê îíî ïîÿâèëîñü? Åãî îòîáðàçè-
ëà ñòðîêà êîäà èç ïîäïðîãðàììû MyMessage. Êîãäà
ýòà ïîäïðîãðàììà áûëà âûçâàíà èç îáðàáîò÷èêà íà-
æàòèÿ êíîïêè, áûë âûïîëíåí êîä â ïîäïðîãðàììå.
À òåïåðü äàâàéòå äîáàâèì â ïðîåêò «Ïîäïðîãðàì-
ìà» åùå îäíó ïîäïðîãðàììó. Îíà áóäåò âûâîäèòü
äðóãîå ñîîáùåíèå. Îòêðîéòå îêíî ðåäàêòîðà êîäà è
äîáàâüòå ïîñëå îïåðàòîðà End Sub ïîäïðîãðàììû
MyMessage òàêîé êîä:

Private Sub YourMessage()


MessageBox.Show("Ýòî ñîîáùåíèå âûâåäåíî_
ïîäïðîãðàììîé Sub YourMessage."
End Sub

Íà ýòîò ðàç äàâàéòå âûçîâåì ïîäïðîãðàììó


YourMessage èç MyMessage, à íå èç îáðàáîò÷èêà íà-
æàòèÿ íà êíîïêó. Îòðåäàêòèðóéòå êîä â ïîäïðîã-
ðàììå MyMessage, ÷òîáû îí âûãëÿäåë òàê:

Private Sub MyMessage()


MessageBox.Show("Ýòî ñîîáùåíèå âûâåäåíî_
ïîäïðîãðàììîé Sub MyMessage.")
YourMessage()
End Sub

Ìû äîáàâèëè âûçîâ ïîäïðîãðàììû YourMessage


â ïîäïðîãðàììó MyMessage. Ïîñòðîéòå è çàïóñòèòå
ïðîåêò. Íàæìèòå êíîïêó ñ íàäïèñüþ Ñîîáùåíèå.
Ïîÿâÿòñÿ äâà îêíà ñîîáùåíèé. Â ïåðâîì áóäåò òåêñò
«Ýòî ñîîáùåíèå âûâåäåíî ïîäïðîãðàììîé Sub MyMes-
sage.» Âî âòîðîì áóäåò òåêñò «Ýòî ñîîáùåíèå âûâåäåíî
ïîäïðîãðàììîé Sub YourMessage.» Êàê ðàáîòàåò ýòîò
êîä? Îáðàáîò÷èê íàæàòèÿ íà êíîïêó âûçûâàåò ïîä-
ïðîãðàììó MyMessage. Êîãäà ýòà ïîäïðîãðàììà âû-
çûâàåòñÿ, âûïîëíÿåòñÿ êîä, ñîäåðæàùèéñÿ â íåé.
Ïîäïðîãðàììà MyMessage ñîäåðæèò äâå ñòðîêè êîäà.
 ïåðâîé ñòðîêå ñîäåðæèòñÿ îïåðàòîð âûâîäà îêíà
Ïîäïðîãðàììû è ôóíêöèè 195

ñîîáùåíèÿ ñ òåêñòîì «Ýòî ñîîáùåíèå âûâåäåíî ïîä-


ïðîãðàììîé Sub MyMessage.» Âî âòîðîé ñòðîêå âûçû-
âàåòñÿ ïîäïðîãðàììà YourMessage, êîòîðàÿ âûâîäèò
îêíî ñîîáùåíèÿ ñ òåêñòîì «Ýòî ñîîáùåíèå âûâåäåíî
ïîäïðîãðàììîé Sub YourMessage.»
Âû ñîçäàëè äâå ïîäïðîãðàììû è âûçâàëè îäíó èç
íèõ èç îáðàáîò÷èêà íàæàòèÿ êíîïêè. À âòîðàÿ ïîä-
ïðîãðàììà âûçûâàëàñü èç ïåðâîé!

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


12.1. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
Microsoft-CD .NET ñîçäàòü ïðîåêò «Ïîäïðîãðàììà», îïè-
ñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåð-
æèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Ïîäïðîãðàììà.exe.

12.3. Ïîäïðîãðàììû ñ àðãóìåíòàìè


Îäíà èç öåííûõ âîçìîæíîñòåé Visual Basic .NET
è áîëüøèíñòâà îñòàëüíûõ ñîâðåìåííûõ ÿçûêîâ ïðî-
ãðàììèðîâàíèÿ — âîçìîæíîñòü ïåðåäàâàòü ïîäïðîã-
ðàììàì íóæíóþ èíôîðìàöèþ. Ýòî î÷åíü óäîáíî,
ïîòîìó ÷òî ìîæíî ñîçäàâàòü ïîäïðîãðàììû, êîòî-
ðûå âûäàþò ðàçíûå ðåçóëüòàòû è âûïîëíÿþò ðàç-
íûå äåéñòâèÿ â çàâèñèìîñòè îò òîãî, êàêóþ
èíôîðìàöèþ èì ïåðåäàþò. Ôðàãìåíòû èíôîðìà-
öèè, êîòîðûå ïåðåäàþòñÿ ïîäïðîãðàììå, íàçûâà-
þòñÿ àðãóìåíòàìè. Êîãäà âû ïèøåòå ïîäïðîãðàììó,
êîòîðîé õîòèòå ïåðåäàâàòü àðãóìåíòû, íóæíî îïðå-
äåëèòü, ñêîëüêî áóäåò ýòèõ àðãóìåíòîâ è êàêèõ îíè
áóäóò òèïîâ.
Âîò ñèíòàêñèñ íàïèñàíèÿ ïîäïðîãðàììû ñ àðãó-
ìåíòàìè:

Private Sub SubName(ByVal ÈìÿÀðãóìåíòà1 As


ÒèïÀðãóìåíòà1, ByVal ÈìÿÀðãóìåíòà2 As
ÒèïÀðãóìåíòà2, ... ByVal + ÈìÿÀðãóìåíòàN As
ÒèïÀðãóìåíòàN)
Ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ
End Sub
196 Ãëàâà 12

Çäåñü ñêîáêè íå ïóñòûå. Â íèõ ñîäåðæèòñÿ ñïè-


ñîê èìåí ïåðåäàâàåìûõ ïîäïðîãðàììå àðãóìåíòîâ
è òèïîâ ýòèõ àðãóìåíòîâ. Îáðàòèòå âíèìàíèå íà òî,
÷òî ByVal — êëþ÷åâîå ñëîâî. Îíî âûäåëåíî ñèíèì
öâåòîì. Òèïû àðãóìåíòî⠗ ýòî îáû÷íûå òèïû, íà-
ïðèìåð Integer, String è ò. ä. Îáðàòèòå âíèìàíèå,
÷òî àðãóìåíòû îòäåëÿþòñÿ äðóã îò äðóãà çàïÿòûìè.
Ñêîðåå âñåãî, ðåàëüíûé ïðèìåð âû ïîéìåòå ãî-
ðàçäî áûñòðåå, ÷åì îáúÿñíåíèÿ. Îòêðîéòå îêíî ðå-
äàêòîðà êîäà äëÿ ïðîåêòà «Ïîäïðîãðàììà». Ïîñëå
îïåðàòîðà End Sub ïîäïðîãðàììû YourMessage äî-
áàâüòå íîâóþ ïîäïðîãðàììó:

Private Sub GeneralMessage(ByVal InMessage As_


String)
MessageBox.Show(InMessage)
End Sub

Ýòîé ïîäïðîãðàììå íóæíî ïåðåäàâàòü àðãóìåíò


òèïà String. Êîãäà âûçûâàåòñÿ ýòà ïîäïðîãðàììà,
îíà îòîáðàæàåò îêíî ñîîáùåíèÿ ñ òåêñòîì, ïåðåäàí-
íûì åé â àðãóìåíòå.
Äàâàéòå âûçîâåì ïîäïðîãðàììó GeneralMessage
è ïåðåäàäèì åé àðãóìåíò òèïà String. Äîáàâüòå íà
ôîðìó ïðîåêòà «Ïîäïðîãðàììà» âòîðóþ êíîïêó.
Èçìåíèòå çíà÷åíèå ñâîéñòâà Text ýòîé êíîïêè íà
Ëþáîå ñîîáùåíèå. Âûïîëíèòå äâîéíîé ùåë÷îê ïî
ýòîé êíîïêå, ÷òîáû îòðåäàêòèðîâàòü îáðàáîò÷èê åå
íàæàòèÿ. Äîáàâüòå â íåãî òàêîé êîä:

GeneralMessage("Whatever message.")
GeneralMessage("Some other message.")
GeneralMessage("A different message.")

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîï-


êó ñ íàäïèñüþ Ëþáîå ñîîáùåíèå. Áóäóò âûâåäåíû
òðè îêíà ñîîáùåíèé ñ ðàçíûìè òåêñòàìè. Êàê ýòî
ïîëó÷èëîñü? Êîä â îáðàáîò÷èêå íàæàòèÿ êíîïêè
âûçûâàåò ïîäïðîãðàììó GeneralMessage òðè ðàçà.
Ïðè êàæäîì âûçîâå îí ïåðåäàåò åé â êà÷åñòâå àðãó-
ìåíòà íîâóþ ñòðîêó. Ïðè ïåðâîì âûçîâå ýòî ñòðîêà
Ïîäïðîãðàììû è ôóíêöèè 197

«Whatever message». Ïðè âòîðîì âûçîâå ýòî ñòðîêà


«Some other message.» Ïðè òðåòüåì — «A different
message». Êîãäà âûïîëíÿåòñÿ êîä ïîäïðîãðàììû, àð-
Ïåðåìåííûå, îáúÿâëåí- ãóìåíò ïåðåäàåòñÿ ýòîé ïîäïðîãðàììå è èñïîëüçóåò-
íûå â ïîäïðîãðàììå èëè ñÿ â îïåðàòîðå MessageBox.Show.
ôóíêöèè ñ ïîìîùüþ îïå- Äàâàéòå ðàçáåðåì åùå îäèí ïðèìåð. Íà ýòîò ðàç
ðàòîðà Dim, íàçûâàþòñÿ ìû íàïèøåì ïîäïðîãðàììó, êîòîðàÿ ïðèíèìàåò â
ëîêàëüíûìè ïåðåìåííû- êà÷åñòâå àðãóìåíòîâ äâà öåëûõ ÷èñëà, ñêëàäûâàåò
ìè. Êîãäà ïåðåìåííàÿ
èõ è âûâîäèò ðåçóëüòàò ñëîæåíèÿ â îêíå ñîîáùåíèÿ.
îáúÿâëÿåòñÿ â ïîäïðîã-
ðàììå èëè ôóíêöèè, îíà Äîáàâüòå íîâóþ ïîäïðîãðàììó Adders â ïðîåêò
îáëàäàåò òåìè æå ñâîéñò- «Ïîäïðîãðàììà». Ýòà ïîäïðîãðàììà áóäåò âûãëÿäåòü
âàìè, ÷òî è îáúÿâëåííàÿ òàê:
âíóòðè îáðàáîò÷èêà, ïî-
òîìó ÷òî îáðàáîò÷èê òîæå Private Sub Adders(ByVal AddOne As Integer,
ÿâëÿåòñÿ ïîäïðîãðàììîé. ByVal AddTwo As Integer)
Ê ýòèì ïåðåìåííûì ìîæ- Dim Total As Integer
íî îáðàùàòüñÿ òîëüêî âî Total = AddOne + AddTwo
âðåìÿ âûïîëíåíèÿ ïîä- MessageBox.Show(Total)
ïðîãðàììû èëè ôóíêöèè. End Sub
Ïî çàâåðøåíèè èõ âûïîë-
íåíèÿ ïåðåìåííûå òåðÿ-
þò õðàíÿùèåñÿ â íèõ Îáðàòèòå âíèìàíèå íà òî, ÷òî ïðè âûçîâå ýòîé
çíà÷åíèÿ, è ê íèì íåëüçÿ ïîäïðîãðàììû íóæíî ïåðåäàòü åé äâà àðãóìåíòà.
áîëüøå îáðàùàòüñÿ. Äîáàâüòå íà ôîðìó ïðîåêòà «Ïîäïðîãðàììà»
òðåòüþ êíîïêó. Èçìåíèòå çíà÷åíèå åå ñâîéñòâà
Text íà Ñëîæèòü ÷èñëà. Âûïîëíèòå äâîéíîé ùåë-
÷îê ïî íîâîé êíîïêå, ÷òîáû îòðåäàêòèðîâàòü îáðà-
áîò÷èê åå íàæàòèÿ. Äîáàâüòå â îáðàáîò÷èê îäíó
ñòðîêó:

Adders(34, 57)

Ïîñòðîéòå è çàïóñòèòå ïðèëîæåíèå. Íàæìèòå


êíîïêó ñ íàäïèñüþ Ñëîæèòü ÷èñëà. Ïîÿâèòñÿ îêíî
ñîîáùåíèÿ ñ ÷èñëîì 91. Íàø îáðàáîò÷èê íàæàòèÿ
êíîïêè âûçûâàåò ïîäïðîãðàììó Adders è ïåðåäàåò
åé â êà÷åñòâå àðãóìåíòîâ äâà öåëûõ ÷èñëà, 34 è 57.
Ïîäïðîãðàììà Adders âûïîëíÿåò òðè ñòðîêè êîäà.
Ñíà÷àëà îíà îáúÿâëÿåò ïåðåìåííóþ Total. Çàòåì
îíà ïðèñâàèâàåò ïåðåìåííîé Total çíà÷åíèå ñóììû
AddOne (34) è AddTwo (57). Â àðãóìåíòàõ AddOne è
AddTwo íàõîäÿòñÿ çíà÷åíèÿ, ïåðåäàííûå ïîäïðîã-
198 Ãëàâà 12

ðàììå ïðè âûçîâå. È íàêîíåö, ïîäïðîãðàììà âûâîäèò


çíà÷åíèå ïåðåìåííîé Total (91) â îêíå ñîîáùåíèé.
Òåïåðü âû ìîæåòå ïèñàòü ñîáñòâåííûå ïîäïðîã-
ðàììû, âûçûâàòü èõ è ïåðåäàâàòü èì èíôîðìàöèþ.
Äàëüøå âû óçíàåòå, êàê ïèñàòü ôóíêöèè. Ôóíêöè-
ÿì ìîæíî ïåðåäàâàòü èíôîðìàöèþ òî÷íî òàê æå,
êàê è ïîäïðîãðàììàì, — ñ ïîìîùüþ àðãóìåíòîâ.
Îäíàêî â îòëè÷èå îò ïîäïðîãðàìì, ôóíêöèè ìîãóò
âîçâðàùàòü êàêóþ-òî èíôîðìàöèþ ïðîãðàììå.

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


12.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Ïîäïðîãðàììà» òàê,
Microsoft-CD
êàê ýòî îïèñàíî â ïàðàãðàôå. Ãîòîâûé ïðî-
åêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ
àðõèâå Ïîäïðîãðàììà.exe.

12.4. Ñîçäàíèå è âûçîâ


ñîáñòâåííûõ ôóíêöèé
Ñîçäàíèå ñîáñòâåííûõ ôóíêöèé. Ãëàâíîå ðàçëè÷èå
ìåæäó ïîäïðîãðàììàìè è ôóíêöèÿìè ñîñòîèò â òîì,
÷òî ôóíêöèÿ âîçâðàùàåò çíà÷åíèå, à ïîäïðîãðàì-
ìà — íåò. Ôóíêöèÿ âîçâðàùàåò çíà÷åíèå îïðåäå-
ëåííîãî òèïà. Êîãäà ñîçäàåòñÿ ôóíêöèÿ, îáÿçàòåëüíî
äîëæåí áûòü îïðåäåëåí òèï âîçâðàùàåìîãî çíà÷å-
íèÿ. Íèæå ïðèâåäåí ñèíòàêñèñ ñîçäàíèÿ ôóíêöèè,
êîòîðàÿ èìååò îïðåäåëåííûé íàáîð àðãóìåíòîâ è
âîçâðàùàåìîå çíà÷åíèå:

Private Function ÈìÿÔóíêöèè


(ByVal ÈìÿÀãðóìåíòà1 As ÒèïÀðãóìåíòà1,
ByVal ÈìÿÀãðóìåíòà2 As ÒèïÀðãóìåíòà2, ...
ByVal ÈìÿÀãðóìåíòàN As ÒèïÀðãóìåíòàN) As
ÒèïÂîçâðàùàåìîãîÇíà÷åíèÿ
Ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ
ÈìÿÔóíêöèè = ÂîçâðàùàåìîåÇíà÷åíèå
End Function
Ïîäïðîãðàììû è ôóíêöèè 199

Îáðàòèòå âíèìàíèå, ÷òî ñëîâà Function è End


Function ÿâëÿþòñÿ êëþ÷åâûìè ñëîâàìè è âûäåëÿ-
þòñÿ ñèíèì öâåòîì. Íàçâàíèå ôóíêöèè äîëæíî áûòü
ñîäåðæàòåëüíîå. Ñïèñîê èìåí àðãóìåíòîâ è òèïîâ
àðãóìåíòîâ ðàñïîëîæåí â êðóãëûõ ñêîáêàõ ïîñëå
íàçâàíèÿ ôóíêöèè. Èìåíà àðãóìåíòîâ îòäåëÿþòñÿ
äðóã îò äðóãà çàïÿòîé. Ôóíêöèÿ âîçâðàùàåò òîëüêî
îäíî çíà÷åíèå. Âû äîëæíû îïðåäåëèòü òèï âîçâðà-
ùàåìîãî ôóíêöèåé çíà÷åíèÿ (íàïðèìåð, êàê As
Integer èëè As String) ïîñëå ñïèñêà àðãóìåíòîâ.
Ïîíÿòü ñèíòàêñèñ ôóíêöèé ïîìîæåò ïðèìåð.
Ñîçäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå åãî
«Ôóíêöèÿ». Îòêðîéòå îêíî ðåäàêòîðà êîäà è íàéäè-
òå ñòðîêó

Êîä, àâòîìàòè÷åñêè ñîçäàííûé êîíñòðóêòîðîì ôîðì


Windows

Ñðàçó ïîñëå íåå âñòàâüòå òàêîé êîä:

Private Function Multipliers(ByVal MultOne_


As Integer, ByVal MultTwo As Integer)_
As Integer
Multipliers = MultOne * MultTwo
End Function

Ýòà ôóíêöèÿ íàçûâàåòñÿ Multipliers è ïðèíè-


ìàåò äâà öåëî÷èñëåííûõ ïàðàìåòðà — MultOne è
MultTwo. Òèï âîçâðàùàåìîãî ôóíêöèåé çíà÷åíèÿ
óêàçûâàåòñÿ ïîñëå åå ñïèñêà àðãóìåíòîâ. Â äàííîì
ñëó÷àå ýòî öåëîå ÷èñëî (òèï Integer). Êîä â ôóíê-
öèè ñîñòîèò èç åäèíñòâåííîé ñòðîêè:

Multipliers = MultOne * MultTwo

Ýòà ñòðîêà êîäà ïåðåìíîæàåò äâà àðãóìåíòà è


çàäàåò âîçâðàùàåìîå çíà÷åíèå. Èìÿ ôóíêöèè,
Multipliers, èñïîëüçóåòñÿ êàê èìÿ âîçâðàùàå-
ìîãî çíà÷åíèÿ. Åñëè ýòîãî íå ñäåëàòü, âîçíèêíåò
îøèáêà.
200 Ãëàâà 12

À òåïåðü äàâàéòå âûçîâåì ýòó ôóíêöèþ è èñïîëü-


çóåì åå âîçâðàùàåìîå çíà÷åíèå â ïðîãðàììå.

Âûçîâ ñîáñòâåííûõ ôóíêöèé. Îäèí èç ñïîñîáîâ


âûçîâà ôóíêöèè — ïîñòàâèòü åå èìÿ ñî ñïèñêîì àð-
ãóìåíòîâ ñïðàâà îò çíàêà ðàâåíñòâà â îïåðàòîðå ïðè-
ñâàèâàíèÿ. Ïðè ýòîì òèï âîçâðàùàåìîãî ôóíêöèåé
çíà÷åíèÿ äîëæåí áûòü òàêèì æå, ÷òî è ó ïåðåìåí-
íîé, ñòîÿùåé ñëåâà îò çíàêà ðàâåíñòâà.
Ñèíòàêñèñ âûçîâà ôóíêöèè:
ÏåðåìåííàÿÄëÿÂîçâðàùàåìîãîÇíà÷åíèÿ =
ÈìÿÔóíêöèè(Àðãóìåíò1, Àðãóìåíò2, ... ÀðãóìåíòN)

Äàâàéòå âûçîâåì ôóíêöèþ Multipliers, êîòî-


ðóþ ìû òîëüêî ÷òî ñîçäàëè, è èñïîëüçóåì âîçâðàùà-
åìîå åþ çíà÷åíèå â êîäå. Ïîìåñòèòå êíîïêó íà ôîðìó
Form1 ïðîåêòà «Ôóíêöèÿ». Èçìåíèòå çíà÷åíèå
ñâîéñòâà Text ýòîé êíîïêè íà Óìíîæèòü. Â îáðàáîò-
÷èê åå íàæàòèÿ ïîìåñòèòå òàêîé êîä:
Dim Product As Integer
Product = Multipliers(34, 57)
MessageBox.Show(Product)

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó


ñ íàäïèñüþ Óìíîæèòü. Ïîÿâèòñÿ îêíî ñîîáùåíèÿ ñ
ðåçóëüòàòîì ïåðåìíîæåíèÿ 34 è 57 (1938). Êàê ðà-
áîòàåò ýòîò êîä?  îáðàáîò÷èêå íàæàòèÿ êíîïêè
îáúÿâëÿåòñÿ ïåðåìåííàÿ Product òèïà Integer.
Êîä âûçûâàåò ôóíêöèþ Multipliers è ïåðåäàåò åé
àðãóìåíòû 34 è 57. Ôóíêöèÿ Multipliers ïåðåìíî-
æàåò çíà÷åíèÿ MultOne (34) è MultTwo (57) è ïîìå-
ùàåò ðåçóëüòàò ïåðåìíîæåíèÿ MultOne * MultTwo
â ïåðåìåííóþ Multipliers, õðàíÿùóþ âîçâðàùàå-
ìîå çíà÷åíèå. Âîçâðàùàåìîå çíà÷åíèå èìååò òèï
Integer.  îáðàáîò÷èêå íàæàòèÿ êíîïêè ïåðåìåí-
íîé Product òèïà Integer ïðèñâàèâàåòñÿ çíà÷åíèå,
âîçâðàùåííîå ôóíêöèåé Multipliers. Ýòî çíà÷åíèå
è âûâîäèòñÿ â îêíå ñîîáùåíèÿ.
Äàâàéòå ïîïðîáóåì êîå-÷òî åùå, ðàç ó íàñ åñòü
ôóíêöèÿ Multipliers. Äîáàâüòå íà ôîðìó âòîðóþ
Ïîäïðîãðàììû è ôóíêöèè 201

êíîïêó. Èçìåíèòå çíà÷åíèå ñâîéñòâà Text ýòîé


êíîïêè íà Óìíîæèòü íåñêîëüêî ðàç.  îáðàáîò÷èê
íàæàòèÿ êíîïêè ñ íàäïèñüþ Óìíîæèòü íåñêîëüêî
Ïåðåìåííûå, îáúÿâëåí- ðàç äîáàâüòå òàêîé êîä:
íûå â ôóíêöèè ñ ïîìîùüþ
îïåðàòîðà Dim, áóäóò ëî- Dim Product As Integer
êàëüíûìè. Îíè äîñòóïíû Product = Multipliers(Multipliers(2, 3),_
òîëüêî â ôóíêöèè, ïîêà Multipliers(5, 7))
âûïîëíÿåòñÿ åå êîä. Êîã- MessageBox.Show(Product)
äà ôóíêöèÿ çàêàí÷èâàåò
âûïîëíÿòüñÿ, ëîêàëüíûå Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîï-
ïåðåìåííûå ñòàíîâÿòñÿ êó ñ íàäïèñüþ Óìíîæèòü íåñêîëüêî ðàç. Áóäåò
íåäîñòóïíûìè. âûâåäåíî ÷èñëî 210. Íà ýòîò ðàç ìû âûçûâàåì
ôóíêöèþ Multipliers òðèæäû. Ñíà÷àëà ìû âû-
çûâàåì åå ñ àðãóìåíòàìè 2 è 3. Âîçâðàùàåìîå åþ
çíà÷åíèå (6) èñïîëüçóåòñÿ êàê ïåðâûé àðãóìåíò ïðè
òðåòüåì âûçîâå ôóíêöèè Multipliers. Âî âòîðîé
ðàç ôóíêöèÿ Multipliers âûçûâàåòñÿ ñ àðãóìåíòà-
ìè 5 è 7. Âîçâðàùàåìîå çíà÷åíèå (35) èñïîëüçóåòñÿ
êàê âòîðîé àðãóìåíò ïðè òðåòüåì âûçîâå ôóíêöèè
Multipliers. Ïðè òðåòüåì âûçîâå ôóíêöèè
Multipliers åé ïåðåäàþòñÿ àðãóìåíòû 6 (âîçâðà-
ùàåìîå çíà÷åíèå ïðè ïåðâîì âûçîâå Multipliers)
è 35 (âîçâðàùàåìîå çíà÷åíèå ïðè âòîðîì âûçîâå
Multipliers).
Âèäèòå, êàê ìîæíî âûçâàòü ôóíêöèþ è èñïîëü-
çîâàòü âîçâðàùàåìîå çíà÷åíèå ïðè âûçîâå äðóãîé
ôóíêöèè?

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


12.3. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Ôóíêöèÿ», îïèñàííûé
â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñà-
Microsoft-CD ìîðàñïàêîâûâàþùåìñÿ àðõèâå Ôóíêöèÿ.exe.
12.4. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Åäèíèöû èçìåðå-
íèÿ», ïîçâîëÿþùèé îñóùåñòâëÿòü ïåðåâîä
èç àìåðèêàíñêèõ åäèíèö (äëèíà, îáúåì è
äåíåæíàÿ åäèíèöà) â êàíàäñêèå è îáðàòíî.
Çàãîòîâêà ïðîåêòà õðàíèòñÿ â ñàìîðàñïàêî-
202 Ãëàâà 12

âûâàþùåìñÿ àðõèâå Åäèíèöû_èçìåðåíèÿ.


exe. Ôîðìà äîëæíà âûãëÿäåòü ïðèìåðíî òàê:

Ïðè íàæàòèè êíîïêè ñ íàäïèñüþ Convert to Ca-


nadian âûïîëíÿéòå ïðåîáðàçîâàíèå çíà÷åíèé â ëå-
âûõ òåêñòîâûõ ïîëÿõ â êàíàäñêèå åäèíèöû. Ïðè
íàæàòèè êíîïêè ñ íàäïèñüþ Convert to US âûïîë-
íÿéòå îáðàòíîå ïðåîáðàçîâàíèå.

Èñïîëüçóéòå òàêèå êîýôôèöèåíòû ïåðåñ÷åòà:


1 ìèëÿ = 0,621 êèëîìåòðîâ;
1 ãàëëîí = 3,79 ëèòðîâ;
1 äîëëàð = 1,27 êàíàäñêèõ äîëëàðîâ.

Âû óæå çíàåòå, êàê ñîçäàâàòü ñîáñòâåííûå ôóíê-


öèè è ïîäïðîãðàììû. Â ýòîé ïðîãðàììå âàì ïðèäåò-
ñÿ ýòî äåëàòü. Â çàãîòîâêå ïðîåêòà ââåäåíà îäíà èç 6
ôóíêöèé, íàïèøèòå îñòàâøèåñÿ 5.

12.5. Âñòðîåííûå ôóíêöèè


 ïëàòôîðìå .NET åñòü îãðîìíîå êîëè÷åñòâî âñòðî-
åííûõ ïîäïðîãðàìì è ôóíêöèé äëÿ âûïîëíåíèÿ
÷àñòî âñòðå÷àþùèõñÿ çàäà÷. Ýòè ôóíêöèè òùàòåëü-
íî îòëàæåíû è ïðîâåðåíû, è îíè äîñòóïíû äëÿ âñåõ
ÿçûêîâ .NET. Åñëè ýòî âîçìîæíî, èñïîëüçóéòå
âñòðîåííûå ïðîöåäóðû è ôóíêöèè, à íå ïèøèòå
ñâîè ñîáñòâåííûå. Èñïîëüçîâàíèå âñòðîåííûõ ïðî-
öåäóð è ôóíêöèé íå òîëüêî ýêîíîìèò âàøå âðåìÿ,
íî è äåëàåò êîä áîëåå ïîíÿòíûì äëÿ äðóãèõ ëþäåé.
Ïîäïðîãðàììû è ôóíêöèè 203

Êðîìå òîãî, çàìåíó ìíîãèì âñòðîåííûì ïðîöåäó-


ðàì è ôóíêöèÿì âàì íàïèñàòü íå óäàñòñÿ. Ýòè ïðî-
öåäóðû îáðàùàþòñÿ ê ÷àñòÿì ïëàòôîðìû .NET è
êëàññàì Windows API, ê êîòîðûì âû îáðàòèòüñÿ íå
ñìîæåòå.
Ðàññìîòðèì íåñêîëüêî ÷àñòî èñïîëüçóåìûõ ïðî-
öåäóð è ôóíêöèé, âñòðîåííûõ â ïëàòôîðìó .NET, ê
êîòîðûì ìîæíî îáðàòèòüñÿ èç ïðîãðàìì íà Visual
Basic .NET. Âîçìîæíî, îíè ïîêàæóòñÿ âàì çíàêî-
ìûìè — îíè èñïîëüçîâàëèñü â çàäàíèÿõ â ýòîì êóð-
ñå. Ìû èñïîëüçîâàëè èõ, íî íå îáúÿñíÿëè, à ñåé÷àñ
ìû èõ îáúÿñíèì!

Íåêîòîðûå ôóíêöèè äëÿ ðàáîòû ñî ñòðîêàìè.


 ïëàòôîðìå .NET åñòü ìíîæåñòâî ôóíêöèé, âûïîë-
íÿþùèõ ðàçíûå äåéñòâèÿ ñî ñòðîêàìè. Ýòè ôóíêöèè
ïîçâîëÿþò óäàëÿòü ñèìâîëû, èçâëåêàòü ÷àñòè ñòðîê,
çàìåíÿòü ñòðî÷íûå áóêâû íà çàãëàâíûå è ò. ä. Íà-
çíà÷åíèå áîëüøèíñòâà ýòèõ ôóíêöèé ëåãêî ïîíÿòü
èç ïðèìåðîâ.
Ó âñåõ ôóíêöèé ðàáîòû ñî ñòðîêàìè, êîòîðûå ìû
áóäåì ðàññìàòðèâàòü, ñèíòàêñèñ îäèí è òîò æå. Èõ
ìîæíî âûçûâàòü äëÿ ëþáîé ñòðîêè. Íåêîòîðûì èç
íèõ íóæíû àðãóìåíòû, íåêîòîðûì íåò. Áîëüøèíñò-
âî ýòèõ ôóíêöèé âîçâðàùàþò ñòðîêè, ôóíêöèÿ
Length() âîçâðàùàåò öåëîå ÷èñëî. Âîò îáùèé ñèí-
òàêñèñ âûçîâà âñòðîåííûõ ôóíêöèé ðàáîòû ñî ñòðî-
êàìè â Visual Basic .NET. Çäåñü âîçâðàùàåìîå
çíà÷åíèå è ñòðîêà — ïåðåìåííûå:

Âîçâðàùàåìîå çíà÷åíèå = Ñòðîêà.ÈìÿÑòðîêîâîé


Ôóíêöèè (Àðãóìåíò1, Àðãóìåíò2, ... ÀðãóìåíòN)

Îäíà èç ñàìûõ ïîëåçíûõ ôóíêöèé — ôóíêöèÿ


Length. Îíà âîçâðàùàåò öåëîå ÷èñëî — äëèíó ñòðî-
êè. Âîò ïðèìåð:

MyText = "TextBox1"
myLength = MyText.Length 'âîçâðàùàåò 9, äëèíó
’"TextBox1"
204 Ãëàâà 12

Ôóíêöèè ToLower è ToUpper çàìåíÿþò âñå áóê-


âû íà ñòðî÷íûå è íà çàãëàâíûå ñîîòâåòñòâåííî, íà-
ïðèìåð:

MyText = "TextBox1"
MyCaps = MyText.ToUpper 'âîçâðàùàåò "TEXTBOX1"

MyText = "TextBox1"
mySmalls = MyText.ToLower 'âîçâðàùàåò
’"textbox1"

Èíîãäà íóæíî ãàðàíòèðîâàòü, ÷òî â êàêîé-òî


òåêñòîâîé ñòðîêå íåò ïðîáåëîâ íè â íà÷àëå, íè â êîí-
öå. Ïðîùå ãîâîðÿ, åñëè òàêèå ïðîáåëû åñòü, èõ íóæíî
óäàëèòü. Äëÿ ýòîãî ìîæíî âîñïîëüçîâàòüñÿ ôóíêöèåé
Trim:

MyText = " TextBox1"


myClean = MyText.Trim 'âîçâðàùàåò "TextBox1"

MyText = " TextBox1 "


MyCleaner = MyText.Trim 'âîçâðàùàåò "TextBox1"

Åùå îäíà ïîëåçíàÿ ôóíêöèÿ — Substring. Ýòà


ôóíêöèÿ âîçâðàùàåò ÷àñòü áîëüøåé ñòðîêè. Âûçûâàÿ
ôóíêöèþ Substring, åé íóæíî ïåðåäàòü â êà÷åñòâå
àðãóìåíòîâ äâà öåëûõ ÷èñëà (òèï Integer). Ïåðâûé
àðãóìåíò — íîìåð ñèìâîëà â ñòðîêå, ñ êîòîðîãî íà-
÷èíàåòñÿ íóæíàÿ ÷àñòü. Âòîðîé àðãóìåíò — äëèíà
ýòîé íóæíîé ÷àñòè. Çàìåòüòå, ÷òî íîìåð ïåðâîãî
ñèìâîëà â ñòðîêå — 0, à íå 1. Íîìåð âòîðîãî ñèìâî-
ëà — 1, à íå 2.

MyText = "TextBox1"
MySub = MyText.Substring(0, 4)'âîçâðàùàåò
’"Text", íóæíàÿ ÷àñòü íà÷èíàåòñÿ ñ ïîçèöèè 0 è
’åå äëèíà ðàâíà 4

MyText = "TextBox1"
MySub = MyText.Substring(1, 2)'âîçâðàùàåò "ex",
’íóæíàÿ ÷àñòü íà÷èíàåòñÿ ñ ïîçèöèè 1 è åå äëèíà
’ðàâíà 2
Ïîäïðîãðàììû è ôóíêöèè 205

Íàâåðíî, âàì íå òåðïèòñÿ óâèäåòü ýòè ôóíêöèè â


ðàáîòå, òàê ÷òî äàâàéòå ñîçäàäèì ìàëåíüêîå ïðèëî-
æåíèå, â êîòîðîì îíè áóäóò èñïîëüçîâàòüñÿ! Ñî-
çäàéòå íîâîå ïðèëîæåíèå Windows è íàçîâèòå åãî
«Âñòðîåííûå ôóíêöèè». Ïîìåñòèòå íà ôîðìó äâà
òåêñòîâûõ ïîëÿ. Î÷èñòèòå çíà÷åíèå ñâîéñòâà Text
òåêñòîâîãî ïîëÿ TextBox2. Óñòàíîâèòå äëÿ ñâîéñòâà
Multiline ýòîãî òåêñòîâîãî ïîëÿ çíà÷åíèå True.
Çàäàéòå äëÿ ñâîéñòâà Scrollbars ýòîãî òåêñòîâîãî
ïîëÿ çíà÷åíèå Vertical. Ðàñòÿíèòå òåêñòîâîå ïîëå
TextBox2, ÷òîáû åãî âûñîòà áûëà ïî÷òè òàêîé æå, êàê
âûñîòà ôîðìû. Ïîìåñòèòå íà ôîðìó êíîïêó. Â îáðà-
áîò÷èê íàæàòèÿ ýòîé êíîïêè âñòàâüòå òàêîé êîä:

Dim MyText As String


Dim TempText As String = ""
MyText = TextBox1.Text
TempText = TempText & MyText
TempText = TempText & vbNewLine &_
MyText.ToLower
TempText = TempText & vbNewLine &_
MyText.ToUpper
TempText = TempText & vbNewLine & MyText.Trim
TempText = TempText & vbNewLine &_
MyText.Substring(0, 4)
TempText = TempText & vbNewLine &_
MyText.Substring(1, 2)
TempText = TempText & vbNewLine & MyText.Length
TextBox2.Text = TempText

Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó.


 TextBox2 áóäóò âûâåäåíû ðåçóëüòàòû âûïîëíå-
íèÿ êàæäîé ôóíêöèè äëÿ ñâîéñòâà Text òåêñòîâîãî
ïîëÿ TextBox1. Èçìåíèòå òåêñò â TextBox1 è ñíîâà
íàæìèòå êíîïêó.

Ãåíåðàòîð ñëó÷àéíûõ ÷èñåë. Âî ìíîãèõ ïðî-


ãðàììàõ íóæíî ãåíåðèðîâàòü ñëó÷àéíûå ÷èñëà. Îñî-
áåííî ÷àñòî ýòî òðåáóåòñÿ, íàïðèìåð, â èãðàõ, â
êîòîðûõ ñîáûòèÿ ïðîèñõîäÿò ñ êàêîé-òî âåðîÿòíî-
ñòüþ, — íàïðèìåð, ïðè áðîñàíèè êîñòåé èëè ïîäáðà-
206 Ãëàâà 12

ñûâàíèè ìîíåòêè. Â ïëàòôîðìå .NET Framework


åñòü êëàññ System.Random, â êîòîðîì èìåþòñÿ ôóí-
êöèè, èñïîëüçóåìûå äëÿ ãåíåðèðîâàíèÿ ñëó÷àéíûõ
÷èñåë. Ìû íàïèøåì êîä, êîòîðûé èìèòèðóåò áðîñà-
íèå èãðàëüíîãî êóáèêà. Äîáàâüòå åùå îäíó êíîïêó íà
ôîðìó ïðîåêòà «Âñòðîåííûå ôóíêöèè». Èçìåíèòå
çíà÷åíèå ñâîéñòâà Text ýòîé êíîïêè íà Ñëó÷àéíîå
÷èñëî. Äîáàâüòå â îáðàáîò÷èê åå íàæàòèÿ òàêîé êîä:

Dim myRandomGenerator As System.Random


Dim myRandomInteger As Integer
myRandomGenerator = New System.Random
myRandomInteger = myRandomGenerator.Next(1, 6)
MessageBox.Show(myRandomInteger)

Ïîñòðîéòå è çàïóñòèòå ïðèëîæåíèå. Íàæìèòå


êíîïêó ñ íàäïèñüþ Ñëó÷àéíîå ÷èñëî.  îêíå ñîîáùå-
íèÿ áóäåò âûâåäåíî ñëó÷àéíîå ÷èñëî îò 1 äî 6. Åùå
ðàç íàæìèòå êíîïêó. Áóäåò âûâåäåíî åùå îäíî ñëó-
÷àéíîå ÷èñëî îò 1 äî 6.
Êàê ðàáîòàåò ýòîò êîä? Ñíà÷àëà ìû îáúÿâëÿåì ïå-
ðåìåííóþ myRandomGenerator òèïà System.Random.
Ïîòîì ìû îáúÿâëÿåì ïåðåìåííóþ myRandomInte-
ger òèïà Integer. ×òîáû ñãåíåðèðîâàòü ñëó÷àéíîå
÷èñëî îò 1 äî 6, ìû âûçûâàåì ìåòîä Next() ïåðåìåí-
íîé myRandomGenerator. Âûçûâàÿ ìåòîä Next(), ìû
ïåðåäàåì åìó àðãóìåíòû 1 è 6 êàê ãðàíèöû äèàïàçî-
íà, â êîòîðîì äîëæíî íàõîäèòüñÿ íóæíîå íàì ñëó-
÷àéíîå ÷èñëî. Ìåòîä Next() ãåíåðèðóåò ýòî ÷èñëî, è
îíî ïðèñâàèâàåòñÿ ïåðåìåííîé myRandomInteger.
Ïîñëåäíÿÿ ñòðîêà êîäà âûâîäèò ñãåíåðèðîâàííîå
ñëó÷àéíîå ÷èñëî â îêíå ñîîáùåíèÿ.

Ôóíêöèè ïðåîáðàçîâàíèÿ. Â Visual Basic .NET


åñòü äâå ôóíêöèè ïðåîáðàçîâàíèÿ, êîòîðûå ìîãóò
ïðèãîäèòüñÿ ïðè ðàáîòå ñ ÷èñëàìè. Ýòî ôóíêöèÿ
Val è ôóíêöèÿ Int. Ñíà÷àëà äàâàéòå ðàçáåðåìñÿ ñ
ôóíêöèåé Val. Ýòà ôóíêöèÿ ïðåîáðàçóåò ñòðîêó â
÷èñëî. Åñëè â ñòðîêå åñòü äðîáíàÿ ÷àñòü, ôóíêöèÿ
Val âîçâðàùàåò çíà÷åíèå òèïà Double. Åñëè äðîá-
Ïîäïðîãðàììû è ôóíêöèè 207

íîé ÷àñòè â ñòðîêå íåò, ôóíêöèÿ Val âîçâðàùàåò


çíà÷åíèå òèïà Integer. Ýòà ôóíêöèÿ ÷àñòî èñïîëü-
çóåòñÿ, ÷òîáû ïðåîáðàçîâàòü çíà÷åíèå ñâîéñòâà
Text òåêñòîâîãî ïîëÿ â ÷èñëî, êîòîðîå ìîæíî èñïîëü-
çîâàòü â ðàñ÷åòàõ. Âîò íåñêîëüêî ïðèìåðîâ åå ïðè-
ìåíåíèÿ:

Dim MyInt As Integer


MyInt = Val("123") + 123 'âîçâðàùàåò 246
Dim MyDouble As Double
MyDouble = Val("123.22") + 123 'âîçâðàùàåò
’246.22

Ôóíêöèÿ Int âîçâðàùàåò öåëóþ ÷àñòü ÷èñëà,


ò. å. ÷àñòü ñëåâà îò äåñÿòè÷íîé òî÷êè. Ïîñìîòðèòå
íà ïðèìåðû åå èñïîëüçîâàíèÿ, ÷òîáû ïîíÿòü, êàê
îíà ðàáîòàåò:

Dim MyInt As Integer


MyInt = Int(123) 'âîçâðàùàåò 123
MyInt = Int(123.45) 'âîçâðàùàåò 123

Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ


12.5. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Âñòðîåííûå ôóíêöèè»,
îïèñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñî-
Microsoft-CD äåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Âñòðîåííûå_ôóíêöèè.exe.

12.6. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic


.NET ñîçäàòü ïðîåêò «Ïðåäñêàçàòåëü», êî-
òîðûé áóäåò âûäàâàòü «ïðåäñêàçàíèÿ» —
îòâå÷àòü íà âîïðîñû. Çàãîòîâêà ïðîåêòà
õðàíèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Ïðåäñêàçàòåëü.exe. Ôîðìà äîëæíà âûãëÿ-
äåòü ïðèìåðíî òàê:
208 Ãëàâà 12

Ïðè íàæàòèè êíîïêè ñ íàäïèñüþ Seek Answer


èñïîëüçóéòå ôóíêöèþ SubString, ÷òîáû ïîäñ÷è-
òàòü êîëè÷åñòâî ãëàñíûõ áóêâ â âîïðîñå (A, E, I, O,
U). Íå çàáûâàéòå, ÷òî âàæåí ðåãèñòð: «a» è «A» —
ýòî ðàçíûå áóêâû. Êðîìå òîãî, óáåäèòåñü, ÷òî ââåäåí
èìåííî âîïðîñ. Âåðîÿòíî, âàì ïîíàäîáèòñÿ èñïîëü-
çîâàòü öèêë.
Ïîìíèòå, ÷òî ôóíêöèÿ Length âîçâðàùàåò êîëè-
÷åñòâî ñèìâîëîâ â ñòðîêå. Íîìåðà ñèìâîëîâ íà÷èíà-
þòñÿ ñ 0, òàê ÷òî â ñòðîêå èç 10 ñèìâîëîâ íîìåðà
ýòèõ ñèìâîëî⠗ 0–9. Ïîìíèòå, ÷òî â Visual Basic
.NET âìåñòî ÷èñëà âñåãäà ìîæíî èñïîëüçîâàòü ïåðå-
ìåííóþ.
Èñõîäÿ èç êîëè÷åñòâà ãëàñíûõ â âîïðîñå, ãåíå-
ðèðóéòå ðàçíûå îòâåòû. Èñïîëüçóéòå ñâîå âîîáðà-
æåíèå. Îòâåòû «Yes» è «No» ãîäÿòñÿ, íî ýòî ñêó÷íî.

12.7. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic


.NET ñîçäàòü ïðîåêò «Êîò è ìûøü», â êîòî-
ðîì êîò áóäåò ãîíÿòüñÿ çà ìûøüþ. Çàãîòîâêà
ïðîåêòà õðàíèòñÿ ñàìîðàñïàêîâûâàþùèìñÿ
àðõèâå Êîò_è_ìûøü.exe. Ôîðìà äîëæíà âû-
ãëÿäåòü ïðèìåðíî òàê:
Ïîäïðîãðàììû è ôóíêöèè 209

Ïðåäïîëàãàéòå, ÷òî øèðèíà ôîðìû ðàâíà 600


ïèêñåëÿì, à âûñîòà — 300 ïèêñåëÿì.
Ïåðåìåùàéòå êîòà è ìûøü â íåñêîëüêèõ ñëó÷àé-
íûõ íàïðàâëåíèÿõ, èçìåíÿÿ ìåñòîïîëîæåíèå ðàìîê
ðèñóíêîâ, â êîòîðûõ ïîêàçàíû èõ èçîáðàæåíèÿ.
Äëÿ ýòîãî ïðèáàâëÿéòå ñëó÷àéíûå ïîëîæèòåëüíûå è
îòðèöàòåëüíûå ÷èñëà ê òåêóùèì çíà÷åíèÿì êîîðäè-
íàò X è Y.
Íà ôîðìå åñòü ýëåìåíò Timer, êîòîðûé ãåíåðè-
ðóåò ñîáûòèÿ êàæäóþ ÷åòâåðòü ñåêóíäû.  îáðàáîò-
÷èêå ýòèõ ñîáûòèé è íóæíî âûïîëíÿòü ïåðåìåùåíèå
êîòà è ìûøè. Ýòî íåëüçÿ ñäåëàòü íàïðÿìóþ. ×òîáû
ïåðåìåñòèòü ðàìêó ðèñóíêà, íóæíî âû÷èñëèòü íî-
âûå êîîðäèíàòû X è Y (÷èñëà), à çàòåì âîñïîëüçîâàòü-
ñÿ òàêîé ñòðîêîé êîäà:
Mouse.Location = New Point(X, Y)

Ïåðåìåñòèâ êîòà è ìûøü, ïðîâåðüòå:

1) íå ïîïàëà ëè ìûøü â íîðêó;


2) íå ïîéìàë ëè êîò ìûøü;
3) íå íóæíî ëè ìûøè èçìåíèòü íàïðàâëåíèå
äâèæåíèÿ, ïîòîìó ÷òî ïîáëèçîñòè êîò;
4) íå âûøëè ëè êîò èëè ìûøü çà ïðåäåëû ýê-
ðàíà.
210 Ãëàâà 12

Êîò îòîáðàæàåòñÿ â ðàìêå ðèñóíêà Cat, à íå â


ãðàíèöàõ ýëåìåíòà óïðàâëåíèÿ PictureBox1.
Ìûøü îòîáðàæàåòñÿ â ðàìêå ðèñóíêà Mouse, à
íå â ãðàíèöàõ ýëåìåíòà óïðàâëåíèÿ PictureBox2.
Åñëè êîò áëèæå, ÷åì â 20 ïèêñåëÿõ îò ìûøè
(ðàññòîÿíèå îòìåðÿåòñÿ îò âåðõíåãî ëåâîãî óãëà ðàì-
êè ðèñóíêà), òî ìûøü ïîéìàíà. Åñëè ìûøü áëèæå,
÷åì â 20 ïèêñåëÿõ îò ëþáîãî ÷åðíîãî òåêñòîâîãî
ïîëÿ (ðàññòîÿíèå îòìåðÿåòñÿ îò âåðõíåãî ëåâîãî óãëà
ðàìêè ðèñóíêà è âåðõíåãî ëåâîãî óãëà òåêñòîâîãî
ïîëÿ), òî ìûøü óáåæàëà â íîðêó. Â ëþáîì èç ýòèõ
ñëó÷àåâ íóæíî îñòàíîâèòü òàéìåð.
Åñëè ìûøü áëèæå, ÷åì â 40 ïèêñåëÿõ îò êîòà,
îíà èçìåíÿåò íàïðàâëåíèå äâèæåíèÿ.
Êîîðäèíàòû ïåðâîé íîðêè — (50, 150). Êîîðäè-
íàòû âòîðîé íîðêè — (530, 150).
 øàáëîíå åñòü åùå íåñêîëüêî âåùåé, êîòîðûå
ïîìîãóò âàì íàïèñàòü ýòó ïðîãðàììó.
Ôóíêöèÿ HowFar âîçâðàùàåò ðàññòîÿíèå ìåæäó
äâóìÿ òî÷êàìè, åñëè âû ïåðåäàäèòå åé êîîðäèíàòû
X è Y ýòèõ òî÷åê. Íàïðèìåð:
Distance = HowFar(Cat.Location.X,_
Cat.Location.Y, Mouse.Location.X,_
Mouse.Location.Y)

Ôóíêöèÿ NewChg âîçâðàùàåò ñëó÷àéíîå ÷èñëî,


êîòîðîå ìîæåò áûòü ïîëîæèòåëüíûì èëè îòðèöàòåëü-
íûì. Ýòî ÷èñëî îáîçíà÷àåò ðàññòîÿíèå, íà êîòîðîå
äîëæíû ïåðåìåñòèòüñÿ êîò èëè ìûøü. Íàïðèìåð:
CatXChg = NewChg()

 îáðàáîò÷èêå íàæàòèÿ êíîïêè ñ íàäïèñüþ New


Game çàäàéòå ñëó÷àéíûå íà÷àëüíûå ïîçèöèè äëÿ
êîòà è ìûøè. Ïðèñâîéòå êîîðäèíàòàì X è Y íà÷àëü-
íûå çíà÷åíèÿ. Çàïóñòèòå òàéìåð.
Ïîäñêàçêà. Ìíîãèå ïðîãðàììèñòû ïðåäïî÷èòà-
þò íàïèñàòü íåáîëüøóþ ÷àñòü êîäà, ïðîâåðèòü åå,
çàòåì íàïèñàòü åùå íåáîëüøóþ ÷àñòü è ñíîâà ïðîâå-
ðèòü è ò. ä. Ýòó ïðîãðàììó ëó÷øå âñåãî ïèñàòü â òà-
êîé ïîñëåäîâàòåëüíîñòè:
Ïîäïðîãðàììû è ôóíêöèè 211

1. Ïîìåñòèòå êîòà è ìûøü.


2. Ïåðåìåñòèòå êîòà.
3. Ïðîâåðüòå, íå âûøåë ëè êîò çà ãðàíèöû
îêíà.
4. Ïåðåìåñòèòå ìûøü.
5. Ïðîâåðüòå, íå âûøëà ëè ìûøü çà ãðàíèöû
îêíà.
6. Ïðîâåðüòå, íå óáåæàëà ëè ìûøü â íîðêó.
7. Ïðîâåðüòå, íå ïîéìàë ëè êîò ìûøü.
8. Ïðîâåðüòå, áëèçêî ëè ìûøü îò êîòà.
Îòñëåæèâàéòå, â êàêîì íàïðàâëåíèè äâèãàþòñÿ
êîò è ìûøü. Ðàçâîðà÷èâàéòå èõ èçîáðàæåíèÿ, åñëè
êîò èëè ìûøü íà÷èíàþò äâèãàòüñÿ â äðóãîì íàïðàâ-
ëåíèè. Èñïîëüçóéòå äëÿ ýòîãî ïðèìåðíî òàêîé êîä:
Cat.Image.RotateFlip(RotateFlipType.Rotate180FlipX)

Îïðåäåëÿéòå, â êàêîì íàïðàâëåíèè ìûøü îò


êîòà, à çàòåì èçìåíÿéòå íàïðàâëåíèå äâèæåíèÿ êîòà,
÷òîáû êîò äâèãàëñÿ ê ìûøè. Íàïðèìåð, åñëè êîîðäè-
íàòà X êîòà ðàâíà 450, à ìûøè — 250, òî êîò äîëæåí
äâèãàòüñÿ â íàïðàâëåíèè óìåíüøåíèÿ êîîðäèíàòû.

12.6. Ôóíêöèè â J# è C#
 C# è J# òîæå ìîæíî ñîçäàâàòü ñîáñòâåííûå ôóíê-
öèè. Ýêâèâàëåíòà ïîäïðîãðàììàì â J# è C# íåò.
Êðîìå òîãî, êëþ÷åâîå ñëîâî Function òîæå íå èñ-
ïîëüçóåòñÿ. Ôóíêöèè îáúÿâëÿþòñÿ ñ ïîìîùüþ ñïå-
öèàëüíîãî ñèíòàêñèñà.
Ôóíêöèè â ÿçûêå C#. Äàâàéòå ïîñìîòðèì íà êîä
â C#, îáúÿâëÿþùèé ôóíêöèþ ñ äâóìÿ àðãóìåíòàìè.
Ýòà ôóíêöèÿ âîçâðàùàåò çíà÷åíèå òèïà Integer.
private static int Adders_C(int oneAdd, int
twoAdd)
{
int intSum=0;
intSum = oneAdd + twoAdd;
return intSum;
}
212 Ãëàâà 12

Çàìåòüòå, ÷òî ìû íå èñïîëüçóåì çäåñü êëþ÷åâîå


ñëîâî Function, êàê â Visual Basic .NET. Êëþ÷åâûå
ñëîâà private è static ïîêàçûâàþò, ÷òî ýòó ôóíê-
öèþ ìîæíî âûçâàòü òîëüêî èç êîäà â äàííîé ôîðìå.
Êëþ÷åâîå ñëîâî int (ïîñëå static) óêàçûâàåò òèï
âîçâðàùàåìîãî çíà÷åíèÿ (â íàøåì ñëó÷àå Integer).
Äâà àðãóìåíòà, èñïîëüçóåìûå ôóíêöèåé, óêàçàíû â
ñêîáêàõ ïîñëå èìåíè ôóíêöèè Adders_C. Îáà àðãó-
ìåíòà, oneAdd è twoAdd, ïðèíàäëåæàò ê òèïó int.
Îáðàòèòå âíèìàíèå íà êëþ÷åâîå ñëîâî return. Îíî
óêàçûâàåò, êàêîå çíà÷åíèå äîëæíà âåðíóòü ôóíê-
öèÿ (â íàøåì ñëó÷àå intSum).
Ôóíêöèÿ Adders_C â êîäå íà C# âûçûâàåòñÿ òàê
(òî÷íî òàê æå, êàê â Visual Basic .NET):

int theSum=0;
theSum = Adders_C(3, 4);
MessageBox.Show(System.Convert.ToString(theSum));

Ôóíêöèè â ÿçûêå J#. Â êîäå íà J# ôóíêöèè îáú-


ÿâëÿþòñÿ òàê æå, êàê è â êîäå íà C#. Ïîñìîòðèòå íà
ýòîò êîä íà J# è ñðàâíèòå åãî ñ êîäîì íà C#:

private static int Adders_J(int oneAdd, int


twoAdd)
{
int intSum=0;
intSum = oneAdd + twoAdd;
return intSum;
}

 êîäå íà J# ôóíêöèÿ âûçûâàåòñÿ òî÷íî òàê æå,


êàê è â êîäå íà C#. Ïîñìîòðèòå íà ýòîò êîä íà J#:

{
int theSum=0;
theSum = Adders_J(3, 4);
MessageBox.Show(System.Convert.ToString
(theSum));
}
Òåñò ïî òåìå «Ïîäïðîãðàììû è ôóíêöèè»
1. Êàêîå óòâåðæäåíèå èñòèííî?

m È ôóíêöèÿ, è ïîäïðîãðàììà âîçâðàùàþò çíà÷åíèå.

m Ôóíêöèÿ âîçâðàùàåò çíà÷åíèå, à ïîäïðîãðàììà íåò.

m Ôóíêöèÿ ìîæåò èìåòü òîëüêî îäèí àðãóìåíò.

m Ïîäïðîãðàììà ìîæåò èìåòü òîëüêî îäèí àðãóìåíò.

2. Êàê âûáðàòü ôðàãìåíò "BC" èç ñòðîêè X = "ABCD"?

m X.Substring(1, 2)

m X.Substring(2, 3)

m X.Substring(2, 2)

m X.Substring(1, 3)

3. Êàê âûçâàòü ïîäïðîãðàììó SubroutineName?

m Start SubroutineName()

m Go To SubroutineName()

m Execute SubroutineName()

m SubroutineName()

4. Êàê ïðåîáðàçîâàòü ÷èñëî â âèäå ñòðîêè â ÷èñëî â âèäå ÷èñëîâîé


ïåðåìåííîé?

m X.ToNumber

m Convert(X)

m Val(X)

m Int(X)
Îãëàâëåíèå

Ðåêîìåíäàöèè ïî èñïîëüçîâàíèþ ó÷åáíî-ïðîãðàììíîãî êîìïëåêñà 4


Ãëàâà 1. Ïðîãðàììû â ïîâñåäíåâíîé æèçíè 5
1.1. Ïðîãðàììû â ïîâñåäíåâíîé æèçíè 6
1.2. ×åì çàíèìàþòñÿ ïðîãðàììèñòû 7
1.3. ×òî òàêîå ïðîãðàììà 9
1.4. Âîçìîæíîñòè ÿçûêîâ ïðîãðàììèðîâàíèÿ 10
1.5. Ñèíòàêñèñ ÿçûêîâ ïðîãðàììèðîâàíèÿ 11

Òåñò ïî òåìå «Ïðîãðàììû â ïîâñåäíåâíîé æèçíè» 15

Ãëàâà 2. Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET 16


2.1. Visual Studio .NET è IDE 17
2.2. Çàïóñê è íàñòðîéêà Visual Studio .NET 18
2.3. Ñîçäàíèå ïåðâîãî ïðîåêòà 20
2.4. Êîíñòðóèðîâàíèå ãðàôè÷åñêîãî èíòåðôåéñà ïðîåêòà 22
2.5. Ñîçäàíèå ïðîãðàììíîãî êîäà ïðîåêòà 24
2.6. Ïîñòðîåíèå ðåøåíèÿ 26
2.7. Çàïóñê ïðîåêòà 28
2.8. Ñîõðàíåíèå ïðîåêòà 29
2.9. Âûâîä ñîîáùåíèé íà ôîðìó 31

Òåñò ïî òåìå «Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET» 35

Ãëàâà 3. Àëãîðèòìû è ïðîãðàììû 36


3.1. Îñíîâíûå ýëåìåíòû êîäà 37
3.2. Àëãîðèòì â ôîðìå ïñåâäîêîäà 38
3.3. Êîììåíòàðèè â êîäå 41

Òåñò ïî òåìå «Àëãîðèòìû è ïðîãðàììû» 44

Ãëàâà 4. Ôîðìû è ýëåìåíòû óïðàâëåíèÿ 45


4.1. Ôîðìà — îñíîâà ãðàôè÷åñêîãî èíòåðôåéñà 46
4.2. Ñâîéñòâà ôîðìû 48
4.3. Ýëåìåíòû óïðàâëåíèÿ è èõ ñâîéñòâà 52
4.4. Ãåíåðàöèÿ ñîáûòèé 56
Îãëàâëåíèå 215

Òåñò ïî òåìå «Ôîðìû è ýëåìåíòû óïðàâëåíèÿ» 61

Ãëàâà 5. Ñâîéñòâà è ìåòîäû 62


5.1. Ñ ÷åãî íà÷èíàåòñÿ êîä 63
5.2. ×òåíèå çíà÷åíèé ñâîéñòâ â êîäå 63
5.3. Ïðèñâàèâàíèå çíà÷åíèé ñâîéñòâàì â êîäå 66
5.4. IntelliSense è òî÷å÷íàÿ íîòàöèÿ 69
5.5. Ìåòîäû 73

Òåñò ïî òåìå «Ñâîéñòâà è ìåòîäû» 77

Ãëàâà 6. Ïðèñâàèâàíèå è ïåðåìåííûå 78


6.1. Ïðèñâàèâàíèå 79
6.2. Ïåðåìåííûå 80
6.3. Îáúÿâëåíèå ïåðåìåííûõ 84
6.4. Ïåðåìåííûå â ïðîãðàììàõ 87

Òåñò ïî òåìå «Ïðèñâàèâàíèå è ïåðåìåííûå» 92

Ãëàâà 7. Îïåðàöèè 93
7.1. Àðèôìåòè÷åñêèå îïåðàöèè 94
7.2. Ñòðîêîâûå îïåðàöèè 98
7.3. Ëîãè÷åñêèå îïåðàöèè 100
7.4. Îòëàäêà êîäà 101

Òåñò ïî òåìå «Îïåðàöèè» 110

Ãëàâà 8. Âåòâëåíèå: íåïîëíàÿ ôîðìà 111


8.1. Áóëåâà ëîãèêà 112
8.2. Îïåðàöèè ñðàâíåíèÿ 115
8.3. Îïåðàòîð If...Then 117
8.4. Ìíîæåñòâåííûå óñëîâèÿ 120
8.5. Áóëåâû îïåðàöèè â êîäå 124

Òåñò ïî òåìå «Âåòâëåíèå: íåïîëíàÿ ôîðìà» 130

Ãëàâà 9. Âåòâëåíèå: ïîëíàÿ ôîðìà 131


9.1. Âëîæåííûå îïåðàòîðû If…Then 132
9.2. Ïðîòèâîïîëîæíûå óñëîâèÿ 133
216 Îãëàâëåíèå

9.3. Îïåðàòîð If…Then…Else 135


9.4. Ïîøàãîâîå âûïîëíåíèå If 138
9.5. Îïåðàòîðû If â C# è J# 141
9.6. Áóëåâû îïåðàöèè è îïåðàöèè ñðàâíåíèÿ â C# è J# 144

Òåñò ïî òåìå «Âåòâëåíèå: ïîëíàÿ ôîðìà» 148

Ãëàâà 10. Öèêëû ñî ñ÷åò÷èêîì 149


10.1. Öèêëû For...Next 150
10.2. Ïîøàãîâîå âûïîëíåíèå öèêëà For…Next 153
10.3. Ïðîåêòû ñ èñïîëüçîâàíèåì For…Next 156
10.4. Âëîæåííûå öèêëû 161
10.5. Âûõîä èç öèêëîâ 162
10.6. Öèêëû â C# è J# 166

Òåñò ïî òåìå «Öèêëû ñî ñ÷åò÷èêîì» 168

Ãëàâà 11. Öèêëû ñ óñëîâèåì 169


11.1. Öèêëû Do While…Loop 170
11.2. Ïîøàãîâîå âûïîëíåíèå öèêëà Do While…Loop 172
11.3. Öèêëû Do Until…Loop 176
11.4. Ïðîåêòû ñ èñïîëüçîâàíèåì Do…Loop 178
11.5. Öèêëû ñ ïîñòóñëîâèåì 181
11.6. Öèêëû â J# è C# 182
11.7. Âûõîä èç öèêëîâ 184

Òåñò ïî òåìå «Öèêëû ñ óñëîâèåì» 189

Ãëàâà 12. Ïîäïðîãðàììû è ôóíêöèè 190


12.1. ×òî òàêîå ïîäïðîãðàììû? 191
12.2. Ñîçäàíèå è âûçîâ ïîäïðîãðàìì 192
12.3. Ïîäïðîãðàììû ñ àðãóìåíòàìè 195
12.4. Ñîçäàíèå è âûçîâ ñîáñòâåííûõ ôóíêöèé 198
12.5. Âñòðîåííûå ôóíêöèè 202
12.6. Ôóíêöèè â J# è C# 211

Òåñò ïî òåìå «Ïîäïðîãðàììû è ôóíêöèè» 213

Вам также может понравиться