Etiqueta: ejercicios resueltos python

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

    Algoritmo 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ó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_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
    ...
    

    Algoritmo 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'
    >>> 
    

    Algoritmo 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_T2 Registrar gastos en viaje por automóvil

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

    Algoritmo 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
    

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

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

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2010_T3 Rompecabezas, desordena y ubica
    # 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

    Algoritmo en Python

    # 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_IIT2010_T1 Matriz con aleatorios no repetidos (desordena)

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

    Algoritmo en Python

    Propuesta de solución:

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

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