Categoría: Solución 2da Evaluación

  • 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

  • s2Eva_IT2007_T1 Funciones par e impar recursivas

    Ejercicio: 2Eva_IT2007_T1 Funciones par e impar recursivas

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

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2007_T1 Funciones par e impar
    # Propuesta: edelros@espol.edu.ec
    
    import random as rnd
    
    def impar(n):
        if (n==0):
            z = 0
        if (n>0):
            z = par(n-1)
        return (z)
    
    def par(n):
        if (n==0):
            z = 1
        if (n>0):
            z = impar(n-1)
        return (z)
    
    
    # PROGRAMA Par/Impar Recursiva
    
    # INGRESO
    n = int(input('cuantos números?: '))
    
    # PROCEDIMIENTO
    c = 0
    i = 1
    while not(i>n):
        a = int(rnd.random()*41)+10
        r = par(a)
        if (r==1):
            c = c + 1
        i = i + 1
    if c>(n/2):
        z = 1
    else:
        z = 0
    
    # salida
    print(' El resultado de mayoría pares es: ')
    print(z)
    

    resultado del algoritmo

    cuantos números?: 100
     El resultado de mayoría pares es: 
    1
    >>> 
    cuantos números?: 100
     El resultado de mayoría pares es: 
    0
    >>> 
    

    ejercicios resueltos Python 2eva_it2007_t1 pdf

    ejercicios resueltos Matlab 2eva_it2007_t1 pdf

  • s2Eva_IT2013_T2 Una Tabla de Bingo con arreglos

    Ejercicio: 2Eva_IT2013_T2 Una Tabla de Bingo con arreglos

    2Eva_IT2013_T1 Función sorteoentre(k,a,b)

    Propuesta de solución en Python, continua desde tema 1:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # propuesta: edelros@espol.edu.ec
    
    # 2Eva_IT2013_T1 Una Tabla de Bingo
    import random as rnd
    import numpy as np
    
    def sorteoentre(k,a,b):
        suertudos = []
        i = 0
        while not(i>=k):
            sorteo = int(rnd.random()*(b-a+1))+a
            if not(sorteo in suertudos):
                suertudos.append(sorteo)
                i = i+1
        return(suertudos)
    
    # 2Eva_IT2013_T2 Una Tabla de Bingo
    n = 5
    #Rango inicial de B [1,15]
    a = 1  
    b = 15
    incremento = 15
    
    # PROCEDIMIENTO
    tabla = np.zeros(shape=(n,n),dtype=int)
    columna = 0
    while not(columna>=n):
        datos = sorteoentre(n,a,b)
        for fila in range(0,n,1):
            tabla[fila,columna]=datos[fila]
        a = a + incremento
        b = b + incremento
        columna = columna + 1
        
    # corrige el cero en la posicion central
    mitad = n//2
    tabla[mitad,mitad] = 0
    
    # SALIDA
    print(tabla)
    

    Ejemplo:

    >>> ================================ RESTART ==========
    >>> 
    [[ 4 28 37 51 63]
     [15 18 45 56 74]
     [13 23  0 48 69]
     [ 2 20 34 58 72]
     [ 3 16 32 50 71]]
    >>> ================================ RESTART ==========
    >>> 
    [[ 2 17 37 58 75]
     [13 24 45 53 65]
     [ 7 19  0 51 73]
     [15 23 36 52 69]
     [ 3 30 39 47 67]]
    >>>