Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
strash
0 / 0 / 0
Регистрация: 11.04.2014
Сообщений: 6
#1

Программа интерполяции измерений методом Ньютона - C++

26.04.2014, 21:22. Просмотров 264. Ответов 0
Метки нет (Все метки)

доброго времени суток.. помогите пожалуйста написал курсач , а он слишком велик оказался помогите подкорректировать и убрать что не нужно или там заменить.) код прилагается)

1 часть программы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#include<iostream>
#include<fstream>
#include<conio.h>
#include<stdlib.h>
using namespace std;
long double zniach(int i,int j);
long double fstr(char*);
void vvod(void);
void matrix(void);
long double X[500];
long double Y[500];
long double C[500];
int nekd;
int N;
long double mass[500][500];
int main()
{
vvod();
if (nekd==1) return 0;
 
matrix();
if (nekd==1) return 0;
 
system("grafics.exe");
return 0;
}
 
void vvod(void)
{
char varvv=0;
while((varvv!='1')&&(varvv!='2'))
    {
    cout << "Kak vvesti dannye?\n1. S klaviatury\n2. Iz faila?\n";
    cin >> varvv;
    if ((varvv!='1')&&(varvv!='2')) cout <<"Vy doljny vvesty 1 ili 2!\n";
    }
char stroka[50];
if (varvv=='1')
    {
    cout <<"Vvedite chislo tochek.\n";
    cin >>stroka;
    N=(int)fstr(stroka);
    if (nekd==1) return;
    for(int i=0;i<N;i++)
        {
        cout<<"Vvedite X["<<i<<"]="; 
        cin>>stroka;
        X[i]=fstr(stroka);
        if (nekd==1) return;
        cout<<endl;
        cout<<"Vvedite Y["<<i<<"]="; 
        cin>>stroka;
        cout<<endl;
        Y[i]=fstr(stroka);
        if (nekd==1) return;
        }
    }
if (varvv=='2')
    {
    char filename[255];
    while (1) //Ввод имени и проверка файла
        {
        cout << "Vvedite imja faila. Fail ne doljen soderjat' bolee 255 simvolov, probelov i tol'ko latinskie bukvy.\n";
        for (int i=0;i<255;i++) filename[i]=0;
        cin >> filename;
        ifstream fin(filename); //проверка файла
        char q=0;
        fin >> q;
        fin.close();
        if (q==0)
            {
            cout << "\nFail  \"" << filename << "\"  Pustoj ili ne sushestvuet. Dlia prodoljenija najmite enter.\n";
            getch();
            }
        else 
            {
            break;
            }
        }
    ifstream fin(filename);
    fin>>stroka;
    N=(int)fstr(stroka);
    if (nekd==1) return;
    for(int i=0;i<N;i++)
        {
        fin>>stroka;
        X[i]=fstr(stroka);
        if (nekd==1) return;
        fin>>stroka;
        Y[i]=fstr(stroka);
        if (nekd==1) return;
        }
    fin.close();
    }
ofstream fout("data.txt");
for(int i=0;i<N;i++)
    fout<<X[i]<<"  "<<Y[i]<<endl;
fout.close();
}
 
void matrix(void)
{
for(int i=0;i<N;i++)
    mass[i][0]=1; 
for(int i=1;i<N;i++)
for(int j=1;j<i+1;j++)   
    mass[i][j]=zniach(i,j);
 
for(int i=0;i<N;i++)     
    {
    cout<<endl;
    for(int j=0;j<N;j++)
    cout <<mass[i][j]<<"  ";
    }
cout <<endl;
ofstream fout("out.txt");
fout<<N<<endl;
for(int i=0;i<N;i++)
    {
    if (mass[i][i]==0)
        {
        nekd=1;
        cout<<"Programma ne smojet poschitat' funkciju. Vozmojno vvedionnye dannye nekorrektny.\n";
        getch();
        return;
        }
    C[i]=Y[i]/mass[i][i];
    cout<<"\n"<<"C["<<i<<"]="<<C[i]<<endl;
    for(int j=i+1;j<N;j++)
        {
        mass[j][i]*=C[i];
        Y[j]-=mass[j][i];
        }
    fout<<C[i]<<endl;
    }
fout.close();
getch();
}
long double zniach(int i,int j)
   {    
    long double ZN=1;
    for(int q=0;q<j;q++)
    ZN*=X[i]-X[q];
    return ZN;
    }
 
long double fstr(char stroka[50])
{
nekd=0;
if (strlen(stroka)>20)
    {
    nekd=1;
    cout<<"Dannye nekorrektny.\n";
    getch();
    return 0;
    }
for (unsigned int i=0;i<strlen(stroka);i++)
    {
    if (((stroka[i]>='0')&&(stroka[i]<='9'))||(stroka[i]=='.')||(stroka[i]=='-')||(stroka[i]=='+'))
        {
        if ((stroka[i]=='-')||(stroka[i]=='+'))
            if (i!=0)
                {
                cout << "Dannye nekorrektny.\n";
                nekd=1;
                getch();
                return 0;
                }
        if (stroka[i]=='.')
            for (unsigned int q=0; q<i; q++)
                if (stroka[q]=='.')
                    {
                    cout << "Dannye nekorrektny.\n"; 
                    nekd=1;
                    getch();
                    return 0;
                    }
        }
    else 
        {
        nekd=1;
        cout<<"Dannye nekorrektny.\n";
        getch();
        return 0;
        }
    }
return atof(stroka); //преобразуем строку в число
}

2 часть программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
 
int gdriver = DETECT;
 
long double f(long double);
void vvod(void);
void massh(void);
void grafics(void);
 
long double C[500];
long double minim_x,maxim_x;
long double maxim_y, minim_y;
long double shagx, shagy;
long double X[500], Y[500];
int N=0;
 
int main()
{
clrscr();
initgraph(&gdriver, 0 , "");
 
vvod();
 
massh();
 
grafics();
 
getch();
return 0;
}
 
//Полином
long double f(long double x)
{
long double s=C[0];
for (int i=1;i<N;i++)
    {
    long double P=1;
    for (int q=0;q<i;q++)
        P*=x-X[q];
    s+=C[i]*P;
    }
return s;
}
 
void vvod(void)
{
//Ввод коеффициентов из файла
ifstream vvod("out.txt");
vvod >> N;
for (int i=0;i<N;i++)
    {
    vvod >> C[i];
    }
vvod.close();
 
//Ввод исходных данных из файла
 
ifstream data("data.txt");
for (i=0;i<N;i++)
    {
    data >> X[i] >> Y[i];
    }
data.close();
}
 
void massh(void)
{
//Поиск maxim_x и minim_x
minim_x=X[0];
maxim_x=X[0];
for (int i=0;i<N;i++)
    {
    if (X[i]<minim_x) minim_x=X[i];
    if (X[i]>maxim_x) maxim_x=X[i];
    }
 
//Вычисление шага x, шага y, maxy, miny
shagx=(maxim_x-minim_x)/620;
if (shagx==0) {cout << "Dannye nekorrektny"; getch();}
maxim_y=f(maxim_x);
minim_y=f(minim_x);
for(long double k=minim_x; k<=maxim_x; k+=shagx)
    {
    if(maxim_y<=f(k)) maxim_y=f(k);
    if(minim_y>=f(k)) minim_y=f(k);
    }
shagy=(maxim_y-minim_y)/460;
}
 
void grafics(void)
{
bar(0,0,getmaxim_x(),getmaxy());
//Рисование точек
for(int q=0;q<N;q++)
    {
    setcolor(2);
    circle(5+(int)((X[q]-minim_x)/shagx), 5+460-(int)((Y[q]-minim_y)/shagy),1);
    setfillstyle(1, 2);
    floodfill(5+(int)((X[q]-minim_x)/shagx), 5+460-(int)((Y[q]-minim_y)/shagy), 2);
    }
setcolor(4);
//Рисование функции
for (long double d=minim_x; d<=maxim_x; d+=shagx)
    line(5+(int)((d-minim_x)/shagx),5+460-(int)( (f(d)-minim_y)/shagy ),5+(int)((d-shagx-minim_x)/shagx),5+460-(int)( (f(d-shagx)-minim_y)/shagy ));
}
спасибо зарание добрые люди)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2014, 21:22     Программа интерполяции измерений методом Ньютона
Посмотрите здесь:

C++ Решение СНАУ методом Ньютона
C++ Разработать алгоритм интерполяции значений функции методом Лагранжа. В качестве тестового примера использовать функцию Рунге
Как задать криволинейный замкнутый контур по точкам методом кубической интерполяции? C++
Нахождение корней методом Ньютона C++
C++ Решить функцию методом Ньютона
C++ Вычислить методом Ньютона корень уравнения
Найти номер элемента методом интерполяции C++
C++ Решение СНАУ методом Ньютона
Функция Арксинус методом Ньютона C++
C++ Интерполяция методом Ньютона и Лагранжа
C++ Уравнение методом Ньютона
C++ 'разобраться' с уравнением методом Ньютона

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 13:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru