Приклад

Програма роботи

Постановка завдання

Мета роботи

Лабораторна робота № 11

Функції з параметрами

 

Дослідити роботу операторів функцій з параметрами мови програмування С++ , знати призначення, форму запису та особливості застосування функцій з параметрами. Засвоїти методику складання та налагодження програм із використанням функцій з параметрами на ПЕОМ.

 

Скласти схему алгоритму, таблицю символічних імен та програму мовою С++ відповідно до заданого варіанту. Налагодити та розв’язати задачу на ПЕОМ.

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

 

У мові С++ аргументи функції можуть передаватися за значенням, тобто функція, що викликається, отримує свою тимчасову копію кожного аргументу, а не його адресу. Це означає, що функція не може змінити значення змінної у програмі, яка викликала цю функцію. Однак це легко зробити, якщо передавати у функцію не змінні, а їх адреси. Наприклад:

void swap(int *a, int *b)

{

int tmp = *a;

*a = *b;

*b = tmp;

}

Виклик з програми функції swap(&b, &c) (тут підпрограмі передаються адреси змінних b і с) призведе до того, що значення змінних b і c поміняються місцями.

Коли як аргумент функції використовується ім’я масиву, то передається лише адреса початку масиву, а самі елементи не копіюються. Функція може змінювати елементи масиву, зсуваючись (індексуванням) від його початку.

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

1. Параметр задається як масив (наприклад: int m[100];).

2. Параметр задається як масив без зазначення його розмірності (наприклад: int m[];).

3. Параметр задається як покажчик (наприклад: int *m;). Цей варіант використовується найчастіше.

Незалежно від вибраного варіанта викликуваної функції передається покажчик на початок масиву. Самі ж елементи масиву не копіюються.

 

3.1. Записати запропанований викладачем варіант завдання з п. 5.

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

3.2. Програмування задачі:

– скласти таблицю символічних імен;

– скласти схему алгоритму або псевдокод (за вказіквою викладача);

– скласти програму розв’язання задачі мовою С++.

3.3. Розв’язання задачі на ПЕОМ.

На ПЕОМ набрати, відлагодити та розв’язати складену програму.

3.4. Оформлення звіту.

Звіт повинен містити:

– номер лабораторної роботи та її назву;

– умову задачі та дані свого варіанта;

– таблицю символічних імен;

– схему алгоритму (або псевдокод);

– лістинг (або рукопис) програми;

– результати розрахунку задачі;

– висновки.

 

Дано матрицю А(2,3). Знайти максимальний і мінімальний елементи та створити функції для пошуку кожного з них. Уведення та виведення матриці виконати за допомогою функцій.

Розв’язання.

Таблиця символічних імен основної програми

 

Математичне ім’я Ім’я у програмі Смисловое значення Змінна
Тип Значення
mat mat Матриця [N][M] int Уводиться
mx mx Максимальний елемент матриці int З’ясовується у процесі
mn mn Мінімальний елемент матриці int З’ясовується у процесі
N N Кількість стовпців int
M M Кількість рядків int

Таблиця символічних імен для функції PoiskMaxMin

Математичне ім’я Ім’я у програмі Смислове значення Змінна
Тип Значення
x x Матриця із [n][m] елементів int Параметр функції
n n Кількість стовпців у матриці int Параметр функції
m m Кількість рядків у матриці int Параметр функції
i i Параметр циклу int Змінне значення
j j Параметр циклу int Змінне значення
*max *max Максимальний елемент матриці int З’ясовується у функції
*min *min Мінімальний елемент матриці int З’ясовується у функції

Текст програми мовою С++

для компіляторів Vusual C++

 

#include <iostream.h>

const int N = 2, M = 3;

// функція вводу масиву

void Input(int x[N][M], int n, int m, char *name)

{

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

{

for ( int j = 0; j < m; j++ )

{

cout <<"Уведіть"<<name<<"["<<i<<"]["<<j<<"]";

cin >> x[ i ][ j ];

}

}

}

// функція виводу масиву

void Output( int x[N][M], int n, int m, char *name )

{

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

{

for ( int j = 0; j < m; j++ )

{

cout << x[ i ][ j ] << '\t';

}

cout << endl;

}

}

// функція пошуку максимального та мінімального елементів

void PoiskMaxMin( int x[N][M], int n, int m, int *max, int *min )

{

*max = x[0][0];

*min = x[0][0];

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

{

for ( int j = 0; j < m; j++ )

{

if ( *max < x[ i ][ j ] ) *max = x[ i ][ j ];

if ( *min > x[ i ][ j ] ) *min = x[ i ][ j ];

}

}

}

int main() // головна функція

{

int mat[ N ][ M ];

int mx,mn;

Input(mat,N,M,"mat"); // виклик функції вводу масиву

cout << endl << endl;

Output(mat,N,M,"mat");// виклик функції виводу масиву

cout << endl << endl;

PoiskMaxMin( mat,N, M, &mx, &mn ); // виклик функції пошуку

// максимального та мінімального елементів

cout << "Максимальний елемент = " << mx << endl;

cout << "Мінімальний елемент = " << mn << endl;

return 0;

}

 

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

 

Кожен студент вибирає варіант завдання за номером у списку групи.

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

 

1. Дано матриці А(4,4) і Y(3,3), для кожної з яких обчислити суму елементів над, під головною діагоналлю та на головній діагоналі. Уведення, виведення матриці та обчислення сум оформити у вигляді функцій.

2. Дано матриці А(4,4) і Y (5,5), для кожної з яких знайти найбільший і найменший елементи головної діагоналі. Уведення, виведення матриці, пошук мінімального і максимального елементів оформити у вигляді функцій.

3. Дано матриці А(3,3), Y (5,5), С(4,4). Для кожної з них визначити максимальні елементи у рядках і перемістити їх на головну діагональ. Уведення, виведення матриці та її перетворення оформити у вигляді функцій.

4. Дано матриці А(4,3) і Y (3,5). Знайти середні геометричні позитивних елементів кожного їх рядка. Уведення, виведення матриці та пошук середніх геометричних оформити у вигляді функцій.

5. Дано матриці А(6,3) і Y (4,5). Знайти найбільший елемент кожної з них і записати одиницю у той рядок і стовпець, в яких він розмішений. Уведення, виведення і перетворення матриці оформити у вигляді функцій.

6. Дано матриці А(3,3) і Y (5,5), транспонувати їх. Уведення, виведення і транспонування матриці оформити у вигляді функцій.

7. Дано матриці А(6,2) і Y (4,5). Знайти найбільший елемент кожної з них і номер рядка і стовпця, в яких він розміщений. Уведення, виведення матриці і пошук максимального елемента оформити у вигляді функцій.

8. Дано матриці А(4,4) і Y (3,4). Знайти найменший елемент кожної з них і записати у рядок, де міститься цей елемент, ‘10’. Уведення, виведення матриці та її перетворення матриці оформити у вигляді функцій.

9. Дано матриці А(4,5) і Y (5,5). Для кожної з них обчислити суму елементів рядків і визначити найменше значення цих сум і номер відповідного рядка. Уведення, виведення матриці і пошук номера рядка оформити у вигляді функцій.

10. Дано матриці А(3,3) і Y (4,5), де визначити кількість додатних та від’ємних елементів. Уведення, виведення матриці і пошук кількості додатних та від’ємних елементів оформити у вигляді функцій.

11. Дано матриці А(5,2) і Y (3,2). Для кожної з них знайти найбільші елементи кожного рядка і записати в одновимірний масив. Уведення, виведення матриці та формування одновимірного масиву оформити у вигляді функцій.

12. Дано матриці А(4,3), В(5,4), С(5,4) і два дійсних числа x і y. Знайти x*A, y*B, x*C+y*B. Уведення, виведення матриці, додавання, множення на число оформити у вигляді функцій.

13. Дано матриці А(4,4), Y (5,5), С(6,6). Знайти транспоновані матриці , ,. Уведення, виведення, транспонування матриці оформити у вигляді функцій.

14. Дано матриці А(4,4), Y (3,3), С(5,5). Для кожної з них обчислити суму елементів над, під головною діагоналлю та на головній діагоналі. Уведення, виведення матриці та обчислення сум оформити у вигляді функцій.

15. Дано матриці А(3,3), Y (5,5), С(4,4). Знайти третю норму для кожної з них. Уведення, виведення матриці, обчислення норми оформити у вигляді функцій, скориставшись формулою:

.

16. Дано матриці А(3,5), Y (5,2), С(4,6), у кожній з них поміняти місцями перший та останій рядки. Уведення, виведення матриці, обмін рядків оформити у вигляді функцій.

17. Дано матриці А(4,5), Y (5,3), С(4,6), у кожній з яких поміняти місцями перший і останній стовпці. Уведення, виведення матриці, обмін стовпців оформити у вигляді функцій.

18. Дано матриці А(3,5), Y (5,2), С(4,6), у кожній з яких визначити місце розмішення максимального елемента. Уведення, виведення матриці, пошук місця оформити у вигляді функцій.

19. Дано матриці А(4,5), Y (5,3), С(4,6). Утворити три нові матриці діленням кожного елемента вихідної матриці на середнє арифметичне її елементів. Уведення, виведення та зміну матриць оформити у вигляді функцій.

20. Дано матриці А(3,3), Y (5,5), С(4,4), у кожній з яких поміняти місцями елементи на головній і побічній діагоналях. Уведення, виведення, перетворення матриці оформити у вигляді функцій.

21. Дано матриці А(3,3), Y (5,5), С(4,4). Для кожної з них обчислити суму елементів головної діагоналі. Уведення, виведення матриці, обчислення суми елементів зазначеної діагоналі оформити у вигляді функцій.

22. Дано матриці А(3,5), Y (5,2), С(4,6). Для кожної з них обчислити суми рядків. Уведення, виведення матриці, обчислення сум рядків, виведення вектора сум оформити у вигляді функцій.

23. Дано матриці А(4,5), Y (5,3), С(2,6). Для кожної з них обчислити суми стовпців. Уведення, виведення матриці, обчислення сум стовпців, виведення вектора сум оформити у вигляді функцій.

24. Дано матриці А(3,3), Y (5,5), С(4,4). Для кожної з них знайти максимальний і мінімальний елементи головної діагоналі. Уведення, виведення матриці, пошук мінімального та максимального елементів оформити у вигляді функцій.

25. Дано матриці А(3,5), Y (5,2), С(4,6). Для кожної з них обчислити кількість додатних і від’ємних елементів. Уведення, виведення матриці, обчислення кількості названих елементів оформити у вигляді функцій.