Приклад
Програма роботи
Постановка завдання
Мета роботи
Лабораторна робота № 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). Для кожної з них обчислити кількість додатних і від’ємних елементів. Уведення, виведення матриці, обчислення кількості названих елементів оформити у вигляді функцій.