Sie sind auf Seite 1von 17

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<-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

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
TOSIBA
LENUEVO
HPP
ACERR
ASIS

Precio
2299
1599
2099
1099
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:

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

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 <= 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

Function ObtenerDestino(extension As String, requerido As String) As String


If (extension = "dll" Or extension = "exe") And requerido = "Si" Then
ObtenerDestino = "C:"

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

Das könnte Ihnen auch gefallen