Autor: Edison Del Rosario

  • 2Eva_IIT2013_T4 Algoritmo para agendar citas medicas

    2da Evaluación II Término 2013-2014, Febrero 11, 2014 /ICM00794

    Tema 4. (30 puntos)El Instituto Ecuatoriano de Seguridad Social (IESS) dispondrá de un nuevo sistema para agendar citas, con lo que espera mejorar los servicios y reducir los tiempos de espera para atención médica.

    Realice un programa para gestionar en un hospital, las solicitudes de atención médica, registrando los datos de paciente y usando una matriz de control de turnos para solo un mes cualquiera conforme al menú mostrado.

    Menú:
     1. Registro de datos de paciente
     2. Consulta tabla de turnos
     3. Asignación de cita
     4. Cantidad de turnos a máxima capacidad en el mes
     5. Salir

    Para el registro de paciente se escriben los datos de cédula y nombre.
    La consulta de tabla de turnos muestra la cantidad reservada por día y por hora en una matriz.

    Para asignar una cita se solicita el número de turno, el día y la hora deseado, pero solo si no se ha alcanzado la capacidad por hora, se registra en la tabla de paciente y se cuenta en la tabla de turnos.

    paciente:
    turno cédula nombre día hora
    1 123 María 1 1
    2 456 Juan 1 1
    3 789 Pedro 2 1
    ... ... ... ... ...

    Capacidad por hora=5

    Reserva de Turnos
    día\hora 1 2 3 4 5 6 7 8
    1 4 5 5 5 3 2 5 5
    2 3 4 5 0 2 0 0 0
    3 0 0 0 0 0 0 0 0
    ... ... ... ... ... ... ... ... ...
    28 0 0 0 0 0 0 0 0
    29 0 0 0 0 0 0 0 0
    30 0 0 0 0 0 0 0 0
    31 0 0 0 0 0 0 0 0

    Referencia: “El IESS tendrá call center propio”. 06/febrero/2014. www.expreso.ec
    “Personal del IESS atenderá llamadas para citas médicas desde marzo”, 07/febrero/2014. www.eluniverso.com

    Rúbrica: menú (5 puntos), manejo de estructura (5 puntos), control de turnos (10 puntos), turnos a capacidad máxima (10 puntos).

  • 2Eva_IIT2013_T3 Encriptar binarios con XOR

    2da Evaluación II Término 2013-2014, Febrero 11, 2014 /ICM00794

    Tema 3. (20 puntos) La operación xor en el sistema binario produce el resultado mostrado en la tabla.

    m k m xor k
    0 0 0
    0 1 1
    1 0 1
    1 1 0

    Esta operación se usa para encriptar mensajes en binario en los cuales m representa el mensaje, k la clave para encriptar el mensaje, y e el mensaje encriptado.

    Escriba una función que reciba dos vectores conteniendo números en el sistema binario y entregue otro vector conteniendo los números binarios que se obtienen con la operación xor.
    Esta función se usará para encriptar un mensaje y para conocer el mensaje enviado.

    .envíado:
    Clave:
    encriptado:
    Ejemplo de mensaje:
    m = 11011001
    k = 01100011
    e = 10111010
    .encriptado:
    Clave:
    recibido:
    Ejemplo:
    e = 10111010
    k = 01100011
    m = 11011001

    La función debe validar que los vectores contengan números binarios, caso contrario, el resultado es un vector nulo.
    El receptor del mensaje encriptado, aplicando la misma clave puede conocer el mensaje.

    Rúbrica: definir función (5 puntos), validar tamaños y valores (5 puntos), comparar y asignar (10 puntos)

  • 2Eva_IIT2013_T2 Verificar secuencia ADN

    2da Evaluación II Término 2013-2014, Febrero 11, 2014 /ICM00794

    Tema 2. (25 puntos) Una cadena ADN se representa como una línea de texto con los caracteres A, C, G, T en cualquier secuencia.

    Se considera que cada par de caracteres consecutivos está ordenado si el carácter a la izquierda es alfabéticamente menor o igual que el carácter a la derecha.

    Escriba una función para determinar cuántos pares de una cadena ADN están ordenados.
    La función debe verificar que la cadena tenga caracteres válidos, caso contrario, el resultado es un número negativo.

    Ejemplo: 
    >>cadena= CCGAATCGTA 
    >>ordenados(cadena) 
    ans=6 
    >>cadena= CBGAATCGWA 
    >>ordenados(cadena) 
    ans=-2

    Rúbrica: definir función (5 puntos), validar caracteres (5 puntos), contar pares ordenados (10 puntos)

    Referencia: https://es.wikipedia.org/wiki/Gattaca

  • s2Eva_IIT2013_T2 Verificar secuencia ADN

    Ejercicio: 2Eva_IIT2013_T2 Verificar secuencia ADN

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2013_T2 Verificar secuencia ADN
    # propuesta: edelros@espol.edu.ec
    
    def ordenados(cadena):
        n = len(cadena)
        cadena  = cadena.upper()
        validos = 'ACGT'
        pares   = 0
    
        # solo hasta penúltimo
        i = 0
        while not(i>=(n-1)): 
            elemento  = cadena[i]
            elemento2 = cadena[i+1]
            if (elemento<=elemento2):
                pares = pares + 1
            i = i + 1
            
        # validar elementos en cadena
        noADN = 0
        i = 0
        while not(i>=n):
            elemento = cadena[i]
            if not(elemento in validos):
                noADN = noADN - 1
            i = i + 1
    
        # corrige de ser necesario
        if (noADN<0): 
            pares = noADN
            
        return(pares)
    

    Ejemplo

    >>> cadena='CCGAATCGTA'
    >>> ordenados(cadena)
    6
    >>> cadena='CBGAATCGWA'
    >>> ordenados(cadena)
    -2
  • 2Eva_IIT2013_T1 Cable submarino para internet

    2da Evaluación II Término 2013-2014, Febrero 11, 2014 /ICM00794

    Tema 1 (25 puntos) Para disponer del servicio de internet con banda ancha en una isla turística, se proyecta instalar un cable submarino de fibra óptica desde la costa continental. Se dispone de una tabla con los datos (x, y, z) para el anclaje del cable en el lecho marino correspondientes a las coordenadas tipo rectangulares en kilómetros y la profundidad en cada punto en metros.

    a) Realice una función, que dada las coordenadas y la profundidad entre dos puntos, calcule el costo equivalente del tendido del cable entre los puntos. Suponga que costo de instalación de un cable submarino de fibra óptica se determina por:

    • La extensión del cable por kilómetro es $ 100, suponiendo que es en línea recta entre anclajes
    • La profundidad del punto más bajo entre los dos anclajes conforme a la tabla siguiente:

    Costo por km de cable = $100

    Profundidad (m) Costo anclaje($)
    <10 $ 500
    Entre 10 y 30 $ 1000
    mayor de 30 $ 3000

    b) Realice un programa para ingresar la tabla de datos de anclaje y usando la función anterior, calcule el costo total del tendido del cable entre el continente y la isla (puntos consecutivos). También encuentre y muestre cuál es el tramo que representa el mayor costo.

    Nota: Suponga que las unidades de las coordenadas se encuentran en km y la profundidad en metros.

    Distancia entre dos puntos en el espacio:

    d = \sqrt{(x_2-x_1)^2+(y_2-y_1)^2+(z_2-z_1)^2}

    Rúbrica: Definir función (5 puntos), cálculo con unidades (5 puntos), usar función en programa (5 puntos), Costo total (5 puntos). Tramo caro (5 puntos)

  • s1Eva_IIT2013_T3 Juego Semillero

    Ejercicios: 1Eva_IIT2013_T3 Juego Semillero

    Propuesta de solución en Python, realizada solo para dos jugadores.

    Observe que al lanzar dos dados, el intervalo de valores posibles es [2,12].

    dado1 = int(rnd.random()*6)+1
    dado2 = int(rnd.random()*6)+1
    suma  = dado1 + dado2
    

    La variable quien determina el turno del jugador.

    Se lanzan los dados como números aleatorios, se acumula los puntos para cada jugador y se resta la cantidad de fichas del semillero.

    if (suma<=semillero):
        A = A + suma
        semillero = semillero -suma
    else:
        A = A +semillero
        semillero = 0
    

    Se cambia el turno del jugador y se repite el proceso.

        # cambia jugador
        if (quien==1):
            quien = 2
        else:
            quien = 1
    

    TAREA: Implementar con arreglos para n jugadores.


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2013_T3 Juego Semillero
    # usando solo dos jugadores
    import random as rnd
    
    # INGRESO
    apuesta = int(input('cuantas canicas: '))
    while not(apuesta>=20):
        apuesta = int(input('mas de 20 canicas: '))
    
    # PROCEDIMIENTO
    semillero = 2*apuesta
    A = 0
    B = 0
    quien = 1
    while not(semillero<=0):
    
        # Juega A
        if (quien==1):
            dado1 = int(rnd.random()*6)+1
            dado2 = int(rnd.random()*6)+1
            suma  = dado1 + dado2
            if (suma<=semillero):
                A = A + suma
                semillero = semillero -suma
            else:
                A = A +semillero
                semillero = 0
    
        # Juega B
        if (quien==2):
            suma = int(rnd.random()*11)+2
            if (suma<=semillero):
                B = B + suma
                semillero = semillero - suma
            else:
                B = B + semillero
                semillero = 0
                
        # cambia jugador
        if (quien==1):
            quien = 2
        else:
            quien = 1
    
    # Determina ganador
    gana = 1
    if (A < B):
        gana = 2
    if (B==A):
        gana = 0
        
    # SALIDA
    print('canicas de A: ', A)
    print('canicas de B: ', B)
    print('estado semillero: ', semillero)
    print('jugador ganador: ', gana)
    

    Ejecución del algoritmo

    cuantas canicas: 20
    canicas de A:  25
    canicas de B:  15
    estado semillero:  0
    jugador ganador:  1
    >>> 
    cuantas canicas: 20
    canicas de A:  20
    canicas de B:  20
    estado semillero:  0
    jugador ganador:  0
    >>> 
    cuantas canicas: 20
    canicas de A:  22
    canicas de B:  18
    estado semillero:  0
    jugador ganador:  1
    >>> 
    
  • s1Eva_IIT2013_T2 Números palíndromo con Python

    Ejercicios: 1Eva_IIT2013_T2 Números palíndromo con Python

    Literal a. Para invertir los dígitos de un número, se usan residuo y el cociente para extraer cada dígito y rearmarlo en otro número con posiciones invertidas.

    Sec compara el número de forma inversa para verificar si el igual al número original, siendo solamente así un número palíndromo.

    Tarea: implementar el literal b a partir de la solución del literal a.

    Para iniciar la búsqueda de los números palíndromos se inicia con dos dígitos es decir numero=10. Se aplica el algoritmo al número y se repite el proceso con un lazo hasta llegar al millón-1

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2013_T2 Números palíndromo
    
    # INGRESO
    numero = int(input('numero a revisar: '))
    
    # PROCEDIMIENTO
    numcopia = numero
    cociente = numero
    
    # invierte dígitos del número
    invertido = 0
    while not(cociente<=0):
        numcopia = cociente
        cociente = numcopia//10
        residuo  = numcopia%10
        invertido = invertido*10 + residuo
    
    # revisa si el número es igual a invertido
    if (invertido == numero):
        palindromo = 1
    else:
        palindromo = 0
    
    # SALIDA
    print('numero invertido: ', invertido)
    print('Palindromo:', palindromo)
    

    Ejecución del algoritmo

    numero a revisar: 1991
    numero invertido:  1991
    Palindromo: 1
    >>> 
    numero a revisar: 2112
    numero invertido:  2112
    Palindromo: 1
    >>> 
    numero a revisar: 2020
    numero invertido:  202
    Palindromo: 0
    >>>