Universidad de Costa Rica
|
|
|
|
|
Duración: dos horas. Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta la documentación. Cuenta la redacción y la ortografía. Cuentan las convenciones. Puede hacer el examen con lápiz. ¡No haga más de lo que se le pide! ¡ESCOGA 3 DE LAS 4 PREGUNTAS!
1) [33 pts] Un cuadrado mágico es una matriz en que la suma los números de las filas y las columnas, o de la diagonal, siempre es la misma. Por ejemplo, los siguientes son cuadrados mágicos:
En este problema use la siguiente definición del objeto TMagico:+---+---+---+ | 8 | 1 | 6 | 1 1 1 1 1 +---+---+---+ 1 1 1 1 1 | 3 | 5 | 7 | 1 1 1 1 1 +---+---+---+ 1 1 1 1 1 | 4 | 9 | 2 | 1 1 1 1 1 +---+---+---+
CONST
MxSize = 200;
TYPE
TMagico = OBJECT
PRIVATE
_m : ARRAY[1..MxSize,1..MxSize] OF INTEGER; { matriz }
_n : WORD; { tamaño de _m[] }
PUBLIC
PROCEDURE Init; { Constructor }
... etc ...
FUNCTION Ok : BOOLEAN;
END; { TMagico }
Implemente el método TMagico.Ok(), que retorna TRUE cuando los valores almacenados en el objeto TMagico forman un cuadrado mágico, y FALSE en caso contrario.
1.a) [11 pts] Especifique el método TMagico.Ok().
1.b) [22 pts] Implemente el método TMagico.Ok().
2) [33 pts] El ICE acaba de contratarlo para automatizar el cobro de las tarifas de llamadas por teléfono celular, para lo que usted debe aplicar la siguente tabla:
Desde Hasta Tarifa
--------------- ------
[1] 00:00 --> 07:59 0.25
[2] 08:00 --> 11:59 0.75
[3] 12:00 --> 16:59 1.00
[4] 17:00 --> 23:59 0.35
Las tarifas son en colones por minuto. Si una llamada comienza a las 07:45 y termina a las 08:15, entonces para calcular el costo usted tiene que contar cuántos minutos en cada rango usó el cliente, y retornar el acumulado. En este caso se han usado [07:45-->07:59] = 15 minutos en el rango [1], y [08:00-->08:15] = 16 minutos en el rango [2], por lo que el costo total de la llamada será ¢nbsp;15.75:
Implemente el método TTarifa.Calcule(desde, hasta), que retorna el valor de la costo de una llamada que comienza en la hora "desde" y termina en la hora "hasta". Ninguna llamada cruza la media noche. Use las horas en el formato militar: 800 es las 8:00 am, y 1315 es 13:15 o sea 1:15 pm. Use la siguiente definición para el objeto TTarifa:
CONST
MxSize = 200;
TYPE
TTarifa = OBJECT
PRIVATE
_de : ARRAY[1..MxSize] OF WORD; { rango "desde" }
_a : ARRAY[1..MxSize] OF WORD; { rango "hasta" }
_tf : ARRAY[1..MxSize] OF REAL; { tarifa }
_n : WORD; { cantidad de valores en la tabla }
PUBLIC
PROCEDURE Init; { Constructor }
... etc ...
FUNCTION Calcule(desde, hasta: WORD) : REAL;
END; { TTarifa }
2.a) [11 pts] Especifique el método TTarifa.Calcule().
2.b) [22 pts] Implemente el método TTarifa.Calcule()
3) [33 pts] Implemente la función BinDec(). [Sugerencia: use un ciclo FOR y procese la hilera de atrás hacia adelante].
FUNCTION BinDec(
{+} b: STRING { número en formato binario }
) {>>>>}: LONGINT; { número en decimal }
{ RESULTADO
Toma la hilera "b" y la transforma al valor decimal equivalente.
- "b" es un número binario compuesto de unos y ceros.
- "b" sólo puede contener los caracteres "0" y "1".
- "b" pude tener una longitud máxima de 255 caracteres. }
{ EJEMPLO 6..3..0 6..3..0
b = '0100101' b = '1000110'
-------------- --------------
0 * 2^6 = 0 1 * 2^6 = 64
1 * 2^5 = 32 0 * 2^5 = 0
0 * 2^4 = 0 0 * 2^4 = 0
0 * 2^3 = 0 0 * 2^3 = 0
1 * 2^2 = 4 1 * 2^2 = 4
0 * 2^1 = 0 1 * 2^1 = 2
1 * 2^0 = 1 0 * 2^0 = 0
---- ----
BinDec(b) ==> 37 70
37 = 0*2^6 + 1*2^5 + 0*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0
70 = 1*2^6 + 0*2^5 + 0*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 0*2^0 }
4) [33 pts] Considere la siguiente función, que ha sido pasada por el Destructor Interplanetario de Programas Pascal:
FUNCTION palmena(glutabana: LONGINT ) : BOOLEAN; CONST plegelena = 10; VAR gluta : LONGINT; VAR muca : LONGINT; VAR plangalana : LONGINT; BEGIN gluta := 0; plangalana := glutabana; WHILE plangalana <> 0 DO BEGIN muca := plangalana MOD plegelena; gluta := gluta + (muca * muca * muca); plangalana := plangalana DIV plegelena; END; palmena := (gluta = glutabana);END;
4.a) [11 pts] Reescriba esta función de acuerdo a las Convenciones de Programación de Adolfo Di Mare.
4.b) [11 pts] Haga un ejemplo del resultado de ejecutar esta función con el valor 408.
4.c) [11 pts] Diga qué hace la función. Sugiera nombres mejores para cada una de los identificadores de la función.
Adolfo Di Mare <adolfo@di-mare.com>.
|
|
|