s3Eva_IIT2015_T3 funciones matrices rotar, extraer

Ejercicio: 3Eva_IIT2015_T3 funciones matrices rotar, extraer

Propuesta de solución 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_T1 Mensajes en redes sociales y etiquetas

Ejercicio: 3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

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

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:

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

# 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

# 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_IT2013_T2 sorteo de consejeros para estudiantes

Ejercicio: 3Eva_IT2013_T2 sorteo de consejeros para estudiantes

Instrucciones en Python

Propuesta de solución en Python,  ejercicio iniciado en clase como referencia.

# 3Eva_IT2013_T2 sorteo de consejeros para estudiantes
import numpy as np
import random as rnd

# INGRESO
n = int(input('numero de estudiantes: '))
m = int(input('numero de profesores: '))

# PROCEDIMIENTO
consejero = np.zeros(n+1,dtype = int)
contador = np.zeros(m+1,dtype = int)
cupo = n//m
residuo = n%m
i = 1
while not(i>(n-residuo)):
    sorteo = int(rnd.random()*m) + 1
    if (contador[sorteo]<cupo):
        contador[sorteo] = contador[sorteo]+1
        consejero[i] = sorteo
        i = i + 1
cupo = cupo + 1
i = n - residuo + 1
while not(i>n):
    sorteo = int(rnd.random()*m) + 1
    if (contador[sorteo]<cupo):
        contador[sorteo] = contador[sorteo]+1
        consejero[i] = sorteo
        i = i + 1

# SALIDA
print(contador)
print(consejero)

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.

# 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

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

# 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()

s3Eva_IT2015_T4 Bomberos para incendios forestales

Ejercicios: 3Eva_IT2015_T4 Bomberos para incendios forestales

Propuesta de solución en Python:

Tarea: Desarrollar la opcion 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 .....')