§ 2. Арганізацыя вылічэнняў
Сайт: | Профильное обучение |
Курс: | Інфарматыка. 10 клас (Павышаны ўзровень) |
Книга: | § 2. Арганізацыя вылічэнняў |
Напечатано:: | Гость |
Дата: | Воскресенье, 28 Апрель 2024, 18:36 |
2.1. Выкарыстанне матэматычных функцый
Пры вылічэннях часта выкарыстоўваюцца розныя матэматычныя функцыі (прыклад 2.1). Гэтыя функцыі рэалізаваны як убудаваныя дапаможныя алгарытмы і захоўваюцца ў бібліятэцы cmath. Для падключэння гэтай бібліятэкі выкарыстоўваюць каманду #include <cmath>. Аргументы функцый заўсёды запісваюцца ў дужках. Некаторыя з функцый прыведзены ў табліцы:
(Іншыя функцыі можна паглядзець у Дадатку да главы 1.) Аргументам функцыі можа быць лік, пераменная, выраз ці іншая функцыя: ceil(10*sin(x)), sqrt(abs(-16)). У прыкладзе 2.1 выкарыстоўваюцца матэматычныя функцыі для вылічэння модуля, квадратнага кораня і сінуса. |
Прыклад 2.1. Зададзены значэнні пераменных x і y. Вылічыць значэнне выразу: Этапы выканання задання I. Зыходныя даныя: пераменныя x, y. II. Вынік: пераменная b. III. Алгарытм рашэння задачы. 1. Увод зыходных даных. IV. Апісанне пераменных: x, y, b — double. V. Праграма:
VI. Тэсціраванне праграмы. Запусціць праграму і ўвесці значэнні x = 13, y = 7.7. Вынік: VI. Правільнасць вылічэнняў можна праверыць на калькулятары. |
2.2. Рашэнне задач
Прыклад 2.2. Напішыце праграму для рашэння геаметрычнай задачы. Зададзены квадрат з даўжынёй стараны a. Знайсці яго плошчу і даўжыню дыяганалі. Этапы выканання задання I. Зыходныя даныя: пераменная (даўжыня стараны). II. Вынік: пераменныя S (плошча) і d (даўжыня дыяганалі). III. Алгарытм рашэння задачы. 1. Увод зыходных даных. IV. Апісанне пераменных: a, s, d — double. Прыклад 2.3. Напішыце праграму для рашэння фізічнай задачы. Хлопчык, які стаіць на беразе, кідае ў возера каменьчык. Пункт кідання знаходзіцца на вышыні h над паверхняй вады. Пачатковая скорасць каменьчыка v0 накіравана гарызантальна. Каменьчык падае ў ваду на адлегласці l ад берага. Вызначыце модуль пачатковай скорасці каменьчыка і модуль скорасці, з якой ён увайшоў у ваду. Этапы выканання задання I. Зыходныя даныя: пераменныя h і l (вышыня над паверхняй вады і адлегласць ад берага). II. Вынік: пераменныя v0 і v (пачатковая скорасць і скорасць, з якой каменьчык увайшоў у ваду). III. Алгарытм рашэння задачы. 1. Увод зыходных даных. 2. Каменьчык удзельнічае адначасова ў двух рухах: раўнамерным са скорасцю v0 па гарызанталі і роўнапаскораным без пачатковай скорасці па вертыкалі. У канцы палёту праекцыі хуткасці і каардынаты каменьчыка будуць: vx = v0; t; vy = gt; . Тады. 3. Пачатковая скорасць вылічваецца па формуле Значэнне скорасці, з якой каменьчык увайшоў у ваду, можна вылічыць па формуле . 4. Вывад выніку. IV. Апісанне пераменных: h, l, g, t, vy, v0, v — double. Пры напісанні праграм зввяртайце ўвагу на фармаціраванне тэксту праграмы (прыклад 2.4). 1. У першай пазіцыі на экране пішуць толькі каманды #include <iostream>, #include <cmath>, using namespace std;, int main() ставяць фігурныя дужкі, а астатнія каманды пішуць са зрухам на 2—4 пазіцыі ўправа. 2. Калі ў праграме некалькі частак, то іх можна аддзяліць адна ад адной пустым радком. Для аўтаматычнага фармаціравання кода можна выкарыстаць каманду Format use AStyle з кантэкставага меню рабочай вобласці (пыклад 2.5). |
Прыклад 2.2. V. Праграма:
VI. Тэсціраванне праграмы. Увядзіце значэнне a = 2. Вынік: Праверыць правільнасць вылічэнняў можна на калькулятары. Прыклад 2.3. V. Праграма:
VI. Тэсціраванне праграмы: Запусціце праграму і ўвядзіце значэнні h = 1.8 і l = 4.8. Результат должен быть следующим: Праверыць правільнасць вылічэнняў можна на калькулятары. У праграме можна выкарыстоўваць каментарыі — тэкст, які не аналізуецца пры запуску праграмы на выкананне. Тэкст пасля сімвалаў // лічыцца каментарыем і вылучаецца шэрым колерам. У каментарыях зручна запісваць умову задачы і тлумачэнні да каманд. Калі для каментарыяў выкарыстоўваць сімвалы ///, то яны вылучаюцца больш ярка. Зрабіць вылучаны блок каментарыем можна з дапамогай Crtl+Shift+C, зняць каментарый — Crtl+Shift+X, |
2.3. Цэлалікавы тып даных
Часта пры рашэнні задач трэба працаваць з цэлымі лікамі. Для гэтага ў C++ выкарыстоўваецца тып даных int. З дапамогай пераменных тыпу можна задаваць цэлыя лікі з дыяпазону ад –2147483648 да 2147483647. Для гэтага тыпу даных вызначаны наступныя аперацыі:
У С++ для дзялення як цэлых, так і рэчаісных лікаў выкарыстоўваецца адзін і той жа знак «/». Будзе вынік цэлым ці рэчыўным, залежыць ад аперандаў (пераменных ці лікаў, якія стаяць злева і справа ад знака). Калі хоць бы адзін аперанд рэчыўны, то вынік будзе рэчыўным. Калі абодва аперанды цэлыя, то і вынік будзе цэлым. Аперацыя «%» адпавядае аперацыі mod у мове праграміравання Pascal і выкарыстоўваецца толькі для цэлых лікаў. Прыклад 2.6. Дадзены два цэлыя лікі a і b. Напісаць праграму, якая знаходзіць цэлую частку і астачу ад дзялення a на b. Этапы выканання задання I. Зыходныя даныя: пераменныя a і b. II. Вынік: пераменныя c (цэлалікавая дзель) і d (астача). III. Алгарытм рашэння задачы. 1. Увод зыходных даных. IV. Апісанне пераменных: a, b, c, d — int. Значэнне, якое выдае ў якасці выніку аперацыя %, можа адрознівацца ад матэматычнага азначэння астачы (у матэматыцы пад астачай разумеюць неадмоўны лік). Калі астача не роўна нулю, то знак ліку, які з’яўляецца вынікам аперацыі %, вызначаецца знакамі аперандаў (прыклад 2.7). Калі прааналізаваць даныя з табліцы, то можна зразумець, што [1] Пры выкананні арыфметычных аперацый трэба памятаць, што спачатку аперацыя выконваецца ў адпаведнасці з тыпамі аперандаў, а затым адбываецца пераўтварэнне атрыманага тыпу да тыпу выніку. Напрыклад, няхай у праграме запісана каманда: double x = 16 / 7; Спачатку будзе выканана дзяленне 16 на 7 (цэлалікавае), у выніку атрымаем 2. Пасля чаго цэлае значэнне 2 будзе пераўтворана да рэчыўнага значэння 2.0. Каб атрымаць рэчыўны вынік, неабходна, каб хаця б адзін лік быў рэчыўным. Каманду можна запісаць, напрыклад, так: double x = 16. / 7; Калі ў аператары прысвойвання выкарыстоўваюцца не канстанты, а пераменныя, то неабходна пераўтварыць выраз так, каб дзеянні выконваліся з патрэбным тыпам. Напрыклад, аператар прысвойвання double x = a / b; у якім a і b цэлалікавыя пераменныя, можна запісаць так: double x = 1. * a / b; Тады вынік аперацыі множання будзе рэчыўным і дзяленне будзе выконвацца для рэчаісных лікаў. |
Тып int з’яўляецца базавым цэлалікавым тыпам. Іншыя цэлалікавыя тыпы можна атрымліваць, прыпісваючы да int мадыфікатары. Адрозніваюць два тыпы мадыфікатараў, якія могуць змяняць знакавасць ці памер. Знакавасць: signed — тып будзе мець знакавае ўяўленне (выкарыстоўваецца па змоўчанні, калі мадыфікатар не вызначаны); unsigned — тып будзе мець бяззнакавае ўяўленне. Памер: short — тып будзе займаць у памяці не менш за 16 біт; long — тып будзе мець памер, не меншы за 32 біт; long long — тып будзе мець памер, не меншы за 64 біты. Прыклады выкарыстання мадыфікатараў:
Калі пры апісанні выкарыстоўваюць мадыфікатары, то слова int можа быць прапушчана. Наступныя апісанні эквівалентныя: Прыклад 2.6. V. Праграма:
IV. Тэсціраванне праграмы: Запусціце праграму і ўвядзіце значэння a = 11 и b = 4. Вынік павінен быць наступным: Прыклад 2.7. Вынік аперацый div і mod для розных лікаў:
У мове С++ дапускаецца відавочнае пераўтварэнне тыпаў. Для гэтага выкарыстоўваецца каманда static_cast<dataType>(value) Тут dataType — імя тыпу, да якога трэба пераўтварыць велічыню value. У кодзе праграмы гэта каманда выкарыстоўваецца наступным чынам: double x = static_cast<double>(a)/b; Таксама кампілятарам С++ падтрымліваецца так званы Cі-стыль прывядзення тыпаў даных, калі новы тып паказваецца ў дужках перад імем пераменнай: double x = (double)a / b; Кампілятар C++ таксама дазваляе выкарыстоўваць гэты аператар і наступным чынам: double x = double(a) / b; Аднак такое пераўтварэнне лічыцца небяспечным, паколькі кампілятар не правярае выхад за мяжу магчымых значэнняў тыпу. |
2.4. Рашэнне задач
Прыклад 2.8. Васеў таймер паказвае час толькі ў секундах. Напісаць для Васі праграму, якая перавядзе час у мінуты і секунды. Этапы выканання задання I. Зыходныя даныя: пераменная с (час у секундах). II. Вынік: пераменныя m (поўная колькасць мінут) і s (астача секунд). III. Алгарытм рашэння задачы. 1. Увод зыходных даных. IV. Апісанне пераменных: c, m, s — int. Прыклад 2.9. Зададзены трохзначны лік. Напішыце праграму, якая знаходзіць сярэднюю лічбу. Этапы выканання задання I. Зыходныя даныя: пераменная а. II. Вынік: пераменная b (пераўтвораны лік). III. Алгарытм рашэння задачы. 1. Увод зыходных даных. IV. Апісанне пераменных: a, b — int. Прыклад 2.10. У гістарычнай кнізе, якую чытала Таня, даўжыня адрэзу тканіны вымяралася ў локцях. Напісаць праграму, якая перавядзе локці ў метры і сантыметры. Этапы выканання задання I. Зыходныя даныя: пераменная l (локці). II. Вынік: пераменныя m (метры) і s (сантыметры). III. Алгарытм рашэння задачы. 1. Увод зыходных даных. IV. Апісанне пераменных: l, x, m, s — int. Прыклад 2.11. Напісаць праграму, якая вызначыць поўную колькасць гадзін і мінут, якія прайшлі ад пачатку сутак да таго моманту (у першай палове сутак), калі гадзіннікавая стрэлка павярнулася на f градусаў (0 ≤ f < 360, f — цэлы лік). Этапы выканання задання I. Зыходныя даныя: пераменная f (колькасць градусаў). II. Вынік: пераменныя с (гадзіны) і m (мінуты). III. Алгарытм рашэння задачы. 1. Увод зыходных даных. IV. Апісанне пераменных: f, c, m — int. Прыклад 2.12. Дадзены цэлы лік а3 і а10 за чатыры аперацыі множання (іншыя аперацыі выкарыстоўваць нельга). Этапы выканання задання I. Зыходныя даныя: пераменная a. II. Вынік: пераменныя a3 (a3) і a10 (a10). III. Алгарытм рашэння задачы. 1. Увод зыходных даных. а) a2 = a ∙ a (1-е множанне); б) a3 = a2 ∙ a (2-е множанне); в) a5 = a2 ∙ a3 (3-е множанне); г) a10 = a5 ∙ a5 (4-е множанне). 3. Вывад выніку. IV. Апісанне пераменных: a, a2, a3, a5, a10 — long long. |
Прыклад 2.8. V. Праграма:
VI. Тэсціраванне праграмы. Запусціце праграму і ўвядзіце значэннe c = 137. Вынік павінен быць наступным: Прыклад 2.9. V. Праграма:
VI. Тэсціраванне праграмы. Запусціце праграму і ўвядзіце значэнне a = 452. VII. Вынік: пераменная b (сярэдняя лічба лiку). Некаторыя старарускія адзінкі даўжыні: 1 локаць = 45 см, 1 аршын = 16 выршкоў, 1 вяршок = 4 ногці, 1 ногаць≈ 11 мм. Прыклад 2.10. V. Праграма:
VI. Тэсціраванне праграмы: Запусціце праграму і ўвядзіце значэнне l = 7. Вынік павінен быць наступным: Прыклад 2.11.
V. Праграма:
VI. Тэсціраванне праграмы. Запусціце праграму і ўвядзіце значэнне f = 85. Вынік павінен быць наступным: Прыклад 2.12. V. Праграма:
VI. Тэсціраванне праграмы. Запусціце праграму і ўвядзіце значэнні l = 3. Вынік павінен быць наступным: |
Пытанні к параграфу
1. Што разумеюць пад тэсціраваннем праграмы? 2. Для чаго можна выкарыстоўваць каментарыі? 3. Які тып даных можна выкарыстоўваць у C++ для работы з цэлалікавымі данымі? 4. Якое максімальнае значэнне можна задаць пераменнай тыпу int? 5. Якія аперацыі вызначаны для цэлалікавых даных? |
Практыкаванні
1. Адкажыце на пытанні для прыкладу2.12.
- Чаму ў праграме выкарыстаны тып long long, а не тып int?
- Увядзіце значэнне 123. Чаму атрымалі адмоўны вынік?
- Для якога найбольшага ліку праграма выдае правільны адказ?
- Што можна змяніць у праграме, каб не атрымаць адмоўныя значэнні?
2. Дадзены x, y. Напішыце праграму для вылічэння значэння арыфметычнага выразу.
1. 2. 3.
3. Напішыце праграму для рашэння геаметрычнай задачы.
1. Знайсці даўжыню акружнасці і плошчу круга зададзенага радыуса. Значэнне ліку π можна вылічыць з роўнасці:
2. Раўнабедраны трохвугольнік зададзены даўжынямі асновы і вышыні. Знайсці яго плошчу і даўжыню бакавой стараны.
3. Вылічыць плошчу кольца, унутраны радыус якога роўны R1, а знешні R2.
4. Трохвугольнік зададзены велічынямі сваіх вуглоў і радыусам апісанай акружнасці. Знайсці стораны трохвугольніка.
4. Напішыце праграму для рашэння фізічнай задачы.
1. Аўтамабіль праходзіць першую частку шляху даўжынёй S1 км за t1 мін, участак шляху даўжынёй S2 км за t2 мін і, нарэшце, участак даўжынёй S3 км за t3 мін. Знайдзіце сярэднюю скорасць аўтамабіля, адлюстраваную ў км/г.
2. Вызначыце паскарэнне, выкліканае сілай прыцягнення, на вышыні h = kRЗ ад паверхні Зямлі (значэнне k уводзіцца), калі на паверхні Зямлі яго модуль g = 9, 81 м / с2.
5. Напішыце праграму для рашэння хімічнай задачы.
1. У арганізме чалавека на долю атамаў кіслароду прыпадае 65 % ад масы цела. Знайдзіце масу атамаў кіслароду для сваёй масы цела.
2⃰. Маса аднаго атама кіслароду 26.56 ∙ 10−27 (гэты лік у праграме на мове C++ запісваецца так: 26.56E–27, літара E — англійская). Вызначыце, колькі атамаў кіслароду змяшчаецца ў вашым целе.
6. Напішыце праграмы для рашэння задач. Выкарыстоўвайце аперацыі / и %.
1. Зададзены двухзначны лік. Знайдзіце сярэдняе арыфметычнае лічбаў ліку.
2. Зададзены трохзначны лік. Знайдзіце суму лічбаў ліку.
3. Дадзена маса ў грамах. Перавядзіце яе ў кілаграмы і грамы.
4. Плошча ўчастка вымяраецца ў арах. Знайдзіце колькасць поўных км2.
5. З пачатку месяца прайшло m мін. Вызначыць, якое зараз чысло і колькі зараз часу (у гадзінах і мінутах).
7⃰. Для старарускай сістэмы вагі вядомыя наступныя суадносіны:
1 беркавец = 10 пудоў = 400 фунтаў = 38 400 залатнікоў
Напішыце праграму, якая пераводзіць масу, зададзеную ў залатніках, у фунты, пуды і беркаўцы.
8. Напісаць праграму, якая вызначыць f — вугал (у градусах) паміж становішчам гадзіннікавай стрэлкі ў пачатку сутак і яе становішчам у h г m мін (0 ≤ h < 12, 0 ≤ m < 60).
9. Ад пачатку сутак прайшло h поўных гадзін (0 ≤ h < 12). Вядома, што зараз паміж гадзіннікавай і мінутнай стрэлкамі вугал у f градусаў (0 ≤ f < 360, f — цэлы лік). Колькі зараз можа быць мінут?
10. Напішыце праграмы для рашэння задач.
1. Дадзены цэлы лік а. Не карыстаючыся ніякімі іншымі арыфметычнымі дзеяннямі, акрамя множання, атрымаць а9 за чатыры аперацыі.
2. Дадзены цэлы лік а. Не карыстаючыся ніякімі іншымі арыфметычнымі дзеяннямі, акрамя множання, атрымаць а2, а5 і а17 за шэсць аперацый.
3. Дадзены цэлы лік а. Не карыстаючыся ніякімі іншымі арыфметычнымі дзеяннямі, акрамя множання, атрымаць а15 за пяць аперацый.
4. Дадзены рэчыўны лік х. Не карыстаючыся ніякімі іншымі арыфметычнымі дзеяннямі, акрамя складання, аднімання і множання, вылічыць 2х4 – 3х3 + 4х2 – 5х + 6. Дазваляецца выкарыстоўваць не больш за 4 множанні і не больш за 4 складанні і адніманні.