s1Eva_IT2005_T4 Lanza penales

Ejercicio: 1Eva_IT2005_T4 Lanza penales

Propuesta de solución en Python

Se realiza el control de goles conseguidos en cada lanzamiento de balón, contando los lanzamientos hasta que se alcancen 5 .

El área dónde patea el balón el jugador se ingresa por teclado y la posición del arquero se obtiene de un aleatorio. Se analiza si hubo gol siempre que donde se patea sea diferente donde está el arquero, con lo que se contabiliza los goles conseguidos.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2005_T4 Lanza penales

import random as rnd

conseguido = 0
lanza = 0
while not(lanza==5):

    # Patea
    print('Penal número: ', lanza)
    patea = int(input('donde patea: '))
    while not(patea>=1 and patea<=6):
        patea = int(input('OE!..donde patea: '))

    # Arquero
    arquero = int(rnd.random() * 6) +1

    # Gol/tapa
    if not(patea==arquero):
        gol = 1
    else:
        gol = 0

    conseguido = conseguido + gol
    lanza = lanza + 1

    # Resultado
    print('patea, arquero, gol/tapa')
    print(patea, arquero, gol)

print('*** Goles conseguidos: ', conseguido)

Ejemplo de resultado del algoritmo:

Penal número:  0
donde patea: 3
patea, arquero, gol/tapa
3 3 0
Penal número:  1
donde patea: 2
patea, arquero, gol/tapa
2 6 1
Penal número:  2
donde patea: 1
patea, arquero, gol/tapa
1 1 0
Penal número:  3
donde patea: 2
patea, arquero, gol/tapa
2 4 1
Penal número:  4
donde patea: 3
patea, arquero, gol/tapa
3 5 1
*** Goles conseguidos:  3
>>>

s1Eva_IT2005_T3 Arreglo aleatorio binario a decimal

Ejercicio: 1Eva_IT2005_T3 Arreglo aleatorio binario a decimal

Propuesta de solución en Python

Use un vector de n casillas, las casillas pueden iniciar en cero

B = np.zeros(n,dtype=int)

para luego llenarlas de números aleatorios una por una, mientras realiza las operaciones requeridas en el enunciado.

B[i] = int(rnd.random()*2)+0

De ser necesario repasar: Binario a Decimal – Algoritmo

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2005_T3 Arreglo aleatorio binario a decimal
# Tarea: contar los 1's, literal a)

import numpy as np
import random as rnd

# INGRESO
n = int(input('cuantos componentes n: '))

# PROCEDIMIENTO
B = np.zeros(n,dtype=int)
decimal = 0
i = 0
while (i<n):
    B[i] = int(rnd.random()*2)+0
    # orden de binarios es izquierda a derecha
    posicion = n-1-i  
    decimal  = decimal+B[i]*(2**posicion)
    i = i+1

# SALIDA
print('Arreglo de binarios B[i]:')
print(B)
print('equivale en decimal:',decimal)

Reaultados de algoritmo realizados para un byte (8 bits):

cuantos componentes n: 8
Arreglo de binarios B[i]:
[0 0 1 0 1 0 1 0]
equivale en decimal: 42
>>> 
cuantos componentes n: 8
Arreglo de binarios B[i]:
[1 1 1 1 1 1 1 1]
equivale en decimal: 255
>>> 
cuantos componentes n: 8
Arreglo de binarios B[i]:
[0 0 1 1 1 1 1 0]
equivale en decimal: 62
>>> 

s1Eva_IIT2004_T4 Matriz de paridad

Ejercicio: 1Eva_IIT2004_T4 Matriz de paridad

Establecer una matriz de n filas y n+1 columnas. Para cada casilla en cada fila, columna, generar un aleatorio de dos posibilidades que mínimo puede ser cero, con lo que se genera la matriz de números aleatorios.

Al finalizar una fila, considere la suma de fila y revise el residuo de la división para 2.

Si hay residuo el número es impar y se debe escribir el número 1 en la última casilla de toda la fila (fila, n), es decir se completa la paridad.

En el caso opuesto, que no hay residuo, el conteo de ‘1’ ya es par y se deja el valor cero en la última casilla.

Instrucciones en Python

# 1Eva_IIT2004_T4 Matriz de paridad
import numpy as np
import random as rnd

# INGRESO
n = 7 # tamaño matriz

# PROCEDIMIENTO
# matriz de n filas y n+1 columnas
matriz = np.zeros(shape=(n,n+1),dtype=int)

# recorre matriz
for fila in range(0,n,1):
    sumafila = 0
    for columna in range(0,n,1):
        aleatorio = int(rnd.random()*2)+0
        matriz[fila,columna] = aleatorio
        sumafila = sumafila + aleatorio
    # revisa residuo paridad
    residuo = sumafila % 2  
    if residuo:
        matriz[fila,n] = 1

# SALIDA
print(' Matriz obtenida')
print(matriz)

resultado:

 Matriz obtenida
[[0 1 1 1 0 1 1 1]
 [1 1 0 1 0 0 1 0]
 [0 1 1 1 0 1 1 1]
 [1 0 0 1 1 0 1 0]
 [0 1 0 0 0 1 0 0]
 [1 0 0 0 1 1 0 1]
 [1 0 0 0 1 0 1 1]]
>>> 

Nota: Observe que la matriz contiene números aleatorios, por lo que el resultado varía cada vez que se ejecuta el algoritmo.

s1Eva_IIT2004_T3 Estimar π por Montecarlo

Ejercicio: 1Eva_IIT2004_T3 Estimar π por Montecarlo

Ingresar n como la cantidad de puntos en el plano a ubicar de forma aleatoria dentro del rango del cuadrado que inscribe al círculo. 

Usar una variable “k” como el contador para los puntos que caen dentro del círculo.

Al generar cada punto se puede calcular la distancia al centro mediante Pitágoras.

d= \sqrt{x^2 +y^2}

Se repite el proceso para n puntos y al final se calcula el valor estimado de pi acorde a la relación presentada.

Nota: no se usa como variable la palabra “pi” debido a que es nombre de variable reservada.

Instrucciones en Python

# 1Eva_IIT2004_T3 Estimar Pi por Montecarlo
# Propuesta de solución. edelros@espol.edu.ec
# se usa todo el círculo
import random as rnd
import numpy as np

# INGRESO
n = int(input('¿Cuántos puntos?: '))
radio = 1

# PROCEDIMIENTO
punto = np.zeros(shape=(n,2),dtype=float)
k = 0
i = 0
while i<n:
    x = rnd.random()*(2*radio)-1
    y = rnd.random()*(2*radio)-1

    d = np.sqrt(x**2+y**2)
    if d<=radio:
        k = k + 1
    punto[i] = [x,y]
    i = i + 1

estimadopi = 4*k/n

# SALIDA
print(k,n)
print('estimador pi: ', estimadopi)
print(punto)

la estimación de π con números aleatorios que se ubican dentro del círculo de radio 1 es:

¿Cuántos puntos?: 1000
781 1000
estimador pi:  3.124
[[ 0.15581724  0.43992571]
 [-0.11114653 -0.86426905]
 [ 0.51257751 -0.1969925 ]
 ...
 [ 0.26965478 -0.01555604]
 [-0.89575602  0.56077385]
 [ 0.33467618 -0.59497405]]
>>> 

Diagrama de Flujo

ejercicios resueltos Matlab parc_iit2004_t3 pdf

s1Eva_IT2004_T3 Sortear parejas para tenis

Ejercicio: 1Eva_IT2004_T3 Sortear parejas para tenis

Propuesta de solución en Python:

La variable n indica el número de parejas o tamaño de los vectores para almacenar la «pareja» y el contador de «veces» que juega cada una.

El ejercicio se divide en dos partes: la primera para seleccionar de forma aleatoria la pareja de la dama (una por una), es decir se sortean los caballeros (quien), y la segunda parte se realiza el proceso para los caballeros.

dama = n+1
while not(dama>(2*n)):
    quien = int(rnd.random()*n)+1
    pareja[dama] = quien
    veces[quien] = veces[quien]+1
    dama = dama + 1

En cada sorteo se registra cuántas veces participa cada uno.

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2004_T3 Sortear parejas para tenis

import random as rnd
import numpy as np

# INGRESO
n = int(input('cuantas parejas: '))

# PROCEDIMIENTO
pareja = np.zeros(2*n+1,dtype=int)
veces  = np.zeros(  n+1,dtype=int)

dama = n+1
while not(dama>(2*n)):
    quien = int(rnd.random()*n)+1
    pareja[dama] = quien
    veces[quien] = veces[quien]+1
    dama = dama + 1

# SALIDA
print(pareja[n+1:])
print('veces: ')
print(veces)

print('juegan varias veces: ')
caballero = 1
while not(caballero>n):
    if (veces[caballero]>1):
        print(caballero)
    caballero = caballero + 1

print('los que no juegan: ')
caballero = 1
while not(caballero>n):
    if (veces[caballero]==0):
        print(caballero)
    caballero = caballero + 1

con un ejemplo de resultado:

cuantas parejas: 10
[ 6  2  1  8  3  9 10  1  7  9]
veces: 
[0 2 1 1 0 0 1 1 1 2 1]
juegan varias veces: 
1
9
los que no juegan: 
4
5
>>> 

s1Eva_IT2004_T2 Verificar ISBN

Ejercicio: 1Eva_IT2004_T2 Verificar ISBN

Propuesta de solución en Python

ISBN = 9684443242

Luego de pedir el número ISBN, se inicia extrayendo el dígito verificador escrito, quedando el resto de dígitos del número hacia la izquierda para realizar los cálculos.

vescrito = ISBN%10
n = ISBN//10

Tarea: verificar el número de dígitos del ISBN

Para la posición del dígito se usa un contador.

Las operaciones se acumulan en suma, de la que se obtiene el residuo de la división para 11.

El residuo corresponde al verificador calculado que se compara con el verificador escrito para dar el veredicto.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2004_T2 Verificar ISBN
# propuesta: edelros@espol.edu.ec

# INGRESO
ISBN = int(input('cual ISBN: '))

# PROCEDIMIENTO
vescrito = ISBN%10
n = ISBN//10

contador = 9
suma = 0
while (n>0):
    digito = n%10
    n = n//10
    suma =  suma + digito*contador
    contador = contador -1

vcalculado = suma%11

if (vescrito==vcalculado):
    respuesta = 1
else:
    respuesta = 0

#SALIDA
print(respuesta)

Resultado del algoritmo

cual ISBN: 9684443242
1
>>> 
cual ISBN: 9684443243
0
>>> 

s1Eva_IIIT2003_T3 Coordenadas enteras en un círculo

Ejercicio: 1Eva_IIIT2003_T3 Coordenadas enteras en un círculo

Considere el círculo centrado en el origen (0,0), siendo su intervalo entre [-radio, radio].

Recorrer las coordenadas de números  enteros en el recuadro limitado por [-radio,radio] en cada lado, determinando la distancia del punto al origen.

radio = 10
x = [-10, -9, -8, -7, -6 ... 8, 9, 10]
\text{distancia} = \sqrt{x^2+y^2}
dist = np.sqrt(x**2 + y**2)

Con la distancia revisar si el punto está dentro del círculo.

if dist<=radio:
    encirculo = encirculo + 1
    sumadist  = sumadist + dist  

Instrucciones en Python

# 1Eva_IIIT2003_T3 Coordenadas enteras en un círculo
import numpy as np

# INGRESO
radio = 10

# PROCEDIMIENTO
a =  - int(radio)
b = int(radio)

encirculo = 0
sumadist = 0
for y in range(a,b+1,1):
    for x in range(a,b+1,1):
        dist = np.sqrt(x**2 + y**2)
        if dist<=radio:
            encirculo = encirculo + 1
            sumadist  = sumadist + dist          

promdist = sumadist/encirculo
# SALIDA
print(' coordenadas enteras en círculo: ')
print(encirculo)
print('promedio distancias al centro: ')
print(promdist)

resultado:

 coordenadas enteras en círculo: 
317
promedio distancias al centro: 
6.698944789255016
>>> 

s1Eva_IIIT2003_T2 Verificar números triangulares

Ejercicio: 1Eva_IIIT2003_T2 Verificar números triangulares

El problema planteado es semejante a construir una pirámide, en la que se disponen de solo t bloques y se requiere saber si el número de bloques es exacto para formar una pirámide.

El ejercicio se desarrolla suponiendo que se construirá una pirámide con bloques de varios «pisos».

Se observa que el número de bloques coincide con el número de piso a construir.

Ejemplo:

  • Piso 1 tiene 1 bloque,
  • piso 2 tiene 2 bloques,
  • etc.
piso = 1  # contador
usados = 0 # acumulador

Cada piso usa una cierta cantidad de bloques que se cuentan como «usados», es decir se acumulan. La cantidad de bloques por piso es la misma que el número del piso, contador que se inicia con 1.

El lazo o bucle  repite el proceso de tal forma que los bloques usados  se aumulan en cada piso.

while (usados<t):
    usados = usados + piso
    piso = piso+1

Dado un número t de bloques ,se calcula la secuencia de números triangulares mientras los bloques usados sean menores que los t disponibles.

En caso que el número “usados” de la secuencia es igual a t, se considera al número t como un número triangular.

La respuesta es un valor de verdad, si es triangular 1, si no lo es 0.

Lazo mientras-repita en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIIT2003_T2 Números triangulares
# Propuesta de solución. edelros@espol.edu.ec

# INGRESO
t = int(input('Verificar si es triangular: '))

# PROCEDIMIENTO
piso = 1
usados = 0
while (usados<t):
    usados = usados + piso
    piso = piso+1

# verifica si es triangular
if usados==t:
    estriangular = 1
else:
    estriangular = 0

# SALIDA
print(estriangular )

Lazo Repita-hasta en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIIT2003_T2 Números triangulares
# Propuesta de solución. edelros@espol.edu.ec

# INGRESO
t = int(input('Verificar si es triangular: '))

# PROCEDIMIENTO
piso = 1
usados = 0
while not(usados>=t):
    usados = usados+piso
    piso = piso+1

# verifica si es triangular
if usados==t:
    estriangular = 1
else:
    estriangular = 0

# SALIDA
print(estriangular )

Diagrama de Flujo

Diagrama de Flujo de números triangulares

Propuesta de solución con diagrama de flujo, Python y otra versión con matlab

ejercicios resueltos Python Parc_IIIT2003_T2 pdf

ejercicios resueltos Matlab parc_iiit2003_t2 pdf

s1Eva_IIT2003_T4 Juego con icosaedros

Ejercicio: 1Eva_IIT2003_T4 Juego con icosaedros

Propuesta de solución con diagrama de flujo y Python: py_pdf. Otra versión con matlab: m_pdf

Se propone desarrollar el tema conociendo el número n de lanzamientos que desea participar el jugador, dejando el control del juego como tarea.

Se inicia un contador de lanzamientos y un acumulador de premios.

Un icosaedro se simula con un aleatorio para el color y otro para el número, para luego comparar éstos valores con lo simulado para el segundo icosaedro.

    d1num   = int(random.random()*5)+1
    d1color = int(random.random()*4)+1
    d2num   = int(random.random()*5)+1
    d2color = int(random.random()*4)+1

Las reglas descritas se implementan con condicionales, considerando que de cumplirse la tercera, ya se ha pagado premio por igualdad de números y color.

    if d1color==d2color:
        premio = premio+10
    if d1num==d2num:
        premio = premio+10
    if ((d1color==d2color)and(d1num==d2num)):
        premio = premio+30

Se repite el juego hasta cumplir el número de lanzamientos.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2003_T4 Juego con icosaedros
# Propuesta solucion: edelros@espol.edu.ec
# Tarea. Completar el control del juego

import random

# INGRESO
n = int(input('Numero de lanzamientos: '))

# PROCEDIMIENTO
i = 0
premio = 0
while (i<n):
    d1num   = int(random.random()*5)+1
    d1color = int(random.random()*4)+1
    d2num   = int(random.random()*5)+1
    d2color = int(random.random()*4)+1

    if d1color==d2color:
        premio = premio+10
    if d1num==d2num:
        premio = premio+10
    if ((d1color==d2color)and(d1num==d2num)):
        premio = premio+30

    s = d1num+d2num
    r = s%2
    if r>0:
        premio = premio+5

    i = i+1

# SALIDA
print('total ganado: ')
print(premio)
print('lanzamientos: ')
print(n)

Diagrama de Flujo

Diagrama de Flujo 1 – Ejercicio juego con icosaedros

continuación

Diagrama de Flujo 2 – Ejercicio juego con icosaedros

ejercicios resueltos Python parc_iit2003_t4 pdf

ejercicios resueltos Matlab parc_iit2003_t4 pdf

s1Eva_IIT2003_T3 Personas asignadas a proyectos

Ejercicio: 1Eva_IIT2003_T3 Personas asignadas a proyectos

Propuesta de solución con diagrama de flujo y Python: py_pdf. Otra propuesta en matlab: m_pdf

Ingresar los datos en una matriz, de tamaño nxm, considerando en las filas a las personas y en las columnas a los proyectos.

m
Matriz 1 2 3
1 0 1 0
2 1 0 0
3
Personas n 4

Para la parte b), realizar la cuenta de personas asignadas al primer proyecto. Cada resultado por columna de proyecto, se guarda como parte de un vector de participa[proyecto].

El vector de participantes es el resultado de la suma de cada columna.

Para la parte c), se requiere encontrar la carga[persona], que es la suma de cada fila. Por lo que se fija el valor de una persona, una fila, y se revisa para cada persona, todas las columnas, el valor se acumula en «carga».

Se muestra solo aquellas personas que tienen carga de trabajo 0.

Tarea: Validar los datos quese ingresan a la matriz Asigna[persona,proyecto]. Desarrollar la parte para c)

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2003_T3 Personas asignadas a proyectos
# Propuesta: edelros@espol.edu.ec
# Tarea: validar los datos de asignado

import numpy

# INGRESO
n = int(input('cuantas personas: '))
m = int(input('cuantos proyectos: '))
asignado = numpy.zeros((n+1,m+1),dtype=int)
persona = 1
while (persona<=n):
    proyecto = 1
    while (proyecto<=m):
        print('persona: '+str(persona)+
              ', proyecto: '+
              str(proyecto))
        asignado[persona,proyecto] = int(input(' /asignado (1/0): '))
        proyecto = proyecto + 1
    persona = persona+1

# PROCEDIMIENTO
# participantes por proyecto
participan = numpy.zeros(m+1,dtype=int)
proyecto = 1
while (proyecto<=m):
    s = 0
    persona = 1
    while (persona<=n):
        s = s + asignado[persona,proyecto]
        persona = persona+1
    participan[proyecto] = s
    proyecto = proyecto+1

# Carga de trabajo por persona
carga = numpy.zeros(n+1,dtype=int)
persona = 1
while (persona<=n):
    s = 0
    proyecto = 1
    while (proyecto<=m):
        s = s+asignado[persona,proyecto]
        proyecto = proyecto+1
    carga[persona] = s
    persona = persona+1

# SALIDA
print('Participantes/Proyecto:')
proyecto = 1
while (proyecto<=m):
    print(participan[proyecto])
    proyecto = proyecto+1

print('Persona sin carga de trabajo:')
persona = 1
while (persona<=n):
    if carga[persona]==0:
        print(persona)
    persona = persona+1

Diagrama de Flujo

Diagrama de Flujo 1. Ejercicio persona asignada a proyecto
Diagrama de Flujo 2. Ejercicio persona asignada a proyecto

Tarea: Desarrollar pregunta c)

Diagrama de Flujo 3. Ejercicio persona asignada a proyecto

ejercicios resueltos Python parc_iit2003_t3 pdf

ejercicios resueltos Matlab parc_iit2003_t3 pdf