s1Eva_IT2013_T4 Tabular atención al cliente

Ejercicio: 1Eva_IT2013_T4 Tabular atención al cliente

Para el ejercicio por simplicidad, en el bloque de ingreso se tabula también la «evaluación» del cliente para el servicio en un arreglo

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2013_T4 Tabular atención al cliente
# Tarea: literal c)
#  calcular promedio dentro de procedimiento
#  mostrar clientes con atencion menor al promedio en SALIDA
import numpy as np

# INGRESO
n = int(input('cuantos clientes: '))
atencion = np.zeros(n+1, dtype=int)
cuenta   = np.zeros(6, dtype=int) # de 0 a 5
cliente  = 1
while not(cliente>n):
    pregunta = 'CLIENTE '+str(cliente)+' evalue: '
    nota = int(input(pregunta))
    
    if (nota>=1 and nota<n):
        atencion[cliente] = nota
        cuenta[nota] = cuenta[nota] + 1
    cliente = cliente + 1

# Algoritmo Mayor
mayor = 1  
nota  = 2 
while not(nota>5):
    if (cuenta[nota]>cuenta[mayor]):
        mayor = nota
    nota = nota + 1
    
# SALIDA
print('las evaluaciones fueron: ')
print(cuenta)
print('mayor: ',mayor)
print('evaluacion [mayor]: ',cuenta[mayor])

resultado esperado:

cuantos clientes: 5
CLIENTE 1 evalue: 1
CLIENTE 2 evalue: 1
CLIENTE 3 evalue: 1
CLIENTE 4 evalue: 2
CLIENTE 5 evalue: 2
las evaluaciones fueron: 
[0 3 2 0 0 0]
mayor:  1
evaluacion [mayor]:  3
>>> 

Tarea: literal c,  calcular promedio y seleccionar clientes que presentaron evaluación menor al promedio

s1Eva_IT2013_T1 Primos gemelos

Ejercicio: 1Eva_IT2013_T1 Primos gemelos

Para facilitar el ejercicio, pues no se dispone de una lista de números primos, se inicia generando usa secuencia ordenada de números naturales a partir del 2 hasta el número n donde se desea realizar la observación.

Se simplifica el procedimiento de generar la secuencia usando la función de numpy para generar un rango entre un intervalo [a,b) y dando el incremento: np.arange(a,b,incremento). Siendo un lado del intervalo no incluyente, pues se define con paréntesis, se añade el límite usando n+1.

Sobre la secuencia, se usa un algoritmo de búsqueda de números primos realizado en clase para obtener un vector que tenga solo números primos. Otro ejemplo como repaso, puede revisar el ejercicio de la Criba de Eratóstenes.

La búsqueda de primos gemelos consiste en comparar dos números consecutivo del vector soloprimos. Si la diferencia entre ellos es 2, se econtraron los números buscados. La respuesta se puede dar por medio de un nuevo vector o lista, o semejante al ejercicio de la Criba de Eratóstenes se puede usar un arreglo de banderas.

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2013_T1 Primos gemelos
import numpy as np

# INGRESO
n = int(input('límite n: '))

# PROCEDIMIENTO
# intervalo de búsqueda de números primos
secuencia = np.arange(2,n+1,1)
tamano = len(secuencia)

# supone que todos son primos
cumple = np.ones(tamano, dtype=int)

# revisa cada número de secuencia
posicion = 0
while (posicion<tamano):
    n = secuencia[posicion]
    
    # PROCEDIMIENTO esprimo 
    esprimo = 1
    divisor = 2
    while not(divisor>=n or esprimo==0):
        r = n%divisor
        if (r == 0):
            esprimo = 0
        divisor = divisor + 1
        
    cumple[posicion] = esprimo
    posicion = posicion + 1

cuantos = np.sum(cumple)
soloprimos = np.zeros(cuantos,dtype=int)

# separa solo los primos
posicion = 0
i = 0
while not(posicion>=tamano):
    if (cumple[posicion]==1):
        soloprimos[i] = secuencia[posicion]
        i = i + 1
    posicion = posicion + 1

# SALIDA

# BUSCA GEMELOS
i = 0
while not(i>=(cuantos-1)):
    sigue = i + 1
    diferencia = soloprimos[sigue] - soloprimos[i]
    if (diferencia==2):
        print('pareja gemelo: ')
        print(soloprimos[i],soloprimos[sigue])
    i = i + 1
    
# revisando resultados
print('secuencia: ', secuencia)
print('cumple:    ', cumple)
print('soloprimos:', soloprimos)

resultado del algoritmo

pareja gemelo: 
3 5
pareja gemelo: 
5 7
secuencia  [2 3 4 5 6 7 8 9]
cumple:    [1 1 0 1 0 1 0 0]
soloprimos: [2 3 5 7]
>>> 

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

s1Eva_IIT2012_T2 Número camiseta equipo

Ejercicio: 1Eva_IIT2012_T2 Número camiseta equipo

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

Para el bloque de ingreso usar tres variables: día, mes y año.

Primero realice la suma de los componentes de la fecha para obtener el número de trabajo n.

Se separan los dígitos de n usando el residuo y cociente, acumulando los dígitos en s, repitiendo la operación hasta que no queden más dígitos que separar.

Si el resultado de s tiene más de un dígito, se actualiza el valor de n con s y se repite el proceso anterior para acumular dígitos hasta obtener un resultado de un dígito. Se muestra el resultado “s”.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2012_T2 Número camiseta equipo
# Propuesta: edelros@espol.edu.ec

# INGRESO
dia  = int(input('dia: '))
mes  = int(input('mes: '))
anio = int(input('anio: '))

# PROCEDIMIENTO
n = dia + mes + anio
while (n>=10):
    s = 0
    while (n>0):
        r = n%10
        n = n//10
        s = s + r
    n = s

# SALIDA
print('número buscado es: ')
print(n)

Resultado del Algoritmo

dia: 12
mes: 8
anio: 2000
número buscado es: 
4
>>> 
dia: 25
mes: 12
anio: 2000
número buscado es: 
3
>>> 

Diagrama de Flujo Mientras-Repita

numero camiseta equipo diagrama de flujo

Diagrama de Flujo Repita-Hasta

diagrama de flujo repita-hasta

ejercicios resueltos Python 1eva_iit2012_t2 pdf

ejercicios resueltos Matlab 1eva_iit2012_t2 pdf

s1Eva_IIT2012_T1 Sucesión de Padovan con Python

Ejercicio: 1Eva_IIT2012_T1 Sucesión de Padovan

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

Para este ejercicio se necesitaran 4 variables simpes, a, b y c se inicializan en 1 como indica la secuencia.

1, 1, 1, 2, 2, 3, 4, 5, 7, ...
a, b, c, d
   a, b, c, d
      a, b, c, d

El valor del siguiente término “d” es siempre la suma de a y b.

Se preparan los valores siguientes reemplazando a con b, b con c, y c con d, con el objetivo de poder repetir la operación para el siguiente término.

Un contador de términos “i” permite controlar el número de términos calculados para mostrar solo el requerido.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2012_T1 Sucesión de Padovan
# propuesta: edelros@espol.edu.ec

# INGRESO
n = int(input('cuál término:'))

# PROCEDIMIENTO
a = 1
b = 1
c = 1
i = 3
while (i<n):
    d = a+b
    a = b
    b = c
    c = d
    i = i+1

# SALIDA
print(d)

Resultado del algoritmo

cuál término:5
2
>>>
cuál término:6
3
>>>
cuál término:7
4
>>>

Diagrama de Flujo con Mientras-Repita


Lazo repita-hasta:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2012_T1 Sucesión de Padovan
# propuesta: edelros@espol.edu.ec

# INGRESO
n = int(input('cuál término:'))

# PROCEDIMIENTO
a = 1
b = 1
c = 1
i = 3
while not (i>=n):
    d = a+b
    a = b
    b = c
    c = d
    i = i+1

# SALIDA
print(d)

Diagrama de Flujo con Repita-Hasta

ejercicios resueltos Python 1eva_iit2012_t1 pdf

ejercicios resueltos Matlab 1eva_iit2012_t1 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)

s1Eva_IIT2012_T4 Informe de pasantías

Ejercicio: 1Eva_IIT2012_T4 Informe de pasantías

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

Solicitar los valores de n, m y los datos del arreglo empresa para cada estudiante.

inscripción n
estudiante 1 2 3 4 5
empresa 4 1 4 2 4

Inicializar los contadores de cantidad por empresa en cero e iniciar el proceso de conteo de estudiantes por empresa.

control de inscritos m
empresa 1 2 3 4
cantidad 1 1 0 3
# cuenta pasantes por empresa
cantidad = np.zeros(m+1,dtype=int)
i = 1 
while not(i>n):
    k = empresa[i]
    cantidad[k] = cantidad[k]+1
    i = i + 1

Para el literal a, se usará el algoritmo del mayor para el arreglo de cantidad, para la pregunta b un contador permite registrar cuántas no tienen pasantes.

El promedio es más sencillo de calcular.

Tarea: Validar que los números de empresas ingresadas en rango de[1,m]

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2012_T4 Informe de pasantías
# propuesta: edelros@espol.edu.ec

import numpy as np

# INGRESO
n = int(input('cuántos estudiantes: '))
m = int(input('cuantas empresas: '))

empresa = np.zeros(n+1,dtype=int)
i = 1
while not(i>n):
    empresa[i] = input('registro empresa: ')
    i = i + 1

# PROCEDIMIENTO 

# cuenta pasantes por empresa
cantidad = np.zeros(m+1,dtype=int)
i = 1 
while not(i>n):
    k = empresa[i]
    cantidad[k] = cantidad[k]+1
    i = i + 1

# literal a, empresa con mas pasantes
sinpasante = 0  # literal b
mayor = 1

k = 1
while not(k>m):
    if (cantidad[k]>cantidad[mayor]):
        mayor = k
    if (cantidad[k]==0):
        sinpasante = sinpasante+1
    k = k + 1

# literal c
prm = n/(m-sinpasante)

# SALIDA
print('la empresa con más pasantes es: ', mayor)
print('empresas sin pasante: ', sinpasante)
print('promedio pasantes por empresa: ', prm)

Resultado del algoritmo

cuántos estudiantes:5
cuantas empresas: 4
registro empresa: 2
registro empresa: 1
registro empresa: 3
registro empresa: 2
registro empresa: 4
la empresa con más pasantes es:  2
empresas sin pasante:  0
promedio pasantes por empresa:  1.25
>>> 

Diagrama de Flujo

diagrama de Flujo ejercicio pasantias 01diagrama de Flujo ejercicio pasantias 02

ejercicios resueltos Python 1eva_iit2012_t4 pdf

ejercicios resueltos Matlab 1eva_iit2012_t4 pdf

 

s1Eva_IT2012_T4 Ajustar tarifas eléctricas invierno/verano

Ejercicio: 1Eva_IT2012_T4 Ajustar tarifas eléctricas invierno/verano

Propuesta de solución: Archivo diagrama en pdf


Enfoque solo en la selección de tarifas, considerando la variable para estación verano o invierno


Instrucciones en Python

Condiciones en serie para estación, en árbol para valor de tarifa:

# 1Eva_IT2012_T4 Ajustar tarifas eléctricas invierno/verano

# INGRESO
consumo  = int(input(' consumo:  '))
estacion = int(input(' estacion: '))

# PROCEDIMIENTO
estacion = 1
# condicionales en arbol
if estacion ==1:
    tarifa = 0.04
    if (consumo>130):
        tarifa = 0.08
        if (consumo>500):
            tarifa = 0.11
            if (consumo>700):
                tarifa = 0.16
if estacion ==2:
    tarifa = 0.04
    if (consumo>130):
        tarifa = 0.11
        if (consumo>500):
            tarifa = 0.13
            if (consumo>700):
                tarifa = 0.26
pagar = consumo*tarifa

# SALIDA
print(' pagar:')
print(pagar)

ejercicios resueltos Python 1eva_it2012_t4 pdf

s1Eva_IIT2012_T3 Hundir barco enemigo

Ejercicio: 1Eva_IIT2012_T3 Hundir barco enemigo

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

Ingrese el número de municiones o disparos que se pueden hacer y las coordenadas del barco a hundir.

eje y 5 BarcoPirata
4
3
2
1
canonpirata 1 2 3 4 5 eje x

Indique las coordenadas al punto de disparo y luego calcule el movimiento del barco de forma aleatoria como se indica en el enunciado. Mueva el barco a la nueva posición.

Compare si las coordenadas de disparo y la nueva posición del barco son iguales para confirmar hundimiento.

    if (bx==cx and by==cy):
       hundido = 1

Sino repita la operación desde el inicio de disparo hasta que se acaben las municiones.

while (disparo<n and hundido==0):

Instrucciones Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2012_T3 Hundir barco enemigo
# Propuesta de solución. edelros@espol.edu.ec

import random as rnd

n  = int(input('¿Cuántas municiones?: '))
bx = int(input('Barco ¿Coordenada bx?: '))
by = int(input('Barco ¿Coordenada by?: '))

hundido = 0
disparo = 0

# Juego
while (disparo<n and hundido==0):

    print('\nIntento '+str(disparo+1))
    print('Barco enemigo en ('+str(bx)+','+str(by)+')')
    cx = int(input('Disparo ¿Coordenada cx?: '))
    cy = int(input('Disparo ¿Coordenada cy?: '))

    d = int(rnd.random()*4)+1
    p = int(rnd.random()*3)+1

    if d==1:
        by = by + p
    if d==2:
        by = by - p
    if d==3:
        bx = bx + p
    if d==4:
        bx = bx - p
    if (bx==cx and by==cy):
       hundido = 1

    disparo = disparo+1

    print('Movimiento direccion:',d,
          ' con:',p,'casillas')
    print('Disparados: ',disparo)
    print('   Hundido: ',hundido)

# SALIDA
print('Barco Hundido:', hundido)
print('Disparos realizados:',disparo)

Resultado del algoritmo

¿Cuántas municiones?: 5
Barco ¿Coordenada bx?: 10
Barco ¿Coordenada by?: 10

Intento 1
Barco enemigo en (10,10)
Disparo ¿Coordenada cx?: 10
Disparo ¿Coordenada cy?: 11
Movimiento direccion: 4  con: 1 casillas
Disparados:  1
   Hundido:  0

Intento 2
Barco enemigo en (9,10)
Disparo ¿Coordenada cx?: 9
Disparo ¿Coordenada cy?: 11
Movimiento direccion: 1  con: 1 casillas
Disparados:  2
   Hundido:  1
Barco Hundido: 1
Disparos realizados: 2
>>> 

Diagrama de Flujo

ejercicios resueltos Python 1eva_iit2012_t3 pdf

ejercicios resueltos Matlab 1eva_iit2012_t3 pdf