Преобразовать в треугольную матрицу

помогите преобразовать матрицу в верхнюю треугольную. Я заполняю циклом всю матрицу, и хочу потом элементы под главной диагональю приравнять к нулю, но не могу додумать как это сделать. Треугольник должен быть сверху слева.

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 шт):

Автор решения: Harry

Стоп-стоп. Преобразовать или создать?

Преобразовать - это что-то типа метода Гаусса или 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;
}
→ Ссылка