Известна е зависимостта, по която се образуват имената на целите числа от 13 до 19 – първо се отпечтва думата, съответстваща на цифрата на единиците и след това се отпечатва надставката “надесет”. За разлика от тях числата единадесет и дванадесет се образуват малко по-различно. (вместо еднонадесет – единадесет и вместо двенадесет – дванадесет), което означава, че тези две числа ще се обработват отделно от останалите. Ако числото е едноцифрено, то се отпечатва със съответната дума без надставка. Изключение прави и числото 10, защото неговото наименование е специфично. От казаното до тук става ясно, че ще се наложи да се отделят двете цифри на числото и отпечатването ще се контролира от тяхната стойност.
За да може да се произведе дадено изделие, за него трябва да има достатъчно количество и от двата детайла. За всеки от двата детайла ще изчислим b1 и b2, съответно броя на изделията, които могат да се произведат с първия и втория детайл. Броя на произведените изделия се определя от по-малкото от двете числа b1 и b2. В зависимост от това кое изделие е избрано, програмата се разклонява в три посоки. Ето защо е удачно да използваме оператор switch.
Ето пълния текст на програмата, решаваща задачата:
//details.cpp
#include
void main()
{
int i,d1,d2,b1,b2;
cin>>i>>d1>>d2;
switch(i)
{
case 1: b1=d1/2;b2=d1; break;
case 2: b1= d1/4;b2=d2/2; break;
case 3: b1= d1/5;b2=d2/4; break;
}
cout<<(b1
}
-
Задачи за упражнение
Зад. 1. Да се състави програма INWORDS2.CPP, която въвежда от клавиатурата цяло число от 1 до 99 и го отпечатва словом
Примерен вход:
56
Примерен изход:
петдесет и шест
Зад. 2. Да се състави програма MINMAX.CPP, която прочита от клавиатурата целочислените променливи a,b и с и разменя местата на най-голямата и най-малката измежду трите стойности.
Примерен вход:
1 8 3
Примерен изход:
8 1 3
Лабораторен практикум №3
Оператор за избор на вариант
зад. 1. Въведете следната програма:
#include
void main()
{
int d;
cout<<“vavedi den ot sedmicata: “;
cin>>d;
switch (d)
{
case 1: cout<<“ponedelnik\n”; break;
case 2: cout<<“vtornik\n”;
case 3: cout<<“srqda\n”; break;
case 4: cout<<“4etvyrtyk\n”;
case 5: cout<<“petyk\n”;
case 6: cout<<“sybota\n”; break;
case 7: cout<<“nedelq\n”;break;
default: cout<<“ERROR\n”;
}
}
-
Тествайте програмата със следните входни данни:
d=3;
d=5;
d=1;
d=7;
d=-15
-
Защо при някои от тестовете се извежда повече от един отговор?
-
Коригирайте програмата така, че да работи коректно. Опишете какви са корекциите.
зад. 2. В едно предприятие се произвеждат три изделия (I1, I2, I3), като за тях са необходими детайлите D1, D2 в количествата, зададени от таблицата:
-
|
D1
|
D2
|
I1
|
2
|
0
|
I2
|
4
|
2
|
I3
|
5
|
4
|
Да се състави програма, която по дадено изделие и налични количества от детайлите определя колко броя от това изделие могат да се произвеждат.
Тествайте програмата при следните входни данни:
D1=5349
D2=3815
I=3
D1=4896
D2=123
I=3
зад. 3. Да се състави програма, която въвежда от клавиатурата цяло число а и по избор извежда периметъра на равностранен триъгълник със страна а, лицето на квадрат със страна а или лицето на кръг с радиус а.
-
Тествайте я със следните данни:
a=35897;
i=1;
a=16;
i=1;
a=8971;
i=2;
зад. 4. Да се състави програма, която въвежда от клавиатурата цяло число от 1 до 20 и го извежда на екрана с думи.
Коригирайте програмата така, че да работи и с числа от 0 до 99. Напишете новата програма.
зад. 5. Дадени са целочислените променливи a,b и c. Да се състави програма, която разменя местата на най-голямата и най-малката измежду трите стойности.
Тествайте програмата.
Оператори за цикъл
Оператор за цикъл do-while
-
Теоретични бележки
-
Пример
Задача: Да се състави програма SUM3.CPP , която въвежда от клавиатурата три цели числа и отпечатва сумата им.
До момента ни е известно едно решение на тази задача – декларираме три променливи, въвеждаме трите числа, събираме ги и отпечатваме резултата. Тъй като в програмирането целта е не просто да напишем програмата, а да намерим оптималния от всички възможни варианти, продължаваме да търсим нови решения.
При създаване на програми се налага използване на страндартни способи, които са се утвърдили с времето и са особено подходящи в определена ситуация.
Когато се търси сума на повече от две числа е добре да се подходи по следният начин:
- Декларираме една допълнителна променлива, в която да запишем сумата на трите числа и приемаме, че първоначално тази променлива има стойност 0.
- Последователно въвеждаме всяко едно от трите числа и го добавяме към сумата веднага след въвеждането му.
- Отпечатваме получената сума.
Така описаната програма изглежда по следния начин:
#include
void main()
{
int a, b, c, s=0;
cin>>a;
s+=a;
cin>>b;
s+=b;
cin>>c;
s+=c;
cout<}
Решението е интересно с това, че числата се въвеждат последователно и на всяка стъпка успяваме да определим сумата на въведените до момента числа.
Така оформена програмата си има и недостатък - с въвеждане на нова променлива заемаме по-голяма част от оперативната памет, необходима за програмата. Ето защо е добре да помислим за нейното доусъвършенстване.
Лесно можем да забележим, че всяка една от променливите се използва само в два последователни оператора – при прочитането и при добавянето и към сумата. В останалата част от програмата тези променливи не се използват. В този случай можем да се откажем от променливите b и c и вместо тях отново да използваме а.
#include
void main()
{
int a, b, c, s=0;
cin>>a;
s+=a;
cin>>а;
s+=а;
cin>>а;
s+=а;
cout< }
Трасирайте програмата с използване на клавиш F7 и проследете как се изпълнява програмата. Как се променят стойностите на променливите a и s?
Какво трябва да променим в програмата, ако търсим сумата на 4 числа, 5 числа ... 100 числа?
Колкото и трудоемко да е реализирането на програмата за по-голям брой числа, създаването и е възможно. Повече би ни затруднила задачата, ако предварително не ни е известен броя на числата.
Ако погледнем последната програма ще видим, че има два оператора, които се повтарят при всяко въвеждане на нова стойност на променливата:
cin>>а;
s+=а;
Ако имаме възможност да напишем програмата, така че да укажем на компютъра да повтаря тези два оператора определен брой пъти (примерно докато въведем числото 0), това би улеснило работата ни многократно. Повторението на едни и същи действия в една програма, се нарича цикъл. Едно от най-полезните възможности на компютрите е способността им многократно да изпълняват едни и същи действия, с едни и същи или различни стойности на изразите, които участват в тях. Всеки език за програмиране разполага със средства за задаване на такива повторения, които е прието да се наричат “оператори за цикъл”.
За да можем да организираме един цикъл трябва да можем да си отговорим на два основни въпроса:
- Какво се повтаря? - Това трябва да бъде едно или няколко действия, описани чрез допустими за езика за програмиране оператори. Всяко изпълнение на тези действията е прието да се нарича итерация.
- До кога се повтаря? - Това повтаряне на едни и същи действия не може да се извършва безкрайно, т.е. трябва ни условие (израз), което да може да прекъсне цикъла.
-
Синтаксис и семантика на оператор do-while
Задача: Да се състави програма, която въвежда от клавиатурата числа до въвеждане на 0, и отпечатва сумата им.
Решение:
Очевидно, тук ще се наложи многократно повторение на описаните в решението на предишната задача оператори:
cin>>а;
s+=а;
Освен това в условието на задачата е казано ясно до кога трябва да се извършат тези повторения: докато се въведе числото 0.
Като имаме предвид, че използваните променливи остават същите – програмата, която решава тази задача има следния вид.
//sum.cpp
#include
void main()
{
int a,s=0;
do
{
cin>>а;
s+=а;
}
while(a);
cout<
}
Тук операторът do-while осигурява цикличното повторение на двата оператора
cin>>а;
s+=а;
докато променливата а е различна от 0.
Както и за всеки друг оператор и в този случай, ще опишем синтаксиса и семантиката му.
а) Синтаксис (правила за запис):
do оператор while (израз);
оператор – произволен оператор, който е прието да се нарича тяло на цикъла;
израз – условие, което определя до кога се повтаря тялото на цикъла. Тук могат да участват както аритметични, така и логически операции и логически отношения, описани по правилата за логически и аритметични изрази.
Забележка: Тялото на цикъла описва действието, което трябва да се повтаря. Ако се налага да се повтаря повече от едно действие, т. е. се използва повече от един оператор, повтарящите се оператори се обединяват в съставен оператор чрез заграждането им в {}.
б) Семантика (правила за изпълнение):
Операторът do P while (B);, където Р е оператор, а В е израз, се изпълнява по следния начин:
- изпълнява се Р;
- изчислява се стойността на израза В;
- ако стойността на В е различна от нула, т. е. истина, се преминава към изпълнение на P;
- ако стойността на В е нула, се изпълнява следващия оператор в програмата.
Като използваме този оператор за цикъл, да решим следната задача:
Задача. Да се състави програма, която въвежда числа от клавиатурата до въвеждане на нула и отпечатва броя на числата:
Решение:
Както вече беше казано, за да успеем да решим задачата, трябва да изясним двата основни момента:
Какво се повтаря? – по аналогия с предишната задача лесно се съобразява, че ще се повтарят две действия: въвеждането на число а и преброяването му. Самото преброяване ще се осъществи, като при прочитане на всяко число увеличаваме с 1 стойността на една цяла променлива br (много важно е да съобразим, че в началото на програмата на тази променлива трябва да се присвои стойност 0). След този анализ става ясно, че тялото на оператора за цикъл се състои от следните два оператора:
cin>>a;
br++;
До кога се повтаря? – тук израза, определящ до кога ще се изпълнява програмата, е зададен явно в условието на задачата, т. е. тялото на цикъла ще се повтаря докато въвежданото число е различно от 0. По-точно казано, в качеството на израз можем да използваме самата променлива а, чрез която се въвеждат числа от клавиатурата. Ако тя е ненулева, тялото на цикъла ще продължи да се изпълнява. В момента, в който се въведе 0, програмата ще продължи със следващия оператор, а следвайки условието, той трябва да извежда броя на въведените числа - br.
След тези уточнения, получаваме като решение на задачата следната програма:
//count.cpp
#include
void main()
{
int a, br=0;
do
{
cin>>a;
br++;
}
while (a);
cout<<”br=”<
}
При тестване на програмата се оказва, че броят на числата е с 1 по-голям от действителния, т.е. програмата е преброила и числото 0. Ако решим, че числото 0 не трябва да бъде преброявано, трябва да помислим за промяна в решението, която ще го избегне.
//count1.cpp
#include
void main()
{
int a, br=0;
do
{
cin>>a;
br++;
}
while (a);
cout<<”br=”<
}
в) Забележки (Правила на използване)
При използването на оператора за цикъл do-while трябва да спазваме следните основни правила:
- израза задължително се загражда в скоби;
- когато в тялото на цикъла трябва да са включени няколко оператора, те се заграждат с { }, т.е. използваме съставен оператор;
- управляващото условие трябва да се променя в тялото на цикъла;
- при създаването на програмите трябва да имаме предвид, че тялото на цикъла се изпълнява задължително поне веднъж.
-
Сподели с приятели: