Преобразовать в треугольную матрицу
помогите преобразовать матрицу в верхнюю треугольную. Я заполняю циклом всю матрицу, и хочу потом элементы под главной диагональю приравнять к нулю, но не могу додумать как это сделать. Треугольник должен быть сверху слева.
int n;
cout << "Введите число n:" << endl;
cin >> n;
vector<vector<int>> vec;
cout << "исход:" << endl;
for (int i = 0; i < n; i++)
{
vector<int> save;
for (int j = 0; j < n+1; j++)
{
save.push_back(rand() % 10);
}
vec.push_back(save);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n+1; j++)
{
cout << vec[i][j] << "\t";
}
cout << endl;
}
cout << endl;
Ответы (2 шт):
Стоп-стоп. Преобразовать или создать?
Преобразовать - это что-то типа метода Гаусса или LU-разложения, это отдельный сложный вопрос.
А создать ее изначально такой - куда проще:
cin >> n;
vector<vector<int>> vec(n, vector<int>(n));
for (int i = 0; i < n; i++)
for (int j = 0; j < n-i; j++)
vec[i][j] = rand() % 10;
Это для треугольника "сверху слева", над побочной диагональю.
for (int i = 0; i < n; i++)
for (int j = i; j < n; j++)
vec[i][j] = rand() % 10;
Это - для треугольника "над главной диагональю".
Из-за того, что вы путаетесь в терминологии и не в состоянии внятно и непротиворечиво сформулировать задачу, приходится давать массу решений... :(
Кстати, заметьте - не нужны никакие push_back и временные векторы, даже не нужно ничего обнулять - если создать матрицу сразу:
vector<vector<int>> vec(n, vector<int>(n));
#include <vector>
#include <iostream>
using namespace std;
int main() {
int n;
cout << "Введите число n:" << endl;
cin >> n;
vector<vector<int>> vec;
cout << "исход:" << endl;
for (int i = 0; i < n; i++)
{
vector<int> save;
for (int j = 0; j < n+1; j++)
{
save.push_back(rand() % 10);
}
vec.push_back(save);
}
for (int i = 0; i < n; i++)
{
for (int j = n+1 - i; j < n+1; j++)
{
vec[i][j] = 0;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n+1; j++)
{
cout << vec[i][j] << "\t";
}
cout << endl;
}
cout << endl;
}