[UDF] Algunas funciones de matemáticas y física
Publicado: 18 Mar 2010, 23:19
Bueno, despues de mucho tiempo sin aparecer por el foro les traigo mi primer UDF. Venía de casa despues del instituto y pensé en hacer las funciones Factorial y Combinatoria. Que por lo que veo por aqui hay a la calculadora de Odraude le vendrían muy bien estas dos funciones...
Las funciones de fisica son un poco simples... pero es lo que se da ahora en el bachiller
El UDF tiene 6 funciones, las dos dichas anteriormente mas:
- KmH_a_MS: pasa de Km/h a m/s y vicecersa
- Raíz: hace la raiz de un numero
- Velocidad_Media: Calcula la velocidad media de u nmóvil
- Ley_Ohm: La famosa Ley de Ohm, con esta funcion se puede averiguar una incognita de las 3 posibles.
Les dejo el código:
Si hay algun fallo, o alguna función que se le pueda añadir mas... no duden... ¡Comenten!
Saludos!!!
P.D.: Yo entiendo bien el portugues, pero no se hablarlo... se hablar gallego que se parece muchisimo al portugues, lo digo porque he visto que hay gente que habla portugues por aqui, a ver si los proximos programas que haga los hago en multilenguaje
Las funciones de fisica son un poco simples... pero es lo que se da ahora en el bachiller
El UDF tiene 6 funciones, las dos dichas anteriormente mas:
- KmH_a_MS: pasa de Km/h a m/s y vicecersa
- Raíz: hace la raiz de un numero
- Velocidad_Media: Calcula la velocidad media de u nmóvil
- Ley_Ohm: La famosa Ley de Ohm, con esta funcion se puede averiguar una incognita de las 3 posibles.
Les dejo el código:
Código: Seleccionar todo
;****************************************************************
;
; Todas estas funciones han sido creadas por Ángel Miguel García Vico.
; Son totalmente Freeware y no hay ninguna restricción en su uso
;
;*****************************************************************
#include-once
;****************************************************************
; Funcion Factorial($numero)
;
;Realiza el factorial de un número.
; $numero = número a factorizar
;
; Valores de @error:
; @error = 1 Si el número es decimal.
;****************************************************************
Func Factorial($numero)
If IsInt($numero)= 0 Then
SetError(1)
EndIf
If $numero > 0 Then
For $a = $numero -1 To 1 step -1
$numero = $numero * $a
Next
ElseIf $numero < 0 Then
For $a = $numero +1 To -1 step +1
$numero = $numero * $a
Next
ElseIf $numero = 0 Then
$numero = 1
EndIf
Return $numero
EndFunc
;**********************************************************+
; Funcion Raiz($base, $Exponente)
;
;Realiza la raíz enésima ($Exponente) de un número ($base)
;@error = 1 ; si al ser el exponente de la raiz par y el radicando negativo
;
;***********************************************************
Func Raiz($base,$Exponente)
$ExponenteR = 1 / $Exponente
$par = $Exponente / 2
If IsInt($par) and $base < 0 Then
SetError(1)
Else
If $base < 0 Then
$base = Abs($base)
$Resulta = $base ^ $ExponenteR
$Result = "-" & $Resulta
Else
$Result = $base ^ $ExponenteR
EndIf
Return $Result
EndIf
EndFunc
;******************************************************************
; Funcion Combinatoria($m,$n)
; Realiza el combinatorio de dos números.
;
; $m: Término Superior de la combinatoria
; $n: Término Inferior de la combinatoria
;
; Valores de @error:
; @error = 1 Si el termino superior, inferior o ambos, son negativos.
; @error = 2 Si el termino superior, inferior o ambos, son decimales.
; @error = 3 Si el término Inferior es mayor que el superior
;
;**********************************************************************
Func Combinatoria($m,$n)
If $m < 0 Or $n < 0 Then SetError(1)
If not IsInt($m) Or not IsInt($n) Then SetError(2)
If $m < $n Then SetError(3)
If $n = 0 Or $n = $m Then
$resultado = 1
Else
local $a = Factorial(Abs($m))
$c = $m - $n
Local $resta = Factorial(Abs($c))
Local $resultado = $a / (Factorial($n) * $resta)
EndIf
Return $resultado
EndFunc
;*********************************************************************************
; Función KmH_a_MS($velocidad, [$modo = "1"])
; Pasa la velocidad de Km/h al sistema internacional (m/s) y viceversa
;
; Valores para $modo:
; $modo = 1 (Por Defecto): Pasa de Km/h a m/s
; $modo = 2: Pasa de m/s a Km/h
;
; Valores de @error:
; @error = 1 si $modo no es ni 1 ni 2
; ********************************************************************************
Func KmH_a_MS($velocidad,$modo = "1")
If $modo = 1 Then
$resultado = $velocidad / 3.6
Elseif $modo = 2 Then
$resultado = $velocidad * 3.6
Else
SetError(1)
EndIf
Return $resultado
EndFunc
;********************************************************************************
; Función Velocidad_Media($Espacio,$Tiempo)
; Obtiene la velocidad media de un móvil
;********************************************************************************
Func Velocidad_Media($Espacio,$Tiempo)
$resultado = $Espacio / $Tiempo
Return $resultado
EndFunc
;*********************************************************************************
; Función Ley_Ohm($V,$I,$R,$incognita)
; Obtiene el voltaje ($v), la intensidad ($I) o la resistencia ($R) de un circuito a través de la Ley de Ohm
;
; Valores: $V = Voltaje (En Voltios)
; $I = Intesidad (En Amperios)
; $R = Resistencia (En Ohmios)
; Dejar un valor de los tres en blanco para calcularlo.
; $incognita = Valor a obtener
; Valores Para $incognita:
; - "R" = Calcula la resistencia (La devuelve en Ohmios.
; - "I" = Calcula la intensidad (La devuelve en Amperios)
; - "V" = Calcula el voltaje (Lo devuelve en Voltios)
;
; Valores para @error:
; @error = 1 Si alguna si hay mas de una incognita
; @error = 2 Si No hay valores para $incognita o este es erróneo
;**************************************************************************************************
Func Ley_Ohm($V = "",$I = "", $R = "",$incognita = "")
If not $incognita = "I" or not $incognita = "R" or not $incognita = "V" Then SetError(2)
If $incognita = "I" And $R = "" OR $incognita = "I" And $V = "" Or $incognita = "I" And $V = "" And $R = "" Then
SetError(1)
ElseIf $incognita = "R" And $I = "" OR $incognita = "R" And $V = "" Or $incognita = "R" And $V = "" And $I = "" Then
SetError(1)
ElseIf $incognita = "V" And $R = "" OR $incognita = "V" And $I = "" Or $incognita = "V" And $R = "" And $I = "" Then
SetError(1)
EndIf
If $incognita = "I" Then
$resultado = $V / $R
ElseIf $incognita = "V" Then
$resultado = $I * $R
ElseIf $incognita = "R" Then
$resultado = $V / $I
EndIf
Return $resultado
EndFunc
Saludos!!!
P.D.: Yo entiendo bien el portugues, pero no se hablarlo... se hablar gallego que se parece muchisimo al portugues, lo digo porque he visto que hay gente que habla portugues por aqui, a ver si los proximos programas que haga los hago en multilenguaje