Etiqueta: ejercicios resueltos python

  • s1Eva_IT2008_T2 Criba de Eratóstenes con Python

    Ejercicio: 1Eva_IT2008_T2 Criba de Eratóstenes

    [ algoritmo ] [ diagrama flujo ]

    - Se forma un vector con todos los números naturales entre 2 y n.

    i 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    criba[i] 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0

    Llenar un arreglo de marcas o tachado con la hipótesis que todos son primos(1).

    # PROCEDIMIENTO
    marcado = np.zeros((n+1),dtype=int)
    # hipotesis: todos son primos
    criba = 2
    while (criba<=n):
        marcado[criba] = 1
        criba = criba+1
    

    La prueba de hipótesis consiste en usar un indicador para el número de criba, y otro indicador i para anular marcando con cero (0) las posiciones de los múltiplos.

    - Se tachan todos los múltiplos de 2 que son menores que n,

    Inicie eliminando los múltiplos de 2, para luego cambiar a los múltiplos de 3, etc.

    # no son primos los múltiplos 
    criba = 2
    while (criba<=n):
    
        # revisa el primer múltiplo
        i = criba * 2
        while (i<=n):
            marcado[i] = 0
            i = i + criba
        criba = criba+1

    Mostrar como resultado solo aquellos números mantienen en marcas válidas (1).

    Tarea: Analizar si es necesario hacer funcionar el algoritmo de la prueba de hipótesis hasta n o un número menor. Realizar la validación que n sea mayor que 1.

    [ algoritmo ] [ diagrama flujo ]
    ..


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IT2008_T2 Criba de Eratóstenes
    # Propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    # INGRESO
    n = int(input('primos menores que: '))
    
    # PROCEDIMIENTO
    marcado = np.zeros((n+1),dtype=int)
    
    # hipotesis: todos son primos
    criba = 2
    while (criba<=n):
        marcado[criba] = 1
        criba = criba+1
    
    # no son primos los múltiplos 
    criba = 2
    while (criba<=n):
    
        # revisa el primer múltiplo
        i = criba * 2
        while (i<=n):
            marcado[i] = 0
            i = i + criba
        criba = criba+1
    
    # SALIDA
    criba = 2
    while (criba<=n):
        if marcado[criba]==1:
            print(criba)
        criba = criba+1
    

    resultado del algoritmo

    primos menores que: 30
    2
    3
    5
    7
    11
    13
    17
    19
    23
    29
    >>> 
    

    [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo

    diagrama de flujo Criba de Eratóstenes 01

    diagrama de flujo Criba de Eratóstenes 02

    diagrama de flujo Criba de Eratóstenes 03

    [ algoritmo ] [ diagrama flujo ]


    Otra forma de plantear el algoritmo

    # 1ra Evaluación I Término 2008
    # Tema 2. Criba de Eratóstenes
    import numpy as np
    
    # INGRESO
    n = int(input('cuantos numeros analiza: '))
    
    # PROCEDIMIENTO
    # vector de números naturales
    natural = np.zeros(n, dtype=int)
    posicion =  0
    while not(posicion>=n):
        natural[posicion] = posicion
        posicion = posicion +1
    
    # hipotesis todos cumplen
    cumple = np.ones(n,dtype = int)
    
    # Tarea: analiza cada posición
    posicion = 2
    # elimina multiplos / no cumplen
    contador = 2
    tacha  = posicion *contador
    while not(tacha>(n-1)):
        tacha  = posicion *contador
        if tacha<(n-1):
            cumple[tacha] = 0
        contador = contador +1
    
    # SALIDA
    # solo valores de la posicion 2 en adelante
    print(natural[2:])
    print(cumple[2:])
    
    

    mostrando el siguiente resultado:

    cuantos numeros analiza: 50
    [ 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 32 33 34 35 36 37
     38 39 40 41 42 43 44 45 46 47 48 49]
    [1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
     1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1]
    >>> 
    

    [ algoritmo ] [ diagrama flujo ]


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

    ejercicios resueltos Python 1eva_it2008_t2 pdf

    ejercicios resueltos Matlab 1eva_it2008_t2 pdf

  • s1Eva_IT2008_T1 Teorema de Wilson

    Ejercicio1Eva_IT2008_T1 Teorema de Wilson

    “Un número p es primo si y solo si el factorial (p-1)! + 1 es divisible por p”.

    El ejercicio se divide en dos partes principales:
    - determinar si un número es primo
    - Si es primo, validar lo que indica Wilson

    Para la primera parte, se usa el concepto de residuo de la división para determinar si el número es primo.

    # revisa esprimo 
    esprimo = 1
    divisor = 2
    while not(divisor>=n or esprimo==0):
        r = n%divisor
        if (r == 0):
            esprimo = 0
        divisor = divisor + 1

    La bandera usada es "esprimo" que inicia con el supuesto de ser verdadero ó 1.

    Solo si el número resulta ser primo, se aplican las operaciones de Wilson. Primero determinando el valor del factorial,

    wilson = -1
    if esprimo == 1:
        
        # factorial
        factor = 1
        i = 1
        while not(i>=n):
            factor = factor*i
            i = i + 1

    y luego revisar Wilson

        # revisa Wilson 
        residuo = (factor + 1) % n
        if residuo == 0:
            wilson = 1
        else:
            wilson = 0

    Se añaden los bloques de ingreso y salida para completar el algoritmo


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IT2008_T1 Teorema de Wilson
    
    # INGRESO
    n = int(input('ingrese numero primo: '))
    while not(n>0):
        n = int(input('ingrese numero positivo: '))
    
    # PROCEDIMIENTO
    
    # revisa esprimo 
    esprimo = 1
    divisor = 2
    while not(divisor>=n or esprimo==0):
        r = n%divisor
        if (r == 0):
            esprimo = 0
        divisor = divisor + 1
    
    wilson = -1
    if esprimo == 1:
        
        # factorial
        factor = 1
        i = 1
        while not(i>=n):
            factor = factor*i
            i = i + 1
        
        # revisa Wilson 
        residuo = (factor + 1) % n
        if residuo == 0:
            wilson = 1
        else:
            wilson = 0
    
    # SALIDA
    print('cumple Wilson: ', wilson)
    

    resultado del algoritmo

    ingrese numero primo: 7
    cumple Wilson:  1
    >>> 
    == RESTART: D:\Ejemplos\unprograma.py ==
    ingrese numero primo: 13
    cumple Wilson:  1
    >>> 
    == RESTART: D:\Ejemplos\unprograma.py ==
    ingrese numero primo: 8
    cumple Wilson:  -1
    >>> 
    
  • s1Eva_IIT2007_T3 Garantías de prestamos IESS

    Ejercicio: 1Eva_IIT2007_T3 Garantías de prestamos IESS

    [ algoritmo ] [ diagrama flujo ]

    Para el ejemplo, por simplicidad se usan cédulas de 3 dígitos; también se supone que no existen elementos repetidos dentro de cada arreglo.

    i reserva(i)
    1 987
    2 876
    3 765
    4 654
    ... ...
    n
    j cesantia(j)
    1 876
    2 765
    3
    ..
    m

    En la nota se indica que las listas de las cédulas de los afiliados tienen tamaño diferente, además el ingreso de datos es separado por tener origen de datos diferentes.

    # INGRESO
    
    # datos de afiliados con fondo de reserva
    n = int(input('Afiliados con Fondo de Reserva: '))
    freserva = np.zeros(n+1,dtype=int)
    i = 1
    while not(i>n):
        print(i)
        freserva[i] = input('ingrese cedula:')
        i = i + 1
    

    Al inicio del algoritmo, se supondrá que ningún afiliado cumple con los requisitos, por lo que se usa un arreglo de banderas de cumple o no cumple  (1 ó 0).

    # Hipotesis: Ninguno cumple requisito
    cumple = np.zeros(n+1,dtype=int)

    Realizar una búsqueda ordenada de números de cédula:
    - para cada cédula de reserva[i] con n elementos
    - realizar una búsqueda en el arreglo de cesantía[j] para los m elementos.

    # Revisa listado buscando iguales
    total = 0
    i = 1
    while not(i>n):
        j = 1
        while not(j>m or cumple[i]==1):
            if freserva[i]==cesantia[j]:
                cumple[i] = 1
                total = total + 1
            j = j + 1
        i = i + 1
    

    Repetir el proceso, marcando el arreglo de banderas, cumple, cada vez que se encuentra un valor repetido entre ambas listas.

    Tarea: Realizar el ejercicio, construyendo un tercer arreglo con solamente los elementos que cumplen con la condición.

    [ algoritmo ] [ diagrama flujo ]
    ..


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2007_T3 Garantías de prestamos IESS
    # propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    # INGRESO
    
    # datos de afiliados con fondo de reserva
    n = int(input('Afiliados con Fondo de Reserva: '))
    freserva = np.zeros(n+1,dtype=int)
    i = 1
    while not(i>n):
        print(i)
        freserva[i] = input('ingrese cedula:')
        i = i + 1
    
    # datos de afiliados con cesantía
    m = int(input('Afiliados con Cesantia: '))
    cesantia = np.zeros(m+1,dtype=int)
    j = 1
    while not(j>m):
        print(j)
        cesantia[j] = input('ingrese cedula:')
        j = j + 1
    
    # PROCEDIMIENTO
    
    # Hipotesis: Ninguno cumple requisito
    cumple = np.zeros(n+1,dtype=int)
    
    # Revisa listado buscando iguales
    total = 0
    i = 1
    while not(i>n):
        j = 1
        while not(j>m or cumple[i]==1):
            if freserva[i]==cesantia[j]:
                cumple[i] = 1
                total = total + 1
            j = j + 1
        i = i + 1
    
    # SALIDA: Muestra cedulas de los que cumplen requisito
    print('Cumplen requisitos:')
    print(total)
    print('listado: ')
    i = 1
    while not(i>n):
        if (cumple[i]==1):
            print(freserva[i])
        i = i + 1
    

    ejemplo de resultado del algoritmo

    Afiliados con Fondo de Reserva: 3
    1
    ingrese cedula:123
    2
    ingrese cedula:234
    3
    ingrese cedula:345
    Afiliados con Cesantia: 2
    1
    ingrese cedula:123
    2
    ingrese cedula:345
    Cumplen requisitos:
    2
    listado: 
    123
    345
    >>> 
    

    [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo

    [ algoritmo ] [ diagrama flujo ]


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

    ejercicios resueltos Python 1eva_iit2007_t3 pdf

    ejercicios resueltos Matlab 1eva_iit2007_t3 pdf

  • s1Eva_IIT2007_T2 Juego de la Ruleta

    Ejercicio: 1Eva_IIT2007_T2 Juego de la Ruleta

    [ algoritmo ] [ diagrama flujo ]

    La simulación de la ruleta se realiza con la generación de un número entero aleatorio entre 1 y 37.

    ruleta = int(rnd.random()*37)+1
    

    Para desarrollar el ejercicio, inicie resolviendo para un solo jugador y un solo intento y mostrando si ganó o no.

    Luego continúe incorporando la cantidad de intentos para un solo jugador,

    Incorpore la petición de apuestas de los jugadores, antes de hacer rotar la ruleta en un arreglo o lista, para luego poder determinar los resultados de ganadores.

        # Ingreso de apuestas
        j = 1
        while (j<=n):
            print('jugador (',j,') ')
            apuesta[j] = int(input('  número apostado: '))
            j = j
    

    Puede usar contadores para el número de veces ganó cada jugador en los m intentos.

    Siguiendo el esquema anterior podrá resolver el ejercicio para todas las rondas con todos los jugadores.

    Tarea: Completar el algoritmo para el número que salió la menor cantidad de veces.

    [ algoritmo ] [ diagrama flujo ]
    ..


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2007_T2 Juego de la Ruleta
    # Propuesta: edelros@espol.edu.ec
    
    import numpy as np
    import random as rnd
    
    # INGRESO
    n = int(input('¿cuántos jugadores?: '))
    m = int(input('¿cuántas rondas?: '))
    
    gana    = np.zeros(n+1, dtype=int)
    apuesta = np.zeros(n+1, dtype=int)
    
    ronda = 1
    while (ronda<=m):
    
        # Ingreso de apuestas
        j = 1
        while (j<=n):
            print('jugador (',j,') ')
            apuesta[j] = int(input('  número apostado: '))
            j = j + 1
    
        ruleta = int(rnd.random()*37)+1
        print('Número ruleta: ', ruleta)
    
        # Revisa ganadores
        j = 1
        while (j<=n):
            if (ruleta==apuesta[j]):
                gana[j] = gana[j]+1   
            j = j + 1
             
        ronda = ronda + 1
    
    # SALIDA
    print('Los resultados son:')
    j = 1
    while (j<=n):
        print(' jugador(',j,') ganó ',gana[j],' veces \n')
        j = j + 1
    

    Tarea: validar que el número de la apuesta esté en el tablero.

    un ejemplo de ejecución:

    cuantos jugadores: 2
    cuantas rondas: 2
    jugador ( 1 ) 
      número apostado: 3
    jugador ( 2 ) 
      número apostado: 24
    Número ruleta:  36
    jugador ( 1 ) 
      número apostado: 34
    jugador ( 2 ) 
      número apostado: 12
    Número ruleta:  34
    Los resultados son:
     jugador( 1 ) ganó  1  veces 
    
     jugador( 2 ) ganó  0  veces 
    
    >>> 
    

    [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo

    [ algoritmo ] [ diagrama flujo ]


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

    ejercicios resueltos Python 1eva_iit2007_t2 pdf

    ejercicios resueltos Matlab 1eva_iit2007_t2 pdf

  • s1Eva_IIT2007_T1 Hormiga busca arroz

    Ejercicio: 1Eva_IIT2007_T1 Hormiga busca arroz

    Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
    [ repita-hasta ]

    Algoritmo con un paso por cada turno

    Considere ingresar la ubicación inicial (xh,yh) de la hormiga y que la posición del arroz (xa,ya) sea fija.

    Suponga que la hormiga no ha encontrado el grano de arroz, se encuentran distantes.

    Para la dirección del movimiento de la hormiga  se genera un número aleatorio usado para cambiar un valor de coordenada de la hormiga.

    Luego se revisa si la hormiga encontró el grano de arroz al comparar que  las coordenadas sean iguales

    Cuente un turno completado, y repita el procedimiento hasta que se completen los 100 turnos o se haya encontrado el grano de arroz. Al final muestre los resultados requeridos.

    Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
    [ repita-hasta ]
    ..


    Algoritmo en Python con un paso por cada turno

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2007_T1 Hormiga busca arroz
    import random as rnd
    
    # INGRESO
    xa=int(input(' x arroz: '))
    ya=int(input(' y arroz: '))
    
    xh=int(input(' x hormiga: '))
    yh=int(input(' y hormiga: '))
    
    # PROCEDIMIENTO
    encontro = 0
    t = 0
    while not((xh==xa and yh==ya) or t>100):
        
        # dirección de movimiento de hormiga
        d = int(rnd.random()*4)+1
        
        if (d==1):
            yh = yh+1
        if (d==2):
            yh = yh-1
        if (d==3):
            xh = xh+1
        if (d==4):
            xh = xh-1
    
        # Revisa si lo encontró
        if (xh==xa and yh==ya):
            encontro = 1
        t = t + 1
    
    print('¿encontró?: ')
    print(encontro)
    print('pasos realizados: ')
    print(t)
    
    

    Ejemplo de respuesta con el algoritmo

     x arroz: 5
     y arroz: 3
     x hormiga: 4
     y hormiga: 2
    ¿encontró?: 
    1
    pasos realizados: 
    34
    >>> 
    
     x arroz: 8
     y arroz: 8
     x hormiga: 3
     y hormiga: 2
    ¿encontró?: 
    0
    pasos realizados: 
    101
    

    Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
    [ repita-hasta ]
    ..


    Algoritmo en Python con varios pasos por turno

    Al ejercicio anterior se le añade una variable "pasos" para que mediante un aleatorio sea diferente en cada turno.

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1ra Eval II Termino 2007. Tema 1. Hormiga y arroz
    # Propuesta de solución. edelros@espol.edu.ec
    
    import random as rnd
    import math
    
    xh = int(input('coordenada x hormiga: '))
    yh = int(input('coordenada y hormiga: '))
    
    # PROCEDIMIENTO
    
    # posición del arroz fija
    xa = 10
    ya = 8
    
    # distancia inicial
    dmayor = math.sqrt((xh-xa)**2+(yh-ya)**2)
    
    encontrado = 0
    turno = 0
    while (turno<100 and encontrado==0):
        
        direccion = int(rnd.random()*4)+1
        pasos = int(rnd.random()*3)+1
    
        if direccion==1:
            yh = yh + pasos
        if direccion==2:
            yh = yh - pasos
        if direccion==3:
            xh = xh + pasos
        if direccion==4:
            xh = xh - pasos
            
        if (xh==xa and yh==ya):
            encontrado = 1
    
        distancia = math.sqrt((xh-xa)**2+(yh-ya)**2)
        if distancia>dmayor:
            dmayor = distancia
            
        turno = turno + 1
    
    # SALIDA
    print('estado encontrado: ')
    print(encontrado)
    print('turnos simulados: ')
    print(turno)
    print('distancia más lejana: ')
    print(dmayor)
    
    

    Resultado del algoritmo:

    coordenada x hormiga: 2
    coordenada y hormiga: 1
    estado encontrado: 
    1
    turnos simulados: 
    92
    distancia más lejana: 
    23.323807579381203
    >>> 
    coordenada x hormiga: 0
    coordenada y hormiga: 0
    estado encontrado: 
    0
    turnos simulados: 
    100
    distancia más lejana: 
    38.2099463490856
    >>> 
    

    En la solución con Python, se usarán las librerías básicas de aleatorios (random) y matemáticas (math). Una alternativa a esta solución es usar la librería numérica Numpy que se descarga e instala como un módulo complementario.

    Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
    [ repita-hasta ]
    ..


    Diagrama de Flujo


    Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
    [ repita-hasta ]
    ..


    Algoritmo en Python: Bucle Repita-Hasta:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1ra Eval II Termino 2007. Tema 1. Hormiga y arroz
    # Propuesta de solución. edelros@espol.edu.ec
    
    import random as rnd
    import math
    
    xh = int(input('coordenada x hormiga: '))
    yh = int(input('coordenada y hormiga: '))
    
    # PROCEDIMIENTO
    
    # posición del arroz fija
    xa = 10
    ya = 8
    
    # distancia inicial
    dmayor = math.sqrt((xh-xa)**2+(yh-ya)**2)
    
    encontrado = 0
    turno = 0
    while not(turno>=100 or encontrado!=0):
        
        direccion = int(rnd.random()*4)+1
        pasos = int(rnd.random()*3)+1
        
        if direccion==1:
            yh = yh + pasos
        if direccion==2:
            yh = yh - pasos
        if direccion==3:
            xh = xh + pasos
        if direccion==4:
            xh = xh - pasos
            
        if (xh==xa and yh==ya):
            encontrado = 1
    
        distancia = math.sqrt((xh-xa)**2+(yh-ya)**2)
        if distancia>dmayor:
            dmayor = distancia
    
        turno = turno+1
    
    # SALIDA
    print('estado encontrado: ')
    print(encontrado)
    print('turnos simulados: ')
    print(turno)
    print('distancia más lejana: ')
    print(dmayor)
    

    Algoritmo: [ un paso/turno] [ varios pasos/turno] [ diagrama Flujo ]
    [ repita-hasta ]


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

    ejercicios resueltos Python 1eva_iit2007_t1 pdf

    ejercicios resueltos Matlab 1eva_iit2007_t1 pdf

  • s1Eva_IT2007_T1 Tiro al blanco con dardos

    Ejercicio: 1Eva_IT2007_T1 Tiro al blanco con dardos

    mientras-repita: [ algoritmo ] [ diagrama flujo ]
    repita-hasta: [ algoritmo ] [ diagrama flujo ]

    tiro al blanco tableroSea un punto aleatorio representado por sus valores en x, y en el rango del cuadrado que contiene a los círculos.

        x = (rnd.random()*160)-80
        y = (rnd.random()*160)-80
    

    La distancia al centro del tablero se determina como:

     d = math.sqrt(x**2+y**2)

    Se utiliza acumuladores de premios para cada franja de color, cuyo valor se determina mediante la comparación de la distancia del punto (x,y) al centro u origen del plano.

        if (d<10):
            premio = premio + 50
        if (d>=10 and d<40):
            premio = premio + 40
        if (d>=40 and d<80):
            premio = premio + 30
    

    Se repite el procedimiento para los n puntos, para al final mostrar el valor acumulado de premio.

    Nota: Discutir sobre la validación de dardos en los límites (frontera, borde) del círculo.

    mientras-repita: [ algoritmo ] [ diagrama flujo ]
    repita-hasta: [ algoritmo ] [ diagrama flujo ]
    ..


    Algoritmo en Python: Mientras-Repita

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IT2007_T1 Juego Tiro al Blanco con Dardos
    # Propuesta solucion: edelros@espol.edu.ec
    
    import random as rnd
    import math
    
    # INGRESO
    n = int(input('numero de dardos: '))
    
    # PROCEDIMENTO
    premio = 0
    i = 0
    while (i<n):
        x = (rnd.random()*160)-80
        y = (rnd.random()*160)-80
        d = math.sqrt(x**2+y**2)
    
        if (d<10):
            premio = premio + 50
        if (d>=10 and d<40):
            premio = premio + 40
        if (d>=40 and d<80):
            premio = premio + 30
    
        i = i+1
    
    # SALIDA
    print(' El total ganado es:')
    print(premio)
    

    Respuesta del algoritmo

    numero de dardos: 10
     El total ganado es:
    280
    >>> 
    numero de dardos: 10
     El total ganado es:
    220
    >>> 
    

    mientras-repita: [ algoritmo ] [ diagrama flujo ]
    repita-hasta: [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo: Mientras-Repita

    diagrama de flujo Tiro al blanco con dardos 01

    diagrama de flujo Tiro al blanco con dardos 02

    mientras-repita: [ algoritmo ] [ diagrama flujo ]
    repita-hasta: [ algoritmo ] [ diagrama flujo ]

    ..


    Algoritmo en Python: repita-hasta

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1ra Evaluación I Término 2007 - 2008
    # Tema 1. Tiro al blanco
    # Propuesta solucion: edelros@espol.edu.ec
    
    import random as rnd
    import math
    
    n = int(input('numero de dardos: '))
    
    # PROCEDIMIENTO
    premio = 0
    i = 0
    while not(i>=n):
        x = (rnd.random()*160)-80
        y = (rnd.random()*160)-80
        d = math.sqrt(x**2+y**2)
    
        if (d<10):
            premio = premio+50
        if (d>=10 and d<40):
            premio = premio+40
        if (d>=40 and d<80):
            premio = premio+30
    
        i = i+1
    
    # SALIDA
    print(' El total ganado es:')
    print(premio)
    

    mientras-repita: [ algoritmo ] [ diagrama flujo ]
    repita-hasta: [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo: Repita-Hasta

    diagrama de Flujo Tiro al blanco con dardos 03

    diagrama de flujo Tiro al blanco con dardos 04

    mientras-repita: [ algoritmo ] [ diagrama flujo ]
    repita-hasta: [ algoritmo ] [ diagrama flujo ]


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

    ejercicios resueltos Python 1eva_it2007_t1 pdf

    ejercicios resueltos Matlab 1eva_it2007_t1 pdf

  • s2Eva_IT2006_T3 Encriptar a Morse

    Ejercicio: 2Eva_IT2006_T3 Encriptar a Morse

    Algoritmo en Python

    # 2Eva_IT2006_T3 Encriptar a Morse
    
    def morse_numero(numero):
        equivale = [ '-..-' , '..-.' , '..-' , '.-' , '.-..' ,
                     '-..' , '-.-.' , '…-' , '–.-' , '-.' ]
    
        # separa los digitos
        digitos = []
        while numero>0:
            residuo = numero%10
            cociente = numero//10
            digitos.append(residuo)
            numero = cociente
            
        # equivalente en morse
        m = len(digitos)
        cadena = ""
        j = 0
        while (j<m):
            espacio = ' '
            if j == 0:
                espacio = ''
            cadena = equivale[digitos[j]] + espacio + cadena
            j=j+1
        return (cadena)
    
    def numero_morse(cadena):
        equivale = [ '-..-' , '..-.' , '..-' , '.-' , '.-..' ,
                     '-..' , '-.-.' , '…-' , '–.-' , '-.' ]
        # separa cadena
        partes = cadena.split(' ')
        # construye numero
        numero = 0
        m = len(partes)
        for i in range(0,m,1):
            digito = equivale.index(partes[i])
            numero = numero*10+digito
        
        return(numero)
    
    # Tarea, realizar el menú requerido.
    

    resultado del algoritmo

    >>> morse_numero(12)
    ('..-. ..-',)
    >>> numero_morse('..-. ..-')
    12
    >>> 
    
  • s2Eva_IT2006_T2 Simula juego de ruleta, punto y premio

    Ejercicio: 2Eva_IT2006_T2 Simula juego de ruleta, punto y premio

    resultados del algoritmo

    >>> puntoganado(5)
    8
    >>> 
    >>> puntoganado(5)
    7
    >>> 
    >>> puntoganado(5)
    9
    >>> 
    >>> premio(8)
    'pluma'
    >>> premio(18)
    'camiseta'
    >>> premio(28)
    'camiseta'
    >>> premio(78)
    'ninguno'
    >>> premio(3)
    'ninguno'
    >>> 
    
    

    Algoritmo en Python

    # 2Eva_IT2006_T2 Juego ruleta, punto y premio
    import random as rnd
    
    def puntoganado(escoge):
        ruleta = [2,7,5,9,1,3,8,4]
        m = len(ruleta)
        giro = int(rnd.random()*m)+0
        parada = escoge + giro
        if parada>=m:
            parada = parada-m
        puntos = ruleta[parada]
        return(puntos)
    
    def premio(acumulado):
        producto = 'ninguno'
        if (acumulado>=5 and acumulado<=15):
            producto = 'pluma'
        if (acumulado>=16 and acumulado<=35):
            producto = 'camiseta'
        if (acumulado>=36 and acumulado<=45):
            producto = 'balon del mundial'
        return(producto)
    
    # tarea # programa de prueba
    
  • s2Eva_IT2006_T1 Donaciones defensa civil

    Ejercicio: 2Eva_IT2006_T1 Donaciones defensa civil

    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_IT2006_T1 Donaciones defensa civil
    # Propuesta: edelros@espol.edu.ec
    # Nombre Donante, teléfono, Tipo Donación, Cantidad
    
    donacion = []
    opcion = 0
    while not(opcion==5):
        
        print('1. Registro de donacion')
        print('2. Donantes por tipo')
        print('3. Unidades por tipo')
        print('4. Guardar archivo')
        print('5. Salir')
        
        opcion = int(input('cual opcion: '))
    
        if (opcion==1):
            print('REGISTRA DONACION')
            nombre   = input('nombre: ')
            telefono = input('telefono: ')
            print(' tipo: 1.alimentos 2.medicina 3.dinero')
            tipo     = int(input('tipo : '))
            cantidad = float(input('cantidad: '))
            donacion.append([nombre,telefono,
                             tipo,cantidad])
    
        elif (opcion==2):
            print('DONANTES POR TIPO')
            m = len(donacion)
            qalimento = 0
            qmedicina = 0
            qdinero   = 0
            for i in range(0,m,1):
                if (donacion[i][2]==1):
                    qalimento = qalimento + 1
                if (donacion[i][2]==2):
                    qmedicina = qmedicina + 1
                if (donacion[i][2]==3):
                    qdinero = qdinero + 1
            print('donantes alimento: ' + str(qalimento))
            print('donantes medicina: ' + str(qmedicina))
            print('donantes dinero:   ' + str(qdinero))
                
        elif (opcion==3):
            print('UNIDADES POR TIPO')
            m = len(donacion)
            salimento = 0.0
            smedicina = 0.0
            sdinero   = 0.0
            for i in range(0,m,1):
                if (donacion[i][2]==1):
                    salimento = salimento+donacion[i][3]
                if (donacion[i][2]==2):
                    smedicina = smedicina+donacion[i][3]
                if (donacion[i][2]==3):
                    sdinero = sdinero+donacion[i][3]
            print('cantidad de alimento: '+str(salimento))
            print('cantidad medicina: '+str(smedicina))
            print('cantidad dinero:   '+str(sdinero))
            
        elif (opcion==4):
            print('Guardar')
            nombrearchivo = input('nombre archivo: ')
            archivo = open(nombrearchivo+'.txt','w')
            m = len(donacion)
            for i in range(0,m,1):
                registro = str(donacion[i][0])+','+str(donacion[i][1])
                registro = registro + ',' + str(donacion[i][2])
                registro = registro + ',' + str(donacion[i][3])+'\n'
                archivo.write(registro)
            archivo.close()
            
        elif (opcion==5):
            print('Gracias por usar el software')
        else:
            print('** opcion no existe **')
    

    resultado del algoritmo

    1. Registro de donacion
    2. Donantes por tipo
    3. Unidades por tipo
    4. Guardar archivo
    5. Salir
    cual opcion: 1
    REGISTRA DONACION
    nombre: Juan
    telefono: 123
     tipo: 1.alimentos 2.medicina 3.dinero
    tipo : 1
    cantidad: 30
    1. Registro de donacion
    2. Donantes por tipo
    3. Unidades por tipo
    4. Guardar archivo
    5. Salir
    cual opcion: 2
    DONANTES POR TIPO
    donantes alimento: 1
    donantes medicina: 0
    donantes dinero:   0
    1. Registro de donacion
    2. Donantes por tipo
    3. Unidades por tipo
    4. Guardar archivo
    5. Salir
    cual opcion: 3
    UNIDADES POR TIPO
    cantidad de alimento: 30.0
    cantidad medicina: 0.0
    cantidad dinero:   0.0
    1. Registro de donacion
    2. Donantes por tipo
    3. Unidades por tipo
    4. Guardar archivo
    5. Salir
    cual opcion: 4
    Guardar
    nombre archivo: donante
    1. Registro de donacion
    2. Donantes por tipo
    3. Unidades por tipo
    4. Guardar archivo
    5. Salir
    cual opcion: 5
    Gracias por usar el software
    >>> 
    

    ejercicios resueltos Python 2eva_it2006_t1 pdf

    ejercicios resueltos Matlab 2eva_it2006_t1 pdf

  • s1Eva_IIT2006_T2 Dígito verificador de cuenta

    Ejercicio: 1Eva_IIT2006_T2 Dígito verificador de cuenta

    [ algoritmo n_dígitos ] [ diagrama flujo ] ; [ algoritmo 4_dígitos ]

    Para números de cuenta con 4 dígitos y un verificador, se extrae el dígito verificador usando el residuo para 10; con el cociente de la división para 10 queda el número de cuenta como se indica en la descripción. Referencia, Operaciones básicas

    Ejemplo
    Código: 25431 codigo = 25431
    verificador escrito: 1 escrito = codigo%10
    = 25431 % 10 = 1
    número de cuenta: 25431 numero = codigo//10
    = 25431 // 10 = 2543

    se extraen los dígitos del número de posición impar usando también el residuo de 10. Se continua la operación con el siguiente dígito usando la división entera de 10

    impar  = numero%10 = 2543%10 = 3
    numero = numero//10 = 2543//10 = 254

    de forma semejante se obtiene el dígito de posición par, usando el residuo de 10.

    par = numero%10 =254%10 = 4
    numero = numero//10 = 254//10 = 25

    Se continúa con las operaciones para los siguientes dígitos, realizando la operación de suma y multiplicación.

    Se obtiene el verificador calculado para compararlo con el verificador recibido, estableciendo si la respuesta es afirmativa o negativa.

    [ algoritmo n_dígitos ] [ diagrama flujo ] ; [ algoritmo 4_dígitos ]
    ..


    Algoritmo en Python: para n dígitos

    Opción 1. Usando lazos, es más general para usar mayor cantidad de dígitos

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2006_T2 Dígito verificador de cuenta
    
    # INGRESO
    codigo = int(input('escriba el codigo completo: '))
    
    # PROCEDIMIENTO
    escrito = codigo%10
    numero  = codigo//10
    
    multimpar = 1
    sumapar   = 0
    while not(numero <= 0):
        impar  = numero%10
        numero = numero//10
        multimpar = multimpar*impar
    
        par = numero%10
        numero  = numero//10
        sumapar = sumapar+par
        
    suma = sumapar + multimpar
    calculado = suma%10
    
    if (escrito == calculado):
        respuesta = 1
    else:
        respuesta = 0
    
    # SALIDA
    print(respuesta)
    
    

    [ algoritmo n_dígitos ] [ diagrama flujo ] ; [ algoritmo 4_dígitos ]
    ..


    Diagrama de Flujo

    Ejecución del algoritmo

    escriba el codigo completo: 25431
    1
    >>> 
    escriba el codigo completo: 25432
    0
    >>> 
    

    [ algoritmo n_dígitos ] [ diagrama flujo ] ; [ algoritmo 4_dígitos ]
    ..


    Algoritmo en Python: para 4 dígitos

    Opción 2. En caso que requiera repasar más sobre lazos, aún se presenta una solución particular, solo para cuatro dígitos.

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1ra Evaluación II Termino 2006
    # Tema 2. Verificador cuenta. Ejercicio Básico
    
    # INGRESO
    codigo = int(input('escriba el codigo completo: '))
    
    # PROCEDIMIENTO
    escrito = codigo%10
    numero = codigo//10
    
    a = numero%10
    numero = numero//10
    
    b = numero%10
    numero = numero//10
    
    c = numero%10
    d = numero//10
    
    suma = a*c+(b+d)
    calculado = suma%10
    
    if (escrito == calculado):
        respuesta = 1
    else:
        respuesta = 0
    
    # SALIDA
    print(respuesta)
    

    [ algoritmo n_dígitos ] [ diagrama flujo ] ; [ algoritmo 4_dígitos ]

    Propuesta de solución en Python, otras propuestas:

    ejercicios resueltos Python 1eva_iit2006_t2 pdf

    ejercicios resueltos Matlab 1eva_iit2006_t2 pdf