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

  • 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)
    
  • s2Eva_IIT2010_T2 Mostrar valores únicos en vector

    Ejercicio: 2Eva_IIT2010_T2 Mostrar valores únicos en vector

    Resultado de algoritmo

    [12345, 64279, 74351, 67531, 76524]
    >>>
    

    Algoritmo en Python

    # 2Eva_IIT2010_T2 Mostrar valores únicos en vector
    # usando solo listas y comparando con los demás
    
    # INGRESO
    vector = [12345, 64279, 12345, 74351, 12345, 67531, 76524]
    
    # PROCEDIMIENTO
    n = len(vector)
    
    sinrepetir = []
    for i in range(0,n,1):
        if not(vector[i] in sinrepetir):
                sinrepetir.append(vector[i])
                
    # SALIDA
    print(sinrepetir)
    
  • s2Eva_IIT2010_T1 Juego con fichas rojas y azules

    Ejercicio: 2Eva_IIT2010_T1 Juego con fichas rojas y azules

    literal a

    usar la posición relativa para determinar el valor de potencia de 10 para acumular el total al recorrer la cadena.

    intercambiar a: 1
     con b: 3
    cadena inicial:  RRRAR
    puntos vasos sin mover:  30
    cadena nueva:  RRRAR
    puntos vasos movidos:  30
    >>> 
     RESTART: D:/CCPG1001Ejemplos/fichasrojasazules.py 
    intercambiar a: 2
     con b: 4
    cadena inicial:  RRRAR
    puntos vasos sin mover:  30
    cadena nueva:  RARRR
    puntos vasos movidos:  3000
    >>> 
    

    literal b

    desarrollado hasta intercambiar caracteres entre las posiciones a,b

    Tarea: realizar varias "rondas"


    Algoritmo en Python

    # 2Eva_IIT2010_T1 Juego con fichas rojas y azules
    import random as rnd
    
    # literal a
    def puntos(cadena,valor):
        n = len(cadena)
        total = 0
        for i in range(0,n,1):
            base = 10**(n-1-i)
            if cadena[i]=='A':
                total = total + valor*base
            if cadena[i]=='R':
                total = total + 0*base
        return(total)
    
    # literal b
    def intercambia(cadena,a,b):
        n = len(cadena)
        orden = []
        for i in range(0,n,1):
            orden.append(i)
        orden[a-1] = b-1
        orden[b-1] = a-1
        nueva = ''
        for i in range(0,n,1):
            posicion = orden[i]
            nueva = nueva + cadena[posicion]
        return(nueva)
    
    # INGRESO
    a = int(input('intercambiar a: '))
    b = int(input(' con b: '))
    
    n = 5 # cantidad de vasos
    
    # PROCEDIMIENTO
    dado = int(rnd.random()*6)+1
    cadena = ''
    for i in range(0,n,1):
        if i == dado:
            cadena = cadena + 'A'
        else:
            cadena = cadena + 'R'
    
    equivale = puntos(cadena,dado)
    
    nueva = intercambia(cadena,a,b)
    equivale2 = puntos(nueva,dado)
    
    # SALIDA
    print('cadena inicial: ',cadena)
    print('puntos vasos sin mover: ',equivale)
    print('cadena nueva: ',nueva)
    print('puntos vasos movidos: ',equivale2)
    
  • s2Eva_IT2010_T3 Registrar donantes ONTOT

    Ejercicio: 2Eva_IT2010_T3 Registrar donantes ONTOT

    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_IT2010_T3 Registrar donantes ONTOT
    # propuesta solucion: edelros@espol.edu.ec
    
    import numpy as np
    donante = []
    
    opcion = 0
    while not(opcion==5):
        print('1. Ingreso de donantes ')
        print('2. Ingresar estado con prueba medica')
        print('3. Consulta por estado de donantes ')
        print('4. Total de donantes/tipo de sangre')
        print('5. Salir')
    
        opcion = int(input('cual opcion:'))
    
        if (opcion==1):      
            print('1. Ingreso de donantes ')
            texto  = input('nombre: ')
            numero = input('cedula: ')
            numb   = int(input('anio nacimiento:'))
            print('(1)O-, (2) O+, (3) A-, (4)A+, (5)B-, (6)B+, (7)AB-, (8)AB+')
            sangre = int(input('tipo sanguineo:'))
    
            estado = 1
            # crea el registro para un donante
            registro = {'nombre':texto,'cedula':numero,
                        'nacim':numb, 'tipos':sangre,
                        'estado':1}
            
            # añade el registro a la tabla donante
            donante.append(registro)
    
            
        if (opcion==2):
            print('2. Ingresar estado con prueba medica')
            quien  = int(input('cual numero de donante:'))
            cuanto = int(input(' (2) Aceptado , (3) Rechazado :'))
            donante[quien]['estado'] = cuanto
            
        if (opcion==3):
            print('3. Consulta por estado de donantes ')
            cual = int(input('cual estado: '))
            fila = 0
            
            # tamaño de la tabla donante
            n = len(donante)
            while not(fila>=n):
                if (cual==donante[fila]['estado']):
                    print(donante[fila]['nombre'])
                fila = fila + 1
            
        if (opcion==4):
            print('4. Total de donantes/tipo de sangre')
    
            # No se usará la fila 0 de veces
            veces = np.zeros(8+1,dtype=int)
            fila = 0
            while (fila<n):
                k = donante[fila]['tipos']
                veces[k] = veces[k] + 1
                fila = fila + 1
            
            print(veces)
            
        if (opcion==5):
            print(' gracias por usar el software')
            
        if (opcion<1 or opcion>5):
            print('NO ES OPCION DISPONIBLE')
    

    ejercicios resueltos Python 2eva_it2010_t3 pdf

    ejercicios resueltos Matlab 2eva_it2010_t3 pdf

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