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

 


Связанные темы