Anda di halaman 1dari 19

LENGUAJE DE

PROGRAMACION II
Uso de FUNCIONES y
PROCEDIMIENTOS

SUBPROGRAMAS
Un subprograma es tambin un programa menor, dentro de otro al
cual denominamos programa principal. Est formada por una serie
de sentencias (instrucciones) codificadas independientemente de
los otros eventos que conforman la aplicacin (proyecto) VBasic.
Un subprograma est ligado al proyecto mediante un proceso de
transferencia/retorno.
Siendo tambin un programa, dispone de sus propias sentencias y
variables. En Visual Basic, como en la mayora de lenguajes, se
acostumbra dividir el programa principal en subprogramas
programacin MODULAR- de tal forma que la solucin al problema
GENERAL est formada por soluciones PARCIALES.

Proyecto
Visual Basic

Transferencia
Retorno

SubPrograma

Cada una de estas soluciones PARCIALES se consigue mediante un


subprograma. En Visual Basic pueden ser de dos tipos:
Funciones, si generan como resultado UN nuevo valor escalar. Se
caracterizan porque terminan con la sentencia Return.
Sintaxis:
Function NombreFuncion (Var1 As Tipo1, , VarK As TipoK) As Tipo
Sentencia1
Sentencia2

SentenciaN
Return Valor NombreFuncion=Valor
End Function

Ejemplo:
Function Primo (k As ULong) As Integer

End Function

Procedimientos, si generan como resultado UNO o ms valores


escalares. Tambin se utilizan cuando NO generan ningn nuevo
resultado escalar.
Sintaxis:
Sub NombreProced (Var1 As Tipo1, , Vark As TipoK)
Sentencia1

SentenciaN
End Sub

En este caso (procedimientos), en la lista de variables pueden existir:


Solo variables de ENTRADA: NO se genera ningn valor de salida.
p Variables de SALIDA: Se generan p valores de salida.
Ejm:
Sub Estadisticas (k As Integer, w() As Single, ByRef Media As Single, ByRef
Var As Single, ByRef Mediana As Single)

End Sub

Ejemplo 1. ESTADISTICAS para una Lista de Valores.

lstDatos

btnGenerar

btnCalcular

btnNuevo
lblResultado

btnSalir

Codificacin de los controles:


Public Class frmFunciones
Dim N As Integer
Dim x() As Single
Dim y() As Single
Function Media(k As Integer, w() As Single) As Single
Dim j As Integer
Dim Suma As Single = 0
For j = 1 To N
Suma += w(j)
Next
Return (Suma / k)
End Function
Function Varianza(k As Integer, w() As Single) As Single
Dim j As Integer
Dim Suma2 As Single = 0
For j = 1 To N
Suma2 += w(j) ^ 2
Next
Return (Suma2 / k - Media(k, w))
End Function
Contin
a

Function Mediana(k As Integer, w() As Single) As Single


Dim i As Integer, j As Integer
Dim m As Integer, temp As Single
For i = 1 To k - 1
For j = i + 1 To k
If (w(j) < w(i)) Then
w(0) = w(j) : w(j) = w(i) : w(i) = w(0)
End If
Next
Next
If (k Mod 2 = 0) Then
m=k/2
temp = (w(m) + w(m + 1)) / 2
Else
m = (k + 1) / 2
temp = w(m)
End If
Mediana = temp
End Function

Contin
a

Private Sub btnGenerar_Click(sender As Object, e As EventArgs) Handles


btnGenerar.Click
Dim j As Integer
Dim a As Single, b As Single
N = InputBox("CANTIDAD de datos a Generar", "INGRESO DE DATOS")
a = InputBox("MENOR Valor", "INGRESO DE DATOS")
b = InputBox("MAYOR Valor", "INGRESO DE DATOS")
lstDatos.Items.Clear()
Randomize()
For j = 1 To N
lstDatos.Items.Add(Math.Round(a + (b - a) * Rnd(), 2))
Next
End Sub

Contin
a

Private Sub btnCalcular_Click(sender As Object, e As EventArgs) Handles btnCalcular.Click


N = lstDatos.Items.Count
ReDim x(N)
ReDim y(N)
For j = 1 To N
x(j) = lstDatos.Items.Item(j - 1)
y(j) = x(j)
Next
lblResultado.Text = "Media: " & Media(N, y)
lblResultado.Text = lblResultado.Text & vbNewLine & "Mediana: " & Mediana(N, y)
lblResultado.Text = lblResultado.Text & vbNewLine & "Varianza: " & Varianza(N, y)
lblResultado.Text = lblResultado.Text & vbNewLine & "Coef. VARIACION: " &
(Math.Sqrt(Varianza(N, y)) / Media(N, y))
End Sub
Private Sub btnNuevo_Click(sender As Object, e As EventArgs) Handles btnNuevo.Click
lstDatos.Items.Clear()
lblResultado.Text = ""
End Sub
Private Sub btnSalir_Click(sender As Object, e As EventArgs) Handles btnSalir.Click
End
End Sub
End Class

Ejemplo 2. Nmeros PRIMOS entre dos valores M y N (M<N).

btnCalcular

lblResultado

btnSalir

Codificacin de los controles:


Public Class frmPrimosMN
Public M As Long, N As Long, j As Long
Function Primo(ByVal k As ULong) As Integer
Dim j As Long, Ndiv As Integer = 0
For j = 2 To k / 2
If (k Mod j = 0) Then
Ndiv += 1
Exit For
End If
Next
If Ndiv = 0 Then
Return 1
Else
Return 0
End If
End Function
Contin
a

Private Sub btnCalcular_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btnCalcular.Click
Dim Nprim As Integer = 0
M = InputBox("Ingrese MENOR VALOR", "INGRESO de datos")
N = InputBox("Ingrese MAYOR VALOR", "INGRESO de datos")
Nprim = 0
lblResultado.Text = "Los Nmeros PRIMOS comprendidos entre esos valores son: _
& vbNewLine
For j = M To N
If Primo(j) = 1 Then
Nprim += 1
If Nprim Mod 15 <> 0 Then
lblResultado.Text = lblResultado.Text &" "& Format(j, "00000")
Else
lblResultado.Text = lblResultado.Text &" "& Format(j, "00000") & _
vbNewLine
End If
End If
Next
lblResultado.Text = lblResultado.Text & vbNewLine &"TOTAL: "& Nprim
End Sub
Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnSalir.Click
End
End Sub
End Class

Ejemplo 3. Aproximaciones para el valor de PI.

btnLeibnitz
btnWallis
btnBasilea
btnEuler
btnGauss

lblRpta
btnLimpiar

btnSalir

Codificacin de los controles:


Public Class frmValoresPI
Public N As Integer
Function F(ByVal w As Single)
Return Math.Exp((-1) * (w * w) / 2)
End Function
Function Basilea(ByVal k As Integer)
Dim j As Integer, ValPI As Single = 0
For j = 1 To k
ValPI = ValPI + 1 / Math.Pow(j, 2)
Next
Return Math.Pow(6 * ValPI, 0.5)
End Function
Function Euler(ByVal k As Integer)
Dim j As Integer, ValPI As Single = 0
For j = 1 To k
ValPI = ValPI + 1 / Math.Pow(j, 4)
Next
Return Math.Pow(90 * ValPI, 0.25)
End Function

Contin
a

Function Gauss(ByVal k As Integer)


Dim j As Integer
Dim b As Single, x As Single, y As Single, dx As Single
Dim L As Single = 0, U As Single = 0
b = 10
dx = b / k
For j = 1 To k
x = (j - 1) * dx : y = j * dx
If (F(x) < F(y)) Then
L = L + F(x) * dx : U = U + F(y) * dx
Else
L = L + F(y) * dx : U = U + F(x) * dx
End If
Next
Return (U + L) / 2
End Function
Function Leibnitz(ByVal k As Integer)
Dim j As Integer, x As Single, SumPI As Single = 0
For j = 0 To k
x = Math.Pow(-1, j) / (2 * j + 1) : SumPI += x
Next
Return (4 * SumPI)
End Function

Contin
a

Function Wallis(ByVal k As Integer)


Dim j As Integer, x As Single, ValPI As Single = 1
For j = 1 To k
x = Math.Pow(2 * j, 2) / ((2 * j - 1) * (2 * j + 1))
ValPI = ValPI * x
Next
Return (2 * ValPI)
End Function
Private Sub btnBasilea_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnBasilea.Click
N = InputBox("CANTIDAD de Sumandos", "INGRESO de DATOS")
lblRpta.Text = lblRpta.Text & vbNewLine & Aproximacin de BASILEA:
PI=" & Basilea(N) & " (" & N & " Trminos)"

End Sub

Private Sub btnEuler_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btnEuler.Click

N = InputBox("CANTIDAD de Sumandos", "INGRESO de Datos")


lblRpta.Text = lblRpta.Text & vbNewLine & Aproximacin de EULER: PI=" &
Euler(N) & " (" & N & " Trminos)"

End Sub

Contin
a

Private Sub btnGauss_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btnGauss.Click
N = InputBox("CANTIDAD de Sumandos", "INGRESO DE DATOS")
lblRpta.Text = lblRpta.Text & vbNewLine & Aproximacin de GAUSS:
PI=" & 2 * Math.Pow(Gauss(N), 2) & " (" & N & " Trminos)"
End Sub
Private Sub btnLeibnitz_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnLeibnitz.Click
N = InputBox("CANTIDAD de Sumandos", "INGRESO DE DATOS")
lblRpta.Text = lblRpta.Text & vbNewLine & Aproximacin de
LEIBNITZ: PI=" & Leibnitz(N) & " (" & N & " Trminos)"
End Sub
Private Sub btnWallis_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnWallis.Click
N = InputBox("CANTIDAD de Sumandos", "INGRESO DE DATOS")
lblRpta.Text = lblRpta.Text & vbNewLine & Aproximacin de WALLIS:
PI=" & Wallis(N) & " (" & N & " Trminos)"
End Sub

Contin
a

Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btnLimpiar.Click
lblRpta.Text = ""
End Sub
Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnSalir.Click
End
End Sub
End Class

MUCHAS GRACIAS
Hasta la prxima!!!

INQUIETUDES O SUGERENCIAS?
UNIVERSIDAD NACIONAL DE INGENIERIA

Escuela de INGENIERIA ESTADISTICA

Anda mungkin juga menyukai