Categoría: Sol_2Eva 2007-2008-2009

  • s2Eva_IIT2009_T3 Controlar saldos prepago

    Ejercicio: 2Eva_IIT2009_T3 Controlar saldos prepago

    Propuesta de solución en Python: py_pdf, también en versión matlab: m_pdf

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2009_T3 Controlar saldos prepago
    # Propuesta: edelros@espol.edu.ec
    # Registrar números de celular con listas
    
    celular  = []
    saldo    = []
    mensajes = []
    
    opcion = 0
    while not(opcion==4):
    
        print('1. Ingresar equipo')
        print('2. Recargar saldo')
        print('3. transferir saldo')
        print('4. Salir')
        opcion = int(input('cual opcion: '))
        
        if (opcion==1):
            print('INGRESAR equipo')
            numero = input('numero celular:')
            celular.append(numero)
            saldo.append(0)
            mensajes.append(0)
            m = len(saldo)-1
            texto = str(celular[m])+' '+str(saldo[m])
            texto = texto +' '+str(mensajes[m])
            print(texto)
    
        elif (opcion==2):
            print('RECARGAR')
            numero   = input('numero celular: ')
            cantidad = input('    cantidad: ')
    
            # Busca el numero de celular
            m = len(saldo)
            encontre = -1
            i = 0
            while (i<m and encontre==-1):
                if (celular[i]==numero):
                    encontre = i
                i = i + 1
                
            # si lo encuentra aumenta el saldo
            if (encontre>=0):
                saldo[encontre] = int(saldo[encontre]) + int(cantidad)
                print(encontre)
                texto = str(celular[encontre])+' '+str(saldo[encontre])
                texto = texto + ' ' + str(mensajes[encontre])
                print(texto)
            else:
                print('numero no registrado')
                
        elif (opcion==3):
            print('TRANSFERIR')
            donante  = input('numero donante : ')
            receptor = input('numero receptor: ')
            cantidad = input('       cantidad: ')
    
            # Busca el numero de celular donante
            m = len(saldo)
            encontreA = -1
            i = 0
            while (i<m and encontreA==-1):
                if (celular[i]==donante):
                    encontreA = i
                i = i + 1
            # Busca el numero de celular receptor
            m = len(saldo)
            encontreB = -1
            i = 0
            while (i<m and encontreB==-1):
                if (celular[i]==receptor):
                    encontreB = i
                i = i + 1
                
            #revisa condiciones para transferir
            condicion = encontreA>=0 and encontreB>=0 
            condicion = condicion and int(saldo[encontreA])>=int(cantidad)
            if condicion:
                saldo[encontreA] = int(saldo[encontreA])-int(cantidad)
                saldo[encontreB] = int(saldo[encontreB])+int(cantidad)
                print('saldo transferido: '+str(cantidad))
            else:
                if (encontreA==-1):
                    print('no existe registro de donante:')
                if (encontreB==-1):
                    print('no existe registro de receptor:')
            
        elif (opcion==4):
            print('Gracias por usar el software')
        else:
            print('opción no disponible..!')
    

    resultado del algoritmo

    1. Ingresar equipo
    2. Recargar saldo
    3. transferir saldo
    4. Salir
    cual opcion: 1
    INGRESAR equipo
    numero celular:987
    987 0 0
    1. Ingresar equipo
    2. Recargar saldo
    3. transferir saldo
    4. Salir
    cual opcion: 1
    INGRESAR equipo
    numero celular:876
    876 0 0
    1. Ingresar equipo
    2. Recargar saldo
    3. transferir saldo
    4. Salir
    cual opcion: 2
    RECARGAR
    numero celular: 987
        cantidad: 5
    0
    987 5 0
    1. Ingresar equipo
    2. Recargar saldo
    3. transferir saldo
    4. Salir
    cual opcion: 2
    RECARGAR
    numero celular: 876
        cantidad: 1
    1
    876 1 0
    1. Ingresar equipo
    2. Recargar saldo
    3. transferir saldo
    4. Salir
    cual opcion: 3
    TRANSFERIR
    numero donante : 987
    numero receptor: 876
           cantidad: 3
    saldo transferido: 3
    1. Ingresar equipo
    2. Recargar saldo
    3. transferir saldo
    4. Salir
    cual opcion: 4
    Gracias por usar el software
    >>> 
    

    ejercicios resueltos Python 2eva_iit2009_t3 pdf

    ejercicios resueltos Matlab 2eva_iit2009_t3 pdf

  • s2Eva_IIT2009_T2 Transponer una matriz

    Ejercicio: 2Eva_IIT2009_T2 Transponer una matriz

    Se recorre toda la matriz intercambiando las posiciones de fila y columna. Lo mas sencillo es crear una nueva matriz de ceros con las dimensiones intercambiadas de la matriz inicial.

    matriz = [[1,2,3],
              [4,5,6]]
    

    Al recorrer las casillas de la matriz inicial en cada posición [f,c], se copian los valores en cada [c,f] de la nueva matriz. El resultado debería presentarse como:

    [[1. 4.]
     [2. 5.]
     [3. 6.]]
    >>>

    Algoritmo en Python

    # 2Eva_IIT2009_T2 Transponer una matriz
    import numpy as np
    
    def transponer(matriz):
        matriz = np.array(matriz)
        tamano = np.shape(matriz)
        n = tamano[0] # filas
        m = tamano[1] # columnas
        matrizT = np.zeros(shape=(m,n),dtype=float)
        for i in range(0,n,1):
            for j in range(0,m,1):
                matrizT[j,i] = matriz[i,j]
        return (matrizT)
    
    # PROGRAMA EJEMPLO
    # INICIO
    matriz = [[1,2,3],
              [4,5,6]]
    
    # PROCEDIMIENTO
    matrizT = transponer(matriz)
    
    # SALIDA
    print(matrizT)
    

    Nota: En Numpy existe la instrucción np.transpose(matriz) que realiza la misma operación. En el ejercicio se evalúa su comprensión e implementación del algoritmo, no se considera que use las funciones de cada tópico de álgebra en Python.

  • s2Eva_IIT2009_T1 Mensaje a SMS

    Ejercicio: 2Eva_IIT2009_T1 Mensaje a SMS

    Propuesta de solución en Python:

    Ejemplo, solo para 'de'-'d':
    >>> mensaje='un estudiante de la espol que estudia'
    >>> txtsms(mensaje)
    'un estudiante d la espol que estudia'

    El nuevo mensaje se realiza copiando el mensaje letra por letra y analizando cada una para revisar si aplica la regla de sms.

    Para el ejemplo solo para la letra 'd', se revisa las letras anteriores y posteriores para estimar que se puede saltar la copia de la letra.

    mensajeSMS_01

    considere que para el análisis planteado i tiene que ser mayor que 1, sino se mostrará error al no tener suficientes letras previas

    >>> mensaje='de su mensaje sms'
    >>> txtsms(mensaje)
    'de su mensaje sms'
    

    implemente el caso presentado en el algoritmo presentado a continuación:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2009_T1 Mensaje a SMS
    # TAREA: completarotras opciones: que,se,lo
    
    def txtsms(mensaje):
        tm=len(mensaje)
        
        # inicializa variable de salida
        sms = ''
        i = 0
        while not(i>=(tm)):
            
            # si encuentra una 'd' se salta un espacio
            if (mensaje[i-1]=='d' and mensaje[i-2]==' '
                and mensaje[i+1]==' '):
                i = i + 1
                
            # copia un caracter
            sms = sms + mensaje[i]
            i = i + 1
            
        return(sms)
    
  • s2Eva_IT2009_T3 Mejores vendedores por categoría

    Ejercicio: 2Eva_IT2009_T3 Mejores vendedores por categoría

    Propuesta de solución en Python: py_pdf, también en versión matlab: m_pdf

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2009_T3 Mejores vendedores por categoría
    # Propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    # INGRESO
    n = int(input('cuantos vendedores: '))
    m = int(input('cuantos productos: '))
    
    ventas = np.zeros(shape=(n+1,m+1),dtype=int)
    precio = np.zeros(shape=(m+1),dtype=float)
    for f in range(1,n+1,1):
        for c in range(1,m+1,1):
            ventas[f,c] = int(input('ventas['+str(f)+','+str(c)+']: '))
    for pd in range(1,m+1,1):
        precio[pd] = float(input('Precio['+str(pd)+']: '))
    
    # PROCEDIMIENTO
    
    #categoria ventas
    unidades = np.zeros(shape=(n+1),dtype=int)
    for f in range(1,n+1,1):
        for c in range(1,m+1,1):
            unidades[f] = unidades[f]+ventas[f,c]
    mventas = 1
    for f in range(1,n+1,1):
        if unidades[f]>unidades[mventas]:
            mventas = f
    
    # categoria montos
    monto = np.zeros(shape=(n+1),dtype=float)
    for f in range(1,n+1,1):
        for c in range(1,m+1,1):
            monto[f] = monto[f] + ventas[f,c]*precio
    mmonto = 1
    for f in range(2,n+1,1):
        if monto[f]>monto[mmonto]:
            mmonto = f
    
    # SALIDA
    print('Mejor vendedor/unidades', mventas)
    print('Mejor vendedor/monto', mmonto)
    

    ejercicios resueltos Python 2eva_it2009_t3 pdf

    ejercicios resueltos Matlab 2eva_it2009_t3 pdf

  • s2Eva_IIT2008_T3 Crear un Calendario

    Ejercicio: 2Eva_IIT2008_T3 Crear un Calendario

    Propuesta de solución en Python: py_pdf, también en versión matlab: m_pdf

    Solución presentada junto a video de concepto:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2008_T3 Crear un Calendario
    # Propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    dprimer = int(input('¿día de inicio del mes?: '))
    diasmes = int(input('¿días del mes?: '))
    
    # El calendario vacío al inicio
    calendario = np.zeros(shape=(6,7), dtype=int)
    c = dprimer - 1
    f = 0
    dia = 1
    while (f<=5 and dia<=diasmes):
        while (c<=6 and dia<=diasmes):
            calendario[f,c] = dia
            dia = dia + 1
            c = c + 1
        f = f + 1
        c = 0
    
    print('   D  L  M  M  J  V  S')
    print(calendario)
    # Tarea: Validar primer día del mes entre 1 y 7, 
    #    y número de días del mes entre 28 y 31
    

    resultado del algoritmo

    ¿día de inicio del mes?: 4
    ¿días del mes?: 31
       D  L  M  M  J  V  S
    [[ 0  0  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  0]
     [ 0  0  0  0  0  0  0]]
    >>> 
    

    ejercicios resueltos Python 2eva_iit2008_t3 pdf

    ejercicios resueltos Matlab 2eva_iit2008_t3 pdf

  • s2Eva_IIT2008_T2 Etiquetar a robots (R2D2)

    Ejercicio: 2Eva_IIT2008_T2 Etiquetar a robots (R2D2)

    Propuesta de solución en Python: py_pdf, también en versión matlab: m_pdf

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2008_T2 Etiquetar a robots (R2D2)
    # Propuesta: edelros@espol.edu.ec
    
    import random as rnd
    
    def nrobot(n):
        # Referencias para seleccionar simbolos
        letra='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        numero='0123456789'
    
        nletras  = len(letra)
        mnumeros = len(numero)
    
        # formar cadena
        z = ''
        i = 1
        letravocal = 1
        while (i<=n):
            if letravocal==1:
                a = int(rnd.random()*nletras)
                z = z + letra[a]
                letravocal = 0
            else:
                a = int(rnd.random()*mnumeros)
                z = z + numero[a]
                letravocal = 1
            i = i + 1
            
        return (z)
    

    resultado del algoritmo

    >>> nrobot(4)
    'V2F6'
    >>> nrobot(4)
    'F9U3'
    >>> nrobot(4)
    'P9L8'
    >>> nrobot(4)
    'L1K0'
    >>> nrobot(4)
    'J1J4'
    >>> 
    

    ejercicios resueltos Python 2eva_iit2008_t2 pdf

    ejercicios resueltos Matlab 2eva_iit2008_t2 pdf

  • s2Eva_IIT2008_T1 Carrera de caracoles

    Ejercicio: 2Eva_IIT2008_T1 Carrera de caracoles
    Propuesta de solución en Python para dos caracoles A y B:

    Cada caracol inicia en el punto de partida

    A = 0 
    B = 0 
    t = 0

    El movimiento de cada caracol se simula con un número aleatorio.

    mueveA = int(rnd.random()*5)-1
    A = A + mueveA
    

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2008_T1 Carrera de caracoles
    # solo dos caracoles
    
    import random  as rnd
    
    # INGRESO
    meta = int(input('meta maxima: '))
    
    # PROCEDIMIENTO
    A = 0
    B = 0
    t = 0
    while (A<meta and B<meta):
        mueveA = int(rnd.random()*5)-1
        A = A + mueveA
        
        mueveB = int(rnd.random()*5)-1
        B = B + mueveB
        
        t = t + 1
    
    gana = 0
    if (A>B):
        gana = 1
    if (B>A):
        gana = 2
        
    # SALIDA
    print('ganó el caracol: ',gana)
    print('tiempo transcurrido: ', t)
    

    Resultado del algoritmo

    meta maxima: 50
    ganó el caracol:  2
    tiempo transcurrido:  38
    >>> 
    meta maxima: 50
    ganó el caracol:  1
    tiempo transcurrido:  39
    >>> 
    

    Algoritmo en Python

    Carrera para n caracoles use un vector e indices entre 1 y n

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2008_T1 Carrera de caracoles
    import random  as rnd
    import numpy as np
    
    # INGRESO
    meta = int(input('meta maxima: '))
    n = int(input('cuantos jugadores: '))
    
    # PROCEDIMIENTO
    # no se usa la posicion 0, caracoles entre[1,n]
    posicion = np.zeros(n+1, dtype = int)
    
    t    = 0
    gana = 0
    while not(gana>0):
        
        jugador = 0
        while not(jugador>=n):
    
            mueve = int(rnd.random()*5)-1
            posicion[jugador] = posicion[jugador] + mueve
            
            if (posicion[jugador]>meta):
                gana = jugador
    
            jugador = jugador +1
        
        t = t + 1
    
    # SALIDA
    print('posiciones finales:')
    print(posicion)
    print('ganó el caracol: ',gana)
    print('tiempo transcurrido: ', t)
    
    

    resultado de algoritmo

    meta maxima: 50
    cuantos jugadores: 5
    posiciones finales:
    [38 44 44 32 51  0]
    ganó el caracol:  4
    tiempo transcurrido:  39
    >>> 
    meta maxima: 50
    cuantos jugadores: 5
    posiciones finales:
    [46 52 42 33 35  0]
    ganó el caracol:  1
    tiempo transcurrido:  36
    >>> 
    
  • s2Eva_IT2008_T2 Validar cédula ecuatoriana

    Ejercicio: 2Eva_IT2008_T2 Validar cédula ecuatoriana

    Propuesta de solución en Python: py_pdf, también en versión matlab: m_pdf

    Resultado del algoritmo

    >>> vcedula('0909407173')
    1
    >>> vcedula('0909407174')
    0
    >>> 
    

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2008_T2 Validar cédula ecuatoriana
    # Propuesta de solución: edelros@espol.edu.ec
    
    def vcedula(texto):
        # sin ceros a la izquierda
        nocero = texto.strip("0")
        
        cedula = int(nocero,0)
        verificador = cedula%10
        numero = cedula//10
        
        # mientras tenga números
        suma = 0
        while (numero > 0):
            
            # posición impar
            posimpar = numero%10
            numero   = numero//10
            posimpar = 2*posimpar
            if (posimpar  > 9):
                posimpar = posimpar-9
            
            # posición par
            pospar = numero%10
            numero = numero//10
            
            suma = suma + posimpar + pospar
        
        decenasup = suma//10 + 1
        calculado = decenasup*10 - suma
        if (calculado  >= 10):
            calculado = calculado - 10
    
        if (calculado == verificador):
            validado = 1
        else:
            validado = 0
            
        return (validado)
    

    ejercicios resueltos Python 2eva_it2008_t2 pdf

    ejercicios resueltos Matlab 2eva_it2008_t2 pdf

  • s2Eva_IIT2007_T4 Fibonacci recursiva

    Ejercicio: 2Eva_IIT2007_T4 Fibonacci recursiva

    Propuesta de solución en Python: py_pdf, también en versión matlab : m_pdf

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2007_T4 Fibonacci recursiva
    # Propuesta: edelros@espol.edu.ec
    
    def fibo(i):
        if (i==1) or (i==2):
            z = 1
        if i>2:
            z = fibo(i-1)+fibo(i-2)
        return (z)
    
    # PROGRAMA
    
    # INGRESO
    m = int(input('valor acumulado?:'))
    
    # PROCEDIMIENTO
    s = 0
    i = 1
    while (s<=m):
        s = s + fibo(i)
        i = i + 1
    
    # SALIDA
    print('total de terminos:', i)
    print('total acumulado:', s)
    

    resultado del algoritmo

    valor acumulado?:50
    total de terminos: 9
    total acumulado: 54
    >>> 
    valor acumulado?:60
    total de terminos: 10
    total acumulado: 88
    >>> 
    

    ejercicios resueltos Python 2eva_iit2007_t4 pdf

    ejercicios resueltos Matlab 2eva_iit2007_t4 pdf

  • s2Eva_IIT2007_T2 Juego de memotest

    Ejercicio: 2Eva_IIT2007_T2 Juego de memotest

    Video Tutorial:

    Algoritmo en Python

    # 2Eva_IIT2007_T2 Juego de memotest
    # propuesta: edelros@espol.edu.ec
    import numpy as np
    import random as rnd
    
    def tableroparejas(n):
        fichasunicas = (n*n)//2
        tablero = np.zeros(shape=(n,n),dtype =int)
    
        i = 1
        while i<=fichasunicas:
            f1 = int(rnd.random()*n)+0
            c1 = int(rnd.random()*n)+0
            while not(tablero[f1,c1]==0):
                f1 = int(rnd.random()*n)+0
                c1 = int(rnd.random()*n)+0
            tablero[f1,c1] = i
            f2 = int(rnd.random()*n)+0
            c2 = int(rnd.random()*n)+0
            while not(tablero[f2,c2]==0):
                f2 = int(rnd.random()*n)+0
                c2 = int(rnd.random()*n)+0
            tablero[f2,c2] = i
            i = i + 1
        return(tablero)
    
    # PROGRAMA
    # INGRESO
    n = 4
    
    # PROCEDIMIENTO
    tablero = tableroparejas(n)
    descubiertas = np.zeros(shape=(n,n),dtype=int)
    equivocado = 0
    encontrado = 0
    while (equivocado<3 and encontrado<(n*n)):
        
        print('estado del juego:')
        print(descubiertas)
    
        f1 = int(input('fila ficha1:'))
        c1 = int(input('columna ficha1:'))
        while not(descubiertas[f1,c1]==0):
            f1 = int(input('fila ficha1:'))
            c1 = int(input('columna ficha1:'))
    
        f2 = int(input('fila ficha2:'))
        c2 = int(input('columna ficha2:'))
        while not(descubiertas[f2,c2]==0):
            f2 = int(input('fila ficha2:'))
            c2 = int(input('columna ficha2:'))
    
        ficha1 = tablero[f1,c1]
        ficha2 = tablero[f2,c2]
    
        if ficha1==ficha2:
            descubiertas[f1,c1] = ficha1
            descubiertas[f2,c2] = ficha2
            encontrado = encontrado + 2
            print('ENCONTRO una pareja..!',ficha1,ficha2)
        else:
            equivocado = equivocado + 1
            print('Las fichas son diferentes: ',ficha1,ficha2)
    
    # SALIDA
    print('Solucion del tablero:')
    print(tablero)
    print('Estado del juego:')
    print(descubiertas)
    if encontrado==(n*n):
        print(' Muy bien..!! todas las fichas encontradas')
    else:
        print('Perdió... se equivoco el máximo de veces...')
        print('fichas descubiertas:', encontrado)
    

    Tarea: Revisar que las coordenadas ingresadas por el jugador se encuentren dentro del tablero.

    Resultado del Algoritmo

    estado del juego:
    [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]
    fila ficha1:0
    columna ficha1:0
    fila ficha2:1
    columna ficha2:1
    Las fichas son diferentes:  4 1
    estado del juego:
    [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]
    fila ficha1:0
    columna ficha1:0
    fila ficha2:2
    columna ficha2:2
    Las fichas son diferentes:  4 6
    estado del juego:
    [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]
    fila ficha1:0
    columna ficha1:0
    fila ficha2:3
    columna ficha2:3
    Las fichas son diferentes:  4 2
    Solucion del tablero:
    [[4 8 3 4]
     [3 1 1 5]
     [6 7 6 7]
     [5 2 8 2]]
    Estado del juego:
    [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]
    Perdió... se equivoco el máximo de veces...
    fichas descubiertas: 0
    >>> 
    

    Algoritmo realizado en diagrama de flujo, Archivo matlab en pdf

     

    ejercicios resueltos Matlab 2eva_iit2007_t2 pdf