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

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

Лабораторная работа № 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 =...

 

 

 

 

В начало практикума


 







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




Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...


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


Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

Типовые ситуационные задачи. Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической   Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической нагрузке. Из медицинской книжки установлено, что он страдает врожденным пороком сердца....

Типовые ситуационные задачи. Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт. ст. Влияние психоэмоциональных факторов отсутствует. Колебаний АД практически нет. Головной боли нет. Нормализовать...

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

Машины и механизмы для нарезки овощей В зависимости от назначения овощерезательные машины подразделяются на две группы: машины для нарезки сырых и вареных овощей...

Классификация и основные элементы конструкций теплового оборудования Многообразие способов тепловой обработки продуктов предопределяет широкую номенклатуру тепловых аппаратов...

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