Categoría: Solución 3ra Evaluación

  • s3Eva_IT2003_T2 Verificar un cuadrado mágico

    Ejercicio: 3Eva_IT2003_T2 Verificar un cuadrado mágico

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

    El problema se separa en sus partes principales.

    Primero se revisa el número de veces que aparece cada número en el cuadrado. Luego se suma cada fila y columna, guardando los resultados en vectores.

    La suma de las diagonales se las hace aparte pues solo se necesita mover un índice; la diagonal principal tiene el mismo índice en la fila y columna; y la diagonal segundaria, en cambio la columna es decreciente.

    Se validan los resultados parciales con las condiciones para que sea mágico y se muestra el resultado.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2003_T2 Verificar un cuadrado mágico
    # Propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    # INGRESO
    n = int(input("tamaño cuadrado: "))
    
    while (n>10):
        n = int(input("tamaño cuadrado(n<10): "))
    
    cuadrado = np.zeros(shape=(n,n),dtype=int)
    for i in range(0,n,1):
        for j in range(0,n,1):
            cuadrado[i,j] = input("cuadrado ["+str(i+1)+","+str(j+1)+"]: ")
    
    # PROCEDIMIENTO
    # verifica numeros repetidos
    m = n*n
    repetido = np.zeros(m+1,dtype=int)
    masdeuno = 0
    for i in range(0,n,1):
        for j in range(0,n,1):
            k = cuadrado[i,j]
            repetido[k]=repetido[k]+1
            if (repetido[k]>1):
                masdeuno = k
                
    #suma de filas y columnas
    sfila = np.zeros(n,dtype=int)
    scolumna = np.zeros(n,dtype=int)
    for i in range(0,n,1):
        for j in range(0,n,1):
            sfila[i] = sfila[i] + cuadrado[i,j]
            scolumna[i] = scolumna[i] + cuadrado[j,i]
            
    # Suma diagonales
    sdiagonal  = 0
    sdiagonal2 = 0
    for i in range(0,n,1):
        sdiagonal  = sdiagonal + cuadrado[i,i]
        sdiagonal2 = sdiagonal2 + cuadrado[i,n-1-i]
    
    # verifica condiciones magico
    magico = 1
    if (masdeuno>0):
        magico = 0
    if not(sdiagonal==sdiagonal2):
        magico = 0
    for i in range(0,n,1):
        if not(sdiagonal==sfila[i]):
            magico = 0
        if not(sdiagonal==scolumna[i]):
            magico = 0
    
    # SALIDA
    print("El resultado es:")
    print(magico)
    

    resultado del algoritmo

    tamaño cuadrado: 3
    cuadrado [1,1]: 4
    cuadrado [1,2]: 9
    cuadrado [1,3]: 2
    cuadrado [2,1]: 3
    cuadrado [2,2]: 5
    cuadrado [2,3]: 7
    cuadrado [3,1]: 8
    cuadrado [3,2]: 1
    cuadrado [3,3]: 6
    El resultado es:
    1
    >>> 
    

    ejercicios resueltos Python mejo_it2003_t2 pdf

    ejercicios resueltos Matlab mejo_it2003_t2 pdf

  • s3Eva_IT2003_T1 Raíces enteras positivas del polinomio

    Ejercicio: 3Eva_IT2003_T1 Raíces enteras positivas del polinomio

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

    El problema se separa en sus partes principales.
    Primero la función para encontrar las raíces enteras, usando un contador que
    aumenta cuando encuentra que el polinomio evaluado en x tienen valor de 0.

    En el programa, para ingresar el polinomio se almacenan solo los coeficientes,
    el término i-ésimo también indica el exponente de coeficiente[i]*xi.

    Nota: No se incluye la forma de realizar la gráfica en la solución presentara
    para el examen.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2003_T1 Raíces enteras positivas del polinomio
    # propuesta de solución: edelros@espol.edu.ec
    
    import numpy as np
    
    def numraices(grado,coeficiente,a,b):
        encontre=0
        x = a
        while (x<=b):
            p = 0
            i = 0
            while (i<=grado):
                p = p + coeficiente[i]*(x**i)
                i = i + 1
            if (p==0):
                encontre = encontre+1
            x = x + 1
        return (encontre)
    
    # PROGRAMA -----------------
    
    # INGRESO
    n = int(input("grado polinomio: "))
    coeficiente = np.zeros(n+1,dtype=float)
    for i in range(0,n+1,1):
        coeficiente[i] = float(input("coeficiente["+str(i)+"]: "))
    print("Rango de busqueda: [a,b]")
    a = int(input("a: "))
    b = int(input("b: "))
    
    # PROCEDIMIENTO
    resultado = numraices(n,coeficiente,a,b)
    
    # SALIDA
    print("numero de raices enteras:")
    print(resultado)
    

    resultado del algoritmo

    grado polinomio: 7
    coeficiente[0]: 0
    coeficiente[1]: -336
    coeficiente[2]: 356
    coeficiente[3]: 208
    coeficiente[4]: -337
    coeficiente[5]: 127
    coeficiente[6]: 19
    coeficiente[7]: 1
    Rango de busqueda: [a,b]
    a: -10
    b: 40
    numero de raices enteras:
    1
    >>> 
    

    ejercicios resueltos Python mejo_it2003_t1 pdf

    ejercicios resueltos Matlab mejo_it2003_t1 pdf

  • s3Eva_IT2002_T3 Determinar productos iguales entre vendedores

    Ejercicio: 3Eva_IT2002_T3 Determinar productos iguales entre vendedores

    Se usan listas de prueba para desarrollar el algoritmo, siendo:

    vendedor1 = ['pera','manzana','uva']
    vendedor2 = ['durazno','pera','naranja']
    

    se obtiene:

    ambos venden:
    pera
    >>> 
    

    Tarea: Desarrollar el literal a, usando archivos.

    Algoritmo en Python

    # 3Eva_IT2002_T3 Determinar productos iguales entre vendedores
    # desarrollo con listas, solo literal b
    # Tarea, desarrollar literal a
    
    # INGRESO
    vendedor1 = ['pera','manzana','uva']
    vendedor2 = ['durazno','pera','naranja']
    
    # PROCEDIMIENTO
    n = len(vendedor1)
    m = len(vendedor2)
    ambos = []
    for i in range(0,n,1):
        for j in range(0,m,1):
            if vendedor1[i] == vendedor2[j]:
                ambos.append(i)
    
    # SALIDA
    w = len(ambos)
    print('ambos venden:')
    for k in range(0,w,1):
        cual = ambos[k]
        print(vendedor1[cual])
    
  • s3Eva_IT2002_T1 Triunfos, empates y derrotas por Goles

    Ejercicio: 3Eva_IT2002_T1 Triunfos, empates y derrotas por Goles

    Instrucciones en Python

    explicación en video:

    Algoritmo en Python

    # 3Eva_IT2002_T1 Triunfos, empates y derrotas por Goles
    import numpy as np
    
    # INGRESO
    goles = np.array([[0,4,2,1],
                      [5,0,3,2],
                      [0,2,0,1],
                      [1,0,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
    
    # SALIDA
    print(triunfos)
    print(' triunfos por equipo: ')
    print(ttriunfos)
    print(empates)
    print(' empates por equipo:')
    print(tempates)
    print(' derrotas por equipo:')
    print(derrotas)
    
  • 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)
    
  • s3Eva_IIT2013_T4 Gestionar asientos en cine

    Ejercicio: 3Eva_IIT2013_T4 Gestionar asientos en cine

    Algoritmo en Python

    Propuesta de solución en Python:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2013_T4 Gestionar asientos en cine
    import numpy as np
    
    # Genera la sala
    n = int(input('numero filas: '))
    m = int(input('numero columnas:'))
    asiento = np.zeros(shape=(n,m), dtype=int)
    
    opcion = '0'
    while not(opcion=='5'):
        print(' 1. Vender Boletos')
        print(' 2._Mostrar_asientos')
        print(' 3. Contar vendidos')
        print(' 4. Buscar libre')
        print(' 5. Salir ')
    
        opcion = input('cual opcion: ')
    
        if (opcion=='1'):
            print('Vender Boletos')
            fila = int(input('fila:'))
            columna = int(input('columna:'))
            if (asiento[fila,columna]==0):
                asiento[fila,columna] = 1
            else:
                print('asiento ocupado')
    
            
        if (opcion=='2'):
            print('Mostrar_asientos')
            print(asiento)
            
        if (opcion=='3'):
            print('Contar vendidos')
            contar = 0
            for fila in range(0,n,1):
                for columna in range(0,m,1):
                    contar = contar+asiento[fila,columna]
            print(contar)
            
        if (opcion=='4'):
            print('Buscar libre')
            
        if (opcion=='5'):
            print('Salir')
    
  • s3Eva_IT2013_T3 Menú de consejerías académicas

    Ejercicios: 3Eva_IT2013_T3 Menú de consejerías académicas

    Propuesta de solución en Python,  ejercicio iniciado en clase como referencia. Se incluyó grabar los datos en un archivo.

    Tarea: continúa ejercicio en la siguiente clase, para las opciones no desarrolladas y la función del tema 2

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2013_T3 Menú de consejerías académicas
    
    estudiante = []
    opcion = '0'
    while not(opcion=='7'):
        print('1. Ingresar datos de estudiante')
        print('2. Ingresar datos de consejero')
        print('3. Sorteo de consejeros/estudiantes')
        print('4. Mostrar lista de estudiantes por consejero')
        print('5. Mostrar consejero de un estudiante')
        print('6. Grabar datos')
        print('7. Salir')
    
        opcion = input('cual opcion: ')
    
        if (opcion=='1'):
            # INGRESO
            mtr = input('matricula: ')
            nom = input('nombre: ')
            ema = input('email: ')
            nac = int(input('año nacimiento: '))
            while not(nac>1900 and nac<2018):
                print('usar anos desde el ultimo siglo...')
                nac = int(input('año nacimiento: '))
    
            unestudiante = {'matricula':mtr,
                            'nombre':nom,
                            'email':ema,
                            'nacimiento':nac}
            estudiante.append(unestudiante)
    
        if (opcion=='4'):
            print('los estudiantes registrados son: ')
            print(estudiante)
    
        if (opcion=='6'):
            print('Guardar datos en archivo...')
            narchivo = 'misdatos.txt'
    
            archivo  = open(narchivo, 'w')
            n = len(estudiante)
    
            i = 0
            while not(i>=n):
                nom = estudiante[i]['nombre']
                ema = estudiante[i]['email']
                linea = nom +','+ema+ '\n' # str(nac)
                archivo.write(linea)
                i = i + 1
    
            archivo.close()
    
  • s3Eva_IT2013_T2 sorteo de consejeros para estudiantes

    Ejercicio: 3Eva_IT2013_T2 sorteo de consejeros para estudiantes

    Instrucciones en Python

    Propuesta de solución en Python,  ejercicio iniciado en clase como referencia.

    Algoritmo en Python

    # 3Eva_IT2013_T2 sorteo de consejeros para estudiantes
    import numpy as np
    import random as rnd
    
    # INGRESO
    n = int(input('numero de estudiantes: '))
    m = int(input('numero de profesores: '))
    
    # PROCEDIMIENTO
    consejero = np.zeros(n+1,dtype = int)
    contador = np.zeros(m+1,dtype = int)
    cupo = n//m
    residuo = n%m
    i = 1
    while not(i>(n-residuo)):
        sorteo = int(rnd.random()*m) + 1
        if (contador[sorteo]<cupo):
            contador[sorteo] = contador[sorteo]+1
            consejero[i] = sorteo
            i = i + 1
    cupo = cupo + 1
    i = n - residuo + 1
    while not(i>n):
        sorteo = int(rnd.random()*m) + 1
        if (contador[sorteo]<cupo):
            contador[sorteo] = contador[sorteo]+1
            consejero[i] = sorteo
            i = i + 1
    
    # SALIDA
    print(contador)
    print(consejero)