(Visual Basic) Calcular raíz cuadrada sin funciones

Código de programas en lenguajes varios

(Visual Basic) Calcular raíz cuadrada sin funciones

Notapor AntonioG » Vie Ago 21, 2009 6:01 pm

Esta rutina encuentra la raíz cuadrada de un núemro usando puras sumas y multiplicaciones (o sea, sin usar alguna otra función como la epxonencuial o logaritmo, y mucho menos la funcion de raiz cuadrada nativa):
Código: Seleccionar todo
Sub raiz_2()
        Dim x, r, incr, tol, s As Decimal
        x = InputBox("escriba")
        r = 1
        incr = 1
        tol = 0.0001

        Do While incr > tol
            If r * r = x Then
                incr = tol
                'MsgBox("Esta es tu raiz" & r)
            End If



            s = r + incr
            If s * s > x Then
                incr = incr / 2
            Else
                r = s
            End If


        Loop
        MsgBox("Esta es tu raiz " & r)

        End Sub


La idea dle algoritmo se resumen en estos pasos:
Pasos
1 - Vemos si r*r=x, si si, vamos al paso 6
2 - Hacemos s=r+incr
3 - vemos si s*s>x
Si si es mayor, hacemos incr=incr/2 (disminuimos el tamaño de paso)
Si no es mayor, hacemos r=s
4 - Si incr>tolerancia, vamos al paso 6 (quiere decir que ya tenemos una aproximación muy buena de la raíz de x)
5 - Regresamos al paso 1
6 - Nuestra aproximación de la raíz de x es r


Ah, por cierto, el código anterior lo probe en Microsoft Visual Basic Studio 2005 y si funciona (ya saca raiz y toda la cosa). En VB 6.0 no funciona el código. Para esta versión declara de forma global las variables y de tipo "Double"
Código: Seleccionar todo
Dim x, r, incr, tol, s As Double

y la rutina queda asi:
Código: Seleccionar todo
Sub raiz_2()       
        x = InputBox("escriba")
        r = 1
        incr = 1
        tol = 0.0001

        Do While incr > tol
            If r * r = x Then
                incr = tol
                'MsgBox("Esta es tu raiz" & r)
            End If

            s = r + incr
            If s * s > x Then
                incr = incr / 2
            Else
                r = s
            End If

        Loop
        MsgBox("Esta es tu raiz " & r)

        End Sub


Saludos!
Última edición por AntonioG el Mar Ago 25, 2009 2:50 am, editado 1 vez en total
Avatar de Usuario
AntonioG
Moderador
Moderador
Usuario veterano
Usuario veterano
 
Mensajes: 279
Registrado: Jue Ene 15, 2009 12:57 am

Re: (Visual Basic) Calcular raíz cuadrada sin funciones

Notapor Esgrimidor » Mar Ago 25, 2009 12:00 am

Me ha encantado el script.
Un buen dominio de la esencia de la operación a llevar a efecto.

Me recuerda que el algoritmo de la división se demuestra en exactas, y nos pasamos la vida dividiendo cosas.

Y es que es imposible conocer todo en profundidad.

Pero te digo más. Creo que tu simple script me ha abierto los ojos con el problemilla actual que tengo de interpretación de los scripts de enlace o uso de la librería de Goldmine - un CRM - y es que los scripts vienen sin abrir la subrutina - porque se cae de cajón que un programador sabe que las tiene que poner - ; me refiero a sub () ... endsub
Pero claro, yo no caía en eso, porque mi intención es aplicar la chuleta y a volar. Cosas que no se te quedan en la cabeza porque no las manejas.

Probaré. Estaba recibiendo el mensajito :

Windows Script Host
Secuencia de comandos: M:\Documents and Settings\JOSE\Escritorio\GoldmineDDE.vbs
Línea: 2
Carácter:15
Error: Se esperaba un final de instrucción
Código: 800A0401
Origen: Error de compilación de Microsoft VBScript

Aceptar



Se esperaba un final de instrucción


Dim lResult As Long
lResult = GMW_LoadBDE("y:\goldmineprg\", "y:\goldmineprg\gmbase\", "y:\goldmineprg\demo\",
"MASTER", "ACCESS")
If lResult <> 1 Then
MsgBox "Unable to Load BDE"

el código que introduzco en el editor es el que he puesto arriba.

pero al ejecutar el vbs me da el siguiente error .

Imagen

Necesito un programa adicional o algo más?????. Con los vbs que tengo para los programas de office no me pasa.

Gracias y un cordial saludo.

- es la consulta que tenía puesta -----

Yo creo que ya me voy acercando. El manejo de esa librería es un tocho de pdf. Y también viene el manejo con C++ que todavía tengo menos idea, porque Visual Basic aún no siendo el mejor lenguaje está muy introducido.

:roll:
Esgrimidor
usuario frecuente
usuario frecuente
 
Mensajes: 36
Registrado: Sab Ago 22, 2009 10:47 pm

Re: (Visual Basic) Calcular raíz cuadrada sin funciones

Notapor AntonioG » Mar Ago 25, 2009 12:07 am

Hola,

No te entendi nada...ademas VB no lo uso. Lo que sé es lo básico.

Pienso que no puedo ayudarte en tu problema.

Saludos
Avatar de Usuario
AntonioG
Moderador
Moderador
Usuario veterano
Usuario veterano
 
Mensajes: 279
Registrado: Jue Ene 15, 2009 12:57 am

Re: (Visual Basic) Calcular raíz cuadrada sin funciones

Notapor Esgrimidor » Mar Ago 25, 2009 12:26 am

Pues ya ves. Yo creo que ver el código me ha ayudado sin más.

Lo probaré. Me estuve bajando esta tarde unos listados básicos de comandos. Con esto será suficiente.

Gracias por conseguirlo Antonio.
Esgrimidor
usuario frecuente
usuario frecuente
 
Mensajes: 36
Registrado: Sab Ago 22, 2009 10:47 pm

Re: (Visual Basic) Calcular raíz cuadrada sin funciones

Notapor faso1988 » Mar Nov 24, 2009 9:45 pm

Buenas. El codigo me funciona perfectamente pero quisiera en lo posible, a razones de mejor entendimiento para mi persona, que definiera la variable "r", "incr" matematicamente hablando. Y no se que tan posible traducir el codigo al proceso matematico. Gracias
faso1988
novato
novato
 
Mensajes: 1
Registrado: Mar Nov 24, 2009 9:37 pm


Volver a Códigos varios



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados