Busca monografías, tesis y trabajos de investigación

Buscar en Internet 

       Revistas   Cursos   Biografías

rss feeds RSS / /

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


 



Valora este artículo 5   4   3   2   1

Comparte  Enviar a facebook Facebook   Enviar a menéame Menéame   Digg   Añadir a del.icio.us Delicious   Enviar a Technorati Technorati   Enviar a Twitter Twitter
Artículos Destacados