Monografias | Funciones recursivas en visual basic 2005

Funciones recursivas en visual basic 2005

Resumen: A continuación se muestra un programa desarrollado en Visual Basic 2005 que utiliza funciones recursivas para resolver ejercicios comunes de programación.

Publicación enviada por Jaime Montoya


 

DESARROLLO
A continuación se muestra un programa desarrollado en Visual Basic 2005 que utiliza funciones recursivas para resolver ejercicios comunes de programación.

EJERCICIOS
Utilizar funciones recursivas para resolver los siguientes ejercicios:



FORMULARIO DE INICIO



a^n RECURSIVAMENTE


FIBONACCI RECURSIVAMENTE


MCD RECURSIVAMENTE


MCD RECURSIVAMENTE


COMBINATORIO RECURSIVAMENTE



CÓDIGO DEL PROGRAMA
(MÓDULO DE LAS FUNCIONES RECURSIVAS)

Module Module1

    Public Function potencia(ByVal a As Integer, ByVal n As Integer) As Integer 'Esta función recursiva es para calcular el resultado de a^n.

        If n = 0 Then 'Todo número elevado a la 0 da como resultado 1.

            Return 1

        Else

            Return a * potencia(a, n - 1) 'Aplicando recursividad.

        End If

    End Function

    Public Function combinatorio(ByVal n As Integer, ByVal r As Integer) As Integer 'Esta función recursiva es para calcular el combinatorio, por ejemplo "8C3=56", que significa que 8 elementos tomando 3 a la vez da un combinatorio de 56 posibilidades.

        If (r = 0) Or (r = n) Then

            Return 1

        Else

            If (r = 1) Then

                Return n

            Else

                Return combinatorio(n - 1, r) + combinatorio(n - 1, r - 1) 'Aplicando recursividad.

            End If

        End If

    End Function

    Public Function fibonacci(ByVal numero As Integer) As Integer 'Esta función recursiva es para calcular el fibonacci de un número dado.

        If (numero = 0) Or (numero = 1) Then

            Return 1

        Else

            Return fibonacci(numero - 1) + fibonacci(numero - 2) 'Aplicando recursividad.

        End If

    End Function

    Public Function mcd(ByVal numero1 As Integer, ByVal numero2 As Integer) As Integer

        If (numero2 = 0) Then

            Return numero1

        Else

            Return mcd(numero2, numero1 Mod numero2) 'Aplicando recursividad.

        End If

    End Function

End Module


(FORMULARIO DE INICIO)

Public Class Form1

    Private Sub an_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles an.Click

        an1.Show() 'Mostrar el formulario "an".

        Me.Hide() 'Ocultar el formulario actual.

    End Sub

    Private Sub fibonacci_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles fibonacci.Click

        Me.Hide() 'Ocultar el formulario actual.

        fibonacci1.Show() 'Mostrar el formulario "fibonacci".

    End Sub

    Private Sub mcd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mcd.Click

        Me.Hide() 'Ocultar el formulario actual.

        mcd1.Show() 'Mostrar el formulario "mcd".

    End Sub

    Private Sub combinatorio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles combinatorio.Click

        Me.Hide() 'Ocultar el formulario actual.

        combinatorio1.Show() 'Mostrar el formulario "combinatorio".

    End Sub

End Class


(FORMULARIO DE a^n)

Public Class an1

    Private Sub menu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu.Click

        Form1.Show() 'Mostrar el formulario "Form1".

        Me.Hide() 'Ocultar el formulario actual.

    End Sub

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

        If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or (Asc(e.KeyChar) = 8) Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57).

            'No se hace nada porque el caracter presionado es válido.

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress

        If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or (Asc(e.KeyChar) = 8) Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57).

            'No se hace nada porque el caracter presionado es válido.

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        TextBox1.Text = ""

        TextBox2.Text = ""

        TextBox3.Text = ""

    End Sub

    Private Sub calcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcular.Click

        TextBox3.Text = "" 'Para que limpie el resultado de procesos anteriores.

        If (TextBox1.Text = "") Or (TextBox2.Text = "") Then

            MsgBox("Escriba los valores de a y n.", MsgBoxStyle.Exclamation, "Funciones Recursivas")

        Else

            If (TextBox1.Text = "0") And (TextBox2.Text = "0") Then 'Es como querer elevar 0^0, que produce error.

                MsgBox("0^0 produce error. Favor verificar los valores introducidos.", MsgBoxStyle.Exclamation, "Funciones Recursivas")

            Else

                TextBox3.Text = potencia(TextBox1.Text, TextBox2.Text)

            End If

        End If

    End Sub

End Class

 
(FORMULARIO COMBINATORIO)

Public Class combinatorio1

    Private Sub menu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu.Click

        Form1.Show() 'Mostrar el formulario "Form1".

        Me.Hide() 'Ocultar el formulario actual.

    End Sub

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

        If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or (Asc(e.KeyChar) = 8) Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57).

            'No se hace nada porque el caracter presionado es válido.

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress

        If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or (Asc(e.KeyChar) = 8) Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57).

            'No se hace nada porque el caracter presionado es válido.

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        TextBox1.Text = ""

        TextBox2.Text = ""

        TextBox3.Text = ""

    End Sub

    Private Sub calcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcular.Click

        TextBox3.Text = "" 'Para que limpie el resultado de procesos anteriores.

        If (TextBox1.Text = "") Or (TextBox2.Text = "") Then

            MsgBox("Escriba los valores de n y r.", MsgBoxStyle.Exclamation, "Funciones Recursivas")

        Else

            If (Val(TextBox2.Text) > Val(TextBox1.Text)) Then 'El valor de r no puede ser mayor que el valor de n porque no se puede decir "8C9", pues eso devuelve error, no se puede tener 8 elementos y tomar 9 a la vez.

                MsgBox("El valor de r no puede ser mayor que el valor de n.", MsgBoxStyle.Exclamation, "Funciones Recursivas")

            Else

                TextBox3.Text = combinatorio(TextBox1.Text, TextBox2.Text)

            End If

        End If

    End Sub

End Class


(FORMULARIO FIBONACCI)

Public
Class fibonacci1

    Private Sub menu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu.Click

        Form1.Show() 'Mostrar el formulario "Form1".

        Me.Hide() 'Ocultar el formulario actual.

    End Sub

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

        If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or (Asc(e.KeyChar) = 8) Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57).

            'No se hace nada porque el caracter presionado es válido.

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        TextBox1.Text = ""

        TextBox3.Text = ""

    End Sub

    Private Sub calcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcular.Click

        TextBox3.Text = "" 'Para que limpie el resultado de procesos anteriores.

        If (TextBox1.Text = "") Then

            MsgBox("Escriba el valor del número a evaluar.", MsgBoxStyle.Exclamation, "Funciones Recursivas")

        Else

            TextBox3.Text = fibonacci(TextBox1.Text)

        End If

    End Sub

End Class


(FORMULARIO MÁXIMO COMÚN DIVISOR)
Public Class mcd1

    Private Sub menu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu.Click

        Form1.Show() 'Mostrar el formulario "Form1".

        Me.Hide() 'Ocultar el formulario actual.

    End Sub

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

        If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or (Asc(e.KeyChar) = 8) Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57).

            'No se hace nada porque el caracter presionado es válido.

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress

        If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or (Asc(e.KeyChar) = 8) Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57).

            'No se hace nada porque el caracter presionado es válido.

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        TextBox1.Text = ""

        TextBox2.Text = ""

        TextBox3.Text = ""

    End Sub

    Private Sub calcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcular.Click

        TextBox3.Text = "" 'Para que limpie el resultado de procesos anteriores.

        If (TextBox1.Text = "") Or (TextBox2.Text = "") Then

            MsgBox("Escriba los valores de los números a evaluar.", MsgBoxStyle.Exclamation, "Funciones Recursivas")

        Else

            If (Val(TextBox2.Text) > Val(TextBox1.Text)) Then 'El número mayor es el que debe recibir la función como primer parámetro.

                TextBox3.Text = mcd(TextBox2.Text, TextBox1.Text)

            Else 'En caso que los valores del TextBox1 y TextBox2 sean iguales o que el TextBox1 tiene el número mayor, se la da como primer parámetro de la función el TextBox1.

                TextBox3.Text = mcd(TextBox1.Text, TextBox2.Text)

            End If

        End If

    End Sub

End Class


CONCLUSIÓN
Como se puede observar, las funciones recursivas permiten realizar interesantes y útiles operaciones con unas pocas líneas de código. Programar recursivamente ofrece excelentes beneficios, especialmente en cuanto al ahorro de código para tener una programación ordenada y simplificada sin necesidad de utilizar tantas variables ni complicar la programación de aplicaciones.

Descárgate el archivo aquí

AUTOR
Jaime Montoya
webmaster@jaimemontoya.com
www.jaimemontoya.com
Santa Ana, 5 de febrero de 2008
El Salvador


 

Compartir Enviar a menéame  Añadir a tus marcadores de Google  Enviar a noticias Top    Añadir a del.icio.us     Añadir a tus marcadores en Yahoo! 


Publicación enviada por Jaime Montoya
Contactar http://www.jaimemontoya.com/


Código ISPN de la Publicación EkpklVEkEFEDkCGYHt
Publicado Tuesday 12 de February de 2008

Ultimas Publicaciones en ilustrados.com


ilustrados.com nace con el fin difundir el conocimiento publicando trabajos de investigación, monografias, tesis, presentaciones powerpoint y afines. Publicar trabajos en ilustrados.com ha alcanzado prestigio y reconocimiento internacional siendo cada vez más el número de académicos, empresas, investigadores, científicos que consultan las publicaciones de nuestro portal.


Administración y Finanzas
Agricultura y Ganadería
Anatomía
Antropología
Arqueología y Paleontología
Arquitectura
Arte y Cultura
Astronomía
Biografías
Biología
Ciencia y Tecnología
Computación e Informática
Comunicaciones
Contabilidad
Deportes y Educación Física
Derecho
Derechos Humanos
Ecología
Economía
Educación
Enfermedades
Estadística
Filosofía y Ontología
Física
Geografía
Hardware
Historia
Ingeniería
Internet
Lenguaje y Literatura
Marketing y Publicidad
Mitología
Matemática y Lógica
Música
Nutrición y Ciencias Alimentarias
Política
Programación
Psicología
Química
Recursos Humanos
Redes
Religión
Salud y Medicina
Sistemas Operativos
Sociología
Software
Turismo
Zoología