#include<iostream>

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<math.h>

using namespace std;

 

int main()

{

int n,i,j,k;

float **tab,*w,*w1,l,l1,eps,s,r,max;

//deklaracja tablic

cout<<"Podaj wymiar macierzy kwadratowej >>> "; cin>>n;

tab=(float**)malloc(n*sizeof(float));

for(i=0;i<n;i++)

{

tab[i]=(float*)malloc(n*sizeof(float));               

}

w=(float*)malloc(n*sizeof(float));

w1=(float*)malloc(n*sizeof(float));

 

//zczytanie macierzy i dokładności

cout<<"Dokladnosc obliczen >>> "; cin>>eps;

cout<<endl<<"Wprowadz macierz : "<<endl;

for(i=0;i<n;i++)

{

cout<<"wiersz "<<i+1<<" : "<<endl;

for(j=0;j<n;j++)

{

cin>>tab[i][j];             

}               

}

cout<<endl<<"Wprowadz wektor poczatkowy : "<<endl;

for(i=0;i<n;i++)

{

cin>>w[i];               

}

//wypisanie zczytanych macierzy

cout<<endl<<"Macierz : "<<endl;

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

{

cout<<tab[i][j]<<" ";         

} 

cout<<endl;            

}   

 

cout<<endl<<"Wektor poczatkowy : "<<endl;

for(i=0;i<n;i++)

{

cout<<w[i]<<endl;               

}

 

//obliczenie wartości własnej i wektora własnego

k=0;

l1=0;

do

{

k++;

for(i=0;i<n;i++)

{

s=0;

for(j=0;j<n;j++)

{

s=s+tab[i][j]*w[j];             

}    

w1[i]=s;          

}

l=0;

for(i=0;i<n;i++)

{

l=l+w1[i]/w[i];               

}

l=l/3.0;

r=fabs(l-l1);

l1=l;

for(i=0;i<n;i++)

{

w[i]=w1[i];               

}

            

}while(r>=eps);

 

//wyświetlenie wyników

cout<<"Wartosc wlasna : "<<l<<"    uzyskana po "<<k<<" krokach "<<endl<<endl;

cout<<"Wektor wlasny odpowiadajacy wartosci wlasnej : "<<endl<<endl;

max=w[0];

for(i=0;i<n;i++)

{

cout<<w[i]<<endl;  

if(w[i]>max) max=w[i];            

}

 

cout<<endl<<"Wektor wlasny znormalizowany : "<<endl<<endl;

for(i=0;i<n;i++)

{

cout<<w[i]/max<<endl;               

}

 

getch();

}