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.
- Rejestracja:ponad 7 lat
- Ostatnio:ponad 6 lat
- Postów:64
0
edytowany 1x, ostatnio: Patryk27

Patryk27
Poprawiłem formatowanie - pamiętaj o wrzucaniu wzorów, równań itd. w backticki.

lion137
Co Chcesz, nie Wiesz jak przygotować string do algorytmu konwersji, nie Znasz algorytmu, czy i to i to?
- Rejestracja:ponad 7 lat
- Ostatnio:ponad 6 lat
- Postów:64
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;
}
- Rejestracja:ponad 7 lat
- Ostatnio:ponad 6 lat
- Postów:64
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:)
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.