Categoría: Sol_3Eva 2004-2005-2006

  • s3Eva_IIT2006_T1 Crear usuarios en lista de nombres

    Ejercicio: 3Eva_IIT2006_T1 Crear usuarios en lista de nombres

    Propuesta de solución en Python:

    Ejemplo:
    >>> 
    cuantos empleados: 3
    primer nombre: JUAN
    segundo nombre: PEDRO
    apellido paterno: RODRIGUEZ
    primer nombre: MARIA
    segundo nombre: ROSA
    apellido paterno: PEREZ
    primer nombre: CARLOS
    segundo nombre: JOSE
    apellido paterno: CASTRO
    jprodrig
    mrperez
    cjcastro

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2006_T1 Crear usuarios en lista de nombres
    # propuesta: edelros@espol.edu.ec
    
    def user(nombre1,nombre2,apellidop):
        z = ''
        i = 0
        z = z+nombre1[i]
        z = z+nombre2[i]
    
        # copiar letras del apellido
        n = len(apellidop)
    
        # Revisando si no hay suficientes letras en el apellido
        i = 0
        while not(i>=6 or i>=n):
            z = z+apellidop[i]
            i = i+1
        z = z.lower()
        return(z)
    
    # PROGRAMA
    m = int(input('cuantos empleados: '))
    empleado = []
    i = 0
    while not(i>=m):
        nombre1 = input('primer nombre: ')
        nombre2 = input('segundo nombre: ')
        apellidop = input('apellido paterno: ')
        registro = {'nombre1':nombre1,'nombre2':nombre2,
                  'apellidop':apellidop,'usuario':''}
        empleado.append(registro)
        i = i+1
    
    # PROCEDIMIENTO
    i = 0
    while not(i>=m):
        a = empleado[i]['nombre1']
        b = empleado[i]['nombre2']
        c = empleado[i]['apellidop']
        z = user(a,b,c)
        empleado[i]['usuario'] = z
        i = i+1
    
    # SALIDA
    i = 0
    while not(i>=m):
        print(empleado[i]['usuario'])
        i = i + 1
    
  • s3Eva_IT2006_T4 Juego planta bombas (buscaminas)

    Ejercicio3Eva_IT2006_T4 Juego planta bombas (buscaminas)

    Nota: contiene tareas por realizar, revisar comentarios en las instrucciones

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2006_T4 Juego planta bombas (buscaminas)
    # propuesta: edelros@espol.edu.ec
    import numpy as np
    import random as rnd
    
    def plantabombas(m,n):
        campo = np.zeros(shape=(n,n),dtype=int)
        
        bomba = 1
        while not(bomba>m):
            fila = int(rnd.random()*n)+0
            columna = int(rnd.random()*n)+0
            
            if (campo[fila,columna] == 0):
                campo[fila,columna] = 1
                bomba = bomba + 1
                
        return(campo)
    
    # PROGRAMA --------------
    
    # INGRESO
    n = int(input('tamaño de tablero[n,n]: '))
    m = int(input('cantidad de minas:'))
    
    # TAREA: validar que la cantidad de minas
    # sea menor que casillas en tablero
    
    f = int(input('coordenada fila:'))
    while not(f>0 and f<(n-1)):
        f = int(input('coordenada fila:'))
    
    c = int(input('coordenada columna:'))
    while not(c>0 and c<(n-1)):
        c = int(input('coordenada columna:'))
    
    # PROCEDIMIENTO
    # Crear tablero con bombas
    territorio = plantabombas(m,n)
    
    # solamente si no hay bomba al aterrizar reporta
    if (territorio[f,c] == 0):
        vertical   = territorio[f-1,c]+territorio[f+1,c]
        horizontal = territorio[f,c-1]+territorio[f,c+1]
        # TAREA: Completar las casillas en diagonal
        reporta = vertical + horizontal
    else:
        reporta = -1
    
    # SALIDA
    print('reporte de llegada: ',reporta)
    print('territorio: ')
    print(territorio)
    

    Ejemplo, aún falta desarrolar la parte de tarea:

    tamaño de tablero[n,n]: 8
    cantidad de minas:40
    coordenada fila:3
    coordenada columna:3
    reporte de llegada:  4
    territorio: 
    [[1 1 0 1 1 1 1 1]
     [1 0 1 0 0 1 1 1]
     [0 1 1 1 1 1 1 0]
     [1 1 1 0 1 1 0 1]
     [0 1 0 1 1 1 0 0]
     [1 0 0 0 1 0 0 0]
     [1 0 1 0 0 1 1 1]
     [1 1 0 1 1 0 0 1]]
    >>>
  • s3Eva_IT2006_T2 Intercalar palabras pastestring(a,b,p)

    Ejercicio: 3Eva_IT2006_T2 Intercalar palabras pastestring(a,b,p)

    Resultado obtenido:

    >>> pastestring('FUNDAMENTOS','PROG',4)
    'FUNDPROGAMENTOS'
    >>> 
    

    Algoritmo en Python

    # 3Eva_IT2006_T2 Intercalar palabras pastestring(a,b,p)
    
    def pastestring(a,b,p):
        n = len(a)
        m = len(b)
        cadena = a[0:p]+b
        cadena = cadena + a[p:]
        return(cadena)
    

    Tarea: verificar que p sea menor que el tamaño de a.

  • s3Eva_IT2005_T4 Tabla de Pozo millonario

    Ejercicio: 3Eva_IT2005_T4 Tabla de Pozo millonario

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2005_T4 Tabla de Pozo millonario
    # Propuesta de solucion: edelros@espol.edu.ec
    
    import numpy as np
    import random as rnd
    
    # INGRESO
    n = int(input('seleccionar:'))
    m = int(input('de cuantos:' ))
    
    # PROCEDIMIENTO
    # Ninguno seleccionado
    tabla = np.zeros(m+1,dtype=int)
    
    # sorteando sin repetir
    i = 1
    while not(i>n):
        sorteado = int(rnd.random()*m)+1
        if (tabla[sorteado]==0):
            tabla[sorteado] = 1
            i = i + 1
    
    #SALIDA
    k = 1
    print('Los numeros de la tabla son:')
    while not(k>m):
        if (tabla[k]==1):
            print(k)
        k = k + 1
    

    resultado del algoritmo

    seleccionar: 10
    de cuantos: 20
    Los numeros de la tabla son:
    1
    3
    4
    5
    10
    11
    12
    16
    17
    19
    >>> 
    

    Tarea: extraer los sorteados en otro arreglo que contenga solo los números seleccionados

    Propuesta de solución con diagrama de flujo, Python y otra versión con Matlab

    ejercicios resueltos Python mejo_it2005_t4 pdf

    ejercicios resueltos Matlab mejo_it2005_t4 pdf

  • s3Eva_IT2005_T2 Juego biológico

    Ejercicio: 3Eva_IT2005_T2 Juego biológico

    Resultado esperado:

    tamaño de matriz nxn:5
    cantidad seres vivos: 20
    [[1 1 1 1 0]
     [1 1 1 0 1]
     [0 1 1 1 1]
     [1 1 1 1 1]
     [0 0 1 1 1]]
    porcentaje inicial: 80.0
    nueva matriz:
    [[1 1 1 1 0]
     [1 0 1 0 1]
     [0 1 0 1 1]
     [1 1 1 0 1]
     [0 0 1 1 1]]
    porcentaje final: 68.0
    >>> 
    

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2005_T2 Juego biológico
    # propuesta: edelros@espol.edu.ec
    # por ser semejante, se usa la funcion de: 
    #  3Eva_IT2006_T4 Juego planta bombas (buscaminas)
    import numpy as np
    import random as rnd
    
    def plantabombas(m,n):
        campo = np.zeros(shape=(n,n),dtype=int)
        bomba = 1
        while not(bomba>m):
            fila = int(rnd.random()*n)+0
            columna = int(rnd.random()*n)+0
            if (campo[fila,columna]==0):
                campo[fila,columna] = 1
                bomba = bomba + 1
        return(campo)
    
    def porcentaje(campo):
        tamano = np.shape(campo)
        n = tamano[0]
        m = tamano[1]
        suma = 0
        fila = 0
        while not(fila>=n):
            columna = 0
            while not(columna>=m):
                suma = suma + campo[fila,columna]
                columna = columna + 1
            fila = fila + 1
        z = 100*suma/(n*n)
        return(z)
    
    # PROGRAMA  literal a ------------------
    n = int(input('tamaño de matriz nxn:'))
    vivos = int(input('cantidad seres vivos: '))
    
    # PROCEDIMIENTO
    biologico  = plantabombas(vivos,n)
    participa1 = porcentaje(biologico)
    
    # SALIDA
    print(biologico)
    print('porcentaje inicial:', participa1)
    
    # PROGRAMA  literal b ------------------
    fila = 1 # desde segunda fila
    while not(fila>=(n-1)): # hasta penultima fila
    
        columna = 1 # desde segunda columna
        while not(columna>=(n-1)): # hasta penultima columna
    
            # suma celda izquierda y derecha
            suma = biologico[fila-1,columna]+ biologico[fila+1,columna]
            # suma celda arriba y abajo
            suma = suma + biologico[fila,columna-1]+biologico[fila,columna+1]
            
            if suma >=4: # sobrepoblacion, en la celda no se sobrevive
                biologico[fila,columna] = 0
                
            columna = columna + 1
            
        fila = fila + 1
    
    participa2 = porcentaje(biologico)
    print('nueva matriz:')
    print(biologico)
    print('porcentaje final:', participa2)
    
  • s3Eva_IIIT2004_T4 Enmascara frase cambiando pareja de letras

    Ejercicio: 3Eva_IIIT2004_T4 Enmascara frase cambiando pareja de letras

    resultado obtenido:

    frase :TE SALUDO
    enmascarada:   ETLASODU
    >>>
    

    Algoritmo en Python

    # 3Eva_IIIT2004_T4 Enmascara frase cambiando pareja de letras
    
    # INGRESO
    frase = input('frase :')
    salto = 2
    
    # PROCEDIMIENTO
    n = len(frase)
    # posiciones iniciales de letras
    posicion = []
    for i in range(0,n,1):
        posicion.append(i)
    
    # intercambia posiciones
    i = 0
    while i<n:
        if (i+salto)<n:
            temporal = posicion[i]
            posicion[i] = posicion[i+salto]
            posicion[i+salto] = temporal
        i = i + salto + 1
    
    # reordena letras
    reordena = ''
    for i in range(0,n,1):
        cual = posicion[i]
        reordena = reordena + frase[cual]
    
    # SALIDA
    print('enmascarada: ', reordena)
    
  • s3Eva_IIIT2004_T1 Carrera de ranas

    Ejercicio3Eva_IIIT2004_T1 Carrera de ranas

    Resultados esperados:

    longitud de la pista: 20
    ganador:  A
    saltos:  16
    >>> 
    
    longitud de la pista: 20
    ganador:  B
    saltos:  23
    >>> 
    

    Algoritmo en Python

    # 3Eva_IIIT2004_T1 Carrera de ranas
    import random as rnd
    
    # INGRESO
    n = int(input('longitud de la pista: '))
    
    # PROCEDIMIENTO
    A = 0
    B = 0 
    turno = 0
    gana = ''
    while gana=='':
        saltoA = int(rnd.random()*3)+0
        saltoB = int(rnd.random()*3)+0
        A = A + saltoA
        B = B + saltoB
        turno = turno + 1
        if A>n:
            gana = 'A'
        if B>n:
            gana = 'B'
    
    # SALIDA
    print('ganador: ', gana)
    print('saltos: ',turno)
    

    Tarea: Considere que los turnos de saltos no corresponden a los saltos de cada rana, observe cuando se queda en el mismo puesto, no es un salto.

  • s3Eva_IT2004_T3 Multiplicar con campesino egipcio

    Ejercicio: 3Eva_IT2004_T3 Multiplicar con campesino egipcio

    Literal a. La función en forma recursiva considera cuatro casos para q y el residuo de q con 2. Usar un condicional en cada caso siguiendo lo descrito en la fórmula.

    mult(p,q) = \begin {cases} 0 , && q=0 \\ p ,&& q=1 \\ mult \Big(2p,cociente\big(\frac{q}{2}\big)\Big) , && q\ge 2 \text {, q es par} \\ mult \Big(2p,cociente\big(\frac{q}{2}\big)\Big)+p , && q\ge 2 \text{, q es impar }\end{cases}

    Literal b.  Requiere que sea un programa estructurado, separando las partes de las funciones de usuario y el programa que lo usa.

    En el bloque de ingreso del programa se pide cuál tabla de multiplicar se va a generar. Se requiere que la tabla se genere usando la función creada en el literal a.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2004_T3 Multiplicar con campesino egipcio
    # propuesta: edelros@espol.edu.ec
    
    def mult(p,q):
        if q==0:
            z = 0
        if q==1:
            z = p
        r = (q%2)
        if (q>=2 and r==0):
            z = mult(2*p, int(q/2))
        if (q>=2 and r>0):
            z = mult(2*p, int(q/2))+p
        return (z)
    
    # PROGRAMA ---------------
    import numpy as np
    
    # INGRESO
    n = int(input('¿cual tabla?: '))
    
    # PROCEDIMIENTO
    r = np.zeros(13,dtype=int)
    i = 1
    while (i<=12):
        r[i] = mult(n,i)
        i = i + 1
    
    # SALIDA
    i=1
    while (i<=12):
        print(str(n)+' x '+str(i)+' = ',str(r[i]))
        i = i + 1
    

    Tarea: validar n entre cero y 12

    resultado del algoritmo

    ¿cual tabla?: 8
    8 x 1 =  8
    8 x 2 =  16
    8 x 3 =  24
    8 x 4 =  32
    8 x 5 =  40
    8 x 6 =  48
    8 x 7 =  56
    8 x 8 =  64
    8 x 9 =  72
    8 x 10 =  80
    8 x 11 =  88
    8 x 12 =  96
    >>> 
    

    Propuesta de solución con diagrama de flujo, Python y otra versión con Matlab

    ejercicios resueltos Python mejo_it2004_t3 pdf

    ejercicios resueltos Matlab mejo_it2004_t3 pdf

  • s3Eva_IT2004_T2 Realizar el producto vectorial

    Ejercicio: 3Eva_IT2004_T2 Realizar el producto vectorial

    resultado obtenido

    [-1, 2, 7]
    >>> 
    

    Algoritmo en Python

    # 3Eva_IT2004_T2 Realizar el producto vectorial
    
    # INGRESO
    A = [1,3,1]
    B = [-2,1,0]
    
    # PROCEDIMIENTO
    c0 = A[1]*B[2]-B[1]*A[2]
    c1 = A[0]*B[2]-B[0]*A[2]
    c2 = A[0]*B[1]-B[0]*A[1]
    
    C = [c0,c1,c2]
    
    # SALIDA
    print(C)
    
  • s3Eva_IT2004_T1 Buscar número al lanzar el dado

    Ejercicio: 3Eva_IT2004_T1 Buscar número al lanzar el dado

    resultado para la función del enunciado

    >>> al_fin(2,7)
    2
    >>> al_fin(2,7)
    12
    >>> al_fin(2,7)
    5
    >>> 
    

    Tarea, realizar el programa requerido en el enunciado usando la función al_fin(n,k)

    Algoritmo en Python

    # 3Eva_IT2004_T1 Buscar número al lanzar el dado
    import random as rnd
    
    def al_fin(n,k):
        veces = 0
        exitos = 0
        while exitos == 0:
            aleatorio = int(rnd.random()*6)+1
            if aleatorio == n:
                exitos = exitos+1
            veces = veces + 1
        return(veces) 
    
    # Tarea, realizar el programa requerido