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

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


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

พหุนาม (Polynomial) มาจากสองคำว่า "Poly" ซึ่งหมายถึง "หลาย" และ "nomial" ซึ่งหมายถึง "พจน์" ประกอบด้วยหลายพจน์ นิพจน์พหุนามเป็นนิพจน์ที่ประกอบด้วยตัวแปร สหประจักร และเลขชี้กำลัง ซึ่งเกี่ยวข้องกับการดำเนินการเช่น การบวก การคูณ และการลบของตัวแปร

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

x² + x + 1

อนุพันธ์ของพหุนาม

อนุพันธ์ของพหุนาม p(x) = m·xⁿ จะเป็น:

m × 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

ตัวอย่างโค้ด C++

#include <iostream>
#include <sstream>
#include <string>
#include <cmath>
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