3Eva_IIT2016_T3 Prueba de escritorio, arreglos

3ra Evaluación II Término 2016-2017, Marzo 7, 2017 /CCPG001

TEMA 3 (10 Puntos)

a. Dado el programa descrito a continuación, indique la salida y justifique su respuesta:

import numpy as np

L = [10,12,11,4,8]
M = [4,2,1,2,7]

matriz = np.array([],int)
A = np.append(matriz,L[2:4])
B = np.append(A,M[1:3]).reshape((2,2))
C = (A * B)//2

print(C)

b. Dado el programa descrito a continuación, indique la salida y justifique su respuesta:

L = 'lala'

while len(L) < 20:
    L = L*5

print(L)

Referencia: Archivo original 3raEvaIIT2016.pdf

3Eva_IIT2016_T2 Juntas receptoras de voto

3ra Evaluación II Término 2016-2017, Marzo 7, 2017 /CCPG001

(Editado para tarea, se mantiene el objetivo de aprendizaje)

TEMA 2. (45 Puntos) Para el control de las elecciones presidenciales de un país, Ud. tiene dos matrices con los votos de hombres y mujeres para cada uno de los candidatos:

JRV_H (juntas receptoras del voto, hombres)
JRV_M (juntas receptoras del voto, mujeres)

Las filas representan las juntas receptoras del voto y las columnas representan los candidatos. El número en la celda representa el número de votos para un candidato en una JRV:

También tiene una tupla con los nombres de los candidatos:

candidatos = (‘candidato1’, ‘candidato2’, … ‘candidatoN’)

Suponga que estas matrices son creadas por una función ya existente y retornadas al inicio de su programa principal. Por ejemplo:

JRV_H = creaMatrizHombres()
JRV_M = creaMatrizMujeres()

Nota: NO necesita implementar estas funciones o crear las matrices; esto ya ha sido hecho por usted.

Se le pide lo siguiente:

  1. Crear una función contarVotos(JRV_H, JRV_M) que recibe ambas matrices y devuelve una tupla con los votos totales para cada candidato.
  2. Crear la función segundaVuelta(JRV_H, JRV_M) que recibe ambas matrices y devuelve el valor booleano 'True' si hay segunda vuelta, 'False' si no.
    No hay segunda vuelta si el primer candidato tiene al menos el 40% de los votos registrados en las matrices, y al menos 10 puntos porcentuales de diferencia con el segundo.
  3. Crear la función estadística(JRV_H, JRV_M, candidatos, nombre) que recibe ambas matrices, la tupla con los nombres de los candidatos, el nombre de un candidato y devuelve para ese candidato:
    – una tupla con el porcentaje de votos del total global de votos,
    – porcentaje de votos de hombres del total de votos para ese candidato y
    – porcentaje de votos de mujeres del total de votos para ese candidato.
  4. Crear un programa principal que utilizando las matrices JRV_H, JRV_M y las tres funciones anteriores muestre lo siguiente:
Elecciones Presidenciales
Candidato: Perico De Los Palotes
% votos totales: 41%
% votos hombres: 55%
% votos mujeres: 45%
Candidato: Juan Pueblo
% votos totales: 30%
% votos hombres: 48%
% votos mujeres: 52%
Candidato: Juanita Pueblo
% votos totales: 15%
% votos hombres: 30%
% votos mujeres: 70%
…
SI/NO hay segunda vuelta (dependiendo de si hay o no segunda vuelta)

Ejemplo de matriz para pruebas

# Ingreso
JRV_H = np.array([
    [15,145,230,45],
    [18,187,89,67],
    [109,12,28,18],
    [231,76,67,137],
    ])

JRV_M = np.array([
    [100,240,19,45],
    [50,38,242,67],
    [178,12,164,5],
    [123,23,38,333]
    ])
candidatos = ['Perico','Juan','Juanita','Ana']

Referencia: Archivo original 3raEvaIIT2016.pdf

3Eva_IIT2016_T1 Facturar llamadas telefónicas

3ra Evaluación II Término 2016-2017, Marzo 7, 2017 /CCPG001

(Editado para tarea, se mantiene el objetivo de aprendizaje)

TEMA 1. (45 Puntos)  La información de los clientes de una compañía telefónica ubicada en Guayaquil se encuentra  en el archivo llamado clientes.csv.

El archivo está estructurado de la siguiente manera:

Cédula,NúmeroTeléfono,Sector,MinutosLlamadaNacional|MinutosLlamadaInternacional,Estado

Por ejemplo: clientes.csv

1278112648,04-443288,Norte,12|30,Activo
1278112648,04-383056,Sur,50|15,Activo
1302511926,04-325363,Este,90|12,Activo
1174253723,04-430419,Oeste,30|30,Cortado
2061722895,04-356539,Norte,17|40,Cortado
1729478396,04-437289,Centro,4|2,Activo
1174253723,04-324426,Norte,0|9,Cortado
1174253723,04-283497,Norte,15|27,Activo

Para procesar la información se requiere:

1. Crear una función llamada obtenerClientes(nombreArchivo) la cual recibe como parámetro el nombre del archivo con los clientes de la empresa, y devuelve un diccionario con la siguiente estructura:

{
'1174253723': 
{'04-324426':{'sector':'Norte','nac':0,'estado':'Cortado','inter':9},
'04-430419':{'sector':'Oeste','nac':30,'estado':'Cortado','inter':30}
'04-283497':{'sector':'Norte','nac':15,'estado':'Activo','inter':27}},
'1302511926': 
{'04-325363':{'sector':'Este','nac':90,'estado':'Activo','inter':12}},
'1278112648':
{'04-443288':{'sector':'Norte','nac':12,'estado':'Activo','inter':30},
'04-383056':{'sector':'Sur','nac':50,'estado':'Activo','inter':15}},
'1729478396':
{'04-437289'{'sector':'Centro','nac':4,'estado':'Activo','inter':2}},
'2061722895':
{'04-356539':{'sector':'Norte','nac':17,'estado':'Cortado','inter':40}}
}

2. Crear una función llamada generarFactura(dclientes) la cual recibe como parámetro el diccionario de clientes generado en el literal anterior, y genera un archivo por cada cliente, cuyo nombre es la cédula del cliente, y el contenido corresponde a los valores a pagar por cada cliente. La estructura del archivo es la siguiente:

Archivo 1278112648.txt
Empresa Telefonica de Guayaquil
Cliente :1278112648
Detalle Deuda:
04-443288 nac:0.36 inter:1.5 total:1.86
04-383056 nac:1.5 inter:0.75 total:2.25
Total a Pagar:4.11

Para calcular los valores a pagar considere las siguientes
tarifas:
Tarifa Nacional: 0.03 el minuto
Tarifa internacional:
● Menos de 60 min: 0.05 el minuto
● Entre 60 y 90 min: 0.04 el minuto
● Más de 90 min: 0.03 el minuto

3. Crear una función llamada estadisticaSector(dclientes,sector) que recibe como parámetro el diccionario de clientes generado en el literal 1 y el sector, y devuelve un diccionario con el promedio de minutos de llamadas nacionales e internacionales que han realizado los números telefónicos del sector en estado ‘Activo’.

Por ejemplo:
>>> estadisticaSector(dclientes,”Norte”)

Respuesta:
{'Nacionales': 13.50, 'Internacionales': 28.50}

Referencia: Archivo original 3raEvaIIT2016.pdf

1Eva_IT2015~T4 Prueba de escritorio, listas

1ra Evaluación I Término 2015-2016. Julio, 2015 /FIEC

Tema 4. (10 puntos) Analice el código fuente de los programas que se muestran a continuación. Seleccione la respuesta correcta y justifique brevemente su respuesta.

1. Determine la salida por pantalla del siguiente código:

X = 2
y = 5
z = x + z
print("La suma es ,z")

a. Error: La variable z no ha sido definida
b. La suma es ,z
c. Error: La variable z no se ha inicializado
d. La suma es 7

2. Dado el siguiente segmento de código y las listas A y B, seleccione correctamente la salida por pantalla:

A = [3, 2, 7, 5] 
B = [31, 5, 4, 8, 12, 3, -9, 6] 
C = 0 
N = 3 
for i in range(0, 4) :
    B[A[i]] = B[A[i]] + N 
    C += B[A[i]] 
print(C)

a. 27
b. 33
c. 6
d. Ninguna de las anteriores

1Eva_IT2015~T3 Juego acumula tesoros

1ra Evaluación I Término 2015-2016. Julio, 2015 /FIEC

Tema 3. (45 puntos) En el juego de tablero acumula-tesoros, dos jugadores atraviezan un corredor de 50 metros de largo. 

En cada turno, un jugador avanza lanzando un dado de 6 caras y avanza las casillas de 1 metro correspondiente.

En la nueva posición debe considerar si debe retroceder considerando la reglas de movimiento:

  • Si la nueva posición no ha sido visitada aún, se queda en la casilla y el jugador puede recoger algún elemento siguiendo las reglas de tesoros.
  • Si la nueva posición ya ha sido visitada por el otro jugador, debe retroceder 10 metros.
  • En caso de retroceder, el jugador puede volver al inicio si su posición es menor de 10 metros. El jugador puede evitar retroceder deshaciéndose de un tesoro de los que haya recogido.

Al llegar a cada casilla o posición, a cada jugador se le asigna aleatoriamente uno de los estados mostrados en la tabla.

estado elemento
fortaleza (-1) armas (1)
hambre (-2) víveres (2)
súper-héroe (-3) tesoros (3)

Algunas casillas pueden tener asignado uno los elementos de la tabla. Las reglas de tesoro para recoger el elemento indica que:

  • Para recoger armas, el jugador debe estar en el estado de fortaleza.
  • Para recoger víveres, el jugador debe estar en el estado de hambre.
  • Para recoger tesoros, el jugador debe estar en el estado de súper-héroe.

Al inicio del juego, se ubican los jugadores en la casilla 1. Luego se distribuyen aleatoriamente 8 armas, 8 víveres y 8 tesoros a lo largo del corredor, desde la posición 2 en adelante.

El juego termina cuando uno de los jugadores llega exactamente al final del corredor. Gana el jugador que acumula la mayor riqueza de elementos recogidos durante el juego, calculada como:

Riqueza = \frac{armas}{2}+1)100 + 0.5 víveres+ tesoros

Se requiere implementar las siguientes procedimientos y funciones:

  1. asignarPosicionElementos() que retorna una colección que contiene 3 listas, cada una representando las posiciones en el corredor de las 8 armas, víveres y tesoros, respectivamente.
  2. LanzarDado() que retorna aleatoriamente el valor de una de las caras del dado.
  3. generarEstado() que retorna aleatoriamente uno de los posibles estados.
  4. mostrarElemento(posicion, coleccion) que dada una posición y la colección de posiciones de los elementos imprime en pantalla el tipo de elemento que existe en esa posición.
  5. recogerElemento(estado, posicion,colección) que dada una posición, el estado de un jugador y la colección de posiciones de los elementos retorna el tipo de elemento que se ha recogido (1, 2 ó 3) o 0 si no ha sido posible.
  6. mostrarMensaje(jugador), la cual recibe como parámetro un jugador e muestra en pantalla el estado y posición del jugador.
  7. calcularRiqueza(armas,viveres,tesoreos) que dada una cantidad de armas, víveres y tesoros retorna la riqueza obtenida.

Realice un programa que simule el juego y que siguiendo las reglas del juego descritas, use las funciones implementadas anteriormente.

En cada turno se mostrarán por pantalla:

  • El jugador al que corresponde el turno
  • El resultado del lanzamiento del dado
  • Si se avanza o retrocede
  • la nueva posición del jugador

Al finalizar el juego, se debe declarar al ganador y la riqueza de cada uno.

Rúbrica: inicializar tablero con premios (5 puntos), uso de aleatorios, (5 puntos), control de posiciones (5 puntos), implementar reglas de movimiento (5 puntos), reglas de tesoros (5 puntos), control de fin de juego (5 puntos), seleccion de ganador y riqueza(5 puntos), funciones estructuradas (5 puntos), algoritmo estructurado(5 puntos).

Nota: Enunciado original editado y adaptado para taller en clases.

1Eva_IT2015~T1 Persistencia aditiva de un número entero

1ra Evaluación I Término 2015-2016. Julio, 2015 /FIEC

Tema 1. (25 puntos) La persistencia aditiva de un número entero se calcula sumando sus dígitos y en caso que esta sumatoria tenga más de un dígito, se repetirá el proceso sobre esta, hasta alcanzar un único dígito.

La cantidad de veces que se requiera realizar la sumatoria hasta obtener un único dígito se denomina persistencia aditiva.

Por ejemplo:

  • El número 1234 tiene una persistencia aditiva de 2 (la primera suma de dígitos es 10, luego la segunda suma es 1).
  • El número 5978 tiene una persistencia aditiva de 3 (5978→29→11→2).
  • El número 9 tiene una persistencia aditiva de 0.

Se requiere implementar en Python la función calcularPersistenciaAditiva(), la cual recibe como parámetro un número entero positivo denominado número y retorna su persistencia aditiva.

2Eva_IIT2015~T4 Prueba de escritorio, arreglos

2da Evaluación II Término 2015-2016, Febrero 2016 /FIEC

Tema 4. (10 puntos) 1. Analice el siguiente código y seleccione la respuesta correcta

import numpy
A = numpy.arange(12).reshape(4,3)
B = A>5
C = A[B]
D = C.reshape(2,3)
print(D[1,1:])

a. [10 11]
b. [[10 11]]
c. [ ]
d. Error: No se puede hacer reshape
e. Ninguna de las anteriores

2. La instrucción A[:,‐2].sum() retorna:

a. 18
b. 22
c. 30
d. 21

2Eva_IIT2015~T3 matriz de campos petroleros

2da Evaluación II Término 2015-2016, Febrero 2016 /FIEC

Tema 3. (50 puntos) Se le ha pedido ayuda con el desarrollo de un sistema para el control de campos petroleros.

Se le ha indicado que la información de los campos petroleros se encuentra en un archivo estructurado con los siguientes atributos: código, nombre, ubicación (fila,columna), y número de barriles producidos. A continuación se muestra un ejemplo:

1|Campo Bolívar|0,2|97
2|Campo Zamora|3,0|86
3|Campo Tungurahua|4,3|101
4|Campo Pastaza|2,1|78

El atributo de ubicación sirve para realizar una representación de los campos en una matriz de n xm como si fuera el mapa de algún sitio. Por ejemplo:

0 1 2 3 4
0 1
1
2 4
3 2
4 3
5

Esta representación permitirá la generación de reportes acerca de los campos petroleros. Un reporte necesario es uno que permita saber cuantos campos petroleros hay en un área buscada y cuantos barriles en total se producen en esa área. Por ejemplo:

Área del punto (0,1) al (4,3) ‐> hay 3 campos petroleros 
                                 y se producen 276 barriles

Se le pide:

1. Implementar una función cargarInformacion(nombreArchivo) que retorna un diccionario con la información de los campos petroleros.

2. Implementar la función u bicarCamposPetroleros(diccionario, n, m) que recibe un diccionario y retorna una matriz de nxm de numpy con la ubicación de los campos petroleros. Asuma que n y m son dimensiones válidas para que la matriz contenga los campos petroleros descritos en el archivo.

3. Implementar la función r eporteArea(matriz, diccionario, puntoInicio, puntoFin) que recibe una matriz de numpy, un diccionario, y dos tuplas (puntoInicio y puntoFin) que está compuesta por dos coordenadas de fila y columna; y retorna unatupla con el número de campos petroleros y números de barriles producidos en esa área.

Ejemplo:

reporteArea(matriz, diccionario, (0,1), (4,3)) 
        retorna 3, 276
0 1 2 3 4
0 1
1
2 4
3 2
4 3
5

2Eva_IIT2015~T2 función estudiantes registrados en dos cursos

2da Evaluación II Término 2015-2016, Febrero 2016 /FIEC

Tema 2. (20 puntos) Implemente una función estudiantesComunes(a,b,c)que recibe:

a. un diccionario con número de matrícula y el nivel del estudiante,
b. un conjunto con el número de matrícula de todos los estudiantes que están tomando Estructuras de Datos,
c. un conjunto con el número de matrícula de los estudiantes que están tomando POO,

y retorne un diccionario (matrícula, nivel) con los estudiantes que están tomando ambas materias.

estudiantesComunes(diccionario, conjuntoEstructuras, conjuntoPOO)

Luego, implemente la función nivelUnico que recibe un diccionario con número de matrícula y nivel, y retorne la colección de niveles únicos extraídos del diccionario.

nivelUnico(diccionario)