ALGORITMOS (IN220) EXAMEN PARCIAL - SOLUCIÓN Ciclo 2015-02 Secciones Profesores
Duración
: IN41, IN42, IN43, IN44, IN45, IN46, IV42, IV43, IV44, IV45, IX41, IX42, IX43, IX44, IX45, IX46, IX47, IX48 : Aranda Ipince, Duilio Ángel Cárdenas Rengifo, Luís Enrique Castillo Villalobos, Violeta Isabel De La Cerna García, Nelva Bethy Guevara Parker, Hans Christian Morán Huanay, Eduardo Martín Moya Tapia Mauricio Alonso Namay Zevallos, Wilder Adán Power Porto, George Félix Segura Peña, Jaime Ildefonso Vásquez Oré, Marco Antonio : 150 minutos
Indicaciones:
No está permitido el uso de ningún material de consulta (cuadernos, libros, diccionarios, lecturas, etc.). No se permite el uso de calculadora calculad ora científica o programable. pro gramable. No se permite el uso de teléfono celular o cualquier otro aparato electrónico durante el examen, los cuales deben permanecer apagados y guardados. Escriba con lapicero azul o negro solo en los espacios indicados Los exámenes resueltos con lápiz no tienen derecho a reclamo Devuelva todo el material recibido, inclusive la hoja de borrador (no será corregida)
1 (3 p.)
2 (2 p.)
3 (2 p.)
4 (3 p.)
1
5 (4 p.)
6 (6 p.)
Nota
PREGUNTA 1 (3 p.) Marque la opción correcta según corresponda (0.5 p. c/u)
1.1 ¿Cuántas condiciones tiene la instrucción
1.4 ¿Cuál no corresponde necesariamente a
selectiva doble? a) Una b) Dos c) Tres d) Más de tres e) Ninguna de las anteriores
las características de un algoritmo? a) Preciso b) Estructurado c) Finito d) Definido e) Repetitivo
1.2 Se quiere declarar una variable para el número de DNI de una persona, ¿qué tipo de
1.5 Para manejar la hora de ingreso de un tra bajador, la variable debe ser declarada como: a) Time b) Date c) String d) Cualquiera de ellas e) Ninguna de anteriores
variable es más adecuado? a) Integer b) Single c) Long d) Double e) String
1.6 La instrucción MessageBox en Visual 1.3 ¿Cómo debe ser el tipo de variable del
Basic sirve para: I. Entrada de información II. Salida de información III. Mostrar botones Son verdaderas: a) Solo I b) Solo II c) I y II d) Todas e) Ninguna
contador de la estructura de control repetitiva (For-Next)? I. Entero II. Real III. Cadena de texto Son verdaderas: a) Solo I b) Solo II c) I y II d) Todas e) Ninguna
Observaciones: 1.1) La instrucción selectiva doble (If-Then-Else) solo tiene una condición (que puede ser verdadera o falsa); se entiende como condición a un valor tipo Boolean que puede resultar de una o más operaciones lógicas 1.2) También podría usarse el tipo Long (DNI es un número entero de 8 cifras) pero debe considerarse el formato adecuado cuando empieza con cero y que no se realizarán operaciones con ese número; el tipo de variable más adecuado es String*8, debiendo verificarse que el valor ingresado sea numérico 1.5) El tipo de variable Date almacena fecha y hora en un solo número, Time no existe 1.6) La instrucción MessageBox no existe, el no mbre correcto es MsgBox.
2
PREGUNTA 2 (2 p.) 2.1 Analice el siguiente segmento de programa e indique qué valores se mostrarán para las variables T, M y A luego de ejecutar el programa. (0.5 p.)
Dim A As Integer, C As Integer, T As Integer, M As Integer A = 1 : C = 0 : T = 0 : M = 10
Do T = T + (M Mod A) M=M\A A=A+2 Loop Until A > = 8
Respuesta: T = 4 M = 0 A = 9
2.2 Analice el siguiente segmento de programa e indique los valores de las variables T, M y C luego de ejecutar el programa. (0.5 p.)
Dim A As Integer, C As Integer, T As Integer, M As Integer A = 1 : C = 0 : T = 0 : M = 10 If A < > C Or M > T Then T = T + C If C = T And A > T Then M=M\A
Else C=C*A
Respuesta: T = 0 M = 10 C =
End If
2.3 Analice el siguiente programa y complete la tabla de los valores que se obtendrán para las variables N, C y S al ejecutarse el programa. (1 p.)
Dim N As Integer, C As Integer, S As Integer N = 0 : C = 1 : S = 12
Do
0
N
C
S
0 0 0 0
1 3 5 7
12 9 4 -3
If S Mod 3 >= 0 Then C = C + 2
S = S – C Loop Until S <= N
PREGUNTA 3 (2 p.) Elabore en pseudocódigo el algoritmo que solicite el monto de la Venta a un cliente (debidamente validado), y calcule el Descuento otorgado sabiendo que el % se aplica sobre el monto de venta: Si el monto vendido es menor que $2000 entonces se le descuenta 3% Si el monto está entre $2000 y $5000 se descuenta 5% Si la venta es mayor que $5000 pero menor que $8000 se descuenta 7% En cualquier otro caso se le otorga el 9.5% 3
Calificación: Ingreso y validación de datos (0.5 p.); Procesamiento y salida (1.5 p.) Inicio Repetir Mostrar “Ingrese el monto de la venta” Ingresar Venta Si Venta <= 0 Entonces Mostrar “El valor de la venta debe ser positivo” Hasta Venta > 0 Si Venta < 2000 Entonces pDesc 0.03 De otro modo Si Venta <= 5000 Then pDesc 0.05 De otro modo Si Venta < 8000 Entonces pDesc 0.07
De otro modo pDesc 0.095
Fin de Si Descuento Venta * pDesc Mostrar “El descuento a aplicar es: ” & Descuento
Fin PREGUNTA 4 (3 p.) El siguiente programa en VBA calcula el volumen de una pirámide, dados los lados de la base (a y b) y la altura (h). Coloque en la columna de la izquierda un número indicando el orden en que deben ir las instrucciones. (0.2 p. c/u)
No. 0
Instrucción
Private Sub Piramide( ) 4/5/6 a = Val(InputBox("Ingrese un lado de la base")) 2/3 Do 11 V=a*b*h/3 13 Respuesta = MsgBox("¿Desea realizar otro cálculo?", vbYesNo) 5/4/6 h = Val(InputBox("Ingrese la altura de la pirámide")) 12 MsgBox "El volumen de la pirámide es " & V 6/4/5 b = Val(InputBox("Ingrese el otro lado de la base")) 8 MsgBox "Los datos deben ser positivos" 7 If a <= 0 Or b <= 0 Or h <= 0 Then 10 Loop Until a>0 And b>0 And h>0 15 End Sub 9 End If 14 Loop Until Respuesta= vbNo 3/2 Do 1 Dim a As Single, b As Single, h As Single, V As Single, Respuesta As Integer
4
PREGUNTA 5 (4 p.) Se pide desarrollar el diagrama de flujo del algoritmo para calcular la raíz n-ésima de un número real positivo A por iteraciones sucesivas, según la fórmula siguiente:
+ = 1 − ( 1)
0
Donde los subíndices (k y k +1) denotan las iteraciones sucesivas de , siendo el valor inicial de estimación. Las iteraciones continúan hasta que el valor absoluto de la diferencia entre los resultados sucesivos sea menor que 110 6.
|+ |
–
Como datos se debe ingresar: el número A del cual se desea calcular la raíz n-ésima, el valor de n, y el valor inicial de estimación x0. Debe validar que los valores ingresados sean positivos y que además x0 sea menor que A.
Calificación: Ingreso y validación de datos (1 p.); Procesamiento y salida (3 p.) INICIO
A, n, x0
A > 0 n > 0 x0 > 0 x0 < n
No
Sí
x1 (A/x0^(n-1) + (n-1)*x0)/n
No x0 x1
Abs(x1-x0) < 0.000001 Sí
“La raíz ” & n & “ de ” &
& “ es ” & x1
FIN
5
A
“Datos incorrectos”
PREGUNTA 6 (6 p.) Ud. ha sido contratado recientemente como asistente del Gerente de Ventas de un hotel, y el primer trabajo que se le encarga es desarrollar un programa en Visual Basic que permita atender diariamente a los clientes que llegan al hotel según el siguiente esquema: a) Se ingresan como datos la cantidad de habitaciones disponibles de tipo Simple y Doble para ese día. La atención finaliza cuando no queden clientes por atender o no hay habitaciones disponibles. (1 p.) b) Cuando el cliente llega se le solicita los siguientes datos: Tipo de habitación (S o D), y si es cliente Particular o viene de una Empresa (E o P) y el número de noches que se quedará. (1 p.) c) Si hubieran habitaciones disponibles del tipo solicitado por el cliente, se le indica el monto total a pagar. Los precios se muestran en la tabla debajo. (2 p.)
Precios de habitaciones Tipo de habitación S – Simple D – Doble
Precio por noche, US$ E – Empresa P – Particular 65.00 80.00
75.00 100.00
Finalizada la atención de los clientes del día, muestre las siguientes estadísticas: d) Monto Total cobrado por el alquiler de las habitaciones. (1 p.) e) ¿Qué porcentaje de habitaciones de tipo Doble están ocupadas? (1 p.) Option Explicit Private Sub CommandButton1_Click() Dim QSimples As Integer, QDobles As Integer, Tipo As String * 1, Cliente As String * 1, Noches As Integer, Rpta As Integer Dim TotalDobles As Integer, TSimples As Integer, TDobles As Integer, Asignado As String * 1 Dim C As Integer, Precio As Single, Total As Single, S As Single 'Ingresar cantidad inicial de habitaciones simples y dobles disponibles QSimples = Val([B4]): QDobles = Val([B5]) If QSimples < 0 Or QDobles < 0 Then MsgBox "Debe ingresar valores mayores o iguales a cero", vbCritical Else TotalDobles = QDobles 'Guardar el valor inicial para contestar a la pregunta (d) % de habitaciones dobles ocupadas C = 0: S = 0 Do 'Ingreso repetitivo de datos hasta que se conteste NO o se hayan agotado todas las habitaciones Do Tipo = UCase(InputBox("Ingrese el tipo de habitación: Simple o Doble")) Loop Until Tipo = "S" Or Tipo = "D"
6
Do Cliente = UCase(InputBox("Ingrese el tipo de cliente: Empresa o Particular")) Loop Until Cliente = "E" Or Cliente = "P" Do Noches = Val(InputBox("Ingrese el número de noches que se quedará:")) Loop Until Noches > 0 'Determinar la tarifa correspondiente y ver disponibilidad de habitación solicitada If Tipo = "S" Then If Cliente = "E" Then Precio = 65 Else Precio = 75 If QSimples > 0 Then QSimples = QSimples - 1 Asignado = "S" Else Asignado = "N" End If 'También puede programarse en una sola línea: 'If QSimples > 0 Then QSimples = QSimples - 1: Asignado = "S" Else Asignado = " N" Else If Cliente = "E" Then Precio = 80 Else Precio = 100 If QDobles > 0 Then QDobles = QDobles - 1 Asignado = "S" Else Asignado = "N" End If 'También puede programarse en una sola línea: 'If QDobles > 0 Then QDobles = QDobles - 1: Asignado = "S" Else Asignado = "N" End If 'Calcular y mostrar datos de habitación asignada If Asignado = "S" Then C = C + 1: Total = Precio * Noches: S = S + Total Cells(7 + C, 1) = C: Cells(7 + C, 2) = Tipo: Cells(7 + C, 3) = Cliente Cells(7 + C, 4) = Noches: Cells(7 + C, 5) = Total Else MsgBox "No hay disponibilidad de habitaciones del tipo " & Tipo, vbCritical End If Rpta = MsgBox("¿Hay más clientes?", vbYesNo) Loop Until Rpta = vbNo Or (QSimples + QDobles = 0) 'Se repite hasta que se contesta No, o se agoten todas las habitaciones [H8] = S 'Monto total de ingresos If TotalDobles > 0 Then [H9] = (TotalDobles - QDobles) / TotalDobles * 100 & " %" End If End Sub
7