[UDF] Algunas funciones de matemáticas y física

y programas personales para otros como tu, puede que te corrijan ;)
Responder
Avatar de Usuario
Aklxao
Aprendiz de Mago
Mensajes: 30
Registrado: 04 Abr 2008, 13:36
Ubicación: Linares - Jaen

[UDF] Algunas funciones de matemáticas y física

Mensaje por Aklxao »

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 :smt003

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
Si hay algun fallo, o alguna función que se le pueda añadir mas... no duden... ¡Comenten! :smt023

Saludos!!! :smt006

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 :smt003
Querer es poder... Recuerdalo, podras hacer cosas extraordinarias...
Avatar de Usuario
gna08
Hacker del Foro
Mensajes: 379
Registrado: 27 Sep 2008, 18:51
Ubicación: Cordoba, Argentina

Re: [UDF] Algunas funciones de matemáticas y física

Mensaje por gna08 »

Muy bueno, no lo puedo probar, xq estoy en el mobil pero cuando tenga acceso a un pc lo hago,
saludos
Aunk no m Buskes, Seguro m enkontras!
Responder