Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Демонстрация функции без аргументов и не возвращающей значения





Лабораторная работа 3

Функции

(для выполнения лабораторной работы №3 необходимо проработать материал лекций №№ 9-11 и разобрать примеры, приведенные в данной методичке)

 

Примеры вызовов функций. 1

Демонстрация функции без аргументов и не возвращающей значения. 4

Демонстрация функции, определенной перед ее вызовом.. 5

Демонстрация функции с аргументами и не возвращающей значения. 5

Демонстрация использования глобальных переменных при обмене данными между функциями 6

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

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

Функция вычисления минимального расстояния между точками плоскости. 7

Функция вычисления факториала. 8

Функция вычисления хn через умножение. 9

Функция определения максимального и минимального из двух чисел. 9

Функция с параметром перечисляемого типа. 10

Функция, выделяющая целую и дробную части вещественного числа. 10

Функция, возвращающая ссылку как результат своей работы.. 11

Демонстрация inline-функций. 11

Демонстрация функции с параметрами по умолчанию.. 12

Перегрузка функций. 12

Перегрузка функций с равным числом аргументов. 12

Перегрузка функций с разным числом аргументов. 13

Шаблоны семейства функций. 14

Рекурсивные функции. 16

Рекурсивная функция вычисления факториала. 16

Рекурсивная функция вывода на печать символов строки в обратном порядке. 17

Рекурсивная функция возведения вещественного числа Х в целую степень N>=0. 18

Рекурсивная функция печати числа в виде строки символов. 18

Вычисление НОД через итерации и через рекурсивную функцию.. 19

Рекурсивная функция вычисления чисел Фибоначчи. 19



Рекурсивная функция вычисления суммы элементов числовой последовательности. 20

Рекурсивная функция реверса последовательности вводимых символов. 20

Передача функции в качестве параметра. 20

Вычисление интеграла по методу левых прямоугольников. 20

Вычисление интеграла по методу правых прямоугольников. 24

Использование одинаковых вызовов функции для вычисления интеграла разными методами и для разных функций. 25

Использование при вычислении интеграла многофайловой компиляции. 26

Вычисление корня нелинейного уравнения. 29

Правила оформления и вызова функций. 32

Элементы оптимизации работы с функциями. 34

Примеры вызовов функций

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

 

//1

int reset (int); //прототип функции

#define HIGH 5

int main ()

{

int i = HIGH; //локальная переменная i

reset (i/2); //аргумент получает значение 2, но i свое значение не изменяет

//возвращаемое функцией значение пропадает

printf ("%d\n", i); //5

return 0;

}

int reset (int i) //локальная переменная i

{

i = i;

return (i);

}

 

 

//2

int reset (int); //прототип функции

#define HIGH 5

int main ()

{

int i = HIGH; //локальная переменная i

reset (i = i/2); //аргумент получает значение 2,i изменяет свое значение на 2

//возвращаемое функцией значение пропадает

printf ("%d\n", i); //2

return 0;

}

int reset (int i)

{

i = i;

return (i);

}

 

//3

int reset (int i); //прототип функции

#define LOW 0

#define HIGH 5

int i = LOW; //глобальная переменная i

int main ()

{

int i = LOW; //локальная переменная i

i = reset (i/2); //аргумент i/2 получает значение 0,
//i изменяет свое значение на значение 5,

// возвращаемое из функции reset

printf ("%d\n", i); //5

return 0;

}

 

int reset (int i) //локальная переменная i

{

i = HIGH;

return (i);

}

//4

int reset (int i); //прототипы функций

int workover (int i);

#define LOW 0

#define HIGH 5

#define CHANGE 2

int i = LOW; //глобальная переменная i

int main ()

{

auto int i = HIGH; //локальная переменная i

reset (i/2); //вызов функции с аргументом 2,
//i свое значение не изменяет

//возвращаемое функцией значение пропадает

reset (i=i/2); //вызов функции с аргументом 2,
//i изменяет свое значение на 2,

//значение, возвращаемое функцией, пропадает

printf ("%d\n", i); //2

i= reset (i/2); //вызов функции с аргументом 1,
//i изменяет свое значение на

//значение 5, возвращаемое функцией

workover(i); //вызов функции с аргументом 5

printf ("%d\n", i); //5

return 0;

}

int workover (int i)

{ //локальная переменная i

i = (i%i)*((i*i)/(2*i)+4);

return (i);

}

int reset (int i) //локальная переменная i

{

i = i <=CHANGE? HIGH: LOW;

return (i);

}

//5

int reset (int i); //прототипы функций

int workover (int i);

#define LOW 0

#define HIGH 5

#define CHANGE 2

int i = LOW; //глобальная переменная i

int main ()

{

auto int i = HIGH; //локальная переменная i

reset (i/2); //вызов функции с аргументом 2,
//i свое значение не изменяет

//возвращаемое функцией значение пропадает

reset (i=i/2); //вызов функции с аргументом 2,
//i изменяет свое значение на 2

//значение, возвращаемое функцией, пропадает

i= reset (i/2); //вызов функции с аргументом 1,
//i изменяет свое значение на

//значение 5, возвращаемое функцией

printf ("%d\n", i); //5

workover(i); //вызов функции с аргументом 5

printf ("%d\n", i); //5

return 0;

}

int workover (int i)

{

i = (i%i)*((i*i)/(2*i)+4);

return (i);

}

int reset (int i)

{

i = i <=CHANGE? HIGH: LOW;

return (i);

}

 

 

//6

int reset(); //прототипы функций

int next(int);

int last(int);

int neww(int);

 

int i=1; //глобальная переменная i

int main()

{auto int i, j; //локальные переменные

i=reset();

for (j=1; j<=3; j++)

{next(i); last(i);

printf ("%d\n", neww(i+j));

}

return 0;

}

 

int reset()

{return(i); //глобальная переменная i

}

int next(int j)

{return(j=i++); //глобальная переменная i , локальная переменная j

}

int last(int j)

{ static int i=10; // локальная переменная j, статическая локальная переменная i

return(j=i--);

}

int neww(int i)

{ auto int j=10; //локальные переменные i и j

return(i=j+=i);

}

 

Демонстрация функции без аргументов и не возвращающей значения

void starline(); //прототип функции

int main()

{

starline(); //вызов функции

cout << "Data type Range" << endl;

starline(); //вызов функции

cout << "char -128 to 127" << endl

<< "short -32,768 to 32,767" << endl

<< "int System dependent" << endl

<< "long -2,147,483,648 to 2,147,483,647" << endl;

starline(); //вызов функции

_getch();

return 0;

}

//--------------------------------------------------------------

// определение функции

void starline() //заголовок функции

{

for(int j=0; j<45; j++) //тело функции

cout << '*'; //функция всегда выводит на экран 45 символов «звездочка»

cout << endl;

}

 

Результаты работы:

*********************************************

Data type Range

*********************************************

char -128 to 127

short -32,768 to 32,767

int System dependent

long -2,147,483,648 to 2,147,483,647

*********************************************

 

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

//нет прототипа функции !!!

 

 

//--------------------------------------------------------------

void starline() //определение функции перед ее вызовом в функции main

{

for(int j=0; j<45; j++)

cout << '*';

cout << endl;

}

//--------------------------------------------------------------

int main()

{

starline(); //вызов функции

cout << "Data type Range" << endl;

starline(); //вызов функции

cout << "char -128 to 127" << endl

<< "short -32,768 to 32,767" << endl

<< "int System dependent" << endl

<< "long -2,147,483,648 to 2,147,483,647" << endl;

starline(); //вызов функции

_getch();

return 0;

}

 

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

Функция вычисления минимального расстояния между точками плоскости

Функция вычисляет минимальное из расстояний между точками плоскости А(х1; у1), В(х2; у2) и С(1;2).

Алгоритм решения задачи:

  • вычислить расстояния dl=AB, d2=AC, d3=BC;
  • вычислить m=min{dl, d2, d3}

double dd (double, double, double, double); //прототип функции

int main()

{double x1, y1, x2, y2, d1, d2, d3, m;

cout << "Input koordinaty:\n";

cin >> x1 >> y1 >> x2 >> y2;

d1=dd (x1, y1, x2, y2) ; //вызовы функции

d2=dd (x1, y1, 1, 2);

d3=dd (x2, y2, 1, 2);

m = (d1<d2) ? d1 : d2;

if (d3<m) m=d3;

cout << "min: " << m <<endl;

_getch();

return 0;

}

 

double dd (double a1, double b1, double a2, double b2)
//определение функции

{

return (sqrt ((a1-a2)*(a1-a2) + (b1-b2)*(b1-b2)));

}

 

 

Демонстрация inline-функций

 

inline double lbstokg (float pounds)

// функция конвертирует фунты в килограммы

{

return 0.453592 * pounds;

}

//--------------------------------------------------------------

int main()

{

float lbs;

 

cout << "\n Enter your weight in pounds: ";

cin >> lbs;

cout << "Your weight in kilograms is " << lbstokg (lbs)

<< endl;

_getch();

return 0;

}

 

 

Результаты работы

Enter your weight in pounds: 3.5

Your weight in kilograms is 1.58757

Перегрузка функций

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

 

Шаблоны семейства функций

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

Шаблон семейства функций состоит из двух частей: заголовка шаблона
(template <список параметров шаблона>) и обычного определения функции (заголовок и тело функции), в котором тип возвращаемого значения и/или типы параметров обозначаются именами параметров шаблона, введенных в его заголовке. Имена параметров шаблона могут использоваться и в теле определения функции для обозначения типов локальных объектов.

 

Формат простейшей функции-шаблона:

template <class type>
заголовок функции

{ //тело функции

}

где вместо слова type может использоваться произвольное имя.

Определим шаблон семейства функций, вычисляющих абсолютное значение числовых величин разных типов:

 

//--------------------------------------------------------------

template <class T> //шаблон семейства функций T abs(T n)

T abs(T n)

{

return (n < 0) ? -n : n;

}

//--------------------------------------------------------------

int main()

{

int i1 = 5; //инииализация переменных разных типов и знаков

int i2 = -6;

long l1 = 70000L;

long l2 = -80000L;

double d1 = 9.95;

double d2 = -10.15;

//вызовы функций

cout << "\nabs(" << i1 << ")=" << abs(i1); //abs(int)

cout << "\nabs(" << i2 << ")=" << abs(i2); //abs(int)

cout << "\nabs(" << l1 << ")=" << abs(l1); //abs(long)

cout << "\nabs(" << l2 << ")=" << abs(l2); //abs(long)

cout << "\nabs(" << d1 << ")=" << abs(d1); //abs(double)

cout << "\nabs(" << d2 << ")=" << abs(d2); //abs(double)

cout << endl;

_getch();

return 0;

}

 

 

Определим шаблон семейства функций для обмена значений двух передаваемых им параметров:

template <class T>
voidswap(T*x, T*y) {T z=*x; *x=*y; *y=z;}

 

При определении переменных long k=4, d=8; и вызове swap(&k, &d);

будет сформировано определение

void swap(long* x, long* y) {long z=*x; *x=*y; *y=z;}

 

При определении переменных double a=2.44, b=66.3; и вызове swap(&a, &b);

будет сформировано определение

void swap(double* x, double* y) {double z=*x; *x=*y; *y=z;}

 

 

Определим шаблон семейства функций для поиска минимального из трех значений, причем функция возвращает элемент с минимальным значением:

template <class T>

T min3(T x, T y, T z)

{T min =x;

if (y<min) min = y;

if (z<min) min = z;

return min;

}

int main()

{int a=2, b=5, c=-5;

cout << min3(a*c, b, c) << endl; //-10

cout << min3(0.03*a, 10.0, 5.0) << endl; //0.06

_getch();

return 0;

}

 

Если все 3 аргумента будут одного типа, компилятор создаст нужную функцию, если нет – то сообщение об ошибке.

Имя параметра шаблона, например N (template <class N>), видимо во всем определении и скрывает другие определения того же идентификатора в области, глобальной по отношению к данному шаблону; для доступа к ним используется операция изменения области видимости:

 

int N=0; //глобальная переменная N

 

template <class N> //прототип шаблона

N maxx (N x, N y); //идентификаторы параметров в прототипе шаблона не опускаются

 

int main()

{int a=12, b=42;

maxx (a, b);

cout << a << " " << b << endl;

float z=66.3f, f=222.4f;

maxx (z, f);

cout << z << " " << f << endl;

_getch();

return 0;

}

 

template <class N> //определение шаблона

N maxx (N x, N y)

{N a = x;

cout << "\n N=" << ++ ::N << endl;

if (a<y) a=y;

return a;

}

Рекурсивные функции

Условия «правильного» рекурсивного определения:

§ множество определяемых объектов частично упорядочено;

§ каждая убывающая по этому упорядочению последовательность элементов заканчивается некоторым минимальным элементом;

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

§ неминимальные элементы определяются с помощью элементов, которые меньше их по этому упорядочению.

Int main ()

{ double a, b, eps; //отрезок интегрирования, точность

double Int; //переменная, в которой возвращается значение интеграла

int K_iter; //переменная, в которой возвращается количество итераций

 

cout << "Input a, b, eps\n";

cin >> a >> b >> eps;

pfunc pf=f1; //определение указателя на функцию pf и его инициализация

//или pfunc pf=&f1;

 

Vych_Int_lpram(a, b, eps, (*pf), &Int, &K_iter); //вычисление интеграла для f1

// или Vych_Int_lpram(a, b, eps, pf, &Int, &K_iter);

 

cout << "Integral for f1 =" << Int << " K_iter= "<< K_iter << endl;

pf=f2; // присваивание указателю на функцию нового значения

//или pfunc pf=&f2;

 

Vych_Int_lpram(a, b, eps, (*pf), &Int, &K_iter); //вычисление интеграла для f2

//или Vych_Int_lpram(a, b, eps, pf, &Int, &K_iter);

 

cout << "Integral for f2 =" << Int << " K_iter = " << K_iter << endl;

_getch();

return 0;

}

 

void Vych_Int_lpram(double a,double b,double eps, pfunc pf, double *I,int *k)

{int n=20; //инициализация начального количества разбиений

double h=(b-a)/n; //определение шага интегрирования

double S1=0, S2=0; // переменные для значений сумм с шагом h и с шагом h/2

 

//вызов функции Sum1 c шагом h: в S1 возвращается сумма

Sum (a, b, h, (*pf), &S1); //вызов функции для запуска процесса двойного пересчета

//или Sum (a, b, h, pf, &S1);

*k=0;

do

{ S2= S1;

n *=2; //увеличение количества отрезков разбиения и

h=(b-a)/n; //уменьшение шага интегрирования в 2 раза

//вызов функции Sum1 с шагом h=h/2

Sum (a, b, h, (*pf), &S1); //повторное вычисление суммы в S1

//или Sum (a, b, h, pf, &S1);

*k +=1;

}while (fabs(S1-S2) > eps) ;

*I=S1;

}

 

void Sum(double a, double b, double h, pfunc pf, double *S)

{ double x, sum;

x=a;

sum=0;

while (x<b) {

sum=sum+(*pf)(x); //накопление суммы высот

//или sum=sum+pf(x);

x=x+h;

}

*S=h*sum; //вычисление площади

}

 

double f1 (double x)

{ return cos(x)/exp(0.333333*log(x));}

 

double f2 (double x)

{return cos(x*x*x)/sqrt(sqrt(x)); }

 

 

Как мы видим в рассмотренных случаях, в вызове функции Vych_Int_lpram всегда присутствует переменная pf, но содержит она разные функции.

 

Int main ()

{ double a, b, eps; //отрезок интегрирования, точность, значение суммы

double Int; //переменная, в которой возвращается значение интеграла

int K_iter; //переменная, в которой возвращается количество итераций

pfunc pf=f1; // инициализация указателя адресом функции f1

pfunc_metod pmet = Vych_Int_lpram;

// инициализация указателя адресом функции Vych_Int_lpram

cout << "Input a, b, eps\n";

cin >> a >> b >> eps;

(*pmet) (a,b,eps,(*pf),&Int,&K_iter); //вызов Vych_Int_lpram для f1

cout << "lpram for f1 =" << Int << " K_iter= "<< K_iter << endl;

 

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

(*pmet) (a,b,eps,(*pf),&Int,&K_iter); //вызов Vych_Int_lpram для f2

cout << "lpram for f2 =" << Int << " K_iter = " << K_iter << endl;

 

pmet =Vych_Int_rpram; // указателю присваивается адрес новой функции-метода

(*pmet)(a, b, eps,(*pf),&Int,&K_iter); //вызов Vych_Int_rpram для f2

cout << "rpram for f2 =" << Int << " K_iter = " << K_iter << endl;

 

pf=f1; // инициализация указателя на функцию значением f1

(*pmet) (a, b, eps,(*pf), &Int, &K_iter); //вызов Vych_Int_rpram для f1

cout << "rpram for f1 =" << Int << " K_iter = " << K_iter << endl;

_getch();

return 0;

}

 

void Vych_Int_lpram(double a, double b, double eps, pfunc pf, double *I, int *k)

{int n=20; //инициализация начального количества разбиений

double h=(b-a)/n; //определение шага интегрирования

double S1=0, S2=0; // переменные для значений сумм с шагом h и с шагом h/2

 

//вызов функции Sum1 c шагом h: в S1 возвращается сумма

Sum (a, b, h, (*pf), &S1); //вызов функции для запуска процесса двойного пересчета

//или Sum (a, b, h, pf, &S1);

*k=0;

do

{ S2= S1;

n *=2; //увеличение количества отрезков разбиения и

h=(b-a)/n; //уменьшение шага интегрирования в 2 раза

//вызов функции Sum1 с шагом h=h/2

Sum (a, b, h, (*pf), &S1); //повторное вычисление суммы в S1

//или Sum (a, b, h, pf, &S1);

*k +=1;

}while (fabs(S1-S2) > eps) ;

*I=S1;

}

 

void Vych_Int_rpram(double a, double b, double eps, pfunc pf, double *I, int *k)

{double h, S, S1, sum=(*pf)(b);

int n=1, m=0;

*k=0;

S=sum* (b-a); // очень «грубое» вычисление интеграла для входа в цикл

do

{S1= S;

* k +=1; //количество итераций

n=n*2; h=(b-a)/n; // увеличение количества отрезков разбиения и // уменьшение шага интегрирования

int m=1;

while (m<n )

{sum=sum+(*pf)(b-h*m); // накопление суммы высот

m=m+2;

}

S=h*sum; // вычисление площади

}while (fabs(S-S1)>eps);

*I=S;

}

 

void Sum(double a, double b, double h, pfunc pf, double *S)

{ double x, sum;

x=a;

sum=0;

while (x<b) {

sum=sum+(*pf)(x); //накопление суммы высот

//или sum=sum+pf(x);

x=x+h;

}

*S=h*sum; //вычисление площади

}

 

Double f1 (double x)

{ return cos(x)/exp(0.333333*log(x));

}

Double f2 (double x)

{return cos(x*x*x)/sqrt(sqrt(x));

}

 

Int main()

{

double a,b,eps,s1,s2,ds;

otdel_korn(fun1);

 

cout << "Enter a, b and eps!" << endl;

cin >> a >> b >> eps;

otdel_korn(fun1,a,b,eps);

 

 

cout <<"Enter s1, s2 and ds:" << endl;

cin >> s1 >> s2 >> ds;

otdel_korn(fun1,a,b,eps,s1,s2,ds);

_getch();

return 0;

}

 

 

Int main ()

 

{ double a, b, eps, s1, s2, ds;

 

otdel_korn(function_1);

 

cout << "Enter a, b and eps!" << endl;

cin >> a >> b >> eps;

otdel_korn(function_1, a, b, eps);

 

cout <<"Enter s1, s2 and ds:" << endl;

cin >> s1 >> s2 >> ds;

otdel_korn(function_1, a, b, eps, s1, s2, ds);

_getch();

return 0;

}

 

Лабораторная работа 3

Функции

(для выполнения лабораторной работы №3 необходимо проработать материал лекций №№ 9-11 и разобрать примеры, приведенные в данной методичке)

 

Примеры вызовов функций. 1

Демонстрация функции без аргументов и не возвращающей значения. 4

Демонстрация функции, определенной перед ее вызовом.. 5

Демонстрация функции с аргументами и не возвращающей значения. 5

Демонстрация использования глобальных переменных при обмене данными между функциями 6

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

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

Функция вычисления минимального расстояния между точками плоскости. 7

Функция вычисления факториала. 8

Функция вычисления хn через умножение. 9

Функция определения максимального и минимального из двух чисел. 9

Функция с параметром перечисляемого типа. 10

Функция, выделяющая целую и дробную части вещественного числа. 10

Функция, возвращающая ссылку как результат своей работы.. 11

Демонстрация inline-функций. 11

Демонстрация функции с параметрами по умолчанию.. 12

Перегрузка функций. 12

Перегрузка функций с равным числом аргументов. 12

Перегрузка функций с разным числом аргументов. 13

Шаблоны семейства функций. 14

Рекурсивные функции. 16

Рекурсивная функция вычисления факториала. 16

Рекурсивная функция вывода на печать символов строки в обратном порядке. 17

Рекурсивная функция возведения вещественного числа Х в целую степень N>=0. 18

Рекурсивная функция печати числа в виде строки символов. 18

Вычисление НОД через итерации и через рекурсивную функцию.. 19

Рекурсивная функция вычисления чисел Фибоначчи. 19

Рекурсивная функция вычисления суммы элементов числовой последовательности. 20

Рекурсивная функция реверса последовательности вводимых символов. 20

Передача функции в качестве параметра. 20

Вычисление интеграла по методу левых прямоугольников. 20

Вычисление интеграла по методу правых прямоугольников. 24

Использование одинаковых вызовов функции для вычисления интеграла разными методами и для разных функций. 25

Использование при вычислении интеграла многофайловой компиляции. 26

Вычисление корня нелинейного уравнения. 29

Правила оформления и вызова функций. 32

Элементы оптимизации работы с функциями. 34

Примеры вызовов функций

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

 

//1

int reset (int); //прототип функции

#define HIGH 5

int main ()

{

int i = HIGH; //локальная переменная i

reset (i/2); //аргумент получает значение 2, но i свое значение не изменяет

//возвращаемое функцией значение пропадает

printf ("%d\n", i); //5

return 0;

}

int reset (int i) //локальная переменная i

{

i = i;

return (i);

}

 

 

//2

int reset (int); //прототип функции

#define HIGH 5

int main ()

{

int i = HIGH; //локальная переменная i

reset (i = i/2); //аргумент получает значение 2,i изменяет свое значение на 2

//возвращаемое функцией значение пропадает

printf ("%d\n", i); //2

return 0;

}

int reset (int i)

{

i = i;

return (i);

}

 

//3

int reset (int i); //прототип функции

#define LOW 0

#define HIGH 5

int i = LOW; //глобальная переменная i

int main ()

{

int i = LOW; //локальная переменная i

i = reset (i/2); //аргумент i/2 получает значение 0,
//i изменяет свое значение на значение 5,

// возвращаемое из функции reset

printf ("%d\n", i); //5

return 0;

}

 

int reset (int i) //локальная переменная i

{

i = HIGH;

return (i);

}

//4

int reset (int i); //прототипы функций

int workover (int i);

#define LOW 0

#define HIGH 5

#define CHANGE 2

int i = LOW; //глобальная переменная i

int main ()

{

auto int i = HIGH; //локальная переменная i

reset (i/2); //вызов функции с аргументом 2,
//i свое значение не изменяет

//возвращаемое функцией значение пропадает

reset (i=i/2); //вызов функции с аргументом 2,
//i изменяет свое значение на 2,

//значение, возвращаемое функцией, пропадает

printf ("%d\n", i); //2

i= reset (i/2); //вызов функции с аргументом 1,
//i изменяет свое значение на

//значение 5, возвращаемое функцией

workover(i); //вызов функции с аргументом 5

printf ("%d\n", i); //5

return 0;

}

int workover (int i)

{ //локальная переменная i

i = (i%i)*((i*i)/(2*i)+4);

return (i);

}

int reset (int i) //локальная переменная i

{

i = i <=CHANGE? HIGH: LOW;

return (i);

}

//5

int reset (int i); //прототипы функций

int workover (int i);

#define LOW 0

#define HIGH 5

#define CHANGE 2

int i = LOW; //глобальная переменная i

int main ()

{

auto int i = HIGH; //локальная переменная i

reset (i/2); //вызов функции с аргументом 2,
//i свое значение не изменяет

//возвращаемое функцией значение пропадает

reset (i=i/2); //вызов функции с аргументом 2,
//i изменяет свое значение на 2

//значение, возвращаемое функцией, пропадает

i= reset (i/2); //вызов функции с аргументом 1,
//i изменяет свое значение на

//значение 5, возвращаемое функцией

printf ("%d\n", i); //5

workover(i); //вызов функции с аргументом 5

printf ("%d\n", i); //5

return 0;

}

int workover (int i)

{

i = (i%i)*((i*i)/(2*i)+4);

return (i);

}

int reset (int i)

{

i = i <=CHANGE? HIGH: LOW;

return (i);

}

 

 

//6

int reset(); //прототипы функций

int next(int);

int last(int);

int neww(int);

 

int i=1; //глобальная переменная i

int main()

{auto int i, j; //локальные переменные

i=reset();

for (j=1; j<=3; j++)

{next(i); last(i);

printf ("%d\n", neww(i+j));

}

return 0;

}

 

int reset()

{return(i); //глобальная переменная i

}

int next(int j)

{return(j=i++); //глобальная переменная i , локальная переменная j

}

int last(int j)

{ static int i=10; // локальная переменная j, статическая локальная переменная i

return(j=i--);

}

int neww(int i)

{ auto int j=10; //локальные переменные i и j

return(i=j+=i);

}

 

Демонстрация функции без аргументов и не возвращающей значения

void starline(); //прототип функции

int main()

{

starline(); //вызов функции

cout << "Data type Range" << endl;

starline(); //вызов функции

cout << "char -128 to 127" << endl

<< "short -32,768 to 32,767" << endl

<< "int System dependent" << endl

<< "long -2,147,483,648 to 2,147,483,647" << endl;

starline(); //вызов функции

_getch();

return 0;

}

//--------------------------------------------------------------

// определение функции

void starline() //заголовок функции

{

for(int j=0; j<45; j++) //тело функции

cout << '*'; //функция всегда выводит на экран 45 символов «звездочка»

cout << endl;

}

 

Результаты работы:

*********************************************

Data type Range

*********************************************

char -128 to 127

short -32,768 to 32,767

int System dependent

long -2,147,483,648 to 2,147,483,647

*********************************************

 









Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)...

ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры...

Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...

ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2021 zdamsam.ru Размещенные материалы защищены законодательством РФ.