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

 

s2Eva_IIT2010_T3 Validar registro de revocatoria en CNE

Ejercicio: 2Eva_IIT2010_T3 Validar registro de revocatoria en CNE

propuesta de solución en Python, contiene tarea.

Ejemplo:

cuantos ciudadanos en padrón: 5
cédula : 3
cédula : 2
cédula : 1
cédula : 4
cédula : 5
cuantos se quejan: 3
cedula: 2
cedula: 2
cedula: 3
los que si votan son: 2
[2 3]
>>> 

Instrucciones:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IIT2010_T3 Validar registro de revocatoria en CNE
# Tema 2. Mostrar valores únicos en vector
# Tema 3. Validar registro de revocatoria en CNE

import numpy as np

def unicos(vector):
    n = len(vector)
    vale = np.ones(n, dtype= int)
    i = 0
    while not(i>=(n-1)): #penultimo
        j = i + 1
        while not(j>=n): # ultimo
            if (vector[i] == vector[j]):
                vale[j] = 0
            j = j + 1
        i = i + 1

    # obtiene los únicos
    sinrepetir =[]
    i = 0
    while not(i>=n):
        if (vale[i] == 1):
            sinrepetir.append(vector[i])
        i= i+1
    sinrepetir = np.array(sinrepetir)
    return(sinrepetir)

def registrados(padron,unicos):
    n = len(padron)
    m = len(unicos)

    vale = np.ones(m,dtype=int)
    sivotan = []
    i = 0
    while not(i>=m):
        if not(unicos[i] in padron):
            vale[i] = 0
        if (unicos[i] in padron):
            sivotan.append(unicos[i])
        i = i+1
    sivotan = np.array(sivotan)
    return(sivotan)

# PROGRAMA QUE USA LAS FUNCIONES

# INGRESO
n = int(input('cuantos ciudadanos en padrón: '))
padron = []
i = 0
while not(i>=n):
    cedula = int(input('cédula : '))
    padron.append(cedula)
    i = i + 1

m = int(input('cuantos se quejan: '))
sequejan =[]
j = 0
while not(j>=m):
    cedula = int(input('cedula: '))
    sequejan.append(cedula)
    j = j + 1

# PROCEDIMIENTO
sinrepetir = unicos(sequejan)
sivotan = registrados(padron,sinrepetir)
k = len(sivotan)

# Tarea: Verificar si llegan al 10% del padrón

# SALIDA
print('los que si votan son:',k)
print(sivotan)

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]
>>>

Instrucciones 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)