3Eva_IIT2013_T3 buscar cadena en una frase

3ra Evaluación II Término 2013-2014, Febrero 25, 2014 /ICM00794

Tema 3. (25 puntos) Realice una función en buscarcadena(frase, cadena) que entrega un vector con la posición inicial de todas las veces que aparece una cadena de caracteres en una frase.

>>frase= ‘cada proyecto tiene programas y compromisos’
>>cadena=’pro’
>> buscarcadena(frase, cadena) ans = 6 21 36

Nota: Se debe describir el algoritmo completo, NO use la función strfind() incluida en matlab,
Rúbrica: Definir función (5 puntos), buscar letra (5 puntos), validar cadena buscada (5 puntos) crear vector de resultados (10 puntos)

3Eva_IIT2013_T2 Ordena por diagonal principal

3ra Evaluación II Término 2013-2014, Febrero 25, 2014 /ICM00794

Tema 2. (20 puntos) Uno de los pasos que se requieren en los algoritmos para resolver un sistema de ecuaciones lineales consiste en intercambiar las filas de una matriz cuadrada para colocar en la diagonal principal los elementos de mayor magnitud de cada columna.

Ejemplo:
[ 2 7 6 ]  [ 9 0 0 ]  [ 9 0 0 ]
[ 4 5 3 ] →[ 4 5 3 ] →[ 2 7 0 ]
[ 9 8 1 ]  [ 2 7 6 ]  [ 4 5 3 ]

Escriba una función prepara(matriz) que reciba una matriz cuadrada nxn, intercambie las filas desde arriba hacia abajo de tal manera que el elemento de mayor magnitud de cada columna se ubique en la diagonal, sustituya con ceros el resto de la fila hacia la derecha. La función entrega la matriz transformada, como se muestra en el ejemplo.

Nota: en el algoritmo puede usar la función del tema anterior.
Rúbrica: Definir función (5 puntos), seleccionar el mayor (5 puntos), describir procedimiento estructurado (10 puntos)

3Eva_IIT_2013_T1 Intercambiar filas o columnas en matriz

3ra Evaluación II Término 2013-2014, Febrero 25, 2014 /ICM00794

Tema 1. (20 puntos). Realice una función intercambiar(matriz, a, b, tipo), que al recibir una matriz intercambie las filas o columnas a y b.

El parámetro tipo con el valor 1 permite intercambiar entre las filas a y b, pero si tiene el valor de 2 se intercambian las columnas a y b.

matriz=
[ 2 7 6 ]
[ 4 5 3 ]
[ 9 8 1 ]
>>intercambiar(matriz, 1, 3, 1)
[ 9 8 1 ]
[ 4 5 3 ]
[ 2 7 6 ]

>>intercambiar(matriz, 1, 3, 2)
[ 6 7 2 ]
[ 3 5 4 ]
[ 1 8 9 ]

Rúbrica: Definir la función (5 puntos), intercambiar valores entre celdas (5 puntos), intercambiar toda la fila o columna (10 puntos)

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
>>>