Печатать книгуПечатать книгу

§ 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 для распрацоўкі праграм на мове С++.    
Лагатып Назва Каментарыі
Microsoft Visual Studio Падтрымлівае не толькі C++, але і  іншыя мовы: Visual Basic, C# і F#
Eclipse Першапачаткова падтрымлівала толькі Java, працуе пад рознымі аперацыйнымі сістэмамі: Windows/Linux/Mac OS X
CLion Кросплатфор-менная шматфункцыянальная IDE. У ёй можна пісаць на C і C++ і займацца вэб-распрацоўкай на HTML(5), CSS, JavaScript, XML
Code::Blocks

Кросплатформенная, свабодная і адкрытая IDE для C і C++, напісаная з выкарыстаннем GNU C++, мож-на выкарыстоўваць для мовыFortran

Dev-C++

Бясплатнае інтэграванае асяроддзе распрацоўкі для Windows з адкрытым зыходным кодам, патрабуецца ўсяго пару мінут для яе ўстаноўкі

 Среда программирования Code::Blocks

Работа з асяроддзем праграміравання  Code::Blocks[1] пачынаецца са стварэння праекта (прыклад 1.2).

Працэс стварэння праекта складаецца з некалькіх крокаў.

1. Выбар тыпу праекта — кансольны дадатак .
2. Выбар мовы праграміравання
 — С++.
3. Выбар папкі для захавання праекта і імені праекта
 (прыклад 1.3). У шляху да папкі праекта не павінна быць рускіх літар і прабелаў (у адваротным выпадку могуць узнікаць праблемы з наладкай).
4. Выбар кампілятара і параметраў наладчыка (тут пакінуць настройкі па змоўчанні)
.

Пасля завяршэння будзе створана папка, імя якой было паказана ў радку «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.

Запуск і кампіляцыя праграм: 

 

Спіс праектаў (імя актыўнага праекта вылучана паўтлустым шрыфтам):

Праграму перад запускам трэба скампіляваць ці выкарыстаць значок, які аб’ядноўвае гэтыя два працэсы. Калі ў праграму ўнесены змяненні і яна запушчана без папярэдняй кампіляцыі, то будзе ажыццёўлены запуск папярэдняй версіі праграмы.

Скампіляваны файл можа быць захаваны ў папцы Release. У гэтым выпадку не захоўваецца інфармацыя, з дапамогай якой можна праводзіць наладку праграмы. Пры кампіляцыі выкарыстоўваецца аптымізацыя кода. Выбар рэжыму кампіляцыі:

 Структура программы

Праграма на мове C++ складаецца з функцый, апісанняў, каманд і дырэктыў прэпрацэсара (прэпрацэсар — праграма, якая выконвае апрацоўку файла зыходнага кода перад пачаткам кампіляцыі).

Пры стварэнні праекта ў акне рэдагавання кода ўжо напісана праграма  (прыклад 1.6).

#include <iostream>
using namespace std;
int main()
{
  cout << "Hello world!" << endl;
  return 0;
}

Для мовы С++ напісана вялікая колькасць бібліятэк, якія змяшчаюць каманды мовы. Падключэнне бібліятэкі ажыццяўляецца дырэктывай #include. Далей паказваецца імя бібліятэкі, пададзенае ў вуглавых дужках: < >.

У першым радку з дапамогай дырэктывы #include падключаецца загаловачны файл бібліятэкі <iostream>, які змяшчае неабходную інфармацыю для кіравання ўводам/вывадам..

Наступная дырэктыва using адкрывае доступ да прасторы імёнаў namespace std, у якой вызначаюцца сродкі стандартнай бібліятэкі мовы C++. Прастора імёнаў — некаторае мноства, створанае для лагічнай групоўкі ўнікальных ідэнтыфікатараў.

Праграма пачынаецца ключавымі словамі int main()далей у фігурных дужках ідуць каманды мовы. Кожная каманда павінна заканчвацца «;». Апошняя каманда return 0[1].

Вынік работы праграмы адлюстроўваецца ў асобным кансольным акне  (прыклад 1.7).

Мова С++ адчувальная да рэгістра выкарыстоўваемых сімвалаў. Гэта азначае, што каманды, якія павінны быць запісаны малымі літарамі, не будуць распазнаны кампілятарам, калі іх запісаць вялікімі.


[1] Падрабязна пра прызначэнне гэтых каманд вы даведаецеся пазней.

Згодна з традыцыяй, распачатай у 1978 г. з прыкладу з кнігі Браяна Кернігана і Дзяніса Рытчы «Мова праграміравання Сі», першая праграма на любой мове праграміравання павінна проста выводзіць на экран прывітанне свету.

Прыклад 1.6. Акно асяроддзя Code::Blocks з тэкстам работы праграмы. 

 Строку    using namespace std;    можно опустить, но тогда нужно будет перед каждой командой, имя которой описано в пространстве имен     std   прописывать   std::.   Например

  std::cout << "Hello world!" << std:: endl;  

У вялікіх праектах, у якіх выкарыстоўваюцца розныя прасторы імёнаў, а не толькі стандартнае, звычайна так і паступаюць. У вучэбных праектах выкарыстоўваецца толькі стандартная прастора імёнаў. Таму прапісваецца дырэктыва пра выкарыстанне прасторы імёнаў  std.  

Прыклад 1.7. Кансольнае акно з вынікам работы праграмы:

Адчувальнасць да рэгістра належыць і да імёнаў пераменных. Для кампілятара С++ пераменныя з імёнамі 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. Выкарыстанне рускіх сімвалаў:

int main()

{

    setlocale(0"");

    cout << "Привет" << endl;

    return 0;

Вынік работы праграмы:

Паколькі рускія літары не заўсёды адлюстроўваюцца карэктна, рэкамендуецца пісаць тэсты па-англійску або транслітам.

Прыклад 1.10. Тэкст праграмы:

int main()

{

    cout << "2+2*2=";

    cout << (2+2*2) << endl;

    return 0;

}

Вынік работы праграмы:

Дзве каманды 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 x;

double x1 = 0, y1 = 2.4;
double a_2 = -1.7, a_3;

Дыяпазон магчымых значэнняў тыпу double задаецца лікамі ў стандартным уяўленні ад 1.7∙10308 да 1.7∙10308. Самы маленькі дадатны лік тыпу double прыблізна роўны 4.9∙10324. Пры вылічэннях у ліку захоўваецца 15—16 лічбаў.

У С++, акрамя тыпу даных double, могуць выкарыстоўвацца float і long double.

Тып Дыяпазон значэнняў Колькасць лічбыў
float 3.4∙1038 .. 3.4∙10+38 7—8
long double 3.4∙104932 .. 3.4∙10+4932 19—20

Пераменныя тыпу double займаюць у памяці камп’ютара 64 біты, float — 32 біты, long double — 80 біт.

Аперацыя прысвойвання

Адной з асноўных каманд для апрацоўкі даных у праграме з’яўляецца аперацыя прысвойвання. Аперацыя прысвойвання выкарыстоўваецца для таго, каб:

  • задаваць значэнні пераменным;
  • вылічваць значэнні арыфметычнага выразу, вынік чаго будзе запісаны як значэнне пераменнай.

Выкарыстоўваць прысвойванне можна наступным чынам:

<імя пераменнай> = <выраз>;

У запісе арыфметычнага выразу выкарыстоўваюцца знакі матэматычных дзеянняў: складання, аднімання, множання, дзялення (прыклад 1.12). У мове С++ ім адпавядаюць тыя ж сімвалы, што і ў мове Pascal: «+», «–», «*», «/».

Прыярытэт выканання аперацый адпавядае прынятаму ў матэматыцы: спачатку выконваюцца множанне і дзяленне, а затым складанне і адніманне. Для змянення парадку дзеянняў у выразах выкарыстоўваюцца дужкі (прыклад 1.13).

Для запісу звычайнага дробу выкарыстоўваецца знак дзялення. Знак множання прапускаць нельга. Цэлая частка дробавага ліку аддзяляецца ад дробавай часткі кропкай.

Прыклад 1.12. Прыклады запісу аператара прысвойвання:

x = 7;

x1 = 3.5;

a_1 = 20 * x + x1 - 32;

y = y + 7;

Прыклад 1.13. Выкарыстанне аперацыі прысвойвання для запісу матэматычных выразаў:

Выраз Запіс на С++
S = (a + b) S = 2*(a + b);
S = a2 S = a * a;
begin mathsize 16px style a space equals fraction numerator x plus y over denominator 3 end fraction end style a = (x + y)/3;

У С++, як і ў Pascal, дапушчальныя каманды прысвойвання наступнага выгляду:

  a = a * 2;

Каманда мае наступны сэнс: з ячэйкі памяці здабываецца значэнне пераменнай a, затым яно памнажаецца на 2, вынік запісваецца ў тую ж ячэйку памяці. Старое значэнне пераменнай a будзе страчана.

Каманды, якія змяняюць значэнні пераменнай у С++, прынята запісваць у скарочаным выглядзе:

Поўны запіс Скарочаны запіс
a = a + 2; a += 2;
b = b - 3; b -= 3;
c = c * 2.3; a *= 2.3;
d = d / 4.5; /= 4,5;

Найбольш часта сустракаецца змяненне пераменнай на 1. Такія запісы можна скарачаць па-іншаму:

Поўны запіс Скарочаны запіс
a = a + 1; a++;
b = b - 1; b--;

Увод даных

Пачатковыя значэнні пераменным можна задаваць не толькі з дапамогай аператара прысвойвання, але і ўводзіць з клавіятуры. У гэтым выпадку, калі неабходны вылічэнні з новым наборам значэнняў зыходных даных, тэкст праграмы не трэба змяняць.

Для ўводу даных выкарыстоўваецца наступная каманда:

cin >> <імя пераменнай>;

У гэтай камандзе: cin — паток, які адпавядае стандартнаму ўводу, значок  >> абазначае дзеянне «атрымаць з уваходнага патоку значэнне пераменнай».

Калі пераменных некалькі, іх імёны аддзяляюцца знакамі >>.

Увод даных адбываецца ў кансольным акне, якое з’яўляецца пасля запуску праграмы. Пасля завяршэння работы праграмы ў гэтым жа акне будзе выведзены вынік (прыклад 1.14).

Прыклад 1.14. Увесці два лікі, знайсці і вывесці іх суму

Тэкст праграмы:

include <iostream>

using namespace std;

int main()

{

  cout << "Vvedi 2 chisla" << endl;

  double x, y;

  cin >> x; 

  cin >> y;

  double z = x + y;

  cout << "z=" << z << endl;

  return 0;

}

Вынік работы праграмы:

Дзве пераменныя можна ўвесці з дапамогай адной каманды:

     cin >> x >> y;      

Вылічэнне значэння выразу

Прыклад 1.15. Дадзены рэчыўныя x, y, z. Напісаць праграму для вылічэння значэння выразу begin mathsize 16px style straight a equals fraction numerator 2 x plus 3 y minus z over denominator 3 plus x squared end fraction end style.

Этапы выканання задання

I. Зыходныя даныя: пераменныя x, y, z.

II. Вынік: пераменная  a.

III. Алгарытм рашэння задачы. 

1. Увод зыходных даных.
2. Вылічэнне значэння выразу.
3. Вывад выніку.

IV. Апісанне пераменных: усе пераменныя, вызначаныя для рашэння задачы, маюць тып тип double.

У прыведзеным прыкладзе перад кожнай камандай уводу запісана каманда вываду з тлумачэннямі пра тое, значэнне якой пераменнай трэба ўводзіць.

Прыклад 1.15.  

V. Праграма: 

#include <iostream>

 

using namespace std;

 

int main()

{

  double x, y, z;

  cout << "vvedi x = ";

  cin >> x;

  cout << "vvedi y = ";

  cin >> y;

  cout << "vvedi z = ";

  cin >> z;

  double a = (2 * x + 3 * y - z) /
       
 (3 + x * x);

  cout << "a=" << a << endl;

  return 0;

}

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.  a equals space fraction numerator x space plus space y space minus space z over denominator x to the power of 2 space end exponent plus space 2 end fraction                                 2.  a space equals space 5 space plus space fraction numerator 2 x space minus space z over denominator 3 space plus space y squared end fraction                         3.  a space equals space left parenthesis 1 space plus space z space right parenthesis fraction numerator x space plus space begin display style fraction numerator y over denominator x squared space plus space 4 end fraction end style over denominator 2 space plus space begin display style fraction numerator 1 over denominator x squared space plus space 4 end fraction end style end fraction