s1Eva_IIT2004_T4 Matriz de paridad

Ejercicio: 1Eva_IIT2004_T4 Matriz de paridad

Establecer una matriz de n filas y n+1 columnas.

matriz = np.zeros(shape=(n,n+1),dtype=int)

Para cada casilla en cada fila y columna, generar un aleatorio de dos posibilidades que mínimo puede ser cero.

aleatorio = int(rnd.random()*2)+0

con lo que se genera la matriz de números aleatorios.
bit en Matriz de Paridad
Al finalizar una fila, considere la suma de fila para revisar la paridad con el residuo de la división para 2.

    residuo = sumafila % 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=0, el conteo de ‘1’ ya es par y se deja el valor cero en la última casilla.

Algoritmo 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: # sumafila es impar
        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

[ algoritmo ] [ diagrama flujo ]

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

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

Al generar aleatoriamente cada punto (x,y), se puede calcular la distancia al centro usando 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 según la relación del enunciado.

\frac{k}{n} =\frac{\pi}{4}

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

[ algoritmo ] [ diagrama flujo ]
..


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

[ algoritmo ] [ diagrama flujo ]
..


Diagrama de Flujo

[ algoritmo ] [ diagrama 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.

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

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.

Algoritmo 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, para un número ISBN dadoisbn libro

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.

Algoritmo en Python

# 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

[ mientras repita] [ para/for ]

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  

[ mientras repita] [ para/for ]
..


Algoritmo en Python: bucle para/for

# 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
>>> 

[ mientras repita] [ para/for ]
..


Algoritmo en Python: mientras-repita

# 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
y = a
while y<=b+1:
    x = a
    while x<=b+1:
        dist = np.sqrt(x**2 + y**2)
        if dist<=radio:
            encirculo = encirculo + 1
            sumadist  = sumadist + dist
        x = x + 1
    y = y + 1

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

[ mientras repita] [ para/for ]

s1Eva_IIIT2003_T2 Verificar números triangulares

Ejercicio: 1Eva_IIIT2003_T2 Verificar números triangulares

[ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]

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 acumulan 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.

[ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]
..


Algoritmo en Python: Bucle/Lazo mientras-repita

# 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 )

[ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]
..


Algoritmo en Python: Bucle/Lazo Repita-hasta

# 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 )

[ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]
..


Diagrama de Flujo

Diagrama de Flujo de números triangulares

[ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]


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

[ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]

s1Eva_IIT2003_T4 Juego con icosaedros

Ejercicio: 1Eva_IIT2003_T4 Juego con icosaedros

[ algoritmo ] [ diagrama flujo ]

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

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.

[ algoritmo ] [ diagrama flujo ]
..


Algoritmo en Python

# 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)

[ algoritmo ] [ diagrama flujo ]
..


Diagrama de Flujo

Diagrama de Flujo 1 – Ejercicio juego con icosaedros

continuación

Diagrama de Flujo 2 – Ejercicio juego con icosaedros

[ algoritmo ] [ diagrama flujo ]


Propuesta de solución con diagrama de flujo:

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

[ algoritmo ] [ diagrama flujo ]

Ingresar los datos en una matriz, de tamaño nxm, considerando en las filas a las personas y en las columnas a los proyectos. Considera asignado 1 y no asignado como 0.

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 que se ingresan a la matriz asignado[persona,proyecto]. Desarrollar la parte para c)

[ algoritmo ] [ diagrama flujo ]
..


Algoritmo en Python

# 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

[ algoritmo ] [ diagrama flujo ]
..


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

[ algoritmo ] [ diagrama flujo ]


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

ejercicios resueltos Python parc_iit2003_t3 pdf

ejercicios resueltos Matlab parc_iit2003_t3 pdf

s1Eva_IIT2003_T2 Sumar términos de progresión geométrica

Ejercicio: 1Eva_IIT2003_T2 Sumar términos de progresión geométrica

[ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]

Ingresar la cantidad n de términos, el factor a y r, validando que r no sea 1.

S = \sum_{i=0}^{n} a + ar + ar^2 + ar^3 + ... + ar^n

Iniciar con 0 las variables: s que acumula términos, i como el contador de términos que adicionalmente se usa como exponente.

# PROCEDIMIENTO
s = 0
i = 0
while (i<=n):
    t = a*(r**i)
    s = s + t
    i = i + 1

Como paso siguiente, calcular cada término y acumularlos en s tantas veces como sea necesario hasta que que i llega a n.

El resultado buscado se encontrará en s.

Observe que el primer término es solo la constante a, con equivalente a r0.

[ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
..


Algoritmo en Python: Lazo mientras-repita

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2003_T2 Sumar términos de progresión geométrica
# Propuesta de solución. edelros@espol.edu.ec.

# INGRESO
n = int(input('¿Valor de n?: '))
a = float(input('factor a: '))
r = float(input('factor r: '))
while (r==1):
    r = int(input('factor r debe ser diferente de 1: '))

# PROCEDIMIENTO
s = 0
i = 0
while (i<=n):
    t = a*(r**i)
    s = s + t
    i = i + 1

# SALIDA
print(s)

[ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
..


Diagrama de Flujo: Mientras-Repita

Diagrama de Flujo 1. Suma de progresión geométrica con Mientras-Repita

[ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
..

Diagrama de Flujo: Repita-Hasta

Diagrama de Flujo 2. Suma de progresión geométrica con Repita-Hasta

[ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]

Propuesta de solución con diagrama de flujo y Python: python en pdf .
Otra versión con matlab en pdf

ejercicios resueltos Python parc_iit2003_t2 pdf

ejercicios resueltos Matlab parc_iit2003_t2 pdf

[ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]

s1Eva_IIT2003_T1 Cambiar Decimal a Octal

Ejercicio: 1Eva_IIT2003_T1 Cambiar Decimal a Octal

Empiece con los conceptos expuestos en el tema de Bases Numéricas Introducción, el ejercicio es una aplicación del tema.

En el ejercicio presentado, aún quedan partes por desarrollar:

  • validar octal de 4 dígitos
  • validar en procedimiento,
  • que los dígitos sean octales [0,7]

Algoritmo en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2003_T1 Cambiar Decimal a Octal
# propuesta: edelros@espol.edu.ec

#INGRESO
octal = int(input('número octal: '))

# PROCEDIMIENTO
decimal = 0
i = 0
while (octal>0):
    digito  = octal%10 # residuo
    octal   = octal//10 # cociente
    decimal = decimal + digito*(8**i)
    i = i+1

# SALIDA
print('número en decimal: ', decimal)