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



ЗНАЕТЕ ЛИ ВЫ?

Передача значения простого аргумента в функцию.

Поиск

Способы передачи простых данных в функцию

Данные в функции передаются по значению, адресу.

Любое данное имеет текущее значение и адрес.

Если из вызывающей функции передается текущее значение аргумента в пользовательскую функцию, то его можно анализировать(if, switch,циклы) или использовать в вычислениях.

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

Передача в функцию значения аргумента

Пусть в функцию хотим передать значение int

… func(int a,…)

{

// используем a для анализа или вычисления

return …;

}

int main(void)

{

int A;// объявили аргумент

cin>>A;// определили аргумент

… func(A);// передали текущее значение аргумента

}

// При передачи по значению исходные данные из функции main заносятся в параметры функции. Функция производит действия над параметрами, => над копиями исходных данных, передаваемых из функции main. Следовательно, изнутри мы не можем изменить исходные данные. Обратной связи нет.

 

 
 

 

 


 

Задача: написать программу с функцией, вычисляющей S треугольника по формуле Герона.

Анализ характеристик функций:

1) название функции – Geron

2) исходные данные: a, b, c

типы исходных данных -> double a, double b, double c

3) результат функции S -> double

 

Geron.cpp:

#include<math.h>

double Geron(double a, double b, double c) // копирование значений А, B и C

{

double S, P;

P=(a+b+c)/2;

S=sqrt(P*(P-a)*(P-b)*(P-c));

return S;

}

 

Geron.h:

 

#ifndef GERON_H

#define GERON_H

double Geron(double a, double b, double c);

#endif

 

main.cpp:

 

#include<iostream>

using namespace std;

#include “Geron.h”

int main(void)

{

double A, B, C, S;

cin>>A>>B>>C;

S=Geron(A,B,C);

cout<<S<<endl;

return 0;

}

+

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

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

Ссылка – константный адрес другой переменный или альтернативное имя другой переменной.

int &rA=A;// объявляется ссылка rA, которая сразу инициализируется переменной А

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

Имя ссылки и аргумент указывают на одну и ту же область памяти: изменяется ссылка–> изменяется аргумент.

Ссылка часто используется для передачи из функции дополнительных результатов.

 

//

При объявлении ссылки она обязательно инициализируется именем другого объекта (адресата) и с этого момента становится альтернативным именем адресата. Ссылку нельзя переназначать. Ссылка только ссылается на один объект.

При передаче по ссылке экономится память и есть прямой доступ к аргументу. При необходимости аргумент можно защитить от изменения:

const int &rA;

//

 

Пусть из функции необходимо передать дополнительный результат целого типа.

… func(…, ТипРезультата &result) // создается &result=result,

{

result=результату; // передача результата

}

int main(void)

{

ТипРезультата result;

… func(…, result);

cout<<result<<endl;

}

 

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

 

double Pram(double a, double b, double &S)

{

double P;

P=2*(a+b);

S=a*b;// вычислили и передали площадь

 

return P;

}

 

int main(void)

{

double A, B, P, S;

cin>>A>>B;

P=Pram(A,B,S);

cout<<"S="<<S<<endl;

cout<<"P="<<P<<endl;

return 0;

}

 

Задача: переписать функцию swap с применением ссылок

void swap(int &rA, int &rB)

{

int x;

x=rA;

rA=rB;

rB=x;

}

int main(void)

{

int A, B;

cin>>A>>B;

swap(A,B);

cout<<A<<" "<<B<<endl;

return 0;

}

 

Выводы:

1) в функцию передаем значение аргумента, если в ней не надо изменять аргумент и он занимает небольшой объем памяти

2) в функцию передаем ссылку на её константный объект, если аргумент не надо изменять в функции, но он занимает большой объем памяти

3) в функцию передаем ссылку или адрес аргумента(через указатель), если аргумент внутри функции необходимо изменить (для передачи дополнительного результата)

+

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

Передача в функцию адреса аргумента

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

Передача данных по адресу.

 

 

 

 

Пусть из функции необходимо передать результат целого типа

Необходимо:

· Объявить в функции main переменную целого типа под результат.

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

· В имени функции и в прототипе объявить параметр указатель на целый тип.

· Внутри функции вычислить результат и записать его значение по указанному в параметре адресу.

… func(…, int *result) // параметр является указателем, *result=&result

{

*result=результату;// возвратили результат функции через параметр

}

 

int main(void)

{

int result; //переменная целого типа под результат.

… func(…, &result); // передали в функцию адрес переменной res

cout<<result<<endl;

}

 

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

void Swap(int *p1, int *p2)

{

int a;

a=*p1;

*p1=*p2;

*p2=a;

return;

}

 

int main(void)

{

int A, B;

cin>>A>>B;

Swap(&A, &B);

cout<<A<<" "<<B<<endl;

return 0;

}

+



Поделиться:


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

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