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.