Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мини конспект по С++.doc
Скачиваний:
28
Добавлен:
25.03.2015
Размер:
782.85 Кб
Скачать

Примеры работы с функциями

Пример указатель на функцию:

Написать функцию вычисления суммы sum, обозначив слагаемое формальной функцией fun(x), а при вызове функции суммирования передавать через параметр реальное имя функции, в которой запрограммирован явный вид этого слагаемого. Например, пусть требуется вычислить две суммы:

Поместим слагаемые этих сумм в пользовательские функции f1 и f2. При этом для удобства работы воспользуемся операцией typedef, введем пользовательский тип данных: указатель на функции, который можно устанавливать на функции, возвращающие результат, указанного типа, и имеющие указанный список параметров:

typedef тип_результата (* переменная-указатель)(параметры);

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

#include<iostream.h>

typedeffloat(*p_f)(float); // Декларация указателя на функциию

floatsum(p_ffun,int,float); // Декларации прототипа функции

floatf1(float); // Декларации прототипа функции

floatf2(float); // Декларации прототипа функции

void main(void)

{

float x, s1, s2;

intn;

cout<<" Введите кол-во слагаемых n: "

cin>>n;

cout<<" Введите значение x: ";

cin>>x;

s1=sum(f1, 2*n, x);

s2=sum(f2, n, x);

cout<<"\nN = "<< n;

cout <<"\nX = "<< x;

cout<<"\nСумма 1 = "<< s1<<' ';

cout<< "\nСумма 2 = "<< s2<<' ';

}

// Функция вычисления суммы, первый параметр которой – формальное имя функции, //имеющей тип, введенный с помощью операции typedef

float sum(p_f fun, int n, float x)

{

float s=0;

for(int i=1; i<=n; i++) s+=fun(x);

return s;

}

float f1(float r) // Первое слагаемое

{

return (r/5.);

}

float f2(float r) // Второе слагаемое

{

return (r/2.);

}

Пример передача в функцию двухмерного массива:

Ввести массив NxN(не больше 50) целых чисел, в функции подсчитать сумму его положительных элементов.

#include <iostream.h>

void vvod(int, int, int a2[ ][50]); // прототип функции ввод массива

int summa(int, int, int a1[ ][50]); // прототип функции поиск суммы

void main(void)

{

int a[50][50];

int i,j,Nstr,Nstb;

cout<<"\nВведите количество строк матрицы (<50) ";

cin>>Nstr;

cout<<"\nВведите количество столбцов матрицы (<50) ";

cin>>Nstb;

vvod(Nstr,Nstb,a); // вызов функции ввод массива

cout<<"\a\nСумма = "<<summa(Nstr,Nstb,a); // вызов функции поиск суммы и вывод на экран

cout<< "\nPress any key... ";

}

void vvod(int nstr, int nstb, int a2[][50]) // функция ввод массива

{

int i,j;

cout<<"\n Введите массив \n";

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

for(j=0; j<nstb; j++)

{

cout<<"a["<<i+1<<"]["<<j+1<<"]= ";

cin>>*(*(a2+i)+j);

}

}

int summa(int nstr, int nstb, int a1[ ][50]) //функция поиск суммы

{

int i,j,s;

cout<<"\n Функция summa ";

for (s=0,i=0; i<nstr; i++)

for (j=0;j<nstb;j++)

if (a1[i][j]>0) s+=a1[i][j];

return s;

}

Пример передача в функцию двухмерного массива (с динамическим выделением памяти):

Ввести массив NxN(не больше 50) целых чисел, в функции подсчитать сумму его положительных элементов.

#include <iostream.h>

#include <conio.h>

void vvod(const int, const int, int **a2); // прототип функции ввод массива

void summa(const int, const int, int **a1); // прототип функции поиск суммы

void main(void)

{

int i,j,Nstr, Nstb;

cout<<"\nВведите количество строк матрицы (<50)\n";

cin>>Nstr;

cout<<" Введите количество столбцов матрицы (<50)\n";

cin>>Nstb;

int**a;

// выделение памяти под матрицу а

a=new int* [Nstr];

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

a[i]=new int[Nstb];

vvod(Nstr,Nstb,a); // вызов функции ввод массива

summa(Nstr,Nstb,a); // вызов функции поиск суммы

}

void vvod(const int nstr, const int nstb, int **a2) // функция ввод массива

{

int i,j;

cout<<"\n Введите массив \n";

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

for(j=0; j<nstb; j++)

{

cout<<"a["<<i+1<<"]["<<j+1<<"]= ";

cin>>*(*(a2+i)+j);

}

}

void summa(const int nstr, const int nstb, int **a1) //функция поиск суммы

{

int i,j,s;

cout<<"\n Функция summa ";

for (s=0,i=0; i<nstr; i++)

for (j=0;j<nstb;j++)

if (*(*(a1+i)+j)>0) s+=*(*(a1+i)+j);

cout<<"\n Сумма  = "<< s <<" \n Press any key... ";

}