Функции в ЯП С/С++


Функция - это поименованная часть программы, которая может вызываться из других частей программы столько раз, сколько необходимо. Функция обычно служит для решения определенной подзадачи.

Смысл оформления части программного кода в виде отдельной функции заключается в том, что:
  • функция, решающая достаточно универсальную подзадачу, может быть использована без изменения много раз в других программах;
  • сравнительно небольшую по объему программного кода функцию легче отладить, написав для нее вызов и вывод данных в функции main.
Одну и ту же функцию можно использовать несколько раз с разными параметрами.
Например, в приведенном примере одна и та же функция вызывается для вычисления значения трех разных выражений:

#include <iostream>
using namespace std;
float fun1 ( float p, float q )
{return p+q;}

void main()
{
float a,b,c,d,f;
cout <<" vvod a,b="; cin >>a>>b;
cout <<" vvod c,d="; cin >>c>>d;
f=fun1(2*a,b);
cout <<" f= 2a+b="<<f <<endl<<" f= c-d="<<fun1(c,-d)<<endl;
cout <<" f= 2a+b-c="<<fun1(f,-c) <<endl;
}


Схема программы с подпрограммами, которую вам нужно написать:


Текст такой программы будет выглядеть примерно так



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


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


Однако, параметры можно использовать и для передачи данных (результатов работы функции) обратно, в вызывающую программу. Для этого параметры нужно передавать по ссылке (или как указатели). При этом в вызываемую функцию передается не значение параметра, а его адрес в области памяти вызывающей функции. Адрес позволяет вызываемой функции работать непосредственно в области памяти вызывающей функции:

В этом случае новые значения параметров как бы "возвращаются" в вызывающую функцию.




Разрабатывайте программу по шагам:


Шаг 1. Проектирование структуры программы


Сначала выделите вспомогательные алгоритмы (подзадачи), которые будут оформлены как отдельные функции. Предполагается, что должна быть функция, в которой вводятся данные задачи, и функция, в которой производится вспомогательный расчет.

Шаг 2. Определение параметров функций

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

Данные в функцию передаются как параметры (стоят в скобках после имени функции).

Результаты работы функции передаются
  • либо с помощью имени функции (ему присваивается тип и в теле функции используется оператор return);
  • либо с помощью параметров- ссылок или указателей - если результатов больше, чем один. 

Обдумайте, как будут передаваться данные в Вашей программе. Напишите сигнатуры (заголовки) своих функций.

В данном выше примере в функции(см. выше рис. №2)
void vvod(int& d1, int& d2)
имя функции ничего не передает, а введенные внутри функции данные будут переданы в основную функцию с помощью параметров-ссылок d1 и d2.

В функции
int sum(int p, int q)
 один результат -сумма значений, которые переданы как параметры, передается в основную функцию через имя sum, которое имеет целый тип.

Шаг 3. Разработка программного кода

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

Шаг 4. Постепенная отладка программного кода

В программах начинающих обычно очень много ошибок, в том числе плохо ими понимаемых логических ошибок. Поэтому сначала напишите заголовочный файл, первую функцию и часть основной, которая вызывает первую функцию (можно приписать какой-нибудь вывод на экран результатов, полученных из функции. После этого сделайте отладку этой части. затем уже впишете и отладите следующую функцию.

Комментариев нет:

Отправить комментарий