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

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

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)