Прокрутка на бумаге каждого теста алгоритма (процедуры)




 

 

I. Выраженный:

 
 


Матрица с К=1 не изменяется.

 

II. Невыраженный:

 

Пример работы с матрицей В:

 

if (K%2==0)

{

k=K/2;

}

else

{

k= K%2;

}

for (int i=0; i<k; i++)

{

for (int j=0; j<k; j++)

{

temp = A[i][j];

A[i][j]= A[k+1-i][j];

A[k+1-i][j] = temp;

}

}

 

1 вариант: К=1

                             
                       
                       

 
 
 
/>/>

 


1. temp = A[0][0]; A[0][0]= A[1+1-0][0]; A[1+1-0][0] = temp;   temp = 1; A[0][0]= 7; A[2][0] = 1;
2. temp = A[0][1]; A[0][1]= A[1+1-0][1]; A[1+1-0][1] = temp;   temp = 2; A[0][1]= 8; A[2][1] = 2;
3. temp = A[0][2]; A[0][2]= A[1+1-0][2]; A[1+1-0][2] = temp;   temp = 3; A[0][2]= 9; A[2][2] = 3;

 

2 вариант: К=2

 

                                               
                                       
                                       
                                       

 
 
 
 

 


1. temp = A[0][0]; A[0][0]= A[2+1-0][0]; A[2+1-0][0] = temp;   temp = 1; A[0][0]= 13; A[3][0] = 1;
2. temp = A[0][1]; A[0][1]= A[2+1-0][1]; A[2+1-0][1] = temp;   temp = 2; A[0][1]= 14; A[3][1] = 2;
3. temp = A[0][2]; A[0][2]= A[2+1-0][2]; A[2+1-0][2] = temp;   temp = 3; A[0][2]= 15; A[3][2] = 3;
4. temp = A[0][3]; A[0][3]= A[2+1-0][3]; A[2+1-0][3] = temp;   temp = 4; A[0][3]= 16; A[3][3] = 4;

 

                                               
                                       
                                       
                                       

 
 
 
 

 

 


5. temp = A[1][0]; A[1][0]= A[2+1-1][0]; A[2+1-1][0] = temp;   temp = 5; A[1][0]= 9; A[2][0] = 5;
6. temp = A[1][1]; A[1][1]= A[2+1-1][1]; A[2+1-1][1] = temp;   temp = 6; A[1][1]= 10; A[2][1] = 6;
7. temp = A[1][2]; A[1][2]= A[2+1-1][2]; A[2+1-1][2] = temp;   temp = 7; A[1][2]=11; A[2][2] = 7;
8. temp = A[1][3]; A[1][3]= A[2+1-1][3]; A[2+1-1][3] = temp;   temp = 8; A[1][3]= 12; A[2][3] = 8;

 

Пример работы с матрицей А:

int i, j, temp;

for(i=pos1,n=sub.pos1;i<pos1+k;i++,n++)

{

for(j=pos2,z=sub.pos2;j<pos2+l;j++,z++)

{

temp = m[i][j];

m[i][j] = sub.m[n][z];

sub.m[n][z] = temp;

}

}

 

1 вариант: K=2

 

                 
               
               
               

 

 

temp = m[i][j]; m[i][j] = sub.m[n][z]; sub.m[n][z] = temp; temp = m[0][1]; m[0][1] = sub.m[1][0]; sub.m[1][0] = temp;

 

2 вариант: K=3

 

                                                                             
                                                                       
                                                                       
                                                                       
                                                                       
                                                                       
                                                                       
                                                                       
                                                                       

 
 
 
/>

 

 


1. temp = m[i][j]; m[i][j] = sub.m[n][z]; sub.m[n][z] = temp;   temp = m[0][1]; m[0][1] = sub.m[1][0]; sub.m[1][0] = temp;
2. temp = m[i][j]; m[i][j] = sub.m[n][z]; sub.m[n][z] = temp;   temp = m[0][2]; m[0][2] = sub.m[2][0]; sub.m[2][0] = temp;
3. temp = m[i][j]; m[i][j] = sub.m[n][z]; sub.m[n][z] = temp;   temp = m[1][2]; m[1][2] = sub.m[2][1]; sub.m[2][1] = temp;

Разработанная программа для решения данного задания

matrix.h

#include<string>

 

#ifndef MATRIX_H

#defineMATRIX_H

 

classSubmatrix;

 

classMatrix

{

public:

Matrix(int _k, int _l);//конструктор с параметрами

~Matrix();//деструктор

Submatrix **sub;//специально занесенный указатель на указатель класса подматриц в Public.

void enterData(std::string path);//ввод данных из файла

void print();//печать матрицы

int maxiA();//мах элемент в матрице А

int getMaxA(){return max1;};//возвращение элемента

private:

void initialize();//инициализор подматриц.

private:

int **a,k,l,max1;//а - подматрица, k,l - размер подматриц

};

 

classSubmatrix

{

public:

Submatrix():m(0),pos1(0),pos2(0),cotan(false){}//конструктор по умолчанию.

void initialize(int _pos1, int _pos2, int _k, int _l, int **matrix);//иницализируем подматрицу

void rotate();//переворот относительно горизонтальной оси

int setMAX(int max1);//изменение/присваивание значения другой переменной

void operator=(Submatrix&sub);//перестановка подматриц местами

int cotanMax();//проверка есть ли мах элемент в подматрице

int getMaxB(){return maxB;}

private:

int **m,pos1,pos2,k,l,maxB;//m-матрица, pos1/pos2-координаты подматрицы, k,l - размер

bool cotan;//false || true

};

 

#endif

 

matrix.cpp

#include"matrix.h"

#include<iostream>

#include<fstream>

#include<string>

#include<iomanip>

 

Matrix::Matrix(int_k, int_l):k(_k),l(_l)//конструктор матрицы

{

a = newint*[k*k];

for(int i=0;i<k*k;i++)

a[i] = newint[l*l];

initialize();

}

 

Matrix::~Matrix()//диструктор

{

 

for(int i=0;i<k;i++)

delete[] sub[i];

delete[] sub;

for(int i=0;i<k*k;i++)

delete[] a[i];

delete[] a;

}

 

intMatrix::maxiA()//максимальный элемент в матрице А

{

max1=a[0][0];

for(int i=0;i<k*k;i++)

{

for(int j=0;j<l*l;j++)

{

if(max1<a[i][j])

{

max1=a[i][j];

}

}

}

 

return max1;

 

}

 

intSubmatrix::setMAX(intmax1)//меняем значение махВ

{

int maxB=max1;

return maxB;

}

 

 

voidMatrix::initialize()//инициализатор подматриц

{

sub = newSubmatrix*[k];

for(int i=0;i<k;i++)

sub[i] = newSubmatrix[l];

for(int i=0,n=0;i<k*k;i+=k,n++)

for(int j=0,m=0;j<l*l;j+=l,m++)

sub[n][m].initialize(i,j,k,l,a);

}

 

voidMatrix::enterData(std::stringpath)//считываем данные с файла

{

std::ifstream file(path);

for(int i=0;i<k*k;i++)

for(int j=0;j<l*l;j++)

file >> a[i][j];

file.close();

}

 

voidMatrix::print()//печать матриц на экран

{

for(int i=0;i<k*k;i++)

{

if(!(i%k))

std::cout << std::endl;

for(int j=0;j<l*l;j++)

{

if(!(j%l))

std::cout <<" ";

std::cout << std::setw(2) << a[i][j];

}

std::cout << std::endl;

}

}

 

voidSubmatrix::initialize(int_pos1,int_pos2,int_k, int_l, int **matrix)//иницализая подматрицы

{

m = matrix;

pos1 = _pos1;

pos2 = _pos2;

k = _k;

l = _l;

}

intSubmatrix::cotanMax()//проверка есть ли мах элемент в подматрице

{

for(int i=pos1;i<pos1*k;i++)

{

for(int j=pos2;j<pos2*l;j++)

{

if(m[pos1][pos2]==(maxB))

{

cotan=true;

}

}

}

return cotan;

}

voidSubmatrix::rotate()//переворот подматрицы относительно строк

{

for(int i=pos1,c=0;i<pos1+k/2;i++,c++)

for(int j=pos2;j<pos2+l;j++)

{

int temp = m[i][j];

m[i][j]=m[pos1+k-c-1][j];

m[pos1+k-c-1][j]=temp;

}

}

 

voidSubmatrix::operator=(Submatrix&sub)//перестановка подматриц местами

{

int pos1,pos2,n,z;

for(int i=pos1,n=sub.pos1;i<pos1+k;i++,n++)

for(int j=pos2,z=sub.pos2;j<pos2+l;j++,z++)

{

int temp = m[i][j];

m[i][j] = sub.m[n][z];

sub.m[n][z] = temp;

}

}

 

main.cpp

#include<iostream>

#include"matrix.h"

#definek 3

#definel 3

 

usingnamespace std;

 

int main()

{

int maxA,maxB,max1,pos1=0,pos2=0;

Matrix a(k,l);

Submatrix sub;

setlocale(0,"Rus");

a.enterData("C:\\test.txt");

a.print();

cout <<"\n------------------------------------------------------------------";

std::cout<<"\nМаксимальный элемент: ";

cout << a.maxiA();

sub.setMAX(max1);

maxB=a.maxiA();

cout <<"\n------------------------------------------------------------------\n";

std::cout<<"\nРазворот вокруг строк где есть мах элемент"<<endl;

 

for(pos1=0;pos1<k;pos1++)

{

for(pos2=0;pos2<l;pos2++)

{

if(a.sub[pos1][pos2].cotanMax()==true)//определение мах элемента в подматрице

{

a.sub[pos1][pos2].rotate();//переворот если есть мах эелемент

}

}

}

a.print();

cout <<"\n------------------------------------------------------------------\n";

std::cout<<"\nПеремещение подматричек"<<endl;

sub.operator=(sub);//перемещение подматриц

 

a.print();

return 0;

}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: