compusystems
Registrado: 05 Oct 2012 Mensajes: 13 Ubicación: Colombia
| Publicado: 10/10/2012 2:40 pm | | | Título: Spn:Motor de Matemáticas desde0 Eng:Math Engine from scratch |
| [Proyecto] Spn:Motor de Matemáticas desde 0 Eng:Math Engine from scratch.
Blog del autor original del proyecto
Lord Pakus Blog:
Lord Pakus inicio el proyecto de Math Engine from scratch con bibliotecas de Vectores y Matrices, que me parece un buen pedestal para continuarlo, y por que no de pronto en un futuro se convierta en un motor de calculo numérico y simbólico CAS (Computer Algebra System) como el famoso xCAS http://www-fourier.ujf-grenoble.fr/~parisse/giac.html
Para expandir el proyecto, lo primero es aumentar el numero de funciones de la biblioteca de Vectores y Matrices, como se haría esto?, si conocen el paquete matematico MatLab acronimo de MatrixLaboratory verán que se opera en base a vectores, entonces hay muchas funciones que podemos emularlas en nuestro paquete, pero para esto requiero la ayuda de vosotros...
Necesito una biblioteca en C/C++ que maneje cadenas de texto, por que la entrada de datos sera lineal, como la entrada de datos de muchos paquetes matematicos

y para este caso en formato de vector/matriz, por ejemplo para iniciar
MakeVector( Vector0, "[ 11, 6, 3, 4 ]" ); crearía un arreglo con nombre identificador o variable del primer argumento de la función MakeVector asi:
float Vector0[ 4 ] = { 11.0f, 6.0f, 3.0f, 4.0f };
análogamente para una matriz (vector de vectores o un también llamado array bidimensional)
MakeMatrix( Matrix3, "[ [ 1, 2, 3, 4.3 ], [ 5, 6, 7.9, 8 ]]" ); Se decodifica en:
float Matrix0[ 2 ][ 4 ] = { { 1.0f, 2.0f, 3.0f, 4.3f }, { 5.0f, 6.0f, 7.9f, 8.0f } };
[ [ 1, 2, 3, 4.3 ], [ 5, 6, 7.9, 8 ]] puede ser vista como
[ [ 1, 2, 3, 4.3 ] [ 5, 6, 7.9, 8 ]]
Otro tipo de entrada de matrices para no usar muchos corchetes
MakeMatrix( Matrix3, "[ 1, 2, 3, 4.3 ; 5, 6, 7.9, 8 ]" ); Se decodifica en:
float Matrix0[ 2 ][ 4 ] = { { 1.0f, 2.0f, 3.0f, 4.3f }, { 5.0f, 6.0f, 7.9f, 8.0f } };
EL punto y coma dentro de "[ 1, 2, 3, 4.3 ; 5, 6, 7.9, 8 ]" indica nueva fila
Redactando ... por favor espere
Por que la entrada de datos en cadena, para que el programa sea mas intuitivo o mas cercano al lenguaje matematico
EL primer intento codigo
makeVector_version00.cpp
| Código: | #include <iostream> using namespace std;
int *Vector_IdName; int Vector, Vector_Dim; int main( int argc, char *argv[ ] ){
cout << "Ingresa el tamanio del vector: Vector_Dim="; cin >> Vector_Dim; Vector_IdName = new int[ Vector_Dim ]; cout << "Ingresa cada elemento del vector: luego [ENTER] para cada uno" << endl; for( int i = 0; i < Vector_Dim; i++ ){ cin >> Vector_IdName[ i ]; } cout << "Vector0 = [ "; for( int i = 0; i < Vector_Dim; i++ ){ cout << Vector_IdName[ i ] << " "; } cout << "]" << endl; //delete[] Vector_IdName; return 0; }
// Meta //int MakeVector( *Vector_IdName, Vector ){ // Help //}
//MakeVector( Vector0, "[ 11, 6, 3, 4 ]" ); crearía un arreglo con nombre identificador o variable del primer argumento de la función MakeVector asi: //float Vector0[ 4 ] = { 11.0f, 6.0f, 3.0f, 4.0f };
} |
La anterior manera de entrar dato es elemento por elemento y lo que se desea es en una sola sentencia
Basado en Operaciones con matrices – Clase Matriz en c++ del blog http://ronnyml.wordpress.com/2009/07/04/operaciones-con-matrices-clase-matriz-en-c/
Entonces en resumen es decodificar la cadena "[ 11, 6, 3, 4 ]" para convertirla en Array
2do avance
| Código: | #include <iostream> using namespace std; #include <string.h>
int main( int argc, char *argv[ ] ){
char vector_string[ ] = "[ [ 1, 2, 3, 4.3 ], [ 5, 6, 7.9, 8 ]]"; char *pvector_string; cout << "Splitting string" << vector_string << "into tokens:\n" << endl; pvector_string = strtok( vector_string, " [,]" ); // Help1: Que subcadena se obtuvo? while( pvector_string != NULL ){ cout << pvector_string << endl; // Despliega subcadenas de texto pvector_string = strtok( NULL, " [,]" ); // Help2: Null equivale a la ultima posicion } return 0; }
// Input: "[ [ 1, 2, 3, 4.3 ], [ 5, 6, 7.9, 8 ]]" // Output: 1 2 3 4.3 5 6 7.9 8
// Meta: // Input: MakeMatrix( Matrix3, "[ 1, 2, 3, 4.3 ; 5, 6, 7.9, 8 ]" ); // Output: float Matrix0[ 2 ][ 4 ] = { { 1.0f, 2.0f, 3.0f, 4.3f }, { 5.0f, 6.0f, 7.9f, 8.0f } };
|
Basado en: http://www.cplusplus.com/reference/string/string/ |
|