Ejercicios de Programación VBA: Conversor de Temperatura y Operaciones con Matrices

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 7,23 KB

Ejercicio 1: Procedimientos

a. Conversor a Grados Celsius

Realiza un procedimiento llamado ConversorCelsius que recoja por pantalla el tipo de temperatura origen (F para Fahrenheit y K para Kelvin), una temperatura (entero con decimales) y devuelva por pantalla la cantidad de grados Celsius (C). En el caso de no introducir F o K, mostrará un mensaje de error. Utilizar "Select Case".

Ayuda: Para pasar de F a C C = (5/9)*(F-32) y para pasar de K a C C = K - 273

b. Procedimiento con Parámetros

Realiza este mismo procedimiento, pero usando parámetros, es decir, el tipo y la temperatura los recibe el procedimiento por parámetros. El nombre del procedimiento parametrizado será ConversorCelsiusP y el procedimiento que lo invoca PruebaEjercicio1B(). Además de mostrar por pantalla el resultado, el procedimiento guardará el valor en la celda activa.

Solución Ejercicio 1

Código del Procedimiento ConversorCelsius

Public Sub ConversorCelsius()
    Dim Temperatura As Single
    Dim Tipo As String
    Dim Celsius As Single
    Tipo = InputBox("Indica la medida en la que se encuentra: F para Fahrenheit y K para Kelvin.")
    Temperatura = InputBox("Indica la temperatura a convertir: ")
    Select Case Tipo
        Case "F"
            Celsius = (5 / 9) * (Temperatura - 32)
            MsgBox "La temperatura en grados Celsius es " & Celsius
        Case "K"
            Celsius = (Temperatura - 273)
            MsgBox "La temperatura en grados Celsius es " & Celsius
        Case Else
            MsgBox "No se reconoce el tipo de temperatura. F para Fahrenheit y K para Kelvin."
    End Select
End Sub

Código del Procedimiento Parametrizado ConversorCelsiusP

Public Sub ConversorCelsiusP(Temperatura As Single, Tipo As String)
    Dim Celsius As Single
    Select Case Tipo
        Case "F"
            Celsius = (5 / 9) * (Temperatura - 32)
            MsgBox "La temperatura en grados Celsius es " & Celsius
            ActiveCell.Value = Celsius
        Case "K"
            Celsius = (Temperatura - 273)
            MsgBox "La temperatura en grados Celsius es " & Celsius
            ActiveCell.Value = Celsius
        Case Else
            MsgBox "No se reconoce el tipo de temperatura. F para Fahrenheit y K para Kelvin."
    End Select
End Sub

Código del Procedimiento PruebaEjercicio1B

Public Sub PruebaEjercicio1B()
    Dim Temperatura As Single
    Dim Tipo As String
    Tipo = InputBox("Indica la medida en la que se encuentra: F para Fahrenheit y K para Kelvin.")
    Temperatura = InputBox("Indica la temperatura a convertir: ")
    ConversorCelsiusP Temperatura, Tipo
End Sub

Función para Verificar si un Número es Impar

Public Function EsImpar(n As Integer) As Boolean
    If (n Mod 2 = 0) Then
        EsImpar = False
    Else
        EsImpar = True
    End If
End Function

Función para Generar una Cadena de Caracteres

Public Function GeneraCadena(Caracter As String, n As Integer) As String
    Dim i As Integer
    Dim cadena As String
    cadena = ""
    For i = 1 To n
        cadena = cadena & Caracter
    Next
    GeneraCadena = cadena
End Function

Ejercicio 2: Generación de Caracteres

a. Procedimiento GeneraLetra

Realiza un procedimiento llamado GeneraLetra que pida por pantalla un número impar mayor de 5 que simboliza el tamaño de la cuadrícula a usar. Si el número no cumple estas condiciones, mostrará un mensaje de error indicando que el tamaño mínimo de la cuadrícula es 5. La función debe generar el carácter "P" a base de “*” y el resto de caracteres “ ” (espacios en blanco) teniendo en cuenta que una cuadrícula de nxn elementos. El resultado se visualizará en la Ventana de Inmediato.

La comprobación de par o impar y la creación de secuencias del mismo carácter deben realizarse a través de funciones auxiliares:

  • GeneraCadena(caracter, n) ‘Genera una cadena de n elementos del carácter ‘carácter’
  • EsImpar(n) ‘Devuelve Verdadero si el número introducido es impar y Falso en otro caso.

Solución Ejercicio 2

Código del Procedimiento GeneraCaracter

Public Sub GeneraCaracter()
    Dim n As Integer
    Dim i As Integer
    Dim linea As String
    linea = ""
    n = InputBox("Introduce el ancho de la cuadrícula (número impar mayor que 5): ")
    If EsImpar(n) And n > 5 Then
        ' Genero el bucle que me recorre la figura
        For i = 1 To n
            If i = 1 Or i = (n \ 2) + 1 Then ' Caso de ser la primera linea o la linea central
                linea = linea & GeneraCadena("*", n) & vbCr
            ElseIf i > 1 And i < (n \ 2) + 1 Then ' Caso de estar entre la primera linea y el centro
                linea = linea & "*" & GeneraCadena(" ", n - 2) & "*" & vbCr
            Else ' Nos encontramos en el resto de casos
                linea = linea & "*" & GeneraCadena(" ", n - 1) & vbCr
            End If
        Next
        ' Imprimimos el caracter P generado por pantalla (puede verse diferente) y por ventana de inmediato (se ve bien)
        Debug.Print linea
        MsgBox linea
    Else
        MsgBox "El valor introducido debe ser impar y mayor que 5."
    End If
End Sub

Ejercicio 3: Comunicación Excel - VBA

a. Escritura de Valores en Hoja 1

Escribir en la Hoja 1 del documento los siguientes valores:

(Se asume que el usuario debe introducir una matriz en la Hoja 1)

b. Procedimiento MultiplicaMatrizPorEntero

Escribir un procedimiento llamado MultiplicaMatrizPorEntero que pida al usuario el rango de la matriz origen y un número entero, y calcule la matriz resultante de multiplicar la matriz origen por el número, almacenando en la matriz destino el resultado.

Ayuda:

  • El inicio de la matriz destino es la celda F4, por lo que se tendrá que activar desde el código del procedimiento para que sea la celda activa.
  • Ejemplo de uso de variables Range:

texto = “G7”

Set variableRango = Range(texto)

variableRango(1,1).Value hace referencia al valor de la celda G7.

variableRango(2,1).Value hace referencia al valor de la celda G8.

variableRango(1,2).Value hace referencia al valor de la celda H7.

Solución Ejercicio 3

Código del Procedimiento MultiplicaMatrizEntero

Public Sub MultiplicaMatrizEntero()
    Dim Origen As Range
    Dim Destino As Range
    Dim i As Integer, j As Integer, valor As Integer
    Set Origen = Range(InputBox("Introduce el rango de la matriz origen"))
    valor = InputBox("Introduce el valor a multiplicar")
    Set Destino = Range("F4")
    Destino.Activate
    For i = 1 To Origen.Rows.Count
        For j = 1 To Origen.Columns.Count
            Destino(i, j) = Origen(i, j) * valor
        Next j
    Next i
End Sub

Entradas relacionadas: