//Funzioni:
#include <cmath>
#include <iostream>
using namespace std;
//Funzione "Pi di x", ovvero quanti numeri primi da 1 a x.
int Primidi (int a)
{
int b,d,c;
b=1;
d=0;
while (b<a)
{
b++;
c=2;
while (((b%c)!=0) && (c<=b))
c++;
if (c>=b)
{
d++;
}
}
return d;
}
//Calcola numero divisori
int numdiv (int a)
{
if (a<0)
a=-a;
int b,c=0;
b=1;
while (a>=b)
{
if (a%b ==0)
{
c++;
b++;
}
else b++;
}
return c;
}
//Fattoriale
double facto(int a)
{
if (a>0)
{
int i;
float b=1;
for (i=1;i<=a;i++)
{
b=b*i;
}
return b;
}
}
//Main
float Fun (char a , float x)
{
/*Trigonometria*/
if (a=='s')
return sin(x);
if (a=='c')
return cos(x);
if (a=='t')
return tan(x);
if (a=='a')
return asin(x);
if (a=='b')
return acos(x);
if (a=='d')
return atan(x);
if (a=='h')
return sinh(x);
if (a=='i')
return cosh(x);
if (a=='j')
return tanh(x);
/*Logaritmi*/
if (a=='L')
return log10(x);
if (a=='N')
return log(x);
if (a=='D')
return (log(x))/(log(2.0));
/*Varie*/
if (a=='A')
return fabs(x);
if (a=='I')
return (int(x));
if (a=='P')
return Primidi(x);
if (a=='!')
return facto(int(x));
if (a=='V')
return numdiv(int(x));
/*Algebra*/
if (a=='R')
return sqrt(x);
if (a=='C')
return pow(float(x),float((1/3.0)));
if (a=='Q')
return pow(float(x),float((1/5.0)));
}
//Funione a tre parametri char che come risultato ridà il carattere-funzione da mettere nell'rpn
char charfun (char a, char b, char c)
{
int bo=0;
/*Trigonometria*/
if ((a=='s')&&(b=='i')&&(c=='n')){bo++;
return 's';}
if ((a=='c')&&(b=='o')&&(c=='s')){bo++;
return 'c';}
if ((a=='t')&&(b=='a')&&(c=='n')){bo++;
return 't';}
if ((a=='a')&&(b=='s')&&(c=='i')){bo++;
return 'a';}
if ((a=='a')&&(b=='c')&&(c=='s')){bo++;
return 'b';}
if ((a=='a')&&(b=='t')&&(c=='g')){bo++;
return 'd';}
if ((a=='s')&&(b=='n')&&(c=='h')){bo++;
return 'h';}
if ((a=='c')&&(b=='s')&&(c=='h')){bo++;
return 'i';}
if ((a=='t')&&(b=='a')&&(c=='h')){bo++;
return 'j';}
/*Logaritmi*/
if ((a=='l')&&(b=='o')&&(c=='g')){bo++;
return 'L';}
if ((a=='l')&&(b=='n')&&(c=='e')){bo++;
return 'N';}
if ((a=='l')&&(b=='o')&&(c=='d')){bo++;
return 'D';}
/*Varie*/
if ((a=='a')&&(b=='s')&&(c=='s')){bo++;
return 'A';}
if ((a=='i')&&(b=='n')&&(c=='t')){bo++;
return 'I';}
if ((a=='p')&&(b=='r')&&(c=='m')){bo++;
return 'P';}
if ((a=='f')&&(b=='a')&&(c=='c')){bo++;
return '!';}
if ((a=='d')&&(b=='i')&&(c=='v')){bo++;
return 'V';}
/*Algebra*/
if ((a=='r')&&(b=='a')&&(c=='d')){bo++;
return 'R';}
if ((a=='r')&&(b=='a')&&(c=='c')){bo++;
return 'C';}
if ((a=='r')&&(b=='a')&&(c=='q')){bo++;
return 'Q';}
if (bo==0)
{
return NULL;
}
}