C++/Parser

0

Witam,

chciałabym mieć taki programik:
#include <iostream>

int main(){
double x;
double d;
std::cout<<"Podaj argument dla ktorego chcesz policzyć wartość funkcji "<<std::endl;
std::cin>>x;
std::cout<<"Podaj funkcję której wartość chcesz policzyć "<<std::endl;

w tym miejscu chce zeby program pobral z klawiatury funkcję np. sin(x) albo sin(x)+5x+1

i pozniej odpowiednio widzial to jako funkcję nie jako ciąg znaków

std::cout<<"wartosc funkcji w podanym punkcie to "<<d<<std::endl;
return 0;
}

Chodzi mi o to jak zaimplementowac to miejsce na zielonym. Jakieś pomysły?</quote>

0

Co innego
sin
a co innego
sin(x) + 5x + 1

Jak pierwsze to po prostu:

std::string funkcja;
cin >> funkcja;
if(funkcja == "sin")
  std::cout<< sin(wartosc);

a jak drugie to poczytaj o odwrotnej notacji polskiej.

0

Ale czy nie można zrobić powyższego programiku tak aby uzytkownik mógł podać dowolną funkcję ? Żeby program nie był przypisany do jednej funkcji, tak jak powyższy tylko liczący sinus .

0

no można. Johny ci napisał: odwrotna notacja polska, (ONP, RPN). Możesz też poczytać o drzewach i całe wyrażenie zamieniać na drzewo. Obliczanie wyrażenia zapisanego w drzewie to już górki (chyba większość kompilatorów tak sobie parsuje wyrażenia).

0

Robiłem kiedyś coś takiego, miałem kod w pascalu ale mi gdzieś zginął. Najpierw rozbijałem podany ciąg na jednostki i eliminowałem białe pola, trzeba pamiętać żeby nie rozbijać liczb na cyfry tylko zostawiać całe. Te elementy pakowałem do tablicy. Później za pomocą drugiej tablicy (która robiła za stos <lame> :D) zmieniałem to wyrażenie na ONP a potem obliczenie to był już pikuś. Jest dobry art na 4p o ONP z którego korzystałem do napisania algorytmu.

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