Ubound y Lbound en Visual Basic. Conocer índice superior e inferior de arrays (arreglos) Ejemplos y ejercicios. (CU00343A)

Documentos relacionados
Ejemplos Visual Basic: función Val, arrays de controles, generar números aleatorios, ficheros de texto. (CU00333A)

Visual Basic y.net Do Loop, Exit Do, Exit For y GoTo. Ejemplos y ejercicios resueltos. (CU00337A)

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

Ejercicios resueltos ejemplo de leer datos desde ficheros con Visual Basic, variables, bucles For Next y condicionales If.

Bucles For Next Step, Do While Loop, Do Loop While (Estructuras de repetición en Visual Basic) (CU00326A)

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

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

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

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

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

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

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

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

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

Ejercicio ejemplo de diagramas de flujo y pseudocódigo. Verificación de algoritmos. (CU00240A)

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

Ejercicio final de señaleros resuelto con pseudocódigo. Organización previa de variables. Diagramas de flujo. (CU00171A)

Repaso Visual Basic Interfaz Gráfica

Tipos de errores en Visual Basic: de compilación, de ejecución, de sintaxis. Depuración. (CU00352A)

UNIVERSIDAD NACIONAL DE INGENIERIA

INFORMATICA VISUAL BASIC 2008

Ejercicios resueltos con pseudocódigo y diagramas de flujo. Bucles for-next y while-do. (CU00161A)

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

PROGRAMACION EN LENGUAJE C: EJERCICIOS RESUELTOS CON ARRAYS O ARREGLOS Y CICLOS FOR Y WHILE (CU00540F)

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

6. Vectores Fundamentos de Informática

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

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

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

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

VISUAL BASIC Archivos en Visual Basic Proyectos Archivos

Fundamentos de Informática Examen 18 de Septiembre de 2006 Mecánica y Electricidad

Algoritmos y Programación Clase 7

Fundamentos de la Programación

BREAK: FORZAR SALIDA BUCLES FOR, WHILE, DO EN C. LOOP. STATEMENT NOT WITHIN LOOP OR SWITCH (CU00545F)

Algoritmos y Programación Clase 8

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

GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS

Fundamentos de Programación

Instrucciones Si... Entonces y Si... Entonces SiNo (if then else) en pseudocódigo (CU00142A)

Microsoft Visual Basic

FUNDAMENTOS DE INFORMÁTICA

III. Generación de Código orientado a objetos

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

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

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

2. Estructuras condicionales

RESUMEN GAMBAS. TIPOS DE DATOS Y DECLARAR VARIABLE: DIM nombre_variable AS

WHILE Y DO WHILE BREAK EN LENGUAJE C. BUCLES MIENTRAS. FORZAR SALIDA O TERMINACIÓN. EJEMPLO (CU00534F)

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

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

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA VISUAL BASIC ASICO JAIME RUBIANO LLORENTE

Motivación. 4: Control de flujo Condicionales. Motivación. Condicionales

(71.56) Programación. Diagrama

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

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

Ejercicio algoritmo de manejo de lista de datos. Parte II. Diagramas de flujo. (CU00220A)

Sentencias o instrucciones en Visual BASIC

Problemas de programación con iteración para buscar soluciones. Ejercicio resuelto. Diagramas de flujo. (CU00254A)

INTRODUCCIÓN A LA PROGRAMACIÓN.

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

Programa de números aleatorios

MODULO II PROGRAMACIÓN ORIENTADA A EVENTOS

DEFINICIONES BÁSICAS DE LAS ESTRUCTURAS DE DATOS

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA VISUAL BASIC BASICO JAIME RUBIANO LLORENTE

Funciones en Visual Basic

Introducción a C# y la plataforma.net. Pablo Zaidenvoren 2013

Alumnas: Carpio Cárdenas, Claudia Pastor Humpiri, Fanny Rosana

FUNDAMENTOS DE INFORMÁTICA

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

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

Práctica N 04. Programación Visual.NET II. 1. CREACIÓN DE FORMULARIO PARA CONSULTA DE EMPLEADOS(FrmConEmpleados.vb)

El objetivo de este ejemplo es cargar 2 arrays aleatoriamente con Random y después mostrar la suma de esos arrays en un nuevo array.

Sentencias DO-WHILE EN C++

En esta sección se describen las variables, constantes, tipos de datos, operadores y estructuras de control

Práctica 6. Validación de Datos II. Mas Controles.

Resumen del lenguaje de programación Visual Basic.NET

n de un Diagrama de Flujo

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

PROYECTO JUEGO DE 7 Y MEDIO

COLEGIO PABLO DE TARSO IED CONSTRUCCION DE PROYECTOS DE VIDA PRODUCTIVOS VISUAL BASIC PRÁCTICAS DOC RAUL MONROY PAMPLONA

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

Como se declara un vector en Visual Basic 6.0

Es ambigua, ya que la división y la multiplicación tienen el mismo grado de precedencia, qué parte de la expresión se realiza primero?

GUÍA DE TRABAJO N 7 VB.NET Programación de. Software Grado 10 Ing. Néstor Raúl Suarez Perpiñan Página 1 de 11

Fundamentos de Programación Visual Basic

Este es un arreglo de números enteros, o sea que guarda una serie de variables de tipo INTEGER, todas agrupadas en una sola estructura.

Algoritmos y Programación Orientada a Objetos I. Contenedoras de tamaño fijo

Informe de Proyecto de Taller de Operaciones Informáticas. Venta de Ropa Deportiva

Los arreglos, matrices, vectores y vectores de controles

Nombre: Paulina Arias. Curso: 6 to EJERCICIO N. - 1

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

SWITCH JAVASCRIPT. SELECCIÓN ENTRE ALTERNATIVAS. DIAGRAMA DE FLUJO Y EJEMPLO DE APLICACIÓN. (CU01120E)

PRACTICA Nº 8. String String String String String

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

U nidad 6: A rreglos: U nidim ensionales y m ultidim ensionales

Introducción a C# y la plataforma.net

TELF: Ley Orgánica para la mejora de la calidad educativa 8/2013 de 9 de diciembre

INFOTECH CURSO MÓDULO 4. Estructuras de control. Excel Advanced Macros

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Transcripción:

aprenderaprogramar.com Ubound y Lbound en Visual Basic. Conocer índice superior e inferior de arrays (arreglos) Ejemplos y ejercicios. (CU00343A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha revisión: 2029 Autor: Mario R. Rancel Resumen: Entrega nº42 del Curso Visual Basic Nivel I 29

MANEJO DE DATOS CON ARRAYS. LÍMITES SUPERIOR (UBOUND) E INFERIOR (LBOUND). Definido un array A(n) donde n define el índice más grande que puede tener un elemento del array, la función Ubound(A) nos devuelve el valor de n y el valor LBound(A) nos devuelve el valor del índice más bajo que puede tener el array (que normalmente será 0). En las versiones menos recientes de Visual Basic se permitían declaraciones del tipo A(m To n), estando los índices del array comprendidos entre m y n. En este caso la función Lbound(A) nos devuelve el valor del índice menor del array (m) y la instrucción Ubound(A) devuelve el valor del índice mayor (n). En general el índice menor por defecto en un array será 0. No obstante, en las versiones menos recientes de Visual Basic se permitía establecer como primer índice de un array por defecto el 1 mediante la instrucción Option Base escribiendo Option Base 1. Si se hace uso de esa opción los resultados de Lbound se pueden ver afectados por el valor establecido para Option Base, obteniéndose un 0 o un 1 según el caso. En las versiones más recientes de Visual Basic el índice inferior será siempre el cero. El número de elementos del array será m n + 1, donde m es el límite superior y n el límite inferior. Por ejemplo un array declarado como Dim A(3) As Integer consta de 3-0+1 = 4 elementos que son A(0), A(1), A(2) y A(3). Prueba el siguiente código: Código versiones más recientes de VB: 'Curso VB aprenderaprogramar.com Dim A(45) Label1 = "Indice menor del array A = " & LBound(A) & vbcrlf & vbcrlf Label1 = Label1 & "Indice mayor del array A = " & UBound(A) & vbcrlf & vbcrlf Label1 = Label1 & "Array con " & UBound(A) - LBound(A) + 1 & " elementos" On Dim A(45) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Label1.Text = "Indice menor del array A = " & LBound(A) & vbcrlf & vbcrlf Label1.Text = Label1.Text & "Indice mayor del array A = " & UBound(A) & vbcrlf & vbcrlf Label1.Text = Label1.Text & "Array con " & UBound(A) - LBound(A) + 1 & " elementos" En el caso de arrays multidimensionales se hace necesario indicar si queremos referirnos al primer localizador, al segundo, tercero, etc. Así Lbound(A, 3) nos devolvería el índice menor del array A en su dimensión 3. Por ejemplo: Para: Dim A(55, 20, 33, 60) LBound(A, 1) devuelve 0, UBound(A, 1) devuelve 55, LBound(A, 2) devuelve 0, UBound(A, 2) devuelve 20, LBound(A, 3) devuelve 0, UBound(A, 3) devuelve 33, LBound(A, 4) devuelve 0, UBound(A, 4) devuelve 60.

EJERCICIO Desarrollar el pseudocódigo y diagrama de flujo para un algoritmo que calcule la superficie de un terreno que le corresponde a un heredero después de n generaciones, partiendo de una superficie inicial en la generación cero. Se supone que hay división a partes iguales entre herederos SOLUCIÓN Código versiones más recientes de VB: 'Curso VB aprenderaprogramar.com '[Superficie de terreno] Dim i%, n As Integer Dim Supin!, Toca As Single Dim Hgen() As Integer Text1 = "": Text2 = "" Form1.Caption = "Superficie de terreno" CommandCalcular.Caption = "Calcular superficie" Label1.Caption = " Cuál es el número de generaciones?" Label2.Caption = " Cuál es la superficie inicial (m2)?" Private Sub CommandCalcular_Click() n = Val(Text1) ReDim Hgen(n) Supin = Val(Text2) Toca = Supin For i = 1 To n Hgen(i) = InputBox(" Cuál es el número de herederos de la generación " & i & "?", "Nº herederos") Toca = Toca / Hgen(i) LabelFinal.Alignment = 2 LabelFinal.FontBold = True LabelFinal = vbcrlf & "Al heredero actual le corresponde una superficie de " & Toca & " m2" On Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Text = "" : TextBox2.Text = "" Me.Text = "Superficie de terreno" ButtonCalcular.Text = "Calcular superficie" Label1.Text = " Cuál es el número de generaciones?" Label2.Text = " Cuál es la superficie inicial (m2)?" Private Sub ButtonCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCalcular.Click Dim i, n As Integer Dim Supin, Toca As Single Dim Hgen() As Integer n = Val(TextBox1.Text) ReDim Hgen(n) Supin = Val(TextBox2.Text) Toca = Supin For i = 1 To n Hgen(i) = InputBox(" Cuál es el número de herederos de la generación " & i & "?", "Nº herederos") Toca = Toca / Hgen(i) LabelFinal.Font = New Font("Arial", 12, FontStyle.Bold) LabelFinal.TextAlign = ContentAlignment.MiddleCenter LabelFinal.text = vbcrlf & "Al heredero actual le corresponde una superficie de " & Toca & " m2" Comentarios: Para la generación 1, 2, 3,... el número de herederos correspondiente se almacena en el vector Hgen(i), que se declara como array dinámico por no ser conocido el dato de número de herederos a priori. Gráficamente el programa sería este:

A modo de ejemplo, si los datos de entrada son 3 generaciones, superficie inicial 10000 m2, y en cada generación hay dos herederos, obtenemos como resultado que al heredero actual le corresponde una superficie de 1250 m2. EJERCICIO Nos han facilitado el siguiente pseudocódigo y una explicación relativa al objetivo de un programa que debemos realizar: 1. Inicio [Extracción de datos p100 curso VB aprenderaprogramar.com] 2. n = 1 3. Mientras Esperado = Falso Hacer 3.1 Desde i = n hasta n + 99 Hacer Leer Dato(i) Si Dato(i) > 600 y Dato(i) < 700 Entonces j = j + 1 FinSi Siguiente 3.2 Si j > 100 Entonces Esperado = Verdadero FinSi 3.3 Si Esperado = Verdadero Entonces Mostrar Se cumple lo previsto habiendo cumplido, j, datos de un total de, n + 99, datos extraídos SiNo Mostrar Extracción de un nuevo paquete n = n + 100 FinSi Repetir 4. Fin

Nos indican que se trata de extraer datos de un archivo existente en paquetes de 100 unidades. Si el número de datos extraídos con valor superior a 600 y menor de 700 es mayor de 100, se debe mostrar el mensaje Se cumple lo previsto, indicando el número de datos que se extrajeron cumpliendo los requisitos frente al total extraído. En caso contrario, continuar extrayendo paquetes de datos (se consideran ilimitados). Considerar que los datos se encuentran en un archivo creado previamente. SOLUCIÓN Para generar una simulación del archivo con los datos vamos a usar el siguiente código (atención a poner una ruta de archivo correcta, donde queramos guardar el archivo): Código versiones más recientes de VB Curso VB aprenderaprogramar.com Dim Canal As Integer Dim i As Integer Canal = FreeFile Open "C:\misdatos.dat" For Output As Canal For i = 1 To 300 Randomize Write #Canal, Int((750-550 + 1) * Rnd + 550) Close Label1 = Datos generados correctamente On Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim myfiletowrite As New System.IO.StreamWriter("C:\Users\Asus\Desktop\misdat osnet.dat", False) For i = 1 To 300 Randomize() myfiletowrite.writeline(int((750-550 + 1) * Rnd() + 550)) myfiletowrite.close() Label1.Text = "Datos generados correctamente" Hemos establecido un rango de datos entre 550 y 750 para provocar que los datos estén en el entorno de los valores esperados. En caso contrario se puede producir que no exista un número suficiente de datos válidos y se genere un error al tratar de extraer más datos de los realmente existentes en el archivo. El programa se muestra a continuación:

Código versiones más recientes de VB 'Curso VB aprenderaprogramar.com [Extracción datos p100] Dim Canal As Integer Dim i%, j%, n As Integer Dim Esperado As Boolean Dim Dato() As Integer Form1.Caption = "Extracción datos p100" LabelResultado.Alignment = 2 LabelResultado.FontBold = True n = 1 Canal = FreeFile Open "C:\misdatos.dat" For Input As Canal Do While Esperado = False ReDim Dato(n + 99) For i = n To n + 99 Input #Canal, Dato(i) If Dato(i) > 600 And Dato(i) < 700 Then j = j + 1 If j > 100 Then Esperado = True If Esperado = True Then LabelResultado = "Se cumple lo previsto habiendo cumplido " & j & " datos de un total de " & n + 99 & " datos extraidos" Else MsgBox("Extracción de un nuevo paquete") n = n + 100 Loop Close On Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i, j, n As Integer Dim Esperado As Boolean Dim Dato() As Integer Me.Text = "Extracción datos p100" LabelResultado.Font = New Font("Arial", 12, FontStyle.Bold) LabelResultado.TextAlign = ContentAlignment.MiddleCenter n = 1 Dim myfiletoread As New System.IO.StreamReader("C:\Users\Asus\Desktop\misdat osnet.dat", False) Do While Esperado = False ReDim Dato(n + 99) For i = n To n + 99 Dato(i) = myfiletoread.readline() If Dato(i) > 600 And Dato(i) < 700 Then j = j + 1 If j > 100 Then Esperado = True If Esperado = True Then LabelResultado.Text = "Se cumple lo previsto habiendo cumplido " & j & " datos de un total de " & n + 99 & " datos extraidos" Else MsgBox("Extracción de un nuevo paquete") n = n + 100 Loop myfiletoread.close() Gráficamente: Próxima entrega: CU00344A 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