Material IC-Taller 5_2015_1 Con Solucionario

17
Introducción a la Computación Estudios Generales Ciencias Taller 5– Repaso de Estructuras Selectivas e Iterativas Ejercicio 1 Se tiene una cantidad de números en una hoja de cálculo. Se desea determinar si un número de esta hoja es capicúa o no. En caso positivo imprimir el mensaje “Sí”, de lo contrario imprimir “No”. Además, en ambos casos mostrar los dígitos del número invertido en cada celda. El número siempre es positivo. Nota: Un número es capicúa si se lee igual de izquierda a derecha que derecha a izquierda. Para facilitar los cálculos se ha elaborado una hoja Excel como se muestra a continuación: Se pide: Indicar los datos de entrada y de salida, plantear el diseño (pseudocódigo) e implementar el problema en VBA. Solución Análisis del problema Datos de entrada: cantidad de números (cantNumero) Para cada número: numero Datos de salida: Para cada número: mensaje, dígitos del número invertido

description

Solucionarlo Introducción a la informática

Transcript of Material IC-Taller 5_2015_1 Con Solucionario

  • 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