Algoritmo para añadir producto a expresiones algebraicas.
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
Publicar un comentario