Autor: Edison Del Rosario

  • 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')
    
  • 2Eva_IIT2011_T3 Movimientos del caballo en ajedrez sobre una matriz/arreglo

    2da Evaluación II Término 2011-2012, Enero 31, 2012 /ICM00794

    Tema 3. (25 puntos)

    En un tablero de ajedrez (8x8 casillas), la ficha del caballo puede moverse entre casillas, siguiendo las siguientes reglas:

    • Las direcciones se consideran horizontales o verticales.
    • Se mueve dos casillas en una dirección, y luego una casilla en cualquier dirección perpendicular al movimiento anterior.

    En la figura se muestra un ejemplo de la ubicación del caballo con el número 9 y las casillas donde se puede mover se marcan con 1.

    muevecaballo(5,4)


    a) Realice una función muevecaballo(f,c) que reciba las coordenadas de la ubicación del caballo en el tablero de ajedrez, asigne el valor de 1 a las casillas en las cuales puede moverse y entrega la matriz resultante.

    Nota: considerar los límites del tablero y que el tablero esta ocupado solo por el caballo.

    b) Escriba un programa que:

    • genere una matriz contrincante con la función ubicaficha(6,8) del tema anterior,
    • solicite las coordenadas f y c del caballo en el tablero,
    • genere otra matriz tablero con la función muevecaballo(f,c), y
    • simule el juego contando y mostrando los números que el caballo puede atacar en la matriz contrincante.

    Rúbrica: Definición de función (5 puntos), ubicación de movimientos (10 puntos), Programa (10 puntos).


    Referencia: Ajedrez - El caballo - 02: Explicación del movimiento del caballo

     

  • 2Eva_IIT2011_T2 Ubicar ficha en tablero

    2da Evaluación II Término 2011-2012, Enero 31, 2012 /ICM00794

    Tema 2. (15 puntos) Escriba una función ubicaficha(m, n) que ubique aleatoriamente m números entre 2 y m+1 dentro de una matriz de nxn.

    ubicaficha(6,8)
    ... 3
    2
    ... 6
    ...
    ...
    5
    ... 4
    ... 7 ... ... ... ... ... ...

    Nota: No se deben repetir las posiciones de los números y las casillas vacías se llenan con ceros.

    Rúbrica: Definición de función (5 puntos), ubicación aleatoria no repetida (5 puntos), resultado y algoritmo integrado (5 puntos).

  • 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)
    
  • 2Eva_IIT2011_T1 Algoritmo de Euclides MCD

    2da Evaluación II Término 2011-2012, Enero 31, 2012 /ICM00794

    Tema 1 (20 puntos). El Algoritmo de Euclides es considerado el más antiguo y no trivial para encontrar el “máximo común divisor” (mcd) entre dos números a y b.
    El paso esencial que garantiza la validez del algoritmo consiste en mostrar que el mcd de a y b es:

    • considerar que a > b  y b≥0
    • si b es cero, mcd es igual a a
    • en otro caso, si b>0, es igual al mcd entre b y el residuo de a dividido por b

    Realice una función recursiva mcdeuclides(a,b) siguiendo el algoritmo de Euclides, y muestre una prueba de escritorio para a=15 y b=6.

    Rúbrica: Definición de función (5 puntos), Recursividad (10 puntos), Prueba de escritorio (5puntos).


    Prueba de escritorio:

    >>> 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
    >>>
  • 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)
    
  • 2Eva_IT2011_T4 Números Romanos a decimal

    2da Evaluación I Término 2011, Agosto 30, 2011 /ICM00794

    Tema 4 (25 puntos). Realice un programa que reciba una cadena de caracteres, que representa un número romano y la convierta a número en base decimal.

    El equivalente de números romanos se muestra en la tabla, y para la conversión considere solo las siguientes reglas:

     Tabla de equivalentes
    Romano I V X L C D M
    Decimal 1 5 10 50 100 500 1000
    • Si a la derecha de una cifra romana de escribe otra igual o menor, el valor de ésta se suma a la anterior.
    • Si entre dos cifras romanas cualesquiera existe otra menor, ésta restará su valor a la siguiente. Casos para I, X y C
    • En ningún número se puede poner una misma letra más de tres veces seguidas.
    • Suponga que la cadena de caracteres corresponde a un número romano válido.
    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

    Rúbrica: cálculo de equivalencias aditivas (10 puntos), equivalencias con signo menos (15 puntos)

  • 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

  • 2Eva_IT2011_T3 Cuadrado semimágico

    2da Evaluación I Término 2011, Agosto 30, 2011 /ICM00794

    Tema 3 (25 puntos). Llamemos cuadrado "semi-mágico" a una matriz cuadrada conteniendo números de tal manera que cada suma parcial de la primera fila, última fila, primera columna, última columna y cada una de las dos diagonales, producen el mismo resultado.

    Ejemplo:
    1 3 6 2 = 12
    7 4 1 4
    1 6 4 3
    3 4 2 3 = 12
     =  =  =
    12 12 12 12

    Escriba un programa que solicite: el tamaño n del cuadrado y el máximo de intentos a realizar, para llenar aleatoriamente una matriz de nxn con enteros positivos de una cifra, hasta que la matriz sea un cuadrado "semi-mágico".

    Muestre la matriz resultante y la cantidad de intentos realizados, si se logró el objetivo.

    Rúbrica: generación de matriz (5 puntos), determinar si es semi-mágico (15 puntos), control de intentos y resultados (5 puntos)

  • 2Eva_IT2011_T2 Votar por nombre del puente

    2da Evaluación I Término 2011, Agosto 30, 2011 /ICM00794

    Tema 2 (35 puntos). Al finalizar la construcción del Cuarto Puente, el Ministerio de Transporte y Obras Públicas nombrará al complejo vial mediante votaciones electrónicas entre cuatro nombres.

    Realice un programa que permita administrar las votaciones mediante el siguiente menú:

    1. Ingresa y valida voto.- se registra cédula, nombre y voto. Se descarta el registro si el voto es repetido; puede validar usando la función del tema anterior.
    2. Muestra registrados y descartados. - Presenta los contadores de votos registrados y descartados por reintento del votante.
    3. Resultado de votación.- Muestra los resultados de la votación y el ganador.
    4. Salir.
    Ejemplo de Nombres:
     (1) Unidad Nacional
     (2) Carlos Pérez Perazo
     (3) Rafael Mendoza Avilés
     (4) Otro por presentar….

    Sugerencia: Pedir los datos y registrarlos solamente si vota por primera vez. Copiar las cédulas válidas en un vector y usar la función enlista(,) del tema anterior para validar las cédulas repetidas.
    Referencia: “Un concurso eliminará los nombres de tres viaductos” www.eluniverso.com – 30. Agosto. 2011

    Rúbrica: Menú (5 puntos). Definición y uso de estructura de datos (5 puntos). Validación de votos y uso de función (10 puntos). Mostrar registrados y descartados (5 puntos). Resultados de votación (10 puntos)