usuniecie kolumny i wiersza w tablicy dwuwymiarowej

0

chciałbym obliczyć minor macierzy mxn
Przykład
1 3 4 2
0 3 1 1
7 1 3 4
Wykreślmy z niej drugi wiersz oraz drugą i trzecią kolumnę. otrzymamy wówczas 2x2 minor:

1 - - 2
--------- = 1x4-2x7--10
7 - - 4

Na chwile obecną jedyne co potrafię to wczytac macierz do tablicy dwuwymiarowej ale mam problem z wykreslaniem odpowiednich wierszy i kolum prosze o pomoc

#include<iostream>

using namespace std;
int main()
{
    int ro, co ;
    cin>>ro>>co;
    double **array = new double* [ro];

    for(int i = 0; i < ro; i++)
    {
        array[i] = new double [co];
    }

    for(int i = 0; i < ro; i++)
    {
        for(int j = 0; j < co; j++)
        {
            cin>>array[i][j];
        }
    }


    for(int i = 0; i < ro; i++)
    {
        for(int j = 0; j < co; j++)
        {
            cout << array[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

1

Jeśli tworzysz tablice w ten sposób to nie możesz zmieniać ich rozmiaru. Poczytaj o kontenerach w c++. http://cpp0x.pl/kursy/Kurs-STL-C++/Kontener-tablicy-std-vector/119

1

Skrobnąłem na szybko z wykorzystaniem vectora 2d przykład wczytywania macierzy m x n, usuwania kolumny o danym indeksie, wiersza o danym indeksie oraz wyświetlanie samej macierzy.
Oczywiście można to przerobić na wskaźnikach bo teraz przekazywanie do funkcji jest przez wartość i operacje usuwania są robione na kopiach po czym kopia jest zwracana i przypisywana do vectora, choć myślę że tak jest bezpieczniej :)

#include <iostream>
#include <vector>

using namespace std;

vector<vector<int>> wczytaj_macierz();
void wyswietl_macierz(vector<vector<int>> macierz);
vector<vector<int>> usun_kolumne(vector<vector<int>> macierz, int kolumna);
vector<vector<int>> usun_wiersz(vector<vector<int>> macierz, int wiersz);

int main()
{
    vector<vector<int>> macierz;
    macierz = wczytaj_macierz();
    cout<<"Cała macierz:\n";
    wyswietl_macierz(macierz);
    macierz = usun_kolumne(macierz, 2);
    cout<<"Macierz po usunieciu kolumny:\n";
    wyswietl_macierz(macierz);
    macierz = usun_wiersz(macierz, 2);
    cout<<"Macierz po usunieciu wiersza:\n";
    wyswietl_macierz(macierz);
    return 0;
}

vector<vector<int>> wczytaj_macierz()
{
    int m, n;
    int tmp;
    cout<<"Wpisz rozmiar macierzy (mxn): ";
    cin>>m;
    cin>>n;
    vector<vector<int>> macierz(m, vector<int>(n));
    
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            cout<<"Podaj kolejny element macierzy: ";
            cin>>tmp;
            macierz[i][j] = tmp;
        }
    }
    return macierz;
}

void wyswietl_macierz(vector<vector<int>> macierz)
{
        for(int i=0;i<macierz.size();i++){
        for(int j=0;j<macierz[i].size();j++){
            cout<<macierz[i][j]<<" ";
        }
        cout<<endl;
    }
}

vector<vector<int>> usun_kolumne(vector<vector<int>> macierz, int kolumna)
{
    for (int i = 0; i < macierz.size(); ++i)
    {
        if (macierz[i].size() > kolumna)
            macierz[i].erase(macierz[i].begin() + kolumna);
    }
    return macierz;
}

vector<vector<int>> usun_wiersz(vector<vector<int>> macierz, int wiersz)
{
    if (macierz.size() > wiersz)
        macierz.erase(macierz.begin() + wiersz);
    return macierz;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1