Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // unordered_map::find
- #include <iostream>
- #include <string>
- #include <unordered_map>
- #include <cmath>
- #include <stack>
- #include <map>
- #include<stdarg.h>
- #include <cstdlib>
- using namespace std;
- std::string s;
- std::string ds;
- std::string xstring;
- std::string delimiter = " ";
- std::stack<double> evaluator;
- void parse(std::string token, double value) {
- if (token == "x") {
- evaluator.push(value);
- return;
- }
- if (token == "*") {
- double a = evaluator.top();
- evaluator.pop();
- double b = evaluator.top();
- evaluator.pop();
- evaluator.push(a * b);
- }
- else if (token == "/") {
- double a = evaluator.top();
- evaluator.pop();std::string d;
- double b = evaluator.top();
- evaluator.pop();
- evaluator.push(b / a);
- } else if (token == "+") {
- double a = evaluator.top();
- evaluator.pop();
- double b = evaluator.top();
- evaluator.pop();
- evaluator.push(a + b);
- }
- else if (token == "-") {
- double a = evaluator.top();
- evaluator.pop();
- double b = evaluator.top();
- evaluator.pop();
- evaluator.push(b - a);
- }
- else if (token == "cos") {
- double a = evaluator.top();
- evaluator.pop();
- evaluator.push(cos(a));
- }
- else if (token == "sin") {
- double a = evaluator.top();
- evaluator.pop();
- evaluator.push(sin(a));
- }
- else evaluator.push(std::stod(token));
- }
- double split(std::string s, double value) {
- size_t pos = 0;
- std::string token;
- while ((pos = s.find(delimiter)) != std::string::npos) {
- token = s.substr(0, pos);
- parse(token, value);
- s.erase(0, pos + delimiter.length());
- }
- return evaluator.top();
- }
- double f (double x) {
- return split(s, x) ;
- } //Функція, нулі якої шукаємо
- double df(double x) {
- return split(ds, x);
- } //Похідна функції
- int main() {
- std::getline(std::cin, s);
- s += delimiter;
- std::getline(std::cin, ds);
- ds += delimiter;
- //std::cout << split(s, xvalue);
- double tmp,x,eps;
- int N=0;
- cout<<"eps=";
- cin>>eps; //Точність
- cout<<"x0=";
- cin>>x; //Попереднє наближення
- tmp=x+2*eps;
- while(fabs(x-tmp)>eps) {
- tmp=x;
- x=x-f(x)/df(x);
- N++;
- }
- cout.setf(ios::scientific);
- cout<<endl<<endl<<"x="<<x<<endl<<"N="<<N<<endl;
- cin>>N;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement