Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. // unordered_map::find
  2. #include <iostream>
  3. #include <string>
  4. #include <unordered_map>
  5. #include <cmath>
  6. #include <stack>
  7. #include <map>
  8. #include<stdarg.h>
  9. #include <cstdlib>
  10.  
  11. using namespace std;
  12.  
  13. std::string s;
  14. std::string ds;
  15. std::string xstring;
  16. std::string delimiter = " ";
  17. std::stack<double> evaluator;
  18.  
  19. void parse(std::string token, double value) {
  20.     if (token == "x") {
  21.         evaluator.push(value);
  22.         return;
  23.     }
  24.     if (token == "*") {
  25.         double a = evaluator.top();
  26.         evaluator.pop();
  27.         double b = evaluator.top();
  28.         evaluator.pop();
  29.         evaluator.push(a * b);
  30.     }
  31.     else if (token == "/") {
  32.         double a = evaluator.top();
  33.         evaluator.pop();std::string d;
  34.         double b = evaluator.top();
  35.         evaluator.pop();
  36.         evaluator.push(b / a);
  37.     } else if (token == "+") {
  38.         double a = evaluator.top();
  39.         evaluator.pop();
  40.         double b = evaluator.top();
  41.         evaluator.pop();
  42.         evaluator.push(a + b);
  43.     }
  44.     else if (token == "-") {
  45.         double a = evaluator.top();
  46.         evaluator.pop();
  47.         double b = evaluator.top();
  48.         evaluator.pop();
  49.         evaluator.push(b - a);
  50.     }
  51.     else if (token == "cos") {
  52.         double a = evaluator.top();
  53.         evaluator.pop();
  54.         evaluator.push(cos(a));
  55.     }
  56.     else if (token == "sin") {
  57.         double a = evaluator.top();
  58.         evaluator.pop();
  59.         evaluator.push(sin(a));
  60.     }
  61.     else evaluator.push(std::stod(token));
  62. }
  63.  
  64. double split(std::string s, double value) {
  65.     size_t pos = 0;
  66.     std::string token;
  67.     while ((pos = s.find(delimiter)) != std::string::npos) {
  68.         token = s.substr(0, pos);
  69.         parse(token, value);
  70.         s.erase(0, pos + delimiter.length());
  71.     }
  72.     return evaluator.top();
  73. }
  74.  
  75.  
  76. double f (double x) {
  77.     return split(s, x) ;
  78. } //Функція, нулі якої шукаємо
  79. double df(double x) {
  80.     return split(ds, x);
  81. } //Похідна функції
  82.  
  83. int main() {
  84.  
  85.     std::getline(std::cin, s);
  86.     s += delimiter;
  87.  
  88.     std::getline(std::cin, ds);
  89.     ds += delimiter;
  90.  
  91.     //std::cout << split(s, xvalue);
  92.     double tmp,x,eps;
  93.     int N=0;
  94.  
  95.     cout<<"eps=";
  96.     cin>>eps;   //Точність
  97.     cout<<"x0=";
  98.     cin>>x;     //Попереднє наближення
  99.     tmp=x+2*eps;
  100.     while(fabs(x-tmp)>eps) {
  101.         tmp=x;
  102.         x=x-f(x)/df(x);
  103.         N++;
  104.     }
  105.     cout.setf(ios::scientific);
  106.     cout<<endl<<endl<<"x="<<x<<endl<<"N="<<N<<endl;
  107.     cin>>N;
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement