Студопедия — Правила организации функций
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

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

 

Тема 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);}

Блок-схема

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

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

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




<== предыдущая лекция | следующая лекция ==>
Игры большой подвижности | Значення іграшки в розвитку гри дошкільників

Дата добавления: 2015-03-11; просмотров: 347. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Тема 5. Организационная структура управления гостиницей 1. Виды организационно – управленческих структур. 2. Организационно – управленческая структура современного ТГК...

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

Методы анализа финансово-хозяйственной деятельности предприятия   Содержанием анализа финансово-хозяйственной деятельности предприятия является глубокое и всестороннее изучение экономической информации о функционировании анализируемого субъекта хозяйствования с целью принятия оптимальных управленческих...

Классификация потерь населения в очагах поражения в военное время Ядерное, химическое и бактериологическое (биологическое) оружие является оружием массового поражения...

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

Йодометрия. Характеристика метода Метод йодометрии основан на ОВ-реакциях, связанных с превращением I2 в ионы I- и обратно...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия