Äîðîãèå ó÷åíèêè! Ýòî ó÷åáíîå ïîñîáèå ðàçðàáîòàíî âñåìèðíî èçâåñòíîé êîðïîðàöèåé Ìàéêðîñîôò, ìèðîâûì ëèäåðîì â ïðîèçâîäñòâå ïðîãðàììíîãî îáåñïå÷åíèÿ, â ðàìêàõ èíèöèàòèâû «Ïàðòíåðñòâî â îáðàçîâàíèè». Çàäà÷à èíèöèàòèâû ïðåäîñòàâèòü øêîëàì âîçìîæíîñòü ïîâûøåíèÿ êà÷åñòâà îáó÷åíèÿ çà ñ÷åò èñïîëüçîâàíèÿ èíôîðìàöèîííûõ òåõíîëîãèé â ó÷åáíîì ïðîöåññå. Èíôîðìàöèîííûå òåõíîëîãèè îáëàäàþò äîñòàòî÷íûì ïîòåíöèàëîì äëÿ òîãî, ÷òîáû äàòü âàì âîçìîæíîñòü ïðèîáðåñòè íàâûêè, êîòîðûå áóäóò íåîáõîäèìû â áóäóùåé ðàáîòå, íàâûêè ýôôåêòèâíîé îáðàáîòêè èíôîðìàöèè è óïðàâëåíèÿ åþ, íàâûêè îáùåíèÿ è ñîâìåñòíîé (ãðóïïîâîé) ðàáîòû. Äëÿ ðàçâèòèÿ ýòèõ è äðóãèõ íàâûêîâ, ïîëó÷èâøèõ íàçâàíèå «íàâûêè XXI âåêà», è ñëóæàò ðàçðàáîòàííûå Ìàéêðîñîôò ó÷åáíûå ïîñîáèÿ. Ó÷àñòèå Ìàéêðîñîôò â ñîçäàíèè ýòèõ ó÷åáíèêîâ îáåñïå÷èâàåò âûñîêîå êà÷åñòâî ó÷åáíûõ ïîñîáèé è ïåðåäà÷ó ýêñïåðòíîãî çíàíèÿ, íàêîïëåííîãî âíóòðè êîðïîðàöèè, íåïîñðåäñòâåííî ó÷èòåëþ è ó÷åíèêó. Íåêîòîðûå ó÷åáíûå êóðñû Ìàéêðîñîôò ñåðèè «Ïàðòíåðñòâî â îáðàçîâàíèè» ïðåäíàçíà÷åíû äëÿ ïîäãîòîâêè ãðàìîòíûõ ïîëüçîâàòåëåé ïåðñîíàëüíûõ êîìïüþòåðîâ, äðóãèå êóðñû ïðåäíàçíà÷åíû äëÿ ðåáÿò, áîëåå ãëóáîêî èíòåðåñóþùèõñÿ èíôîðìàöèîííûìè òåõíîëîãèÿìè è æåëàþùèõ ñòàòü ñïåöèàëèñòàìè â ýòîé îáëàñòè. Ó÷åáíûå êóðñû Ìàéêðîñîôò ñåðèè «Ïàðòíåðñòâî â îáðàçîâàíèè» ïåðåâåäåíû íà ÿçûêè ìíîãèõ ñòðàí ìèðà è óñïåøíî èñïîëüçóþòñÿ âî ìíîãèõ ñòðàíàõ. Âû äåðæèòå â ðóêàõ ó÷åáíîå ïîñîáèå «Îñíîâû ïðîãðàììèðîâàíèÿ íà ïðèìåðå Visual Basic .NET», êîòîðîå ïîìîæåò âàì ïîãðóçèòüñÿ â óâëåêàòåëüíûé ìèð îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ è ïî÷óâñòâîâàòü ñåáÿ òâîðöîì, ñïîñîáíûì ñîçäàâàòü èíòåðåñíûå ïðîãðàììû. Ýòî ó÷åáíîå ïîñîáèå ïîçâîëèò âàì ëó÷øå ïîíÿòü ðàáîòó ïðîãðàììèñòà. Ñðåäè äðóãèõ ó÷åáíèêîâ, ðàçðàáîòàííûõ êîìïàíèåé Ìàéêðîñîôò, âû íàéäåòå ñëåäóþùèå: q Ó÷åáíûå ïðîåêòû ñ èñïîëüçîâàíèåì Microsoft Office. Êóðñ ïðåäïîëàãàåò âûïîëíåíèå ðàçëè÷íûõ óâëåêàòåëüíûõ ïðîåêòîâ, çíàêîìÿùèõ ó÷åíèêîâ ñ íåêîòîðûìè, ðàíåå íåèçâåñòíûìè îáëàñòÿìè äåÿòåëüíîñòè (íàïðèìåð, ñ òàêèìè, êàê îñíîâû ìàðêåòèíãà, ãðàìîòíîå ñîñòàâëåíèå ðåçþìå è ïîèñê ðàáîòû, îïòèìàëüíûå ïîäõîäû ê ñîâåðøåíèþ ïîêóïîê è äð.). q Îñíîâû êîìïüþòåðíûõ ñåòåé. Êóðñ çíàêîìèò ñ îñíîâàìè ãðàìîòíîãî ïîñòðîåíèÿ è ïîääåðæêè êîìïüþòåðíûõ ñåòåé è Èíòåðíåòà, ïîìîãàÿ ó÷àùèìñÿ ïðèîáðåñòè çíàíèÿ è íàâûêè, âîñòðåáîâàííûå â ñåãîäíÿøíåì âûñîêîòåõíîëîãè÷íîì îáùåñòâå. q Ïåðñîíàëüíûé êîìïüþòåð: íàñòðîéêà è òåõíè÷åñêàÿ ïîääåðæêà. Êóðñ äàåò íåîáõîäèìóþ òåîðåòè÷åñêóþ è ïðàêòè÷åñêóþ ïîäãîòîâêó äëÿ ðàáîòû â êà÷åñòâå ñïåöèàëèñòîâ ñëóæáû òåõíè÷åñêîé ïîääåðæêè. Ïðîãðàììà êóðñà âêëþ÷àåò îáó÷åíèå ðåìîíòó è íàñòðîéêå êîìïüþòåðîâ, áàçàì äàííûõ è îñíîâàì ðàáîòû ñëóæá òåõíè÷åñêîé ïîìîùè. Ìû æåëàåì âàì óñïåõîâ íà ïóòè îáðåòåíèÿ íîâûõ çíàíèé è áóäåì ðàäû, åñëè âàì ïîíðàâèòñÿ íàø êóðñ! Î ñâîèõ âïå÷àòëåíèÿõ îá ýòîì ó÷åáíîì êóðñå âû ìîæåòå ðàññêàçàòü íàì, íàïèñàâ ïî ýëåêòðîííîé ïî÷òå íà àäðåñ: mailto:
[email protected] Ñ ñàìûìè íàèëó÷øèìè ïîæåëàíèÿìè, ñîòðóäíèêè ðîññèéñêîãî Ïðåäñòàâèòåëüñòâà Ìàéêðîñîôò 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
(ðàñøèôðîâûâàåòñÿ êàê Beginners 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 (Beginners 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, âûâåäèòå â òåêñòîâîì ïîëå ñîîáùåíèå, ÷òî ó÷àùèéñÿ ïðåêðàñíûé êàíäèäàò äëÿ ïðîõîæäåíèÿ êóðñà ïðîãðàììèðîâàíèÿ. Åñëè ðåçóëüòàò â ïðåäåëàõ 2039, íóæíî ñîîáùèòü, ÷òî óñïåøíîñòü îáó÷åíèÿ íå ãàðàíòèðóåòñÿ, íî ìîæíî ïîïðîáîâàòü. Åñëè ðåçóëüòàò ìåíüøå 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, èñïîëüçóåìîé äëÿ èçìåðåíèÿ âåðòèêàëüíîé êîîðäèíàòû. Äëÿ ãåíåðàöèè ñëó÷àéíîãî ÷èñëà â äèàïàçîíå 0200 èñïîëüçóåòñÿ òàêîé êîä: 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 ñèìâîëîâ íîìåðà ýòèõ ñèìâîëîâ 09. Ïîìíèòå, ÷òî â 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