ONP - kilka znaków "="

0

ONP:

m = n = p = (-1) ^ (m + n + p) * (m + n + p);

Mam problem ze znakiem "=". Czy jest jakaś zasada co do jego priorytetu czy zawsze wywalamy go na koniec? Niestety nie mogę znaleźć przykładów co do zadań z kilkoma "=".

Niżej dam moje rozwiązanie. Co myślicie?
138064008_714730016073997_5640444444865772472_n.jpg
ONP: M,N,=,P,=,1,NEG,M,N,+,P,+,^,M,N,+,P,+,*,=;

0

Po co Ci znak równości? Przecież, ONP służy do obliczenia wartości wyrażenia, po sparsowaniu i ewaluacji otrzymujesz wynik, (czyli to czemu ono jest równe).

0

Nie wiem, taki przykład pojawił się kilkukrotnie na kolokwium i szukam poprawnej odpowiedzi

Czyli Chcesz tylko przepisać wyrażenie z infix to RPN, to, na pierwszy rzut oka, wygląda, że wystarczy znakowi równości ustawić najniższy priorytet; kod zaczerpniety z:
https://runestone.academy/runestone/books/published/pythonds/index.html

class Stack:
     def __init__(self):
         self.items = []

     def isEmpty(self):
         return self.items == []

     def push(self, item):
         self.items.append(item)

     def pop(self):
         return self.items.pop()

     def peek(self):
         return self.items[len(self.items)-1]

     def size(self):
         return len(self.items)

def infixToPostfix(infixexpr):
    prec = {}
    prec["="] = 0
    prec["*"] = 3
    prec["/"] = 3
    prec["+"] = 2
    prec["-"] = 2
    prec["("] = 1
    opStack = Stack()
    postfixList = []
    tokenList = infixexpr.replace("(", " ( ").replace(")", " ) ").split()

    for token in tokenList:
        if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789":
            postfixList.append(token)
        elif token == '(':
            opStack.push(token)
        elif token == ')':
            topToken = opStack.pop()
            while topToken != '(':
                postfixList.append(topToken)
                topToken = opStack.pop()
        else:
            while (not opStack.isEmpty()) and \
               (prec[opStack.peek()] >= prec[token]):
                  postfixList.append(opStack.pop())
            opStack.push(token)

    while not opStack.isEmpty():
        postfixList.append(opStack.pop())
    return " ".join(postfixList)



print(infixToPostfix("M = N = P = (A) * (M + N + P) * (M + N + P)")) # -> M N = P = A M N + P + * M N + P + * =
print(infixToPostfix("A = B = C * Z * U")) # -> A B = C Z * U * =

1 użytkowników online, w tym zalogowanych: 0, gości: 1