|
ВЗЕМАНЕ НА РЕШЕНИЯ
Разклонени алгоритми Процесът на избор на един от няколко възможни варианта за действие нарича вземане на решение. Какво решение ще вземем обикновено е свързано с това – дали е изпълнено или не някакво условие. Например ако се чудите дали днес да отидете на училище или не, то вероятно ще вземете решение според това дали броят на неизвинените ви отсъствия до момента не надхвърля максималния позволен брой. Подобни условия се наричат логически условия. За представяне на такива условия в езиците за програмиране е въведен споциален тип данни, наричан логически (булев) тип данни. Алгоритми, които включват елементарни действия, съдържащи избор между няколко възможни варианта (т.е. моделиращи процес на вземане на решение) се наричат разклонени алгоритми. Реализацията на разклонените алгоритми в езиците за програмиране се извършва чрез различни оператори за разклонение. В езика за програмиране Java има два такива оператора – условен оператор if...else (за избор между два възможни варианта) и оператор (за избор между произволен брой варианти). Стандартният логически тип, както и операторите за разклонение улесняват в много голяма степен програмирането на разклонени алгоритми. Логически (булев) тип Множеството от стойности на логически тип съдържа само две константи – true и false (съответно истина и лъжа). Логическият тип се декларира със стандартния идентификатор boolean. Например логическите променливи В и Da се декларират по следния начин: boolean B, Da; С логически величини могат да се извършват трите основни логически операции: двуаргументните – логическо умножение (което на Java се записва &&) и логическо събиране (на Java - || ) и едноаргументната – логическо отрицание ( ! – на Java). Операторите за сравнение дават логически резултат, въпреки че се прилагат върху други типове, основавайки се на сравнението на операндите – за равенство(= =), за неравенство (!=), за по-малко (<), за по-голямо (>), за по-голямо или равно (>=), за по-малко или равно (<=). Пр. 1. Логически изрази 1.Ако броят на неизвинените отсъствия, направени до момента от ученика, е Neizv, а максималния допустим брой е MaxNeizv, то логическото условие, от което се определя решението на ученика, ще изглежда така: Neizv < MaxNeizv 2.Ако добавим още едно изискване към горното условие, напричер часът (Chas) да не е повече от 11 преди обяд, то ще получим по-сложен логически израз: (Neizv < MaxNeizv) && (Chas <= 11) За константите true и false е прието, че са подредени по следния начин: false < true, което означава, че и логическите величини може да се сравняват. Логически стойности не могат да се въвеждат чрез read. Условен оператор Един от операторите, който представя вземане на решение в програмата, е условният оператор. Най-простият вариант има вида: if (<условие>) <оператор>; , където условието е израз, водещ към логически резултат. Операторът може да бъде произволен оператор на Java, включително друг оператор if или блок от оператори. Ако е повече от един оператор, то задължително трябва да са заградени във фигурни скоби. Пълната форма на условния оператор е следната: CODE
Където действието е следното: ако е изпълнено логическото условие след if (т.е. има стойност true), то се изпълняват <оператори 1>, ако не (т.е. условието има стойност false)– се изпълняват <оператори 2>, записани след else. Пр. 2. Правилно записани условни оператори: 1. Кратка форма: CODE
2. Пълна форма (предполагаме, че са направени декларациите int A,B; char D): CODE
3. Условен оператор, съдържащ друг условен оператор (предполага се, че са направени декларациите float X; boolean Sign;): CODE
4. Условен оператор със съставно условие (предполага се, че са направени декларациите int x; boolean y;) CODE
Семантиката на условния оператор е следната: в зависимост от изпълнението на зададено условие се извършва (или не) едно определено действие (if в кратка форма) или се избира и изпълнява едно от двете записани действия (if в пълна форма). Изпълнението на условния оператор в кратката му форма е следното: определя се стойността на логическото условие; само когато тя е true, се изпълняват оператори1. При пълната форма – ако стойността на логическото условие е true, се изпълняват оператори1, а ако е false - оператори2 след else. •Когато има само един оператор в “оператори1”, то фигурните скоби могат да се пропуснат; •Условният оператор if може да съдържа кой да е оператор на Java, в това число и друг оператор if. Трябва да се има в предвид, че else съответства винаги на най-близкия предхождащ if. В сложните случаи може да се сгреши и за това се препоръчва използването на отместване (Пр. 2.3.). Примерна програма При програмиране на разклонени алгоритми се спазват същите етапи, които илюстрирахме при нашата първа програма на Java. Пр. 3. Съставяне на програма, която определя дали дадено яло число, въведено от клавиатурата, се дели на 5 или на 15. Проектиране: Началните данни на програмата се състоят само то една-единствена целочислена стойност, която се въвежда от клавиатурата. Ето защо в програмата по-долу се декларира променлива IntNum от цял тип. Крайният резултат е съобщение дали IntNum се дели или не на 5 или 15. За съхраняване на резултата в програмата не е необходима променлива. Алгоритъмът, по който ще проверяваме делимостта на числото, е известен – едно число се дели на 5, ако остатъкът при целочисленото му деление на 5 е 0. Следователно дали едно число се дели или не на 5 може да се определи чрез проверяване на стойността на логическия израз (IntNim%5)=0. Дали едно число се дели на 15 може да проверим, като установим дали то се дели едновременно на 5 и на 3.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||









