§ 1. Лікавыя тыпы даных. Увод-вывад даных
Сайт: | Профильное обучение |
Курс: | Інфарматыка. 10 клас (Павышаны ўзровень) |
Книга: | § 1. Лікавыя тыпы даных. Увод-вывад даных |
Напечатано:: | Гость |
Дата: | Понедельник, 29 Апрель 2024, 23:23 |
Язык программирования С++
Мова C++ з’яўляецца кампіляванай мовай праграміравання агульнага прызначэння. Яна падтрымлівае наступныя парадыгмы праграміравання: працэдурнае праграміраванне і аб’ектна-арыентаванае праграміраванне. Мова мае стандартную бібліятэку, якая ўключае ў сябе распаўсюджаныя тыпы даных і алгарытмы. Мова C++ выкарыстоўваецца для распрацоўкі праграмнага забеспячэння і з’яўляецца адной з самых папулярных моў праграміравання. Яна дазваляе ствараць аперацыйныя сістэмы і дадаткі для сервераў; выкарыстоўваецца для напісання драйвераў устройстваў і дадаткаў для сістэм, якія ўбудоўваюцца; на ёй напісана вялікая колькасць прыкладных праграм і камп’ютарных гульняў. Сінтаксіс C++ атрыманы ў спадчыну ад мовы C. Адным з прынцыпаў распрацоўкі мовы С++ было захаванне сумяшчальнасці з мовай C. Існуе вялікая колькасць праграм, якія могуць аднолькава паспяхова трансліравацца як кампілятарамі C, так і кампілятарамі C++. У мове С++ найбольшая ўвага нададзена падтрымцы аб’ектна-арыентаванага праграміравання. Сёння існуе вялікая колькасць розных рэалізацый мовы C++, як бясплатных, так і камерцыйных. Напрыклад, GCC, Visual C++, Embarcadero (Borland) C++ Builder і інш. C++ зрабіла вялізны ўплыў на развіццё іншых моў праграміравання, у першую чаргу на Java і C#, якія ў значнай меры атрымалі ў спадчыну яе сінтаксіс. Асяроддзяў распрацоўкі (Integrated Development Environment, IDE — інтэграванае асяроддзе распрацоўкі) на C++ вельмі шмат. Найбольш вядомыя з іх паказаны ў прыкладзе прыкладзе 1.1. У першую чаргу выбар IDE залежыць ад узроўню праграміравання. Для навічкоў лепшыя асяроддзі распрацоўкі — Dev-C++ ці Code::Blocks. Для прафесіяналаў падыдуць CLion ці Visual Studio. Таксама трэба прымаць да ўвагі АС, паколькі не ўсе асяроддзі кросплатформенныя. У электронным дадатку разглядаецца асяроддзе Code::Blocks. |
Мова C++ узнікла ў пачатку 1980-х гг., калі супрацоўнік фірмы Bell Labs Б’ёрн Страуструп (нарадзіўся ў 1950 г. у Даніі) прыдумаў шэраг удасканаленняў да мовы C.
У мову C былі дабаўлены класы, унаследаванне класаў, строгая праверка тыпаў, inline-функцыі і аргументы па змоўчанні. Раннія версіі мовы, першапачаткова названай «C with classes» («Сі з класамі»), сталі даступныя з 1980 г. Да пачатку афіцыйнай стандартызацыі мова развівалася галоўным чынам сіламі Б. Страуструпа ў адказ на запыты праграмісцкай суполкі. У 1998 г. быў ратыфікаваны міжнародны стандарт мовы C++. Апошняя версія стандарту (С++17, таксама вядомая як C++1z) прынята ў 2017 г. Прыклад 1.1. Некаторыя IDE для распрацоўкі праграм на мове С++.
|
Среда программирования Code::Blocks
Работа з асяроддзем праграміравання Code::Blocks[1] пачынаецца са стварэння праекта (прыклад 1.2). Працэс стварэння праекта складаецца з некалькіх крокаў. 1. Выбар тыпу праекта — кансольны дадатак . Пасля завяршэння будзе створана папка, імя якой было паказана ў радку «Project title». У гэтай папцы будуць захаваны файлы праекта (прыклад 1.4). Файл з расшырэннем .cbp (Code::Blocks project) і імем, якія супадаюць з імем папкі, — файл, што змяшчае апісанне праекта (пры двайным кліку па гэтым файле праект будзе адкрыты ў асяроддзі Code::Blocks); файл main.cpp — файл, які змяшчае код на мове С++ (расшырэнне .cpp — C plus plus). Акно праграмы складаецца з некалькіх абласцей (прыклад 1.5). Цалкам акно прыведзена ў гл. Дадатак да главы 1. У асяроддзі Code::Blocks можа быць адначасова створана (File → New → Project) ці адкрыта (File → Open…) некалькі праектаў. Кампілюецца і выконваецца толькі адзін — той, які з’яўляецца актыўным. Змяніць актыўны праект можна двайным клікам мышы па імені праекта. Пры кампіляцыі праграмы ствараецца выконваемы файл з расшырэннем .exe і імем, якія супадаюць з імем праекта. Гэты файл захоўваецца ў папцы Debug (якая ствараецца пры першай кампіляцыі праекта). Пры націсканні на кнопку ажыццяўляецца запуск менавіта гэтага файла. Скампіляваны файл можа быць запушчаны па-за асяроддзем праграміравання. [1] Загрузіць асяроддзе можна па адрасе: http://www.codeblocks.org/downloads/binaries. Для АС Windows спампаваць файл codeblocks-20.03mingw-setup.exe. |
Прыклад 1.2. Стартавая старонка асяроддзя распрацоўкі Code::Blocks. Прыклад 1.3. Выбар папкі і імені праекта. Прыклад 1.4. Файлы праекта. Прыклад 1.5. Вобласці акна праграмы Code::Blocks. Запуск і кампіляцыя праграм: Спіс праектаў (імя актыўнага праекта вылучана паўтлустым шрыфтам): Праграму перад запускам трэба скампіляваць ці выкарыстаць значок, які аб’ядноўвае гэтыя два працэсы. Калі ў праграму ўнесены змяненні і яна запушчана без папярэдняй кампіляцыі, то будзе ажыццёўлены запуск папярэдняй версіі праграмы. |
Структура программы
Праграма на мове C++ складаецца з функцый, апісанняў, каманд і дырэктыў прэпрацэсара (прэпрацэсар — праграма, якая выконвае апрацоўку файла зыходнага кода перад пачаткам кампіляцыі). Пры стварэнні праекта ў акне рэдагавання кода ўжо напісана праграма (прыклад 1.6). #include <iostream> Для мовы С++ напісана вялікая колькасць бібліятэк, якія змяшчаюць каманды мовы. Падключэнне бібліятэкі ажыццяўляецца дырэктывай #include. Далей паказваецца імя бібліятэкі, пададзенае ў вуглавых дужках: < >. У першым радку з дапамогай дырэктывы #include падключаецца загаловачны файл бібліятэкі <iostream>, які змяшчае неабходную інфармацыю для кіравання ўводам/вывадам.. Наступная дырэктыва using адкрывае доступ да прасторы імёнаў namespace std, у якой вызначаюцца сродкі стандартнай бібліятэкі мовы C++. Прастора імёнаў — некаторае мноства, створанае для лагічнай групоўкі ўнікальных ідэнтыфікатараў. Праграма пачынаецца ключавымі словамі int main(), далей у фігурных дужках ідуць каманды мовы. Кожная каманда павінна заканчвацца «;». Апошняя каманда return 0; [1]. Вынік работы праграмы адлюстроўваецца ў асобным кансольным акне (прыклад 1.7). Мова С++ адчувальная да рэгістра выкарыстоўваемых сімвалаў. Гэта азначае, што каманды, якія павінны быць запісаны малымі літарамі, не будуць распазнаны кампілятарам, калі іх запісаць вялікімі. |
Згодна з традыцыяй, распачатай у 1978 г. з прыкладу з кнігі Браяна Кернігана і Дзяніса Рытчы «Мова праграміравання Сі», першая праграма на любой мове праграміравання павінна проста выводзіць на экран прывітанне свету. Строку using namespace std; можно опустить, но тогда нужно будет перед каждой командой, имя которой описано в пространстве имен std, прописывать std::. Например: std::cout << "Hello world!" << std:: endl; У вялікіх праектах, у якіх выкарыстоўваюцца розныя прасторы імёнаў, а не толькі стандартнае, звычайна так і паступаюць. У вучэбных праектах выкарыстоўваецца толькі стандартная прастора імёнаў. Таму прапісваецца дырэктыва пра выкарыстанне прасторы імёнаў std. Адчувальнасць да рэгістра належыць і да імёнаў пераменных. Для кампілятара С++ пераменныя з імёнамі n і N — гэта розныя пераменныя.
|
Каманда вываду
Дэманстраваць работу любой праграмы мае сэнс толькі тады, калі яна выводзіць якую-небудзь інфармацыю. У бібліятэцы iostream рэалізавана падтрымка для ўводу і вываду ўбудаваных даных тыпаў з выкарыстаннем стандартных патокаў[1]. Для вываду даных выкарыстоўваецца наступная каманда: cout << значение; У гэтай камандзе: cout — паток, які адпавядае стандартнаму вываду, значок << абазначае дзеянне «памясціць значэнне ў выхадны паток». Функцыя endl, запісаная ў канцы каманды cout, азначае, што пасля вываду курсор будзе пераведзены на наступны радок.. Тэкст, які трэба вывесці на экран, пішуць у двайным двукоссі. Гэты тэкст не аналізуецца і выводзіцца на экран у тым выглядзе, у якім ён запісаны. Калі запісаць тэкст на рускай мове, то на кансолі ўбачым незразумелыя сімвалы (прыклад 1.8). Для карэктнага вываду рускіх сімвалаў неабходна каманда setlocale(0, ""); (прыклад 1.9). Тэкст у камандзе cout, запісаны ў двукоссі, не аналізуецца. Калі двукоссе прапусціць, то выконваецца аналіз даных. Напрыклад, калі напісаць арыфметычны выраз, то спачатку вылічваецца яго значэнне, а затым выводзіцца вынік. Прыклад 1.10. Палічыць значэнне выразу 2 + 2 * 2. ____________________________ [1] Падрабязна пра прызначэнне гэтых каманд вы даведаецеся пазней. Паток — гэта незалежная паслядоўнасць інструкцый для выканання таго ці іншага дзеяння ў праграме. У адным пэўным патоку выконваецца адна пэўная паслядоўнасць дзеянняў.
|
Прыклад 1.8. Вывад рускіх сімвалаў: Прыклад 1.9. Выкарыстанне рускіх сімвалаў:
Вынік работы праграмы: Паколькі рускія літары не заўсёды адлюстроўваюцца карэктна, рэкамендуецца пісаць тэсты па-англійску або транслітам. Прыклад 1.10. Тэкст праграмы:
Вынік работы праграмы: Дзве каманды cout у праграме можна аб’яднаць у адну, аддзяліўшы тэкст ад выразу знакамі <<: cout << "2+2*2=" << (2+2*2) << endl; Калі запісаць выраз у двукоссі, то будзе выведзены сам выраз. Пры адсутнасці двукосся на экран будзе выведзена значэнне дадзенага выразу. |
Паняцце тыпу данных
На практыцы рэдка даводзіцца пісаць праграмы, якія рашаюць толькі адну задачу. Звычайна праграмы пішуцца для рашэння цэлага класа задач, якія можна сфармуляваць у агульным выглядзе. У праграміраванні для рашэння задач у агульным выглядзе таксама выкарыстоўваюць пераменныя. Паколькі з такімі пераменнымі будзе працаваць камп’ютар, то яны павінны захоўвацца ў яго памяці. Інфармацыю, пададзеную ў выглядзе, прыдатным для апрацоўкі на камп’ютары, называюць данымі. Пераменная ў праграміраванні — найменная ячэйка памяці, якая захоўвае значэнне пераменнай. Камп’ютар можа апрацоўваць даныя розных тыпаў: цэлыя і рэчаісныя лікі, сімвалы, тэксты і інш. Тып даных вызначае спосаб захоўвання даных у памяці камп’ютара, дыяпазон магчымых значэнняў даных і аперацыі, якія з гэтым тыпам даных можна выконваць. Для таго каб выкарыстоўваць якую-небудзь пераменную, яе неабходна апісаць. Апісанне пераменных выконваецца перад іх выкарыстаннем і можа размяшчацца ў любым месцы праграмы. Пры апісанні пераменнай вылучаецца памяць для захоўвання яе значэння. Пераменная атрымлівае значэнне, якое захоўвалася па вылучаным адрасе. Пераменную пры апісанні можна ініцыялізаваць (задаць значэнне). У працэсе выканання праграмы значэнне пераменнай можа змяняцца. Фармат апісання пераменнай: <тып> <імя пераменнай>; Для абазначэння імя пераменнай выкарыстоўваюцца літары лацінскага алфавіта, лічбы і знак «_». Першым сімвалам павінна быць літара або знак падкрэслівання (прыклад 1.11). Тып даных double у мове праграміравання C++ дазваляе працаваць з лікамі і выконваць над імі арыфметычныя дзеянні: складанне, адніманне, множанне і дзяленне. Гэты тып адпавядае тыпу real у мове праграміравання Pascal. |
Даведачную інфармацыю пра мову праграміравання C++ можна знайсці ў Інтэрнэце. Адным з найбольш вядомых рэсурсаў з’яўляецца сайт cppreference.com. Рускамоўная версія сайта даступная па адрасе https://ru.cppreference.com/ Першай мовай праграміравання, у якой з’явілася магчымасць ствараць пераменныя, лічыцца Асэмблер. У 1957 г. з’явілася мова Фартран, якая дазволіла выкарыстоўваць розныя лікавыя тыпы даных, неабходныя для складаных разлікаў: цэлыя, рэчаісныя (сапраўдныя) і комплексныя. Мова праграміравання C++ падтрымлівае магчымасць работы з вялікай колькасцю разнастайных тыпаў даных. Тут можна знайсці аналагі ўсіх тых тыпаў даных, якія знаёмыя з мовы праграміравання Pascal. Прыклад 1.11. Прыклады апісання пераменных:
Дыяпазон магчымых значэнняў тыпу double задаецца лікамі ў стандартным уяўленні ад −1.7∙10308 да 1.7∙10308. Самы маленькі дадатны лік тыпу double прыблізна роўны 4.9∙10−324. Пры вылічэннях у ліку захоўваецца 15—16 лічбаў. У С++, акрамя тыпу даных double, могуць выкарыстоўвацца float і long double.
Пераменныя тыпу double займаюць у памяці камп’ютара 64 біты, float — 32 біты, long double — 80 біт. |
Аперацыя прысвойвання
Адной з асноўных каманд для апрацоўкі даных у праграме з’яўляецца аперацыя прысвойвання. Аперацыя прысвойвання выкарыстоўваецца для таго, каб:
Выкарыстоўваць прысвойванне можна наступным чынам: <імя пераменнай> = <выраз>; У запісе арыфметычнага выразу выкарыстоўваюцца знакі матэматычных дзеянняў: складання, аднімання, множання, дзялення (прыклад 1.12). У мове С++ ім адпавядаюць тыя ж сімвалы, што і ў мове Pascal: «+», «–», «*», «/». Прыярытэт выканання аперацый адпавядае прынятаму ў матэматыцы: спачатку выконваюцца множанне і дзяленне, а затым складанне і адніманне. Для змянення парадку дзеянняў у выразах выкарыстоўваюцца дужкі (прыклад 1.13). Для запісу звычайнага дробу выкарыстоўваецца знак дзялення. Знак множання прапускаць нельга. Цэлая частка дробавага ліку аддзяляецца ад дробавай часткі кропкай. |
Прыклад 1.12. Прыклады запісу аператара прысвойвання:
Прыклад 1.13. Выкарыстанне аперацыі прысвойвання для запісу матэматычных выразаў:
У С++, як і ў Pascal, дапушчальныя каманды прысвойвання наступнага выгляду:
a = a * 2;
Каманда мае наступны сэнс: з ячэйкі памяці здабываецца значэнне пераменнай a, затым яно памнажаецца на 2, вынік запісваецца ў тую ж ячэйку памяці. Старое значэнне пераменнай a будзе страчана. Каманды, якія змяняюць значэнні пераменнай у С++, прынята запісваць у скарочаным выглядзе:
Найбольш часта сустракаецца змяненне пераменнай на 1. Такія запісы можна скарачаць па-іншаму:
|
Увод даных
Пачатковыя значэнні пераменным можна задаваць не толькі з дапамогай аператара прысвойвання, але і ўводзіць з клавіятуры. У гэтым выпадку, калі неабходны вылічэнні з новым наборам значэнняў зыходных даных, тэкст праграмы не трэба змяняць. Для ўводу даных выкарыстоўваецца наступная каманда: cin >> <імя пераменнай>; У гэтай камандзе: cin — паток, які адпавядае стандартнаму ўводу, значок >> абазначае дзеянне «атрымаць з уваходнага патоку значэнне пераменнай». Калі пераменных некалькі, іх імёны аддзяляюцца знакамі >>. Увод даных адбываецца ў кансольным акне, якое з’яўляецца пасля запуску праграмы. Пасля завяршэння работы праграмы ў гэтым жа акне будзе выведзены вынік (прыклад 1.14). |
Прыклад 1.14. Увесці два лікі, знайсці і вывесці іх суму Тэкст праграмы:
Вынік работы праграмы: Дзве пераменныя можна ўвесці з дапамогай адной каманды: cin >> x >> y; |
Вылічэнне значэння выразу
Прыклад 1.15. Дадзены рэчыўныя x, y, z. Напісаць праграму для вылічэння значэння выразу . Этапы выканання задання I. Зыходныя даныя: пераменныя x, y, z. II. Вынік: пераменная a. III. Алгарытм рашэння задачы. 1. Увод зыходных даных. IV. Апісанне пераменных: усе пераменныя, вызначаныя для рашэння задачы, маюць тып тип double. У прыведзеным прыкладзе перад кожнай камандай уводу запісана каманда вываду з тлумачэннямі пра тое, значэнне якой пераменнай трэба ўводзіць. |
Прыклад 1.15. V. Праграма:
VI. Тэсціраванне праграмы. Для x = 2, y = 3, z = 1 вынік павінен быць наступным: VII. Праверыць правільнасць вылічэнняў можна на калькулятары. |
1. Якая каманда ў мове праграміравання C++ прызначана для вываду даных? 2. Што вызначае тып даных? 3. Для чаго выкарыстоўваецца каманда прысвойвання? 4. Якая каманда ў мове праграміравання C++ прызначана для ўводу даных? |
1. Уводзіцца ўзрост карыстальніка ў гадах. Вызначыць узрост карыстальніка праз 2 гады.
2. Напішыце праграму, у якой уводзяцца тры лікі: a, b і с. Няхай першы лік памяншаюць у два разы, а другі павялічваюць на 30, трэці памяншаюць на 1. Выведзіце змененыя значэнні пераменных.
3. Дадзены x, y, z. Напісаць праграму для вылічэння значэння арыфметычнага выразу.
1. 2. 3.