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

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_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_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_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_IT2010_T1 Ecuación Verhulst

Ejercicio: 3Eva_IT2010_T1 Ecuación Verhulst

Para probar el ejercico se usa po=1, a=0.5 b=0.02 y tiempo maximo = 40

con el algoritmo se puede observar:

poblacion inicial p0:1
factor a:0.5
factor b:0.02
calcular en t:40
tiempo:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
pi:
[1.0, 1.6070209244539886, 2.5434661610272977, 3.9338336459524355, 5.885057578381894, 8.417395145518748, 11.39009430586252, 14.494961881174662, 17.366232541771218, 19.73763290519436, 21.51998720327935, 22.766959376324014, 23.596257413785583, 24.129351687331045, 24.464588393188883, 24.67249666532522, 24.80032998711217, 24.878512232622807, 24.92617278160938, 24.95516943765841, 24.972789690449925, 24.983489042065916, 24.98998299475044, 24.99392342119231, 24.996314016127226, 24.99776420806526, 24.998643875922703, 24.999177451612496, 24.999501092725076, 24.99969739506529, 24.999816459955184, 24.999888677013956, 24.999932479077533, 24.999959046446833, 24.999975160398368, 24.999984934014144, 24.999990862015494, 24.99999445753143, 24.99999663832259, 24.999997961039472, 24.99999876330789]
>>>

que produce la siguiente gráfica

Instrucciones en Python

# 3Eva_IT2010_T1 Ecuación Verhulst
import numpy as np
import matplotlib.pyplot as plt

def f_logistica(p0,a,b,t):
    numerador = a*p0
    denominador = b*p0+(a-b*p0)*np.exp(-a*t)
    p = numerador/denominador
    return(p)

# PROGRAMA ------
# INGRESO
p0 = float(input("poblacion inicial p0:"))
a  = float(input("factor a:"))
b  = float(input("factor b:"))
t  = float(input("calcular en t:"))

# PROCEDIMIENTO
ti = []
pi = []
i = 0
while i<=t:
    pi.append(f_logistica(p0,a,b,i))
    ti.append(i)
    i = i + 1

# SALIDA
np.set_printoptions(precision=3)
print('tiempo:')
print(ti)
print('pi:')
print(pi)

# grafica
plt.plot(ti,pi)
plt.xlabel('ti')
plt.ylabel('pi')
plt.title('ecuacion logística')
plt.show()

Tarea, estimar el tiempo t cuando la población se duplica

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_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_IIT2012_T1 Alfabeto radiofónico con Python

Ejercicio: 3Eva_IIT2012_T1 Alfabeto radiofónico

Para el ejercicio de alfabeto radiofónico en Python, se presenta una propuesta de ejercicio resuelto que parte del algoritmo de búsqueda en un vector.

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

# 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ónica.
#      mejorar la función usando la tabla radiofónico.

def coderadio(palabra,radiofonico):

    # analizar secuencia
    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 de otra forma,
    # Tarea, considerar que envian 
      una palabra equivocada

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

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