Описание на разклонени алгоритми
1. Разклонени алгоритми. Булев тип.
Процес, при който се избира един от няколко възможни варианта се нарича вземане на решение. Какво решение ще вземем, зависи от това дали е изпълнено или не някакво условие, наречено логическо условие. Осъществява се чрез разклонени алгоритми, реализирани чрез оператори за разклонение
Логическият тип данни съдържа само две стойности – true (1) и false (0). Декларирането на променливи от логически тип става със служебната дума bool. С логическите величини могат да се извършват операции като логическо отрицание (!), логическо умножение (&&), логическо събиране (||) и др.
2. Условни оператори.
а) кратка форма (оператор if)
Ако логическото условие е изпълнено (вярно), изпълняват се определени действия, а ако не – тези действия се прескачат. И в двата случая след това се изпълняват общи действия.
Кратката форма на условния оператор if има следния вид:
if (<условие>) <оператор>
Тук условието е логически (булев) израз, а операторът задава определено действие, което трябва да бъде извършено.
Ако трябва да се изпълнят повече от оператори при вярно логическо условие, то те се задават в т. нар. блок от оператори, който има следния вид:
{
оператор1;
оператор2;
...........
операторN;
}
б) пълна форма (оператор if/else)
Пълната форма на условния оператор if има следния вид:
if (<условие>) <оператор1> else <оператор2>
Тук условието е логически (булев) израз, оператор1 и оператор2 задават определени действия. Ако логическото условие е изпълнено, изпълнява се оператор1, а ако не е изпълнено – оператор2. Ако трябва да се изпълнят повече оператори, то те се задават в блок от оператори.
Пример (програма за извеждане стойността на израза за въведена стойност на b):
#include <math.h>
using namespace std;
int main()
{
float b,izraz;
cout << "b = ";
cin >> b;
if ((b+1<0)||(3*b-6==0)) cout << "Izrazyt nqma smisyl" << endl;
else
{
izraz = 4+sqrt(b+1)/(3*b-6);
cout << "Stoinostta na izraza e " << izraz << endl;
}
system ("pause");
return 0;
}
в) вложени условни оператори
Условните оператори могат да се влагат един в друг, ако в състава на оператор след if или else отново се постави условен оператор.
Пример (програма за пресмятане стойността на функцията:
using namespace std;
int main()
{
double x,f;
cout << "x = ";
cin >> x;
if (x<1) f=3*x*x-5;
else if (x==1) f=5*x+2;
else f=1/x;
cout << "f (" << x << ") =" << f << endl;
system ("pause");
return 0;
}
3. Оператор за многовариантен избор.
Когато се налага да се избере един от няколко възможни варианта понякога не е удобно използването на вложени условни оператори. Вместо това се използва оператор за многовариантен избор. Той има следния синтаксис:
switch (<израз>)
{
case <израз1>: <редица от оператори1>
case <израз2>: <редица от оператори2>
..........................
case <изразN-1>: <редица от операториN-1>
[default:<редица от операториN>]
}
Последователно се сравнява стойността на израза със стойностите на етикетите. Когато се открие същата стойност сред тях, се изпълняват съответните оператори. Ако не бъде открита същата стойност, се изпълняват операторите след default (ако не присъства тази част в конкретна конструкция няма да се изпълни действие). Редиците от оператори завършват с оператор break;, който прекратява изпълнението на оператор switch или оператор за цикъл.
Пример (програмата извежда наименованието с думи на въведено число от 1 до 10):
using namespace std;
int main()
{
short a;
cout << "Vyvedete chislo ot 1 do 10: ";
cin >> a;
switch (a)
{
case 1:cout<<"edno \n"; break;
case 2:cout<<"dve \n"; break;
case 3:cout<<"tri \n"; break;
case 4:cout<<"chetiri \n"; break;
case 5:cout<<"pet \n"; break;
case 6:cout<<"shest \n"; break;
case 7:cout<<"sedem \n"; break;
case 8:cout<<"osem \n"; break;
case 9:cout<<"devet \n"; break;
case 10:cout<<"deset \n"; break;
default:cout<<"Ne ste vyveli chislo ot 1 do 10 \n";
}
system ("pause");
return 0;
}