recorre el array con la expresion total y vete comparando cada caracter con los distintos operadores.
Estos son: '(', ')', '+'. '-', '^', '*', '=' y '/'
no se si se me queda alguno.
estos son los simbolos que separan los números
guarda en arreglos diferentes cada operacion que componga la expresion final y crea una estructura de capas.
ejemplo: (2+3)*(5-1)=
arreglo1={3, +, 2}
arreglo2={5, -, 1}
arreglo3={soluciona(arreglo1), *, soluciona(arreglo2)}
consejo: en vez de arreglos puedes utilizar estructuras que facilitara el trabajo
tendras que tener cuidado con el orden (esto es lo mas dificil)
consejo: crea una gerarquia de prioridad en las operaciones (determina cuales se ejecutaran antes y cuales despues si no existen parentesis) piensa que si * es prioritario sobre +:
2+3*2+1=9
(2+3)*(2+1)=15
tambien puedes determinar una prioridad de izq a der. o viceversa pero yo te recomiendo una gerarquia como hacen por ejemplo los compiladores.
consejo: no almacenes los parentesis, solo utilizalos para ordenar las operaciones.
Como ves, el operador de alguna de las estructuras será un numero que resultara de resolver otra operacion. Este numero deberas asignarle luego. Como se ve arriba yo crearia una funcion que recoja como parametro una estructura de las que has creado ( que podria ser:
struct operacion{
double operando1;
unsigned char operando;
double operando2;
}
).
Por supuesto esto solo es un idea. Hay miles de formas de hacerlo. Tu puedes basarte en esta o en otras para implementar tu programa.
Por supuesto nadie te va a hacer el codigo. Asique si de aqui en adelante te queda alguna duda, haz preguntas concretas diciendo como has ido trabajando y donde te has quedado atascado.
Suerte y espero que te sirva de ayuda.
Para cualquier duda, ya sabes...