Visual Basic: paso de parámetros por referencia ByRef y por valor ByVal. Procedimientos y funciones. (CU00341A)

Documentos relacionados
Visual Basic: procedimientos Sub y funciones Function. Tipos de parámetros y tipos de retorno. Ejemplos (CU00340A)

Ejercicios resueltos Visual Basic y.net con arrays (arreglos), Do While, For, mod, ficheros, Ubound. Cálculo serie numérica (CU00344A)

Arrays dinámicos y arrays estáticos con Visual Basic y.net. Redim, Redim Preserve, Erase. Ejemplos (CU00342A)

Ejemplos de uso de forms, labels, inputbox y msgbox en Visual Basic. (CU00332A)

Visual Basic y.net: Procedimientos Sub y funciones Function. Parámetros. Organizar programas en módulos. (CU00338A)

Buttons (Command Buttons) en Visual Basic. Propiedades y ejemplos. Código asociado a eventos. (CU00321A)

Select Case Visual Basic. Palabras clave To, Is. Instrucción Según (Caso) Hacer. Ejemplos y ejercicios resueltos (CU00325A)

Ejercicios ejemplo: verificación de algoritmos del valor suma de una sucesión matemática. (CU00238A)

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)

Ejercicios ejemplos resueltos Visual Basic con Labels, Textbox, y Buttons (Command Buttons) (CU00322A)

Operadores lógicos y matemáticos en Visual Basic. Math. Comentarios en VB. Rem. Ejemplos. (CU00314A)

Problema de tiro parabólico. Ejercicio resuelto. Planteamiento y pseudocódigo. (CU00252A)

Indice del curso básico programación desde cero Visual Basic Nivel I (CU00302A)

Ejercicio ejemplo resuelto: verificar el algoritmo de resolución de una ecuación de segundo grado. (CU00237A)

Editor de código Visual Basic. Lista de miembros automática, sugerencias de sintaxis, autocompletado y otras opciones. (CU00313A)

Ejercicios ejemplos con if then else y operador mod en Visual Basic. Par o impar, ecuación de segundo grado, etc. (CU00324A)

Ejemplo de programa básico en Visual Basic. Option Explicit, Form, Dim, String, etc. (CU00310A)

AMBITO DE VARIABLES EN C. GLOBALES Y LOCALES. UNDECLARED (FIRST USE IN THIS FUNCTION). EJEMPLOS (CU00548F)

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

UNIVERSIDAD LIBRE DE COLOMBIA ELECTIVA IV VISUAL BASIC GUIA No. 1

Ejercicio resuelto: variante para ordenar una serie de números. Pseudocódigo y diagrama de flujo. (CU00262A)

PROYECTO JUEGO DE 7 Y MEDIO

5. Subprogramas Fundamentos de Informática

Algoritmos y Programación Clase 8

Ejercicios ejemplos resueltos con Desde-Siguiente (For-next) y arrays en pseudocódigo y diagramas de flujo. (CU00154A)

Manejo de módulos y recursión en programación. Pseudocódigo. (CU00204A)

Plugin Geshi para dar formato a código de programación en artículos Joomla. Saltos de línea. (CU00435A)

Ejercicio resuelto con tabla de decisión. Tarjetas. Pseudocódigo y diagramas de flujo. (CU00258A)

Vistas de categorías (formato lista, formato blog) con Joomla. Opciones de configuración. (CU00429A)

llamada a la función Val(num) cambiosigno(n) redondeo(num,3)

Ejercicio ejemplo resuelto de uso de arrays (arreglos) dinámicos en pseudocódigo I (CU00214A)

Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A)

Declaración de variables (integer, single, double, boolean, etc.) en Visual Basic. Dim. Ejemplos. (CU00309A)

Microsoft Visual Basic

6. Vectores. 1. Introducción. 2. Declaración (I) Fundamentos de Informática Dpto. Lenguajes y Sistemas Informáticos.

Parte 4: Estructuras de Control

En este ejemplo también vamos a crear la capa Entidades que va a servir para modelar nuestra base de datos.

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Parte I: Ejemplos de problemas que se resuelven usando una tabla de decisión en programación (CU00113A)

FUNDAMENTOS DE INFORMÁTICA

GUÍA DE TRABAJO GRADO 11 Programación de. Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6

Prerrequisitos El alumno debe conocer y dominar los aspectos básicos de programación.

Colegio Agustiniano Campestre Amor y Ciencia: Educamos la mente y el corazón

Los nombres y marcas comerciales mencionados en este manual son propiedad de sus respectivos autores o fabricantes.

Programación en Visual Basic Ricardo Rodríguez García

Computación II. Introducción a Visual Basic

UNIVERSIDAD LIBRE DE COLOMBIA FACULTAD INGENIERIA DE SISTEMAS ELECTIVA TECNICA II.NET Y SQL SERVER

la solución a una ecuación cuadrática solicitando al usuario los términos de dicha ecuación.

ÍNDICE DEL LIBRO Y DEL EBOOK APRENDER A PROGRAMAR: ALGORITMOS Y FUNDAMENTOS DE PROGRAMACIÓN ORIENTADOS A LA INGENIERÍA Y CIENCIAS

Día 2: Utilizando controles de datos en Visual Studio 2008.

Resumen teórico. En la Consola. Abre nuevo proyecto y elige Consola aplicación y ponle el nombre que quieras y escribe: Module Module1

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

Algoritmos y Programas

LEER Y ESCRIBIR ARCHIVOS DE TEXTO CON PHP. FUNCIONES FOPEN (MODOS), FGETS, FPUTS, FCLOSE Y FEOF. EJEMPLOS (CU00836B)

Ejercicio de algoritmia resuelto con Visual Basic: ordenar series de series de números. (CU00356A)

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA

Manejo de Software para Microcomputadoras. Visual Basic para Aplicaciones en Excel

Manual de turbo pascal

Agenda con Archivos Aleatorios.

Problemas en programación que se resuelven recurriendo a una tabla de decisión y su algoritmia (CU00112A)

Índice general. Capítulo 1 Conceptos básicos. Capítulo 2 Controles básicos I. Pág. N. 1

Algoritmos, pseudocódigo y diagramas de flujo: una introducción (CU00123A)

Sentencias o instrucciones en Visual BASIC

INFORMATICA VISUAL BASIC 2008 GRAFICACIÓN I

TÉCNICO SUPERIOR EN DESARROLLO DE APLICACIONES INFORMÁTICAS

Conversión entre Tipos

Las funciones para el cálculo de la Regla de Gasto se encuentran en el menú de elaboración.

FUNDAMENTOS DE INFORMÁTICA

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Tema: Clases y Objetos en C#. Parte II.

PROGRAMACION EN VISUAL BASIC

Estructuras en LabVIEW.

Prof. Giovanni Francisco Sáenz Araica.

SENA Distrito Capital Centro de Electricidad, Electrónica y Telecomunicaciones ADSI - Ing. Espec. Javier Vaquiro

Resumen del lenguaje de programación Visual Basic.NET

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

MsgBox en ASP.NET. En esta oportunidad, vamos a realizar un control que permite emular dicha función sobre ASP.NET.

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

Diseño Basado en Componentes. Curso 2008 / 09

Comencemos a programar con. Entrega 09

1. Introducción a la programación. Ej01: Diagrama de Flujo

CLASES QUE UTILIZAN OBJETOS. RELACIÓN DE USO ENTRE CLASES JAVA. CONCEPTO DE DIAGRAMA DE CLASES. (CU00641B)

APLICACIÓN EN VISUAL BASIC.NET 2010 CON BASE DE DATOS EN ACCESS 2010

3. Estructuras iterativas

Contenido Introducción a VBA

Manual del Modelizador. 28 de enero de 2009

Uso de centinelas para la toma de decisiones. Esquemas y diagramas de flujo. Ejemplos resueltos. (CU00167A)

En Studio Net aparece un objeto denominado Graphics, que es el área donde se va a realizar el dibujo con uno de los métodos de dibujo.

C.F.G.S. DESARROLLO DE APLICACIONES INFORMÁTICAS. MÓDULO: Diseño y realización de servicios de presentación en entornos gráficos.

Seminario de Actualización - Excel Avanzado y Macros. Visual Basic. Conceptos Básicos de Visual Basic para Aplicaciones

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

GLOSARIO DE MICROSOFT VISUAL BASIC (HAZ CLIC EN LA OPCION DEL MENU Y ACCEDERAS RAPIDAMENTE)

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

Anexo Nº 11 MANUAL DE INSTALACIÓN

Programa de números aleatorios

Comencemos a programar con. Entrega 10. Estructuras de Control II

PASOS PARA CREAR FUNCIONES CON VBA

CREAR TABLAS EN BASES DE DATOS CON phpmyadmin. TIPOS DE DATOS BÁSICOS (VARCHAR, INT, FLOAT). INSERTAR FILAS. (CU00840B)

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Transcripción:

aprenderaprogramar.com Visual Basic: paso de parámetros por referencia ByRef y por valor ByVal. Procedimientos y funciones. (CU00341A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha revisión: 2029 Autor: Mario R. Rancel Resumen: Entrega nº40 del Curso Visual Basic Nivel I 29

PASO DE ARGUMENTOS POR REFERENCIA Y POR VALOR EN VISUAL BASIC. Con Visual Basic se utilizan los términos "Paso de argumentos por Referencia (ByRef)", equivalente a lo que en el curso Bases de la programación nivel II de aprenderaprogramar.com hemos denominado transferencia de variable, y "Paso de argumentos por Valor (ByVal)", equivalente a lo que hemos denominado transferencia por valor. Si no tienes claro el concepto de paso por referencia y paso por valor consulta el curso Bases de la programación nivel II de aprenderaprogramar.com. El comportamiento de Visual Basic depende de la versión que estemos utilizando: a) Con versiones menos recientes de Visual Basic: se permite no especificar cómo se pasa un parámetro. Por ejemplo Private Function suma (a As Integer, b As Integer). En caso de no estar especificado, la opción de defecto es que los parámetros pasan por referencia, con lo cual es posible que se modifique el valor de la variable inicial que se pasa como parámetro. En el último programa pasábamos la variable Dato como parámetro de la función Raíz. Al tener lugar la transformación del parámetro en valor absoluto, si introducíamos un número negativo su valor quedaba transformado. Cómo hacer que la tranferencia sea por valor? Bastará con hacer la declaración de función o de procedimiento de la siguiente manera: Private Function Raíz(ByVal Número As Single) Private Sub Raíz(ByVal Número As Single) Es decir, indicamos que el parámetro Número se procesa por valor. b) Con versiones más recientes de Visual Basic: no se permite dejar sin especificar cómo se pasa un parámetro. Por ejemplo no se admite Private Function suma (a As Integer, b As Integer), de hecho si escribimos esto el editor lo transformará automáticamente en Private Function suma (ByVal a As Integer, ByVal b As Integer) ya que se asume que los parámetros pasarán por defecto por valor. Para no tener dudas, lo más sencillo será especificar siempre cómo se pasa un parámetro a un procedimiento o una función. En caso de que no sepamos cómo pasarlo, recomendamos usar siempre ByVal para evitar que se generen modificaciones indeseadas dentro del procedimiento o función. En la hipótesis de que existieran distintos parámetros y uno se quiera procesar de una manera y otro de otra, lo indicaremos antecediendo la palabra clave ByRef o ByVal delante del nombre del parámetro como en el siguiente ejemplo: Private Function Raíz(ByVal Número As Single, ByRef x As Integer)

En las versiones menos recientes de Visual Basic, mientras que el modo de transferencia en las funciones sólo puede indicarse en la definición de la función, en los procedimientos podemos indicarlo bien en la declaración del procedimiento bien en la forma de llamada que empleemos. En versiones menos recientes de VB, el tipo de llamada condiciona cómo se transfiere el argumento. Así tenemos que: a) Implican transferencia de variable llamadas del tipo: Call Raíz(dato) y Raíz dato b) Implican transferencia de valor llamadas del tipo: Raíz(dato) Se observa que es una diferencia mínima de escritura la que diferencia uno y otro tipo de llamada. Sin embargo, las consecuencias de usar uno u otro tipo pueden ser relevantes, y conocer y comprender estas implicaciones nos puede evitar más de un dolor de cabeza. Visual Basic no admite sintaxis del tipo Llamar Raíz(Dato) Por Valor. Sin embargo, cuando en la declaración del procedimiento o función hemos indicado cómo se pasan los parámetros, resulta indistinto usar uno u otro tipo de sintaxis de llamada. Por tanto, en las versiones más recientes de Visual Basic, donde el modo de paso de parámetros es siempre indicado, no tiene relevancia cómo se haga la llamada. EJERCICIO Transformar en código el pseudocódigo que se muestra a continuación correspondiente a un programa denominado SUC02, cuyo objetivo es el cálculo del valor de un sumatorio del tipo: a, a 1, a 2,..., 0 [PROGRAMA SUC02 Curso Visual Basic aprenderaprogramar.com] Variables: Enteras: E Reales: Dato, Raiz01, Raiz02, Suce 1. Inicio 2. Mientras E <> 2 Hacer 2.1 Mostrar Elija 1. Cálculo 2. Salir 2.2 Pedir E 2.3 Si E = 1 Entonces Llamar EntraDatos Llamar Proceso(Dato) PorValor Llamar Resultados FinSi Repetir 3. Fin

Módulo EntraDatos 1. Hacer Mostrar Por favor, introduzca número entero entre 0 y 100 Pedir Dato Dato = Redondear(Dato) Repetir Mientras Dato < 0 ó Dato > 100 FinMódulo Módulo Proceso(Num: Enteros) 1. Raiz01 = SQR(Num) 2. Raiz02 = Raiz01 3. Suce = 0 4. Mientras Num >= 0 Hacer Suce = Suce + SQR(Num) Num = Num 1 Repetir FinMódulo Módulo Resultados Mostrar Dato base =, Dato Mostrar Raiz01=, Raiz01 Mostrar Raiz02=, Raiz02 Mostrar Valor de la suma de los términos de la sucesión =, Suce FinMódulo La solución se muestra en la siguiente página.

SOLUCIÓN Código versiones menos recientes VB: Código versiones más recientes VB: 'Curso VB aprenderaprogramar.com 'Programa SUC02 Option Explicit Dim Dato As Single Dim Raíz01!, Raíz02 As Single Dim Suce As Single Private Sub Form_Load() Form1.Caption = "Programa SUC02" CommandCálculo.Caption = "Cálculo" CommandSalir.Caption = "Salir" Private Sub CommandSalir_Click() Unload Form1 End Private Sub CommandCálculo_Click() Call EntraDatos Call Proceso(Dato) Call Resultados Private Sub EntraDatos() Do Dato = CInt(InputBox("Por favor, introduzca nº entero entre 0 y 100", "Dato")) Loop While Dato < 0 Or Dato > 100 Private Sub Proceso(ByVal Num As Integer) Raíz01 = Sqr(Num) Raíz02 = -Raíz01 Suce = 0 Do While Num >= 0 Suce = Suce + Sqr(Num) Num = Num - 1 Loop Private Sub Resultados() Label1.Alignment = 2 Label1.FontBold = True Label1 = "Dato base = " & Dato & vbcrlf & vbcrlf & " Raíz01 = " & Raíz01 & " Raíz02 =" & Raíz02 & vbcrlf & vbcrlf & "Valor sucesión = " & Suce REM Curso Visual Basic aprenderaprogramar.com 'Programa SUC02 Option Explicit On Public Class Form1 Dim Dato As Single Dim Raíz01 As Single, Raíz02 As Single Dim Suce As Single Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "Programa SUC02" ButtonCálculo.Text = "Cálculo" ButtonSalir.Text = "Salir" Label1.Text = "" Private Sub ButtonSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSalir.Click Me.Close() End Private Sub ButtonCálculo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCálculo.Click Call EntraDatos() Call Proceso(Dato) Call Resultados() Private Sub EntraDatos() Do Dato = CInt(InputBox("Por favor, introduzca nº entero entre 0 y 100", "Dato")) Loop While Dato < 0 Or Dato > 100 Private Sub Proceso(ByVal Num As Integer) Raíz01 = Math.Sqrt(Num) Raíz02 = -Raíz01 Suce = 0 Do While Num >= 0 Suce = Suce + Math.Sqrt(Num) Num = Num - 1 Loop Private Sub Resultados() Label1.TextAlign = ContentAlignment.MiddleCenter Label1.Font = New Font("Arial", 10, FontStyle.Bold) Label1.Text = "Dato base = " & Dato & vbcrlf & vbcrlf & " Raíz01 = " & Raíz01 & " Raíz02 =" & Raíz02 & vbcrlf & vbcrlf & "Valor sucesión = " & Suce End Class

El aspecto gráfico sería el siguiente: En el curso Bases de la programación nivel II de aprenderaprogramar.com creamos una variante de pseudocódigo para este ejercicio consistente en el bloqueo del producto de los módulos. A modo de ejercicio adicional, te proponemos que crees esta variante en Visual Basic y compruebes las implicaciones que tiene. Próxima entrega: CU00342A Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente: http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&itemid=61