Autor: Edison Del Rosario

  • 2Eva_IIT2012_T2 Cifrado César

    2da Evaluación II Término 2012-2013, Enero 29, 2013 /ICM00794

    Tema 2 (30 puntos) Dice la historia que la criptografía fue utilizada por los gobiernos para comunicaciones secretas durante las campañas militares. encriptacinturon

    En el siglo I A.C., Julio César usó un algoritmo que consistía en desplazar tres espacios hacia la derecha las letras del texto siguiendo el orden alfabético.

    Realice una función cifradocesar (mensaje, llave) que usa una variante del método descrito para cifrar el mensaje, desplazando cada letra del mensaje en el alfabeto las posiciones que indique la “llave”. Con el resultado, el mensaje original no es reconocido a menos que se use el valor negativo de la “llave”.

    Considerar que siguiente posición de la letra “Z” será la “A”, y la anterior a la letra “A” será la “Z”.

    Ejemplo:
    >> mensaje=’HOLA’ , llave=+3;
    >> cifradocesar(mensaje,llave)
     ans=KROD
    >> mensaje=’KROD’ , llave =-3;
    >> cifradocesar(mensaje,llave)
     ans=HOLA

    Rúbrica: definición de función (5 puntos), posición letra en alfabeto (7 puntos), desplazamiento (10 puntos), desplazamiento negativo (8 puntos)

    Referencia: Cifrado César, http://es.wikipedia.org/wiki/Cifrado_C%C3%A9sar

  • 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 del algoritmo

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

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

  • 2Eva_IIT2012_T1 Recursiva Multi

    2da Evaluación II Término 2012-2013, Enero 29, 2013 /ICM00794

    Tema 1 (20 puntos). La siguiente definición recursiva permite calcular la multiplicación de dos números enteros no negativos.

    multi(p,q) = \begin{cases} 0, & q=0\\ p+multi(p,q-1), & q>0\end{cases}
    • Escriba una función recursiva multi(p,q).
    • Desarrolle una prueba de escritorio para multi(3,5)

    Rúbrica: literal a (15 puntos), literal b (5 puntos)

  • s2Eva_IIT2012_T1 Recursiva Multi

    Ejercicio: 2Eva_IIT2012_T1 Recursiva Multi

    Resultado esperado

    >>> multi(3,5)
    15
    >>> multi(7,8)
    56
    >>> 
    

    Algoritmo en Python

    # 2Eva_IIT2012_T1 Recursiva Multi
    
    def multi(p,q):
        if q == 0:
            z = 0
        if q>0 :
            z = p + multi(p,q-1)
        return(z)
    
  • 2Eva_IT2012_T4 Afiliados a partidos

    2da Evaluación I Término 2012, Agosto 28, 2012 /ICM00794

    Tema 4. (30 puntos) El Consejo Nacional Electoral requiere de un programa que permita administrar los datos de registros de los afiliados a partidos y movimientos políticos, presentados al inicio para un proceso electoral.
    Los datos disponibles se encuentran listados en dos tablas de datos como las siguientes:

    Tabla 1. Padrón Electoral
    Cédula Nombre
    0123456789 MARIA RODRIGUEZ
    0234567891 JUAN PEREZ
    0345678923 JOSE PARRA
    ... ...
    Tabla 2. Ficha de afiliación a partidos
    Cédula Nombre Partido Estado
    0234567891 JUAN PEREZ 7 1
    0123456789 MARIA RODRIGUEZ 9 3
    0123456789 MARIA RODRIGUEZ 4 3
    ... ... ... ...

    El programa debe permitir el ingreso de las tablas (1 y 2), luego validar y registrar el Estado final conforme a los criterios mostrados en la tabla 3.

    Para revisar cada registro por cada criterio, solo se validaran los registros con Estado “1”,
    Si luego de revisar y validar, el Estado del registro se mantiene en “1”, éste se considera válido.
    Al final presente una tabla de “Resultado” que liste cuántos registros por estado tiene cada partido.

    Tabla 3. Criterios
    Estado Descripción
    1 Aceptado al inicio como válido, sin revisar “errores”
    2 No empadronado.- La cédula de la ficha no se encuentra en el padrón
    3 Afiliación duplicada.- El registro de cédula en la ficha se encuentra más de una vez
    4 Nombres errados.- por no coincidir entre la ficha y el padrón
    Resultado Estado
    Partido 1 2 3 4
    1
    2
    3 .... .... .... ....

    Nota: para comparar cadenas de caracteres, puede usar la función strcmp(cadenaA, cadenaB)
    Referencia: “El sistema del CNE permitió la confusión de identidades”, 6 –Agosto-2012, www.expreso.ec

    Rúbrica. Ingreso con estructura de datos (5 puntos), validar empadronados (5 puntos), validar duplicados (5 puntos), validar nombres (5 puntos), Contador de registros por estado (5 puntos), Algoritmo estructurado (5 puntos)

  • 2Eva_IT2012_T3 Consumo de tinta y negativo de foto

    2da Evaluación I Término 2012, Agosto 28, 2012 /ICM00794

    Tema 3. (25 puntos). En los contextos de fotografía digital, una imagen puede ser representada en una escala de grises, corresponden a un conjunto de colores en tonalidades entre el blanco y negro.

    Se emplean 8 bits para representar cada píxel lo que sólo permite una escala con 256 intensidades o escalas de gris [0,255].

    a) Realice una función totaltinta(matriz) que para una imagen representada en una matriz de nxm, muestre el equivalente numérico de las unidades de tinta a consumir en la imagen.

    Suponga que en una impresora de inyección de tinta, el consumo de tinta corresponde al número escrito en la casilla de la matriz escala de gris.

    matriz
    30 30 30 0 0
    30 30 30 0 0
    170 170 30 30 0
    80 80 170 30 30
    80 80 80 170 170
    >>totaltinta(matriz)
     ans=1550

    b) Realice una función imgnegativa(matriz) que cambie la imagen a negativo, invirtiendo los valores en la escala [0,255] que contiene cada pixel (casilla). Tal como se muestra en el ejemplo.

    imgnegativa(matriz)
    225 225 225 255 255
    225 225 225 255 255
    85 85 225 225 255
    175 175 85 225 225
    175 175 175 85 85

    Referencia: http://es.wikipedia.org/wiki/Escala_de_grises

    Rúbrica: definición de funciones (5 puntos), literal a (10 puntos), literal b (10 puntos)

  • 2Eva_IT2012_T2 Número de tecla en cifrado musical con Python

    2da Evaluación I Término 2012, Agosto 28, 2012 /ICM00794

    Tema 2. (25 puntos) El cifrado musical americano deriva de la notación griega que nombraba las notas musicales desde la letra alfa hasta la gamma; piano octava numera tecla

    siendo alfa la nota “la” actual y gamma la nota “sol“ actual, tal como se muestra en el teclado del piano en la figura.

    Realice una función teclanum(canción), que permita recibir una canción en cifrado americano mediante una cadena de caracteres, y la transforme en un arreglo que represente el número de la tecla a ser usada en secuencia.

    Ejemplo:
    >> cancion = 'EFGGFEDCCDEED'
    >> teclanum(cancion) 
    ans= 5 6 8 8 6 5 3 1 1 3 5 5 3

    Nota: Considere un arreglo de letras y símbolos ordenados por posición, al implementar # observe que le añade una posición (+1) a la tecla anterior.

    Referencia: http://es.wikipedia.org/wiki/Cifrado_ingl%C3%A9s ,
    http://www.bgfl.org/custom/resources_ftp/client_ftp/ ks2/music/piano/index.htm

    Rúbrica: Definición de función (5 puntos), selección de numero de tecla (10 puntos), determinar tecla con dos caracteres (10 puntos)

  • 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

    Algoritmo en Python

    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)
    
  • 2Eva_IT2012_T1 BAnd y BOr lógicas

    2da Evaluación I Término 2012, Agosto 28, 2012 /ICM00794

    Tema 1 (20 puntos)
    a) Escriba las funciones denominadas:
    band(A,B), que devuelve resultado “A∧B” entre 2 variables enteras y otra función
    bor(A,B) que devuelve el “A∨B” entre 2 variables enteras.
    Ambas funciones retornan 1 si es verdadero y 0 si es falso, deben validar los datos de A y B, de existir un error devuelven -1.

    b) Escriba un programa que solicite valores para las variables A, B y C, usando las funciones anteriores evalúe las siguientes ecuaciones:

    X = (A ∨ B) ∧ (A ∧ C)
    Y = (A ∧ B) ∨ (B ∧ C)
    Z = A ∨ (A ∧ B)
    W = C ∧ (A ∨ B)

    Rúbrica: funciones band (5 puntos), bor (5 puntos), Programa estructurado y uso de funciones creadas en operaciones (10 puntos)

  • 2Eva_IIT2011_T4 Inscripción universitaria SNNA

    2da Evaluación II Término 2011-2012, Enero 31, 2012 /ICM00794

    Tema 4. (40 puntos) Realice un programa para gestionar el proceso de inscripción como postulante universitario en el “Sistema Nacional de Nivelación y Administración” (SNNA), donde se deben registrar los datos y gestionar el proceso de acuerdo al siguiente menú:

    1. Registrar Postulante. – Ingresando los datos del postulante: Cedula, Nombre, Año Nacimiento, Provincia, Carrera a la que se postula.
    2. Consulta Día de prueba.- Ingresa la cédula y le muestra el día conforme al penúltimo dígito: 1 y 2 lunes, 3 y 4 Martes, 5 y 6 Miércoles, 7 y 8 Jueves, 9 y 0 Viernes.
    3. Postulantes por provincia.- Muestra la cantidad de postulantes por cada provincia (24 en Ecuador).
    4. Postulantes por carrera.- Muestra la cantidad de postulantes por carrera (considerar solo 5).
    5. Salir

    Nota: Las provincias se podrían registrar por numero, ejemplo: 1 (Guayas), 2 (Manabí), 3 (Los Rios), etc. De la misma forma se podría proceder con las carreras, ejemplo: 1 (Ingeniería) 2 (Medicina) 3 (Leyes), etc.
    Referencia: “Con problemas en sitio web se inicia registro de ingreso a universidades” www.eluniverso.com - 13.Enero.2011

    Rúbrica: Menú (5 puntos), definición y uso de estructura datos (5 puntos), caso 1 (5 puntos), caso 2 (10 puntos), caso 3 mostrando tabla (10 puntos), caso 4 mostrando tabla (5 puntos)