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