Сдвигается циклически вправо на 1 позицию, в противном случае.

 

//arb2015_mas_bool

#include<iostream>

#include<fstream>

#include<cmath>

using namespace std;

////////////////////////////////////

void create(ifstream &f,int** x, int n)

{

int i,j;

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

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

f>>x[i][j];

 

}

///////////////////////////

void show(ofstream &f,int** x, int n)

{

int i,j;

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

{

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

f<<x[i][j]<<' ';

f<<endl;

}

 

}

///////////////////////////

int sum_cifr(int x)

{

int s=0;

while(x>0)

{

s=s+x%10;

x=x/10;

}

return s;

 

}

/////////////////////////////

int sum_mult(int** x, int n)

{

int i,j;

int s=0;

int p;

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

{

p=1;

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

p=p*x[i][j];

s=s+p;

}

return s;

}

/////////////////////////////

bool prime(int x)

{

int i;

if (x<=1) return false;

if(x==2)return true;

bool p=true;

for(i=2;i<=sqrt(x) && p;i++)

if (x%i==0)p=false;

return p;

}

/////////////////////////////

bool f1(int**x, int n)

{

return prime(sum_mult(x,n));

}

////////////////////////////

bool f2(int*x, int n)

{

int j;

bool p=false;

for(j=0;j<n && !p;j++)

if (prime(sum_cifr(x[j]))) p=true;

return p;

}

////////////////////////////

void shift_left(int* x,int n)

{

int r,i;

r=x[0];

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

x[i]=x[i+1];

x[n-1]=r;

}

////////////////////////////

void shift_right(int* x,int n)

{

int r,i;

r=x[n-1];

for(i=n-1;i>0;i--)

x[i]=x[i-1];

x[0]=r;

}

////////////////////////////

void op1(int** x,int n)

{

int i,j;

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

for(j=i+1;j<n;j++)

{

int r=x[i][j];

x[i][j]=x[j][i];

x[j][i]=r;

 

}

}

///////////////////////////////

void op2(int** x,int n)

{

int i;

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

if (f2(x[i],n)) shift_left(x[i],n);

else shift_right(x[i],n);

}

////////////////////////////////

void main()

{

int n,i;

int** a;

ifstream in("arb.txt");

ofstream out("out.txt");

if(!in)

{

cout<<"can't open file!"<<endl;

exit(-1);

}

cout<<"enter size of array n=";

cin>>n;

a=new int*[n];

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

a[i]=new int[n];

 

create(in,a,n);

out<<"array a:"<<endl;

show(out,a,n);

 

 

if(f1(a,n))op1(a,n);else op2(a,n);

out<<" new array a:"<<endl;

show(out,a,n);

in.close();

out.close();

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

delete [] a[i];

delete []a;

 

}

 

Файл arb.txt

1 22 33

4 5 6

7 8 9

 

Файл out.txt

array a:

1 22 33

4 5 6

7 8 9

new array a:

33 1 22

5 6 4

8 9 7

 

 

1.8 Преобразование матрицы.

По заданной матрице А (размерности n´n) вычислить новую матрицу X:

где Е1 и Е2 - заданные преобразования матрицы А. Входными данными программы являются: число n и элементы матрицы А; выходными - элементы матрицы X.

В программе предусмотреть:

- процедуру вычисления матрицы Е1(А) с формальными параметрами: размерность матрицы m, массивы А и В (исходная матрица и вычисляемая);

- процедуру-функцию булевского типа вычисления значения предиката с формальными параметрами: размерность матрицы и массив ее элементов.

Исходные данные

I. Две различные операции Е1 и Е2 над вещественными матрицами из следующего списка:

б) умножение на 3 всех элементов тех и только тех строк, в которых диагональный элемент больше 1;

е) преобразование в симметричную с сохранением элементов, находящихся справа от главной диагонали;

III. Предикат P (A) на вещественных матрицах:

а) все определители второго порядка положительны (т.е.

;

IV. Числовые данные. Размерность матрицы n = 5, 6, 7 или 8, а элементы матрицы выбираются произвольно.

 

//arb2014_semestr_task_array

#include<iostream>

#include<fstream>

#include<iomanip>

using namespace std;

 

void create(ifstream &f , int** x, int n )

{

int i,j;

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

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

f>>x[i][j];

 

}

////////////////////////////////

void show(ofstream &f , int** x, int n )

{

int i,j;

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

{

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

f<<setw(5)<<x[i][j];

f<<endl;

}

f<<endl;

}

////////////////////////////////

void E1(int** x, int** y, int n)

{

int i,j;

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

{

if (x[i][i]>1)

for(j=0;j<n;j++) y[i][j]=x[i][j]*3;

else

for(j=0;j<n;j++) y[i][j]=x[i][j];

}

}

//////////////////////////////////

void E2(int** x, int** y, int n)

{

int i,j;

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

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

if (i>=j)

{

y[i][j]=x[i][j];

y[j][i]=y[i][j];

}

}

///////////////////////////////

bool AA(int** x, int n)

{

bool p=true;

int i,j;

for(i=0;i<n-1 && p;i++)

for(j=0;j<n-1 && p;j++)

if ( x[i][j]*x[i+1][j+1] - x[i+1][j]*x[i][j+1]<=0) p=false;

return p;

}

//////////////////////////////////

void main()

{

ifstream in("arb.txt");

ofstream out("out.txt");

int** a,**b;

int n,i;

cout<<"enter size of array n=";

cin>>n;

a=new int* [n];

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];

create(in ,a,n);

in.close();

out<<"array a:"<<endl;

show(out,a,n);

 

if( AA(a,n)) E1(a,b,n); else E2(a,b,n);

out<<"array b:"<<endl;

show(out,b,n);

out.close();

}

 

Файл “arb.txt”

3 2 1

3 3 2

2 3 3

 

Файл “out.txt”

array a:

3 2 1

3 3 2

2 3 3

 

array b:

9 6 3

9 9 6

6 9 9

 

 

 

Лекция

Новые функции

 

int** create(ifstream &f , int n )

int** add(int** x, int** y, int n)

int** subtr (int** x, int**y, int n)

int** mult (int** x, int**y, int n)