Загрузил Lirykgamas

Osnovi program Visual Basic NET

реклама
Äîðîãèå ó÷åíèêè!
Ýòî ó÷åáíîå ïîñîáèå ðàçðàáîòàíî âñåìèðíî èçâåñòíîé êîðïîðàöèåé Ìàéêðîñîôò,
ìèðîâûì ëèäåðîì â ïðîèçâîäñòâå ïðîãðàììíîãî îáåñïå÷åíèÿ, â ðàìêàõ èíèöèàòèâû
«Ïàðòíåðñòâî â îáðàçîâàíèè». Çàäà÷à èíèöèàòèâû — ïðåäîñòàâèòü øêîëàì âîçìîæíîñòü
ïîâûøåíèÿ êà÷åñòâà îáó÷åíèÿ çà ñ÷åò èñïîëüçîâàíèÿ èíôîðìàöèîííûõ òåõíîëîãèé â
ó÷åáíîì ïðîöåññå.
Èíôîðìàöèîííûå òåõíîëîãèè îáëàäàþò äîñòàòî÷íûì ïîòåíöèàëîì äëÿ òîãî, ÷òîáû
äàòü âàì âîçìîæíîñòü ïðèîáðåñòè íàâûêè, êîòîðûå áóäóò íåîáõîäèìû â áóäóùåé ðàáîòå, — íàâûêè ýôôåêòèâíîé îáðàáîòêè èíôîðìàöèè è óïðàâëåíèÿ åþ, íàâûêè îáùåíèÿ
è ñîâìåñòíîé (ãðóïïîâîé) ðàáîòû. Äëÿ ðàçâèòèÿ ýòèõ è äðóãèõ íàâûêîâ, ïîëó÷èâøèõ
íàçâàíèå «íàâûêè 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 — ñèñòåìà ãëîáàëüíîãî ïîçèöèîíèðîâàíèÿ), ìèêðîâîëíîâêà è ñòåðåîñèñòåìà. Ýòè
ïðèáîðû ìîæíî ïðîãðàììèðîâàòü è äèñòàíöèîííî
óïðàâëÿòü èìè. Ýòî çíà÷èò, ÷òî â íèõ åñòü ïðîãðàììû, îïðåäåëÿþùèå, ÷òî ýòè ïðèáîðû äåëàþò, êîãäà
ìû íàæèìàåì èõ êíîïêè. Ýòè ïðîãðàììû ïîñòîÿííî
õðàíÿòñÿ â ÷èïàõ íà ïëàòàõ â ýòèõ ïðèáîðàõ, íî ïîÿâèëèñü îíè òàì áëàãîäàðÿ òîìó, ÷òî èõ êîãäà-òî íàïèñàëè ëþäè.
Ñàìîå õàðàêòåðíîå äëÿ ïðîãðàìì — òî, ÷òî îíè
ìîãóò äåëàòü ïî÷òè âñ¸, ðåøàòü ïðàêòè÷åñêè ëþáûå
çàäà÷è. Ñåé÷àñ ïðîãðàììû ïîâñåìåñòíî èñïîëüçóþòñÿ íà ðàáîòå è äîìà, äëÿ íàïèñàíèÿ ïèñåì, ïîäñ÷åòà
ðàñõîäîâ è ò. ä. Ïî÷òè âî âñåõ êîìïàíèÿõ äëÿ ó÷åòà
äåíåã, êëèåíòîâ, ïîêóïîê è ïðîèçâåäåííûõ òîâàðîâ
òîæå èñïîëüçóþòñÿ ïðîãðàììû. Äëÿ õðàíåíèÿ, èçâëå÷åíèÿ, ïðîñìîòðà è ôèëüòðàöèè èíôîðìàöèè åñòü
îãðîìíîå ìíîæåñòâî ðàçíûõ ïðîãðàìì. Êðîìå òîãî,
ìíîæåñòâî ïðîãðàìì ïèøóòñÿ äëÿ èññëåäîâàíèÿ
ñëîæíûõ ïðîáëåì — íàïðèìåð, ïðîáëåì èñêóññò-
Ïðîãðàììû â ïîâñåäíåâíîé æèçíè
Âîïðîñû äëÿ
ðàçìûøëåíèÿ
1. Ïåðå÷èñëèòå íå ìåíåå
÷åòûðåõ ïðèìåðîâ ïðèìåíåíèÿ êîìïüþòåðîâ
â ïîâñåäíåâíîé æèçíè.
7
âåííîãî èíòåëëåêòà, ãëîáàëüíîãî ïîòåïëåíèÿ èëè
ãåíåòèêè. Åñòü ñïåöèàëüíûå ïðîãðàììû äëÿ ïðîåêòèðîâàíèÿ ìàøèí, ðèñîâàíèÿ, èãð — êàêóþ áû çàäà÷ó âû íè ïðèäóìàëè, äëÿ åå ðåøåíèÿ, âåðîÿòíî,
óæå åñòü ïðîãðàììà. Âñïîìíèòå îá ýëåêòðîííîé ìóçûêå: ìîæíî ñïîðèòü î òîì, õîðîøà îíà èëè íå
î÷åíü, íî áåññïîðíî òî, ÷òî îíà íàïèñàíà íà êîìïüþòåðå. Äà, åùå ñóùåñòâóþò ïðîãðàììû äëÿ ðàáîòû â
Èíòåðíåòå, ñåòåâûå ïðîãðàììû è ïðîãðàììû âèðòóàëüíîé ðåàëüíîñòè!
Êðîìå òîãî, íåêîòîðûå ëþäè ïèøóò ïðîãðàììû
ïðîñòî ðàäè èíòåðåñà! Îäíà øêîëüíàÿ ó÷èòåëüíèöà
íàïèñàëà ïðîãðàììó, àâòîìàòè÷åñêè ñîñòàâëÿâøóþ
äîìàøíèå çàäàíèÿ ïî ìàòåìàòèêå. Åå ñåñòðà íàïèñàëà ïðîãðàììó, êîòîðàÿ ïèñàëà ÿïîíñêèå ñòèõè õîêêó è ïåðåâîäèëà èõ íà èñëàíäñêèé. Øêîëüíèêè
ñîáèðàþò ðîáîòîâ èç êîíñòðóêòîðà Ëåãî è ïèøóò
ïðîãðàììû ïî óïðàâëåíèþ èìè.
1.2. ×åì çàíèìàþòñÿ ïðîãðàììèñòû
Ìíîãèå ëþäè ñ÷èòàþò, ÷òî ïðîãðàììèñòû — ýòî íåïîíÿòíûå ëè÷íîñòè, êîòîðûå ñèäÿò çà êîìïüþòåðàìè, íàáèðàÿ íåïîíÿòíûå òåêñòû, ïîåäàþò çàñîõøèå
áóòåðáðîäû è ïüþò êîôå, ðàáîòàÿ íî÷è íàïðîëåò.
Õîòÿ òàêîå ïðåäñòàâëåíèå ÷àñòî îêàçûâàåòñÿ âåðíûì, íå ýòî ãëàâíîå.
Õîðîøóþ ïðîãðàììó íåëüçÿ ñîòâîðèòü çà îäíó
íî÷ü. Íóæíî äîëãî ðàáîòàòü, ïëàíèðîâàòü è ïðîâåðÿòü, ÷òîáû ñîçäàòü ïðîãðàììó, êîòîðàÿ áóäåò äåëàòü òî, ÷òî äîëæíà. Êðîìå òîãî, ïðîãðàììà äîëæíà
ïîçâîëÿòü ëåãêî èçìåíÿòü åå, â íåé íå äîëæíî áûòü
îøèáîê è ñ íåé äîëæíî áûòü óäîáíî ðàáîòàòü.  ñîçäàíèè áîëüøèõ ïðîãðàìì ìîãóò ó÷àñòâîâàòü ñîòíè
ïðîãðàììèñòîâ, à èìè íóæíî óïðàâëÿòü, îðãàíèçîâûâàòü èõ è êîíòðîëèðîâàòü.
Ïîýòîìó, õîòÿ íàïèñàíèå ïðîãðàìì — îäíà èç
çàäà÷ ïðîãðàììèñòîâ, ïðîãðàììèñòû äåëàþò è ìíîæåñòâî äðóãèõ âåùåé:
8
Ãëàâà 1
q
Ðåøàþò, ÷òî áóäåò äåëàòü ïðîãðàììà.
q
Ïðîåêòèðóþò ïîëüçîâàòåëüñêèé èíòåðôåéñ.
q
Ðåøàþò, êàêîé ÿçûê ïðîãðàììèðîâàíèÿ èñïîëüçîâàòü.
q
Ïðîåêòèðóþò àðõèòåêòóðó ïðîãðàììû è ðåøàþò, êàê ÷àñòè ïðîãðàììû áóäóò âçàèìîäåéñòâîâàòü ìåæäó ñîáîé.
q
Îïðåäåëÿþò ñòèëè íàïèñàíèÿ è îôîðìëåíèÿ
êîäà ïðîãðàììû.
q
Ðåøàþò, êòî áóäåò ïèñàòü êîíêðåòíûå ÷àñòè
ïðîãðàììû.
q
Ôîðìèðóþò ðàñïèñàíèå ðàçðàáîòêè è ñëåäÿò
çà òåì, ñêîëüêî âðåìåíè óõîäèò íà íàïèñàíèå
êîäà.
q
Îáó÷àþò äðóãèõ ïðîãðàììèñòîâ ðàáîòå ñ èíñòðóìåíòàìè ðàçðàáîòêè ïðîãðàìì.
q
Ïîäãîòàâëèâàþò è îáåñïå÷èâàþò ðàáîòó êîìïüþòåðîâ è ñåòåé, èñïîëüçóåìûõ äðóãèìè ïðîãðàììèñòàìè.
q
Ïèøóò ïðîãðàììíûé êîä.
q
Ïèøóò äîêóìåíòàöèþ ê ïðîãðàììíîìó êîäó.
q
Ñîçäàþò áàçû äàííûõ äëÿ õðàíåíèÿ èíôîðìàöèè, êîòîðàÿ èñïîëüçóåòñÿ ïðîãðàììàìè èëè
ñîçäàåòñÿ èìè.
q
Êîíòðîëèðóþò ñîçäàíèå ýëåìåíòîâ îôîðìëåíèÿ è ãðàôèêè.
q
Êîíòðîëèðóþò ââîä äàííûõ â áàçû äàííûõ.
q
Òåñòèðóþò ïðîãðàììíûé êîä è ïðîâåðÿþò ïðàâèëüíîñòü åãî ðàáîòû.
q
Ïîäãîòàâëèâàþò ïðîãðàììû ê óñòàíîâêå íà
êîìïüþòåðû ïîëüçîâàòåëåé èëè ñåðâåðû.
q
Ðåøàþò, êàêèå íîâûå âîçìîæíîñòè äîáàâèòü
â ïðîãðàììó.
Ïðîãðàììû â ïîâñåäíåâíîé æèçíè
Âîïðîñû äëÿ
ðàçìûøëåíèÿ
1. Ñ ïîìîùüþ Èíòåðíåòà
èëè äðóãèõ ðåñóðñîâ
âûÿñíèòå, êàêîâà çàðïëàòà ó ïðîãðàììèñòîâ
è äðóãèõ ñïåöèàëèñòîâ
ïî êîìïüþòåðàì â ìåñòå, ãäå âû æèâåòå.
2. Êàêèå êîìïàíèè — ðàçðàáîò÷èêè
ïðîãðàììíîãî îáåñïå÷åíèÿ âû
çíàåòå?
9
q
Èñïðàâëÿþò
îøèáêè.
íàéäåííûå
ïîëüçîâàòåëÿìè
q
Îáó÷àþò ïîëüçîâàòåëåé ðàáîòå ñ ïðîãðàììîé.
q
Ïèøóò äîêóìåíòàöèþ è îáó÷àþùèå ìàòåðèàëû ê ïðîãðàììå.
Êàê âèäèòå, íàïèñàíèå ïðîãðàììíîãî êîäà —
ýòî òîëüêî îäíà èç ìíîæåñòâà âåùåé, êîòîðûìè çàíèìàþòñÿ ïðîãðàììèñòû.
1.3. ×òî òàêîå ïðîãðàììà
Êîìïüþòåðíàÿ ïðîãðàììà ñîñòîèò èç ñòðîê êîäà,
çàïèñàííîãî íà ñïåöèàëüíîì ÿçûêå, ïðèáëèæåííîì ê îáû÷íîìó ÷åëîâå÷åñêîìó ÿçûêó. Ïðîãðàììó
ìîæíî ïèñàòü íà îäíîì èç ìíîæåñòâà ÿçûêî⠗
ÿçûê ìîæíî âûáèðàòü ïî åãî âîçìîæíîñòÿì è ïîòðåáíîñòÿì âàøåé ïðîãðàììû. Êîãäà ïðîãðàììà íàïèñàíà, îíà êîìïèëèðóåòñÿ — ïðåîáðàçóåòñÿ â ÿçûê,
ïîíÿòíûé êîìïüþòåðó, ÷òîáû êîìïüþòåð ñìîã åå
âûïîëíèòü.
Íà îäíîì è òîì æå ÿçûêå ïðîãðàììèðîâàíèÿ
ìîæíî ïèñàòü ïðîãðàììû ðàçíûõ òèïîâ. Íàïðèìåð, ìîæíî íàïèñàòü èãðó, ïðîãðàììó äëÿ ïðîñìîòðà ðèñóíêîâ â âèäå ñëàéä-øîó è ïðîãðàììó,
ïðîñ÷èòûâàþùóþ òðàåêòîðèþ ðàêåòû, — âñå íà îäíîì è òîì æå ÿçûêå ïðîãðàììèðîâàíèÿ. Ýòè ïðîãðàììû äåëàåò ðàçíûìè êîä, êîòîðûé âû íàïèøåòå, — èìåííî îí ïðèäàåò ïðîãðàììàì ðàçíóþ
ôóíêöèîíàëüíîñòü.
Êîä, êîòîðûé âû ïèøåòå, îïðåäåëÿåò, ÷òî ïðîãðàììà áóäåò äåëàòü. Êîä îïðåäåëÿåò, ÷òî ïðîèçîéäåò, êîãäà âû íàæìåòå êíîïêó èëè âûáåðåòå ïóíêò â
ñïèñêå. Âàø êîä îáåñïå÷èâàåò «ðàçóì» ïðîãðàììû — îí îïðåäåëÿåò, êàê ïðîãðàììà áóäåò ïðèíèìàòü ðåøåíèÿ, ñêîëüêî ðàç îíà áóäåò âûïîëíÿòü
êàêèå-òî äåéñòâèÿ è êàêèå âû÷èñëåíèÿ îíà áóäåò
ïðîèçâîäèòü. Ìîæíî íàïèñàòü êîä äëÿ âûïîëíåíèÿ
ðàñ÷åòîâ, íàïèñàíèÿ òåêñòà, ðåàãèðîâàíèÿ íà äåéñò-
10
Ïåðâûå êîìïüþòåðíûå ïðîãðàììû ïðèõîäèëîñü ïèñàòü íà ìàøèííîì ÿçûêå.
Ïîñòåïåííî áûëè ñîçäàíû ìàøèííî-íåçàâèñèìûå
ÿçûêè ïðîãðàììèðîâàíèÿ,
èñïîëüçîâàâøèåñÿ
äëÿ
ðåøåíèÿ ðàçíûõ çàäà÷:
q FORTRAN
(ðàñøèôðîâûâàåòñÿ
êàê FORmula
TRANslator —
òðàíñëÿòîð ôîðìóë) —
ÿçûê, ïðåäíàçíà÷åííûé
äëÿ íàó÷íûõ è
òåõíè÷åñêèõ ðàñ÷åòîâ.
q COBOL
(ðàñøèôðîâûâàåòñÿ
êàê COmmon
BusinessOriented
Language —
ñòàíäàðòíûé ÿçûê
äëÿ äåëîâîãî
ïðèìåíåíèÿ) — ÿçûê
â îñíîâíîì,
ïðåäíàçíà÷àâøèéñÿ
äëÿ êîììåð÷åñêèõ
ïðèëîæåíèé,
îáðàáàòûâàâøèõ
áîëüøèå îáúåìû
íå÷èñëîâûõ äàííûõ.
q LISP
(ðàñøèôðîâûâàåòñÿ
êàê List Processing —
îáðàáîòêà ñïèñêîâ) —
ÿçûê, ñîçäàííûé
äëÿ èññëåäîâàíèé
â îáëàñòè
èñêóññòâåííîãî
èíòåëëåêòà.
Ãëàâà 1
âèÿ ïîëüçîâàòåëÿ, ñáîðà äàííûõ èëè ïîêàçà èíôîðìàöèè íà ýêðàíå.
Ïèñàòü êîä íå òàê óæ ïðîñòî, íî ýòî ìîæåò îêàçàòüñÿ î÷åíü èíòåðåñíî è çàõâàòûâàþùå. Èçó÷èâ
ÿçûê ïðîãðàììèðîâàíèÿ, âû ïîëó÷èòå íîâîå ñðåäñòâî âûðàæåíèÿ ñâîåãî ñòðåìëåíèÿ òâîðèòü, èññëåäîâàòü, ðåøàòü ïðîáëåìû è èãðàòü. Ïðîãðàììèðîâàíèå
ïîõîæå íà ðàáîòó ñ ãëèíîé, ìåòàëëîì èëè ìàòåìàòèêîé.
1.4. Âîçìîæíîñòè ÿçûêîâ
ïðîãðàììèðîâàíèÿ
Êîìïüþòåðíûå ÿçûêè èñïîëüçóþòñÿ ïðàêòè÷åñêè
äëÿ òîãî æå, äëÿ ÷åãî è îáû÷íûå ÷åëîâå÷åñêèå ÿçûêè, — äëÿ ñîîáùåíèé. Îíè ïîçâîëÿþò ñîîáùèòü
êîìïüþòåðó, ÷òî îí äîëæåí äåëàòü, ÷òîáû ðåøèòü
çàäà÷ó.
Çíàåòå ëè âû, ÷òî ïîñòîÿííî ïîÿâëÿþòñÿ íîâûå
ÿçûêè ïðîãðàììèðîâàíèÿ? Çà ïîñëåäíèå 50 ëåò áûëî
ñîçäàíî ìíîæåñòâî ðàçíûõ ÿçûêîâ ïðîãðàììèðîâàíèÿ. Êàê è ÷åëîâå÷åñêèå ÿçûêè, íåêîòîðûå ÿçûêè
ïðîãðàììèðîâàíèÿ áîëüøå íå èñïîëüçóþòñÿ. Íà èõ
ìåñòî ïðèøëè äðóãèå ÿçûêè. Íåêîòîðûå ÿçûêè ïðîãðàììèðîâàíèÿ ðàçâèâàþòñÿ è èñïîëüçóþòñÿ óæå
20 èëè 30 ëåò.
Ïðè ñîçäàíèè íîâîãî ÿçûêà ïðîãðàììèðîâàíèÿ
îáû÷íî áåðóòñÿ ëó÷øèå ÷åðòû è âîçìîæíîñòè óæå
ñóùåñòâóþùèõ ÿçûêîâ, ê íèì äîáàâëÿåòñÿ ÷òî-òî
íîâîå, è ïîëó÷àåòñÿ íîâûé ÿçûê. Ñîâðåìåííûå ÿçûêè ïðîãðàììèðîâàíèÿ ó÷èòûâàþò èçìåíåíèÿ â
êîìïüþòåðàõ è ðàçâèòèå ðàíåå ñîçäàííûõ ïðîãðàìì.
Ïåðâûå êîìïüþòåðíûå ïðîãðàììû ïðèõîäèëîñü ïèñàòü íà ìàøèííîì ÿçûêå, äëÿ òîãî ÷òîáû
èõ ñðàçó ïîíèìàë êîìïüþòåð. Ýòè ïðîãðàììû
ïðåäñòàâëÿëè ñîáîé äëèííûå ïîñëåäîâàòåëüíîñòè
åäèíèö è íóëåé. Ýòî áûëî î÷åíü íåóäîáíî! Ïîýòîìó áûëè ñîçäàíû ïðîãðàììû, íàçâàííûå êîìïèëÿòîðàìè. Êîìïèëÿòîðû ìîãëè ïðåîáðàçîâûâàòü â
Ïðîãðàììû â ïîâñåäíåâíîé æèçíè
q BASIC
(ðàñøèôðîâûâàåòñÿ
êàê Beginner’s All-Purpose
Symbolic Instruction
Code — óíèâåðñàëüíûé
ÿçûê ñèìâîëüíûõ
èíñòðóêöèé äëÿ
íà÷èíàþùèõ) — ÿçûê,
îòëè÷àþùèéñÿ ïðîñòîòîé
èñïîëüçîâàíèÿ.
q Pascal (íàçâàí åãî
ñîçäàòåëåì Âèðòîì â
÷åñòü âåëèêîãî ôèçèêà
Áëåçà Ïàñêàëÿ) —
ÿçûê, ïîçâîëÿþùèé
ëåãêî êîäèðîâàòü
îñíîâíûå
àëãîðèòìè÷åñêèå
ñòðóêòóðû.
Çàòåì ïîÿâèëèñü íîâûå
ÿçûêè, ñ òåìè èëè èíûìè
ïðåèìóùåñòâàìè íàä ñóùåñòâîâàâøèìè
ðàíåå.
Âîò íåñêîëüêî ïðèìåðîâ:
q C è Ñ++ — ÿçûêè,
ïîçâîëÿþùèå
ñîçäàâàòü áûñòðî è
ýôôåêòèâíî
âûïîëíÿþùèéñÿ
ïðîãðàììíûé êîä.
q Java — ÿçûê,
îáåñïå÷èâàþùèé
ïëàòôîðìåííóþ
íåçàâèñèìîñòü, ò. å.
ïîçâîëÿþùèé
ñîçäàâàòü ïðîãðàììû,
êîòîðûå âûïîëíÿþòñÿ
â ñðåäå ðàçëè÷íûõ
îïåðàöèîííûõ ñèñòåì.
Íà ñëåäóþùåì ýòàïå ðàçâèòèÿ áûëè ñîçäàíû îáúåêòíîîðèåíòèðîâàííûå ÿçûêè
ïðîãðàììèðîâàíèÿ, ïîçâîëÿþùèå âèçóàëüíî êîíñòðóèðîâàòü ãðàôè÷åñêèé
èíòåðôåéñ ïðèëîæåíèé:
11
ïîíÿòíóþ êîìïüþòåðó ôîðìó êîä, íàïèñàííûé íà
áîëåå óäîáíûõ äëÿ ëþäåé ÿçûêàõ. Ïî÷òè âñå ñîâðåìåííûå ÿçûêè ïðîãðàììèðîâàíèÿ — êîìïèëèðóåìûå. Ýòî çíà÷èò, ÷òî íàïèñàííûå íà íèõ
ïðîãðàììû, íàïîìèíàþùèå îáû÷íûé àíãëèéñêèé
òåêñò, ïðåîáðàçóþòñÿ â ïîíÿòíûé êîìïüþòåðó
âèä.
Íà÷èíàÿ íîâûé ïðîåêò, âû äîëæíû ðåøèòü, êàêîé ÿçûê ïðîãðàììèðîâàíèÿ áóäåòå èñïîëüçîâàòü.
Åñòü ëè ó âûáðàííîãî ÿçûêà âñå íóæíûå âîçìîæíîñòè? Ëåãêî ëè åãî èñïîëüçîâàòü? Çíàåòå ëè âû ýòîò
ÿçûê? Óñòàíîâëåí ëè îí íà âàøåì êîìïüþòåðå?
Çíàòü áîëüøå îäíîãî ÿçûêà ïðîãðàììèðîâàíèÿ íèêîãäà íå âðåäíî!  ýòîì ïîñîáèè áóäåò èçó÷àòüñÿ
Visual Basic .NET, íî áóäåò ðàññêàçàíî òàêæå íåìíîãî è î J# è C#.
1.5. Ñèíòàêñèñ ÿçûêîâ
ïðîãðàììèðîâàíèÿ
 ïóòåøåñòâèÿõ âàì ìîæåò ïîíàäîáèòüñÿ íàéòè ÷åëîâåêà, ðàçãîâàðèâàþùåãî ïî-àíãëèéñêè. Íà ëþáîì
ÿçûêå ìîæíî ñôîðìóëèðîâàòü âîïðîñ «Ãîâîðèòå ëè
âû ïî-àíãëèéñêè?» Íàïðèìåð:
Àíãëèéñêèé: Do you speak English?
Íåìåöêèé: Sprechen Sie Englisch?
Èñïàíñêèé: Habla ingles?
Ïîðòóãàëüñêèé: Você fala inglås?
 ýòèõ ïðèìåðàõ îòëè÷àþòñÿ íå òîëüêî ñëîâà, íî
è ïîðÿäîê ñëîâ â ïðåäëîæåíèÿõ — ñóùåñòâèòåëüíûå, ãëàãîëû è ìåñòîèìåíèÿ ðàñïîëîæåíû ïî-ðàçíîìó. Ñëîâà è ïîðÿäîê èõ ðàçìåùåíèÿ îáðàçóþò
ñèíòàêñèñ ÿçûêà. Ñèíòàêñèñ ÿçûêà îïðåäåëÿåò ïðàâèëà, ïîçâîëÿþùèå ñîñòàâëÿòü ïðàâèëüíûå ïðåäëîæåíèÿ íà ýòîì ÿçûêå.
12
Ãëàâà 1
q Visual Basic — ÿçûê,
ñîçäàííûé
êîðïîðàöèåé Microsoft
äëÿ ðàçðàáîòêè
ïðèëîæåíèé
ñ ãðàôè÷åñêèì
èíòåðôåéñîì â ñðåäå
îïåðàöèîííîé
ñèñòåìû Windows.
q Delphi — ñðåäà
ðàçðàáîòêè (ÿçûê
Object Pascal),
ñîçäàííàÿ êîìïàíèåé
Borland äëÿ ðàçðàáîòêè
ïðèëîæåíèé
ñ ãðàôè÷åñêèì
èíòåðôåéñîì â ñðåäå
îïåðàöèîííîé
ñèñòåìû Windows.
 íàñòîÿùåå âðåìÿ ìíîãèå ïðîãðàììèñòû âûáèðàþò
èíòåãðèðîâàííóþ
ñèñòåìó ïðîãðàììèðîâàíèÿ Visual Studio .NET íà
ïëàòôîðìå .NET Framework, êîòîðàÿ ïðåäîñòàâëÿåò âîçìîæíîñòü ñîçäàâàòü ïðèëîæåíèÿ íà ðàçëè÷íûõ ÿçûêàõ îáúåêòíîîðèåíòèðîâàííîãî
ïðîãðàììèðîâàíèÿ, â òîì
÷èñëå òàêèõ, êàê:
q Visual Basic .NET —
ìîùíûé è ïðîñòîé
â ïðèìåíåíèè ÿçûê.
q J# (÷èòàåòñÿ J-øàðï) —
ÿçûê, ñîçäàííûé íà
îñíîâå ÿçûêà Java.
q C# (÷èòàåòñÿ
C-øàðï) — ÿçûê,
ñîçäàííûé íà îñíîâå
ÿçûêîâ C è C++.
Êàê è ó ÷åëîâå÷åñêèõ ÿçûêîâ, ó ëþáîãî ÿçûêà
ïðîãðàììèðîâàíèÿ òîæå åñòü ñèíòàêñèñ. Ñèíòàêñèñ — ýòî ñëîâàðü, íàáîð ãðàììàòè÷åñêèõ ïðàâèë è
ñòðóêòóð, îáðàçóþùèõ ÿçûê ïðîãðàììèðîâàíèÿ. Ñèíòàêñèñ îïðåäåëÿåò ïðàâèëà íàïèñàíèÿ ïðàâèëüíûõ
ñòðîê êîäà è îáúåäèíåíèÿ ýòèõ ñòðîê â ðàáîòàþùóþ
ïðîãðàììó.
Íàïðèìåð, âî âñåõ ñîâðåìåííûõ ÿçûêàõ ïðîãðàììèðîâàíèÿ åñòü îïåðàòîð If...Then...Else. Îïåðàòîð If...Then...Else — îäèí èç ñïîñîáîâ,
ïîçâîëÿþùèõ ïðîãðàììå ïðèíÿòü ðåøåíèå, èñõîäÿ
èç èìåþùåéñÿ ó íåå èíôîðìàöèè. Ðàññìîòðèì ïðèìåð ðàçíîãî ñèíòàêñèñà îïåðàòîðîâ If...Then...
Else â ÿçûêàõ Visual Basic .NET, C# è J#. Íå âîëíóéòåñü, åñëè âû íå ïîíèìàåòå, ÷òî îçíà÷àþò ýòè îïåðàòîðû. Ïðîñòî ïîêà îáðàòèòå âíèìàíèå íà
ïîõîæèå ýëåìåíòû è ðàçëè÷èÿ ìåæäó ðàçíûìè
ÿçûêàìè. Ýòè ðàçëè÷èÿ îïðåäåëÿþòñÿ ñèíòàêñèñîì
ðàçíûõ ÿçûêîâ.
Íà Visual Basic .NET:
If x>5 Then
MessageBox.Show("ß áîëüøå 5.")
Else
MessageBox.Show ("ß íå áîëüøå 5.")
End If
Íà C#:
if (x>5)
{
MessageBox.Show ("ß áîëüøå 5.");
}
else
{
MessageBox.Show ("ß íå áîëüøå 5.");
}
Ïðîãðàììû â ïîâñåäíåâíîé æèçíè
13
Íà J#:
Âîïðîñû äëÿ
ðàçìûøëåíèÿ
1. Ïðîàíàëèçèðóéòå ïðè-
âåäåííûé ïðèìåð.  êàêèõ ÿçûêàõ ïðîãðàììèðîâàíèÿ ñèíòàêñèñ îïåðàòîðà îäèíàêîâ, à êàêèõ — ðàçëè÷àåòñÿ?
Ðàññìîòðèì
íåêîòîðûå
ýëåìåíòû
ñèíòàêñèñà,
îäèíàêîâûå â ÿçûêàõ C#
è J#. Â C# è J# êàæäàÿ
ñòðîêà êîäà çàêàí÷èâàåòñÿ òî÷êîé ñ çàïÿòîé. Áëîêè êîäà ïîìåùàþòñÿ â
ôèãóðíûå ñêîáêè, ò. å.
ñèìâîëû { è }. Ñòðîêà
êîììåíòàðèÿ íà÷èíàåòñÿ
ñ ñèìâîëîâ //. ßçûê C# è
J# ÷óâñòâèòåëåí ê ðåãèñòðó ñèìâîëîâ. MyCase â
íèõ — ýòî íå òî æå ñàìîå,
÷òî myCase èëè MYCASE.
if (x>5)
{
MessageBox.Show ("ß áîëüøå 5.");
}
else
{
MessageBox.Show ("ß íå áîëüøå 5.");
}
Èçó÷àÿ ÿçûê ïðîãðàììèðîâàíèÿ, íóæíî èçó÷èòü åãî ñèíòàêñèñ, ñòðóêòóðó è ïðàâèëà íàïèñàíèÿ ïðîãðàìì. Íóæíî çíàòü ïðàâèëà ïóíêòóàöèè
ÿçûêà, à òàêæå åãî çàðåçåðâèðîâàííûå ñëîâà. Ýòè
ñëîâà íàçûâàþòñÿ çàðåçåðâèðîâàííûìè, ïîòîìó ÷òî
îíè èñïîëüçóþòñÿ òîëüêî êàê êîìàíäû ÿçûêà. Çàðåçåðâèðîâàííûå ñëîâà, íàçûâàåìûå òàêæå êëþ÷åâûìè ñëîâàìè, èìåþò îñîáîå çíà÷åíèå è îáû÷íî
âûïîëíÿþò ñïåöèàëüíûå ôóíêöèè — îíè óêàçûâàþò ïðîãðàììå, ÷òî äåëàòü. Íàïðèìåð, ñëîâà If è
Else ÿâëÿþòñÿ çàðåçåðâèðîâàííûìè â áîëüøèíñòâå
ÿçûêîâ ïðîãðàììèðîâàíèÿ. Îíè èñïîëüçóþòñÿ â
îïåðàòîðàõ ïðèíÿòèÿ ðåøåíèé â ïðîãðàììàõ.
Èçó÷àÿ ÿçûê ïðîãðàììèðîâàíèÿ, íóæíî èçó÷àòü
íå òîëüêî ñèíòàêñèñ, íî è ôóíêöèîíàëüíîñòü è âîçìîæíîñòè ýòîãî ÿçûêà. Íå çàáûâàéòå, ÷òî íå íà ëþáîì ÿçûêå ïðîãðàììèðîâàíèÿ ìîæíî ñäåëàòü ÷òî
óãîäíî. Íî âî âñåõ ñîâðåìåííûõ ÿçûêàõ ïðîãðàììèðîâàíèÿ åñòü îñíîâíûå ôóíêöèîíàëüíûå âîçìîæíîñòè, êîòîðûå ìîæíî èñïîëüçîâàòü.
Ïðèâåäåì íåêîòîðûå ýëåìåíòû ñèíòàêñèñà ÿçûêà Visual Basic .NET:
q
Êîíöû ñòðîê êîäà íå ïîìå÷àþòñÿ ñïåöèàëüíûìè ñèìâîëàìè, íàïðèìåð òî÷êîé ñ çàïÿòîé (;).
q
Ñòðîêè êîììåíòàðèåâ íà÷èíàþòñÿ ñ ñèìâîëà
«àïîñòðîô» (').
14
Ãëàâà 1
Âîïðîñû äëÿ
ðàçìûøëåíèÿ
1. Î êàêèõ ðàçëè÷èÿõ ñèíòàêñèñà ÿçûêîâ ïðîãðàììèðîâàíèÿ Visual
Basic .NET, C# è J#
âû óçíàëè?
q
Äëÿ âûäåëåíèÿ áëîêîâ êîäà íå èñïîëüçóþòñÿ
ôèãóðíûå ñêîáêè { è }.
q
Visual Basic .NET ÍÅ ÷óâñòâèòåëåí ê ðåãèñòðó. MyCase — ýòî òî æå ñàìîå, ÷òî è myCase
èëè MYCASE.  Visual Basic ýòè òðè îáîçíà÷åíèÿ ñ÷èòàþòñÿ îäèíàêîâûìè.
Òåñò ïî òåìå «Ïðîãðàììû â ïîâñåäíåâíîé æèçíè»
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
Ìåæäó ïðî÷èì, ìîæíî íàáèðàòü òåêñòû ïðîãðàìì
â îáû÷íîì òåêñòîâîì ðåäàêòîðå âðîäå Notepad
èëè Microsoft Word. Ïðàâäà, ïèñàòü ïðîãðàììû òàêèì
îáðàçîì
î÷åíü
íåóäîáíî.
Ñèñòåìà ïðîãðàììèðîâàíèÿ Microsoft Visual Studio
.NET — ýòî èíñòðóìåíò ðàçðàáîòêè ïðîãðàìì, ïîçâîëÿþùèé ïèñàòü ïðîãðàììû íà íåñêîëüêèõ ÿçûêàõ ïðîãðàììèðîâàíèÿ, èçâåñòíûõ êàê ÿçûêè .NET.
Âìåñòå ñ Visual Studio .NET ïîñòàâëÿþòñÿ ñëåäóþùèå ÿçûêè .NET:
q
Visual Basic .NET
q
C# (ïðîèçíîñèòñÿ Ñè-øàðï)
q
J# (ïðîèçíîñèòñÿ Äæåé-øàðï)
q
C++ (ïðîèçíîñèòñÿ Cè ïëþñ ïëþñ)
q
ASP .NET (äëÿ ñîçäàíèÿ web-ñòðàíèö)
Äëÿ ðàáîòû ñî âñåìè ýòèìè ÿçûêàìè Visual Studio .NET ïðåäîñòàâëÿåò îäèí è òîò æå èíòåðôåéñ
IDE. IDE ðàñøèôðîâûâàåòñÿ êàê Integrated Development 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.
Îí ïîçâîëÿåò áûñòðî çàïóñòèòü Visual Studio .NET —
ïðîñòî ñäåëàéòå íà ýòîì
çíà÷êå äâîéíîé ùåë÷îê
ìûøüþ!
Ïåðâîå, ÷òî âû óâèäèòå íà ýêðàíå, çàïóñòèâ
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).
×àùå âñåãî ìû áóäåì ñîçäàâàòü ïðèëîæåíèÿ Windows, íà÷èíàþùèåñÿ ñ ôîðìû. Ôîðìà — ýòî ýëåìåíò
ãðàôè÷åñêîãî èíòåðôåéñà, ñ ïîìîùüþ êîòîðîãî îñóùåñòâëÿåòñÿ âçàèìîäåéñòâèå ïîëüçîâàòåëÿ ñ ïðîãðàììîé. Ôîðìà ïðåäñòàâëÿåò ñîáîé ïîëå ñ ðàçìåùàåìûìè
íà íåì îáúåêòàìè ðàçíûõ òèïî⠗ êíîïêàìè, òåêñòîâûìè ïîëÿìè. Ïðè íàæàòèè êíîïêè çàïóñêàåòñÿ
êîä, âûïîëíÿþùèé çàïëàíèðîâàííûå äåéñòâèÿ.
Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET
Ëþáîå îêíî â Visual Studio
.NET ìîæíî çàêðûòü ùåë÷êîì ïî êíîïêå ñî çíà÷êîì
«õ» â âåðõíåì ïðàâîì óãëó
ýòîãî îêíà. Áîëüøèíñòâî
îêîí â Visual Studio .NET
ìîæíî îòêðûòü ñîîòâåòñòâóþùèìè êîìàíäàìè èç
ìåíþ Âèä (View).
Ìîæíî
àâòîìàòè÷åñêè
ñêðûòü îêíî, ùåëêíóâ íà
çíà÷êå â âèäå êíîïêè äëÿ
êðåïëåíèÿ áóìàãè, ðàñïîëîæåííîì â âåðõíåì ïðàâîì óãëó îêíà. Ïðè
àâòîìàòè÷åñêîì ñêðûòèè
îêíà îíî ïåðåñòàåò îòîáðàæàòüñÿ íà ýêðàíå. Íà
ïàíåëè, êîòîðàÿ îòîáðàçèòñÿ âäîëü ïðàâîãî êðàÿ
îêíà, áóäóò ïðèñóòñòâîâàòü âêëàäêè äëÿ àâòîìàòè÷åñêè ñêðûòûõ îêîí.
Åñëè ïîäâåñòè êóðñîð ê
âêëàäêàì íà ýòîé ïàíåëè,
òî ñêðûòûå îêíà áóäóò
îòîáðàæàòüñÿ. Àâòîìàòè÷åñêîå ñêðûòèå îêîí —
î÷åíü óäîáíûé ñïîñîá
óâåëè÷åíèÿ ðàáî÷åé ïëîùàäè îêíà. Åñëè ùåëêíóòü ïî çíà÷êó êíîïêè äëÿ
áóìàã â îêíå, âûäâèíóâøåìñÿ èç ïàíåëè, ðåæèì
àâòîìàòè÷åñêîãî ñêðûòèÿ
äëÿ ýòîãî îêíà áóäåò âûêëþ÷åí.
23
 îñíîâíîé ðàáî÷åé îáëàñòè â ëåâîé ÷àñòè îêíà
áóäåò îòîáðàæåíà ïóñòàÿ ôîðìà, íà êîòîðîé íåò êíîïîê è äðóãèõ îáúåêòîâ. Ýòà îáëàñòü íàçûâàåòñÿ îêíîì Êîíñòðóêòîð ôîðì. ßðëû÷îê ýòîãî îêíà ñîäåðæèò íàäïèñü Form1.vb [Design].
Îêíî Îáëàñòü ýëåìåíòîâ (Toolbox). Äîñòóï ê
çíà÷èòåëüíîé ÷àñòè ôóíêöèé Visual Studio .NET âûïîëíÿåòñÿ ñ èñïîëüçîâàíèåì ðàçëè÷íûõ îêîí. Íàïðèìåð, ÷òîáû ïîìåñòèòü íà ôîðìó îáúåêòû òèïà
êíîïîê è òåêñòîâûõ ïîëåé, íóæíî âîñïîëüçîâàòüñÿ
îêíîì Îáëàñòü ýëåìåíòîâ. Â ýòîì îêíå ñîäåðæàòñÿ
âñå îáúåêòû, êîòîðûå ìîæíî ïîìåñòèòü íà ôîðìó, —
êíîïêè, ïåðåêëþ÷àòåëè, òåêñòîâûå ïîëÿ, âûïàäàþùèå ñïèñêè è ò. ä.
1. Îòêðîéòå ìåíþ Âèä (View) â ñòðîêå ìåíþ.
2. Âûáåðèòå ïóíêò Îáëàñòü ýëåìåíòîâ (Toolbox) — îòêðîåòñÿ îêíî Îáëàñòü ýëåìåíòîâ.
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("Ïðèâåò, Ìèð.")
 ÿçûêå C# îêíî ñîîáùåíèÿ âûçûâàåòñÿ ïî÷òè òàê
æå, êàê è â Visual Basic
.NET. Òî÷íî òàê æå îíî
âûçûâàåòñÿ è â ÿçûêå J#:
{
MessageBox.Show
("Ïðèâåò, Ìèð");
}
Âèä îêíà ñîîáùåíèÿ âñòðîåí â Visual Basic .NET.
Âàì íå íóæíî ñîçäàâàòü âèä îêíà, ÷òîáû èñïîëüçîâàòü åãî â ïðîåêòå. Âñå, ÷òî íóæíî ñäåëàòü â ïðîãðàììå — âûçâàòü ìåòîä 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
×èñÊîä2
Íàáîð êíîïîê
0
ÎÊ
1
ÎÊ, Îòìåíà
2
Ñòîï, Ïîâòîðèòü, Ïðîïóñòèòü
3
Äà, Íåò, Îòìåíà
4
Äà, Íåò
5
Ïîâòîðèòü, Îòìåíà
33
Ýëåìåíò óïðàâëåíèÿ Label (Íàäïèñü). Label
ïðåäíàçíà÷åí äëÿ îòîáðàæåíèÿ òåêñòà èëè èçîáðàæåíèé, êîòîðûå ïîëüçîâàòåëü íå ìîæåò èçìåíèòü ñ
êëàâèàòóðû. Îòîáðàæàåìûé íà íàäïèñè òåêñò ñîäåðæèòñÿ â ñâîéñòâå Text. Ñâîéñòâî Alignment ïîçâîëÿåò çàäàòü âûðàâíèâàíèå òåêñòà íà íàäïèñè.
Íàïðèìåð, äëÿ âûâîäà íà íàäïèñü Label1 òåêñòà «Ïðèâåò, Ìèð» íåîáõîäèìî â ïðîãðàììíûé êîä
ââåñòè ñëåäóþùóþ ñòðîêó:
Label1.Text = "Ïðèâåò, Ìèð."
Ýëåìåíò óïðàâëåíèÿ TextBox (Òåêñòîâîå ïîëå).
TextBox èñïîëüçóåòñÿ äëÿ ïðèåìà äàííûõ, ââîäèìûõ ïîëüçîâàòåëåì, èëè äëÿ îòîáðàæåíèÿ òåêñòà.
Íà ýëåìåíò óïðàâëåíèÿ TextBox îáû÷íî ïîìåùàåòñÿ ðåäàêòèðóåìûé òåêñò, õîòÿ åãî ìîæíî òàêæå
ñäåëàòü äîñòóïíûì òîëüêî äëÿ ÷òåíèÿ. Â òåêñòîâûå
ïîëÿ ìîæíî âûâîäèòü íåñêîëüêî ñòðîê òåêñòà, ðàçìåùàòü òåêñò â ñîîòâåòñòâèè ñ ðàçìåðîì ýëåìåíòà
óïðàâëåíèÿ è äîáàâëÿòü îñíîâíûå ýëåìåíòû ôîðìàòèðîâàíèÿ.
Íàïðèìåð, äëÿ âûâîäà â òåêñòîâîå ïîëå TextBox1 òåêñòà «Ïðèâåò, Ìèð» íåîáõîäèìî â ïðîãðàììíûé êîä ââåñòè ñëåäóþùóþ ñòðîêó:
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 Basic .NET
êîììåíòàðèè îáîçíà÷àþòñÿ àïîñòðîôîì.  ÿçûêàõ â C# è J# ñòðîêè
êîììåíòàðèåâ íà÷èíàþòñÿ ñ äâóõ ñèìâîëîâ êîñîé
÷åðòû (//).
Êîììåíòàðèè. Ñîâðåìåííûå ÿçûêè ïðîãðàììèðîâàíèÿ, âêëþ÷àÿ ÿçûêè èç Visual Studio .NET, ïîçâîëÿþò
äîáàâëÿòü â êîä ïðîãðàìì êîììåíòàðèè. Êîììåíòàðèè íå êîìïèëèðóþòñÿ âìåñòå ñ ïðîãðàììîé è íå
âûïîëíÿþòñÿ ïðè åå âûïîëíåíèè. Îíè ïîçâîëÿþò
äîáàâëÿòü â ïðîãðàììó çàìå÷àíèÿ, ïîÿñíÿþùèå åå
ðàáîòó è íàçíà÷åíèå. Êîììåíòàðèè ïîìîãàþò âñïîìíèòü, ÷òî äåëàþò îòäåëüíûå ÷àñòè ïðîãðàìì, è ïîçâîëÿþò äðóãèì ïðîãðàììèñòàì ëåã÷å ðàçáèðàòüñÿ â
íàïèñàííîì âàìè êîäå.
Êîììåíòàðèè ñëåäóåò äîáàâëÿòü â êîä âñåãäà.
Íàëè÷èå êîììåíòàðèå⠗ ýòî ïðèçíàê îïûòíîñòè
ïðîãðàììèñòà è õîðîøåãî ñòèëÿ ïðîãðàììèðîâàíèÿ.
Õîðîøèé ïðîãðàììèñò âñåãäà âûäåëèò âðåìÿ íà äîêóìåíòèðîâàíèå è îáúÿñíåíèå íàïèñàííîãî èì êîäà.
Åñëè âû èçìåíÿåòå èëè äîáàâëÿåòå êàêèå-òî ôóíêöèè â ïðîãðàììó, äîáàâüòå â íåå êîììåíòàðèè. Êðîìå òîãî, äîáàâëÿéòå êîììåíòàðèè ê òðóäíûì äëÿ
ïîíèìàíèÿ ÷àñòÿì ïðîãðàììû èëè ê ÷àñòÿì, âûïîëíÿþùèì ñëîæíûå èëè ðåäêî èñïîëüçóåìûå äåéñòâèÿ èëè âû÷èñëåíèÿ.
 Visual Basic .NET êîììåíòàðèé â ñòðîêå íà÷èíàåòñÿ ñ ñèìâîëà àïîñòðîôà ('). Ëþáàÿ ñòðîêà â êîäå,
íà÷èíàþùàÿñÿ ñ àïîñòðîôà, ñ÷èòàåòñÿ êîììåíòàðèåì è íå áóäåò êîìïèëèðîâàòüñÿ âìåñòå ñ ïðîãðàììîé
è âûïîëíÿòüñÿ.
Ó êîììåíòàðèåâ åñòü åùå îäíà âàæíàÿ ôóíêöèÿ
êðîìå äîêóìåíòèðîâàíèÿ ïðîãðàìì. Ïîñêîëüêó
ñòðîêè êîììåíòàðèåâ íå êîìïèëèðóþòñÿ è íå âûïîëíÿþòñÿ, ìîæíî ïîìå÷àòü ñòðîêè êîäà êàê ñòðîêè
êîììåíòàðèåâ, ÷òîáû ýòè ñòðîêè íå âûïîëíÿëèñü.
Ýòîò ïðèåì íàçûâàåòñÿ «çàêîììåíòèðîâàòü ñòðîêó
êîäà». Ñ ïîìîùüþ çàêîììåíòèðîâàíèÿ ôðàãìåíòîâ
êîäà ìîæíî ðàçûñêèâàòü îøèáêè â ïðîãðàììàõ.
Åñëè â âàøåé ïðîãðàììå åñòü îøèáêà, ìîæåòå ïî
î÷åðåäè çàêîììåíòèðîâàòü îòäåëüíûå ñòðîêè èëè
öåëûå áëîêè êîäà, ïîêà îøèáêà íå ïåðåñòàíåò ïîÿâëÿòüñÿ. Îøèáêà, ñêîðåå âñåãî, áóäåò íàõîäèòüñÿ â
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)
Îòñòóïû è ïðîáåëüíûå ñèìâîëû. Õîòÿ âû, âîçìîæíî, ïîíÿëè íå âåñü ïîêàçàííûé âûøå êîä íà
Àëãîðèòìû è ïðîãðàììû
Ïî óìîë÷àíèþ Visual Basic
.NET àâòîìàòè÷åñêè äåëàåò îòñòóïû â íà÷àëå ñòðîê
êîäà, çàâèñÿùèå îò êîäà â
ýòèõ ñòðîêàõ. Õîòÿ àâòîìàòè÷åñêèé îòñòóï ìîæíî
îòêëþ÷èòü, ëó÷øå åãî âñå
æå èñïîëüçîâàòü.
43
ÿçûêå 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
Êíîïêà, ïðè íàæàòèè êîòîðîé âûïîëíÿåòñÿ
ïîèñê ïîäõîäÿùèõ øèí äëÿ çàìåíû.
Ôîðìû è ýëåìåíòû óïðàâëåíèÿ
q
47
Òåêñòîâîå ïîëå, â êîòîðîì îòîáðàæàåòñÿ èíôîðìàöèÿ î ïîäõîäÿùèõ íàéäåííûõ øèíàõ,
âêëþ÷àÿ èõ ïðîèçâîäèòåëÿ, ìîäåëü, ðàçìåð,
êîëè÷åñòâî â çàïàñå è öåíó.
Òàêèì îáðàçîì, íà ôîðìå áóäóò äâà òåêñòîâûõ
ïîëÿ, ÷åòûðå ïåðåêëþ÷àòåëÿ, âûïàäàþùèé ñïèñîê,
ôëàæîê è êíîïêà. Èõ ìîæíî ðàñïîëîæèòü íà ôîðìå
ìíîæåñòâîì ðàçíûõ ñïîñîáî⠗ èìåííî çäåñü è íà÷èíàåòñÿ ñàìîå èíòåðåñíîå. Ôîðìà — ýòî òî æå ñàìîå, ÷òî õîëñò äëÿ õóäîæíèêà, à ýëåìåíòû
óïðàâëåíèÿ — òî æå, ÷òî êðàñêè. Íî íóæíî áûòü àêêóðàòíûì. Ôîðìà äîëæíà âûïîëíÿòü çàäà÷ó, äëÿ
âûïîëíåíèÿ êîòîðîé îíà ïðåäíàçíà÷åíà. Îíà äîëæíà ñîîòâåòñòâîâàòü òðåáîâàíèÿì ïðîãðàììû. Åé
äîëæíî áûòü ëåãêî ïîëüçîâàòüñÿ, è íà íåé íå äîëæíî áûòü íè÷åãî ëèøíåãî. Ñîçäàâàÿ ôîðìó, íóæíî
ñíà÷àëà ðåøèòü: äëÿ ÷åãî íóæíà ýòà ôîðìà? ×òî îíà
äîëæíà äåëàòü?
Ôîðìà äîëæíà àêêóðàòíî âûãëÿäåòü. Íà íåé íå
äîëæíî áûòü êó÷è ðàçíîöâåòíûõ ýëåìåíòîâ èëè ðàçäðàæàþùèõ âèçóàëüíûõ ýôôåêòîâ, âðîäå ìåðöàþùåãî òåêñòà — ýòî áóäåò îòâëåêàòü ïîëüçîâàòåëÿ.
Ýëåìåíòû óïðàâëåíèÿ äîëæíû ðàñïîëàãàòüñÿ â ÷åòêîì è ëîãè÷íîì ïîðÿäêå. Íóæíî ïðîäóìàòü ðàñïîëîæåíèå ýëåìåíòîâ, â êîòîðûå ïîëüçîâàòåëü áóäåò
ââîäèòü èíôîðìàöèþ, ðàáîòàÿ ñ ïðîãðàììîé. Èíîãäà íóæíî ïðåäóïðåæäàòü ïîëüçîâàòåëÿ, ÷òî îí íå
ââåë âñþ íóæíóþ èíôîðìàöèþ èëè ââåë íåâåðíóþ
èíôîðìàöèþ. Ñîçäàâàÿ ôîðìû, ïîïûòàéòåñü ïðåäñòàâèòü ñåáÿ ïîëüçîâàòåëåì è ïîäóìàéòå, êàê ìîæíî
áóäåò ðàáîòàòü ñ âàøåé ïðîãðàììîé.
Ñîçäàâàÿ ôîðìó, íóæíî ïîìíèòü, ÷òî âñå ïðèëîæåíèÿ 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). Íàæìèòå êëàâèøó {Backspace}, ÷òîáû î÷èñòèòü çíà÷åíèå ñâîéñòâà.
Ôîðìû è ýëåìåíòû óïðàâëåíèÿ
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
 ÿçûêàõ J# è C# ôîðìû
ñîçäàþòñÿ òî÷íî òàê æå,
êàê è â Visual Basic .NET.
Ýòî íåñëîæíî áëàãîäàðÿ
Visual Studio .NET. Âñå, ÷òî
íóæíî — ýòî îòêðûòü îêíî
Îáëàñòü ýëåìåíòîâ è ïåðåòàùèòü íóæíûå ýëåìåíòû íà ôîðìó. Çàòåì íóæíî
îòêðûòü îêíî Ñâîéñòâà è
íàñòðîèòü ñâîéñòâà ýëåìåíòîâ.
Ãëàâà 4
Âûáåðèòå RadioButton1 è îòêðîéòå îêíî Ñâîéñòâà. Ïðîêðóòèòå ñïèñîê ñâîéñòâ è íàéäèòå â íåì ñâîéñòâî Text. Èçìåíèòå åãî çíà÷åíèå ñ RadioButton1
íà Ëåâîå,ïåðåäíåå. Èçìåíèòå çíà÷åíèÿ ñâîéñòâà
Text äðóãèõ ïåðåêëþ÷àòåëåé: ó RadioButton2 — íà
Ëåâîå,çàäíåå, ó RadioButton3 — íà Ïðàâîå,ïåðåäíåå, ó RadioButton4 — íà Ïðàâîå,çàäíåå.
Ôëàæêè. Ôëàæêè (CheckBox) òîæå ïîçâîëÿþò
ïîëüçîâàòåëþ äåëàòü âûáîð, íî â îòëè÷èå îò ïåðåêëþ÷àòåëåé èç ãðóïïû ôëàæêîâ ìîæíî âûáèðàòü
ñðàçó íåñêîëüêî âàðèàíòîâ (â òîì ÷èñëå âñå).  îêíå
Îáëàñòü ýëåìåíòîâ âûïîëíèòå äâîéíîé ùåë÷îê ïî
ýëåìåíòó CheckBox. Íà ôîðìó áóäåò äîáàâëåí ýëåìåíò CheckBox1. Îòêðîéòå îêíî Ñâîéñòâà è èçìåíèòå çíà÷åíèå ñâîéñòâà Text íà Ýêñòðåííî.
Âûïàäàþùèé ñïèñîê. Âûïàäàþùèé ñïèñîê
(ÑomboBox) ïðåäîñòàâëÿåò ïîëüçîâàòåëþ íàáîð ïóíêòîâ äëÿ âûáîðà. Êîãäà ïîëüçîâàòåëü âûáèðàåò îäèí
èç ïóíêòîâ ñïèñêà, âûáðàííûé ïóíêò îòîáðàæàåòñÿ
â âåðõíåé ñòðîêå.  îêíå Îáëàñòü ýëåìåíòîâ âûïîëíèòå äâîéíîé ùåë÷îê ïî ýëåìåíòó ÑomboBox. Íà
ôîðìó áóäåò äîáàâëåí ýëåìåíò ÑomboBox1.
Îòêðîéòå îêíî Ñâîéñòâà è èçìåíèòå çíà÷åíèå
ñâîéñòâà Text íà Âûáåðèòå ðàçìåð øèíû. Íàéäèòå
â ñïèñêå ñâîéñòâ ñâîéñòâî Items. Ùåëêíèòå ïî çíà÷åíèþ (Êîëëåêöèÿ). Ðÿäîì ñ íèì ïîÿâèòñÿ êíîïêà ñ
ìíîãîòî÷èåì. Ùåëêíèòå ïî ýòîé êíîïêå, îòêðîåòñÿ
îêíî, â êîòîðîì ìîæíî ââåñòè ñïèñîê ïóíêòîâ, êîòîðûå áóäóò îòîáðàæàòüñÿ â âûïàäàþùåì ñïèñêå.
Êàæäûé ïóíêò ñïèñêà äîëæåí íà÷èíàòüñÿ ñ íîâîé
ñòðîêè. Ââîäÿ êàæäûé ïóíêò, íàæèìàéòå êëàâèøó {Enter}, ÷òîáû ñîçäàòü íîâóþ ñòðîêó. Ââåäèòå
â îêíå ÷èñëî 12, íàæìèòå {Enter}, ââåäèòå 13, íàæìèòå {Enter}, ââåäèòå 14, íàæìèòå {Enter} è ââåäèòå 15. Íàæìèòå êíîïêó OK, ÷òîáû çàêðûòü îêíî.
Êíîïêè. Äîáàâüòå íà ôîðìó êíîïêó Button.
Óñòàíîâèòå äëÿ åå ñâîéñòâà Text çíà÷åíèå Çàìåíèòü
øèíó. Èçìåíèòå öâåò ôîíà (ñâîéñòâî BackColor) íà
Ôîðìû è ýëåìåíòû óïðàâëåíèÿ
Ó ôîðìû è ìíîãèõ ýëåìåíòîâ óïðàâëåíèÿ åñòü îäèíàêîâûå ïî ñìûñëó ñâîéñòâà.
Âîò íåêîòîðûå ðàñïðîñòðàíåííûå ñâîéñòâà:
q BackColor — öâåò
ôîíà;
q Enabled — äîñòóï ê
ýëåìåíòó;
q ForeColor — öâåò;
q Location — ìåñòî, â
êîòîðîì ýëåìåíò
íàõîäèòñÿ;
q Name — èìÿ;
q Size (Height, Width) —
ðàçìåð (âûñîòà,
øèðèíà);
q Text — òåêñò èëè
íàäïèñü;
q Visible — âèäèì
ýëåìåíò èëè íåâèäèì.
55
êðàñíûé. Íàéäèòå â ñïèñêå ñâîéñòâ ñâîéñòâî Font.
Ùåëêíèòå ïî ýòîìó ñâîéñòâó, ÷òîáû ïîÿâèëàñü êíîïêà ñ ìíîãîòî÷èåì. Ùåëêíèòå ïî ýòîé êíîïêå, ÷òîáû
îòêðûòü îêíî âûáîðà øðèôòà. Â ýòîì îêíå èçìåíèòå
íà÷åðòàíèå øðèôòà íà ïîëóæèðíîå: ñâîéñòâó Bold
ïðèñâîéòå çíà÷åíèå True. Íàæìèòå êíîïêó OK,
÷òîáû çàêðûòü îêíî âûáîðà øðèôòà.
Ïîñòðîéòå ðåøåíèå è çàïóñòèòå ïðîåêò. Ïîïðîáóéòå ùåëêàòü ïî ðàçíûì ýëåìåíòàì óïðàâëåíèÿ â
îêíå çàïóñòèâøåãîñÿ ïðèëîæåíèÿ. ×òî ïðîèçîéäåò,
åñëè ùåëêíóòü ïî âûïàäàþùåìó ñïèñêó? ×òî áóäåò,
åñëè âûáðàòü îäíó èç ïîçèöèé ïåðåêëþ÷àòåëÿ, êàêóþ-òî äðóãóþ ïîçèöèþ, óñòàíîâèòü èëè ñáðîñèòü
ôëàæîê? Ïîïðîáóéòå ââåñòè òåêñò â òåêñòîâîå ïîëå
ñïðàâà îò íàäïèñè Ââåäèòå ìàðêó àâòîìîáèëÿ. Îáðàòèòå âíèìàíèå íà òî, ÷òî âòîðîå òåêñòîâîå ïîëå ñåðîå è âû íå ìîæåòå ââåñòè â íåãî òåêñò. Íàæìèòå
êíîïêó ñî çíà÷êîì
â âåðõíåì ïðàâîì óãëó îêíà,
÷òîáû çàêðûòü âàøå ïðèëîæåíèå.
Ïîýêñïåðèìåíòèðóéòå ñ ðàçíûìè ñâîéñòâàìè ýëåìåíòîâ óïðàâëåíèÿ, êîòîðûå âû ïîìåñòèëè íà ôîðìó. Ìîæåòå ïåðåìåùàòü ýëåìåíòû ïî ôîðìå, ÷òîáû
îíà âûãëÿäåëà àêêóðàòíåå è áûëà óäîáíåå â èñïîëüçîâàíèè. Ìîæåòå äîáàâèòü íàäïèñè, ïîÿñíÿþùèå
ïîëüçîâàòåëþ íàçíà÷åíèå êàæäîãî ýëåìåíòà óïðàâëåíèÿ è äàþùèå óêàçàíèÿ, êàêóþ èíôîðìàöèþ íóæíî
ââîäèòü. Êàê, ïî âàøåìó ìíåíèþ, äîëæíû ðàñïîëàãàòüñÿ ýëåìåíòû íà ôîðìå? Êàêîé ýëåìåíò äîëæåí
áûòü ïåðâûì? Êàêîé äîëæåí áûòü ïîñëåäíèì?
Âû òîëüêî ÷òî ñîçäàëè ôîðìó äëÿ ïðîåêòà «Çàìåíà øèíû». Ñîçäàâàÿ åå, âû ïîçíàêîìèëèñü ñ íåñêîëüêèìè âèäàìè ýëåìåíòîâ óïðàâëåíèÿ è íåêîòîðûìè
èõ ñâîéñòâàìè. ×òîáû ôîðìà çàðàáîòàëà, íóæíî äîáàâèòü ê íåé êîä íà 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
q
q
q
q
TextChanged (èçìåíåíèå òåêñòà — ñîáûòèå
ïî óìîë÷àíèþ);
Click (ùåë÷îê ïî òåêñòîâîìó ïîëþ);
DoubleClick (äâîéíîé ùåë÷îê ïî òåêñòîâîìó
ïîëþ);
MouseEnter (ïîïàäàíèå êóðñîðà ìûøè íà òåêñòîâîå ïîëå);
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. Ñ ÷åãî íà÷èíàåòñÿ êîä
Ñ ïîìîùüþ îêíà Ñâîéñòâà
çàäàþòñÿ íà÷àëüíûå çíà÷åíèÿ ñâîéñòâ ôîðìû è åå
ýëåìåíòîâ. Âî âðåìÿ ðàáîòû ïðîãðàììû çíà÷åíèÿ
ñâîéñòâ èçìåíÿþòñÿ ñ ïîìîùüþ êîäà.
×òîáû îòðåäàêòèðîâàòü
îáðàáîò÷èê ñîáûòèÿ ïî
óìîë÷àíèþ ó ýëåìåíòà
óïðàâëåíèÿ, âûáåðèòå ýòîò
ýëåìåíò íà ôîðìå è âûïîëíèòå ïî íåìó äâîéíîé
ùåë÷îê. Îòêðîåòñÿ îêíî
ðåäàêòîðà êîäà, è îáðàáîò÷èê áóäåò ãîòîâ äëÿ ðåäàêòèðîâàíèÿ. Îáðàáîò÷èêè äðóãèõ ñîáûòèé ìîæíî âûáðàòü èç âûïàäàþùåãî ñïèñêà â âåðõíåì
ïðàâîì óãëó îêíà ðåäàêòîðà êîäà.
Ñîçäàâàòü ôîðìû è çàäàâàòü â îêíå Ñâîéñòâà (Properties) çíà÷åíèÿ ñâîéñòâ èíòåðåñíî, íî ýòî òîëüêî
íà÷àëî! Îêíîì Ñâîéñòâà ïîëüçîâàòüñÿ íåñëîæíî, íî
îíî íå ñëèøêîì óíèâåðñàëüíîå. ×òî, åñëè ïîëüçîâàòåëü çàõî÷åò èçìåíèòü öâåò ôîíà ôîðìû, ðàáîòàÿ ñ
ïðîãðàììîé? ×òî, åñëè ïîëüçîâàòåëþ ïîíàäîáèòñÿ
èçìåíèòü ðàçìåð èëè íà÷åðòàíèå øðèôòà? Êàê ïðîãðàììà ìîæåò óçíàòü î òîì, óñòàíîâëåí ëè ôëàæîê è
âûáðàíà ëè êàêàÿ-òî ïîçèöèÿ ïåðåêëþ÷àòåëÿ? Ïîñêîëüêó ó ïîëüçîâàòåëåé íå áóäåò äîñòóïà ê îêíó
Ñâîéñòâà, êîãäà îíè çàïóñòÿò ïðîãðàììó, êàê æå
âñå ýòî ñäåëàòü?
Îòâåò ïðîñò: ñ ïîìîùüþ êîäà íà 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
 J# è C# çíà÷åíèÿ
ñâîéñòâ ýëåìåíòîâ óïðàâëåíèÿ ñ÷èòûâàþòñÿ òàê æå,
êàê è â Visual Basic .NET.
Âîò ïðèìåð êîäà íà J#
èëè C#, âûâîäÿùåãî çíà÷åíèå ñâîéñòâà Text òåêñòîâîãî ïîëÿ:
{
MessageBox.Show
(textBox1.Text);
}
Çà èñêëþ÷åíèåì òî÷êè ñ
çàïÿòîé â êîíöå ñòðîêè è
ôèãóðíûõ ñêîáîê, êîä
âûãëÿäèò òàê æå, êàê è â
Visual Basic .NET. Êðîìå
òîãî, â J# è C# îáîçíà÷åíèå textBox1 íà÷èíàåòñÿ
ñî ñòðî÷íîé áóêâû t.
Ãëàâà 5
äëÿ ñâîéñòâà Text çíà÷åíèå Ïå÷àòàòü çäåñü. Äîáàâüòå íà ôîðìó Form1 åùå îäíó êíîïêó. Èçìåíèòå çíà÷åíèå ñâîéñòâà Text êíîïêè Button4 íà ×èòàòü
òåêñò. Âûïîëíèòå äâîéíîé ùåë÷îê ïî ýòîé êíîïêå,
÷òîáû îòðåäàêòèðîâàòü êîä â îáðàáîò÷èêå åå íàæàòèÿ. Ââåäèòå ñëåäóþùóþ ñòðîêó êîäà:
MessageBox.Show(TextBox1.Text)
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Âûïîëíèòå äâîéíîé ùåë÷îê â òåêñòîâîì ïîëå è íàæìèòå êëàâèøó
{Backspace}, ÷òîáû ñòåðåòü òåêñò. Ââåäèòå êàêîéíèáóäü íîâûé òåêñò. Íàæìèòå êíîïêó ñ íàäïèñüþ
×èòàòü òåêñò. ×òî áóäåò âûâåäåíî â îêíå ñîîáùåíèÿ? Èçìåíèòå òåêñò â òåêñòîâîì ïîëå è åùå ðàç íàæìèòå êíîïêó ñ íàäïèñüþ ×èòàòü òåêñò. ×òî
ïðîèçîéäåò?
Ýòè ïðèìåðû ïîêàçàëè, êàê ñ ïîìîùüþ êîäà íà
Visual Basic .NET ñ÷èòûâàòü çíà÷åíèÿ ñâîéñòâ ýëåìåíòîâ óïðàâëåíèÿ è ôîðìû. Íî ýòî òîëüêî ïîëîâèíà âîçìîæíîñòåé, ïîòîìó ÷òî â êîäå íà Visual Basic
.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
Îáðàáîò÷èê
ñîáûòèÿ
Form_Load ÷àñòî èñïîëüçóåòñÿ äëÿ èíèöèàëèçàöèè
ïðîãðàììû. Èíèöèàëèçàöèÿ óñòàíàâëèâàåò îïðåäåëåííûå çíà÷åíèÿ, ïðåæäå ÷åì ôîðìà îòîáðàæàåòñÿ íà ýêðàíå. Íàïðèìåð, ìîæíî äîáàâèòü â
îáðàáîò÷èê êîä, óñòàíàâëèâàþùèé ðàçìåð ôîðìû
è öâåò åå ôîíà èëè âûáèðàþùèé îïðåäåëåííóþ
ïîçèöèþ ïåðåêëþ÷àòåëÿ
ïåðåä îòîáðàæåíèåì ôîðìû íà ýêðàíå.
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Ââåäèòå êàêîé-íèáóäü òåêñò â TextBox1 è íàæìèòå êíîïêó ñ
íàäïèñüþ Óñòàíîâèòü òåêñò. ×òî ïðîèçîéäåò? Êàê
âèäèòå, òåêñò èç òåêñòîâîãî ïîëÿ TextBox1 áûë
«ñêîïèðîâàí» â TextBox2. Êîä íà Visual Basic .NET
ñ÷èòûâàåò çíà÷åíèå ñâîéñòâà Text òåêñòîâîãî ïîëÿ
TextBox1 è ïðèñâàèâàåò ñ÷èòàííîå çíà÷åíèå ñâîéñòâó Text òåêñòîâîãî ïîëÿ TextBox2.
Äàâàéòå äîáàâèì êîä, êîòîðûé áóäåò àâòîìàòè÷åñêè óñòàíàâëèâàòü îäèí ôëàæîê è ñáðàñûâàòü äðóãîé,
êîãäà ïîëüçîâàòåëü çàïóñêàåò ïðèëîæåíèå. Äîáàâüòå
íà ôîðìó Form1 ôëàæîê è çàäàéòå äëÿ åãî ñâîéñòâà
Text çíà÷åíèå Ýêñòðåííî. Äîáàâüòå íà ôîðìó åùå
îäèí ôëàæîê è çàäàéòå äëÿ åãî ñâîéñòâà Text çíà÷åíèå Îáÿçàòåëüíî. Âûïîëíèòå äâîéíîé ùåë÷îê â ïóñòîì ìåñòå íà ôîðìå (íå íà ýëåìåíòàõ óïðàâëåíèÿ).
Îòêðîåòñÿ îáðàáîò÷èê ñîáûòèÿ Form1_Load. Êîä
ýòîãî îáðàáîò÷èêà âûïîëíÿåòñÿ, êîãäà ôîðìà âûâîäèòñÿ íà ýêðàí ïðè çàïóñêå ïðîãðàììû. Äîáàâüòå â
ýòîò îáðàáîò÷èê ñëåäóþùèå äâå ñòðîêè:
CheckBox1.Checked = True
CheckBox2.Checked = False
 ÿçûêàõ J# è C# çíà÷åíèÿ ñâîéñòâàì ïðèñâàèâàþòñÿ òî÷íî òàê æå, êàê è
â Visual Basic .NET. Êîä,
ïðèâåäåííûé íèæå, ïîêàçûâàåò, êàê ïðèñâàèâàòü
çíà÷åíèå ñâîéñòâó Checked
ôëàæêà â C# èëè J#.
{
checkBox1.Checked =
True;
}
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Êàêîé ôëàæîê
óñòàíîâëåí? Âàø êîä àâòîìàòè÷åñêè óñòàíîâèë çíà÷åíèå ñâîéñòâà Checked äâóõ ôëàæêîâ ïðè çàãðóçêå
ôîðìû.
Ìû çíàåì, ÷òî 14 — ýòî ñàìûé ðàñïðîñòðàíåííûé ðàçìåð øèíû. Äàâàéòå ñäåëàåì òàê, ÷òîáû êîä
àâòîìàòè÷åñêè âûáèðàë 14 â âûïàäàþùåì ñïèñêå
ðàçìåðà øèíû. Ñíà÷àëà äîáàâüòå âûïàäàþùèé ñïèñîê ComboBox1 íà ôîðìó Form1. Ñ ïîìîùüþ îêíà
Ñâîéñòâà â ñïèñêå ComboBox1 óñòàíîâèòå äëÿ ñâîéñòâà Items çíà÷åíèÿ 12, 13, 14, 15 è 16. Íå çàáûâàéòå íàæèìàòü {Enter}, ÷òîáû íà÷èíàòü ñ íîâîé
ñòðîêè êàæäûé íîâûé ïóíêò ñïèñêà. Âûïîëíèòå
äâîéíîé ùåë÷îê ïî ôîðìå (íå ïî âûïàäàþùåìó
Ñâîéñòâà è ìåòîäû
69
ñïèñêó), ÷òîáû îòðåäàêòèðîâàòü êîä â îáðàáîò÷èêå
Form1_Load. Äîáàâüòå â îáðàáîò÷èê ñëåäóþùóþ
ñòðîêó êîäà:
ComboBox1.SelectedItem = "14"
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Êàêîé ïóíêò îòîáðàæàåòñÿ â âûïàäàþùåì ñïèñêå? Êàê íåîáõîäèìî
èçìåíèòü êîä, ÷òîáû â âûïàäàþùåì ñïèñêå àâòîìàòè÷åñêè âûáèðàëñÿ ïóíêò 13?
Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ
Microsoft-CD
5.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
ñîçäàòü ïðîåêò «Óñòàíîâêà ñâîéñòâ», îïèñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ
â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå Óñòàíîâêà_
ñâîéñòâ.exe.
5.4. IntelliSense è òî÷å÷íàÿ íîòàöèÿ
Òåïåðü âû çíàåòå, êàê ñ ïîìîùüþ Visual Basic .NET
÷èòàòü è çàïèñûâàòü çíà÷åíèÿ ñâîéñòâ ôîðì è ýëåìåíòîâ óïðàâëåíèÿ. Åñëè ó êàæäîé ôîðìû è ýëåìåíòà
óïðàâëåíèÿ òàê ìíîãî ñâîéñòâ, êàê çà íèìè óñëåäèòü?
Íå ñëèøêîì óäîáíî ïîñòîÿííî ïåðåêëþ÷àòüñÿ ìåæäó ðåäàêòîðîì êîäà è îêíîì Ñâîéñòâà, ÷òîáû âûÿñíèòü, êàêèå ñâîéñòâà íàì íóæíû. Ìîæåò áûòü, åñòü
áîëåå óäîáíûé ñïîñîá?
Ìîæíî èñïîëüçîâàòü IntelliSense. Ýòî ÷àñòü Visual
Studio. IntelliSense ñîõðàíÿåò íàì ìíîãî âðåìåíè
ïðè ðåäàêòèðîâàíèè êîäà â îêíå ðåäàêòîðà. IntelliSense çíàåò, ê êàêîìó ýëåìåíòó óïðàâëåíèÿ âû îáðàùàåòåñü è êàêèå ó íåãî åñòü ñâîéñòâà. Îíî âûâîäèò
ñïèñîê ñâîéñòâ è ïîçâîëÿåò âàì âûáèðàòü èç íåãî
íóæíîå. Èñïîëüçóåìîå ÷àùå âñåãî ñâîéñòâî ïîäñâå÷èâàåòñÿ, êîãäà IntelliSense îòîáðàæàåò ñïèñîê. Íàïðèìåð, äëÿ òåêñòîâîãî ïîëÿ èçíà÷àëüíî ïîäñâå÷èâàåòñÿ
ñâîéñòâî Text. Ñ ïîìîùüþ ñòðåëîê ââåðõ è âíèç íà
êëàâèàòóðå ìîæíî ïðîñìàòðèâàòü ñïèñîê è âûáè-
70
Ãëàâà 5
ðàòü òî ñâîéñòâî, êîòîðîå âàì òðåáóåòñÿ. Ïðè íàæàòèè êëàâèøè {Tab} âûáðàííîå ñâîéñòâî äîáàâëÿåòñÿ
â êîä. Èñïîëüçóÿ IntelliSense, âàì íå ïðèäåòñÿ çàïîìèíàòü âñå ñâîéñòâà âñåõ ýëåìåíòîâ óïðàâëåíèÿ.
Êðîìå òîãî, äàííîå ñðåäñòâî çàìåòíî ñîêðàùàåò ïîòðåáíîñòü â íàáîðå äëèííûõ èìåí íà êëàâèàòóðå!
Ïîïðîáóéòå åãî èñïîëüçîâàòü! Ñîçäàéòå íîâîå
ïðèëîæåíèå Windows è íàçîâèòå åãî «IntelliSense».
Ïîìåñòèòå íà ôîðìó òåêñòîâîå ïîëå è êíîïêó.
Âûïîëíèòå äâîéíîé ùåë÷îê ïî êíîïêå, ÷òîáû îòðåäàêòèðîâàòü êîä â îáðàáîò÷èêå íàæàòèé íà íåå.
1. Ââåäèòå ñ êëàâèàòóðû TextBox1 è íàæìèòå
êëàâèøó «òî÷êà» {.}. Êàê òîëüêî âû ââåäåòå
òî÷êó, IntelliSense îòîáðàçèò ñïèñîê ñâîéñòâ
ýëåìåíòà TextBox1. Ïîñêîëüêó TextBox1 —
òåêñòîâîå ïîëå, ýòîò ñïèñîê áóäåò òàêèì æå,
êàê è äëÿ ëþáîãî äðóãîãî òåêñòîâîãî ïîëÿ íà
ôîðìå. Ïî óìîë÷àíèþ â ñïèñêå IntelliSense
ïîäñâå÷èâàåòñÿ ÷àùå âñåãî èñïîëüçóåìîå ñâîéñòâî.  íàøåì ñëó÷àå ïî óìîë÷àíèþ ïîäñâå÷èâàåòñÿ ñâîéñòâî Text.
2. Òåïåðü ââåäèòå áóêâó «R». IntelliSense ïðî-
êðóòèò ñïèñîê äî ïåðâîãî ïî àëôàâèòó ñâîéñòâà, íà÷èíàþùåãîñÿ ñ «R». Ïî ìåðå ââîäà
IntelliSense èùåò â ñïèñêå ñâîéñòâî, íàèáîëåå ñîîòâåòñòâóþùåå ââåäåííûì áóêâàì.
Ñâîéñòâà è ìåòîäû
Êîãäà ñâîéñòâî ïîäñâå÷èâàåòñÿ â ñïèñêå IntelliSense,
ðÿäîì ïîÿâëÿåòñÿ ïîäñêàçêà, êðàòêî åãî îïèñûâàþùàÿ. Ýòà ïîäñêàçêà,
íàïðèìåð, ìîæåò ñîîáùèòü, åñëè ñâîéñòâî äîñòóïíî òîëüêî äëÿ ÷òåíèÿ
(Read Only, ò. å. åìó íåëüçÿ ïðèñâàèâàòü çíà÷åíèå).
Êðîìå òîãî, ïîäñêàçêà ñîîáùàåò, êàêèå çíà÷åíèÿ
ìîæíî ïðèñâàèâàòü ñâîéñòâó, íàïðèìåð, ñòðîêó
(òåêñò) èëè öåëîå ÷èñëî.
71
3. Ñ ïîìîùüþ ñòðåëêè âíèç ïðîêðóòèòå ñïèñîê
è íàéäèòå ñíîâà ñâîéñòâî Text. Âûáåðèòå
ñâîéñòâî Text, ÷òîáû îíî áûëî ïîäñâå÷åíî.
4. Íàæìèòå êëàâèøó {Tab}. Ïîñìîòðèòå, ÷òî
ïîëó÷èëîñü! Ïîñëå TextBox1. â êîä äîáàâëåíî ñëîâî Text.
5. Òåïåðü ââåäèòå ="Clifford". Êîä áóäåò âûãëÿäåòü òàê:
TextBox1.Text = "Clifford"
72
Ñîçäàâàÿ ïðîãðàììû íà
ÿçûêàõ C# è J# ñ ïîìîùüþ Visual Studio, òîæå
ìîæíî èñïîëüçîâàòü IntelliSense. Ýòî ñðåäñòâî ðàáîòàåò òî÷íî òàê æå, êàê è
â Visual Basic .NET. Ïðîñòî ââåäèòå èìÿ ýëåìåíòà,
à
çàòåì
òî÷êó.
IntelliSense âûâåäåò ñïèñîê äîñòóïíûõ ñâîéñòâ è
ìåòîäîâ. Ïîñêîëüêó ÿçûêè
J#, C# è Visual Basic .NET
îñíîâàíû íà ïëàòôîðìå
.NET, ñïèñîê ñâîéñòâ è ìåòîäîâ ýëåìåíòîâ áóäåò
îäèíàêîâûì äëÿ âñåõ òðåõ
ÿçûêîâ.
Ãëàâà 5
Ïðàâäà, ïðîñòî è óäîáíî? IntelliSense, êðîìå
òîãî, ïîìîãàåò èçáåãàòü îøèáîê ïðè íàáîðå òåêñòà.
Ýòî î÷åíü âàæíî!
Âû, íàâåðíîå, çàìåòèëè, ÷òî êàæäîìó ïóíêòó
ñïèñêà IntelliSense ñîîòâåòñòâóåò ìàëåíüêèé çíà÷îê.
Ñâîéñòâà ïîìå÷åíû çíà÷êàìè â âèäå ðóêè, óêàçûâàþùåé íà ëèñò áóìàãè. Ìåòîäû îáîçíà÷åíû ôèîëåòîâûì
«êèðïè÷èêîì». (Ìû ñêîðî ðàçáåðåìñÿ, ÷òî òàêîå ìåòîäû).  çàâèñèìîñòè îò òîãî, äëÿ êàêîãî ýëåìåíòà
óïðàâëåíèÿ ìû ïðîñìàòðèâàåì ñïèñîê, â íåì ìîãóò
áûòü è ïóíêòû ñ äðóãèìè çíà÷êàìè.
Âû îáðàòèëè âíèìàíèå íà òî, ÷òî íóæíî áûëî
ââåñòè òî÷êó, ïðåæäå ÷åì ïîÿâèëñÿ ñïèñîê IntelliSense? Ýòî ïîòîìó, ÷òî â 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("Ïðèâåò, Ìèð")
Ñâîéñòâà è ìåòîäû
Âåðîÿòíî, âû óæå äîãàäàëèñü, ÷òî â ÿçûêàõ J# è
C# ìåòîäû âûçûâàþòñÿ
òî÷íî òàê æå, êàê â Visual
Basic .NET. Âîò ïðèìåð
êîäà íà J#, óäàëÿþùåãî
òåêñò èç òåêñòîâîãî ïîëÿ
è ïîìåùàþùåãî êóðñîð â
ýòî òåêñòîâîå ïîëå. Êîä
íà C# âûãëÿäèò òî÷íî òàê
æå.
{
textBox1.ResetText();
textBox1.Focus();
}
75
Ïîðàáîòàåì ñ ìåòîäàìè, ïîçâîëÿþùèìè ñêðûâàòü è äåëàòü âèäèìûìè ýëåìåíòû óïðàâëåíèÿ, ñòèðàòü òåêñò â òåêñòîâûõ ïîëÿõ è çàäàâàòü ïîçèöèþ
êóðñîðà. Äëÿ íà÷àëà ñîçäàéòå íîâîå ïðèëîæåíèå
Windows è íàçîâèòå åãî «Ìåòîäû». Äîáàâüòå íà ôîðìó äâå êíîïêè è òåêñòîâîå ïîëå. Èçìåíèòå çíà÷åíèå
ñâîéñòâà Text êíîïêè Button1 íà Ïîêàçàòü. Èçìåíèòå çíà÷åíèå ñâîéñòâà Text êíîïêè Button2 íà
Ñêðûòü.  îáðàáîò÷èê íàæàòèÿ êíîïêè Button1
ââåäèòå ñëåäóþùèé êîä:
TextBox1.Show()
 îáðàáîò÷èê íàæàòèÿ êíîïêè Button2 ââåäèòå
ñëåäóþùèé êîä:
TextBox1.Hide()
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó
ñ íàäïèñüþ Ñêðûòü, à çàòåì — êíîïêó ñ íàäïèñüþ
Ïîêàçàòü. Êàæäûé ðàç, êîãäà âû íàæèìàåòå
êíîïêó, ïðîãðàììà âûïîëíÿåò ìåòîäû ýëåìåíòà
TextBox.
Äîáàâüòå íà ôîðìó åùå îäíó êíîïêó. Èçìåíèòå
çíà÷åíèå ñâîéñòâà Text êíîïêè Button3 íà Ñáðîñ.
 îáðàáîò÷èê íàæàòèÿ êíîïêè Button3 ââåäèòå ñëåäóþùèé êîä:
TextBox1.ResetText()
TextBox1.Focus()
Ìåòîä ResetText óäàëÿåò âåñü òåêñò èç òåêñòîâîãî ïîëÿ.
Ìåòîä Focus ïîìåùàåò êóðñîð â òåêñòîâîå ïîëå.
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Ââåäèòå â òåêñòîâîå ïîëå êàêîé-íèáóäü òåêñò è íàæìèòå êíîïêó ñ
íàäïèñüþ Ñáðîñ. Èç òåêñòîâîãî ïîëÿ èñ÷åçíåò âåñü
òåêñò, è îíî áóäåò ãîòîâî ê ââîäó íîâîãî òåêñòà.
Òåïåðü âû ìîæåòå ÷èòàòü è çàïèñûâàòü çíà÷åíèÿ
ñâîéñòâ è âûçûâàòü ìåòîäû â êîäå íà Visual Basic
.NET. Êàê âû âèäåëè, áîëüøàÿ ÷àñòü êîäà ðàçìåùà-
76
Ãëàâà 5
åòñÿ â îáðàáîò÷èêàõ ñîáûòèé ýëåìåíòîâ óïðàâëåíèÿ.
×òîáû îòêðûòü êîä îáðàáîò÷èêà ñîáûòèÿ ïî óìîë÷àíèþ, ïðîñòî âûïîëíèòå äâîéíîé ùåë÷îê ïî ýëåìåíòó óïðàâëåíèÿ — îòêðîåòñÿ ðåäàêòîð êîäà ñ
ãîòîâûì ê ðåäàêòèðîâàíèþ îáðàáîò÷èêîì. ×òîáû
ïðî÷èòàòü èëè çàïèñàòü çíà÷åíèå ñâîéñòâà èëè âûçâàòü ìåòîä, ââåäèòå èìÿ ýëåìåíòà è òî÷êó. IntelliSense ïîêàæåò ñïèñîê äîñòóïíûõ ñâîéñòâ è ìåòîäîâ
ýëåìåíòà. Âûáåðèòå íóæíîå âàì ñâîéñòâî èëè ìåòîä
è íàæìèòå êëàâèøó {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 = "Òåêñò"
Ïîêà ÷òî ìû íàçûâàëè òåêñòîâûå ïåðåìåííûå «òåêñòîì». Â ïëàòôîðìå .NET
âñå òåêñòîâûå ïåðåìåííûå
íàçûâàþòñÿ ñòðîêàìè, ò. å.
èìåþò òèï String. Åñëè
âû èñïîëüçóåòå êîä äëÿ çàïèñè çíà÷åíèÿ â ñòðîêîâóþ
ïåðåìåííóþ, íå çàáûâàéòå
ïîìåùàòü òåêñò â êàâû÷êè, íàïðèìåð:
Button1.Text = _
"Ùåëêíóòü çäåñü"
Çäåñü ñëåâà îò çíàêà «ðàâíî» ðàçìåùåíî ñâîéñòâî Text ýëåìåíòà TextBox1, êîòîðîå ìîæåò áûòü
òîëüêî òåêñòîì, ïîýòîìó ñïðàâà îò çíàêà «ðàâíî»
äîëæåí áûòü òîæå òåêñò. Åñëè ñïðàâà áóäåò íå
òåêñò, à ÷òî-òî äðóãîå, òî ïðè ïîïûòêå ïîñòðîèòü
ïðîåêò ïðîèçîéäåò îøèáêà. Ïîñêîëüêó â íàøåì
ñëó÷àå "Òåêñò" — ýòî òåêñò, ò. å. èìåííî òî, ÷òî
ìîæåò íàõîäèòüñÿ â ñâîéñòâå Text, îøèáêè íå ïðîèñõîäèò.
Ñëåäóþùèé êîä íå áóäåò êîìïèëèðîâàòüñÿ, ïîñêîëüêó ìû ïûòàåìñÿ ïîìåñòèòü â òåêñòîâîå ñâîéñòâî Text çíà÷åíèå öâåòà, ForeColor:
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
Ïîñêîëüêó C# è J# — ýòî
òîæå ÿçûêè .NET, â íèõ èñïîëüçóþòñÿ òå æå áàçîâûå
òèïû, ÷òî è â Visual Basic
.NET, — ñòðîêè, öåëûå
÷èñëà, äðîáíûå ÷èñëà, áóëåâû (ëîãè÷åñêèå) çíà÷åíèÿ è äðóãèå.
Êîãäà âû âûáèðàåòå ñâîéñòâî èëè ìåòîä â ñïèñêå
IntelliSense, âûâîäèòñÿ ïîäñêàçêà ê ïîäñâå÷åííîìó
ïóíêòó ñïèñêà. Â ýòîé ïîäñêàçêå óêàçûâàåòñÿ òèï
ñâîéñòâà èëè òèïû àðãóìåíòîâ ìåòîäà.
Ãëàâà 6
çíà÷åíèÿ â ñâîéñòâî Text. Âû èñïîëüçîâàëè òèï
Integer (öåëûå ÷èñëà), çàïèñûâàÿ çíà÷åíèÿ â ñâîéñòâî Height ôîðì. Âû èñïîëüçîâàëè òèï Boolean
(áóëåâû ëîãè÷åñêèå âåëè÷èíû, True èëè False),
íàïðèìåð, çàïèñûâàÿ çíà÷åíèÿ â ñâîéñòâî Visible.
×àùå âñåãî èñïîëüçóþòñÿ òàêèå áàçîâûå òèïû:
String (òåêñòîâûå ñòðîêè), Integer (öåëûå ÷èñëà),
Single (äðîáíûå ÷èñëà) è Boolean (True èëè False).
Ýòè òèïû äîñòóïíû âî âñåõ ÿçûêàõ ïðîãðàììèðîâàíèÿ .NET, âêëþ÷àÿ Visual Basic .NET, C# è J#.
Âîò ïðèìåðû äîïóñòèìûõ çíà÷åíèé äëÿ êàæäîãî
èç ýòèõ òèïîâ:
Òèï
Çíà÷åíèå
Êîììåíòàðèé
String
"Hello"
Integer
123
Single
Boolean
55.12
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
Dim
Dim
Dim
 C# è J# ïåðåìåííûå
îáúÿâëÿþòñÿ
íåìíîãî
ïî-äðóãîìó. Ñíà÷àëà ïèøåòñÿ òèï ïåðåìåííîé, à
ïîòîì åå èìÿ. Êðîìå òîãî,
òèïû íàçûâàþòñÿ òîæå
ïî-äðóãîìó.
Íàïðèìåð,
int èñïîëüçóåòñÿ âìåñòî
Integer, à decimal —
âìåñòî Single.
MyName As String
MyWeight As Integer
NoBrainer As Boolean
DVDPrice As Single
Ïåðâàÿ ïåðåìåííàÿ, MyName, îáúÿâëåíà êàê ñòðîêîâàÿ (òèï String). Ýòî çíà÷èò, ÷òî â ïåðåìåííîé
MyName ìîæíî õðàíèòü òîëüêî ñòðîêè òåêñòà. Âòîðàÿ ïåðåìåííàÿ, MyWeight, îáúÿâëåíà êàê öåëî÷èñëåííàÿ (òèï Integer).  íåé ìîæíî õðàíèòü öåëûå
÷èñëà. Ïåðåìåííàÿ NoBrainer îáúÿâëåíà êàê ëîãè÷åñêàÿ (òèï Boolean), à ïåðåìåííàÿ DVDPrice —
êàê äðîáíîå ÷èñëî (òèï Single).
Âàæíî âûáèðàòü äëÿ ïåðåìåííûõ óäîáíûå èìåíà. Èìåíà ïåðåìåííûõ äîëæíû áûòü êîðîòêèìè, íî
ïîíÿòíûìè. Èñïîëüçóéòå â íèõ àááðåâèàòóðû òîëü-
Ïðèñâàèâàíèå è ïåðåìåííûå
85
êî ïðè íåîáõîäèìîñòè. Ìíîãèå ïðîãðàììèñòû èñïîëüçóþò ñòèëü îôîðìëåíèÿ èìåí, ïðè êîòîðîì êàæäîå
ñëîâî â èìåíè ïåðåìåííîé íà÷èíàåòñÿ ñ áîëüøîé
áóêâû. Íàïðèìåð: CamelCase, MyName, WinnebagoTopSpeed, 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
Microsoft-CD
ñîçäàòü ïðîåêò «×èñëî Pi», îñóùåñòâëÿþùèé
âûâîä ÷èñëà π â òåêñòîâûå ïîëÿ â ðàçëè÷íûõ
ôîðìàòàõ. Ñîçäàéòå ôîðìó ñëåäóþùåãî âèäà:
 îáðàáîò÷èêå íàæàòèÿ íà êíîïêó îáúÿâèòå ïåðåìåííûå ñëåäóþùèõ òèïîâ: 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
 C# è J# èíèöèàëèçàöèÿ
ïåðåìåííîé íóæíûì çíà÷åíèåì äåëàåòñÿ òàê:
int myOrbit;
myOrbit=123000;
Ãëàâà 6
Ïåðåìåííàÿ MyName îáúÿâëåíà êàê ïðèíàäëåæàùàÿ ê òèïó String, è åé ïðèñâîåíà ñòðîêà "Ìîå
èìÿ". Ïåðåìåííàÿ MyWeight îáúÿâëåíà êàê Integer
è åé ïðèñâîåíî çíà÷åíèå 128, öåëîå ÷èñëî. Ïåðåìåííàÿ DrivingDistance îáúÿâëåíà êàê Single, è åé
ïðèñâîåíî çíà÷åíèå 12.8, äåñÿòè÷íàÿ äðîáü.
Åñòü î÷åíü óäîáíûé ñïîñîá îáúåäèíÿòü â îäíîé
ñòðîêå êîäà îáúÿâëåíèå ïåðåìåííîé è ïðèñâàèâàíèå
åé íà÷àëüíîãî çíà÷åíèÿ. Ýòîò ñïîñîá ãàðàíòèðóåò,
÷òî ó ïåðåìåííîé ñ ñàìîãî íà÷àëà áóäåò ïðàâèëüíîå
çíà÷åíèå. Èñïîëüçîâàíèå ïåðåìåííîé, êîòîðîé íå
ïðèñâîåíî íà÷àëüíîå çíà÷åíèå, ìîæåò ïðèâåñòè ê
íåïðàâèëüíîé ðàáîòå ïðîãðàììû.
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
Ìîæíî ïðèñâîèòü ïåðåìåííîé çíà÷åíèå äðóãîé
ïåðåìåííîé. ×òî áóäåò âûâåäåíî â îêíå ñîîáùåíèÿ?
Âîò íåáîëüøîé ïðèìåð
êîäà íà J# èëè C#. Êàê
âèäèòå, åñòü è îáùèå ÷åðòû, è îòëè÷èÿ ýòîãî êîäà
îò êîäà íà Visual Basic.
NET. Îáðàòèòå âíèìàíèå
íà îáúÿâëåíèå ïåðåìåííûõ.
string MyName;
string YourName;
MyName =
"Allen Ginsberg";
YourName = myName;
MessageBox.Show
(YourName);
Dim MyName As String
Dim YourName As String
MyName = "Allen Ginsberg"
YourName = MyName
MessageBox.Show(YourName)
Âîò ïðèìåð, ñîäåðæàùèé îøèáêó: ìû ïûòàåìñÿ
ïðèñâîèòü ïåðåìåííîé çíà÷åíèå ïåðåìåííîé äðóãîãî
òèïà. Ïîìíèòå, ïåðåìåííûå îáúÿâëÿþòñÿ êàê ïðèíàäëåæàùèå ê îïðåäåëåííîìó òèïó. Èì ìîæíî ïðèñâîèòü çíà÷åíèÿ òîëüêî ýòîãî òèïà. Ýòîò êîä íåëüçÿ
ñêîìïèëèðîâàòü:
‘Îøèáêà
Dim MyName As String
Dim DVDPrice As Single
MyName = "Paul Bunion"
DVDPrice = MyName
Äàâàéòå íàïèøåì ïðîãðàììó, â êîòîðîé ïåðåìåííûå èñïîëüçóþòñÿ! Ñîçäàéòå íîâîå ïðèëîæåíèå Windows â 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
Microsoft-CD
ñîçäàòü ïðîåêò «Èìåíà», îïèñàííûé â ïàðàãðàôå.
Ãîòîâûé ïðîåêò õðàíèòñÿ â àðõèâå Èìåíà.exe.
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
Ñêîáêè ìîæíî èñïîëüçîâàòü â îïåðàòîðàõ òî÷íî
òàê æå, êàê â îáû÷íûõ ìàòåìàòè÷åñêèõ çàäà÷àõ. Òî,
÷òî íàõîäèòñÿ â ñêîáêàõ,
âû÷èñëÿåòñÿ
ïåðâûì.
Ïðèìåð:
(5+7)/(1+5)= 2
Çäåñü ñíà÷àëà âû÷èñëÿåòñÿ (5+7), ïîòîì (1+5),
çàòåì âûïîëíÿåòñÿ äåëåíèå. Îòâåò ðàâåí 2.
Áåç ñêîáîê ìû áû ïîëó÷èëè äðóãîé îòâåò:
5+7/1+5 = 17
Ñ ïîìîùüþ ñêîáîê âû ìîæåòå óêàçàòü ïðîãðàììå,
â êàêîì ïîðÿäêå íóæíî
âûïîëíÿòü âû÷èñëåíèÿ.
Ãëàâà 7
ìåííûìè — åñëè ýòè ïåðåìåííûå ïîäõîäÿò ïî òèïó.
À åùå ìîæíî çàïèñàòü â ïåðåìåííóþ çíà÷åíèå âûðàæåíèÿ, â êîòîðîì èñïîëüçóåòñÿ ñàìà ýòà ïåðåìåííàÿ. Äàâàéòå ðàçáåðåì áîëåå ñëîæíûå ïðèìåðû.
Ïåðâûé ïðèìåð âû÷èñëÿåò äëèíó îêðóæíîñòè, åñëè
èçâåñòåí äèàìåòð.
Dim Circum As Single
Dim Diameter As Integer
Dim Pi As Single
Pi = 3.14159
Diameter = 18
Circum = Diameter * Pi
MessageBox.Show(Circum)
 ñëåäóþùåì ïðèìåðå âû÷èñëÿåòñÿ ñðåäíÿÿ
öåíà áåíçèíà çà äâà ìåñÿöà — ìàðò è àïðåëü. Îáðàòèòå âíèìàíèå íà ñêîáêè — îíè èñïîëüçóþòñÿ, ÷òîáû ñëîæèòü öåíû è îáúåìû, ïðåæäå ÷åì äåëèòü.
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
Microsoft-CD
ñîçäàòü ïðîåêò «Öåíà áåíçèíà-1», îïèñàííûé â
ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå Öåíà_áåíçèíà-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 ñòîèìîñòü áåíçèíà.
2. ×åòûðå íàäïèñè äëÿ îïèñàíèÿ òåêñòîâûõ
ïîëåé.
3. Êíîïêó, ïðè íàæàòèè êîòîðîé áóäåò íà÷èíàòüñÿ âû÷èñëåíèå.
q
Äëÿ ïðåîáðàçîâàíèÿ çíà÷åíèé ñòðîêîâîãî òèïà,
ââîäèìûõ â òåêñòîâûå ïîëÿ, â ÷èñëà èñïîëüçîâàòü
ôóíêöèþ Val(). Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå Öåíà_áåíçèíà_2.exe.
7.2. Ñòðîêîâûå îïåðàöèè
Íå âî âñåõ ïðîãðàììàõ çàäà÷à ñâîäèòñÿ òîëüêî ê âû÷èñëåíèÿì, èíîãäà ïðîãðàììå íóæíî ðàáîòàòü ñ òåêñòîâûìè ñòðîêàìè. Âû çíàåòå, ÷òî â Visual Basic
.NET è äðóãèõ ÿçûêàõ ïðîãðàììèðîâàíèÿ ìîæíî
Îïåðàöèè
 ÿçûêàõ C# è J# àìïåðñåíä (&) íå èñïîëüçóåòñÿ
äëÿ ñîåäèíåíèÿ òåêñòîâûõ
ñòðîê. Èñïîëüçóåòñÿ ïëþñ
(+). Ïîñìîòðèòå íà ñëåäóþùóþ ñòðîêó êîäà:
fullName = "Bill " +
"Bob";
99
«ñêëàäûâàòü» òåêñò? Íà ñàìîì äåëå ýòî íå òî æå ñàìîå
ñëîæåíèå, ÷òî è äëÿ ÷èñåë. «Ñëîæåíèå» òåêñòîâûõ
ñòðîê íàçûâàåòñÿ êîíêàòåíàöèåé — ýòî òåõíè÷åñêèé
òåðìèí, îáîçíà÷àþùèé ñîåäèíåíèå äâóõ ñòðîê.
 Visual Basic .NET îïåðàöèÿ êîíêàòåíàöèè çàäàåòñÿ ñ ïîìîùüþ çíàêîâ «àìïåðñåíä» (&) èëè «ïëþñ»
(+). Îíè èñïîëüçóþòñÿ òî÷íî òàê æå, êàê îïåðàöèÿ
ñëîæåíèÿ, íî ñî ñòðîêàìè, à íå ñ ÷èñëàìè.
Âîò ïðèìåðû èñïîëüçîâàíèÿ îïåðàöèè êîíêàòåíàöèè:
"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
Îïåðàöèè
 ÿçûêå C# âìåñòî îïåðàòîðà Not èñïîëüçóåòñÿ
âîñêëèöàòåëüíûé çíàê (!).
Âîò ïðèìåð åãî èñïîëüçîâàíèÿ â êîäå íà C#:
textBox3.Visible =
!(textBox1.Visible);
101
Îïåðàöèÿ Not (Íå) — ýòî ñïåöèàëüíàÿ îïåðàöèÿ,
îáðàáàòûâàþùàÿ òîëüêî îäèí îïåðàíä. Êðîìå òîãî,
îïåðàíä äîëæåí áûòü áóëåâûì çíà÷åíèåì (True (Èñòèíà) èëè False (Ëîæü)). Îïåðàòîð Not èçìåíÿåò
çíà÷åíèå False íà True èëè çíà÷åíèå True íà False.
Ïîñìîòðèòå íà ñëåäóþùèå ïðèìåðû.
Not (True)
Not (Not (True))
Âðÿä ëè âàì ìîæåò ïîíàäîáèòüñÿ ïîñëåäíåå âûðàæåíèå, íî îíî òîæå ïðàâèëüíîå!
Ñëåäóþùèé ïðèìåð äåìîíñòðèðóåò, êàê èñïîëüçîâàòü îïåðàöèþ 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 è Frontpage.
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
False
False
True
False
True
True
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.
Âåòâëåíèå: íåïîëíàÿ ôîðìà
Ñ ïîìîùüþ îïåðàöèé
ñðàâíåíèÿ ñòðîêè ìîæíî
ñðàâíèâàòü òàê æå, êàê è
÷èñëà.
"ABC" < "DEF"
"ABC" ìåíüøå "DEF"? Äà,
True.
"DEF" >= "ABC"
"DEF" áîëüøå èëè ðàâíî
"ABC"? Äà, True.
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.
Çíà÷èò, ðåçóëüòàò îïåðàöèè «3 íå íå ðàâíî 3» —
False, ò. å. 3 ðàâíî 3.
Âî âñåõ ýòèõ ïðèìåðàõ ìû ñðàâíèâàëè ÷èñëà. Íî
ñ ïîìîùüþ îïåðàöèé ñðàâíåíèÿ ìîæíî ñðàâíèâàòü è
òåêñòîâûå ñòðîêè, è ïðîñòî áóëåâû çíà÷åíèÿ, íàïðèìåð, òàê:
"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
Âñå îïåðàòîðû óñëîâíîãî
êîäà ìåæäó If...Then...
End If ëó÷øå âûäåëÿòü îòñòóïîì. Ýòî ñäåëàåò êîä
áîëåå ïîíÿòíûì. Äàæå
åñëè âåñü êîä, âûïîëíÿþùèéñÿ ïî óñëîâèþ, — ýòî
òîëüêî îäèí îïåðàòîð, åãî
ñòîèò âûäåëèòü îòñòóïîì.
Ïî óìîë÷àíèþ Visual Studio
.NET àâòîìàòè÷åñêè âûäåëÿåò òàêîé êîä îòñòóïàìè.
If CheckBox1.Checked =
True Then
MessageBox.Show
("Danger!")
End If
Ãëàâà 8
If CheckBox1.Checked = True Then
TextBox1.Text="I am checked."
End If
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Óñòàíîâèòå ôëàæîê è íàæìèòå âòîðóþ êíîïêó. Óñëîâèå âûïîëíÿåòñÿ — True (âû óñòàíîâèëè ôëàæîê), è òåêñò â
òåêñòîâîì ïîëå èçìåíèòñÿ íà «I am checked.»
Åùå ðàç çàïóñòèòå ïðîåêò. Íà ýòîò ðàç íàæìèòå
âòîðóþ êíîïêó, íå óñòàíàâëèâàÿ ôëàæîê. ×òî ïðîèçîéäåò? Íè÷åãî. Íà ýòîò ðàç óñëîâèå íå âûïîëíÿåòñÿ — False (ôëàæîê íå óñòàíîâëåí), è òåêñò íå
èçìåíèòñÿ. Âàøà ïðîãðàììà ïðèíÿëà ðåøåíèå (èçìåíÿòü ëè òåêñò) èñõîäÿ èç óñëîâèÿ (óñòàíîâëåí ëè
ôëàæîê).
Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ
8.2. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic .NET
Microsoft-CD
ñîçäàòü ïðîåêò «If_Then», êîòîðûé îïèñàí â
ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå 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
Âåòâëåíèå: íåïîëíàÿ ôîðìà
Ïîìíèòå, îïåðàöèþ AND
èñïîëüçóþò, åñëè ïðîâåðÿþò, ðàâíû ëè îáà îïåðàíäà True. Åñëè íóæíî
ïðîâåðèòü, ðàâåí ëè õîòÿ
áû îäèí îïåðàíä True,
èñïîëüçóþò îïåðàöèþ OR.
125
If RadioButton3.Checked = True And CheckBox1._
Checked = True Then
myColor = System.Drawing.Color.Blue
End If
Form.ActiveForm.BackColor = myColor
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó
ñ íàäïèñüþ Óñòàíîâèòü öâåò. Íè÷åãî íå ïðîèçîéäåò! Öâåò íå èçìåíèòñÿ. À òåïåðü óñòàíîâèòå ôëàæîê ñ íàäïèñüþ Öâåò ñóùåñòâóåò è åùå ðàç
íàæìèòå êíîïêó ñ íàäïèñüþ Óñòàíîâèòü öâåò.
Ôîðìà è ýëåìåíòû óïðàâëåíèÿ ñòàíóò êðàñíûìè.
Âîò ÷òî ïðîèñõîäèò â ïðîãðàììå. Â óñëîâèå â áëîêå
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
Microsoft-CD
ñîçäàòü ïðîåêò «Âûáîð öâåòà-2», êîòîðûé
îïèñàí â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Âûáîð_öâåòà_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 Results ñëîæèòå ÷èñëà èç 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
q
q
q
Ñáðàñûâàòü â 0 çíà÷åíèÿ ïåðåìåííûõñ÷åò÷èêîâ ïîïàäàíèé è ïîïûòîê.
Óñòàíàâëèâàòü äëÿ ñâîéñòâà Enable ýëåìåíòà óïðàâëåíèÿ Timer çíà÷åíèå True.
Åñëè âûáðàíà ïîçèöèÿ ïåðåêëþ÷àòåëÿ
RadioButton1, óñòàíàâëèâàòü äëÿ ñâîéñòâà Interval ýëåìåíòà Timer çíà÷åíèå
900, à âûñîòû è øèðèíû ðèñóíêà — 40.
Åñëè âûáðàíà ïîçèöèÿ ïåðåêëþ÷àòåëÿ
RadioButton2, óñòàíàâëèâàòü äëÿ ñâîéñòâà Interval ýëåìåíòà Timer çíà÷åíèå
850, à âûñîòû è øèðèíû ðèñóíêà — 35.
Âåòâëåíèå: íåïîëíàÿ ôîðìà
129
Åñëè âûáðàíà ïîçèöèÿ ïåðåêëþ÷àòåëÿ
RadioButton3, óñòàíàâëèâàòü äëÿ ñâîéñòâà Interval ýëåìåíòà Timer çíà÷åíèå
800, à âûñîòû è øèðèíû ðèñóíêà — 30.
8.  îáðàáîò÷èêå íàæàòèÿ êíîïêè ñ íàäïèñüþ
Stop, óñòàíîâèòå äëÿ ñâîéñòâà Enable ýëåìåíòà Timer çíà÷åíèå False.
q
9.  îáðàáîò÷èêå íàæàòèÿ êíîïêè ñ íàäïèñüþ
Exit çàâåðøèòå ïðîãðàììó êîìàíäîé End.
10.  îáðàáîò÷èê ùåë÷êà ïî ýëåìåíòó PictureBox äîáàâüòå êîä, êîòîðûé äîáàâèò åäèíèöó
ê çíà÷åíèþ ñ÷åò÷èêà 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, è Checkbox2 äîëæíû áûòü óñòàíîâëåíû.
Îáðàòèòå âíèìàíèå íà òî, ÷òî 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
Microsoft-CD
ñîçäàòü ïðîåêò «IfThenOtherwise», îïèñàííûé
â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå IfThenOtherwise.
exe.
Âåòâëåíèå: ïîëíàÿ ôîðìà
135
9.3. Îïåðàòîð If Then Else
Èñïîëüçîâàíèå äâóõ îïåðàòîðîâ If…Then ñ ïðîòèâîïîëîæíûìè óñëîâèÿìè
îòíèìàåò âðåìÿ è ìîæåò
ïðèâåñòè
ê
îøèáêàì.
Âìåñòî ýòîãî èñïîëüçóéòå
íîâûé âèä îïåðàòîðà,
If…Then…Else, ÷òîáû óïðîñòèòü âàø êîä.
 ÿçûêå Visual Basic .NET åñòü àëüòåðíàòèâíàÿ
âîçìîæíîñòü, èçáàâëÿþùàÿ îò íåîáõîäèìîñòè ïîâòîðÿòü ñòðîêè êîäà è óïðîùàþùàÿ åãî ïîíèìàíèå.
Ýòà àëüòåðíàòèâà — îïåðàòîð 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
Îáðàòèòå âíèìàíèå íà òî,
÷òî
îïåðàòîðû
ïîñëå
Then è Else çàïèñàíû ñ
îòñòóïîì. Visual Studio
.NET äåëàåò ýòî àâòîìàòè÷åñêè — îôîðìëåííûé
òàêèì îáðàçîì êîä ëåã÷å
÷èòàòü, è îí âûãëÿäèò àêêóðàòíåå.
Ãëàâà 9
êíîïêó ñ íàäïèñüþ If-Then-Else. Ôîðìà ñòàíåò
êðàñíîé. Ïðîãðàììà äåëàåò ñ ïîìîùüþ îäíîãî îïåðàòîðà òî æå ñàìîå, ÷òî ðàíüøå äåëàëà ñ ïîìîùüþ
äâóõ! Êîä ïðîâåðÿåò, âûïîëíÿåòñÿ ëè óñëîâèå
CheckBox1.Checked = True. Åñëè äà, òî âûïîëíÿåòñÿ ïåðâûé îïåðàòîð è ôîðìà ñòàíîâèòñÿ êðàñíîé.
 ïðîòèâíîì ñëó÷àå âûïîëíÿåòñÿ âòîðîé îïåðàòîð
è ôîðìà ñòàíîâèòñÿ ñèíåé.
Äàâàéòå ðàçáåðåì åùå îäèí ïðèìåð ñ 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
Microsoft-CD
ñîçäàòü ïðîåêò «If-Then-Else», îïèñàííûé â
ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå 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
Microsoft-CD
ñîçäàòü ïðîåêò «Step-In-If». Ïðîâåñòè ïîøàãîâîå âûïîëíåíèå ïðîåêòà òàê, êàê ýòî îïèñàíî â
ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå 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
MessageBox.Show("I
}
else
{
MessageBox.Show("I
MessageBox.Show("I
}
am 15.");
am still 15.");
am 16.");
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 +
TotalCount = TotalCount +
TotalCount = TotalCount +
TotalCount = TotalCount +
‘è òàê äàëåå
1
1
1
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
îáðàáîò÷èê åå íàæàòèÿ. Äîáàâüòå â îáðàáîò÷èê ñëåäóþùèé êîä:
Ëó÷øå âûäåëÿòü êîä ìåæäó îïåðàòîðàìè For è
Next ñ ïîìîùüþ îòñòóïà.
Äåëàÿ îòñòóïû â êîäå, âû
áûñòðåå ðàçáåðåòåñü, êàêèå îïåðàòîðû áóäóò ïîâòîðíî âûïîëíÿòüñÿ â
öèêëå. Êîä ñ îòñòóïàìè
ïðîùå ÷èòàòü è îòëàæèâàòü.
Dim LoopCounter As Integer
For LoopCounter = 1 To 2
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
Ïîäâåäèòå êóðñîð ìûøè ê ïåðåìåííîé LoopCounter â ñòðîêå 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)
Öèêëû ñî ñ÷åò÷èêîì
Êîãäà öèêë For…Next çàêàí÷èâàåò
âûïîëíÿòüñÿ,
âûïîëíÿåòñÿ ïåðâàÿ ñòðîêà êîäà ïîñëå îïåðàòîðà
Next. Â íàøåì ïðèìåðå
ýòî ñòðîêà MessageBox.
Show(Total).
157
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó
ñ íàäïèñüþ Ñëîæèòü. Ïîÿâèòñÿ îêíî ñîîáùåíèÿ ñ
ñóììîé, ïîëó÷åííîé â ðåçóëüòàòå ñëîæåíèÿ âñåõ ÷èñåë îò 1 äî 1000. Âû íàïèñàëè êîä, è ïðîãðàììà âû÷èñëèëà îòâåò áûñòðåå, ÷åì âû óñïåëè âûòàùèòü
êàëüêóëÿòîð!
Êàê ýòîò êîä ðàáîòàåò? Ñíà÷àëà ìû îáúÿâèëè
äâå öåëî÷èñëåííûõ ïåðåìåííûõ: Counter è 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
Microsoft-CD
.NET ñîçäàòü ïðîåêò «Ñëîæåíèå», îïèñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ
â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå Ñëîæåíèå.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
Microsoft-CD
.NET ñîçäàòü ïðîåêò «Öèêë â öèêëå», ïîäñ÷èòûâàþùèé êîëè÷åñòâî ïîâòîðåíèé òåëà
âëîæåííîãî öèêëà. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Öèêë_â_öèêëå.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
Microsoft-CD
.NET ñîçäàòü ïðîåêò «Âûõîä èç öèêëîâ»,
îïèñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Âûõîä_èç_öèêëîâ.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
Microsoft-CD
.NET ñîçäàòü ïðîåêò «Do-While-Loop», îïèñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
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. Çíà÷åíèå ïåðåìåííîé UntilValue èñïîëüçóåòñÿ â óñëîâèè, ÷òîáû îïðåäåëèòü,
äîëæåí ëè öèêë âûïîëíÿòüñÿ ñíîâà. Ïðè êàæäîì
âûïîëíåíèè öèêëà çíà÷åíèå ïåðåìåííîé UntilValue
óâåëè÷èâàåòñÿ íà 1.  îïåðàòîðå Do Until ñîäåðæèòñÿ îïåðàòîð ñðàâíåíèÿ, ïðîâåðÿþùèé, áîëüøå
ëè çíà÷åíèå UntilValue, ÷åì 1. Ïðè ïåðâîé ïðîâåðêå
çíà÷åíèå UntilValue ðàâíî 0. Óñëîâèå ëîæíî, è âûïîëíÿåòñÿ êîä âíóòðè öèêëà. Âûâîäèòñÿ îêíî ñîîáùåíèÿ, è çíà÷åíèå UntilValue óâåëè÷èâàåòñÿ íà 1.
Ïðè âòîðîé ïðîâåðêå çíà÷åíèå UntilValue ðàâíî 1.
Óñëîâèå ïî-ïðåæíåìó ëîæíî, è êîä â öèêëå âûïîëíÿåòñÿ åùå ðàç. Íî ïðè òðåòüåé ïðîâåðêå çíà÷åíèå
UntilValue ðàâíî 2. Óñëîâèå ëîæíî (2 > 1), è âûïîëíåíèå öèêëà çàêàí÷èâàåòñÿ.
178
Ãëàâà 11
Çàäàíèÿ äëÿ ñàìîñòîÿòåëüíîãî âûïîëíåíèÿ
11.3. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
Microsoft-CD
.NET ñîçäàòü ïðîåêò «Do-Until-Loop», îïèñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
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. Êîä âûáåðåò ïîçèöèþ ïåðåêëþ÷àòåëÿ RadioButton3, è â îêíå ñîîáùåíèÿ áóäåò âûâåäåíî çíà÷åíèå ïåðåìåííîé Index. Åñëè ó âàñ î÷åíü õîðîøàÿ
ðåàêöèÿ èëè î÷åíü ñòàðûé êîìïüþòåð, âû ìîæåòå
çàìåòèòü, êàê íà ìãíîâåíèå áûëà âûáðàíà ïîçèöèÿ
ïåðåêëþ÷àòåëÿ RadioButton2.
Âîò ÷òî ïðîèñõîäèò. Ìû îáúÿâëÿåì ïåðåìåííóþ
Index, ÷òîáû îòñëåæèâàòü, ñêîëüêî ðàç âûïîëíèòñÿ
êîä â öèêëå. Îäíàêî ýòà ïåðåìåííàÿ íå èñïîëüçóåòñÿ
â áóëåâîì âûðàæåíèè, óïðàâëÿþùåì öèêëîì Do
While…Loop. Âìåñòî ýòîãî Index èñïîëüçóåòñÿ äëÿ
ïåðåáîðà ïåðåêëþ÷àòåëåé. Áóëåâî âûðàæåíèå â öèêëå Do While…Loop ïðîâåðÿåò, âûáðàí ëè ïåðåêëþ÷àòåëü RadioButton3. Êàê òîëüêî óñëîâèå RadioButton3.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 òåêñòîâîãî ïîëÿ TextBox1 ïðèñâîèòü çíà÷åíèå Òåêñò? Ñìîæåòå ëè âû äîáàâèòü â êîä åùå îäèí îïåðàòîð 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
Microsoft-CD
.NET ñîçäàòü ïðîåêò «Öèêëû ñ ïîñòóñëîâèåì», îïèñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ
àðõèâå Öèêëû_ñ_ïîñòóñëîâèåì.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
Microsoft-CD
.NET ñîçäàòü ïðîåêò «Exit-Do», îïèñàííûé â
ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå 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), êîòîðàÿ îáåñïå÷èâàåò
êîìïèëÿöèþ ïðîãðàìì â äâà ýòàïà. Ñíà÷àëà ïðîãðàììà, íàïèñàííàÿ íà îáúåêòíî-îðèåíòèðîâàííîì ÿçûêå, êîìïèëèðóåòñÿ â ïðîìåæóòî÷íûé êîä íà ÿçûêå Microsoft 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 MyMessage.» Âî âòîðîì áóäåò òåêñò «Ýòî ñîîáùåíèå âûâåäåíî
ïîäïðîãðàììîé 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 òðè ðàçà.
Ïðè êàæäîì âûçîâå îí ïåðåäàåò åé â êà÷åñòâå àðãóìåíòà íîâóþ ñòðîêó. Ïðè ïåðâîì âûçîâå ýòî ñòðîêà
Ïîäïðîãðàììû è ôóíêöèè
Ïåðåìåííûå, îáúÿâëåííûå â ïîäïðîãðàììå èëè
ôóíêöèè ñ ïîìîùüþ îïåðàòîðà Dim, íàçûâàþòñÿ
ëîêàëüíûìè ïåðåìåííûìè. Êîãäà ïåðåìåííàÿ
îáúÿâëÿåòñÿ â ïîäïðîãðàììå èëè ôóíêöèè, îíà
îáëàäàåò òåìè æå ñâîéñòâàìè, ÷òî è îáúÿâëåííàÿ
âíóòðè îáðàáîò÷èêà, ïîòîìó ÷òî îáðàáîò÷èê òîæå
ÿâëÿåòñÿ ïîäïðîãðàììîé.
Ê ýòèì ïåðåìåííûì ìîæíî îáðàùàòüñÿ òîëüêî âî
âðåìÿ âûïîëíåíèÿ ïîäïðîãðàììû èëè ôóíêöèè.
Ïî çàâåðøåíèè èõ âûïîëíåíèÿ ïåðåìåííûå òåðÿþò õðàíÿùèåñÿ â íèõ
çíà÷åíèÿ, è ê íèì íåëüçÿ
áîëüøå îáðàùàòüñÿ.
197
«Whatever message». Ïðè âòîðîì âûçîâå ýòî ñòðîêà
«Some other message.» Ïðè òðåòüåì — «A different
message». Êîãäà âûïîëíÿåòñÿ êîä ïîäïðîãðàììû, àðãóìåíò ïåðåäàåòñÿ ýòîé ïîäïðîãðàììå è èñïîëüçóåòñÿ â îïåðàòîðå MessageBox.Show.
Äàâàéòå ðàçáåðåì åùå îäèí ïðèìåð. Íà ýòîò ðàç
ìû íàïèøåì ïîäïðîãðàììó, êîòîðàÿ ïðèíèìàåò â
êà÷åñòâå àðãóìåíòîâ äâà öåëûõ ÷èñëà, ñêëàäûâàåò
èõ è âûâîäèò ðåçóëüòàò ñëîæåíèÿ â îêíå ñîîáùåíèÿ.
Äîáàâüòå íîâóþ ïîäïðîãðàììó 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
Microsoft-CD
.NET ñîçäàòü ïðîåêò «Ïîäïðîãðàììà» òàê,
êàê ýòî îïèñàíî â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ
àðõèâå Ïîäïðîãðàììà.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. Äîáàâüòå íà ôîðìó âòîðóþ
Ïîäïðîãðàììû è ôóíêöèè
Ïåðåìåííûå, îáúÿâëåííûå â ôóíêöèè ñ ïîìîùüþ
îïåðàòîðà Dim, áóäóò ëîêàëüíûìè. Îíè äîñòóïíû
òîëüêî â ôóíêöèè, ïîêà
âûïîëíÿåòñÿ åå êîä. Êîãäà ôóíêöèÿ çàêàí÷èâàåò
âûïîëíÿòüñÿ, ëîêàëüíûå
ïåðåìåííûå ñòàíîâÿòñÿ
íåäîñòóïíûìè.
201
êíîïêó. Èçìåíèòå çíà÷åíèå ñâîéñòâà Text ýòîé
êíîïêè íà Óìíîæèòü íåñêîëüêî ðàç.  îáðàáîò÷èê
íàæàòèÿ êíîïêè ñ íàäïèñüþ Óìíîæèòü íåñêîëüêî
ðàç äîáàâüòå òàêîé êîä:
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
Microsoft-CD
.NET ñîçäàòü ïðîåêò «Ôóíêöèÿ», îïèñàííûé
â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå Ôóíêöèÿ.exe.
12.4. Â ñèñòåìå ïðîãðàììèðîâàíèÿ Visual Basic
.NET ñîçäàòü ïðîåêò «Åäèíèöû èçìåðåíèÿ», ïîçâîëÿþùèé îñóùåñòâëÿòü ïåðåâîä
èç àìåðèêàíñêèõ åäèíèö (äëèíà, îáúåì è
äåíåæíàÿ åäèíèöà) â êàíàäñêèå è îáðàòíî.
Çàãîòîâêà ïðîåêòà õðàíèòñÿ â ñàìîðàñïàêî-
202
Ãëàâà 12
âûâàþùåìñÿ àðõèâå Åäèíèöû_èçìåðåíèÿ.
exe. Ôîðìà äîëæíà âûãëÿäåòü ïðèìåðíî òàê:
Ïðè íàæàòèè êíîïêè ñ íàäïèñüþ Convert to Canadian âûïîëíÿéòå ïðåîáðàçîâàíèå çíà÷åíèé â ëåâûõ òåêñòîâûõ ïîëÿõ â êàíàäñêèå åäèíèöû. Ïðè
íàæàòèè êíîïêè ñ íàäïèñüþ 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
TempText = TempText & vbNewLine
MyText.Substring(0, 4)
TempText = TempText & vbNewLine
MyText.Substring(1, 2)
TempText = TempText & vbNewLine
TextBox2.Text = TempText
&_
&_
& MyText.Trim
&_
&_
& MyText.Length
Ïîñòðîéòå è çàïóñòèòå ïðîåêò. Íàæìèòå êíîïêó.
 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.
Ïîòîì ìû îáúÿâëÿåì ïåðåìåííóþ myRandomInteger òèïà 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
Microsoft-CD
.NET ñîçäàòü ïðîåêò «Âñòðîåííûå ôóíêöèè»,
îïèñàííûé â ïàðàãðàôå. Ãîòîâûé ïðîåêò ñîäåðæèòñÿ â ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå
Âñòðîåííûå_ôóíêöèè.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.
1.2.
1.3.
1.4.
1.5.
Ïðîãðàììû â ïîâñåäíåâíîé æèçíè
×åì çàíèìàþòñÿ ïðîãðàììèñòû
×òî òàêîå ïðîãðàììà
Âîçìîæíîñòè ÿçûêîâ ïðîãðàììèðîâàíèÿ
Ñèíòàêñèñ ÿçûêîâ ïðîãðàììèðîâàíèÿ
6
7
9
10
11
Òåñò ïî òåìå «Ïðîãðàììû â ïîâñåäíåâíîé æèçíè»
15
Ãëàâà 2. Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET
16
2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
2.8.
2.9.
17
18
20
22
24
26
28
29
31
Visual Studio .NET è IDE
Çàïóñê è íàñòðîéêà Visual Studio .NET
Ñîçäàíèå ïåðâîãî ïðîåêòà
Êîíñòðóèðîâàíèå ãðàôè÷åñêîãî èíòåðôåéñà ïðîåêòà
Ñîçäàíèå ïðîãðàììíîãî êîäà ïðîåêòà
Ïîñòðîåíèå ðåøåíèÿ
Çàïóñê ïðîåêòà
Ñîõðàíåíèå ïðîåêòà
Âûâîä ñîîáùåíèé íà ôîðìó
Òåñò ïî òåìå «Ñèñòåìà ïðîãðàììèðîâàíèÿ Visual Basic .NET»
35
Ãëàâà 3. Àëãîðèòìû è ïðîãðàììû
36
3.1. Îñíîâíûå ýëåìåíòû êîäà
3.2. Àëãîðèòì â ôîðìå ïñåâäîêîäà
3.3. Êîììåíòàðèè â êîäå
37
38
41
Òåñò ïî òåìå «Àëãîðèòìû è ïðîãðàììû»
44
Ãëàâà 4. Ôîðìû è ýëåìåíòû óïðàâëåíèÿ
45
4.1.
4.2.
4.3.
4.4.
46
48
52
56
Ôîðìà — îñíîâà ãðàôè÷åñêîãî èíòåðôåéñà
Ñâîéñòâà ôîðìû
Ýëåìåíòû óïðàâëåíèÿ è èõ ñâîéñòâà
Ãåíåðàöèÿ ñîáûòèé
Îãëàâëåíèå
215
Òåñò ïî òåìå «Ôîðìû è ýëåìåíòû óïðàâëåíèÿ»
61
Ãëàâà 5. Ñâîéñòâà è ìåòîäû
62
5.1. Ñ ÷åãî íà÷èíàåòñÿ êîä
5.2. ×òåíèå çíà÷åíèé ñâîéñòâ â êîäå
5.3. Ïðèñâàèâàíèå çíà÷åíèé ñâîéñòâàì â êîäå
5.4. IntelliSense è òî÷å÷íàÿ íîòàöèÿ
5.5. Ìåòîäû
63
63
66
69
73
Òåñò ïî òåìå «Ñâîéñòâà è ìåòîäû»
77
Ãëàâà 6. Ïðèñâàèâàíèå è ïåðåìåííûå
78
6.1.
6.2.
6.3.
6.4.
79
80
84
87
Ïðèñâàèâàíèå
Ïåðåìåííûå
Îáúÿâëåíèå ïåðåìåííûõ
Ïåðåìåííûå â ïðîãðàììàõ
Òåñò ïî òåìå «Ïðèñâàèâàíèå è ïåðåìåííûå»
92
Ãëàâà 7. Îïåðàöèè
93
7.1.
7.2.
7.3.
7.4.
Àðèôìåòè÷åñêèå îïåðàöèè
Ñòðîêîâûå îïåðàöèè
Ëîãè÷åñêèå îïåðàöèè
Îòëàäêà êîäà
94
98
100
101
Òåñò ïî òåìå «Îïåðàöèè»
110
Ãëàâà 8. Âåòâëåíèå: íåïîëíàÿ ôîðìà
111
8.1.
8.2.
8.3.
8.4.
8.5.
Áóëåâà ëîãèêà
Îïåðàöèè ñðàâíåíèÿ
Îïåðàòîð If...Then
Ìíîæåñòâåííûå óñëîâèÿ
Áóëåâû îïåðàöèè â êîäå
112
115
117
120
124
Òåñò ïî òåìå «Âåòâëåíèå: íåïîëíàÿ ôîðìà»
130
Ãëàâà 9. Âåòâëåíèå: ïîëíàÿ ôîðìà
131
9.1. Âëîæåííûå îïåðàòîðû If Then
9.2. Ïðîòèâîïîëîæíûå óñëîâèÿ
132
133
216
9.3.
9.4.
9.5.
9.6.
Îãëàâëåíèå
Îïåðàòîð If Then Else
Ïîøàãîâîå âûïîëíåíèå If
Îïåðàòîðû If â C# è J#
Áóëåâû îïåðàöèè è îïåðàöèè ñðàâíåíèÿ â C# è J#
135
138
141
144
Òåñò ïî òåìå «Âåòâëåíèå: ïîëíàÿ ôîðìà»
148
Ãëàâà 10. Öèêëû ñî ñ÷åò÷èêîì
149
10.1.
10.2.
10.3.
10.4.
10.5.
10.6.
Öèêëû For...Next
Ïîøàãîâîå âûïîëíåíèå öèêëà For Next
Ïðîåêòû ñ èñïîëüçîâàíèåì For Next
Âëîæåííûå öèêëû
Âûõîä èç öèêëîâ
Öèêëû â C# è J#
150
153
156
161
162
166
Òåñò ïî òåìå «Öèêëû ñî ñ÷åò÷èêîì»
168
Ãëàâà 11. Öèêëû ñ óñëîâèåì
169
11.1.
11.2.
11.3.
11.4.
11.5.
11.6.
11.7.
Öèêëû Do While Loop
Ïîøàãîâîå âûïîëíåíèå öèêëà Do While Loop
Öèêëû Do Until Loop
Ïðîåêòû ñ èñïîëüçîâàíèåì Do Loop
Öèêëû ñ ïîñòóñëîâèåì
Öèêëû â J# è C#
Âûõîä èç öèêëîâ
170
172
176
178
181
182
184
Òåñò ïî òåìå «Öèêëû ñ óñëîâèåì»
189
Ãëàâà 12. Ïîäïðîãðàììû è ôóíêöèè
190
12.1.
12.2.
12.3.
12.4.
12.5.
12.6.
×òî òàêîå ïîäïðîãðàììû?
Ñîçäàíèå è âûçîâ ïîäïðîãðàìì
Ïîäïðîãðàììû ñ àðãóìåíòàìè
Ñîçäàíèå è âûçîâ ñîáñòâåííûõ ôóíêöèé
Âñòðîåííûå ôóíêöèè
Ôóíêöèè â J# è C#
191
192
195
198
202
211
Òåñò ïî òåìå «Ïîäïðîãðàììû è ôóíêöèè»
213
Скачать