#ifndef MATWEKOP_H
#define MATWEKOP_H


void gcw(long double **A, int m, int n); // robi rozklad LU macierzy A(m*m) n oznacza ilosc kolumn b
														//dla macierzy A msimy uwzglednic przy alokowaniu pamieci
                                          //dodatkowo jedna kolumne, przeznaczona na przestawienia
void rozwiaz(long double **A, long double *x, int m, int n); //wtawia pod x rozwiazanie ukladu A(m*m)
																				  //z n -tym wektorem dolaczonym
void odwroc(long double **A, long double **A_1, int m);	// wstawia pod A_1 macierz odwrotna do A

void mnozmat(long double **A,int am, int an, long double **B, int bm, int bn,
				 long double **C); // mnozy dwie macierzei wstawia wynik pod C
void matwek(long double **A, int am, int an, long double *W, int wm,
				long double *W2); //mnozy macierx razy wektor i wstawia wynik pod W2

long double ilskal(long double *W1, int w1m, long double *W2); // iloczyn skalarny
void transp(long double **A, long double **At, int am, int an); // wstawia pod At amcierz transponowana do A
void swapmat(long double **A, int am, int an, int wk, int wj); // zamienia w macierzy wiersz k z j
void swapwek(long double *W1, int am ,int wk, int wj); // zamienia w wektorze wiersz k z j
int absmax(long double **A, int m, int n, int wm, int kn); // zwraca pozycje maxymalej wartosci (abs) w kolumnie kn
																				// poczawszy od wiersza wm
void odejmij(long double **A, int am, int an, int wj, int wk, long double lb); //odejmuje os wielrsza wj
																										//wiersz wk pomnozony przez lb
void zerujmat(long double **A, int am, int an);
void zerujwek(long double *W, int wm);
void kopiujmat(long double **A, int am, int an, long double **B, int bm, int bn);

//bool testmat(long double **A, long double **A_1, int am); //testuje czy macierz A_1 jest macierza odwrotna do A
void drukmat(long double **A, int am, int an);
void drukwek(long double *W, int aw);



#endif