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)

s3Eva_IIIT2004_T1 Carrera de ranas

Ejercicio: 3Eva_IIIT2004_T1 Carrera de ranas

Resultados esperados:

longitud de la pista: 20
ganador:  A
saltos:  16
>>> 

longitud de la pista: 20
ganador:  B
saltos:  23
>>> 

Instrucciones Python

# 3Eva_IIIT2004_T1 Carrera de ranas
import random as rnd

# INGRESO
n = int(input('longitud de la pista: '))

# PROCEDIMIENTO
A = 0
B = 0 
turno = 0
gana = ''
while gana=='':
    saltoA = int(rnd.random()*3)+0
    saltoB = int(rnd.random()*3)+0
    A = A + saltoA
    B = B + saltoB
    turno = turno + 1
    if A>n:
        gana = 'A'
    if B>n:
        gana = 'B'

# SALIDA
print('ganador: ', gana)
print('saltos: ',turno)

Tarea: Considere que los turnos de saltos no corresponden a los saltos de cada rana, observe cuando se queda en el mismo puesto, no es un salto.

s3Eva_IT2004_T3 Multiplicar con campesino egipcio

Ejercicio: 3Eva_IT2004_T3 Multiplicar con campesino egipcio

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

Literal a. La función en forma recursiva considera cuatro casos para q y el residuo de q con 2. Usar un condicional en cada caso siguiendo lo descrito en la fórmula.

mult(p,q) = \begin {cases} 0 , && q=0 \\ p ,&& q=1 \\ mult \Big(2p,cociente\big(\frac{q}{2}\big)\Big) , && q\ge 2 \text {, q es par} \\ mult \Big(2p,cociente\big(\frac{q}{2}\big)\Big)+p , && q\ge 2 \text{, q es impar }\end{cases}

Literal b.  Requiere que sea un programa estructurado, separando las partes de las funciones de usuario y el programa que lo usa.

En el bloque de ingreso del programa se pide cuál tabla de multiplicar se va a generar. Se require que la tabla se genere usando la función creada en el literal a.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2004_T3 Multiplicar con campesino egipcio
# propuesta: edelros@espol.edu.ec

def mult(p,q):
    if q==0:
        z = 0
    if q==1:
        z = p
    r = (q%2)
    if (q>=2 and r==0):
        z = mult(2*p, int(q/2))
    if (q>=2 and r>0):
        z = mult(2*p, int(q/2))+p
    return (z)

# PROGRAMA ---------------
import numpy as np

# INGRESO
n = int(input('¿cual tabla?: '))

# PROCEDIMIENTO
r = np.zeros(13,dtype=int)
i = 1
while (i<=12):
    r[i] = mult(n,i)
    i = i + 1

# SALIDA
i=1
while (i<=12):
    print(str(n)+' x '+str(i)+' = ',str(r[i]))
    i = i + 1

Tarea: validar n entre cero y 12

resultado del algoritmo

¿cual tabla?: 8
8 x 1 =  8
8 x 2 =  16
8 x 3 =  24
8 x 4 =  32
8 x 5 =  40
8 x 6 =  48
8 x 7 =  56
8 x 8 =  64
8 x 9 =  72
8 x 10 =  80
8 x 11 =  88
8 x 12 =  96
>>> 

ejercicios resueltos Python mejo_it2004_t3 pdf

ejercicios resueltos Matlab mejo_it2004_t3 pdf

s3Eva_IT2004_T2 Realizar el producto vectorial

Ejercicio: 3Eva_IT2004_T2 Realizar el producto vectorial

resultado obtenido

[-1, 2, 7]
>>> 

Instrucciones en Python

# 3Eva_IT2004_T2 Realizar el producto vectorial

# INGRESO
A = [1,3,1]
B = [-2,1,0]

# PROCEDIMIENTO
c0 = A[1]*B[2]-B[1]*A[2]
c1 = A[0]*B[2]-B[0]*A[2]
c2 = A[0]*B[1]-B[0]*A[1]

C = [c0,c1,c2]

# SALIDA
print(C)

s3Eva_IT2004_T1 Buscar número al lanzar el dado

Ejercicio: 3Eva_IT2004_T1 Buscar número al lanzar el dado

resultado para la función del enunciado

>>> al_fin(2,7)
2
>>> al_fin(2,7)
12
>>> al_fin(2,7)
5
>>> 

Tarea, realizar el programa requerido en el enunciado usando la función al_fin(n,k)

Instrucciones Python

# 3Eva_IT2004_T1 Buscar número al lanzar el dado
import random as rnd

def al_fin(n,k):
    veces = 0
    exitos = 0
    while exitos == 0:
        aleatorio = int(rnd.random()*6)+1
        if aleatorio == n:
            exitos = exitos+1
        veces = veces + 1
    return(veces) 

# Tarea, realizar el programa requerido

s3Eva_IIIT2003_T4 Informes notas de estudiantes

Ejercicio: 3Eva_IIIT2003_T4 Informes notas de estudiantes

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIIT2003_T4 Informes notas de estudiantes

# INGRESO
estudiantes = []
n = int(input('cupo: '))
i = 0
while not(i>=n):
    nom = input('nombre: ')
    eda = int(input('edad: '))
    gen = input(' genero m/f: ')
    while not(gen=='f' or gen=='m'):
        print(' genero f o m ')
        gen = input('genero: ')
    
    par = int(input('parcial: '))
    while not(par>=0 and par<=100):
        print(' nota son [0,100] ')
        par = int(input('parcial: '))
        
    fin = int(input('final: '))
    while not(fin>=0 and fin<=100):
        print(' nota son [0,100] ')
        fin = int(input('final: '))
        
    registro = {'nombre':nom,
                'edad':eda,
                'genero':gen,
                'parcial':par,
                'final':fin}
    estudiantes.append(registro)
    i = i+1

# ingresa sin extension '.txt'
narchivo = input('nombre del archivo: ')
narchivo = narchivo + '.txt'

# PROCEDIMIENTO
# Guarda el archivo con datos estudiantes
n =  len(estudiantes)
archivo = open(narchivo, 'w')
i = 0
while not(i>=n):
    nom = estudiantes[i]['nombre']
    eda = estudiantes[i]['edad']
    gen = estudiantes[i]['genero']
    par = estudiantes[i]['parcial']
    fin = estudiantes[i]['final']
    linea = nom +','+str(eda)+','+gen
    linea = linea + ',' + str(par)
    linea = linea + ',' + str(fin) + '\n'
    archivo.write(linea)
    i = i + 1

archivo.close()

# SALIDA
print(estudiantes)

resultado del algoritmo

upo: 5
nombre: Juan
edad: 19
 genero m/f: m
parcial: 65
final: 40
nombre: Maria
edad: 18
 genero m/f: f
parcial: 70
final: 80
nombre: Ana
edad: 19
 genero m/f: f
parcial: 90
final: 92
nombre: Juan
edad: 20
 genero m/f: m
parcial: 40
final: 80
nombre: Rosa
edad: 18
 genero m/f: f
parcial: 80
final: 85
nombre del archivo: calificaciones
[{'nombre': 'Juan', 'edad': 19, 'genero': 'm',
  'parcial': 65, 'final': 40},
 {'nombre': 'Maria', 'edad': 18, 'genero': 'f',
  'parcial': 70, 'final': 80},
 {'nombre': 'Ana', 'edad': 19, 'genero': 'f',
  'parcial': 90, 'final': 92},
 {'nombre': 'Juan', 'edad': 20, 'genero': 'm',
  'parcial': 40, 'final': 80},
 {'nombre': 'Rosa', 'edad': 18, 'genero': 'f',
  'parcial': 80, 'final': 85}]
>>> 

s3Eva_IIIT2003_T2 Socios del club por género

Ejercicio: 3Eva_IIIT2003_T2 Separar lista socios club por género

Para el ingreso de datos se inicializan tres listas en vacio.

nombre = [] 
genero = [] 
edad = []

Se preguntan datos que se añaden a cada lista, siempre que la bandera finalizado sea cero.

Tarea por realizar en el bloque de ingreso: validar el género ingresado ‘m’ o ‘f’

La selección de datos se realiza en un bloque de procedimiento, revisando la lista de género. Con la variable género se añaden los nombres a las listas que correspondan a hombres o mujeres.

El resultado se muestra en pantalla.

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIIT2003_T2 Separar lista socios club por género

# INGRESO
nombre = []
genero = []
edad   = []
finalizado = 0
while (finalizado == 0):
    unnombre = input('un nombre:  ')
    ungenero = input('genero M/F: ')
    unaedad =  int(input('edad:   '))
    finalizado = int(input('finalizar 0/1:'))

    # añade datos a la lista
    nombre.append(unnombre)
    genero.append(ungenero)
    edad.append(unaedad)

# PROCEDIMIENTO
n = len(nombre)
hombres = []
mujeres = []
i = 0
while not(i>=n):
    if (genero[i]=='M'):
        hombres.append(nombre[i])
    if (genero[i]=='F'):
        mujeres.append(nombre[i])
    i = i + 1

# SALIDA
print('hombres: ',hombres)
print('mujeres: ',mujeres)

resultado del algoritmo

un nombre:  Maria
genero M/F: F
edad:   18
finalizar 0/1:0
un nombre:  Pedro
genero M/F: M
edad:   19
finalizar 0/1:0
un nombre:  Ana
genero M/F: F
edad:   19
finalizar 0/1:0
un nombre:  Juan
genero M/F: M
edad:   20
finalizar 0/1:1
hombres:  ['Pedro', 'Juan']
mujeres:  ['Maria', 'Ana']
>>>