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

В языке С++ предусмотрена перегрузка функций, то есть функция с одним именем описана для разных типов параметров, с разными результатами, если написать функцию с разным результатом, но с одним списком параметров, то компилятор выдаст ошибку.)

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

Inline int Area(int,int);

Возмоожны рекурсивные функции, то есть функции, вызывающие самое себя.

Пример.


#include <iostream.h>

Int fib(int n);

Int fib(int n)

{ if (n<3)

Return 1;

Else

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

}

Int main(void)

{

Int i,rez;

cout <<"введите число Фибоначи = ";

cin >> i;

rez=fib(i);

cout <<i<<"-oe число Фибоначи ="<<rez<<"\n";

Return 0;

}

Результат

введите число Фибоначи = 6

6-oe число Фибоначи =8


Возврат более одного результата.

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

Пример.


#include<iostream.h>

#include<conio.h>

// #include"sqwere.cpp"

#include <math.h>

int sqwere(float a,float b, float c,float *x1,float *x2);

// объявление функции, ниже идут заголовок и тело этой функции

int sqwere(float a,float b, float c,float *x1,float *x2)

{ float d;

d=b*b-4.*a*c;

if(d<0.)return 0;

*x1=(-b-sqrt(d))/(2.*a);

*x2=(-b+sqrt(d))/(2.*a);

if(d==0.)return 1;

if(d>0) return 2;

}

Int main(void)

{

Float a,b,c,x1,x2;

Int rez;

cout <<"Введите числа\n a:";

cin >>a;

cout <<"\n b=:";

cin >>b;

cout <<"\n c=:";

cin >>c;

// вызов функции с фактическими параметрами

rez=sqwere(a,b,c,&x1,&x2);

Switch(rez)

{ case 0: cout << "корней нет \n";break;

case 1: cout << "корнь один = "<< x1 <<" \n";break;

case 2: cout << "корней два x1= "<< x1 <<" x2= "<<x2<<"\n";break;

}

Return 0;

}


Та же самая программа написана при помощи ссылок, найдите отличия


#include<iostream.h>

#include<conio.h>

#include <math.h>

int sqwere(float a,float b, float c, float &x1,float &x2);

int sqwere(float a,float b, float c,float &x1,float &x2)

{ float d;

d=b*b-4.*a*c;

if(d<0.)return 0;

x1=(-b-sqrt(d))/(2.*a);

x2=(-b+sqrt(d))/(2.*a);

if(d==0.)return 1;

if(d>0) return 2;

}

Int main(void)

{

Float a,b,c,x1,x2;

Int rez;

cout <<"Введите числа\n a:";

cin >>a;

cout <<"\n b=:";

cin >>b;

cout <<"\n c=:";

cin >>c;

rez=sqwere(a,b,c,x1,x2);

Switch(rez)

{ case 0: cout << "корней нет \n";break;

case 1: cout << "корнь один = "<< x1 <<" \n";break;

case 2: cout << "корней два x1= "<< x1 <<" x2= "<<x2<<"\n";break;

}

Return 0;

}



Лекция № 3.Массивы. Элементы массива. инициализация массива. объявление массива. Динамические и статические массивы. Многомерные массивы. Строковые.

Массивы.

Массивы представляют собой последовательность данных одного типа, размещённых друг за другом в памяти компьютера. Каждая единица данных называется элементом массива.

Описание массива:

Доступ к элементам массива осуществляется по адресации, относительно первого элемента, то есть, если необходимо обратиться к 10 элементу, надо написать IntArrey[9]или IntArrey+9; (Первый элемент имеет номер 0 или смещение 0 от начала.)

Возможна инициализация массива

Int Arrey[5]={10,20,30,40,50};

Существуют много мерные массивы, в этом случае указывается размерность по всем размерностям: int Arrey2[5][3]; Инициализация такого массива представляется в виде:

Int Arrey[5][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12},{0,1,0}};

Int Arrey[5][3]={1,2,3,4,5,6,7,8,9,10,11,12,0,1,0};

При этом описании Существует массив Arrey[5] , который содержит адреса начала каждой строки, Если мы хотим использовать указатель на этот массив необходимо обращение **Arrey;

Для объявления массивов можно использовать область динамической памяти, в этом случае описание массива будет иметь вид:

Int *Arrey;

Arrey=(int*)malloc(n*sizeof(int));

 

Пример программы, работающей с массивами.

#include<iostream.h>

#include <alloc.h>

#include <stdlib.h>

#include <time.h>

#include <math.h>

int vvodArrey(int n,int m,int *Arrey,int zz);

int exitArrey(int n,int m,int *Arrey);

int* sunArrey(int n,int m,int *Arrey1,int*Arrey2);

int vvodArrey(int n,int m, int *Arrey,int zz)

{ int i,j;

Randomize();

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

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

*(Arrey+i*m+j)=random(zz);

}

Return 0;

}

int exitArrey(int n,int m, int *Arrey)

{ int i;

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

(((i+1)%m)==0)? cout<<*(Arrey+i)<<"\n" : cout<<*(Arrey+i)<<"\t";

Return 0;

}

int* sunArrey(int n,int m,int *Arrey1,int*Arrey2)

{

int*Arrey;

Int i,j;

Arrey=(int*)malloc(sizeof(int)*n*m);

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

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

*(Arrey+i*m+j)=*(Arrey1+i*m+j)+(*(Arrey2+i*m+j));

Return Arrey;

}

Int main(void)

{

int *ArreyF,*ArreyS,*ArreyRez,n,m,size=100;

cout <<"Введите размерность массива\n по строкам:";

cin >>n;

cout <<"по столбцам : ";

cin >>m;

if ((ArreyF=(int*)malloc(sizeof(int)*n*m))==0)

{ cout <<" нет памяти\n";return -1;}

if ((ArreyS=(int*)malloc(sizeof(int)*n*m))==0)

{ cout <<" нет памяти\n";return -1;}








Дата добавления: 2015-12-26; просмотров: 645;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.023 сек.