s3Eva_IT2007_T2 Función para crear Acrónimos

Ejercicio3Eva_IT2007_T2 Función para crear Acrónimos

Propuesta de solución en Python:

Ejemplo:
>>> 
frase:MINISTERIO DE EDUCACIÓN Y CULTURA
MEC
# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2007_T2 Crear Acrónimos
# propuesta: edelros@espol.edu.ec
# Tarea: completar la idea para toda la frase

# INGRESO
frase = input('frase:')

# PROCEDIMIENTO
n = len(frase)

# Convierte frase a MAYUSCULAS
frase = frase.upper()

# inicializa salida z con la primera letra
# de la primera palabra
i = 0
z = frase[i]

# buscar la primera letra de cada palabra
# a partir de la segunda posición
# completar para 'de ' y revisar con 'desarrollo'
i = 1
while not(i>=(n-1)):
    if (frase[i]==' ' and  not(frase[i+1]=='D')):
        if not(frase[i+1]=='Y'):
            z = z + frase[i+1]
    i = i + 1

# SALIDA
print(z)

s3Eva_IIT2007_T2 Verificar matriz Sudoku

Ejercicio: 3Eva_IIT2007_T2 Verificar matriz Sudoku

Propuesta de solución en Python:

En el enunciado puede obtener una matriz para usar en el programa ejemplo.

Simplifique el problema, por ejemplo inicie con el algoritmo para verificar los números sea únicos en un vector, el resultado lo convierte una función únicos(vector). La función únicos() la usa para cada fila, luego para cada columna y finalmente para cada recuadro de 3×3.

Al finalizar, convierta la parte del programa ejemplo en una función verificasudoku(matriz).

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2007_T2 Verificar matriz Sudoku
# Propuesta: edelros@espol.edu.ec
# Tarea por completar: tercera regla recuadros

import numpy as np

# verificar unicos en vector, intervalo [1,9]
def unicos(vector):
    m = len(vector)
    contadores = np.zeros(9+1, dtype = int)

    i = 0
    while not(i>=m):
        numero = vector[i]
        contadores[numero] = contadores[numero] +1
        i = i+1

    # revisa que el contador sea siempre 1
    cumple = 1
    numero = 1
    while not(numero>9 or cumple==0):
        if (contadores[numero] != 1):
            cumple = 0
        numero = numero+1
    return(cumple)

# PROGRAMA -------------------------
# INGRESO
matriz=np.array([[1, 3, 5, 4, 6, 2, 9, 8, 7],
                 [7, 6, 2, 1, 9, 8, 5, 4, 3],
                 [8, 9, 4, 5, 3, 7, 6, 2, 1],
                 [9, 7, 8, 6, 1, 3, 2, 5, 4],
                 [4, 1, 6, 9, 2, 5, 3, 7, 8],
                 [2, 5, 3, 7, 8, 4, 1, 6, 9],
                 [5, 2, 7, 3, 4, 1, 8, 9, 6],
                 [3, 8, 9, 2, 7, 6, 4, 1, 5],
                 [6, 4, 1, 8, 5, 9, 7, 3, 2]])

# PROCEDIMIENTO
essudoku = 1

# verifica por filas
fila = 0
while not(fila>=9 or essudoku==0):

    # Selecciona vector
    vector = matriz[fila,:]

    verifica = unicos(vector)
    if (verifica==0):
        essudoku = 0
    fila = fila+1

# Verifica por columnas
columna = 0
while not(columna>=9 or essudoku==0):

    # Selecciona vector
    vector = matriz[:,columna]

    verifica = unicos(vector)
    if (verifica==0):
        essudoku = 0
    columna = columna+1

# Verifica en cada submatriz de 3x3
fila = 0
columna = 0
submatriz = matriz[fila:fila+3,columna:columna+3]
# convertir submatriz a vector
# aplicar funcion unicos, para verificar essudoku

# SALIDA
print('¿es la matriz sudoku? [0,1]: ')
print(essudoku)

s3Eva_IT2007_T1 Máquina tragamonedas

Ejercicio3Eva_IT2007_T1 Máquina tragamonedas

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

Considere el siguiente algoritmo de introducción al tema, Simplificando el ingreso del número por teclado:

# 3ra Evaluación I Término 2007
# Tema 1. Juego con maquina tragamonedas

# INGRESO
numero = int(input('numero abc:'))

# PROCEDIMIENTO
c = numero%10
numero = numero//10
b = numero%10
numero = numero//10
a = numero

premio = 0
if ((a==b) and (b==c) and(a==c)):
    premio = 20
if ((a==b)and (a!=c)) or ((a==c) and (a!=b)) or ((b==c) and (b!=a)):
    premio = 10

# SALIDA
print(premio)

Luego de revisar el algoritmo: ¿se comprende mejor la necesidad de usar cocientes y residuos? ¿considera viable el uso e este segundo algoritmo?


Algoritmo usando aleatorios sin Cocientes y Residuos

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2007_T1 Máquina tragamonedas
# Propuesta: edelros@espol.edu.ec

import random as rnd

# INGRESO
monedas = int(input(" Cuantas monedas tiene?: "))

# PROCEDIMIENTO
caja = 15
trio = 0
par  = 0

turno = 0 
while (monedas>=5 and caja>=15):
    turno = turno + 1
    monedas = monedas - 5
    caja = caja + 5

    # sorteo de números
    # entero(aleatorio*posibles) + inicio
    a = int(rnd.random()*10) + 0
    b = int(rnd.random()*10) + 0
    c = int(rnd.random()*10) + 0
    
    if (a==b and b==c and c==a):
        caja = caja - 20
        monedas = monedas+20
        trio = trio + 1
    else:
        if (a==b or b==c or c==a):
            caja = caja - 10
            monedas = monedas+10
            par  = par + 1

# SALIDA
print(" Turnos jugados: ", turno)
print(" Trios: ", trio)
print(" Pares: ", par)
print(" monedas jugador: ", monedas)

Ejemplo:

>>> 
 Cuantas monedas tiene?: 25
 Turnos jugados:  1
 Trios:  0
 Pares:  1
 monedas jugador:  30
>>> 
 Cuantas monedas tiene?: 30
 Turnos jugados:  5
 Trios:  0
 Pares:  3
 monedas jugador:  35
>>> 

Presentadas las dos formas de algoritmos, ¿podría presentar una versión mejorada que integre lo mejor de las dos soluciones?


Diagrama de Flujo

diagrama de flujo TragaMonedas 02

ejercicios resueltos Python 3eva_it2007_t1 pdf

ejercicios resueltos Matlab 3eva_it2007_t1 pdf

s3Eva_IIT2007_T1 Depreciación por suma de dígitos

Ejercicio: 3Eva_IIT2007_T1 Depreciación por suma de dígitos

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2007_T1 Depreciación por suma de dígitos
import numpy as np

articulo = input('nombre articulo: ')
anios = int(input('años a depreciar: '))
valor = float(input('valor inicial: '))

# PROCEDIMIENTO
suma = 0
contador = anios
while not(contador<1):
    suma = suma+contador
    contador = contador-1

# vector depreciacion
deprecia = np.zeros(anios+1, dtype=float)
deprecia[0] = 0
contador = anios
fila = 1
while not(contador<1):
    deprecia[fila] = valor*(contador/suma)
    contador = contador-1
    fila = fila+1

actual = np.zeros(anios+1,dtype=float)
fila = 0
actual[0] = valor
fila = 1
while not(fila>anios):
    actual[fila] = actual[fila-1]-deprecia[fila]
    fila = fila+1
    
print(deprecia)
print(' El valor actual por anio es:')

# SALIDA
fila = 0
print(' anio:   valor:')
while not(fila>anios):
    print(str(fila)+' | '+str(actual[fila]))
    fila = fila+1

resultado del algoritmo

nombre articulo: vehiculo
años a depreciar: 5
valor inicial: 10000
[   0.  3333.33333333 2666.66666667  2000.  1333.33333333
  666.66666667]
 El valor actual por anio es:
 anio:   valor:
0 | 10000.0
1 | 6666.666666666667
2 | 4000.0000000000005
3 | 2000.0000000000005
4 | 666.6666666666672
5 | 5.684341886080801e-13
>>> 

s3Eva_IIT2006_T1 Crear usuarios en lista de nombres

Ejercicio: 3Eva_IIT2006_T1 Crear usuarios en lista de nombres

Propuesta de solución en Python:

Ejemplo:
>>> 
cuantos empleados: 3
primer nombre: JUAN
segundo nombre: PEDRO
apellido paterno: RODRIGUEZ
primer nombre: MARIA
segundo nombre: ROSA
apellido paterno: PEREZ
primer nombre: CARLOS
segundo nombre: JOSE
apellido paterno: CASTRO
jprodrig
mrperez
cjcastro

algoritmo en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2006_T1 Crear usuarios en lista de nombres
# propuesta: edelros@espol.edu.ec

def user(nombre1,nombre2,apellidop):
    z = ''
    i = 0
    z = z+nombre1[i]
    z = z+nombre2[i]

    # copiar letras del apellido
    n = len(apellidop)

    # Revisando si no hay suficientes letras en el apellido
    i = 0
    while not(i>=6 or i>=n):
        z = z+apellidop[i]
        i = i+1
    z = z.lower()
    return(z)

# PROGRAMA
m = int(input('cuantos empleados: '))
empleado = []
i = 0
while not(i>=m):
    nombre1 = input('primer nombre: ')
    nombre2 = input('segundo nombre: ')
    apellidop = input('apellido paterno: ')
    registro = {'nombre1':nombre1,'nombre2':nombre2,
              'apellidop':apellidop,'usuario':''}
    empleado.append(registro)
    i = i+1

# PROCEDIMIENTO
i = 0
while not(i>=m):
    a = empleado[i]['nombre1']
    b = empleado[i]['nombre2']
    c = empleado[i]['apellidop']
    z = user(a,b,c)
    empleado[i]['usuario'] = z
    i = i+1

# SALIDA
i = 0
while not(i>=m):
    print(empleado[i]['usuario'])
    i = i + 1

s3Eva_IT2006_T4 Juego planta bombas (buscaminas)

Ejercicio3Eva_IT2006_T4 Juego planta bombas (buscaminas)

Nota: contiene tareas por realizar, revisar comentarios en las instrucciones

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2006_T4 Juego planta bombas (buscaminas)
# propuesta: edelros@espol.edu.ec
import numpy as np
import random as rnd

def plantabombas(m,n):
    campo = np.zeros(shape=(n,n),dtype=int)
    
    bomba = 1
    while not(bomba>m):
        fila = int(rnd.random()*n)+0
        columna = int(rnd.random()*n)+0
        
        if (campo[fila,columna] == 0):
            campo[fila,columna] = 1
            bomba = bomba + 1
            
    return(campo)

# PROGRAMA --------------

# INGRESO
n = int(input('tamaño de tablero[n,n]: '))
m = int(input('cantidad de minas:'))

# TAREA: validar que la cantidad de minas
# sea menor que casillas en tablero

f = int(input('coordenada fila:'))
while not(f>0 and f<(n-1)):
    f = int(input('coordenada fila:'))

c = int(input('coordenada columna:'))
while not(c>0 and c<(n-1)):
    c = int(input('coordenada columna:'))

# PROCEDIMIENTO
# Crear tablero con bombas
territorio = plantabombas(m,n)

# solamente si no hay bomba al aterrizar reporta
if (territorio[f,c] == 0):
    vertical   = territorio[f-1,c]+territorio[f+1,c]
    horizontal = territorio[f,c-1]+territorio[f,c+1]
    # TAREA: Completar las casillas en diagonal
    reporta = vertical + horizontal
else:
    reporta = -1

# SALIDA
print('reporte de llegada: ',reporta)
print('territorio: ')
print(territorio)

Ejemplo, aún falta desarrolar la parte de tarea:

tamaño de tablero[n,n]: 8
cantidad de minas:40
coordenada fila:3
coordenada columna:3
reporte de llegada:  4
territorio: 
[[1 1 0 1 1 1 1 1]
 [1 0 1 0 0 1 1 1]
 [0 1 1 1 1 1 1 0]
 [1 1 1 0 1 1 0 1]
 [0 1 0 1 1 1 0 0]
 [1 0 0 0 1 0 0 0]
 [1 0 1 0 0 1 1 1]
 [1 1 0 1 1 0 0 1]]
>>>

s3Eva_IT2005_T4 Tabla de Pozo millonario

Ejercicio: 3Eva_IT2005_T4 Tabla de Pozo millonario

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

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2005_T4 Tabla de Pozo millonario
# Propuesta de solucion: edelros@espol.edu.ec

import numpy as np
import random as rnd

# INGRESO
n = int(input('seleccionar:'))
m = int(input('de cuantos:' ))

# PROCEDIMIENTO
# Ninguno seleccionado
tabla = np.zeros(m+1,dtype=int)

# sorteando sin repetir
i = 1
while not(i>n):
    sorteado = int(rnd.random()*m)+1
    if (tabla[sorteado]==0):
        tabla[sorteado] = 1
        i = i + 1

#SALIDA
k = 1
print('Los numeros de la tabla son:')
while not(k>m):
    if (tabla[k]==1):
        print(k)
    k = k + 1

resultado del algoritmo

seleccionar: 10
de cuantos: 20
Los numeros de la tabla son:
1
3
4
5
10
11
12
16
17
19
>>> 

Tarea: extraer los sorteados en otro arreglo que contenga solo los números seleccionados

ejercicios resueltos Python mejo_it2005_t4 pdf

ejercicios resueltos Matlab mejo_it2005_t4 pdf

s3Eva_IT2005_T2 Juego biológico

Ejercicio: 3Eva_IT2005_T2 Juego biológico

Resultado esperado:

tamaño de matriz nxn:5
cantidad seres vivos: 20
[[1 1 1 1 0]
 [1 1 1 0 1]
 [0 1 1 1 1]
 [1 1 1 1 1]
 [0 0 1 1 1]]
porcentaje inicial: 80.0
nueva matriz:
[[1 1 1 1 0]
 [1 0 1 0 1]
 [0 1 0 1 1]
 [1 1 1 0 1]
 [0 0 1 1 1]]
porcentaje final: 68.0
>>> 

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2005_T2 Juego biológico
# propuesta: edelros@espol.edu.ec
# por ser semejante, se usa la funcion de: 
#  3Eva_IT2006_T4 Juego planta bombas (buscaminas)
import numpy as np
import random as rnd

def plantabombas(m,n):
    campo = np.zeros(shape=(n,n),dtype=int)
    bomba = 1
    while not(bomba>m):
        fila = int(rnd.random()*n)+0
        columna = int(rnd.random()*n)+0
        if (campo[fila,columna]==0):
            campo[fila,columna] = 1
            bomba = bomba + 1
    return(campo)

def porcentaje(campo):
    tamano = np.shape(campo)
    n = tamano[0]
    m = tamano[1]
    suma = 0
    fila = 0
    while not(fila>=n):
        columna = 0
        while not(columna>=m):
            suma = suma + campo[fila,columna]
            columna = columna + 1
        fila = fila + 1
    z = 100*suma/(n*n)
    return(z)

# PROGRAMA  literal a ------------------
n = int(input('tamaño de matriz nxn:'))
vivos = int(input('cantidad seres vivos: '))

# PROCEDIMIENTO
biologico  = plantabombas(vivos,n)
participa1 = porcentaje(biologico)

# SALIDA
print(biologico)
print('porcentaje inicial:', participa1)

# PROGRAMA  literal b ------------------
fila = 1 # desde segunda fila
while not(fila>=(n-1)): # hasta penultima fila

    columna = 1 # desde segunda columna
    while not(columna>=(n-1)): # hasta penultima columna

        # suma celda izquierda y derecha
        suma = biologico[fila-1,columna]+ biologico[fila+1,columna]
        # suma celda arriba y abajo
        suma = suma + biologico[fila,columna-1]+biologico[fila,columna+1]
        
        if suma >=4: # sobrepoblacion, en la celda no se sobrevive
            biologico[fila,columna] = 0
            
        columna = columna + 1
        
    fila = fila + 1

participa2 = porcentaje(biologico)
print('nueva matriz:')
print(biologico)
print('porcentaje final:', participa2)

s3Eva_IIIT2004_T4 Enmascara frase cambiando pareja de letras

Ejercicio: 3Eva_IIIT2004_T4 Enmascara frase cambiando pareja de letras

resultado obtenido:

frase :TE SALUDO
enmascarada:   ETLASODU
>>>

Instrucciones en Python

# 3Eva_IIIT2004_T4 Enmascara frase cambiando pareja de letras

# INGRESO
frase = input('frase :')
salto = 2

# PROCEDIMIENTO
n = len(frase)
# posiciones iniciales de letras
posicion = []
for i in range(0,n,1):
    posicion.append(i)

# intercambia posiciones
i = 0
while i<n:
    if (i+salto)<n:
        temporal = posicion[i]
        posicion[i] = posicion[i+salto]
        posicion[i+salto] = temporal
    i = i + salto + 1

# reordena letras
reordena = ''
for i in range(0,n,1):
    cual = posicion[i]
    reordena = reordena + frase[cual]

# SALIDA
print('enmascarada: ', reordena)