Etiqueta: fundamentos programacion

fundamentos de programación con Python.

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

  • s2Eva_IIT2009_T1 Mensaje a SMS

    Ejercicio: 2Eva_IIT2009_T1 Mensaje a SMS

    Propuesta de solución en Python:

    Ejemplo, solo para 'de'-'d':
    >>> mensaje='un estudiante de la espol que estudia'
    >>> txtsms(mensaje)
    'un estudiante d la espol que estudia'

    El nuevo mensaje se realiza copiando el mensaje letra por letra y analizando cada una para revisar si aplica la regla de sms.

    Para el ejemplo solo para la letra 'd', se revisa las letras anteriores y posteriores para estimar que se puede saltar la copia de la letra.

    mensajeSMS_01

    considere que para el análisis planteado i tiene que ser mayor que 1, sino se mostrará error al no tener suficientes letras previas

    >>> mensaje='de su mensaje sms'
    >>> txtsms(mensaje)
    'de su mensaje sms'
    

    implemente el caso presentado en el algoritmo presentado a continuación:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2009_T1 Mensaje a SMS
    # TAREA: completarotras opciones: que,se,lo
    
    def txtsms(mensaje):
        tm=len(mensaje)
        
        # inicializa variable de salida
        sms = ''
        i = 0
        while not(i>=(tm)):
            
            # si encuentra una 'd' se salta un espacio
            if (mensaje[i-1]=='d' and mensaje[i-2]==' '
                and mensaje[i+1]==' '):
                i = i + 1
                
            # copia un caracter
            sms = sms + mensaje[i]
            i = i + 1
            
        return(sms)
    
  • s2Eva_IT2009_T3 Mejores vendedores por categoría

    Ejercicio: 2Eva_IT2009_T3 Mejores vendedores por categoría

    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_IT2009_T3 Mejores vendedores por categoría
    # Propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    # INGRESO
    n = int(input('cuantos vendedores: '))
    m = int(input('cuantos productos: '))
    
    ventas = np.zeros(shape=(n+1,m+1),dtype=int)
    precio = np.zeros(shape=(m+1),dtype=float)
    for f in range(1,n+1,1):
        for c in range(1,m+1,1):
            ventas[f,c] = int(input('ventas['+str(f)+','+str(c)+']: '))
    for pd in range(1,m+1,1):
        precio[pd] = float(input('Precio['+str(pd)+']: '))
    
    # PROCEDIMIENTO
    
    #categoria ventas
    unidades = np.zeros(shape=(n+1),dtype=int)
    for f in range(1,n+1,1):
        for c in range(1,m+1,1):
            unidades[f] = unidades[f]+ventas[f,c]
    mventas = 1
    for f in range(1,n+1,1):
        if unidades[f]>unidades[mventas]:
            mventas = f
    
    # categoria montos
    monto = np.zeros(shape=(n+1),dtype=float)
    for f in range(1,n+1,1):
        for c in range(1,m+1,1):
            monto[f] = monto[f] + ventas[f,c]*precio
    mmonto = 1
    for f in range(2,n+1,1):
        if monto[f]>monto[mmonto]:
            mmonto = f
    
    # SALIDA
    print('Mejor vendedor/unidades', mventas)
    print('Mejor vendedor/monto', mmonto)
    

    ejercicios resueltos Python 2eva_it2009_t3 pdf

    ejercicios resueltos Matlab 2eva_it2009_t3 pdf

  • s2Eva_IIT2008_T3 Crear un Calendario

    Ejercicio: 2Eva_IIT2008_T3 Crear un Calendario

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

    Solución presentada junto a video de concepto:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2008_T3 Crear un Calendario
    # Propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    dprimer = int(input('¿día de inicio del mes?: '))
    diasmes = int(input('¿días del mes?: '))
    
    # El calendario vacío al inicio
    calendario = np.zeros(shape=(6,7), dtype=int)
    c = dprimer - 1
    f = 0
    dia = 1
    while (f<=5 and dia<=diasmes):
        while (c<=6 and dia<=diasmes):
            calendario[f,c] = dia
            dia = dia + 1
            c = c + 1
        f = f + 1
        c = 0
    
    print('   D  L  M  M  J  V  S')
    print(calendario)
    # Tarea: Validar primer día del mes entre 1 y 7, 
    #    y número de días del mes entre 28 y 31
    

    resultado del algoritmo

    ¿día de inicio del mes?: 4
    ¿días del mes?: 31
       D  L  M  M  J  V  S
    [[ 0  0  0  1  2  3  4]
     [ 5  6  7  8  9 10 11]
     [12 13 14 15 16 17 18]
     [19 20 21 22 23 24 25]
     [26 27 28 29 30 31  0]
     [ 0  0  0  0  0  0  0]]
    >>> 
    

    ejercicios resueltos Python 2eva_iit2008_t3 pdf

    ejercicios resueltos Matlab 2eva_iit2008_t3 pdf

  • s2Eva_IIT2008_T2 Etiquetar a robots (R2D2)

    Ejercicio: 2Eva_IIT2008_T2 Etiquetar a robots (R2D2)

    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_IIT2008_T2 Etiquetar a robots (R2D2)
    # Propuesta: edelros@espol.edu.ec
    
    import random as rnd
    
    def nrobot(n):
        # Referencias para seleccionar simbolos
        letra='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        numero='0123456789'
    
        nletras  = len(letra)
        mnumeros = len(numero)
    
        # formar cadena
        z = ''
        i = 1
        letravocal = 1
        while (i<=n):
            if letravocal==1:
                a = int(rnd.random()*nletras)
                z = z + letra[a]
                letravocal = 0
            else:
                a = int(rnd.random()*mnumeros)
                z = z + numero[a]
                letravocal = 1
            i = i + 1
            
        return (z)
    

    resultado del algoritmo

    >>> nrobot(4)
    'V2F6'
    >>> nrobot(4)
    'F9U3'
    >>> nrobot(4)
    'P9L8'
    >>> nrobot(4)
    'L1K0'
    >>> nrobot(4)
    'J1J4'
    >>> 
    

    ejercicios resueltos Python 2eva_iit2008_t2 pdf

    ejercicios resueltos Matlab 2eva_iit2008_t2 pdf

  • s2Eva_IIT2008_T1 Carrera de caracoles

    Ejercicio: 2Eva_IIT2008_T1 Carrera de caracoles
    Propuesta de solución en Python para dos caracoles A y B:

    Cada caracol inicia en el punto de partida

    A = 0 
    B = 0 
    t = 0

    El movimiento de cada caracol se simula con un número aleatorio.

    mueveA = int(rnd.random()*5)-1
    A = A + mueveA
    

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2008_T1 Carrera de caracoles
    # solo dos caracoles
    
    import random  as rnd
    
    # INGRESO
    meta = int(input('meta maxima: '))
    
    # PROCEDIMIENTO
    A = 0
    B = 0
    t = 0
    while (A<meta and B<meta):
        mueveA = int(rnd.random()*5)-1
        A = A + mueveA
        
        mueveB = int(rnd.random()*5)-1
        B = B + mueveB
        
        t = t + 1
    
    gana = 0
    if (A>B):
        gana = 1
    if (B>A):
        gana = 2
        
    # SALIDA
    print('ganó el caracol: ',gana)
    print('tiempo transcurrido: ', t)
    

    Resultado del algoritmo

    meta maxima: 50
    ganó el caracol:  2
    tiempo transcurrido:  38
    >>> 
    meta maxima: 50
    ganó el caracol:  1
    tiempo transcurrido:  39
    >>> 
    

    Algoritmo en Python

    Carrera para n caracoles use un vector e indices entre 1 y n

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2008_T1 Carrera de caracoles
    import random  as rnd
    import numpy as np
    
    # INGRESO
    meta = int(input('meta maxima: '))
    n = int(input('cuantos jugadores: '))
    
    # PROCEDIMIENTO
    # no se usa la posicion 0, caracoles entre[1,n]
    posicion = np.zeros(n+1, dtype = int)
    
    t    = 0
    gana = 0
    while not(gana>0):
        
        jugador = 0
        while not(jugador>=n):
    
            mueve = int(rnd.random()*5)-1
            posicion[jugador] = posicion[jugador] + mueve
            
            if (posicion[jugador]>meta):
                gana = jugador
    
            jugador = jugador +1
        
        t = t + 1
    
    # SALIDA
    print('posiciones finales:')
    print(posicion)
    print('ganó el caracol: ',gana)
    print('tiempo transcurrido: ', t)
    
    

    resultado de algoritmo

    meta maxima: 50
    cuantos jugadores: 5
    posiciones finales:
    [38 44 44 32 51  0]
    ganó el caracol:  4
    tiempo transcurrido:  39
    >>> 
    meta maxima: 50
    cuantos jugadores: 5
    posiciones finales:
    [46 52 42 33 35  0]
    ganó el caracol:  1
    tiempo transcurrido:  36
    >>>