Biblioteca de funciones matemáticas MPArith


Esta es una impresionante biblioteca de funciones matemáticas en Delphi, para cálculos en punto flotante, con números racionales y operaciones en alta precisión con enteros.


Según el autor el código no es el más eficiente, pero a cambio es comprensible, compacto, open source y puede ser compilado a partir de Delphi 7.

Para ejecutar los demos hay que cambiar la extensión del archivo demo *.pas a *.dpr y se iniciará en modo consola.



Ejemplo:

Si queremos calcular la operación z=1/3 habría que hacer lo siguiente:



uses

BTypes, mp_types, mp_base, mp_supp, mp_real,sysutils;



var

p,r,s,t,z:mp_float;

r1:real;

begin



//se inicializan las variables

mpf_initp3(s,t,z,mpf_get_default_prec);

mpf_set_ext(s,1);

mpf_set_ext(t,3);

mpf_div(s,t,z);

writeln('Rdo con MPArit ',mpf_decimal(z,80));

mpf_clear3(s,t,z); //Se liberan las variables

//El rdo es: 3.333333333333333333333333333333333333333333E-1



//comparación con el método habitual para calcular 1/3

r1:=1/3.0;

writeln('Rdo con Delphi: '+FloatToStrF(r1,ffexponent,8,20));

//el Rdo es: 3.3333333E-1



end;





Descargar biblioteca de funciones


Pagina oficial












LIBROS:



Matemáticas, el fascinante mundo de los números



Matrix computations (Matematical Science)



Geometría analítica del plano y del espacio



Mecánica de fluidos



Geometría Afín y Euclidea

Dar capacidades de scripting a tu aplicacion

Hoy os presento el componente freeware Artformula que permite dar capacidades de scripting a una aplicación Delphi , para que un usuario pueda escribir y ejecutar código dentro de nuestro programa. En el programa demo asimila los scripts a macros y los utiliza para aplicarlos en un tRichEdit haciéndonos ver lo fácil que es utilizarlos en caso de que tengamos que programar un editor de textos.

Ejemplo de scripts:
1) Abrir un fichero y mostrar su contenido:

begin
print('This is a TArtFormula Demo');
print('==========================');
print('');
var 'f' end;
$f := file.new;
file($f).name := 'info';
file($f).open('read');
while not file($f).eof do
print(file($f).readln);
wend;
file.freeall;
end

2) Resolver una ecuación lineal utilizando matrices:

begin
var "n","i","j","k","d" end;
$n := input("Input dimension","Dimension of matrix:",3);

for $i:=1; $i <= $n; $i++ do
for $j:=1; $j <= $n; $j++ do
var "a"+$i+"_"+$j end;
$a[$i,$j] := input("Input element","a["+$i+","+$j+"] = ",if $i = $j ; 1 ; 0 end);
next;
next;

for $i:=1; $i <= $n; $i++ do
var "b"+$i, "x"+$i end;
$b[$i] := input("Input element","b["+$i+"] = ",1);
next;

for $i:=1; $i < $n; $i++ do
for $k:=$i+1; $k <= $n; $k++ do
$d:=$a[$k,$i]/$a[$i,$i];
for $j:=$i+1; $j <= $n; $j++;
$a[$k,$j]:=$a[$k,$j]-$a[$i,$j]*$d;
end;
$b[$k]:=$b[$k]-$b[$i]*$d;
next;
next;

for $i:=$n; $i >= 1; $i-- do
for $j:=$i+1; $j <= $n; $j++;
$b[$i]:=$b[$i]-$a[$i,$j]*$x[$j];
end;
$x[$i]:=$b[$i]/$a[$i,$i];
next;
print("Result:");
for $i:=1; $i <= $n; $i++; print("x["+$i+"] = "+$x[$i]); end;

end


El lenguaje de script tiene las siguientes características:
-Permite definir variables
-Tiene comandos de asignación
-Operadores de incremento y decremento
-Función Return
-Utiliza:
BEGIN...END
Sentencias IF
Bucles WHILE, UNTIL y LOOP
funciones de interface como: msg('text','caption',props), input('caption', 'text', defvalue)


El componente incorpora la posibilidad de evaluación de expresiones y el cálculo de derivadas con respecto a "x" o "y" de una función.
Las funciones que permite son las siguientes: (tomado de la ayuda del programa)

Arithmetic operation:

x + y, x - y, x * y, x / y, x % y (Mod), x ^ y (power), x\ y (Div)

Logical operation (true=1, false=0):
x > y, x < y, x >= y, x <= y, x = y, x <> y, ! x (not), x & y (and), x | y (or), x xor y

Bitwise operations:
x && y (band), x || y (bor), !!x (bnot), x bxor y, x >> y (shr), x << y (shl)

Predefined constants:
Pi = 3.1415926535897932385
True = 1
False = 0

Functions:

sin, cos, tan, sinh, cosh, tanh, asin, acos, atan, asinh, acosh, atanh, sqrt, exp, log, lg (log base 10), int (integer part of a number), frac (fractional part of a number), abs, sign, rnd, randomize,max(x,y...), min(x,y,...), count(x,y,...), sum(x,y,...), sumofsquares(x,y,...), avg(x,y,...), variance(x,y,...), variancep(x,y,...), stddev(x,y,...), stddevp(x,y,...) , iff(cond,x,y) (if cond = true then result = x else result = y), isnumber(x), chr(x), length(s), trim(s), trimleft(s), trimright(s) lowercase(s), uppercase(s), midstr(s,x,y), leftstr(s,x), rightstr(s,x), pos(s,t), code(s), format(s,x), formatf(s,x), stringofchar(c,n), concat(s1,s2,...), date(s), now, formatdate(s,d), year(d), month(d), day(d), hour(d), minute(d), second(d), millisecond(d), isleapyear(n), dayofweek(d), encodedate(y,m,d)


Autor:

Artem V. Parlyuk, e-mail:artsoft@nm.ru, http://artsoft.nm.ru

Descargar codigo



















Solucion del cubo de Rubik con Delphi








Este soft permite ver de una forma gráfica y paso a paso cada uno de los movimientos que hay que hacer para solucionar el cubo de Rubik.


Realmente es espectacular ver el cubo moviéndose en 3D siguiendo cada uno de los patrones calculados por el programa.


Las animaciones se implementan en Delphi "a pelo" sin utilizar módulos parecidos a OpenGL o GLScene, por lo que es muy instructivo ver cómo se hace la transformación de coordenadas del cubo 3D a 2D junto con su rotación.


Pulsando con el botón derecho del ratón sobre la imagen del cubo podremos rotarlo en la dirección que nos interese.

Si hacéis clic sobre el cubo en la ventana "Vue 3D"  veréis cómo se mueve en 3 dimensiones.

¿Sabías que hay muchos tipos de cubo de rubik, los puedes ver aquí ?



Descargar programa



Descargar codigo



Sitio Web


























Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...