Хелпикс

Главная

Контакты

Случайная статья





Пример 3.. Пример 4.. Пример 5.



Пример 3.

//Определение и использование указателей на функции

#include "stdafx.h"

#include <iostream>

using namespace std;

//Определение и использование указателей на функции

void f1(); //объявление (прототип)функции f1

void f2(); //объявление (прототип)функции f2

int _tmain(int argc, _TCHAR* argv[]) {

void (*ptr)(); //ptr - указатель на функцию

f2(); //явный вызов функции f2

ptr=f2;//указателю присваивается адрес функции f2

(*ptr)();

//вызов функции f2 по ее адресу с разыменованием указателя

ptr=f1;//указателю присваивается адрес функции f1

(*ptr)();

//вызов функции f1 по ее адресу с разыменованием указателя

ptr(); // вызов функции f1 без разыменования указателя

system("pause");

return 0;

}

//описание функции f1 и f2

void f1() {

cout << "Выполняется f1\n";

}

void f2() {

cout << "Выполняется f2\n";

}

Пример 4.

//Вариант 1 использования указателя на функцию

#include "stdafx.h"

#include <iostream>

using namespace std;

float plus(float, float); //Объявление (прототип) функции

int _tmain(int argc, _TCHAR* argv[]){

float x=2.1, y=4.89;

float (*func)(float,float);

//определение указателя func на функцию

printf("Сумма равна %.3f\n",plus(x,y));

func=plus;

//указателю присвоить адрес func точки входа в функцию plus

// Используем указатель на функцию

printf("Сумма = %.3f\n",func(x,y));

system("pause");

return 0;

}

//Описание функции сложения двух аргументов

float plus(float a, float b) {

return a+b;

}

Пример 5.

//Вариант 2 использования указателя на функцию

#include "stdafx.h"

#include <iostream>

using namespace std;

float plus(float, float); //Объявление (прототип)функции

int _tmain(int argc, _TCHAR* argv[]){

float x=2.1, y=4.89;

float (*func)(float, float)=&plus;

//определение указателя на функцию plus

printf("Сумма равна %.3f\n",plus(x,y));

//указателю присвоить адрес точки входа в функцию plus (Используем указатель на функцию)

printf("Сумма = %.3f\n",func(x,y));

system("pause");

return 0;

}

//Описание функции сложения двух аргументов

float plus(float a, float b) {

return a+b;

}

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

Пример 6: Вычислите приближенное значение интегралов с помощью формулы прямоугольников, задав пределы интегрирования [a, b] и число интервалов разбиения и .

#include "stdafx.h"

#include <iostream>

using namespace std;

//Объявление (прототипы) функций:

/*функция rectangle() возвращает значение типа double, ее параметры:*/

/*pf–указатель на функцию с параметром типа double, возвращающую значение double*/

/*a, b – пределы интегрирования, величины типа double*/

double rectangle(double(*pf)(double), double a, double b);

/*функция ratio() возвращает значение типа double, ее параметр типа double*/

double ratio(double x);

/*функция cos4_2() возвращает значение типа double, ее параметр типа double*/

double cos4_2(double v);

int _tmain(int argc, _TCHAR* argv[]){

double a,b,c;

printf("\nВведите значения пределов интегрирования:");

printf("\na= ");

scanf("%lf",&a);

printf("\nb= ");

scanf("%lf",&b);

c=rectangle(ratio,a,b);

printf("Первый интеграл = %f\n",c);

printf("Второй интеграл = %f\n",rectangle(cos4_2,a,b));

system("pause");

return 0;

}

double rectangle(double(*pf)(double), double a, double b){

/*Вычисление определенного интеграла с помощью формулы прямоугольников*/

int N, i;

double h,s=0.0;

printf("\nВведите количество интервалов разбиения: N= ");

scanf("%d",&N);

printf("\na= ");

h=(b-a)/N; //Длина интервала разбиения

for (i=0;i<N;i++)

s+=pf(a+h/2+i*h);

return h*s;

}      

double ratio(double x) { //Подынтегральная функция

double z; //Вспомогательная переменная

z=x*x+1;

return x/(z*z);

}

double cos4_2(double v){ //Подынтегральная функция

double w; //Вспомогательная переменная

w=cos(v);

return 4*w*w;

}

 

 

 

Задания для выполнения

1. Задано натуральное число. Разместите в памяти последовательно все его цифры, используя указатели и операции над ними.

2. Методом половинного деления решите уравнения на отрезке с данной точностью . При решении считать, что на данном отрезке существует единственный корень. Решите первое уравнение на отрезке [0, 1], а второе на отрезке [100, 150].

3. Решите задачу, используя один указатель на функцию. Разработайте четыре функции над двумя целыми параметрами, соответствующие арифметическим операциям (+, -, *, /). В основной программе задавайте два целых параметра и символьный знак операции до тех пор, пока не будет введен пробел в качестве знака операции. В выходных данных выводите значения функций.

4. Вычислите суммы с данной точностью е. Используйте указатели на функции как параметры: и .

5. Напишите функцию для вычисления значения многочлена Pn(x)=anxn+an-1xn-1+...+a1x1+a0. Коэффициенты an,an-1,...,a0, аргумент x и коэффициенты передавайте в функцию с помощью списка параметров изменяемой длины. В основной программе вычислите и напечатайте значения нескольких полиномов. Для вычисления полиномов используйте схему Горнера: Pn(x)=(...(anx+an-1)x+an-2)x+...+a1)x+a0.

6. Индивидуальное задание. Напишите функцию, где признаком конца списка является 0. Выведите полученный список элементов. Решите задачу, используя указатели.

Задание
1. Максимальный элемент в списке.
2. Минимальный элемент в списке.
3. Среднее арифметическое элементов в списке.
4. Среднее геометрическое элементов в списке.
5. Количество положительных элементов в списке.
6. Количество отрицательных элементов в списке.
7. Максимальный элемент в списке, стоящий на четном месте.
8. Максимальный элемент в списке, стоящий на нечетном месте.
9. Минимальный элемент в списке, стоящий на четном месте.
10. Разность минимального и максимального элементов в списке.
11. Минимальный элемент в списке, стоящий на нечетном месте.
12. Среднее гармоническое элементов списка.
13. Среднее арифметическое элементов в списке, стоящих на четных местах.
14. Среднее арифметическое элементов в списке, стоящих на нечетных местах.
15. Среднее геометрическое элементов в списке, стоящих на четных местах.
16. Среднее геометрическое элементов в списке, стоящих на нечетных местах.
17. Сумму максимального и минимального элементов в списке.
18. Определить, каких элементов в списке больше положительных ил отрицательных.
19. Произведение элементов списка.
20. Максимальный отрицательный элемент в списке.
21. Минимальный положительный элемент в списке.
22. Сумму элементов в списке, стоящих на четных местах.
23. Разность элементов в списке, стоящих на нечетных местах.
24. Сумму четных элементов в списке.
25. Разность нечетных элементов в списке.
26. Среднее гармоническое элементов в списке, стоящих на четных местах.
27. Среднее гармоническое элементов в списке, стоящих на нечетных местах.
28. Сумму положительных элементов в списке.
29. Сумму отрицательных элементов в списке.
30. Количество положительных элементов, стоящих на четных местах в списке.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.