Udało mi się napisać w C#. Może nie jest to najbardziej wydajny kod, ale działa(chyba) :D
Program oblicza wartość funkcji gdzie używane są operacje dodawania, odejmowania i potęgowania. Może komuś się przyda:
static int F(int x)
{
string wzor = "-4x^2-2+3x^2"; //Console.ReadLine();
int i = 0;
string liczba_przed_x="";
string liczba_po_znaku_potegi = "";
int wartosc_wyrazenia=0;
int wartosc_wzoru = 0;
char znak_operacji;
if (wzor[0].Equals('-'))
znak_operacji = '-';
else
znak_operacji = '+';
while (i < wzor.Length)
{
if(!wzor[i].Equals('x') && !wzor[i].Equals('+') && !wzor[i].Equals('-'))
{
liczba_przed_x = liczba_przed_x + wzor[i];
i++;
if(i>=wzor.Length || wzor[i].Equals('+') || wzor[i].Equals('-'))
{
wartosc_wyrazenia = Int32.Parse(liczba_przed_x);
if (znak_operacji == '+')
wartosc_wzoru = wartosc_wzoru + wartosc_wyrazenia;
else
wartosc_wzoru = wartosc_wzoru - wartosc_wyrazenia;
liczba_przed_x = "";
}
}
else if(i+1<wzor.Length && wzor[i].Equals('x') && wzor[i + 1].Equals('^'))
{
i = i + 2;
for(int j = i; j < wzor.Length; j++)
{
if (!wzor[j].Equals('+') && !wzor[j].Equals('-'))
{
liczba_po_znaku_potegi = liczba_po_znaku_potegi + wzor[j];
i++;
}
else
break;
}
wartosc_wyrazenia = Int32.Parse(liczba_przed_x) * (int)(Math.Pow(x, Int32.Parse(liczba_po_znaku_potegi)));
if (znak_operacji == '+')
wartosc_wzoru = wartosc_wzoru + wartosc_wyrazenia;
else
wartosc_wzoru = wartosc_wzoru - wartosc_wyrazenia;
liczba_przed_x = "";
liczba_po_znaku_potegi = "";
}
else if (wzor[i].Equals('x'))
{
wartosc_wyrazenia = Int32.Parse(liczba_przed_x) * x;
if (znak_operacji == '+')
wartosc_wzoru = wartosc_wzoru + wartosc_wyrazenia;
else
wartosc_wzoru = wartosc_wzoru - wartosc_wyrazenia;
i++;
liczba_przed_x = "";
liczba_po_znaku_potegi = "";
}
else if (wzor[i].Equals('+'))
{
znak_operacji = '+';
i++;
}
else if (wzor[i].Equals('-'))
{
znak_operacji = '-';
i++;
}
}
return wartosc_wzoru;
}