Categoría: Sol_3Eva 2013-2014-2015

  • 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)
    
  • 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)
    
  • s3Eva_IT2015_T1 Maquina con monedas

    Ejercicios: 3Eva_IT2015_T1 Maquina con monedas

    Video de concepto que incluye el ejercicio:

    Algoritmo en Python

    Literal a:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2015_T1 Maquina con monedas
    import numpy as np
    
    # INGRESO
    valor = float(input('valor: '))
    
    # PROCEDIMIENTO
    centavos = (valor - int(valor))*100
    centavos = int(centavos)
    
    cantidad    = np.zeros(4,dtype=int)
    cantidad[0] = centavos
    numero = int(valor)
    
    i = 1
    while not(numero == 0 or i>=4):
        digito = numero%10
        numero = numero//10
        cantidad[i] = digito
        i = i + 1
    
    # SALIDA
    print(cantidad)
    

    prueba:

    valor: 435.16
    [16  5  3  4]
    >>> 
    

    tarea: convertir a función

    literal b:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2015_T1 Maquina con monedas
    import numpy as np
    
    # INGRESO
    centavos = int(input('devolver: '))
    
    # PROCEDIMIENTO
    monedas = np.array([1,5,10,25,50])
    tamano = len(monedas)
    devolver = centavos
    cantidad = np.zeros(tamano, dtype = int)
    i = tamano - 1
    while not(i < 0):
        cantidad[i] = devolver//monedas[i]
        devolver = devolver%monedas[i]
        i = i-1
    
    # SALIDA
    print(monedas)
    print(cantidad)
    

    prueba:

    devolver: 63
    [ 1  5 10 25 50]
    [3 0 1 0 1]
    >>> 
    

    tarea: convertir a función

  • s3Eva_IT2015_T4 Bomberos para incendios forestales

    Ejercicios: 3Eva_IT2015_T4 Bomberos para incendios forestales

    Propuesta de solución en Python:

    Algoritmo en Python

    Tarea: Desarrollar la opción 3

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2015_T4 Bomberos para incendios forestales
    import numpy as np
    
    def grupobombero(registrados, m, local):
        n = len(registrados)
        filas = n//m
        if (n%m>0):
            filas = filas+1
        tabla = np.zeros(shape=(filas,m),dtype = int)
        # Solo bomberos de provincia local
        f = 0
        c = 0
        i = 0
        while not(i>=n):
            cual = registrados[i,1]
            quien = registrados[i,0]
            if (cual == local):
                tabla[f,c] = quien
                c = c+1
                if (c>=m):
                    c = 0
                    f = f + 1
            i = i + 1
        # los demas bomberos
        i = 0
        while not(i>=n):
            cual = registrados[i,1]
            quien = registrados[i,0]
            if not(cual == local):
                tabla[f,c] = quien
                c = c + 1
                if (c>=m):
                    c = 0
                    f = f + 1
            i = i + 1
        tabla = np.array(tabla)
        return(tabla)
    
    # 3ra Evaluación I Término 2015
    # Tema 4. Bomberos para incendios forestales
    presentados = []
    tabla  = np.zeros(shape=(1,2),dtype=int)
    opcion = -1
    i = 1
    while not(opcion==6):
        print('1. Registrar bombero')
        print('2. Asignar grupos')
        print('3. Mostrar nombres de un grupo')
        print('4. Guardar datos')
        print('5. Leer datos')
        print('6. Salir')
        opcion = int(input(' opcion: '))
    
        if (opcion ==1):
            i = len(presentados) + 1
            print('voluntario: ',i)
            
            ced  = input('cedula: ')
            nom  = input('nombre: ')
            nbom = int(input('numero bombero: '))
            prv  = int(input('provincia: '))
            while not(prv>=1 and prv<=24):
                prv = int(input('provincia [1,24]: '))
                
            unbombero = {'cedula':ced,
                         'nombre': nom,
                         'nbombero':nbom,
                         'provincia':prv}
            presentados.append(unbombero)
    
        if (opcion==2):
            print('asigna grupos.....')
            m = int(input('cuantos grupos/incendios: '))
            local = int(input('ayudar a provincia: '))
            n = len(presentados)
            registrados =[]
            i = 0
            while not(i>=n):
                nbom = presentados[i]['nbombero']
                prv = presentados[i]['provincia']
                registrados.append([nbom,prv])
                i = i + 1
            tabla = grupobombero(registrados, m, local)
            print(tabla)
            
        if (opcion==3):
            print('....3. Mostrar nombres de un grupo')
            # Tarea por desarrollar
                
        if (opcion==4):
            narchivo = 'bomberos.txt'
            archivo = open(narchivo,'w')
            n = len(presentados)
            j =0
            while not(j>=n):
                ced = presentados[j]['cedula']
                nom = presentados[j]['nombre']
                nbom = presentados[j]['nbombero']
                prv = presentados[j]['provincia']
                linea = ced + ',' +nom + ',' + str(nbom) + ',' +str(prv) +'\n'
                archivo.write(linea)
                j = j+1
            archivo.close()
            print('.... registros guardados: ', n)
            
        if (opcion == 5):
            presentados = []
            narchivo = 'bomberos.txt'
            
            archivo = open(narchivo,'r')
            linea = archivo.readline()
            while not(linea==''):
                linea  = linea.strip('\n')
                partes = linea.split(',')
                ced  = partes[0]
                nom  = partes[1]
                nbom = int(partes[2])
                prv  = int(partes[3])
                
                unbombero = {'cedula':ced,
                             'nombre': nom,
                             'nbombero':nbom,
                             'provincia':prv}
                presentados.append(unbombero)
                linea = archivo.readline()
    
            n = len(presentados)
            print('.... registros leidos: ', n)
            archivo.close()
    
        if (opcion==6):
            print(' Saliendo del programa ....')
            print(' ccpg1001 Fundamentos de computación .....')
    
  • s3Eva_IT2014_T3 Juego Poli-Mancala

    Ejercicios: 3Eva_IT2014_T3 Juego Poli-Mancala

    Propuesta de solución en Python:

    El tema pide realizar el programa usando la función siembra del tema 4. Por lo que la función se califica aparte.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2014_T3 Juego Poli-Mancala
    import numpy as np
    
    # funcion siembra del tema 4
    def siembra(mancala,jugador,casilla):
        tamano = np.shape(mancala)
        m = tamano[1]
        fila = jugador
        # Selecciona el movimiento del contador
        if (fila == 0):
            mueve = 1
        else:
            mueve = -1
    
        # Recoge las fichas
        fichas = mancala[fila,casilla]
        mancala[fila,casilla] = 0
        
        # inicia la siembra
        while not(fichas==0):
            casilla = casilla + mueve
            if (casilla>=m):
                casilla = m-1
                fila = 1
                mueve = -1 
            if (casilla<0):
                casilla = 0
                fila = 0
                mueve = 1
            mancala[fila,casilla] = mancala[fila,casilla]+1
            fichas = fichas-1
    
        return(mancala)
    
    # PROGRAMA PARA EL JUEGO ---------------
    # inicializa tablero
    mancala = np.ones(shape=(2,8),dtype=int)
    mancala = mancala*4
    mancala[:,0] = 0
    mancala[:,7] = 0
    casa1 = 0
    casa2 = 0
    print('  1 2 3 4 5 6 7 8')
    print(mancala)
    
    while not(casa1>24 or casa2>24):
        
        jugador = 1
        print(' Juega 1')
        casilla = input('¿Cual casilla?:')
        while not(casilla>'1' and casilla<'8'):
            casilla = input('¿Cual casilla?:')
        mancala = siembra(mancala,jugador-1, int(casilla)-1)
        print('  1 2 3 4 5 6 7 8')
        print(mancala)
    
        jugador = 2
        print(' Juega 2')
        casilla = input('¿Cual casilla?:')
        while not(casilla>'1' and casilla<'8'):
            casilla = input('¿Cual casilla?:')
        mancala = siembra(mancala,jugador-1, int(casilla)-1)
        casa1 = mancala[0,0]+mancala[1,0]
        casa2 = mancala[0,7]+mancala[1,7]
        print('  1 2 3 4 5 6 7 8')
        print(mancala)
    
    # Muestra ganadores
    if (casa1>casa2):
        print(' Gana Jugador 1')
    else:
        print(' Gana Jugador 2')
    
  • s3Eva_IT2014_T4 Función siembra

    Ejercicios: 3Eva_IT2014_T4 Función siembra

    Algoritmo en Python

    complementa el programa requerido en tema 3

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2014_T4 Juego Poli-Mancala
    import numpy as np
    
    # funcion siembra
    def siembra(mancala,jugador,casilla):
        tamano = np.shape(mancala)
        m = tamano[1]
        fila = jugador
        # Selecciona el movimiento del contador
        if (fila == 0):
            mueve = 1
        else:
            mueve = -1
    
        # Recoge las fichas
        fichas = mancala[fila,casilla]
        mancala[fila,casilla] = 0
        
        # inicia la siembra
        while not(fichas==0):
            casilla = casilla + mueve
            if (casilla>=m):
                casilla = m-1
                fila = 1
                mueve = -1 
            if (casilla<0):
                casilla = 0
                fila = 0
                mueve = 1
            mancala[fila,casilla] = mancala[fila,casilla]+1
            fichas = fichas-1
    
        return(mancala)
    
  • s3Eva_IIT2013_T4 Gestionar asientos en cine

    Ejercicio: 3Eva_IIT2013_T4 Gestionar asientos en cine

    Algoritmo en Python

    Propuesta de solución en Python:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2013_T4 Gestionar asientos en cine
    import numpy as np
    
    # Genera la sala
    n = int(input('numero filas: '))
    m = int(input('numero columnas:'))
    asiento = np.zeros(shape=(n,m), dtype=int)
    
    opcion = '0'
    while not(opcion=='5'):
        print(' 1. Vender Boletos')
        print(' 2._Mostrar_asientos')
        print(' 3. Contar vendidos')
        print(' 4. Buscar libre')
        print(' 5. Salir ')
    
        opcion = input('cual opcion: ')
    
        if (opcion=='1'):
            print('Vender Boletos')
            fila = int(input('fila:'))
            columna = int(input('columna:'))
            if (asiento[fila,columna]==0):
                asiento[fila,columna] = 1
            else:
                print('asiento ocupado')
    
            
        if (opcion=='2'):
            print('Mostrar_asientos')
            print(asiento)
            
        if (opcion=='3'):
            print('Contar vendidos')
            contar = 0
            for fila in range(0,n,1):
                for columna in range(0,m,1):
                    contar = contar+asiento[fila,columna]
            print(contar)
            
        if (opcion=='4'):
            print('Buscar libre')
            
        if (opcion=='5'):
            print('Salir')
    
  • s3Eva_IT2013_T3 Menú de consejerías académicas

    Ejercicios: 3Eva_IT2013_T3 Menú de consejerías académicas

    Propuesta de solución en Python,  ejercicio iniciado en clase como referencia. Se incluyó grabar los datos en un archivo.

    Tarea: continúa ejercicio en la siguiente clase, para las opciones no desarrolladas y la función del tema 2

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2013_T3 Menú de consejerías académicas
    
    estudiante = []
    opcion = '0'
    while not(opcion=='7'):
        print('1. Ingresar datos de estudiante')
        print('2. Ingresar datos de consejero')
        print('3. Sorteo de consejeros/estudiantes')
        print('4. Mostrar lista de estudiantes por consejero')
        print('5. Mostrar consejero de un estudiante')
        print('6. Grabar datos')
        print('7. Salir')
    
        opcion = input('cual opcion: ')
    
        if (opcion=='1'):
            # INGRESO
            mtr = input('matricula: ')
            nom = input('nombre: ')
            ema = input('email: ')
            nac = int(input('año nacimiento: '))
            while not(nac>1900 and nac<2018):
                print('usar anos desde el ultimo siglo...')
                nac = int(input('año nacimiento: '))
    
            unestudiante = {'matricula':mtr,
                            'nombre':nom,
                            'email':ema,
                            'nacimiento':nac}
            estudiante.append(unestudiante)
    
        if (opcion=='4'):
            print('los estudiantes registrados son: ')
            print(estudiante)
    
        if (opcion=='6'):
            print('Guardar datos en archivo...')
            narchivo = 'misdatos.txt'
    
            archivo  = open(narchivo, 'w')
            n = len(estudiante)
    
            i = 0
            while not(i>=n):
                nom = estudiante[i]['nombre']
                ema = estudiante[i]['email']
                linea = nom +','+ema+ '\n' # str(nac)
                archivo.write(linea)
                i = i + 1
    
            archivo.close()