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

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

Лабораторная работа № 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; просмотров: 920. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

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

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

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

Случайной величины Плотностью распределения вероятностей непрерывной случайной величины Х называют функцию f(x) – первую производную от функции распределения F(x): Понятие плотность распределения вероятностей случайной величины Х для дискретной величины неприменима...

Схема рефлекторной дуги условного слюноотделительного рефлекса При неоднократном сочетании действия предупреждающего сигнала и безусловного пищевого раздражителя формируются...

ФАКТОРЫ, ВЛИЯЮЩИЕ НА ИЗНОС ДЕТАЛЕЙ, И МЕТОДЫ СНИЖЕНИИ СКОРОСТИ ИЗНАШИВАНИЯ Кроме названных причин разрушений и износов, знание которых можно использовать в системе технического обслуживания и ремонта машин для повышения их долговечности, немаловажное значение имеют знания о причинах разрушения деталей в результате старения...

Различие эмпиризма и рационализма Родоначальником эмпиризма стал английский философ Ф. Бэкон. Основной тезис эмпиризма гласит: в разуме нет ничего такого...

Индекс гингивита (PMA) (Schour, Massler, 1948) Для оценки тяжести гингивита (а в последующем и ре­гистрации динамики процесса) используют папиллярно-маргинально-альвеолярный индекс (РМА)...

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