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 triangularif usados==t:
estriangular = 1
else:
estriangular = 0
# SALIDAprint(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
whilenot(usados>=t):
usados = usados+piso
piso = piso+1
# verifica si es triangularif usados==t:
estriangular = 1
else:
estriangular = 0
# SALIDAprint(estriangular )
Diagrama de Flujo
Propuesta de solución con diagrama de flujo, Python y otra versión con matlab
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.
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 juegoimport 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
# SALIDAprint('total ganado: ')
print(premio)
print('lanzamientos: ')
print(n)
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 asignadoimport 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
# SALIDAprint('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
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 ar0.
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
# SALIDAprint(s)
Se requiere guardar valores consecutivos del cociente para comparar su diferencia hasta cumplir con la precisión requerida.
Ejemplo de ejecución de algoritmo
>>>
precision decimal: 0.001
cociente: 0.6181818181818182
con diferencia de: 0.0005347593582887278
Se añade al algoritmo de Fibonacci el cálculo del cociente.
# ICM00794-Fundamentos de Computación - FCNM-ESPOL# 1Eva_IIT2002_T4 Cociente de fibonacci# propuesta: edelros@espol.edu.ec# INGRESO
precision = float(input('precision decimal: '))
# PROCEDIMIENTO
a = 1 # Primer cociente
b = 1
c = a+b
cociente1 = a/b
a = b # Segundo cociente
b = c
c = a+b
cociente2 = a/b
diferencia = abs(cociente2-cociente1)
whilenot(diferencia<=precision):
cociente1 = cociente2
a = b
b = c
c = a+b
cociente2 = a/b
diferencia = abs(cociente2-cociente1)
# SALIDAprint('cociente:', cociente2)
print('con diferencia de: ', diferencia)
Propuesta de solución con diagrama de flujo y Python: py_pdf .
Otra versión con matlab: matlab en pdf
Para el ejercicio se requiere el uso de vectores para almacenar cada placa y procesar los datos en el bloque de procedimiento.
Como todos los datos de entrada se han simplificado a la parte numérica de la placa, se usarán arreglos, aprovechando para practicar con numpy.
En el procedimiento se extrae una placa de un auto para obtener el dígito de las unidades. Con el dígito se puede usar condicionales para indicar cuál es el color que le corresponde y contar la placa de cada color asignado.
dígito
COLOR
¿Cuántos?
1, 2
amarillo (código 1)
…
3, 4
café (código 2)
…
5, 6
rojo (código 3)
…
7, 8
azul (código 4)
…
9, 0
verde (código 5)
…
Se continúa con el siguiente auto hasta completar todos los autos registrados en el arreglo.
# ICM00794-Fundamentos de Computación - FCNM-ESPOL# 1Eva_IIT2002_T2 Color de placas de vehículos# propuesta: edelros@espol.edu.ecimport numpy
# INGRESO
n = int(input('cuántos autos: '))
placa = numpy.zeros(n+1,dtype=int)
auto = 1
whilenot(auto>n):
print('placa[',auto,']: ')
placa[auto] = int(input(' : '))
auto = auto+1
# PROCEDIMIENTO# contadores por color
color = numpy.zeros(5+1,dtype=int)
# analiza cada auto
auto = 1
whilenot(auto>n):
digito = placa[auto]%10
if (digito==1 or digito==2):
color[1] = color[1]+1
if (digito==3 or digito==4):
color[2] = color[2]+1
if (digito==5 or digito==6):
color[3] = color[3]+1
if (digito==7 or digito==8):
color[4] = color[4]+1
if (digito==9 or digito==0):
color[5] = color[5]+1
auto = auto+1
# SALIDAprint('Autos por cada color:')
k = 1
whilenot(k>5):
print('Color tipo ',k,'= ',color[k])
k = k+1
Podría intentar realizar el ejercicio con listas, para comparar como se aplican los conceptos.
Tarea: validar que el número de vehículos sea positivo mayor que 0, validar que sean solo tres dígitos en cada placa.
Para crear la tabla del multiplicar mostrada en la pantalla, se requiere usar una cadena de caracteres para cada operación.
El ejemplo resuelto para suma muestra el concepto a usar.
Tarea: realizar para multiplicación
1. Mostrar una tabla de sumar
2. Mostrar una tabla de multiplicar
3. Salir
--- ¿Cuál opcion?: 1
**** menu opcion 1. sumar ****
tabla del número: 3
tabla hasta n: 12
3 + 1 = 4
3 + 2 = 5
3 + 3 = 6
3 + 4 = 7
3 + 5 = 8
3 + 6 = 9
3 + 7 = 10
3 + 8 = 11
3 + 9 = 12
3 + 10 = 13
3 + 11 = 14
3 + 12 = 15
1. Mostrar una tabla de sumar
2. Mostrar una tabla de multiplicar
3. Salir
--- ¿Cuál opcion?:
Para formar la cadena, se requiere usar el mismo tipo de datos convirtiendo cada variable numérica como numero en texto luego añadiendo (concatenando) con el símbolo suma ‘ + ‘ y asi sucesivamente:
cadena = str(numero) + ' + ' +str(i) + ' = '
Al final se completa con el resultado de la operación numérica
cadena = cadena + str(resultado)
se muestra en pantalla la cadena, cambiando el valor de la variable ‘i‘ como un contador en un lazo/bucle .
# 1Eva_IIT2002_T1a Tablas de multiplicar# Ejemplo de un menu# las opciones se proponen por caracteres# menu
opcion = '0'whilenot(opcion=='3'):
print(' 1. Mostrar una tabla de sumar')
print(' 2. Mostrar una tabla de multiplicar')
print(' 3. Salir')
opcion=input(' --- ¿Cuál opcion?: ')
if (opcion=='1'):
print(' **** menu opcion 1. sumar ****')
numero = int(input(' tabla del número: '))
n = int(input(' tabla hasta n: ' ))
# PROCEDIMIENTO
i = 1
while i<=n:
resultado = numero+i
cadena = str(numero) + ' + ' +str(i) + ' = '
cadena = cadena + str(resultado)
print(cadena)
i = i+1
elif (opcion=='2'):
print(' **** menu opcion 2. multiplicar ****')
print('desarrolle como tarea')
elif (opcion=='3'):
print(' **** menu opcion 3. Salir ****')
print(' **** Saliendo del menu ****')
print(' **** Ejemplo de un menu ****')
else:
print('No existe la opcion en el menu')