Delphi-Help

Урок 14. Избор (клонове)

  • размер на шрифта намалете размера на шрифта увеличете размера на шрифта
  • Печат

Селекция (разклоняване)

Повечето примери, които бяха разгледани в предишните уроци, бяха програми с линейна структура. Програмите с линейна структура са най-прости и се използват, като правило, за реализиране на обикновени изчисления чрез формули (или други подобни задачи, чиято цел е последователното изпълнение на някои команди). Основната характеристика на линейните алгоритми е, че инструкциите се изпълняват последователно, една след друга.

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

Клоновете (избор) се използват за избор на едно от няколко направления за по-нататъшния ход на програмата. За нашия пример, преди разделяне, ще има избор от две посоки - ако първоначалните данни са верни (т.е. второто число не е 0), тогава разделянето се извършва и резултатът се връща; но ако второто число е 0, тогава разделянето няма да се извърши и вместо това потребителят ще получи съобщение за грешка.

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

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

Условният оператор, наречен IF (на английски "if"), се използва за избор на една от двете посоки на програмния поток. Изборът на последователност от инструкции се извършва по време на изпълнението на програмата, в зависимост от изпълнението на условието.

Общ синтаксис за условен оператор IF:

ТОГАВА - инж. "в такъв случай тогава." По този начин низът е доста преводим на руски: "Ако условието е изпълнено, тогава направете нещо."

Тук условието е израз от логически тип (логическите изрази бяха обсъдени от нас по-рано в урок № 10). Ако изразът е True, т.е. условието е изпълнено, след това последователността от команди, посочени след THEN се изпълнява. Ако условието не е изпълнено, този блок се пропуска. Ако има няколко команди, свързани с условие, тогава те са затворени в НАЧАЛО. КРАЙ:

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

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

ELSE - английски. "в противен случай, в противен случай": "Ако условието е изпълнено, тогава направете нещо, в противен случай направете нещо друго".

По същия начин, ако трябва да бъдат изпълнени множество команди, те са затворени в BEGIN. КРАЙ:

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

Първо, нека създадем интерфейс. Нека поставим във формуляр 2 полетата TEdit за въвеждане на стойностите на съпротивлението (Edit1, Edit2). За да изберете типа на връзката, поставете 2 TRadioButton със съответните етикети (RadioButton1, RadioButton2). Резултатът ще се покаже в TLabel (Label1) и изчисленията ще се извършват чрез натискане на бутона TButton (Button1). Тя трябва да изглежда по следния начин:

условието изпълнено

След това щракнете двукратно върху бутона и напишете манипулатора.

Коментари и обяснения:

1) Като изходни данни има 2 съпротивления - R1 и R2. Полученото съпротивление е R. За трите променливи е посочен реалният тип данни (Real), тъй като стойностите на съпротивлението могат да бъдат дробни числа.

2) Първо, въвеждаме в променливите R1 и R2 числата, въведени в Edit1 и Edit2.

3) След това прилагаме условен оператор, за да разберем кой от двата TRadioButtons е избран. Ако първото е подчертано, тогава прилагаме формулата на серийно съпротивление (сума): R = R1 + R2. Няма смисъл да се проверява дали е избрана втората, тъй като са само 2 от тях - ако първата не е избрана, значи е избрана втората. За паралелно съпротивление формулата е както следва: R = (R1 * R2)/(R1 + R2). По този начин, в зависимост от избрания тип връзка, стойността на променливата R ще бъде изчислена съгласно съответната формула.

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

Забележка: в примерите, показани в този урок, фигурните скоби (") са посочени само за удобство, за да покажат, че нещо трябва да е на определено място в програмния код - променлива, набор от команди и т.н. В кода на реална програма тези скоби не трябва да бъдат!

Оператор за избор

Операторът за избор, наречен CASE, се използва за избор на една от няколко посоки за по-нататъшния ход на програмата. Изборът на последователност от инструкции се извършва по време на изпълнението на програмата, в зависимост от равенството на стойността на променливата на селектора на константата, посочена преди групата инструкции. Променлива от само изброен тип може да се използва като променлива на селектора. Цялото число е изброен тип данни. Друг прост изброен тип данни е типът знаци (Char). Синтаксисът на израза CASE е:

Операторът работи по следния начин: стойността на селекторната променлива се взема и последователно се сравнява с всяка от константите. Ако стойностите са еднакви, тогава инструкциите след тази константа се изпълняват. Ако никоя от константите не съответства на стойността на променливата на селектора, но е посочен блокът else, тогава инструкциите на този блок се изпълняват. Ако блокът else не е посочен, няма да се изпълняват команди.

Имайте предвид, че всяка константа е последвана от двоеточие (":").

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

И двата представени кодови фрагмента ще работят абсолютно еднакво, но във втората версия писането на константи е едновременно по-кратко и по-удобно.

Примерна програма, използваща Select Statement.

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

Интерфейсът е прост: поле за въвеждане (Edit1) и бутон (Button1).

Манипулаторът на бутоните е както следва:

урок

Този пример е съвсем прост и най-вероятно не се нуждае от обяснения.

Заключение

Условното изражение IF и изявлението за избор CASE ви позволяват да създавате клонове в програми, т.е. изпълнява различни действия в зависимост от посоченото състояние. Тяхната разлика един от друг е, че IF се използва за един избор, а CASE се използва за множество. Очевидно е, че тези изрази могат да бъдат вложени един в друг (например IF може да се използва в един от блоковете на инструкция CASE). Когато пишете относително сложна програма, не можете да правите без клонове.