Wstawienie kodu ze zmiennej

0

Witam,
Chce napisac program, ktory oblicza wartosc pewnej funkcji, ktorej wyrazenie do obliczenia zostalo juz przygotowane i jest przetrzymywane w stringu. Pracuje na Visual C++, jesli trzeba uzyje funkcji nie wchodzacej w sklad standardu.

Wartosc wyrazenia wyglada mniej wiecej tak, jest generowana na podstawie dynamicznych danych wprowadzonych przez uzytkownika:
3.00000pow(x,4)+45.000000pow(x,3)+3.000000*pow(x,2)+5.00000

Jest przetrzymywana w zmiennej klasy string.

float f(float x, string tekst) {
	return WSTAW_KOD_Z_TEKST;
};

Gdyby sie to udalo to jestem w domu i program mam praktycznie ukonczony. Preprocesor raczej odpada, bo kod jest wstawiany na etapie kompilacji. Nie mam pomyslu jak sobie z tym poradzic i bede wdzieczny za kazda porade.

0

Jesli kod jest wstawiany na etapie kompilacji to preprocesor jak najbardziej ;)

Ale mozemy to zrobić inaczej. Z tego co widzę to jest jakiś wielomian, możesz za pomocą stringstream wyłuskać sobie z tego stringa "współczynniki". Oczywiście latwie byłoby gdyby postać wielomianu była odwrotna, tzn
1 + 2x + 3x^2 itd
Bo wtedy wyciągałbyś sobie kolejne współczynniki, mnożył przez kolejną potęgę x i sumował to wszystko.

Jeśli postać musi byc taka jak podałeś to będziesz musiał te współczynniki wczytać do vectora i potem wyciągać z końca i robić to samo co już opisałem powyżej.

0

Zle napisalem, chodzilo mi o to, ze uzytkownik podaje funkcje. A ja na podstawie tej funkcji stworzylem sobie gotowe wyrazenie, ktore mogloby byc kodem C++. Gdyby to byl jezyk interpretowalny raczej nie byloby problemu, ale trzeba dostosowac sie do swiata. Chyba, ze jest jakas biblioteka, ale to by bylo zbyt piekne. Czyli wychodzi na to, ze sie niepotrzebnie narobilem bo i tak bede musial wykorzystac postac przykladowo x^3+10x*553x+5 i recznie to liczyc kombinujac z wektorami. A liczylem, ze sobie po prostu wstawie kod, wraz z odpowiednimi funkcjami i bede mial policzone. No coz.

0

A pomyslaleś o tym że funkcje i inne instrukcje są w czasie kompilacji zamieniane najpierw na kod asemblera a potem na kod maszynowy? Ciężko byłoby już po kompilacji coś do tego źródła dorzucić ;)
To co napisałem wyżej to wcale nie jest nic skomplikowanego. Ot jeden <vector>, jedna pętelka i już. 7 linijek to będzie jesli dobrze liczę ;]

0

Tak, pomyslalem, ale jak juz mialem gotowe rozwiazanie. :D Coz musze sie jeszcze bardzo duzo nauczyc. Poza tym widze jeszcze prostsze rozwiazanie, wielkie dzieki za pomoc, nie wiem po co tak kombinowalem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1