UNIVERSIDAD DE COSTA RICA I CICLO DE 2000 ESCUELA DE CIENCIAS DE LA Prof. Adolfo Di Mare COMPUTACION E INFORMATICA CI-0202 Principios de Informática Examen #2 Grupos 08 y 09 De estas preguntas, conteste una 1) [100 pts] Un número es primo si es divisible únicamente por uno y por sí mismo. Implemente la siguiente rutina: void primo(int n, int vec[]); /* resultado Retorna en el vector vec[] los "n" primeros número primos */ /* requiere vec[] debe tener espacio suficiente para almacenar los "n" primeros número primos */ 2) [100 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á ¢15.75: (15 * 0.25) + (16 * 0.75) = 3.75 + 12.00 = 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. 3) [100 pts] Para la solución de la tarea programada del caballo, Implemente el método TTablero::Completo() que verifica que el tablero TB[] contiene una solución válida del problema del caballo, o sea, que el tablero se puede recorrer con los movimientos del caballo de ajedrez visitando cada casilla exactamente una ves. SUGERENCIA: use el método TTablero::Movidas(), y programe un método TTablero::Busque(int n, int &i, int &j) que encuentre en el tablero la posición (i,j) de la n-ésima movida. class TTablero { public: TTablero (int i, int j) { Llena_Tablero (i, j); }; TTablero () { Llena_Tablero (0, 0); }; enum { N = 8, // Tamaño del tablero VACIO = -1, // Marca casilla vacía FALTA = -3, // Falta visitar esta casilla del tablero MV = 8 // Cantidad máxima posible de movidas del caballo }; private: void Movidas (int i, int j, int mv[2][MV+1]); void Mejor_Movida(int& i, int& j); void Limpia_Tablero(); public: void Llena_Tablero (int i, int j); friend ostream& operator<< (ostream& O, TTablero& T); private: int TB[N][N]; // Tablero int swap; // truco para que evitar que el algoritmo falle }; // TTablero void TTablero::Movidas (int i, int j, int mv[2][MV+1]); /* resultado Calcula las posibles movidas válidas del caballo, suponiendo que la posición del caballo es la casilla (i,j) del tablero de ajedrez. - Retorna las movidas en la matriz mv[]. - Como la cantidad máxima de movidas posibles es 8, la matriz mv[] tiene una columna adicional para que siempre exista una última movida que marca el final del las movidas retornadas en mv[]. - Calcula las movidas independientemente de si la casilla destino ya ha sido visitada o no. */