• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dopelnienie algebraiczne elementu macierzy

Object Storage Arubacloud
0 głosów
1,018 wizyt
pytanie zadane 5 stycznia 2016 w C i C++ przez dreez Początkujący (320 p.)
Mając funkcje wyznaniczk(int m, float B[100][100]), która zwraca wartość wyznacznika macierzy B stopnia m, muszę napisać funkcję o nazwie DopelnienieAlgebraiczne, której parametrami będą: liczby naturalne i,j,n oraz tablica A[100][100], która jako wartość zwróci dopełnienie algebraiczne A[i][j] w macierzy A stopnia n. (Zakładamy, że wiersze i kolumny numerujemy od 0).

Ogólnie mam problem z zapisem, jak powiedziec programowi, żeby skreślił i-ty wiersz oraz j-tą kolumnę ?

1 odpowiedź

+1 głos
odpowiedź 5 stycznia 2016 przez nouveu Bywalec (2,560 p.)
wybrane 7 stycznia 2016 przez dreez
 
Najlepsza

Edit: poprzednie rozwiązanie jak i późniejsze komentarze były nieprzemyślane. Rozrysowałem sobie wszystko i napisałem program który działa. Poniżej wklejam tą nieszczęsną pętle:

int r=0, c=0;
for(int row=0; row<n-1; row++) 
{
	if(row >= k) r=1; // k - wiersz do usuniecia
	for(int col=0; col<n-1; col++)
	{
		if(col >= h) c=1; // h - kolumna do usuniecia
		B[row][col]=A[row+r][col+c];
	}
	r=0;
	c=0;
}
komentarz 5 stycznia 2016 przez dreez Początkujący (320 p.)
edycja 5 stycznia 2016 przez dreez

Jeszcze zastanawia mnie jedno, może Ty będziesz wiedział, nie pamiętam dokładnie z algebry czy stopień macierzy będzie wskazywał jej wymiar.
Wydaje mi się, że stopień==rząd macierzy, czyli wymiar najwiekszego niezerowego minora macierzy.

Czy dla macierzy A[100][100], n =100 ? 

Wtedy końcowa pętla (uniwersalna wyglądałaby chyba tak  ?:

int DopelnienieAlgebraiczne(usigned k,unsigned h,unsigned n,*A[100][100])
{
  int r=0;
  int c=0;
    for(int row=0; row<n; row++) 
    {
        if(row==k) r=1; 
        for(int col=0; col<n; col++)
        {
            if(col==h) c=1;
            B[row][col]=A[row+r][col+c];
        
         }
         
    }
return wyznacznik(n-1,B[i-1][j-1]) *pow(-1,k+h);

}

 

Czy tak byłoby ok ? Czy nie ?:)

 

Napisałem program (bez wskaźnika tak jak było proszone w zadaniu, ale to nie istotne)

#include <iostream>

using namespace std;
void DopelnienieAlgebraiczne(unsigned int k,unsigned int h, int n,int A[100][100])
{
  int r=0;
  int c=0;
  int B[99][99];
  cout<<endl<<"----------"<<endl;
    for(int row=0; row<n; row++)
    {
        if(row==h) r=1;
        for(int col=0; col<n; col++)
        {
            if(col==h) c=1;
            B[row][col]=A[row+r][col+c];

         }

    }
    for(int i=0;i<n-1;i++)
    {
        cout<<endl;
        for(int j=0;j<n-1;j++)
        {
            cout<<B[i][j]<<" ";
        }
    }

}
int main()
{
    int n;
    cout<<"rozmiar macierzy :"<<endl;
    cin>>n;
    int A[100][100];
    cout<<"Podaj po kolei wartosci macierzy: "<<endl;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cin>>A[i][j];
    }
    cout<<"Wypisuje tablice :"<<endl;
    for (int i=0;i<n;i++)
    {
        cout<<endl;
        for(int j=0;j<n;j++)
        {
            cout<<A[i][j]<<" ";

        }
    }
    DopelnienieAlgebraiczne(1,2,n,A);
    return 0;
}

Program ten wypisuje macierz A, a później macierz ze skreślonymi wierszem oraz kolumną o który go proszę tutaj : DopelnienieAlgebraiczne(1,2,n,A);

Czyli chcę, aby program wykreślił pierwszy wiersz oraz drugą kolumnę..

Wprowadzam przykładowe dane: 1,2,3,4

Program zwraca :

1 2

3 4

------

1

A powinien był zwrócić 3..

Gdzie jest błąd?

komentarz 5 stycznia 2016 przez nouveu Bywalec (2,560 p.)
Z grubsza tak, z grubsza bo w 1 linijce masz 'usigned' zamiast 'unsigned' a w return masz zmienne i oraz j które nie są używane w funkcji :)

Algebrę miałem dawno i jeśli chodzi o definicję to nie pamiętam ich w ogóle.
komentarz 5 stycznia 2016 przez dreez Początkujący (320 p.)
edycja 5 stycznia 2016 przez dreez

Może nie zauważyłeś, bo edytowałem komentarz, w trakcie pojawiła się Twoja odpowiedź.

Mógłbyś spojrzeć co jest nie tak w kodzie ?

Wyżej, zapomniałem, że powinienem poprosić o DopelnienieAlgebraiczne(0,1,n,A); (bo to przecież tablica :) )

Teraz zadziała dla macierzy 2x2, ale z macierza 3x3 ma problem.. Dla przykładowych liczb : 1,2,3,4,5,6,7,8,9 zwraca :

1 2 3

4 5 6

7 8 9

-----

4 6

8 9

komentarz 5 stycznia 2016 przez nouveu Bywalec (2,560 p.)
edycja 6 stycznia 2016 przez nouveu
Jutro popatrzę i jak coś to edytuje komentarz.

@down, edytowałem pierwszy komentarz, możesz porównać czy masz podobnie. Proponuje sprawdzić kontrolnie czy wycina poprawnie dla indeksów:
[0, 0], [1, 3], [4, 4], [3, 3]  // dane dla macierzy o rozmiarze 5x5
komentarz 5 stycznia 2016 przez dreez Początkujący (320 p.)
Program naprawiłem, (chyba) działa już poprawnie

Podobne pytania

0 głosów
0 odpowiedzi 94 wizyt
pytanie zadane 7 grudnia 2023 w C# przez saii Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 167 wizyt
pytanie zadane 27 maja 2023 w C i C++ przez natalia2002. Początkujący (400 p.)
0 głosów
0 odpowiedzi 182 wizyt

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...