EC417_SubProgramas_VisualBasic

19
LENGUAJE DE PROGRAMACION II Uso de FUNCIONES y PROCEDIMIENTOS

description

EC417_SubProgramas_VisualBasicEC417_SubProgramas_VisualBasicEC417_SubProgramas_VisualBasicEC417_SubProgramas_VisualBasicLenguaje de Programación II FIEECS UNI

Transcript of EC417_SubProgramas_VisualBasic

Page 1: EC417_SubProgramas_VisualBasic

LENGUAJE DE PROGRAMACION II

Uso de FUNCIONES y PROCEDIMIENTOS

Page 2: EC417_SubProgramas_VisualBasic

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

Page 3: EC417_SubProgramas_VisualBasic

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

Page 4: EC417_SubProgramas_VisualBasic

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

Page 5: EC417_SubProgramas_VisualBasic

Ejemplo 1. ESTADISTICAS para una Lista de Valores.

btnNuevo

btnCalcular

btnGenerar

lstDatos

lblResultado btnSalir

Page 6: EC417_SubProgramas_VisualBasic

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

Page 7: EC417_SubProgramas_VisualBasic

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

Page 8: EC417_SubProgramas_VisualBasic

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

Page 9: EC417_SubProgramas_VisualBasic

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

Page 10: EC417_SubProgramas_VisualBasic

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

lblResultado

btnCalcular

btnSalir

Page 11: EC417_SubProgramas_VisualBasic

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

Page 12: EC417_SubProgramas_VisualBasic

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

Page 13: EC417_SubProgramas_VisualBasic

Ejemplo 3. Aproximaciones para el valor de PI.

btnLeibnitz

btnSalir

btnLimpiar

lblRpta

btnWallis

btnBasilea

btnEuler

btnGauss

Page 14: EC417_SubProgramas_VisualBasic

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

Page 15: EC417_SubProgramas_VisualBasic

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

Page 16: EC417_SubProgramas_VisualBasic

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

Page 17: EC417_SubProgramas_VisualBasic

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

Page 18: EC417_SubProgramas_VisualBasic

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

Page 19: EC417_SubProgramas_VisualBasic

MUCHAS GRACIASHasta la próxima!!!

INQUIETUDES O SUGERENCIAS?

UNIVERSIDAD NACIONAL DE INGENIERIA Escuela de INGENIERIA ESTADISTICA