Перегрузка функций.
В языке С++ предусмотрена перегрузка функций, то есть функция с одним именем описана для разных типов параметров, с разными результатами, если написать функцию с разным результатом, но с одним списком параметров, то компилятор выдаст ошибку.)
При вызове функции компилятор создаёт копию функции в памяти, выделяя под неё память, можно выиграть несколько в быстродействии, если использовать функцию, описанную так, что компилятор каждый раз подставляет её в программу , этого можно добиться, если описать функции 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; просмотров: 697;