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

โปรแกรม Python แปลง POS เป็น SOP

ในบทความนี้ เราจะเรียนรู้เกี่ยวกับวิธีแก้ปัญหาตามข้อกำหนดด้านล่าง

ข้อกำหนดปัญหา − เราได้รับรูปแบบ POS ต้องแปลงเป็นรูปแบบ SOP ที่เทียบเท่า

การแปลงทำได้โดยการนับจำนวนตัวอักษรในรูปแบบ POS ก่อน แล้วคำนวณ maxterms และ minterms ทั้งหมด

มาสังเกตแนวคิดในการนำไปใช้ด้านล่าง

ตัวอย่าง

# Python code to convert standard POS form
# to standard SOP form

# คำนวณจำนวนตัวแปร
def count_no_alphabets(POS):
    i = 0
    no_var = 0
    # จำนวนตัวอักษรก่อนจะเท่ากับตัวอักษรก่อนตัว '.' แรก
    while (POS[i] != '.'):
        # ตัวอักษรหรือไม่
        if (POS[i].isalpha()):
            no_var += 1
        i += 1
    return no_var

# maxterms เป็นจำนวนเต็ม
def Cal_Max_terms(Max_terms, POS):
    a = ""
    i = 0
    while (i < len(POS)):
        if (POS[i] == '.'):
            # แปลงไบนารีเป็นทศนิยม
            b = int(a, 2)
            # เพิ่ม minterm (integer) เข้าลิสต์
            Max_terms.append(b)
            # กำหนดสตริงว่าง
            a = ""
            i += 1
        elif (POS[i].isalpha()):
            # ตรวจสอบว่าตัวแปรมีคอมพลีเมนต์เป็น superscript หรือไม่
            if (i + 1 != len(POS) and POS[i + 1] == "'"):
                # ต่อสตริงด้วย '1'
                a += '1'
                # เพิ่ม 2 เพราะ 1 สำหรับตัวอักษร และอีก 1 สำหรับสัญลัคร "'"
                i += 2
            else:
                # ต่อสตริงด้วย '0'
                a += '0'
                i += 1
        else:
            i += 1
    # เพิ่ม minterm ตัวสุดท้าย (integer) เข้าลิสต์
    Max_terms.append(int(a, 2))

# แปลง minterms เป็นไบนารีและสุดท้ายแปลงเป็น SOP
def Cal_Min_terms(Max_terms, no_var, start_alphabet):
    # ประกาศลิสต์
    Min_terms = []
    # คำนวณจำนวนเทอมทั้งหมดที่สร้างจากตัวแปรทั้งหมด
    max = 2 ** no_var
    for i in range(0, max):
        # เทอมปัจจุบันอยู่ใน max_terms หรือไม่
        if (Max_terms.count(i) == 0):
            # แปลงจำนวนเต็มเป็นไบนารี
            b = bin(i)[2:]
            # ลูปใช้สำหรับแทรก '0' หน้า
            # ค่าไบนารีให้ความยาวเท่ากับ
            # จำนวนตัวแปรที่มีใน
            # แต่ละ product term
            while (len(b) != no_var):
                b = '0' + b
            # เพิ่ม max terms (integer) เข้าลิสต์
            Min_terms.append(b)
    SOP = ""
    # วนจนกว่า minterms จะหมด
    for i in Min_terms:
        # ดึงตัวแปร
        value = start_alphabet
        # วนจนกว่าจะหมด 0 และ 1
        for j in i:
            # ตรวจสอบว่าตัวแปรเป็นคอมพลีเมนต์หรือไม่
            if (j == '0'):
                # ต่อค่าและอ็อปเปอเรเตอร์คอมพลีเมนต์
                SOP = SOP + value + "'"
            # ตรวจสอบตัวแปรที่ไม่ใช่คอมพลีเมนต์
            else:
                # ต่อค่า
                SOP = SOP + value
            # เพิ่มตัวอักษรถัดไป
            value = chr(ord(value) + 1)
        # ต่ออ็อปเปอเรเตอร์ "+"
        SOP = SOP + "+"
    # ตัด '+' ตัวสุดท้าย
    SOP = SOP[:-1]
    return SOP

# ฟังก์ชันหลัก
def main():
    # อินพุต
    POS_expr = "(A'+B'+C).(A+B+C').(A+B'+C).(A'+B+C)"
    Max_terms = []
    no_var = count_no_alphabets(POS_expr)
    Cal_Max_terms(Max_terms, POS_expr)
    SOP_expr = Cal_Min_terms(Max_terms, no_var, POS_expr[1])
    print("Standard SOP form of " + POS_expr + " ==> " + SOP_expr)

# Driver code
if __name__ == "__main__":
    main()

ผลลัพธ์

Standard SOP form of (A'+B'+C).(A+B+C').(A+B'+C).(A'+B+C) ==> A'B'C'+A'BC+AB'C+ABC

โปรแกรม Python แปลง POS เป็น SOP

ตัวแปรทั้งหมดประกาศในขอบเขตท้องถิ่น (local scope) และอ้างอิงของพวกเขาเห็นในรูปด้านบน

สรุป

ในบทความนี้ เราได้เรียนรู้วิธีแปลง POS เป็น SOP form