miércoles, 1 de julio de 2015

Primeros pasos programando con MAXIMA ...

Els primers passos programant amb MAXIMA
Primera cosa ...

Editem la funció que anomenem "programa_extremadament_senzill"
(%i5) programa_extremadament_senzill():=
(print("hola")
)$
Depurem els possibles errors i fem actuar la funció escrivint l'entrada
(%i6) programa_extremadament_senzill();
Obtenint ...
hola
(%o6) hola

Observem que les entrades de l'usuari es designen amb el símbol del sistema %i i les sortides amb el símbol %o, convenientment numerades.

Exemple 1 (totes les variables són globals)

(%i3) programa_senzill_1(a,b):=
(
s:a+b,
print("suma de a i b =",s)
)$
(%i4) programa_senzill_1(2,3);
suma de a i b = 5
(%o4) 5


Exemple 2 (els paràmetres d'entrada a i b són variables globals, mentre que el resultat s és una variable local)

(%i1) programa_senzill_2():=
block([s],
a:read("entreu el primer sumand"),
b:read("entreu el segon sumand"),
s:a+b,
print("suma de a i b =",s)
)$

(%i2) programa_senzill_2();
entreu el primer sumand 1;
entreu el segon sumand 2;
suma de a i b = 3
(%o2) 3

Observem que les variables locals d'una funció (aquí, "programa_senzill_2") - en aquest, l'única variable local és s - apareixen, després de block( entre claudàtors - block([s],... -, separades per comes si n'hi ha més d'una. El parèntesi "(" amb què hem començat el "block" - "block(" - cal tancar-lo necessàriament al final. El símbol de l'acabament "$" indica a l'interpret que no volem eco del sistema - llevat de la comunicació dels possibles errors - un cop hàgim validat la funció

Exemple 3 (totes les variables són locals)

(%i1) programa_senzill_3():=
block([s,
a:read("entreu el primer sumand"),
b:read("entreu el segon sumand")],
s:a+b,
print("suma de a i b =",s)
)$

(%i2) programa_senzill_3();
entreu el primer sumand 1;
entreu el segon sumand 2;
suma de a i b = 3
(%o2) 3

Treballant amb fitxers de funcions que prèviament hem programat
Podem fer servir un bloc de notes per editar codi font de les funcions
que volem fer servir en una sessió de càlcul amb MAXIMA, a més, naturalment,
de les moltes que ja té incorporades. A mode d'exemple,
he escrit el codi de dues funcions molt simples,
funcio_que_multiplica() i funcio_potencial(), en un mateix fitxer de text amb extensió .mac: prod.mac
Juntament amb el codi font de les funcions, podem posar comentaris abastant una o vàries línies, a l'estil de C o Java; per exemple, /* això només és un comentari */, és a dir, obrint amb "/*" i tancant amb "*/"

(contingut del fitxer prod.mac)

/* multiplicació de dos nombres */
funcio_que_multiplica():=
block([p,
a:read("entreu el primer factor"),
b:read("entreu el segon factor")],
p:a*b,
print("a x b =",p)
)

/* potència de dos nombres */
funcio_potencial():=
block([w,
a:read("entreu la base de la potència"),
b:read("entreu l'exponent")],
w:a^b,
print("a^b =",w)
)


Per fer ús d'aquest fitxer amb les funcions que hem programat, carreguem el fitxer prod.mac des d'una sessió de MAXIMA
(%i8) load("e:/taller_maxima/ex_160807/prod.mac");
(%o8) e:/taller_maxima/ex_160807/prod.mac

I, si s'escau, després de depurar el codi, emprem les funcions que conté:

(%i9) funcio_que_multiplica();
entreu el primer factor 4;
entreu el segon factor 2;
a x b = 8
(%o9) 8

(%i10) funcio_potencial();
entreu la base de la potència 2;
entreu l'exponent 3;
a^b = 8
(%o10) 8

[nota del autor]