EC417_SubProgramas_VisualBasic
-
Upload
elias-cuestas -
Category
Documents
-
view
213 -
download
1
description
Transcript of EC417_SubProgramas_VisualBasic
LENGUAJE DE PROGRAMACION II
Uso de FUNCIONES y PROCEDIMIENTOS
SUBPROGRAMASUn subprograma es también 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 aplicación (proyecto) VBasic. Un subprograma está ligado al proyecto mediante un proceso de transferencia/retorno.Siendo también un programa, dispone de sus propias sentencias y variables. En Visual Basic, como en la mayoría de lenguajes, se acostumbra dividir el programa principal en subprogramas –programación MODULAR- de tal forma que la solución al problema GENERAL está formada por soluciones PARCIALES.
Proyecto Visual Basic
SubPrograma
Retorno
Transferencia
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 TipoSentencia1Sentencia2…SentenciaNReturn Valor ‘NombreFuncion=Valor
End Function
Ejemplo:Function Primo (k As ULong) As Integer
…End Function
Procedimientos, si generan como resultado UNO o más valores escalares. También se utilizan cuando NO generan ningún 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 ningún 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.
btnNuevo
btnCalcular
btnGenerar
lstDatos
lblResultado btnSalir
Codificación 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
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
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 SubEnd Class
Ejemplo 2. Números PRIMOS entre dos valores M y N (M<N).
lblResultado
btnCalcular
btnSalir
Codificación de los controles:Public Class frmPrimosMNPublic M As Long, N As Long, j As LongFunction 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 IfEnd 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 Números 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: "& NprimEnd SubPrivate Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click EndEnd SubEnd Class
Ejemplo 3. Aproximaciones para el valor de PI.
btnLeibnitz
btnSalir
btnLimpiar
lblRpta
btnWallis
btnBasilea
btnEuler
btnGauss
Codificación 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 & “Aproximación de BASILEA: PI=" & Basilea(N) & " (" & N & " Términos)" 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 & “Aproximación de EULER: PI=" & Euler(N) & " (" & N & " Términos)" 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 & “Aproximación de GAUSS: PI=" & 2 * Math.Pow(Gauss(N), 2) & " (" & N & " Términos)" 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 & “Aproximación de LEIBNITZ: PI=" & Leibnitz(N) & " (" & N & " Términos)" 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 & “Aproximación de WALLIS: PI=" & Wallis(N) & " (" & N & " Términos)" 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 SubEnd Class
MUCHAS GRACIASHasta la próxima!!!
INQUIETUDES O SUGERENCIAS?
UNIVERSIDAD NACIONAL DE INGENIERIA Escuela de INGENIERIA ESTADISTICA