§ 6. Выкарыстанне асноўных алгарытмічных канструкцый для рашэння задач
Практыкаванні
1. Напішыце праграму для вылічэння першых n элементаў паслядоўнасці Фібаначы.
1. Для якога максімальнага значэння n праграма выдае карэктны адказ?
2. Змяніце праграму так, каб яна выводзіла значэнне ліку Фібаначы па ўведзеным нумары.
3. Замяніце ў праграме тып int на тып long long. Якое максімальнае значэнне n можна ўвесці зараз?
2. Напішыце праграму, якая будзе выводзіць на экран элементы паслядоўнасці трыбаначы — першыя элементы паслядоўнасці: 0, 0, 1, 1, 2, 4, 7, 13, 24, 44, 81, 149… . Кожны элемент, пачынаючы з чацвёртага, роўны суме трох папярэдніх: an = an – 1 + an – 2 + an – 3.
1. Па зададзеным n вывесці элемент паслядоўнасці.
2. Для зададзенага x вывесці элементы паслядоўнасці, меншыя x.
3. Напішыце праграму, якая знойдзе першы адмоўны элемент паслядоўнасці sin(tgn)n = 1, 2, ... і яго нумар.
4. Выканайце заданні для прыкладу 6.15.
1. Замяніце ў рашэнні задачы цыкл for на цыкл while або do…while.
2. Ваня вырашыў скараціць колькасць радкоў у праграме і запісаў цыкл наступным чынам:
for (int n = 1; n <= m; n++){
double a = n * n * n / (sqrt(n * n * n)- n + 1);
s += a;
}
Чаму для m = 2000 Ваня атрымаў у адказе s = nan?
5. Напішыце праграму, якая знойдзе суму першых m элементаў паслядоўнасці. Лік m уводзіцца. Элементы паслядоўнасці задаюцца формулай.
6. Напісаць праграму для вылічэння сумы, якая мае сваімі складаемымі элементы паслядоўнасці . Вылічэнні выконваць да таго часу, пакуль не знойдзецца складаемае, для якога правільная няроўнасць . Значэнне eps уводзіцца (0 < eps < 1 ).
7. Напішыце праграму, якая знойдзе здабытак з n сумножнікаў наступнага выгляду. Значэнне n уводзіцца.
8. Выканайце заданне для прыкладу 6.17.
- Замяніце ў рашэнні задачы цыкл for на цыкл while або do…while.
- Атрымайце табліцу значэнняў функцыі на адрэзку [–3; 3]. У якасці ўмовы ў цыкле можна выкарыстоўваць наступнае: x < = 3;
- Дабаўце ў праграму вывад меж вакол табліцы:
9. Напішыце праграму, якая пабудуе табліцы значэнняў для наступных функцый.
10. Праграму з прыкладу 6.18 змянілі. Сфармулюйце задачу, якая рашаецца з дапамогай дадзенай праграмы.
#include<iostream>
using namespace std;
int main()
{
int i, n;
cout << "n = ";
cin >> n;
cout << "i = ";
cin >> i;
int k = 0;
while (n > 0)
{
int z = n % 10; //бягучая лічба
k++;
if (k == i){
cout << "v razrjade " << i;
cout << " stoit zifra "<< z << endl;
}
n /= 10; //памяншэнне ліку ў 10 разоў
}
if (i > k){
cout << "v chisle "<<k<<" cifr, ";
cout << "v razrjade " << i << " net cifr " << endl;
}
else
cout<<"v chisle "<<k<<" cifr";
return 0;
}
11. Дадзены натуральны лік n. Напішыце праграму, якая вызначыць, якіх лічбаў у ліку больш, цотных ці няцотных.
12. Дадзены натуральны лік n. Напішыце праграму, якая выведзе нумары разрадаў, у якіх стаяць лічбы, кратныя 3, ці паведамленне, што такіх лічбаў няма.
13. Напішыце праграму, якая выведзе на экран лічбу, што стаіць на сярэдняй пазіцыі ліку, калі лік мае няцотную колькасць лічбаў, ці 2 сярэднія для ліку з цотнай колькасцю лічбаў.
14. Напішыце праграму, якая пасля кожнай лічбы 1 у ліку ўставіць яшчэ адну адзінку. Напрыклад, из 51214 → 5112114.
15. Выканайце заданне для прыкладу 6.19.
1. Для сітуацыі, калі цукар заканчваецца, выведзіце значэнне часу, калі гэта адбылося.
2. Змяніце праграму так, каб задавалася пачатковая і канчатковая колькасць цукру, а разлічваўся час, неабходны для такога змянення канцэнтрацыі.
3. Змяніце праграму так, каб па ўведзеным часе і колькасці цукру ў пачатку і ў канцы працэсу разлічваўся пачатковы аб’ём раствору.