Etiqueta: fundamentos programacion

fundamentos de programación con Python.

  • s2Eva_IT2015_T4 Movilidad de tortugas en región

    Ejercicio: 2Eva_IT2015_T4 Movilidad de tortugas en región

    Algoritmo en Python

    Propuesta de solución en Python, continúa desde el tema 3:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2015_T3 Distribuye tortugas en región
    import numpy as np
    import random as rnd
    
    def distribuye(n,m,q,total):
        isla = np.zeros(shape=(n,m),dtype = int)
        unatortuga = 1
        while not(unatortuga > total):
            fila = int(rnd.random()*n)+0
            columna = int(rnd.random()*m)+0
            if (isla[fila,columna]<q):
                isla[fila,columna] = isla[fila,columna] + 1
                unatortuga = unatortuga+1
        return(isla)
    
    # 2Eva_IT2015_T4 Movilidad de tortugas en región
    # usar funciones para operaciones intermedias
    def cuentaceros(isla):
        tamano = np.shape(isla)
        n = tamano[0]
        m = tamano[1]
        cuenta = 0
        for f in range(0,n,1):
            for c in range(0,m,1):
                if (isla[f,c] ==0):
                    cuenta = cuenta +1
        return(cuenta)
    
    def muevetortuga(isla):
        tamano = np.shape(isla)
        n = tamano[0]
        m = tamano[1]
        # crear una situacion posterior,
        # donde se mueve cada tortuga
        posterior = np.zeros(shape=(n,m),dtype = int)
        for f in range(0,n,1):
            for c in range(0,m,1):
                cuantas = isla[f,c]
                if (cuantas>=1):
                    tortugas = 1
                    while not(tortugas>cuantas):
                        # mueve una tortuga
                        mueve = int(rnd.random()*5)+0
                        if (mueve ==1):
                            # verifica limites, sino se pierde la tortuga
                            if ((f-1)>=0 and (c-1)>=0):
                                posterior[f-1,c-1] = posterior[f-1,c-1] +1
                        if (mueve ==2):
                            if ((f-1)>=0 and (c+1)<m):
                                posterior[f-1,c+1] = posterior[f-1,c+1] +1
                        if (mueve ==3):
                            if ((f+1)=0):
                                posterior[f+1,c-1] = posterior[f+1,c-1] +1
                        if (mueve ==4):
                            if ((f+1)<n and (c+1)<m):
                                posterior[f+1,c+1] = posterior[f+1,c+1] +1
                        tortugas = tortugas +1
        return(posterior)
    
    
    # INGRESO
    n = int(input('filas : '))
    m = int(input('columnas : '))
    q = int(input('maximo por casilla : '))
    total = int(input('tortugas en cautiverio : '))
    # Tarea: validar que total no exceda capacidad de isla
    
    # PROCEDIMIENTO
    inicial = distribuye(n,m,q,total)
    inicialceros = cuentaceros(inicial)
    posterior = muevetortuga(inicial)
    perdidas = np.sum(inicial)- np.sum(posterior)
    
    # SALIDA
    print('isla al inicio: ')
    print(inicial)
    print('casillas vacias en inicial: ', inicialceros)
    print('isla despues de un periodo: ')
    print(posterior)
    print('tortugas perdidas: ', perdidas)
    

    Nota: considera que si la tortuga sale de la matriz, ya no se la cuenta, desaparece, muere.

    filas : 4
    columnas : 6
    maximo por casilla : 5
    tortugas en cautiverio : 20
    isla al inicio:
    [[1 1 1 0 0 3]
     [0 2 1 2 0 1]
     [0 0 0 0 1 0]
     [2 2 3 0 0 0]]
    casillas vacias en inicial:  12
    isla despues de un periodo:
    [[0 0 2 1 1 0]
     [0 0 0 0 0 0]
     [2 1 0 0 1 0]
     [0 0 0 1 0 0]]
    tortugas perdidas:  11
  • s3Eva_IIT2015_T3 funciones matrices rotar, extraer

    Ejercicio: 3Eva_IIT2015_T3 funciones matrices rotar, extraer

    Algoritmo en Python

    Tarea: Integrar con tema 4

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2015_T3 funciones matrices rotar, extraer
    # propuesta: edelros@espol.edu.ec
    # version con lazos y condicionales. 
    # tarea: simplificar lazos con 'for'
    
    import numpy as np
    
    # Tema 3 a)
    def rotando(matriz,k):
    
        #cuenta rotaciones
        cuenta = 0    
        while not(cuenta>=k):
            n,m = matriz.shape 
            tabla = numpy.zeros(shape=(m,n),dtype=int)
    
            # inicia rotación
            i = 0 
            while not(i>=n):
                j = 0
                while not(j>=m):
                    f = j
                    c = (n-1)-i
                    tabla[f,c] = matriz[i,j]
                    j = j + 1
                i = i + 1
            
            matriz = np.copy(tabla)
            cuenta = cuenta + 1
        return(matriz)
    
    # Tema 3 b) funcion para extraer una esquina 
    # de tamaño t de una matriz
    # k=0 ;esquina superior izquierda 
    # k=1 ;esquina superior derecha
    # k=3 ;esquina inferior izquierda 
    # k=2 ;esquina inferior derecha
    
    def extraeresquina(matriz,k,t):
        n,m = matriz.shape
        esquina = np.zeros(shape=(t,t), dtype=int)
        i = 0
        while not(i>=t):
            j = 0
            while not(j>=t):
                if (k==0):
                    f = i
                    c = j
                if (k==1):
                    f = i
                    c = (m-t)+j
                if (k==2):
                    f = (n-t)+i
                    c = (m-t)+j
                if (k==3):
                    f = (n-t)+i
                    c = j
                esquina[i,j]=matriz[f,c]
                j = j+1
            i = i+1   
        return(esquina)
    
  • s3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)

    Ejercicio: 3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)

    Propuesta de solución en Python para 3ra Eva. II Término 2015 Tema 3 y 4.

    Los archivos para probar el algoritmo son:

    codigoQR.txt

    referenciaQR.txt

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2015_T3 funciones matrices rotar, extraer
    # propuesta: edelros@espol.edu.ec
    # version con lazos y condicionales. 
    # tarea: simplificar lazos con 'for'
    
    import numpy as np
    
    # Tema 3 a)
    def rotando(matriz,k):
    
        #cuenta rotaciones
        cuenta = 0    
        while not(cuenta>=k):
            n,m = matriz.shape 
            tabla = numpy.zeros(shape=(m,n),dtype=int)
    
            # inicia rotación
            i = 0 
            while not(i>=n):
                j = 0
                while not(j>=m):
                    f = j
                    c = (n-1)-i
                    tabla[f,c] = matriz[i,j]
                    j = j + 1
                i = i + 1
            
            matriz = np.copy(tabla)
            cuenta = cuenta + 1
        return(matriz)
    
    # Tema 3 b) funcion para extraer una esquina 
    # de tamaño t de una matriz
    # k=0 ;esquina superior izquierda 
    # k=1 ;esquina superior derecha
    # k=3 ;esquina inferior izquierda 
    # k=2 ;esquina inferior derecha
    
    def extraeresquina(matriz,k,t):
        n,m = matriz.shape
        esquina = np.zeros(shape=(t,t), dtype=int)
        i = 0
        while not(i>=t):
            j = 0
            while not(j>=t):
                if (k==0):
                    f = i
                    c = j
                if (k==1):
                    f = i
                    c = (m-t)+j
                if (k==2):
                    f = (n-t)+i
                    c = (m-t)+j
                if (k==3):
                    f = (n-t)+i
                    c = j
                esquina[i,j]=matriz[f,c]
                j = j+1
            i = i+1   
        return(esquina)
    
    # Tema 4 ------------------------------
    
    # Programa para orientar el codigo QR
    
    # INGRESO por lectura desde un archivo
    codigo     = np.loadtxt('codigo.txt',dtype=int)
    referencia = np.loadtxt('referencia.txt',dtype=int)
    
    # PROCEDIMIENTO
    
    # comparando código y esquinas de referencia
    # resultados por esquina
    t,r = referencia.shape
    compara = np.zeros(4, dtype=int) 
    
    #compara esquinas
    k = 0  
    while not(k>=4):
        esquina    = extraeresquina(codigo,k,t)
        esqgirada  = rotando(referencia,k)
        compara[k] = np.array_equal(esquina,esqgirada)
        k = k + 1
        
    # Selecciona la rotacion
    if (compara[0]==1 and compara[1]==1
        and compara[2]==0 and compara[3]==1):
        orientado = rotando(codigo,0)
        
    if (compara[0]==1 and compara[1]==0
        and compara[2]==1 and compara[3]==1):
        orientado = rotando(codigo,1)
        
    if (compara[0]==0 and compara[1]==1
        and compara[2]==1 and compara[3]==1):
        orientado = rotando(codigo,2)
        
    if (compara[0]==1 and compara[1]==1
        and compara[2]==1 and compara[3]==0):
        orientado = rotando(codigo,3)
    
    # SALIDA
    print(orientado)
    
  • s3Eva_IIT2015_T2 Gestionar mensajes con etiquetas

    Ejercicio: 3Eva_IIT2015_T2 Gestionar mensajes con etiquetas

    Propuesta de solución en Python 3ra Eva. II Término 2015 Tema 1 y 2

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2015_T2 Gestionar mensajes con etiquetas
    # propuesta: edelros@espol.edu.ec
    # version con lazos y condicionales.
    # tarea: simplificar con 'for'
    
    import numpy as np
    
    # Tema 1. literal a)
    def buscaetiqueta(mensaje):
        n = len(mensaje)
        etiquetas = []
        copia = 0
        
        i = 0
        while not(i>=n):
    
            #Inicia copia etiqueta
            if (mensaje[i]=='#'): 
                copia = 1
                encontre = ''
            
            if (copia==1):
                encontre = encontre + mensaje[i]
                if (i<(n-1)):
                    if (mensaje[i+1]==' ' or mensaje[i+1]==','):
                        copia = 0
                        etiquetas.append(encontre)
                if (i==(n-1)):
                    etiquetas.append(encontre)
            i = i + 1
        return(etiquetas)
    
    # Tema 1. literal b)
    def tabulando(lista):
        n = len(lista) # usando listas
        repetido = np.zeros(n,dtype=int)
        numrepetido = 0
    
        # Marcando repetidos
        i = 0 
        while not(i>=(n-1)):
            j = i + 1
            while not(j>=n):
                if (lista[i]==lista[j]):
                    repetido[j]=1
                    numrepetido=numrepetido+1
                j = j + 1
            i = i + 1
    
        #copia vector unicos, tabula usando arreglo
        unicos = []
        i = 0
        while not(i>=n):
            if (repetido[i]==0):
                unicos.append([lista[i],0])
            i = i + 1
        k = len(unicos)
    
        # Cuenta y Acumula
        i = 0
        while not(i>=n):
            
            #busca posicion en unicos
            j = 0     
            while not(j>=k):
                if (lista[i]==unicos[j][0]):
                    unicos[j][1] = unicos[j][1]+1
                j = j + 1
                
            i = i + 1
            
        return(unicos)
    
    # Tema 2. Admnistra mensajes de una red social
    usuario = []
    mensaje = []
    
    opcion = 0
    while not(opcion==4):
        print('1. Ingresar mensaje')
        print('2. Usuario frecuente')
        print('3. Tendencias')
        print('4. Salir')
    
        opcion = int(input('cual opcion: '))
    
        if (opcion==1):
            print('1. Ingresar mensaje')
            quien = input('nombre usuario: ')
            dice  = input('mensaje: ')
            usuario.append(quien)
            mensaje.append(dice)
    
        if (opcion==2):
            print('2. Usuario frecuente')
            quienes = tabulando(usuario)
            n = len(quienes)
            mayor = 0
            k = 1
            while not (k>=n):
                if (quienes[k][1]>quienes[mayor][1]):
                    mayor = k
                k = k + 1
            print('los usuarios:')
            print(quienes)
            print('el usuario mas frecuente es: ',
                    quienes[mayor][0])
    
        if (opcion==3):
            print('3. Tendencias')
            n = len(mensaje)
            todaetiqueta = []
            i = 0
            while not(i>=n):
                cuales = buscaetiqueta(mensaje[i])
                m = len(cuales)
                if (m>0):
                    j = 0 #añade cada etiqueta
                    while not(j>=m):
                        todaetiqueta.append(cuales[j])
                        j = j+1
                i = i + 1
            etiquetas = tabulando(todaetiqueta)
            n = len(etiquetas)
            mayor = 0
            k = 1
            while not (k>=n):
                if (etiquetas[k][1]>etiquetas[mayor][1]):
                    mayor = k
                k = k + 1
            print(etiquetas)
            print('La tendencia es: ',etiquetas[mayor][0])
    
        if (opcion==4):
            print('Gracias por usar el software')
    
  • s3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

    Ejercicio: 3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

    Algoritmo en Python

    Tarea: Integrar con Tema 2

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas
    # propuesta: edelros@espol.edu.ec
    # version con lazos y condicionales.
    # tarea: simplificar con 'for'
    
    import numpy as np
    
    # Tema 1. literal a)
    def buscaetiqueta(mensaje):
        n = len(mensaje)
        etiquetas = []
        copia = 0
        
        i = 0
        while not(i>=n):
    
            #Inicia copia etiqueta
            if (mensaje[i]=='#'): 
                copia = 1
                encontre = ''
            
            if (copia==1):
                encontre = encontre + mensaje[i]
                if (i<(n-1)):
                    if (mensaje[i+1]==' ' or mensaje[i+1]==','):
                        copia = 0
                        etiquetas.append(encontre)
                if (i==(n-1)):
                    etiquetas.append(encontre)
            i = i + 1
        return(etiquetas)
    
    # Tema 1. literal b)
    def tabulando(lista):
        n = len(lista) # usando listas
        repetido = np.zeros(n,dtype=int)
        numrepetido = 0
    
        # Marcando repetidos
        i = 0 
        while not(i>=(n-1)):
            j = i + 1
            while not(j>=n):
                if (lista[i]==lista[j]):
                    repetido[j]=1
                    numrepetido=numrepetido+1
                j = j + 1
            i = i + 1
    
        #copia vector unicos, tabula usando arreglo
        unicos = []
        i = 0
        while not(i>=n):
            if (repetido[i]==0):
                unicos.append([lista[i],0])
            i = i + 1
        k = len(unicos)
    
        # Cuenta y Acumula
        i = 0
        while not(i>=n):
            
            #busca posicion en unicos
            j = 0     
            while not(j>=k):
                if (lista[i]==unicos[j][0]):
                    unicos[j][1] = unicos[j][1]+1
                j = j + 1
                
            i = i + 1
            
        return(unicos)
    
  • s3Eva_IT2015_T1 Maquina con monedas

    Ejercicios: 3Eva_IT2015_T1 Maquina con monedas

    Video de concepto que incluye el ejercicio:

    Algoritmo en Python

    Literal a:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2015_T1 Maquina con monedas
    import numpy as np
    
    # INGRESO
    valor = float(input('valor: '))
    
    # PROCEDIMIENTO
    centavos = (valor - int(valor))*100
    centavos = int(centavos)
    
    cantidad    = np.zeros(4,dtype=int)
    cantidad[0] = centavos
    numero = int(valor)
    
    i = 1
    while not(numero == 0 or i>=4):
        digito = numero%10
        numero = numero//10
        cantidad[i] = digito
        i = i + 1
    
    # SALIDA
    print(cantidad)
    

    prueba:

    valor: 435.16
    [16  5  3  4]
    >>> 
    

    tarea: convertir a función

    literal b:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2015_T1 Maquina con monedas
    import numpy as np
    
    # INGRESO
    centavos = int(input('devolver: '))
    
    # PROCEDIMIENTO
    monedas = np.array([1,5,10,25,50])
    tamano = len(monedas)
    devolver = centavos
    cantidad = np.zeros(tamano, dtype = int)
    i = tamano - 1
    while not(i < 0):
        cantidad[i] = devolver//monedas[i]
        devolver = devolver%monedas[i]
        i = i-1
    
    # SALIDA
    print(monedas)
    print(cantidad)
    

    prueba:

    devolver: 63
    [ 1  5 10 25 50]
    [3 0 1 0 1]
    >>> 
    

    tarea: convertir a función

  • s1Eva_IT2014_T2 Verificar EAN con Python

    Ejercicio: 1Eva_IT2014_T2 Verificar EAN

    [ algoritmo ] [ diagrama flujo ] codigo de barras EAN

    Para un número EAN dado, de cualquier producto, se ingresa como un número entero.

     

    # INGRESO
    EAN = int(input('European Article Number,EAN: '))
    

    Se requiere separar los componentes usando cociente y residuo: producto, empresa y país según las posiciones y cantidad de dígitos.

    # PROCEDIMENTO
    # separar las partes
    verificador = EAN%10 # un dígito
    numero = EAN//10
    
    producto = numero%100000 # cinco dígitos
    numero =  numero//100000
    
    empresa =  numero%10000 # cuatro dígitos
    pais =  numero//10000

    Luego encontrar la suma de los dígitos con la operación indicada en el enunciado.

    La siguiente semana de ser necesario se explica el tema de la decena superior.

    [ algoritmo ] [ diagrama flujo ]

    ..


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IT2014_T2 Verificar EAN
    
    # INGRESO
    EAN = int(input('European Article Number,EAN: '))
    
    # PROCEDIMENTO
    # separar las partes
    verificador = EAN%10  # un dígito
    numero = EAN//10
    
    producto = numero%100000 # cinco dígitos
    numero =  numero//100000
    
    empresa =  numero%10000  # cuatro dígitos
    pais =  numero//10000
    
    # calcular verificador
    suma = 0
    numero = numero = EAN//10
    while not(numero<=0):
        digito = numero%10
        numero = numero//10
        suma   = suma + 3*digito
        
        digito = numero%10
        numero = numero//10
        suma   = suma + 1*digito
        
    decena    = suma//10
    superior  = (decena + 1)*10
    calculado = superior - suma
    
    if (verificador == calculado):
        valido = 1
    else:
        valido = 0
        
    # SALIDA
    print('el numero ingresado es válido: ', valido)
    print('producto: ', producto)
    print('empresa: ', empresa)
    print('pais: ', pais)
    

    resultado del algoritmo

    European Article Number,EAN: 7702004003508
    el numero ingresado es válido:  1
    producto:  350
    empresa:  2004
    pais:  770
    >>> 
    
    European Article Number,EAN: 7702004003509
    el numero ingresado es válido:  0
    producto:  350
    empresa:  2004
    pais:  770
    >>> 
    

    [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo

    Diagrama según taller realizado en aula. tenía una sección de tarea.

    [ algoritmo ] [ diagrama flujo ]

  • s2Eva_IIT2014_T2 Listar multas infractores metrovía

    Ejercicio: 2Eva_IIT2014_T2 Listar multas infractores metrovía

    continuación del tema 1. Propuesta de solución en Python:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2014_T2 Listar multas infractores metrovía
    # Tarea: Calcular el total de multas a recaudar
    import numpy as np
    
    def multametrovia(veces,basico):
        pagar = 0
        i = 1
        while not(i>veces):
            if (i==1):
                pagar = basico + 0.1*basico
            if (i>1):
                pagar = pagar + 2*basico+0.1*basico
            i = i + 1
        return(pagar)
    
    # 2Eva_IIT2014_T2 Listar multas infractores metrovía
    # usa la funcion anterior
    
    # INGRESO
    n = int(input('cuantas infracciones: '))
    i = 0
    codigo = []
    while not(i>=n):
        placa = input('codigo: ')
        codigo.append(placa)
        i = i + 1
    
    # PROCEDIMIENTO
    
    # marcar los únicos
    unico = np.ones(n,dtype=int)
    i = 0
    penultimo = n-1
    while not(i>=penultimo):
        j = i + 1
        while not(j>=n):
            if (codigo[i]==codigo[j]):
                unico[j] = 0 
            j = j + 1
        i = i + 1
    
    # copiar en nueva lista placas únicas
    infractor = []
    i = 0
    while not(i>=n):
        if (unico[i]==1):
            infractor.append(codigo[i])
        i = i + 1
    
    # contar los repetidos vector veces
    m = len(infractor)
    veces = np.zeros(m,dtype=int)
    i = 0
    while not(i>=n):
        placa = codigo[i]
        
        # busca en infractores
        j = 0
        while not(j>=m):
            if (placa==infractor[j]):
                veces[j] = veces[j] + 1
            j = j + 1
        i = i + 1
    
    # multas
    multas = np.zeros(m,dtype=float)
    j = 0
    while not(j>=m):
        multas[j] = multametrovia(veces[j],354)
        j = j + 1
    
    # Tarea: total a recaudar por multas
    
    # SALIDA
    print(unico)
    print(infractor)
    print('La lista de infractores y multas es:')
    j = 0
    while not(j>=m):
        print(infractor[j],multas[j])
        j = j + 1
    

    resultado del algoritmo

    cuantas infracciones: 4
    codigo: 123
    codigo: 456
    codigo: 1020
    codigo: 456
    [1 1 1 0]
    ['123', '456', '1020']
    La lista de infractores y multas es:
    123 389.4
    456 1132.8000000000002
    1020 389.4
    >>> 
    
  • s2Eva_IIT2014_T1 Multas por invadir carril metrovía

    Ejercicio: 2Eva_IIT2014_T1 Multas por invadir carril metrovía

    Propuesta de solución en Python para tema 1, continúa en tema 2.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2014_T1 Multas por invadir carril metrovía
    # Tarea: Calcular el total de multas a recaudar
    import numpy as np
    
    def multametrovia(veces,basico):
        pagar = 0
        i = 1
        while not(i>veces):
            if (i==1):
                pagar = basico + 0.1*basico
            if (i>1):
                pagar = pagar + 2*basico+0.1*basico
            i = i + 1
        return(pagar)
    

    resultado del algoritmo

    >>> multametrovia(1, 354.00)
    389.4
    >>> multametrovia(2, 354.00)
    1132.8000000000002
    >>> multametrovia(3, 354.00)
    1876.2000000000003
    >>> 
    
  • s2Eva_IT2014_T2 Programar una Función color RGB a gris

    Ejercicio: 2Eva_IT2014_T2 Función color RGB a gris

    Propuesta de solución en Python:

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2014_T2 Función color RGB a gris
    # propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    def convertirgris(RGB):
        rojo  = RGB[0]
        verde = RGB[1]
        azul  = RGB[2]
    
        # Mezcla colores
        gris = 0.2989*rojo + 0.5870*verde + 0.1140*azul
        gris = int(gris)
    
        if (rojo>255 or verde>255 or azul>255):
            gris = -1
        # Tarea: verificar para colores <0
        
        return(gris)