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
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...