এই আর্টিকেলে আমরা নিচে দেওয়া সমস্যা স্টেটমেন্টের সমাধান শিখব।
সমস্যা স্টেটমেন্ট - আমাদের POS ফর্ম দেওয়া আছে, আমাদের এটি এর সমতুল্য SOP ফর্মে কনভার্ট করতে হবে।
কনভার্সনটি করা যায় প্রথমে POS ফর্মে কতগুলো অ্যালফাবেট আছে তা কাউন্ট করে এবং তারপর সব ম্যাক্সটার্ম এবং মিনটার্ম ক্যালকুলেট করে।
নিচে ইমপ্লিমেন্টেশনে কনসেপ্টটি নিই।
উদাহরণ
# 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
# ম্যাক্সটার্ম ইন্টিজারে
def Cal_Max_terms(Max_terms, POS):
a = ""
i = 0
while (i < len(POS)):
if (POS[i] == '.'):
# বাইনারি থেকে ডেসিমেল কনভার্সন
b = int(a, 2)
# প্রতিটি মিনটার্ম (ইন্টিজার টাইপ) লিস্টে অ্যাপেন্ড
Max_terms.append(b)
# খালি স্ট্রিং অ্যাসাইন
a = ""
i += 1
elif (POS[i].isalpha()):
# ভেরিয়েবল কমপ্লিমেন্ট হিসেবে সুপারস্ক্রিপ্ট دار কিনা চেক
if (i + 1 != len(POS) and POS[i + 1] == "'"):
# স্ট্রিংয়ের সাথে '1' কনক্যাট
a += '1'
# ২ দিয়ে ইনক্রিমেন্ট কারণ ১ অ্যালফাবেটের জন্য আর ১ ' চিহ্নের জন্য
i += 2
else:
# স্ট্রিংয়ের সাথে '0' কনক্যাট
a += '0'
i += 1
else:
i += 1
# শেষ মিনটার্ম (ইন্টিজার টাইপ) লিস্টে অ্যাপেন্ড
Max_terms.append(int(a, 2))
# মিনটার্ম বাইনারি কনভার্ট এবং সেটি 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:]
# ০ প্যাডিং করার লুপ যাতে দৈর্ঘ্য ভেরিয়েবল সংখ্যার সমান হয়
while (len(b) != no_var):
b = '0' + b
# ম্যাক্স টার্ম (ইন্টিজার) লিস্টে অ্যাপেন্ড
Min_terms.append(b)
SOP = ""
# মিনটার্ম থাকা পর্যন্ত ইটারেট
for i in Min_terms:
# ভেরিয়েবল ফেচ
value = start_alphabet
# ০ এবং ১ থাকা পর্যন্ত ইটারেট
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)
# ড্রাইভার কোড
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

সব ভেরিয়েবল লোকাল স্কোপে ডিক্লেয়ার করা হয়েছে এবং তাদের রেফারেন্স উপরের ফিগার থেকে দেখা যাচ্ছে।
উপসংহার
এই আর্টিকেলে আমরা শিখেছি কীভাবে POS থেকে SOP ফর্মে কনভার্ট করা যায়।