упражнение №4

Разклонени алгоритми

 

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

В C++ са налични 3 оператора, с помощта на които могат да се реализират разклонени алгоритми.

1.   Условно разклонение

За създаване на програми с условни разклонения се използва операторът за условен преход if. Употребата му се подчинява на следния синтаксис:

if  (булев израз) оператор

    else  оператор

Синтаксисът на оператора if допуска две форми: пълна и съкратена. Семантиката на пълната форма на оператора може да се опише с блоковата схема, показана на фиг.1, а на съкратената - с блоковата схема на фиг.2.

 

 

 

 

 

 

 

 

 

 


Примери:

if (x>0) y=x;

else y=-x;

Rounded Rectangular Callout: Съкратена формаif (x==0) cout<<”няма решение”;

 

Зад.1 Да се напише програма, която въвежда стойности за две числа (х и у)  и извежда на екрана стойността на  по-голямото от тях.

Решение

Блоковата схема на алгоритъма на тази задача е показана на фиг.3. В нея се забелязват два нови блока: правоъгълник (изчислителен блок) и ромб (блок за условно разклонение). Знакът = в изчислителния блок носи смисъла на присвояване, а не на равенство, както е в математиката. Блокът за условно разклонение задължително има два изхода: изход “да”, когато условието е изпълнено и изход “не”, когато условието не е изпълнено. При въвеждане на стойности за променливите е желателно на екрана да се показва текст, който да "подсказва" на потребителя, какво се очаква от него. За тази цел в програмата са използвани операторите cout<<”x=”; и cout<<”y=”;.

 

 

 


Ò

#include <iostream.h>

main()

{

  float x,y,max;

  cout<<”x=; cin>>x;

  cout<<”y=”; cin>>y;

  

  if (x>y) max=x;

  else max=y;

 

  cout<<”max=”<<max;

}

 

 

 

Зад.2 Да се напише програма, която въвежда стойност за Х, изчислява  и извежда на екрана Y по формулата Y = 1 / X . Да се вземе предвид, че делението на 0 в математиката е недефинирана операция.

 

Зад.3 Да се напише програма, която въвежда стойност за Х, изчислява  и извежда на екрана Y по формулата :

             

 

 

Зад.4 Да се напише програма, която задава начална стойност 100 на променливата y и въвежда стойност за променливата x. Ако стойността на x е положителна, то тя се добавя към y. В противен случай y не се променя. Стойността на y да се изведе на екрана.

2.   Безусловен преход

Операторът за безусловен преход е goto. Употребата му се подчинява на следния синтаксис:

goto етикет;

Етикетът представлява логическо име на ред. Поставя се в началото му и се отделя с двуеточие(:).

 

Зад.1 Да се напише програма, която изчислява еквивалентното съпротивление на два резистора, със стойности съответно R1 и R2, при последователно и паралелно свързване. Изчислението да се извършва само, ако въведените стойности са положителни числа.

Решение

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

Ò

#include <iostream.h>

void main(void)

{ float R1,R2,Rs,Rp;

  cout<<”R1=;  cin>>R1;

  if (R1<=0)

  {

     cout<<”R1<=0, R1=”<<R1<<”\n”;

Rounded Rectangular Callout: Управлението се предава на реда с етикет et.     goto et;

  }

  cout<<”R2=;  cin>>R2;

  if (R2<=0)

  {

     cout<<”R2<=0, R2=”<<R2<<”\n”;

Rounded Rectangular Callout: Управлението се предава на реда с етикет et.     goto et;

  }

   Rs=R1+R2;

   Rp=R1*R2/Rs;

   cout<<”Rs=”<<Rs<<”\n”;

   cout<<”Rp=”<<Rp<<”\n”;

et: ;

}

 

3.   Множествено  разклонение

Множествено разклонение в програмите на C++ се реализира с помощта на оператора за вариант  switch. Употребата му се подчинява на следния синтаксис:

switch (израз)

{

      case константа:

               [оператор  ;

      break;

      default : < оператор > ;

}

 

В представения синтаксис case константа е с характер на етикет. Поради тази причина след константата се поставя двуеточие. Допуска се оператърът да е съставен (да се състои от множество оператори). Няма ограничение за броя на етикетите case.

При оператора switch първо се изчислява стойността на израза и последователно се проверяват стойностите на константите в етикетите case. Изпълняват се операторите, записани след етикета, чиято стойност съвпада със стойността на израза. При достигане на оператора break управлението се предава на първият оператор след оператора switch. Операторът break не е задължителен. Ако липсва се приминава към следващия етикет от тялото на оператора switch.

Ако стойността на израза не съвпада със стойността на никоя от константите след етикетите case, се изпълняват операторите след етикета default. Ако той липсва управлението се предава на първият оператор след оператора switch.

 

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

 

Зад.2 Да се напише програма, която въвежда цяло число от 1 до 7 за деня на седмицата и извежда съобщение, указващо дали това е работен или почивен ден. В случай, че е въведено число извън този диапазон, програмата да извежда съобщение за грешка.

 

Зад.3 Да се напише програма – калкулатор, която да изпълнява следните двуместни операции: събиране, изваждане, умножение, деление.

 

 

 

ЗАДАЧИ ЗА САМОСТОЯТЕЛНА РАБОТА

Œ                Да се напише програма, която въвежда стойности за три числа (х, у и z)  и извежда на екрана стойността на  най-голямото от тях.

                Три отсечки образуват триъгълник тогава и само тогава, когато най-голямата от тях е по-малка от сумата на другите две (c < a + b). Да се напише програма, която въвежда стойности за трите отсечки и определя дали могат да образуват триъгълник.

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

 

 

 

 

 

 

 


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

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

                Да се напише програма, която представя на екрана следното меню:

1.      България

2.      Русия

3.      Германия

4.      Франция

5.      Италия

При избор на номер от менюто да се извежда столицата на съответната държава. При неправилен избор да се издава съобщение за грешка.

 

 

à   Ä   Ç