ในบทความนี้ เราจะเรียนรู้เกี่ยวกับวิธีแก้ปัญหาตามข้อกำหนดด้านล่าง
ข้อกำหนดปัญหา − เราได้รับรูปแบบ 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

ตัวแปรทั้งหมดประกาศในขอบเขตท้องถิ่น (local scope) และอ้างอิงของพวกเขาเห็นในรูปด้านบน
สรุป
ในบทความนี้ เราได้เรียนรู้วิธีแปลง POS เป็น SOP form