ONP z floatami, doublami

Odpowiedz Nowy wątek
2017-12-05 16:37
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.

edytowany 1x, ostatnio: Patryk27, 2017-12-05 16:38
Poprawiłem formatowanie - pamiętaj o wrzucaniu wzorów, równań itd. w backticki. - Patryk27 2017-12-05 16:39
Co Chcesz, nie Wiesz jak przygotować string do algorytmu konwersji, nie Znasz algorytmu, czy i to i to? - lion137 2017-12-05 17:27

Pozostało 580 znaków

2017-12-05 16:39
0

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

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


Pozostało 580 znaków

2017-12-05 16:51
0

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

Pozostało 580 znaków

2017-12-05 17:01
Skromny Szczur
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.

Pozostało 580 znaków

2017-12-05 18:10
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;
        }

Pozostało 580 znaków

2017-12-05 18:21
0

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

Zaraz ktoś Ci napisze, że do poprawy tu jest o wiele więcej:) - jacek.placek 2017-12-05 20:18

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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