s3Eva_IT2012_T3 Tonalidad de colores en GIF

Ejercicio: 3Eva_IT2012_T3 Tonalidad de colores en GIF

resultados obtenidos

color, frecuencia
0 5
1 0
2 0
...
28 0
29 0
30 10
31 0
32 0
...
78 0
79 0
80 5
81 0
...

Instrucciones en Python

# 3Eva_IT2012_T3 Tonalidad de colores en GIF
import numpy as np

# INGRESO
matriz = np.array([[30, 30, 30, 0, 0],
                   [30, 30, 30, 0, 0],
                   [170, 170, 30, 30, 0],
                   [80, 80, 170, 30, 30],
                   [80, 80, 80, 170, 170]])

# PROCEDIMIENTO
color = np.arange(0,256,1)
frecuencia = np.zeros(256,dtype=int)
tamano = np.shape(matriz)
n = tamano[0]
m = tamano[1]
for i in range(0,n,1):
    for j in range(0,m,1):
        unvalor = matriz[i,j]
        frecuencia[unvalor] = frecuencia[unvalor] + 1

# SALIDA
print('color, frecuencia')
for i in range(0,256,1):
    print(color[i],frecuencia[i])

s3Eva_IT2012_T2 Validar infix y convertir a prefix

Ejercicio: 3Eva_IT2012_T2 Validar infix y convertir a prefix

resultados obtenidos,

>>> in2prefix('2+3')
'+ 2 3'
>>> validainfix('2+3')
True
>>> validainfix('23+')
False
>>> in2prefix('2+3')
'+ 2 3'
>>> 

Instrucciones en Python

# 3Eva_IT2012_T2 Validar infix y convertir a prefix

def validainfix(cadena):
    numero ='0123456789'
    operador ='+-'
    c1 = cadena[0] in numero
    c2 = cadena[2] in numero
    c3 = cadena[1] in operador

    z = 'use 3 dígitos'
    if len(cadena)==3:
        z = c1 and c2 and c3
    return(z)

def in2prefix(cadena):
    z = 'use 3 dígitos'
    condicion = validainfix(cadena)
    if len(cadena)==3 and condicion:
        z = cadena[1]
        z = z+' '+cadena[0]
        z = z+' '+cadena[2]
    return(z)

s3Eva_IIT2012_T1 Alfabeto radiofónico con Python

Ejercicio: 3Eva_IIT2012_T1 Alfabeto radiofónico

Para resolver el ejercicio de alfabeto radiofónico en Python, se propone usar el algoritmo de búsqueda sobre una lista con las parejas [letras,código].

radiofonico = [['A','Alfa'],   ['B','Bravo'],
               ['C','Charlie'],['D','Delta'],
               ['E','Echo'],   ['F','Foxtrot'],
               ['G','Golf'],   ['H','Hotel'],
               ['I','India'],  ['J','Juliet'],
               ['K','Kilo'],   ['L','Lima'],
               ['M','Mike'],   ['N','November'],
               ['O','Oscar'],  ['P','Papa'],
               ['Q','Quebec'], ['R','Romeo'],
               ['S','Sierra'], ['T','Tango'],
               ['U','Uniform'],['V','Victor'],
               ['W','Whiskey'],['X','X-ray'],
               ['Y','Yankee'], ['Z','Zulu']]

Instrucciones en  Python

Para la función coderadio(), la palabra ingresada se convierten todas sus letras a mayúsculas con .upper(), así se facilita la búsqueda sobre la lista radiofónico.

>>> coderadio('ESPOL')
Echo Sierra Papa Oscar Lima

Se aplica el algoritmo de búsqueda  usando cada letra de la palabra sobre cada pareja de lista radiofónico, usando la bandera encontre para salir del bucle de búsqueda. La variable donde indica la posición de coincidencia entre la letra de la palabra y la letra de la lista radiofónico.

El proceso contrario con la función decoradio(), se toma la primera letra de cada palabra de la frase ingresada.

>>> decoradio('Echo Sierra Papa Oscar Lima')
ESPOL

el detalle de instrucciones se presenta a continuación.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2012_T1 Alfabeto radiofónico
# Tarea: En la segunda función considerar
# que se pueden dar palabras que no son radiofónicas.
#      mejorar la función usando la tabla radiofónico.

def coderadio(palabra,radiofonico):
    # analizar secuencia a codificar
    palabra = palabra.upper()
    frase = '' 

    n = len(palabra)
    i = 0
    while not(i>=n):
        letra = palabra[i]
        
        # Buscar letra en radiofonico
        encontre = 0
        donde    = -1
        m = len(radiofonico)

        j = 0
        while not(j>=m or encontre==1):
            if (letra == radiofonico[j][0]):
                encontre = 1
                donde = j
                equivale = radiofonico[j][1]
            j = j + 1 # busca la siguiente fila

        # completa la frase
        if len(frase)==0:
            espacio = ''
        else:
            espacio = ' '
        frase = frase + espacio + equivale
        
        i = i + 1 # cambia letra de palabra

    return(frase)

def decoradio(frase,radiofonico):
    # Solo un ejemplo para decodificar,
    # Tarea, considerar que pueden enviar 
    #   una palabra que no se encuentra en tabla

    partes = frase.split(' ')
    n = len(partes)
    palabra = ''

    i = 0
    while not(i>=n):
        palabra = palabra + partes[i][0]
        i = i + 1
    return(palabra)

Tarea: Continuar con el tema 2 para crear el menú con las partes para practicar el alfabeto radiofónico.

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.]]
>>> 

Instrucciones 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)

s3Eva_IIT2011_T2 Registrar gastos en viaje por automóvil

Ejercicio: 3Eva_IIT2011_T2 Registrar gastos en viaje por automóvil

Instrucciones en Python

# 3ra Evaluacion II Term 2011
# Tema 2. Recorridos Juan y Pedro
import random as rnd

# INGRESO
n = int(input('Ingrese cantidad de ciudades: '))
gasto = [0]
izquierda = [0]
derecha = [0]
for i in range(1,n+1,1):
    print("Ciudad: ", i)
    ungasto = int(input('Gastos en ciudad: '))
    ciudad_izq = int(input('Ciudad izquierda: '))
    ciudad_der = int(input('Ciudad  derecha: '))
    gasto.append(ungasto)
    izquierda.append(ciudad_izq)
    derecha.append(ciudad_der)

# PROCEDIMIENTO
# Viaje de Juan
dia    = 1
visita = 1
costojuan = 0
rutajuan  = []
while not(visita==0):
    rutajuan.append(visita)
    costojuan = costojuan + gasto[visita]
    direccion = int(rnd.random()*2)+1
    if direccion == 1:
        visita = izquierda[visita]
    else:
        visita = derecha[visita]
    dia = dia+1
diasjuan = dia-1


# Viaje de Pedro
dia    = 1
visita = 1
costopedro = 0
rutapedro  = []
while not(visita==0):
    rutapedro.append(visita)
    costopedro = costopedro + gasto[visita]
    direccion  = int(rnd.random()*2)+1
    if direccion == 1:
        visita = izquierda[visita]
    else:
        visita = derecha[visita]
    dia = dia+1
diaspedro = dia-1

# SALIDA
print('Recorrido de Juan: ', rutajuan)
print('Costo de Juan: ', costojuan)
print('Recorrido de Pedro: ', rutapedro)
print('Costo de Pedro: ', costopedro)

if diasjuan>diaspedro:
    print('Juan visitó más ciudades')
else:
    print('Pedro visitó más ciudades')

if costojuan<costopedro:
    print('Juan tuvo el viaje más barato')
else:
    print('Pedro tuvo el viaje más barato')

Resultado del algoritmo

RESTART: D:/CCPG1001Ejemplos/RutasJuanPedro.py 
Ingrese cantidad de ciudades: 7
Ciudad:  1
Gastos en ciudad: 200
Ciudad izquierda: 3
Ciudad  derecha: 2
Ciudad:  2
Gastos en ciudad: 150
Ciudad izquierda: 4
Ciudad  derecha: 5
Ciudad:  3
Gastos en ciudad: 70
Ciudad izquierda: 7
Ciudad  derecha: 4
Ciudad:  4
Gastos en ciudad: 140
Ciudad izquierda: 7
Ciudad  derecha: 6
Ciudad:  5
Gastos en ciudad: 90
Ciudad izquierda: 6
Ciudad  derecha: 0
Ciudad:  6
Gastos en ciudad: 300
Ciudad izquierda: 7
Ciudad  derecha: 0
Ciudad:  7
Gastos en ciudad: 50
Ciudad izquierda: 0
Ciudad  derecha: 0
Recorrido de Juan:  [1, 2, 4, 6]
Costo de Juan:  790
Recorrido de Pedro:  [1, 3, 7]
Costo de Pedro:  320
Juan visitó más ciudades
Pedro tuvo el viaje más barato
>>> 

s3Eva_IIT2011_T1 Generar números 1800-nombre

Ejercicio: 3Eva_IIT2011_T1 Generar números 1800-nombre

resultados obtenidos

>>> teclaletra('K')
5

Instrucciones Python

# 3Eva_IIT2011_T1 Generar números 1800-nombre

def teclaletra(letra):
    letras = ['ABC','DEF','GHI',
              'JKL','MNO','PQRS',
              'TUV','WXYZ']
    tecla = [2,3,4,5,6,7,8,9]
    n = len(letras)
    equivale = 0
    for i in range(0,n,1):
        if letra in letras[i]:
            equivale = tecla[i]
    return(equivale)
    
# Tarea, desarrollar literal b

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:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2010_T3 Rompecabezas, desordena y ubica
# Propuesta: edelros@espol.edu.ec
# 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...! ')

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

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

s3Eva_IT2010_T2 Funciones ocupados y ubica libre en matriz

Ejercicio: 3Eva_IT2010_T2 Funciones ocupados y ubica libre en matriz

resultado obtenido:

matriz = [[1,1,1,1],
          [1,0,0,0],
          [0,1,0,1]]

ocupados:  7
primer encontado:  [1, 1]
>>> 

Instrucciones en Python

# 3Eva_IT2010_T2 Funciones ocupados y ubica libre en matriz
# resolver sin usar numpy
import numpy as np

def ocupados(matriz):
    suma = np.sum(matriz)
    return(suma)

def ubicalibre(matriz):
    matriz = np.array(matriz)
    tamano = np.shape(matriz)
    n = tamano[0]
    m = tamano[1]
    encontre = 0
    a = np.NaN
    b = np.NaN
    i = 0
    while i<n and encontre==0:
        j = 0
        while j<m and encontre ==0:
            if matriz[i,j] == 0:
                encontre = 1
                a = i
                b = j
            j = j+1
        i = i + 1
    return([a,b])

# PROGRAMA
matriz = [[1,1,1,1],
          [1,0,0,0],
          [0,1,0,1]]

# PROCEDIMIENTO
aforo = ocupados(matriz)
libre = ubicalibre(matriz)

# SALIDA
print("ocupados: ", aforo)
print('primer encontado: ',libre)

s3Eva_IIT2010_T1 Matriz con aleatorios no repetidos (desordena)

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

Propuesta de solución en Python:

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