Сдвигается циклически вправо на 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)