72969

Функции. Правила организации функций

Лекция

Информатика, кибернетика и программирование

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

Русский

2014-12-02

85.5 KB

0 чел.

Тема 7. Функции

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

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

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

Правила организации функций

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

Тип_данных имя_функции ( формальные параметры )

{

/* Описание локальных переменных */ тип_данных локальная_переменная_1;

тип_данных локальная_переменная_п; /* Тело функции */

}

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

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

Список формальных параметров может заканчиваться запятой (,) или запятой с многоточием (,...) - это означает, что число аргументов функции переменно. Однако предполагается, что функция имеет, по крайней мере, столько обязательных аргументов, сколько формальных параметров задано перед последней запятой в списке параметров. Такой функции может быть передано большее число аргументов, но над дополнительными аргументами не производится контроль типов. Если функция имеет переменное число аргументов, то программист отвечает и за определение их числа и за получение их из стека внутри тела функции.

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

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

Функции записываются ДО кнопок, т.е. вне поля, где пишется код для кнопки. Таким образом, они создаются глобально, и их можно применять сколько угодно раз в разных кнопках.

Например, функция, возвращающая куб ее вещественного аргумента:

float cube( float x )

{ return x * x * x ; }

Аргумент х типа float специфицируется вслед за первой открывающей скобкой.

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

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

Примеры организации функций в C++

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

параметров:

float sum (float a, float b)

 { return (a+b); }

Функция sum имеет два формальных параметра - а и b вещественного типа float - и возвращает значение типа float, о чем говорит описатель, стоящий перед именем функции. Возвращаемое оператором return значение равно сумме фактических параметров.

Вызов этой функции в основной программе может иметь вид:

void fastcall TForm1::Button1Click(TObject *Sender)

{ float a, x, y;

a = StrToFloat(Edit1->Text);

x = StrToFloat(Edit2->Text);

y = sum(a, x);

Edit3->Text = FloatToStr(y); }

При вызове функции фактические значения переменных a и х подставляются вместо формальных параметров a и b (a на место а, х на место b), поскольку имена передаваемых фактических переменных могут совпадать или не совпадать с именами формальных параметров.

Пример 2. Вычислить значение , используя функцию.

Текст функции и вызова в основной программе

//----------------------------------------------------------

float calc (float x, float z, float t)

{float y;

y=cos(x)-(tan(z*z)/exp(t))+sqrt(fabs(z+t-x));

return y;}

//----------------------------------------------------------

void fastcall TForm1::Button1Click(TObject *Sender)

{float a=StrToFloat(Edit1->Text), b=StrToFloat(Edit2->Text), c=StrToFloat(Edit3->Text),P;

P=calc(a,b,c);

Edit4->Text=FloatToStr(P);}

Пример 3. Вычислить сумму знакопеременного ряда тремя вариантами, используя разные операторы цикла.

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

Тексты функций и их вызова в основной программе:

//----------------------------------------------------------

float zikl_for (float x)

{ int i, fact, k;

float S = 0;

for ( i = 1;i <= 5;i++)

{fact=1;

for(k = 1; k <= i; k++)

{fact *= k;}

S += pow(-1, i +1) * pow(x, i + 1) / fact ;}

return S; }

//----------------------------------------------------------

float zikl_while (float x)

{ int i = 1, fact, k;

float S = 0;

while( i <= 5)

{ fact = 1;

k = 1;

while(k <= i)

{ fact *= k;

k++; }

S += pow(-1, i +1) * pow(x, i + 1) / fact ;

i++;}

return S; }

//----------------------------------------------------------

float zikl_do(float x)

{ int i = 1, fact, k;

float S = 0;

do { fact = 1;

k = 1;

do { fact *= k;

k++; }

while(k <= i) ;

S += pow(-1, i +1) * pow(x, i + 1) / fact ;

i++; }

while( i <= 5);

return S; }

//----------------------------------------------------------

void fastcall TForm1::Button1Click(TObject *Sender)// for

{ float s, x=StrToFloat(Edit1->Text);

s=zikl_for(x);

Edit2->Text=FloatToStr(s); }

//----------------------------------------------------------

void fastcall TForm1::Button2Click(TObject *Sender)// while

{ float s, x=StrToFloat(Edit1->Text);

s=zikl_while(x);

Edit3->Text=FloatToStr(s); }

//----------------------------------------------------------

void fastcall TForm1::Button3Click(TObject *Sender)// do-while

{ float s, x=StrToFloat(Edit1->Text);

s=zikl_do(x);

Edit4->Text=FloatToStr(s); }

Пример 4. Найти , используя функцию.

//----------------------------------------------------------

float poschitaem(float x, float eps)

{float S=0,k,fact,i,a;

k=1;

do{fact=1;

for(i=1;i<=2*k-1;i++)

{fact*=i;}

a=pow(x,2*k+1)/fact;

S+=a;

k++;}

while(fabs(a)>=eps);

return S;}

//----------------------------------------------------------

void fastcall TForm1::Button1Click(TObject *Sender)

{float x=StrToFloat(Edit1->Text),eps=StrToFloat(Edit2->Text),S;

S=poschitaem(x,eps);

Edit3->Text=FloatToStr(S);}

Пример 5. Найти произведение всех чисел, кратных 5 от 1 до 50 с помощью функции.

//----------------------------------------------------------

int chisla()

{int i,n=1;

for(i=5;i<=50;i+=5)

{n*=i;}

return n;}

//----------------------------------------------------------

void fastcall TForm1::Button1Click(TObject *Sender)

{float N;

N=chisla();

Edit1->Text=IntToStr(N);}

Пример 6. Найти с помощью функции.

//----------------------------------------------------------

float hard_level(float g, float x)

{float N=0,m,i,fact,k,p;

for(m=3;m<=g;m++)

{p=1;

i=1;

while(i<=m-1)

{fact=1;

k=1;

do{fact*=i;

k++;}

while(k<=m);

if(x!=2&&i!=g)

{p*=pow(fabs(i-g),m)*fact/asin(x-2);

i++;}}

S+=cos(m+5)/(g*g+x*x*x)*p;}

return S;}

//----------------------------------------------------------

void fastcall TForm1::Button1Click(TObject *Sender)

{float d=StrToFloat(Edit1->Text), x=StrToFloat(Edit2->Text),Q;

Q=hard_level(d,x);

Edit3->Text=FloatToStr(Q);}

Блок-схема

Блок-схема задач с функциями состоит из двух частей: основной схемы для кнопки и схемы для подпрограммы-функции.

Схема полной программы (для кнопки)

Схема для функции


 

А также другие работы, которые могут Вас заинтересовать

38876. Определение степени художественной адекватности и принципов художественного перевода произведений А.П. Чехова на белорусский язык 334 KB
  Толстой и другие плодотворно работали не только в сфере изящной словесности но и в области художественного перевода. Интерес к подобного рода переводам проявился в науке уже давно. В книге Искусство перевода классик украинской поэзии Максим Рыльский делится опытом перевода поэзии Пушкина Лермонтова Мицкевича размышляет о значении культурного взаимообмена между родственными народами о переводе как сотворчестве.
38877. Природа света и цвета 5.75 MB
  Согласно научному определению, «свет – это электромагнитное излучение» или энергия, которая распространяется в пространстве с одинаковой скоростью под действием природного или искусственного источника света (солнца, лампы накаливания и др.). Эта энергия рассматривается в физике как электромагнитные волны, которые отличаются по своей длине.
38878. ОСНОВНЫЕ НАПРАВЛЕНИЯ СОВЕРШЕНСТВОВАНИЯ ФОРМИРОВАНИЯ И ИСПОЛЬЗОВАНИЯ ТРУДОВЫХ РЕСУРСОВ В МУСХП «ЛУЧ» САФОНОВСКОГО РАЙОНА СМОЛЕНСКОЙ ОБЛАСТИ 1.35 MB
  Вопросы подлежащие разработке исследованию: рассмотреть теоретические основы формирования и использования трудовых ресурсов; дать характеристику организационнохозяйственной деятельности объекта исследования; проанализировать обеспеченность предприятия трудовыми ресурсами экономические и финансовые результаты деятельности предприятия; рассмотреть производительность труда работников предприятия и выявить пути её увеличения; разработать и обосновать резервы повышения эффективности использования трудовых ресурсов.2 Анализ производительности...
38880. Особенности экономического анализа бухгалтерской (финансовой) отчетности в государственных(муниципальных) учреждениях 868 KB
  Методы анализа бухгалтерской финансовой отчетности Анализ бухгалтерской отчетности предполагает установление и изучение взаимосвязей и взаимозависимостей между различными показателями финансовохозяйственной деятельности учреждения включенными в отчетность. Стандартные приемы методы анализа финансовой отчетности: анализ абсолютных показателей – путем сравнения показателей учреждения с показателями конкурентов: горизонтальный – сравнение интересующих позиций отчетности с данными предыдущих периодов; вертикальный –...
38882. Методические указания к разработке экономической части дипломного проектирования с элементами УИРС 229 KB
  Балансовая стоимость оптовая цена единицы техники руб. Кi=Цi IКтрКмКс руб. 4 где Кi – капитальные вложения по базовому и проектируемому вариантам руб.: Цi – цена оборудования по вариантам руб.
38883. ПОДГОТОВКА И ЗАЩИТА ДИПЛОМНЫХ, ВЫПУСКНЫХ И КУРСОВЫХ РАБОТ 762 KB
  Лобачевского ОГЛАВЛЕНИЕ Введение 4 Общие замечания 4 Выбор темы исследования 7 Взаимодействие с научным руководителем 7 Проблема исследования 9 Составление библиографии и работа с литературой 10 Оформление библиографического аппарата 13 Композиция исследования 18 Рубрикация текста 22 Язык и стиль изложения 24 Объем работы и правила её оформления 26 Основные принципы визуализации социологических данных 28 Защиты курсовой и выпускной работ 42 Защита дипломной работы 44 Приложение I. Образец заявления о выборе темы...
38884. Разработка САЙТА на cms joomla 2.5 2.1 MB
  Профессионально созданный сайт обеспечивает легкость его нахождения по запросам в поисковых системах, поскольку целевую аудиторию составляют пользователи, которые ищут конкретную информацию в Интернете. Постоянный контакт с клиентами и партнёрами позволяет оперативно реагировать на изменения рынка и проводить своевременную коррекцию. Кроме того, расходы на рекламу в Интернете значительно ниже, чем в традиционных средствах.