s2Eva_IIT2012_T2 Cifrado César

Ejercicio: 2Eva_IIT2012_T2 Cifrado César

El ejercicio se desarrolla primero con el ejemplo del enunciado, con mensaje=’HOLA’ y llave=’3′.

Luego de resuelto el ejemplo se incorporan las situaciones de desplazamientos de posiciones en los extremos y la forma de función del algoritmo.

Ejemplo de ejecución

>>> cifradocesar('hola',3)
'KROD'
>>> cifradocesar('HoLa',3)
'KROD'
>>>

Instrucciones Python

# 2Eva_IIT2012_T2 Cifrado César
# propuesta: edelros@espol.edu.ec

### INGRESO
##mensaje = input('mensaje: ')
##llave   = int(input('llave: '))

# PROCEDIMIENTO
def cifradocesar(mensaje,llave):
    alfabeto = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    m = len(alfabeto)

    # mensaje en mayusculas
    mensaje = mensaje.upper()
    t = len(mensaje)

    # crear resultado desde primera letra
    resultado = ''
    i = 0
    while i<t:
        
        letra = mensaje[i]
        # buscar letra en alfabeto
        encontre = -1
        j = 0
        while j<m and encontre<0:
            if letra==alfabeto[j]:
                encontre = j
            j = j + 1
            
        # cifrado Cesar
        nueva = encontre + llave
        if nueva>m:
            nueva = nueva - m
        if nueva<0:
            nueva = nueva + m
        cifrado = alfabeto[nueva]
        resultado = resultado + cifrado
        i = i + 1
    return(resultado)

### SALIDA
##print('cifrado César: ',resultado)

Tarea: En el caso que el mensaje tiene un caracter espacio ' ' o ',' es decir un caracter que no está en el alfabeto, éste no se reemplaza. De no implementarse se muestra un error en la codificación, mostrado en rojo en el ejemplo.

>>> cifradocesar('hola,hola',3)
'KRODCKROD'
>>> 

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

ejercicios resueltos Python 2eva_iit2012_t2 pdf

ejercicios resueltos Matlab 2eva_iit2012_t2 pdf

s2Eva_IT2012_T2 Número de tecla en cifrado musical con Python

Ejercicio: 2Eva_IT2012_T2 Tecla de cifrado musical americano

explicación en video

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IT2012_T2 Tecla de cifrado musical americano
# Tarea: implementar sostenido '#'
#        validar que # aplica

def teclanum(cancion):
    n = len(cancion)
    teclado = ' C#D#EF#G#A#B'
    secuencia = '' 
    i = 0
    while not(i>=n):
        tecla = cancion[i]
        if (tecla!='#'):
            cual = teclado.find(tecla)
            sigue = ''
            if (i<(n-1)):
                sigue = cancion[i+1]
            if (sigue=='#'):
                cual = cual+1
            secuencia = secuencia + str(cual) + ' '
        i = i + 1
    return(secuencia)

# Programa de prueba
cancion = 'EFGGFEDCCDEED'
numeros = teclanum(cancion)
print(numeros)

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)

s2Eva_IT2011_T4 Números Romanos a Decimal

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

Para resolver el problema, use como referencia la cadena “romano” y el arreglo “decimal” para buscar los valoras equivalentes y ponerlos en un arreglo del mismo tamaño que la cadena. Luego revisa el signo y acumula los valores del arreglo 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

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)

s2Eva_IIT2010_T1 Juego con fichas rojas y azules

Ejercicio: 2Eva_IIT2010_T1 Juego con fichas rojas y azules

literal a

usar la posición relativa para determinar el valor de potencia de 10 para acumular el total al recorrer la cadena.

intercambiar a: 1
 con b: 3
cadena inicial:  RRRAR
puntos vasos sin mover:  30
cadena nueva:  RRRAR
puntos vasos movidos:  30
>>> 
 RESTART: D:/CCPG1001Ejemplos/fichasrojasazules.py 
intercambiar a: 2
 con b: 4
cadena inicial:  RRRAR
puntos vasos sin mover:  30
cadena nueva:  RARRR
puntos vasos movidos:  3000
>>> 

literal b

desarrollado hasta intercambiar caracteres entre las posiciones a,b

Tarea: realizar varias «rondas»

Instrucciones Python

# 2Eva_IIT2010_T1 Juego con fichas rojas y azules
import random as rnd

# literal a
def puntos(cadena,valor):
    n = len(cadena)
    total = 0
    for i in range(0,n,1):
        base = 10**(n-1-i)
        if cadena[i]=='A':
            total = total + valor*base
        if cadena[i]=='R':
            total = total + 0*base
    return(total)

# literal b
def intercambia(cadena,a,b):
    n = len(cadena)
    orden = []
    for i in range(0,n,1):
        orden.append(i)
    orden[a-1] = b-1
    orden[b-1] = a-1
    nueva = ''
    for i in range(0,n,1):
        posicion = orden[i]
        nueva = nueva + cadena[posicion]
    return(nueva)

# INGRESO
a = int(input('intercambiar a: '))
b = int(input(' con b: '))

n = 5 # cantidad de vasos

# PROCEDIMIENTO
dado = int(rnd.random()*6)+1
cadena = ''
for i in range(0,n,1):
    if i == dado:
        cadena = cadena + 'A'
    else:
        cadena = cadena + 'R'

equivale = puntos(cadena,dado)

nueva = intercambia(cadena,a,b)
equivale2 = puntos(nueva,dado)

# SALIDA
print('cadena inicial: ',cadena)
print('puntos vasos sin mover: ',equivale)
print('cadena nueva: ',nueva)
print('puntos vasos movidos: ',equivale2)