s1Eva_IT2012_T2 Juego de carreras con dados

Ejercicio: 1Eva_IT2012_T2 Juego de carreras con dados

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

Se establece el nivel del juego pidiendo el tamaño del tablero, que puede ser variable para facilitar la simulación a tableros más pequeños.

Se valida que el tamaño del tablero sea un número positivo.

Los jugadores A y B inician en la casilla de partida, fuera del tablero, marcada con 0. Por lo que se usa un acumulador para cada jugador.

Primero lanzará el jugador A, que si está en la casilla de partida y sus dados salen iguales se avanza a la primera casilla.

    # Lanzamiendo Jugador A
    dado1 = int(rnd.random()*6)+1
    dado2 = int(rnd.random()*6)+1
    if (A==0 and dado1==dado2):
        A = 1
    if (A>0):
        A = A + dado1 + dado2
    if (A==2 or A==17 or A==30 or A==42):
        dado1 = int(rnd.random()*6)+1
        dado2 = int(rnd.random()*6)+1
        A = A + dado1 + dado2

Si el jugador está en el tablero solo queda avanzar verificando que exista casilla de premio.

Se repite el proceso para el otro jugador, hasta que uno de ellos sobrepase la meta.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2012_T2 Juego de carreras con dados
# propuesta: edelros@espol.edu.ec

import random as rnd

# INGRESO
n = int(input('Tamaño tablero: '))
while (n<0):
    print('tablero debe tener casillas')
    n = int(input('Tamaño tablero: '))

# PROCEDIMIENTO
A = 0
B = 0
while (A<=n and B<=0):
    
    # Lanzamiendo Jugador A
    dado1 = int(rnd.random()*6)+1
    dado2 = int(rnd.random()*6)+1
    if (A==0 and dado1==dado2):
        A = 1
    if (A>0):
        A = A + dado1 + dado2
    if (A==2 or A==17 or A==30 or A==42):
        dado1 = int(rnd.random()*6)+1
        dado2 = int(rnd.random()*6)+1
        A = A + dado1 + dado2

    # Lanzamiendo Jugador B
    dado1 = int(rnd.random()*6)+1
    dado2 = int(rnd.random()*6)+1
    if (B==0 and dado1==dado2):
        B = 1
    if (B>0):
        B = B + dado1 + dado2
    if (B==2 or B==17 or B==30 or B==42):
        dado1 = int(rnd.random()*6)+1
        dado2 = int(rnd.random()*6)+1
        B = B + dado1 + dado2
        
if (A>B):
    gana = 1
else:
    gana = 2

# SALIDA
print('ganador: ',gana)

Diagrama de Flujo

Juego de carreras con dados 01Juego de carreras con dados 02

Juego de carreras con dados 03Juego de carreras con dados 04

ejercicios resueltos Python 1eva_it2012_t2 pdf

ejercicios resueltos Matlab 1eva_it2012_t2 pdf

s1Eva_IT2012_T1 Codificar número por dígito

Ejercicio: 1Eva_IT2012_T1 Codificar número por dígito

Propuesta de solución en Python, también se adjunta el diagrama en pdf

Ingrese un numero «original» validando que sea de tres dígitos, es decir entre 100 y 1000.

Se extrae cada dígito usando residuo y cociente de la división para 10. Aplique a cada dígito las reglas del enunciado del problema usndo condicionales.

Los dígitos se vuelven a armar en el código como resultado usando las posiciones i de cada uno de ellos (unidades, decenas, centenas).

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2012_T1 Codificar número por dígito

# INGRESO
original = int(input('número: '))

while not(original>=100 and original<1000):
    original = int(input('número: '))

# PROCEDIMIENTO
A = original
codigo = 0
i = 0
while not(A==0):
    d = A%10
    A = A//10
    
    if (d==2 or d==5 or d==7):
        d = d+1
    else:
        if (d==1 or d==4 or d==8 or d==9):
            d = d-1

    codigo = codigo + d*(10**i)
    i = i+1
    
# SALIDA
print('codificado: ', codigo)

Resultado del algoritmo

número: 472
codificado:  383
>>> 
número: 503
codificado:  603
>>> 
número: 615
codificado:  606
>>> 

Diagrama de Flujo

 

ejercicios resueltos Python 1Eva_IT2012_T1 pdf

s2Eva_IIT2011_T4 Inscripción universitaria SNNA

Ejercicio: 2Eva_IIT2011_T4 Inscripción universitaria SNNA

Propuesta de solución en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IIT2011_T4 Inscripción universitaria SNNA
# propuesta: edelros@espol.edu.ec
import numpy as np

codprovincia = ['Guayas','Manabi']

opcion = '0'
postulante = []
while not(opcion=='7'):
    print('1. Registrar Postulante')
    print('2. Grabar archivo de datos')
    print('3. Abrir archivo de datos')
    print('4. Consulta Día de prueba')
    print('5. Postulantes por provincia')
    print('6. Postulantes por carrera')
    print('7. Salir')

    opcion = input('opcion: ')

    if opcion=='1':
        print('  -- 1. Registrar Postulante')
        cedu = input('cédula: ')
        nomb = input('nombre: ')
        naci = int(input('año nacimiento: '))
        while not(naci>1950):
            print('Su año de nacimiento debe ser >1950')
            naci = int(input('año nacimiento: '))
        prov = input('provincia: ')
        carr = input('carrera: ')

        registro = {'cedula':cedu,
                    'nombre':nomb,
                    'nacimiento':naci,
                    'provincia':prov,
                    'carrera':carr}
        postulante.append(registro)

        print(postulante)
        
    if opcion=='2':
        print('  -- 2. Grabar archivo de datos')
        narchivo = input('nombre del archivo: ')
        narchivo = narchivo + '.txt'

        archivo = open(narchivo,'w')
        n = len(postulante)
        fila = 0
        while not(fila>=n):
            cedu = postulante[fila]['cedula']
            nomb = postulante[fila]['nombre']
            naci = postulante[fila]['nacimiento']
            prov = postulante[fila]['provincia']
            carr = postulante[fila]['carrera']
            linea = cedu+','+nomb+','+str(naci)
            linea = linea +','+prov+','+carr+'\n'
            archivo.write(linea)
            fila = fila +1
            
        archivo.close()

    if opcion=='3':
        print('  -- 3. Abrir archivo de datos')
        narchivo = input('nombre del archivo: ')
        narchivo = narchivo + '.txt'

        postulante = []
        archivo = open(narchivo,'r')
        linea = archivo.readline()
        while not(linea==''):
            linea  = linea.strip('\n')
            partes = linea.split(',')
            cedu = partes[0]
            nomb = partes[1]
            naci = partes[2]
            prov = partes[3]
            carr = partes[4]
            registro = {'cedula':cedu,
                        'nombre':nomb,
                        'nacimiento':naci,
                        'provincia':prov,
                        'carrera':carr}
            postulante.append(registro) 
            linea = archivo.readline()
        archivo.close()
        n = len(postulante)
        print('registros leidos: ',n)

    if opcion=='4':
        print('  -- 4. Consulta Día de prueba')
        cedu = input('cedula: ')
        diaprueba ='No hay dia para ese digito\n'
        n = len(cedu)
        digito = cedu[n-2]
        if (digito =='1' or digito=='2'):
            diaprueba = 'LUNES'
        if (digito =='3' or digito=='4'):
            diaprueba = 'MARTES'

        print('el dia de su prueba es: ')
        print(digito,diaprueba)

    if opcion == '5':
        print('cuenta postulantes por provincia')
        n = len(postulante)
        m = len(codprovincia)
        contadores = np.zeros(m,dtype=int)
        i = 0
        while not(i>=n):
            origen = postulante[i]['provincia']
            indice = codprovincia.index(origen)
            contadores[indice] = contadores[indice]+1 
            i = i+1

        print(contadores)

    if opcion=='7':
        print('gracias, @espol.edu.ec')

s2Eva_IIT2011_T2 Ubicar ficha en tablero

Ejercicio: 2Eva_IIT2011_T2 Ubicar ficha en tablero

Resultado obtenido

>>> ubicaficha(6,8)
array([[0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 5, 0, 3, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 7, 0, 4, 0],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 6, 0, 0, 0, 0, 0],
       [0, 0, 2, 0, 0, 0, 0, 0]])
>>> 

Instrucciones en Python

# 2Eva_IIT2011_T2 Ubicar ficha en tablero
import numpy as np
import random as rnd

def ubicaficha(m,n):
    campo = np.zeros(shape=(n,n),dtype=int)
    
    bomba = 2
    while not(bomba>m+1):
        fila = int(rnd.random()*n)+0
        columna = int(rnd.random()*n)+0
        
        if (campo[fila,columna] == 0):
            campo[fila,columna] = bomba
            bomba = bomba + 1
            
    return(campo)

s2Eva_IIT2011_T1 Algoritmo de Euclides MCD

Ejercicio: 2Eva_IIT2011_T1 Algoritmo de Euclides MCD

El resultado esperado para una prueba de escritorio es:

>>> mcd_euclides(15,6)
a:  15 b:  6 residuo: 3
a:  6 b:  3 residuo: 0
3
>>> mcd_euclides(72,16)
a:  72 b:  16 residuo: 8
a:  16 b:  8 residuo: 0
8
>>> 

Instrucciones en Python

# 2Eva_IIT2011_T1 Algoritmo de Euclides MCD

def mcd_euclides(x,y):
    b = min([x,y])
    a = max([x,y])
    if b==0:
        mcd = a
    else:
        residuo = a%b
        print('a: ',a,'b: ',b,'residuo:',residuo)
        mcd = mcd_euclides(b,residuo)
        
    return(mcd)

s1Eva_IIT2011_T3 Parchis 2 fichas

Ejercicio: 1Eva_IIT2011_T3 Parchis 2 fichas

Propuesta de solución en Python

Por simplicidad, inicie solo con un jugador. Lanza el un dado para el primer jugador y avanza la posición tantas veces sea necesario hasta que llegue a la meta.

a=0
dado = int(rnd.random()*6)+1
a = a + dado

Luego incorpore al segundo jugador y observe las posiciones de cada uno hasta que llegue uno de ellos a la meta para seleccionar al ganador.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2011_T3 Parchis 2 fichas
# Tarea: implementar la selección de inicio
import random as rnd

# INGRESO
meta = 50

# PROCEDIMIENTO
a=0
b=0
while not(a>=meta or b>=meta):

    dado = int(rnd.random()*6)+1
    a = a + dado
    if (a==b):
        b = 0

    dado = int(rnd.random()*6)+1
    b = b + dado
    if (b==a):
        a = 0

if (a>=50):
    gana = 1
else:
    gana = 2

# SALIDA
print('ganador: ')
print(gana)

s2Eva_IT2011_T4 Números Romanos a Decimal

Ejercicio: 2Eva_IT2011_T4 Números Romanos a decimal

Par convertir un número decimal a un número romano, se usa equivalencias entre la cadena “romano” y la lista “decimal”, ambas son del mismo tamaño para tener una relación uno a uno.

romano  = 'IVXLCDM'
decimal = [1,5,10,50,100,500,1000]

Por ejemplo «X» de número romano tiene índice 2 en la cadena «romano«, con el índice se busca el equivalente en la lista «decimal» y se obtiene el valor de 10. Ase de traduce cada letra del número romano y se almacena en una nueva lista de resultado, denominada «equivale«.

Ejemplos:
Romano: CLXIII C L X I I I
Decimal: 163 +100 +50 +10 +1 +1 +1
Romano: CXLIX C X L I X
Decimal: 149 +100 -10 +50 -1 +10

Antes de acumular los valores de equivale, se revisa cada valor de decimal, si el valor posterior a cada posición o índice resulta que es mayor, la operación es de tipo resta.

Finalmente, con los signos incluidos, se acumulan los valores de la lista de equivalentes para mostrar el valor en decimal.

Tarea: Implementar la tercera regla, que no se repita una letra más de tres veces.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IT2011_T4 Números Romanos a Decimal
# propuesta: edelros@espol.edu.ec

# INGRESO
cadena = input('numero en romano: ')

# PROCEDIMIENTO
romano  = 'IVXLCDM'
decimal = [1,5,10,50,100,500,1000]
cadena  = cadena.upper()
n = len(cadena)

#cambia a equivalentes decimales
equivale = []
i = 0
while (i<n):

    #busca en romano
    j = 0
    while (j<7):
        if (cadena[i]==romano[j]):
            equivale.append(decimal[j])
        j = j + 1
    i = i + 1
    
#Revisa signos y acumula
suma = 0
i = 0
while (i<(n-1)):
    if (equivale[i]<equivale[i+1]):
        equivale[i] = -equivale[i]
    suma = suma + equivale[i]
    i = i + 1
suma = suma + equivale[n-1]

print(suma)

ejercicios resueltos Python 2eva_it2011_t4 pdf

ejercicios resueltos Matlab 2eva_it2011_t4 pdf

s1Eva_IT2011_T3 Calcular ventas por región

Ejercicio: 1Eva_IT2011_T3 Calcular ventas por región

Propuesta de solución en Python. Revise también la version en matlab en pdf

Como referencia para la solución se usa el gráfico, o la animación

Solicitar la cantidad de vendedores a participar, registrar los montos vendidos por cada vendedor y sortearlas regiones asignadas.

También es posible hacer primero el sorteo y luego pedir los montos vendidos, pero dado que no se pide mostrar las asignaciones, el orden de los bloques no afecta el resultado.

Utilizar acumuladores para los montos de cada región. Mostrar los resultados.

Tarea: Cambiarel algoritmo utilizando un vector para los acumuladores de montos por región.

Se presenta la solución por partes por didáctica:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2011_T3 Calcular ventas por región
import random as rnd
import numpy as np

# parte 1) sorteo de regiones a cada vendedor

# INGRESO
n = int(input('cuantos vendedores: '))

# PROCEDIMIENTO
region = np.zeros(n, dtype = int)
monto = np.zeros(n, dtype = float)

vendedor = 0
while not(vendedor>=n):
    donde = int(rnd.random()*4)+1
    region[vendedor] = donde
    vendedor = vendedor + 1

# parte 2) calcular montos de venta

# INGRESO DE VENTAS
vendedor = 0
while not(vendedor>=n):
    print('monto['+str(vendedor)+']: ')
    monto[vendedor] = float(input(''))
    vendedor = vendedor+1

# Total de ventas por mes
total = 0
vendedor = 0
while not(vendedor>=n):
    total = total + monto[vendedor]
    vendedor = vendedor+1

# ventas en region costa
totalcosta = 0
vendedor = 0
while not(vendedor>=n):
    if (region[vendedor]==1):
        totalcosta = totalcosta + monto[vendedor]
    vendedor = vendedor+1

# totales en vector totalregion
totalregion = np.zeros(4+1, dtype = float)
vendedor = 0
while not(vendedor>=n):
    donde  = region[vendedor]
    cuanto = monto[vendedor]
    totalregion[donde] = totalregion[donde] + cuanto
    vendedor = vendedor+1
    
# SALIDA
print('region asignada: ', region)
print('monto de cada vendedor: ', monto)
print('total de ventas por mes: ', total)
print('total de ventas en la costa', totalcosta)
print('total por regiones:  ', totalregion)

Tarea: De ser posible, reorganizar como un solo algoritmo.


Diagrama de Flujo

ejercicios resueltos Matlab 1eva_it2011_t3 pdf

s1Eva_IT2011_T2 Subasta Inversa

Ejercicio: 1Eva_IT2011_T2 Subasta Inversa

Solución propuesta en Archivo matlab en pdf

Propuesta de Solución: Solicitar los datos de las ofertas por vendedor en un vector oferta(i).

Use el “algoritmo del menor” para determinar al vendedor con menor valor de oferta.

Identificado el vendedor menor, contar cuántos igualan la mejor oferta.

Si el contador es mayor que 1, sortear entre los vendedores hasta que el sorteo recaiga en un vendedor que si cumpla.

Mostrar los resultados

Tarea: convertir a instrucciones Python el siguiente diagrama de flujo:

 

 

ejercicios resueltos Matlab 1eva_it2011_t2 pdf

s1Eva_IT2011_T1 Ahorros de Juan vs Pedro

Ejercicio: 1Eva_IT2011_T1 Ahorros de Juan vs Pedro

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

Ingresar los datos para cada depositante en variables separadas.

Luego, calcular por cada año los saldos para cada depositante, repitiendo hasta que se cumpla la condición que Juan tenga más dinero que Pedro.

La variable “año” es un contador simple que inicia en cero, en finanzas significa el momento en que se deposita.

Cuando termina el año completo se considera incrementado en 1.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2011_T1 Ahorros de Juan vs Pedro
# Propuesta: edelros@espol.edu.ec

# INGRESO
ca = float(input('Banco A - Capital Inicial:   '))
ra = float(input('Banco A - Tasa Interés Anual:'))
cb = float(input('Banco B - Capital Inicial:   '))
rb = float(input('Banco B - Tasa Interés Anual:'))

# PROCEDIMIENTO
anio = 0
sa = ca
sb = cb

while (sa<=sb):
    anio = anio + 1
    sa   = ca*((1+ra)**anio)
    sb   = cb*((1+rb)**anio)

# SALIDA
print('años transcurridos: ', anio)

Resultado del algoritmo

Banco A - Capital Inicial:   100
Banco A - Tasa Interés Anual:0.065
Banco B - Capital Inicial:   120
Banco B - Tasa Interés Anual:0.055
años transcurridos:  20
>>> 
Banco A - Capital Inicial:   100
Banco A - Tasa Interés Anual:0.067
Banco B - Capital Inicial:   120
Banco B - Tasa Interés Anual:0.055
años transcurridos:  17
>>> 

Diagrama de Flujo Mientras-Repita

Ahorros de Juan vs Pedro 01

Diagrama de Flujo Repita-Hasta

Ahorros de Juan vs Pedro 02

ejercicios resueltos Python 1eva_it2011_t1 pdf

ejercicios resueltos Matlab 1eva_it2011_t1 pdf