#include "iostream"
template < typename Func1, typename Func2, typename Func3>
void matPassPrint( int s, Func1 func1, Func2 func2, Func3 func3) {
for ( int i = 0 ; i < s; ++ i) {
func1( i) ;
for ( int j = 0 ; j < s; ++ j)
func2( i, j) ;
func3( ) ;
} }
class Mat{
private :
int ** data;
unsigned int size;
public :
void print( ) {
matPassPrint( this- > size,
[ ] ( int i) { } ,
[ this ] ( int i, int j) { std:: cout << "A[" << i << "][" << j << "] = " << this- > data[ i] [ j] << " " ; } ,
[ ] ( ) { std:: cout << std:: endl ; } ) ;
}
Mat( ) {
this- > size = 3 ;
std:: cout << "Введите размер квадратной матрицы: " << this- > size;
// TODO std::cin >> this->size;
std:: cout << std:: endl << "Введите элементы матрицы: " << std:: endl ;
this- > data = new int * [ this- > size] ;
matPassPrint( this- > size,
[ this ] ( int i) { this- > data[ i] = new int [ this- > size] ; } ,
[ this ] ( int i, int j) { this- > data[ i] [ j] = std:: rand ( ) % 100 ; std:: cout << "A[" << i << "][" << j << "] = " << this- > data[ i] [ j] ; } , // TODO std::cin >> this->data[i][j];},
[ ] ( ) { std:: cout << std:: endl ; } ) ;
}
~Mat( ) {
for ( int i = 0 ; i < this- > size; ++ i)
delete [ ] this- > data[ i] ;
delete [ ] this- > data;
}
void replaceRow( int s1, int s2) {
int * temp = this- > data[ s1] ;
this- > data[ s1] = this- > data[ s2] ;
this- > data[ s2] = temp;
}
void transpose( ) {
int ** newMat = new int * [ this- > size] ;
matPassPrint( this- > size,
[ this , newMat] ( int i) { newMat[ i] = new int [ this- > size] ; } ,
[ this , newMat] ( int i, int j) { newMat[ i] [ j] = this- > data[ j] [ i] ; } ,
[ ] ( ) { } ) ;
for ( int i = 0 ; i < this- > size; ++ i) {
delete [ ] this- > data[ i] ;
this- > data[ i] = newMat[ i] ;
}
delete [ ] newMat;
}
} ;
int main( ) {
setlocale( LC_ALL, "" ) ;
Mat mat = Mat( ) ;
std:: cout << std:: endl << "Первоначальная матрица:" << std:: endl ;
mat.print ( ) ;
int s1 = 1 , s2 = 2 ;
std:: cout << std:: endl << "Введите строчки для перемены мест (нумерация строчек начинается с 0): " << s1 << ", " << s2 << std:: endl ;
// TODO std::cin >> s1;
// TODO std::cin >> s2;
mat.replaceRow ( s1, s2) ;
std:: cout << std:: endl << "Матрица после замены мест: " << std:: endl ;
mat.print ( ) ;
mat.transpose ( ) ;
std:: cout << std:: endl << "Матрица после транспонирования: " << std:: endl ;
mat.print ( ) ;
return 0 ;
}
I2luY2x1ZGUgImlvc3RyZWFtIgoKdGVtcGxhdGU8dHlwZW5hbWUgRnVuYzEsIHR5cGVuYW1lIEZ1bmMyLCB0eXBlbmFtZSBGdW5jMz4Kdm9pZCBtYXRQYXNzUHJpbnQoaW50IHMsIEZ1bmMxIGZ1bmMxLCBGdW5jMiBmdW5jMiwgRnVuYzMgZnVuYzMpewogICAgZm9yKGludCBpID0gMDsgaSA8IHM7ICsraSl7CiAgICAJZnVuYzEoaSk7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IHM7ICsraikKICAgICAgICAgICAgZnVuYzIoaSwgaik7CiAgICAgICAgZnVuYzMoKTsKfX0KIApjbGFzcyBNYXR7CnByaXZhdGU6CglpbnQqKiBkYXRhOwoJdW5zaWduZWQgaW50IHNpemU7CnB1YmxpYzoKCXZvaWQgcHJpbnQoKXsKCQltYXRQYXNzUHJpbnQodGhpcy0+c2l6ZSwKCQkJW10oaW50IGkpe30sCgkJCVt0aGlzXShpbnQgaSwgaW50IGope3N0ZDo6Y291dCA8PCAiQVsiIDw8IGkgPDwgIl1bIiA8PCBqIDw8ICJdID0gIiA8PCB0aGlzLT5kYXRhW2ldW2pdIDw8ICIgIjt9LAoJCQlbXSgpe3N0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7fSk7Cgl9CglNYXQoKXsKCQl0aGlzLT5zaXplID0gMzsgCgkJc3RkOjpjb3V0IDw8ICLQktCy0LXQtNC40YLQtSDRgNCw0LfQvNC10YAg0LrQstCw0LTRgNCw0YLQvdC+0Lkg0LzQsNGC0YDQuNGG0Ys6ICIgPDwgdGhpcy0+c2l6ZTsKLy8gVE9ETyBzdGQ6OmNpbiA+PiB0aGlzLT5zaXplOwoJCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGwgPDwgItCS0LLQtdC00LjRgtC1INGN0LvQtdC80LXQvdGC0Ysg0LzQsNGC0YDQuNGG0Ys6ICIgPDwgc3RkOjplbmRsOwoJCXRoaXMtPmRhdGEgPSBuZXcgaW50Klt0aGlzLT5zaXplXTsKCQltYXRQYXNzUHJpbnQodGhpcy0+c2l6ZSwKCQkJW3RoaXNdKGludCBpKXt0aGlzLT5kYXRhW2ldID0gbmV3IGludFt0aGlzLT5zaXplXTt9LAoJCQlbdGhpc10oaW50IGksIGludCBqKXt0aGlzLT5kYXRhW2ldW2pdID0gc3RkOjpyYW5kKCkgJSAxMDA7IHN0ZDo6Y291dCA8PCAiQVsiIDw8IGkgPDwgIl1bIiA8PCBqIDw8ICJdID0gIiA8PCB0aGlzLT5kYXRhW2ldW2pdO30sIC8vIFRPRE8gc3RkOjpjaW4gPj4gdGhpcy0+ZGF0YVtpXVtqXTt9LAoJCQlbXSgpe3N0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7fSk7Cgl9Cgl+TWF0KCl7CgkJZm9yKGludCBpID0gMDsgaSA8IHRoaXMtPnNpemU7ICsraSkKCQkJZGVsZXRlW10gdGhpcy0+ZGF0YVtpXTsKCQlkZWxldGVbXSB0aGlzLT5kYXRhOwoJfQoJdm9pZCByZXBsYWNlUm93KGludCBzMSwgaW50IHMyKXsKCQlpbnQqIHRlbXAgPSB0aGlzLT5kYXRhW3MxXTsKCQl0aGlzLT5kYXRhW3MxXSA9IHRoaXMtPmRhdGFbczJdOwoJCXRoaXMtPmRhdGFbczJdID0gdGVtcDsKCX0KCXZvaWQgdHJhbnNwb3NlKCl7CgkJaW50KiogbmV3TWF0ID0gbmV3IGludCpbdGhpcy0+c2l6ZV07CgkJbWF0UGFzc1ByaW50KHRoaXMtPnNpemUsCgkJCVt0aGlzLCBuZXdNYXRdKGludCBpKXtuZXdNYXRbaV0gPSBuZXcgaW50W3RoaXMtPnNpemVdO30sCgkJCVt0aGlzLCBuZXdNYXRdKGludCBpLCBpbnQgail7bmV3TWF0W2ldW2pdID0gdGhpcy0+ZGF0YVtqXVtpXTt9LAoJCQlbXSgpe30pOwoJCWZvcihpbnQgaSA9IDA7IGkgPCB0aGlzLT5zaXplOyArK2kpewoJCQlkZWxldGVbXSB0aGlzLT5kYXRhW2ldOwoJCQl0aGlzLT5kYXRhW2ldID0gbmV3TWF0W2ldOwoJCX0KCQlkZWxldGVbXSBuZXdNYXQ7Cgl9Cn07CiAKaW50IG1haW4oKXsKCXNldGxvY2FsZShMQ19BTEwsICIiKTsKCU1hdCBtYXQgPSBNYXQoKTsKCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGwgPDwgItCf0LXRgNCy0L7QvdCw0YfQsNC70YzQvdCw0Y8g0LzQsNGC0YDQuNGG0LA6IiA8PCBzdGQ6OmVuZGw7CgltYXQucHJpbnQoKTsKCWludCBzMSA9IDEsIHMyID0gMjsKCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGwgPDwgItCS0LLQtdC00LjRgtC1INGB0YLRgNC+0YfQutC4INC00LvRjyDQv9C10YDQtdC80LXQvdGLINC80LXRgdGCICjQvdGD0LzQtdGA0LDRhtC40Y8g0YHRgtGA0L7Rh9C10Log0L3QsNGH0LjQvdCw0LXRgtGB0Y8g0YEgMCk6ICIgPDwgczEgPDwgIiwgIiA8PCBzMiA8PCBzdGQ6OmVuZGw7Ci8vIFRPRE8Jc3RkOjpjaW4gPj4gczE7Ci8vIFRPRE8gc3RkOjpjaW4gPj4gczI7CgltYXQucmVwbGFjZVJvdyhzMSwgczIpOwoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbCA8PCAi0JzQsNGC0YDQuNGG0LAg0L/QvtGB0LvQtSDQt9Cw0LzQtdC90Ysg0LzQtdGB0YI6ICIgPDwgc3RkOjplbmRsOwoJbWF0LnByaW50KCk7CgltYXQudHJhbnNwb3NlKCk7CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsIDw8ICLQnNCw0YLRgNC40YbQsCDQv9C+0YHQu9C1INGC0YDQsNC90YHQv9C+0L3QuNGA0L7QstCw0L3QuNGPOiAiIDw8IHN0ZDo6ZW5kbDsKCW1hdC5wcmludCgpOwoJcmV0dXJuIDA7Cn0=