61
Міністерство освіти і науки, молоді та спорту України Державний вищий навчальний заклад Придніпровський енергобудівний технікум Курахівська філія ЗАТВЕРДЖУЮ Методист ___________В.М.Косенко _____________201__р. “_____” ________201__р. “_____” ________201__р. СИСТЕМНЕ ПРОГРАМУВАННЯ Методичні вказівки до виконання практичних робіт для студентів денної форми навчання спеціальності: 5.05010201 “Обслуговування комп’ютерних систем та мереж” Розглянуто та схвалено на засіданні ПЦК напрямку „Комп’ютерна інженерія” Протокол №___ від ___________ Склав викладач ________ Голова ПЦК ________ (Киричек О.В.) Переглянуто: Пр.№____від____________________ Пр.№____від____________________ Пр.№____від____________________ Курахове 2011

СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Міністерство освіти і науки, молоді та спорту України

Державний вищий навчальний заклад

Придніпровський енергобудівний технікум

Курахівська філія

ЗАТВЕРДЖУЮ Методист

___________В.М.Косенко

“_____” ________201__р.

“_____” ________201__р.

“_____” ________201__р.

СИСТЕМНЕ ПРОГРАМУВАННЯ

Методичні вказівки до виконання

практичних робіт

для студентів денної форми навчання спеціальності: 5.05010201

“Обслуговування комп’ютерних систем та мереж”

Розглянуто та схвалено

на засіданні ПЦК

напрямку

„Комп’ютерна інженерія”

Протокол №___ від ___________ Склав викладач ________

Голова ПЦК ________ (Киричек О.В.)

Переглянуто:

Пр.№____від____________________

Пр.№____від____________________

Пр.№____від____________________

Курахове

2011

Page 2: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Критерії оцінювання практичної роботи

„Незадовільно” - не розкриває основний зміст завдання; допускає грубі помилки в

кінцевих висновках; слабо володіє спеціальною термінологією.

„Задовільно” – зміст запитання викладає частково, не завжди послідовно; для

вирішення практичних завдань з труднощами використовує одержанні знання; не

пов’язує відповідь із раніше зробленими висновками та суміжними дисциплінами;

відповідь не повна, але суть запитання в цілому розкрита.

„Добре” – вміє комплексно вирішувати поставлене завдання; послідовно розкриває

основний зміст матеріалу і в цілому правильно виконує завдання; точно

використовує терміни, не допускає грубих помилок у розрахунках; практичну

роботу виконує згідно з вимогами. У відповідях можливі одна-дві неточності у

термінології, несуттєві висновки, помилки у підрахунках, які не змінюють суті

одержаних результатів.

„Відмінно” – вміє комплексно вирішувати поставлене завдання; повністю

розкриває зміст матеріалу з поставленого завдання або проблеми; чітко уявляє

зміст і вільно володіє професійною термінологією; грамотно ілюструє відповідь

схемами та таблицями; послідовно викладає матеріал з посиланнями на нормативні

документи; правильно застосовує одержані знання з різних дисциплін для

вирішення практичного завдання або проблеми; вільно володіє українською мовою.

Допустимі дві-три неточності у викладенні матеріалу, які не призводять до

помилкових висновків та рішень.

Підсумкова оцінка за практичне заняття являє собою арифметичне від

двох оцінок за завдання (усне опитування питань з теми, що виноситься на

практичне заняття; практичне завдання).

Page 3: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

ПРАКТИЧНА РОБОТА № 1

Розрахунок по формулам

Ціль: навчитися складати програми для розрахунку по формулам,

користуючись мовою програмування С++, проводити введення даних з

клавіатури та вивід даних на екран.

Теоретичні відомості.

1. Загальні відомості про мову програмування С++.

1.1. Алфавіт і словник.

Мова С++ оперує з наступним набором символів:

латинські прописні і рядкові букви (А, В, С, x, y, z);

арабські цифри (0, 1, 2 ., 7, 8, 9);

символ підкреслення;

спеціальні символи і символи-роздільники;

Спеціальні символи (+, - * / \\ > < & # і інші) та їх комбінації використовуються

для позначення операцій.

Символами-роздільниками вважаються пропуски, коментарі і кінці рядків.

Коментарі можуть містити будь-які символи, що йдуть слідом за знаком

подвійного слешу \\.

За допомогою перерахованих символів формуються імена, ключові

(службові)слова, числа, рядки символів, влучні.

Імена обов'язково починаються з латинської букви або символу підкреслення

«_», за якими можуть слідувати в будь-якій комбінації латинські букви і цифри. Не

допускається використовування для написання імен спеціальних символів і

символів-роздільників. Імена, вживані користувачем, для позначення конструкцій,

не повинні співпадати по написанню з ключовими словами.

Ім'я мітки переходу представляє символьно-цифрову конструкцію. Мітки в

програмі, що написана мовою С++, не оголошуються.

Рядок символів – це послідовність символів, укладена в лапки.

Числа, що позначають цілі і речовинні значення, записуються в десятковій

системі числення. Перед будь-яким числом може стояти «+» або «–». В дійсному

числі ціла частина від дробової відділяється крапкою.

1.2. Основні типи.

В C++ є набір основних типів, який приведений в таблиці 1.1.

Таблиця 1.1. Базові типи даних мови С++.

Тип Значення Розмір байтів

void (пустий, не має

значень)

сhar (символьний)

int (цілий)

unsigned (беззнаковий)

long (довгий)

float (з плаваючою комою)

double (з плаваючою

комою подвійної довжини)

Від -128 до 127

Від -32768 до 32767

Від 0 до 65535

Від -214748364 до 2147483647

Від -3.4Е-38 до 3.4Е+38

Від -1.7Е-308 до 1.7Е+308

1

2

2

4

4

8

Page 4: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Тип сhar служить для визначення символьних змінних та рядків.

Символьна змінна – це один символ, укладений в одинарні лапки, наприклад

‘а’, ’+’,’&’.

Рядок символів – це масив символів, що закінчується нульовим байтом. Кінець

символьного рядку (нульовий байт) позначається символом NULL (‘\0’). Рядки

символів укладаються в лапки, наприклад: „Рядок символів”.

Щоб використовувати змінну в програмі, її необхідно об’явити – вказати тип

змінної та її ім’я. Оператор об’явлення змінних мови С++ в загальному виді

виглядає так:

тип_змінної ім’я1, ..., ім’яN;

Наприклад:

int i; float x,e,z; char c, s[64];

Зверніть увагу, що при такій об’яві с – символьна змінна (зберігає один

символ), а s[64] – це рядок символів (масив символів).

1.3. Структура програми.

Програма, написана мовою С++, повинна мати заголовок і тіло програми, що

складається з однієї або декількох функцій.

Кожна програма починається з оператора #include. Наприклад:

#include<iostream.h>

Оператор #include повідомляє компілятор, які заголовні файли (файли з

розширенням h) потрібно включити в програму.

Заголовні файли – це файли, що містять визначення, які надаються

компілятором для виконання різних операцій (наприклад, операцій введення-

виведення, математичних операцій і т.д.). Заголовні файли записані у форматі

ASCII, їх вміст можна вивести для перегляду на екран або на принтер з каталогу

INCLUDE.

Тіло програми складається з однієї або декількох функцій. Кожна програма на

С++ містить головну функцію, з якої починається виконання програми. Головна

функція починається з оператора:

void main (void)

Після оператора початку головної функції слідують оператори програми,

укладені в групуючи фігурні дужки {}.

1.4. Вирази.

Будь-яка комбінація змінних, констант і операцій, що приводить до

обчислення деякого значення називається виразом. Наприклад, виразами є

конструкції alpha+12 або (alpha-37)*beta/2. Результатом виконання всіх операцій,

що входять до складу виразу, є значення. Так, наприклад, якщо alpha буде рівний 7,

то значення першого виразу буде рівне 19.

Вирази самі можуть входити до складу інших виразів. В другому прикладі

alpha-37 і beta/2 є виразами. Фактично кожну змінну і константу, наприклад alpha і

37, можна вважати окремим випадком виразу.

Вирази і оператори — це не одне і те ж. Оператори є вказівкою комп'ютеру

вчинити яку-небудь дію і завжди завершуються крапкою з комою (;). Вирази ж

лише визначають деяку сукупність обчислень. В одному операторі можуть бути

присутній декілька виразів

Page 5: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

1.5. Оператори мови С++.

Оператори мови С++ призначені для опису дій. Любий оператор може бути

позначений міткою. Оператори відділяються один від одного крапкою з комою (;).

До простих операторів мови С++ відносять оператор присвоювання, оператори

вводу та виводу даних, оператор переходу.

1.5.1 Оператор привласнення.

Оператор привласнення є основним, фундаментальним оператором. Загальний

вид оператора:

ім’я_змінної=вираз;

Наприклад: F=3*с+2*sin(x);

Вираз складається з операндів і операцій. Операндом може бути константа,

змінна або функція. Операції об'єднують операнди і вирази. Вид виразу однозначно

визначає правила його обчислення: дії виконуються зліва направо з дотриманням

старшинства, вказаного в таблиці пріоритетів.

Таблиця 1.2. Таблиця пріоритетів.

Математичні функції, що найчастіше використовуються в програмах мови

С++, знаходяться в бібліотеці math.h, що розташована в каталозі INCLUDE. Якщо

ви бажаєте користуватися цими функціями, то на початку програми необхідно

включити заголовний файл #include<math.h>.

Початкове значення змінної в мові С++ можна привласнити при її об’’яві,

наприклад, int х=16, у=32.

Оператор привласнення може використовуватися у виразах, які включають в

собі оператори порівняння або логічні оператори, наприклад:

if ((x=x+5)>0 cout << “вивід”;

В цьому прикладі спочатку виконується збільшення змінної х на 5, а потім її

значення порівнюється з нулем.

Для того, щоб привласнити однакове значення, наприклад 2*k, декільком

змінним, модна скористатися оператором привласнення: x=y=z=2*k;

В мові С++ є додаткові операції привласнення: +=, –=, *=, /=, %=. Наприклад,

замість оператора x=x+5; модна записати: x+=5;

Часто в С++ використовують префіксні (до) та постфіксні (після) операції

збільшення та зменшення значень змінних на одиницю.

Префіксні операції збільшують (зменшують) значення змінної на одиницю, а

потім використовують це значення, наприклад: х=++у. В цьому прикладі спочатку

відбувається збільшення на одиницю значення змінної у, а потім привласнення

цього значення змінній х.

Постфіксні операції спочатку використовують значення змінної, після чого

збільшують (зменшують) його, наприклад: х=у– –; В цьому прикладі змінна х

отримує значення у, після чого у зменшується на одиницю.

Черга виконання операцій Операції

1

2

3

4

5

6

Унарні: ++, – –, ~, !

Арифметичні: *, /, %

+, –

Відношення: = =, !=, <, >, = >=, <=

Логічні: &&, ||

Привласнення: =, +=, – =, *=, /=, %=

Page 6: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

1.5.2. Оператор вводу.

Заголовний файл iostream.h містить визначення, що дозволяють

використовувати оператори введення (cin) виведення (cout) даних. Його потрібно

включити на початку програми: #include<iostream.h>.

Для введення змінних використовують оператор :

cin>>x1>>...>>xN;

Подвійний знак «більше» називається операцією витягання – витягує дані з

вхідного потоку, привласнюючи значення вказаної змінної. Значення вводяться з

клавіатури і відділяються один від одного пропуском.

Значення змінних, що вводяться, (вхідний потік) повинні відповідати типам

змінних, що вказані в операторах об’явлення. Значення змінних вводяться з

клавіатури, і відокремлюються один від одного хоча б одним пропуском.

Наприклад: 1.5 2.15 -1.1 25.

Введення символьним змінних та рядків ні чим не відрізняється від введення

цілих або речовинних чисел. Значення символьним змінних та рядків записуються

у вхідний потік без апострофів та лапок. Для введення символьних змінних і рядків

С++ надає користувачу додатково дві функції – cin.get і cin.getline.

В тому випадку, коли необхідно читати (вводити) по одному символу з

клавіатури, можна скористатися функцією cin.get, наприклад:

с1= cin.get();

В цьому прикладі символьна змінна, об’явлена як char c1, отримає значення

символу, введеного з клавіатури при натисканні відповідної клавіші.

Якщо необхідно прочитати (ввести) з клавіатури цілий рядок, скористуйтесь

функцією cin.getline, вказавши ім’я символьного рядку та його довжину,

наприклад:

cin.getline (с2,11);

В цьому прикладі, у символьний рядок, об’явлений як char c2[64], буде

записано 10 символів, введених з клавіатури.

1.5.3. Оператор виводу.

Для виводу даних в С++ використовується оператор:

cout<<x1<<...<<xN;

Подвійний знак «менше» називається операцією вставки – вставляє символи у

вихідний потік.

Для переводу курсору на початок наступного рядка в операторі cout часто

використовується символ endl (кінець рядка). Наприклад: cout<<x1<< endl;

В операторі виводу можна використовувати спеціальні символи (наприклад \а

\b \f \v \n і інші). Спеціальні символи повинні бути укладені в одинарні лапки, якщо

вони використовуються самі по собі, наприклад: cout<<’\а’<<”Дзвоник”;

Якщо спеціальні символи використовуються всередині подвійних лапок, то

укладати їх в додаткові одинарні лапки не потрібно.

Приклад:

#include<iostream.h>

void main (void)

{

int x=5;

cout<<”Вивід\tx=”<<x<<endl;

}

Page 7: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Результат виконання програми:

Вивід х=5

За умовчанням в С++ числа виводяться в десятковій системі счислення. Для

виводу чисел у вісімковій або шістнадцятковій системах счислення всередині

вихідного потоку потрібно розмістити модифікатори oct або hex. Щоб повернутися

до десяткової системи счислення, слід скористатися модифікатором dec.

Приклад:

cout<<”8-сс: ” <<oct<<x<<endl;

При виводі чисел за допомогою оператора coit можна в явному виді вказати

ширину виводу числа за допомогою модифікатора setw (число позицій), наприклад:

cout<<”Число”<<setw(10)<<5<<endl;

В результаті виконання цього оператора на екран дисплея буде виведено:

Число 5

Щоб скористатися модифікатором setw, необхідно включити в програму

заголовний файл iomanip.h:

Той самий результат можна отримати, якщо скористатися функцією cout.width

з бібліотеки iomanip.h:

cout<<”Число”

cout.width(10);

cout<<5<<endl;

Функція cout.fill з бібліотеки iomanip.h дозволяє вказати символ заповнення

пустого простору, який cout буде використовувати замість пропуску при виводі

даних за допомогою модифікатора setw або функції cout.width, наприклад:

cout.fill(‘.’);

cout<<”Число”<<setw(10)<<5<<endl;

В результаті виконання цих операторів на екран дисплея буде виведено:

Число 5

Для управління форматом виводу чисел з плаваючою комою можна

скористатися маніпулятором setprecision з бібліотеки iomanip.h, який визначає

кількість цифр після десяткової крапки, наприклад:

float x=3.14159265359;

cout<<setprecision(5)<<x<<endl;

В результаті виконання цих операторів на екран дисплея буде виведено:

3.14159

Для виводу на екран по одному символу за один раз використовується функція

cout.put.

Приклад:

#include<iostream.h>

#include<iomanip.h>

void main (void)

{

char c[]=”C++”;

cout.put (c[0]);

cout.put (c[1]);

cout.put (c[2]);

{

Результат виконання програми: С++.

Page 8: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Завдання на практичну роботу.

Написати програму для розрахунку по двох формулах. Заздалегідь підготувати

тестові приклади по другій формулі за допомогою калькулятора (результат

обчислення по першій формулі повинен співпадати з другою). Для

використовування математичних функцій бібліотеки С++ необхідно підключити до

програми заголовний файл <math.h>.

Варіант 1. Варіант 2.

)82

5sin

4

1

4

1

)25(cos)23(sin2

2

22

1

z

z

24

sin*cos22

3sin3cossincos

2

1

z

z

Варіант 3. Варіант 4.

az

a

aaaz

sin2

;2sin21cos

3sin5sin2sin

2

21

3

;5cos3coscos

3sin5sin2sin

2

1

tgz

a

aaaz

Варіант 5. Варіант 6.

aaz

aaz

42

2

2

1

coscos

2cos2sin4

11

4cos*2

5cos*

2cos4

7cos6cos2coscos

2

1

z

z

Варіант 7. Варіант 8.

2sin

2

2

48

11cos

48

3cos

2

22

1

z

z

)sin(*)sin(

12sin4

1sincos

2

224

1

xyxyz

xyхz

Варіант 9. Варіант 10.

)cos(*2

sin4

)sin(sin)cos(cos

2

2

22

1

z

z

2

3

4

5

)3sin(1

32

sin

2

1

ctgz

z

Варіант 11. Варіант 12.

tg

tgz

z

1

1

2sin1

sin21

2

2

1

2

3

2cos1

2cos*

4cos1

4sin

2

1

ctgz

z

Варіант 13. Варіант 14.

2cos

2sin1

2sincos

2cossin

2

1

z

z

2sec2

sincos

sincos

2

1

tgz

z

Page 9: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 15. Варіант 16.

2

1

24

422

2

2

2

1

bz

bb

bbz

3

3

9132

9132

2

22

22

1

x

xz

xxxx

xxxxz

Варіант 17. Варіант 18.

mz

mm

mmz

2

2

1 23

24)23(

2

1

2

2*

2

2

222

2

2

1

az

a

a

aaa

a

a

az

Варіант 19. Варіант 20.

2

4

)25(*2

12

2

1

2

2

2

1

2

2

2

2

1

az

aaa

aa

aa

aaz

m

nmz

mmnmnm

nnmmz

2

231

)1()1(

Варіант 21. Варіант 22.

4cos*2

5cos*

2cos4

7cos6cos2coscos

2

1

z

z

tg

tgz

z

1

1

2sin1

sin21

2

2

1

Варіант 23. Варіант 24.

3

3

9132

9132

2

22

22

1

x

xz

xxxx

xxxxz

)cos(*

2sin4

)sin(sin)cos(cos

2

2

22

1

z

z

Контрольні питання:

1. Охарактеризуйте основні правила формування імен файлів.

2. Перерахуйте основні типи змінних мови С++.

3. Охарактеризуйте структуру програми, написану мовою С++.

4. Приведіть загальний вид та приклади використання оператора привласнення.

5. Що виконують префіксні та постфіксні операції?

6. Приведіть загальний вид та приклади використання оператора вводу.

7. Приведіть загальний вид та приклади використання оператора виводу.

Page 10: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

ПРАКТИЧНА РОБОТА № 2

Програми вітвлення.

Ціль: навчитися складати програми з використанням операторів вибору

варіантів, умовних операторів.

Теоретичні відомості.

1. Логічні операції

Розглянемо групу операцій, званих логічними операціями. Ці операції

дозволяють проводити дії над булевими змінними, тобто змінними, що володіють

тільки двома значеннями – істина і брехня.

В С++ існує три логічні операції:

1) && – логічного І;

2) || – логічного АБО;

3) ! – логічного НІ.

Операція логічного І, що позначається &&, зв'язує пару відносних виразів (під

відносним виразом розуміється вираз, що містить операції відношення).

Використовування дужок, що укладають відносні вирази, не є обов'язковим.

Наприклад: (х рівний 7 і а рівно 10)

(х == 7 && а == 10);

Логічна операція АБО, що позначається ||, має більш низький пріоритет, ніж

логічне І.

Приклад: (х рівний 7 або а рівно 10)

(х == 7 || а == 10);

Операція логічного НІ є унарною, тобто має тільки один операнд Дія операції !

полягає в тому, що вона міняє значення свого операнда на протилежне: якщо

операнд мав істинне значення, то після застосування операції ! він стає

помилковим, і навпаки.

Наприклад, вираз (х==7) є істинним, якщо значення х рівно 7, а вираз !(х==7) є

істинним для всіх значень х, які не рівні 7 (в даній ситуації останній вираз

еквівалентний запису х!=7).

2. Оператори вітвлення.

Оператори програми, що написана мовою С++, виконуються в порядку їх

запису. Якщо при деякій умові потрібно виконати певну послідовність операторів,

то їх об’єднують в один складовий оператор. Складовий оператор укладається у

фігурні дужки. Всередині цих дужок розміщуються оператори, які виконуються в

порядку їх слідування. Наприклад:

{

i=2; k=i/5; j=i+k;

}

Не можна ззовні складового оператора передавати управління всередину

нього. Для зміни природної послідовності проходження операторів (передачі

управління) в С++ міститься ряд спеціальних конструкцій.

Оператор безумовного переходу має вигляд:

goto мітка;

Page 11: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Мітка указує на те, що подальша робота повинна проводитися в іншій частині

програми, а саме з того рядка, на який вказує мітка. Мітки в мові С++ попередньо

не об’являються.

Приклад:

#include<iostream.h>

void main (void)

{

float a,b;

……………

b=5;

goto m1;

……………

m1: a=b*3;

……………

}

Обираючи оператори призначені для виділення з безлічі операторів одного

оператора, який і виконується. В мові С++ передбачено два види Обираючих

операторів:

оператор умовного переходу – призначений для вибору одного з двох

операторів залежно від значення деякої умови, що перевіряється. Він має

наступний вигляд:

if (умова) оператор1; else оператор2;

Тут в якості умови використовується деякий логічний вираз, що задає умову

вибору виконуваного оператора; оператор1 і оператор2 можуть бути як простими,

так і складовими. Якщо умова істинна (будь-яке ненульове значення), то

виконується оператор1, якщо ж умова помилкова (нуль), то виконується оператор2.

В якості прикладу розглянемо наступну задачу. Ввести два речовинних числа

та вивести їх в порядку убування.

#include<iostream.h>

void main (void)

{

float a,b,r1,r2;

cin>>a>>b;

cout<<”a=”<<a<<”b=”<<b<<endl;

if (a>b) {r1=a; r2=b;}

else {r1=b; r2=a;}

cout<<”Більше число =”<<r1<<”Менше число =”<<r2;

}

Оператор умовного переходу може мати тільки одну гілку:

if (умова) оператор;

В цьому випадку, якщо умова істинна, то виконується оператор, якщо умова

помилкова, то керування передається наступному оператору програми.

Умова представляє з себе логічний вираз, що складається з операндів та знаків

операцій. В якості операцій в логічному виразі, в першу чергу, використовуються

операції порівняння (= =, !=, <, >, <=, >=). Також для побудови логічних виразів

можна використовувати логічні операції (!, , ). Значення логічного виразу

вираховується шляхом виконання вказаних в ньому операцій з урахуванням їх

пріоритету і круглих дужок.

Page 12: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Приклади запису умов у вигляді логічних виразів:

(abs(x)<=2) – значення х за модулем не перевищує 2;

((x>=1) (x<=2)) – точка належить до відрізку [1,2];

(x*x+y*y<1) – точка плоскості з координатами (х,у) належить одиничному

колу з центром на початку координат.

На відміну від оператора умовного переходу в операторі варіанту може бути

не дві гілки, а довільне число гілок. Оператор варіанту має вигляд:

switch (вираз)

{

case i: оператор1; break;

case j: оператор2; break;

..........................

case до: операторK; break;

default: операторN; break;

}

Виконання оператора варіанту починається з обчислення значення виразу.

Потім оператор вибору передає управління тому оператору, перед яким стоїть

константа, співпадаюча з обчисленим значенням перемикача switch. Якщо збігів не

знайдено, виконується оператор, що стоїть після default. Оператор break,

розташований в кожній гілці оператора варіанту, наказує завершити виконання

поточного оператора і передати управління наступному оператору програми.

Приклад:

… switch (i)

{

case 1: x=0; break;

case 2: x=x*x; break;

case 100: x=cos(x); break;

}

z=x;…

В цьому прикладі, якщо селектор і приймає значення 100, виконується

оператор x=cos(x), після чого керування передається оператору z=x.

Page 13: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіанти завдань

Скласти блок-схему та написати програму з використанням операторів

вибору.

Page 14: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Контрольні запитання

1. Охарактеризуйте три логічні операції.

2. Що таке складовий оператор і навіщо він потрібен?

3. Приведіть приклади оператора переходу.

4. Охарактеризуйте оператор умовного переходу.

5. Яка структура умовного оператору?

6. Яка структура оператору варіанта?

Page 15: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

ПРАКТИЧНА РОБОТА № 3

Реалізація циклічного обчислювального процесу.

Ціль: вивчити алгоритми циклічного обчислювального процесу, навчитися

складати програми з використанням операторів циклів.

Теоретичні відомості.

Цикли передбачають багатократне виконання деяких операторів, що входять в

тіло циклу. В мові С++ є три види операторів циклу: while (цикл-ДОКИ), do-while

(цикл-ДО), for (цикл з параметром). Якщо відомі початкове і кінцеве значення, а

також крок зміни параметра, то краще скористатися оператором циклу з

параметром. В решті випадків доцільно використовувати оператори циклу-ДОКИ

(циклу із заданою умовою продовження роботи) або циклу-ДО (циклу із заданою

умовою закінчення роботи, циклу з ітерацією).

Реалізація циклу-ДОКИ в С++ повністю співпадає з алгоритмічною схемою

даного циклу. Реалізація циклів «ДО» і «З параметром» відрізняється від звичних

алгоритмічних структур – при виконанні умови, що перевіряється, виконуються

оператори тіла циклу, вихід з цих циклів здійснюється по умові «ні».

1. Цикл-ДОКИ.

Цикл-ДОКИ реалізується в мові С++ за допомогою оператора while і має

наступний вигляд: while (умова) оператор;

Умова – цей вираз, визначальна умова продовження роботи; оператор –

простий або складовий оператор, що є тілом циклу. Умова (вираз) обчислюється

перед кожним виконанням оператора. Якщо умова істинна (будь-яке ненульове

значення), то тіло циклу виконується і управління передається знову на обчислення

умови; якщо ж умова помилкова (нуль), то тіло циклу не виконується і

відбувається вихід з циклу.

Приклад:

… x=5;

while (x!=0)

{

c=c+1/x;

x=x-1;

}…

В процесі виконання циклу спочатку перевіряється умова (x!=0). Якщо умова

істинна (тобто, х не дорівнює 0), то виконується складовий оператор (c=c+1/x; та

x=x-1;), після чого знову перевіряється умова (x!=0). Як тільки умова перестає

виконуватися, керування передається оператору, що стоїть після складового

оператора.

На прикладі розглянемо програму вирахування суми членів безкінцевого ряду

.../1...3/12/11 is з точністю es :

#include<iostream.h>

void main (void)

{

float i, s, e;

cin>>e;

Page 16: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

cout<<”e=”<<e<<endl;

s=0; i=1;

while (s<=e)

{ s=s+1/i; i=i+1;}

cout<<”s=”<<s<<endl;

}

2. Цикл-ДО.

Цикл-ДО реалізується в мові С++ за допомогою оператора do-while і має

наступний вигляд:

do {оператори};

while (умова);

Працює цикл-ДО так: спочатку виконуються оператори тіла циклу, потім

обчислюється значення виразу, що стоїть в умові. Якщо умова істинна (будь-яке

ненульове значення), то знову виконуються оператори тіла циклу; якщо ж умова

помилкова (нуль), то цикл закінчується.

Якщо умова, що перевіряється, помилкова із самого початку, то оператори тіла

циклу виконуються тільки один раз. Якщо умова, що перевіряється, ніколи не

приймає значення «брехня» (нуль), то оператори тіла циклу виконуються

нескінченне число раз (зациклення).

Приклад:

… x=5;

do { c=c+1/x; x=x-1; }

while (x>=0);…

В цьому прикладі спочатку виконуються оператори c=c+1/x; та x=x-1; а потім

перевіряється умова x>=0. Якщо х більше або дорівнює 0, то оператори тіла циклу

виконуються повторно, якщо ж умова не виконується, то керування передається

оператору, що стоїть за while (x>=0).

Програма вирахування суми членів безкінцевого ряду .../1...3/12/11 is

з точністю до es при використання оператора do-while буде виглядати так:

#include<iostream.h>

void main (void)

{

float i, s, e;

cin>>e;

cout<<”e=”<<e<<endl;

s=0; i=1;

do

{ s=s+1/i; i=i+1;}

while (s<=e);

cout<<”s=”<<s<<endl;

}

3. Оператор циклу з параметром.

Оператор циклу з параметром має вигляд:

for (i=iП; i<=iК; i=i+i) оператор;

Параметр циклу (i) може бути будь-якого типу, окрім void. Початкове (iП),

кінцеве (іК) значення параметра циклу і крок зміни (i) можуть задаватися

Page 17: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

виразами, які повинні мати той же тип, що і параметр циклу. Оператор, що є тілом

циклу, може бути як простим, так і складовим. В цьому циклі iП<iК.

На початку роботи циклу обчислюється значення виразу i=iП, потім

перевіряється умова i<=iК. Якщо ця умова істинна, то виконується оператор тіла

циклу, після чого відбуваються зміна параметра i=i+i і перехід на перевірку

умови циклу. Якщо умова помилкова, цикл завершується і програма продовжує

своє виконання з першого оператора, наступного за циклом.

Приклад:

…for (i=1; i<=20; i++) a=a+1;

В цьому прикладі для і=1,2,...,20 буде виконуватись оператор a=a+1.

Якщо початкове та кінцеве значення параметру циклу відноситься до

символьного типу (char), наприклад, мають значення ‘a’ і ‘z’, то змінна і приймає

послідовно значення в порядку алфавіту: ‘a’, ‘b’, ‘c’,…,’z’.

Цикл по убуваючим значенням параметру має вид:

for (i=iП; i>=iК; i=i-i) оператор;

В цьому циклі початкове значення параметра циклу більше кінцевого значення

iП>іК.

Приклад:

…for (i=20; i>=1; i– –) a=a+1;

В цьому прикладі параметр і буде змінюватись від 20 до 1 з кроком -1.

Програма вирахування суми 50/1...3/12/11 s за допомогою оператора

for записується так:

#include<iostream.h>

void main (void)

{

float s, n;

s=0;

for (n=1; n<=50; n++) s=s+1/n;

while (s<=e);

cout<<”s=”<<s<<endl;

}

В цій програмі оператор s=s+1/n; виконується 50 разів для n=1,2,…,50, а

результат буде: s=4.499206

Оператор циклу for дозволяє задавати крок зміни параметра, що відрізняється

від 1 та -1. Наприклад:

…for (i=20; i>=1; i+=2) a=a+1;

В цьому прикладі крок зміни параметра дорівнює 2.

Page 18: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Завдання на практичну роботу.

Вирахувати та вивести на екран у вигляді таблиці значення функції F, яка

задана формулами, що приведені нижче, на інтервалі від хпоч до хкін з кроком х.

Значення a, b, c, хпоч, хкін, х ввести з клавіатури.

Варіант 1. Формула:

bаx 2 , при 0х и 0b ; )

F = сx

ax

, при 0х и 0b ;

c

x, в інших випадках.

Варіант 2. Формула:

bах

1

, при 05 х и 0c ;

F = x

ax , при 05 х и 0c ;

4

10

c

x, в інших випадках.

Варіант 3. Формула:

cbxах 2 , при 0a и 0c ;

F = cx

a

, при 0a и 0c ;

)( cxa , в інших випадках.

Варіант 4. Формула:

cax , при 0c и 0x ; 6

F = c

ax

, при 0c и 0x ;

ac

bx

, в інших випадках.

Варіант 5. Формула:

b

ха

10, при 0х и 0b ;

F = сx

ax

, при 0х и 0b ;

c

x2

3 , в інших випадках.

Варіант 6. Формула:

хbаx 22 , при 0с и 0b ;

F = сx

ax

, при 0с и 0b ;

c

x, в інших випадках.

Page 19: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 7. Формула:

bаx 2 , при 5х и 0с ;

F = x

ax , при 5х и 0с ;

c

x, в інших випадках.

Варіант 8. Формула:

2аx , при 0с и 0а ;

F = сx

ха , при 0с и 0а ;

c

x, в інших випадках.

Варіант 9. Формула:

хbаx 22 , при 0а и 0х ;

F = сx

, при 0а и 0х ;

c

x1 , в інших випадках.

Варіант 10. Формула:

сbхаx 2 , при 3х и 0b ;

F = сx

ax

, при 3х и 0b ;

c

x, в інших випадках.

Варіант 11. Формула:

c

bаx 2 , при 1х и 0c ;

F = 2)( сx

ax

, при 5.1х и 0c ;

2

2

c

x, в інших випадках.

Варіант 12. Формула:

сbаx 23 , при 6.0х и 0 cb ;

F = сx

ax

, при 6.0х и 0 cb ;

a

x

c

x , в інших випадках.

Варіант 13. Формула:

bаx 2 , при 01х и 0 xb ;

F = x

ax , при 01х и 0 xb ;

c

x, в інших випадках.

Page 20: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 14. Формула:

bаx 3 , при 0 сх и 0а ;

F = сx

ax

, при 0 сх и 0а ;

х

с

c

x , в інших випадках.

Варіант 15. Формула:

bаx 2 , при 0х и 0b ;

F = 5.5 сx

x, при 0х и 0b ;

c

x

, в інших випадках.

Варіант 16. Формула:

bсха 2)( , при 0х и 0b ;

F = с

ax

, при 0х и 0b ;

c

xa , в інших випадках.

Варіант 17. Формула:

bсхаx 2 , при 010 х и 0b ;

F = сx

ax

, при 010 х и 0b ;

ca

x

, в інших випадках.

Варіант 18. Формула:

23 bхаx , при 0х и 0b ;

F = сx

ax

, при 0х и 0b ;

)10(

5

xc

x, в інших випадках.

Варіант 19. Формула:

bxа 2)7( , при 5х и 0b ;

F = ax

cdx , при 5х и 0b ;

c

x, в інших випадках.

Варіант 20. Формула:

acx

cx

2, при 0х и 0b ;

F = сx

ax

, при 0х и 0b ;

x

c

c

x

2

, в інших випадках.

Page 21: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 21. Формула:

сbхаx 2 , при 2х и 0b ;

F = сx

x

1, при 2х и 0b ;

cx , в інших випадках.

Варіант 22. Формула:

хbx 22 , при 0х и 0b ;

F = bxх )5( , при 0х и 0b ;

22 cx , в інших випадках.

Варіант 23. Формула:

схbх , при 3с и 0х ;

F = са

, при 3с и 0х ;

22cb , в інших випадках.

Варіант 24. Формула:

схаx 2 , при 0х и 0c ;

F = сx

ab

, при 0х и 0c ;

cc

x2 , в інших випадках.

Варіант 25. Формула:

xa

xc

12

, при 02 х и 0а ;

F = 25 ха , при 02 х и 0а ;

22 ab , в інших випадках.

Контрольні питання:

1. Що таке цикли?

2. Які причини використання циклів у програмах?

3. За допомогою якого оператора реалізується цикл-ДОКИ?

4. За допомогою якого оператора реалізується цикл-ДО?

5. Поясніть різницю у використанні циклів ДОКИ і ДО.

6. Який вигляд має оператор циклу з параметром?

7. В якому випадку рекомендується для організації циклічних обчислень

використовувати цикл з параметром?

8. Поясніть використання в вашій програмі операторів циклу.

Page 22: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

ПРАКТИЧНА РОБОТА № 4

Вирішення задач з використанням функцій.

Ціль: навчитися складати програми з використанням функцій.

Теоретичні відомості.

Окрім стандартних функцій, розташованих в заголовних файлах, які

підключаються до програми за допомогою оператора #include<имя.h>, мова C++

дозволяє користувачеві формувати свої функції. Ці функції доцільно створювати,

якщо при вирішенні завдань виникає необхідність проводити обчислення по одних

і тих же формулах (алгоритмам) багато разів. Застосування функцій дозволяє

розділити програму на прості, легко контрольовані частини.

При використанні функцій необхідно розрізняти опис функції і оператора

виклику функції.

Структура функції схожа на структуру програми main. Опис функції містить

заголовок функції, оголошення змінних і оператори:

тип_функции ім'я__функции (список_формальных_параметров)

{

оголошення змінних;

оператор1;

......;

операторN;

}

Тут: тип_функции – тип повертаного в основну програму результату

имя_функции – унікальне ім'я, відповідне по сенсу операції, яку виконує

функція (наприклад, max – визначення максимального з двох чисел);

список_формальных_параметров – перелік формальних параметрів і їх типів.

Формальні параметри – це найменування змінних, через які передається

інформація з основної програми у функцію.

Для виклику функції досить вказати її ім'я із списком фактичних параметрів в

будь-якому виразі зухвалої програми:

имя_функции (список_фактических_параметров);

Фактичні параметри – це найменування змінних, значення яких при

зверненні до функції привласнюються відповідним формальним параметрам.

Для повернення обчисленого значення в основну програму у функціях

використовується оператор

return (результат);

Розглянемо декілька прикладів використання функцій в програмах.

Приклад 1.

Функція show не містить параметрів і не повертає значення в основну

програму.

#include <iostream.h>

void show(void)

{

cout « "Функція show" « endl;

}

void main (void)

Page 23: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

{

cout « "Виклик функції show" « endl;

show ();

cout « Повернення в основну nporpaммy" « endl;

}

Приклад 2.

Функція max містить формальні параметри і не повертає значення в основну

програму.

include <iostream.h>

void max (float x, float у), //х, у – формальні параметри

{

if (x>y) cout « x « ">" « у « endl;

else cout « у « ">" « x « endl;

}

void main (void)

{

float а,b;

cin » а » b;

max(а,b); //a, b – фактичні параметри

max(20,10); //20, 10 — фактичні параметри-значення

max(2.71,3.14); //2.71, 3.14 – фактичні параметры-значения/

}

Приклад 3 Функція max містить формальні параметри і повертає значення в основну

програму. Повертане значення має тип float.

include <iostream.h>

float max(float x,float у)

{

float result;

if (x>y) result=x;

else result=y;

return (result) ;

}

void main(void)

{

float а, b;

cin » а » b;

соut «"Наибольшее з двох чисел "« а « " і " « b « ":" « max (а, b) «endl;

cout «"Haибoльшee з двох чисел 2.71 і 3.14:" « max(2.71, 3.14)« endl;

}

У приведених прикладах опис функції передував зверненню до неї. Інакше в

початок програми потрібно помістити прототип функції. Прототип функції містить

інформацію про ім'я функції, тип повертаного значення, кількість і тип формальних

параметрів. Прототип функції max для третього з розглянутих прикладів

виглядатиме так:

float max(float, float);

Page 24: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Окрім змінних як формальні параметри у функціях можуть виступати і

масиви.

Розглянемо детальніше процес передачі значень фактичних параметрів з

основної програми у функцію. При виклику функції за допомогою оператора

ім'я__функции (список__фактических_параметров);

компілятор C++ створює копію значень фактичних параметрів і поміщає цю

копію в стек – ділянка пам'яті комп'ютера для тимчасового зберігання інформації.

Значення параметрів із стека привласнюються формальним параметрам функції.

Після завершення роботи функції відбувається очищення стека. Таким чином,

значення фактичних параметрів в основній пам'яті комп'ютера після завершення

роботи функції залишаються без змін.

У тому випадку, коли потрібно змінити значення фактичних параметрів, тобто

здійснити привласнення значень формальних параметрів при виході з функції

фактичним параметрам основної програми, потрібно використовувати оператора

адреси (ознака &) і змінні-покажчики (ознака *).

Оператор адреси призначений для передачі адрес значень фактичних

параметрів з основної програми у функцію. Оператор адреси має вигляд:

имя_функции (&фактический_параметр1,...,

&фактический_параметрN);

Щоб «пояснити» компілятору C++, що значення фактичних параметрів

передаватимуться з основної програми у функцію за допомогою адреси (у стек

записуватимуться адреси фактичних параметрів, а не їх значення), в заголовку

функції оголошуються змінні-покажчики (формальні параметри) з ознакою *:

тип_функции имя_функции (тип *формальный_параметр1,.,

тип *формальный_параметрN);

Змінні (формальні параметри), які використовуються в операторах функції,

повинні бути також помічені зірочкою (*).

Приклад 4

#include <iostream.h>

void change (int *x, int *y)

{

*x=100;

*y=200;

}

void main(void)

{

int а,b;

a=10; b=20;

cout « "Параметри а і b до звернення до функції:" « а « “ ” « b « endl;

change (&а, &b);

cout «” Параметры а і b після звернення до функції:" « а « “ “ « b « endl;

}

В результаті вирішення цієї програми на екран дисплея буде виведено:

Параметри а і b до звернення до функції: 10 20

Параметри а і b після звернення до функції: 100 200

Таким чином, після завершення роботи функції фактичні параметри змінили

свої значення.

Page 25: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Значення фактичних параметрів можуть бути змінені в програмі і за

допомогою посилань.

Посилання дозволяють створювати псевдоніми (другі імена) дл змінних,

використовуваних як параметри функції. Для оголошення посилання

застосовується знак амперсенда (&) після типу параметра:

тип& имя_ссылки=имя_переменной;

Після оголошення посилання в програмі можна використовувати ім'я змінної

або ім'я посилання.

Як ілюстрація зміни значень фактичних параметрів за допомогою посилань

розглянемо програму:

#include <iostream.h>

void change (int& x, int& у)

{

x=100; y=200;

}

void main(void)

{

int а, b;

int& as=a; // оголошення посилання as – псевдоніма змінної а

int& bs=b; // оголошення посилання bs – псевдоніма змінної b

a=10; b=20;

соut « "Параметри а і b до звернення до функції:" « а « " " « b « endl;

change (as, bs);

соut « "Параметри а і b після звернення до функції:” « а « " " « b « endl;

}

В результаті вирішення цієї програми на екран дисплея буде виведено:

Параметри а і b до звернення до функції: 10 20

Параметри а і b після звернення до функції: 100 200

Таким чином, результат роботи програми повністю співпадає з результатом

роботи програми, розглянутої в попередньому прикладі.

Page 26: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Завдання на практичну роботу.

Варіант 1.

Розробити функцію, що знаходить середнє геометричне всіх від’ємних

елементів масивів А(12), В(10), С(8).

Варіант 2.

Розробити функцію видалення підрядка в n символів з k-ої позиції введенного

рядка та використати її для обробки декількох рядків тексту.

Варіант 3.

Скласти функцію, що обчислює середнє арифметичне та середнє геометричне

доданих елементів матриці. Застосувати розроблену функцію для обробки трьох

двовимірних масивів

Варіант 4.

Обчислити площу багатокутника за допомогою функції, що визначає площу за

координатами його вершин.

Варіант 5.

Розробити функцію визначення середнього значення парних елементів

матриці та мінімального серед непарних елементів матриці та з її допомогою

обробити три двовимірних масиви.

Варіант 6.

Скласти функцію знаходження середнього арифметичного значення елементів

масиву, розташованих на непарних місцях, та застосувати її для обробки декількох

одновимірних масивів.

Варіант 7.

Розробити функцію, яка здійснює перестановку максимального від’ємного та

мінімального додатного елементів одновимірного масиву, і застосувати її для

обробки чотирьох масивів різної довжини.

Варіант 8.

Розробити функцію сортування стовпців двовимірних масивів за зростанням

та застосувати її для обробки декількох матриць довільного розміру.

Варіант 9.

Розробити функцію, яка записує від’ємні непарні елементи довільної матриці в

одновимірний масив, та застосувати її для обробки матриць А(5,4), В(3,2), С(4,4).

Варіант 10.

Розробити функцію, що обчислює суму діагональних елементів квадратної

матриці, і за її допомогою знайти суми діагональних елементів трьох матриць.

Варіант 11.

Скласти функцію визначення суми та кількості елементів, що розташовані між

мінімальним та максимальним елементами матриці, та застосувати її для обробки

трьох довільних двовимірних масивів.

Page 27: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 12.

Розробити функцію, що здійснює підрахунок кількості непарних та добутку

додатних елементів одновимірного масиву, і за її допомогою обробити п’ять

масивів різної довжини.

Варіант 13.

Три групи студентів складали іспит з трьох предметів. Розробити функцію

сортування списку студентів за спаданням оцінок за предметом і за її допомогою

вивести відповідні повідомлення про студентів кожної групи.

Варіант 14.

Розробити функцію визначення найдовшого слова в рядку та за її допомогою

одержати фразу із її найдовших слів п’яти речень..

Варіант 15.

Розробити функцію підрахунку кількості слів у реченні та використати її для

обробки кількох речень.

Варіант 16.

Розробити функції обчислення площ трикутника за формулою Герона та за

формулою, що використовує основу трикутника і його вичоту. Роботу функції

перевірити при визначенні площ декількох довільних трикутників.

Варіант 17.

Розробити функцію, що здійснює виділення в тексті слів-палендромів (тобто

слів, які читаються однаково зліва-напрво і справа-наліво), та за її допомогою

обробити веведений текст.

Варіант 18.

Скласти функцію, що визначає в кожному стовпці матриці кількість від’ємних

елементів та максимальний елемент. Використати цю функцію для обробки

декількох матриць довільного розміру.

Варіант 19.

Розробити функцію, що визначає корені квадратного рівняння і перевіряє їх за

теоремою Вієта, та розв'язати за її допомогою декілька рівнянь.

Варіант 20.

Розробити функцію визначення частоти появи голосин літер у тексті та

використати її для обробки декількох речень.

Варіант 21.

Розробити функцію визначення суми членів арифметичної прогресії і

реалізувати її для трьох арифметичних прогресій з різною кількістю членів.

Варіант 22.

Розробити функцію визначення кількості появи заданої приголосної в тексті та

застосувати цю функцію для обробки декількох речень.

Варіант 23

Скласти функцію перестановки максимального елемента заданого стовпця

матриці з мінімальним елементом заданого рядка матриці. Застосувати цю

функцію для обробки трьох двовимірних масивів.

Page 28: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 24

Розробити функцію, що здійснює сортування всіх елементів масиву за

спаданням і знаходить добуток парних елементів, та за допомогою цієї функції

обробити три одновимірних масиви довільної довжини.

Варіант 25

Скласти функцію обчислення найбільшого спільного дільника двох чисел та

продемонструвати її роботу для наборі її пар чисел.

Контрольні запитання.

1. Що таке функція? Яка її структура?

2. Які існують способи предачі параметрів і повернення результату

обчислень функції?

3. Наведіть приклади передачі параметрів у функцію за значенням, за

посиланням, за покажчиком?

4. Що таке локальні і глобальні змінні?

5. Як використовувати покажчики на функцію?

6. Що таке перевантажена функція?

7. Охарактеризуйте рекурсивні функції?

Page 29: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

ПРАКТИЧНА РОБОТА № 5

Обробка одновимірних масивів.

Ціль: навчитися складати програми для обробки одномірних масивів,

забезпечити введення елементів масиву з клавіатури, вивід результатів

обробки масиву на екран, сортування елементів масиву.

Теоретичні відомості.

1. Масиви та їх обробка за допомогою циклів.

Окрім простих даних мова C++ дає можливість ефективно обробляти складні

типи, наприклад масиви.

Масив – це впорядкований набір елементів однакового типу, що мають

загальне ім'я. Всі елементи масиву пронумеровані. Номер елемента масиву

називається його індексом. Масиви повинні бути обов'язково описаний перед

використовуванням в програмі.

Загальний вид опису масиву в програмі мовою C++:

тип ім’я_масиву [размір1] [размір2]...[размірN] ;

Кількість індексів ([розмір 1][размір2]... [размірN]) визначає розмірність

масиву. При оголошенні масиву указується тільки верхня межа індексу. Нижня

межа індексу масиву в мові C++ завжди починається з нуля. Таким чином, перший

елемент одновимірного масиву має індекс (порядковий номер) [0], двомірного –

[0][0] і т.д. Верхня межа індексу масиву завжди на одиницю менше розміру масиву.

Приклади опису масивів:

int а [100], b[100];

char с[200];

float d[-40] [5];

Тут описано два однакові масиви а і b, кожний з яких складається з 100

цілочисельних елементів (індекси міняються від [0] до [99]). Масив с – це рядок

символів, що містить двісті елементів символьного типу від [0] до [199]. Масив d –

двомірний масив, що містить 40 рядків і 5 стовпців. Рядки нумеруються цифрами

від [0] до [39], а стовпці – цифрами від [0] до [4].

В мові C++ можлива ініціалізація масиву при його оголошенні. В цьому

випадку первинні значення елементів масиву указуються між лівою і правою

фігурними дужками, наступними за знаком рівності.

Приклади ініціалізації масивів при оголошенні:

inta[3]={10,20,30};

intb[]={10,20,30};

float з[2][3]={5,10,15,20,25,30};

float d[][3]={{5,10,15},{20,25,30}};

Зверніть увагу на те, що масив b оголошений без вказівки його розміру. В

цьому випадку компілятор C++ сам визначає необхідна кількість елементів масиву.

При оголошенні масиву с невідомою кількістю елементів можна не указувати

розмір тільки в найлівіших фігурних дужках, як це зроблено, наприклад, при

оголошенні масиву d.

До елементів масиву застосовні дві операції: привласнення і вибірка. Приклади

використовування елементів масивів в операціях привласнення:

х=а[5]; – змінній х привласнюється значення п'ятого елемента масиву а;

Page 30: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

а[20]=2*b[3]-6; – двадцятому елементу масиву а привласнюється значення,

одержуване після розрахунку виразу 2*b[3]-6;

d[5][2]=sin(x); – елементу двомірного масиву d, розташованому на перетині

п'ятого рядка з другим стовпцем, привласнити значення sin(x).

Для організації вибірки елементів масиву частіше за все використовуються

цикли. Розглянемо декілька прикладів. Для введення даних в одновимірний масив

а, можна використовувати цикл з параметром:

for ( i=0; i<Memo1->Lines->Count; i++)

a[i]=StrToInt(Memo1->Lines->Strings[i]);

Для визначення суми s всіх елементів масиву а також можна використовувати

цикл з параметром

s=0;

for ( i=0; i<Memo1->Lines->Count; i++)

s=s+a[i];

Для знаходження максимального елемента масиву а[100] можна

використовувати наступні операції:

...max=а[0];

for (i=l; i<100; i++)

if (max<a[i])

max=а[i];

Тут в циклі здійснюються порівняння передбачуваного максимального

елемента із значенням поточного елемента масиву, починаючи з другого, і

привласнення змінній max нового значення, якщо умова max<a[i] виконується.

Для визначення суми всіх позитивних елементів масиву а, що складається з

100 елементів, передуючих першому негативному елементу, до складу програми

доцільно включити наступні оператори: .

..s=0; i=0;

while (i<100 а[i]>=0)

{

s=s+ а[i];

i++;

}

Тут можна використовувати цикл-ДОКИ, оскільки число елементів масиву а,

що входять в суму, наперед не відомо.

Для визначення суми елементів, які розташовані між першим та останнім

негативними елементами масиву a[i], до складу програми доцільно включити

наступні оператори:

…s=0;

for ( i=0; i<Memo1->Lines->Count; i++)

a[i]=StrToInt(Memo1->Lines->Strings[i]);

for ( i=0; i<Memo1->Lines->Count; i++)

if (a[i]<0)

{ k=i;

break; }

for ( i=Memo1->Lines->Count; i>0; i--)

if (a[i]<0)

{ p=i;

Page 31: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

break; }

for (i=k+1; i<p; i++)

s=s+a[i];…

В багатьох задачах необхідно поставити елементи масиву так, щоб вони

розташовувалися в порядку зростання або убування. Такі масиви називаються

впорядкованими, а сам процес їх отримання – сортуванням.

Хай необхідно ввести масив цілих чисел, упорядкувати елементи масиву за

зростанням і вивести їх. Програма рішення цієї задачі має вигляд:

{ int i,k,p, a[10];

for ( i=0; i<Memo1->Lines->Count; i++)

a[i]=StrToInt(Memo1->Lines->Strings[i]);

for (k=1; k<Memo1->Lines->Count; k++)

for (i=0; i<Memo1->Lines->Count-k; i++)

{

if (a[i]>a[i+1])

{ p=a[i];

a[i]=a[i+1];

a[i+1]=p;

}

}

for ( i=0; i<Memo1->Lines->Count; i++)

Memo2->Lines->Add(IntToStr(a[i]));

}

Разом з одновимірними і двомірними масивами в C++ можуть

використовуватися і багатовимірні масиви, проте на практиці масиви розмірністю

понад три використовуються украй рідко.

Page 32: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Завдання та практичну роботу.

Варіант 1.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) суму негативних елементів масиву;

2) множення елементів масиву, розташованих між максимальним та

мінімальним елементами.

Упорядкувати елементи масиву за збільшенням.

Варіант 2.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) суму позитивних елементів масиву;

2) множення елементів масиву, розташованих між максимальним за модулем

та мінімальним за модулем елементами.

Упорядкувати елементи масиву за убуванням.

Варіант 3.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) множення елементів масиву з парними номерами;

2) суму елементів масиву, розташованих між першим та останнім нульовими

елементами.

Перетворити масив таким чином, щоб спочатку розташовувались всі позитивні

елементи, а потім – всі негативні елементи (елементи, що дорівнюють 0, вважати

позитивними).

Варіант 4.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) суму елементів масиву з непарними номерами;

2) суму елементів масиву, розташованих між першим та останнім негативними

елементами.

Стиснути масив, видаливши з нього всі елементи, модуль яких не перевищує 1.

Звільнені в кінці масиву елементи заповнити нулями.

Варіант 5.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) максимальний елемент масиву;

2) суму елементів масиву, розташованих до останнього позитивного елементу.

Стиснути масив, видаливши з нього всі елементи, модуль яких знаходиться в

інтервалі [a,b]. Звільнені в кінці масиву елементи заповнити нулями.

Варіант 6.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) мінімальний елемент масиву;

2) суму елементів масиву, розташованих між першим та останнім позитивними

елементами.

Перетворити масив таким чином, щоб спочатку розташовувались всі елементи,

що дорівнюють нулю, а потім – всі інші.

Варіант 7.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) номер максимального елементу масиву;

Page 33: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

2) множення елементів масиву, розташованих між першим та другим

нульовими елементами.

Перетворити масив таким чином, щоб в першій його половині

розташовувались елементи, що стоять в непарних позиціях, а в другій половині –

елементи, що стоять в парних позиціях.

Варіант 8.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) номер мінімального елементу масиву;

2) суму елементів масиву, розташованих між першим та другим негативними

елементами.

Перетворити масив таким чином, щоб спочатку розташовувались всі елементи,

модуль яких не перевищує 1, а потім – всі інші.

Варіант 9.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) максимальний за модулем елемент масиву;

2) суму елементів масиву, розташованих між першим та другим позитивними

елементами.

Перетворити масив таким чином, щоб всі елементи, що дорівнюють нулю,

розташовувались після всіх інших елементів.

Варіант 10.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) мінімальний за модулем елемент масиву;

2) суму модулів елементів масиву, розташованих після першого елементу, що

дорівнює нулю.

Перетворити масив таким чином, щоб в першій його половині

розташовувались елементи, що стоять в парних позиціях, а в другій половині –

елементи, що стоять в непарних позиціях.

Варіант 11.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) номер мінімального за модулем елементу масиву;

2) суму модулів елементів масиву, розташованих після першого негативного

елементу.

Стиснути масив, видаливши з нього всі елементи, величина яких знаходиться в

інтервалі [a,b]. Звільнені в кінці масиву елементи заповнити нулями.

Варіант 12.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) номер максимального за модулем елементу масиву;

2) суму модулів елементів масиву, розташованих після першого позитивного

елементу.

Стиснути масив, видаливши з нього всі елементи, ціла частина яких

знаходиться в інтервалі [a,b], а потім – всі інші.

Варіант 13.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) кількість елементів масиву, що лежать в діапазоні від А до В;

Page 34: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

2) суму елементів масиву, розташованих після максимального елементу.

Упорядкувати елементи масиву за убуванням модулів елементів.

Варіант 14.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) кількість елементів масиву, рівних 0;

2) суму елементів масиву, розташованих після мінімального елементу.

Упорядкувати елементи масиву за збільшенням модулів елементів.

Варіант 15.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) кількість елементів масиву, більших С;

2) множення елементів масиву, розташованих після максимального за модулем

елементу.

Перетворити масив таким чином, щоб спочатку розташовувались всі негативні

елементи, а потім – всі позитивні (елементи, що дорівнюють 0, вважати

позитивними).

Варіант 16.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) кількість негативних елементів масиву;

2) суму модулів елементів масиву, розташованих після мінімального за

модулем елементу.

Замінити всі негативні елементи масиву їх квадратами та упорядкувати

елементи масиву за збільшенням.

Варіант 17.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) кількість позитивних елементів масиву;

2) суму елементів масиву, розташованих після останнього елементу, рівного 0.

Перетворити масив таким чином, щоб спочатку розташовувались всі елементи,

ціла частина яких не перевищує 1, а потім – всі інші.

Варіант 18.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) кількість елементів масиву, менших С;

2) суму цілих частин елементів масиву, розташованих після останнього

негативного елементу.

Перетворити масив таким чином, щоб спочатку розташовувались всі елементи,

що відрізняються від максимального не більш, ніж на 20%, а потім – всі інші.

Варіант 19.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) множення негативних елементів масиву;

2) суму позитивних елементів масиву, розташованих до максимального

елементу.

Змінити порядок слідування елементів в масиву на зворотній.

Варіант 20.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) множення позитивних елементів масиву;

2) суму позитивних елементів масиву, розташованих до мінімального елементу

Page 35: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Упорядкувати за збільшенням окремо елементи, що стоять на парних позиціях,

та елементи, що стоять на непарних позиціях.

Варіант 21.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) суму модулів негативних елементів масиву;

2) множення позитивних елементів масиву, розташованих після мінімального

елементу.

Упорядкувати за збільшенням елементи масиву.

Варіант 22.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) максимальний за модулем елемент масиву;

2) суму негативних елементів масиву, розташованих до максимального

елементу.

Перетворити масив таким чином, щоб всі елементи, що дорівнюють нулю,

розташовувались на початку масиву.

Варіант 23.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) множення елементів масиву з непарними номерами;

2) суму елементів масиву, розташованих між першим та останнім негативними

елементами.

Стиснути масив, видаливши з нього всі елементи, величина яких не

перевищує 1. Звільнені в кінці масиву елементи заповнити нулями.

Варіант 24.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) кількість негативних елементів масиву;

2) суму цілих частин елементів масиву, розташованих після останнього

негативного елементу.

Замінити всі негативні елементи масиву їх модулями та упорядкувати

елементи масиву за збільшенням.

Варіант 25.

В одномірному масиві, що складається з n речовинних елементів, вирахувати:

1) мінімальний елемент масиву;

2) суму модулів елементів масиву, розташованих після першого елементу, що

дорівнює нулю.

Змінити порядок слідування елементів в масиву на зворотній.

Контрольні запитання.

1. Охарактеризуйте поняття „масив”, „елементи масиву”.

2. Наведіть приклади опису масивів.

3. Охарактеризуйте дві операції щодо елементів масиву: привласнення та

вибірку.

4. Що означає „упорядкувати елементи масиву”?

5. приведіть приклади введення елементів масиву за допомогою циклу.

Page 36: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

ПРАКТИЧНА РОБОТА № 6

Обробка двовимірних масивів.

Ціль: навчитися складати програми для обробки двомірних масивів,

забезпечити введення елементів масиву з клавіатури, вивід результатів

обробки масиву на екран , сортування елементів масиву.

Теоретичні відомості.

Теоретичні відомості дивись в практичній роботі № 3.

Завдання на практичну роботу.

Розмірність масиву задавати іменованими константами, значення елементів

масиву – в списку ініціалізації.

Варіант 1.

Дана цілочисельна прямокутна матриця. Визначити:

1) кількість рядків, що не містять ні одного нульового елементу;

2) максимальне із чисел, що зустрічаються в заданій матриці більш одного

разу.

Варіант 2.

Дана цілочисельна прямокутна матриця.

1) Визначити кількість стовпців, що не містять жодного нульового елемента.

2) Характеристикою рядка цілочисельної матриці назвемо суму її позитивних

парних елементів. Переставляючи рядки заданої матриці, розташувати їх

відповідно до зростанням характеристик.

Варіант 3.

Дана цілочисельна прямокутна матриця. Визначити:

1) кількість стовпців, що містять хоча б один нульовий елемент;

2) номер рядка, в якому знаходиться найдовша серія однакових елементів.

Варіант 4.

Дана цілочисельна квадратна матриця. Визначити:

1) множення елементів в тих рядках, які не містять негативних елементів;

2) максимум серед сум елементів діагоналей, паралельних головній діагоналі

матриці.

Варіант 5.

Дана цілочисельна квадратна матриця. Визначити:

1) суму елементів в тих стовпцях, які не містять негативних елементів;

2) мінімум серед сум модулей елементів діагоналей, паралельних побічній

діагоналі матриці.

Варіант 6.

Дана цілочисельна прямокутна матриця. Визначити:

1) суму елементів в тих рядках, які містять хоча б один негативний елемент;

2) номери рядків та стовпців всіх сідлових точок матриці.

Матриця А має сідлову точку Аij, якщо Аij є мінімальним елементом в і-тому

рядку та максимальним в j-му стовпці.

Page 37: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 7.

Для заданої матриці розміром 8 на 8 знайти такі k, що k-тий рядок матриці

співпадає з k-тим стовпцем.

Знайти суму елементів в тих рядках, які містять хоча б один негативний

елемент.

Варіант 8.

Характеристикою стовпця цілочисельної матриці назвемо суму модулів його

негативних непарних елементів. Переставляючи стовпці заданої матриці,

розташувати їх у відповідності зростання характеристик.

Знайти суму елементів в тих стовпцях, які містять хоча б один негативний

елемент.

Варіант 9.

Елемент матриці називається локальним мінімумом, якщо він строго менше

всіх його сусідів. Підрахувати кількість локальних мінімумів заданої матриці

розміром 10 на 10.

Знайти суму модулів елементів, розташованих вище за головну діагональ.

Варіант 10.

Коефіцієнти системи лінійних рівнянь задані у вигляді прямокутної матриці.

За допомогою допустимих перетворень привести систему до трикутного вигляду.

Знайти кількість рядків, середнє арифметичне елементів яких менше заданої

величини.

Варіант 11.

За вказівкою користувача відсортувати або всі стовпці матриці xm(3,5), або

заданий рядок за спаданням додатних елементів.

Варіант 12.

За вказівкою користувача розділити всі елементи матриці а(3,5) або на суму її

додатних елементів, або на кількість непарних елементів.

Варіант 13.

За вказівкою користувача або здійснити додавання та віднімання матриць

а(2,3) і b(2,3), або знайти добуток парних елементів матриць.

Варіант 14.

За вказівкою користувача або поміняти місцями задані рядки матриці mt(4,5),

або здійснити сортування заданих стовпців цієї матриці за зростанням.

Варіант 15.

За вказівкою користувача або обчислити суму елементів матриці m(4,4), що

знаходяться вище і нижче головної діагоналі, або знайти додаток елементів

кожного стовпця матриці.

Варіант 16.

За вказівкою користувача відсортувати або всі стовпці матриці р(4,5) за

зростанням значень елементів, або задані рядки матриці за спаданням їх елементів.

Page 38: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 17.

Для заданої матриці розміром 6 на 6 знайти такі х, що х-тий рядок матриці

співпадає з х-тим стовпцем.

Знайти суму елементів в тих рядках, які містять хоча б один негативний

елемент.

Варіант 18.

За вказівкою користувача відсортувати або всі стовпці матриці N(4,6), або

заданий рядок за спаданням додатних елементів.

Варіант 19.

Дана матриця Р(4,4). Визначити:

1) суму елементів в тих стовпцях, які не містять негативних елементів;

2) мінімум серед сум модулей елементів діагоналей, паралельних побічній

діагоналі матриці.

Варіант 20.

За вказівкою користувача або всі непарні елементи матриці с(4,4) переписати у

масив с1, або додатні елементи трьох рядків – у масив с2.

Варіант 21.

Обчислити суму елементів кожного рядка матриці v(4,5) або кількість

додатних елементів стовпців цієї матриці за вказівкою користувача.

Варіант 22.

Усі непарні та від’ємні елементи матриці m(4,5) розділити на її перший або на

деякий інший елемент за вказівкою користувача.

Варіант 23.

Дана цілочисельна прямокутна матриця. Визначити:

1) кількість стовпців, що містять хоча б один нульовий елемент;

2) номер рядка, в якому знаходиться найдовша серія однакових елементів.

Варіант 24.

Дана матриця k(5,5). Визначити:

1) множення елементів в тих рядках, які не містять негативних елементів;

2) максимум серед сум елементів діагоналей, паралельних головній діагоналі

матриці.

Варіант 25.

Дана цілочисельна матриця y(6,6). Визначити:

1) суму елементів в тих стовпцях, які не містять негативних елементів;

2) мінімум серед сум модулей елементів діагоналей, паралельних побічній

діагоналі матриці.

Контрольні запитання. 1. Дайте визначення двомірного масиву.

2. Наведіть приклади опису масивів.

3. Охарактеризуйте дві операції щодо елементів масиву: привласнення та

вибірку.

4. Що означає „упорядкувати елементи масиву”?

5. Приведіть приклади введення елементів масиву за допомогою циклу.

Page 39: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

ПРАКТИЧНА РОБОТА № 7

Вирішення задач з використанням рядків.

Ціль: навчитися виконувати ввод-вивід символьних масивів, ознайомитися з

різними функціями обробки символьних типів та навчитися використовувати їх.

Теоретичні відомості.

Рядок являє собою масив символів, який закінчується нульовим символом.

Нагадаємо, що нуль-символ має код, що дорівнює 0 і запис у вигляді керуючої

послідовності '\0'. За розташуванням нуль-символа визначається фактична

довжина рядка. Кількість елементів символьного масиву складається з кількості

символів у рядку плюс 1, тому що нуль-символ також є елементом масиву.

Для опису рядка використовуються звичайні засоби опису масивів, наприклад:

char str [25];. Індексування такого масиву, як і будь-якого іншого, починається з

нуля.

Символьні послідовності, розділені тільки пропусками, розглядаються як один

рядок, тобто запис:

"Один час сегодня стоит

двух часов завтра" ідентичний до рядку:

"Один час сегодня стоит двух часов завтра" . Адреса першого символа рядка може використовуватися порізному:

- якщо рядок застосовується при ініціюванні масиву типу char, адреса його

першого елемента стає синонімом імені масиву. Наприклад, ідентичними є такі

описи масиву:

char st [] = "Слово";

char st [6] = "Слово";

char st [6] = {'С' 'л' 'о' 'в' 'о' '\0'}; - якщо рядок використовується для ініціювання покажчика типу char *, адреса

першого символа рядка буде початковим значенням покажчика, наприклад:

char *рst = "Слово";. Тут описується змінна-покажчик pst, яка одержує початкове значення, що

дорівнює адресі першого елемента (символа ‘C’);

- якщо рядок використовується у виразі, що застосовує покажчик, то

компілятор підставляє у вираз рядка адресу його першого символа, наприклад:

char *рst;

рst = "Первый символ";. Тут рst одержує адресу символа «П» (тобто першого символа рядка).

Слід звернути увагу на те, що при описі символьного масиву його ім'я — не

змінна, а покажчик-константа на початок рядка, тому її не можна

використовувати в деяких операціях адресної арифметики. Зокрема, не можна

здійснювати операцію присвоювання вигляду:

char st [20];

st = “Петренко”; запис неправильний, тому що не можна змінити значення st.

Виконання дій з елементами символьного масиву здійснюється через індекси

або через покажчики. Для доступу до будь-якого символа рядка використовується

Page 40: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

індекс масиву char. Тобто, якщо описана змінна char str [3];, то третім елементом

масиву можна скористатися, записавши: str [2] або *(str+2).

У процесі роботи з елементами двовимірного масиву застосовують або

індекси масиву, або індекси покажчиків. Якщо описаний список прізвищ char spis

[5] [15];, то для використання символа масиву слід записати: spis [i][j] або *(spis

[і]+j).

Аналогічно, якщо оголошений масив покажчиків char *str[5], що містить 5

елементів, кожний з яких вказує на рядок, то доступ до символа рядка можна

здійснити з використанням запису *(str [і] + j).

Введення-виведення символьних масивів

Введення рядків можна здійснювати різними способами найбільш

розповсюдженими з яких є:

- введення шляхом ініціювання при оголошенні символьних масивів:

char st [5] = "Диск";

char st [ ] = "Диск";

char *pst = "Диск";.

У цьому випадку двовимірні масиви можна ініціювати по- різному, наприклад, у

вигяді:

char str 15][20] = {"Петренко И. И. ", "Головко С. С. ", ,};

char str [ ][20] = {"Петренко И. И. ", "Головко С. С. ", . . . ,};

char *pst[5] = {"Петренко И. И. ", "Головко С. С. ", . . . ,};

char *pst[ ] = {"Петренко И. И. ", "Головко С. С. ", . . . ,};

- використання потокового введення сіn>> Здійснюється у випадку, коли рядок

не містить пропусків, тому що символ пропуску є роздільником введення

даних, наприклад:

char st [5]; сіn>> st;

char *pst; сіn>>*pst;

char str [5][20]; сіn>>str [i];

char *pst [5]; сіn>> *(pst [i]);

- посимвольне введення за допомогою функції get( ), наприклад:

get (st[i]);

- введення за допомогою функції cin.get:

cin.get (str[i], size, endl);,

де size - кількість символів, що читаються;

- введення з використанням функції cin.getline:

cin.getline (str[i], sizeof (str[i]-l));,

де sizeof() — функція визначення розміру рядка,

Виведення рядкових даних реалізується з використанням стандартного

вихідного потоку cout:

сout<<st;

сout.write(st, size); тощо.

Для потокового введення-виведення доцільно застосовувати функції setw(w),

setprecision(d), cout.width(w) і cout.precision(d).

Page 41: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Введення-виведення символьних масивів можна здійснити за допомогою

відповідних функцій заголовного файла stdio.h., наприклад:

- для введення рядків — gets( st); та scanf (% s,st);

- для виведення рядків — puts(st); і printf(% s,st);.

Завдання на практичну роботу.

Варіант 1.

Увести речення та підрахувати і вивести слова, що поч наються на сполучення

літер «св»:

«И тот, в ком светоч разума горит, Дурных деяний в мире не свершит».

Варіант 2.

У наведеному тексті вивести слова, що починаються закінчуються на однакові

літери:

«Такт — зто разум сердца и тот, кто его имеет, — хорошо воспитан».

Варіант 3

Ввести речення та визначити і вивести найкоротше слово: «Наука єсть не что

иное, как отображение действительноети ».

Варіант 4

З уведеного списку прізвищ вивести прізвища, що починаються на літеру «С»

та закінчуються на літеру «в».

Варіант 5

Визначити, скільки разів у введеному реченні повторюються літера «о»:

«Непреодолимого на свете нет ничего».

Варіант 6

У введеному тексті програмними засобами видалити між рловами всі

символи, що не є літерами.

Варіант 7

Увести текст: «Мед в лесу медведь нашел — мало меда много пчел».

Вивести слова, що починаються на літеру «М» або «м».

Варіант 8

Увести деяку кількість слів та визначити три найдовших слова.

Варіант 9

Увести список прізвищ, що розташовані у довільному порядку, та

відсортувати його за алфавітом.

Варіант 10

Увести будь-яке речення і визначити, скільки разів повторюється в ньому

задане слово.

Варіант 11

Даний текст розбити на слова і вивести їх за алфавітом: «Слово — поступок,

а понимание — начало согласия».

Page 42: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 12

З введеного списку прізвищ вивести ті, що мають дві голосні літери.

Варіант 13

Увести вірш та вивести слова, що починаються на літери «с» або «п»:

«Во всем мне хочется дойти До самой сути: В работе, в поисках пути, В

сердечной смуте».

Варіант 14

Увести задане речення та вивести слова, у яких немає шолучення літер «про»

та літери «р»:

«Профессионализм — зто стабильность результатов».

Варіант 15

Увести текст та підрахувати слова, що збігаються з заданим словом.

Варіант 16

У наведеному тексті замінити слово «урок» на «опыт»:

«Ошибка одного — урок другому».

Варіант 17

З уведеного тексту вивести слова із закінченням «ть».

«Существует только один способ стать хорошим собеседником — уметь

слушать.»

Варіант 18

Підрахувати, скільки разів у наведеному тексті повторюється слово «сессия»:

«Студент бывает весел от сессии до сессии, а сессия

всего два раза в годі»

Варіант 19

З уведеного списку вивести прізвища із заданою кількістю літер.

Варіант 20

Вивести слово, що складене з перших літер слів уведеного речення.

Варіант 21

Вивести частину наведеного тексту, що розташованії між словами

«заключено» та «есть»:

«В каждой естественной науке заключено столько истины, сколько в ней

есть математики».

Варіант 22

Увести речення та підрахувати, скільки разів у ньому повторюється задане

користувачем сполучення літер.

Варіант 23

Увести невелику програму, написану мовою С++. Визначити, скільки в ній

операторів і скільки разів повторюєть ся оператор For.

Page 43: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 24

Увести нижче поданий тект і вивести слова, які містять літеру «о»:

«Не позволяй душе лениться,

Чтоб воду в ступе не толочь.

Душа обязана трудиться

И день и ночь, и день и ночь!»

Варіант 25

Підрахувати, скільки слів у наведеному реченні містять більше ніж п'ять

символів та вивести ці слова:

«Истина, выраженная словами, есть могущественная сила в жизни

людей».

Контрольні запитання.

8. Що таке рядки та значення елементів символьного типу?

9. Що являє собою масив символьного типу?

10. Як здійснюється введення символьних даних?

11. Як виконується порівняння даних символьного типу?

12. Як визначити кількість символів у рядку?

13. Які функції здійснюють перевірку символів?

14. Як виконується перетворення рядків у числа і навпаки?

Page 44: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

ПРАКТИЧНА РОБОТА № 8

Вирішення задач з використанням структур.

Ціль: навчитися складати програми з використанням структур.

Теоретичні відомості.

Структура – це сукупність різнотипних елементів, яким присвоюється одне

ім’я (воно може бути відсутнім), що займає одну ділянку пам’яті.

Структура (struct) складається з фіксованого числа компонентів (елементів)

різних типів. Ці елементи називають полями.

Опис типу struct має наступний вигляд:

struct имя_структуры

{

тип1 имя_элемента1;

.........

типN имя_элементаN;

} ім'я змінної типу структури;

Наприклад, для знаходження середнього бала, отриманого студентами в період

сесії з дисциплін «Математика», «Фізика» та «Програмування», визначимо таку

структуру:

struct stud

{ char fam [25]; // прізвище та ініціали

int mat, fiz, prg; //дисципліни

float sb; //середній бал

} st1, st2;

Змінна типу структури може бути оголошена поза описом структури за

допомогою імені структури, яке називають структурним тегом.

Тег структури може починатися:

struct date d

Для звернення до елементу структури можна вказати ім'я змінної і ім'я

елементу структури, розділивши їх крапкою. До елементу структури застосовна

операція привласнення.

Структура може передаватися у функцію по імені.

У тому випадку, коли потрібно змінити значення елементів структури у

функції, структура повинна передаватися у функцію за допомогою адреси (),

наприклад:

show_date (&d);

Усередині функції слід використовувати покажчик на структуру, наприклад:

d->day=19;

Приклад . Увести в комп'ютер відомість успішності групи студентів, які

здали сесію з дисциплін «Математика», «Фізика» і «Програмування», та

обчислити:

- середній бал кожного студента;

- середній бал групи за кожним предметом;

- вивести на екран прізвища відмінників з програмування.

Page 45: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

#include <iostream.h>

#include <string.h>

void main()

{ const n = 5; // n количество студентов

int і;

float sm, sf, sp;

/* sm, sf, sp сумма оценок группы соответственно по математике,

физике, программированию */

struct stud

{ char fam[25];

int mat, fiz, prg;

float sb; } ved[n]; / /ved[n] - массив студентов (ведомость)

sm = sf = sp = 0;

// .. ввод и обработка информации о студентах и их успеваемости

for (і = 0; і < n; i++)

{ cout <<"***** Введите информацию о "<<(i+1)<<" студенте\n";

{ cout«"Ввeдите фамилию и инициалы\п";

gets(ved[i]. fam);

cout <<"Оценки по матем., физике и программир.\n";

cin>>ved[i].mat >> ved[i].fiz >> ved[i].prg;

//--------------------вычисление среднего балла студента за сессию

ved[i].sb = (float(ved[i].mat + ved[i].fiz + ved[i].prg))/3;

//------------------ суммирование оценок в группе, по предметам

sm += ved[i].mat;

sf += ved[i].fiz;

sp += ved[i].prg;

}

}

// ........... ........ вывод результатов вычислений

cout << "\n******* Результаты сессии\n";

cout.precision(3);

for (і = 0; і < n; і++)

cout<<i+l<< " "<<ved[i].fam<<" матем. = " <<ved[i].mat << " физика = "<<

ved[i].fiz<<" програм. = "<<ved[i].prg<<" ср. балл = "<<ved[i].sb<<"\n";

cout<<"\n\nСредний балл группы по математике = "<<sm/n;

cout<<"\nСредний балл группы но физике = "<<sf/n;

cout<<"\nСредний балл группы по программированию = "<<sp/n;

cout « "\n\n***** Отличники но программированию: \n";

for (i = 0; i < n; i++)

if (ved[i].prg == 5) cout<<ved[i].fam<<"\n";

cin>>i;

}

Результати виконання пограми:

***** Введите информации) о 1 студенте

Введите фамилию и инициалы

Page 46: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Адаменко Р. Л.

Оценки по матем., физике и программир.

4 4 5

***** Введите информацию о 2 студенте

Введите фамилию и инициалы

Вочаренко П.П.

Оценки по матем., физике и программир.

5 5 4

***** Введите информацию о 3 студенте

Введите фамилию и инициалы

Волошко А. А.

Оценки по матем., физике и программир.

4 4 3

***** Введите информацию о 4 студенте

Введите фамилию и инициалы

Долбня В. Е.

Оценки по матем., физике и программир.

5 5 5

***** Введите информацию о 5 студенте

Введите фамилию и инициалы

Ильченко Г. Г.

Оценки по матем., физике и программир.

3 3 4

******* Результаты сессии

Адаменко Р. Л. матем. = 4 физика = 4 нрограм. = 5 ср. балл = 4.33

Вочаренко II. П. матем. = 5 физика = 5 програм. = 4 ср. балл = 4.67

Волошко А. А. матем. = 4 физика = 4 нрогам. = 3 ср. балл = 3.67

Долбня В. Е. матем. = 5 физика = 5 нрограм. =5 ср. балл = 5

Ильченко Г.Г. матем. = 3 физика = 3 програм. = 4 ср. балл = 3.33

Средний балл группы но математике = 4.2

Средний балл группы по физике = 4.2

Средний балл группы по программированию = 4.2

***** Отличники по программированию:

Адаменко Р. Л.

Долбня В. Е.

Page 47: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Завдання на практичну роботу.

Варіант 1.

Ураховуючи відомості про заборгованість групи студентів, вивести за

вказівкою користувача або повідомлення про студентів-курахівчан, які мають

заборгованості та їхню кількість, або повідомлення про іногордніх студентів-

боржників.

Варіант 2.

Ураховуючи відомості про студентів вашої групи: прізвище, ініціали, місце і

дату народження, вивести –за вказівкою користувача або повідомлення про

студентів, які народилися у заданому місці, або список студентів за зростанням

року народження.

Варіант 3.

Ураховуючи відомості про студентів вашої групи: прізвище, ініціали, місце

проживання батьків, навчання в ЦДП (центр довузівської підготовки) – денна,

недільна, заочна форма навчання, вивести –за вказівкою користувача або

повідомлення про студентів, які закінчили ЦДП заданої форми навчання, або

список студентів, які взагалі не навчались в ЦДП

Варіант 4.

Увести інформацію про працівників виробничого підрозділу такого змісту:

прізвище, ініціали, стать, рік народження та спеціальність. Вивести за вказівкою

користувача повідомлення або про працівників жіночої статі заданої спеціальності,

або про працівників чоловічої статі заданого року народження.

Варіант 5.

Увести інформацію про студентів, що проживають у гуртожитку, такого

змісту: прізвище, стать та номер кімнати. Вивести за вказівкою користувача або

номер кімнат, у яких проживають юнаки, або прізвища дівчат, котрі мешкають в

одній кімнаті.

Варіант 6.

Увести відомість успішності студентів з трьох предметів. Вивести за вказівкою

користувача або список студентів з їх середнім балом, або дані про студенда за

заданим прізвищем та ініціалами.

Варіант 7.

Увести інформацію про працівників виробничого підрозділу такого змісту:

прізвище, ініціали, стать, вік та спеціальність. Вивести за вказівкою користувача

або середній вік працівників заданої спеціальності, або список працівників,

прізвища яких починаються на задану літеру.

Варіант 8.

Увести інформацію про результати складання іспиту з дисципліни

програмування студентами деякої групи. Вивести за вказівкою користувача список

студентів, що одержали добрі оцінки, або список студентів за алфавітом, що не

склали іспит взагалі.

Page 48: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 9.

Увести список студентів з інформацією про їхні оцінки з трьох предметів.

Вивести за вказівкою користувача список або за зростанням середнього балу

успішності, або за спаданням середнього балу.

Варіант 10.

Увести список викладачів кафедри з такою інформацією:прізвище та ініціали,

стать, посада, назва дисципліни, яку викладає. Вивести за вказівкою користувача

або список викладачів-жінок заданої посади, або повідомлення про викладачів-

чоловіків.

Варіант 11.

Увести список літератури з програмування з такою інформацією: прізвища

авторів, назва книги та видавництва, рік і місце видання. Вивести за вказівкою

користувача або повідомлення про літературу, що вийшла у заданому році, або

назву видань заданих авторів.

Варіант 12.

Увести список студентів, які проживають у гуртожитку, враховуючи прізвище,

ініціали, рік народження, номер гуртожитку і кімнати. Вивести за вказівкою

користувача або повідомлення про студентів, які проживають у заданому

гуртожитку і народились у заданому році, або прізвища студентів, які проживають

у кімнатах із заданим номером у двох заданих гуртожитках.

Варіант 13.

Увести інформацію про групу студентів: прізвище та ініціали, місце

народження, захоплення, стать. Вивести за вказівкою користувача повідомлення

про студенток, які захоплюються спортом, або список юнаків, які люблять

програмувати та народилися в Курахові.

Варіант 14.

Увести список, у якому зазначені прізвища, ініціали, адреса та номери

телефонів абонентів. Вивести за вказівкою користувача або прізвища абонента за

заданою адресою і номером телефону, або повідомлення про абонентів, що мають

задане прізвище та ініціали.

Варіант 15.

Увести список, який містить прізвище, ініціали і рік народження працівників

окремого підрозділу. Вивести за вказівкою користувача повідомлення про

працівників заданого року народження, або список прізвищ за зростанням року

народження.

Варіант 16.

Увести розклад занять із зазначенням дня тижня, назви предмета, виду заняття

(лекції, практичні, лабораторні) і часу проведення. Вивести за вказівкою

користувача дні тижня, коли із заданого предмета проводяться лекції, або

повідомлення про заняття в заданий день тижня.

Page 49: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 17.

Увести список літературних джерел з курсів, що читаються у поточному

семестрі. За вказівкою користувача вивести повідомлення або про літературу з

заданої дисципліни, або про назви книг заданого року видання.

Варіант 18.

Увести в комп'ютер інформацію про захворювання співробітників: прізвище

та ініціали, рік народження, захворювання, тривалість хвороби. Вивести за

вказівкою користувача або прізвище працівника, який хворів найдовше, або список

працівників за зростанням тривалості хвороби.

Варіант 19.

Увести список спортсменів, що складається з прізвища, статі, року

народження і виду спорту. Вивести за вказівкою користувача список легкоатлетів

або список жінок-гімнасток.

Варіант 20.

Увести в комп'ютер інформацію про асортимент продовольчих товарів в

магазині такого змісту: назва магазину, код товару, кількість цього товару, ціна за

кілограм. За вказівкою користувача або відсортувати магазини за спаданням

оптової ціни заданого товару, або вивести повідомлення, в яких магазинах є

потрібний товар.

Варіант 21

Увести в комп'ютер таку інформацію про потяги: номер потяга, назву

напрямку руху, час прибуття. Вивести за вказівкою користувача або повідомлення

про потяги, що прибувають у заданий час, або про кількість потягів заданого

користувачем напрямку руху.

Варіант 22

Увести в комп'ютер інформацію про книги з програмування мовою С++. На

екран за вказівкою користувача вивести або повідомлення про книги вітчизняних

авторів, або список книг закордонних авторів, розташованих за спаданням кіль-

кості сторінок.

Варіант 23.

Увести в комп'ютер таку інформацію про автомобілі: прізвище та ініціали

власника, модель автомобіля, рік його випуску та потужність. Вивести за

вказівкою користувача марки автомобілів, рік випуску та потужність яких

співпадають з ввс деними в рядку запиту, або прізвища власників автомобілів зм

алфавітом з відповідними повідомленнями про їхні автомобілі.

Варіант 24.

Увести в комп'ютер інформацію про користувачів бібліо теки: прізвище та

ініціали читача, назву кафедри, кількість книі на абонементі. Вивести за вказівкою

користувача або повідом лення про читача, що має найбільшою кількість книг, або

спи сок працівників заданої кафедри за зростанням кількості книг

Page 50: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 25.

Увести інформацію про студентів групи: прізвище ти ініціали, середні бали за

два семестри. Вивести за вказівкою користувача або повідомлення про студентів,

що мають однако вий середній бал за обидва семестри, або список студентів зи

спаданням їх середнього бала в другому семестрі.

Контрольні запитання.

1. Як описуються дані типу структура?

2. Наведіть приклади використання структур.

3. Які типи поліфв може містити структура?

4. Поясніть призначення функції обробки полів.

5. Які існують способи ініціювання полів структури?

6. Що таке «вкладеність» структур?

Page 51: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

ПРАКТИЧНА РОБОТА № 9

Вирішення задач з використанням файлів.

Ціль: навчитися писати програми з використанням файлів.

Теоретичні відомості.

Файлом є послідовність елементів одного і того ж типу, що мають загальне

ім'я. Число елементів (довжина файлу) не обмежене. Файли створюються на

магнітній стрічці, на магнітному диску, на інших зовнішніх пристроях, а також в

оперативній пам'яті ЕОМ.

Для того, щоб програма на мові C++ могла працювати з файлами, необхідно в

початок програми включити заголовний файл fstream.h:

#include<fstream.h>

Виведення (запис) даних у файл. Запис даних у файл можливий в двох

режимах:

1) створення нового файлу (перезапис існуючого, раніше створеного файлу);

2) додавання даних в існуючий файл.

Для відкриття файлу в режимі створення використовується оператор ofstream

out_file ("имя_файла.расширение");

У круглих дужках оператора ofstream можна вказати другий параметр із списку:

ios::out — відкрити файл для виводу;

ios::trunc — перезаписати вміст існуючого файлу;

ios::noreplace — якщо файл існує, не відкривати файл;

ios::nocreate — якщо файл існує, не створювати файл;

ios:: ate — розташувати файловий покажчик в кінці файлу.

Наприклад, оператор

ofstream out_file ("filel .txt", ios : :out | ios : :rioreplace) ; відкриває файл для виводу з

ім'ям file I .txt без перезапису існуючого файлу в поточному каталозі на диску.

Вивід у файл здійснюється за допомогою оператора вставки (<<). Для закриття

файлу використовується функція close().

Приклад

#include<f-stream.'h>

void main(void) |

{

ofstream out_file("filel.txt"); //открытие файлу

out_f Іє«"3апісь у файл. "«endl;

out_f Іє«"режім створення, "«endl;

out_file.close() ; ' //закрытие файлу

}

В результаті роботи цієї програми в поточному каталозі на диску буде відкритий

файл filel.txt, у який будуть записаний два рядки:

Запис у файл. .

Режим створення.

Подивитися вміст файлу filel.txt можна за допомогою команди type в системі

MS-DOS.

Для відкриття файлу в режимі додавання використовується оператор

Page 52: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

ofstream out_file("имя_файла.расширение", ios::app); Параметр ios::app наказує

відкрити файл в режимі додавання, розташовуючи файловий покажчик в кінці

файлу.

Приклад .

#include<fstream.h>

void main(void)

{

ofstream out_file("filel.txt", ios::app);

out_fi1е<<"Режим додавання."«endl;

out_file.close ();

}

В результаті виконання цієї програми в поточному каталозі на диску буде

відкритий файл filel.txt, у який буде доданий рядок: "Режим додавання." Таким

чином, у файлі filel.txt опиняться три рядки:

Запис у файл.

Режим створення.

Режим додавання.

Введення (читання) даних з файлу. Ввести дані в програму на мові C++ можна

не тільки з клавіатури, але і з файла. Для відкриття файлу в режимі введення

використовується оператор

ifstream in_file ("имя_файла.расширение");

У операторові ifstream можна вказати другий параметр:

ios::in — открыть файл для введення.

Введення з файлу здійснюється за допомогою оператора витягання (>>).

Приклад

#include<iostream.h>

#include<fstream.h>

void main(void)

{

char а[64],b-.[64],c[64];

ifstream in_file("filel.txt"); . .

in__file>>a>>b>>c;

cout<<"Перший рядок файлу filel .txt: "<<a<<" "<<b«" "<<c<<endl;

in_file.close ();

Допустимо, що в поточному каталозі на Диску заздалегідь створений файл

filel.txt, у якому записано три рядки:

Запис у файл.

Режим створення.

Режим додавання.

Тоді в результаті вирішення програми на екран дисплея буде виведено:

Перший рядок файлу filel.txt: Запис у файл.

— буде прочитана і виведена на екран дисплея перший рядок з файлу filel.txt.

Пропуски між словами "Запис у файл." будуть сприйняті компілятором C++ як

символи кінця рядка, а змінні а, b і з набудуть значень: "Запис", "в" і "файл."

відповідно.

Для того, щоб прочитати з файлу filel.txt всі три рядки, можна скористатися

функцією getline.

Приклад

Page 53: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

#include<iostream.h>

#include<fstream.h> void main(void)

char а[64],b[64],с [64] ; .

ifstream iri_file("filel.txt");

in_f ile.getli'ne (а, sizeof (a) ) ;

in_file.getline(b,sizeof(b));

in_file.getline(з, sizeof(c));

cout<<a<<endl;

cout<<b<<endl ;

cout<<c<<endl;

in_file.close();

}

В результаті вирішення цієї програми на екран дисплея буде виведено:

Запис у файл.

Режим створення.

Режим додавання.

У тому випадку, коли не відомо, скільки рядків міститься у файлі, можна

забезпечити читання інформації до тих пір, поки не зустрінеться кінець файлу.

Досягнення кінця файлу перевіряється за допомогою функції eof, яка повертає

значення 0 (брехня), поки не зустрінеться кінець файлу, і значення 1 (істина), якщо

зустрівся кінець файлу.

Завдання на практичну роботу

Варіант 1

Створити файл і записати в нього список групи із зазначенням прізвища

студента, статі і віку. Прочитати файл і вивести інформацію про студентів за

заданими віком та статтю.

Варіант 2

Створити файл, у який записати список студентів із зазначенням прізвища,

ініціалів, назви групи, середнього бала, отриманого на сесії, і місця проживання.

Вивести всі дані про студентів, середній бал яких не менше чотирьох.

Варіант 3

Створити файл, у який записати бібліографічну інформацію про прочитані

книги: автор, назва книги, рік видання. Прочитати цей файл і вивести назву книг,

що видані у заданому користувачем році видання.

Варіант 4

Створити файл, у який записати інформацію про студентів групи: прізвище,

ініціали, рік народження, стать. Вивести інформацію про студентів, що народились

у зазначеному користувачем році.

Варіант 5

Створити файл з повідомленнями про прізвища власників автомобілів, марки

автомобілів, їх колір та рік випуску. Вивести прізвища власників, що мають

автомобіль зазначеного користувачем року випуску, марки та кольору.

Page 54: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 6

Створити файл з такими повідомленнями про викладачів: прізвище, ініціали,

назва кафедри, назва дисципліни, що викладає. Вивести повідомлення про

викладачів з розташуванням їх прізвищ у алфавітному порядку.

Варіант 7

Записати у файл матрицю М(4,5), прочитати цей файл та вивести

максимальні елементи другого рядка та четвертого стовпця матриці.

Варіант 8

Створити файл, який містить номери потягів, їх маршрут та час

відправлення. При читанні цього файла вивести повідомлення про маршрут

проходження і час відправлення потяга із заданим користувачем номером.

Варіант 9

Створити файл, який містить інформацію про студентів- харків'ян: прізвище,

ініціали, середній бал за сесію, номер телефону і адресу. Вивести повідомлення про

студентів за зростанням їх бала за сесію.

Варіант 10

Створити файл, який містить повідомлення про студентів групи, що мають

заборгованість по окремих предметах. При читанні файла вивести прізвища

студентів за спаданням кількості заборгованостей.

Варіант 11

Записати у файл довільну матрицю, прочитати отриманий файл та вивести

матрицю, відсортовану за зростанням елементів рядків.

Варіант 12

Записати у файл довільну квадратну матрицю, прочитати цей файл та

вивести елементи матриці, розташовані вище побічної діагоналі.

Варіант 13

Записати у файл таку інформацію: прізвище друга, дату та рік його

народження і номер телефону. Вивести повідомлення про друзів за спаданням їх

дати народження.

Варіант 14

Записати у файл інформацію про друзів-однокурсників: прізвище, ім'я та

номер телефону. Вивести повідомлення згідно з заданим номером телефону.

Варіант 15

Записати у файл 20 дійсних чисел. Вивести число, зо писане під заданим

порядковим номером та повідомлення про кількість таких чисел.

Варіант 16

Створити файл, який містить список студентів і їх оцін ки за результатами

екзаменаційної сесії (не менше трьох пред метів). Прочитати цей файл і вивести

результати сесії заданого студента.

Page 55: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 17

Створити файл, який містить повідомлення про студен тів (прізвища,

ініціали) і результати атестації з програмування Вивести список неатестованих

студентів.

Варіант 18

Записати у файл список працівників із зазначенням прі звища, статі, року

народження і спеціальності. Вивести список чоловіків-пенсіонерів.

Варіант 19

Записати у файл довільну матрицю, вивести задані ко ристувачем стовпці

матриці, відсортовані за спаданням додат них елементів.

Варіант 20

Записати у файл список спортсменів із зазначенням прі звища, статі та виду

спорту. Вивести список чоловіків-волей болістів.

Варіант 21

Створити файл з такою інформацією: прізвища студен тів потоку, які

проживають у гуртожитку, із зазначенням но мерів кімнат та назви групи. Вивести

інформацію про студен тів, що проживають у кімнаті з заданим номером.

Варіант 22

Створити файл, в який записати матрицю заданого роз міру. При його

читанні підрахувати і вивести суму кожного рядка.

Варіант 23

Записати у файл таку інформацію виробничого підрозділу: прізвище, стать

та освіта працівника. Вивести прізвища жінок, які мають вищу освіту.

Варіант 24.

Записати у файл таку інформацію: прізвище та ініціали працівника

підприємства, його посаду та зарплату. Вивести повідомлення про працівників, які

мають зарплату меншу, ніж задана користувачем.

Варіант 25

Записати у файл одновимірний масив, прочитати цей файл, вивести

елементи, розташовані на парних місцях, та суму непарних елементів.

Контрольні запитання

1. Що таке файл, чим він відрізняється від масиву?

2. Які операції треба виконувати при роботі з файлом даних?

3. Які існують засоби створення потоків і відкриття файла?

4. Які дані можна записувати у файл?

5. Охарактеризуйте на прикладах порядок створення файла.

Page 56: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

ПРАКТИЧНА РОБОТА № 10

Вирішення задач з використанням класів.

Ціль: навчитися писати програми з використанням класів.

Теоретичні відомості. Клас являє собою абстрактний тип даних, що визначається користувачем і

являє собою модель реального об'єкта у вигляді даних та функцій для роботи з

ними

Оголошення класу має таку форму:

class <ім'я класу> : <список класів-батьків>

{

public: // доступно всем

<дані, методи, властивості, події>

protected: // доступно только потомкам

<дані, методи, властивості, події>

private: // доступно только в классе

<дані, методи, властивості, події>

} <список змінних>

Об'єкт — це змінна типу клас. Дані класу називаються полям и , а функції —

методами, що призначені для обробки полів. Крім методів, тип клас може мати

спеціальні функції — конструктори і деструктори.

Однією з найцікавіших властивостей об'єктно-орієнтованого програмування

(ООП) є можливість успадкування даних і функцій. У випадку, коли один клас

успадковує інший, базовий клас називають батьківським, а той, що успадковує, —

похідним або нащадком.

Розміщення описів змінних і функції з їх обробки, тобто полів та методів в

одному класі називається інкапсуляцією.

Класи в C++ мають три різних рівні доступу до своїх елементів, тобто даних

(полів) і функцій (методів):

- закриті елементи (private);

- захищені елементи (protected);

- відкриті елементи (public).

До даних у закритому розділі (private) мають доступ тільки функції-

елементи свого класу. Класам-нащадкам забороняються доступ до закритих даних

своїх базових (батьківських) класів. За замовчуванням усі дані-члени класу мають

атрибут private (закритий).

До даних у захищеному розділі (protected) мають доступ функції свого

класу і функції класів-нащадків.

У свою чергу до даних відкритого розділу (public) можуть ввертатися будь-

які функції.

Існують такі правила створення розділів класу:

- розділи можуть з'являтися в будь-якому порядку і декілька разів;

- якщо не оголошено жодного розділу, компілятор за замовчуванням

оголошує усі елементи закритими;

- розміщати дані-елементи класу у відкритому розділі на тільки за

необхідності. Дані-елементи класу звичайно розміщують у закритому,

Page 57: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

або захищеному розділі, щоб до них мали доступ функції-члени

класу, а також функції класів-нащадків;

- для зміни значень даних (полів) слід використоп функції-члени

класу;

- клас може мати декілька конструкторів, але тільки один деструктор.

Розглянемо приклад використання класу.

Приклад 1. Навести просту програму з використанням класу.

#include <iostream.h>

class myclass

{

int p; //закрытая переменная no умолчании

public:

void set_p(int x); //прототипы функций-членов класса

int get_p();

};

//- ....... - .................... описание функций-членов класса

void myclass::set_p(int x) { p = x; }

int myclass: :get_p( ) { return p; }

main()

{ myclass obi, ob2; //объявление объектов

int k;

//вызов функций-членов класса

ob1.set_p(10);

ob2.set_p(30);

cout<<"p1= "<<ob1.get_p()«" ";

cout<< "p2= "<<ob2.get_p( )<<endl;

cin>>k;

return 0;

}

Результати обчислень:

pl= 10 p2= 30

У програмі оголошено клас з ім'ям myclass, що має одну закриту змінну р і

дві відкриті функції-члени класу set_p() і get_p(). Перша з функцій призначена для

ініціювання закритої змінної р, а друга — для її повернення.

В описі класу оголошено тільки прототипи функцій, їх реалізацію наведено за

межами опису. Але якщо функція складається з декількох операторів, її можна

розмістити всередині класу. Оскільки ці функції є членами класу, то вони мають

доступ до закритої змінної р.

У випадку, коли функції-члени описано за межами класу, їхні заголовки

повинні складатися з імені класу, операції розширення області класу «::», імені

функції та її формальних аргументів, якщо вони є, а далі йтиме зміст функції.

У головній функції main() спочатку оголошуються два об'єкти типу myclass,

потім ці об'єкти ініціюються конкретними значеннями змінної р (ob1.set_p(10) та

ob2.set_p(30), після цього значення цієї змінної виводяться на екран.

Page 58: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Треба звернути увагу, що елементи класу записуються через крапку

після імені об'єкта.

І Серед функцій-членів класу можуть бути такі, що визначабть процеси

створення, ініціювання, копіювання та знищення об’єктів свого класу. До цих

функцій належать конструктори і деструктори, які у попередній програмі не

використовувались (у такому випадку вони автоматично викликликалися системою

за замовчуванням), тому в оголошенні об'єктів ob1 та ob2 не було параметрів

їхнього ініціювання, для цього використовувалась функція set_p() .

Головною метою конструкторів є ініціювання змінних-об'єктів класу та

розподілення пам'яті для їх зберігання. Конструктор викликається кожного разу

при створенні об'єкта даного класу або явно, або автоматично.

Основні правила роботи з конструкторами:

- ім'я конструктора повинне співпадати з ім'ям свого класу;

- для конструктора не вказується тип значення, яке повертає функція;

- клас може мати декілька конструкторів або не мати жодного;

- конструктор за замовчуванням — це конструктор, який не має

параметрів, або всі його параметри мають значення за замовчуванням;

- конструктор копіювання безпосередньо призначений для створення

об'єкта класу шляхом копіювання даних з існуючого об'єкта.

Наведемо приклади оголошення конструкторів:

Class clsl {

int х, у; //защищенные переменные класса

public:

cls1(); //конструктор по умолчанию без параметров

cls1(int xval=0; int yval=0); /* конструктор по умолчанию с параметрами,

имеющими значения по умолчанию*/

cls1(const clsl &pt); //конструктор копирования

};

При оголошенні об'єкти ініціюють захищені змінні, тому вони

оголошуються з параметрами або без них залежно від виду конструктора. Якщо

клас має декілька конструкторів, для кожного об'єкта використовується той, що

співпадає з ним за кількістю та типом аргументів.

Якщо в головній програмі оголошено, наприклад:

main() {

cls1 pi; clsl1 p2(10,20); cls1 рЗ(р2);

},

то у першому випадку буде виконуватися конструктор за замовчуванням без

параметрів, у другому — конструктор з параметрами за замовчуванням, у третьому

— конструктор копіювання.

Деструктори необхідні для автоматичного руйнування об'єктів класу. Їх

використання має такі особливості:

- ім'я деструктора повинно починатися знаком ~ (тильда] за яким записується

ім'я класу;

- для деструктора не вказується тип значення, що повертається (як і для

конструкторів);

Page 59: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

- клас завжди має тільки один деструктор або не має жодного. У такому

випадку компілятор сам створює деструктор за замовчуванням;

- деструктор не може мати параметрів; програма автоматично викликає

деструктор, якщо об'єкт класу виходить за межі області дії і повинен бути

знищений.

Приклад 2. Навести програму, в якій конструктор використовується для

ініціювання закритої змінної х, а деструктор — для її руйнування.

#include <iostream.h>

class myclass2

float x; // защищенная переменная

public:

myclass2( ); // прототип конструктора

~myclass2( ); // прототип деструктора

void show( ); // прототип функции show()

};

myclass2::myclass2( ) //описание конструктора

{ cout<<"Dates constructor\n";

}

myclass2::~myclass2( ) // описание деструктора

{

cout<<"Delete object\n";

}

void myclass2::show( ) //определение функции show()

{

cout<<"x= "<<x«"\n";

}

main()

{

myclass2 p; // .............. объявление объекта класса

int i;

p.show( ); //вызов функции show()

сіn>>і;

return 0;

}

Результат розв'язання програми:

Dates constructor

х= 15.85

Конструктори і деструктори необхідні для роботи з динамічними даними. Для

виділення динамічної пам'яті користуються оператором new у конструкторі, а для

її звільнення — оператором delete у деструкторі.

Page 60: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Завдання на практичну роботу

Для розв'язання задач усіх варіантів необхідно використовувати елементи ООП.

Варіант 1

Обчислити площу рівностороннього трикутника і квадрата, якщо їхні сторони

однакові.

Варіант 2

Увести список студентів групи, які проживають у гуртожитку. Вивести

прізвища студентів, що мешкають у заданій кімнаті.

Варіант 3

Обчислити площу круга і поверхню кулі, що мають однаковий радіус.

Варіант 4

Увести список студентів-харків'ян та вивести адреси студентів за заданими

користувачем прізвищами.

Варіант 5

Непарні злементи масиву М(20) записати в масив МІ, а парні — в масив М2.

Варіант 6

Увести список студентів і їхню групу. Вивести список студентів заданої групи.

Варіант 7

Обчислити площу квадрата й обсяг куба, що мають однакову довжину сторін.

Варіант 8

Увести відомість успішності студентів за трьома предметами. Вивести

прізвища відмінників з математики та програмування.

Варіант 9

У заданому масиві визначити максимальний і мінімальний елементи та їхні

індекси.

Варіант 10

Увести відомість успішності студентів за трьома предметами. Вивести

середній бал, одержаний усіма студентами з кожного предмета.

Варіант 11

У матриці М(5,5) визначити добуток елементів, розташованих вище і нижче

головної діагоналі.

Варіант 12

Увести відомість успішності студентів за трьома предметами. Вивести

прізвища трьох студентів, у яких середній бал з усіх предметів найкращий.

Варіант 13

Обчислити поверхню куба та площу прямокутника, в яких одна сторона

однакова.

Варіант 14

Ввести список студентів та дату їхнього народження (день, місяць, рік).

Вивести прізвища студентів заданої дати народження.

Page 61: СИСТЕМНЕ ПРОГРАМУВАННЯ - uCozpebt.at.ua/prakticheskie_raboty_s.pdf · 2013-01-14 · (службові)слова, числа, рядки символів, влучні

Варіант 15

У матриці М(3,5) обчислити суму елементів другого рядка і третього стовпця.

Варіант 16

Увести список студентів і їхню дату народження (день, місяць, рік). Вивести

дату народження заданого студента.

Варіант 17

У матриці М(4,6) визначити максимальний і мінімальний елементи та їхні

індекси.

Варіант 18

Увести список студентів та дати їхнього народження (день, місяць, рік).

Вивести прізвища студентів, які народи лись у році, заданому користувачем.

Варіант 19

Для циліндра з заданим радіусом і висотою обчислити площу поверхні та його

об'єм.

Варіант 20

Увести список групи студентів (прізвища, стать, рік на родження). Вивести

прізвища студентів-юнаків заданого року народження.

Варіант 21

У двох масивах однакової розмірності визначити максимальний елемент і

вивести ім'я масиву, в якому цей елемент більший.

Варіант 22

Увести список студентів і оцінки за трьома предметами. Вивести цей список

за спаданням їхнього середнього бала.

Варіант 23

Обчислити площу рівностороннього трикутника і поверх ню тристоронньої

піраміди, побудованої з таких трикутників.

Варіант 24

Увести відомість успішності студентів за трьома предметами. Вивести

успішність заданого студента з усіх предметів і середній бал.

Варіант 25

Використовуючи інформацію про автомобілі (прізвище та ініціали власника,

марку машини, її колір та номер), вивести прізвище власника автомобіля «Skoda»

зеленого кольору.

Контрольні запитання. 1. Дайте визначення класу.

2. Які особливості використання ООП?

3. Що таке інкапсуляція, для чого вона використовується?

4. Охарактеризуйте поняття «успадкування».

5. Що таке поліморфізм?

6. Для чого використовуються конструктори і деструктори?