Algoritmo para añadir producto a expresiones algebraicas.

Qué es un algoritmo informático | OpenWebinars

Muchas veces para realizar programas que incluyan expresiones matemáticas nos encontramos con que normalmente la escritura del producto es omitida, por lo que es importante que exista un programa que encuentre esas ocurrencias y añade el producto.

El algoritmo está escrito en Dart, pero es fácil adaptarlo a cualquier otro lenguajes.


String addProduct(String entry, {String variable = 'x'}) {
  entry = entry + ' ';
  int posVar = 0, posToken, keep = -1;
  List<String> _tokens = ['*', '/', '+', '-', '^', '(', ')', ' '];
  // Caracteres junto a los cuales no se les agrega el producto

  while (keep != posVar) {
    // Mientras la posición de la variable cambie, se continúa con la ejecución.
    keep = posVar;
    posVar = entry.indexOf(variable, keep + 1);
    try {
      posToken = _tokens.indexOf(entry[posVar - 1]);
      // Detiene la ejecución si sólo hay un caracter
    } catch (e) {
      break;
    }
    if (posToken == -1) {
      entry = entry.substring(0, posVar) + '*' + entry.substring(posVar);
      posVar += 1;
      // se añade el producto posterior y se recorre una unidad la posición de la variable
    }
    posToken = _tokens.indexOf(entry[posVar + 1]);
    if (posToken == -1) {
      entry =
          entry.substring(0, posVar + 1) + '*' + entry.substring(posVar + 1);
      // Añade el producto anterior
    }
  }
  try {
    // Añade el producto a los paréntesis
    for (int i = entry.indexOf(')');
        i < entry.length;
        i = entry.indexOf(')', i + 1)) {
      if (i == -1) {
        break;
      } else if (entry[i + 1] == '(') {
        entry = entry.substring(0, i + 1) + '*' + entry.substring(i + 1);
      }
    }
  } catch (e) {
    print("Error");
  }
  return '$entry';
}

Salida

(22x^2-13)(2xsin(ax))
(22*x^2-13)*(2*x*sin(a*x))

Comentarios

Entradas más populares de este blog

¿Por qué México ha fracasado?