else cout<г) if (x>y) x=y;
y=y-x;
x=x-y ;
else cout<
Зад. 6. Кой от посочените варианти описва функцията:
а) if(x>2)y=x;else if(x<=3)y=2;else y=x-1;
б) if(x<2)y=x;else if(x>=3)y=2;else y=x-1;
в) if(x<=2)y=x;else if(x<=3)y=2;else y=x-1.
Запишете вярното решение по подходящ начин, като всяко else подредете под if-а, към който се отнася.
Зад. 7. На входа на една дискотека трябвало да се изгради пропусквателна система с компютър, която да определя дали клиентът може да бъде допуснат в заведението. Съставете програма VHOD.EXE, която по въведено четирицифрено число n, годината на раждане на клиента, от клавиатурата извежда съобщение “Yes”, “No” или “Yes, s pridrugitel!”, като знаете, че след 22 часа в дискотеките не се допускат деца под 16 години, а от 16 до 18 годишна възраст - само с придружител.
Зад. 8. Да се състави програма VAL.CPP, която въвежда числата A и B и извежда стойността на C, ако:
Зад. 9. В едно училище започнали да облагородяват двора и решили да поставят беседка, но се оказало, че тя може да бъде или с формата на квадрат със страна а, или кръг с радиус r. Да помогнем на ръководството на училището като съставим програма BESEDKA.CPP, която по въведени дробни положителни числа a и r, определя по-голямата по площ беседка.
Зад. 10. Да се състави програма YEAR.CPP, която след въведена година от клавиатурата, извежда съобщение дали е високосна.
Зад. 11. Да се състави програма ODD.CPP, която за две числа x и y извежда тяхното произведение, ако x е четно и тяхната разлика, ако x е нечетно.
Зад. 12. Да се състави програма TRI.CPP, която извежда на екрана “YES”, ако три реални числа въведени от клавиатурата, могат да бъдат страни на триъгълник и “NO”, в противен случай.
Зад. 13. Една година е щастлива, ако има поне две еднакви цифри в записа си. Да се състави програма HAPPYYEAR.CPP, която прочита от клавиатурата дадена година (цяло четирицифрено число) и отпечатва “YES”, ако тя е щастлива и “NO”, в противен случай.
Зад. 14. Да се състави програма COMPET.CPP, която прочита от клавиатурата целочислените резултати на трима състезатели, участвали в едно лекоатлетическо състезание и отпечатва най-високия резултат.
Зад. 15. Хвърляме зарче и ако ни кажат, че числото, което се е паднало е голямо, дели се на 2, а също и на 3, веднага ще отгатнем, че това е числото 6. Ако направим уговорката, да считаме числата 1, 2 и 3 за малки, а числата 4, 5 и 6 – за големи, всеки без затруднение би могъл да отгатне едно зарче, достатъчно е само да знае за него отговорите на следните три въпроса: “Числото голямо ли е?”, “Числото дели ли се на 2?”, “Числото дели ли се на 3?”. Разбира се, трябва да внимаваме да не би да си имаме работа с някой шегобиец, който би отговорил, че числото е голямо и се дели на 3, но не се дели на 2.
Да се напише отгатваща програма ZAR4E.CPP, която по зададени от нея въпроси и получени от страна на потребителя отговори извежда на екрана намисленото число.
Зад. 16. В
void main()
{int x,y;
cout<<” x=”; cin>>x ;
cout<<” y=”;cin>>y;
if(x==5)
if(y==7) cout<<“sl. 1\n”;
else cout<<“sl. 2\n”;
if(x==5)
{ if(y==7) cout<<“sl. 1\n”;}
else cout<<“sl. 3\n”;
if(x==5)
if(y==7) cout<<“sl. 1\n”;
else cout<<“sl. 2\n”;
else if (y==5) cout<<“sl. 4\n”;
else cout<<“sl. 5\n”;
}
Изпълнете следните задачи:
-
Стартирайте програмата със следните входни данни:
x=5, y=7;
x=5, y=30
x=34, y=1235
x=8, y=7;
x=8, y=8;
и запишете получените резултати.
-
С помощта на прозореца за проследяване на програми проследете как се променят стойностите на величините в програмата в зависимост от изпълняваните оператори.
-
Да се състави програма, която въвежда от клавиатурата координати на точка в равнината и отпечатва в кой квадрант се намира тя.
-
Стартирайте програмата със следните входни данни:
Абциса: 34,6
Ордината: 53,7
Абциса: 4
Ордината: 3
Абциса: 34456,678
Ордината: 53678,78
и запишете получените резултати.
-
С помощта на прозореца за проследяване на програми проследете как се променят стойностите на величините в програмата в зависимост от изпълняваните оператори.
-
Да се състави програма, която въвежда от клавиатурата координати на точка в равнината и отпечатва дали тя принадлежи на защрихованата област.
-
Стартирайте програмата със следните входни данни:
Абциса: 1
Ордината: 2,7
Абциса: 5
Ордината: 0
Абциса: 1
Ордината: 0.5
и запишете получените резултати.
-
Коригирайте програмата така, че да прави аналогични проверки и за другите области.
-
Стартирайте новите варианти на програмата за същите входни данни и запишете резултатите.
-
В една компютърна игра, наречена SeaWar, в даден момент трябва да се реши следния проблем: Зададени са два плавателни съда A(XA,YA) и B(XB,YB). Предполага се, че играчът се намира в центъра на координатната система, но бойната мощ r на оръжията му е гарантирана до точно определено разстояние от целта. Налага се да се отпечатат координатите на този плавателен съд, който се намира в обхвата на оръжията на играча.
Съставете програма SEAWAR.CPP, която въвежда координатите на плавателните съдове и максималното разстояние, при което оръжията на играча гарантират успех, и отпечатва координотите на този от корабите, който може да бъде поразен от тази позиция. Ако някой от корабите не може да бъде поразен, да се отпечата разстоянието, което не достига за това.
-
Стартирайте програмата със следните входни данни:
XA=2 YA=4
XB=2 YB=2
r=4
XA=2 YA=4
XB=2 YB=2
r=14
XA=2 YA=4
XB=2 YB=2
r=2.5
XA=2 YA=4
XB=2 YB=2
r=1
-
С помощта на прозореца за проследяване на програми проследете как се променят стойностите на величините в програмата в зависимост от изпълняваните оператори.
-
Дадена е квадратна мишена, чийто център също съвпада с центъра на координатната система. Да се състави програма TARGET.CPP, която въвежда от клавиатурата координатите на изстрел х и у и отпечатва колко точки получава изстрела, като е известно, че изстрел, попаднал в първия кръг получава 10 точки, във втория – 5 точки, а в третия – 2 точки. Ако изстрелът е извън мишената, получава 0 точки.
-
Стартирайте програмата със следните входни данни:
0 0
2 1
2 3
4 4
Оператор за избор на вариант
-
Теоретични бележки
-
Пример
Ще разгледаме следната задача:
Задача: Да се състави програма DAY.CPP, която въвежда от клавиатурата цяло число от 1 до 7 и отпечатва съответния ден от седмицата, като на 1 съпоставя понеделник, на 2 – вторник и т.н. В случай, че е въведено число различно от описаните, на екрана се извежда “Еrror!”.
Решение:
Единствената величина, която ще използваме при решението на тази задача е целочислената променлива съдържаща номера на деня от седмицата.
int day;
След въвеждане на числото day от клавиатурата, с помощта на няколко последователни условни оператора проверяваме какво число е въведено и извеждаме съответното съобщение:
cin>>day;
if(day==1) cout<<”понеделник\n”;
else
if(day==2) cout<<”вторник\n”;
else
if(day==3) cout<<”сряда\n”;
else
if(day==4) cout<<”четвъртък\n”;
else
if(day==5) cout<<”петък\n”;
else
if(day==6) cout<<”събота\n”;
else
if(day==7) cout<<”неделя\n”;
else cout<<”Error!!!\n”;
От тук вече е много лесно да се реализира окончателния вид на програмата.
Прави впечатление, че многократно се повтарят еднотипни езикови конструкции, които проверяват еднотипни условия. В този случай се налага разклоняване на програмата не само в две, а в много посоки. Описаната задача е често явление в програмирането. По една или друга причина често се налага програмата да се разклонява в няколко посоки. Операторите, с които реализирахме решението на задачата могат да се заменят с единствен оператор, наречен оператор за избор на вариант. Повечето езици за програмиране включват такъв оператор. В езика С++ това е оператор switch. Да разгледаме особеностите при използването на оператора.
-
Синтаксис и семантика на оператор switch
а) Синтаксис на оператора за избор на вариант (правила за запис):
switch (израз)
{
case израз1 : оператор; оператор;… оператор; break;
case израз2 : оператор; оператор;… оператор; break;
...
case израз n : оператор; оператор;… оператор; break;
[default : оператор; оператор;… оператор; break;
}
к
switch (израз)
{case израз1 : оператор; оператор;… оператор; break;
case израз2 : оператор; оператор;… оператор; break;
...
case израз n : оператор; оператор;… оператор; break;
[default : оператор; оператор;… оператор; break;
}
ъдето:
оператор – произволен оператор, допустим за езика
израз – допустим за езика израз, резултата от който задължително не е от реален тип. Нарича се още дискриминанта.
израз1, израз2 ,..., израз n – константни изрази, задължително с различни стойности. Наричаме ги етикети. Тяхната стойност не зависи от входните данни
Забележка: Операторът break, описан в синтаксиса не е задължителен за използване. Неговото пропускане води до промяна на смисъла на програмата. Ще разгледаме това в следващите примери.
б) Семантика на оператор switch (правила за изпълнение):
- изчислява се стойността на израза(както споменахме по-горе, резултата е константа);
- получената константа се сравнява последователно със стойностите на етикетите(израз1, израз2 ,..., израз n);
- при съвпадение на стойността с някой от етикетите се изпълняват оперторите, записани след клаузата case на съответния вариант, до срещане на оператор break;
- при несъвпадение на стойността с някой от етикетите се изпълняват оперторите, съответстващи на варианта default, до достигане на оператор break. При липса на вариант default не следват никакви действия от оператор switch.
в) Забележки (Правила на използване)
При използването на оператор switch трябва да спазваме няколко основни правила:
-
дискриминантата задължително се загражда в скоби;
-
етикетите задължително са константи;
-
стойностите на етикетите не зависят от входните данни;
-
редицата от оператори, съответстващ на даден етикет може да е празна;
-
варианта default не е задължителен, но добрият стил за програмиране го изисква;
-
обикновенно последният оператор за изпълнение от всеки вариант е оператор break. Той предизвиква прекъсване на изпълнението на оператор switch и предава управлението на първия оператор след него;
-
Оператор break
Синтаксис(правило за запис):
break;
Семантика(правило за изпълнение):
Прекратява изпълнението на най-вътрешния, съдържащ го оператор switch или оператор за цикъл. Изпълнението на програмата продължава от оператора, следващ прекъснатия.
Имайки предвид казаното можем да решим задачата, като използваме оператор за избор на вариант:
//day.cpp
#include
void main()
{
int day;
cin>>day;
switch (day)
{
case 1 : cout<<”Понеделник\n”; break;
case 2 : cout<<”Вторник\n”; break;
case 3 : cout<<”Сряда\n”; break;
case 4 : cout<<”Четвъртък\n”; break;
case 5 : cout<<”Петък\n”; break;
case 6 : cout<<”Събота\n”; break;
case 7 : cout<<”Неделя\n”; break;
default : cout<<”Error!!!\n”; break;
}
}
-
Решени задачи
Задача 1. Месеци.
Да се състави програма MONTH.CPP, която прочита от клавиатурата цяло число от 1 до 12 и отпечатва броя на дните в съответния месец.
Сподели с приятели: