Cómo escribir un programa en C para resolver ecuaciones simples

Entonces, ¿quieres hacer operaciones aritméticas simples binarias usando números (números enteros?)

La notación que utilizamos (reglas PEMDAS / BODMAS) se conoce como notación infija.

  • Antes de pasar al lado de las operaciones, debe tener especial cuidado con su dominio. ¿Desea poder usar enteros (en cuyo caso necesitará manejar el operador unario menos).
  • Debe preocuparse por las limitaciones internas de las representaciones numéricas de su lenguaje de programación.
  • Debe especificar cómo manejaría el desbordamiento, la división de subflujo por cero y otras excepciones.
  • Antes de llegar al núcleo del algoritmo, un enfoque es analizar toda su entrada y usar una representación interna: un árbol binario es la estructura de datos más utilizada para este tipo de problema.
  • Sin embargo, antes de poder analizar, debe convertir la cadena de entrada en tokens: números (¿está manejando números negativos, qué pasa con los decimales?) Y símbolos de entrada.
  • Debe manejar los errores en la fase de análisis léxico (tokenizer) y la fase de análisis.
  • ¡El núcleo del algoritmo ahora es relativamente fácil! Debe usar el mecanismo correcto para recorrer el árbol y calcular sus resultados intermedios, seguir acumulándolos, y escribir la respuesta cuando haya recorrido todo el árbol.
  • Una alternativa al uso de un árbol binario y una fase de análisis distinta frente a la fase de cálculo, es usar una pila (esencialmente harás un infijo para prefijar la transformación de los tipos sobre la marcha) y usar operaciones push y pop en las coyunturas apropiadas.

He dado un resumen general del análisis requerido para resolver el problema. Dejando la solución real como ejercicio para el lector. Si el tiempo lo permite, podría poner una implementación en un lenguaje de nivel superior como prototipo.

Las soluciones numéricas a las ecuaciones, los ordenamientos lineales, las raíces complejas, las series de Fourier y muchas otras soluciones o construcciones se pueden encontrar mediante una búsqueda de punto fijo. Suponga que x varía sobre un dominio de objetos que contienen lo que busca.

Escriba las subrutinas FIRST (x) que le da a x un valor inicial, NEXT (x) que devuelve el siguiente valor xx para x, y FOUND (x) que es T si x = xx es lo que busca, y luego enciérrelas en una administración programa..

PRIMERO (x)
mientras no (ENCONTRADO (x)) hacer SIGUIENTE (x) od
VUELTA (x).

SIGUIENTE puede requerir algunas matemáticas. Para un NewtonSearch de una raíz para f, NEXT (x) devuelve xf (x) / (df (x) / dx), y FOUND (x) es | f (x) | <0.000001 o algo similar. Para BubbleSort con x = (.. b, a, ..) donde a

Primero, lo importante es darse cuenta de que todos esos símbolos representan operadores binarios. Esto es importante porque una forma común de hacerlo implica árboles binarios . Si no está familiarizado con ellos, es posible que desee examinarlos.

La técnica consiste en construir un árbol de expresión. Cada número y operador crean nodos en el árbol, que luego se pueden calcular. Proporcionaré algunos ejemplos:

3 + 4. Primero analizamos 3 y vemos que es un operando y creamos un nodo de árbol para él. Luego analizamos el ‘+’ y vemos que es un operador. Creamos un nodo de árbol y configuramos el nodo anterior (el que tiene 3) para que sea el hijo izquierdo. Luego analizamos el 4 y creamos un nuevo nodo. Esto se asignará al niño correcto que genera el árbol a continuación:

+

/ \

3 4

Ahora atravesamos el árbol el nodo de hoja más profundo. En este caso serían 3 o 4 ya que están a la misma profundidad. Subimos el árbol al operador y realizamos la operación con los dos operandos. El valor luego reemplaza el operando y continuamos haciéndolo mientras todavía hay operaciones. Para este ejemplo, el ‘+’ se reemplaza con 7, y como no hay más operaciones, esta es la respuesta.

3 + (4 × 5). Primero te mostraré cómo se ve el árbol resultante y luego explicaré cómo manejar los paréntesis. Por favor, disculpe el formato:

+

/ \

3 ×

/ \

4) 5 5

El truco para hacer paréntesis es comenzar un árbol nuevo y separado y hacer que la raíz de ese árbol nuevo sea hija de otro árbol. En el caso anterior, convertimos los paréntesis en el elemento secundario derecho del operador ‘+’.

Ahora evaluando bajamos el árbol hasta la hoja más baja (4 o 5) y subimos una al operador. Luego realizamos la operación (4 × 5) y reemplazamos la ‘×’ con 20. Esto nos dejará con:

+

/ \

3 20

Como todavía hay operadores, continuamos. 3 + 20 reemplaza el ‘+’. Como solo hay un nodo y no es un operador, debe ser la respuesta … 23.

Dejaré al lector manejar los casos de ecuaciones separadas sin paréntesis [3 + 8 ÷ 4] y cómo manejar números negativos.

¡Buena suerte!

#include

vacío principal()

{

flotante y = (Expresión);

}