Шаг 45.
Примеры использования функций

    На этом шаге будут приведены примеры использования функций при составлении программ.


    Пример 1. Вычислить значение выражения y=|x-1|+|x+1|.
#include <iostream.h>
void main ()
{
      int x;
      int abs(int); //Прототип функции.
      /* --------------------------------------------- */
      cout << "Вычислить y=|x-1|+|x+1|.\nВведите x: ";
      cin >> x;
      int y = abs(x-1) + abs(x+1); cout << y << endl;
}
/* ------------------------------------------------ */
int abs(int a) //Функция вычисления модуля.
{
      if  (a<0) a = -a;
     return a; //Возвращение в основную функцию значения 
a.
}
Текст этой программы можно взять здесь.

    Результат работы программы:

   Вычислить y=|x-1|+|x+1|
   Введите x: 56
   112


    Пример 2. Вычисление факториала натурального числа, меньшего 5. Если вводимое число больше или равно 5, то значение факториала увеличивается на 4.
#include <iostream.h>
void main ()
{
      int n,s(int);
      /* ------------------------------------- */
      cout << "Введите число "; 
      cin >> n;
      if  (n<5)
         cout << "p=" << s(n);
      else
         cout << "p=" << s(n)+4;
   }
/* ---- */
int s(int x)
{
      int y,p=1;
      for  (y=x; y>0; y--)
         p *= y;
      return (p);
}
Текст этой программы можно взять здесь.

    Результат работы программы:

   Введите число 4
   p=24
   Введите число 6
   p=724


    Пример 3. Предположим, что нужно вычислить xy (для неотрицательного целого y). Очевидный, но неэффективный способ реализации возведения в целочисленную степень - многократное умножение. Существует более эффективный алгоритм, приведенный ниже.
#include <iostream.h>
void main()
{
      int x,y;
      int odd(int);
      /* --------------------------------- */
      cout << "Введите x, y: ";
      cin >> x >> y; 
      int a = x, b = y, z = 1;
      while (b!=0)
         if  (odd(b))
         {
            z *= a; b--;
         }
         else
         {
            a *= a; b /= 2;
         }
       cout << z << endl;
}
/* ------- */
int odd (int t)
{
      return (t%2==0)?0:1;
}
Текст этой программы можно взять здесь.

    Результат работы программы:

   Введите x, y:  15 2
   225


    Пример 4. Вычислить значение выражения S=ab+cd.
#include <iostream.h>
void main ()
{
      int a,b,c,d,stepen(int,int);
      cout << "          b  d\n";
      cout << "Вычислим a +c ...\n";
      cout << "a="; cin >> a;
      cout << "b="; cin >> b;
      cout << "c="; cin >> c;
      cout << "d="; cin >> d;
      int s = stepen (a,b) + stepen (c,d);
      cout << "Результат = " << s << endl;
   }
/* -------- */
int stepen (int x,int y)
{
      int p=x,r=y,z=1,odd(int);
      while  (r!=0)
      {
         if  (odd(r))
         {
            z *= p; r--;
         }
         else
         {
            p *= p; r /= 2;
         }
      }
      return z;
}
/* --- */
int odd (int t)
{
      return (t%2==0)?0:1;
}
Текст этой программы можно взять здесь.

    Результат работы программы:

             b  d
   Вычислим a +c ...
   a=2
   b=2
   c=3
   d=0
   5
             b  d
   Вычислим a +c ...
   a=45
   b=4
   c=3
   d=2
   -28134


    Подумайте, почему получен такой ответ? К сведению, 454+32=4100634.
Решение и комментарии вы можете посмотреть здесь.


    Пример 5. Приведем программу для нахождения дружественных чисел, не превосходящих положительного целого числа HI. Дружественными числами называется пара чисел, каждое из которых есть сумма делителей другого числа из этой пары. Например, сумма делителей числа 220 равна 284, а сумма делителей числа 284 равна 220, т.е. 220 и 284 - дружественные числа.
#include <iostream.h>
#define HI 1000
#define LO 2
void main()
{
  int factorsum(int);
  /* ------------------------------- */
  for (int number=LO; number<=HI; number++)
      {
         int sum = factorsum (number);
         if  (sum==number)
            cout << number << " - совершенное число. \n";
         else
            if  (factorsum(sum)==number)
               cout << "Числа " << number << " и " << sum << " являются 
дружественными.\n";
      }
}
/* --------------- */
int factorsum (int num)
{
      int fsum = 1;
      for (int factor=2; factor<num; factor++)
         if  (num%factor==0)
            fsum += factor;
      return fsum;
}
Текст этой программы можно взять здесь.

    На следующем шаге мы рассмотрим вопросы возврата из функции нескольких значений.


Предыдущий шаг Содержание Следующий шаг