|
Informatyka UJ forum Rocznik 2005 - czyli najlepsze forum w sieci
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Robson
zielony żul
Dołączył: 21 Paź 2005
Posty: 1274
Przeczytał: 0 tematów
Skąd: Z Lasu :]
|
Wysłany: Nie 14:00, 28 Sty 2007 Temat postu: Błąd w kodach z wykładu... |
|
|
/******************* Klasa Newton **********************/
/******** (c) Marian Mrozek, Kraków 2006 **************/
template<typename Function, typename Scalar>
class Newton{
private:
const Function& f;
const Function& derf;
const Scalar epsilon;
const int limit;
Scalar findRoot(const Scalar x,const int depth);
public:
Newton(const Function& A_f, const Function& A_derf, Scalar A_epsilon, int A_limit):
f(A_f),derf(A_derf),epsilon(A_epsilon),limit(A_limit){}
Scalar findRoot(const Scalar x){
return findRoot(x,0);
}
};
template<typename Function, typename Scalar>
Scalar Newton<Function,Scalar>::findRoot(const Scalar x,const int depth){
const Scalar y=f(x);
cout << "Step " << depth << "\n";
cout << " x =" << x << "\n";
cout << " f(x)=" << y << "\n";
if(y<epsilon && y>-epsilon || depth>=limit){
return x;
}else{
return findRoot(x-y/derf(x),depth+1);
}
}
/**************** Metoda Newtona (sin) *****************/
/******** (c) Marian Mrozek, Kraków 2006 **************/
#include <iostream>
using namespace std;
#include <cmath>
typedef double doubleFdouble(double);
int main(){
const Newton<doubleFdouble,double> n(sin,cos,0.0001,5);
cout << n.findRoot(3.0) << std::endl;
}
kompilator (gcc z dev 4.9.costam ) rzuca sie o:
main.cpp: In function `int main()':
main.cpp:54: passing `const Newton<double ()(double), double>' as `this'
argument of `Scalar Newton<Function, Scalar>::findRoot(Scalar) [with
Function = double ()(double), Scalar = double]' discards qualifiers
mogłby ktoś przystępnie wyjaśnic skąd to sie bierze... bo nie moge zrozumiec tej informacji...
|
|
Powrót do góry |
|
|
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal
pijak
Dołączył: 16 Wrz 2006
Posty: 53
Przeczytał: 0 tematów
Skąd: Trzebinia/Kraków
|
Wysłany: Nie 14:07, 28 Sty 2007 Temat postu: |
|
|
Funkcje findRoot() zarówno ta jedno, jak i dwuargumentowa muszą być const, skoro podajesz jako Function stałą. Albo dopisz const po funkcjach findRoot(..) albo usuń const, które jest przed Newton<> w main..
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal
pijak
Dołączył: 16 Wrz 2006
Posty: 53
Przeczytał: 0 tematów
Skąd: Trzebinia/Kraków
|
Wysłany: Nie 14:09, 28 Sty 2007 Temat postu: |
|
|
Sorry, nie jako Function (to tutaj nie ma nic do rzeczy ;)) tylko po prostu n jest stałą, więc może wywoływać tylko funkcje, które jej nie zmodyfikują czyli findRoot(..) musi być const.
|
|
Powrót do góry |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
|