Функции в С++

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 7 мес. назад.

  • Автор
    Сообщения
  • #3674

    Как вы наверно знаете, до этого мы использовали только стандартные функции C++. Теперь мы научимся создавать свои функции.

    Что — такое функция. Стандартные функции

    Функция — это последовательность операций и других функций, к которой можно обращаться из любой части кода. Например стандартные функции max() и min().

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

    Они отличаются от функций тем, что не возвращают никакого значения. Т.е к ним нельзя приравнивать переменные.

    В C++ таких различий нет, так что мы будем называть процедуры функциями.

    Пример работы с функциями max() и min():

     cin >> a >> b;
     maximum = max(a, b);
     minimum = min(a, b);
     cout << maximum << " " << minimum << "\n";

    Эти функции возвращают значения минимума и максимума соответственно.

    Пример функции-процедуры — swap():

    int a, b;
    cin >> a >> b;
    cout << a << " " << b << "\n";
    swap (a, b);
    cout << a << " " << b << "\n";

    swap() меняет местами значения двух переменных.

    Создание функции

    Теперь можно приступить к созданию своих функций. Общий синтаксис создания функции таков:

    тип_переменной название_функции(аргументы_функции)
    {
        сама_функция;
        return переменная(того же типа, что и сама функция);
    }

    Тип функции

    Если тип нашей функции (возвращаемого значения) — integer, то и возвращать мы должны integer. Т.е от него зависит, какие переменные мы можем возвратить.

    Название функции

    Должно быть уникальным. Может состоять из латинских букв, цифр и нижнего пробела «_». Имя функции очень важно для тех, кто будет читать ваш код, по теме правильного выбора имени написаны целые книги, советую прочитать хотя бы статью: “Теория чистого кода. Стиль кодирования“. В частности, имя функции должно быть глаголом, но не рекомендуется использовать глаголы типа process, handle т.п., т.к. эти слова могут являться как глаголом, так и существительным.

    Аргументы функции

    Это переменные, с которыми наша функция будет работать – перечень передаваемых в функцию аргументов, которые отделяются друг от друга запятыми. Для каждой переменной из списка указывается тип и имя.

    Return

    оператор return возвращает значение функции. Для каждой функции return срабатывает единожды, т.е после того, как он сработал выполнение функции прекращается.

    Если вы захотите создать процедуру, то вам нужно написать вместо типа переменной слово void (что переводится как «пустота»). Пример:

    void название_функции(аргументы)
    {
        //сама_функция;
        return;
    }

    В качестве примера создадим функцию возведения числа в квадрат:

    #include <iostream>
    using namespace std;
    int square_of_number(int num)
    {
        return num * num;
    }
    int main()
    {
        int a;
        cin >> a;
        cout << square_of_number(a) << "\n";
        system("pause");
        return 0;
    }

    Функции задается один аргумент — переменная num типа integer. С ним она и работает.

    Если мы создадим функцию с несколькими аргументами, то при вызове функции мы должны писать их значения в том же порядке, в каком мы их создавали.

    Например:

    void show_elements(int a, double b, char c, bool d) {
        cout << a << " " << b << " " << c << " " << d << "\n";
        return;
    }
    int main()
    {
        int number;
        double pi = 3.14;
        char symbol;
        bool used = false;
        cin >> number >> symbol;
        show_elements(number, pi, symbol, used);
        system ("pause");
        return 0;
    }

    Другие примеры

    Теперь давайте напишем программу, которая выводит на экран треугольник, построенный из символов «звездочка» и «пробел».

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    void fun() //описание функции
    { //тело функции состоит из одного оператора
      //который выводит на экран звездочки и пробелы
      cout<<"* ";
    }
    int main () {
      int i, j;
      for (i=0; i<5; i++) {
        for (j=0; j<5-i; j++)
          fun(); //вызов функции
        cout<<"\n"; //перенос строки
      }
      system ("pause");
      return 0;
    }

    Пример программы, которая выводит таблицу умножения на заданное число. Здесь функция func выполняет операцию умножения двух целых чисел:

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int func(int a, int b) //описание функции
    { //функция возвращает результат умножения двух целых чисел:
      return (a*b);
    }
    int main () {
      int i, j;
      cout<<"i=";
      cin>>i;
      for (j=1; j<=10; j++)
        //вызов функции, параметры a и b заменяются именами аргументов i и j
        cout<<i<<"*"<<j<<"="<<func(i, j)<<" ";
      cout<<endl; //перенос на новую строку
      system ("pause");
      return 0;
    }

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

    Функция для перевода из 10-ой системы счисления в k-ую.

     # include <iostream>
     using namespace std;
     char d[100000];
     void my_function (long long int a, int b)
     {
         if (a == 0)
         {
             cout << "0 \n";
             return;
         }
         // без этого if-а ответа при числе 0 не будет
    
         else
         {
             int size = 0;
             // размер числа в системе счисления b
             while (a > 0)
             {
                 ++size;
                 // увеличиваем размер числа на 1
                 int x = a % b;
                 if (x >= 0 && x <= 9) d[size] = char(x + '0');
                 // если x состоит из одной цифры, то запишем эту цифру
                 else d[size] = char(x - 10 + 'A');
                 // иначе запишем соответствующую ему букву
                 a /= b;
             }
             for (int i = size; i >= 1; --i)
              cout << d[i];
             // выводим полученное число
             cout << "\n";
             return;
         }
     }
     int main()
     {
         long long int number;
    
         cin >> number;
    
         for (int i = 2; i <= 36; ++i)
         {
             cout << i << ": ";
             my_function(number, i);
         }
    
         system("pause");
    
         return 0;
     }

    Переменные описанные внутри функции, а также переменные из списка аргументов, являются локальными. Например, если программа содержит пять разных функций, в каждой из которых описана переменная N, то для C++ это пять различных переменных. Область действия локальной переменной не выходит за рамки функции.

    Переменные, определенные до объявления всех функций и доступные всем функциям, называют глобальными.

Для ответа в этой теме необходимо авторизоваться.