// // // // // // // // // // // // // // // // // // // // // // // // // //
------------------------------------------Versi�n 1.0 en Espa�ol ------------------------------------------Script que simula un matem�tico muy simple con operaciones aritm�ticas b�sicas y algunos c�lculos algunos no de mucho inter�s pero curiosos de programar -------------------------------------------06 - Noviembre - 2008 A�adida las funciones "Secuencia de enteros" y "Positivo o Negativo" Y las operaciones aritm�tica b�sicas. Totalmente operativas. -------------------------------------------11 - Noviembre - 2008 Corregido la divisi�n entre 0, no se puede dividir entre 0 -------------------------------------------22 - Noviembre - 2008 El matem�tico ya sabe adivinar los n�meros primos Arreglado un peque�o bug en la secuencia de enteros -------------------------------------------24 - Noviembre - 2008 A�adida la posibilidad de calcular el factorial de N -------------------------------------------Hecho por Rokimoki (eAthena Forums) eMail:
[email protected] Gracias especiales a: Nymphicus, KeyWorld, m3ttwur5t y KingKronos por ayudarme a resolverme dudas en el foro de soporte. --------------------------------------------
prontera,147,169,5 script Matem�tico mes "[Matem�tico]"; mes "�Qu� quieres calcular hoy?"; next; menu "La secuencia de enteros",Lsecuencia, "El n�mero primo",Lprimo, "Positivo o negativo",Lposneg, "El Factorial de N",LFactorial, "Sumar",Lsumas, "Restar",Lrest, "Dividir",Ldiv, "Multiplicar",Lmult, "Nada",Lnada; end;
61,{
Lsecuencia: mes "[Matem�tico]"; mes "Vamos a averiguar el n�mero m�s alto de los siguientes n�meros que va a introducir"; next; mes "[Matem�tico]"; mes "Escribe una secuencia de enteros: (0 para acabar, se pueden negativos)"; do { input (.@Integer, -2147483646 , 2147483646); if(.@Integer > .@Aux || !.@Aux) set .@Aux,.@Integer; } while(.@Integer); next;
mes "[Matem�tico]"; mes "El valor m�ximo introducido es: "+.@Aux; close; Lprimo: mes "[Matem�tico]"; mes "Vamos a averiguar si el siguiente n�mero que va a introducir es primo o compuesto"; next; mes "[Matem�tico]"; mes "Introduce un n�mero natural: (s�lo positivos, rango de 1 a 2147483646)"; next; input .@primo, 1 , 2147483646; set .@resultprimo, callfunc("es_primo",.@primo); mes "[Matem�tico]"; if( .@resultprimo == -1 ) mes "No es v�lido !"; close2; mes "[Matem�tico]"; mes "El n�mero "+.@primo +" es "+ ( ( .@resultprimo )? "primo":"compuesto" ) +"."; close; Lposneg: mes "[Matem�tico]"; mes "Te dir� si un n�mero es positivo o negativo o incluso si es cero."; next; mes "[Matem�tico]"; mes "Introduce un n�mero entero."; input (.@Num, -2147483646 , 2147483646); next; if(.@Num > 0) goto Lpos; if(.@Num < 0) goto Lneg; if(.@Num == 0) goto Lzero; Lpos: mes "[Matematician]"; mes "El n�mero "+.@Num +" es positivo."; close; Lneg:
mes "[Matematician]"; mes "El n�mero "+.@Num +" es negativo."; close;
Lzero: mes "[Matematician]"; mes "El n�mero "+.@Num +" es cero."; close; LFactorial: mes "[Matem�tico]"; mes "Calculo el factorial de cualquier n�mero."; next; mes "[Matem�tico]"; mes "Introduce un n�mero. (S�lo natural, rango de 0 a 12)"; mes "Porque a partir de 12 ya me duele la cabeza";
input (.@Fact, 0, 12); set .@n, 1; for (set @i, 1; @i <= .@Fact; set @i, @i + 1) { set .@n, .@n * @i; } next; mes "[Matem�tico]"; mes "El factorial de "+.@Fact +" es "+.@n; close; Lsumas: mes "[Matem�tico]"; mes "Introduce el primer miembro de la suma."; input (.@Sum1, -2147483646 , 2147483646); next; mes "[Matem�tico]"; mes "Introduce el segundo miembro de la suma."; input (.@Sum2, -2147483646 , 2147483646); next; set .@ResultSum,.@Sum1 + .@Sum2; mes "[Matem�tico]"; mes "El resultado es: "+.@ResultSum; close; Lrest: mes "[Matem�tico]"; mes "Introduce el primer t�rmino de la resta."; input (.@Rest1, -2147483646 , 2147483646); next; mes "[Matem�tico]"; mes "Introduce el segundo t�rmino de la resta."; input (.@Rest2, -2147483646 , 2147483646); next; set .@ResultRest,.@Rest1 - .@Rest2; mes "[Matem�tico]"; mes "El resultado es: "+.@ResultMult; close; Ldiv:
mes "[Matem�tico]"; mes "Introduce el Numerador de la divisi�n."; input (.@Divisor, -2147483646 , 2147483646); next; mes "[Matem�tico]"; mes "Introduce el Denominador de la divisi�n."; input (.@Denominador, -2147483646 , 2147483646); if(.@Denominador == 0) goto LNo; LNo:
mes "[Matem�tico]"; mes "Que sepas que no se puede dividir entre cero."; close;
next; set .@ResultDiv,.@Divisor / .@Denominador; mes "[Matem�tico]"; mes "El resultado es: "+.@ResultDiv +"No doy decimales, s�lo la parte entera de la divisi�n.";
close; Lmult: mes "[Matem�tico]"; mes "Introduce el primer t�rmino de la multiplicaci�n."; input (.@Mult1, -2147483646 , 2147483646); next; mes "[Matem�tico]"; mes "Introduce el segundo t�rmino de la multiplicaci�n."; input (.@Mult2, -2147483646 , 2147483646); next; set .@ResultMult,.@Mult1 * .@Mult2; mes "[Matem�tico]"; mes "El resultado es: "+.@ResultMult; close; Lnada: mes "[Matem�tico]"; mes "Bueno que sepas que estoy aqu� para calcular lo que necesites."; close; } function script es_primo { if( getarg(0) < 2 ) return -1; if( getarg(0) == 2 ) return 1; if( !(getarg(0) % 2) ) return 0; for(set @i, 3; @i <= sqrt(getarg(0)); set @i, @i + 2) { if( !(getarg(0) % @i) ) return 0; } return 1; }