Related Articles
Python program to convert POS to SOP
• Last Updated : 04 Dec, 2018

Write a program in Python to convert standard POS(product of sums) form to standard SOP(sum of products) form.

Assumptions: The input POS expression is standard. The variables in POS expression are continuous i.e. if expression contains variable A then it will have variables B, C respectively and each Sum term contains the alphabets in sorted order i.e. A + B + C (not like B+A+C).

Examples:

Input : (A + B + C).(A + B + C').(A + B' + C).(A' + B + C)
Output : A'BC + AB'C + ABC' + ABC

Input : (A + B).(A' + B')
Output : A'B + AB'

Approach:

1. First of all convert each sum term to its equivalent binary form. For example, if (A+B+C’) then take 0 for uncomplement variable(A, B) and take 1 for complement variable(C) so binary conversion is 011) and then finally equivalent to its decimal form(for ex: 001 = 1) and store in a list.
2. Now for SOP form take all those terms which are not present in the list formed in step 1st and then convert each term to binary and hence change to POS form. For example –
Suppose 4 was not in the list then 5==> 101 (binary)
Now, replace 0 by complement variables(B)
replace 1 by uncomplement variables(A, C)
101 ==> AB’C
After each individual sum term use ‘+’
ex: AB’C+AB’C’

Below is the Python implementation of above approach:

 # Python code to convert standard POS form # to standard SOP form   # Function to calculate no. of variables # used in POS expression def count_no_alphabets(POS):     i = 0    no_var = 0      # As expression is standard so total no.     # of alphabets will be equal     # to alphabets before first '.' character     while (POS[i]!='.'):           # checking if character is alphabet                 if (POS[i].isalpha()):                 no_var+= 1        i+= 1    return no_var   # Function to calculate the max terms in integers def Cal_Max_terms(Max_terms, POS):     a = ""     i = 0    while (i " + SOP_expr)       # input2     POS_expr ="(A + B).(A'+B')"    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()
Output:
Standard SOP form of (A+B+C).(A+B+C').(A+B'+C).(A'+B + C)  ==>  A'BC+AB'C+ABC'+ABC
Standard SOP form of (A + B).(A'+B')  ==>  A'B+AB'

Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning – Basic Level Course

My Personal Notes arrow_drop_up