s3Eva_IT2015_T4 Bomberos para incendios forestales

Ejercicios: 3Eva_IT2015_T4 Bomberos para incendios forestales

Propuesta de solución en Python:

Tarea: Desarrollar la opcion 3

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2015_T4 Bomberos para incendios forestales
import numpy as np

def grupobombero(registrados, m, local):
    n = len(registrados)
    filas = n//m
    if (n%m>0):
        filas = filas+1
    tabla = np.zeros(shape=(filas,m),dtype = int)
    # Solo bomberos de provincia local
    f = 0
    c = 0
    i = 0
    while not(i>=n):
        cual = registrados[i,1]
        quien = registrados[i,0]
        if (cual == local):
            tabla[f,c] = quien
            c = c+1
            if (c>=m):
                c = 0
                f = f + 1
        i = i + 1
    # los demas bomberos
    i = 0
    while not(i>=n):
        cual = registrados[i,1]
        quien = registrados[i,0]
        if not(cual == local):
            tabla[f,c] = quien
            c = c + 1
            if (c>=m):
                c = 0
                f = f + 1
        i = i + 1
    tabla = np.array(tabla)
    return(tabla)

# 3ra Evaluación I Término 2015
# Tema 4. Bomberos para incendios forestales
presentados = []
tabla  = np.zeros(shape=(1,2),dtype=int)
opcion = -1
i = 1
while not(opcion==6):
    print('1. Registrar bombero')
    print('2. Asignar grupos')
    print('3. Mostrar nombres de un grupo')
    print('4. Guardar datos')
    print('5. Leer datos')
    print('6. Salir')
    opcion = int(input(' opcion: '))

    if (opcion ==1):
        i = len(presentados) + 1
        print('voluntario: ',i)
        
        ced  = input('cedula: ')
        nom  = input('nombre: ')
        nbom = int(input('numero bombero: '))
        prv  = int(input('provincia: '))
        while not(prv>=1 and prv<=24):
            prv = int(input('provincia [1,24]: '))
            
        unbombero = {'cedula':ced,
                     'nombre': nom,
                     'nbombero':nbom,
                     'provincia':prv}
        presentados.append(unbombero)

    if (opcion==2):
        print('asigna grupos.....')
        m = int(input('cuantos grupos/incendios: '))
        local = int(input('ayudar a provincia: '))
        n = len(presentados)
        registrados =[]
        i = 0
        while not(i>=n):
            nbom = presentados[i]['nbombero']
            prv = presentados[i]['provincia']
            registrados.append([nbom,prv])
            i = i + 1
        tabla = grupobombero(registrados, m, local)
        print(tabla)
        
    if (opcion==3):
        print('....3. Mostrar nombres de un grupo')
        # Tarea por desarrollar
            
    if (opcion==4):
        narchivo = 'bomberos.txt'
        archivo = open(narchivo,'w')
        n = len(presentados)
        j =0
        while not(j>=n):
            ced = presentados[j]['cedula']
            nom = presentados[j]['nombre']
            nbom = presentados[j]['nbombero']
            prv = presentados[j]['provincia']
            linea = ced + ',' +nom + ',' + str(nbom) + ',' +str(prv) +'\n'
            archivo.write(linea)
            j = j+1
        archivo.close()
        print('.... registros guardados: ', n)
        
    if (opcion == 5):
        presentados = []
        narchivo = 'bomberos.txt'
        
        archivo = open(narchivo,'r')
        linea = archivo.readline()
        while not(linea==''):
            linea  = linea.strip('\n')
            partes = linea.split(',')
            ced  = partes[0]
            nom  = partes[1]
            nbom = int(partes[2])
            prv  = int(partes[3])
            
            unbombero = {'cedula':ced,
                         'nombre': nom,
                         'nbombero':nbom,
                         'provincia':prv}
            presentados.append(unbombero)
            linea = archivo.readline()

        n = len(presentados)
        print('.... registros leidos: ', n)
        archivo.close()

    if (opcion==6):
        print(' Saliendo del programa ....')
        print(' ccpg1001 Fundamentos de computación .....')

s3Eva_IT2014_T3 Juego Poli-Mancala

Ejercicios: 3Eva_IT2014_T3 Juego Poli-Mancala

Propuesta de solución en Python:

El tema pide realizar el programa usando la función siembra del tema 4. Por lo que la función se califica aparte.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2014_T3 Juego Poli-Mancala
import numpy as np

# funcion siembra del tema 4
def siembra(mancala,jugador,casilla):
    tamano = np.shape(mancala)
    m = tamano[1]
    fila = jugador
    # Selecciona el movimiento del contador
    if (fila == 0):
        mueve = 1
    else:
        mueve = -1

    # Recoge las fichas
    fichas = mancala[fila,casilla]
    mancala[fila,casilla] = 0
    
    # inicia la siembra
    while not(fichas==0):
        casilla = casilla + mueve
        if (casilla>=m):
            casilla = m-1
            fila = 1
            mueve = -1 
        if (casilla<0):
            casilla = 0
            fila = 0
            mueve = 1
        mancala[fila,casilla] = mancala[fila,casilla]+1
        fichas = fichas-1

    return(mancala)

# PROGRAMA PARA EL JUEGO ---------------
# inicializa tablero
mancala = np.ones(shape=(2,8),dtype=int)
mancala = mancala*4
mancala[:,0] = 0
mancala[:,7] = 0
casa1 = 0
casa2 = 0
print('  1 2 3 4 5 6 7 8')
print(mancala)

while not(casa1>24 or casa2>24):
    
    jugador = 1
    print(' Juega 1')
    casilla = input('¿Cual casilla?:')
    while not(casilla>'1' and casilla<'8'):
        casilla = input('¿Cual casilla?:')
    mancala = siembra(mancala,jugador-1, int(casilla)-1)
    print('  1 2 3 4 5 6 7 8')
    print(mancala)

    jugador = 2
    print(' Juega 2')
    casilla = input('¿Cual casilla?:')
    while not(casilla>'1' and casilla<'8'):
        casilla = input('¿Cual casilla?:')
    mancala = siembra(mancala,jugador-1, int(casilla)-1)
    casa1 = mancala[0,0]+mancala[1,0]
    casa2 = mancala[0,7]+mancala[1,7]
    print('  1 2 3 4 5 6 7 8')
    print(mancala)

# Muestra ganadores
if (casa1>casa2):
    print(' Gana Jugador 1')
else:
    print(' Gana Jugador 2')

s3Eva_IT2014_T4 Función siembra

Ejercicios: 3Eva_IT2014_T4 Función siembra

complementa el programa requerido en tema 3

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2014_T4 Juego Poli-Mancala
import numpy as np

# funcion siembra
def siembra(mancala,jugador,casilla):
    tamano = np.shape(mancala)
    m = tamano[1]
    fila = jugador
    # Selecciona el movimiento del contador
    if (fila == 0):
        mueve = 1
    else:
        mueve = -1

    # Recoge las fichas
    fichas = mancala[fila,casilla]
    mancala[fila,casilla] = 0
    
    # inicia la siembra
    while not(fichas==0):
        casilla = casilla + mueve
        if (casilla>=m):
            casilla = m-1
            fila = 1
            mueve = -1 
        if (casilla<0):
            casilla = 0
            fila = 0
            mueve = 1
        mancala[fila,casilla] = mancala[fila,casilla]+1
        fichas = fichas-1

    return(mancala)

s1Eva_IIT2014_T3 Parasailing sin sobrecarga, parejas

Ejercicios: 1Eva_IIT2014_T3 Parasailing sin sobrecarga, parejas

Propuesta de solución en Python, también el diagrama en pdf

El ejercicio consiste en una revisión ordenada del peso de cada persona a participar con una posible pareja.

i 1 2 3
pesos[i] 120 180 165

Los pesos de cada persona se registran en un arreglo.

# INGRESO
capacidad = int(input('capacidad de equipo: '))
n = int(input('personas en cola: '))

peso = np.zeros((n+1),dtype=int)
i = 1
while (i<=n):
    peso[i] = int(input("Peso[ "+str(i)+"]:"))
    i = i + 1

El algoritmo comienza revisando una persona i junto a otra persona j. Si la pareja no sobrecarga el paracaidas, se cuenta y registra la pareja posible de participar en un solo viaje de parasailing.

        s = peso[i] + peso[j]

        # revisa capacidad
        if (s<=capacidad):
            parejas = parejas + 1
            posibles.append([i,j])

Use un contador y una lista para el registro.

Instrucciones Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2014_T3 Parasailing sin sobrecarga, parejas
# propuesta solucion: edelros@espol.edu.ec

import numpy as np

# INGRESO
capacidad = int(input('capacidad de equipo: '))
n = int(input('personas en cola: '))

peso = np.zeros((n+1),dtype=int)
i = 1
while (i<=n):
    peso[i] = int(input("Peso[ "+str(i)+"]:"))
    i = i + 1

# PROCEDIMIENTO

# busca parejas
posibles = []
parejas = 0
i = 1
while (i<n):
    j = i + 1
    while (j<=n):
        s = peso[i] + peso[j]

        # revisa capacidad
        if (s<=capacidad):
            parejas = parejas + 1
            posibles.append([i,j])
        
        j = j + 1
    i = i + 1

# SALIDA
print('La cantidad de parejas encontradas es: ')
print(parejas)
print('Se puede combinar: ')
print(posibles)

resultado del algoritmo

capacidad de equipo: 350
personas en cola: 3
Peso[ 1]:120
Peso[ 2]:180
Peso[ 3]:165
La cantidad de parejas encontradas es: 
3
Se puede combinar: 
[[1, 2], [1, 3], [2, 3]]
>>> 
capacidad de equipo: 300
personas en cola: 3
Peso[ 1]:120
Peso[ 2]:180
Peso[ 3]:165
La cantidad de parejas encontradas es: 
2
Se puede combinar: 
[[1, 2], [1, 3]]
>>> 

Diagrama de Flujo Mientras-Repita

Diagrama de Flujo Repita-Hasta

ejercicios resueltos Python 1eva_iit2014_t3 pdf

s1Eva_IT2014_T1 Cuadrado de Cinco

Ejercicio: 1Eva_IT2014_T1 Cuadrado de Cinco

Propuesta de solución en Python

Operación decena decena+1 añadir resultado
252 2 3 6 625
852 8 9 72 7225

Para validar la operación con los múltiplos de 5 menores que 100, se usa un intervalo entre [5,m]. El intervalo inicia con el número 5

El siguiente número ascendente terminado en cinco es el anterior sumando 10.

La decena del número se obtiene como el cociente de la división para 10

El número por añadir a la izquierda de 25 es es la multiplicación de:
(decena)*](decena+1), que equivale a las centenas.

Para revisar que se cumpla la operación en todo el intervalo [5,m] se usa una bandera «funciona«.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2014_T1 Cuadrado de Cinco
# Tarea: validar que la unidad del número sea 5

# INGRESO
m = int(input('rango [5,m]: '))

# PROCEDIMIENTO
numero = 5 # inicial
funciona = True # si funciona
while (numero<=m and funciona==True):
    
    # terminados en 5 desde el 15
    numero = numero+10

    # algoritmo cuadrado de 5
    unidad = numero%10    #residuo
    decena = numero//10   #cociente
    a = decena*(decena + 1)
    propuesto = a*100 + 25

    # calcula cuadrado
    calculado = numero*numero

    #compara resultado
    if (calculado!=propuesto):
        funciona = False

# SALIDA
print ('Algoritmo funciona:',funciona)
if (funciona==0):
    print(numero)

resultado del algoritmo dentro del intervalo.

rango [5,m]: 100
Algoritmo funciona: True
>>> 
rango [5,m]: 1000
Algoritmo funciona: True
>>> 

s1Eva_IIT2014_T2 Triángulos aleatorios en rectángulo

Ejercicios: 1Eva_IIT2014_T2 Triángulos aleatorios en rectángulo

Propuesta de solución en Python, también se adjunta el diagrama en pdf

Para iniciar el ejercicio, se requiere la cantidad n de triángulos a generar y los límites del plano donde se generan [maxa,maxb]

Para cada triángulo se generan las coordenadas de los vértices (xi,yi), usando números aleatorios ajustados a los límites del plano.

Lo más importante para este ejercicio es determinar las distancias entre los vértices, pues con ellas se determina el tipo de triángulo, siguiento las reglas básicas de la geometría.

Puede darse el caso que los puntos se encuentren en una sola línea en el plano, el caso se verifica al revisar si la suma de la longitud de dos lados es la longitud del tercer lado. Comprobar en todas las combinaciones ésta situación.

Instrucciones en Python

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2014_T2 Triángulos aleatorios en rectángulo
# Propuesta de solución: edelros@espol.edu.ec

import numpy as np
import random as rnd
import matplotlib.pyplot as plt

# INGRESO
n = int(input(" cuántos triángulos: "))
maxa = int(input(" rango lado a: "))
maxb = int(input(" rango lado b: "))

# PROCEDIMIENTO
equilatero = 0
isosceles  = 0
escaleno   = 0
colineal   = 0

i = 1
while (i<=n):
    
    # puntos aleatorios
    x1 = int(rnd.random()*maxa) +0
    y1 = int(rnd.random()*maxb) +0
    
    x2 = int(rnd.random()*maxa) +0
    y2 = int(rnd.random()*maxb) +0

    x3 = int(rnd.random()*maxa) +0
    y3 = int(rnd.random()*maxb) +0

    # distancias entre puntos
    a = np.sqrt((x2-x1)**2 + (y2-y1)**2)
    b = np.sqrt((x3-x2)**2 + (y3-y2)**2)
    c = np.sqrt((x1-x3)**2 + (y1-y3)**2)

    # realiza la gráfica de cada triángulo
    plt.plot([x1, x2], [y1, y2])
    plt.plot([x2, x3], [y2, y3])
    plt.plot([x1, x3], [y1, y3])

    # clasifica triángulos
    s1 = a + b
    s2 = b + c
    s3 = c + a
    if (s1==c or s2==a or s3==b):
        colineal = colineal + 1
    else:
        if (a==b and b==c):
            equilatero = equilatero+1
        else:
            if (a!=b and b!=c and c!=a):
                escaleno = escaleno+1
            else:
                isosceles = isosceles+1
    i=i+1

# SALIDA
print("equilateros: ")
print(equilatero)
print("escalenos: ")
print(escaleno)
print("isosceles: ")
print(isosceles)
print("colineales: ")
print(colineal)

# muestra la gráfica
plt.show()

Resultado del algoritmo

 cuántos triángulos: 100
 rango lado a: 10
 rango lado b: 10
equilateros: 
0
escalenos: 
90
isosceles: 
4
colineales: 
6
>>>
 cuántos triángulos: 100
 rango lado a: 10
 rango lado b: 10
equilateros: 
0
escalenos: 
87
isosceles: 
6
colineales: 
7
>>> 

Diagrama de Flujo

ejercicios resueltos Python 1eva_iit2014_t2 pdf

s1Eva_IIT2014_T1 Verificar si a y b son Números amigos

Ejercicios: 1Eva_IIT2014_T1 Números amigos

Propuesta de solución en Python, también se adjunta diagrama en pdf

Dos números enteros positivos a y b son amigos sí solo sí la suma de los divisores de a es igual al número b, y la suma de los divisores de b es igual al número a.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2014_T1 Números amigos
# Propuesta de solucion: edelros@espol.edu.ec

# INGRESO
a = int(input("número a: "))
b = int(input("número b: "))

# PROCEDIMIENTO

# suma de divisores para "a"
atotal = 1
i = 2
while (i<a):
      r = a%i
      if (r==0):
          atotal = atotal + i
      i = i + 1

# suma de divisores para "b"
btotal = 1
j = 2
while (j<b):
      r = b%j
      if (r==0):
          btotal = btotal + j
      j = j + 1

if (atotal==b and btotal==a):
      namigos = 1
else:
      namigos = 0

# SALIDA
print('números amigos: ', namigos)

resultado del algoritmo

número a: 220
número b: 284
números amigos:  1
>>> 
número a: 221
número b: 284
números amigos:  0

Diagrama de Flujo con Mientras-Repita

Diagrama de Flujo con Repita-Hasta

ejercicios resueltos Python 1eva_iit2014_t1 pdf

s3Eva_IIT2013_T4 Gestionar asientos en cine

Ejercicio: 3Eva_IIT2013_T4 Gestionar asientos en cine

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2013_T4 Gestionar asientos en cine
import numpy as np

# Genera la sala
n = int(input('numero filas: '))
m = int(input('numero columnas:'))
asiento = np.zeros(shape=(n,m), dtype=int)

opcion = '0'
while not(opcion=='5'):
    print(' 1. Vender Boletos')
    print(' 2._Mostrar_asientos')
    print(' 3. Contar vendidos')
    print(' 4. Buscar libre')
    print(' 5. Salir ')

    opcion = input('cual opcion: ')

    if (opcion=='1'):
        print('Vender Boletos')
        fila = int(input('fila:'))
        columna = int(input('columna:'))
        if (asiento[fila,columna]==0):
            asiento[fila,columna] = 1
        else:
            print('asiento ocupado')

        
    if (opcion=='2'):
        print('Mostrar_asientos')
        print(asiento)
        
    if (opcion=='3'):
        print('Contar vendidos')
        contar = 0
        for fila in range(0,n,1):
            for columna in range(0,m,1):
                contar = contar+asiento[fila,columna]
        print(contar)
        
    if (opcion=='4'):
        print('Buscar libre')
        
    if (opcion=='5'):
        print('Salir')

s3Eva_IT2013_T3 Menú de consejerías académicas

Ejercicios: 3Eva_IT2013_T3 Menú de consejerías académicas

Propuesta de solución en Python,  ejercicio iniciado en clase como referencia. Se incluyó grabar los datos en un archivo.

Tarea: continúa ejercicio en la siguiente clase, para las opciones no desarrolladas y la función del tema 2

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2013_T3 Menú de consejerías académicas

estudiante = []
opcion = '0'
while not(opcion=='7'):
    print('1. Ingresar datos de estudiante')
    print('2. Ingresar datos de consejero')
    print('3. Sorteo de consejeros/estudiantes')
    print('4. Mostrar lista de estudiantes por consejero')
    print('5. Mostrar consejero de un estudiante')
    print('6. Grabar datos')
    print('7. Salir')

    opcion = input('cual opcion: ')

    if (opcion=='1'):
        # INGRESO
        mtr = input('matricula: ')
        nom = input('nombre: ')
        ema = input('email: ')
        nac = int(input('año nacimiento: '))
        while not(nac>1900 and nac<2018):
            print('usar anos desde el ultimo siglo...')
            nac = int(input('año nacimiento: '))

        unestudiante = {'matricula':mtr,
                        'nombre':nom,
                        'email':ema,
                        'nacimiento':nac}
        estudiante.append(unestudiante)

    if (opcion=='4'):
        print('los estudiantes registrados son: ')
        print(estudiante)

    if (opcion=='6'):
        print('Guardar datos en archivo...')
        narchivo = 'misdatos.txt'

        archivo  = open(narchivo, 'w')
        n = len(estudiante)

        i = 0
        while not(i>=n):
            nom = estudiante[i]['nombre']
            ema = estudiante[i]['email']
            linea = nom +','+ema+ '\n' # str(nac)
            archivo.write(linea)
            i = i + 1

        archivo.close()