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

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

Лабораторная работа № 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Р,где...

Хронометражно-табличная методика определения суточного расхода энергии студента Цель: познакомиться с хронометражно-табличным методом опреде­ления суточного расхода энергии...

ОЧАГОВЫЕ ТЕНИ В ЛЕГКОМ Очаговыми легочными инфильтратами проявляют себя различные по этиологии заболевания, в основе которых лежит бронхо-нодулярный процесс, который при рентгенологическом исследовании дает очагового характера тень, размерами не более 1 см в диаметре...

Примеры решения типовых задач. Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2   Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2. Найдите константу диссоциации кислоты и значение рК. Решение. Подставим данные задачи в уравнение закона разбавления К = a2См/(1 –a) =...

Сравнительно-исторический метод в языкознании сравнительно-исторический метод в языкознании является одним из основных и представляет собой совокупность приёмов...

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

Конституционно-правовые нормы, их особенности и виды Характеристика отрасли права немыслима без уяснения особенностей составляющих ее норм...

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