Escolar Documentos
Profissional Documentos
Cultura Documentos
Ejercicio 1
Se tiene una cantidad de nmeros en una hoja de clculo. Se desea determinar si un nmero de esta hoja
es capica o no. En caso positivo imprimir el mensaje S, de lo contrario imprimir No. Adems, en
ambos casos mostrar los dgitos del nmero invertido en cada celda. El nmero siempre es positivo.
Nota: Un nmero es capica si se lee igual de izquierda a derecha que derecha a izquierda.
Para facilitar los clculos se ha elaborado una hoja Excel como se muestra a continuacin:
Se pide:
Indicar los datos de entrada y de salida, plantear el diseo (pseudocdigo) e implementar el problema
en VBA.
Solucin
Anlisis del problema
Datos de entrada: cantidad de nmeros (cantNumero)
Datos de salida:
Introduccin a la Computacin
Pseudocdigo
Inicio NumeroCapicua()
contador<-1
Leer cantNumeros
Mientras (contador <= cantNumeros) hacer
Leer numero
numInvert <- InvertirNum(numero)
Si numero = numInvert entonces
Escribir "Si"
Sino Escribir "No"
Fin Si
contador<-contador+1
Fin Mientras
Fin
Inicio InvertirNum(numero)
numAux <- numero
Mientras (numAux <> 0)
digito <- Residuo(numAux ,10)
nuevoNum <- nuevoNum * 10 + digito
numAux <- Cociente(numAux, 10)
Escribir digito
Fin Mientras
retornar nuevoNum
Fin
Codificacin
Sub NumeroCapicua()
Dim cantNumeros As Integer, numero As Long, numInvert As Long, fila As Integer
cantNumeros = Range("B1")
For fila = 4 To cantNumeros + 3
numero = Cells(fila, 1)
numInvert = InvertirNum(numero, fila)
If numero = numInvert Then
Cells(fila, 2) = "Si"
Else: Cells(fila, 2) = "No"
End If
Next
End Sub
Function InvertirNum(numero As Long, fila As Integer) As Long
Dim numAux As Long, digito As Byte, nuevoNum As Long, col As Integer
numAux = numero
col= 3
Do While (numAux <> 0)
Introduccin a la Computacin
Precio
2299
1599
2099
1099
1399
Introduccin a la Computacin
Se pide:
Solucin
Anlisis del problema
Datos de entrada: cantidad de ventas (cantVentas), cantidad de trabajadores (cantTrab)
Para cada venta: cdigo del trabajador(codTrab), producto, cantidad vendida (cantidad)
Por cada trabajador: cdigo del trabajador(codTrab), nombre
Datos de salida: promedio de ventas totales (promVentas), cantidad de trabajadores cuyas ventas
superan el promedio (cantSuperaProm)
Diagrama de mdulos:
Informe de
ventas de
trabajadores
Calcular la cantidad
de notebooks
vendidas y la venta
total de un trabajador
Hallar el precio de
una notebook
Calcular el
promedio de
ventas totales
Hallar la cantidad
de ventas totales
superiores al
promedio
Introduccin a la Computacin
Codificacin
Const PT=2299, PL=1599, PH=2099, PAC=1099, PAS=1399
Sub VentaTrabajador()
Dim cantVentas As Integer, cantTrab As Integer, i As Integer, codTrab As Byte
Dim cantVend As Integer, ventaTot As Single, promVentas As Single, cantSuperaProm As Integer
cantVentas = Range("C1")
cantTrab = Range("H1")
For i = 1 To cantTrab
codTrab = Cells(i + 5, 5)
Call CalcularNBVendidVentaTotal(codTrab, cantVentas, cantVend, ventaTot)
Cells(i + 5, 7) = cantVend
Cells(i + 5, 8) = ventaTot
cantVend = 0
ventaTot = 0
Next
promVentas = CalcularPromVentas(cantTrab)
cantSuperaProm = HallarCantidadSuperaProm(cantTrab, promVentas)
Range("H2") = promVentas
Range("H3") = cantSuperaProm
End Sub
Introduccin a la Computacin
cantidad = Cells(i + 5, 3)
precio = HallarPrecio(producto)
cantVend = cantVend + cantidad
ventaTot = ventaTot + cantidad * precio
End If
Next
End Sub
Introduccin a la Computacin
End Function
Introduccin a la Computacin
Adems, la hoja Respuestas tiene almacenada para cada especialidad el puntaje mnimo que se debe
obtener para ingresar, la cantidad de preguntas de la prueba y las respuestas correctas de cada una de las
preguntas.
El postulante pudo o no responder una pregunta. Adems, por cada pregunta correcta el puntaje es 1, por
incorrecta es -0.25 y no contestada es 0.
Introduccin a la Computacin
Es por ello que se le solicita que implemente en VBA un programa que procese esta informacin de tal
forma que pueda determinar: el puntaje obtenido por cada postulante, la relacin de ingresantes, la
cantidad de ingresantes por cada especialidad y que pueda mostrar especialidad o especialidades cuya
cantidad de ingresantes es igual a la especialidad con mayor nmero de ingresantes.
Se plantea el diagrama de mdulos mostrado a continuacin.
Se pide:
En VBA sobre Excel, implementar (usando diseo descendente) los mdulos planteados en el diagrama
propuesto.
Introduccin a la Computacin
Solucin
Codificacin
Sub ResultadosAdmision()
Dim cantpostul As Integer, cantespecial As Integer, i As Integer, iresult As Integer
Dim codigo As String, especialidad As String, puntaje As Single, ingreso As String
Dim filapost As Integer
cantpostul = Sheets("Postulantes").Range("C1")
cantespecial = Sheets("Respuestas").Range("C1")
iresult = 3
filapost = 5
' para cada postulante lee cdigo, especialidad, luego obtiene el puntaje y si ingreso o no
For i = 1 To cantpostul
codigo = Sheets("Postulantes").Cells(filapost, 1)
especialidad = Sheets("Postulantes").Cells(filapost, 2)
Call CalcularPuntIngreso(filapost, cantespecial, especialidad, puntaje, ingreso)
Sheets("Postulantes").Cells(filapost, 3) = puntaje
' si ingreso, muestra en la hoja de resultados su cdigo y la especialidad
If ingreso = "si" Then
Sheets("Resultados").Cells(iresult, 1) = codigo
Sheets("Resultados").Cells(iresult, 2) = especialidad
iresult = iresult + 1
End If
filapost = filapost + 1
Next
Call CalcularMostrarCantIngresantes(cantespecial)
Call DeterminarMostrarMayorEspec(cantespecial)
End Sub
Introduccin a la Computacin
For i = 1 To cantespecial
Introduccin a la Computacin
fila = 3
contador = 0
especialidad = Sheets("Resultados").Cells(i + 2, 4)
Do While Sheets("Resultados").Cells(fila, 2) <> ""
If Sheets("Resultados").Cells(fila, 2) = especialidad Then
contador = contador + 1
End If
fila = fila + 1
Loop
Sheets("Resultados").Cells(i + 2, 5) = contador
Next
End Sub
Introduccin a la Computacin
For i = 1 To cantespecial
If Sheets("Resultados").Cells(i + 2, 5) = mayor And Sheets("Resultados").Cells(i + 2, 4) <> nombremayor
Then
Sheets("Resultados").Cells(filamayoringres, 7) = Sheets("Resultados").Cells(i + 2, 4)
filamayoringres = filamayoringres + 1
End If
Next
End Sub
Introduccin a la Computacin
Se pide:
Solucin
Anlisis del problema
Datos de entrada: nmero de registros (numregist), espacio en disco C (espacdiscoC), espacio en
disco D (espacdiscoD), versin del programa de actualizacin (versionProg)
Datos de salida:
Introduccin a la Computacin
Diagrama de mdulos:
Anlisis de
actualizacin de
programas
Obtener la unidad de
destino de un archivo
Convertir tamao en
bytes a Kbytes de un
archivo
Obtener la
compatibilidad de un
archivo
Codificacin
Const KB As Integer = 1024
Sub AnalizarProcesoActualiz()
Dim numregist As Integer, espacdiscC As Long, espacdiscD As Long, version As Byte
Dim extension As String, versionProg As Byte, size As Long, sizeKB As Single, requerido As String
Dim i As Integer, tamacumulC As Long, tamacumulD As Long
numregist = Range("B1")
espacdiscC = Range("E2")
espacdiscD = Range("E3")
versionProg = Range("E4")
tamacumul = 0
For i = 1 To numregist
extension = Cells(i + 7, 1)
version = Cells(i + 7, 2)
size = Cells(i + 7, 3)
Introduccin a la Computacin
requerido = Cells(i + 7, 4)
destino = ObtenerDestino(extension, requerido)
sizeKB = ConvertirKByte(size)
Cells(i + 7, 5) = destino
Cells(i + 7, 6) = sizeKB
If destino = "C:" Then
tamacumulC = tamacumulC + sizeKB
If tamacumulC <= espacdiscC Then
Cells(i + 7, 7) = "OK"
Else:
Cells(i + 7, 7) = "falta espacio en disco C:"
tamacumulC = tamacumulC - sizeKB
End If
Else
tamacumulD = tamacumulD + sizeKB
If tamacumulD <= espacdiscD Then
Cells(i + 7, 7) = "OK"
Else:
Cells(i + 7, 7) = "falta espacio en disco D:"
tamacumulD = tamacumulD - sizeKB
End If
End If
Cells(i + 7, 8) = ObtenerCompatible(versionProg, version)
Next
End Sub
Introduccin a la Computacin