Etiqueta: ejercicios resueltos python

  • s3Eva_IT2000_T2 Matriz: puntos por goles en campeonato

    Ejercicio: 3Eva_IT2000_T2 Matriz: puntos por goles en campeonato

    Desarrollado en Python a partir el ejercicio 3Eva_IT2002_T1 Triunfos, empates y derrotas por Golesf

    goles=np.array([[0, 3, 1, 2, 1],
                    [1, 0, 3, 2, 3],
                    [0, 2, 0, 1, 1],
                    [1, 0, 2, 0, 1],
                    [3, 4, 1, 2, 0]])
    

    complementando la solución del ejercicio de triunfos empates y derrotas se obtiene para los datos ingresados:

     triunfos por equipo: 
    [3 2 0 1 3]
     empates por equipo:
    [0 0 1 0 1]
     derrotas por equipo:
    [1 2 3 3 0]
    puntos por equipo:
    [ 9  6  1  3 10]
    >>> 
    

    Algoritmo en Python

    # 3Eva_IT2000_T2 Matriz: puntos por goles en campeonato
    import numpy as np
    
    # INGRESO
    goles=np.array([[0, 3, 1, 2, 1],
                    [1, 0, 3, 2, 3],
                    [0, 2, 0, 1, 1],
                    [1, 0, 2, 0, 1],
                    [3, 4, 1, 2, 0]])
    
    # PROCEDIMIENTO
    tamano = np.shape(goles)
    n = tamano[0]
    m = tamano[1]
    triunfos = np.zeros(shape=(n,m),dtype=int)
    ttriunfos = np.zeros(n,dtype=int)
    # calcular los triunfos
    i = 0
    while not(i>=n):
        j = 0
        while not(j>=m):
            if (goles[i,j] > goles[j,i]):
                triunfos[i,j] = 1
                triunfos[j,i] = 0
            j = j + 1
        i = i + 1
    # calcular total de triunfos
    i = 0
    while not(i>=n):
        j = 0
        while not(j>=m):
            ttriunfos[i] = ttriunfos[i] + triunfos[i,j]
            j = j + 1
        i = i + 1
    
    # calcular empates
    empates = np.zeros(shape=(n,m),dtype=int)
    tempates = np.zeros(n,dtype=int)
    i = 0
    while not(i>=n):
        j = 0
        while not(j>=m):
            if (goles[i,j] == goles[j,i]) and (i!=j):
                empates[i,j] = 1
                empates[j,i] = 1
            j = j + 1
        i = i + 1
    # calcular total de empates
    i = 0
    while not(i>=n):
        j = 0
        while not(j>=m):
            tempates[i] = tempates[i] + empates[i,j]
            j = j + 1
        i = i + 1
    
    # Derrotas
    derrotas = (n-1)*np.ones(n,dtype=int)
    derrotas = derrotas - ttriunfos - tempates
    
    # puntos totales
    puntos_triunfos = ttriunfos*3
    puntos_empates  = tempates*1
    puntos = puntos_triunfos+puntos_empates 
    
    # SALIDA
    print(triunfos)
    print(' triunfos por equipo: ')
    print(ttriunfos)
    print(' empates por equipo:')
    print(tempates)
    print(' derrotas por equipo:')
    print(derrotas)
    print('puntos por equipo:')
    print(puntos)
    
  • s3Eva_IT2000_T1 Validar caracteres tipo numérico

    Ejercicio: 3Eva_IT2000_T1 Validar caracteres tipo numérico

    Resultado esperado realizando la función de usuario

    >>> esnumero('a')
    'no es numerico'
    >>> esnumero('1')
    True
    >>> esnumero('15')
    'varios caracteres'
    >>> 
    
    >>> tresdigitos('12a')
    0
    >>> tresdigitos('123')
    1
    

    Algoritmo en Python

    # 3Eva_IT2000_T1 Validar caracteres tipo numérico
    
    def esnumero(caracter):
        numeros = ['0','1','2','3','4','5','6','7','8','9']
        n = len(caracter)
        if n == 1:
            esnumerico = 'no es numerico'
            enlista = caracter in numeros
            if enlista ==1:
                esnumerico = enlista
        else:
            esnumerico = 'varios caracteres'
        return(esnumerico)
    
    def tresdigitos(cadena):
        n = len(cadena)
        revisa = 0
        for i in range(0,n,1):
            if esnumero(cadena[i])==1:
                revisa =  revisa + 1
        sontres= 0
        if revisa ==3 and n==3:
            sontres = 1
        return(sontres)
    
  • s2Eva_IIT2012_T2 Cifrado César

    Ejercicio: 2Eva_IIT2012_T2 Cifrado César

    El ejercicio se desarrolla primero con el ejemplo del enunciado, con mensaje='HOLA' y llave='3'.

    Luego de resuelto el ejemplo se incorporan las situaciones de desplazamientos de posiciones en los extremos y la forma de función del algoritmo.

    Ejemplo de ejecución del algoritmo

    >>> cifradocesar('hola',3)
    'KROD'
    >>> cifradocesar('HoLa',3)
    'KROD'
    >>>

    Algoritmo en Python

    # 2Eva_IIT2012_T2 Cifrado César
    # propuesta: edelros@espol.edu.ec
    
    ### INGRESO
    ##mensaje = input('mensaje: ')
    ##llave   = int(input('llave: '))
    
    # PROCEDIMIENTO
    def cifradocesar(mensaje,llave):
        alfabeto = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        m = len(alfabeto)
    
        # mensaje en mayusculas
        mensaje = mensaje.upper()
        t = len(mensaje)
    
        # crear resultado desde primera letra
        resultado = ''
        i = 0
        while i<t:
            
            letra = mensaje[i]
            # buscar letra en alfabeto
            encontre = -1
            j = 0
            while j<m and encontre<0:
                if letra==alfabeto[j]:
                    encontre = j
                j = j + 1
                
            # cifrado Cesar
            nueva = encontre + llave
            if nueva>m:
                nueva = nueva - m
            if nueva<0:
                nueva = nueva + m
            cifrado = alfabeto[nueva]
            resultado = resultado + cifrado
            i = i + 1
        return(resultado)
    
    ### SALIDA
    ##print('cifrado César: ',resultado)
    

    Tarea: En el caso que el mensaje tiene un caracter espacio ' ' o ',' es decir un caracter que no está en el alfabeto, éste no se reemplaza. De no implementarse se muestra un error en la codificación, mostrado en rojo en el ejemplo.

    >>> cifradocesar('hola,hola',3)
    'KRODCKROD'
    >>> 
    

    Propuesta de solución en Python y también en versión matlab:

    ejercicios resueltos Python 2eva_iit2012_t2 pdf

    ejercicios resueltos Matlab 2eva_iit2012_t2 pdf

  • s2Eva_IIT2012_T1 Recursiva Multi

    Ejercicio: 2Eva_IIT2012_T1 Recursiva Multi

    Resultado esperado

    >>> multi(3,5)
    15
    >>> multi(7,8)
    56
    >>> 
    

    Algoritmo en Python

    # 2Eva_IIT2012_T1 Recursiva Multi
    
    def multi(p,q):
        if q == 0:
            z = 0
        if q>0 :
            z = p + multi(p,q-1)
        return(z)
    
  • s2Eva_IT2012_T2 Número de tecla en cifrado musical con Python

    Ejercicio: 2Eva_IT2012_T2 Tecla de cifrado musical americano

    explicación en video

    Algoritmo en Python

    Propuesta de solución en Python:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2012_T2 Tecla de cifrado musical americano
    # Tarea: implementar sostenido '#'
    #        validar que # aplica
    
    def teclanum(cancion):
        n = len(cancion)
        teclado = ' C#D#EF#G#A#B'
        secuencia = '' 
        i = 0
        while not(i>=n):
            tecla = cancion[i]
            if (tecla!='#'):
                cual = teclado.find(tecla)
                sigue = ''
                if (i<(n-1)):
                    sigue = cancion[i+1]
                if (sigue=='#'):
                    cual = cual+1
                secuencia = secuencia + str(cual) + ' '
            i = i + 1
        return(secuencia)
    
    # Programa de prueba
    cancion = 'EFGGFEDCCDEED'
    numeros = teclanum(cancion)
    print(numeros)
    
  • s2Eva_IIT2011_T4 Inscripción universitaria SNNA

    Ejercicio: 2Eva_IIT2011_T4 Inscripción universitaria SNNA

    Propuesta de solución en Python

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2011_T4 Inscripción universitaria SNNA
    # propuesta: edelros@espol.edu.ec
    import numpy as np
    
    codprovincia = ['Guayas','Manabi']
    
    opcion = '0'
    postulante = []
    while not(opcion=='7'):
        print('1. Registrar Postulante')
        print('2. Grabar archivo de datos')
        print('3. Abrir archivo de datos')
        print('4. Consulta Día de prueba')
        print('5. Postulantes por provincia')
        print('6. Postulantes por carrera')
        print('7. Salir')
    
        opcion = input('opcion: ')
    
        if opcion=='1':
            print('  -- 1. Registrar Postulante')
            cedu = input('cédula: ')
            nomb = input('nombre: ')
            naci = int(input('año nacimiento: '))
            while not(naci>1950):
                print('Su año de nacimiento debe ser >1950')
                naci = int(input('año nacimiento: '))
            prov = input('provincia: ')
            carr = input('carrera: ')
    
            registro = {'cedula':cedu,
                        'nombre':nomb,
                        'nacimiento':naci,
                        'provincia':prov,
                        'carrera':carr}
            postulante.append(registro)
    
            print(postulante)
            
        if opcion=='2':
            print('  -- 2. Grabar archivo de datos')
            narchivo = input('nombre del archivo: ')
            narchivo = narchivo + '.txt'
    
            archivo = open(narchivo,'w')
            n = len(postulante)
            fila = 0
            while not(fila>=n):
                cedu = postulante[fila]['cedula']
                nomb = postulante[fila]['nombre']
                naci = postulante[fila]['nacimiento']
                prov = postulante[fila]['provincia']
                carr = postulante[fila]['carrera']
                linea = cedu+','+nomb+','+str(naci)
                linea = linea +','+prov+','+carr+'\n'
                archivo.write(linea)
                fila = fila +1
                
            archivo.close()
    
        if opcion=='3':
            print('  -- 3. Abrir archivo de datos')
            narchivo = input('nombre del archivo: ')
            narchivo = narchivo + '.txt'
    
            postulante = []
            archivo = open(narchivo,'r')
            linea = archivo.readline()
            while not(linea==''):
                linea  = linea.strip('\n')
                partes = linea.split(',')
                cedu = partes[0]
                nomb = partes[1]
                naci = partes[2]
                prov = partes[3]
                carr = partes[4]
                registro = {'cedula':cedu,
                            'nombre':nomb,
                            'nacimiento':naci,
                            'provincia':prov,
                            'carrera':carr}
                postulante.append(registro) 
                linea = archivo.readline()
            archivo.close()
            n = len(postulante)
            print('registros leidos: ',n)
    
        if opcion=='4':
            print('  -- 4. Consulta Día de prueba')
            cedu = input('cedula: ')
            diaprueba ='No hay dia para ese digito\n'
            n = len(cedu)
            digito = cedu[n-2]
            if (digito =='1' or digito=='2'):
                diaprueba = 'LUNES'
            if (digito =='3' or digito=='4'):
                diaprueba = 'MARTES'
    
            print('el dia de su prueba es: ')
            print(digito,diaprueba)
    
        if opcion == '5':
            print('cuenta postulantes por provincia')
            n = len(postulante)
            m = len(codprovincia)
            contadores = np.zeros(m,dtype=int)
            i = 0
            while not(i>=n):
                origen = postulante[i]['provincia']
                indice = codprovincia.index(origen)
                contadores[indice] = contadores[indice]+1 
                i = i+1
    
            print(contadores)
    
        if opcion=='7':
            print('gracias, @espol.edu.ec')
    
  • s2Eva_IIT2011_T2 Ubicar ficha en tablero

    Ejercicio: 2Eva_IIT2011_T2 Ubicar ficha en tablero

    Resultado obtenido

    >>> ubicaficha(6,8)
    array([[0, 0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0, 0],
           [0, 0, 5, 0, 3, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 7, 0, 4, 0],
           [0, 0, 0, 0, 0, 0, 0, 0],
           [0, 0, 6, 0, 0, 0, 0, 0],
           [0, 0, 2, 0, 0, 0, 0, 0]])
    >>> 
    

    Algoritmo en Python

    # 2Eva_IIT2011_T2 Ubicar ficha en tablero
    import numpy as np
    import random as rnd
    
    def ubicaficha(m,n):
        campo = np.zeros(shape=(n,n),dtype=int)
        
        bomba = 2
        while not(bomba>m+1):
            fila = int(rnd.random()*n)+0
            columna = int(rnd.random()*n)+0
            
            if (campo[fila,columna] == 0):
                campo[fila,columna] = bomba
                bomba = bomba + 1
                
        return(campo)
    
  • s2Eva_IIT2011_T1 Algoritmo de Euclides MCD

    Ejercicio: 2Eva_IIT2011_T1 Algoritmo de Euclides MCD

    El resultado esperado para una prueba de escritorio es:

    >>> mcd_euclides(15,6)
    a:  15 b:  6 residuo: 3
    a:  6 b:  3 residuo: 0
    3
    >>> mcd_euclides(72,16)
    a:  72 b:  16 residuo: 8
    a:  16 b:  8 residuo: 0
    8
    >>> 
    

    Algoritmo en Python

    # 2Eva_IIT2011_T1 Algoritmo de Euclides MCD
    
    def mcd_euclides(x,y):
        b = min([x,y])
        a = max([x,y])
        if b==0:
            mcd = a
        else:
            residuo = a%b
            print('a: ',a,'b: ',b,'residuo:',residuo)
            mcd = mcd_euclides(b,residuo)
            
        return(mcd)
    
  • s2Eva_IT2011_T4 Números Romanos a Decimal

    Ejercicio: 2Eva_IT2011_T4 Números Romanos a decimal

    Par convertir un número decimal a un número romano, se usa equivalencias entre la cadena “romano” y la lista “decimal”, ambas son del mismo tamaño para tener una relación uno a uno.

    romano  = 'IVXLCDM'
    decimal = [1,5,10,50,100,500,1000]

    Por ejemplo "X" de número romano tiene índice 2 en la cadena "romano", con el índice se busca el equivalente en la lista "decimal" y se obtiene el valor de 10. Ase de traduce cada letra del número romano y se almacena en una nueva lista de resultado, denominada "equivale".

    Ejemplos:
    Romano: CLXIII C L X I I I
    Decimal: 163 +100 +50 +10 +1 +1 +1
    Romano: CXLIX C X L I X
    Decimal: 149 +100 -10 +50 -1 +10

    Antes de acumular los valores de equivale, se revisa cada valor de decimal, si el valor posterior a cada posición o índice resulta que es mayor, la operación es de tipo resta.

    Finalmente, con los signos incluidos, se acumulan los valores de la lista de equivalentes para mostrar el valor en decimal.

    Tarea: Implementar la tercera regla, que no se repita una letra más de tres veces.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2011_T4 Números Romanos a Decimal
    # propuesta: edelros@espol.edu.ec
    
    # INGRESO
    cadena = input('numero en romano: ')
    
    # PROCEDIMIENTO
    romano  = 'IVXLCDM'
    decimal = [1,5,10,50,100,500,1000]
    cadena  = cadena.upper()
    n = len(cadena)
    
    #cambia a equivalentes decimales
    equivale = []
    i = 0
    while (i<n):
    
        #busca en romano
        j = 0
        while (j<7):
            if (cadena[i]==romano[j]):
                equivale.append(decimal[j])
            j = j + 1
        i = i + 1
        
    #Revisa signos y acumula
    suma = 0
    i = 0
    while (i<(n-1)):
        if (equivale[i]<equivale[i+1]):
            equivale[i] = -equivale[i]
        suma = suma + equivale[i]
        i = i + 1
    suma = suma + equivale[n-1]
    
    print(suma)
    

    ejercicios resueltos Python 2eva_it2011_t4 pdf

    ejercicios resueltos Matlab 2eva_it2011_t4 pdf

  • s2Eva_IIT2010_T3 Validar registro de revocatoria en CNE

    Ejercicio: 2Eva_IIT2010_T3 Validar registro de revocatoria en CNE

    propuesta de solución en Python, contiene tarea.

    Ejemplo:

    cuantos ciudadanos en padrón: 5
    cédula : 3
    cédula : 2
    cédula : 1
    cédula : 4
    cédula : 5
    cuantos se quejan: 3
    cedula: 2
    cedula: 2
    cedula: 3
    los que si votan son: 2
    [2 3]
    >>> 
    

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2010_T3 Validar registro de revocatoria en CNE
    # Tema 2. Mostrar valores únicos en vector
    # Tema 3. Validar registro de revocatoria en CNE
    
    import numpy as np
    
    def unicos(vector):
        n = len(vector)
        vale = np.ones(n, dtype= int)
        i = 0
        while not(i>=(n-1)): #penultimo
            j = i + 1
            while not(j>=n): # ultimo
                if (vector[i] == vector[j]):
                    vale[j] = 0
                j = j + 1
            i = i + 1
    
        # obtiene los únicos
        sinrepetir =[]
        i = 0
        while not(i>=n):
            if (vale[i] == 1):
                sinrepetir.append(vector[i])
            i= i+1
        sinrepetir = np.array(sinrepetir)
        return(sinrepetir)
    
    def registrados(padron,unicos):
        n = len(padron)
        m = len(unicos)
    
        vale = np.ones(m,dtype=int)
        sivotan = []
        i = 0
        while not(i>=m):
            if not(unicos[i] in padron):
                vale[i] = 0
            if (unicos[i] in padron):
                sivotan.append(unicos[i])
            i = i+1
        sivotan = np.array(sivotan)
        return(sivotan)
    
    # PROGRAMA QUE USA LAS FUNCIONES
    
    # INGRESO
    n = int(input('cuantos ciudadanos en padrón: '))
    padron = []
    i = 0
    while not(i>=n):
        cedula = int(input('cédula : '))
        padron.append(cedula)
        i = i + 1
    
    m = int(input('cuantos se quejan: '))
    sequejan =[]
    j = 0
    while not(j>=m):
        cedula = int(input('cedula: '))
        sequejan.append(cedula)
        j = j + 1
    
    # PROCEDIMIENTO
    sinrepetir = unicos(sequejan)
    sivotan = registrados(padron,sinrepetir)
    k = len(sivotan)
    
    # Tarea: Verificar si llegan al 10% del padrón
    
    # SALIDA
    print('los que si votan son:',k)
    print(sivotan)