Статус:
Offline
Реєстрація: 28.03.2009
Повідом.: 67
Реєстрація: 28.03.2009
Повідом.: 67
- 🔴 11:32 Повітряна тривога в Харків.обл.
- #1
Помогите с отладкой функции обработки. С++
к коду прилогается скрин на котором виден пример вычисления методом эйткена.
архив проэкта на визуал студио 2010
и ссылка на метод эйткена
Код:
/* Используя Схему Эйткена реализовать вычисления приближенных значений функции, заданой таблично.
Значения x[i] y[i] ввводим сами.*/
#include "stdafx.h"
#include <iostream>
#include "conio.h"
using namespace std;
class eit
{
int n;
float *va;
public:
eit();
eit(int _n){n=_n; va=new float [n];} //конструктор, выделяем память для массива
~eit(){delete [] va;} //деструктор
float&operator[](int index) //перегруженый оператор, для доступа к элементам массива
{return va[index];}
friend void obr(eit o1, eit o2);//обработка, выполняет нахождение приближенного значения функции по схеме эйткена
void show(); //функция просмотра
};
void eit::show()
{
int i=0;
for(; i<n; i++) //вывод матрицы
cout<<va[i]<<' ';
cout<<endl;
}
void obr(eit o1,eit o2)
{
int i=0; //счетчик элементов массива
float x; //значение аргумента для которого будет находиться значение функции
float *P; //массив промежуточных значений P[i]
float Pz=0; //результирующее значение функции при заданом х.
P=new float [n];//выделение динамической памяти для массива промежуточных значений
cout<<"vvedite x, dlya kotorogo budet nahoditcya znachenie function y(x): ";
cin>>x;
cout<<endl;
for(i=0; i<o1.n; i++) //так как массивы x[i] y[i] имеют одинаковый размер n, то открываем один цыкл
{
P[i]=P[i]=(1/(o1[i+1]-o1[i]))*(o2[i]*(o1[i+1]-x)-o2[i+1]*(o1[i]-x)); //расчет промежуточных значений Р[i] по формуле:P[i]=(1/(x[i+1]-x[i]))*((y[i]*(x[i+1]-x))-(y[i+1]*(x[i+1]-x)))
cout<<P[i]<<' ';
}
for(i=0; i<o1.n-1; i++)
Pz=(1/(o1[o1.n-1]-o1[0]))*(P[i]*(o1[o1.n-1]-x)-P[i+1]*(o1[0]-x)); //считаем результат Pz=(1/(x[n-1]-x[0]))*((P[i]*(x[n-1]-x))-(P[i+1]*(x[0]-x)))
cout<<"Pz= "<<Pz;
}
int main()
{
int i;
int _n;
float *x;
cout<<"vvedite kol-vo znacheni' x[i] i y[i]: ";
cin>>_n;
cout<<endl;
eit o1(_n); //создаем объект типа класса eit для хранения значений x[i]
eit o2(_n); //создаем объект типа класса eit для хранения значений у[i]
x=new float [_n]; //выделяем динамическую память
cout<<"vvedite "<<_n<<" znachenii x[i]: ";
for(i=0; i<_n; i++)
cin>>x[i];
for(i=0; i<_n; i++)
o1[i]=x[i]; //передаем массив x[i] в объект
cout<<"vvedite "<<_n<<" znachenii y[i]: ";
for(i=0; i<_n; i++)
cin>>x[i];
for(i=0; i<_n; i++)
o2[i]=x[i]; //передаем массив в объект у[i]
cout<<endl;
cout<<"x[i]: ";
o1.show(); //вывод массива x[i]
cout<<"y[i]: ";
o2.show(); //вывод массива у[i]
obr(o1,o2);
return 0;
}
к коду прилогается скрин на котором виден пример вычисления методом эйткена.
архив проэкта на визуал студио 2010
и ссылка на метод эйткена
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
Вкладення
Останнє редагування: