Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка_с++.doc
Скачиваний:
5
Добавлен:
14.07.2019
Размер:
712.19 Кб
Скачать

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

1. Які правила запису програми мовою С++ ?

2. Які дані обробляються за допомогою мови С++ ?

3. Як задаються типи даних у С++ ?

4. Що таке константа в С++, приведіть приклади констант?

5. Що називається змінною в С++?

6. Як забезпечується організація введення- виведення ?

7. Як організується форматований висновок результатів ?

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

9. Як працює оператор switch ?

10. Які оператори циклу ви знаєте, як працює оператор циклу for ?

11. Які особливості роботи оператора циклу do і while ?

1.6 Варіанти індивідуальних завдань

Для приведених нижче варіантів необхідно скласти програму обчислення значення функцій при різних значеннях аргументів, заданих інтервалом зміни і величиною кроку.

1.

2.

3. а=5; у=3 ;

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

x і a змінюються одночасно.

16. Обчислити функцію

а - має початкове значення 0.1 і змінюється одночасно с x с кроком . Підказка: використовується один цикл.

17. Обчислити функцію двох змінних

18. Обчислити функцію:

При якім значенні х функція буде найменшою.

19. Підрахувати скільки разів функція приймає негативне значення, якщо .

20. Увести координати 10 крапок на площині і визначити, у якій із чвертей більше всього крапок.

21. Увести п'ять наборів сторін трикутника а, у, з і визначити для яких сторін висота буде найбільшою.

Підказка: де

22. Увести координати п'яти крапок і визначити яка з них потрапить в окружність з радіусом R і координатами центра (а, в).

Підказка: рівняння окружності має вид:

23. Увести п'ять шестиразрядных цілих чисел і знайти для яких з них сума «лівих» трьох цифр більше суми «правих» трьох.

24. Підрахувати скільки разів функція

приймає негативне значення, якщо .

25. Обчислити функцію у вигляді формули

для кожного значення i.

2 Розв’язання задач c використанням одновимірних і двовимірних масивів

2.1 Ціль роботи Прищепити студентам навички розв’язання задач з використанням одновимірних і двовимірних масивів, складних циклів і використання покажчиків.

2.2 Методичні рекомендації з організації самостійної роботи студентів

При підготовці до роботи повторити способи уявлення й опису одновимірних і двовимірних масивів, використання індексованих змінних при обробці даних, організацію введення і виведення масивів, використання покажчиків [1, с.25-34, с.121-127; 2, c.43-69, c.70-78; 3, c.108-157, конспект лекцій ].

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

Приклад 2.1 Обчислити функцію y = axi2 – sin xi, де x1=-1, x2=-0,93, x3=-0,49, x4=0, x5=1,13, x6=0,96, x7=1,75.

При розв’язанні такої задачі кожне з перерахованих значень треба ввести в пам'ять комп'ютера, для чого буде потрібно відповідна кількість комірок. Такий довільний ряд однотипних значень, яким привласнене одне загальне символічне ім'я (ідентифікатор), називається масивом. Окреме значення масиву називається його елементом, а місце розташування елементів у масиві визначається за допомогою його індексу. У пам'яті комп'ютера масив займає стільки комірок пам'яті, скільки в ньому елементів.

У схемі алгоритму розв‘язання задачі спочатку передбачається введення значень всіх елементів оброблюваного масиву x[n] (n =7 ). Число, укладене в дужки, визначає кількість елементів масиву. Нумерація елементів масиву починається з 0 і закінчується n –1 . Далі введені елементи використовуються при обчисленні функції, шляхом вказівки індексу відповідного елемента.

Схема алгоритму розв’язання цієї задачі і програма виглядають наступним чином:

//P2_1.CPP -обчислення значень функції

// використання одновимірного масиву

#include <iostream.h>

так

немає

#include <math.h>

main( )

{

const int n =7;

float x[n];

int i;

float a, y;

// Введення масиву

cout<< "Введіть значення масиву:" <<endl;

for ( i=0; i < n; i++)

{

cout << "x [" << i << "] = ";

cin >> x [ i ] ;

cout << x [ i ] << endl;

}

a = 10.5;

// Обчислення функції

for ( i = 0; i < n; i++)

{

y = a*x [ i ] * x [ i ] – sin ( x [ i ] )

. cout << "При значенні=" << x[i]

<< "y = " << y << endl;

}

}

При запису цього алгоритму у вигляді програми спочатку треба описати масив за допомогою оператора float x [n], ввести його значення в пам'ять комп'ютера, а потім робити необхідні обчислення.

У програмі, що реалізує даний алгоритм, для введення елементів масиву використовується оператор cin >> x [i] ;, перед цим оператором знаходиться підказка cout << "x [" << i << "] = "; і зазначен номер елемента x[i], значення якого треба ввести.

Особливість виконання оператора введення cin >> x[i] ; полягає в тому, що, зустрівши його в програмі, комп'ютер призупинить її виконання поки не буде введене значення елемента x[i] і натиснута клавіша Enter, після чого обробка програми буде продовжена. Зазначений оператор включений у цикл, реалізований оператором For, і повторюваний n разів, для забезпечення введення всіх елементів масиву.

Оскільки в мові С++ індексація елементів масиву починається з нуля, то масив float x[7] (n =7 ) із семи елементів включає індексовані елементи x[0], x[1], x[2] … x[6] і при цьому x[0] — звертання до першого елемента, x[1] звернення до другого елемента масиву і т.д. Пропонована програма використовує два цикли: один — для введення масиву, інший — для обчислення функції. Ці операції можна виконати й в одному циклі, тоді програма буде мати вигляд:

// Р2_2.CPP введення елементів одновимірного масиву

// і обчислення функції здійснюється в одному циклі

#include < iostream.h>

#include < math.h>

float a, y ;

main ( )

{

const int n =7;

float mas [ n ];

int i;

float a, y ;

a = 10.5;

for ( i = 0; i < n ; i++)

{

cout << "x [ " << i << "] = ";

cin >> x [ i ] ;

y = a * x[ i ]*x[ i ] - sin( x[ i ] );

cout << "При значенні =" << x[і] << " y= " << y << endl;

}

}

Така програма коротше попередньої, а виходить, переважніше.

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

Приклад 2.2 Обробити відомість успішності групи студентів з 10 чоловік по програмуванню, підрахувавши середній бал групи і кількість відмінників.

Список оцінок представимо масивом МА[i] (i=0..9), і програма, що реалізує таку задачу, виглядає в такий спосіб :

// Р2_3.CPP використання одновимірних масивів

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

#include < iostream.h >

#include < math.h >

main ( )

{

const int n = 10; // розмірність масиву

float mas[n]; // опис одновимірного масиву

int i, k;

float s;

s = 0 ; // s - змінна для підсумовування оцінок групи

k = 0 ; // k - змінна для підрахунку кількості відмінників

for ( i=0; i < n; i++ )

{

cout << " mas [ " << i << "] = ";

cin >> mas [ i ] ;

cout << mas [ i ] << endl;

s = s + mas [ i ];

if ( mas[ i ] = = 5)

k =k+1;

}

cout << "Середній бал = " << s / float(n ) << endl;

cout << "Кількість відмінників =" << endl;

}

У цій програмі змінна s служить для обчислення суми оцінок групи, а змінна k — для підрахунку кількості відмінників. Перед обчисленням треба задати цим змінним початкового нульового значення. Оператор cout << " mas [ " << i << "] = "; усередині циклу виконує роль підказки про необхідність введення чергової оцінки, а наприкінці використовується для виведення результатів обчислення ( cout << "Середній бал"<< s / float (n) << endl; cout << "Кількість відмінників =" << endl;) .

Крім одновимірних масивів, тобто таких, де положення елемента визначається за допомогою одного індексу, у практиці розв’язання задач часто застосовуються багатовимірні масиви. У них положення елемента визначається шляхом запису декількох індексів. Найбільш широке поширення одержали двовимірні масиви, називані матрицями. Матриці являють собою порядковий запис декількох одновимірних масивів, наприклад:

Місце розташування кожного елемента визначається за допомогою двох індексів — номера рядка і номери стовпця, тобто порядкового номера в рядку.

Індекси таких масивів записуються в квадратних дужках. Наприклад, запис М[1] [2] вказує на елемент, що знаходиться в другому рядку і третьому стовпці, тобто маючий значення -20.5 (рахунок індексів починається з 0). Для перебору всіх елементів матриці при їхньому введенні-виведенні, а також при обробці в програмі варто передбачати організацію двох циклів: один — для завдання значень індексу рядків, інший -індексу стовпців.

Приклад 2.3 До кожного елемента вищенаведеної матриці M додати число 10.

// Р2_4.CPP використання двовимірних масивів

// До кожного елемента матриці додати число 10.

#include < iostream.h >

main ( )

{

const int n = 3; // кількість рядків матриці

const int m = 5; // кількість стовпців матриці

float M [ n] [m];

int i, k;

float s;

s = 10 ;

cout << " Введіть значення масиву:" << endl;

// Введення значень двовимірного масиву

for ( i = 0; i < n; i++)

for ( k = 0; k < m; k ++)

{

cout << " M [ " << i << "] = " << "[ " << k << ]" ;

cin >> M [ i ] [ k ];

cout << M [ i ] [ k ] << endl;

M [ i ] [ k ] = M [ i ] [ k ] + s ; // Можна M [ i ] [ k ] + = s ;

}

cout << "Нове значення матриці :" << endl;

// Виведення матриці в природному вигляді

for ( i = 0; i < n; i++)

{

cout << endl;

for ( k = 0; k < m; k++)

cout << M [ i ] [ k ] << " ";

}

}

У програмі при описі матриці в операторі float M[n][m]; указується діапазон зміни двох індексів, перший з який призначений для індексування рядків, другий — стовпців.

При введенні, обробці і виведенні матриці для перебору всіх її елементів використовується два цикли, один із яких є вкладеним в іншій. Це дозволяє при кожнім значенні змінної i перебирати всі значення k.

Розглянута програма може бути скорочена шляхом об'єднання всіх трьох блоків циклу в один, але в такому випадку вона буде менш наочною.