s2Eva_IT2015_T4 Movilidad de tortugas en región

Ejercicio: 2Eva_IT2015_T4 Movilidad de tortugas en región

Propuesta de solución en Python, continúa desde el tema 3:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IT2015_T3 Distribuye tortugas en región
import numpy as np
import random as rnd

def distribuye(n,m,q,total):
    isla = np.zeros(shape=(n,m),dtype = int)
    unatortuga = 1
    while not(unatortuga > total):
        fila = int(rnd.random()*n)+0
        columna = int(rnd.random()*m)+0
        if (isla[fila,columna]<q):
            isla[fila,columna] = isla[fila,columna] + 1
            unatortuga = unatortuga+1
    return(isla)

# 2Eva_IT2015_T4 Movilidad de tortugas en región
# usar funciones para operaciones intermedias
def cuentaceros(isla):
    tamano = np.shape(isla)
    n = tamano[0]
    m = tamano[1]
    cuenta = 0
    for f in range(0,n,1):
        for c in range(0,m,1):
            if (isla[f,c] ==0):
                cuenta = cuenta +1
    return(cuenta)

def muevetortuga(isla):
    tamano = np.shape(isla)
    n = tamano[0]
    m = tamano[1]
    # crear una situacion posterior,
    # donde se mueve cada tortuga
    posterior = np.zeros(shape=(n,m),dtype = int)
    for f in range(0,n,1):
        for c in range(0,m,1):
            cuantas = isla[f,c]
            if (cuantas>=1):
                tortugas = 1
                while not(tortugas>cuantas):
                    # mueve una tortuga
                    mueve = int(rnd.random()*5)+0
                    if (mueve ==1):
                        # verifica limites, sino se pierde la tortuga
                        if ((f-1)>=0 and (c-1)>=0):
                            posterior[f-1,c-1] = posterior[f-1,c-1] +1
                    if (mueve ==2):
                        if ((f-1)>=0 and (c+1)<m):
                            posterior[f-1,c+1] = posterior[f-1,c+1] +1
                    if (mueve ==3):
                        if ((f+1)=0):
                            posterior[f+1,c-1] = posterior[f+1,c-1] +1
                    if (mueve ==4):
                        if ((f+1)<n and (c+1)<m):
                            posterior[f+1,c+1] = posterior[f+1,c+1] +1
                    tortugas = tortugas +1
    return(posterior)


# INGRESO
n = int(input('filas : '))
m = int(input('columnas : '))
q = int(input('maximo por casilla : '))
total = int(input('tortugas en cautiverio : '))
# Tarea: validar que total no exceda capacidad de isla

# PROCEDIMIENTO
inicial = distribuye(n,m,q,total)
inicialceros = cuentaceros(inicial)
posterior = muevetortuga(inicial)
perdidas = np.sum(inicial)- np.sum(posterior)

# SALIDA
print('isla al inicio: ')
print(inicial)
print('casillas vacias en inicial: ', inicialceros)
print('isla despues de un periodo: ')
print(posterior)
print('tortugas perdidas: ', perdidas)

Nota: considera que si la tortuga sale de la matriz, ya no se la cuenta, desaparece, muere.

filas : 4
columnas : 6
maximo por casilla : 5
tortugas en cautiverio : 20
isla al inicio:
[[1 1 1 0 0 3]
 [0 2 1 2 0 1]
 [0 0 0 0 1 0]
 [2 2 3 0 0 0]]
casillas vacias en inicial:  12
isla despues de un periodo:
[[0 0 2 1 1 0]
 [0 0 0 0 0 0]
 [2 1 0 0 1 0]
 [0 0 0 1 0 0]]
tortugas perdidas:  11

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

s1Eva_IT2014_T2 Verificar EAN con Python

Ejercicio: 1Eva_IT2014_T2 Verificar EAN

En el aula se requeria: separar los componentes de producto, empresa y pais. Luego encontrar la suma de los digitos con la operación indicada en el enunciado.

La siguiente semana de ser necesario se explica el tema de la decena superior.

 

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2014_T2 Verificar EAN

# INGRESO
EAN = int(input('European Article Number,EAN: '))

# PROCEDIMENTO
# separar las partes
verificador = EAN%10
numero = EAN//10

producto = numero%100000
numero =  numero//100000

empresa =  numero%10000
pais =  numero//10000

# calcular verificador
suma = 0
numero = numero = EAN//10
while not(numero<=0):
    digito = numero%10
    numero = numero//10
    suma   = suma + 3*digito
    
    digito = numero%10
    numero = numero//10
    suma   = suma + 1*digito
    
decena    = suma//10
superior  = (decena + 1)*10
calculado = superior - suma

if (verificador == calculado):
    valido = 1
else:
    valido = 0
    
# SALIDA
print('el numero ingresado es válido: ', valido)
print('producto: ', producto)
print('empresa: ', empresa)
print('pais: ', pais)

resultado del algoritmo

European Article Number,EAN: 7702004003508
el numero ingresado es válido:  1
producto:  350
empresa:  2004
pais:  770
>>> 

European Article Number,EAN: 7702004003509
el numero ingresado es válido:  0
producto:  350
empresa:  2004
pais:  770
>>> 

s2Eva_IIT2014_T2 Listar multas infractores metrovía

Ejercicio: 2Eva_IIT2014_T2 Listar multas infractores metrovía

continuación del tema 1. Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IIT2014_T2 Listar multas infractores metrovía
# Tarea: Calcular el total de multas a recaudar
import numpy as np

def multametrovia(veces,basico):
    pagar = 0
    i = 1
    while not(i>veces):
        if (i==1):
            pagar = basico + 0.1*basico
        if (i>1):
            pagar = pagar + 2*basico+0.1*basico
        i = i + 1
    return(pagar)

# 2Eva_IIT2014_T2 Listar multas infractores metrovía
# usa la funcion anterior

# INGRESO
n = int(input('cuantas infracciones: '))
i = 0
codigo = []
while not(i>=n):
    placa = input('codigo: ')
    codigo.append(placa)
    i = i + 1

# PROCEDIMIENTO

# marcar los únicos
unico = np.ones(n,dtype=int)
i = 0
penultimo = n-1
while not(i>=penultimo):
    j = i + 1
    while not(j>=n):
        if (codigo[i]==codigo[j]):
            unico[j] = 0 
        j = j + 1
    i = i + 1

# copiar en nueva lista placas únicas
infractor = []
i = 0
while not(i>=n):
    if (unico[i]==1):
        infractor.append(codigo[i])
    i = i + 1

# contar los repetidos vector veces
m = len(infractor)
veces = np.zeros(m,dtype=int)
i = 0
while not(i>=n):
    placa = codigo[i]
    
    # busca en infractores
    j = 0
    while not(j>=m):
        if (placa==infractor[j]):
            veces[j] = veces[j] + 1
        j = j + 1
    i = i + 1

# multas
multas = np.zeros(m,dtype=float)
j = 0
while not(j>=m):
    multas[j] = multametrovia(veces[j],354)
    j = j + 1

# Tarea: total a recaudar por multas

# SALIDA
print(unico)
print(infractor)
print('La lista de infractores y multas es:')
j = 0
while not(j>=m):
    print(infractor[j],multas[j])
    j = j + 1

resultado del algoritmo

cuantas infracciones: 4
codigo: 123
codigo: 456
codigo: 1020
codigo: 456
[1 1 1 0]
['123', '456', '1020']
La lista de infractores y multas es:
123 389.4
456 1132.8000000000002
1020 389.4
>>> 

s2Eva_IIT2014_T1 Multas por invadir carril metrovía

Ejercicio: 2Eva_IIT2014_T1 Multas por invadir carril metrovía

Propuesta de solución en Python para tema 1, continúa en tema 2.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IIT2014_T1 Multas por invadir carril metrovía
# Tarea: Calcular el total de multas a recaudar
import numpy as np

def multametrovia(veces,basico):
    pagar = 0
    i = 1
    while not(i>veces):
        if (i==1):
            pagar = basico + 0.1*basico
        if (i>1):
            pagar = pagar + 2*basico+0.1*basico
        i = i + 1
    return(pagar)

resultado del algoritmo

>>> multametrovia(1, 354.00)
389.4
>>> multametrovia(2, 354.00)
1132.8000000000002
>>> multametrovia(3, 354.00)
1876.2000000000003
>>> 

s2Eva_IT2014_T2 Programar una Función color RGB a gris

Ejercicio: 2Eva_IT2014_T2 Función color RGB a gris

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IT2014_T2 Función color RGB a gris
# propuesta: edelros@espol.edu.ec

import numpy as np

def convertirgris(RGB):
    rojo  = RGB[0]
    verde = RGB[1]
    azul  = RGB[2]

    # Mezcla colores
    gris = 0.2989*rojo + 0.5870*verde + 0.1140*azul
    gris = int(gris)

    if (rojo>255 or verde>255 or azul>255):
        gris = -1
    # Tarea: verificar para colores <0
    
    return(gris)