§ 17. Массивы и структуры как параметры функций

17.2. Массивы как параметры функций

Пример 17.5. Даны натуральные n, m целые a0,..., an – 1b0,..., am – 1, получить:

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mrow»«mi»t«/mi»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfenced open=¨{¨ close=¨¨»«mtable columnalign=¨left¨»«mtr»«mtd»«mo»(«/mo»«mi»min«/mi»«mo»§#160;«/mo»«msup»«mrow»«mo»(«/mo»«mi»a«/mi»«sub»«mn»0«/mn»«/sub»«mo»§#160;«/mo»«mo».«/mo»«mo».«/mo»«mo».«/mo»«mo»§#160;«/mo»«mi»a«/mi»«sub»«mrow»«mi»n«/mi»«mo»§#160;«/mo»«mo»-«/mo»«mn»1«/mn»«/mrow»«/sub»«mo»)«/mo»«mo»)«/mo»«/mrow»«mn»2«/mn»«/msup»«mo»,«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mi»§#1077;§#1089;§#1083;§#1080;«/mi»«mo»§#160;«/mo»«mo»§#160;«/mo»«mrow»«mo»(«/mo»«mi»min«/mi»«mo»§#160;«/mo»«mrow»«mo»(«/mo»«mi»b«/mi»«sub»«mrow»«mn»0«/mn»«/mrow»«/sub»«mo»§#160;«/mo»«mo».«/mo»«mo».«/mo»«mo».«/mo»«mo»§#160;«/mo»«mi»b«/mi»«sub»«mrow»«mi»m«/mi»«mo»§#160;«/mo»«mo»-«/mo»«mn»1«/mn»«/mrow»«/sub»«mo»)«/mo»«/mrow»«mo»§#160;«/mo»«mo»§#60;«/mo»«mo»§#160;«/mo»«mo»-«/mo»«mn»10«/mn»«/mrow»«/mtd»«/mtr»«mtr»«mtd»«mo»(«/mo»«mi»max«/mi»«mo»§#160;«/mo»«msup»«mrow»«mo»(«/mo»«msub»«mi»a«/mi»«mn»0«/mn»«/msub»«mo»§#160;«/mo»«mo».«/mo»«mo».«/mo»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mrow»«mi»n«/mi»«mo»§#160;«/mo»«mo»-«/mo»«mn»1«/mn»«/mrow»«/msub»«mo»)«/mo»«mo»)«/mo»«/mrow»«mn»2«/mn»«/msup»«mo»,«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mi»§#1077;§#1089;§#1083;§#1080;«/mi»«mo»§#160;«/mo»«mo»§#160;«/mo»«mrow»«mo»(«/mo»«mi»max«/mi»«mo»§#160;«/mo»«mrow»«mo»(«/mo»«msub»«mi»b«/mi»«mn»0«/mn»«/msub»«mo»§#160;«/mo»«mo».«/mo»«mo».«/mo»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»b«/mi»«mrow»«mi»m«/mi»«mo»§#160;«/mo»«mo»-«/mo»«mn»1«/mn»«/mrow»«/msub»«mo»)«/mo»«/mrow»«mo»§#160;«/mo»«mo»§#62;«/mo»«mo»§#160;«/mo»«mn»10«/mn»«/mrow»«/mtd»«/mtr»«mtr»«mtd»«mo»(«/mo»«mi»max«/mi»«mo»§#160;«/mo»«mrow»«mo»(«/mo»«msub»«mi»a«/mi»«mn»0«/mn»«/msub»«mo»§#160;«/mo»«mo».«/mo»«mo».«/mo»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mrow»«mi»n«/mi»«mo»§#160;«/mo»«mo»-«/mo»«mn»1«/mn»«/mrow»«/msub»«mo»)«/mo»«/mrow»«mo»§#160;«/mo»«mo»*«/mo»«mo»§#160;«/mo»«mi»min«/mi»«mrow»«mo»§#160;«/mo»«mrow»«mo»(«/mo»«msub»«mi»a«/mi»«mn»0«/mn»«/msub»«mo»§#160;«/mo»«mo».«/mo»«mo».«/mo»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mrow»«mi»n«/mi»«mo»§#160;«/mo»«mo»-«/mo»«mn»1«/mn»«/mrow»«/msub»«mo»)«/mo»«/mrow»«mo»§#160;«/mo»«mi mathvariant=¨normal¨»§#1074;«/mi»«mo»§#160;«/mo»«mi»§#1086;§#1089;§#1090;§#1072;§#1083;§#1100;§#1085;§#1099;§#1093;«/mi»«mo»§#160;«/mo»«mi»§#1089;§#1083;§#1091;§#1095;§#1072;§#1103;§#1093;«/mi»«/mrow»«/mtd»«/mtr»«/mtable»«/mfenced»«/mrow»«/mstyle»«/math»

Этапы выполнения задания

I. Исходные данные: переменные n и m — количество элементов в массивах а и b, a и b — линейныe массивы.

II. Результат: значение переменной t.

III. Алгоритм решения задачи.

1. Ввод исходных данных. Для ввода массива создадим функцию. Поскольку до вызова функции размер вектора неизвестен, то векторы a и b создаются без указания количества элементов в них. Для ввода значений можно использовать один из двух вариантов:

1.1. Ввести количество элементов, изменить размер вектора с помощью функции resize (см. Приложение к главе 1), затем ввести элементы.
1.2. Ввести количество элементов, в цикле по количеству элементов добавлять элементы в массив с помощью функции push_back.

2. Для нахождения минимального и максимального элементов массива оформим соответствующие функции. Функция будет принимать массив как параметр и возвращать значение минимального (максимального) элемента в массиве.
3. Вывод результата.

IV. Описание переменных: n, m, t – int, a, b – vector<int>.

Пример 17.5.

V. Программа:

#include <iostream>

#include <vector>

 

using namespace std;

 

void vvod (int &r, vector <int> &d)

{

  cout << "kol-vo el-tov =";

  cin >> r;

  d.resize(r);

  cout << "chisla" << endl;

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

    cin >> d[i];

}

 

int min_mas(vector <int> &d)

{

  int mn = 0;

  for (int i = 1; i < d.size(); i++)

    if (d[i] < d[mn])

      mn = i;

  return d[mn];

}

 

int max_mas(vector <int> &d)

{

  int mn = 0;

  for (int i = 1; i < d.size(); i++)

    if (d[i] > d[mn])

      mn = i;

  return d[mn];

}

 

int main()

{

  int t, m, n;

  vector <int> a, b;

  vvod (n, a);

  vvod (n, a);

  vvod (n, a);

  vvod (m, b);

  if (min_mas(b) < -10)

    t = min_mas(a) * min_mas(a);

  else

    if (max_mas(b) > 10)

      t = max_mas(a) * max_mas(a);

    else

      t = max_mas(a) * min_mas(a);

  cout << "t=" << t << endl;

  return 0;

}

 VI. Тестирование.