Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sparco.doc
Скачиваний:
1
Добавлен:
22.09.2019
Размер:
565.25 Кб
Скачать

Література

  1. Боэм Б.У. Инженерное проектирование программного обеспечения.-

М.: Радуга, 1989г. – 950с.

  1. Боэм Б.У. Инженерное проектирование программного обеспечения.-

М.: Конкорд, 1993г. – 950с.

  1. Буч Г. Обектно-ориентированное проектирование.-

М.:Конкорд, 1992. 519 с.

  1. К. Паппас, У. Мюррей. Visual C++. –

Минск: Попурри, 1998г. – 780с.

  1. Страуструп Б. Язык программирования С++. В 2-х кн. Часть первая.

К.:Диасофт, 1993.- 264 с. Часть вторая.- К.:Диасофт, 1993.- 296 с.

  1. Г. Шилдт. С – для профессиональніх программистов. –

М.: Радуга, 1989г. – 950с.

  1. Единая система программной документации.-

М.:Изд-во стандартов, 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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]