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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Для передачи необходимо:

1) указатель на тип массива для передачи адреса (тип *p)

2) величина целого типа для передачи размерности (int n)

 

void func(const double *p, double *p1, int n)

{

int i;

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

*(p1+i)=*(p+i)*2;

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

cout<<p1[i]<<' ';

return;

}

 

int main(void)

{

const int SIZE=10;

double mas1[SIZE]={1.2,2.3,3.7,4.1,5.9,6.1,7.7,8.4,9.6,10.3};

double mas2[SIZE];

func(mas1,mas2,SIZE);

return 0;

}

 

Если исходное данное – одномерный числовой массив типа double с const, говоря о том, что массив не изменим. Цикл перебора. Элементы массива можем анализировать и использовать при вычислениях в правой части. Изменять не можем.

 

+

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

 

void func(int *p, int *p1, int n)

{

int i, j;

for(i=0,j=0;i<n;i++)

*(p1+i)=*(p+i)*2;

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

cout<<p1[j]<<' ';

return;

}

 

int main(void)

{

const int SIZE=10;

int mas1[SIZE]={1,2,3,4,5,6,7,8,9,10};

int mas2[SIZE];

func(mas1,mas2,SIZE);

return 0;

}

+

37.Передача многомерных массивов в функцию (на примере двумерных). Написать схематично программу с функцией, использующей целый двумерный числовой массив в качестве исходного данного.

Любая матрица определяется адресом 1-го элемента, количеством строк и столбцов.

Для передачи матрицы в функцию, необходимо объявить эти 3 параметра:

1) int *p; // для передачи адреса

2) int *n; // количество строк

3) int *m; // количество столбцов

 

void InMas(const int *p,int *pr, int n, int m)

{

int i,j;

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

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

pr[i*m+j]=p[i*m+j]*2;

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

{

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

cout<<setw(4)<<pr[i*m+j]<<' ';

cout<<endl;

}

return;

}

 

 

int main(void)

{

const int STR=3, STLB=4;

int mas[STR][STLB]={1,2,3,4,5,6,7,8,9,10,11,12};

int masr[STR][STLB];

InMas(mas[0],masr[0],STR,STLB);

 

return 0;

}

 

+

Использование const при объявлении параметров функции.

func(const int a, …)

 

Интерфейс функции(заголовок) должен содержать максимальный объем информации о том, что будет происходить с параметрами (или с данными через параметры).

Что будет происходить с данными внутри функции через параметр.

 

Слово const перед типом параметра означает, что объект внутри функции не будет изменён.

Примеры: (const int &a, …)

a – это ссылка на аргумент,

без слова const мы можем аргумент внутри функции менять или не менять, но! если стоит слово const, то это явное указание, что аргумент внутри функции изменяться не будет.

 

int *p, int n – одномерный массив

const int *p – элементы массива изменяться не будут

+

39.Рекурсивные функции языка С++ и их применение при программировании.

Рекурсивная функция

Если функция вызывает саму себя, то возникает рекурсия.

Рекурсия – мощный инструмент разработки программ, когда большие объемы действий могут быть записаны кратко.

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

Ключевым фактором обеспечения рекурсии является использование стека. Стек – особое устройство оперативной памяти по принципу: последним пришел – первым вышел.

 

При выполнении программы в стек сохраняются параметры функции, внутренние локальные переменные и адреса возврата при завершении функции.

При рекурсии функция, не завершив своего выполнения, вызывается снова и снова. Стек постоянно пополняется, не освобождаясь, и может переполниться. Этого допустить нельзя.

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

 

Числа Фибоначчи

, n>2

 

a=0, b=1, c=a+b, a=b, b=c

 

int Fib(int n)

{

if(n==0)

return 0;

else if(n==1)

return 1;

else

return Fib(n-2)+Fib(n-1);

}

 

int main(void)

{

int n;

cin>>n;

cout<<Fib(n)<<endl;

return 0;

}

Задача: вычислить факториал числа N

N!=N*(N-1)

 

int rek(int n) рабочая

{

if (n==1||n==0)

return n;

else

return rek(n-1)*n;

 

}

int main(void)

{

int N=5;

cout<<rek(N)<<endl;

return 0;

}

+

Передача функции в другую функцию через указатель.



Поделиться:


Последнее изменение этой страницы: 2016-06-06; просмотров: 448; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.81.240 (0.006 с.)