Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ สำหรับอนุพันธ์ของพหุนาม


ให้สตริงที่มีพจน์พหุนาม ภารกิจคือการประเมินอนุพันธ์ของพหุนามนั้น

พหุนามคืออะไร

พหุนามมาจากคำสองคำ:- "โพลี" ซึ่งหมายถึง "จำนวนมาก" และ "นาม" หมายถึง "คำศัพท์" ซึ่งประกอบด้วยคำหลายคำ นิพจน์พหุนามคือนิพจน์ที่ประกอบด้วยตัวแปร สัมประสิทธิ์ และเลขชี้กำลัง ซึ่งเกี่ยวข้องกับการดำเนินการเท่านั้น เช่น การบวก การคูณ และการลบของตัวแปร

ตัวอย่างพหุนาม

x2+x+1

อนุพันธ์ของพหุนาม p(x) =mx^n จะเป็น −

ม * n * x^(n-1)

ตัวอย่าง

Input: str = "2x^3 +1x^1 + 3x^2"
   val = 2
Output: 37
Explanation: 6x^2 + 1x^0 + 6x^1
   Putting x = 2
   6*4 + 1 + 6*2 = 24 + 1 + 12 = 37

Input: str = “1x^3”
   val = 2
Output: 12
Explanation: 1 * 3 *x^2
   Putting x = 2
   3 * 4 = 12

แนวทางที่เราจะใช้ในการแก้ปัญหาข้างต้น

  • รับอินพุตเป็นสตริงและค่าของ x
  • ตอนนี้สำรวจสตริงและตรวจสอบตัวเลขและตัวแปร
  • เพิ่มและข้ามผ่านสตริงต่อไปจนกว่าเราจะพบ '+'
  • จากนั้น m * n * x^(n-1)
  • ส่งคืนผลลัพธ์

อัลกอริทึม

Start
Step 1-> In function long long term(string polyterm, long long val)
   Declare and initialize coeffStr = "”
   Declare i
   Loop For i = 0 and polyterm[i] != 'x' and i++
      Call coeffStr.push_back(polyterm[i])
      Set coeff = atol(coeffStr.c_str()
      Declare and initialize powStr = ""
      Loop For i = i + 2 and i != polyterm.size() and i++ powStr.push_back(polyterm[i])
         Set power = atol(powStr.c_str());
   Return coeff * power * pow(val, power - 1)
Step 2-> In function long long value(string& str, int val)
   Set ans = 0
   Call istringstream is(str)
   Declare string polyterm
   Loop While is >> polyterm
      If polyterm == "+” then,
         Continue
      Else
         Set ans = (ans + term(polyterm, val))
   Return ans
Step 3-> In function int main()
   Declare and initialize str = "2x^3 + 1x^1 + 3x^2"
   Declare and initialize val = 2
   Print the value received by value(str, val)
Stop

ตัวอย่าง

#include
using namespace std;
long long term(string polyterm, long long val) {
   //to find the coefficient
   string coeffStr = "";
   int i;
   for (i = 0; polyterm[i] != 'x'; i++)
      coeffStr.push_back(polyterm[i]);
   long long coeff = atol(coeffStr.c_str());
   // to get the power value
   string powStr = "";
   for (i = i + 2; i != polyterm.size(); i++)
      powStr.push_back(polyterm[i]);
   long long power = atol(powStr.c_str());
   // For ax^n, we return a(n-1)x^(n-1)
   return coeff * power * pow(val, power - 1);
}
long long value(string& str, int val) {
   long long ans = 0;
   // using istringstream to get input in tokens
   istringstream is(str);
   string polyterm;
   while (is >> polyterm) {
      // check if the token is equal to '+' then
      // continue with the string
      if (polyterm == "+")
         continue;
         // Otherwise find the derivative of that
         // particular term
      else
         ans = (ans + term(polyterm, val));
   }
   return ans;
}
// main function
int main() {
   string str = "2x^3 + 1x^1 + 3x^2";
   int val = 2;
   cout << value(str, val);
   return 0;
}

ผลลัพธ์

37