👤

Zadanie w załączniku
Chciałbym kod w Pythonie oczywiście, z góry dziękuję za pomoc​


Zadanie W ZałącznikuChciałbym Kod W Pythonie Oczywiście Z Góry Dziękuję Za Pomoc class=

Odpowiedź :

Odpowiedź:

#include <iostream>

#include <stack>

#include <algorithm>

#include <array>

bool canAddToStack(const char a) { //flaga czy mozemy dodać do stacku. Dodajemy jedynie operatory i nawiasy

   static std::array<char, 6> toStack = {'+', '-', '*', '/', '(', ')'};

   return std::find(toStack.begin(), toStack.end(), a) != std::end(toStack);

}

bool canBeMovedFromStackToResult(const char a) { //flaga operatorów, które możemy wyciągnąć ze stacku i dodać do wyniku

   static std::array<char, 4> fromStack = {'+', '-', '*', '/'};

   return std::find(fromStack.begin(), fromStack.end(), a) != std::end(fromStack);

}

void dropFromStack(std::stack<char> &stack, std::string &res) { //wyjmowanie za stacka dopóki nie trafimy na nawias otwierający

   while (stack.top() != '(') {

       if (canBeMovedFromStackToResult(stack.top())) {

           res += stack.top();

       }

       stack.pop();

   }

   stack.pop();

}

int main() {

   std::string s;

   std::cout << "Podaj wyrazenie: " << std::endl;

   std::cin >> s;

   std::stack<char> stacked;

   std::string res;

   for (const char &ch : s) {

       if (canAddToStack(ch)) { //jeśli możemy dodać do stacka to dodajemy do stacka

           stacked.push(ch);

       }

       if (std::isdigit(ch)) { //jeśli jest cyfra to dodajemy do wyniku

           res += ch;

       }

       if (stacked.top() == ')') { //jeśli trafimy na nawias zamykający to zdejmujemy ze stacka dopóki nie natrafimy na nawias otwierający

           dropFromStack(stacked, res);

       }

   }

   std::cout << res << std::endl;

   return 0;

}

Wyjaśnienie:

Zrobione to jest tak, że trzeba wszędzie dawać nawiasy plus nie ma zapisywania do pliku. Oczywiście też jest to zrobione w C++, a nie w pythonie