Autor: Edison Del Rosario

  • 3Eva_IT2011_T2 producto de matrices

    3ra Evaluación I Término 2011-2012, Septiembre 13, 2011 /ICM00794

    Tema 2 (15 puntos). Dos matrices A y B se pueden multiplicar si el número de columnas de A coincide con el número de filas de B.

    Am x n x Bn x p = Cm x p

    El elemento Cij de la matriz producto se obtiene multiplicando cada elemento de la fila i de la matriz A por cada elemento de la columna j de la matriz B y sumándolos.

    Realice una función producto(A,B) que permita realizar el producto entre una matriz A de tamaño de mxn y un vector B de tamaño n.

    Ejemplo:
    A B
    2 1 2 3 25
    3 1 0 2 x 50
    2 2 1 1 100
    150
    C
    2*25=50 1*50=50 2*100=200 3*150=450
    = 75 50 0 300
    50 100 100 150

    Nota: Desarrolle el algoritmo que describa las operaciones para cada elemento Cij. No use las funciones de matlab para multiplicar matrices.

    Rúbrica: Definición de función (5 puntos), algoritmo (10 puntos).


    A = [[2,1,2,3],
         [3,1,0,2],
         [2,2,1,1]]
    B = [25,50,100,150]
    
  • s3Eva_IT2011_T2 producto de matrices

    Ejercicio: 3Eva_IT2011_T2 producto de matrices

    resultado obtenido:

    producto es:
    [[ 50.  50. 200. 450.]
     [ 75.  50.   0. 300.]
     [ 50. 100. 100. 150.]]
    >>> 
    

    Algoritmo en Python

    # 3Eva_IT2011_T2 producto de matrices
    import numpy as np
    
    # INGRESO
    A = [[2,1,2,3],
         [3,1,0,2],
         [2,2,1,1]]
    B = [25,50,100,150]
    
    # PROCEDIMIENTO
    # usa arreglos en lugar de listas
    A = np.array(A)
    B = np.array(B)
    
    tamano = np.shape(A)
    n = tamano[0]
    m = tamano[1]
    k = len(B)
    
    # verificar que m=k
    
    C = np.zeros(shape=(n,m))
    for i in range(0,n,1):
        for j in range(0,m,1):
            C[i,j] = A[i,j]*B[j]     
    
    # SALIDA
    print('producto es:')
    print(C)
    
  • 3Eva_IT2011_T1 Validar reglas para préstamo en banco

    3ra Evaluación I Término 2011-2012, Septiembre 13, 2011 /ICM00794

    Tema 1 (25 puntos). Un banco previo a conceder un préstamo a largo plazo, revisa los datos del solicitante y concede el préstamo sólo si cumple las siguientes condiciones:

    a) Si los ingresos anuales son superiores a $ 12.000.
    b) Si los ingresos anuales son inferiores o iguales a $ 12.000, pero superiores a $ 8.000 y está soltero.
    c) Si tiene ingresos entre $ 10.000 y $12.000, está casado sin hijos.

    Realice un programa para el banco que permita para n solicitudes:

    • registrar los datos del solicitante:
      nombre, ingresos anuales, estado civil y número de hijos, monto préstamo.
    • procesar las solicitudes,
    • mostrar un listado de nombres de favorecidos con el préstamo, monto y el total de favorecidos.

    Rúbrica: Definición y uso de estructura (5 puntos), Ingreso (5 puntos), procesamiento (10 puntos), listado final (5 puntos)

  • 3Eva_IIT2010_T3 Juego de rompecabezas

    3ra Evaluación II Término 2010-2011, Febrero 15, 2011 /ICM00794

    Tema 3. (30 puntos). Un rompecabezas numérico se compone de fichas marcadas del 1 al 8 y colocadas aleatoriamente en un tablero de 3x3. Para la solución, se debe ordenar las fichas, dejando vacía la esquina inferior derecha, siguiendo las siguientes reglas:

    • En cada turno, el programa debe permitir al usuario mover una ficha a la casilla vacía si esta se encuentra en la misma fila o columna.
    • El juego se repite hasta formar la solución, mostrando la cantidad de turnos utilizados.

    Realice un programa que simule el juego de rompecabezas.

    Rompecabezas: :

    Solución: rompecabezas solucionado

    >> resolver
    ¿Tamaño del tablero?: 3
     Turno: 1
    8 2 6
    5 4 0
    1 7 3
    ¿Ficha a mover?:5
    Turno: 2
    8 2 6
    0 4 5
    1 7 3
    ¿Ficha a mover?:8
    Turno: 3
    0 2 6
    8 4 5
    1 7 3
    ¿Ficha a mover?:1
    Turno: 4
    1 2 6
    8 4 5
    0 7 3
    ¿Ficha a mover?: …

    Nota:

    • Se recomienda utilizar una matriz solución para validar si se ha resuelto el rompecabezas.
    • Para generar el tablero del juego, puede hace uso de la función desordena(n) del tema anterior
    • Para validar si se puede mover una ficha, puede utilizar la función ubica(matriz,k) del tema anterior.

    Rúbrica: Generación de rompecabezas y solución (5 puntos), control de turnos (5 puntos), validación de movimiento de ficha (10 puntos). Validación de solución del juego (10 puntos)

  • s3Eva_IIT2010_T3 Juego de rompecabezas

    Ejercicio: 3Eva_IIT2010_T3 Rompecabezas, desordena y ubica

    Incluye respuestas del tema 1 y Tema 2

    Propuesta de solución en Python:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2010_T3 Rompecabezas, desordena y ubica
    # Tarea: identificar donde se podrá usar lazo "for"
    # opcional, el tamaño de matriz nxm se puede obtener con
    # numpy.shape(matriz) y se obtiene un arreglo con n y m
    
    import numpy
    import random
    
    # Tema 1. funcion desordena(n)
    # dado el tamaño de matriz cuadrada, pone numeros aleatorios
    # No repetidos entre 0 y n*n-1
    def desordena(n):
        matriz = numpy.zeros(shape=(n,n), dtype=int)
        numero = 1
        maximo = n*n-1
        while not(numero>maximo):
            fila = int(random.random()*n)+0
            columna = int(random.random()*n)+0
            if (matriz[fila,columna]==0):
                matriz[fila,columna]=numero
                numero = numero+1
        return(matriz)
    
    # Tema 2. ubica un numero k en la matriz de nxn
    def ubica(matriz,n,k):
        donde = numpy.zeros(2, dtype=int)
        encontre = 0
        fila = 0
        while not(fila>=n or encontre==1):
            columna = 0
            while not(columna>=n or encontre==1):
                if (matriz[fila,columna]==k):
                    encontre = 1
                    donde[0] = fila
                    donde[1] = columna
                columna = columna+1
            fila = fila+1
        return(donde)
    
    # funcion matrizigual, compara dos matrices A y B
    # de igual tamano nxn
    def matrizigual(A,B,n):
        resuelto = 1
        fila = 0
        while not(fila>=n or resuelto==0):
            columna = 0
            while not(columna>=n or resuelto==0):
                if (A[fila,columna]!=B[fila,columna]):
                    resuelto = 0
                columna = columna+1
            fila = fila+1
        return(resuelto)
    
    # funcion solucion del rompecabeza
    # Usado para comparar con la solucion
    def original(n):
        matriz = numpy.zeros(shape=(n,n), dtype=int)
        numero = 1
        fila = 0
        while not(fila>=n):
            columna = 0
            while not(columna>=n):
                matriz[fila, columna] = numero
                numero = numero+1
                columna = columna+1
            fila = fila+1
        matriz[n-1,n-1] = 0
        return(matriz)
    
    
    # Tema 3. Juego del Rompecabeza
    # Programa para jugar el Rompecabeza
    
    tamano = int(input('¿Tamaño del tablero?: '))
    
    resuelto = 0
    turno = 1
    solucion = original(tamano)
    tablero = desordena(tamano)
    
    while not(resuelto==1):
        print(turno)
        print(tablero)
        ficha = int(input('¿Ficha a mover?: '))
        dondeficha = ubica(tablero,tamano,ficha)
        dondecero = ubica(tablero,tamano,0)
    
        if (dondeficha[0]==dondecero[0] or dondeficha[1]==dondecero[1]):
            temporal = ficha
            tablero[dondeficha[0],dondeficha[1]] = 0
            tablero[dondecero[0],dondecero[1]] = temporal
        turno = turno+1
        if (matrizigual(tablero,solucion,tamano)==1):
            resuelto = 1
            print('Ganaste...! ')
    
  • 3Eva_IIT2010_T2 Ubicar número dentro de una matriz

    3ra Evaluación II Término 2010-2011, Febrero 15, 2011 /ICM00794

    Tema 2 (15 puntos). Escriba una función ubica(matriz,k) que dada una matriz de tamaño n, entregue la ubicación de fila y columna del número k.

    Ejemplo siguiendo el resultado del tema 1:

    >>> matriz = np.array([[8, 2, 6],
    		       [5, 4, 0],
                           [1, 7, 3]])
    >>> ubica(matriz,7)
    array([2, 1])
    >>> 
    usando el ejemplo del tema anterior

    Observación: Considere que las filas y columnas se numeran desde 0

    Rúbrica: Definición de función (5 puntos), búsqueda de k (5 puntos). Algoritmo estructurado (5 puntos)

  • s3Eva_IIT2010_T2 Ubicar número dentro de una matriz

    Ejercicio: 3Eva_IIT2010_T2 Ubicar número dentro de una matriz

    Propuesta de solución en Python

    Tarea: integrar con tema 3

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2010_T2 Ubicar número dentro de una matriz
    # Propuesta: edelros@espol.edu.ec
    # Tarea: integrar con tema 3
    
    import numpy as np
    import random as rnd
    
    # Tema 2. ubica un numero k en la matriz de nxn
    def ubica(matriz,k):
        tamano = np.shape(matriz)
        n = tamano[0]
        m = tamano[1]
        
        donde = np.zeros(2, dtype=int)
        encontre = 0
        fila = 0
        while not(fila>=n or encontre==1):
            columna = 0
            while not(columna>=n or encontre==1):
                if (matriz[fila,columna]==k):
                    encontre = 1
                    donde[0] = fila
                    donde[1] = columna
                columna = columna+1
            fila = fila+1
        return(donde)
    

    resultado del algoritmo

    >>> matriz = np.array([[8, 2, 6],
    		       [5, 4, 0],
                           [1, 7, 3]])
    >>> ubica(matriz,7)
    array([2, 1])
    >>> 
    
  • 3Eva_IIT2010_T1 Matriz con aleatorios no repetidos (desordena)

    3ra Evaluación II Término 2010-2011, Febrero 15, 2011 /ICM00794

    Tema 1 (15 puntos). Realizar una función desordena(n), que entrega una matriz cuadrada de tamaño nxn llenada de forma aleatoria con números naturales no repetidos entre 0 y n2-1

    >>> desordena(3)
    array([[8, 2, 6],
           [5, 4, 0],
           [1, 7, 3]])

    Rúbrica: Definición y uso de función (5 puntos), aleatorios no repetidos (5 puntos). Algoritmo estructurado (5 puntos)

  • s3Eva_IIT2010_T1 Matriz con aleatorios no repetidos (desordena)

    Ejercicio: 3Eva_IIT2010_T1 Matriz con aleatorios no repetidos (desordena)

    Algoritmo en Python

    Propuesta de solución:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2010_T1 Matriz con aleatorios no repetidos (desordena)
    # Propuesta: edelros@espol.edu.ec
    # Tarea: integrar con tema 3
    
    import numpy as np
    import random as rnd
    
    def desordena(n): 
        matriz = -1*np.ones(shape=(n,n), dtype=int)
        usados = []
        
        # entero aleatorio [0,n**2), no incluye n**2
        intervalo = n**2
        
        fila = 0
        while not(fila>=n):
            
            columna = 0
            while not(columna>=n):
    
                # numero no repetido
                numero = int(rnd.random()*intervalo)+0
                while numero in usados:
                    numero = int(rnd.random()*intervalo)+0
                
                matriz[fila,columna] = numero
                usados.append(numero)
                
                columna = columna + 1
                
            fila = fila + 1
        return(matriz)
    

    resultado del algoritmo:

    >>> desordena(3)
    array([[0, 7, 2],
           [6, 5, 8],
           [4, 1, 3]])
    >>> desordena(3)
    array([[7, 3, 6],
           [8, 1, 0],
           [5, 2, 4]])
    >>> 
    
  • 3Eva_IT2010_T4 Revisión de vehículo y matrícula anual

    3ra Evaluación II Término 2010-2011, Febrero 15, 2011 /ICM00794

    Tema 4. (40 puntos) El proceso Anual para “matrícula” y “revisión” de vehículos requiere cumplir en orden los siguientes pasos:

    http://radiomorena640.com/atm-se-aplicaran-sanciones-a-propietarios-de-vehiculos-que-se-presenten-a-la-revision-tecnica-con-sus-placas-alteradas/Pagar el valor de la matrícula anual en ventanillas de bancos

    • Realizar una revisión del vehículo en la CTG comprobando las buenas condiciones las luces, llantas y extintor.
    • Retirar el sticker que certifica el cumplimento anual del proceso en ventanillas.

    El usuario puede completar los pasos en días diferentes, aunque tiene que cumplir satisfactoriamente el paso anterior para ejecutar el siguiente.

    Pagos
    Matrícula Valor
    GLE0123 $ 50
    GDK0234 $ 70
    GMN0456 $ 30
    Revisión
    Matrícula Luces Llantas Extintor Cumple
    GDK0234 1 1 1 3
    GLE0123 1 0 1 2
    GLE0123 1 1 1 3
    ... ...

    Realice un programa para administrar este proceso mediante un menú con las tres opciones correspondientes a los pasos indicados, que registre en una tabla los datos de los pagos y en otra los resultados de la revisión.
    En los caso de revisión y sticker, realice la validación del cumplimiento del requisito anterior revisando la tabla correspondiente.

    Nota: Puede usar la función strcmp(cadena1,cadena2) para comparar dos cadenas de caracteres.
    “CTG inicia la matricula por dígito final” Febrero 01, 2011 www.eluniverso.com

    Rúbrica: Menú (5puntos). Definición y uso de Estructura de Datos (5 puntos). Registro de pagos (5 puntos). Validación de pago previo a revisión (10 puntos). Validación de cumplimiento de revisión previo a entrega de sticker (10 puntos). Programa integral (5puntos).