Лабораторная работа № 14. Структура и назначение функций
Функция – это совокупность объявлений и операторов, предназначенная для решения определенной задачи. Одно из главных преимуществ, предоставляемых функцией, состоит в том, что она может быть выполнена столько раз, сколько необходимо, в различных местах основной программы.
В любой программе С/C++ должна быть функция с именем main (главная функция или основная программа), именно с этой функции начинается выполнение программы. Другая функция (подпрограмма) может иметь любое имя, не совпадающее с ключевыми словами. После имени записываются формальные аргументы. Если надо передать результат из функции в основную программу, то завершается подпрограмма оператором return.
Чтобы обратиться к функции в основной программе записывается имя функции и фактические аргументы, которые должны соответствовать формальным по типу. При вызове функции управление передается первому оператору тела функции, и начинается выполнение функции, которое продолжается до тех пор, пока не встретится оператор return или последний оператор функции. Управление возвращается в точку основной программы, следующей за точкой вызова.
| Задание
| Краткие теоретические сведения
| | | 1. Изучить способы организации работы с функциями, выполнив программы, записанные в правой части.
Опробовать работу программы, содержащей функцию, с разными паролями.
| Пример программы, в которой происходит проверка пароля (например, qwerty123)в двух вариантах: без использования функции и с использованием функции check_pass.
Функция может быть записана как до основной программы, так и после. В последнем случае вызов функции следует предварять объявлением (прототипом) этой функции.
В том варианте программы, который содержит функцию, int main() -основная программа, а void check_pass (string password)- функция. Передint main()записан прототип, так как функция расположена после основной программы.
Поскольку в данном примере возвращать результат из функции не нужно, она не содержит оператора return.
| include < iostream>
#include < string>
using namespace std;
int main()
{
setlocale (LC_CTYPE, " Russian");
string valid_pass = " qwerty123";
string user_pass;
cout < < " Введите пароль: ";
getline(cin, user_pass);
if (user_pass == valid_pass)
{ cout < < " Доступ разрешен" < < endl; }
else
{ cout < < " Неверный пароль! " < < endl; } return 0;
}
| #include < iostream>
#include < string>
using namespace std;
void check_pass (string password);
int main()
{ setlocale (LC_CTYPE, " Russian");
string user_pass;
cout < < " Введите пароль: ";
getline (cin, user_pass);
check_pass (user_pass); return 0; }
void check_pass (string password)
{ string valid_pass = " qwerty123";
if (password == valid_pass)
{ cout< < " Доступ разрешен" < < endl; }
else
{ cout< < " Неверный пароль" < < endl; } }
| | | 2. Изучить использование рекурсий на примере программы, записанной в правой части.
|
Любая функция в программе может быть вызвана рекурсивно, т.е. она может вызывать саму себя.
Пример программы, в которой вычисляется степень числа xn с использованием простой рекурсии для функции power.
| | 3. Выполнить программы, записанные в правой части и изучить использование указателей как формальных параметров функции.
| Если внутри функции изменить фактический параметр, переданный из основной программы в функцию, то это изменение в основной программе не будет отражено. Например, пусть надо вычислить несколько значений s = 1! / x + 2! / x +…+ n! / x для x = -2(0.5)0, при этом надо заменить значение х = 0на х = 1. В представленной программе значение s вычисляется с использованием функции ff. В основной программе осуществляется ввод данных, обращение к функции и вывод результатов.
| #include < iostream>
using namespace std;
float ff (int n, float x)
{ int F =1; float s=0;
for (int i = 1; i < = n; i++)
{ if (x== 0.0)
{ x=1; cout< < " x =" < < x < < endl; }
F = F * i; s = s+F/x; }
return s;
}
int main()
{ int n;
cout< < " n="; cin> > n; float x=-2.0;
do
{ cout< < " x =" < < x < < " s=" < < ff(n, x)< < endl;
x=x+0.5; }
while (x< =0.0);
}
| #include < iostream>
using namespace std;
float ff (int n, float *x)
{ int F =1; float s=0;
for (int i = 1; i < = n; i++)
{ if (*x== 0.0)
{*x=1; cout< < " x =" < < *x < < endl; }
F = F * i; s = s+F/(*x); }
return s;
}
int main()
{ int n;
cout< < " n="; cin> > n; float x=-2.0;
do
{ cout< < " x =" < < x < < " s=" < < ff(n, & x)< < endl;
x=x+0.5; }
while (x< =0.0);
}
| При выводе результатов видно, что хотя функция считает s при x = 1, в основной программе по-прежнему х = 0.
Чтобы эту ошибку исправить, надо формальный параметр х определить как указатель. Тогда фактический параметр х должен быть явно передан в виде указателя с использованием операции &.
| | 4. Выполнить программы, записанные в правой части.
Программа вычисления интеграла демонстрирует использование указателя на функцию, который используется для передачи функции f в качестве формального параметра функции integ.
| | Программа вычисления корня уравнения exp(x) - 2 - x = 0методом дихотомии.
| Программа вычисления интеграла
методом правых прямоугольников
| | #include < iostream>
#include < math.h>
#define EPS 1e-10
double f (double x)
{ return exp(x) - 2 - x; }
int main()
{
double l = 0, r = 2, c;
while(r - l > EPS)
{ c = (l + r) / 2;
if(f(c) * f(r) < 0) l = c; else r = c;
}
std:: cout< < c;
}
| #include < iostream>
float integ(float (*) (float), float, float, float);
float f(float); //прототипы
int main()
{ float z;
z = integ(f, (float)0.0, (float)10.0, (float)0.01);
std:: cout < < " Integral=" < < z; }
float integ (float (*f) (float), float a, float b, float h)
{ float x, s = 0.0; x = a + h/2.0;
while (x < = b)
{ s += h*f(x); x = x+h; }
return s; }
float f (float x)
{ return (2*x+5); }
| | 5. В соответствии со своим вариантом написать программу решения уравнения из лабораторной работы № 9 методом касательных с использованием функций.
6. Вычислить интеграл из лабораторной работы № 9 в соответствии со своим вариантом для n = 30 методом трапеций. Вычисление значения функции оформить в виде функции, вычисление интеграла – в виде функции. Использовать при этом указатель на функцию. Результат представить в виде таблицы (s, t – параметры, int – значение интеграла, k_iter – количество пересчетов значений интеграла для заданной точности):
s =... t =... int =... k_iter =...
В начало практикума
Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...
|
Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...
|
Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...
|
Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...
|
Примеры задач для самостоятельного решения. 1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P
1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P...
Дизартрии у детей Выделение клинических форм дизартрии у детей является в большой степени условным, так как у них крайне редко бывают локальные поражения мозга, с которыми связаны четко определенные синдромы двигательных нарушений...
Педагогическая структура процесса социализации Характеризуя социализацию как педагогический процессе, следует рассмотреть ее основные компоненты: цель, содержание, средства, функции субъекта и объекта...
|
Философские школы эпохи эллинизма (неоплатонизм, эпикуреизм, стоицизм, скептицизм). Эпоха эллинизма со времени походов Александра Македонского, в результате которых была образована гигантская империя от Индии на востоке до Греции и Македонии на западе...
Демографияда "Демографиялық жарылыс" дегеніміз не? Демография (грекше демос — халық) — халықтың құрылымын...
Субъективные признаки контрабанды огнестрельного оружия или его основных частей
Переходя к рассмотрению субъективной стороны контрабанды, остановимся на теоретическом понятии субъективной стороны состава преступления...
|
|