Da li sam ovo dobro odradila?
Code:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
int determinanta (int mat[10][10], int n, int br);
int rek (int mat[10][10], int n);
double Izracunaj(double niz[11], double n, double vr);
void polinomtal(double jednacine[12][12], double *p, int n);
void spektar (double *s, double p[12], int n);
void matrix (int mat[10][10], int n);
void main() {
int i,j,n,k,vrednost;
int mat[10][10];
double jednacine[12][12];
double p[11], s[11];
double koef;
n=1;
srand((unsigned)time(NULL));
//Generisanje velicine matrice!
while (n<3) n=int((double(rand())/RAND_MAX)*9) + 1;
//Nule na glavnoj dijagonali i u nizovima p[] i s[]!
for (i=0;i<n;i++) mat[i][i]=0;
for (i=0;i<11;i++) p[i]=0;
for (i=0;i<10;i++) s[i]=0;
//Generisanje matrice!
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (i>j)
mat[i][j]=mat[j][i]=int((double(rand())/RAND_MAX)*2);
//Ispis matrice!
for (i=0;i<n;i++) {
for (j=0;j<n;j++)
cout<<mat[i][j]<<" ";
cout<<endl;
}
//Generisanje sistema jednacina za dobijanje karakteristicnog polinoma!
for (i=0;i<12;i++)
for (j=0;j<12;j++) jednacine[i][j]=0;
vrednost=0;
for (k=0;k<=n;k++) {
koef=1;
for (i=0;i<=n;i++) { jednacine[k][i]=koef; koef=koef*vrednost; }
jednacine[k][11]=determinanta(mat,n,-vrednost);
vrednost++;
}
//Racunanje karakteristicnog polinoma!
polinomtal(jednacine,p,n);
//Racunanje resenja karakteristicnog polinoma!
spektar (s,p,n);
//Trazeni ispis!
matrix(mat,n);
cin>>i;
}
int determinanta (int mat[10][10], int n, int br){
int i;
for (i=0;i<n;i++) mat[i][i]=br;
return rek(mat,n);
}
int rek (int mat[10][10], int n){
int s=0, i;
if (n==3) {
s+=mat[0][0]*mat[1][1]*mat[2][2];
s+=mat[0][1]*mat[1][2]*mat[2][0];
s+=mat[0][2]*mat[1][0]*mat[2][1];
s-=mat[0][0]*mat[1][2]*mat[2][1];
s-=mat[0][1]*mat[1][0]*mat[2][2];
s-=mat[0][2]*mat[1][1]*mat[2][0];
return s;
}
else {
for (i=0;i<n;i++) {
int pom [10][10];
int k,m,a=0,b=0,znak;
for (k=1;k<n;k++)
for (m=0;m<n;m++) {
if (m==i) continue;
pom[a][b++]=mat[k][m];
if (b==n-1) { b=0; a++; }
}
if (i%2==0) znak=1; else znak=-1;
s+=mat[0][i]*znak*rek(pom,n-1);
}
}
return s;
}
double Izracunaj(double niz[11], double n, double vr){
double s=0, x=1;
for (int i=0;i<=n;i++) { s+=niz[i]*x; x*=vr;}
return s;
}
void polinomtal(double jednacine[12][12], double *p, int n) {
int i,j,k,m;
/*//Ispis sistema jednacina! Oblik : a0+x*a1+...=det(x)
for (i=0;i<=n;i++) {
for (j=0;j<=n;j++) cout<<jednacine[i][j]<<"\t";
cout<<" REZ: "<<jednacine[i][11]<<endl;
}*/
//Resavanje sistema!
p[0]=jednacine[0][11];
cout<<endl;
for (i=2;i<=n;i++) {
k=jednacine[i-1][i-1];
for (int s=i;s<=n;s++){
m=jednacine[s][i-1];
for (j=i-1;j<=n;j++) jednacine[s][j]=jednacine[s][j]*k-jednacine[i-1][j]*m;
jednacine[s][11]=jednacine[s][11]*k-jednacine[i-1][11]*m;
}
}
/*//Ispis svedenog sistema jednacina!
for (i=0;i<=n;i++) {
for (j=0;j<=n;j++) cout<<jednacine[i][j]<<"\t";
cout<<" REZ: "<<jednacine[i][11]<<endl;
}*/
//Popunjavanje p[] iz sistema!
for (k=n;k>0;k--) {
int s=0;
for (i=0;i<=n;i++) if (i!=k) s+=jednacine[k][i]*p[i]; //Ovo smem da radim jer je p[i]=0!
p[k]=(jednacine[k][11]-s)/jednacine[k][k];
}
//Ispis karakteristicnog polinoma!
cout<<"Karakteristican polinom: ";
for (i=0;i<=n;i++) cout<<p[i]<<" ";
}
void spektar (double *s, double p[12], int n) {
double min,max,res,res2,dres,dtek,tek;
int i,k;
//Racunanje nula karakteristicnog polinoma! R[-500;500]
res=Izracunaj(p,n+1,-11.0);
dtek=0.001;
k=i=0;
max=10.0;
for (tek=-10.0; tek < max ;tek=tek+dtek) {
res2=Izracunaj(p,n+1,tek);
if (res*res2<0) { s[i++]=(res+res2)/2; k++; }
res=res2;
}
//Ispis resenja karakteristicnog polinoma!
cout<<endl<<endl<<"Resnje karakteristicnog polinoma:"<<endl;
for (i=0;i<k;i++) cout<<s[i]<<" ";
}
void matrix (int mat[10][10], int n){
int i,j;
cout<<endl;
for (i=0;i<n;i++) {
for (j=0;j<n;j++)
if (i>j) cout<<mat[i][j]<<" ";
cout<<endl;
}
}
[Ovu poruku je menjao Mihajlo Cvetanović dana 30.03.2011. u 10:21 GMT+1]