502

Click here to load reader

CodeRulesBook2010 (Светът на програмирането – пътешествие)

Embed Size (px)

Citation preview

Page 1: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 00 – Пътешествие с Visual Studio 2010 Страница 1 от 434

Page 2: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Светът на програмирането!

Здравейте! Аз се казвам Ники, а това е Клиф. Радвам се, че ще се присъедините към нашето ново пътешествие в Света на програмирането! Имаме толкова много нови неща да видим и да направим, че без съмнение ще си прекарате страхотно. Надяваме се с ваша помощ да преодолеем предизвикателствата, които ще се появят по време на пътуването ни! Преди да потеглим ще изчакаме само Комисията по състезанията, за да получим нашия пейджър и контролна карта.

Можете да седнете отпред с мен и Клиф или отзад с Джин и Дърк. Както и да е, съберете си нещата и бъдете добре дошли на борда!

Разгледайте нашата рисунка в магазина за кафе точно преди да се качим в микробуса. За съжаление не можете да видите добре Дърк и Джин, защото Клиф точно тогава показваше малко джафкащо кученце, което искаше да вземе със себе си. Можете ли да си представите, че това ще се случи? Всички бяхме единодушни “Никога!”

За да продължите нататък, натиснете стрелката в долния десен ъгъл на екрана.

Секция 00 – Пътешествие с Visual Studio 2010 Страница 2 от 434

Полезен съветУчениците трябва да имат основни познания за това как да отворят и използват браузъра, как да създават директории и файлове и как да работят с операционната система Windows.

Полезен съветВажно е учениците да осъзнаят още от първия ден, че програмирането в клас не е като игра или разходка в Интернет. Програмирането изисква внимание, логическо и последователно мислене, а за много от учениците то е трудна задача.

Задача 02 от секция 08 изисква създаване на мотивационна програма. Можете да използвате изпълнимия файл в директорията с решението, за да мотивирате учениците.

Page 3: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Управление на микробуса

Не знам дали сте опитвали да карате микробус преди, но този има някои специални, вградени в него особености. Някои от тях могат да ви се сторят необичайни, и въпреки това няма да ви отнеме много време за да се научите да го управлявате. В долната част на екрана ще видите таблото. То притежава множество бутони и уреди, които ще използвате за да достигнете до следващата дестинация. В горната част на екрана има огледало, в което можете да видите кой шофира. От време на време на сенника, закачена с кламер може да се появи по-специална информация.

Натиснете бутона с дясната стрелка,за да се придвижите напред.

Натиснете бутона с лявата стрелка, за да се придвижите назад. Използвайте този бутон, за да преговорите или откриете пропусната

информация по време на пътуването.

Одометърът ви показва номера на текущата страница. Пробвайте да натиснете няколко пъти лявата или дясната стрелка, за да видите как променя индикатора на одометъра.

Индикаторът на горивото ви показва близостта до следващата дестинация. Използвайте го, за да определите колко път сте изминали и колко път ви остава.

В най-левия край на таблото ще видите бутон със страница. Използвайте го, за да отпечатате текущата страница.

До него е бутонът с ключ, на който е изписана буквата В. Натиснете този бутон, за да отбележите страница, към която по-късно можете да се върнете.

Също така виждате и бутон с речник. Натиснете го, за да получите азбучен списък на термините, които са използвани по време на пътуването.

Секция 00 – Пътешествие с Visual Studio 2010 Страница 3 от 434

Полезен съветДвижението в курса се извършва посредством иконите в долната част на страницата, а не с бутоните на браузъра.

Page 4: CodeRulesBook2010 (Светът на програмирането – пътешествие)

В средата на таблото е индикатора на компакт-дисковото устройство. Когато мишката премине през някой от бутоните на таблото, този индикатор ще изпише текст с пояснение за неговата функция.

Пробвайте бутоните на таблото, за да се научите добре как да управлявате микробуса по време на пътешествието ни.

Карта на маршрута и дестинации

Клиф, някой от твоите приятели не участваше ли в пътешествието миналата година?

Да, приятелят ми Ринго Кенеди участваше. Той прекара страхотно и научи много. Каза ми, че е видял интересни неща. Участниците в онова пътуване почти са се сблъскали с това дръзко момче. Един ден, когато са закъсали на пътя, той се появил като че ли от нищото и им помогнал. Няма да се изненадам, ако го видим отново.

Виждал ли си картата с маршрута? Там е показано къде трябва да отидем. Хвърли й един поглед, ако желаеш. Има толкова много неща, които ще видим и научим по време на пътуването!

Нашата обиколка ще ни отведе до много прекрасни места. Преди да потеглим за всяко едно от тях ще получим списък с важните неща, на които трябва да обърнем внимание. При достигане на всяка една от дестинациите Комисията по състезанията ще провери знанията ни и ще ни даде една или две задачи за изпълнение. Така ще покажем какво сме научили по пътя!

Ето, можеш да видиш контролната карта. След като приключим със задачите Комисията по състезанията ще я узакони. Контролната карта ми помага също така да проследявам къде сме били и коя е следващата дестинация.

Помнете, че можете да видите картата с маршрута винаги, когато ви е необходимо. Ние не искаме да тръгнем в грешна посока!

Секция 00 – Пътешествие с Visual Studio 2010 Страница 4 от 434

Полезен съвет

В страницата с картата навигацията се реализира само от имената на градовете, а не от числата.

Page 5: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Можете да натиснете бутона с щита, за да видите картата с маршрута и дестинациите. Щракването върху някоя от дестинациите ще ви отведе до началото на пътуването до нея. Натиснете бутона с щита, за да видите картата сега.

Секция 00 – Пътешествие с Visual Studio 2010 Страница 5 от 434

Page 6: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Уредите на Ники

Казах ли ви, че колекционирам уреди? Някои от приятелите ми ме наричат Роботка. Обожавам новия си джобен компютър! С Клиф въведохме в него някои от задачите, които трябва да направим по време на пътуването. Също така обичаме да играем познатата на всички игра “Рали Тест”. Не искате да се отегчите от пътуването, нали!

За рождения ми ден ми подариха преносим компютър. Взех го с нас, за да ви покажа някои презентации и проекти, които направихме с Клиф в училище. Вижте началото на списъка ми с нещата, които ще

взема за пътуването.

Списък на Ники:

--Преносим компютър--Джобен компютър--Дрехи--Колекция от червила

Хей, вижте! Имаме съобщение на пейджъра!

Впечатляващо! Нека да погледнем в

речника и да открием думата “програмист”. Чудесно! Това наистина ще бъде полезно.

Секция 00 – Пътешествие с Visual Studio 2010 Страница 6 от 434

Полезен съвет

Съществуват 36 по-малки проекти наречени “Пробвайте” и 17 по-големи, наречени “Можете ли?”. В зависимост от учениците можете да изисквате изпълнение на всички или да пропуснете някои от тях.

Page 7: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Да вървим

Мислим, че сме окончателно готови да започнем пътешествието. Погледнете картата отново и да потегляме.

Натиснете бутона на таблото с дясната стрелка, за да преминете нататък.

Сигурен съм, че вие сте готови също. Първа спирка – Копенхаген, Дания.

Секция 00 – Пътешествие с Visual Studio 2010 Страница 7 от 434

Page 8: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 01 - Копенхаген, Дания Страница 8 от 434

Page 9: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Програмирането е навсякъде

Програмите в ежедневието

Ще оставя първо да шофира Клиф, за да се опознаем по-добре. Казах ли ви, че вторият ми баща е програмист? Той не пише програми за настолни компютри. Неговите програми управляват техниката, която се използва в заводите за производство на пишещи машини. Веднъж той допусна грешка в програмата и в произведените пишещи машини липсваха някои от клавишите Q, W, E, R, T или Y!

Впечатлена съм колко много неща около нас са програмирани и още повече колко много неща са измислени или тествани с компютърни програми. Това не са само калкулаторите, роботите и

компютрите. Голяма част от уредите, вещите, които ползваме и дори автомобилите са също програмируеми.

Секция 01 - Копенхаген, Дания Страница 9 от 434

Page 10: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Вземете този микробус, например. В него сигурно има милион неща, които са проектиране на компютър. Аеродинамичната му форма вероятно е моделирана и тествана в симулационен канал на компютър. Седалките, кухнята и леглата сигурно са проектирани на компютър, след което са проектирани в тримерния модел на микробуса. А и някои части може би са произведени от компютърно-управлявани машини, както във фабриката на втория ми баща.

Съществуват още много други неща, като системата за позициониране, микровълновата печка и стерео-уредбата. Те са програмируеми и могат да се управляват дистанционно. Това означава, че притежават програми, които ги управляват, когато ги използвате. Тези програми еднократно са кодирани върху чипове, но преди това някой ги е написал. Да вземем електронната музика, която Дърк пише. Добра или лоша, тя е създадена от компютъра. Той даже написа програма, която съхранява всички варианти на лиричните му стихотворения, така че да не забрави идеите си.

Впечатляващото за програмите е, че те се използват за решаване на много различни проблеми и че правят много различни неща. Днес почти всеки използва компютър на работа или вкъщи, за да пише писма, документи и отчети. Почти всички търговски предприятия използват програми, за да съхраняват данни за доходите си, клиентите си и всичко, което правят или купуват. Много от програмите се използват за да съхраняват и дават информация, за да я филтрират и представят по различни начини. Голяма част от тях също така са написани, за да решават проблеми като изкуствен интелект, глобално затопляне и генетика. Заедно с това съществуват и различни специализирани програми, които се използват за проектиране, изчертаване на графики, игри и др. А дори не съм споменавала Интернет и виртуалните програми!

Някои хора пишат програми просто за забавление. Една от учителките ми в училище написа програма, която автоматично ни задаваше домашни по

Секция 01 - Копенхаген, Дания Страница 10 от 434

Page 11: CodeRulesBook2010 (Светът на програмирането – пътешествие)

математика. Нейната сестра създаде програма, която пише стихове и ги превеждаше на исландски. Четох статия за момче, който е направил Лего робот и го е програмирал да подрежда кубчето на Рубик. Не знам защо го е направил, може би просто защото е могъл!

Искам да програмирам тримерни, интерактивни видео игри или може би да пиша истински програми, които да анализират смъртните случаи в застрахователните компании.

Хей, мисля че получих задача за компютърното програмиране на джобния си компютър.

01 Пробвайте 01 Компютрите в ежедневието

Избройте поне четири случая, в които компютрите са част от ежедневието. Не използвайте примерите от курса. Измислете ваши собствени.

Секция 01 - Копенхаген, Дания Страница 11 от 434

Полезен съветЛего и Рубик кубhttp :// jpbrown . i 8. com / cubesolver . html

Page 12: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Какво правят програмистите

Знаете, че много хора си мислят, че програмистите са скучни момчета и момичета, които стоят пред компютрите си, блъскат код по клавиатурата, ядат студена пица и пият кофеинови газирани напитки по цяла нощ. Абстрахирайки се от факта, че това е мечтата ми всъщност зад това стоят много повече неща.

Добрият програмист не става през нощта. Той полага грижи, за да планира добре работата си така, че да създаде програма, която прави точно това, което очаква. Програмата трябва да е лесна за промяна, без грешки и потребителски дружелюбна. Зад големите проекти стоят екипи от стотици програмисти, които трябва да бъдат обучавани, организирани и управлявани. Така че заедно с писането на код програмистът прави още много други неща:

Определя какво ще прави програмата. Проектира потребителския интерфейс. Решава какъв език за програмиране да

използва. Проектира архитектурата на програмата и модулите, които трябва да

работят заедно. Дефинира стила на програмиране и дизайна. Решава кой ще пише кода на различните модули от програмата. Управлява плана за разработване на програмата и записва времето,

изразходено за написване на кода. Обучава програмистите в използването на развойните средства. Инсталира и управлява компютрите и мрежата, използвани от

програмистите. Пише код!!! Документира кода. Проектира базата от данни за съхраняване на информацията, използвана и

генерирана от програмата. Управлява графичното и художественото оформление. Управлява входа на информацията в базата от данни. Тества кода, за да е сигурен, че работи правилно. Пакетира кода така, че да бъде инсталиран за клиентския компютър или

сървъра. Обмисля нови идеи. Отстранява откритите от потребителите бъгове. Обучава потребителите при работата им с програмата. Пише документация и материали за обучение.

Секция 01 - Копенхаген, Дания Страница 12 от 434

Page 13: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Както виждате “Писането на код” е едно от многото неща, които програмистите правят.

Джобният ми компютър получи още една задача.

01 Пробвайте 02 Информационни технологии

Като използвате Интернет и други ресурси определете стартовата заплата на специалистите в Информационните технологии за вашия регион. Сравнете заплатите за различните длъжности като Програмисти, Системни аналитици, Уеб разработчици и др.

Секция 01 - Копенхаген, Дания Страница 13 от 434

Полезен съвет

Елементите в списъка представят различни пътища за кариера. Някои превъзхождат други с писане на код. Други са по-добри в доказването, че написания код работи правилно. А някои управляват работата на всички останали компютърни специалисти.

Page 14: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Какво е програма

Компютърната програма съдържа редове от код, които са написани на английски, като език за програмиране. Можете да изберете един измежду много езици за програмиране, базирайки се на неговите възможности и нуждите на вашата програма. След като напишете програмата, тя ще бъде компилирана в код, който компютърът може да разбере и изпълни.

Можете да напишете различни типове програми, използвайки един и същ език. Например, можете да използвате един програмен език, за да напишете една програма за игра на Морски шах, друга, която презентира картинки и трета, която визуализира орбитата на ракета, движеща се около планета. Кодът, който пишете, прави тези програми различни и им дава функционалност.

Кодът, който пишете, определя какво ще прави програмата. Той дефинира какво ще се случи, когато натиснете бутон или изберете елемент от падащ списък. Вашият код осигурява “интелекта” на програмата—той определя как програмата взима решения, колко пъти ще бъде изпълнено дадено действие и какви изчисления ще бъдат направени.Можете да пишете код, който пресмята, пише текст, отговаря на потребителски действия, събира данни или визуализира информация.

Писането на код може да бъде предизвикателство, забавление и дори удовлетворение. Когато изучите един език за програмиране, вие ще придобиете ново средство, което ще ви позволи да се изявите творчески, да изследвате и решавате проблеми и да играете. Можете да го използвате не по-трудно от глина, метал или математика.

Секция 01 - Копенхаген, Дания Страница 14 от 434

Page 15: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Възможности на езиците за програмиране

Моят дядо говори четири езика: Японски, Испански, Суахили и Английски—и петият е, когато наистина е ядосан! Езиците за програмиране приличат на останалите езици. Те не звучат и не изглеждат еднакво, но в основата си използват едно и също нещо – дават инструкции на компютъра за решаване на проблеми.

Знаете ли, че непрекъснато се създават нови езици за програмиране? През последните 50 години са разработени много езици за програмиране. Подобно на говоримите езици, някои от тях не са използвани дълго. Други са развити и се използват вече 20 – 30.

Новият език за програмиране се създава като се комбинират преимуществата на един или няколко вече съществуващи езика. Днес езиците за програмиране влияят върху развитието както на компютърния хардуер, така и на софтуера.

Първите езици за програмиране са били близки до разбираемите за компютъра инструкции. Това означава, че програмите са се писали само с нули и единици. Колко досадно! Накрая са създадени програми, наречени компилатори, които преобразуват написаният на наподобяващ английския език код в машинен код от нули и единици, който е разбираем за компютъра. Почти всички съвременни езици за програмиране притежават такива компилатори.

Някои езици са създадени за решаване на специфични проблеми. FORTRAN, например, е разработен за решаване на математически проблеми и извършване на пресмятания. Езикът FORTRAN произлиза от FORmula TRANslating (Език за превод на формули). Езикът COBOL произлиза от Common Business-Oriented Language (Общ бизнес-ориентиран език) и е създаден предимно за бизнес приложения, в които трябва да се обработват големи количества от нечислени данни. Езикът LISP произлиза от ListProcessing (Обработка на списъци) и е създаден, за да се изследва изкуствения интелект.

Новите езици за програмиране притежават преимущества над вече съществуващите. То някои от тях:

C: бърз, ефективен код BASIC: лесен за използване Visual Basic: базиран на форми потребителски интерфейс Perl: текстова манипулация

Секция 01 - Копенхаген, Дания Страница 15 от 434

Page 16: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Когато започвате нов проект, трябва да решите какъв език за програмиране ще използвате. Притежава ли езикът необходимата ви функционалност? Лесен ли е за програмиране? Познат ли ви е вече? Инсталиран ли е на компютъра ви?

Моят любим език е Visual Basic. Той е мощен и лесен за използване. Знам, че Клиф също го харесва. Дърк и Джин изучават C#, който произхожда от езиците C и C++. През пътешествието ни ще Visual Basic, но Джин и Дърк ще ви покажат някои от възможностите на C#. Никога не е излишно да се знаят повече от един езика за програмиране!

Секция 01 - Копенхаген, Дания Страница 16 от 434

Page 17: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Синтаксис на езика за програмиране

Ако пътувате по света може да ви е необходим някой, който говори английски. Можете да зададете въпроса “Говорите ли английски?” на всякакъв език. Например:

Английски: Do you speak English?Немски: Sprechen Sie Englisch?Испански: ¿Habla ingles?Португалски: Você fala inglês?Български: Говорите ли английски?

В примерите по-горе са различни не само думите, а и тяхната подредба—съществителните, глаголите и знаците са в различен ред. Думите и тяхната подредба определят синтаксиса на езика. Синтаксисът дефинира правилата за получаване на правилни изречения в даден език.

Подобно на говоримите езици, всеки език за програмиране има собствен синтаксис. Синтаксисът е лексиката, граматиката, думите и конструкциите, които изграждат езика за програмиране. Той дефинира правилата за писане на правилно структуриран редове от код и обединяването им в работеща програма.

Например, всички модерни езици за програмиране могат да изпълняват конструкция от "If..Then..Else". Конструкцията "If...Then...Else" е един от начините програмата да направи избор, базиран на информацията, която притежава. Позволете ми да ви покажа някои примери на преносимия ми компютър, които илюстрират синтаксиса на конструкцията "If..Then..Else" във Visual Basic и C#. На този етап не се притеснявайте от това, че не разбирате кода. Просто проследете приликите и разликите в синтаксиса на езиците.

Секция 01 - Копенхаген, Дания Страница 17 от 434

Page 18: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 01 - Копенхаген, Дания Страница 18 от 434

Page 19: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изучаването на един език за програмиране включва изучаване на неговия синтаксис, структура и правила. Вие трябва да научите пунктуацията на езика, както и т.нар. “резервирани думи”. Те се наричат така, тъй като се използват като команди. Резервираните думи, наричани още ключови думи, имат специално значение и се използват за постигането на определена функционалност—те казват на програмата какво да прави. Например, думите "If" и "Else" са резервирани думи в повечето езици за програмиране. Те се използват за създаване на езикови конструкции за взимане на решения.

Когато изучавате език за програмиране, освен неговия синтаксис трябва да научите и функционалността и възможностите му. Запомнете, че не всички езици за програмиране могат да правят всичко. Всички съвременни езици, обаче притежават общи характеристики и функционалност, които винаги можете да очаквате.

Секция 01 - Копенхаген, Дания Страница 19 от 434

Page 20: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Синтаксис на Visual Basic

Visual Basic е мощен и лесен за изучаване език. Учейки се да програмирате с Visual Basic, вие ще научите резервираните думи, структурата и основните обекти, които формират езика. Първо трябва да разберете някои базови синтактични елементи на езика.

Направих кратък списък с някои ключови синтактични елементи в Visual Basic: Редовете от код нямат индикатори за край на ред като точка и запетая (;) Коментарите започват с апостроф (') Фигурните скоби ({}) не се използват за създаване на блокове от код. Visual Basic НЕ е чувствителен към малки и големи букви. MyCase е

еквивалентно на myCase и на MYCASE. Във Visual Basic те означават едно и също.

Хей Дърк, Джейн, избройте няколко разлики в сравнение със синтаксиса на C#?

Добре, в C# всеки ред от кода завършва с точка и запетая. Също така блоковете от код се поставят във фигурни скоби, които вече познавате. Всеки ред от коментарите започва с //. Езикът C# е чувствителен към малки и големи букви. MyCase се различава от myCase и MYCASE.

Секция 01 - Копенхаген, Дания Страница 20 от 434

Полезен съвет

Visual Basic е добър като първи заучен език за програмиране, защото е по-непретенциозен от останалите. Той не е чувствителен към регистъра. Редовете с код не трябва да се завършват по специален начин. Структурите са доста интуитивни.

Page 21: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане Копенхаген

Добре дошли в Копенхаген, Дания. Трябва да направите теста, за да се подготвите за Комисията по състезанията. В папката на курса тестът не е интерактивен. В онлайн версията на курса компютърът проверява отговорите. Ето го и него. Успех!

Секция 01 - Копенхаген, Дания Страница 21 от 434

Page 22: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 02 - Милано, Италия Страница 22 от 434

Page 23: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Visual Studio 2010 и IDE средатаЗдравейте, как сте? Отговорихте ли на въпросите

на Комисията по състезанията? Те могат да ви се сторят все по-трудни, но вие също ще научавате все повече. Сигурен съм, че сте се справили. Ники ще шофира за малко така, че аз ще ви разкажа някои неща по пътя за следващата ни дестинация – Милано, Италия.

По време на пътуването ще ви науча на това, което трябва да знаете, за да направите теста за IDE средата. IDE (Integrated Development Environment) е интегрирана среда за разработка, осигурена от Microsoft с Visual Studio 2010 . Вие ще я използвате, за да напишете първата си програма на Visual Basic. Можете да я използвате, за да пишете програми и на други езици за програмиране.

След като научите за IDE средата и направите теста, ще бъдете готови да шофирате и да ни помогнете в преодоляването на предизвикателствата. На края няма да искате никой друг освен вас да шофира, нали? Не се шегувам!

Секция 02 - Милано, Италия Страница 23 от 434

Page 24: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Visual Studio 2010

Знаете ли, че можете да пишете компютърен код с обикновен текстов редактор Notepad или Microsoft Word? Така е, ако желаете да правите нещата по трудния начин! Вместо това повечето програмисти като мен и Ники използват софтуерни средства, които правят програмирането далеч по-лесно. Всъщност това се каним да направим, използвайки Visual Studio 2010 на Microsoft.

Visual Studio 2010 е средство за разработка, което ви помага да пишете програми, използвайки голямо разнообразие от .NET езици за програмиране. Например, когато добавяте бутон върху форма, Visual Studio 2010 автоматично добавя някакъв код за него. Разбира се Visual Studio 2010 не написва целия код, който ви е необходим, тъй като не знае какво е предназначението на програмата. Това със сигурност намалява количеството на кода, който вие сами трябва да напишете и времето, необходимо за това.

Visual Studio 2010 ви улеснява и в други посоки. В зависимост от значението си кодът се оцветява по различен начин. Например, коментарите винаги са зелени, а ключовите думи – сини. Дори грешките в синтаксиса са подчертани със синя вълнообразна линия. Това ви помага да ги откриете и коригирате преди да сте изпълнили кода.

Visual Studio 2010 ви помага да съхранявате кода си подреден в отделни файлове. Така можете да разделите кода си във функционални модули. Например, отделен файл ще бъде използван за съхраняване на кода за всяка една от формите ви. Visual Studio 2010 осигурява лесно компилиране и стартиране на програмата ви само с няколко щраквания на мишката. Можете да използвате и инструменти за дебъгване, за да откривате грешки в програмата и визуализирате информация по време на изпълнението й.

Най-важно от всичко е, че Visual Studio 2010 ви позволява да разработвате програми, използвайки различни езици за програмиране. За всеки един от тях можете да използвате един и същ интерфейс на Visual Studio 2010 . Езиците, поддържани от Visual Studio 2010 са:

Visual Basic Visual C# (произнася се Си-Шарп) Visual F# Visual C++ (произнася се СИ плюс плюс) ASP.NET (за създаване на уеб страници)

По време на нашето пътуване към следващата дестинация ще ви покажа как да използвате Visual Studio, за да напишете първата си програма. Като основен език за програмиране ще използвате Visual Basic, но ще ви покажа и примери на C#. Така, че се пригответе да напишете първата си програма!

Секция 02 - Милано, Италия Страница 24 от 434

Page 25: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Стартиране на Visual Studio

За да отворите Visual Studio:1. Натиснете бутона Start2. Изберете Programs 3. Изберете папката Microsoft Visual Studio 2010 4. Изберете Microsoft Visual Studio 2010 приложение

На екрана ми има икона, която също мога да използвам, за да отворя Visual Studio 2010 . Иконата е бърз начин, за да стартирате Visual Studio 2010 – просто щракнете двукратно върху нея!

Секция 02 - Милано, Италия Страница 25 от 434

Полезен съвет

Уверете се, че сте показали на учениците си как да открият и отворят Visual Studio .NET 2008. Учениците без опит могат да срещнат затруднения.

Page 26: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Използване на Visual Studio 2010

Сега ще ви запозная със стъпките за създаване на вашата първа програма с Visual Basic. Трябва да отворите Visual Studio. Следвайте стъпките и не само ги четете, а и ги изпълнявайте!

Страницата Start на IDE средата

Първият екран, който трябва да видите, когато отворите Visual Studio е страницата Start. В полето Recent Projects обикновено трябва да виждате списък от съществуващи проекти. Тъй като това вероятно е първият път, когато използвате Visual Studio 2010 , списъкът ще е празен.

Заглавието My Profile е мястото, където можете да настроите Visual Studio спрямо вашия стил на работа.

Секция 02 - Милано, Италия Страница 26 от 434

Page 27: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Настройка на лентите с бутони

Лентите с бутони осигуряват бърз достъп до командите от основното меню на Visual Studio 2010 . За да настроите кои от тях да се показват, когато стартирате средата, изберете менюто Tools и след това командата Customize. Ще се появи прозорец, който изглежда по следния начин:

Щракнете върху опциите Debug и Dialog Editor, за да визуализирате лентите с бутони за дебъгване и форматиране на екранни прозорци.

Секция 02 - Милано, Италия Страница 27 от 434

Page 28: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Създаване на нов проект

Сега след като сме приключили с настройките на Visual Studio средата, ще разгледаме заглавието Projects. Можете да създадете нов проект или да отворите вече съществуващ. За да отворите съществуващ проект, изберете командата Open Project от менюто File. След като създадете първия си проект, той ще се появи в списъка на съществуващите проекти.

Позволете ми да ви покажа как да създадете нов проект за програмата Hello World. След това ще напишем програмата. Hello World е класическа програма за начинаещи програмисти. Задачата е да се изведе на екрана съобщение с текст "Hello World."

1. Изберете командата New Project, за да създадете нов проект. Ще се появи диалоговият прозорец New Project.

Секция 02 - Милано, Италия Страница 28 от 434

Page 29: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Полезен съвет

Всяко училище има собствени правила за съхраняване на ученическите проекти. Бъдете точни, когато описвате правилата във вашето училище.

Всеки проект трябва да е в своя директория.

Прозорецът New Project

В горния ляв списък с име Project Types на прозореца New Project ще видите, че в Visual Studio съществуват различни типове проекти. След малко ще ви запознаем с някои от тях. Програмата Hello World ще използва шаблона Windows Forms Application (в този курс винаги ще използваме този шаблон така, че не е необходимо да разбирате останалите). В прозореца New Project задавате не само типа и шаблона на проектите, а също така техните имена.

2. Изберете Visual Basic за тип на проекта3. Изберете Windows Forms Application за шаблон 4. Въведете HelloWorld за име на проекта 5. Натиснете бутона OK. Ще се отвори нов проект, визуализиращ форма с

име Form1.vb в лявата част на екрана и прозорец със заглавие Solution Explorer в дясната част на екрана. Лесно, нали?

Секция 02 - Милано, Италия Страница 29 от 434

Page 30: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 02 - Милано, Италия Страница 30 от 434

Page 31: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Прозорецът Form Design

В повечето случаи ще създавате приложения за Windows, които стартират с форма. Формите са частта от програмата, която потребителят вижда. Върху тях се поставят обекти като бутони и текстови полета. При натискането на бутон се изпълнява код, който извършва необходимата за бутона обработка.

В главния прозорец, разположен в лявата част на екрана, може да се види празна форма. Това всъщност е прозорецът за дизайн на формите (озаглавен е Form1.vb [Design]). Прозорецът Solution Explorer е разположен отдясно. На този етап формата не притежава някакви бутони или текстови полета. По-късно ще посветим достатъчно време на дизайна. За сега ми позволете да ви покажа няколко по-прости неща.

Секция 02 - Милано, Италия Страница 31 от 434

Page 32: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 02 - Милано, Италия Страница 32 от 434

Полезен съвет

Накарайте учениците да използват опцията за автоматично скриване на всички прозорци. Това ще намали грешките в кода.

Page 33: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Прозорецът Toolbox

По-голямата част от функционалността на Visual Studio е достъпна посредством отварянето и затварянето на различни прозорци. Например, за да поставите бутони и текстови полета на формата, трябва да отворите прозореца Toolbox. Прозорецът Toolbox показва всички обекти, които могат да бъдат поставени на формата като бутони, текстови полета, полета за отметка, падащи списъци и т.н. С него по-късно ще създадете атрактивно изглеждащи форми.

1. Натиснете бутона Toolbox вляво от формата Form1- Прозорецът Toolbox Window ще се отвори.

2. Щракнете двукратно върху елемента Button, за да добавите бутон върху формата (Бутонът, който добавихте може да е скрит зад прозореца Toolbox.)

Секция 02 - Милано, Италия Страница 33 от 434

Page 34: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Позициониране и оразмеряване на бутон

Вече имате бутон върху формата. Позволете ми да ви покажа как да променяте местоположението и размера му.

1. Щракнете върху бутона и го влачете с мишката до средата на формата.

2. Преместете курсора над едно от белите квадратчета. (това са манипулаторите на размера).

3. Задържайки натиснат левия бутон на мишката, влачете манипулаторите, за да намалите или увеличите размера на бутона.

Не беше ли лесно? Сега ще добавим код към бутона, за да определим какво ще прави, когато потребителят щракне върху него.

Секция 02 - Милано, Италия Страница 34 от 434

Page 35: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Добавяне на код към бутона

Щракнете двукратно върху бутона с мишката. Visual Studio 2010 автоматично добавя няколко реда в кода на програмата. Погледнете примера по-долу.

Public Class Form1

Private Sub Button1_Click(ByVal sender As _ System.Object, ByVal e As System.EventArgs)

_ Handles Button1.Click

End Sub

End Class

Звучи като гръцки, нали? Не се плашете, ще ви помогнем да си го преведете. За сега обърнете внимание на реда с Button1_Click. Тази част от кода се използва, когато потребителят натисне бутона. Ако го натиснем сега, нищо няма да се случи. Ние трябва да кажем на приложението какво да прави, когато бутонът е натиснат. Ето защо програмирането е навсякъде. Готови ли сте да започнем?

1. След като щракнете двукратно върху бутона ще се отвори прозореца с кода

2. Щракнете върху празния ред над реда End Sub 3. Напишете следния код точно както е показано

MessageBox.Show("Hello, World.")

Този код се изпълнява, когато потребителят натисне бутона.

Секция 02 - Милано, Италия Страница 35 от 434

Полезен съвет

Много от примерите са от един ред код, който обаче е представен на няколко реда в курса. За да разположите един ред код на два реда, поставете в края на първия ред интервал и долна черта ( _ ).

Page 36: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изграждане на проекта

Време е да изградите проекта си. На този етап вашия и генерираният от Visual Studio код ще се компилира в инструкции, които компютърът разбира.

1. Изберете командата Build от главното меню 2. Изберете опцията Build Hello World от падащото меню

Секция 02 - Милано, Италия Страница 36 от 434

Page 37: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Сполучливо изграждане

След като изграждането приключи в прозореца Output се визуализира съобщение, което показва дали компилацията е успешна или са възникнали грешки. Ако няма грешки в прозореца Output ще видите следното съобщение:

Секция 02 - Милано, Италия Страница 37 от 434

Page 38: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Несполучливо изграждане

Предположете, че вместо MessageBox сте сгрешили и сте написали mMessageBox. Прозорецът Error List ще визуализира съобщение за грешка, което е подобно на следното.

Когато това се случи, Visual Basic подчертава мястото на грешката. При позициониране на мишката в края на грешката се появява удивителен знак. Ако щракнете върху него ще се появи прозорец с възможни корекции на грешката, който изглежда по следния начин:

Ако изграждането на приложението е неуспешно, проверете отново написаният от вас код. След това следвайте стъпките, които ви показахме, за да го изградите отново.

Стартиране на програмата

Сега програмата ви е компилирана без грешки. Добре дошли по пътя на програмиста! Време е да стартирате първата си програма.

Секция 02 - Милано, Италия Страница 38 от 434

Page 39: CodeRulesBook2010 (Светът на програмирането – пътешествие)

1. Изберете командата Debug от главното меню2. Изберете опцията Start Debugging от падащото меню. (Формата ще се

визуализира заедно с поставения върху нея бутон.) 3. Натиснете бутона. Знаех си, че ще успеете!

Секция 02 - Милано, Италия Страница 39 от 434

Полезен съвет

Когато командата Start е избрана, Visual Basic изгражда приложението преди да го изпълни. Ако има грешки при изграждането, учениците ще бъдат попитани дали желаят да изпълнят програмата с тях. Верният отговор е НЕ. В противен случай програмата няма да заработи.

Page 40: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Показване на съобщение

Когато натиснете бутона се появява съобщение с текст "Hello World". Все пак, това искахте да направи програмата! Поздравления! Току що стартирахте първата си програма на Visual Basic!

1. Натиснете бутона OK, за да затворите прозореца със съобщението. (Съобщението ви се скрива, но формата е все още на екрана. За да покажете отново съобщението, можете да натиснете бутона още веднъж.)

2. Натиснете бутона със знак "X" в горния десен ъгъл на формата, за да затворите програмата.

Секция 02 - Милано, Италия Страница 40 от 434

Page 41: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Прозорецът Error List

Прозорецът Error List притежава три страници – Errors, Warnings и Messages. На страницата Errors се извеждат грешки в програмата, при наличието на които изпълнението й е невъзможно. Тези грешки задължително трябва да бъдат отстранени от програмиста. На страницата Warnings се извеждат съобщения за неточности, които е желателно да бъдат отстранени. Страницата Messages има информативен характер.

Секция 02 - Милано, Италия Страница 41 от 434

Page 42: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Съхраняване на проект

Време е да съхраните проекта си. Това става по подобен за останалите Windows приложения начин.

1. Изберете командата File от главното меню2. Изберете опцията Save All от падащото меню3. На екрана ще се появи прозорец Save Project, в който можете да

зададете име на приложението в полето Name, местоположение за съхранение в полето Location и име на проекта в полето Solution.

4. Натиснете бутона Save.5. За да затворите Visual Studio, изберете командата File от главното

меню.6. Изберете опцията Exit от падащото меню.

Можете да опитате сами. Получих задача за вас на джобния си компютър.

Секция 02 - Милано, Италия Страница 42 от 434

Полезен съвет

Visual Studio 2010 не съхранява автоматично проекта при изграждането му.

Page 43: CodeRulesBook2010 (Светът на програмирането – пътешествие)

02 Пробвайте 01 Hello World

Напишете програма с име HelloWorld. Дублирайте стъпките, показани в курса. Визуализирайте съобщение с текст “Hello, World”.

Секция 02 - Милано, Италия Страница 43 от 434

Page 44: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Файлове и директории на проекта

Когато пишете приложения на Visual Basic, се създават много файлове. Вие трябва да знаете какви файлове се създават и какво е предназначението на някои от тях. Разгледайте отрязъка от екрана по-долу, за да се запознаете със стандартния набор от файлове и директории.

Използвайки Windows Explorer, открийте директорията, в която сте съхранили проекта Hello World. Ако отворите тази директория, ще видите, че тя съдържа друга директория с име Hello World и файл с наименование Hello World.sln. Отворете директорията Hello World, за да видите файловете, които са създадени за вашето приложение. Те са следните:

Hello World.sln е файл на проекта, който съхранява информация за всички негови части. Проектът може да съдържа няколко приложения. Проектът Hello World включва само едно приложение с име Hello World.vbproj. Hello World.sln е файлът, към който се обръщате, когато отваряте съществуващ проект.

Файлът Form1.vb съдържа формата и асоциирания с нея код.

Щракнете двукратно върху bin директорията, за да я отворите. Тя съдържа две папки Release и Debug, в които се разполага файлът с изпълнимия Visual Basic код с име Hello World.exe. Този файл може да бъде стартиран и на друг компютър, на който може и да не инсталирано Visual Studio 2010 .

Секция 02 - Милано, Италия Страница 44 от 434

Page 45: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане в Милано

След като прочетохте наръчника на IDE средата, е време да направите и теста.

Изпълнете задачата MyNameIs, за да покажете, че сте готови да продължите по-нататък.

02 Пробвайте 02 MyNameIs

Напишете програма с име My Name Is. Тя е много подобна на програмата Hello World, показана в курса.

Създайте нов проект с име My Name Is. Използвайте командата New Project от менюто File.

Върху формата поставете бутон и текстово поле. Оставете имената на бутона и текстовото поле такива, каквито са по подразбиране.

Щракнете два пъти върху бутона, за да отворите страницата с изходния код. В подпрограмата Button1_Click въведете следния ред код:

TextBox1.Text = "your name here"

Заменете your name here с вашето име. Уверете се, че сте запазили кавичките.

Изградете и стартирайте вашата програма.

Ако работи правилно, я покажете на учителя си.

Секция 02 - Милано, Италия Страница 45 от 434

Page 46: CodeRulesBook2010 (Светът на програмирането – пътешествие)

02 Можете ли? Бързо хранене

Често се спираме на веригите за бързо хранене. Нека програмирайки това да се забавляваме.

Вие знаете как да добавите бутон на формата, да изградите приложението и да го стартирате. Шаблонът, който можете да използвате е завършено приложение с изключение на четири бутона номерирани от 1 до 4.

След като ги добавите върху формата, тя трябва да изглежда по следния начин.

Изградете приложението. Изберете опцията Start Debugging от менюто Debug.

Какво се случва, когато щракнете върху всеки един от бутоните?

Покажете работещата програма на своя учител.

Секция 02 - Милано, Италия Страница 46 от 434

Полезен съвет

Учениците добавят бутони към съществуваща програма, бутоните на която са премахнати, когато е завършена.

Page 47: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Продължение / Обобщение

В по-късен урок ще научите как да промените текста върху бутоните. Можете ли сами да си представите как ще промените този текст като използвате прозореца Properties?

Добре дошли в Милано. Ето ви и нов тест за подготовка. В папката на курса, тестът не е интерактивен. В онлайн версията му компютърът проверява отговорите. Късмет!

Секция 02 - Милано, Италия Страница 47 от 434

Page 48: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 03 - Барселона, Испания Страница 48 от 434

Page 49: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Псевдокод

Типове конструкции с код

Клиф свърши чудесна работа, запознавайки ви с Visual Studio 2010 . Какво беше усещането ви, когато писахте първата си програма? Знаме, че все още не сте готови да пишете много код, но и това ще стане. Сега ще ви покажа как да планирате и организирате програмата си преди да започнете да пишете код.

Знаете ли как можете да напишете компютърна програма без да знаете език за програмиране? Много програмисти първо пишат програмите си на "псевдокод", след което ги преобразуват до реален език за програмиране. Това им помага да дефинират логическата последователност на програмата и това, което тя трябва да прави. Псевдокодът се състои от прости изречения на английски (или на родния ви език), които определят действието на програмата. След като сте написали псевдокода написването на истинския код е лесно. Пседокодът дефинира структурата на програмата.

Преди да ви покажа как да използвате псевдокод, искам да ви запозная с някои основни типове конструкции, изграждащи компютърната програма. Всички езици за програмиране използват еднакви базови типове конструкции с код, които се различават по своя синтаксис. Комбинирайки ги, вие можете да пишете доста сложни програми.

Спомняте ли си реда с код, който написахте за бутона в програмата Hello World?

Той изглеждаше по следния начин:

MessageBox.Show("Hello World.")

Този код показва информация на потребителя. Това е основната конструкция за визуализиране на прозорец с предупреждение или съобщение. Всички езици за програмиране притежават подобна конструкция за извеждане на информация за потребителя, която обаче е с различен синтаксис. Съществуват и други такива конструкции.

Ето някои примери на други типове конструкции, поддържани от езиците за програмиране.

Секция 03 - Барселона, Испания Страница 49 от 434

Page 50: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Променливите се използват за съхраняване на данни като числа и текст. Те пазят информация и резултати от изчисления.

Операторите за присвояване установяват какво се съхранява в променливите. Стойността може да бъде число, текст, друга променлива или калкулирана стойност.

Операторите за сравнение се използват за сравняване на стойности или променливи с числа или други стойности или променливи. Те задават въпрос отговорът, на който е "true" или "false".

Условните оператори се използват за

реализиране на избор. Изборът се основава на сравнение. Ако отговорът от сравнението е "true", се избира първият вариант. Ако той е "false", се избира вторият вариант. Условните оператори често се наричат оператори за разклонение, тъй като програмата продължава изпълнението си в една или друга посока.

Операторите за цикъл се използват за многократно извършване на определени действия. Те намаляват обема на кода, който трябва да напишете, когато програмата повтаря едни и същи действия.

Като се учите да програмирате, ще учите и как да използвате тези основни конструкции, за да накарате програмата си да прави точно това, което искате. Изучавайки Visual Basic (или други езици за програмиране) ваша задача ще бъде да научите определен синтаксис, дефиниран от езика за програмиране.

Секция 03 - Барселона, Испания Страница 50 от 434

Page 51: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Какво е псевдокод?

Както споменахме преди, програмистите често пишат своите програми на псевдокод. Представката псевдо- означава “вместо”. Например, някои автори използват псевдоними вместо истинските си имена. Псевдокодът не е написан на истински език за програмиране. Той се състои от прости изречения, които описват какво ще прави програмата. Можете да пишете псевдокод на английски, испански, латински или на някакъв друг език, защото компютърът никога няма да го прочете или разбере. Псевдокодът ви трябва да е достатъчно ясен за вас и другите програмисти, защото той осигурява инструкции за написването на истинската програма. При написването на псевдокода можете да използвате различните типове основни конструкции -- присвояване, сравнение, условие и т.н.

Голямо преимущество в използването на псевдокода е, че не е необходимо да се съобразявате с езика за програмиране, който ще използвате. Първо дефинирайте логиката и структурата на програмата посредством псевдокод. След това “преведете” псевдокода на езика за програмиране, който ще използвате.

Секция 03 - Барселона, Испания Страница 51 от 434

Page 52: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ще ви покажа пример за това как да използвате псевдокод при създаването на програма. Да кажем, че искам да напиша програма за пресмятане средния разход на бензина, изразходен при пътуването ни, в долари за галон. Какво трябва да прави програмата? За да отговоря на този въпрос, написах програмата като първо използвах псевдокод. Ето стъпките, които моята програма трябва да направи, за да пресметне средната стойност на бензина:

1. Събира платените за бензина пари и присвоява получената стойност на променлива (total dollars)

2. Събира изразходените галони бензин и присвоява получената стойност на втора променлива (total gallons)

3. Разделя първата променлива (total dollars) на втората (total gallons) и присвоява резултата на трета променлива (dollars per gallon).

4. Показва съобщение със средния разход в долари за галон.

Псевдокодът ясно показва какво трябва да прави програмата. Сега мога да напиша код, за да завърша скицираната с псевдокод задача.

Секция 03 - Барселона, Испания Страница 52 от 434

Page 53: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ще ви дам друг пример с повече стъпки. Той може да се използва в програмируем робот за подмяна на спукани гуми.

1. Определете коя гума е спукана. (оператор за сравнение)2. Определете размера на спуканата

гума (оператор за сравнение)3. Ако имате резервна гума със същия

размер продължете 4. или вземете резервна гума от

магазина. (оператор за сравнение и условие)

5. Повдигнете микробуса с хидравличен крик.

6. Махнете тасовете с отвертка, за да откриете болтовете.

7. Развивайте болтовете с гаечен ключ докато отвиете всички. (оператор за цикъл)

8. Махнете спуканата гума.9. Сложете новата гума.10.Завивайте болтовете с гаечен ключ докато завиете всички. (оператор за

цикъл)11.Поставете тасовете и ги ударете, за да се наместят.12.Махнете хидравличния крик.

В псевдокода по-горе има комбинация от оператори за присвояване, условие, сравнение и цикли. Например, трябва да съхраните размера на спуканата гума посредством оператор за присвояване. Трябва да сравните размера на спуканата гума с тази от магазина посредством оператор за сравнение. Операторът за условие се използва с оператора за сравнение. Ако притежавате гума с необходимия размер продължавате, в противен случай отивате в магазина за гуми. Отвиването и завиването на болтовете може да се реализира с оператор за циклична обработка. Всяка една от обработките трябва да бъде повторена определен брой пъти, докато всички болтове са отвити или всички болтове са завити.

Секция 03 - Барселона, Испания Страница 53 от 434

Page 54: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Защо не опитате да напишете някакъв псевдокод като използвате джобния ми компютър?

03 Пробвайте 01 Подготовка за пътешествие

Напишете псевдокод, за да опишете необходимите стъпки за подготовка на ваше пътешествие. Вашето решение трябва да има най-малко седем стъпки. Ако всяка стъпка започва с оператора if, то вие не сте успели да създадете псевдокод.

Секция 03 - Барселона, Испания Страница 54 от 434

Page 55: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Коментари

Съвременните езици за програмиране, включени в Visual Studio, ви позволяват да добавяте коментари към кода. Коментарите не се компилират като част от програмата и не се изпълняват при нейното стартиране. Те са полезни за документиране и по-късно за разбиране на кода от вас и останалите програмисти.

Вие винаги трябва да коментирате кода си. Коментарите са белег за добро програмиране. Добрият програмист отделя време, за да разясни и документира кода, който е написал. Трябва да добавяте коментари, когато променяте кода или добавяте функционалност. Също така коментирайте частите от вашата програма, които са трудно разбираеми или изпълняват особено тежки или сложни изчисления.

Секция 03 - Барселона, Испания Страница 55 от 434

Page 56: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Във Visual Basic всеки ред от коментара започва с апостроф ('). Всеки ред от кода, който започва с апостроф се интерпретира като коментар и не се компилира и изпълнява при стартирането на програмата. Ето пример за коментар в Visual Basic

'Добавяне на функционалност за пресмятане на средния изминат път в мили за галон.

Хей, коментарите във Visual Basic започват с единичен апостроф, но в C# се използват двойка наклонени черти (//).

Например,

//Добавяне на функционалност за пресмятанена средния изминат път в мили за галон.

Секция 03 - Барселона, Испания Страница 56 от 434

Page 57: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Коментарите имат и друга важна функция освен документирането на кода. Тъй като те не се изпълняват, могат да бъдат използвани като средство за съхраняване на конкретни редове код за изпълнение. Това се нарича “коментиран” код. Коментираният код може да се използва за откриване на грешки. Ако е възникнала грешка, можете да коментирате редове или цели блокове от код, докато грешката спре да се появява. Последният код, който сте коментирали вероятно съдържа грешката, която възниква. Много удобно, нали?

Сега ще ви дам пример за коментиран код. Забележете, че редовете с код са три. Вторият ред е коментиран посредством единичен апостроф, поставен в началото му. Той няма да се изпълни!

MessageBox.Show("I am from"'MessageBox.Show(" a cool town called")MessageBox.Show(" San Francisco.")

Секция 03 - Барселона, Испания Страница 57 от 434

Page 58: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Псевдокод като коментар

А сега ще ви покажа още едно удивително приложение на коментара. Сигурно сте нетърпеливи! Можете да използвате коментарите, за да описвате и планирате вашата програма.Лесно е! Вие вече сте писали псевдокод, който описва какво прави програмата ви. Възползвайте се от това преимущество. Копирайте псевдокода в програмата си и поставете единичен апостроф пред всеки ред, за да го преобразувате в коментар. Под всеки ред с псевдокод напишете конкретен Visual Basic код и програмата ви не само, че ще бъде завършена, но и коментирана!

Ето пример, базиран на псевдокода, който написах за пресмятане на средния разход за бензин по време на пътуването ни. Забележете, че псевдокодът представлява коментар.

'Съберете всички дадени за бензин пари иполучената стойност присвоете напроменлива(total dollars)

Dim totalDollars As DoubletotalDollars = 88.76 + 100.8 + 120.3

'Съберете броя на изразходените галони сбензин и присвоете получената стойност на вторапроменлива (total gallons)

Dim totalGallons As DoubletotalGallons = 49.3 + 55.5 + 46.3

'Разделете първата променлива (total dollars)на втората (total gallons) и присвоете резултатана трета променлива (dollars per gallon).

Dim DPerGallon As DoubleDPerGallon = totalDollars / totalGallons

'Визуализирайте съобщение, което показвасредния разход в долари за галон.

MessageBox.Show (dollarsPerGallon)

Секция 03 - Барселона, Испания Страница 58 от 434

Page 59: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Отстъпи и интервали

Макар и да не разбирате целия Visual Basic код по-горе, искам да насоча вниманието ви към някои неща. Преди всичко се вижда, че коментарите започват с единичен апостроф. Също така цвета на коментирания текст е зелен. Това го прави лесно различим от кода. Второ, забележете, че преди всеки коментар е добавен празен ред. Празните редове разделят коментарите и кода на групи според функциите им. Те правят програмата ви логически ясна и лесна за разбиране.

В повечето случаи Visual Basic автоматично добавя интервали и отстъпи, за да направи кода ви по-четлив. Ако желаете, допълнително можете да добавите интервали и отстъпи. Ето и моята гледна точка в това отношение – използвайте ги, за да направите кода си четлив. Visual Basic и другите езици от Visual Studio игнорират интервалите и отстъпите при компилацията на програмата. Докато Visual Basic не се нуждае от тях, то със сигурност те са полезни за човека, който чете кода ви! (Вие сте човекът, който ще има най-голяма полза.)

Секция 03 - Барселона, Испания Страница 59 от 434

Page 60: CodeRulesBook2010 (Светът на програмирането – пътешествие)

03 Пробвайте 02 Измиване на чинии

Получих друга задача на джобния си компютър, която трябва да направите след като измиете чиниите!

Караваните за къмпинг имат кухня, която се използва, когато наблизо няма подходящо заведение за хранене. Готвенето означава натрупване на чинии за измиване, караваните нямат автоматични миялни машини.

Напишете псевдокод, за да опишете

необходимите стъпки за измиване на чиниите. Ако имате личен опит в това, можете да направите някакво проучване.

Вашето решение трябва да има най-малко седем стъпки.

Секция 03 - Барселона, Испания Страница 60 от 434

Page 61: CodeRulesBook2010 (Светът на програмирането – пътешествие)

03 Можете ли?

Аквариум

Вижте аквариума с риби в магазина за домашни любимци?

Пребройте рибите от всеки цвят и изчислете процентното им съотношение спрямо общия им брой.

В действителност притежавам програма, която прави това.

Намерете файл с име FishTank.sln. Щракнете два пъти върху него, за да го отворите с Visual Studio. Отворете страницата с изходния код.

Вашата задача е да разгледате страницата с изходния код и да копирате всички коментари в текстов файл.

Изглежда ли резултатът като псевдокод?

Покажете списъка с коментарите на вашия учител.

Продължение / Обобщение

Прекалено много ли са коментарите? Прекалено малко? Защо?

Секция 03 - Барселона, Испания Страница 61 от 434

Page 62: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане в Барселона

Тъй като пристигнахме в Барселона, Испания трябва да направите един малък тест. Той може да ви помогне да отговорите на въпросите, които ще ви зададе Комисията по състезанията.

Секция 03 - Барселона, Испания Страница 62 от 434

Page 63: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 04 - Казабланка, Мароко Страница 63 от 434

Page 64: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Windows приложения

Пътуваме към едно от любимите ми места – Казабланка, Мароко! То се намира в западната част на Мароко на Атлантическия океан. В миналото Казабланка е бил проспериращ град, известен като Алфа. Той е бил разрушен от португалците, а по-късно възстановен от тях. След това е окупиран от французите под чието административно управление започва бързо да се разраства. Така старото мавританско селище се превръща в модерен град.

Сега Казабланка е най-големият град в Мароко! Той притежава едно от най-мащабните изкуствени пристанища в света. За мен Казабланка е една от основните причини да се присъединя към пътуването.

Спомняте ли си, че по пътя за Милано използвахте Visual Studio 2010 , за да напишете първата си програма? Едно от първите неща, които трябваше да определите беше типа на проекта и вие избрахте Windows приложение. Windows приложението е тип програма, която притежава потребителски интерфейс, осигуряващ начин за взаимодействие между потребителя и програмата. Не всички програми притежават потребителски интерфейс. Някои от тях се стартират еднократно или работят във фонов режим и не изискват потребителски вход. О! Колко скучно!

Секция 04 - Казабланка, Мароко Страница 64 от 434

Page 65: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Дизайн на форми

Всички програми, които пиша са Windows приложения. Windows приложенията използват форми, което ви позволява да проектирате интерфейса, който ще вижда потребителят, и начина, по който той ще взаимодейства с програмата.

Когато създавате ново Visual Basic приложение за Windows, Visual Studio 2010 автоматично ще добави форма с име Form1.vb към проекта ви. За да осигурите взаимодействието на потребителя с програмата, вие добавяте контроли като бутони, етикети, текстови полета, падащи списъци и др. Да предположим, че вашата форма трябва да осигури въвеждането на информация за спуканата гума от примера в предходната секция. Ето описанието на контролите, които са ви необходими, за да направите това:

• В текстово поле въведете регистрационния номер на колата.• От група радио-бутони изберете този,който показва коя гума е

спукана (лява предна, дясна предна, лява задна, дясна задна)• Използвайте поле за отметка, за да определите дали “поръчката

е експресна”• От падащ списък изберете размера на гумата• Натиснете бутон, който претърсва описа с наличните гуми• В текстово поле визуализирайте списък с наличните гуми, който

включва производител, номер на модел, размер, инвентарен номер и цена

И така, формата за въвеждане на информацията за спуканата гума има две текстови полета, четири радио-бутона, един падащ списък и един бутон. Можете да ги подредите по различни начини върху формата, забавлявайки се и показвайки своите творчески способности.

Секция 04 - Казабланка, Мароко Страница 65 от 434

Page 66: CodeRulesBook2010 (Светът на програмирането – пътешествие)

За мен един от най-предизвикателните аспекти в програмирането е дизайна на формите. Това изисква да определя как ще изглежда формата и как ще бъдат подредени контролите върху нея. Формите са като платна за рисуване, а контролите като бои. И все пак трябва да внимавам. Трябва да съм сигурен, че формата ще прави точно това, което трябва. Тя трябва да отговаря на определени изисквания – да бъде лесна за използване и да не съдържа излишни компоненти. Когато създавам дизайна на формата, си задавам въпроса “Какво е предназначението на формата и какво трябва да прави?”

Също така трябва да съм сигурен, че формата изглежда добре – като мен! Тя не трябва да съдържа много цветове и неприятни визуални ефекти, като например мигащи текстове, които разсейват потребителя. Контролите върху формата трябва да са подходящо и логически подредени. Замислям се върху реда, в който потребителят въвежда информация и взаимодейства с формата. Понякога предупреждавам потребителя, че не е въвел цялата необходима информация или че информацията е грешна. Когато създавате дизайна на вашите форми трябва да мислите като потребител и да се опитате да си представите възможните начини, по които той ще взаимодейства с нея.

Накрая трябва да запомните, че всички Windows приложения изглеждат и действат по стандартен начин. Потребителят очаква вашето приложение да притежава определен дизайн и да се държи по определен начин. Например, първата команда от главното меню да бъде "File", а по-долу от нея да бъде разположена командата "Exit", с която програмата се затваря.

Потребителят ще бъде учуден и раздразнен, ако при натискането на бутон със заглавие "Calculate Results", цвета на формата стане червен, а заглавията на всички останали бутони станат латински.

Секция 04 - Казабланка, Мароко Страница 66 от 434

Page 67: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Използване на форми

Както вече знаете, когато създавате ново Windows приложение, Visual Studio 2010 автоматично добавя форма с име Form1.vb към проекта ви. Това е главната форма за вашето приложение. Потребителят ще я види, когато за стартира програмата ви. Главната форма е като централно управляващо табло. От нея потребителят може да достигне до всяка друга част на програмата. Често в горната си част главната форма притежава меню или лента с инструменти, които препращат потребителя към различните части на програмата.

В главната форма потребителят избира елементи от менюто или натиска бутони, за да отвори други форми. Тези форми могат да се използват за въвеждане и визуализиране на информация или за взаимодействие с програмата. Обикновено те имат специфично предназначение като показване на резултати, събиране на информация или определяне на програмни настройки. След като потребителят приключи работата си с тях, той ги затваря и се връща към главната форма. Независимо, че Visual Studio 2010 добавя към проекта ви само една форма, вие можете да създадете много други в зависимост от нуждите на приложението, което създавате.

Друг важен тип форма е диалоговият прозорец MessageBox. Вие вече го използвахте в програмата Hello World, за да визуализирате съобщение с текст "Hello World". Диалоговият прозорец MessageBox се използва за извеждане на съобщения със специална форма. След като потребителят прочете съобщението той може да затвори формата посредством натискане на бутона OK.

Да започваме! Ще създадете ваша форма, а именно формата за описание на спуканата гума. Върху нея ще добавите контроли и ще настроите свойствата им. Ще ви покажа как контролите отговарят на събития като например натискане на бутон, и ще преговорим наученото за диалоговия прозорец Messagebox.

Секция 04 - Казабланка, Мароко Страница 67 от 434

Полезен съвет

Form1.vb може да се преименува с по-описателно име. Това е желателно за всички приложения.

Полезен съвет

Учениците ще четат материалите с интерес, но на практика няма да правят това, което е описано в тях. За тях ще бъде по-добре, ако наистина правят това, което е описано в текста, затвърждавайки и преговаряйки материала от курса.

Page 68: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Свойства на формите

Когато създавате ново Windows приложение, Visual Studio 2010 автоматично добавя форма с име Form1.vb към проекта ви. Нейните размери по подразбиране са 300 на 300 пиксела. Ще попитате как разбрах какъв е размера на формата. Е, това е лесно да се провери като се използва прозореца Properties. Нещо повече, вие можете да промените размера на формата като използвате този прозорец.

Ще ви покажа как може да стане това. Първо, създайте ново Windows приложение с име Flat Tire. След това щракнете еднократно върху формата, за да я селектирате. Натиснете клавиша F4, за да отворите прозореца Properties.

1. Докато формата е селектирана, прозорецът Properties показва нейните свойства. Забележете, че свойството Text е маркирано по подразбиране.

Секция 04 - Казабланка, Мароко Страница 68 от 434

Page 69: CodeRulesBook2010 (Светът на програмирането – пътешествие)

2. Скролирайте нагоре списъка със свойствата и изберете свойството Size. Забележете, че пред него има знак плюс. Това показва, че свойството Size притежава няколко полета за въвеждане на

стойности.

3. Натиснете знака плюс до свойството Size. Ще видите свойствата Height и Width. Височината на формата е 300 и ширината й е 300. Променете ги.

4. Щракнете двукратно върху свойството Width, за да маркирате стойността му. Натиснете клавиша backspace, за да изтриете текущата стойност.

Секция 04 - Казабланка, Мароко Страница 69 от 434

Page 70: CodeRulesBook2010 (Светът на програмирането – пътешествие)

5. Въведете стойност 450 и натиснете клавиша Enter. Това е! Току що променихте ширината на формата. Забелязахте ли как се промени

съответстващата й стойност в свойството Size след като натиснахте клавиша Enter.

Секция 04 - Казабланка, Мароко Страница 70 от 434

Page 71: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Сега нека променим цвета на формата посредством нейното свойство BackColor. Скролирайте прозореца Properties, докато откриете свойството BackColor. Щракнете върху думата "Control". Отдясно ще се появи бутон с насочена надолу стрелка. Ще се отвори прозорец с палитра от цветове. Изберете страницата Custom. Щракнете двукратно върху цветния квадрат, за да изберете цвят. Аз бих избрал светло жълт. Погледнете формата сега!

Изградете проекта и стартирайте програмата. Забелязахте ли новия цвят на формата. Освен това тя вече не е квадратна, а правоъгълна!

Сега вече знаете как да променяте свойствата на формата като използвате прозореца Properties. Скролирайте списъка на прозореца и се запознайте с него. Той ви позволява да променяте свойствата на формата по време на дизайн, т.е. когато я

Секция 04 - Казабланка, Мароко Страница 71 от 434

Page 72: CodeRulesBook2010 (Светът на програмирането – пътешествие)

създавате. Както ще видите, прозорецът Properties не се използва само за промяна на свойствата на формите, а също така и на бутоните, текстовите полета и други контроли.

Секция 04 - Казабланка, Мароко Страница 72 от 434

Page 73: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Контроли и свойства

Знам, че можете да добавяте бутони върху формата, но нека направим една репетиция! Както виждате прозорецът Toolbox притежава и други контроли. Сега ще ви покажа как да използвате най-популярните от тях и как да настройвате най-често използваемите им свойства. Да започнем с етикетите.

Етикети

Контролът Label се използва за озаглавяване на самостоятелни или групи от контроли. Обикновено той се използва за издаване на инструкции или определяне на реда, в който трябва да се въвежда информацията във формата.

Отворете прозореца Toolbox и щракнете двукратно върху контрола Label. Контролът ще се появи на формата ви. Преместете го като държите натиснат левия бутон на мишката. Селектирайте го и отворете прозореца Properties. Прозорецът Properties визуализира списък със свойствата на контрола Label. Скролирайте го докато достигнете до свойството Text. Щракнете двукратно върху свойството и изтрийте стойността му. Въведете следния текст: "Enter License"

Текстово поле

Текстовото поле се използва, за да визуализирате или получите информация от потребителя. Отворете прозореца Toolbox и щракнете двукратно върху контрола Textbox. На формата ви ще се появи контрол с име Textbox1. Преместете го като държите натиснат левия бутон на мишката и го поставете отдясно на етикета Label1. Селектирайте го и отворете прозореца Properties. Скролирайте го докато достигнете до свойството Text. Щракнете двукратно върху свойството и изтрийте стойността му. Установете стойност False за свойството ReadOnly за да

Секция 04 - Казабланка, Мароко Страница 73 от 434

Полезен съвет

Всички контроли са обекти, но не всички обекти са контроли. Обект може да бъде всичко с изключение на свойство. Свойството е характеристика на обекта като например цвят.

Page 74: CodeRulesBook2010 (Светът на програмирането – пътешествие)

позволите на потребителя да въвежда текст в текстовото поле. False е стойността по подразбиране.

Текстовите полета често се използват за визуализиране на голямо количество информация. Ако действително текстът е дълъг, вие сигурно ще добавите ленти за скролиране. Поставете върху формата друго текстово поле. Задайте стойност True на неговото свойство Multiline. Установете ширината и височината му на 100 пиксела. Ако свойството Multiline е със стойност False, вие няма да можете да промените височината на текстовото поле. Задайте стойност Vertical на свойството Scrollbars. Установете стойност True за свойството ReadOnly, така че потребителят да не може да въвежда текст в полето.

Радио-бутони

Радио-бутоните се използват, за да се предостави избор на потребителя. Потребителят може да селектира само един радио-бутон от дадена група подобно на тест с множество отговори. Щракнете двукратно върху контрола Radio Button в прозореца Toolbox. На формата ви ще се появи контрол с име RadioButton1. Селектирайте контрола, щракнете върху него с десния бутон на мишката и изберете командата Copy от контекстното меню. Щракнете на произволно място върху формата. След това щракнете с отново с десния бутон на мишката и изберете командата Paste от контекстното меню. На формата ви ще се появи контрол с име RadioButton2. Повторете операцията Paste за да добавите още два радио-бутона с имена RadioButton3 и RadioButton4. Селектирайте контрола с име RadioButton1 и отворете прозореца Properties. Скролирайте списъка в прозореца до достигане на свойството и го променете от "RadioButton1" на "Left, Front". Променете свойството Text на останалите радио-бутони по следния начин: от RadioButton2 на "Left, Rear", от RadioButton3 на "Right, Front", от RadioButton4 на "Right, Rear".

Полета за отметка

Полетата за отметка също се използват, за осигуряване на потребителски избор. Потребителят може да селектира едно или повече полета за отметка от дадена група. Щракнете двукратно върху контрола CheckBox в прозореца Toolbox. На формата ви ще се добави контрол с име CheckBox1. Отворете прозореца Properties и задайте стойност "Rush Job" на свойството му Text.

Падащи списъци

Секция 04 - Казабланка, Мароко Страница 74 от 434

Page 75: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Падащият списък представя списък от елементи, които могат да се избират. Избраният от потребителя елемент се визуализира в текстовото поле на падащия списък. Щракнете двукратно върху контрола Combobox в прозореца Toolbox. На формата ви ще се добави контрол с ме ComboBox1. Отворете прозореца Properties и задайте стойност "Choose Tire Size" за свойството Text на контрола. Изберете свойството Items. Щракнете върху думата "Collection". Вдясно от нея ще се появи бутон с три точки. Натиснете този бутон, за да отворите прозорец, в който можете да въведете елементите на падащия списък. Всеки елемент трябва да е на отделен ред. На нов ред се преминава посредством натискане на клавиша Enter. Въведете стойностите 12, 13, 14 и 15. Натиснете бутона OK, з ада затворите прозореца.

Бутони за команди

Добавете бутон на формата. Задайте стойност "Get Tires" на свойството му Text. Задайте червен цвят за свойството му BackColor. Изберете свойството Font. Щракнете върху него, за да визуализирате бутончето с трите точки. В появилата се палитра на шрифта задайте стойност Bold за негов стил. Натиснете бутона OK, за да затворите палитрата.

Изградете приложението и стартирайте програмата. Щракнете върху различните контроли на формата. Какво се случва, когато щракнете върху падащия списък? Какво се случва, когато изберете един от радио-бутоните или маркирате полето за отметка? Въведете текст в текстовото поле до етикета Enter License. Забелязахте ли, че другото текстово поле е сиво и че не можете да въвеждате текст в него. Щракнете върху знака "X" в горния десен ъгъл на формата, за да затворите приложението.

Трябва да отбележим, че вие само създадохте формата. През това време, обаче се запознахте с няколко контроли и техните свойства. Следващата стъпка, за да направите формата работеща, е да добавите Visual Basic.NET код за формата и контролите.

Уверете се, че сте се запознали с различни свойства на контролите. Можете да разместите контролите върху формата така, че тя да стане по-подредена и лесна за използване. Можете да добавите и етикети, които показват предназначението на контролите и информацията, която представят. Как си представяте подредбата на контролите? Кой от тях ще бъде първи и кой последен?

Секция 04 - Казабланка, Мароко Страница 75 от 434

Полезен съвет

Учениците трябва ад използват прозореца Property, за да разгледат свойствата на контролите.

Page 76: CodeRulesBook2010 (Светът на програмирането – пътешествие)

В C# дизайна на форми е аналогичен на този във Visual Basic 2010. Това се дължи на Visual Studio 2010 средата. Отново трябва да отворите прозореца Toolbox и да поставяте контролите от него на формата. След това отворете прозореца Properties и настройте свойствата на контролите.

Секция 04 - Казабланка, Мароко Страница 76 от 434

Page 77: CodeRulesBook2010 (Светът на програмирането – пътешествие)

04 Пробвайте 01 Кой кой е

Желаете ли да научите повече за хората, които ви съпътстват в курса по програмиране? На този етап трябва да докажете, че можете да създадете форма и да инициализирате свойствата на обектите, поставени на нея като използвате Прозореца за свойства. Ако се справите успешно, ще научите повече за приятелите ви от курса.

Вземете шаблон 01 от секция 04 с изходен код от вашия учител или от уеб сайта на курса. Поставете проекта в самостоятелна директория. Ще получите две поддиректории (bin, obj) и 7 файла.

Отворете Visual Studio, изберете Existing Project и намерете файл с име WhosWho.sln. Като алтернативен вариант можете да използвате My Computer, за да откриете файла WhosWho.sln, след което да щракнете два двукратно върху него. проектът WhosWho ще се отвори в средата на Visual Studio.

Вашата задача е да добавите обекти върху формата посредством прозореца Toolbox така, че формата да изглежда като показаната по-долу. Също така трябва да актуализирате свойствата на обектите, както е описано по-долу.

Секция 04 - Казабланка, Мароко Страница 77 от 434

Page 78: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 04 - Казабланка, Мароко Страница 78 от 434

Page 79: CodeRulesBook2010 (Светът на програмирането – пътешествие)

1. Щракнете еднократно върху формата, за да я селектирате и променете името й на “Кой кой е?” от прозореца Properties.

2. Поставете две полета за отметка.Оставете имената им каквито са по подразбиране – CheckBox1 и CheckBox2. Променете текстовите им свойства съответно на “Покажи картинка” и “Покажи биография”.

3. Поставете пет радио-бутона. Променете текстовите им свойства на Ники, Клиф, Дърк, Джин и Ди Джей Вю. Оставете имената и каквито са по подразбиране: RadioButton1 – RadioButton5.

4. Поставете текстово поле с име TextBox1.

5. Поставете контрол за картинка с име PictureBox1. Използвайте Прозореца за свойствата, за да промените височината му на 160 и ширината му на 140. За целта щракнете върху знака “+”, намиращ се в полето за модифициране на размера.

6. Променете някои от свойствата на TextBox1. Редът, в който ще направите това е важен! Текстовото поле трябва да бъде достатъчно голямо, за да покаже няколко реда от биографията на съответния човек. Visual Basic няма да ви позволи да промените неговата височина преди да сте установили стойност True за свойството му Multiline. Ако текстовото поле е едноредово, то няма причина да се променя височината му. След като направите това, променете височината на текстовото поле на 180, а ширината му на 280. Накрая задайте стойност Vertical на свойството Scrollbars, за да позволите на текстовото поле да се скролира, ако текстът в него е по-голям.

7. Поставете бутон с име Button1. Променете текста му на ”Изход”.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 04 - Казабланка, Мароко Страница 79 от 434

Полезен съвет

Учениците добавят обекти в частично завършена програма. Те не пишат код.

Page 80: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Обработка на събития

Събитията се генерират от действията на потребителя. Например, когато потребителят натисне бутон, избира елемент от падащо меню или въвежда текст в текстово поле, се генерира събитие. Събития се генерират и когато потребителят щракне еднократно или двукратно върху контрол или премества курсора на мишката към и от контрол. Вие ще използвате тези събития, за да изпълнявате асоциирания към тях VB.NET код. Кодът на VB.NET определя това, което вашата програма трябва да прави.

Когато писахте програмата Hello World, щракнахте двукратно върху бутона, при което се отвори прозорец, в който въведохте кода за събитието Button1_Click event. Събитието Button1_Click е подразбиращо се за бутона. Всеки контрол има събитие по подразбиране, към което можете да асоциирате код като щракнете двукратно върху контрола в дизайн режим.

Например:

За контрола Button, подразбиращото се събитие е Click За контрола Textbox, подразбиращото се събитие е TextChanged За контрола RadioButton, подразбиращото се събитие е

CheckedChanged За контрола CheckBox, подразбиращото се събитие е

CheckedChanged За контрола ComboBox, подразбиращото се събитие е

SelectedIndexChanged За да ви покажа как става това, нека да добавим код за събитията

по подразбиране на контролите от формата за “спуканата гума”. Кодът ще визуализира диалогов прозорец със съобщение за контрола, който е генерирал събитието. В дизайн режим щракнете двукратно върху всеки един от контролите, които сте добавили на формата. Прозорецът за въвеждане на код ще се отвори за обработка на събитията за всички контроли. Копирайте следния ред код в обработчика на всяко едно от събитията.

MessageBox.Show(sender.GetType.Name)

Изградете приложението и го стартирайте. Щракнете върху отделните контроли на формата, променете текста в текстовото поле и изберете елемент от падащия списък. Подразбиращото се събитие за

Секция 04 - Казабланка, Мароко Страница 80 от 434

Page 81: CodeRulesBook2010 (Светът на програмирането – пътешествие)

всеки един от контролите ще бъде обработено, а типа на контрола, който го генерира, ще се визуализира в диалогов прозорец MessageBox.

Ако формата е част от истинско приложение, вие ще трябва да добавите конкретен код, за да му осигурите необходимата функционалност. Например, когато натиснете бутона Get Tires, в текстовото поле трябва да се визуализира списък с наличните гуми.

Секция 04 - Казабланка, Мароко Страница 81 от 434

Page 82: CodeRulesBook2010 (Светът на програмирането – пътешествие)

В C# контролите имат същите събития както във VB. Това се дължи на общата среда за изпълнение и общата среда за разработка – Visual Studio 2010 .

Диалоговият прозорец MessageBox

Често пъти ще ви се наложи да осигурите диалог между програмата и потребителя. Програмата може да изпрати съобщение на потребителя, да съхрани информацията от него или да получи потребителски вход. На практика тази комуникация във Visual Studio се реализира посредством диалоговия прозорец Messagebox.

В първата си програма вие написахте ред от код, който визуализираше диалогов прозорец Messagebox.

MessageBox.Show("Hello, World.")

Диалоговият прозорец Messagebox е тип форма, която е вградена във VB.NET. Вие не трябва да я добавяте, за да я използвате. Всичко, което трябва да направите, е да извикате метода Show() и да специфицирате текста, който желаете да се покаже. Синтаксисът, който трябва да използвате, е:

Обърнете внимание, че текстът, който желаете да се покаже, е обграден с кавички.

Хей, вижте кода за диалоговия прозорец MessageBox

в C#.

{MessageBox.Show("Hello World");}

Секция 04 - Казабланка, Мароко Страница 82 от 434

Полезен съвет

Понякога учениците щракват върху грешен контрол като етикет, създавайки обработчик на събитие. Обикновено, когато изтрият ненужния код, всичко е наред. Понякога VB създава допълнителен код към обработчика на събитие. Този код също трябва да бъде изтрит. При изграждането на приложението възникват грешки, така че такъв код лесно се открива.

Page 83: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 04 - Казабланка, Мароко Страница 83 от 434

Полезен съвет

Диалоговият прозорец MessageBox е по-сложна форма, която показва бутони, които потребителят може да натисне (Yes, No, Cancel). Програмистът може да установи кой бутон е натиснат от потребителя.

Например,Dim UserChoice as IntegerUserChoice = MessageBox.Show ("Въпрос?", vbYesNo, "заглавие")If UserChoice = vbYes Then ‘ "да" кодElse ‘ "не" кодEnd If

Page 84: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 04 - Казабланка, Мароко Страница 84 от 434

Page 85: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Влизане във Казабланка

Свършихме чудесна работа! Вече знаете защо обичам дизайна на формите толкова много! Знам, че сте готови за Казабланка! Пробвайте задачите, направете теста и вече ще бъдете готови да поемете по пътя на професионалния дизайнер на форми!

04 Пробвайте 02 Калкулиране цена на пица

Обичате ли пица? Съществуват програми, които позволяват на купувачите да пресметнат цената на поръчаната от тях пица.

Обзалагам се, че вие също можете да напишете подобна програма. Можете да подредите компонентите върху формата по ваше желание. Ние ще ви осигурим изходния код на програмата. Използвайте шаблон 02 от секция 04. намерете файла Pizza Price.sln. Щракнете двукратно върху него, за да го отворите с Visual Studio.

Вашата задача е да поставите обекти върху формата като използвате прозореца така, че тя да изглежда по следния начин.

Секция 04 - Казабланка, Мароко Страница 85 от 434

Page 86: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Необходими са ви три радио-бутона, два етикета и 8 полета за отметка. Не забравяйте да промените заглавието на формата. Текстът на втория етикет ще се променя в процеса на работа на програмата.

Програмата калкулира 5 лв. за базовия вариант на пицата, по 1 лв. за всяка месна допълнителна съставка и по 0.50 лв. за всяка зеленчукова допълнителна съставка. Изборът на средна пица увеличава цената и с 25%, а на голяма – 50%.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата. Ако програмата работи правилно, я покажете на вашия учител.

Продължение / Обобщение

Покажете формираната цена така, че да изглежда като парична сума. Visual Basic.NET предоставя функции за това. За целта подайте променлива на функцията FormatCurrency по следния начин:

FormatCurrency(MyVariable)

Добавете компонент за картинка, който ще визуализира подходяща картинка на пица.

Секция 04 - Казабланка, Мароко Страница 86 от 434

Полезен съвет

Функцията FormatCurrency работи със стойностите на променливите, а не с обекти. Прилагането и върху текстови полета не означава, че те ще бъдат форматирани. Това означава само, че текста в текстовото поле е форматиран в момента на прилагане на функцията. Ако съдържанието на текстовото поле се промени по-късно, форматирането ще изчезне, освен ако не се приложи отново.

Page 87: CodeRulesBook2010 (Светът на програмирането – пътешествие)

04 Можете ли? Морски шах

Преносимият компютър е удобен, когато човек пътува. Компютърната игра е начин за прекарване на времето, когато ви е скучно.

Ваша задача, ако се съгласите е да напишете класическата игра на Морски шах с Visual Basic. Дърк откри кода на програмата на неизвестен уеб сайт, но изходния код на формата липсваше. Вие трябва да създадете формата така, че да съответства на кода. Ако направите всичко правилно ще имате работеща игра Морски шах.

Вземете от вашия учител или от сайта на курса, ако се обучавате в Интернет, шаблона с изходен код от секция 04. Поставете го в собствена директория.

Отворете Visual Studio, от менюто File изберете командата Open Project и отворете файла TicTacToe.sln. Като алтернативен вариант можете да използвате My Computer, за да изберете файла TicTacToe.sln, след което да щракнете два пъти върху него. Средата на Visual Studio ще се отвори автоматично.

Вашата задача е да добавите обекти върху формата като използвате Прозореца Toolbox, така че формата да изглежда като тази по-долу. Също така трябва да обновите елементите в прозореца на свойствата както е описано по-долу.

Секция 04 - Казабланка, Мароко Страница 87 от 434

Page 88: CodeRulesBook2010 (Светът на програмирането – пътешествие)

1. Щракнете върху формата, за да установите фокуса върху нея. Променете нейното свойство текст на Tic Tac Toe.

2. Създайте 9 етикета и ги номерирайте от 1 до 9. Подредете ги така, че етикет 1 да бъде в горния ляв ъгъл на формата, а етикет 9 – в долния десен. Можете да спестите време като създадете един етикет, настроите свойствата му и след това го размножите 8 пъти. Задайте следните стойности на свойствата:

AutoSize FalseHeight 48Width 48Font Microsoft Sans Serif Bold

36BackColor Може да оставите сивия

цвят по подразбиране.Text Можете да оставите

текста по подразбиране.

3. Създайте етикет с номер 10 под предходните 9.

AutoSize FalseHeight 25Width 175Font Microsoft Sans Serif Bold

16BackColor Може да оставите

стойността по подразбиране.

Text Може да оставите стойността по подразбиране.

4. Създайте три етикета с номера от 11 до 13. Променете текста им на “X печели”, “O печели” и “Равен резултат”, както е показано в примера.

5. Създайте три текстови полета с номера от 1 до 3. Поставете ги непосредствено до етикетите , създадени в стъпка 4.

6. Създайте бутон с номер 1, както е показано. Променете текста му на “Нова игра”.7. Създайте бутон с номер 2, както е показано. Променете текста му на “Край”.

Секция 04 - Казабланка, Мароко Страница 88 от 434

Полезен съвет

Главното L’ на предишната страница представя първата буква на етикета, който е с главни букви.

Page 89: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Веднъж след като сте създали формата, изградете приложението. Ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата ви работи правилно, я покажете на учителя си.

Продължение / Обобщение Променете цвета на фона на формата. Променете шрифта на Microsoft Sans Serif Bold 10 на всички

бутони, текстови полета и др. Можете ли да промените шрифта на всички елементи едновременно като преди това щракнете върху тях при натиснат клавиш CTRL?

Добавете текстови полета за имената на играчите.

Секция 04 - Казабланка, Мароко Страница 89 от 434

Page 90: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане в Казабланка

Вече пристигнахме в Казабланка, Мароко и вие трябва да направите друг тест. Той ще ви помогне да отговорите на въпросите, които Комисията по състезанията ще ви зададе. Късмет!

Секция 04 - Казабланка, Мароко Страница 90 от 434

Page 91: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 05 – Кайро, Египет Страница 91 от 434

Page 92: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Свойства и методи

Свойства

Пътешествието до Казабланка беше забавно! Сигурна съм, че това е едно от любимите места на Клиф. Клиф знае доста за дизайна на формите и контролите. Той ви показа как да създадете форма с контроли и дори ви показа как да промените някои от свойствата на контролите като използвате прозореца Properties.

Аз ще карам до следващата ни дестинация – Кайро, Египет. Били ли сте там? Това е прекрасно място, разположено в делтата на река Нил. Кайро е най-големият град в Африка, който съществува повече от 6,000 години. По пътя ще ви разкажа повече за свойствата. Ще ви покажа как да ги прочитате и записвате като използвате Visual Basic код. След като научите свойствата на контролите, ще ви запозная и с методите на контролите.

Секция 05 – Кайро, Египет Страница 92 от 434

Page 93: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Началото на програмирането

Дизайна на формите и промяната на свойствата на контролите посредством прозореца Properties са забавни, но те са само началото! Прозорецът Properties е лесен за използване, но не е много гъвкав. Какво ще направите, ако потребителят желае да променя цвета на формата, когато работи с програмата ви? Какво ще направите, ако иска да промени размера или стила на шрифта? Как програмата ви ще знае, че потребителят е маркирал поле за отметка или е селектирал радио-бутон? Потребителите нямат достъп до прозореца Properties. Тогава как биха могли да направят нещата по-горе?

Добре, отговорът е: с Visual Basic код! Всичко това, дори повече може да се направи като използвате код. За да прочетете или запишете стойностите на свойствата, трябва да напишете код. Това е много лесно и в същото време могъщо! За мен оттук започва истинското програмиране.

Секция 05 – Кайро, Египет Страница 93 от 434

Page 94: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Къде ще напишете кода? Ще използвате страницата с кода на формата, която сте създали. В повечето случаи ще добавяте кода в обработчиците на събитията за контролите. Спомняте ли си асоциираното с бутона събитие? Когато потребителят изпълнява някакво действие, например натискане на бутон, кодът, който обработва събитието се изпълнява, а свойствата на контрола се четат или записват. Добавянето на код за обработка на събитията от контролите е първата стъпка към създаването на истинска работеща програма. Спомняте ли си формата за “спуканата гума”? Тя няма да може да прави каквото и да е преди да добавите код към нея.

Първо ще ви покажа няколко примера за начина, по който можете да четете

стойностите на свойствата на контролите като използвате Visual Basic код. След това ще ви покажа как да ги записвате.

Секция 05 – Кайро, Египет Страница 94 от 434

Page 95: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Прочитане на свойства посредством код

Нека да разгледаме няколко истински примера за начина, по който могат да се четат свойствата на контролите посредством Visual Basic код. Като начало ще ви покажа как да прочитате някои свойства, които обикновено се задават от прозореца Properties. След това ще ви покажа как да прочитате някои свойства, които потребителят може да променя, ползвайки програмата ви. Да вървим!

Създайте ново Windows приложение с име ReadProperties. Отворете прозореца Toolbox и добавете бутон на формата. Отворете прозореца Properties и задайте стойност "Read Text" за свойството Text на бутона.

Щракнете двукратно върху бутона, за да добавите код за обработка на събитието Button1_Click. Въведете следния код:

MessageBox.Show(Button1.Text)

Изградете и стартирайте приложението. Натиснете бутона "Read Text". Ще се появи диалогов прозорец със съобщение "Read Text" каквото е заглавието на бутона. Обърнете внимание, че кодът първоначално прочита стойността на свойството Text на бутона след, което я визуализира в диалогов прозорец. Впечатляващо!

Ето друг пример. Добавете друг бутон на формата. Използвайте прозореца

Properties Window, за да зададете стойност "Form Size" за свойството Text на бутона. Щракнете двукратно върху бутона, за да добавите код за обработка на събитието Button2_Click. Въведете следния код.

MessageBox.Show(Form1.ActiveForm.Height & "," & Form1.ActiveForm.Width)

Изградете и стартирайте проекта. Натиснете бутона "Form Size". Ще се появи диалогов прозорец със съобщение: 300,300 (или нещо близко до това в зависимост от размера на формата). Кодът визуализира стойностите на свойствата Height и Width на формата, разделени с точка! Прекрасно и същевременно просто!

Какви други свойства може да чете Visual Basic кодът? В действителност Visual Basic може да чете всички свойства на формата и нейните контроли, които са показани в прозореца Properties. Вашия код може да прочита свойства като Height и Width, BackColor, ForeColor, и местоположения, определени от X и Y координати. Някои от свойствата, показани в прозореца Properties, се задават при създаването на формата и не се променят при стартирането на програмата. Ето защо тяхното прочитане не е от особено значение.

Секция 05 – Кайро, Египет Страница 95 от 434

Page 96: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Действително полезно е да четете свойствата на контролите, които потребителят може да промени, когато използва програмата ви. Такива са свойството Text на текстовото поле и свойството Checked на полето за отметка. Това е начинът вашата програма да получава информация от потребителя. Какъв регистрационен номер въведе Джин? Коя гума е спукана? Какъв размер гума избра Cliff?

Ето и някои практически примери. Нека да напишем код, който показва дали дадено поле за отметка е маркирано. Отворете прозореца Toolbox и добавете поле за отметка и трети бутон върху формата. Отворете прозореца Properties и задайте стойност "Check Me" за свойството Text на бутона. Щракнете двукратно върху бутона, за да добавите код за обработка на събитието Button3_Click.

Въведете следния код

MessageBox.Show(CheckBox1.Checked)

Изградете и стартирайте приложението. Натиснете бутона "Check Me". Какво съобщение визуализира диалоговият прозорец? Маркирайте полето за отметка и натиснете бутона "Check Me" отново. Какво съобщение визуализира диалоговият прозорец сега? Всеки път, когато натиснете бутона, диалоговият прозорец ще показва

Секция 05 – Кайро, Египет Страница 96 от 434

Полезен съвет

Учениците трябва да знаят как да прочитат и променят свойствата посредством код. Допреди да изучат оператора If, те са ограничени във възможността да направят програмите си интересни.

Page 97: CodeRulesBook2010 (Светът на програмирането – пътешествие)

съобщение с текущата стойност на свойството Checked на полето за отметка. Тя може да бъде True или False.

Секция 05 – Кайро, Египет Страница 97 от 434

Page 98: CodeRulesBook2010 (Светът на програмирането – пътешествие)

А сега един последен пример. Ще ви покажа как да визуализирате текста, който потребителят въвежда в текстово поле.

Добавете текстово поле върху формата. Отворете прозореца Properties и се уверете, че стойността на свойството ReadOnly е False. Задайте стойност "Type Here" на свойството Text. Добавете четвърти бутон и задайте стойност "Read Text" за неговото свойството Text. Щракнете двукратно върху бутона, за да добавите код, който ще обработва събитието Button4_Click. Въведете следния код

MessageBox.Show(TextBox1.Text)

Изградете и стартирайте приложението. Щракнете двукратно в текстовото поле и натиснете клавиша Backspace, за да изтриете съдържанието му. Въведете някакъв текст. Натиснете бутона "Read Text". Какво съобщение показва диалоговият прозорец? Променете текста в текстовото поле и отново натиснете бутона "Read Text". Какво се случва?

В C# свойствата на контролите се прочитат по аналогичен на Visual Basic начин. Ето пример на C#, който показва стойността на свойството Text на текстово поле:

{MessageBox.Show(textBox1.Text);}

С изключение на фигурните скоби и точката и запетая в края на реда, кодът изглежда както на Visual Basic. Също така в C# обектът textBox1 се пише с малка буква “t”.

Примерите, които ви показах, илюстрират как посредством Visual Basic код можете да четете свойствата на контролите. Това, обаче е само едната страна на нещата, тъй като Visual Basic кодът може да се използва и за записване на нови стойности за свойствата.

Секция 05 – Кайро, Египет Страница 98 от 434

Page 99: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Записване на свойства посредством код

Прекрасно е, че можем да прочитаме свойствата на контролите посредством Visual Basic код. Това е начинът, по който могат да се прихванат действията на потребителя при изпълнението на програмата. В зависимост от тези действия програмата може да продължи изпълнението си по различни начини. Как бихте могли да промените свойствата на някои от контролите, когато потребителят стартира програмата? Например, искам винаги, когато потребителят е стартира програмата полето за отметка "Rush Job" да бъде маркирано. Искам винаги когато потребителят натисне бутона "Get Tires" наличните размери на гумите да се визуализират в текстово поле. След като потребителят въведе регистрационния си номер, искам наличните размери на гумите да се попълват в падащия списък.

Разбира се Visual Basic кодът ми позволява да направя всичко това! Задаване на нови стойности за свойствата на контролите е също толкова лесно,както тяхното прочитане. За да направите това, използвайте оператора за присвояване. Спомняте ли си оператора за присвояване, който разгледахме? Този оператор присвоява стойността на една променлива или свойство на друга променлива или свойство. Кодът с оператор за присвояване изглежда като обикновено равенство в математиката.

TextBox1.Text = "Code Rules"

Първо се изчислява дясната страна на равенството. След това получената стойност се присвоява на лявата страна на равенството.

Секция 05 – Кайро, Египет Страница 99 от 434

Полезен съвет

Напомняйте постоянно на учениците, че .Net езиците изпълняват присвояването отдясно наляво.

Важно правило е, че всичко от дясната страна на знака равно не се променя. Стойностите на променливите отдясно се изчисляват, след което се присвояват на променливата отляво. Само променливата отляво се променя.

Page 100: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ето някои примери за това как да задавате нови стойности за свойствата на контролите посредством Visual Basic код. Първият пример задава нова стойност на свойството Text на текстово поле. Това е прекрасен начин да изведете информация за потребителя, вместо да използвате диалогови прозорци. Създайте ново Windows приложение с име Set Properties. Върху формата добавете две текстови полета и един бутон. Използвайте прозореца Properties, за да зададете стойност "Set Text" за свойството Text на бутона. Изчистете текста от двете текстови полета като щракнете двукратно върху свойствата им Text и натиснете клавиша Backspace. Щракнете двукратно върху бутона, з ада добавите код за обработка на събитието Button1_Click. Въведете следния код:

TextBox2.Text = TextBox1.Text

Изградете и стартирайте приложението. Въведете някакъв текст в първото текстово поле и натиснете бутона "Set Text". Какво се случва? Както виждате текста от първото текстово поле се копира във второто текстово поле. Свойството Text на второто текстово поле приема стойността на свойството Text за първото текстово поле. Visual Basic кодът прочита свойството Text на първото текстово поле и след това го използва, за да зададе стойност за свойството Text на второто текстово поле. Много удобно, нали!

Нека да напишем код, който автоматично маркира едно поле за отметка и автоматично премахва отметката в друго такова, когато програмата се стартира от потребителя. Добавете поле за отметка върху формата и задайте стойност "Rush Job" за свойството му Text като използвате прозореца Property. Добавете второ поле за отметка и задайте стойност "Whenever" за свойството му Text. Щракнете двукратно върху формата (извън двете полета за отметка). Ще се отвори обработчика на събитието Form1_Load. Кодът, който обработва това събитие, се изпълнява когато формата се създава и визуализира на екрана. Въведете следния код:

CheckBox1.Checked = TrueCheckBox2.Checked = False

Изградете и стартирайте приложението. Кое от двете полета за отметка е маркирано? При зареждането на формата свойството Checked на двете полета за отметка се установява автоматично.

Секция 05 – Кайро, Египет Страница 100 от 434

Page 101: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Знам, че 14 е най-често използвания размер за гуми. Нека да напишем код, който автоматично да селектира 14 от падащия списък за избор на размер на гума. Първо, добавете падащ списък върху формата. Използвайте прозореца Properties, за да зададете елементите на списъка както следва: 12,13,14,15, и 16. Не забравяйте да използвате клавиша Enter, за да разположите всеки елемент на отделен ред. Щракнете двукратно върху формата (извън падащия списък), за да създадете обработчик на събитието Form1_Load. Въведете следния код:

ComboBox1.SelectedItem = "14"

Изградете и стартирайте приложението. Кой елемент е избран в падащия списък? Ох, сбърках! Най-често използвания размер на гумите е 13. Как ще промените кода, така че в падащия списък да се селектира автоматично 13?

В C# можете да задавате нови стойности на свойствата подобно на Visual Basic. Кодът по-долу показва как можете да промените свойството Checked на поле за отметка посредством код на C#.

{checkBox1.Checked = True;}

Секция 05 – Кайро, Египет Страница 101 от 434

Page 102: CodeRulesBook2010 (Светът на програмирането – пътешествие)

05 Пробвайте 01 Дъга

Впечатлени от цветовете на видяна от тях небесна дъга нашите спътници решиха да проверят кой би могъл да я представи с подходяща програма.

Вашата задача е да докажете, че можете да променяте свойствата на обектите посредством истински VB код, а не само като използвате Прозореца за свойства.

Отворете Visual Studio 2010 , изберете командата Open Project от менюто File и намерете файл с име Rainbow.sln. Като алтернативен вариант използвайте My Computer, за да откриете файла Rainbow.sln, след което щракнете двукратно върху него. Средата на Visual Studio ще отвори файла автоматично.

Добавете обекти върху формата като използвате прозореца Toolbox така, че да изглежда както показаната по-долу. Също така променете елементите в прозореца с изходен код както е описано по-долу.

1. Щракнете върху формата, за да установите фокуса върху нея. Променете заглавието й на “Дъга”.

2. Добавете контрол за визуализиране на картинка с име PictureBox1.

3. Добавете два бутона с имена Button1 и Button2. Озаглавете първия като “Standard Colors”, а втория – като “Custom Colors”.

Секция 05 – Кайро, Египет Страница 102 от 434

Page 103: CodeRulesBook2010 (Светът на програмирането – пътешествие)

4. Щракнете двукратно върху първия бутон, за да видите съществуващия за него код. Както се вижда за изрисуване на дъгата са предвидени седем цвята. За сега използваният цвят е черен. Ваша задача е да промените кода така, че да използвате стандартните седем цвята: Red, Orange, Yellow, Green, Blue, Indigo, Violet. Като пример заменете кода:

MyPen.Color = System.Drawing.Color.Black

Със следния код

MyPen.Color = System.Drawing.Color.Red

Непосредствено след като сте поставили точката след обекта Color ще се

появи списък с всички дефинирани в средата на Visual Studio цветове.

5. Щракнете двукратно върху втория бутон, за да видите съществуващият за него код. Вместо черен цвят изберете произволни седем цвята по ваше желание.

Изградете приложението и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на учителя си.

Задача с повишена трудност

Ако желаете можете да промените параметрите на функцията DrawArc, за да получите по-интересни резултати.

Секция 05 – Кайро, Египет Страница 103 от 434

Полезен съвет

Функцията DrawArc на практика е в елипсовидни граници, определени от правоъгълник. Параметрите определят размера на правоъгълника, където дъгата се вписва. Промяната на тези параметри ще доведе до интересни ефекти.

Page 104: CodeRulesBook2010 (Светът на програмирането – пътешествие)

IntelliSense и точковата нотация

Сега вече знаете как да пишете код на Visual Basic, за да четете и записвате свойствата на формите и контролите върху нея. Мога да се обзаложа какъв ще бъде следващия ви въпрос. Как бихте могли да запомните всички свойства на формите и контролите? Със сигурност не е удобно да превключвате непрекъснато между прозорците, визуализиращи кода и свойствата. Няма ли по-лесен начин?

Да, има. Нарича се IntelliSense. Това е помощно средство на Visual Studio. IntelliSense спестява доста време, когато пишете код в прозореца Code, тъй като знае кой контрол използвате и какви свойства има. IntelliSense показва списък със свойства и ви позволява да изберете това, което желаете да използвате. При визуализирането на списъка е маркирано най-често използваното свойство. Такова например е свойството Text на текстовото поле. Използвайте горната и долната стрелка от клавиатурата, за да откриете необходимото ви свойство. Избраното свойство се добавя към кода при натискането на клавиша Tab. Използвайки IntelliSense вие не трябва да помните всички свойства на контролите. Едновременно с това пишете по-малко! Аз използвам това помощно средство през цялото време.

Секция 05 – Кайро, Египет Страница 104 от 434

Полезен съвет

Ако е възможно покажете Intellisense. Поставете точка и изчакайте да се покаже списъка за избор. Ако той не се покаже, то променливата не е декларирана или е написана неправилно.

Page 105: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пробвайте! Създайте ново Windows приложение с име IntelliSense. Добавете текстово поле и бутон върху формата. Щракнете двукратно върху бутона, за да създадете обработчик на събитието Button1_Click.

1. Напишете TextBox1 и натиснете клавиша със знака за точка (.). Както виждате IntelliSense показва списък със свойствата на контрола TextBox1. Тъй като контролът TextBox1 е текстово поле, показаният списък е актуален за всички текстови полета, които ще добавите върху формата. Селектирано по подразбиране е най-често използваното свойство за контрола. В нашия случай това е свойството Text.

2. Натиснете клавиша с буквата "R". IntelliSense селектира първото свойство в списъка, което започва с буквата "R". Ако продължите да пишете IntelliSense ще открива свойството, което най-много съвпада с въведеното от вас.

Секция 05 – Кайро, Египет Страница 105 от 434

Page 106: CodeRulesBook2010 (Светът на програмирането – пътешествие)

3. Използвайте долна стрелка, за да откриете свойството Text. Изберете го.

4. Натиснете клавиша Tab. Вижте какво се случва! Свойството Text се добавя в кода ви след обекта TextBox1. Сега напишете ="Clifford". Кодът трябва да изглежда по следния начин:

5.TextBox1.Text = "Clifford"

Не е ли лесно и бързо? IntelliSense ви помага да ограничите грешките в синтаксиса.

Секция 05 – Кайро, Египет Страница 106 от 434

Page 107: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Сигурно сте забелязали, че преди всеки елемент от списъка, който IntelliSense визуализира, има икона. Тази икона обозначава свойствата като ръка, показваща списък, а методите като пурпурна кутийка или пурпурен диамант. (Ще ви запозная с методите след малко.) В зависимост от контрола можете да видите и други икони, представящи допълнителни атрибути.

Забелязахте ли, че написахте точка преди IntelliSense списъка да се появи? Това се дължи на факта, че Visual Basic използва тип синтаксис, наречен "Точкова Нотация". След като напишете името на контрола, като TextBox1 например, вие поставяте точка. След това въвеждате и името на свойството. Точката свързва контрола с неговото свойство. Ето базовия синтаксис за референция към свойство на контрол или форма с използване на точкова нотация:

FormName.FormProperty() ControlName.ControlProperty()

Вече видяхте много примери, но ето още няколко:

TextBox1.Text CheckBox1.Checked() Form1.ActiveForm.Height

Знаете, че точката свързва контрола с неговото свойство. В последния пример ActiveForm е свойство на формата с име Form1, а Height е свойство на ActiveForm.

Секция 05 – Кайро, Египет Страница 107 от 434

Page 108: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Поради това са необходими две точки, за да се свържат и двете свойства. IntelliSense знае кога дадено свойство има свое собствено свойство. Ако се съмнявате, поставете друга точка и IntelliSense ще покаже списък с наличните свойства. Ако такъв списък не се покаже, то допълнителни свойства няма и вие трябва да премахнете последната написана точка. Това може да се случи и ако сте сгрешили името на контрола.

IntelliSense е достъпно средство и когато разработвате C# приложения с Visual Studio. То работи по същия начин както при Visual Basic. Само трябва да напишете името на контрола и да поставите точка след него. IntelliSense ще покаже списъка със съществуващите за контрола свойства и методи. Тъй като C# и Visual Basic са базирани на .NET Framework, списъкът със свойствата и методите на всички контроли е еднакъв за всички езици.

Секция 05 – Кайро, Египет Страница 108 от 434

Page 109: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Методи

Вероятно сте забелязали, че някои от елементите в списъка, визуализиран IntelliSense, имат икона с пурпурен диамант. Това не са свойства,за методи. Свойствата са характеристики на контролите.Например цвета, броят места и големината на двигателя са характеристики на автомобила. Методите са действия, който контролът може да извършва. Например, действията, които автомобилът може да извършва, са потегляне, завиване на ляво или дясно и спиране. Методите не са достъпни посредством прозореца Properties. Те трябва да се извикват посредством код.

Например, повечето контроли имат методи Hide и Show. Когато извикате метода Hide, контролът не е видим, но все още е на формата. Когато извикате метода Show, контролът става видим. Някои методи ви позволяват да извършвате действия, които обикновено се изпълняват от потребителя. Например, бутонът притежава метод PerformClick, който предизвиква неговото натискане, имитирайки действие от страна на потребителя.

Някои методи изискват допълнителна информация, когато ги извиквате. Тази информация определя начина, по който методът ще се изпълни и резултата, който ще се получи. Тя се задава на метода под формата на т.нар. аргументи. Всеки метод може да изисква един или повече аргумента, някои от които не са задължителни.

Например, методът Show на диалоговия прозорец Messagebox приема като аргумент низ от символи, определящ съобщението, което ще се визуализира. Вие вече използвахте този метод, но вероятно не сте разбрали, че сте извикали метод с аргумент.

MessageBox.Show("Hello World")

Секция 05 – Кайро, Египет Страница 109 от 434

Page 110: CodeRulesBook2010 (Светът на програмирането – пътешествие)

В кода по-горе текстът "Hello World" е аргумент на метода Show. Аргументът определя какво съобщение ще се визуализира в диалоговия прозорец.

Запомнете, че основната разлика между методите и свойствата е, че методите могат да изпълняват действия. Методите могат да бъдат извиквани посредством код и не са достъпни от прозореца Properties. Някои методи изискват един или повече параметъра (аргументи) или връщат някаква стойност, която можете да използвате в кода си.

Секция 05 – Кайро, Египет Страница 110 от 434

Page 111: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Извикване на методи

Синтаксисът за извикване на методи е подобен на този за четене и записване на свойствата. За да свържете контрола с неговия метод, можете да използвате точковата нотация. Някои методи като Button.Hide и Button.Show не приемат аргументи. Други, като MessageBox.Show, трябва да получат аргумент, за да знаят какво да правят. Синтаксисът за извикване на метод е следният:

ControlName.MethodName (argument1, argument2, ...)

Запомнете, че трябва да подадете аргумент на метода Show, когато използвате диалоговия прозорец MessageBox:

MessageBox.Show("Hello World")

Както можете да видите, съществена разлика между извикването на метод и прочитането или записването стойност на свойство е, че не се използва знакът за равенство.

Нека да разгледаме някои от любимите ми методи и начина, по който могат да

бъдат извикани. Ще ви науча как да скривате и показвате контролите върху формата, да изтривате текста от текстовите полета и да задавате местоположението на курсора. Като начало създайте ново Windows приложение с име Methods. Добавете върху формата два бутона и едно текстово поле. Озаглавете единия бутон като "Show", а другият като "Hide". В обработчика на събитието Button1_Click добавете следния код.

TextBox1.Show()

В обработчика на събитието Button2_Click добавете следния код.

TextBox1.Hide()

Изградете и стартирайте приложението. Натиснете бутона "Show" и бутона "Hide". Всеки път, когато натиснете бутон, извиквате метод на контрола Button.

Секция 05 – Кайро, Египет Страница 111 от 434

Page 112: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Добавете трети бутон. Озаглавете го като "Reset". В обработчика на събитието Button3_Click добавете следния код.

TextBox1.ResetText()TextBox1.Focus()

Методът ResetText изчиства съдържанието на свойството Text на текстовото поле.

Методът Focus поставя курсора на мишката в текстовото поле. Изградете и стартирайте приложението. Въведете някакъв текст в текстовото

поле и натиснете бутона “Reset”. Текстът в текстовото поле се изтрива и курсорът автоматично се позиционира в него, подготвяйки го за ново въвеждане на текст.

Както можете да предположите, можете да извиквате методи и в C# подобно на Visual Basic. Ето C# код, който изчиства текста от текстово поле и позиционира курсова на мишката в него.

{textBox1.ResetText();textBox1.Focus();

}

Секция 05 – Кайро, Египет Страница 112 от 434

Полезен съветАлтернативен вариант на TextBox1.ResetText()е да присвоите празен низTextBox1.Text = “”Между кавичките няма нищо.

Page 113: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане в Кайро

Ето ни в покрайнините на Кайро, Египет. Научихме доста по пътя. Вече можете да четете и задавате стойности за свойствата на контролите и да извиквате техните методи посредством Visual Basic код. Както видяхте по-голямата част от кода се пише в обработчиците на събитията. За да създадете такъв обработчик, трябва само да щракнете двукратно върху контрола. Прозорецът Code ще се отвори автоматично и обработчика на събитието ще бъде готов за въвеждане на код. За да прочетете или запишете свойство, или извикате метод, трябва да напишете името на контрола, последвано то точка. Помощното средство IntelliSense ще визуализира списък със съществуващите за контрола свойства и методи. Изберете свойството или метода, който ви е необходим, и натиснете клавиша Tab, за да го добавите към кода си.

Имаме достатъчно време, за да изпълним една или две задачи и да направим теста. Готови ли сте?

Секция 05 – Кайро, Египет Страница 113 от 434

Page 114: CodeRulesBook2010 (Светът на програмирането – пътешествие)

05 Пробвайте 02 Измервателен инструмент

Картата, проследяваща пътуването ни, мотивира Ники да постави като задача създаването на програма, която да показва процента от изминалия път при достигането на всеки един от градовете. Избрахме нашата задача да включва градовете до пристигането в Сеул, Корея.

Вашата задача е да докажете, че можете да променяте свойствата на обектите посредством истински VB код, а не само като използвате прозореца за свойства.

Отворете Visual Studio, изберете командата New Project от менюто File и създайте проект с име Trip Meter.

Добавете обекти върху формата като използвате прозореца Toolbox така, че да изглежда както показаната по-долу. Също така променете елементите в прозореца с изходен код както е описано по-долу.

Секция 05 – Кайро, Египет Страница 114 от 434

Page 115: CodeRulesBook2010 (Светът на програмирането – пътешествие)

1. Щракнете върху формата, за да установите фокуса върху нея. Променете заглавието й на “Измервателен инструмент”.

2. Добавете 21 радио-бутона. Задайте им ширина от 150 пиксела. Можете да създадете един радио-бутон, след което да го размножите.

3. Подравнете елементите вертикално и ги поставете на равни разстояния един от друг. Знаете ли, че съществуват бутони от лентата с инструменти, които могат да направят това автоматично? Позиционирайте курсора на мишката върху лентата с инструменти, намерете подходящия бутон и го натиснете.

Секция 05 – Кайро, Египет Страница 115 от 434

Page 116: CodeRulesBook2010 (Светът на програмирането – пътешествие)

4. Променете текста на радио-бутоните както следва:

Начало:Копенхаген, ДанияМилано, ИталияБарселона, ИспанияКазабланка, МарокоКайро, ЕгипетДамаск, СирияСофия, БългарияКиев, УкрайнаКатманду, НепалКуала Лумпур, МалайзияПекин, КитайСеул, КореяУлан Батор, МонголияМосква, Русия, Хелсинки, ФинландияСтокхолм, ШвецияОсло, НорвегияЛондон, БеликобританияПариж, ФранцияВиена, Австрия

5. Добавете бутон със заглавие Край и име End. Щракнете двукратно върху него, за да видите асоциирания към него код. Напишете думата End в процедурата, обработваща събитието Button1_Click.

6. Поставете вертикална лента за скролиране върху формата. По подразбиране лентата за скролиране приема стойности от 0 до 100, поради което индикаторът й е голям и се премества малко. За да промените това, задайте стойност 1500 на нейното свойството Maximum.

7. Сега вече можете да пишете код. Щракнете двукратно върху първия радио-бутон. В процедурата, обработваща събитието RadioButton1_Click поставете следния ред.

VScrollBar1.Value = 0

Този код ще премести индикатора на лентата за скролиране на позиция 0 в диапазона 0 – 1500.

За всеки от останалите радио-бутони, използвайте подобен код, като всеки път увеличавате позицията на индикатора с 75. последната стойност трябва да бъде 1500.

Изградете приложението и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Секция 05 – Кайро, Египет Страница 116 от 434

Page 117: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ако програмата работи правилно, я покажете на учителя си.

Секция 05 – Кайро, Египет Страница 117 от 434

Page 118: CodeRulesBook2010 (Светът на програмирането – пътешествие)

05 Можете ли? Цветя

Цветята създават приятно усещане. Ето защо мисля, че трябва да създадем програма за тях.

Създайте подобна на показаната по-долу форма:

1. Задайте стойност False на свойството Visible за компонентите, показващи картинки.

2. Задайте стойност Fixed3D на свойството BorderStyle за компонентите, показващи картинки.

3. Задайте стойност AutoSize на свойството SizeMode за компонентите, показващи картинки.

4. Задайте стойност на свойството Image така, че всеки от компонентите да визуализира едно от изображенията, намиращи се в директорията на проекта.

5. Отворете

страницата с изходен код. Точно над нея има два падащи списъка. От левия изберете label1, а от десния MouseHover.

6. Използвайте събитието Label1.Mousehover, за да установите стойност True на свойството Visible за компонента PictureBox1. Установете стойност False за същото свойство на останалите три компонента.

Секция 05 – Кайро, Египет Страница 118 от 434

Page 119: CodeRulesBook2010 (Светът на програмирането – пътешествие)

7. Направете същите промени за останалите три етикета.

8. В резултат, когато мишката премине през някой от етикетите, програмата трябва да показва само една картинка.

Ако програмата работи правилно, я покажете на вашия учител.

Продължение / Обобщение

Осигурете променяна в цвета на формата при промяна на избраната картинка.

Секция 05 – Кайро, Египет Страница 119 от 434

Полезен съвет

Някои студенти ще обработят събитието MouseHover за полето с картинка. Инструкциите изискват да се обработи същото събитие, но за етикета, който показва наименованието на цветето.

Page 120: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Тъй като пристигнахме в Кайро, Египет, трябва да направите друг тест. Късмет!

Секция 05 – Кайро, Египет Страница 120 от 434

Page 121: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 06 – Дамаск, Сирия Страница 121 от 434

Page 122: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Дамаск

Потегляме към Дамаск, Сирия. Дамаск е разположен в югоизточната част на Сирия от двете страни на реката Барада. По-голямата част от града, в която се намира антично правоъгълно селище, е на южния бряг на реката.

По пътя за Дамаск, ще ви науча за типовете данни, като низове от символи и цели числа. Когато задавате свойствата на контролите посредством код, трябва да се сигурно, че работите с правилния тип данни. През по-голямата част от пътуването ни, ще говорим за променливите и начина, по който те се използват в кода. Променливите се използват за съхраняване на данни от различен тип. Те са основната градивна единица на кода. Знам, че схващате бързо и ще започнете да ползвате променливите в кода си толкова много, колкото аз и Ники.

Секция 06 – Дамаск, Сирия Страница 122 от 434

Page 123: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Оператор за присвояване

Ники ни подкани да започнем с писане на реален и полезен Visual Basic код. Знаете как да четете и записвате стойности за свойствата на контролите. Знаете ли, че когато задавате стойност на свойство, използвате оператора за присвояване? Вече говорихме за това. Операторите за присвояване установяват стойността на една променлива на друга променлива. Кодът, илюстриращ това, изглежда като математическо равенство.

TextBox1.Text = "Code Rules"

Едно от нещата, които трябва да знаете за оператора за присвояване е, че дясната страна на равенството (частта от дясно на знака равно) се изчислява първа. След това лявата страна на равенството (частта от ляво на знака равно) приема изчислената стойност. Изглежда обратно, но това е начина, по който програмата работи. В кода по-долу първо се определя низът "Code Rules". След това получената стойност се записва в текстовото поле.

TextBox1.Text = "Code Rules"

Секция 06 – Дамаск, Сирия Страница 123 от 434

Page 124: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Типове

Друго нещо, което трябва да запомните, че лявата и дясната страна на равенството трябва да са от един и същ тип (текст, число, цвят и т.н.). Ще ви покажа какво имам предвид като използвам кода от следния пример:

TextBox1.Text = "Code Rules Rocks"

В лявата страна на равенството е свойството Text на контрола TextBox1, което винаги трябва да приема низ от символи, така че дясната страна също трябва да бъде низ от символи. Ако дясната страна е от различен тип, при изграждането на програмата ще се появи грешка. Тъй като "Code Rules Rocks" е низ от символи, а свойството Text изисква точно такъв тип стойност, то грешка няма да възникне. Следният код няма да се компилира, защото се опитваме да присвоим на свойството Text, което очаква низ от символи, стойността на свойството ForeColor, което е от тип цвят.

TextBox1.Text = TextBox1.ForeColor 'грешен резултат

Следният код е правилен, защото дясната страна на равенството е от целочислен тип, а свойството Height може да приема само целочислени стойности.

TextBox1.Height = 200

Кодът, който следва е грешен, защото дясната страна е дробно число..

TextBox1.Height = 200.5

Запомнете, че винаги когато използвате оператор за присвояване, лявата и дясната страна на равенството трябва да бъдат от един и същ тип.

Секция 06 – Дамаск, Сирия Страница 124 от 434

Полезен съвет

Visual Basic често успешно преобразува несъответстващите типове данни. Това обаче не винаги е гарантирано, така че трябва да се задават правилни типове за данните. C# допуска още по-малко несъответствия в типовете.

Page 125: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Прости типове

Средата за програмиране поддържа набор от типове наречени прости или примитивни типове. Вече използвахте типа string, за да зададете стойност на свойството Text на бутона, и типа integer, за да зададете стойност на свойството Height на формата. Дори използвахте типа Boolean (Истина или Лъжа) за да зададете стойност на свойството Visible на текстовото поле.

Някои от най-често използваните прости типове са: String (текст), Integer (цели числа), Single (десетични числа) и Boolean (Истина или Лъжа). Те са основни за всички .NET езици за програмиране като Visual Basic.NET и C#.

Ето някои примери за позволените от тези примитивни типове стойности:

Тип Пример ОписаниеString "Hello" Текстът трябва да е в кавичкиInteger 123 Цели числа без десетична точкаSingle 55.12 Числа с десетична точкаBoolean True Използват се само стойности True или False

Секция 06 – Дамаск, Сирия Страница 125 от 434

Полезен съвет

Повечето ученици се затрудняват с правилото, че число като например 1, не е еквивалентно на символа “1”. Двоичното представяне на числото е 00000001. Двоичното представяне на символа е 00110001. Определено те не са еднакви.

Visual Basic скрива това, защото опитва да направи преобразуване, ако е необходимо. Например,Dim A as Integer = 1Dim B as String = “1”If (A = B) Then

Кодът по-горе връща стойност True въпреки факта, че вътрешното представяне е различно.

Напомнете на учениците да не използват директно свойството Text на текстовото поле в аритметични операции.

Page 126: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Разгледайте примерите по-долу, които използват оператора за присвояване, за задаване стойности на свойства от различни типове:

TextBox1.Text = "Smile" TextBox1.Visible = True TextBox1.Width = 1000

Ето и нещо хубаво! Тъй като C# поддържа същите прости типове както Visual Basic - String, Integer, Single, Boolean и всички останали.

Секция 06 – Дамаск, Сирия Страница 126 от 434

Page 127: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Какво представляват променливите?

Променливите се използват в кода ви, за да пазят информация, която

може да бъде необходима по-късно. Те са като променливите в

математиката. Използват се за задаване и съхраняване на стойности.

Тяхната стойност може да бъде променена по всяко време.

В кода променливите се използват за "запомняне" на информация. Ако

кодът ви не работи с променливи, програмата ще спира да пита

потребителя за конкретна информация веки път, когато й е

необходима такава. Представете си, че на програмата й трябва

информация за възрастта на потребителя три пъти по време на

изпълнението й. Няма ли да бъде досадно да спира и да пита

потребителя за възрастта му три пъти?

Въведи възрастта си.

Въведи възрастта си.

Въведи възрастта си.

Използвайки променливи, програмата ще попита потребителя за

възрастта му еднократно. Полученият отговор ще се съхрани в

променлива, която ще се използва от кода всеки път, когато е

необходимо.

Секция 06 – Дамаск, Сирия Страница 127 от 434

Page 128: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Защо използваме променливи?

Както видяхте, променливите съхраняват данни при изпълнението на програмата. Те намаляват информацията, която потребителят трябва да въвежда. Те също така помагат за редуциране на грешките. Ако трябва да въвеждате едно дълго число много пъти, съществува голяма вероятност да сбъркате някоя от цифрите.

Променливите също така се използват да съхраняват резултати от изчисления. Те се използват и за определяне на пътя, по който ще продължи изпълнението на кода, и за преброяване като например, колко пъти ще се направи дадено изчисление.

Изучаването на начина, по който могат да се използват променливите, е с фундаментално значение. Те са абсолютно необходими при изпълняването на определени изчисления и действия в кода.

Секция 06 – Дамаск, Сирия Страница 128 от 434

Page 129: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Деклариране на променливи

Преди програмата да използва дадена променлива, вие трябва да я декларирате. За да направите това, е необходимо да напишете ред код, с който да зададете име и тип на променливата. Всички променливи във Visual Basic трябва да се декларират. Това е добър навик, защото ви кара да се замислите върху предназначението на променливата и нейния тип. Декларирането на променливите ускорява времето за компилация и прави изпълнението на програмата по ефективно. То също така предотвратява неправилното използване на променливата в кода ви.

За да декларирате променлива във Visual Basic, използвайте ключовата дума "Dim".

Ключовата дума Dim има следния синтаксис:

Dim VariableName As VariableType

Ето някои примери за деклариране на променливи от различни типове.

Секция 06 – Дамаск, Сирия Страница 129 от 434

Page 130: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Dim MyName As StringDim MyWeight As IntegerDim NoBrainer As BooleanDim DVDPrice As Single

Първата променлива MyName е декларирана от тип String. Това означава, че тя може да приема само стойности от тип String. Втората променлива MyWeight е декларирана от тип Integer. Тя може да приема само целочислени стойности. Променливата NoBrainer може да приема само стойности от тип Boolean, а променливата DVDPrice – само стойности от тип Single.

Секция 06 – Дамаск, Сирия Страница 130 от 434

Полезен съвет

Учениците имат навик да именуват променливите с безсмислени имена или отделни букви. По-късно те забравят какво означават те, което води до допускане на грешки. След това, когато учениците потърсят помощ, човекът, който им помага не знае кои променливи за какво са използвани.

Можете да откажете помощ на ученик, който не е използвал смислени имена на променливи.

Page 131: CodeRulesBook2010 (Светът на програмирането – пътешествие)

В C# декларирането на променливи става по малко по-различен начин. Първо трябва да напишете типа на променливата, след което нейното име. Имената на типовете също са по-различни. Например, вместо Integer се използва int, а вместо Single се използва decimal.

int val4;string myName;decimal myBattingAverage;

Секция 06 – Дамаск, Сирия Страница 131 от 434

Page 132: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Къде декларирате променливите?

Можете да декларирате толкова променливи, колкото са ви необходими. Те могат да са от произволен тип, поддържан от Visual Studio средата. Аз и Ники спазваме стандартни правила за писане на код. Декларираме променливите в началото на кода. Така знаем къде да ги търсим и лесно можем да видим типа им. Това прави кода ни подреден и организиран. Ако трябва да създадем друга променлива, се връщаме към началото на програмата и я декларираме заедно с останалите променливи. Не декларираме променливите в средата на кода.

Можете да декларирате променливите глобално или локално. До сега кодът, който писахме, беше в обработчиците на събитията за контролите. Например, добавяхме код в обработчика на генерираното при натискане на бутон събитие. Променливите, които се декларират в тези обработчици са локални и могат да бъдат променяни само от кода в съответни обработчик. Те не са достъпни за останалия код от формата. Стойностите на локалните променливи само докато се изпълнява кода от обработчика на събитието. След това техните стойности се изгубват. Пример за локална променлива е декларираната в обработчика на генерираното при натискане на бутон събитие.

За да декларирате локална променлива, поставете ключовата дума Dim в кода на обработчика на дадено събитие. Декларирането на променливите е задължително преди да напишете какъвто и да било друг код. Ето и един пример:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim MyName As StringMyName = "Bill"TextBox1.Text = MyNameEnd Sub

До сега не сме използвали глобални променливи. Те могат да бъдат четени или записвани в рамките на целия код за формата и са достъпни от всички обработчици на събития.

Секция 06 – Дамаск, Сирия Страница 132 от 434

Полезен съвет

MyName е декларирана в процедурата. След като изпъни израза End Sub MyName се унищожава.

Page 133: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Стойностите на глобалните променливи се съхраняват през цялото време, когато формата е отворена. Пример за глобална променлива е брояч, който помни колко пъти са натиснати бутоните от формата.

За да декларирате глобална променлива, трябва да поставите ключовата дума Dim в класа на формата преди обработчиците на събития. Разгледайте следния пример:

Dim TotalButtonClicks As Single

Променливата TotalButtonClicks e глобална променлива. Тя може да бъде четена или записвана навсякъде в кода на формата.

Ако декларирате всичките си променливи в класа на формата, извън обработчиците на събития, то те ще бъдат глобални и стойностите им ще могат да бъдат четени или записвани навсякъде.

Секция 06 – Дамаск, Сирия Страница 133 от 434

Page 134: CodeRulesBook2010 (Светът на програмирането – пътешествие)

06 Пробвайте 01 Части на ПИ

Любимият ми десерт, когато ходя на ресторант е ябълков пай. Това ми напомни по колко различни начина може да бъде представено числото Пи.

1. Създайте форма подобна на показаната по-долу:

2. В обработчика на събитието Button1_Click, дефинирайте променливи от следните типове:

IntegerSingleDoubleString

3. Задайте стойности за Пи на всяка променлива като използвате вградения в Visual Basic Пи-калкулатор Math.PI

4. Асоциирайте Math.PI към всяка променлива.

5. Асоциирайте всяка една от променливите към съответното текстово поле.

Ако програмата работи правилно, я покажете на своя учител.

Секция 06 – Дамаск, Сирия Страница 134 от 434

Page 135: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Инициализиране на променливи

Веднъж след като сте декларирали една променлива, можете да я използвате в кода си. Преди това, обаче трябва да й зададете инициализираща стойност. Можете да използвате произволна стойност стига да е от подходящ тип, т.е. от типа на променливата. Инициализирането на променлива става посредством оператора за присвояване. Разгледайте следните примери.

Dim MyName As StringMyName = "Paul Bunion"

Dim MyWeight As IntegerMyWeight = 128

Dim DrivingDistance As SingleDrivingDistance = 12.8

Променливата MyName е декларирана от тип a String и е инициализирана със стойността "Paul Bunion". Променливата MyWeight е декларирана от Integer тип и е инициализирана със стойността 128. Променливата DrivingDistance е декларирана от тип Single и е инициализирана със стойността 12.8.

Ето ви един шаблон, който можете да използвате, за да декларирате и инициализирате променливи. Това ви гарантира, че използването на променливата ще започне с подходяща стойност. Използването на неинициализирани променливи може да доведе до грешка в програмата ви.

Dim MyAge As Integer = 100

Инициализирането на променливи е подобно на това в C#:

int myOrbit;myOrbit=123000;

Секция 06 – Дамаск, Сирия Страница 135 от 434

Page 136: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Използване на променливи

Сега след като сте декларирали и инициализирали променливата си, можете да я използвате винаги, когато стойността й ви е необходима. Разгледайте примерите.

Dim MyName As StringMyName = "Joe Cooker"MessageBox.Show(MyName)

Какво съобщение предполагате, че ще се визуализира в диалоговия прозорец? Джо Кокър!

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

Можете да променяте стойността на променливата посредством оператора за присвояване. Какво ще се покаже е текстовото поле?

Dim MyName As StringMyName = "Bill"MyName = "Bob"MyName = "Ben"TextBox1.Text = MyName

Кое от имената ще се изпише в контрола TextBox1? Ако заложите на "Ben", ще спечелите! Променливата MyName приема стойност Bill, след това Bob и накрая Ben. Тъй като последната стойност, която ще получи е Ben, то тя ще се визуализира и в текстовото поле.

Можете да присвоите стойността на една променлива на друга променлива.

Dim MyName As StringDim YourName As StringMyName = "Allen Ginsberg"YourName = MyNameMessageBox.Show(YourName)

В диалоговият прозорец ще се покаже съобщение Allen Ginsberg.

Секция 06 – Дамаск, Сирия Страница 136 от 434

Page 137: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ето и код на C#. Можете да видите някои прилики и някои разлики. Вижте как декларираме променливи. Малко по-различно е от Visual Basic 2010.

string myName;string YourName;MyName = "Allen Ginsberg";YourName = myName;MessageBox.Show(YourName);

Ето ви един пример,при който ще възникне грешка, тъй като се опитваме да присвоим стойността на променлива от един тип на променлива от друг тип. Следният код няма да се компилира.

Dim MyName As StringDim DVDPrice As SingleMyName = "Paul Bunion"DVDPrice = MyName

Запомнете, че променливите се декларират от определен тип и могат да приемат стойности само от този тип.

Секция 06 – Дамаск, Сирия Страница 137 от 434

Page 138: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Променливите в примери

Разказах ви за това как да декларирате и инициализирате променливи. Има ли още нещо? Нека да напишем код като използваме променливи!

Създайте ново Windows приложение с Visual Studio с име XACTLY. Отворете прозореца Toolbox и добавете върху формата един бутон и две текстови полета. Изчистете текста от

текстовите полета. Задайте стойност "Show XY" за свойството Text на бутона. Задайте стойност True за свойството ReadOnly на текстовите полета. Щракнете двукратно върху бутона, з ада създадете обработчик за събитието Button1_Click. Добавете следния код:

Dim XName As StringDim YName As StringXName = "X is my name"YName = "Y is my name"TextBox1.Text = XNameTextBox2.Text = YName

Изградете и стартирайте приложението. Натиснете бутона "Show XY". Кодът ви декларира две променливи от тип String – Xname и YName. Те получават като стойност низ от символи, затворени между кавички. Свойството Text на едното текстово поле приема стойността на променливата XName, а свойството Text на другото текстово поле – стойността на променливата YName. Опитайте да промените стойностите на променливите XName и YName в кода, след което стартирайте програмата отново.

А сега да модифициране програмата. Добавете трето текстово поле. Задайте празен низ за свойството Text. Уверете се, че стойността на свойството ReadOnly е False.

Секция 06 – Дамаск, Сирия Страница 138 от 434

Полезен съвет

Секцията може да се разбере по-лесно, ако ученикът паралелно създава същото Visual Studio приложение.

Page 139: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Щракнете двукратно върху бутона, за да редактирате обработчика на събитието Button1_Click. Променете кода така, че да изглежда по следния начин:

Dim XName As StringDim YName As StringDim ZName As StringZName = TextBox3.TextXName = ZNameYName = XNameTextBox1.Text = XNameTextBox2.Text = YName

Изградете и стартирайте приложението. Въведете някакъв текст в третото текстово поле. Натиснете бутона "Show XY". Какво се случва? Вашият код декларира три променливи от тип String. Променливата ZName получава стойност от свойството Text на третото текстово поле. Променливата XName приема стойността на променливата ZName. Променливата YName приема стойността на променливата XName. Свойството Text на първото текстово поле приема стойността на променливата XName, а свойството Text на второто текстово поле – стойността на променливата YName. Кодът по-горе показва как да задаваме стойност от една променлива на друга променлива.

Ето и един последен пример, който илюстрира използването на глобални променливи. Създайте ново Windows приложение с име TotalButtonClicks. Добавете върху формата три бутона. Декларирайте следната променлива в класа на формата:

Dim TotalButtonClicks As Integer

Щракнете двукратно върху първия бутон, за да създадете обработчик на събитието Button1_Click и добавете следния код в него.

TotalButtonClicks = TotalButtonClicks + 1MessageBox.Show(TotalButtonClicks)

Секция 06 – Дамаск, Сирия Страница 139 от 434

Page 140: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Добавете същия код и в обработчиците на събитията Button2_Click и Button3_Click.

Изградете и стартирайте приложението. Щракайте върху бутоните в произволна последователност. Текущият общ брой на щракванията върху бутоните се извежда в диалогов прозорец. Това е така, защото декларирахме глобална променлива с име TotalButtonClicks в кода на формата. Тя се използва за съхраняване на общия брой на щракванията върху бутоните. Нейната стойност се инкрементира всеки път, когато потребителят натисне някой от бутоните. Стойността на глобалната променлива се съхранява докато програмата не бъде затворена.

Други типове

Във Visual Basic освен прости типове можете да използвате още много други типове, за да декларирате променливите си. Те са вградени в Visual Studio средата и могат да се използват от всички езици за програмиране включени във Visual Studio 2010. Много от тях са свойства на т.нар. Системни класове. Системните класове притежават код, който осигурява базовата функционалност на тези езиците. Съществена част от изучаването на програмирането с езиците е усвояването на функционалността на Системните класове.

За сега не е необходимо да изучавате Системните класове. Ники и аз ще ви показваме код, който използва свойствата и методите на Системните класове, така че вие ще се научите да ги разпознавате. Ще ви дам пример за използване на Системните класове за промяна на цвета на формата. Отворете приложението ShowXY и добавете втори бутон на формата. Задайте стойност "Color" за свойството му Text. Щракнете двукратно върху бутона, за да създадете обработчик на събитието Button2_Click и добавете в него следния код:

Dim MyColor As System.Drawing.ColorMyColor = System.Drawing.Color.BlueForm1.ActiveForm.BackColor = MyColor

Изградете и стартирайте приложението. Натиснете втория бутон.

Вашият код декларира променлива с име MyColor от тип System.Drawing.Color. Променливата MyColor приема стойност System.Drawing.Color.Blue, с което получава валиден син цвят. Накрая свойството BackColor на формата приема стойността на променливата MyColor. Забележете, че свойството BackColor получава стойност от тип System.Drawing.Color.

Секция 06 – Дамаск, Сирия Страница 140 от 434

Page 141: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Можете да разгледате Системните класове. Начин за това е да напишете System следвано от точка в прозореца с кода на формата. Помощното средство IntelliSense ще ви покаже списък със свойствата и методите на класа System. Изберете елемент от списъка и напишете точка, за да видите, ако разбира се има такива, неговите свойства и методи.

Секция 06 – Дамаск, Сирия Страница 141 от 434

Page 142: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане в Дамаск

Вече сме в Дамаск! Сигурен съм, че се забавлявахте. Нека да направим задачите, които са на джобния компютър, след което да решим теста, за да ни перфорират контролната карта. Сега след като имате знания за променливите, ще ни помогнете в преодоляването на последното предизвикателство от Комисията по състезанията.

06 Пробвайте 02 Скачаща жаба

Впечатлен от блатото, което видяхме тази сутрин, реших да напишем програма за скачащата жаба.

Създайте форма подобна на показаната по-долу или използвайте шаблон 02 от секция 06, който е разработен за тази цел:

Напишете “Frog1” в първото текстово поле и “Frog2” – във второто.

Когато потребителя натисне бутона с текст ”Скок”, съдържанието на текстовото поле над него ще се появи в текстовото поле, разположено след две съседни текстови полета вдясно. Не забравяйте да изчистите съдържанието на текущото текстово поле.

Ако програмата работи коректно, я покажете на учителя си.

Секция 06 – Дамаск, Сирия Страница 142 от 434

Page 143: CodeRulesBook2010 (Светът на програмирането – пътешествие)

06 Можете ли? Откриване на грешки

Необходимо е да упражним откриването на грешки в кода на програмите. Повечето от нас знаят, че такива грешки се наричат бъгове.

Програмата от шаблона на секция 06 притежава бъгове. Всеки ред с изключение на един има грешка. Вашата задача е да поправите грешките така, че програмата да се изгради и изпълни.

Отворете файла Splat.sln. Открийте бъговете!

Ако програмата работи, правилно я покажете на учителя си.

Продължение / Обобщение

Кой е старши капитан Грейс Хоупър?Защо зададохме този въпрос?

Секция 06 – Дамаск, Сирия Страница 143 от 434

Полезен съвет

Шаблонът съдържа много умишлени грешки. От ученика се очаква да поправи кода. Не се изисква точно определена корекция. Например, ако X = 123.4 е грешно, то X = 123 е правилно, както и X = 1234

Полезен съвет

Капитан Хоупър е открил първия бъг в информационните технологии – истинска буболечка в електронната лампа на първите компютри.

Page 144: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 06 – Дамаск, Сирия Страница 144 от 434

Page 145: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 07 – София, България Страница 145 от 434

Page 146: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Оператори

София, България

Готови сме да продължим. Следващата ни дестинация е София, България! Клиф вече ви показа как да използвате променливите и оператора за присвояване, така че сега ще разгледаме някои основни програмни средства. По пътя за София ще ви покажа как да използвате операторите. Веднъж след като се научите да използвате операторите във Visual Basic, вие ще можете да ги използвате и във всеки друг програмен език. Работата с операторите е лесна! Когато наближим София, ще ви покажа някои средства за дебъгване, които са част от Visual Studio. Те ще ви помогнат да избегнете грешките в кода си, така че той ще се компилира всеки път!

Секция 07 – София, България Страница 146 от 434

Page 147: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Оператори

И така, след като операторите са толкова лесни, защо до сега не сте чували за тях? Е, шансовете са на ваша страна! Примери за оператори са събирането, изваждането, умножението и делението. Тях сте използвали още в началното си училище, но не сте ги наричали така. В програмирането има и други оператори, които извършват математически изчисления и различни операции над низови стойности.

Обикновено операторите работят с две стойности, въпреки че някои от тях могат да използват и една стойност. Стойностите се наричат операнди. Ето базовия синтаксис за използване на операторите:

Операнд1 Оператор Операнд2 Например

3 + 4

В израза 3 + 4 има два операнда (3 и 4), свързани посредством един оператор (+). Операторите извършват операция (в случая събиране) над два операнда (3 и 4).

Използването на операторите е лесно и забавно! С тях можете да създавате сложни формули. Нека да започнем с аритметичните оператори – събиране, изваждане, умножение и деление. След това ще ви покажа как да обединявате низове и как да използвате оператора NOT.

Секция 07 – София, България Страница 147 от 434

Page 148: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Аритметични оператори

Математически правила! Обичам математиката! Харесва ми да решавам математически проблеми по цял ден, но понякога се уморявам и започвам да правя грешки. Компютърните програми се справят чудесно с математическите проблеми. Те не правят допълнителни грешки и никога не се изморяват, извършвайки една и съща операция многократно. Не звучи ли това прекалено хубаво, за да е истина? Е, има малък проблем. Въпреки, че могат да извършват неограничен брой изчисления, програмите не могат да структурират решението. Това е задача на програмиста.

Ето защо е толкова важно да разберете как да използвате аритметичните оператори. Вие трябва да кажете на програмата какъв математически проблем трябва да реши. Тъй като компютрите са много подходящи за извършване на математически изчисления, всички езици за програмиране поддържат стандартно множество от аритметични оператори и използват почти еднакви символи за тяхното представяне в кода. Не е ли много лесно?

Секция 07 – София, България Страница 148 от 434

Page 149: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ето списък с най-често срещаните аритметични оператори и символите, с които те се представят във всекидневието и кода. Забележете, че само един от символите е различен. В кода оператора за умножение се представя със символа *, а във всекидневието – със символа x.

Оператор Символ във всекидневието Символ в кодаСъбиране + +Изваждане - -Умножение x *Деление / /

Да разгледаме няколко примера с аритметични оператори.

3 + 4 18 - 2 33 * 3 66 / 6

C# предоставя същите аритметични оператори както Visual Basic. Използват се +, -, * и / за събиране, изваждане, умножение и деление.

Секция 07 – София, България Страница 149 от 434

Page 150: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Оператори за работа с низ

Не всички програми, които пишете извършват изчисления. Понякога се налага програмата да работи с низове от символи. Знаете ли, че във Visual Basic и другите езици за програмиране можете да събирате низове? В действителност това не е обичайното събиране на числа. Събирането на низове се нарича конкатенация и реализира обединяване на два низа в общ низ. Във Visual Basic оператора за конкатенация е амперсанд (&). Можете да го използвате както оператора за събиране, но с низови вместо с числови стойности.

Ето и няколко примера:

"Bill" & "Mike "1" & "2"

В C# за конкатенация на низове не се използва символът амперсанд (&). Вместо него се използва знакът плюс (+). Разгледайте следния код:

fullName = "Bill " + "Bob";

Секция 07 – София, България Страница 150 от 434

Page 151: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Операторът Not

Операторът Not е специален оператор, който се изпълнява над един операнд. Операндът се интерпретира като булева стойност (True или False). Операторът Not променя стойност False на True и стойност True на False. Разгледайте примерите.

Not (True) Not (Not (True))

Не съм много сигурен защо бихте използвали последния пример, но както и да е!

Хей, в C# вместо Not се използва удивителен знак (!). Прегледайте следния C# код.

Секция 07 – София, България Страница 151 от 434

Page 152: CodeRulesBook2010 (Светът на програмирането – пътешествие)

textBox3.Visible = !(textBox1.Visible);

Секция 07 – София, България Страница 152 от 434

Page 153: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Използване на оператори в изрази

И така как се използват операторите в кода? В повечето случаи ще ги използвате в изразите с оператора за присвояване. Припомнете си, че тези изрази изглеждат като равенства в математиката. Операторите и операндите се поставят вдясно от знака равно. Дясната страна на равенството се изчислява, след което получената стойност се присвоява на лявата страна на равенството. Резултатът от изчислението и променливата вляво от знака равно трябва да са от един и същ тип. В противен случай кодът няма да се компилира. Ето няколко примера, използващи аритметични оператори и оператор за конкатенация в изрази.

Dim FormWidth as IntegerFormWidth = 200 + 300

Dim FormHeight as IntegerFormHeight = 1000 / 2

Dim WinnebagoName as StringWinnebagoName = "Code" & "Bus"

Секция 07 – София, България Страница 153 от 434

Page 154: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Операторите в действие

Примерите, които ви дадох са елементарни, защото във всеки израз имаше по един оператор и два операнда. В действителност ще ви се наложи да дефинирате формули и да извършвате сложни изчисления, което ще изисква множество оператори и операнди. За щастие, в повечето езици за програмиране можете да обединявате в един израз толкова оператори и операнди, колкото с ви необходими. Заедно с това можете да използвате и променливи като операнди. Точно така! Операторите също така работят и с променливи стига те да са от подходящ тип. Нещо повече можете да присвоите стойност на променлива, която участва в самото изчисление. Нека да разгледаме няколко по-сложни примера. Първият пример изчислява обиколката на автомобилна гума.

Dim TireCircum As SingleDim TireDiam As IntegerDim PiValue As SinglePiValue = 3.14159TireDiam = 18TireCircum = TireDiam * PiValue

Следващият пример изчислява средната стойност на бензина за Май и Април. Забележете, че използвам скоби, за да съм сигурен, че операцията събиране ще се извърши преди операцията деление.

Dim MarchCost As Single = 123.66Dim AprilCost As Single = 231.45

Секция 07 – София, България Страница 154 от 434

Page 155: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Dim MarchGallons As Single = 87.4Dim AprilGallons As Single = 157.2Dim CostPerGallon As SingleCostPerGallon = (MarchCost + AprilCost) / (MarchGallons+ AprilGallons)

Секция 07 – София, България Страница 155 от 434

Page 156: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Оператори за сравнение

Спомняте ли си, че можете да присвоите на променлива резултата от изчисление, в което тя също участва.? Ще попитате как става това? Разгледайте следния пример и се опитайте да предположите какво ще се покаже в диалоговия прозорец.

Dim MileCounter as IntegerMileCounter = 100MileCounter = MileCounter + 200MileCounter = MileCounter + 400MsgBox (MileCounter)

Диалоговият прозорец ще визуализира числото 700, което е стойност на променливата MileCounter. Да проследим как става това. Първият ред от кода декларира променливата MileCounter, а вторият ред я инициализира със стойност 100. Третият ред взима текущата стойност на променливата и добавя към нея 200, така че новата й стойност става 300. Запомнете, че дясната страна на равенството се изчислява винаги първа. След това лявата страна (MileCounter) приема изчислената стойност (300). Четвъртият ред взима текущата стойност на променливата MileCounter и добавя към нея 400, така че новата й стойност става 700. Накрая стойността на променливата се визуализира в диалоговия прозорец MessageBox. Лявата страна на равенството не се интересува от това как се получава резултата от изчислението в дясната страна. Достатъчно е да се използват съвместими типове.

Задаването на стойност на променлива от израз, в който участва самата променлива, е често използвана практика в програмирането с езиците от Visual Studio. Така се спестяват действията, свързани с декларирането на друга променлива за временно съхраняване на резултата от изчислението. Както ще видите от примерите, тази техника е подходяща за извършване на серийни изчисления. Знаете ли, че най-често използвания ред от код вероятно е променлива = променлива + 1? Той се използва за преброяване на итерациите при изпълнението на цикли. По нататък в нашето пътешествие ще ви разкажа и за циклите.

Секция 07 – София, България Страница 156 от 434

Page 157: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Операторът Not и операторът за конкатенация в действие

Сега ще ви покажа един пример с оператора за конкатенация и след това още един пример с оператора Not. Първият пример обединява стойностите на две текстови променливи и визуализира резултата в текстово поле.

Dim FirstName As StringDim LastName As StringFirstName = "Bob"LastName = "Marley"TextBox1.Text = FirstName & " " & LastName

Забелязахте ли как указах на Visual Basic да постави интервал между стойностите на променливите FirstName и LastName? Операторът за конкатенация не вмъква интервали автоматично.

Последният ми пример показва как да използвате оператора Not, за да скриете определен текст, когато друг текст е показан. Запомнете, че операторът Not се използва само с типа Boolean.

TextBox1.Visible = TrueTextBox2.Visible = Not (TextBox1.Visible)

Не съм сигурен защо бихте използвали последния ред с код!

Секция 07 – София, България Страница 157 от 434

Page 158: CodeRulesBook2010 (Светът на програмирането – пътешествие)

07 Пробвайте 01 Цена на бензин

Можете ли да изчислите стойността на бензина, необходим за следващия етап от пътуването? Докажете го!

1. Създайте форма със свой собствен дизайн.

Включете следните елементи: Подходящо име на формата.

Четири текстови полета, за да покажете следните стойности:

o Разстояние до следващата дестинация в мили

o Разход на горивото в галони за една миля

o Цена на горивото за един галонo Обща стойност на изразходваното

гориво

Четири етикета за обозначаване на текстовите полета.

Бутон за пресмятане.

2. След като потребителя въведе разстояние, разход на гориво за една миля и цена на гориво за един галон, програмата ще пресметне стойността на изразходваното гориво, необходимо за достигане на следващата дестинация.

3. Изградете приложението и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Продължение / Обобщение

Форматирайте крайната цена, която трябва да се заплати за изразходваното гориво.

Проучете следния код:X = 123.45X = FormatCurrency(X)

Секция 07 – София, България Страница 158 от 434

Page 159: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Дебъгване на код

Свършихте чудесна работа! Вече написахте доста код и реализирахте няколко проекти. Може би не всичките ви проекти се компилираха от първия път, но вероятно сте си изградили начин да откривате и отстранявате грешките в кода. Сега ще ви покажа няколко техники, които ще ви помогнат да откривате грешките в кода по-бързо. Процесът на откриване на грешките се нарича дебъгване. Дебъгването е необходима стъпка в създаването на работоспособна програма, която дава правилни резултати. Първо ще ви покажа как Visual Studio ви помага да дебъгвате кода си още докато го пишете.

1. Създайте ново Windows приложение с име DebugView. Добавете към формата едно текстово поле и един бутон. Щракнете двукратно върху бутона, за да създадете обработчик на събитието Button1_Click, и добавете следния код.

MyName = "Bill" TextBox1.Text = MyName

2. Забележете, че още преди да изградите проекта Visual средата подчертава променливата MyName със синя вълнообразна линия и в двата реда от кода. И какво от това? Е, Visual Studio е достатъчно интелигентна среда, за да открие още преди изграждането на проекта, че не сте декларирали променливата MyName. Така преди компилация средата ви предупреждава, че нещо в кода ви не е наред.

3. Изградете и стартирайте проекта. Прозорецът Output ви показва че изграждането е неуспешно. Списъкът с грешки Error List визуализира причините за това. Той притежава два реда, които ви уведомяват, че променливата MyName не е декларирана.

Секция 07 – София, България Страница 159 от 434

Page 160: CodeRulesBook2010 (Светът на програмирането – пътешествие)

4. Щракнете двукратно върху първия ред на списъка с грешки Error List –"Name 'MyName' is not declared”. Каретката се позиционира в мястото на грешката.

5. Позиционирайте курсора на мишката в края на променливата MyName. Забележете, че се появява подсказващ прозорец с типа на грешката и бутон с удивителен знак, при натискането на който средата предлага възможни решения на грешката. В обработчика на събитието Button1_Click добавете следния код.

Dim MyName As String

Сините вълнообразни линии изчезват.

6. Изградете и стартирайте проекта. Той се компилира без грешки. Вие успешно дебъгнахте своята програма!

Секция 07 – София, България Страница 160 от 434

Page 161: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Стъпково изпълнение на кода

Понякога грешките в кода ви не могат да бъдат открити от Visual Studio. Програмата ви се компилира без грешки, но резултатът или изходът от нея не са точни. В този случай грешките не са синтактични, а се дължат на неправилно структуриране или изпълнение на програмата. Съществуват грешки, които се допускат в дизайн режим, но Visual Studio 2010 не ги регистрира като грешки, тъй като синтаксисът е правилен.

В подобни случаи е удачно да кодът да се проследи стъпка по стъпка, за да се види пътя на неговото изпълнение. Обикновено в кода се поставя "точка на прекъсване", след която изпълнението продължава на стъпки. Точката на прекъсване действа като знак стоп – изпълнението на програмата спира до реда, който е маркиран. За да продължите изпълнението по нататък, трябва да използвате клавиша F11, с който можете да се придвижвате по редовете на кода. Нека ви покажа как става това.

1. В обработчика на събитието Button1_Click открийте следния ред:

MyName = "Bill"

Поставете курсора върху реда. Щракнете с десния бутон на мишката и от появилото се контекстно меню изберете командата "Insert Breakpoint" от менюто "Breakpoint".

Секция 07 – София, България Страница 161 от 434

Page 162: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 07 – София, България Страница 162 от 434

Page 163: CodeRulesBook2010 (Светът на програмирането – пътешествие)

2. Забележете, че редът от кода се маркира с кафяв цвят, а вляво от него се появява червена точка. Изградете и стартирайте програмата. Когато формата се появи на екрана, натиснете бутона.

3. Кодът спира изпълнението си до реда, който сте обозначили с точка на прекъсване (MyName = "Bill"). Този ред все още не е изпълнен. Той се маркира с жълт цвят, а в червената точка вдясно от него се появява жълта стрелка.

4. Преместете курсора върху променливата MyName. Ще се появи прозорче със стойността на променливата MyName. Променливата няма конкретна стойност (MyName = Nothing), защото е декларирана, но все още няма присвоена стойност.

Секция 07 – София, България Страница 163 от 434

Page 164: CodeRulesBook2010 (Светът на програмирането – пътешествие)

5. Преместете курсора върху свойството Text на контрола TextBox1. Ще се появи прозорче със стойността на свойството Text (TextBox1.Text = ””).

Натиснете клавиша F11. Текущият ред (MyName = "Bill") от кода се изпълнява, след което в жълто се маркира следващия ред.

6. Преместете курсора върху променливата MyName. Тъй като променливата вече има зададена стойност, ще се появи прозорче, което показва MyName = “Bill”, т.е. стойността на променливата е “Bill”.

7. Преместете курсора върху свойството Text на контрола TextBox1. Прозорчето със стойността на свойството ще показва Text=””, т.е. стойността на свойството Text не е променена.Натиснете клавиша F11 отново. Текущият ред(TextBox1.Text = MyName) от кода се изпълнява, след което в жълто се маркира следващия ред.

8. Преместете курсора върху променливата MyName. Прозорчето със стойността на променливата ще показва MyName = "Bill", тъй като променливата не е променена.

Секция 07 – София, България Страница 164 от 434

Page 165: CodeRulesBook2010 (Светът на програмирането – пътешествие)

9. Преместете курсора върху свойството Text на контрола TextBox1. Прозорчето със стойността на свойството ще показва TextBox1.Text = "Bill", защото свойството вече е получило стойност от променливата MyName. Натиснете клавиша F11. Преди да завърши изпълнението на кода в обработчика на събитието Button1_Click, формата ще се покаже още веднъж. Щракнете върху знака “X” в горния й десен ъгъл, за да я затворите.

10. В прозореца с кода щракнете върху реда с точката на прекъсване. Натиснете десния бутон на мишката и от появилото се контекстно меню изберете командата Delete Breakpoint.

Вече завършихте дебъгването. Изпълнението на кода стъпка по стъпка е много удобно. Така можете да проследите пътя, който вашата програма следва при изпълнението си. Понякога е възможно да откриете, че случайно програмата ви следва грешен път или че използвате неподходяща променлива в конкретен

Секция 07 – София, България Страница 165 от 434

Page 166: CodeRulesBook2010 (Светът на програмирането – пътешествие)

израз. Проследяването на кода ви показва мястото на погрешната стъпка. То ви дава възможност да преглеждате стойностите на променливите и свойствата като премествате курсора на мишката върху тях. Стойностите се обновяват след изпълнението на всеки един ред от кода.

Колкото кодът ви е по-сложен, толкова дебъгването става по-необходимо. Сложният код се дебъгва по-трудно. Скоро ще научите как да управлявате последователността, в която се изпълнява кода, като използвате оператора "if" и операторите за цикъл. Средствата за дебъгване са особено полезни, когато програмата ви изпълнява такива оператори.

Секция 07 – София, България Страница 166 от 434

Page 167: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане в София

Ау! Това беше страхотно пътуване! Разговаряхме за толкова много неща. Сега вече трябва да се чувствате сигурни, когато използвате оператори за извършване на математически операции и сливане на символни низове. Дори използвахте Visual Studio средствата за дебъгване, за да отстранявате проблемите в кода си. Мисля, че задачите, които трябва да решите, ще ви се сторят по-забавни и по-предизвикателни. Пробвайте да решите тези, които получих на джобния си компютър. Запазете настроението си докато правите теста, след което Клиф ще ни закара до следващата дестинация.

Секция 07 – София, България Страница 167 от 434

Page 168: CodeRulesBook2010 (Светът на програмирането – пътешествие)

07 Пробвайте 02 Дебъгване на програмаНека да проверим уменията ви да дебъгвате

програми. Написах програма, която можете да получите от шаблон 02 на секция 07. Това е завършена програма, поради което няма да ви се налага да пишете код. Просто отворете файла Debug Me.sln.

Вашата задача е да дадете отговор на следните три въпроса в текстов файл, в MS Word документ или в стара тетрадка за домашна работа.

1. Каква стойност попълнихте в текстовото поле на формата?

2. Каква е последната стойност на променливата AnswerOne?

3. Каква е последната стойност на променливата AnswerTwo?

Кодът на програмата съзнателно е структуриран объркващо и сложно така, че отговорите да не са ясни на пръв поглед. Всичко което трябва да направите е да поставите точка за прекъсване изпълнението на програмата в лявото вертикално поле на прозореца с кода, след което да продължите изпълнението на стъпки. За да проверите текущата стойност на определена променлива след като реда, в който се намира е изпълнен, трябва да поставите курсора на мишката върху нея.

Това е много ценно умение, което ще използвате във всички свои бъдещи програми.

Когато получите отговорите, ги покажете на своя учител.

Секция 07 – София, България Страница 168 от 434

Page 169: CodeRulesBook2010 (Светът на програмирането – пътешествие)

07 Можете ли? Калкулатор за изчисляване на обем

Помните ли кристалните преспапиета, които видяхме в магазина за подаръци вчера? Едното беше с кубична, а другото със сферична форма. Чудех се кое от тях е по-тежко. Тъй като са направени от един и същ материал, по-тежко трябва да е преспапието с по-голям обем.

Нека да напишем програма за пресмятане на обема на куб и сфера.

Създайте форма, която изглежда по следния начин:

Дължината на една от страните на куба ще се попълва в едното текстово поле, а радиуса на сферата в другото.

Ако сте забравили геометричните формули за пресмятане на обем, използвайте следните.

Обемът на куба се изчислява чрез повдигане дължината на неговата страна на трета степен.

Обемът на сферата се изчислява като се вземат четири трети от числото Пи и се умножат по радиуса повдигнат на трета степен. Можете да използвате 3.14 като стойност за Пи или Math.PI.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 07 – София, България Страница 169 от 434

Page 170: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Продължение / Обобщение

Просто за забавление, можете ли да намерите две стойности, които при изчисляването на обема дават един и същ обем?

Ако сте наистина добри в математиката, можете ли да добавите към формата изчисления, които по зададен обем изчисляват страната на куба и радиуса на сферата?

Секция 07 – София, България Страница 170 от 434

Page 171: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 07 – София, България Страница 171 от 434

Page 172: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 08 – Киев, Украйна Страница 172 от 434

Page 173: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Операторът If

Киев, Украйна

По време на пътуването ни Джин ви показа как да използвате оператори за създаване на математически равенства. Не съм много добър в математиката, но добре се справя с логиката. Логиката е начин за взимане на решения. Ние взимаме решения всеки ден през живота си. Някои от тях са доста добри. Например, реших да участвам в радио игра и спечелих три билета за концерта на групата "Whatever". Взимал съм и недобри решения – сложих джинсите си в пералнята преди да съм извадил билетите от джоба Е, "Whatever" винаги ще бъдат някъде наоколо – ще ги видя следващата година.

Пътуваме за Киев, Украйна. Киев е красив град с много паркове и исторически постройки. Той е разположен на възвишенията около река Днепър. Сигурно си мислите, че няма какво да правите там, но грешите. Съществуват милион възможности. По пътя ще ви покажа как компютърните програми взимат решения с оператора "If...Then".

Мисля си – какво ще стане, ако направим грешен ход по пътя за? Никога няма да стигнем там!

Секция 08 – Киев, Украйна Страница 173 от 434

Page 174: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Взимане на решения

Взимам решения непрекъснато. Какъв цвят чорапи да си обуя? Къде да си направя следващата татуировка? Дали да изям цяла много голяма пица с аншоа? Сигурен съм, че вие взимате и доста важни решения!

В действителност хората са късметлии. Взимаме решение при наличие на множество възможности. Като например сладолед с какъв вкус да си купим, каква музика да слушаме или с кого да се закачим. Всъщност хората са късметлии. Компютрите нямат такъв късмет. Те вземат решение въз основа на това дали нещо е истина или лъжа (True или False). True или False е резултатът от изчислението на израза?

Например, представете си, че сте в ресторант и искате да си поръчвате хамбургер, пържени картофки и бира, а сервитьорът ви задава въпроси, на които можете да отговаряте само с да и не!

Желаете ли нещо за пиене? Да.Желаете ли кафе? Не.Желаете ли чай? Не.Желаете ли сода? Не.Желаете ли кола? Не.Желаете ли бира? Да!

Е, до тук отговорих на шест въпроса, а още не съм си поръчал хамбургера и пържените картофки! Може би бавно, но в крайна сметка ще направя поръчката си!

По подобен начин компютърните програми взимат решения – само с да и не. Този начин на “мислене” се нарича Булева логика.

Секция 08 – Киев, Украйна Страница 174 от 434

Page 175: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Булева логика

Какво видяхте, компютърните програми се справят чудесно с решаването на математически проблеми. Те също така са добри и в решаването на проблеми от Булевата логика. Отговорът на даден проблем в Булевата логика е винаги истина или лъжа – не съществуват варианти като “подобно на”, “почти като” или “близо до”. Ще ви покажа няколко примера от Булевата логика.

4=4Is 4=4? Да, това е истина.

3=1+3Is 3=1+3? Не, това е лъжа.

3=(6+12)/(1+5)Is 3=(6+12)/(1+5)? Да, това е истина.

Можете да видите, че решението на всеки един от логическите проблеми по-горе е истина или лъжа. Отговорите не са числа, цветове или думи. Всъщност така компютрите взимат решения. Ако отговорът е истина, програмата прави нещо, а ако е лъжа – не прави нищо.

Секция 08 – Киев, Украйна Страница 175 от 434

Page 176: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Булеви оператори

Подобно на математиката Булевата логика има свои оператори. Те не работят с числа, а с булеви операнди -- True или False. “Събирането” на два израза True и False става по специален начин. Булевите изрази могат да се сливат, за да се решат по-сложни булеви проблеми.

Съществуват три булеви оператора: AND, OR и NOT. Операторите AND и OR действат върху два операнда. Операторът NOT действа върху един операнд. И трите оператора дават булев резултат. Всеки един от тях има свои собствени “правила”, които определят резултата от действието им върху операндите. Да разгледаме някои булеви изрази, които използват булеви оператори. След това ще ви обясня начина, по който действат.

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.

Един последен пример,

3=1+2 OR 5=2+2

Резултатът е True.Първо се изчислява 3=1+2, което е True. След това се изчислява 5=2+2, което

е False. Накрая се изчислява True OR False, което според правилата на оператора OR дава отговор True. Ако една от двете страни на оператора OR е True, крайният резултат е True.

Ще ви е необходима малко практика, но след като поработите с Булевите оператори, ще свикнете да ги използвате. За ваше улеснение, можем да ви покажем възможните комбинации за оператора AND в таблица. Няма нужда да ги запомняте. Когато ви е необходимо, можете да се върнете и да погледнете таблицата.

Секция 08 – Киев, Украйна Страница 176 от 434

Page 177: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Лява страна Дясна страна Лява страна AND Дясна страна(Краен отговор)

True True TrueTrue False FalseFalse True FalseFalse False False

По същия начин, можем да ви покажем възможните комбинации за оператора OR.

Лява страна Дясна страна Лява страна OR Дясна страна(Краен отговор)

True True TrueTrue False TrueFalse True TrueFalse False False

Секция 08 – Киев, Украйна Страница 177 от 434

Page 178: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Операторът Not не свързва два израза. Той превръща False в True и True във False.

Дясна страна Not Дясна страна (Краен отговор)True FalseFalse True

Ето и някои примери с оператора 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.

Секция 08 – Киев, Украйна Страница 178 от 434

Page 179: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Оператори за сравнение

Спомняте ли си, когато Ники ви каза, че програмите много добре решават математически проблеми, но не могат да ги дефинират? Е, същото е в сила и за Булевата логика. Компютърните програми се справят доста добре със сложни логически проблеми, но не могат да ги дефинират. Отново това е работа на програмиста, а именно да дефинира логическия проблем така, че програмата да може да го реши. Когато кодът се изпълнява, програмата решава проблема. Отговорът е True или False. Програмата взима “решение” в зависимост от това дали отговорът е True или False.

Знаете, че знакът равно може да се използва като оператор за присвояване, но той също така може да се използва и като оператор за сравнение. В примерите по-горе знакът равно задава въпроса “Лявата страна равна ли е на дясната? True или False?" Съществуват и други оператори за сравнение, определящи дали лявата страна е по-голяма от дясната (>) или лявата страна е по-малка от дясната (<). Във всеки един от случаите те поставят въпрос, на който отговорът е True или False. Разгледайте примерите:

3<4

Поставеният въпрос е: 3 по-малко ли е от 4?Да, това е истина.

2>5

Поставеният въпрос е: 2 по-голямо ли е от 5?Не, това е лъжа.

Секция 08 – Киев, Украйна Страница 179 от 434

Page 180: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ето и списък с най-често използваните оператори за сравнение:

Оператор Значение Въпрос= Равно на Лявата страна равна ли е на дясната

страна?> По-голямо от Лявата страна по-голяма ли е от дясната

страна?< По-малко от Лявата страна по-малка ли е от дясната

страна>= По-голямо или

равно наЛявата страна по-голяма ли е или равна на дясната страна?

<= По-малко или равно на

Лявата страна по-малка ли е или равна на дясната страна?

<> Различно от Лявата страна различна ли е от дясната страна?

Може би операторите >=, <= и <> са ви чужди. Те обединяват два оператора в един. Те включват два булеви израза, свързани с оператора OR. Ако един от двата израза е True, отговорът е True. Например, >= значи: Лявата страна по-голяма ли е от дясната страна? OR лявата страна равна ли е на дясната страна? Имаме два отделни въпроса свързани с оператора OR. Операторът <> значи: Лявата страна по-малка ли е от дясната страна? OR лявата страна по-голяма ли е от дясната страна? Операторът <> всъщност пита: Различни ли са двете страни?

Нека да разгледаме няколко примера, използващи оператори за сравнение. Можете да се върнете назад и да погледнете таблиците, за да проверите как работи оператора OR във всеки един от случаите.

3<=33<3 е False. 3=3 е True. False OR True =TrueTrue, 3 е по-малко или равно на 3.

2>=32>3 е False. 2=3 е False. False OR False = FalseFalse, 2 не е по-голямо или равно на 3.

3<>43<4 е True. 3>4 е False. True OR False = True

Секция 08 – Киев, Украйна Страница 180 от 434

Page 181: CodeRulesBook2010 (Светът на програмирането – пътешествие)

True, 3 е различно 4.

3<>33<3 е False. 3>3 е False. False OR False = FalseFalse, 3 не е различно от 3. 3 е равно на 3

Примерите, които ви дадох са с числа. Операторите за сравнение могат да се използват и при символни низове и други булеви стойности. Разгледайте примерите:

"ABC" = "DEF"

"ABC" равно ли е на "DEF"? Не, това е лъжа.

True=True

True равни ли е на True? Да, това е истина.

True=False

True равно ли е на False? Не, това е False.

Секция 08 – Киев, Украйна Страница 181 от 434

Полезен съветСравняването на низове става отляво надясно. Първият символ на операнд 1 се сравнява с първия символ на операнд 2, след това втория с втория и т.н. Сравнението е чувствително към малки и големи букви.

Page 182: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Условен код

Сега можете да накарате програмата си да задава въпроси като използва операторите за сравнение и Булевата логика. Какво обаче ще прави с отговорите? Ще взима решение! В зависимост от това дали отговорът е True или False, програмата може да прави избор. В действителност тя няма реален избор. Ако отговорът е True, ще направи едно нещо, а ако отговорът е False – друго нещо. Ето и някои примери от всекидневието.

Ако измия колата на майка ми преди баща ми да се е върнал вкъщи, то ще получа $5.Татко е вкъщи. Измих ли колата? True. Получавам $5.

Татко е вкъщи. Измих ли колата? False. Не получавам $5.

Ако Полийн мисли, че съм й симпатичен, то ще излезе с мен.Мисли ли Полийн, че съм симпатичен? True. Тя ще излезе с мен.Мисли ли Полийн, че съм симпатичен? False. Тя няма да излезе с мен.

Ето няколко примера, които показват как програмата взима решения:

Ако полето за отметка "Super Size" е маркирано, то показва голяма картинка.Полето за отметка "Super Size" маркирано ли е? True. Програмата показва голяма картинка.

Полето за отметка "Super Size" маркирано ли е? False. Програмата не показва голяма картинка.

Секция 08 – Киев, Украйна Страница 182 от 434

Page 183: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ако променливата TotalGallons е по-голяма от нула, то изчислява стойността на бензина.

Променливата TotalGallons по-голяма ли е от 0? True. Програмата изчислява стойността на бензина.

Променливата TotalGallons по-голяма ли е от 0? False. Програмата не изчислява стойността на бензина.

Можете да видите, че примерите от всекидневието и програмните примери имат общи неща. Те използват Булева логика, за да задават въпроси, отговорите на които са True или False. Тези въпроси използват оператори за сравнение като равно на и по-малко или равно на. Отговорите могат да бъдат True или False. Ако отговорът е True, нещо се случва. Ако отговорът е False, нищо не се случва.

Операторът If...Then

Забелязахте ли, че примерите ми използват думите "Ако" (If) и "То" (Then)? Ако дадено условие е True, то нещо ще се случи. Ако условието е False, то нищо няма да се случи. Когато искате програмата ви да взима решение, използвате оператора "If...Then" по същия начин. Във Visual Basic синтаксисът е следният:

If condition Then conditional statementEnd If

Ето и пример от Visual Basic:

If myAge = 3 Then MessageBox.Show("I am 3.")End If

Обърнете внимание на думата "If". Това е ключова дума във Visual Basic, поради което е синя. Условието е поставено отдясно на ключовата дума "If". Условието извършва сравнение и задава въпрос с два възможни отговора True или False. Променливата myAge равна ли е на 3? Ако отговорът е True, нещо се прави. Забележете, че думата "Then" е вдясно от условието. Във Visual Basic това също е ключова дума, поради което е оцветена в синьо. След ключовата дума "Then" следва изразът, който трябва да се изпълни. Той е отместен навътре, за да бъде по-четлив кодът. Ако условието е True, програмата показва диалогов прозорец със съобщение "I am 3." Забележете, че думите "End If" е поставена след израза за изпълнение. Това са ключови думи, които затварят оператора "If".

Секция 08 – Киев, Украйна Страница 183 от 434

Полезен съвет

Подсещане. Тази секция показва оператора If … Then. Следващата секция показва оператора

If … Then … Else.

Page 184: CodeRulesBook2010 (Светът на програмирането – пътешествие)

А сега опитайте вие! Създайте ново Windows приложение с име IfThen. Добавете върху формата едно текстово поле. Поставете и един бутон. Щракнете двукратно върху бутона, за да създадете обработчик на събитието Button1_Click. Добавете следния код.

Dim myAge As IntegermyAge = 3If myAge = 3 Then TextBox1.Text = "I am 3."End If

Изградете и стартирайте проекта си. Натиснете бутона. Ето какво се случва. Кодът ви декларира променлива myAge и й задава стойност 3. Операторът "If" задава въпрос: myAge равно ли е на 3? Отговорът е True, защото променливата myAge е инициализирана с 3. Тъй като отговорът на въпроса е True, изразът след ключовата дума "Then" ще се изпълни. В текстовото поле ще се изпише "I am 3."

Променете кода, както е показано по-долу:

myAge = 2

Изградете и стартирайте отново проекта. Натиснете бутона Какво се случва? Нищо? Това е добре! Този път променливата myAge е инициализирана със стойност 2. Операторът "If " задава въпрос: myAge равно ли е на 3? Отговорът е False, така че изразът след ключовата дума "Then" не се изпълнява. Текстът в текстовото поле не е променен, защото резултатът от изчислението на условието е False. Програмата ви прави точно това, което се очаква.

Секция 08 – Киев, Украйна Страница 184 от 434

Page 185: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Нека да разгледаме друг пример. Добавете върху формата поле за отметка. Редактирайте обработчика на събитието Button1_Click. Заменете кода в него със следния код:

If CheckBox1.Checked = True Then TextBox1.Text="I am checked."End If

Изградете и стартирайте проекта си. Маркирайте полето за отметка и натиснете бутона. Резултатът от изчислението на условието е True (полето за отметка е маркирано) и в текстовото поле се показва текста "I am checked.".

Изградете и стартирайте отново проекта си. Този път не маркирайте полето за отметка. Какво се случва? Нищо. Условието не е изпълнено (полето за отметка не е маркирано) и текстът в текстовото поле не се променя. Програмата ви взима решение (да промени или да не промени текста в текстовото поле) въз основа на условие (дали е маркирано полето за отметка).

Секция 08 – Киев, Украйна Страница 185 от 434

Page 186: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Повече от един оператор IfЗнам, че ще искате програмата ви да взима няколко решения, когато се

изпълнява. Може би ще ви е необходимо да проверявате състоянието на поле за отметка и на радио-бутон, след това да сравните две числа и накрая да установите дали потребителят е попълнил текстово поле. Това са доста проверки! Могат ли всичките да с реализират? Естествено отговорът е “Да”. Можете да използвате неограничен брой "If...Then" оператори в кода си. Както всички други оператори, те се изпълняват в реда, в който са поставени в кода. Нека да създадем приложение, което използва повече от един оператор "If...Then".

Нека програмата ни притежава поле за отметка със заглавие "Display All Alarms". Ако то е маркирано, програмата ще промени цвета на формата в червен, текстът в текстово поле ще стане "Red Alert" и ще се визуализира диалогов прозорец със съобщение "Danger! Danger!" Единият от начините да реализирате това е като използвате три отделни оператора "If...Then". В условието на всеки един от тях ще се проверява дали полето за отметка е маркирано. Ако това условие е True, изразът, който следва ще се изпълнява.

Ще ви покажа как става това. Създайте ново Windows приложение с име FireAlarm. Добавете върху формата по едно поле за отметка, текстово поле и бутон. Задайте стойност "Three If's" за свойството Text на бутона. Щракнете двукратно върху него, за да създадете обработчик на събитието Button1_Click. Добавете следния код.

If CheckBox1.Checked = True Then Form.ActiveForm.BackColor = System.Drawing.Color.RedEnd IfIf CheckBox1.Checked = True Then TextBox1.Text = "Red Alert"End IfIf CheckBox1.Checked = True Then MessageBox.Show("Danger! Danger!")End If

Изградете и стартирайте проекта си. Маркирайте полето за отметка и натиснете бутона "Three If's". Операторите "If...Then" се изпълняват последователно, при което се изпълняват и изразите след веки един от тях. Първият оператор "If...Then" променя цвета на формата в червен. Вторият оператор променя текста е текстовото поле на "Red Alert". Третият оператор показва диалогов прозорец със съобщение "Danger! Danger!".

Секция 08 – Киев, Украйна Страница 186 от 434

Page 187: CodeRulesBook2010 (Светът на програмирането – пътешествие)

08 Пробвайте 01 Идеи за подарък

Докато бяхме в околностите на Киев, Украйна, спряхме в магазин за подаръци. Ако напишете програма, която да помага на купувачите в избора им на подарък, собственикът на магазина ще ви даде автентична картичка с красивия търговски център на Киев.

1. Създайте форма със заглавие ”Идеи за подарък”. Поставете един етикет с текст “Хората, които купуват” и друг етикет с текст “Също купуват”.

2. Поставете на формата компонент ComboBox (Виж секция 04). Променете текста му на “Избери подарък”. Попълнете списъка с неговите елементи като използвате таблицата с подаръци по-долу или дайте свои идеи.

3. Поставете текстово поле Направете текстовото поле многоредово.

4. Винаги когато е избран подарък от падащия списък, попълвайте текстовото поле с най-малко два елемента, които ще бъде подарени на купувачите. Можете да използвате таблицата по-долу или да създадете своя собствена.

Шапка ШалРъкавици

Ботуши Боя за обувкиОбувалка

Книга ХартияПоздравителна картичка

Пощенска картичка Пощенска маркаПощенски плик

Ваза ЦветяПанделка

Секция 08 – Киев, Украйна Страница 187 от 434

Page 188: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Номерът на селектирания елемент се получава от свойството SelectedIndex на компонента ComboBox. Номерацията започва от 0.

Името на селектирания елемент се получава от свойството SelectedItem на компонента ComboBox. Ако желаете в текстовото поле да се появяват два елемента, в което съм сигурен, поставете специална Visual Basic константа между тях, като например:

TextBox1.Text = “A” & vbNewLine & “B”

Разбира се, A и B ще замените според случая.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 08 – Киев, Украйна Страница 188 от 434

Полезен съвет

За някои ученици инструкциите няма да са ясни е очакват серия от If оператори. Ученикът може да сравнява и по индекс, и по име. Вижте обяснителните бележки за примерите относно двата метода.

Page 189: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Повече от един оператор за сравнение

Забелязахте ли, че операторите "If...Then" в примера FireAlarm имат едно и също условие, което е:

If CheckBox1.Checked = True Then

Единствената разлика между тях е в израза, който се изпълнява след проверката н условието. Получава се дублиране на код, нали? Няма ли по-лесен начин? Да, разбира се! Visual Basic и повечето съвременни езици за програмиране допускат обединяването на няколко условия. Ето и синтаксиса:

If condition Then conditional statement 1 conditional statement 2 conditional statement etc.End If

Имайки това предвид, ние можем да пренапишем кода от примера FireAlarm като отстраним повторението на условията и направим програмата по-разбираема. Отворете приложението FireAlarm. Добавете върху формата втори бутон. Задайте стойност "One If" за свойството му Text. Щракнете двукратно върху бутона, за да създадете обработчик на събитието Button2_Click. Добавете следния код:

If CheckBox1.Checked = True Then Form.ActiveForm.BackColor = System.Drawing.Color.Red TextBox1.Text = "Red Alert" MessageBox.Show("Danger! Danger!")End If

Изградете и стартирайте проекта. Маркирайте полето за отметка и натиснете бутона "One If". Проверява се едно условие. То е True, поради което всички изрази след условието се изпълняват последователно. Програмата работи точно както преди. Този път, обаче трите условия са обединени! Обединяването на няколко условия в едно прави кода по-кратък и по-разбираем.

Секция 08 – Киев, Украйна Страница 189 от 434

Page 190: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Множествен избор

Спомняте ли си, че когато си поръчвах бира отговарях само с да и не на въпросите? Използвани бяха серия от въпроси, за да се изброят възможните варианти. Въпреки, че стана по-бавно аз все пак получих това, което исках. Можете да реализирате въпрос с няколко възможни отговора в кода си като използвате серия от "If...Then" оператори. Имам чудесен пример за това.

Създайте ново Windows приложение с име ChooseAColor. Добавете върху формата три радио-бутона и един обикновен бутон. Използвайте прозореца Properties, за да зададете следните стойности на свойствата. Задайте стойност "Red" за свойството Text на първия радио-бутон. Задайте стойност "Yellow" за свойството Text на втория радио-бутон. Задайте стойност "Green" за свойството Text на третия радио-бутон. Задайте стойност "Color Me" за свойството Text на обикновения бутон. Задайте стойност True за свойството Checked на първия радио-бутон. Щракнете двукратно върху бутона, за да създадете обработчик на събитието Button1_Click. Добавете следния код:

Dim myColor As System.Drawing.ColorIf RadioButton1.Checked = True Then myColor = System.Drawing.Color.RedEnd If If RadioButton2.Checked = True Then myColor = System.Drawing.Color.YellowEnd If If RadioButton3.Checked = True Then myColor = System.Drawing.Color.GreenEnd If

Form.ActiveForm.BackColor = myColor

Изградете и стартирайте проекта. Забележете, че радио-бутонът "Red" е маркиран. Натиснете бутона "Color Me". Цветът на формата става червен. Селектирайте друг радио-бутони натиснете бутона "Color Me". Цветът на формата се променя!

Разгледайте кода. За да се отговори на въпрос с множество възможни отговора, са използвани няколко оператора "If...Then". При последователното си изпълнение програмата определя кой от радио-бутоните е маркиран. След това в зависимост от маркирания радио-бутон тя изпълнява определен израз.

Секция 08 – Киев, Украйна Страница 190 от 434

Page 191: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Булеви оператори в кода

Говорихме за това как да използваме Булевите оператори за решаване на сложни логически задачи. Нека да разгледаме пример, който използва оператора AND за получаване на сложно условие.

Ще променим програмата ChooseAColor като добавим поле за отметка, което ще включва или изключва възможността за промяна на цвета. Ще използваме булевия оператор AND, за да създадем условие, в което ще проверяваме дали полето за отметка е маркирано и дали цветът е променен.

Отворете приложението ChooseAColor. Добавете върху формата поле за отметка. Задайте стойност "Enable Colors" на свойството Text. Редактирайте обработчика на събитието Button1_Click. Заменете кода по следния начин:

Dim myColor As System.Drawing.ColorIf RadioButton1.Checked = True And CheckBox1.Checked Then myColor = System.Drawing.Color.RedEnd IfIf RadioButton2.Checked = True And CheckBox1.Checked Then myColor = System.Drawing.Color.YellowEnd IfIf RadioButton3.Checked = True And CheckBox1.Checked Then myColor = System.Drawing.Color.GreenEnd IfForm.ActiveForm.BackColor = myColor

Изградете и стартирайте приложението. Натиснете бутона "Color Me". Нищо не се случва! Цветът не се променя. Маркирайте полето за отметка "Enable Colors" и отново натиснете бутона "Color Me". Цветът на формата става червен. Ето и какво се случва. Добавихме следния код в условието на оператора If...Then:

And CheckBox1.Checked

Секция 08 – Киев, Украйна Страница 191 от 434

Полезен съвет

Някои ученици се затрудняват в използването на сложе If оператор. Те го избягват чрез създаване на по-сложни програми. Използвайте програмата за игра на морски шах от секция Unit 4, за да покажете пример със сложния If оператор.

Page 192: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Така условието се усложни. За да се промени цвета, и двете страни на оператора AND трябва да са True. Например,

RadioButton2.Checked = True And CheckBox1.Checked

Резултатът от изпълнението на оператора AND е True. Запомнете, че True AND True=True. Ако една от страните на оператора AND е False, то целият израз от условието ще се изчисли като False и цвета няма да се промени.

Секция 08 – Киев, Украйна Страница 192 от 434

Page 193: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане в Киев

Е, свършихме всичко! Ето ни в Киев, Украйна. Не се съмнявах, че ще успеем. По време на пътуването ни научихте как да използвате оператора за условен преход "If...Then". Сега вече можете да накарате програмите си да разсъждават. Те могат да взимат решения, така че внимавайте какво ги карате да правят!

Получих забавна задача на джобния си компютър. Мисля, че ще я направите с удоволствие. Не забравяйте и теста, който трябва да решите за Комисията по състезанията.

Секция 08 – Киев, Украйна Страница 193 от 434

Page 194: CodeRulesBook2010 (Светът на програмирането – пътешествие)

08 Пробвайте 02 Мотивационна програма

Знаем, че вие се обучавате по курса “Светът на програмирането”, защото сте проявили интерес за това в клас. Напишете обзорна програма, за да подпомогнете други ученици във взимането на решение за изучаване на курса по програмиране.

Създайте форма подобна на показаната по-долу:

Секция 08 – Киев, Украйна Страница 194 от 434

Page 195: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Попълнете шестте текстови полета и натиснете бутона ”Резултат”. Тъй като съдържанието на текстовите полета е от тип string, а не integer, вие трябва да го конвертирате. Visual Basic осигурява няколко начина за това. Ето един от тях.

X = Val(TextBox1.Text)

Функцията Val преобразува символни стойности, след което вие можете да ги присвоите на променливи като X.

Ако общата получена стойност е по-голяма от 40, в текстовото поле Evaluation покажете съобщение, което показва, че ученикът е отличен кандидат за курса по програмиране.

Ако общата получена стойност е между 20 и 39, то уведомете ученика, че възможността за успех в курса по програмиране е несигурна, но би могъл да опита.

Ако общата получена стойност е под 20, то препоръчайте на ученика да промени пътя на своето професионално развитие.

Секция 08 – Киев, Украйна Страница 195 от 434

Page 196: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Какъв е вашия собствен резултат?

Ако програмата ви работи правилно, я покажете на учителя си.

08 Можете ли? Мишена

Помните ли играта, която наблюдавахме по време на вечеря миналата вечер, когато трябваше да щраквате с мишката по подвижна мишена? Нека да създадем такава с Visual Basic. Това ще изисква някои по специални действия така, че прочетете внимателно инструкциите по-долу.

Променете размера на формата. За височина задайте стойност 350, а за ширина – 500. За заглавие на формата използвайте “Мишена”. Добавете компоненти върху формата така, че да изглежда по следния начин:

Секция 08 – Киев, Украйна Страница 196 от 434

Полезен съвет

Когато оценявате тази задача проверете дали, точно 20 е стойността за “неуверен“ и точно 40 – за „отличен“.

Полезен съвет

Тази програма е по-голяма от предходната. Тя може да бъде полезна за преговор на обяснителните бележки, за да се подготвите за въпросите на учениците.

Page 197: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Целта на играта е да се щракне върху подвижен обект. Кодът на програмата ще придвижва картинката, правейки я трудна за уцелване. Бутонът “Старт” инициализира и стартира играта. Бутонът “Стоп” приключва играта. Бутонът “Изход” затваря програмата. Трите радио-бутони определят сложността на нивото, до което е достигнала играта. Добавете компонент за картинка, който ще визуализира подвижния обект.

Изображението на подвижния обект се намира във файла 08_Challenge_Target.gif. Използвайте го, за да зададете картинката, която ще се визуализира от контрола с име PictureBox. Задайте стойност StretchImage за неговото свойство SizeMode.

Програмата използва таймер, за да се осигури изпълнението на кода на специфични интервали. След като създадете формата, открийте контрол с име Timer в прозореца Toolbox и щракнете двукратно върху него. Той няма да бъде видим за потребителя.

1. Създайте променлива от тип Integer, за да преброявате успешните удари.2. Създайте променлива от тип Integer, за да определяте общия брой на

направените опити.

3. В процедурата, която обработва събитието Button_Click на “Старт” бутона добавете код, който прави следното:

Нулира броячите Hits и Total. Установява стойност True за свойството Enable на компонента Timer.

Секция 08 – Киев, Украйна Страница 197 от 434

Page 198: CodeRulesBook2010 (Светът на програмирането – пътешествие)

4. В процедурата, която обработва събитието Button_Click на “Старт” бутона добавете код, който прави следното:

a. Ако радио-бутон с име RadioButton1 е натиснат, установява стойност 900 за свойството Interval на компонента Timer, и стойност 40 за височината и ширината на картинката.

b. Ако радио-бутон с име RadioButton2 е натиснат, установява стойност 850 за свойството Interval на компонента Timer, и стойност 35 за височината и ширината на картинката.

c. Ако радио-бутон с име RadioButton3 е натиснат, установява стойност 800 за свойството Interval на компонента Timer, и стойност 30 за височината и ширината на картинката.

5. В процедурата, която обработва събитието Button_Click на “Стоп” бутона добавете код, който установява стойност False за свойството Enable на компонента Timer.

6. В процедурата, която обработва събитието Button_Click на “Изход” бутона добавете код, който затваря програмата посредством командата End.

7. В процедурата, която обработва събитието PictureBox _Click на компонента PictureBox добавете код, който увеличава с единица стойността на брояча Hits и я визуализира в текстовото поле с етикет "Попадения".

8. В процедурата, която обработва събитието, генерирано от компонента Timer, добавете следния код, за да осигурите движение на обекта. Предполага се, че формата има размер 350 х 550.

Dim MyRandomGenerator As System.RandomMyRandomGenerator = New System.RandomDim RandomX As IntegerDim 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)

9. След горния код, увеличете общия брой на направените опити с 1 и го визуализирайте в текстовото поле с етикет "Общо".

Продължение / Обобщение

В началото на играта оставете цвета на формата сив. Осигурете промяна на цвета в червен, когато потребителя уцели подвижния обект.

Секция 08 – Киев, Украйна Страница 198 от 434

Page 199: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 08 – Киев, Украйна Страница 199 от 434

Page 200: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 09 – Катманду, Непал Страница 200 от 434

Page 201: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Сложен If

Катманду, Непал

Клиф свърши чудесна работа като ви запозна с оператора If…Then. Сега вече вашите програми могат да взимат решения! Те почти могат да мислят! Клиф ви показа как да използвате операторите за сравнение и оператора за условен преход, и как да работите с Булевата логика във Visual Basic. Той представи няколко примера, които демонстрират как с оператора "If…Then" се реализира множествен избор и как с Булеви оператори се структурират сложни условия.

Клиф ще кара до нашата следваща дестинация, която е Катманду, Непал. Катманду е разположен в плодородна долина, намираща се в централната част на Непал. Гледката е впечатляваща! Ако имаме достатъчно бензин, пътуването ще бъде прекрасно! Независимо от това, ще ви покажа няколко трика, които правят оператора "If…Then" още по-полезен. В края на пътуването ще можете да накарате програмите си да взимат всякакви решения!

Секция 09 – Катманду, Непал Страница 201 от 434

Page 202: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Разширен If…Then оператор

Знаете как да конструирате If…Then изрази във Visual Basic. С един такъв израз не можете да направите особено много. Ако обаче използвате няколко програмата ви ще може да реализира система от решения. Тя би могла да отговаря на въпроси с повече от два възможни отговора! Клиф ви показа как да обединявате няколко израза в условието на оператора If…Then. Ако условието е True, всички изрази след него ще се изпълнят последователно. Това опростява кода ви и го прави лесен за четене и дебъгване.

Като използвате оператора If…Then можете да напишете код, който кара програмата ви да взима решение без значение колко сложно е то. Подобен код обаче е доста объркващ и притежава повторения. Ще ви науча на няколко трика, които ще улеснят живота ви и ще осигурят на оператора If…Then по-голяма функционалност. Първо ще ви покажа как да влагате If…Then операторите един в друг. След това ще ви науча как да използвате оператора If…Then…Else. Накрая ще ви покажа някои разлики между тези оператор във Visual Basic от една страна и C# от друга. Готови ли сте? Да вървим!

Секция 09 – Катманду, Непал Страница 202 от 434

Page 203: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Вложени If…Then оператори

За да запази нещата по-прости, Клиф ни повери малка тайна за оператора If…Then. В един If…Then оператор можете да вмъкнете друг If…Then оператор! Помислете! Вторият If…Then оператор ще се изпълни само, ако условието от първият оператор е True. Първият оператор включва втория оператор. Това се нарича “влагане” на оператори, защото единият оператор обхваща другият оператор. Нека да разгледаме няколко примера.

Ако имам $200, и ако магазинът е отворен, ще си купя MP3 плеър.

Реализирано с псевдокод това ще изгледа по следния начин:

If имам $200 Then If магазинът е отворен Then Ще си купя MP3 плеър End IfEnd If

Два оператора If…Then са обединени в един! Първият If…Then оператор обхваща втория. Той има едно условие (If имам $200) и израз, който ще се изпълни (If магазинът е отворен then ще си купя MP3 плеър) и всъщност представлява втория If…Then оператор. Вторият If…Then оператор има свое собствено условие (If магазинът е отворен) и свой собствен израз, който ще се изпълни (ще си купя MP3 плеър). Както виждате, за да си купя плеър, трябва да имам $200 и магазинът трябва да е отворен. И двете условия е необходимо да са True. Ако нямам $200, условието в първия If…Then оператор ще бъде False и независимо дали магазинът е отворен или не, няма да си купя MP3 плеър!

Секция 09 – Катманду, Непал Страница 203 от 434

Полезен съвет

Отместванията и подравняванията са от съществено значение при предотвратяване на грешки във вложените If оператори.

Полезен съвет

Някои ученици ще забележат, че примерът по-горе може да се напише със съставен If оператор: If I have $200 and the store is open. Влагането на оператори е подходящо, когато се използват серия от If оператори или когато се използва оператор If с клауза Else.

Page 204: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Сега нека да разгледаме малко повече код. Създайте ново Windows приложение с име Nesting. Добавете върху формата две полета за отметка и един бутон. Задайте стойност "Who's Checked?" за свойството Text на бутона. Създайте обработчик на събитието Button1_Click. Добавете следния код в него:

If CheckBox1.Checked = True Then If CheckBox2.Checked = True Then MessageBox.Show("All are checked.") End IfEnd If

Изградете и стартирайте приложението. Маркирайте първото поле за отметка и натиснете бутона "Who's Checked?". Какво се случва? Нищо. Маркирайте второто поле за отметка и натиснете отново бутона "Who's Checked". Този път се появява диалогов прозорец със съобщение "Both are checked.". Както виждате първият ред от кода е условие:

If CheckBox1.Checked = True Then

След него има израз, който е друг If…Then оператор, вложен в първия. Вложеният If…Then оператор има свое собствено условие:

If CheckBox2.Checked = True Then

След него също следва израз за изпълнение:

MessageBox.Show("All are checked.")

Секция 09 – Катманду, Непал Страница 204 от 434

Page 205: CodeRulesBook2010 (Светът на програмирането – пътешествие)

И така, какво се случва? Ако първото условие (CheckBox1.Checked = True) е True, изразът след него се изпълнява. Изразът обаче притежава друг If…Then оператор. Ако второто условие (CheckBox2.Checked = True) е True, изразът след него се изпълнява и диалоговият прозорец се визуализира. Следователно, за да се визуализира диалоговият прозорец, трябва и двете условия да са True. Това означава, че и двете полета за отметка трябва да са маркирани.

Секция 09 – Катманду, Непал Страница 205 от 434

Page 206: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Забележете, че в кода по-горе вторият If…Then оператор се включва в първия. Ключовите думи End If на първия оператор са след ключовите думи End If на втория оператор, т.е. вторият оператор е вложен в първия. Влагайки множество If…Then оператори можете да изпълните даден израз само, ако всички условия на операторите са True.

Секция 09 – Катманду, Непал Страница 206 от 434

Page 207: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Противоположни условия

Условията, които използвахме до тук, бяха малко еднотипни. Ако са True, то изразът след тях се изпълнява. Ако са False, то нищо не се случва. Какво ще стане, ако искаме нещо да се случи, когато условието е False? Какво ще стане, ако искаме да изпълним някакъв друг код?

Една от възможностите е да използваме друг If…Then оператор с противоположно условие и свой собствен израз за изпълнение. Да напишем малко код. Създайте ново Windows приложение с име IfThenOtherwise. Върху формата добавете бутон и поле за отметка. Задайте стойност "IfThen" за свойството Text на бутона. Поставете следния код в обработчика на събитието Button1_Click:

If CheckBox1.Checked = True Then Form.ActiveForm.BackColor = System.Drawing.Color.RedEnd If

If CheckBox1.Checked = False Then Form.ActiveForm.BackColor = System.Drawing.Color.BlueEnd If

Изградете и стартирайте проекта. Натиснете бутона "If Then". Формата става синя. Маркирайте първото поле за отметка и отново натиснете бутона "IfThen". Формата става червена.

Как работи този код? В първия If…Then оператор се проверява условието CheckBox1.Checked=True. Ако то е изпълнено, цвета на формата става червен. Във втория If…Then оператор се проверява условието CheckBox1.Checked=False (противоположно условие). Ако то е изпълнено, цвета на формата става син. Въпреки повторенията кодът работи! Недостатък в случая е, че вие пишете идентични блокове с код. Това изисква време и създава условия за допускане на грешки.

Секция 09 – Катманду, Непал Страница 207 от 434

Page 208: CodeRulesBook2010 (Светът на програмирането – пътешествие)

If…Then…Else

Visual Basic предлага алтернативен начин за отстраняване на повторяемостта в кода, което ще направи програмите ви по-ясни и по-лесни за четене. Такъв е операторът If…Then…Else statement. Той изисква едно условие, но осигурява два отделни израза за всеки резултат от изпълнението на условието (True and False). Операторът If…Then…Else се използва вместо два If…Then оператора с противоположни условия. Ето и синтаксиса:

If condition Then conditional statement 1Else conditional statement 2End If

Как работи този код? Първо се изпълнява условието. Ако резултатът е True, се изпълнява първият израз (conditional statement 1). В противен случай (else) се изпълнява вторият израз (conditional statement 2).

Нека да модифицираме приложението IfThenOtherwise като използваме оператора If…Then…Else, за да докажем че работи като два If…Then оператора с противоположни условия. Добавете втори бутон. Задайте стойност "IfThenElse" за свойството Text. В обработчика на събитието Button2_Click добавете следния код:

If CheckBox1.Checked = True Then Form.ActiveForm.BackColor = System.Drawing.Color.RedElse Form.ActiveForm.BackColor = System.Drawing.Color.BlueEnd If

Изградете и стартирайте проекта. Натиснете бутона "IfThenElse". Формата става синя. Маркирайте полето за отметка и отново натиснете бутона "IfThenElse". Формата става червена. Програмата работи по същия начин! Кодът проверява условието CheckBox1.Checked=True. Ако то е True, се изпълнява първият израз и формата става червена. В противен случай (else) се изпълнява вторият израз и формата става синя.

Да разгледаме друг пример. Ще променим програмата IfThenOtherwise като добавим няколко реда код в оператора If…Then…Else.

Секция 09 – Катманду, Непал Страница 208 от 434

Page 209: CodeRulesBook2010 (Светът на програмирането – пътешествие)

След ключовите думи Then и Else на оператора могат да се поставят повече от един израз за изпълнение.

Отворете приложението IfThenOtherwise. Премахнете кода от обработчика на събитието Button2_Click и добавете следния:

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

Изградете и стартирайте проекта. Натиснете бутона "IfThenElse". Случват се три неща. Маркирайте полето за отметка и отново натиснете бутона "IfThenElse". Случват се други три неща.

Секция 09 – Катманду, Непал Страница 209 от 434

Полезен съвет

Поощрявайте учениците действително да изпълняват кода стъпка по стъпка, а не само да се плъзгат по повърхността прочитайки го.

Page 210: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Постъпково изпълнение на оператора If

Нека да използваме възможностите за дебъгване във Visual Studio, за да изпълним оператора If…Then…Else стъпка по стъпка. Така ще можете да видите какво действително се случва при изпълнението на кода.

Създайте ново Windows приложение с име StepInIf. Върху формата добавете бутон и поле за отметка. Задайте стойност True за свойството Checked на полето за отметка. Така когато стартирате приложението, полето ще бъде маркирано.

Щракнете двукратно върху бутона, за да създадете обработчик на събитието Button1_Click. Добавете следния код:

Dim MyValue As IntegerMyValue = 1If CheckBox1.Checked = True Then MyValue = 2Else MyValue = 3End If

1. Добавете точка за спиране на изпълнението на кода във втория ред (MyValue = 1) като щракнете върху сивата област вляво или щракнете с десния бутон на мишката върху реда и от появилото се контекстно меню изберете командата Breakpoint и след това Insert Breakpoint.

2. Изградете и стартирайте проекта. Когато формата се визуализира, натиснете бутона. Кодът се изпълнява до точката на спиране.

Секция 09 – Катманду, Непал Страница 210 от 434

Page 211: CodeRulesBook2010 (Светът на програмирането – пътешествие)

3. Натиснете клавиша F11, за да изпълните текущия ред (MyValue=1). Следващият ред се маркира с жълто.

4. Натиснете клавиша F11, за да изпълните текущия ред (If CheckBox1.Checked = True Then). Тъй като полето за отметка е маркирано, следващият ред се маркира с жълто MyValue=2.

5. Натиснете клавиша F11, за да изпълните текущия ред (MyValue=2). Следващият ред се маркира с жълто.

6. Натиснете клавиша F11, за да изпълните текущия ред (End If). Следващият ред се маркира с жълто.

Секция 09 – Катманду, Непал Страница 211 от 434

Page 212: CodeRulesBook2010 (Светът на програмирането – пътешествие)

7. Натиснете клавиша F11, за да изпълните текущия ред (End Sub). Формата се появява отново.

8. Махнете отметката от полето за отметка и натиснете бутона. Повторете описаните по-горе стъпки като натискате клавиша F11 и наблюдавате кои редове ще се изпълнят. Този път се изпълнява клаузата Else, следвана от реда MyValue=3.

Сега вече наистина видяхте как работи оператора If…Then…Else!

Секция 09 – Катманду, Непал Страница 212 от 434

Page 213: CodeRulesBook2010 (Светът на програмирането – пътешествие)

А сега да приложим това, което сме научили.

09 Пробвайте 01 Резултати от игра на голф

Забавлявахме ли се, когато играехме голф тази сутрин? Добре, вие се забавлявахте, а какъв беше моят резултат? Нека да пресметнем резултата.

Създайте форма подобна на показаната по-долу:

Изчислете средния резултат от играта при натискането на бутона ”Изчисли”. Тъй като съдържанието на текстовите полета е от тип string, а не integer, вие трябва да го конвертирате. Visual Basic осигурява няколко начина за това. Ето един от тях.

X = Val(TextBox1.Text)

Функцията Val преобразува символни стойности, след което вие можете да ги присвоите на променливи като X.

За всеки играч:

Ако резултатът му е по-голям от средния, визуализирайте съобщение като например “Отлично” в съответния етикет, в противен случай визуализирайте съобщение – “Тренирай още ”.

Текстовите полета трябва да бъдат празни, когато стартирате програмата. Ако програмата работи правилно, я покажете на вашия учител.

Секция 09 – Катманду, Непал Страница 213 от 434

Page 214: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Операторът If в C#

Показах ви синтаксиса и няколко примера за операторите If…Then и If…Then…Else във Visual Basic. Сега ще накарам Дърк и Джин да ви научат как да използвате тези оператори в C#.

C# има оператори, които работят както операторите If…Then и If…Then…Else във Visual Basic. Те се използват по същия начин. Синтаксисът им обаче е малко по-различен. Нека първо да ви покажа кратък пример на C#, след което ще ви опиша особеностите в него.

int MyAge;MyAge=3;if (MyAge==3){ MessageBox.Show("I am 3."); MessageBox.Show("I am still 3.");}

На първия ред е декларирана променлива с име My Age. На вторият ред тя е инициализирана със стойност 3. След това започва оператора "if". Забележете, че той се пише с малки букви. След него следва условието (MyAge==3). Условието е поставено в скоби. Сигурно се чудите каква е ролята на двойния знак равно. В C# този символ се използва като оператор за сравнение вместо единичния знак равно във Visual Basic. Изразите които се изпълняват след условието са обградени с фигурни скоби – { и }. Някои програмисти използват фигурните скоби, за да направят кода по-четлив. Забележете, че всеки един от изразите завършва с точка и запетая. Също така ключовата дума "Then" липсва!

А сега да разгледаме оператора "If…Then…Else" в C#. Потърсете разликите и приликите между съответстващите си оператори в C# и Visual Basic.

int MyAge;MyAge=3;if (MyAge==2){ MessageBox.Show("I am 2."); MessageBox.Show("I am still 2.");}else{ MessageBox.Show("I am 3."); MessageBox.Show("I am still 3.");}

Секция 09 – Катманду, Непал Страница 214 от 434

Полезен съвет

Напредналите ученици могат да приключат програмата на Visual Basic по-бързо и да я напишат на C# или C++.

Page 215: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Отново се забелязва, че изразите за изпълнение се обграждат с фигурни скоби. Виждат се две групи от изрази – една след условието на оператора if, и друга след клаузата else. Всяка група е поставена между фигурни скоби. Всеки един от изразите завършва с точка и запетая. Също така ключовата дума "Then" не се използва.

Секция 09 – Катманду, Непал Страница 215 от 434

Page 216: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Оператори в C#

Има още някои различия при конструиране на изрази с операторите "If…Then" и "If…Then…Else" във Visual Basic от една страна и C# от друга. Първо, Булевите оператори използват различни символи. Вместо And, Or, и Not, C# използва &&, ||, и ! Разгледайте таблицата по-долу, за да установите разликите.

Булев оператор Visual Basic C#AND And &&OR Or ||NOT Not !

Ето и пример, който използва Булевите оператори AND (&&) и NOT (!) в C#.

bool isBilled=true;bool isLate=false;bool isDone;isDone = isBilled && !isLate;MessageBox.Show(isDone.ToString());

Забележете, че резервираните думи bool (Булев тип), true, и са с малки букви. Променливите isBilled, isLate и isDone са декларирани от Булев тип. В C# вместо оператора AND се използва оператора &&, а вместо оператора NOT – оператора !. Тъй като C# не подържа автоматично преобразуване в символен низ, се използва метода ToString.

Секция 09 – Катманду, Непал Страница 216 от 434

Page 217: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Съществуват различия и между операторите за сравнение. Вече видяхте, че представяне на равенство се използва знака == вместо знака =. За представяне на неравенство в C# се използва знака != вместо знака <>. Таблицата по-долу описва изброените различния.

Оператор за сравнение Visual Basic C#Равно = ==По-голямо > >По-малко < <По-голямо или равно >= >=По-малко или равно <= <=Различно <> !=

Разгледайте кода на C#, който използва оператора за неравенство.

int MyAge;MyAge=2;if (MyAge!=3){

MessageBox.Show("I am not 3.");}

Както виждате кодът визуализира съобщение "I am not 3.".

Получихме доста разяснения. Виждам доста разлики в начина на използване на операторите "If…Then" и "If…Then…Else" във Visual Basic 2010 и C#. Не може да се отрече и наличието на прилики! Тези оператори правят едно и също нещо по един и същ начин, но имат различен синтаксис.

Секция 09 – Катманду, Непал Страница 217 от 434

Page 218: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане в Катманду, Непал

Ето ни в Катманду, Непал! Научихте ли доста по време на пътуването? Сега вече знаете как да използвате доста програмни техники. Можете да пишете вложени If…Then оператори и да конструирате изрази с оператора If…Then…Else. Вашият код вече наистина би могъл да взима решения!

Добре, време е за малко практика. Ето ви една математическа задача.

Секция 09 – Катманду, Непал Страница 218 от 434

Page 219: CodeRulesBook2010 (Светът на програмирането – пътешествие)

09 Пробвайте 02 Магически квадрат

Аз не съм професионален фокусник като този, който видяхме в Увеселителния парк на Катманду, но знам един магически трик. Мога да подредя цифрите от 1 до 9 в решетка от 3 реда и 3 колони така че сумата им във всички посоки да бъде една и съща.Можете ли да напишете подобна програма?

Създайте форма подобна на показаната по-долу:

При натискане на бутона “Изчисли“ се изчислява сумата на числата по трите реда, трите колони и двата диагонала, като резултатът се визуализира в текстовите полета номерирани от 10 до 17 (от най-долния ляв до най-горния десен).

Тъй като съдържанието на текстовите полета е от тип string, а не integer, вие трябва да го конвертирате. Visual Basic осигурява няколко начина за това. Ето един от тях.

X = Val(TextBox1.Text)

Функцията Val преобразува символни стойности, след което вие можете да ги присвоите на променливи или да ги използвате в конструкции If.

Секция 09 – Катманду, Непал Страница 219 от 434

Page 220: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Всяка сума трябва да е равна на 15. Сумата на всички девет текстови полета трябва да е 45.

Етикетът с име Label2 в долната част на формата може да бъде използван за визуализиране на успеваемостта, за да поощри играча да опита отново или за да отбележи дублирането на цифри.

Ако програмата работи правилно, я покажете на своя учител.

Секция 09 – Катманду, Непал Страница 220 от 434

Полезен съвет

Ако сумата на всички 9 полета не е 45, то вероятно е дублирано число. Учениците също трябва да проверят за числа, които са по-големи от 9 или по-малки от 1.

Page 221: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Готови ли сте за истинско предизвикателство?

09 Можете ли? Ези или тура

Всеки път, когато между нас има несъгласие, като например кой да изхвърли боклука, теглим чоп като използваме монета. Нека да накараме компютъра да направи хвърляне на монетата. Ние ще трябва да предположим дали резултатът от хвърлянето ще бъде ези или тура.

Създайте форма подобна на показаната по-долу:

Когато съответния радио-бутон е натиснат променете стойността на контрола TextBox1 на “Ези” или “Тура”.

При натискането на бутона “Играй”, генерирайте случайно число като използвате следния код:

Dim MyRandomGenerator As System.Random MyRandomGenerator = New System.Random Dim RanNum As Integer

RanNum = MyRandomGenerator.Next(0, 2)

Секция 09 – Катманду, Непал Страница 221 от 434

Page 222: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ако случайното число е 0, установете текста в компонента TextBox2 на “Ези”, в противен случай – на “Тура ”.

Ако текстът в компонента TextBox1 е еквивалентен на текста в компонента TextBox2, добавете 1 към стойността, отчитаща победите, в противен случай извадете 1.

Визуализирайте броя на победите и загубите в подходящи текстови полета.

Забележка: В секция 7 научихте, че не можете да смесвате числови и символни стойности. Текстовите свойства винаги са от тип String. Visual Basic ви позволява директно да въвеждате числови стойности в текстовите полета, но възниква проблем при тяхното прочитане. Дефинирайте две променливи от тип Integer за победите и загубите. Използвайте ги, за да преизчислявате резултата, след което визуализирайте стойностите им в текстовите полета.

Ако програмата работи правилно, я покажете на учителя си.

Продължение / Обобщение

Добавете полета, за да покажете процента на победите и процента на загубите.

Секция 09 – Катманду, Непал Страница 222 от 434

Page 223: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 09 – Катманду, Непал Страница 223 от 434

Page 224: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 10 – Куала Лумпур, Малайзия Страница 224 от 434

Page 225: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Цикъл For

Куала Лумпур, Малайзия

По време на пътуването ние определено напредваме в знанията си! Следващата ни дестинация е Куала Лумпур! Това е привлекателно място, разположено на хълмовете в южно-малайския полуостров. Имах неудоволствието да се изгубя там! След малко ще направите едно малко кръгче!

На този етап от пътуването ни ще тръгнем в съвсем различна посока. Вече знаете как да пишете код, който взима решения. Сега ще ви покажа как да пишете код, който се изпълнява циклично. Циклите се използват за многократно изпълнение на кода. Като програмисти вие трябва да знаете как да дефинирате цикли, тъй като са те са друга основно средство в езиците за програмиране.

Секция 10 – Куала Лумпур, Малайзия Страница 225 от 434

Page 226: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Цикли

През живота си ние повтаряме изпълнението на много неща. Спомням си, когато боядисвах мотоциклета си. Нанесох три пласта боя. Свърших доста работа, но резултатът си заслужаваше. След това майка ми ми напомни да изхвърля боклуците поне пет пъти преди да го направя.

Когато пишете код се случват подобни неща. Понякога програмата ви трябва да повтаря определен брой пъти изпълнението на някои неща. Ето защо всички езици за програмиране притежават цикли. Кодът в цикъла се изпълнява многократно. Циклите са много удобни. Те намаляват кода, който трябва да пишете. Използвайки ги, вие пишете определен код само веднъж, след което той може да се изпълни няколко пъти. Това значително намалява шанса да допуснете грешка.

Ето ви пример, който показва колко полезни са циклите. Представете си, че искате да съберете всички числа между 1 и 100. Можете да направите това като напишете дълъг израз. Например,

Dim TotalCount As IntegerTotalCount = 0TotalCount = 1 + 2 + 3 + 4 'etc.

Изглежда досадно! Какво ще кажете за това?

Dim TotalCount As IntegerTotalCount = 0TotalCount = TotalCount + 1TotalCount = TotalCount + 1TotalCount = TotalCount + 1TotalCount = TotalCount + 1'и т.н.

Все още в кода се наблюдава повторяемост. Един из същ ред трябва да се повтори 100 пъти!

А ако трябва да съберете всички числа от 1 до 1,000? Как ще го направите?

Секция 10 – Куала Лумпур, Малайзия Страница 226 от 434

Page 227: CodeRulesBook2010 (Светът на програмирането – пътешествие)

For…Next

Тук се появяват циклите. Както споменахме по-рано всички езици за програмиране притежават цикли, които позволяват кодът да се изпълнява многократно. В повечето случаи знаете колко пъти трябва да се изпълни кода. В примера за събирането на числата от 1 до 1,000 кодът трябва да се изпълни 1,000 пъти. Когато знаете колко пъти трябва да се изпълни даден код, вие използвате т.нар. “определени цикли”. Те са наречени така, защото броят на изпълненията е точно определен. С тях казвате на кода колко пъти да повтори изпълнението си.

Във Visual Basic определен цикъл се дефинира с конструкцията For...Next. Кодът, който трябва да се изпълни многократно, се поставя в оператора For...Next. Ето и синтаксиса на цикъла във Visual Basic:

Dim LoopCounter As Integer

For LoopCounter = LowerValue To UpperValue statement1 statement2 statement etc.Next

Секция 10 – Куала Лумпур, Малайзия Страница 227 от 434

Page 228: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Забележете, че "For", "Next" и "To" са ключови думи. Те са оцветени в синьо и започват с главна буква. LoopCounter е променлива, която трябва да декларирате от тип Integer, преди да бъде използвана в цикъла. (Не е задължително името й да бъде LoopCounter.) Променливата LoopCounter съхранява броя на изпълненията в цикъла. Нейната стойност е достъпна в цикъла.

Секция 10 – Куала Лумпур, Малайзия Страница 228 от 434

Page 229: CodeRulesBook2010 (Светът на програмирането – пътешествие)

LowerValue и UpperValue трябва да бъдат целочислени константи, променливи от тип Integer или изрази, които дават целочислен резултат като (3 + 1 or X + 1). LowerValue е инициализираща стойност за променливата LoopCounter. UpperValue е крайната стойност за променливата LoopCounter. Всеки път, когато цикълът се изпълнява стойността на променливата LoopCounter се увеличава с единица. Когато тази стойност стане по-голяма от UpperValue, цикълът спира.

Нека да напишем някакъв код, който използва определен цикъл, конструиран с оператора For...Next. Като начало ще направим цикъл, който се изпълнява 2 пъти и показва стойността на брояча на всяка итерация. Създайте ново Windows приложение с име ForNextTwo. Върху формата добавете бутон. Щракнете двукратно върху бутона, з ада създадете обработчик на събитието Button1_Click. Добавете следния код:

Dim LoopCounter As IntegerFor LoopCounter = 1 To 2 MessageBox.Show(LoopCounter)Next

Изградете и стартирайте проекта. Натиснете бутона. Диалогов прозорец визуализира съобщение "1", което е текущата стойност на брояча LoopCounter. Натиснете бутона OK в прозореца. Друг диалогов прозорец визуализира съобщение "2", което отново е текущата стойност на брояча LoopCounter. Натиснете бутона OK. Цикълът приключва изпълнението си и повече съобщения не се показват.

Ето какво се случва. В кода декларирахте променлива с име LoopCounter от тип Integer. След ключовата дума For инициализирахте променливата LoopCounter с 1 и ограничихте нарастването й до стойност 2. Изразът, който трябва да се изпълни поставихте между ключовите думи For и Next. Всеки път, когато цикълът се изпълнява, стойността на променливата LoopCounter нараства с единица. Диалоговият прозорец показва текущите стойности на променливата LoopCounter (1, 2). Когато стойността на променливата LoopCounter стане 3, цикълът приключва и диалоговият прозорец не се визуализира повече!

Секция 10 – Куала Лумпур, Малайзия Страница 229 от 434

Полезен съвет

Най-често учениците използват цели числа за начало и край на цикъла. Те забравят, че числата 1 или 2 от примера могат да бъдат променливи като например X или израз като X + 3.

Полезен съвет

Когато цикълът For приключи, броячът има стойност, която е с 1 по-голяма от горната граница на цикъла.

Page 230: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 10 – Куала Лумпур, Малайзия Страница 230 от 434

Page 231: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Постъпково изпълнение на цикъла For…Next

Нека да изпълним кода, който написахте като използваме средствата за дебъгване във Visual Studio. Изпълнението ще проследим стъпка по стъпка. Следвайте инструкциите:

1. Поставете точка за спиране на реда, който започва с ключовата дума For. Изградете и стартирайте приложението.

2. Формата се показва. Натиснете бутона. Редът с точката за спиране се маркира с жълт цвят.

3. Натиснете клавиша F11. Маркираният ред се изпълнява.

For LoopCounter = 1 To 2

Преместете курсора на мишката над променливата LoopCounter. Стойността й е 1.

4. Натиснете клавиша F11. Маркираният ред се изпълнява.

MessageBox.Show(LoopCounter)

Секция 10 – Куала Лумпур, Малайзия Страница 231 от 434

Полезен съвет

Накарайте учениците да направят това, а не само да го прочетат.

Page 232: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Диалоговият прозорец показва 1. Натиснете бутона OK, за да затворите прозореца.

5. Натиснете клавиша F11. Маркираният ред се изпълнява.

Next

6. Изпълнява се и реда с ключовата дума For.

For LoopCounter = 1 To 2

Преместете курсора на мишката над променливата LoopCounter. Стойността й е 2.

7. Натиснете клавиша F11. Маркираният ред се изпълнява.

MessageBox.Show(LoopCounter)

Секция 10 – Куала Лумпур, Малайзия Страница 232 от 434

Page 233: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Диалоговият прозорец показва 2. Натиснете бутона OK, за да затворите прозореца.

8. Натиснете клавиша F11. Маркираният ред се изпълнява.

Next

9. Изпълнява се и реда с ключовата дума.

For LoopCounter = 1 To 2

Преместете курсора на мишката над променливата LoopCounter. Стойността й е 3.

10. Натиснете клавиша F11. Маркираният ред се изпълнява.

End Sub

Формата се появява отново.

Използвахте средствата за дебъгване в цикъла For...Next. Сега вече наистина видяхте как протича изпълнението на цикъла от гледна точка на програмата!

Секция 10 – Куала Лумпур, Малайзия Страница 233 от 434

Page 234: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Сумиране на числата до 1000

Имам идея! Нека да напишем код, който събира числата от 1 и 1,000! Готови ли сте? С цикъла For...Next е лесно. Създайте ново Windows приложение с име AddUp. Върху формата добавете бутон. Задайте стойност "Add" за свойството Text на бутона. Щракнете двукратно върху него, за да създадете обработчик на събитието Button1_Click. Добавете следния код:

Dim LoopCounter As IntegerDim TotalCount As Integer = 0

For LoopCounter = 1 To 1000 TotalCount = TotalCount + LoopCounterNextMessageBox.Show(TotalCount)

Изградете и стартирайте приложението. Натиснете бутона "Add". Диалоговият прозорец показва крайният резултат от събирането на числата от 1 до 1,000. Не беше ли бързо? Написахте кода, а програмата изчисли резултата по-бързо отколкото вие можете да го направите с калкулатор!

Как работи кода? Първо декларирахме две целочислени променливи: LoopCounter и TotalCount. Променливата LoopCounter определя броя на изпълненията на цикъла. Променливата TotalCount съхранява получената междина сума. След ключовата дума For променливата LoopCounter е инициализирана с 1, а нарастването на стойността й е ограничено до 1000. Ето защо цикълът се изпълнява 1000 пъти, събирайки числата от 1 до 1000. Изразът, чието изчисление се повтаря, събира текущата стойността на променливата TotalCount с текущата стойност на променливата LoopCounter и съхранява резултата е променливата TotalCount. При всяко изпълнение на цикъла стойността на променливата LoopCounter се добавя към стойността на променливата TotalCount (0+1=1, 1+2=3, 3+3=6, 6+4=10, etc.) . Когато променливата LoopCounter стане 1000, цикълът приключва и се изпълнява редът след ключовата дума Next. Тогава диалоговият прозорец показва стойността на променливата TotalCount.

Секция 10 – Куала Лумпур, Малайзия Страница 234 от 434

Page 235: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 10 – Куала Лумпур, Малайзия Страница 235 от 434

Page 236: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изхвърли боклука

Сега нека да разгледаме още няколко примера, които използват определен цикъл, за да реализират нещо различно от математически изчисления. Спомняте ли си, че в цикъла For...Next е възможно да поставите всякакъв код. Можете автоматично да конструирате дълги символни низове, да показвате досадни съобщения многократно или да променяте свойства въз основа на брояча в цикъла. Пробвайте това различно приложение на циклите.

Стартирайте ново Windows приложение с име GarbageOut. Върху формата добавете бутон. Задайте стойност "Mom Says" за свойството Text на бутона. Щракнете двукратно върху него, за да създадете обработчик на събитието Button1_Click. Добавете следния код:

Dim i As Integer = 0MomMessage = "Please, Take Out The Garbage."For i = 1 To 5 MessageBox.Show(MomMessage) MomMessage = MomMessage & vbNewLine & MomMessageNext Dim MomMessage As String

Изградете и стартирайте проекта. Натиснете бутона "Mom Says". Показва се съобщение с думите на майка ми. Натиснете отново бутона "Mom Says". Забележете как съобщението нараства. Добре, добре. Разбрах! Циклите предоставят механизъм за сливане на символни низове.

Секция 10 – Куала Лумпур, Малайзия Страница 236 от 434

Page 237: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ето друг интересен пример. Добавете върху формата друг бутон. Задайте стойност "Color Again" за свойството Text на бутона. Щракнете двукратно върху него, за да създадете обработчик на събитието Button2_Click. Добавете следния код:

Dim i As Integer = 0For 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 IfNext

Изградете и стартирайте проекта. Натиснете бутона "Color Again". Диалогов прозорец показва текущата стойност на брояча в цикъла. Забележете, че този път първоначалната стойност на брояча е 2, а крайната – 6. Операторът If...Then...Else в цикъла определя в зависимост от стойността на брояча как да се оцвети формата. Доста ловко, нали? Поставих диалогов прозорец, за да виждате стойността на брояча и за да проследите промяната на цвета на формата.

Секция 10 – Куала Лумпур, Малайзия Страница 237 от 434

Page 238: CodeRulesBook2010 (Светът на програмирането – пътешествие)

10 Пробвайте 01 Преброяване на зайци

Погледнете навън! Прекосявайки пътя се натъкнахме на голям заек! Допускате ли, че заекът мисли, че може да живее вечно? Хрумва ми идея. Да предположим, че зайците живеят вечно и са на остров с много растителност и без хищници. Да предположим също така, че на острова първоначално има два заека и всяка двойка зайци има поколение от четири зайчета. След едно поколение зайците ще бъдат 6 (2 + 4 = 6), а след две – 18 (6 + 12).

Как ще нараства популацията на зайците с всяко поколение?

Създайте форма подобна на показаната по-долу:

Визуализирайте номера на поколението, броя на зайците, и броя на зайците на квадратен метър, имайки предвид, че островът е един квадратен километър.

Позволете на потребителя да избере броя на поколенията.

За да направите изходните данни лесни за четене, използвайте константите vbTab и vbNewLine на Visual Basic:

Секция 10 – Куала Лумпур, Малайзия Страница 238 от 434

Page 239: CodeRulesBook2010 (Светът на програмирането – пътешествие)

VariableX = Format(VariableX, “###, ###, ###, ###, ##0”)

илиVariableY = Format(VariableY, ###, ##0.0000”)

Ако програмата работи правилно, я покажете на учителя си.

Секция 10 – Куала Лумпур, Малайзия Страница 239 от 434

Page 240: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Вложени цикли

Да продължим с циклите! Знаете ли, че можете да поставите един цикъл в друг? Вътрешният цикъл е кодът, който се изпълнява на всяка итерация от външния цикъл. Тогава колко пъти се изпълнява вътрешния цикъл? Разгледайте примера, за да отговорите на въпроса.

Създайте ново Windows приложение с име LoopTheLoop. Добавете върху формата бутон. Щракнете двукратно върху бутона, за да създадете обработчик на събитието Button2_Click. Добавете следния код:

Dim OuterLimit As Integer = 3Dim InnerLimit As Integer = 4Dim OuterCounter As IntegerDim OnnerCounter As IntegerDim Total As Integer = 0

For OuterCounter = 1 To OuterLimit For InnerCounter = 1 To InnerLimit Total = Total + 1 NextNextMessageBox.Show("Total= " & Total)

Изградете и стартирайте проекта. Натиснете бутона. Диалоговият прозорец показва "Total= 12". Това е броят на изпълненията на вътрешния цикъл. Погледнете отново кода. Забелязахте ли, че 12 е равно на 3 (броя на изпълненията на външния цикъл) умножено по 4 (броя на изпълненията на вътрешния цикъл)? Точно така! Всеки път, когато външният цикъл се изпълнява, вътрешният цикъл се изпълнява 4 пъти. Тъй като външният цикъл се изпълнява 3 пъти, то вътрешният цикъл се изпълнява 4 x 3=12 пъти.

Забележете, че използвахме две променливи OuterLimit и InnerLimit, за да ограничим броя на изпълненията съответно на външния и вътрешния цикъл. Стойностите, които определят горната и долната граница на броячите, не е задължително да бъдат целочислени константи. Те могат да бъдат променливи или изрази, които дават целочислен резултат. Забележете също така, че вътрешният цикъл е отместен навътре в кода.

Секция 10 – Куала Лумпур, Малайзия Страница 240 от 434

Полезен съвет

Попитайте предварително учениците каква ще бъде стойността на променливата Total, докато още не са започнали да програмират.

Page 241: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Знакът Exit

Време е да прекъснем за малко дългото си пътуване и да направим почивка. Трябва да стигнем до знак за изход и да се отклоним от главния път. Мисля, че това понякога се случва и в кода. Изпълнението му също може да се прекъсне. Представете си, че събирате числата от 1 до 1000! Аз бих се уморил също!

Понякога може да се наложи да спрете изпълнението на цикъла преди броячът да е достигнал крайната си стойност. Това става посредством израза "Exit For". Той се поставя в оператора If...Then в тялото на цикъла. Условието на оператора If...Then определя кога изпълнението на цикъла ще се прекрати. Нека да напишем малко код, за да демонстрираме как става това.

Създайте ново Windows приложение с име ExitSign. Върху формата добавете бутон. Задайте стойност " ExitNow " за свойството Text на бутона. Щракнете двукратно върху него, за да създадете обработчик на събитието Button1_Click. Добавете следния код:

Dim i As Integer = 0For i = 1 To 5MessageBox.Show("i inside= " & i)

If i = 3 ThenExit ForEnd If

Секция 10 – Куала Лумпур, Малайзия Страница 241 от 434

Полезен съвет

Операторът Exit се използва в много случаи: Exit For, Exit Do, Exit Sub

Page 242: CodeRulesBook2010 (Светът на програмирането – пътешествие)

NextMessageBox.Show("i outside= " & i)

Секция 10 – Куала Лумпур, Малайзия Страница 242 от 434

Page 243: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изградете и стартирайте проекта. Натиснете бутона "Exit Now" няколко пъти. Диалогов прозорец показва стойността на брояча в цикъла. Когато тя стане 3, условието на оператора If...Then се удовлетворява и изразът Exit For се изпълнява. Цикълът се прекратява без да са изпълнени всички итерации. Забележете, че диалоговият прозорец никога не показва съобщение “i inside = 4”. Когато цикълът приключи, кодът след ключовата дума Next се изпълнява. Тогава диалоговият прозорец показва съобщение “i outside = 3”.

Ето друг пример. Ще добавим още малко функционалност към приложението Exit Sign. Върху формата добавете поле за отметка и втори бутон. Задайте стойност " ChexIt " за свойството Text на бутона. Щракнете двукратно върху него, за да създадете обработчик на събитието Button2_Click. Добавете следния код:

Dim LoopIndex As IntegerFor LoopIndex = 1 To 5

If LoopIndex = 4 Then  CheckBox1.Checked = True

End IfIf CheckBox1.Checked = True ThenMessageBox.Show("Exit on: " & LoopIndex)Exit ForEnd If

Next

Изградете и стартирайте проекта. Натиснете бутона "ChexIt". Цикълът For...Next се изпълнява докато променливата LoopIndex не стане равна на 4. След това се проверява стойността на свойството Checked на полето за отметка. Тъй като това поле е маркирано, диалогов прозорец показва стойността на променливата LoopIndex и се изпълнява реда Exit For. Цикълът приключва.

Натиснете отново бутона "ChexIt", докато полето за отметка все още е маркирано. Какво се случва? Редът Exit For се изпълнява, когато LoopIndex = 1.

Секция 10 – Куала Лумпур, Малайзия Страница 243 от 434

Page 244: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Цикълът For…Next в C#

Както всички съвременни езици за програмиране C# също поддържа определени цикли! Може би Джин и Дърк могат да ни покажат как да използваме циклите в тези езици? Какво ще кажете за това?

C# има еквивалентен на Visual Basic оператор за реализиране на цикъл, който обаче изгледа малко по-различно. Ето как се създава определен цикъл в C#:

for (int LoopCounter = 1; LoopCounter < 5; LoopCounter++){MessageBox.Show(LoopCounter.ToString());}

Кодът изглежда различно в сравнение с разгледания преди това, но работи по същия начин.

В C# не се използва ключова дума Next, а ключовата дума for се пише с малки букви. Кодът, който трябва да се изпълнява в цикъла, се загражда с фигурни скоби. Кодът в кръглите скоби контролира изпълнението на цикъла:

int LoopCounter = 1;

Декларира се брояча на цикъла и го инициализира.

LoopCounter < 4;

Задава се крайната стойност на брояча, при достигането на която цикълът спира.

LoopCounter++

Инкрементира се броячът с 1.Това може да бъде написано и по следния начин

Секция 10 – Куала Лумпур, Малайзия Страница 244 от 434

Page 245: CodeRulesBook2010 (Светът на програмирането – пътешествие)

LoopCounter = LoopCounter + 1

Всичко това е само в един ред от кода!

Ето и код, написан на C#. Изглежда по същия начин с изключение на това, че използва функцията System.Convert.ToString, за да преобразува стойността на брояча в символна стойност, за да я покаже в диалогов прозорец.

for (int LoopCounter = 1; LoopCounter < 5; LoopCounter++){MessageBox.Show(System.Convert.ToString(LoopCounter));}

Благодаря ти, Джин. Дори и да изглежда по различен начин в сравнение с Visual Basic, операторът за цикъл има същото приложение – многократно изпълнение на един и същ код.

Секция 10 – Куала Лумпур, Малайзия Страница 245 от 434

Page 246: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане в Куала Лумпур, Малайзия

Като че ли пътуването беше кратко! Хубаво е, че не се загубихме в пустинята. Можехме още да се движим в кръг! По пътя ви показах как да изпълнявате многократно код като използвате оператора For...Next. Този оператор е подходящ, когато знаете броя на повторенията в тялото на цикъла. Показах ви също и как да използвате израза Exit For, за да прекъснете изпълнението на цикъла.

Сега вече усвоихте с още една програмна техника. Проверете дали можете да приложите това, което сте научили, в следващата задача. Сигурен съм, че Комисията по състезанията има за вас ново предизвикателство. Не забравяйте теста!

Секция 10 – Куала Лумпур, Малайзия Страница 246 от 434

Page 247: CodeRulesBook2010 (Светът на програмирането – пътешествие)

10 Пробвайте 02 Прости числа

Тази вечер очаквам с нетърпение крехките ребърца вместо обичайната пица. Крехки ребърца! Вкусно!

Говорейки за крехките, неделими ребърца, си спомних за простите числа, които изучавахме в клас. Просто число е това число, което се дели без остатък само на себе си и 1. Например: 2, 3, 5, 7. Числата 4, 6, 8, и 9 не са прости, защото се делят на две, а 9 респективно на 3.

Можете ли да напишете програма, която изчислява простите числа от 2 до 5000?

Създайте форма подобна на показаната по-долу:

Изчислете простите числа до 5000 при натискането на бутона “Изчисли”. Добавете ги в текстово поле.

Секция 10 – Куала Лумпур, Малайзия Страница 247 от 434

Page 248: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ето и някои съвети, които могат да ви бъдат полезни.

Запознавайки се с материалите от курса по програмиране, вие научихте, че можете да влагате един в друг блокове с изходен код, например няколко условни оператора If. Също така можете да влагате и оператори за цикъл For, като единия цикъл е вътрешен , а другия външен. Важно е да внимавате със затварянето на циклите – първо се затваря вътрешния, а след това външния цикъл. Използвайте външен цикъл, който започва от 2 и приключва с 5000.

Променливата от външния цикъл е числото, което ще се проверява дали е просто. Вътрешния цикъл трябва да започва от 2 и да приключва с текущата стойност на външния цикъл намалена с 1. Защо това трябва да се направи така? Защото променливата от вътрешния цикъл не трябва да става по-голяма от променливата във външния цикъл. Защо минус 1? Защото простите числа могат да се делят сами на себе си и следователно не е нужно това да се проверява.

Ще ви бъде необходима променлива – флаг, която ще обозначава дали стойността на променливата от външния цикъл е просто число или не. Тя трябва да приеме стойност True преди влизането в ъв вътрешния цикъл и да се установи в състояние False, ако условието за проверка дали дадено число е просто не е изпълнено.

Във втория цикъл трябва да проверите дали съществува остатък при деление на съответното число с променливата, управляваща цикъла.

Да разгледаме числата X иY. Как ще установите, че Y дели X без остатък? Съществуват няколко начина. Тъй като проверяваме вашите умения в конструирането на цикли, а не знанията ви по математика, ще ви дадем идея. Най-лесният начин е да използвате оператора Mod. Предположете, че сте дефинирали променлива с име Remainder, която ще приема остатъка от делението на X иY. Следователно:

Remainder = X Mod Y

След като приключи вътрешния цикъл вие трябва да добавите съответното число в текстовото поле, ако стойността на променливата – флаг е True. Може би ще е необходимо по някакъв начин да отделяте визуално простите числа в текстовото поле със запетая, интервал или по някакъв друг, избран от вас начин..

Ако програмата работи правилно, я покажете на вашия учител.

Секция 10 – Куала Лумпур, Малайзия Страница 248 от 434

Page 249: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ето и предизвикателството на Комисията по състезанията.

10 Можете ли? Калкулатор на Рот

Моето желание е да работя дълго време като програмист, но един ден знам, че ще трябва да се пенсионирам. Мислех си за времето, когато това ще се случи, и знам, че ако започна да спестявам като млад, по-късно ще разполагам със значителни средства.

Чувал съм за личната пенсионна сметка на Рот. Рот е човекът, който се грижи за сметката на Конгреса. Той определя влоговете по отношение на по-особени данъци. Вие никога не сте плащали данък върху приходите си, т.е. запазвате всичко, което сте спечелили. Можете да спестявате пари докато навършите 59 години и половина или да използвате спестяванията си за да завършите образованието си или да закупите първия си дом.

Нека да създадем калкулатор на Рот.Създайте форма подобна на показаната по-долу:

Секция 10 – Куала Лумпур, Малайзия Страница 249 от 434

Полезен съвет

Вижте полезния съвет от последната страница.

Page 250: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Във формата се въвеждат възраст, от която започвате да спестявате, възраст, от която спирате, годишен депозит, и процент на заинтересованост, който е цяло число.

След като вече изучихме циклите имаме и подходяща възможност да ги използваме. Стойностите за началната и крайната възраст могат да се използват за дефиниране на цикъла. Не забравяйте, че текстовите полета получават символни стойности така, че трябва да използвате функцията Val за да ги преобразувате в числа по следния начин

X = Val(TextBox1.Text).

Визуализирайте възрастта, общата стойност на депозитите от началото на спестяването, баланса на сметката и печалбата, която е разлика между депозитите и баланса.

За да форматирате изхода, използвайте функцията Format. Например:

VariableX = FormatCurrency(VariableX)

Съвет 1: Преди всяко изчисление добавяйте един депозит.Съвет 2: Печалбата се определя от баланса, който е натрупания депозит

умножен по (1 + процента), т.е. 9% са 1.09.

Ако програмата работи правилно, я покажете на учителя си.

Продължение / Обобщение

Какво ще стане, ако правите същите влогове в обикновена банкова сметка? При обикновените банкови сметки правителството получава част от приходите ви. Предположете, че се отдържат по 25% от приходите ви всяка година. С каква сума ще разполагате в края на периода, в който спестявате?

Секция 10 – Куала Лумпур, Малайзия Страница 250 от 434

Page 251: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 10 – Куала Лумпур, Малайзия Страница 251 от 434

Page 252: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 10 – Куала Лумпур, Малайзия Страница 252 от 434

Полезен съвет

Обикновено това е много труден проект за учениците, не от гледна точка на програмната реализация, а поради това, че лихвените проценти и данъците са нещо ново за тях. Ето един анализ, който е използван в други класове:

Ваша цел е да увеличите банковата си сметка, която първоначално е нулева.

Това е направено по два начина. Единият е вие да внесете пари в банковата сметка. Вторият е банката да добавя пари към банковата ви сметка като компенсация, че работи с парите ви.

В проекта предполагаме, че вие внасяте пари веднъж годишно и банката ви плаща също веднъж годишно. Ще използвате цикъл For, с който ще внасяте пари в банката и ще им начислявате лихва определен брой години.

В цикъла ще правите две неща.Първо, ще добавяте пари. Второ, банката ще добавя пари, увеличавайки банковата ви сметка. Увеличаването се

прави чрез умножение на банковата сметка с 1 плюс лихвения процент. Ако лихвения процент е 3%, то банковата сметка трябва да се умножи по 1.03.

След като цикълът приключи трябва да форматирате и визуализирате резултата в текстово поле.

На следващата стъпка трябва да сумирате всички внесени от вас суми. Внасяте пари всяка година, включително и първата. Ако предположим, че започвате да внасяте пари от 16 до 20 годишна възраст, то сте внесли суми на 16, 17, 18, 19 и 20 години. Това означава, че горната граница на цикъла се изчислява като възрастта на спиране минус възрастта на започване плюс 1.

Лихвата, която банката плаща, се изчислява като от банковата сметка се извади внесената от вас сума.

А данъците? Правителството взима част от всички пари, които сте спечелили.

За внесените пари не се плащат данъци, защото те са вече платени, когато сте получавали заплатата си от работодателя.

Ще плащате данък върху лихвата, защото тя е нов приход за вас, който не е обложен преди.

Page 253: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 11 – Пекин, Китай Страница 253 от 434

Page 254: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Неопределени цикли

Пекин, Китай

Клиф ще кара до нашата следваща дестинация – Пекин, Китай. Ще продължим по живописния път на циклите. По време на последното ни пътуване свършихме чудесна работа като ви запознахме с определените цикли – цикли, които се изпълняват определен брой пъти. На това пътуване отново ще се занимаваме с цикли, които обаче са по-различни. Те се наричат неопределени цикли, тъй като предварително не е известно колко пъти ще се изпълнят. Такива цикли спират изпълнението си, когато се изпълни определено условие.

Ще откриете, че неопределените цикли предоставят друга полезна техника, която всеки програмист трябва да знае как да използва. Съществуват случаи, когато определените цикли не са подходящи, и тогава трябва да се използват неопределените цикли.

Секция 11 – Пекин, Китай Страница 254 от 434

Page 255: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Неопределени цикли

Често се случва да правим нещо отново и отново, докато нещо друго не се случи. Това “нещо друго” определя условие, при изпълнението на което спираме да действаме. Неопределените цикли се изпълняват, докато специфично условие стане истина или лъжа (True или False).

Например, миналата вечер обикаляхме около паркинга, докато не намерихме достатъчно голямо място, където да паркираме микробуса. През това време суши-ресторантът затвори и трябваше да потърсим друго място за хранене. Докато обикаляхме да търсим друг ресторант, стомахът ми ръмжеше от глад и не спря, докато не го напълних.

Аналогична е и ситуацията в програмирането. Понякога е необходимо някакъв код да се изпълнява многократно, докато определено условие е истина или лъжа. Например, кодът ви може да пита потребителя за парола отново и отново, докато тя/той не въведе правилна парола. Програмата ви може да изпълнява електронна музика, докато прави изчисления.

Това, което отличава неопределените цикли от определените, е че броя на итерациите за определените цикли е предварително ясен. Неопределените цикли се изпълняват докато не се удовлетвори дадено условие. Съществуват два типа такива цикли: "do while " и "do until". Циклите Do while се изпълняват докато условието е все още истина и спират, когато то стане лъжа. Циклите Do until се изпълняват докато условието е все още лъжа и спират, когато то стане истина. Ключов момент при конструирането на неопределените цикли е определянето на типа, който ще се използва.

Секция 11 – Пекин, Китай Страница 255 от 434

Page 256: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Цикъл Do While…Loop

Цикълът "Do While...Loop" изпълнява блок от код, докато определено условие остава истина. След като условието стане лъжа, цикълът приключва и блокът от код повече не се изпълнява. Част от цикъла Do While...Loop е условието, което контролира изпълнението му. Ето синтаксиса му във Visual Basic:

Do While (condition) code statement 1 code statement 2 code statement, etc.Loop

Забележете, че "Do", "While" и "Loop" са ключови думи. Те се визуализират в синьо. Условието се поставя в кръгли скоби. То може да бъде всякакъв булев израз, който връща като резултат стойност True или False, например X < 4. Кодът, който се изпълнява многократно се поставя между ключовите думи Do While и Loop. В началото на всеки пас от изпълнението на цикъла се проверява условието. Ако то е истина, кодът се изпълнява отново, а ако е лъжа – цикълът приключва.

Сега ще ви покажа как да използвате цикъла Do While...Loop.

Създайте ново Windows приложение с име DoWhileLoop. Върху формата добавете бутон. Щракнете двукратно върху него, за да създадете обработчик на събитието Button1_Click. Добавете следния код:

Секция 11 – Пекин, Китай Страница 256 от 434

Полезен съвет

Условието в цикъла Do може да бъде съставно, като напримерWhile (A > 1 and B < C)

Page 257: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Dim WhileValue As IntegerWhileValue = 0Do While (WhileValue < 2) MessageBox.Show(WhileValue) WhileValue = WhileValue + 1Loop

Секция 11 – Пекин, Китай Страница 257 от 434

Page 258: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изградете и стартирайте проекта. Натиснете бутона. Появява се диалогов прозорец, който показва 0. Натиснете бутона OK. Диалоговият прозорец показва 1. Натиснете бутона OK. Връщате се към формата и диалогови прозорци повече не се показват.

Как работи този код? Декларирахме променлива с име WhileValue. Инициализирахме я със стойност 0. На всяка следваща итерация стойността й се инкрементира. В началото на цикъла се проверява дали условието WhileValue < 2 е изпълнено. Ако това е така, се визуализира диалогов прозорец и променливата WhileValue се инкрементира. Ако условието е лъжа, цикълът приключва. Цикълът се изпълнява двукратно преди условието да стане лъжа. Първия път диалоговият прозорец показва 0, а вторият път – 1. Третият път стойността на WhileValue е 2. Булевият израз 2 < 2 е лъжа. Цикълът приключва и диалоговият прозорец не се показва.

Секция 11 – Пекин, Китай Страница 258 от 434

Полезен съвет

Няма определена причина цикълът For да завършва с Next, а цикълът Do – с Loop. Посъветвайте учениците да гледат на това като на правило.

Page 259: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Постъпково изпълнение на цикъла Do While…LoopНека да изпълним кода, който написахте, като

използваме средствата за дебъгване във Visual Studio 2010 . Изпълнението ще проследим стъпка по стъпка. Следвайте инструкциите:

1. Поставете точка за спиране на реда, който започва с ключовата дума Do While

2. Стартирайте приложението. Кодът се изпълнява до точката на прекъсване, а редът, в който е поставена, се маркира в жълто.

3. Натиснете клавиша F11, за да изпълните маркирания ред.

Do While (WhileValue < 2)

Преместете курсора над променливата WhileValue. Нейната стойност е 0.

Секция 11 – Пекин, Китай Страница 259 от 434

Полезен съвет

Учениците трябва да го направят, а не само да го прочетат.

Page 260: CodeRulesBook2010 (Светът на програмирането – пътешествие)

4. Натиснете клавиша F11, за да изпълните маркирания ред.

MessageBox.Show(WhileValue)

Диалоговият прозорец показва 0. Натиснете бутона OK.

5. Натиснете клавиша F11, за да изпълните маркирания ред.

WhileValue = WhileValue + 1

Стойността на променливата WhileValue се инкрементира.

6. Натиснете клавиша F11, за да изпълните маркирания ред.

Loop

Цикълът отново се изпълнява.

Секция 11 – Пекин, Китай Страница 260 от 434

Page 261: CodeRulesBook2010 (Светът на програмирането – пътешествие)

7. Натиснете клавиша F11, за да изпълните маркирания ред.

Do While (WhileValue < 2)

Преместете курсора над променливата WhileValue. Нейната стойност е 1.

8. Натиснете клавиша F11, за да изпълните маркирания ред.

MessageBox.Show(WhileValue)

Диалоговият прозорец показва 1. Натиснете бутона OK.

9. Натиснете клавиша F11, за да изпълните маркирания ред.

WhileValue = WhileValue + 1

Стойността на променливата WhileValue се инкрементира и става 2.

Секция 11 – Пекин, Китай Страница 261 от 434

Page 262: CodeRulesBook2010 (Светът на програмирането – пътешествие)

10. Натиснете клавиша F11, за да изпълните маркирания ред.

Loop

Цикълът отново се изпълнява.

11. Натиснете клавиша F11, за да изпълните маркирания ред.

Do While (WhileValue < 2)

Преместете курсора над променливата WhileValue. Нейната стойност е 2. Условието WhileValue < 2 вече е лъжа, така е цикълът спира. Диалоговият прозорец не се показва и стойността на променливата WhileValue не се инкрементира.

12. Натиснете клавиша F11, за да изпълните маркирания ред.

End Sub

Секция 11 – Пекин, Китай Страница 262 от 434

Page 263: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Обработката на събитието, генерирано при натискане на бутона спира. Формата се показва отново.

Сега вече видяхте как работи цикъла Do While...Loop. Нека да видим как работи и цикъла Do Until...Loop.

Секция 11 – Пекин, Китай Страница 263 от 434

Page 264: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Цикъл Do Until…Loop

Цикълът Do Until...Loop изпълнява блок от код докато някакво условие не стане истина. Условието може да бъде произволен булев израз, който се изчислява като истина или лъжа. Ето и синтаксиса на този цикъл във Visual Basic:

Do Until (condition) code statement 1 code statement 2 code statement etc.Loop

Думите "Do", "Until" и "Loop" са ключови думи. Те са оцветени в синьо. Условието се проверява в началото н цикъла. Ако то все още е лъжа, блокът от код се изпълнява. Когато условието стане истина, цикълът приключва.

Сега ще ви покажа пример, който използва цикъла Do Until...Loop. Готови ли сте да програмирате! Създайте ново Windows приложение с име DoUntilLoop. Върху формата добавете бутон. Щракнете двукратно върху него, за да създадете обработчик на събитието Button1_Click. Добавете следния код:

Dim UntilValue As IntegerUntilValue = 0Do Until (UntilValue > 1) MessageBox.Show(UntilValue) UntilValue = UntilValue + 1Loop

Изградете и стартирайте проекта. Натиснете бутона. Появява се диалогов прозорец, който показва 0. Натиснете бутона OK. Диалоговият прозорец показва 1. Натиснете бутона OK. Цикълът приключва и формата се показва отново.

Как работи цикълът Do Until...Loop? Първо, декларираме променлива с име UntilValue и я инициализираме с 0. Тя се използва, за да се провери дали цикълът трябва да се изпълни отново. На всяка итерация от цикъла стойността на променливата UntilValue се инкрементира. Изразът Do Until съдържа условие, което проверява дали стойността на променливата UntilValue е по-голяма от 1. На първия пас стойността на променливата UntilValue е 0. Булевият израз е лъже, така че блокът от код се изпълнява. Диалоговият прозорец се визуализира и стойността на променливата UntilValue се инкрементира. На втория пас стойността на променливата UntilValue е 1. Булевият израз все още е лъжа и

Секция 11 – Пекин, Китай Страница 264 от 434

Полезен съвет

While започва с условие True. Until започва с условие False.

Page 265: CodeRulesBook2010 (Светът на програмирането – пътешествие)

блокът от код отново се изпълнява. На третия пас стойността на променливата UntilValue е 2. Булевият израз 2 > 1 е истина и цикълът спира.

Секция 11 – Пекин, Китай Страница 265 от 434

Page 266: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Циклите в действие

А сега да разгледаме няколко примера с циклите Do While...Loop и Do Until...Loop, които използват булеви изрази и не зависят пряко от стойността на брояча на цикъла. Първият пример използва цикъла Do While...Loop с булев израз, който проверява дали стойността на определена променлива е все още по-голяма или равна на нула. Когато стойността на тази променлива стане по-малка от нула, цикълът приключва.

Създайте ново Windows приложение с име LoopsInAction. Върху формата добавете бутон. Задайте стойност "CountDown" за свойството Text на бутона. Щракнете двукратно върху него, за да създадете обработчик на събитието Button1_Click. Добавете следния код:

Dim LoopIndex As Integer = 0Dim WhileController As Integer = 167Do While (WhileController >= 0) LoopIndex = LoopIndex + 1 WhileController = WhileController - (23 * LoopIndex)LoopMessageBox.Show(WhileController)

Секция 11 – Пекин, Китай Страница 266 от 434

Page 267: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изградете и стартирайте проекта. Натиснете бутона "CountDown". Появява се диалогов прозорец, който показва 63. Как работи този код? Декларирахме две променливи, LoopIndex и WhileController, и ги инициализирахме. Променливата LoopIndex се инкрементира всеки път, когато цикълът се изпълнява. Заедно с това се изчислява новата стойност на променливата WhileController като се използва определен израз. Новата стойност на променливата WhileController се получава като стойността на променливата LoopIndex се умножи по 23 и се извади от текущата стойност на променливата WhileController. Всеки път, когато цикълът се изпълнява, стойността на променливата WhileController намалява. Трудно е да се предскаже колко пъти ще се изпълнява цикълът преди стойността на променливата WhileController да стане по-малка от 0 и цикълът да приключи. Това няма значение, тъй като булевият израз, който контролира цикъла, използва стойността на променливата WhileController, а не на променливата LoopIndex.

Вторият пример използва цикъла Do

While...Loop с булев израз, който проверява дали определен радио-бутон е маркиран. Друг радио-бутон се маркира на всяка итерация от цикъла.

В приложението LoopsInAction добавете втори обикновен бутон Задайте стойност "While" за свойството Text на бутона. Добавете три радио-бутона. Щракнете двукратно върху обикновения бутон, за да създадете обработчик на събитието Button2_Click. Добавете следния код:

Dim LoopIndex As Integer = 0RadioButton1.Checked = TrueDo While (RadioButton3.Checked = False) LoopIndex = LoopIndex + 1 If LoopIndex = 1 Then RadioButton1.Checked = True ElseIf LoopIndex = 2 Then RadioButton2.Checked = True ElseIf LoopIndex = 3 Then RadioButton3.Checked = True End IfLoopMessageBox.Show(LoopIndex)

Секция 11 – Пекин, Китай Страница 267 от 434

Page 268: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изградете и стартирайте приложението. Забележете, че първият радио-бутон е селектиран. Натиснете бутона "While". Третият радио-бутон се маркира т кода и се появява диалогов прозорец с номера на итерацията от цикъла. Ако очите ви са достатъчно бързи или ако използвате бавен компютър, ще видите, че вторият радио-бутон се маркира при изпълнението на цикъла.

Ето какво се случва. Декларирахме променлива с име LoopIndex, която съхранява броя на изпълненията на цикъла.Тя обаче, не се използва в булевия израз, който контролира цикъла. Вместо това променливата определя кой от радио-бутоните да се селектира на всяка итерация от цикъла. Булевият израз на цикъла Do While...Loop проверява дали третият радио-бутон е маркиран. Когато това се изпълни, цикълът приключва.

Третият пример използва цикъла Do Until...Loop. Булевият израз сравнява свойството Text на текстово поле със символна променлива, която се променя на всяка итерация от цикъла. Върху формата добавете текстово поле. Не променяйте стойността на свойството му Text. Добавете трети бутон и задайте стойност "TextMatch" за свойството му Text. Щракнете двукратно върху бутона, за да създадете обработчик на събитието Button3_Click. Добавете следния код:

Dim MatchText As String = ""Dim LoopIndex As Integer = 0Do Until (MatchText = TextBox1.Text) LoopIndex = LoopIndex + 1 If LoopIndex = 2 Then MatchText = "Text" End If If LoopIndex = 3 Then MatchText = "Box1" End If If LoopIndex = 4 Then MatchText = "TextBox1" End IfLoop MessageBox.Show("Number " & LoopIndex & " is a match.")

Секция 11 – Пекин, Китай Страница 268 от 434

Полезен съвет

Името на променливата LoopIndex е произволно избрано. То може да бъде LoopCounter, LoopVariable, X, или някакво друго.

Page 269: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изградете и стартирайте приложението. Натиснете бутона "Text Match". Появява се диалогов прозорец, който показва стойността на променливата LoopIndex.

Кодът използва цикъла Do Until...Loop. Променливата LoopIndex определя стойността на променливата MatchText. Булевият израз сравнява променливата MatchText със свойството Text на текстовото поле. На четвъртия пас от изпълнението на цикъла променливата LoopIndex има стойност 4, а променливата MatchText – "TextBox1". Булевият израз става истина, когато е изпълнено условието "TextBox1"="TextBox1", при което цикълът приключва.

Какво би станало, ако стойността на свойството Text на текстовото поле беше установена на "The Purple Pit". Можете ли да добавете още един оператор "If..Then", така че кодът да продължи да работи?

Секция 11 – Пекин, Китай Страница 269 от 434

Page 270: CodeRulesBook2010 (Светът на програмирането – пътешествие)

11 Пробвайте 01 Стрелба по мишена

Винаги съм искал да посетя стрелбище. Стрелбата по мишена е забавна, но мисля, че компютърния й вариант е по-безопасен. Нека да създадем игра, в която компютърът ще опитва да уцели мишената.

Използвайте кода и формата в шаблон 01 от секция 11. Формата изглежда по следния начин:

Предоставяме ви изходния код за бутона ”Нова игра”, тъй като той съдържа графични аспекти, които не са включени в курса. Вашата задача е да напишете кода за бутона “Играй”.

Целта на играта е да преброите броя на опитите, необходими за да се уцели точката в центъра на мишената. Тази точка е с размер 1 пиксел. Тъй като полето, което визуализира картинката на мишената, е с размер 200 x 200 пиксела, то центъра на мишената е с координати 100 х 100.

Генерирайте случайно число за целочислената променлива X, която се използва за определяне на ширината. Генерирайте случайно число за целочислената променлива Y, която се използва за определяне на височината. Кодът за генериране на случайно число в диапазона от 0 до 200 е следния:

Секция 11 – Пекин, Китай Страница 270 от 434

Page 271: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Dim MyRandomGenerator As System.Random MyRandomGenerator = New System.Random Dim RanNum As Integer

' Generate random value between 0 and 200 - not including 200.

RanNum = MyRandomGenerator.Next(0, 200)

Дефинирайте цикъл, който ще приключи, когато X и Y станат равни на 100.

Пребройте броя на итерациите в цикъла. Визуализирайте резултата в текстово поле.

Следният код изчертава точката, която обозначава изстрела върху мишената:

g.DrawEllipse(MyPen, New Rectangle(X, Y, 1, 1))

Ако програмата работи правилно, я покажете на учителя си.

Секция 11 – Пекин, Китай Страница 271 от 434

Полезен съвет

Ще се появят въпроси. Вижте обяснителните бележки за очакваните въпроси.

Page 272: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Алтернативна варианти на цикли

Циклите Do While...Loop и Do Until...Loop могат да бъдат структурирани в алтернативни варианти, при които условието е в края на цикъла, вместо в началото му. Така блокът от код се изпълнява поне веднъж. След това се проверява условието. Алтернативните варианти са представени от циклите Do...Loop While и Do...Loop Until. Ето пример с цикъла Do...Loop While:

Dim WhileValue As IntegerWhileValue = 0Do MessageBox.Show(WhileValue) WhileValue = WhileValue + 1Loop While (WhileValue < 2)

Ето пример и с цикъла Do...Loop Until:

Dim UntilValue As IntegerUntilValue = 0Do MessageBox.Show(UntilValue) UntilValue = UntilValue + 1Loop Until (UntilValue > 1)

Забележете, че и в двата случая условието се записва с ключовата дума Loop, а не с ключовата дума Do. Кодът между ключовите думи Do и Loop се изпълнява поне веднъж. След това се проверява условието, за да се определели дали цикълът ще се повтори. В примера по-горе ако променливата UntilValue е инициализирана с 5, диалоговият прозорец ще покаже 5 преди да е направена проверката на условието.

Секция 11 – Пекин, Китай Страница 272 от 434

Полезен съвет

Поставянето на условието в края на цикъла гарантира изпълнението му поне веднъж

Page 273: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Exit Do

Спомняте ли си, когато Клиф ви показа как да прекъсвате цикъла For...Next като използвате оператора Exit For? Е, по подобен начин можете да прекъсвате и циклите Do While...Loop, Do Until...Loop, Do...Loop While и Do...Loop Until. Вместо оператора "Exit For", обаче се използва оператора "Exit Do". За да се управлява изпълнението на оператора Exit Do, се използва булев израз, дефиниран с оператора If...Then. Ако булевият израз е истина, операторът Exit Do се изпълнява и цикълът приключва. Използвайте този механизъм, когато искате да излезете от цикъла преди да е удовлетворено условието му за приключване.

Да напишем код за изход от цикъла Do Until...Loop. Създайте ново Windows приложение с име ExitDo. Върху формата добавете бутон. Щракнете двукратно върху него, за да създадете обработчик на събитието Button1_Click. Добавете следния код:

Dim UntilValue As IntegerUntilValue = 0Do Until (UntilValue > 10) MessageBox.Show(UntilValue) UntilValue = UntilValue + 1 If UntilValue = 5 Then Exit Do End IfLoop MessageBox.Show("Exit Value= " & UntilValue)

Изградете и стартирайте проекта. Натиснете бутона. На всеки пас от изпълнението на цикъла стойността на променливата UntilValue се инкрементира и диалогов прозорец показва номера на текущата итерация (0,1,2,3 и 4). Натискайте бутона OK всеки път. Когато променливата UntilValue стане 5, условието на оператора If...Then се удовлетворява. Изпълнява се оператора Exit Do. Цикълът приключва, а изпълнението на кода продължава от първия ред след оператора Loop Until. Този ред показва диалогов прозорец със съобщение "Exit Value= 5". Натиснете бутона OK, за да се върнете към формата.

Същият Exit Do оператор може да се използва и в цикъла Do While...Loop, при което цикълът отново ще приключи преди булевият израз от условието му да се изчисли като лъжа.

Секция 11 – Пекин, Китай Страница 273 от 434

Page 274: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Неопределени цикли в C#

Нека да разгледаме неопределените цикли в C#. В C# можете да напишете код, който има същото

предназначение както циклите Do While...Loop и Do...Loop While във Visual Basic. C# няма алтернативни варианти за циклите Do Until...Loop или the Do...Loop Until.

Ето код на C#, който използва цикъла while (ключовите думи while и loop не започват с главни букви). Условието за

прекратяване на цикъла се проверява в неговото начало:

int WhileValue=0;while (WhileValue<5){ MessageBox.Show(WhileValue.ToString()); WhileValue=WhileValue+1;}

Ето код на C#, който използва цикъла do...while (ключовите думи do, while и loop не започват с главни букви). Условието за прекратяване на цикъла се проверява в края на цикъла:

int WhileValue=0;do{ MessageBox.Show(WhileValue.ToString()); WhileValue=WhileValue+1;}while(WhileValue)

В C# няма еквивалент на цикъла Do...Until Loop във Visual Basic.

Секция 11 – Пекин, Китай Страница 274 от 434

Page 275: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане в Пекин, Китай

Ето, че сме в Пекин! Това беше кратка, но интересна част от пътуването ни! Научихме как да използваме четири различни типа неопределени цикли. Можете да дефинирате цикли, които се изпълняват докато определено условие е истина или докато определено условие не стане истина. Можете да задавате условието за прекратяване на цикъла в края или в началото му. Когато условието се проверява в края на цикъла, блокът от код се изпълнява поне един път. Ще откриете, че различните типове цикли взаимно се допълват. Те могат да правят неща, които цикълът For...Next не може.

Да видим какво ви е приготвил старият джобен компютър!

11 Пробвайте 02 Повтарящо се ези

В една от предишните задачи се забавлявахме с подхвърлянето на монета. Нека да направим още една програма. Замисляли ли сте се някога колко хвърляния трябва да направите, за да получите последователно три пъти ези? А 4? А 5?

Формата, която трябва да създадете, изглежда по следния начин:

Секция 11 – Пекин, Китай Страница 275 от 434

Page 276: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Кодът който генерира случайно число 0 или 1 е следният:

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)

Приемете, че 1 съответства на ези, а 0 на тура. Съхранявайте броя на последователно генерираните единици в първото текстово поле. При генериране на 0 започвайте от начало. Визуализирайте броя на опитите във второто текстово поле.

При тестването прилежните програмисти поставят в цикъла оператор за условен преход if, с който показват съобщение и спират цикъла, ако броячът нарасне прекалено много.

Ако програмата работи правилно, я покажете на учителя си.

Секция 11 – Пекин, Китай Страница 276 от 434

Полезен съвет

Тази програма може би е малко по-лесна от предходната.

Page 277: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Вижте следващото ви предизвикателство, комплименти за Комисията по състезанията! Сигурен съм, че знанията ви за циклите ще ви бъдат полезни.

11 Можете ли? Калкулатор за среден успех

Забавлявам се по време на пътуването, а то е към своя край. След това ще трябва да се върна отново в училище, притеснявайки се за средния си успех. Една програма за изчисляване средно аритметичното на набор от оценки би ми била полезна. Нека да напишем такава програма.

Създайте форма подобна на показаната по-долу:

Програмата използва функцията InputBox, която създава форма подобна на показаната по-долу.

Вие не трябва да я създавате.Visual Basic ще направи това автоматично.

Секция 11 – Пекин, Китай Страница 277 от 434

Page 278: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Тази функция е нова за вас така, че ще ви дадем целия код, от който се нуждаете.

Дефинирайте променлива, която да съхранява оценките по следния начин:

Dim GradeIn As String = "None Entered"

Създайте цикъл, в който ще използвате следния ред код:

GradeIn = InputBox("Въведи Enter A, B, C, D, или or F", "Въведи символна оценка", "")

Потребителят ще въвежда толкова оценки, колкото са необходими. Когато приключи с въвеждането ще натисне бутона Cancel. В противен случай променливата GradeIn ще бъде празна. Празна стойност се обозначава с кавички.

A съответства на оценка 4B съответства на оценка 3C съответства на оценка 2, D съответства на оценка 1F съответства на 0.

Игнорирайте всички други символи и числа.Потребителят може да въвежда малки и големи букви.

Визуализирайте всичко въведено в текстово поле.

След като оценките са въведени пресметнете средния успех.

Продължение / Обобщение

Представете средния успех в символен вид.

Осигурете въвеждане на положителни и отрицателни оценки като например B+ и C-. Използвайте системата за оценяване във вашето училище или таблицата по-долу:

1.0 D -1.3 D 1.7 D +2.0 C -2.3 C 2.7 C +3.0 B -

Секция 11 – Пекин, Китай Страница 278 от 434

Полезен съвет

Цикълът приключва, когато GradeIn = “”

Page 279: CodeRulesBook2010 (Светът на програмирането – пътешествие)

3.3 B 3.5 B +3.8 A -4.0 A

Секция 11 – Пекин, Китай Страница 279 от 434

Page 280: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ето и специалния тест за проверка на знанията ви.

Секция 11 – Пекин, Китай Страница 280 от 434

Page 281: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 12 – Сеул, Корея Страница 281 от 434

Page 282: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Функции

Сеул, Корея

На този етап от курса вие ще приложите всичките си знания, които натрупахте до сега. Ще ви покажа как да пишете свои собствени процедури и функции, както и да използвате някои, които са вградени в Visual Studio 2010.

Това ще бъде една забавна част от пътуването ни! Предстои ни път до Сеул, Корея, така, че да потегляме!

Секция 12 – Сеул, Корея Страница 282 от 434

Полезен съвет

Някои учители накратко ще представят тази секция след секцията за изразите с присвояване или след секцията за аритметичните изрази, след което отново ще се върнат на нея в края на курса. Повечето учители ще я представят в края на курса.

Page 283: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Какво са процедурите?Процедурите приличат на малки програми. Те се използват за реализиране на

специфични задачи в приложенията. Когато пишете приложение, можете да го разделите да отделни части с определена функционалност, за всяка от които да създадете процедура. Приложението може да съдържа произволен брой процедури. Не трябва да се ограничавате в тяхното използване. Пишете толкова процедури, колкото са ви необходими, но се опитайте всяка една от тях да има специфична функционалност.

Защо използваме процедури? Процедурите правят кода ви по-лесен за четене и дебъгване, тъй като го разделят на малки парчета с определено предназначение. По-лесно е да пишете и дебъгвате няколко по-къси процедури, отколкото цяло приложение. Веднъж след като сте дебъгнали една процедура, тя е готова за използване. Тя ще работи винаги, когато решите да я използвате.

Процедурите спестяват време, когато кодът ви е сложен и трябва да бъде достъпен от различни части на програмата. Те могат да се използват многократно. Веднъж след като сте написали една процедура, тя може да бъде използвана от всяка точка на програмата ви, включително и от други процедури. Представяте ли си това!

Процедурите осигуряват начин за разделяне на работата върху голямо приложение. Отделните програмисти често пишат специфично множество от процедури, използвани в приложението. Те са отговорни за тяхното реализиране и дебъгване и сработването им с останалите части от кода.

Секция 12 – Сеул, Корея Страница 283 от 434

Page 284: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Някои основни приложение на процедурите са свързани с реализиране на изчисления, форматиране и визуализиране на информация, настройка на потребителския интерфейс, запитване на потребителя за данни и осигуряване на вход и изход от програмата.

Секция 12 – Сеул, Корея Страница 284 от 434

Page 285: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Създаване на процедури

Създаването а процедури е друга област от програмирането, която наистина предизвиква. Тя наподобява дизайна – изисква комбинация от творчество и програмни умения. Тъй като процедурите са като малки програми, те могат да съдържат всички разгледани до момента оператори!

Ще ви помогна да напишете собствена процедура и след това ще ви покажа как да я използвате в приложение. Ще започнем с изучаването на синтаксиса за дефиниране на процедури, след което ще ви покажа как да ги създавате. Синтаксисът е следния:

Private Sub SubName() code statement 1 code statement 2 code statement etc.End Sub

Забележете, че думите "Private", "Sub" и "End Sub" са ключови думи. Те са оцветени в синьо. Ключовата дума Private означава, че процедурата е достъпна само за останалия код от формата. SubName е името на процедурата. Можете да именувате процедурите както искате, но е препоръчително да използвате описателни имена, които подсказват предназначението им. Забележете кръглите скоби след името на процедурата. Когато процедурата получава информация, променливите, които я съхраняват, се поставят между тези скоби. Това можете да видите във всички процедури, обработващи събития, които използвахме в предишните секции на курса. Редовете от кода, който се изпълнява от процедурата, се поставя между ключовите думи Sub и End Sub. Изпълнението на редовете е последователно. Можете да използвате всякакви изрази.

Секция 12 – Сеул, Корея Страница 285 от 434

Полезен съвет

Разгледайте програмата за игра на морски шах като пример за използване на процедури.

Page 286: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Сега ще ви покажа как да напишете своя собствена процедура и да я извикате от кода си. Създайте ново Windows приложение с име SimpleSub. Отворете прозореца с кода. Намерете ред със следния текст: "Windows Forms Designer generated code". На следващия ред добавете следния код:

Private Sub MyMessage() MessageBox.Show("Here's a message from Sub MyMessage.")End Sub

Както виждате кодът в процедурата MyMessage се изпълни, се визуализира диалогов прозорец с текст: "Here's a message from Sub MyMessage". Но как да изпълним този код?

Секция 12 – Сеул, Корея Страница 286 от 434

Полезен съвет

Този начален курс не разглежда разработването на приложения с множество форми.

Page 287: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Извикване на процедури

За да накарате кода в процедурата ви да се изпълни, трябва да напишете ред в програмата, който “извиква” процедурата. Когато процедурата е “извикана”, кодът от нея се изпълнява. Синтаксисът за извикване на процедура е прост. Просто напишете името на процедурата следвано от двойка кръгли скоби. Ето и синтаксисът:

SubName()

А сега да извикаме процедурата, която току що написахте.

В приложението SimpleSub, добавете бутон върху формата. Задайте стойност "MyMessage" за свойството Text на бутона. Щракнете двукратно върху него, за да създадете обработчик на събитието Button1_Click. Добавете следния код:

MyMessage()

Изградете и стартирайте проекта. Натиснете бутона "MyMessage". Показва се диалогов прозорец със съобщение "Here's a message from Sub MyMessage". От къде се появи той? Това е редът с код от процедурата MyMessage. Той се изпълнява при извикването на процедурата, която обработва генерираното при натискането на бутона събитие.

Сега ще ви дам друга процедура, която да добавите към приложението SimpleSub. Тя ще покаже друго съобщение. Отворете прозореца с кода и добавете следния код след оператора End Sub на процедурата MyMessage:

Private Sub YourMessage() MessageBox.Show("Here's a message from Sub YourMessage."End Sub

Този път нека да извикаме процедурата YourMessage от процедурата MyMessage вместо да използваме генерираното при натискане на бутон събитие. Редактирайте процедурата MyMessage по следния начин:

Private Sub MyMessage() MessageBox.Show("Here's a message from Sub MyMessage.") YourMessage()End Sub

Секция 12 – Сеул, Корея Страница 287 от 434

Page 288: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Извикахме процедурата YourMessage от процедурата MyMessage. Изградете и стартирайте приложението. Натиснете бутона "MyMessage". Появяват се два диалогови прозореца. Първият показва "Here's a message from Sub MyMessage", а вторият – "Here's a message from Sub YourMessage". Как работи този код? Генерираното при натискане на бутона събитие извиква процедурата MyMessage. Тогава кодът в нея се изпълнява. Процедурата MyMessage притежава два реда. Първият от тях визуализира диалоговия прозорец със съобщението "Here's a message from Sub MyMessage". Вторият ред извиква процедурата YourMessage, която показва диалоговия прозорец със съобщението "Here's a message from Sub YourMessage".

Ясно ли е? Създадохте първите си две процедури и извикахте едната от тях при генериране на събитие. Втората процедура извикахте от първата!

Секция 12 – Сеул, Корея Страница 288 от 434

Page 289: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Създаване и извикване на процедури с аргументи

Едно от полезните неща във Visual Basic и повечето съвременни езици за програмиране е, че процедурата може да получава информация. Това е много удобно, когато пишете процедури, които дават или действат в зависимост от подадената им информация. Частите от тази информация се наричат "аргументи". Когато пишете процедура, която получава аргументи, трябва да определите техния брой и тип.

Ето синтаксиса на процедура, която изисква аргументи:

Private Sub SubName(ByVal argumentName1 As argumentType1, ByVal argumentName2 As argumentType2, ByVal argumentNameN As argumentTypeN) code statement 1 code statement 2 code statement etc.End Sub

Секция 12 – Сеул, Корея Страница 289 от 434

Полезен съвет

Параметрите не са напълно ново понятие. Всички обработчици на събития имат параметри.

Полезен съвет

Ключовата дума ByVal означава, че стойността на параметъра се подава на процедурата, но оригиналният параметър остава непроменен.

Page 290: CodeRulesBook2010 (Светът на програмирането – пътешествие)

В случая кръглите скоби не са празни. Те съдържат списък от аргументи заедно с техните типове, които се подават на процедурата. Забележете, че думата "ByVal" е ключова дума. Тя е оцветена в синьо. Типът на аргументите е общовалиден като Integer, String и т.н. Аргументите се разделят един от друг със запетая.

Сигурен съм, че един реален пример ще направи нещата по-ясни. Отворете прозореца с код на приложението SimpleSub. Под оператора End Sub на процедурата YourMessage добавете следната процедура:

Private Sub GeneralMessage(ByVal InMessage As String) MessageBox.Show(InMessage)End Sub

Тази процедура изисква аргумент от тип String. При извикването си тя визуализира диалогов прозорец, който показва стойността на подадения й аргумент.

А сега да извикаме процедурата GeneralMessage и да й подадем аргумент от тип String. Добавете втори бутон върху формата. Задайте стойност "AnyMessage" за свойството Text на бутона. Щракнете двукратно върху него, за да създадете обработчик на събитието Button2_Click. Добавете следните три реда код:

GeneralMessage("Whatever message.")GeneralMessage("Some other message.")GeneralMessage("A different message.")

Изградете и стартирайте проекта. Натиснете бутона "AnyMessage". Показват се три съобщения. Как е възможно това? Генерираното при натискане на бутона събитие извиква процедурата GeneralMessage три пъти. Всеки път като аргумент й подава различен символен низ. Първият път процедурата се извиква с аргумент "Whatever message", вторият път – с аргумент"Some other message.", а третия път – "A different message". Когато кодът в процедурата се изпълнява, символните низове се подават като аргументи и се използват в израза MessageBox.Show.

Да разгледаме още един пример. Този път ще ви покажа как да напишете процедура, която получава два аргумента от тип Integers, събира ги и показва резултата в диалогов прозорец. Готови ли сте? Добавете нова процедура с име "Adders" към проекта SimpleSub. Тя трябва да изглежда по следния начин:

Секция 12 – Сеул, Корея Страница 290 от 434

Page 291: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Private Sub Adders(ByVal AddOne As Integer, ByVal AddTwo As Integer)Dim Total As Integer Total = AddOne + AddTwo MessageBox.Show(Total)End Sub

Забележете, че при извикването си процедурата изисква два целочислени аргумента.

Върху формата добавете бутон. Задайте стойност "Adders". За свойството Text на бутона. Щракнете два пъти върху него, за да създадете обработчик на събитието Button3_Click. Добавете следния код:

Adders(34, 57)

Изградете и стартирайте приложението Натиснете бутона. "Adders". Визуализира се диалогов прозорец, който показва 91. Кодът от обработчика на събитието Button3_Click извива процедурата с аргументи 34 и 57. Процедурата Adders изпълнява три реда с код. Първият от тях декларира променлива с име Total. След това вторият ред установява в променливата Total сумата от аргументите AddOne (34) и AddTwo(57), които съхраняват подадените на процедурата стойности. Накрая третият ред показва стойността на променливата Total (91).

Сега вече можете да пишете сами

процедури и да им подавате информация. Ще ви покажа и как се пишат функции. Подобно на процедурите, функциите също могат да получават информация посредством аргументи. За разлика от тях, обаче функциите могат и да предоставят информация.

Секция 12 – Сеул, Корея Страница 291 от 434

Page 292: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Създаване на функции

Основната разлика между процедурите и функциите е, че функциите връщат информация. Тази информация се нарича върната стойност и е от определен тип. Когато пишете функции, трябва да определите типа на върнатата стойност. Нека да ви покажа синтаксиса на функция, която получава аргументи и връща стойност:

Private Function FunctionName(ByVal argumentName1 As argType1, ByVal argumentName2 As argType2, ByVal argumentNameN As argTypeN) As ReturnType Code Statement 1 Code Statement 2 Code Statement etc. FunctionName=returnValueEnd Function

Забележете, че думите "Private", "Function" и "End Function" са ключови думи. Те са оцветени в синьо. Името на функцията трябва да бъде описателно. Списъкът от аргументи заедно с техните типове се поставя в кръгли скоби след името на функцията. Аргументите се отделят със запетайка. Можете да дефинирате произволен брой аргументи, но върнатата стойност винаги е само една. Нейният тип също трябва да се определи (например, As Integer или As String). Последният ред от кода в тялото на функцията установява върнатата стойност. Забележете, че този ред присвоява на името на функцията стойността, която трябва да се върне като резултат.

Секция 12 – Сеул, Корея Страница 292 от 434

Полезен съвет

Забележете, че върнатата от функцията стойност се присвоява на името й. Учениците използваха функции в предишните програми. Накарайте ги да извикат някои от тях повторно, като например Val.

Page 293: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Един реален пример ще ви помогне да схванете синтаксиса. Създайте ново Windows приложение с име FunctionJunction. В прозореца с кода открийте реда със следното съдържание "Windows Forms Designer generated code". На следващия ред добавете следния код:

Private Function Multipliers(ByVal MultOne As Integer, ByVal MultTwo As Integer) As Integer Multipliers = MultOne * MultTwoEnd Function

Тази функция е наречена Multipliers и приема два целочислени аргумента MultOne и MultTwo. Типа на върнатата стойност се задава след списъка с аргументи. В този случай той е Integer (As Integer). Функцията съдържа един ред с код:

Multipliers = MultOne * MultTwo

Този ред с код умножава двата аргумента и установява върнатата стойност. Името на функцията – Multipliers, трябва да бъде използвано като име на върнатата стойност. В противен случай ще възникне грешка.

А сега да извикаме функцията и да използваме върнатата от нея стойност в програмата.

Секция 12 – Сеул, Корея Страница 293 от 434

Page 294: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Извикване на функции

Един от начините за извикване на функция е да се използва променлива, която да присвои върнатата стойност. Променливата и върнатата стойност трябва да са от един и същ тип.

VariableOfReturnType =FunctionName(argument1, argument2, argumentN)

Нека да извикаме написаната от нас функция и да използваме върнатата от нея стойност в кода. Върху формата поставете бутон. Задайте стойност "Multiply" за свойството Text на бутона. Добавете следния код в обработчика на събитието Button1_Click:

Dim Product As IntegerProduct = Multipliers(34, 57)MessageBox.Show(Product)

Изградете и стартирайте проекта. Натиснете бутона "Multiply". Визуализира се диалогов прозорец, които показва 34x57, което е 1938. Как работи този код? В обработчика на събитието Button1_Click е декларирана променлива с име Product. Функцията Multipliers се извиква с аргументи 34 и 57. Тя умножава аргументите MultOne (34) и MultTwo (57) и присвоява върнатата от нея стойност на променливата Product. Върнатата стойност е от тип Integer. В обработчика на събитието Button1_Click целочислената променлива Product приема върнатата от функцията Multipliers стойност, след което резултатът се показва в диалогов прозорец.

Хей, имам идея! Да направим нещо по специално, като използваме функцията Multipliers. Върху формата добавете втори бутон. Задайте стойност "MultiplyAgain" за свойството Text на бутона. Добавете следния код в обработчика на събитието Button2_Click:

Dim Product As IntegerProduct = Multipliers(Multipliers(2, 3), Multipliers(5, 7))MessageBox.Show(Product)

Секция 12 – Сеул, Корея Страница 294 от 434

Page 295: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изградете и стартирайте проекта. Натиснете бутона "MultiplyAgain". Показва се числото 210. Извикахме функцията Multipliers три пъти. Първия път й подадохме аргументи 2 и 3. Върнатата стойност (6) използваме като първи аргумент при третото извикване на функцията. Втория път й подадохме аргументи 5 и 7. Върнатата стойност (35) използваме като втори аргумент при третото извикване на функцията. Третия път извикахме функцията с аргументи 6 (върнатата стойност от първото извикване) и 35 (върнатата стойност от първото извикване).

Видяхте ли как да извикате една функция от друга функция (дори и същата)?

Секция 12 – Сеул, Корея Страница 295 от 434

Page 296: CodeRulesBook2010 (Светът на програмирането – пътешествие)

12 Пробвайте 01 Мерни единици

Понякога бъркам ляво и дясно. В един от тези случаи направих ляв завой вместо десен и така се озовахме в Канада. Нека да напишем програма за преобразуване от американски в канадски мерни единици и обратно.

Формата, която трябва да създадете, изглежда по следния начин:

При натискането на бутона Convert to Canadian правим преобразуване от дясно на ляво. При натискането на бутона Convert to US правим преобразуване от дясно на ляво.

Използвайте следните съотношения:

1 Миля = 0.621 Километри1 Галон = 3.79 Литри1 Американски долар = 1.27 Канадски

долар

Вече научихте как да дефинирате собствени функции и шаблони. В тази програма трябва да използвате функции, в противен случай няма да получите кредити за нея. За да ви улесним, написахме една от шестте функции. Вие трябва да напишете останалите пет. Предоставяме ви и кода за двата бутона.

Ако програмата работи правилно, я покажете на учителя си.

Секция 12 – Сеул, Корея Страница 296 от 434

Полезен съвет

Тази програма може да бъде написана и без използване на функции. Не позволявайте това. Проверете кода на учениците. Напомнете им, че проверяваме какво са научили, а не просто какъв резултат са получили.

Page 297: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Вградени функции и процедури

Средата Visual Studio 2010 притежава много вградени функции и процедури за извършването на общи задачи. Те са дебъгвани и тествани и са достъпни за всички .NETезици за програмиране. Когато е възможно, вие би трябвало да ползвате вградените функции и процедури, вместо да пишете свои собствени. Това не само, че спестява време, но и уеднаквява вашия код, правейки го по-разбираем. Също така съществуват вградени функции и процедури, които не можете да напишете сами. Много от тях осъществяват достъп до скритите .NET и Windows API класове.

Ще ви покажа някои от най-често използваните вградени в Visual Studio 2010 средата функции и процедури Framework и приложението им във Visual Basic. Ще забележите, че някои от тях ви изглеждат познати, защото сте ги срещали в направените до сега задачи. Ние ви ги дадохме, за да ги използвате без да бъдат обяснени, така че сега ще разясним тяхното действие!

Секция 12 – Сеул, Корея Страница 297 от 434

Page 298: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Функции за работа с низове

Средата .NET притежава много вградени функции, които се използват за обработване на символни низове. Те премахват определени символи, извличат низове, които са част от по-големи такива или преобразуват низове в малки или големи букви. Повечето от тях лесно се демонстрират с примери.

Всички функции за работа с низове имат подобен синтаксис. Те могат да бъдат извикани за всеки низ от символи. Някои от тях имат аргументи, а други – нямат. Повечето от тях връщат стойност от тип String, въпреки че функцията Length() връща стойност от тип Integer. Ето и синтаксиса на вградените във Visual Basic низови функции, където returnValue и someString са променливи:

returnValue = someString.StringFunctionName(argument1, argument2, argumentN)

Полезна функция е Length. Тя връща дължината на символен низ като Integer стойност. Ето пример:

MyText = "TextBox1"myLength = MyText.Length ' returns 9, the length of "TextBox1"

Функциите ToLower и ToUpper се използват за преобразуване на символния низ съответно в малки и големи букви. Разгледайте следните примери:

MyText = "TextBox1"MyCaps = MyText.ToUpper 'returns "TEXTBOX1"

MyText = "TextBox1"mySmalls = MyText.ToLower 'returns "textbox1"

Секция 12 – Сеул, Корея Страница 298 от 434

Page 299: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Понякога ви е необходимо да знаете дали даден низ съдържа интервали в края или в началото си. Също така може би ще искате да ги премахнете. В такъв случай използвайте функцията Trim както е показано по-долу:

MyText = " TextBox1"myClean = MyText.Trim 'returns "TextBox1"

MyText = " TextBox1 "MyCleaner = MyText.Trim 'returns "TextBox1"

Друга полезна функция е Substring. Тя връща част от символен низ (подниз). Когато я извиквате, трябва да й подадете два целочислени аргумента. Първият то тях задава началната позиция, а вторият – дължината на подниза. Забележете, че първият символ от низа е с индекс 0, а не с 1. Вторият символ е с индекс 1, а не с 2 и т.н.

MyText = "TextBox1"MySub = MyText.Substring(0, 4) 'returns "Text", starts at position 0 with length=4

MyText = "TextBox1"MySub = MyText.Substring(1, 2) 'returns "ex", starts at position 1 with length=2

Секция 12 – Сеул, Корея Страница 299 от 434

Page 300: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Функцията Substring получава два аргумента от тип Integer и връща стойност от тип String. Първият аргумент определя стартовата позиция за търсене, а втория – дължината на низа, който ще се върне от нея. Запомнете, че индексите на символите в низовете започват от 0, а не от 1.

Секция 12 – Сеул, Корея Страница 300 от 434

Page 301: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Знам, че нямате търпение да видите низовите функции в действие, така че да напишем малко приложение, за да покажем как работят! Създайте ново Windows приложение с име BuiltIn. Върху формата добавете две текстови полета. Задайте стойност "Yes" за свойството Multiline и стойност "Vertical" за свойството Scrollbars на второто текстово поле. Разпънете полето така, че височината му да стане почти колкото тази на формата. Добавете следния код в обработчика на събитието Button1_Click:

Dim MyText As StringDim TempText As String = ""MyText = TextBox1.TextTempText = TempText & MyTextTempText = TempText & vbNewLine & MyText.ToLowerTempText = TempText & vbNewLine & MyText.ToUpperTempText = TempText & vbNewLine & MyText.TrimTempText = TempText & vbNewLine & MyText.Substring(0, 4)TempText = TempText & vbNewLine & MyText.Substring(1, 2)TempText = TempText & vbNewLine & MyText.LengthTextBox2.Text = TempText

Изградете и стартирайте приложението. Натиснете бутона. Второто текстово поле показва резултата от изпълнението на всяка една от низовите функции върху символния низ от първото текстово поле. Променете текста в първото текстово поле и натиснете отново бутона.

Секция 12 – Сеул, Корея Страница 301 от 434

Полезен съвет

Кодът по-горе ще бъде по-значим, ако учениците го поставят в програма, която след това изпълнят стъпка по стъпка като използват средствата за дебъгване.

Page 302: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Генератори на случайни числаМного от програмите се нуждаят от генериране на случайни числа. Това

особено е в сила за приложения, например игри, които реализират случайни събития като хвърляне на монети или зарове. Средата Visual Studio 2010 поддържа клас System.Random, който притежава функции за генериране на случайни числа. Ще ви покажа код, който симулира хвърляне на зар. Върху формата в проекта BuiltIn добавете един бутон. Задайте стойност "RollEm" за свойството Text на бутона. Добавете следния код в обработчика на събитието Button2_Click:

Dim myRandomGenerator As System.RandomDim myRandomInteger As IntegermyRandomGenerator = New System.RandommyRandomInteger = myRandomGenerator.Next(1, 7)MessageBox.Show(myRandomInteger)

Изградете и стартирайте приложението. Натиснете бутона "RollEm". Визуализира се диалогов прозорец, който показва случайно число между 1 и 6. Натиснете отново бутона. Показва се друго случайно число между 1 и 6.

Как работи този код? Първо декларирахме променлива с име myRandomGenerator от тип System.Random. След това декларирахме променлива с име myRandomInteger от тип Integer. Променливата myRandomGenerator инициализирахме с нов System.Random обект като използвахме ключовата дума New. За да генерираме случайно число между 1 и 6, извикахме функцията Next() на обекта myRandomGenerator. с аргументи 1 и 6. Те дефинират минималната и максималната стойност на случайното число, което се генерира. Функцията Next() връща случайно число между 1 и 6, което се присвоява на променливата myRandomInteger. Последният ред от кода показва полученото случайно число в диалогов прозорец.

Секция 12 – Сеул, Корея Страница 302 от 434

Page 303: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Функции за преобразуване

Visual Basic притежава две функции за преобразуване, които ще ви бъдат полезни, когато работите с числа. Това са функциите Val и Int. Първо да разгледаме функцията Val. Тази функция се използва за преобразуване на низ в число. Ако низът съдържа десетична запетая, върнатата от функцията стойност е от тип Double. В противен случай върнатата стойност е от тип Integer. Функцията Val често се използва за преобразуване на въведения в текстово поле низ в число, което може да бъде използвано за извършване на изчисления. Ето и някои примери:

Dim MyInt As IntegerMyInt = Val("123") + 123 'returns 246

Dim MyDouble As DoubleMyDouble = Val("123.22") + 123 'returns 246.22

Функцията Int връща цялата част на определено число. Това е частта вляво от десетичната запетая. Разгледайте следните примери,за да видите как работи:

Dim MyInt As IntegerMyInt = Int(123) 'returns 123MyInt = Int(123.45) 'returns 123

Секция 12 – Сеул, Корея Страница 303 от 434

Page 304: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Процедури и функции в C#

C# също ви позволява да създавате функции. Тези функции могат да получават аргументи и да връщат стойности. В C# няма еквивалент на процедурите. Те поддържат само функции. Също така при тях няма ключова дума "Function". Функциите се декларират посредством специален синтаксис и последователност от определени ключови думи. Да попитаме Дърк и Джин за функциите в тези езици за програмиране.

Както каза Клиф в C# не съществуват ключовите думи "Sub" или "Function". Във Visual Basic процедурите и функциите се различават. В C# между тях няма разлика. Да разгледаме кода по-долу, който декларира функция на C#, която приема два аргумента и връща целочислена стойност.

private static int Adders_C(int oneAdd, int twoAdd){ int intSum=0; intSum = oneAdd + twoAdd; return intSum;}

Забележете, че не използваме ключовата дума Function, както във Visual Basic.Ключовите думи "private" и "static" показват, че функцията може да бъде извикана само от кода на формата. Ключовата дума "int" (след static) определя типа на връщаната от функцията стойност (в случая Integer). Аргументите, които трябва да се подадат при извикването на функцията, са поставени в кръгли скоби след името на функцията Adders_C. И двата аргумента oneAdd и twoAdd са от тип int. Забележете ключовата дума "return". Тя определя стойността, която трябва да се върне от функцията. (в случая intSum).

Функцията Adders_C може да бъде извикана посредством следния код на C#. Той е подобен на кода, с който извикваме функции във Visual Basic:

Секция 12 – Сеул, Корея Страница 304 от 434

Page 305: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Пристигане във Сеул, Корея

Вече сме във Сеул, Корея! Със сигурност беше забавно! Ники и аз ви показахме с удоволствие как да пишете Visual Basic код, а Клиф and Джин използваха възможността да ви научат на това, което знаят за C#. Сега вече можете да определите някои прилики и разлики между тези езици за програмиране.

По пътя към Сеул ви показахме как да създавате и извиквате процедури и функции, както и да използвате някои, които са вградени в Visual Studio 2010 средата. Запомнете, че процедурите се използват, когато нямате върната стойност, а функциите, когато имате. При извикването им можете да им подавате аргументи. Тези аргументи се използват в кода от тялото на процедурите и функциите. Те не са необходими, ако променливите са декларирани глобално, т.е. ако са декларирани преди първата процедура.

О, не мислите, че можете да си тръгнете без да сте направили още една задача?

Секция 12 – Сеул, Корея Страница 305 от 434

Page 306: CodeRulesBook2010 (Светът на програмирането – пътешествие)

12 Пробвайте 02 Гадател

Не вярвам, че можем да виждаме в бъдещето, но е забавно да се опитваме. Нека да напишем програма, която да отговаря на въпроси като гадател.

Формата, която трябва да създадете, изглежда по следния начин:

При натискането на бутона “Потърси отговор” използвайте метода SubString, за да пребройте всяка една от гласните във въпроса (A, E, I, O, U). Не забравяйте малките и големите букви се броят поотделно. Проверете дали въпросът е въведен. Използвайте оператори за цикъл.

Запомнете, че методът Length преброява символите в низ. Позициите на символите в низ се номерират от 0 така, че ако броят им е 10, то позициите им ще имат номера от 0 до 9.

Като използвате броя на гласните букви във въпроса генерирайте отговор. Използвайте въображението си при създаване на отговорите. “ДА” и “НЕ” са подходящи, но отегчителни. Трябва да имате най-малко пет отговора. Препоръчително е да са повече.

Ако програмата работи коректно, я покажете на учителя си.

Секция 12 – Сеул, Корея Страница 306 от 434

Page 307: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Комисията по състезанията остави за вас едно предизвикателство!

12 Можете ли? Котка и мишка

Време е за вашето предизвикателство. Играта на котка и мишка е доста по-трудна от тези, които вече реализирахме.

Създайте форма подобна на следната:

Приемете, че екранът е с ширина 600 пиксела и височина 300 пиксела.

Секция 12 – Сеул, Корея Страница 307 от 434

Полезен съвет

Както очаквате, тази програма е по-трудна от останалите в курса. Учениците не би трябвало да опитват да я направят наведнъж. Нека да направят една част, като движението на мишката. След това спирането на мишката на границата и т.н.

Page 308: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Движете котката и мишката, като променяте местоположението на полетата, които съдържат техните изображения, добавяйки положителни и отрицателни стойности към текущите им X и Y координати.

Използвайте таймер, който отмерва 1/4 от секундата. В процедурата, обработваща събитието на таймера осигурете движението на котката и мишката. Това не може да стане директно. За да преместите полето, визуализиращо дадена картинка, трябва да преизчислите X и Y координатите му като използвате следния код:

Mouse.Location = New Point(X, Y)

След като реализирате преместването проверете следното:

Мишката е избягала Котката е хванала мишката Мишката трябва да промени посоката на движението си, защото е твърде близо до котката Котката и мишката са до границите на екрана.

Котката е в поле за визуализиране на картинка с име 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 връща случайно число, което може да бъде положително или отрицателно. Числото представя разстоянието, на което се преместват мишката и котката на всеки ход. Например,

Секция 12 – Сеул, Корея Страница 308 от 434

Page 309: CodeRulesBook2010 (Светът на програмирането – пътешествие)

CatXChg = NewChg()

В процедурата, която обработва събитието Button_Click на бутона “Нова игра” инициализирайте със случайни стойности местоположението на котката и мишката. Активирайте таймера.

Съвет: Много програмисти считат, че е по-добре кодът да се пише на етапи, които завършват с тестване. Вие можете да напишете програмата на следните стъпки:

Позициониране на котката и мишката Преместване на котката Проверка за достигане границата на екрана Преместване на мишката Проверка за достигане границата на екрана Проверка за избягала мишка Проверка за хваната мишка Проверка за близостта между котката и мишката

След всяка стъпка тествайте кода.

Ако програмата работи правилно, я покажете на учителя си.

Продължение / Обобщение

Съхранете посоката на разположението на изображенията. Променяйте тази посока при промяна в посоката на движение на котката или мишката. Използвайте следния код:

Cat.Image.RotateFlip(RotateFlipType.Rotate180FlipX)

Определете посоката, в която се движи мишката, и променяйте движението на котката, така че да следва това на мишката. Например, ако котката има X координата 450, а мишката – 250, то котката трябва да се движи в отрицателна посока.

Добавете куче, което да преследва котката.

Секция 12 – Сеул, Корея Страница 309 от 434

Page 310: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 12 – Сеул, Корея Страница 310 от 434

Page 311: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 13 – Улан Батор, Монголия Страница 311 от 434

Page 312: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Писалки и четки

Улан Батор, Монголия

Нашата следваща дестинация е столицата на Монголия – Улан Батор. Те е разположена на река Туул, приток на Селенга, в долина от полите на планината Богдо Уул.

Вече изучихте как да създавате форми с различни по вид и местоположение контроли, но може би си мислите дали не може да използвате формата като платно, върху което да рисувате свободно. Разбира се, че може!

Нашето пътешествие в света на програмирането ще продължи с изучаването на четките и писалките, но преди това ще ви разкажа за това как и къде във вашия код можете да създадете платно за рисуване и как възниква събитието Paint. Да вървим!

Секция 13 – Улан Батор, Монголия Страница 312 от 434

Page 313: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Събитието Paint

Спомняте ли си какво представляваха събитията. Научихме различни неща за тях, когато бяхме в Казабланка. Но едно от най-загадъчните събития – може би най-малко вероятният кандидат за събитие – е едно от най-важните. Това събитие, известно като Paint, съобщава на вашата програма кога една част или цялата форма е невалидна и трябва да се изрисува.

По какъв начин формата става невалидна? Когато формата бъде създадена за пръв път, тя е невалидна, защото все още програмата не е изрисувала нищо. Първото събитие Paint, което програмата получава, е да й укаже да нарисува нещо във формата.

Когато движите формите по екрана така, че да се припокриват една друга, Windows не запазва показаното, което е покрито от друга форма. Когато част или цялата форма по-късно се открие, програмата трябва да възстанови показваното. Поради това тя получава друго събитие Paint. Когато възстановите програма, която преди това е била минимизирана, получавате друго събитие Paint.

Windows програмите трябва да могат изцяло да прерисуват формите си по всяко време. Трябва да запазват или да държат бързо достъпна цялата информация, необходима за това. Да структурирате вашата програма правилно да отговаря на събитието Paint може да звучи много ограничаващо, но ще свикнете.

Секция 13 – Улан Батор, Монголия Страница 313 от 434

Page 314: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Обработване на събитието Paint

Ето как можете да добавите код за обработване на събитието Paint. Нека добавим събитие Paint към форма, която преди това сте създали. Щракнете където и да е във формата, но извън контролите, ако има такива. В прозореца Properties щракнете върху бутончето със светкавицата.

Секция 13 – Улан Батор, Монголия Страница 314 от 434

Page 315: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ще се появи списък с всички събития, които можете да обработвате за формата. Намерете събитието Paint и щракнете двукратно върху него. Ще се генерира код, който изглежда по следния начин:

Секция 13 – Улан Батор, Монголия Страница 315 от 434

Page 316: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Въведете следния код:

Не се притеснявайте, ако не разбирате нищо. Изградете приложението. Ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата. Ще видите следния резултат:

Секция 13 – Улан Батор, Монголия Страница 316 от 434

Page 317: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Платното за рисуване

Разгледайте параметрите на процедурата, която обработва събитието Paint. Параметърът с име “е” ви предоставя платно за рисуване с име Graphics. Това е въображаема повърхност, върху която можете да нарисувате всичко, което си пожелаете – от по-прости линии и криви, до сложни фигури с разнообразно запълване. Когато ви е необходимо, сами можете да създадете платно за рисуване с ред, подобен на този:

Dim grfx As Graphics = e.Graphics

Можете да наречете Graphics платното за рисуване както пожелаете. Някои програми използват graphics с малка буква, но честото му използване често води просто до използване на буквата “g” за обозначаването му. Аз ще използвам Graphics платното за рисуване предоставено със събитието Paint.

Платното за рисуване Graphics ви предоставя широк набор от средства за рисуване. С тяхна помощ можете да рисувате линии, правоъгълници, елипси, сложни многоъгълници, текстове с различен наклон и много други. Тях ще разгледаме по-нататък по време на пътуването ни. Разбира се, когато рисуваме винаги имаме нужда от писалки и четки. Нека научим нещо за тях!

Секция 13 – Улан Батор, Монголия Страница 317 от 434

Page 318: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Инструменти за рисуване

Когато чертаете линии или криви, използвате писалка, а когато рисувате запълнени области и текст използвате четка. Писалките и четките във Visual Basic .NET се обозначават съответно с ключовите думи Pen и Brush. Писалките и четките имат конкретен цвят, но заедно с това и много други характеристики. Можете ли да се досетите за някои от тях? В този курс ще изучим най-необходимите.

Секция 13 – Улан Батор, Монголия Страница 318 от 434

Полезен съвет

В този курс учениците не се запознават с понятията клас и обект. Можете да наричате писалките и четките обекти, но бъдете внимателни. Това може да внесе объркване в понятията на учениците.

Полезен съвет

Провокирайте учениците да се замислят върху характеристиките на писалките и четките. Например, нека дадат отговор на въпроса относно това, което ги кара да сменят моливи с различни цветове или да използват различни техники

Page 319: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Писалки

Когато чертаете линия на ръка върху хартия, използвате молив, креда, писалка химикалка, флумастер или нещо друго. Типът на инструмента, който избирате определя най-малко цвета и дебелината на линията. Тези и други характеристики принадлежат и на писалките във Visual Studio 2010. Писалките могат да бъдат създадени от четките, а четките от различни изображения. Това обаче са по-сложни въпроси от програмирането на компютърната графика, които за сега няма да разглеждаме.

Можете да създадете писалка като използвате следния ред с код:

Dim pen As New Pen(Color.Aqua, 5)

В скобите записвате два параметъра. Първият от тях задава цвета на писалката, а вторият – дебелината. За да зададете цвета на писалката напишете ключовата дума “Color” и след това поставете точка. Visual Studio 2010 ще ви предостави цял списък с цветове, които можете да използвате:

Вторият параметър задава дебелината на писалката. Можете да го пропуснете. Тогава ще се създаде писалка с дебелина 1. В случая съм създал писалка с дебелина 5.

Секция 13 – Улан Батор, Монголия Страница 319 от 434

Page 320: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Писалките не е задължително да бъдат задавани плътни линии. Вместо това те могат да се състоят от шаблони с точки и тирета. Този стил се задава със свойство на писалката с име DashStyle. Таблицата по-долу описва различните стилове, които можете да задавате на писалките:

Стил Описание0 Плътна линия1 Пунктирана линия с тире.2 Пунктирана линия с точка.3 Пунктирана линия с редуващи се тире и точка.4 Пунктирана линия с редуващи се тире и две точки.5 Определен от вас стил.

Стилът на писалката можете да промените със следния ред код:

pen.DashStyle = 3

За да я използвате обаче, когато рисувате линии и криви, трябва да я зададете като първи параметър на съответния инструмент за рисуване. Различните инструменти за рисуване ще ви покажа в следващите уроци. За сега е необходимо да запомните, че по някакъв начин трябва да кажете на вашата програма да използва създадената от вас писалка. Например редът с код, който видяхте, че изчертава линия би изглеждал по следния начин:

e.Graphics.DrawLine(pen, 150, 100, 200, 200)

Секция 13 – Улан Батор, Монголия Страница 320 от 434

Page 321: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Четки

Когато чертаете текст или запълнени области, използвате четка. За да създадете четка трябва да напишете код, подобен на следния:

Dim brush As New SolidBrush(Color.Aqua)

Този ред с код създава четка с плътно запълване. Четките могат да бъдат в пет различни стила, задаващи запълването. Таблицата по-долу описва всеки един от тях.

Четка ОписаниеSolidBrush Плътно запълване.HatchBrush Запълване с шарка.TextureBrush Запълване с текстура.LinearGradientBrush Запълване с линеен градиент.PathGradientBrush Запълване с градиент чрез задаване на път.

Секция 13 – Улан Батор, Монголия Страница 321 от 434

Page 322: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Четката с шарка запълва област с малка повтаряща се шарка, най-често състояща се от вертикални, хоризонтални или диагонални линии. Когато използвате такава четка задавате три свойства – стил, цвят на фона и цвят на предния план по следния начин:

Dim brush As New HatchBrush(4, Color.Aqua, Color.Black)

Имате възможност да избирате между 53 стила. В таблицата по-долу са описани някои от тях:

Стил Описание0 Хоризонтална щриховка1 Вертикална щриховка.2 Ляво наклонена щриховка.3 Дясно наклонена щриховка.4 Щриховка с хоризонтални и вертикални линии.5 Щриховка с ляво и дясно наклонени вертикални линии.

Четката, която запълва с текстура използва картинка. Картинката се разполага

многократно вертикално и хоризонтално в областта, която желаете до нейното пълно запълване. Създаването на подобна четка става по следния начин:

Dim MyImage As Image = Image.FromFile("image.jpg")Dim textureBrush As New TextureBrush(MyImage)

Първият ред от кода задава картинката, която ще използвате при създаването на четката. С втория ред създавате четката като и задавате избраната от вас картинка.

Секция 13 – Улан Батор, Монголия Страница 322 от 434

Полезен съвет

Помогнете на учениците си да добавят следните библиотеки в началото на кода за формата:

Imports System.Drawing

Imports System.Drawing.Drawing2D

Page 323: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Останалите два стила за четки се описват с думата градиент, която означава преход между цветове. Запълването с линеен градиент включва преход между два цвята. На пръв поглед може да изглежда сложно да се създаде начин, по който един цвят се слива с друг, и вероятно затова има два начина за задаване на такава четка. Градиентът между два цвята може да се зададе с двойка успоредни линии. Всяка линия има чист цвят. Цветът прави преход между двете линии. За да създадете подобна четка не е нужно да задавате две успоредни линии. Достатъчно е да зададете две точки. Всяка от двете точки задавате с координати x и y. Също така трябва да зададете начален и краен цвят, които ще се използват за създаване на преливането:

Dim LienarGradientBrush As New LinearGradientBrush(_New Point(10, 10), New Point(40, 40),_Color.Aqua, Color.Blue)

Последния стил четка изисква да зададете многоъгълник, който ще бъде запълнен с преливащ цвят. Многоъгълника можете да определите като набор от точки по следния начин:

Dim points() As Point = {New Point(10, 10),_New Point(10, 300),_New Point(150, 300)}

След това наборът от точки можете да използвате, за да създадете четка по следния начин:

Dim PathGradientBrush As New PathGradientBrush(points)

И накрая, използвайте всяка една от четките в предоставените от Visual Basic инструменти за рисуване ето така:

Секция 13 – Улан Батор, Монголия Страница 323 от 434

Полезен съвет

Пояснете на учениците, че всичко което рисуват на формата става във въображаема координатна система, чието начало съвпада с горния ляв ъгъл на формата, като x стойностите нарастват надясно, а y стойностите надолу.

Page 324: CodeRulesBook2010 (Светът на програмирането – пътешествие)

13 Пробвайте 01 Писалки

Стига толкова приказки. Време е да напишете вашата първа графична програма.

Създайте форма подобна на показаната по-долу:

В първия падащ списък въведете следните стойности:

Тъмно син Червен Зелен Небесно син Пурпурен Жълт Лилав Кафяв

Във втория падащ списък въведете следните стойности: Плътна Пунктирана с тире Пунктирана с точка Пунктирана с тире и точка Пунктирана с тире и две точки

Задайте стойност 1 на свойството Text на текстовото поле.

Секция 13 – Улан Батор, Монголия Страница 324 от 434

Page 325: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Променете цвета на формата на Window като използвате свойството й BackColor.

Задайте подходящо заглавие на формата и на бутона върху нея.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 13 – Улан Батор, Монголия Страница 325 от 434

Page 326: CodeRulesBook2010 (Светът на програмирането – пътешествие)

13 Пробвайте 01 Четки

Дойде време да се занимаем и с четките.Създайте форма подобна на показаната по-долу:

Секция 13 – Улан Батор, Монголия Страница 326 от 434

Page 327: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 13 – Улан Батор, Монголия Страница 327 от 434

Page 328: CodeRulesBook2010 (Светът на програмирането – пътешествие)

При поставянето на радио-бутоните проверете дали свойството им Name е в диапазона от RadioButton1 до RadioButton5.

В двата падащи списъка въведете следните стойности: Тъмно син Червен Зелен Небесно син Пурпурен Жълт Лилав Кафяв

Променете цвета на формата на Window като използвате свойството й BackColor. Задайте стойности 400 и 470 съответно за ширината и височината й.

Задайте подходящо заглавие на формата и на бутона върху нея.

Секция 13 – Улан Батор, Монголия Страница 328 от 434

Page 329: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Забелязахте ли разликата между отделните стилове четки?

Секция 13 – Улан Батор, Монголия Страница 329 от 434

Page 330: CodeRulesBook2010 (Светът на програмирането – пътешествие)

13 Можете ли? Четката с шарка

Спомняте ли си четката с шарка. Можете да я използвате с 53 стила. За да видите всеки един от тях, отговорете на следващото предизвикателство.

Кодът, който ще напишете поставете в обработчика на събитието Click на формата.

В секция 9 научихте как се генерира случайно число в даден интервал. В случая трябва да генерирате случайно число в интервала от 0 до 53, което след това да използвате като стойност за стила на четката с шарка.

Не забравяйте да създадете платно за рисуване, преди да създадете и използвате четката.

За попълване на формата със създадената от вас четка можете да използвате следния ред с код:

g.FillRectangle(brush, 0, 0, 300, 300)

В кода по-горе “g” съответства на платното за рисуване Graphics. В следващата секция ще научите как да използвате метода FillRectangle.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 13 – Улан Батор, Монголия Страница 330 от 434

Page 331: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 13 – Улан Батор, Монголия Страница 331 от 434

Page 332: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 14 – Москва, Русия Страница 332 от 434

Page 333: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Рисуване в прозорец

Москва, Русия

Здравейте отново! Скоро ще разгледаме средновековната крепост Кремъл в Москва. Тя служи за седалище на руското федерално правителство. Катедралата Свети Василий Блажени край Кремъл с елегантните си куполи е един от най-запомнящите се символи на Москва. Москва е сърцето на руските сценични и изящни изкуства. Градът е осеян с театри за драма, опера и балет, сред които най-известен е Болшой театър. Искрено се надявам да го посетим, когато стигнем там.

Ди Джей ме заинтригува доста с възможностите във Visual Basic 2010 за рисуване. Аз се постарах да науча още неща, за които ще ви разкажа по време на пътуването ни до следващата дестинация.

Според Евклид “Линията е дължина без ширина”. Думите “без ширина” правят това твърдение интересно. Аз, а може би и вие, не съм съгласен с древните гърци. Те не са знаели нищо за компютърната графика. Мислете за пиксела като точка от екрана с определени размери. Компютрите използват тази мерна единица, за да определят дебелината на линиите. Разбира се, възможно е да се използват и други мерни единици. Това обаче, което искам да ви покажа е как бихте могли да рисувате различни линии, криви и запълнени области.

Да вървим!

Секция 14 – Москва, Русия Страница 333 от 434

Page 334: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Прави линии

Платното за рисуване Graphics предоставя широк набор от инструменти за рисуване. Във Visual Basic те се наричат методи. Всеки един от методите е съпроводен от аргументи, които определят къде и как да се рисува, с каква писалка или четка.

За да начертаете единична права линия, използвайте метода DrawLine. Той получава аргументи, които задават координатите, където започва и завършва линията, и писалката, използвана за чертане на линията.

Например следният ред с код ще изчертае линия, която започва от точка с координати (0,0) и завършва в точка с координати (5,5).

grfx.DrawLine(pen, 0, 0, 5, 5)

Може би вашият учител ви е разяснил, че есичко което рисувате се разполага в мислена координатна система, началото на която съвпада с горния ляв ъгъл на прозореца. В нея стойностите на x нарастват надясно, а стойностите на y – надолу.

Кодът по-горе оцветява 6 пиксела. Това са пикселите в точки с координати (0,0), (1,1), (2,2), (3,3), (4,4), (5,5). Редът на задаване на двете точки няма значение, затова кодът:

grfx.DrawLine(pen, 5, 5, 0, 0)

дава същия резултат.

Секция 14 – Москва, Русия Страница 334 от 434

Page 335: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Правоъгълници

Правоъгълниците не се срещат в природата твърде много, но определено са най-разпространената форма на обекти, проектирани и построени от хората. Правоъгълниците са навсякъде. Страницата, която четете сега, е правоъгълник; параграфите са форматирани в правоъгълници; прозорецът, през който гледате навън, когато моят текст започне да ви отегчава, вероятно също е правоъгълен.

Определено можете да начертаете правоъгълник с помощта на DrawLine, но по-прост начин предоставя методът DrawRectangle. Той има аргументи, които задават точка, определяща горния ляв ъгъл на правоъгълника, ширината и височината на правоъгълника. Естествено като аргумент трябва да подадете и писалката, с която желаете да изрисувате правоъгълника. Ширината и височината на правоъгълника трябва да бъдат по-големи от 0. При задаване на отрицателни ширини и височини няма да се изчертае нищо.

Например:

grfx.DrawRectangle(pen, 0, 0, 200, 200)

изчертава правоъгълник с височина и ширина 200 пиксела, чийто горен ляв ъгъл съвпада с горния ляв ъгъл на формата. Лесно е, нали!

Секция 14 – Москва, Русия Страница 335 от 434

Page 336: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Многоъгълници

Математическите многоъгълници са затворени фигури с три или повече страни, като триъгълници, четириъгълници, петоъгълници, шестоъгълници, седмоъгълници и т.н. Тях можете да изчертаете с метода DrawPolygon. Освен писалката, с която ще чертаете многоъгълника, този метод притежава аргумент, представляващ набор от точки, съответстващи на върховете на многоъгълника.

Ето и пример:

Dim points() As Point = {New Point(0, 0),_New Point(50, 100),_New Point(100, 0)}

grfx.DrawPolygon(pen, points)

Примерният код изчертава триъгълник, който прилича на буквата “V” в английската азбука. Както виждате триъгълникът се задава с три точки, съответстващи на върховете му.

В някои случаи можете да симулирате извикването на DrawPolygon с извикване на DrawLine. Ефектът, обаче не винаги е същият.

Секция 14 – Москва, Русия Страница 336 от 434

Page 337: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Елипси и дъги

Изчертаването на елипса е толкова лесно, колкото и на правоъгълник. Методът DrawEllipse, с който можете да направите това, приема същите аргументи както метода DrawRectangle. Вие трябва да зададете координатите и размерите на въображаем правоъгълник, в който елипсата ще се изрисува като вписана. Следният код изчертава елипса, която е вписана в правоъгълник с височина и ширина 200 пиксела, чийто горен ляв ъгъл съвпада с горния ляв ъгъл на формата:

grfx.DrawEllipse(pen, 0, 0, 200, 200)

Ако правилно сте разбрали това, което ви разказах за елипсите, няма да имате проблем и с дъгите. Дъгата представлява сегмент от елипсата. За изчертаете дъга, трябва да зададете същата информация, необходима и за елипса, плюс това да зададете къде започва и къде завършва дъгата. Поради тази причина методът DrawArc изисква същите аргументи, както DrawEllipse плюс още два аргумента. Ето и пример:

grfx.DrawArc(pen, 0, 0, 200,_

200, 30, 90)

Двата допълнителни аргумента са ъглите, които определят началото на дъгата и нейната дължина. Ъглите могат да бъдат положителни или отрицателни. Те се измерват по посока на часовниковата стрелка в градуси, от началото на хоризонталната ос надясно от центъра на елипсата. Това означава, че ъгъл със стойност 0 градуса съответства на 3:00 часа на часовника.

Методът DrawPie има същите аргументи като DrawArc, но чертае линии от краищата на дъгата до центъра на елипсата, като създава затворена област.

grfx.DrawPie(pens, 0, 0, 200, 200, 30, 90)

Секция 14 – Москва, Русия Страница 337 от 434

Полезен съвет

Изяснете на учениците си, ако е необходимо понятието вписана елипса в правоъгълник.

Page 338: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Запълване на правоъгълници, елипси и сектори

Разгледаните до тук методи, които чертаят затворени области, не запълват тяхната вътрешност. За тях вие можете да укажете писалката, но не и четката, която да се използва. За щастие освен методи започващи с Draw, съществуват и методи, които започват с Fill и се използват за запълване на области. Първият аргумент за тези методи е четката, използвана за запълване на вътрешността.

Методът FillRectangle се използва за запълване на правоъгълна област. С изключение на първия аргумент всички останали съвпадат с тези на метода DrawRectangle. Например кодът

grfx.FillRectangle(brush, 10, 10, 400, 400)

запълва правоъгълник с височина и ширина 400 пиксела и с координати на горен ляв ъгъл (10,10) с указаната четка.

По аналогичен начин методът FillEllipse запълва затворена област под формата на елипса. Както можете да се досетите този метод получава същите аргументи като DrawEllipse с изключение на първия параметър, който вече е четка, а не писалка.

grfx.FillEllipse(brush, 10, 10, 400, 400)

Съществува малко припокриване между елипсата, начертана от DrawEllipse и областта, запълнена от FillEllipse. Ако искате да начертаете елипса, която е едновременно запълнена и очертана с контур, извикайте FillEllipse преди извикването на DrawEllipse. Това правило спазвайте и за останалите двойки методи Draw-Fill.

Да не забравяме и метода FillPie, който запълва област под формата на пай.

grfx.FillPie(brush, 0, 0, 200, 200, 30, 90)

Накрая разполагате и с метод FillPolygon. Това, което прави многоъгълника различен от другите запълнени области е, че линиите, които го определят, могат да се пресичат и застъпват. Това добавя степен на сложност, защото вътрешностите на полигона могат да бъдат запълнени по два различни начина. Начинът на запълване се определя от последния (трети) параметър на метода, който може да бъде 0 или 1. При стойност 0 се реализира редуване на запълнени и незапълнени области, а при стойност 1 се запълват най-много вътрешни области.

Начинът на запълване може да се забележи само, ако линиите, определящи многоъгълника, се застъпват. На практика той определя кои области да се запълнят и кои не. Ако не е зададен начин на запълване в метода FillPolygon, се

Секция 14 – Москва, Русия Страница 338 от 434

Page 339: CodeRulesBook2010 (Светът на програмирането – пътешествие)

приема, че стойността му е 0. В този случай дадена затворена област се запълва само ако има нечетен брой граници между затворената област и безкрайността.

Може би малко ви обърках. Сега ще се опитам да изясня по-добре нещата. Класическият пример е звездата с пет върха. Когато начинът на запълване има стойност 1, вътрешността на петоъгълника се запълва. В противен случай остава празно незапълнено пространство.

В повечето случаи когато начинът на запълване е със стойност 1, се запълват всички затворени области. Това обаче не е чак толкова просто и съществуват изключения. За да определите дали дадена затворена област ще бъде запълнена, представете си линия, начертана от точка в тази област до безкрайност. Ако въображаемата линия пресича нечетен брой гранични линии, областта се запълва както при зададена стойност 0. Ако въображаемата линия пресича четен брой гранични линии, областта може да бъде запълнена, или незапълнена. Областта се запълва, ако броят на граничните линии, отиващи в едната посока (относно въображаемата линия), не е равен на броя на граничните линии, отиващи в другата посока.

Секция 14 – Москва, Русия Страница 339 от 434

Page 340: CodeRulesBook2010 (Светът на програмирането – пътешествие)

14 Пробвайте 01 Рисуване на фигури

Ето, че стана време да приложите наученото до тук.

Създайте форма подобна на показаната по-долу:

Задайте височина и ширина на формата съответно 400 и 300. Използвайте полетата за отметка, за да определите каква фигура ще се изрисува.

Преди всяко изчертаване възстановявайте фона на формата. За целта можете да използвате следния ред с код:

g.Clear(Drawing.Color.FromName("Control"))

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Секция 14 – Москва, Русия Страница 340 от 434

Page 341: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ако програмата работи правилно, я покажете на вашия учител.

Продължение / Обобщение

Разширете програмата като осигурите възможност за избор на цвят и стил на писалката от падащо меню.

Секция 14 – Москва, Русия Страница 341 от 434

Page 342: CodeRulesBook2010 (Светът на програмирането – пътешествие)

14 Пробвайте 02 Рожден ден

Знаете ли, че Ники има скоро Рожден ден? Замислили сме да я изненадаме с огромна торта. Разбрахме, че ще покани много приятели. А защо не дойдете и вие!

Несъмнено щом има Рожден ден, ще има и торта. Но как ще я разделим на толкова много парчета. Защо да не напишем програма, която да дели торта на толкова равни парчета, колкото са необходими за всички гости.

Да започваме работа!

Вашата форма няма да е сложна. Тя може да изглежда така:

Декларирайте три променливи StartPoint, EndPoint и Pie от тип Integer. Инициализирайте StartPoint със стойност 0, EndPoint със стойността на Pie, а Pie със стъпката, която ще определи размера на частите от тортата:

Pie = CInt(360 / Val(TextBox1.Text))

Използвайте два цикъла for – единия за да изчертаете контурите на парчетата, а втория, за да ги запълните. Не забравяйте, че извикването на метода DrawPie трябва да предхожда извикването на метода FillPie.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Секция 14 – Москва, Русия Страница 342 от 434

Page 343: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ако програмата работи правилно, я покажете на вашия учител.

Продължение / Обобщение

Спомнете си как се създава запълване с градиент. Опитайте се да запълните частите на тортата с различни преливащи се цветове.

Секция 14 – Москва, Русия Страница 343 от 434

Page 344: CodeRulesBook2010 (Светът на програмирането – пътешествие)

14 Можете ли? Пейзаж

Ди Джей е истински художник, но дали се справя толкова добре, когато рисува върху формата, както когато рисува върху платно с боите си? А вие? Сега ще проверим!

Секция 14 – Москва, Русия Страница 344 от 434

Page 345: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 14 – Москва, Русия Страница 345 от 434

Page 346: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ако се затруднявате да си представите координатите на фигурите, начертайте предварително върху лист с координатна система отделните компоненти на картината. Изчислете местоположението и големината на всяка една от тях.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 14 – Москва, Русия Страница 346 от 434

Page 347: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 14 – Москва, Русия Страница 347 от 434

Page 348: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 15 – Хелзинки,Финландия Страница 348 от 434

Page 349: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Текстове и шрифтове

Хелзинки, Финландия

Отправяме се към Хелзинки – столицата и най-големият град във Финландия. Разположен е в Южна Финландия, провинция Уусимаа, на северния бряг на Финския залив.

С Клиф и Ди Джей научихте доста за възможностите да рисувате във средата на Visual Basic 2010. Нещо обаче липсва. Какво ли е то? Питах се не е ли възможно да използваме писалките и четките за създаване на текстове с художествено украсени шрифтове. Аз мисля, че е възможно. Да проверим!

Секция 15 – Хелзинки,Финландия Страница 349 от 434

Page 350: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Текстове

В графична среда вероятно една от най-скучните задачи – визуализирането на текст – е едно от най-сложните неща. Шрифтовете често са пропорционални и обикновено се доставят с разнообразни стилове и размери, което означава, че текстът трябва да бъде управляван по начин, подобен на другата графика. Все пак текстът не прилича толкова на линиите и запълнените области и затова управлението му изисква повече труд в компютърната графика. За печатаря, шрифтовете представляват произведение на изкуството с дълга история изкусен дизайн. Създателите на компютърни графични системи трябва да се справят с класическите типографски концепции, а програмистите на приложения да изучат тези концепции.

Най-важният принцип е, че текстът е предназначен за четене. Съществуват редица тънкости в дизайна на шрифта, изобразяването и разположението на страницата, които влияят на четивността дори, ако обикновеният потребител не ги забелязва съзнателно. Още повече, че текстът не е чисто съдържание. Неговият стил може да повлияе върху интерпретацията на съдържанието – положително или отрицателно. Ето защо в тази секция ще научим повече неща за шрифтовете.

Секция 15 – Хелзинки,Финландия Страница 350 от 434

Page 351: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Същност на шрифта

Печатарите по правило означават конкретен шрифт с име и рисунък на шрифта (typeface name) и размер в пунктове. Всеки рисунък на шрифт принадлежи към дадена фамилия. Фамилиите от рисунъци имат прости имена като Bookman, Helvetica, Garamond и Times. Всяка фамилия често включва няколко варианта:

Гредичките, които образуват знаковете, могат а бъдат тънки или дебели в различни степени, описвани в имената на шрифтовите рисунъци, като Helvetica Ultra Light, Helvetica Thin, Helvetica Light, Helvetica Bold, Helvetica Heavy и Helvetica Black.

Шрифтовете на отделните знакове могат да бъдат по-тесни или по-широки от обикновено, при имена на шрифтови рисунъци като Helvetica Narrow, Helvetica Condensed и Helvetica Expanded.

Знаковете могат да бъдат наклонени надясно, давайки ни имена на рисунъци като Helvetica Italic или Helvetica Oblique. Строго дефинирано, полегати (oblique) означава, че знаковете просто са наклонени, докато наклонени (italic) означава, че освен това знаковете са стилистично донякъде различни от съответния изправен шрифт.

Тези три варианта могат да бъдат комбинирани в едно отделно име на рисунък на шрифт – например Helvetica Bold Extended Oblique. Имената на рисунъците могат също да включват името на техния създател.

Секция 15 – Хелзинки,Финландия Страница 351 от 434

Page 352: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Може би най-познатите ви шрифтове са Courier New, Times New Roman, Arial и Symbol.

Courier е фамилия шрифтове с фиксирана стъпка, която наподобява текст, отпечатан на пишеща машина. Днес много малко текст се изписва с Courier. Изключение са само прозорците с команден ред, листингите на програми и шестнайсетичен код.

Times New Roman е клонинг на шрифта Times, първоначално създаден от Times of London и използван в много печатни материали. Той се счита за високо четивен. Arial е клонинг на Helvetica – популярен несерифен шрифт. Серифите представляват малки напречни чертички, с които завършват гредичките на буквите. Несерифният шрифт няма серифи. Шрифтът Symbol вместо букви включва често използвани специални знакове и символи.

Често в графичните среди обикновено думата шрифт се използва за означаване на фамилия от шрифтове. Освен това шрифтовите начертания наклонен и удебелен се представят като атрибути или стилове на конкретен шрифт.

Секция 15 – Хелзинки,Финландия Страница 352 от 434

Page 353: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Височини на шрифтовете

Наред с името на шрифтовия рисунък, шрифтът се определя с помощта на вертикален размер с пунктове (точки). В традиционната типография 1 пункт е 1/72 от инча.

Размерът на шрифт се описва най-често като височина на знаковете в латинската азбука. Това са главните и малките букви от A до Z, без диакритичните знакове – от тези с най-възходящи детайли до тези с най-низходящи детайли.

Запознаването с най-често срещаните размери в пунктове е полезно, когато започвате да работите с шрифтовете. Подразбиращият се шрифт в Windows е 10 пункта. Подразбиращият се шрифт на формите е около 8 пункта. Размерът в пунктове понякога се означава като “em” размер. Терминът идва от размера на квадратното парче метал, използвано в стари времена за главната буква М. Днес с “em” се означават най-често хоризонтални мерки. Ширината на един “em” в конкретен шрифт е равна на хоризонталния размер в пунктове на шрифта.

Последователните редове на текста обикновено се подреждат на разстояние по-голямо от размера в пунктове. Това се налага поради наличието на диакритични знакове. Междуредието е и естетически необходимо, тъй като текстът се чете по-лесно, ако между редовете има малко “въздух”.

Секция 15 – Хелзинки,Финландия Страница 353 от 434

Page 354: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Създаване на шрифт

Сигурно сте забелязали, че повечето контроли имат свойство Font. То притежава набор от характеристики, които са описани в таблицата по-долу:

Характеристика ОписаниеName Име на шрифтовия рисунък.Size Размер на шрифта.Unit Мерна единица.Bold Удебелен текст.Italic Наклонен текст.Strikeout Зачертан текст.Underline Подчертан текст.

Когато извеждате текст върху формата с метода DrawString, вие използвате шрифт по подразбиране. Можете да промените шрифта като създадете такъв по един от следните начини:

1. Използване на съществуващ шрифт

Dim font = Me.Font Dim fontItalic As New Font(font, FontStyle.Italic) grfx.DrawString("Наклонен шрифт", fontItalic, Brush, 20, 20)

В примера по-горе първоначално се създава шрифт еднакъв с този на формата. След това от него се създава втори шрифт, който е наклонен. За целта се задава стил със стойност Italic. В таблицата по-долу можете да видите възможните стилове при дефиниране на шрифтове.

Стил ОписаниеRegular НормаленBold УдебеленItalic НаклоненUnderline ПодчертанStrikeout Зачертан

2. Създаване на шрифт по име

Dim fontTimes As New Font("Times New Roman", 12)grfx.DrawString("Нов шрифт", fontTimes, brush, 20, 40)

Секция 15 – Хелзинки,Финландия Страница 354 от 434

Полезен съветРазмерът на шрифтовете може да се задава в различни мерни единици – пиксел, инч, милиметър. Характеристиката Unit служи за това.

Page 355: CodeRulesBook2010 (Светът на програмирането – пътешествие)

В този пример шрифтът се създава като се задава име (“Times New Roman”) и размер в пунктове (12).

Ето как изглеждат текстовете, изписани със създадените шрифтове:

Секция 15 – Хелзинки,Финландия Страница 355 от 434

Page 356: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Размер в пунктове

Ако вие е трудно да си представите мерната единица пункт, не е задължително да я използвате. В таблицата по-долу са изброени някои от мерните единици, които можете да ползвате:

Мерна единица ОписаниеWorld Мерна единица в пространствени координати.Pixel Мерна единица пиксел.Point Мерна единица 1/72 инча.Inch Мерна единица инчове.Document Мерна единица 1/300 инча.Millimeter Мерна единица милиметри.

Не се тревожете, ако някои от мерните единици не са ви ясни. Те са дадени, за да знаете за тяхното многообразие.

Следните редове с код дават един и същ резултат:

Dim font1 As New Font("Arial", 24)Dim font2 As New Font("Arial", 24,

GraphicsUnit.Point)Dim font3 As New Font("Arial", 1 / 3.0F,

GraphicsUnit.Inch)Dim font4 As New Font("Arial", 25.4F / 3, _

GraphicsUnit.Millimeter)Dim font5 As New Font("Arial", 100,

GraphicsUnit.Document)

grfx.DrawString("Без мерна единица", font1, brush, 10, 0)

grfx.DrawString("1/72 инча", font2, brush, 10, 30)grfx.DrawString("Инчове", font3, brush, 10, 60)grfx.DrawString("Милиметри", font4, brush, 10, 90)

Секция 15 – Хелзинки,Финландия Страница 356 от 434

Полезен съветНакарайте учениците си да изберат мерната единица, която познават най-добре.

Page 357: CodeRulesBook2010 (Светът на програмирането – пътешествие)

grfx.DrawString("1/300 инча", font1, brush, 10, 120)

Секция 15 – Хелзинки,Финландия Страница 357 от 434

Page 358: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Забавление с шрифтове

Тъй като знаковете на шрифта се определят с помощта на поредица от прави линии и криви, те се интегрират добре с останалата графичните инструменти от предходните две секции. Знаковете на шрифта могат да бъдат оцветени с всяка четка. Текстът би могъл да надмине неговата обичайна роля – да бъде четен – и да се стреми да стане нещо като изкуство.

Вече знаете как да създадете и използвате четка с шарка и шрифт. Остана само да комбинирате знанията си ето така:

Dim brush As New HatchBrush(4, Color.Aqua, Color.Black)Dim font As New Font("Times New Roman", 72)grfx.DrawString("Шрифт", font, brush, 10, 40)

Резултатът от изпълнението на горния код е следният:

Няма да ви отегчавам с примери за комбиниране на шрифтовете с останалите четки. Смятам, че вие ще се справите с това при решаването на задачите, които ще получите по-нататък.

Секция 15 – Хелзинки,Финландия Страница 358 от 434

Page 359: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Трансформации с шрифт

Текстът е обект на същите ефекти на мащабиране, ротация и навеждане като всеки друг графичен обект. Методът RotateTransform извършва завъртане на определен ъгъл. Ъгълът се задава като аргумент на метода. Ако искате да завъртите текста от предходния пример на 45 градуса преди изписването на текста с метода DrawString поставете следния ред:

grfx.RotateTransform(45)

Ще получите следния резултат:

Секция 15 – Хелзинки,Финландия Страница 359 от 434

Page 360: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Възможно е да “наведете” текста по определен от вас. Това става с метода ScaleTransform. Той работи с два аргумента, които могат да примат само стойности 1 и -1. Комбинацията от тях определя как ще се наведе текста.

Например, ред с код:

grfx.ScaleTransform(-1, -1)

води до следния резултат:

При използването на функциите RotateTransform и ScaleTransform можете да не получите резултат. Формата ви в този случай ще бъде празна. Това се дължи на обстоятелството, че след трансформацията изписаният текст остава извън границите на формата. Можете да зададете средата на формата като начална точка трансформация по следния начин:

grfx.TranslateTransform(Me.Size.Width/2, Me.Size.Height/2)

Секция 15 – Хелзинки,Финландия Страница 360 от 434

Полезен съветКогато искате да получите достъп до някои от свойствата на формата, използвайте обекта “Me”. Обяснете неговото предназначение на учениците без да навлизате в терминологията на класовете и обектите.

Page 361: CodeRulesBook2010 (Светът на програмирането – пътешествие)

15 Пробвайте 01 Настройки на шрифт

А сега да проверим наученото.

Създайте форма, която изглежда така:

Попълнете падащото меню с имена на шрифтове, които познавате. В обработчика на събитието Click декларирайте следните променливи:

Променлива ТипFontName StringFontStyle System.Drawing.FontStyleFontSize Integer

Променливата FontSize инициализирайте със стойността на свойството Text на текстовото поле.

Променливата FontStyle инициализирайте в зависимост от маркираното поле за отметка.

Променливата FontName инициализирайте с име на шрифтова фамилия в зависимост от индекса на избрания елемент от падащото меню.

Създайте шрифт като използвате трите променливи.

Присвоете създадения шрифт на свойството Font на етикета.

Секция 15 – Хелзинки,Финландия Страница 361 от 434

Page 362: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 15 – Хелзинки,Финландия Страница 362 от 434

Page 363: CodeRulesBook2010 (Светът на програмирането – пътешествие)

15 Пробвайте 02 Текст, изобразен с четка

За тези, които обичат да рисуват тази задача може би ще е по-интересна.

Създайте форма, подобна на следната:

В обработчика на събитието Click на бутона извикайте метода Invalidate.

В обработчика на събитието Paint създайте удебелен шрифт с по-голям размер, например 36. В зависимост от маркирания бутон създайте плътна четка, четка с шарка, с линеен градиент или с градиент, зададен с път. Изпишете примерен текст със създадения шрифт и съответната четка.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 15 – Хелзинки,Финландия Страница 363 от 434

Page 364: CodeRulesBook2010 (Светът на програмирането – пътешествие)

15 Можете ли? Забавление с текст

А сега е време за едно истинско предизвикателство!

Ефектите са постигнати само чрез отместване с няколко пиксела на изчертавания текст. Ако се затруднявате, потърсете помощта на вашия учител.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 15 – Хелзинки,Финландия Страница 364 от 434

Page 365: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 15 – Хелзинки,Финландия Страница 365 от 434

Page 366: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 16 – Стокхолм, Швеция Страница 366 от 434

Page 367: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Диалогови прозорци

Стокхолм, Швеция

С моята група отдавна сме замислили да посетим родината на някои от легендите в световното музикално пространство. Несъмнено познавате АББА, Юръп и Роксет, а какво ще кажете за Ace of Base, Army of Lovers и The Cardigans?

Ще използваме нашето пътуване до Швеция, за да реализираме идеята си. В Стокхолм задължително ще посетим първия в света музей на открито Скансен, в който има къщи от различните краища на Швеция и зоологическа градина.

По пътя ще ви разкажа какво представляват и как се използват диалоговите прозорци. При положение, ч можете да декорирате главната форма на програмата си с бутони и други контроли по същия начин, по който можете да създадете дизайна и на диалогов прозорец, какво прави една форма различна от диалогов прозорец?

Секция 16 – Стокхолм, Швеция Страница 367 от 434

Page 368: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Диалоговите прозорци

От гледна точка на управление на събитията на диалоговите прозорци и техните контроли разликата между тях и формите е малка.

Диалоговите прозорци биват модални и немодални. Най-често използваните са модалните диалогови прозорци и затова ще обърна повече внимание на тях. Както подсказва името, модалния диалогов прозорец превключва режима на въвеждане (вход) от главната форма на програмата към диалоговия прозорец. Когато програмата показва модален диалогов прозорец, потребителят не може да превключва между диалоговия прозорец и друга форма на програмата. Потребителят трябва явно да напусне диалоговият прозорец, обикновено като натисне команден бутон с надпис OK (или Open, или Save) или бутон с надпис Cancel. Но потребителят може да превключи на друга програма докато диалоговият прозорец продължава да бъде показан. Някои диалогови прозорци дори не позволяват превключване към други програми: системните модални диалогови прозорци съобщават за сериозни проблеми и първо трябва да бъдат завършени, за да може потребителят да прави нещо друго в Windows.

Немодалните диалогови прозорци са много подобни на допълнителните форми, които създава програмата. Можете да превключвате между немодалните диалогови прозорци, които програмата създава, и главната форма. Програмистите често използват модални диалогови прозорци, когато програмата трябва да получи от потребителя допълнителна информация.

Секция 16 – Стокхолм, Швеция Страница 368 от 434

Page 369: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Вашият първи модален диалогов прозорец

Диалоговите прозорци се различават от формите най-вече по начина, по който се извикват и прекратяват.

Сега ще ви покажа колко лесно можете да създадете диалогов прозорец!1. Създайте нов проект и поставете бутон на формата, която Visual Basic

създава за вас.

Секция 16 – Стокхолм, Швеция Страница 369 от 434

Page 370: CodeRulesBook2010 (Светът на програмирането – пътешествие)

2. От менюто Project на Visual Studio 2010

изберете командата Add New Item…

3. В появилия се прозорец със заглавие Add New Item изберете шаблона Dialog и натиснете бутона Add.

Секция 16 – Стокхолм, Швеция Страница 370 от 434

Page 371: CodeRulesBook2010 (Светът на програмирането – пътешествие)

4. Ще се създаде нов диалогов прозорец с два бутона Ok и Cancel. Върнете се отново при главната форма и щракнете два пъти върху бутона. В обработчика на събитието Click въведете следния код:

Dialog1.ShowDialog()

5. Изградете и стартирайте програмата.

Какво се случва, когато натиснете бутона на формата?

Секция 16 – Стокхолм, Швеция Страница 371 от 434

Page 372: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Методът ShowDialog

Методът ShowDialog казва на диалоговия прозорец да стане видим. Той не връща стойност, докато не бъде прекратен диалоговият прозорец.

ShowDialog е методът, който трябва да използвате, за да извикате модален диалогов прозорец. По времето, докато е показан модален диалогов прозорец, не можете да превключвате обратно в главната форма на програмата. Ето какво означава да е модален. Докато е визуализиран модалният диалогов прозорец, формата на приложението не може да приема никакво въвеждане от клавиатурата или мишката.

Двата бутона на диалоговия прозорец притежават обработчици на събитието Click. Щракнете двукратно върху всеки един от тях, за да видите кода, генериран от Visual Basic 2010.

Двата обработчика задават стойност на свойството DialogResult на диалоговия прозорец. Това свойство може да приема една от следните стойности:

СтойностNoneOKCancelAbortRetryIgnoreYesNo

Методът ShowDialog връща същата стойност както свойството DialogResult на диалоговия прозорец, когато е прекратен. Така програмата, която извиква диалоговият прозорец може да провери при какво условие е затворен. Най-общо казано така тя получава информация от диалоговия прозорец, ако DialogResult е OK, или продължава своя път, ако DialogResult е Cancel.

Секция 16 – Стокхолм, Швеция Страница 372 от 434

Page 373: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Приемане и отказване

Стартирайте отново създадената от вас програма. След като покажете диалоговия прозорец, натиснете клавиша Enter. Какво се случва? Диалоговият прозорец се затваря, нали!

Покажете още веднъж диалоговия прозорец и след това натиснете клавиша Esc. Диалоговият прозорец се затваря отново.

А сега разгледайте свойствата AcceptButton и CancelButton на диалоговия прозорец. Виждате, че свойството AcceptButton приема като стойност името на бутона OK, а свойството CancelButton – името на бутона Cancel. Това означава, че свойството AcceptButton определя бутона, който трябва да бъде активиран при натискането на клавиша Enter, а свойството CancelButton – бутона, който трябва да бъде активиран при натискането на клавиша Esc.

Секция 16 – Стокхолм, Швеция Страница 373 от 434

Page 374: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Местоположение на екрана

Вероятно сте забелязали, че новозаредените Windows приложения често се появяват в различни местоположения на екрана. Това се случва и с диалоговите прозорци. Диалоговият прозорец по подразбиране се появява подходящо отместен от формата на приложението.

Можете да замените подразбиращото се поведение, управляващо местоположението на форми и диалогови прозорци като използвате свойството StartPosition. То може да приема всяка една от следните стойности:

Стойност ОписаниеManual Позицията на диалоговия прозорец се

определя от стойността на свойството Location.CenterScreen Диалоговият прозорец се позиционира в

центъра на екрана, а размерът му се определя от стойността на свойството Size.

WindowsDefaultLocation Диалоговият прозорец се позиционира на подразбиращо се за Windows местоположение, а размерът му се определя от свойството Size.

WindowsDefaultBounds Диалоговият прозорец се позиционира се позиционира на подразбиращо се за Windows местоположение и има подразбиращ се за Windows размер.

CenterParent Диалоговият прозорец се позиционира в центъра на формата, от която се извиква.

Подразбиращата се стойност е WindowsDefaultLocation, което означава, че Windows позиционира диалоговия прозорец, а вашата програма задава размера му. Ако искате Windows да зададе и размера на диалоговия прозорец вместо вас, задайте стойност WindowsDefaultBounds на свойството StartPosition.

Стойността CenterParent позволява на програмата да позиционира диалоговия прозорец в центъра на формата на програмата без да извършва никакви изчисления. Но това разположение може да не е оптималното. CenterScreen намира приложение при немодалните диалогови прозорци, които понякога се появяват на екрана при зареждане на приложение.

Стойността Manual дава на диалоговият прозорец пълна свобода при задаване на неговата позиция и размер. Най-общо даден диалогов прозорец ще предпочита да използва тази стойност, за да позиционира себе си спрямо формата, която го извиква.

Секция 16 – Стокхолм, Швеция Страница 374 от 434

Page 375: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Прозорецът About

Един често срещан диалогов прозорец, който може да бъде открит в почти всички приложения, се нарича “About”. Той може да бъде просто бележка с името на автора, създал програмата или сложен екран на системните ресурси и вероятно телефонен номер или уеб сайт за техническа поддръжка.

За да създадете такъв прозорец, следвайте стъпките по-долу.

1. Отворете създаденото вече от вас приложение и поставете още един бутон на формата.

2. От менюто Project на Visual Studio 2010 изберете командата Add Component.

Секция 16 – Стокхолм, Швеция Страница 375 от 434

Page 376: CodeRulesBook2010 (Светът на програмирането – пътешествие)

3. В появилия се прозорец със заглавие Add New Item изберете шаблона About Box и натиснете бутона Add.

4. Ще се създаде нов диалогов прозорец с бутон Ok и полета, които можете да попълните с информация за вас. Върнете се отново при главната форма и щракнете два пъти върху новия бутон. В обработчика на събитието Click въведете следния код:

AboutBox1.ShowDialog()

5. Изградете и стартирайте програмата.

Какво се случва, когато натиснете новия бутон на формата?

Секция 16 – Стокхолм, Швеция Страница 376 от 434

Page 377: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Стандартни диалогови прозорци

Една от основните цели на Windows винаги е била да предлага стандартизиран потребителски интерфейс. Ето защо съществуват стандартни диалогови прозорци, които можете да използвате наготово и които позволяват отваряне и затваряне на файлове, избор на цветове и шрифтове и настройка на печата.

В тази секция ще ви запозная с диалоговите прозорци за избор на шрифт и цвят. Да започваме!

Секция 16 – Стокхолм, Швеция Страница 377 от 434

Page 378: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Диалог за избор на шрифт

Стандартният диалогов прозорец FontDialog позволява избор както на шрифт, така и на цвят. Избраните шрифт и цвят са достъпни посредством свойствата му Font и Color. Можете да задавате настройки на диалоговия прозорец като използвате свойствата от таблицата по-долу:

Свойство Описание По подразбиранеShowEffects Показва или скрива опцията за избор на

подчертан или зачертан шрифт.True

ShowColor Показва или скрива опцията за избор на цвят.

False

ShowApply Показва или скрива бутон Apply. FalseShowHelp Показва или скрива бутон Help. False

Създаването и извикването на диалогов прозорец за избор на шрифт е лесно. Достатъчно е да изтеглите компонента FontDialog от прозореца Toolbox и да добавите само един ред код в обработчика на събитието, при възникването на което ще се появява прозорецът:

FontDialog1.ShowDialog()

Преди извикването на метода ShowDialog можете да настроите описаните в таблицата свойства. Прозорецът по-долу е със зададена стойност True на свойствата ShowColor и ShowApply.

Секция 16 – Стокхолм, Швеция Страница 378 от 434

Page 379: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Диалог за избор на цвят

Стандартният диалогов прозорец ColorDialog позволява избор на цвят, който е достъпен посредством свойството Color. В таблицата по-долу са описани някои от по-съществените свойства на този прозорец.

Свойство Описание По подразбиранеFullOpen Показва или скрива опцията за

създаването на потребителски цветове при извикването на прозореца.

False

AllowFullOpen Позволява или забранява възможността за създаването на потребителски цветове.

True

SolidColorOnly Позволява или забранява възможността за избор само на чисти цветове.

False

AnyColor Позволява или забранява показването на всички цветове от множеството на основните цветове.

False

ShowHelp Показва или скрива бутон Help. False

Секция 16 – Стокхолм, Швеция Страница 379 от 434

Page 380: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Създаването и извикването на диалогов прозорец за избор на цвят е аналогичен. Изтеглете компонента ColorDialog от прозореца Toolbox и добавете следния ред с код в обработчика на събитието, при възникването на което ще се появява прозорецът:

Диалоговият прозорец, който виждате е с настройките си по подрабиране.

Секция 16 – Стокхолм, Швеция Страница 380 от 434

Page 381: CodeRulesBook2010 (Светът на програмирането – пътешествие)

16 Пробвайте 01 Избор на шрифт

Ето и вашата първа задача.

Декларирайте две глобални променливи MyFont и MyBrush съответно за шрифт и четка като им зададете начални стойности.

В обработчика на събитието Paint изпишете текст с метода DrawString като използвате за аргументи променливите MyFont и MyBrush.

Поставете бутон на формата. Създайте диалогов прозорец за избор на шрифт. В обработчика на неговото събитието Click използвайте върнатата от метода ShowDialog стойност, за да определите дали потребителят е потвърдил или отказал избора на шрифт. В случай, че е потвърдил актуализирайте променливите MyFont и MyBrush със стойностите на свойствата Font и Color на диалоговия прозорец. Извикайте метода Invalidate, за да предизвикате извикване на обработчика на събитието Paint, при което текста ще се изпише с новите шрифт и цвят.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 16 – Стокхолм, Швеция Страница 381 от 434

Page 382: CodeRulesBook2010 (Светът на програмирането – пътешествие)

16 Пробвайте 02 Избор на цвят

Вече сме в Стокхолм! Сигурен съм, че се забавлявахте. Нека да направим останалите задачи, които са на джобния компютър, след което да решим теста, за да ни перфорират контролната карта.

Създайте форма подобна на следната:

Декларирайте две глобални променливи MyPen и MyBrush съответно за писалка и четка като им зададете начални стойности.

В обработчика на събитието Paint изрисувайте правоъгълник, елипса и пай със създадените писалка и четка.

Създайте диалогов прозорец за избор на цвят. В обработчика на събитието Click на двата бутона отново използвайте върнатата от метода ShowDialog стойност, за да определите дали потребителят е направил или отказал избора на цвят.

В обработчика на събитието Click на единия бутон актуализирайте стойността на свойството Color на четката със стойността на свойството Color на диалоговия прозорец за избор на цвят.

В обработчика на събитието Click на другия бутон актуализирайте стойността на свойството Color на писалката със стойността на свойството Color на диалоговия прозорец за избор на цвят.

Секция 16 – Стокхолм, Швеция Страница 382 от 434

Page 383: CodeRulesBook2010 (Светът на програмирането – пътешествие)

И в двата обработчика направете проверка за това кой от радио-бутоните е избран и в зависимост от това създайте променлива от тип Rectangle като я инициализирате с обграждащия правоъгълник на съответната фигура.

Например ако е избран радио-бутона със заглавие “Правоъгълник”, а правоъгълника се изрисува на позиция (10,10) с размер (100,100), то вашата променлива ще бъде декларирана така:

Dim Rect As New Rectangle(10, 10, 100, 100)

След това подайте променливата Rect като аргумент на метода Invalidate.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 16 – Стокхолм, Швеция Страница 383 от 434

Page 384: CodeRulesBook2010 (Светът на програмирането – пътешествие)

16 Можете ли? Рисуване с диалогови прозорци

Време е за поредното предизвикателство.

Създайте форма подобна на показаната по-долу:

Декларирайте шест глобални променливи като използвате следната таблица:

Променлива Тип Предназначениеx Integer Задава позиция по x на фигурата.y Integer Задава позиция по y на фигурата.FigureWidth Integer Задава ширина на фигурата.FigureHeight Integer Задава височина на фигурата.Brush SolidBrush Задава четка за запълване на фигурата.Pen Pen Задава писалка за контура на фигурата.

В обработчика на събитието Paint изрисувайте фигурата.

Създайте диалогов прозорец, който изглежда така:

Секция 16 – Стокхолм, Швеция Страница 384 от 434

Page 385: CodeRulesBook2010 (Светът на програмирането – пътешествие)

В обработчика на събитието Click на единия бутон прехвърлете стойностите от глобалните променливи (с изключение на Brush) към текстовите полета на диалоговия прозорец. Не забравяйте, че стойността, която се въвежда в текстовото поле на диалоговия прозорец за ширината на писалката съответства на свойството Width на писалката Pen. След това покажете диалоговия прозорец с метода ShowDialog и ако потребителят е затворил прозореца с бутона OK, прехвърлете стойностите на текстовите полета към глобалните променливи. Накрая извикайте метода Invalidate.

Създайте диалогов прозорец за избор на цвят. В обработчика на събитието Click на другия бутон използвайте върнатата от метода ShowDialog стойност, за да определите дали потребителят е направил или отказал избора на цвят. Използвайте стойността на свойството Color на диалоговия прозорец, за да зададете стойност на свойството Color на четката. Извикайте метода Invalidate.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 16 – Стокхолм, Швеция Страница 385 от 434

Page 386: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 16 – Стокхолм, Швеция Страница 386 от 434

Page 387: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 17 – Осло, Норвегия Страница 387 от 434

Page 388: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Менюта

Осло, Норвегия

Спомняте ли си онзи прекрасен ресторант в Казабланка. Менюто беше доста екзотично! Като заговорихме за меню се сетих, че все още не съм ви разказал за менютата във Visual Basic .NET. Точно това мисля да направя по пътя за Осло, Норвегия.

Менюто е централната точка на повечето традиционни приложения в Microsoft Windows. Разположено точно под заглавната лента на формата менютата съдържат списъци на всичко, което може да прави програмата – от прости операции, като отрязване и вмъкване, до сложни задачи, като проверка на правописа. Дори ако дадено приложение поддържа голям брой функционални клавиши, тези клавиши в основни линии дублират меню-елементите.

Секция 17 – Осло, Норвегия Страница 388 от 434

Полезен съвет

Изяснете на учениците си понятието функционален клавиш. Например F1 в повечето приложения служи за показване на помощна информация.

Page 389: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Меню и меню елементи

Менютата на много Windows приложения изглеждат по един и същ начин. Тази еднотипност е важен аспект на потребителския интерфейс. Потребителите изучават нова програма по-бързо, ако менюто работи подобно на менютата на други програми в Windows. Когато проектирате дизайна на менютата на вашите програми, трябва да разгледате съществуващите Windows приложения, за да ги използвате като примери за създаване на структура и съдържание.

Visual Studio .NET включва дизайнер на меню (Menu Designer), който ви дава възможност да изграждате йерархията на менюто на ваша програма. Дизайнерът на менюта е изключително лесен за използване и е подходящ за създаване на прости менюта.

Менюто, разположено между заглавната лента на форма и клиентската област, се означава като главно меню на формата. Много приложения поддържат също контекстни менюта – менюта, които се показват в позицията на курсора на мишката, когато щракнете с десния й бутон. Главното меню се асоциира с форма, докато контекстното меню обикновено се асоциира с конкретен контрол.

Менюто – и главното, и контекстното – съдържа меню-елементи. Меню-елементът най-често се отнася към дума или къса фраза, като File, Open, Save, Save As, Edit, Cut, Copy или Paste.

Сигурно сте забелязали, че меню-елементите се различават един от друг. Някои са разположени във видимата част на главното меню като File и Edit, а други като Open, Save, Save As, Cut, Copy и Paste не са. Елементите, които виждате по дължината на видимата област на главното меню, са известни като елементи от най-високо ниво. Тяхното селектиране води до показване на правоъгълна област, наречена падащо, дъщерно меню или подменю.

Секция 17 – Осло, Норвегия Страница 389 от 434

Полезен съвет

Клиентската област включва тази част от формата, върху която можете да поставяте потребителски контроли. В нея не се включват заглавната лента, менюто и лентата с бутони (Toolbar) и лентата на състоянието (Statusbar).

Page 390: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Вашето първо меню

Вече знаем достатъчно, за да създадем нашето първо меню.

1. Създайте нов проект с Visual Studio 2010. Намерете секцията Menus & Toolbars в прозореца Toolbox и изберете контрола MenuStrip.

2. В горната част на вашата форма ще се появи меню-лента. Щракнете върху текста “Type Here” и въведете заглавие на подменю.

Секция 17 – Осло, Норвегия Страница 390 от 434

Page 391: CodeRulesBook2010 (Светът на програмирането – пътешествие)

3. Въведете три елемента на подменюто. Виждате, че всеки елемент може да стане заглавие на друго подменю.

Секция 17 – Осло, Норвегия Страница 391 от 434

Page 392: CodeRulesBook2010 (Светът на програмирането – пътешествие)

4. В дясно от създаденото подменю създайте още едно подменю с име “Редактиране” и елементи “Изрежи”, “Копирай” и “Постави”.

5. Щракнете двукратно върху всеки един от елементите на двете подменюта, за да създадете обработчици на събитието Click за тях. В обработчиците добавете код, който извежда съобщение с името на избрания меню-елемент.

6. Изградете и стартирайте приложението.

Лесно беше, нали. Представете си колко много неща можете да направите с менюта вместо да заемате място върху формата с поставяне на бутони.

Секция 17 – Осло, Норвегия Страница 392 от 434

Page 393: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Свойства и събития на меню-елемент

Свойствата, свързани с текста на меню-елемента и с клавишната комбинация за бърз достъп са изброени в следната таблица:

Свойство ОписаниеText Заглавие на меню-елемента.Mnemonic Знак, който следва след амперсанда в свойството

текст.Shortcut Клавишна комбинация за бърз достъп.ShowShortcut Забранява или разрешава показването на

клавишна комбинация.

Секция 17 – Осло, Норвегия Страница 393 от 434

Page 394: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Следващият списък показва повечето от свойствата, чийто тип е булев.

Свойство ОписаниеVisible Забранява или разрешава появата на меню-

елемента в менюто.Enabled Забранява или разрешава меню-елемента за

достъп.DefaultItem Определя дали меню-елемента е подразбиращ

се за менюто.Break Предизвиква поставяне на меню-елемента в нова

колона.BarBreak Предизвиква поставяне на меню-елемента в нова

колона и поставя вертикална линия между колоните.

Задаването на стойност false на свойството Visible забранява появяването на меню-елемента в менюто, но остава да действа клавишната комбинация, ако има такава.

Свойството Enabled се използва със стойност false, за да се изключат меню-елементи, които не са необходими в момента. Когато даден елемент е изключен, текстът се показва в блед шрифт, показващ, че в момента елементът е недостъпен. В този случай не можете да предизвикате изпълнение на кода в обработчика на събитието Click на меню-елемента. Клавишната комбинация е деактивирана.

Когато зададете стойност true на свойството DefaultItem, меню-елемента се показва с удебелен шрифт. За главното меню на програмата свойството DefaultItem има смисъл само за елементите от подменюта. Когато щракнете двукратно върху елемента, който извиква подменюто, се активира подразбиращият се елемент.

Задаването на стойност true на свойството Break предизвиква показване на меню-елемента в нова колона. Задаването на стойност true на свойството BarBreak има същия ефект като Break, но начертава и

Секция 17 – Осло, Норвегия Страница 394 от 434

Полезен съвет

Дайте пример на учениците за клавишна комбинация и нейното приложение. Например, Alt+F предизвиква показването на подменюто File.

Page 395: CodeRulesBook2010 (Светът на програмирането – пътешествие)

вертикална линия между колоните. Макар, че това не е често срещано, можете да използвате свойствата Break и BarBreak с елементи от най-горното ниво на главното меню. И двете свойства имат един и същ ефект на показване на меню-елемента в нов ред.

Таблицата по-долу показва събитията на меню-елементите, за които можете да създавате обработчици.

Събитие ОписаниеClick Възниква при щракване върху меню-елемента

с мишката или активиране на клавишна комбинация.

Popup Възниква при показване на подменю.Select Възниква при поставяне на курсора на

мишката върху меню-елемент.

Събитието Popup се обработва най-вече за елементите от най-високо ниво, които показват подменюта. Обработчика на това събитие може да се използва за включване или изключване на определени елементи от подменюто в зависимост от нуждите на програмата ви.

Събитието Select настъпва, когато курсорът на мишката преминава върху меню-елемента или когато потребителят натиска клавишите със стрелки, за да преминава между отделните меню-елементи. Избраният меню-елемент обикновено се показва в различен цвят. Както може би знаете, някои приложения използват лентата на състоянието, за да покажат кратко текстово описание на всеки меню-елемент, докато е избран.

Секция 17 – Осло, Норвегия Страница 395 от 434

Page 396: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Отбелязване на елементи

Меню-елементите, които представят булеви възможности за избор, могат да бъдат отбелязани или неотбелязани точно както контрола CheckBox. Маркерът за отметка се управлява със свойствата Checked и CheckOnClick. Ако желаете да покажете маркер, задайте стойност true на свойството Checked. Маркерът ще се скрива и показва при всяко щракване върху меню-елемента само, ако свойството CheckOnClick има стойност true.

Секция 17 – Осло, Норвегия Страница 396 от 434

Page 397: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Контекстни менюта

В някои случаи контекстните менюта са по-прости от главните менюта, най-вече защото са малки, а понякога съдържат само списък от меню-елементи без никакви подменюта.

Създаването на контекстно меню преминава през следните стъпки:

1. Отворете проекта, който вече създадохте с Visual Studio 2010. Намерете секцията Menus & Toolbars в прозореца Toolbox и изберете контрола ContextMenuStrip.

2. В горната част на вашата форма под главното меню ще се появи нова меню-лента. Щракнете върху текста “Type Here” и въведете заглавие на елемент.

Секция 17 – Осло, Норвегия Страница 397 от 434

Page 398: CodeRulesBook2010 (Светът на програмирането – пътешествие)

3. Въведете още три елемента със заглавия “Копирай”, “Постави” и “Изтрий”. Виждате, че всеки елемент може да стане заглавие на друго подменю.

4. Щракнете на произволно място върху формата, за да затворите дизайнера на контекстно меню. В прозореца Properties открийте свойството ContextMenuStrip на формата и му задайте стойност ContextMenuStrip1 от падащия списък.

5. Изградете и стартирайте приложението.

6. Щракнете с десния бутон на мишката върху формата, за да покажете създаденото от вас контекстно меню.

Секция 17 – Осло, Норвегия Страница 398 от 434

Page 399: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Колекцията от меню-елементи

Меню-елементите от дадено подменю формират т. нар. Колекция. Тя представлява списък от меню-елементи. Можете да видите колекцията с елементи за подменютата от нашия първи пример като първо изберете елемент от най-високо ниво и след това щракнете върху свойството DropDownItems в прозореца Properties. Ще се появи прозорец като този:

Виждате, че списъкът Members показва всички елементи на подменюто. В дясната половина на прозореца се показват свойствата на избрания меню-елемент.

Можете да добавите нов елемент от най-горно ниво като използвате следния ред с код:

MenuStrip1.Items.Add("Нов елемент")

Методът Add аргумент от тип string, който ще се използва за заглавие на новия меню-елемент.

За да премахнете елемент от най-горно ниво използвайте метода RemoveAt по следния начин:

MenuStrip1.Items.RemoveAt(0)

Секция 17 – Осло, Норвегия Страница 399 от 434

Page 400: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Този метод получава като аргумент индекс на меню-елемент. Индексите, както се досещате, започват от 0.

За да премахнете всички елементи от колекцията на менюто, използвайте метода Clear по следния начин:

MenuStrip1.Items.Clear()

Методът Count можете да използвате, за да получите броя на меню-елементите от най-горно ниво. Примерът по-долу показва прозорец с броя на елементите в менюто на форма:

MessageBox.Show(MenuStrip1.Items.Count.ToString)

Секция 17 – Осло, Норвегия Страница 400 от 434

Page 401: CodeRulesBook2010 (Светът на програмирането – пътешествие)

17 Пробвайте 01 Магазин

Наближаваме Осло и е време да решите вашата първа задача.

По пътя спряхме в прекрасен магазин за дрехи и ми хрумна идея за програма, която представя дрехите в магазина.

Създайте форма с меню, подобна на следната:

Създайте четири диалогови прозореца.

Озаглавете прозорците в съответствие с меню-елементите.

Във всеки един от тях поставете по четири контрола PictureBox като използвате прозореца Toolbox. Задайте стойност StretchImage на свойството SizeMode за всички контроли PictureBox.

Задайте размер 80x120 на всички контроли PictureBox.

За да добавите картинка към даден PictureBox контрол, използвайте свойството Image. Когато щракнете върху него ще се появи следния прозорец:

Секция 17 – Осло, Норвегия Страница 401 от 434

Page 402: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Натиснете бутона Import, за да покажете прозорец за избор на файл. Отидете до мястото където сте разархивирали папката с инструкции и изберете подходяща картинка от съответната поддиректория. Разполагате с четири поддиректории (Jeans, Pants, Sweaters и Blouses) за четирите категории дрехи.

Създайте обработчик на събитието Click за всеки един от меню-елементите. В обработчика добавете код, който извиква съответния диалогов прозорец.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 17 – Осло, Норвегия Страница 402 от 434

Page 403: CodeRulesBook2010 (Светът на програмирането – пътешествие)

17 Пробвайте 02 Текстов редактор

Получих още една задача джобния си компютър.

Създайте форма, подобна на следната:

Формата трябва да притежава две текстови полета и две контекстни менюта с меню-елементи като тези по-горе.

Асоциирайте едното контекстно меню към първото текстово поле, а другото контекстно меню – към второто текстово поле. Използвайте свойството ContextMenuStrip на текстовите полета.

Задайте стойност True на свойството Multiline на двете текстови полета.

Създайте обработчици на събитието Click на меню-елементите. Във всеки един обработчик добавете код, който извиква един от методите Cut, Paste, Copy или SelectAll на съответното текстово поле. Например, в обработчика на събитието Click на меню-елемента “Изрежи” от контекстното меню на първото текстово поле, трябва да добавите следния ред с код:

TextBox1.Cut()

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Секция 17 – Осло, Норвегия Страница 403 от 434

Page 404: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Ако програмата работи правилно, я покажете на вашия учител.

Продължение/Обобщение

Добавете още елементи към контекстните менюта, с помощта на които да извикате други методи на текстовите полета.

Секция 17 – Осло, Норвегия Страница 404 от 434

Page 405: CodeRulesBook2010 (Светът на програмирането – пътешествие)

17 Можете ли? Графичен редактор

А сега ще направим нещо по-сложно.

Декларирайте четири променливи x, y, Brush и Pen, съответно за позицията по координатите x и y на фигурите, и за четката и писалката, които ще се използват при изчертаването на фигурите.

Добавете меню със следните подменюта: Файл

Изход – служи за изход от програмата; Фигура

Правоъгълник – служи за извикване на метода Invalidate; Елипса – служи за извикване на метода Invalidate; Пай – служи за извикване на метода Invalidate;

Настройки Дебелина на писалка – притежава подменю със заглавия на елементите от 1 до 10; всеки елемент задава съответна стойност за дебелина на използваната писалка и извиква метода Invalidate, за да предизвика прерисуване на изчертаваната фигура с новоизбраната стойност за дебелина; Цвят на запълване – служи за извикване на диалогов прозорец за избор на цвят, с който се променя цвета на четката; Цвят на контура – служи за извикване на диалогов прозорец за избор на цвят, с който се променя цвета на писалката; Позиция – служи за извикване на диалогов прозорец за задаване на стойности за променливите x и y;

За програмата – служи за извикване на диалогов прозорец About Box с описателна информация за възможностите на програмата

Създайте обработчик на събитието OnPaint. В зависимост от избрания елемент от подменюто Фигура извикайте методите DrawRectangle и FillRectangle, DrawEllipse и FillEllipse, или DrawPie и FillPie.

Секция 17 – Осло, Норвегия Страница 405 от 434

Page 406: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Продължение/Обобщение

При избор на елемент от подменюто за определяне на дебелината на писалката добавете код, който да маркира избрания елемент и премахва маркера от останалите неизбрани елементи. Използвайте свойството Checked, като му задавате стойност True за избран елемент и стойност False – за неизбран.

Секция 17 – Осло, Норвегия Страница 406 от 434

Page 407: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 17 – Осло, Норвегия Страница 407 от 434

Page 408: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 18 – Лондон, Великобритания Страница 408 от 434

Page 409: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Дървовиден и списъчен изглед

Лондон, Великобритания

Можете ли да повярвате? Ние сме на последния етап от пътуването ни! Само още една дестинация и нашето пътешествие ще бъде завършено. Сигурен съм, че ви беше забавно! За Клиф и мен беше удоволствие да ви научим на това, което знаем за Visual Basic и Visual Studio 2010 ! Надявам се, че скоро ще се срещнем на друго пътешествие. Вече сте готови да започнете курс за по-напреднали!

По пътя за Лондон ще ви запозная с едни по-специални контроли, наречени дървовиден и списъчен изглед. Със сигурност знам, че сте ги виждали, а сега ще ви науча как да ги използвате.

Да вървим!

Секция 18 – Лондон, Великобритания Страница 409 от 434

Page 410: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Windows Explorer

Приемам, че сте се запознали с програмата Windows Explorer. Клиентската област на Windows Explorer е заета предимно от два големи и сложни контрола. Контролът tree-view (дървовиден изглед) вляво показва йерархичен списък на дисковите устройства и директориите на потребителя. Контролът list-view (списъчен изглед) вдясно показва поддиректориите и файловете в избраната директория по един от четири начина: обикновен списък, таблица с множество колони, имена с малки икони и имена с големи икони.

В тази секция ще разгледаме контролите за дървовиден и списъчен изглед. Големите възможности и гъвкавостта на тези контроли прави невъзможно изчерпателното им представяне. Но със сигурност ще обхвана достатъчно като за начало.

Секция 18 – Лондон, Великобритания Страница 410 от 434

Полезен съвет

Накарайте учениците си да разгледат програмата Windows Explorer и да проучат нейните възможности.

Page 411: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Дървовидни изгледи

Дървовидният изглед, както споменах, се използва за показване на списък от дискови устройства и директории. Можете, обаче да използвате този контрол за показване на произволна йерархична информация. В йерархията възлите са във взаимоотношения родител-наследник. Visual Studio .NET използва дървовиден изглед за показване на проекти и файлове.

Основният елемент в дървовидния изглед се нарича възел (Node). Възлите на един дървовиден изглед образуват т.нар. колекция. Можете да добавяте нови възли към тази колекция с помощта на метода Add по следния начин:

TreeView1.Nodes.Add("Нов възел")

В случая ще се добави възел от най-високо ниво. Като аргумент на метода се подав името на новия възел. Ако желаете да добавите възел, който да е наследник на вече съществуващ възел, използвайте код, подобен на този:

TreeView1.Nodes(0).Nodes.Add("Нов възел")

В този случай ще се добави възел-наследник към възел с индекс 0. Както се досещате, номерирането на възлите в списъка започва от 0.

Съществува и метод за премахване на възел с име RemoveAt. Този метод получава като аргумент индекс на възел, който трябва да бъде изтрит. Кодът, който следва премахва възел с индекс 0, който е от най-високо ниво.

TreeView1.Nodes.RemoveAt(0)

Премахването на даден възел ще доведе до премахване и на неговите наследници от дървото. Ако желаете да премахнете възел-наследник използвайте следния код:

TreeView1.Nodes(0).Nodes.RemoveAt(0)

Можете да влагате произволно възлите в дървото. Ако желаете да премахнете всички възли е достатъчно да извикате метода Clear ето така:

TreeView1.Nodes.Clear()

Ако желаете да премахнете всички възли-наследници на даден възел повикването на метода Clear ще изглежда по следния начин:

TreeView1.Nodes(0).Nodes.Clear()

Секция 18 – Лондон, Великобритания Страница 411 от 434

Page 412: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Този код ще премахне всичко възли наследници на възел с индекс 0, който е от най-горно ниво в дървото.

Секция 18 – Лондон, Великобритания Страница 412 от 434

Page 413: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Дървовиден изглед стъпка по стъпка

Когато използвате дървовиден изглед, автоматично пред всеки възел се добавя знак “+”, ако има наследници. Когато щракнете възрху него възлите наследници се показват отместени навътре, а знакът “+” се замена с “-”. Това се дължи на стойността true за свойството ShowPlusMinus.

Дървовидния изглед притежава още две свойства – ShowLines и ShowRootLines, които при зададена стойност true предизвикват свързване на възлите с линии. Свойството ShowRootLines се отнася за възлите от най-високо ниво, които често се наричат коренови, а свойството ShowLines – за останалите възли.

Дървовидните изгледи често притежават малки картинки вляво от възлите. Те могат да се променят при разширяването на възела, когато се щракне върху знака “+”. Например, Windows Explorer показва затворена папка за възел на затворена директория и отворена папка за възел на разширена директория.

За да добавте картинки, трябва да използвате контрол с име ImageList. Той представлява списък с изображения. За да стане всичко по-ясно, ще проследим необходимите за това действия стъпка по стъпка.

Секция 18 – Лондон, Великобритания Страница 413 от 434

Page 414: CodeRulesBook2010 (Светът на програмирането – пътешествие)

1. Създайте нов проект с Visual Studio 2010 и от прозореца Toolbox добавете контрол TreeView.

Секция 18 – Лондон, Великобритания Страница 414 от 434

Page 415: CodeRulesBook2010 (Светът на програмирането – пътешествие)

2. Щракнете върху свойството Nodes на TreeView контрола в прозореца Properties. Ще се появи диалогов прозорец с име TreeNode Editor.

3. Натиснете бутона Add Root, за да добавите възел от най-високо ниво.

4. Можете да смените заглавието му от стойството Text, което е достъпно в дясната част на прозореца TreeNode Editor.

5. Щракнете възху добавения възел и натиснете бутона Add Child.

6. Променете заглавието на новия възел по аналогичен на т.4 начин.

Секция 18 – Лондон, Великобритания Страница 415 от 434

Page 416: CodeRulesBook2010 (Светът на програмирането – пътешествие)

7. Добавете по същия начин още възли-наследници.

8. Повторете стъпките от 3 до 7 няколко пъти.

9. От прозореца Toolbox –> Compenents добавете ImageList контрол.

10.Щракнете върху свойството Images на ImageList контрола е прозореца Properties. Ще се появи диалогов прозорец с име Image Collection Editor.

Секция 18 – Лондон, Великобритания Страница 416 от 434

Page 417: CodeRulesBook2010 (Светът на програмирането – пътешествие)

11.Натиснете бутона Add, за да добавите картинка. Използвайте диалоговия прозорец Open, който ще се появи за да изберете подходяща картинка.

12.Добавете толкова картинки, колкото са ви необходими и натиснете бутона OK.

13.Щракнете върху TreeView контрола и след това открийте свойството му ImageList в прозореца Properties. Задайте му стойност ImageList1.

Секция 18 – Лондон, Великобритания Страница 417 от 434

Полезен съвет

Ако учениците ви не могат да открият картинки на компютрите си, ги насочете към папките с инструкциите за решаване на задачи.

Page 418: CodeRulesBook2010 (Светът на програмирането – пътешествие)

14.Изградете и стартирайте приложението.

Забелязахте ли какво се случи, когато зададохте стойност за свойството ImageList на TreeView контрола?

Разширете възлите от дървото със знак “+” пред тях. Както виждате пред всеки един от възлите вече има картинка. Картинката обаче е една и съща за всички възли. За да я промените отново покажете прозореца TreeNode Editor. Селектирайте възел чиято картинка искате да промените. След това в дясната част на прозореца TreeNode Editor открийте свойствата ImageIndex и Selected ImageIndex. Първото свойство задава картинката, която ще се показва пред възела без да е избран, а второто – когато е избран.

Беше забавно и лесно. Нали!

Секция 18 – Лондон, Великобритания Страница 418 от 434

Page 419: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Списъчни изгледи

В най-разширената си форма контролът ListView показва текстова информация в редове и колони със заглавия на колоните. Първата колона с информация съдържа елементите, а другите колони – поделементите, прикрепени към всеки елемент. Например в Windows Explorer имато на файла е елемент, а размера на файла, датата на модификация и атрибутите са поделементи. Контролът ListView може да показва и обикновен списък само от елементите (без поделементите), елементите в множество колони с малки икони и елементите в множество колони с големи икони.

Елементите на списъчния изглед формират колекция, представена от свойството му Items. Подобно на дървовидния изглед, списъчният изглед притежава свойства SmallImageList и LargeImageList, с помощта на които можете да задавате картинки за елементите.

За да настроите вида на списъчния изглед използвайте свойството му View. То може да приема една от следните стойности:

Стойност ОписаниеLargeIcon Всеки елемент се показва с голяма картинка, която се взима

от свойството LargeImageList и заглавие.Details Всеки елемент се показва на отделен ред с детайлна

информация, подредена в колони. Колоните имат свои заглавия.

SmallIcon Всеки елемент се показва с малка картинка, която се взима от свойството SmallImageList и заглавие.

List Всеки елемент се показва с малка картинка, която се взима от свойството SmallImageList и заглавие. Елементите се разполагат в колони без заглавия.

Tile Всеки елемент се показва с голяма картинка, заглавие и детайлна информация вдясно от картинката.

Картинките в SmallImageList и LargeImageList трябва да съвпадат. Например, третата картинка от LargeImageList трябва да е по-голяма версия на третата картинка от SmallImageList.

Заглавията на колоните в списъчния изглед също формират колекция, представена от свойството му Columns. Някои от свойствата на колоните са описани в таблицата по-долу:

Свойство ОписаниеText Задава текста, който ще се ползва за заглавие на колоната.Width Задава ширина на колоната.TextAlign Задава подравняване на текста, който ще се ползва за

Секция 18 – Лондон, Великобритания Страница 419 от 434

Page 420: CodeRulesBook2010 (Светът на програмирането – пътешествие)

заглавие на колоната.

Добавянето на нов елемент ктм списъчния изглед става с помощта на метода Add ето така:

ListView1.Items.Add("Нов елемент")

Ако желаете да добавите поделемент използваайте следния код:

ListView1.Items(1).SubItems.Add("Нов поделемент")

В този случай ще се добави поделемент към елемент с индекс 1. И тук номерацията на елементите започва от 0.

Премахването на елемент става с метода RemoveAt по следния начин:

ListView1.Items.RemoveAt(0)

Този метод получава като аргумент индекс на елемент, който трябва да бъде изтрит. Ако желаете да премахнете всички елементи от списъка е достатъчно да извикате метода Clear ето така:

ListView1.Items.Clear()

Някои от свойствата на елементите на списъчния изглед са описани в таблицата по-долу:

Свойство ОписаниеText Задава текста, който ще се ползва за заглавие на елемента.ImageIndex Задава номера на картинката, която ще се показва пред

елемента.SubItems Задава поделементите на даден елемент.ForeColor Задава цвета на текста, който ще се ползва за заглавие на

елемента.BackColor Задава цвета на фона на елемента.

Секция 18 – Лондон, Великобритания Страница 420 от 434

Page 421: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Списъчен изглед стъпка по стъпка

Ето и необходимите действия за създаване на списъчен изглед в средата на Visual Studio 2010.

1. Създайте нов проект с Visual Studio 2010 и от прозореца Toolbox добавете контрол ListView.

2. Щракнете върху свойството Items на ListView контрола в прозореца Properties. Ще се появи диалогов прозорец с име ListViewItem Collection Editor.

3. Натиснете бутона Add, за да добавите нов елемент.

Секция 18 – Лондон, Великобритания Страница 421 от 434

Page 422: CodeRulesBook2010 (Светът на програмирането – пътешествие)

4. Задайте заглавие на елемента от свойството Text, което е достъпно в дясната част на прозореца ListViewItem Collection Editor.

5. Щракнете върху свойството SubItems. Ще се появи диалогов прозорец с име ListViewSubItem Collection Editor.

6. Натиснете бутона Add, за да добавите нов поделемент.

7. Задайте заглавие на поделемента от свойството Text от дясната част на прозореца ListViewSubItem Collection Editor.

Секция 18 – Лондон, Великобритания Страница 422 от 434

Page 423: CodeRulesBook2010 (Светът на програмирането – пътешествие)

8. Повторете стъпка 6 и стъпка 7 няколко пъти и натиснете бутона OK.

9. Повторете стъпките от 3 до 8 също няколко пъти и натиснете бутона OK.

10.Щракнете върху свойството Columns на ListView контрола в прозореца Properties. Ще се появи диалогов прозорец с име ColumnHeader Collection Editor.

11.Натиснете бутона Add, за да добавите новo заглавие на колона.

Секция 18 – Лондон, Великобритания Страница 423 от 434

Page 424: CodeRulesBook2010 (Светът на програмирането – пътешествие)

12.Задайте стойност за свойството Text на колоната.

13.Повторете стъпка 11 и стъпка 12 в зависимост от броя на поделементите, които сте задали на главните елементи и натиснете бутона OK.

14.Задайте стойност Details на свойството View на ListView контрола.

15.Изградете и стартирайте приложението.

Добавянето на картинки пред елементите на ListView контрола става по начина, описан за TreeView контрола. За да не ви отегчавам ще ви оставя сами да разучите как става това.

Секция 18 – Лондон, Великобритания Страница 424 от 434

Page 425: CodeRulesBook2010 (Светът на програмирането – пътешествие)

18 Пробвайте 01 Родословно дърво

Време е да проверим знанията ви.

Създайте форма с дървовиден изглед, която изглежда по следния начин:

Секция 18 – Лондон, Великобритания Страница 425 от 434

Page 426: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Използвайте бутона “Добавяне на родител”, за да позволите добавяне на прародителите от родословното дърво.

Използвайте бутона “Добавяне на наследник”, за да позволите добавяне на наследник към избран член от родословното дърво.

Името на добавяния член взимайте от текстовото поле.

Използвайте бутона “Премахване на член от рода”, за да позволите премахване на член от родословното дърво заедно с наследниците му.

Използвайте бутона “Премахване на наследник”, за да премахнете всички наследници на избран член от родословното дърво.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 18 – Лондон, Великобритания Страница 426 от 434

Page 427: CodeRulesBook2010 (Светът на програмирането – пътешествие)

18 Пробвайте 02 Списък със задачи

Получих още една задача джобния си компютър.

Създайте форма със списъчен изглед, която изглежда по следния начин:

Задайте стойност Details за свойството View на списъчния изглед и добавете три колони като използвате колекцията Columns от прозореца Properties.

Секция 18 – Лондон, Великобритания Страница 427 от 434

Page 428: CodeRulesBook2010 (Светът на програмирането – пътешествие)

В обработчика на събитието Click на бутона “Редактирай” добавете код, който променя текста на поделементите за селектирания елемент. Използвайте свойството SelectedItems на контрола ListView.

В обработчика на събитието Click на бутона “Добави” добавете код, който добавя нов елемент към списъчния изглед.

В обработчика на събитието Click на бутона “Премахни” добавете код, който премахва селектирания елемент от списъчния изглед. Използвайте метода Remove на колекцията Item.

Не забравяйте да изчистите съдържанието на трите текстови полета при натискането на бутоните “Редактирай” и “Добави”, след като съответно е редактиран или добавен елемент.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 18 – Лондон, Великобритания Страница 428 от 434

Page 429: CodeRulesBook2010 (Светът на програмирането – пътешествие)

18 Можете ли? Компютърен магазин

Ето, че стигнахме до последната задача, която трябва да решите по време на нашето пътешествие.

В папката с инструкциите за изпълнение на задачата имате 10 картинки, които можете да използвате, за да обозначите групите компютърни артикули.

Секция 18 – Лондон, Великобритания Страница 429 от 434

Page 430: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Създайте форма, подобна на следната:

Създайте списък с изображения за дървовидния изглед. Изображенията са с размер 36x36. Той определя стойността, която трябва да зададете за свойството ImageSize на дървовидния изглед. Нека последното изображение в списъка да бъде folder.bmp, а първото – home.bmp.

Добавете елементи към дървовидния изглед както е показано на формата по-горе. За всеки елемент, обозначаващ група артикули, задайте еднаква стойност за свойствата ImageIndex и SelectedImageIndex.

В обработчика на събитието Click на бутона “Добави” добавете код, който добавя нов елемент с два поделемента към избрания възел от дървовидния изглед. Заглавията на елемента и поделементите му вземете от текстовите полета като знаете, че заглавието на елемента е име на артикул, а заглавието на поделементите са съответно описание и цена на артикула. Задайте стойност 9 за свойствата Imageindex и SelectedImageIndex на новия елемент. Задайте стойност

TreeView1.SelectedNode.Index

Секция 18 – Лондон, Великобритания Страница 430 от 434

Page 431: CodeRulesBook2010 (Светът на програмирането – пътешествие)

свойствата ImageIndex и SelectedImageIndex на двата поделемента.

В обработчика на събитието Click на бутона “Редактирай” добавете код, който променя вече добавен и селектиран елемент.

В обработчика на събитието Click на бутона “Изтрий” добавете код, който изтрива селектиран елемент.

Изградете проекта и ако няма грешки изберете опцията Start Debugging от менюто Debug, за да стартирате програмата.

Ако програмата работи правилно, я покажете на вашия учител.

Секция 18 – Лондон, Великобритания Страница 431 от 434

Page 432: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 18 – Лондон, Великобритания Страница 432 от 434

Page 433: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Секция 18 – Лондон, Великобритания Страница 433 от 434

Page 434: CodeRulesBook2010 (Светът на програмирането – пътешествие)

Настоящото учебното помагало "“Светът на програмирането с Visual Basic 2010" е адаптирано от Жаклин Антонова-Генкова и се базира на “Светът на програмирането 2008".

Пътешествие с Visual Studion 2010 Страница 434 от 434