ONP z floatami, doublami

0

Witam
Chodzi mi o przekonwertowanie jakiegoś wzoru czy równania matematycznego np (2 + 2 * 3.1 na ONP = 2 2 3.1 * +) lub (U/I+2.27*3.1 na ONP = U I / 2.27 3.1 * +). Najlepiej by wynik był rozdzielony spacjami. Zamiana dobrze wychodzi mi dla samych pojedynczych cyfr, ale dla floatów czy doubli już niekoniecznie. Przeczytałem sporo artykułów o ONP więc proszę nie rzucać linkami.

0

Przeczytałem sporo artykułów o ONP więc proszę nie rzucać linkami.

I co z tych artykułów wyniosłeś?

0

Wiem, że powinienem sklejać jakoś w całość te liczby >9 i floatowe oraz doublowe, ale po prostu nie wiem jak.

0

nie da się jakoś parsować tej liczby aż nie trafisz na znak operacji matematycznej czy cokolwiek poza spacją lub kropką? Wczytujesz do stringa i potem konwertujesz na doubla.

0

Mam taki kod wyklepany w C#:

public string ConvertToPostFix(string inFix)
        {
            char[] S = new char[100];
            string postfix = "";
            string liczba = "";
            int sptr = 0;
            for (int i = 0; i < inFix.Length; i++)
            {
                if (Char.IsDigit(inFix[i]) || inFix[i] == '.')
                {
                    liczba = liczba + inFix[i];
                }
                else if (inFix[i] == '=')                           
                {
                    while (sptr != 0) postfix = postfix + ' ' + S[--sptr]; 
                }
                else if (inFix[i] == '(')
                {
                    S[sptr++] = '(';
                }
                else if (inFix[i] == ')')
                {
                    while (S[sptr - 1] != '(')     
                        postfix = postfix + ' ' + S[--sptr];   
                    sptr--;
                }
                else if (inFix[i] == '+' || inFix[i] == '-' || inFix[i] == '/' || inFix[i] == '*' || inFix[i] == '^')
                {
                    while (sptr != 0)
                    {
                        if ((p(inFix[i]) == 3) || (p(inFix[i]) > p(S[sptr - 1]))) break;
                        postfix = postfix + ' ' + S[--sptr]; 
                    }                           
                    S[sptr++] = inFix[i];              
                }
                else if (inFix[i] == ' ')
                {
                   postfix = postfix + liczba;
                   liczba = "";
                }
            }
            return postfix;
        }

        public int p(char c)
        {
            switch (c)
            {
                case '+':
                case '-': return 1;
                case '*':
                case '/': return 2;
                case '^': return 3;
            }
            return 0;
        }

0

Dobra, mam to. Ta linia:
postfix = postfix + liczba + ' ';
Była do poprawy...

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