Autor: Edison Del Rosario

  • s3Eva_IIT2015_T3 funciones matrices rotar, extraer

    Ejercicio: 3Eva_IIT2015_T3 funciones matrices rotar, extraer

    Algoritmo en Python

    Tarea: Integrar con tema 4

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2015_T3 funciones matrices rotar, extraer
    # propuesta: edelros@espol.edu.ec
    # version con lazos y condicionales. 
    # tarea: simplificar lazos con 'for'
    
    import numpy as np
    
    # Tema 3 a)
    def rotando(matriz,k):
    
        #cuenta rotaciones
        cuenta = 0    
        while not(cuenta>=k):
            n,m = matriz.shape 
            tabla = numpy.zeros(shape=(m,n),dtype=int)
    
            # inicia rotación
            i = 0 
            while not(i>=n):
                j = 0
                while not(j>=m):
                    f = j
                    c = (n-1)-i
                    tabla[f,c] = matriz[i,j]
                    j = j + 1
                i = i + 1
            
            matriz = np.copy(tabla)
            cuenta = cuenta + 1
        return(matriz)
    
    # Tema 3 b) funcion para extraer una esquina 
    # de tamaño t de una matriz
    # k=0 ;esquina superior izquierda 
    # k=1 ;esquina superior derecha
    # k=3 ;esquina inferior izquierda 
    # k=2 ;esquina inferior derecha
    
    def extraeresquina(matriz,k,t):
        n,m = matriz.shape
        esquina = np.zeros(shape=(t,t), dtype=int)
        i = 0
        while not(i>=t):
            j = 0
            while not(j>=t):
                if (k==0):
                    f = i
                    c = j
                if (k==1):
                    f = i
                    c = (m-t)+j
                if (k==2):
                    f = (n-t)+i
                    c = (m-t)+j
                if (k==3):
                    f = (n-t)+i
                    c = j
                esquina[i,j]=matriz[f,c]
                j = j+1
            i = i+1   
        return(esquina)
    
  • s3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)

    Ejercicio: 3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)

    Propuesta de solución en Python para 3ra Eva. II Término 2015 Tema 3 y 4.

    Los archivos para probar el algoritmo son:

    codigoQR.txt

    referenciaQR.txt

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2015_T3 funciones matrices rotar, extraer
    # propuesta: edelros@espol.edu.ec
    # version con lazos y condicionales. 
    # tarea: simplificar lazos con 'for'
    
    import numpy as np
    
    # Tema 3 a)
    def rotando(matriz,k):
    
        #cuenta rotaciones
        cuenta = 0    
        while not(cuenta>=k):
            n,m = matriz.shape 
            tabla = numpy.zeros(shape=(m,n),dtype=int)
    
            # inicia rotación
            i = 0 
            while not(i>=n):
                j = 0
                while not(j>=m):
                    f = j
                    c = (n-1)-i
                    tabla[f,c] = matriz[i,j]
                    j = j + 1
                i = i + 1
            
            matriz = np.copy(tabla)
            cuenta = cuenta + 1
        return(matriz)
    
    # Tema 3 b) funcion para extraer una esquina 
    # de tamaño t de una matriz
    # k=0 ;esquina superior izquierda 
    # k=1 ;esquina superior derecha
    # k=3 ;esquina inferior izquierda 
    # k=2 ;esquina inferior derecha
    
    def extraeresquina(matriz,k,t):
        n,m = matriz.shape
        esquina = np.zeros(shape=(t,t), dtype=int)
        i = 0
        while not(i>=t):
            j = 0
            while not(j>=t):
                if (k==0):
                    f = i
                    c = j
                if (k==1):
                    f = i
                    c = (m-t)+j
                if (k==2):
                    f = (n-t)+i
                    c = (m-t)+j
                if (k==3):
                    f = (n-t)+i
                    c = j
                esquina[i,j]=matriz[f,c]
                j = j+1
            i = i+1   
        return(esquina)
    
    # Tema 4 ------------------------------
    
    # Programa para orientar el codigo QR
    
    # INGRESO por lectura desde un archivo
    codigo     = np.loadtxt('codigo.txt',dtype=int)
    referencia = np.loadtxt('referencia.txt',dtype=int)
    
    # PROCEDIMIENTO
    
    # comparando código y esquinas de referencia
    # resultados por esquina
    t,r = referencia.shape
    compara = np.zeros(4, dtype=int) 
    
    #compara esquinas
    k = 0  
    while not(k>=4):
        esquina    = extraeresquina(codigo,k,t)
        esqgirada  = rotando(referencia,k)
        compara[k] = np.array_equal(esquina,esqgirada)
        k = k + 1
        
    # Selecciona la rotacion
    if (compara[0]==1 and compara[1]==1
        and compara[2]==0 and compara[3]==1):
        orientado = rotando(codigo,0)
        
    if (compara[0]==1 and compara[1]==0
        and compara[2]==1 and compara[3]==1):
        orientado = rotando(codigo,1)
        
    if (compara[0]==0 and compara[1]==1
        and compara[2]==1 and compara[3]==1):
        orientado = rotando(codigo,2)
        
    if (compara[0]==1 and compara[1]==1
        and compara[2]==1 and compara[3]==0):
        orientado = rotando(codigo,3)
    
    # SALIDA
    print(orientado)
    
  • 3Eva_IIT2015_T2 Gestionar mensajes con etiquetas

    3ra Evaluación II Término 2015-2016, Febrero 16, 2016 /ICM00794

    Tema 2 (25 puntos). https://salmocorpblog.wordpress.com/2017/03/07/significado-de-hashtag/

    Realice programa que permita gestionar una lista de mensajes de una red social, con el menú mostrado:

    1. Ingresar mensaje. Solicite el nombre del usuario y un mensaje de texto.
    2. Usuario frecuente. Determine usando la lista de usuarios y muestre el usuario que más mensajes escribe.
    3. Tendencias. Analice todos los mensajes y encuentre la etiqueta más usada. Suponga que es una sola.
    4. Salir

    Ejemplo:

    lista
    usuario mensaje
    Juan Estamos en exámenes en la #ESPOL
    María Seré voluntaria en #AJA
    Pedro Yo estudio en #FCNM de la #ESPOL
    Ana Lean el artículo de #ESPOL en #ELUNIVERSO del domingo 7 de febrero

    Para extraer las etiquetas de cada mensaje pueden hacer uso de la función del tema anterior, para luego contar las veces que aparece cada etiqueta en la lista de mensajes. Al final debe encontrar la etiqueta más frecuente conocida como “tendencia”.

    tendencias
    etiqueta veces
    #ESPOL 3
    #AJA 1
    #FCNM 1
    #ELUNIVERSO 1
    La tendencia es: #ESPOL

    Rúbrica: Menú (5 puntos), uso de función anterior (5 puntos), opción 1 (2 puntos), opción 2 (8 puntos), opción 3 (5 puntos)


    propuesta: sol_py

    lista = [['Juan','Estamos en exámenes en la #ESPOL'],
             ['María','Seré voluntaria en #AJA'],
             ['Pedro','Yo estudio en #FCNM de la #ESPOL'],
             ['Ana','Lean el artículo de #ESPOL en #ELUNIVERSO del domingo 7 de febrero']]
    

    http://mnl13.nl/mnl13festival-mnl13-twitter-mee/

  • 3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

    3ra Evaluación II Término 2015-2016, Febrero 16, 2016 /ICM00794

    Tema 1  (25 puntos). En redes sociales un mensaje puede contener palabras etiquetadas, también conocidas como “hashtag” por iniciar con el símbolo ‘#’ para resaltar un tópico en particular.

    a) Realice una función etiquetados(mensaje), que al recibir un mensaje, busque y retorne las palabras etiquetadas.
    Considere que las etiquetadas terminan al encontrar un espacio o una coma, y que también encontrarse al último el mensaje.

    Ejemplo:
    >> mensaje='En la #ESPOL se usa aprendizaje por proyectos y entre pares, publicado #ELUNIVERSO el domingo 7 de febrero'
    >> etiquetados(mensaje)
         ['#ESPOL', '#ELUNIVERSO']
    >> mensaje='IX Semillero de Futuros Científicos e Ingenieros Inscripciones #AJA #FCNM #ESPOL'
    >> etiquetados(mensaje)
         ['#AJA','#FCNM', '#ESPOL']

    b) Elabore una función tabulando(palabras) que reciba una lista de palabras que pueden ser repetidas y genere una tabla con las palabras únicas junto al conteo de las veces que aparece cada una en la lista.

    >>palabras=[‘#ESPOL’, ‘#ELUNIVERSO’, ‘#AJA’, ’#FCNM’, ‘#ESPOL’]
    >>tabulando(palabras)
         [[#ESPOL,        2]
          [#AJA,          1]
          [#FCNM,         1]
          [#ELUNIVERSO,   1]]

    Rúbrica: Definir función (5 puntos), buscar inicio de etiqueta (5 puntos), copiar una etiqueta (5 puntos), lista etiquetas (5 puntos), determinar únicas (5 puntos), contar etiquetas (5 puntos).


    propuesta: sol_py

  • s3Eva_IIT2015_T2 Gestionar mensajes con etiquetas

    Ejercicio: 3Eva_IIT2015_T2 Gestionar mensajes con etiquetas

    Propuesta de solución en Python 3ra Eva. II Término 2015 Tema 1 y 2

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2015_T2 Gestionar mensajes con etiquetas
    # propuesta: edelros@espol.edu.ec
    # version con lazos y condicionales.
    # tarea: simplificar con 'for'
    
    import numpy as np
    
    # Tema 1. literal a)
    def buscaetiqueta(mensaje):
        n = len(mensaje)
        etiquetas = []
        copia = 0
        
        i = 0
        while not(i>=n):
    
            #Inicia copia etiqueta
            if (mensaje[i]=='#'): 
                copia = 1
                encontre = ''
            
            if (copia==1):
                encontre = encontre + mensaje[i]
                if (i<(n-1)):
                    if (mensaje[i+1]==' ' or mensaje[i+1]==','):
                        copia = 0
                        etiquetas.append(encontre)
                if (i==(n-1)):
                    etiquetas.append(encontre)
            i = i + 1
        return(etiquetas)
    
    # Tema 1. literal b)
    def tabulando(lista):
        n = len(lista) # usando listas
        repetido = np.zeros(n,dtype=int)
        numrepetido = 0
    
        # Marcando repetidos
        i = 0 
        while not(i>=(n-1)):
            j = i + 1
            while not(j>=n):
                if (lista[i]==lista[j]):
                    repetido[j]=1
                    numrepetido=numrepetido+1
                j = j + 1
            i = i + 1
    
        #copia vector unicos, tabula usando arreglo
        unicos = []
        i = 0
        while not(i>=n):
            if (repetido[i]==0):
                unicos.append([lista[i],0])
            i = i + 1
        k = len(unicos)
    
        # Cuenta y Acumula
        i = 0
        while not(i>=n):
            
            #busca posicion en unicos
            j = 0     
            while not(j>=k):
                if (lista[i]==unicos[j][0]):
                    unicos[j][1] = unicos[j][1]+1
                j = j + 1
                
            i = i + 1
            
        return(unicos)
    
    # Tema 2. Admnistra mensajes de una red social
    usuario = []
    mensaje = []
    
    opcion = 0
    while not(opcion==4):
        print('1. Ingresar mensaje')
        print('2. Usuario frecuente')
        print('3. Tendencias')
        print('4. Salir')
    
        opcion = int(input('cual opcion: '))
    
        if (opcion==1):
            print('1. Ingresar mensaje')
            quien = input('nombre usuario: ')
            dice  = input('mensaje: ')
            usuario.append(quien)
            mensaje.append(dice)
    
        if (opcion==2):
            print('2. Usuario frecuente')
            quienes = tabulando(usuario)
            n = len(quienes)
            mayor = 0
            k = 1
            while not (k>=n):
                if (quienes[k][1]>quienes[mayor][1]):
                    mayor = k
                k = k + 1
            print('los usuarios:')
            print(quienes)
            print('el usuario mas frecuente es: ',
                    quienes[mayor][0])
    
        if (opcion==3):
            print('3. Tendencias')
            n = len(mensaje)
            todaetiqueta = []
            i = 0
            while not(i>=n):
                cuales = buscaetiqueta(mensaje[i])
                m = len(cuales)
                if (m>0):
                    j = 0 #añade cada etiqueta
                    while not(j>=m):
                        todaetiqueta.append(cuales[j])
                        j = j+1
                i = i + 1
            etiquetas = tabulando(todaetiqueta)
            n = len(etiquetas)
            mayor = 0
            k = 1
            while not (k>=n):
                if (etiquetas[k][1]>etiquetas[mayor][1]):
                    mayor = k
                k = k + 1
            print(etiquetas)
            print('La tendencia es: ',etiquetas[mayor][0])
    
        if (opcion==4):
            print('Gracias por usar el software')
    
  • s3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

    Ejercicio: 3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

    Algoritmo en Python

    Tarea: Integrar con Tema 2

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas
    # propuesta: edelros@espol.edu.ec
    # version con lazos y condicionales.
    # tarea: simplificar con 'for'
    
    import numpy as np
    
    # Tema 1. literal a)
    def buscaetiqueta(mensaje):
        n = len(mensaje)
        etiquetas = []
        copia = 0
        
        i = 0
        while not(i>=n):
    
            #Inicia copia etiqueta
            if (mensaje[i]=='#'): 
                copia = 1
                encontre = ''
            
            if (copia==1):
                encontre = encontre + mensaje[i]
                if (i<(n-1)):
                    if (mensaje[i+1]==' ' or mensaje[i+1]==','):
                        copia = 0
                        etiquetas.append(encontre)
                if (i==(n-1)):
                    etiquetas.append(encontre)
            i = i + 1
        return(etiquetas)
    
    # Tema 1. literal b)
    def tabulando(lista):
        n = len(lista) # usando listas
        repetido = np.zeros(n,dtype=int)
        numrepetido = 0
    
        # Marcando repetidos
        i = 0 
        while not(i>=(n-1)):
            j = i + 1
            while not(j>=n):
                if (lista[i]==lista[j]):
                    repetido[j]=1
                    numrepetido=numrepetido+1
                j = j + 1
            i = i + 1
    
        #copia vector unicos, tabula usando arreglo
        unicos = []
        i = 0
        while not(i>=n):
            if (repetido[i]==0):
                unicos.append([lista[i],0])
            i = i + 1
        k = len(unicos)
    
        # Cuenta y Acumula
        i = 0
        while not(i>=n):
            
            #busca posicion en unicos
            j = 0     
            while not(j>=k):
                if (lista[i]==unicos[j][0]):
                    unicos[j][1] = unicos[j][1]+1
                j = j + 1
                
            i = i + 1
            
        return(unicos)
    
  • 3Eva_IT2015_T4 Bomberos para incendios forestales

    3ra Evaluación I Término 2015-2016, Septiembre 22, 2015 /ICM00794

    Tema 4. (30 puntos) Para gestionar los grupos de bomberos que acudieron a la provincia de Pichincha para enfrentar los incendios forestales se requiere elaborar un programa con el menú mostrado.

    Menú:
    1. Registrar bombero
    2. Asignar grupos
    3. Mostrar nombres de un grupo
    4. Guardar datos
    5. Leer datos
    6. Salir
    

    Al inicio del día se registrará cada bombero en orden de llegada en la siguiente tabla:

    Presentados
    cedula nombre bombero provincia
    1234567890 Juan Pérez 234 17 (Pichincha)
    2345678901 Pedro López 91 9 (Guayas)

    Por facilidad, la provincia usa un código numérico.

    Para asignar y mostrar los grupos se indica el número m de incendios forestales a combatir; use la función del tema anterior enviando un arreglo con los datos de bombero y provincia, el resultado será la matriz de grupos asignados.
    El listado de bomberos en un grupo se obtiene usando la opción 3, por lo que se ingresa el número del grupo para mostrar el nombre y cédula de los bomberos asignados.

    Rúbrica: Menú (5 puntos), manejar registros (5 puntos), crear arreglo para función (5 puntos), usar función anterior (5 puntos), opción 3 (5 puntos), opción 4 y 5 (5 puntos)

  • 3Eva_IT2015_T3 Asignar bomberos forestales por grupo

    3ra Evaluación I Término 2015-2016, Septiembre 22, 2015 /ICM00794

    Tema 3. (20 puntos) En la provincia de Pichincha durante tres semanas los bomberos han enfrentado 11 incendios forestales graves, cada uno afecta a más de diez hectáreas de terreno. incendio forestal imagen cerca campus

    Para ayudar, acudieron más de 150 bomberos de diferentes provincias del país.

    Cada bombero se identifica con su código y número de provincia y se requiere formar grupos de trabajo, asignando líderes de la provincia local (17) Pichincha por conocer de las condiciones geográficas del terreno.

    Ejemplo: para n=8 bomberos

    registrados
    bombero provincia
    13 17 (Pichincha)
    15 17 (Pichincha)
    95 9 (Guayas)
    103 13 (Manabí)
    19 17 (Pichincha)
    91 9 (Guayas)
    234 24 (Santa Elena)
    17 17 (Pichincha)

    Escriba una función grupobombero(registrados, m, local) que reciba el listado de n bomberos registrados, organice los m grupos en una matriz, indicando el número de la provincia local siguiendo las condiciones expuestas.

    Primero asigne a cada grupo los bomberos locales y luego complete con los de otras provincias. Ejemplo:

    >> m=3
    >> local=17
    >> grupobombero(registrados,m,local)
    
    Grupo 1 Grupo 2 Grupo 3
    13 15 19
    17 95 103
    91 234 0

    Observe que: el registro de los bomberos no es ordenado; los grupos se completan mientras existan bomberos que asignar, sino se representa con 0 (cuando m no es múltiplo de n).

    Referencia: Las hectáreas dañadas por los incendios ascendieron a 973 (17.09.2015). http://www.elcomercio.com
    Bomberos costeños en Quito para combatir incendios forestales (16.09.2015). http://www.eluniverso.com/

    Rúbrica: Definir función y parámetros (5 puntos), control del grupos (5 puntos), asignar locales (5 puntos), completar matriz (5 puntos).


    registrados = [[ 13, 17],
                   [ 15, 17],
                   [ 95,  9],
                   [103, 13],
                   [ 19, 17],
                   [ 91,  9],
                   [234, 24],
                   [ 17, 17]]
    m = 3 
    local = 17 
    >> grupobombero(registrados,m,local) 
    [[13  15  19], 
     [17  95 103], 
     [91 234   0]]
    
  • 3Eva_IT2015_T2 Deletrear un número

    3ra Evaluación I Término 2015-2016, Septiembre 22, 2015 /ICM00794

    Tema 2 (25 puntos). Al elaborar una factura o cheque, se escribe el valor numérico con dos decimales y también el valor en forma de texto.

    Realice una función deletrearnumero(valor) que reciba el valor, número positivo menor que mil y con dos decimales, para convertirlo a su equivalente en texto.

    Ejemplos:
    8.43 ocho con 43/100
    23.15 veintitrés con 15/100
    435.16 cuatrocientos treinta y cinco con 16/100
    >>deletrearnumero(435.16)
    cuatrocientos treinta y cinco con 16/100

    Sugerencia: use la función del tema anterior. Use listas con los nombres de números.

    Rúbrica: Definir la función (5 puntos), separar entero (5 puntos), convertir a palabras (10 puntos), añadir centavos (5 puntos)

  • 3Eva_IT2015_T1 Maquina con monedas

    3ra Evaluación I Término 2015-2016, Septiembre 22, 2015 /ICM00794

    Tema 1 (25 puntos). Para despachar dinero en efectivo con una maquina automática realice lo siguiente:

    a) Escriba una función separanum(valor), que reciba un valor numérico real y separe las cantidades en un vector que contiene:
    centavos, unidades, decenas, centenas, etc.
    Los centavos equivalen a usar dos decimales redondeado al entero más cercano.
    Desarrolle el algoritmo usando operaciones de cociente y residuo (no use round()).

    >>separanum(435.16)
     [16, 5, 3, 4]
    centavos unidades decenas centenas
    16 5 3 4

    b) Realice una función cuantasmonedas(centavos) que reciba la cantidad de centavos a entregar con monedas de 1, 5, 10, 25, 50 centavos usado la menor cantidad de monedas.

    >>cuantasmonedas(63)
    [3, 0, 1, 0, 1]
    monedas 1 5 10 25 50
    cantidad 3 0 1 0 1

    Rúbrica: Definir funciones (5 puntos), separar números (5 puntos), operaciones para redondear (5 puntos), literal b (10 puntos)