Introduccin a la Computacin Estudios Generales Ciencias
Taller 5 Repaso de Estructuras Selectivas e Iterativas
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)
Para cada nmero: numero
Datos de salida:
Para cada nmero: mensaje, dgitos del nmero invertido
Introduccin a la Computacin Estudios Generales Ciencias
Pseudocdigo Inicio NumeroCapicua() contador
Introduccin a la Computacin Estudios Generales Ciencias
digito = numAux Mod 10 nuevoNum = nuevoNum * 10 + digito numAux = numAux \ 10 Cells(fila, col) = digito col= col + 1 Loop InvertirNum = nuevoNum End Function Ejercicio 2 (Adaptado de la prctica 4 2015-1) A Juan se le ocurri guardar la informacin de las ventas de sus trabajadores durante el mes de mayo en
una tabla (Representacin reducida de ventas en mayo), donde las filas guardan la informacin de cada
venta. En dicha tabla, la primera, la segunda y la tercera columna representan el cdigo del trabajador, el
producto (Notebook) que vendi y la cantidad de productos vendidos, respectivamente.
Un trabajador puede aparecer ms de una vez en dicha tabla. Adems, debe tomar en cuenta que solo son
5 productos.
Juan desea pasar esta informacin a una tabla completa donde pueda visualizar para cada trabajador, la
cantidad de notebooks vendidas as como la venta total realizada. Adicionalmente, tambin desea hallar el
promedio de las ventas totales y la cantidad de trabajadores que superan dicho promedio. Esta tabla con
toda la informacin quedar de la manera que se muestra a continuacin:
Para calcular la venta total cuenta con la siguiente informacin.
Notebook Precio
TOSIBA 2299
LENUEVO 1599
HPP 2099
ACERR 1099
ASIS 1399
Introduccin a la Computacin Estudios Generales Ciencias
Se pide:
Elaborar el anlisis del problema, planteando un diagrama de mdulos de por lo menos 4
(incluido el principal).
En VBA sobre Excel, implementar (usando diseo descendente) los mdulos planteados en
el diagrama propuesto.
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)
Para cada trabajador: cantidad de notebooks vendidas (cantVend),venta total(ventaTot)
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 Estudios Generales Ciencias
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
Sub CalcularNBVendidVentaTotal(codTrab As Byte, cantVentas As Integer, cantVend As Integer, _
ventaTot As Single)
Dim codigo As Byte, producto As String, precio As Single, i As Integer, cantidad as Integer
For i = 1 To cantVentas
codigo = Cells(i + 5, 1)
If codigo = codTrab Then
producto = Cells(i + 5, 2)
Introduccin a la Computacin Estudios Generales Ciencias
cantidad = Cells(i + 5, 3)
precio = HallarPrecio(producto)
cantVend = cantVend + cantidad
ventaTot = ventaTot + cantidad * precio
End If
Next
End Sub
Function CalcularPromVentas(cantTrab As Integer) As Single
Dim suma As Single, i As Integer, promedio As Single, monto as Single
suma = 0
For i = 1 To cantTrab
monto = Cells(i + 5, 8)
suma = suma + monto
Next
promedio = suma / cantTrab
CalcularPromVentas = promedio
End Function
Function HallarCantidadSuperaProm(cantTrab As Integer, promVentas As Single) As Integer
Dim contador As Integer, i as Integer, monto as Single
contador = 0
For i = 1 To cantTrab
monto = Cells(i + 5, 8)
If monto > promVentas Then
contador = contador + 1
End If
Next
HallarCantidadSuperaProm = contador
Introduccin a la Computacin Estudios Generales Ciencias
End Function
Function HallarPrecio(producto As String) As Single
Dim precio As Single
If producto = "TOSIBA" Then
precio = PT
ElseIf producto = "LENUEVO" Then
precio = PL
ElseIf producto = "HPP" Then
precio = PH
ElseIf producto = "ACERR" Then
precio = PAC
Else: precio = PAS
End If
HallarPrecio = precio
End Function
Ejercicio 3 (Examen 2 2014-2)
Una institucin educativa ha realizado su proceso de admisin a las diversas especialidades que ofrece.
Por ello, ha registrado la informacin de los postulantes en una hoja de clculo de nombre Postulantes.
En ella se ha anotado de cada postulante: su cdigo, su especialidad y las respuestas a cada una de las
preguntas de su prueba.
Introduccin a la Computacin Estudios Generales Ciencias
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 Estudios Generales Ciencias
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 Estudios Generales Ciencias
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 Estudios Generales Ciencias
Sub CalcularPuntIngreso(filapost As Integer, cantespecial As Integer, especialidad As String,
puntaje As Single, ingreso As String)
Dim fila As Integer, puntajemin As Single, cantpreg As Integer, i as Integer
puntaje = 0
fila = BuscarFila(especialidad) ' devuelve fila donde estan las respuestas de la especialidad
' lee puntaje mnimo y cantidad de preguntas de la especialidad
puntajemin = Sheets("Respuestas").Cells(fila, 2)
cantpreg = Sheets("Respuestas").Cells(fila, 3)
' obtiene puntaje de un alumno
For i = 1 To cantpreg
If Sheets("Postulantes").Cells(filapost, i + 3) = "" Then
puntaje = puntaje + 0
ElseIf Sheets("Postulantes").Cells(filapost, i + 3) = Sheets("Respuestas").Cells(fila, i + 3) Then
puntaje = puntaje + 1
Else: puntaje = puntaje - 0.25
End If
Next
'compara con el puntaje mnimo
If puntaje >= puntajemin Then
ingreso = "si"
Else: ingreso = "no"
End If
End Sub
Sub CalcularMostrarCantIngresantes(cantespecial As Integer)
Dim fila As Integer, i As Integer, contador As Integer, especialidad As String
For i = 1 To cantespecial
Introduccin a la Computacin Estudios Generales Ciencias
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
Sub DeterminarMostrarMayorEspec(cantespecial As Integer)
Dim mayor As Integer, filamayoringres As Integer, i As Integer
Dim nombremayor As String
filamayoringres = 2
' busca la especialidad con mayor cantidad de ingresantes
For i = 1 To cantespecial
If Sheets("Resultados").Cells(i + 2, 5) > mayor Then
nombremayor = Sheets("Resultados").Cells(i + 2, 4)
mayor = Sheets("Resultados").Cells(i + 2, 5)
End If
Next
' muestra especialidad con mayor cantidad de ingresantes y aumenta la fila para mostrar otras
especialidades(si es que hay)
Sheets("Resultados").Cells(filamayoringres, 7) = nombremayor
filamayoringres = filamayoringres + 1
' busca y muestra la(s) especialidad(es) si tienen la misma cantidad de ingresantes que el mayor
Introduccin a la Computacin Estudios Generales Ciencias
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
Function BuscarFila(especialidad As String) As Integer
Dim fila As Integer
fila = 5
Do While especialidad Sheets("Respuestas").Cells(fila, 1)
fila = fila + 1
Loop
BuscarFila = fila
End Function
Ejercicio 4 (Adaptado Examen 2 2011-1)
Cuando actualizamos un programa instalado en nuestras computadoras (cambiamos a una versin ms
reciente), usualmente agregamos un conjunto de archivos nuevos. Un tcnico de soporte quiere verificar,
antes de proceder con la actualizacin de algunos programas de las computadoras a su cargo, si este
proceso ser posible dados los datos de cada uno de los archivos a agregar, para lo cual se cuenta con
una hoja de clculo como la siguiente:
Introduccin a la Computacin Estudios Generales Ciencias
Para cada uno de los archivos nuevos deber determinar
La unidad de destino teniendo en cuenta la extensin del archivo y la descripcin de requerido
(Si/No). Si la extensin es dll o exe y el archivo es requerido (valor es igual a Si) entonces la
unidad de destino es C: en caso contrario ser D:
Tamao requerido, convirtiendo tamao del archivo en bytes a Kbytes (1Kbyte =1024 bytes)
Instalacin, esto depende de si hay espacio suficiente en la unidad de destino para archivo nuevo
Compatibilidad, teniendo en cuenta la versin del archivo nuevo y del programa que se
actualizar. Se produce el error de compatibilidad si la versin del archivo nuevo es inferior al de
programa o es superior en ms de una versin.
Se pide:
Elaborar el anlisis del problema (datos de entrada, de salida y diagrama de mdulos).
En VBA sobre Excel, implementar (usando diseo descendente) los mdulos planteados en el
diagrama propuesto.
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)
Para cada archivo: extension, version, tamao (size), requerido
Datos de salida:
Para cada archivo: destino, tamao en Kbytes (sizeKB), mensaje de instalacin,
compatible
Introduccin a la Computacin Estudios Generales Ciencias
Diagrama de mdulos:
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)
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
Introduccin a la Computacin Estudios Generales Ciencias
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
Introduccin a la Computacin Estudios Generales Ciencias
Else: ObtenerDestino = "D:"
End If
End Function
Function ConvertirKByte(size As Long) As Single
ConvertirKByte = size / KB
End Function
Function ObtenerCompatible(versionProg As Byte, version As Byte) As String
If (version = versionProg Or version = versionProg + 1) Then
ObtenerCompatible = "Compatible"
Else: ObtenerCompatible = "No compatible"
End If
End Function
San Miguel, Junio de 2015
Top Related