/
igidgvwv
/
replace_matrix_diagonal
Обзор
Документация
Войти
/
igidgvwv
/
replace_matrix_diagonal
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
replace_matrix_diagonal.cpp
127 строк
5 KB
igidgvwv
upload files
01 сен 2025, 13:35
01 сен 2025, 13:35
5a9b81e
Код
Авторство
О чём код?
// Функция замены диагоналей в матрице. Остальные элементы матрицы без изменения. // Матрица квадратная. // Размер матрицы не имеет значения. // Тип элементов матрицы не имеет значения. #include <iostream> #include <vector> #include <math.h> using namespace std; //------------- функция печати ----------------------- template <typename T> void matrix_print(vector <vector<T>> &ar) // Внимание! Для пользовательских типов- { // вывод надо переписать. for(auto it1=begin(ar); it1!=end(ar); it1++) { for(auto it2=begin(*it1); it2!=end(*it1); it2++) { cout << *it2 << ' '; } cout << '\n'; } } //------------- ф-я матрица квадратная ? -------------- template <typename T> bool is_square_matrix(vector <vector<T>> &ar) { int x=0,y=0; for(auto it1=begin(ar); it1!=end(ar); it1++) { y=0; for(auto it2=begin(*it1); it2!=end(*it1); it2++) { y++; } x++; } if(x==y) return true; else return false; } //------------ф-я замены диагоналей в матрице------------- // возвращ.зн.:1-штатное завершение, 0-аварийное завершение template <typename T> int replace_diag(vector <vector<T>> &ar) { if( ar.size()!=0) // проверка: на пустую матрицу { if( ! is_square_matrix(ar)) // проверка: матрица не квадратная? { cout<<"\nМатрица не является квадратной"<<endl ; return(0); } int Ms=abs((int)(ar.size())-1); // размер матрицы -1. См формулу ниже. T imv=0; // промежуточная переменная int i=0,j=0; // целочисл. индексы-парал.аналоги итераторов for(auto it1=begin(ar); it1!=end(ar); it1++) { j=0; for(auto it2=begin(*it1); it2!=end(*it1); it2++) { // индекс j элемента второй диагнонали вычисл:( jвт.диаг.=jпер.диаг. - |размер матр.- 1|); модуль! if(i==j){ // это элемент диаггонали? imv=ar[i][abs(j-Ms)]; // сохранили ar[i][abs(j-Ms)]=*it2; // меняем местами эл-ты диагонали *it2= imv; // *it2(эл.первой диаг)это ar[i][j], где i=j imv=0; break; } imv=0; j++; } i++; } return (1); } else { cout<<"\nПустая матрица"<<endl ; return(0); } } int main(int argc, char *argv[]) { vector <vector<int>> My_array = {{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}} ; //массив int 5х5 matrix_print(My_array); int l=My_array.size(); cout <<"Размер матрицы ="<<l <<endl; replace_diag(My_array); matrix_print(My_array); cout << "-------------"<<endl; vector<vector<char>> My_array_ch = {{'a','b','c'},{'a','b','c'},{'a','b','c'}}; //масив char 3х3 cout<< '\n'; matrix_print(My_array_ch); l=My_array_ch.size(); cout <<"Размер матрицы ="<<l <<endl; replace_diag(My_array_ch); matrix_print(My_array_ch); cout << "-------------"<<endl; vector <vector<int>> My_array3; // пустой массив cout <<"Размер матрицы ="<< My_array3.size()<<endl; replace_diag(My_array3); matrix_print(My_array3); cout << "-------------"<<endl; vector <vector<int>> My_array4={{},{},{}}; // не заполненый массив cout <<"Размер матрицы ="<<My_array4.size() <<endl; replace_diag(My_array4); matrix_print(My_array4); cout << "-------------"<<endl; vector <vector<int>> My_array5={{1,2},{1,2},{1,2}}; // не квадратный массив 3х2 cout <<"Размер матрицы ="<<My_array5.size() <<endl; replace_diag(My_array5); matrix_print(My_array5); cout << "-------------"<<endl; int k; cout <<'\n'<< "Enter number to exit : "; cin >> k; return 0; }