Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Błąd w kodach z wykładu...

 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie
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 :]

PostWysł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 profil autora
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

PostWysł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 profil autora
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

PostWysł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
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
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
Regulamin