#include <iostream.h>
#include <math.h>
const int n = 4;
void QR_decomposition(double A[n][n], double Q[n][n], double R[n][n])
{
int i, j, k;
for (j=0; j < n; j++)
for (i=0; i < n; i++) R[i][j] = 0.0;
for (j=0; j < n; j++) {
for (i=0; i < j; i++)
for (k=0; k < n; k++) R[i][j] = R[i][j] + A[k][j]*Q[k][i];
for (k=0; k < n; k++) {
Q[k][j] = A[k][j];
for (i=0; i < j; i++) Q[k][j] = Q[k][j] - R[i][j]*Q[k][i];
}
for (k=0; k < n; k++) R[j][j] = R[j][j] + Q[k][j]*Q[k][j];
R[j][j] = sqrt(R[j][j]);
for (k=0; k < n; k++) Q[k][j] = Q[k][j]/R[j][j];
}
}
int main()
{
double A[n][n] = {{1,3,5,2},{-2,-1,4,5},{8,0,3,9},{5,1,8,0}};
double Q[n][n], R[n][n];
int i, j;
QR_decomposition(A, Q, R);
cout << " *** Macierz Q *** \n";
for (i=0; i < n; i++) {
for (j=0; j < n; j++) cout << Q[i][j] << "\t";
cout << "\n";
}
cout << "\n *** Macierz R *** \n";
for (i=0; i < n; i++) {
for (j=0; j < n; j++) cout << R[i][j] << "\t";
cout << "\n";
}
system("pause");
}