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

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

Instrucciones 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 condidera que use las funciones de cada tópico de algebra 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.

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

# 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[c]
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:

# 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

# 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

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

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

s2Eva_IT2008_T2 Validar cédula ecuatoriana

Ejercicio: 2Eva_IT2008_T2 Validar cédula ecuatoriana

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

Resultado del algoritmo

>>> vcedula('0909407173')
1
>>> vcedula('0909407174')
0
>>> 

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IT2008_T2 Validar cédula ecuatoriana
# Propuesta de solución: edelros@espol.edu.ec

def vcedula(texto):
    # sin ceros a la izquierda
    nocero = texto.strip("0")
    
    cedula = int(nocero,0)
    verificador = cedula%10
    numero = cedula//10
    
    # mientras tenga números
    suma = 0
    while (numero > 0):
        
        # posición impar
        posimpar = numero%10
        numero   = numero//10
        posimpar = 2*posimpar
        if (posimpar  > 9):
            posimpar = posimpar-9
        
        # posición par
        pospar = numero%10
        numero = numero//10
        
        suma = suma + posimpar + pospar
    
    decenasup = suma//10 + 1
    calculado = decenasup*10 - suma
    if (calculado  >= 10):
        calculado = calculado - 10

    if (calculado == verificador):
        validado = 1
    else:
        validado = 0
        
    return (validado)

ejercicios resueltos Python 2eva_it2008_t2 pdf

ejercicios resueltos Matlab 2eva_it2008_t2 pdf

s2Eva_IIT2007_T4 Fibonacci recursiva

Ejercicio: 2Eva_IIT2007_T4 Fibonacci recursiva

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

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IIT2007_T4 Fibonacci recursiva
# Propuesta: edelros@espol.edu.ec

def fibo(i):
    if (i==1) or (i==2):
        z = 1
    if i>2:
        z = fibo(i-1)+fibo(i-2)
    return (z)

# PROGRAMA

# INGRESO
m = int(input('valor acumulado?:'))

# PROCEDIMIENTO
s = 0
i = 1
while (s<=m):
    s = s + fibo(i)
    i = i + 1

# SALIDA
print('total de terminos:', i)
print('total acumulado:', s)

resultado del algoritmo

valor acumulado?:50
total de terminos: 9
total acumulado: 54
>>> 
valor acumulado?:60
total de terminos: 10
total acumulado: 88
>>> 

ejercicios resueltos Python 2eva_iit2007_t4 pdf

ejercicios resueltos Matlab 2eva_iit2007_t4 pdf

s2Eva_IIT2007_T2 Juego de memotest

Ejercicio: 2Eva_IIT2007_T2 Juego de memotest

Video Tutorial:

Instrucciones en Python

# 2Eva_IIT2007_T2 Juego de memotest
# propuesta: edelros@espol.edu.ec
import numpy as np
import random as rnd

def tableroparejas(n):
    fichasunicas = (n*n)//2
    tablero = np.zeros(shape=(n,n),dtype =int)

    i = 1
    while i<=fichasunicas:
        f1 = int(rnd.random()*n)+0
        c1 = int(rnd.random()*n)+0
        while not(tablero[f1,c1]==0):
            f1 = int(rnd.random()*n)+0
            c1 = int(rnd.random()*n)+0
        tablero[f1,c1] = i
        f2 = int(rnd.random()*n)+0
        c2 = int(rnd.random()*n)+0
        while not(tablero[f2,c2]==0):
            f2 = int(rnd.random()*n)+0
            c2 = int(rnd.random()*n)+0
        tablero[f2,c2] = i
        i = i + 1
    return(tablero)

# PROGRAMA
# INGRESO
n = 4

# PROCEDIMIENTO
tablero = tableroparejas(n)
descubiertas = np.zeros(shape=(n,n),dtype=int)
equivocado = 0
encontrado = 0
while (equivocado<3 and encontrado<(n*n)):
    
    print('estado del juego:')
    print(descubiertas)

    f1 = int(input('fila ficha1:'))
    c1 = int(input('columna ficha1:'))
    while not(descubiertas[f1,c1]==0):
        f1 = int(input('fila ficha1:'))
        c1 = int(input('columna ficha1:'))

    f2 = int(input('fila ficha2:'))
    c2 = int(input('columna ficha2:'))
    while not(descubiertas[f2,c2]==0):
        f2 = int(input('fila ficha2:'))
        c2 = int(input('columna ficha2:'))

    ficha1 = tablero[f1,c1]
    ficha2 = tablero[f2,c2]

    if ficha1==ficha2:
        descubiertas[f1,c1] = ficha1
        descubiertas[f2,c2] = ficha2
        encontrado = encontrado + 2
        print('ENCONTRO una pareja..!',ficha1,ficha2)
    else:
        equivocado = equivocado + 1
        print('Las fichas son diferentes: ',ficha1,ficha2)

# SALIDA
print('Solucion del tablero:')
print(tablero)
print('Estado del juego:')
print(descubiertas)
if encontrado==(n*n):
    print(' Muy bien..!! todas las fichas encontradas')
else:
    print('Perdió... se equivoco el máximo de veces...')
    print('fichas descubiertas:', encontrado)

Tarea: Revisar que las coordenadas ingresadas por el jugador se encuentren dentro del tablero.

Resultado del Algoritmo

estado del juego:
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]
fila ficha1:0
columna ficha1:0
fila ficha2:1
columna ficha2:1
Las fichas son diferentes:  4 1
estado del juego:
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]
fila ficha1:0
columna ficha1:0
fila ficha2:2
columna ficha2:2
Las fichas son diferentes:  4 6
estado del juego:
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]
fila ficha1:0
columna ficha1:0
fila ficha2:3
columna ficha2:3
Las fichas son diferentes:  4 2
Solucion del tablero:
[[4 8 3 4]
 [3 1 1 5]
 [6 7 6 7]
 [5 2 8 2]]
Estado del juego:
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]
Perdió... se equivoco el máximo de veces...
fichas descubiertas: 0
>>> 

Algoritmo realizado en diagrama de flujo, Archivo matlab en pdf

 

ejercicios resueltos Matlab 2eva_iit2007_t2 pdf