Void plus (int x, int y, int z)
{
cout<<”x=”<<x<< endl; //4
cout<<”y=”<<y<< endl; // 5
cout<<”z=”<<z<< endl; // 10
z=x+y;
cout<<”z=”<<z<< endl; // 9
}
void plus1 (int x, int y, int &z)
{
cout<<”x=”<<x<< endl; //4
cout<<”y=”<<y<< endl; // 5
cout<<”z=”<<z<< endl; // 10
z=x+y;
cout<<”z=”<<z<< endl; // 9
}
Int plus2 (int x, int y)
{
cout<<”x=”<<x<< endl; //4
cout<<”y=”<<y<< endl; // 5
cout<<”x+y”<<x+y<< endl; // 9
return x+y;
}
Примечание
При вызове функций plus2() на месте аргументов могут быть любые выражения данного типа.
plus2(a+b*c,2*c);
plus2(5,7);
Передача массивов функции.
Пример 2.
# include <iostream.h>
const int n=10;
void create ( int x[], int k);
//возможный вариант void vvod ( int x[n])
void show ( int x[], int k);
int max (int x[], int k);
void main()
{
int a[n];
create(a,n);
show ( a, n);
cout<< “max(a,n)= ”<<max(a,n)<<endl;;
}
void create ( int x[], int k)
{
int i;
for (i=0; i<k; i++)
{
cout<<”x[“<<i<<”]=”;
cin>>x[i];}
}
}
void show ( int x[], int k)
{
int i;
for (i=0; i<k; i++)
cout<<x[i]<<”_”;
}
int max(int x[], int k)
{
int i;
int m;
m=a[0];
for (i=0; i<k; i++)
if (m<x[i]) m=x[i];
return m;
}
Лекция №9
Динамические массивы
Задание статического массива
const int n=10;
int a[n];
Задание динамического массива
int n;
cout<< “Enter n:”;
cin>>n;
int*b //указатель на первый элемент массива
b= new int[n];
delete [] b - после работы программы необходимо освободить память «кучи» от b.
В параметрах функций динамический массив задается так же, как и статический
void vvod ( int x[], int n);
Или
void vvod ( int *x, int n);
void vvod ( int x[n])
Примечание
int*p;
p=new int;
*p=10; (косвенная динамическая память)
delete p ; (возврат памяти)
Задание двумерного динамического массива
Память выделяется в 2 этапа: сначала под строку указателей на столбцы, а затем в цикле под каждый столбец.
int colstr; colstb;
cout<< “Enter colstr:”;
cin>> colstr;
cout<< “Enter colstb:”;
cin>> colstb;
int **b;
b=new int*[colstr];
for (int i<0;i<colstr;i++)
b[i]=new int[colstb];
Соответственно, необходимо delete[][]b;
В параметрах функций
void create ( int **x, int n, int m);
void show( int **x, int n, int m);
Задача 1.
Даны два двумерных массива A и B (квадратные матрицы).
Матрица С= A* B, если в А существует строка простых чисел. В противном случае С= A+ B
# include <iostream.h>
# include <math.h>
void create ( int **, int);
void show( int **, int);
Bool prime (int);
bool EA( int **, int);
void mult ( int **, int**, int**);
void add ( int **, int**, int**);
Void main()
{
int n;
cout<<”enter size=”;
cin>>n;
int **a, **b, **c;
a= new int*[n];
int i;
for (i<0;i<n;i++)
a[i]=new int[n];
b= new int*[n];
for (i<0;i<n;i++)
b[i]=new int[n];
c= new int*[n];
for (i<0;i<n;i++)
c[i]=new int[n];
create(a,n);
create(b,n);
if (EA(a,n)) mult(a,b,c);
else add(a,b,c);
cout<<”array c:”<<endl;
show(c,n);
delete[][]a;
delete[][]b;
delete[][]c;
}
void create(int**x, int n)
{
int i,j;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
cin>>x[i][j];
}
void show(int**x, int n)
{
int i,j;
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
cout<<a[i][j]<<’ ’;
cout<<endl;
}
}
Bool prime(int x)
{
bool t;
int i;
if (x<=1) return false;
if (x==2) return true;
t=true;
i=2;
while (i<=sqrt(x)&&t)
{
if (x% i==0) t=false;
i++;
}
return t;
}
bool EA(int**x, int n)
{
bool p,q;
int i,j;
bool p=false;
for (i=0;i<n&&!p;i++)
{
bool q=true;
for (j=0; j<n&&q; j++)
if (!prime(x[i][j])) q=false;
p=q;
}
return p;
}
void mult ( int **x, int**y, int**z)
{
int i, j, k;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
z[i][j]=0;
for (k=0; k<n; k++)
z[i][j]=z[i][j]+x[i][k]*y[k][j];
}
}
void add ( int **x, int**y, int**z)
{
int i, j;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
z[i][j]= x[i][k]+y[k][j];
}
ALGEBRA OF SETS
Алгебра множеств
Пусть A,B,C ‘элементы P(Z). Z – множество целых чисел.
P(Z) – множество всех подмножеств Z.