Література
Боэм Б.У. Инженерное проектирование программного обеспечения.-
М.: Радуга, 1989г. – 950с.
Боэм Б.У. Инженерное проектирование программного обеспечения.-
М.: Конкорд, 1993г. – 950с.
Буч Г. Обектно-ориентированное проектирование.-
М.:Конкорд, 1992. 519 с.
К. Паппас, У. Мюррей. Visual C++. –
Минск: Попурри, 1998г. – 780с.
Страуструп Б. Язык программирования С++. В 2-х кн. Часть первая.
К.:Диасофт, 1993.- 264 с. Часть вторая.- К.:Диасофт, 1993.- 296 с.
Г. Шилдт. С – для профессиональніх программистов. –
М.: Радуга, 1989г. – 950с.
Единая система программной документации.-
М.:Изд-во стандартов, 1990. - 128с.
Додаток. Вихідний код програми
#include <stdio.h>
#include <math.h>
#include <iostream.h>
#include <conio.h>
float *a, *b, *x, *y, **sums;
int N, K;
char filename[100];
FILE* InFile=NULL;
void count_num_lines(){
int sparco=0;
do{
sparco = 0;
while(fgetc(InFile)!='\n' && !feof(InFile)) sparco=1;
if(sparco) N++;
}while(!feof(InFile));
}
void freematrix(){
int i;
for(i=0; i<K+1; i++){
delete [] sums[i];
}
delete [] a;
delete [] b;
delete [] x;
delete [] y;
delete [] sums;
}
void allocmatrix(){
int i,j,k;
a = new float[K+1];
b = new float[K+1];
x = new float[N];
y = new float[N];
sums = new float*[K+1];
if(x==NULL || y==NULL || a==NULL || sums==NULL){
cout<<"Ne dostatochno pamyati dlya rasmesheniya: N="<<N<<" , K="<<K<<endl;
return;
}
for(i=0; i<K+1; i++){
sums[i] = new float[K+1];
if(sums[i]==NULL){
cout<<"Ne dostatocno pamyati dlya razmesheniya "<<K+1<<" yravnenii"<<endl;
return;
}
}
for(i=0; i<K+1; i++){
a[i]=0;
b[i]=0;
for(j=0; j<K+1; j++){
sums[i][j] = 0;
}
}
for(k=0; k<N; k++){
x[k]=0;
y[k]=0;
}
}
void readmatrix(){
int i=0,j=0, k=0;
for(k=0; k<N; k++){
fscanf(InFile, "%f", &x[k]);
fscanf(InFile, "%f", &y[k]);
}
for(i=0; i<K+1; i++){
for(j=0; j<K+1; j++){
sums[i][j] = 0;
for(k=0; k<N; k++){
sums[i][j] += pow(x[k], i+j);
}
}
}
for(i=0; i<K+1; i++){
for(k=0; k<N; k++){
b[i] += pow(x[k], i) * y[k];
}
}
}
void printresult(){
int i=0;
printf("\n");
for(i=0; i<K+1; i++){
printf("a[%d] = %f\n", i, a[i]);
}
}
void diagonal(){
int i, j, k;
float temp=0;
for(i=0; i<K+1; i++){
if(sums[i][i]==0){
for(j=0; j<K+1; j++){
if(j==i) continue;
if(sums[j][i] !=0 && sums[i][j]!=0){
for(k=0; k<K+1; k++){
temp = sums[j][k];
sums[j][k] = sums[i][k];
sums[i][k] = temp;
}
temp = b[j];
b[j] = b[i];
b[i] = temp;
break;
}
}
}
}
}
int main(){
int i=0,j=0, k=0;
do{
cout<<"Vvedite pyt k failu s dannimi(Primer C:\\sparco.txt):"<<endl;
cin>>filename;
InFile = fopen(filename, "rt");
}while(InFile==NULL);
count_num_lines();
cout<<"Kolichestvo tochek(strok) v faile: N="<<N<<endl;
do{
cout<<"Vvedite kolichestvo aproksimacii polinoma K<N: ";
cin>>K;
}while(K>=N);
allocmatrix();
rewind(InFile);
readmatrix();
diagonal();
fclose(InFile);
for(k=0; k<K+1; k++){
for(i=k+1; i<K+1; i++){
if(sums[k][k]==0){
cout<<"Reshenie ne syshestvyet"<<endl;
return 0;
}
float M = sums[i][k] / sums[k][k];
for(j=k; j<K+1; j++){
sums[i][j] -= M * sums[k][j];
}
b[i] -= M*b[k];
}
}
for(i=(K+1)-1; i>=0; i--){
float s = 0;
for(j = i; j<K+1; j++){
s = s + sums[i][j]*a[j];
}
a[i] = (b[i] - s) / sums[i][i];
}
printresult();
freematrix();
getch();
return 1;
}