C++. Розв’язування задач. Функції та масиви. Прототип функції. Передача масиву у функцію

Розв’язування задач. Функції та масиви. Прототип функції. Передача масиву у функцію 

У темі наведено розв’язки задач, в яких продемонстровано:

  • використання прототипу функції;
  • способи передачі масиву у функцію.

Зміст


Пошук на інших ресурсах:




1. Використання прототипу функції. Приклад

1.1. Умова задачі. Обчислення довжини відрізку між точками

Дано координати точки на координатній площині x1, y1, x2, y2. Розробити функцію Length(), яка обчислює довжину відрізка утвореного цими точками.

 

1.2. Розв’язок без використання прототипу функції

Випадок 1: функція Length() реалізована перед функцією main(). У цьому випадку прототип функції не потрібно задавати.

#include <iostream>
using namespace std;

// Випадок 1. Оголошення функції Length() перед її викликом з функції main()
// Функція Length() отримує 4 параметри: x1, y1, x2, y2
double Length(double x1, double y1, double x2, double y2)
{
  // 1. Оголосити внутрішню локальну змінну len
  double len;

  // 2. Обчислити відстань за теоремою Піфагора
  // sqrt() - функція взяття кореня з числа
  len = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));

  // 3. Повернути результат з функції Length()
  return len;
}

void main()
{
  // 1. Оголосити змінні
  double x1, y1, x2, y2;
  double len; // результат

  // 2. Ввід значень змінних з клавіатури
  cout << "Enter data: " << endl;
  cout << "x1 = "; cin >> x1;
  cout << "y1 = "; cin >> y1;
  cout << "x2 = "; cin >> x2;
  cout << "y2 = "; cin >> y2;

  // 3. Виклик функції Length() з функції main()
  // у функцію Length() передаються 4 аргументи: x1, y1, x2, y2
  len = Length(x1, y1, x2, y2);

  // 4. Вивід результату
  cout << "length = " << len << endl;
}

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

Enter data:
x1 = 2.5
y1 = 3.8
x2 = 8.7
y2 = -1.4
length = 8.09197

 

1.3. Розв’язок з використанням прототипу функції

Випадок 2: реалізація функції Length() розміщується після функції main(). Скорочений текст програми має наступний вигляд. Компілятор видає помилку

#include <iostream>
using namespace std;

// Випадок 2. Функція Length() оголошена та реалізована після функції main()
// У результаті компілятор видає помилку: Length identifier not found
// Тут потрібно обов'язково оголосити прототип функції Length()

void main()
{
  ...
  ...
  ...
}

// Функція Length() отримує 4 параметри: x1, y1, x2, y2
double Length(double x1, double y1, double x2, double y2)
{
  ...
}

Щоб компілятор не видавав помилку, потрібно перед функцією main() оголосити прототип функції Length(). Після оголошення прототипу скорочений текст програми на C++ буде мати наступний вигляд:

#include <iostream>
using namespace std;

// Випадок 2. Реалізація функції Length() після функції main()
// Тут потрібно обов'язково оголосити прототип функції Length()

// Це є прототип функції Length() - інформація для компілятора, що
// у програмі десь є реалізована функція Length(). Після цього
// оголошення компілятор точно знає, що після функції main() десь є
// функція з іменем Length() та відповідними параметрами
double Length(double, double, double, double);

void main()
{
  ...
}

// Функція Length() отримує 4 параметри: x1, y1, x2, y2
double Length(double x1, double y1, double x2, double y2)
{
  ...
}

 

2. Передача одновимірного масиву у функцію. Приклад

2.1.Умова задачі

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

 

2.2.Розв’язок

 

#include <iostream>
using namespace std;

// Передача одновимірного масиву у функцію

// Оголошення функції, яка отримує масив цілих чисел.
// Функція обчислює максимальний елемент в масиві.
// Параметри функції:
// - count - кількість елементів у масиві;
// - A - параметр, що є масивом
int MaxItem(int count, int A[])
{
  // Обчислення максимального елементу в масиві

  // 1. Перевірка, чи коректне значення count
  if (count <= 0)
    return 0;

  // 2. Оголосити внутрішні змінні max, i
  int max, i;
  max = A[0]; // спочатку max рівне першому елементу масиву

  // цикл обчислення значення max
  for (i = 0; i < count; i++)
    if (max < A[i]) max = A[i];

  // 3. Повернути результат з функції
  return max;
}

void main()
{
  // Передача масиву у функцію
  // 1. Оголосити внутрішні змінні
  const int MAX_ITEMS = 10; // максимально-можлива кількість елементів у масиві
  int M[MAX_ITEMS]; // масив
  int n; // поточна кількість елементів у масиві (1 <= n <= MAX_ITEMS)

  // 2. Ввід кількості елементів у масиві
  cout << "Enter data:" << ::endl;
  cout << "n = ";
  cin >> n;

  // 3. Перевірка на коректність введеного значення n
  if ((n < 1) || (n > MAX_ITEMS))
  {
    cout << "Incorrect input." << endl;
    return;
  }

  // 4. Ввід масиву
  cout << "Enter array:" << endl;
  for (int i = 0; i < n; i++)
  {
    cout << "M[" << i << "] = ";
    cin >> M[i];
  }

  // 5. Виклик функції MaxItem()
  // У функцію MaxItem() передається масив M
  int max = MaxItem(n, M); // у змінній max - результат

  // 6. Виведення результату на екран
  cout << endl << "max = " << max << endl;
}

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

Enter data:
n = 5
Enter array:
M[0] = 4
M[1] = -5
M[2] = 8
M[3] = 7
M[4] = 1

max = 8

 

3. Передача двовимірного масиву у функцію

3.1. Умова задачі

Дано двовимірний масив M розміром m×n. Розробити функцію, яка обчислює суму елементів масиву M. Масив M передається у функцію.

 

3.2. Розв’язок

 

#include <iostream>
using namespace std;

// Дано двовимірний масив A розміром m*n.
// Розробити функцію, яка обчислює суму елементів масиву

// Оголосити розмірність масиву - за межами функції main()
const int MAX_M = 10;
const int MAX_N = 10;

// Реалізація функції
// Двовимірний масив A[][] передається з використанням константи MAX_N
double SumArray(int m, int n, double A[][MAX_N])
{
  // 1. Оголосити локальні змінні
  double sum = 0; // шукана сума

  // 2. Цикл обчислення суми
  for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++)
      sum += A[i][j];

  // 3. Повернення з функції
  return sum;
}

void main()
{
  // 1. Оголосити змінні
  double A[MAX_M][MAX_N]; // Двовимірний масив
  int m, n; // розмірність масиву
  int i, j; // додаткові змінні
  double summ; // результат виконання функції Sum()

  // 2. Ввести розмірність масиву
  cout << "Enter data:" << endl;
  cout << "m = "; cin >> m;
  cout << "n = "; cin >> n;

  // 3. Перевірка на коректність значень m, n
  if ((n < 1) || (n > MAX_N) || (m < 1) || (m > MAX_M))
  {
    cout << "Error. Incorrect input." << endl;
    return;
  }

  // 4. Ввід масиву A
  cout << "Enter array A:\n";
  for (i = 0; i < m; i++)
    for (j = 0; j < n; j++)
    {
      cout << "A[" << i << "][" << j << "] = ";
      cin >> A[i][j];
    }

  // 5. Вивід масиву A для перевірки
  cout << "\nEntered array A:\n";

  for (i = 0; i < m; i++)
  {
    // вивести один рядок масиву
    for (j = 0; j < n; j++)
    {
      cout << A[i][j] << "\t";
    }
    cout << endl;
  }

  // 6. Виклик функції SumArray()
  summ = SumArray(m, n, A);

  // 7. Виведення результату на екран
  cout << endl << "Result: summ = " << summ << endl;
}

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

Enter data:
m = 3
n = 4
Enter array A:
A[0][0] = 0.5
A[0][1] = 2.1
A[0][2] = 1.8
A[0][3] = 3.7
A[1][0] = 2.2
A[1][1] = 0.8
A[1][2] = 0.9
A[1][3] = 1.7
A[2][0] = 3.6
A[2][1] = 4.1
A[2][2] = 1.1
A[2][3] = 3.2

Entered array A:
0.5     2.1     1.8     3.7
2.2     0.8     0.9     1.7
3.6     4.1     1.1     3.2

Result: summ = 25.7

 


Зв’язані теми