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
Para crear la matriz de Pascal en Python se usa la librería Numpy, con lo que se crea un arreglo de tamaño nxn lleno de ceros.
ejemplo:
1
1
1
1
2
1
1
3
3
1
1
4
6
4
1
1
5
10
10
5
1
….
….
….
….
….
….
Al recorrer la matriz por cada fila f y columna c, si la posición matriz[f,c] es la primera columna a la izquierda (c==0) o la diagonal (f==c) se escribe 1.
Si la posición de la matriz[f,c] es debajo de la diagonal, se suman los valores de las casilla inmediata superior e izquierda superior.
pascal[f,c] = pascal[f-1,c] + pascal[f-1,c-1]
Al terminar el recorrido se tendrá la matriz con el triángulo de Pascal.
Propuesta de solución en Python: py_pdf, también en versión matlab: m_pdf
Tarea: Convertir el algoritmo a función.
Instrucciones en Python
# ICM00794-Fundamentos de Computación - FCNM-ESPOL# 2Eva_IIT2003_T2 Mostrar un triángulo de Pascal# propuesta: edelros@espol.edu.ecimport numpy as np
# INGRESO
n = int(input('tamaño del triangulo: '))
# PROCEDIMIENTO
pascal = np.zeros(shape=(n,n),dtype=int)
f = 0
while (f<n):
c = 0
while (c<=f):
if (c==0 or c==f):
pascal[f,c] = 1
else:
pascal[f,c] = pascal[f-1,c] + pascal[f-1,c-1]
c = c+1
f = f+1
print(pascal)
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 ingresan los datos de los carros en una lista, añadiendo los datos con la instruccion append().
Para el literal a, se concatenan los datos de una fila añadiendo una coma ‘,’ como separador. se escribe cada línea en el archivo.
En el literal b, se recorre la lista analizando los datos de los carros para añadirlos en una lista aparte que contiene los datos de los seleccionados.
Instrucciones en Python
# ICM00794-Fundamentos de Computación - FCNM-ESPOL# 2Eva_IT2003_T4 Registro de carros en archivo# Tarea: validar datos de ingreso# INGRESO
n = int(input('cuantos carros: '))
tabla = []
i = 0
while (i<n):
print('Datos del carro: ... ',i)
placa = input('Placa: ')
anio = input('año: ')
tipo = input('tipo A/auto C/camioneta: ')
marca = input('marca: ')
color = input('color: ')
precio = input('precio: ' )
registro = [placa,anio,tipo,marca,color,precio]
tabla.append(registro)
i = i+1
# PROCEDIMIENTO# literal a)
nombre = 'carros.dat'
archivo = open(nombre,'w')
i = 0
while (i<n):
linea = ''
j = 0
while (j<6):
linea = linea + tabla[i][j] + ','
j = j + 1
linea = linea.strip(',')+'\n'
archivo.write(linea)
i = i + 1
archivo.close()
# literal b
selecciona = []
i = 0
while (i<n):
if (int(tabla[i][1])>1995 and tabla[i][4]=='rojo'andint(tabla[i][5])<6000):
selecciona.append(tabla[i][0])
i = i + 1
# SALIDAprint('archivo guardado')
print(' los autos que cumplen el pedido son:')
print(selecciona)
Propuesta de solución en Python: py_pdf, también versión en matlab: m_pdf
Se requiere desarrollar las funciones usando las operaciones para mostrar el conocimiento de los conceptos.
Como los datos se envían en un vector, se debe recorrer cada elemento del vector para obtener los resultados. Esta parde muestra su dominio del manejo de lazos/bucles con los índices de un arreglo.
Instrucciones en Python
# ICM00794-Fundamentos de Computación - FCNM-ESPOL# 2Eva_IT2003_T1 Funciones promedio, mayor y menor# Se EVALUA escribir un algoritmo# Evite usar las funciones del lenguaje de programación# Propuesta de Solución: edelros@espol.edu.ecdefpromedio(vector):
n = len(vector)
suma = 0
for i inrange(0,n,1):
suma = suma + vector[i]
prm = suma/n
return (prm)
defmayor(vector):
n = len(vector)
# Busca cual es el mayormax = 1
for i inrange(0,n,1):
if (vector[i]>vector[max]):
max = i
# presenta el valor de mayor
z = vector[max]
return (z)
defmenor(vector):
n = len(vector)
# Busca cual es el menormin = 1
for i inrange(0,n,1):
if (vector[i]<vector[min]):
min = i
# presenta el valor de menor
z = vector[min]
return (z)
# PROGRAMA de prueba de funcionesimport numpy as np
# INGRESO
meses = 12
temperatura = np.zeros(meses,dtype=int)
for mes inrange(0,meses,1):
temperatura[mes] = int(input("temperatura["+str(mes+1)+"]: "))
# PROCEDIMIENTO
tprom = promedio(temperatura)
tmax = mayor(temperatura)
tmin = menor(temperatura)
diferencia = tmax-tmin
# SALIDAprint("promedio: "+str(tprom))
print("Diferencia max-min: "+str(diferencia))
Propuesta de solución en Python: py_pdf, también en versión matlab: m_pdf
Es necesario implementar las instrucciones dadas para armar el número
A cada dígito súmele siete.
Al resultado de esta suma, divídelo para 10 y extráigale el residuo.
El valor resultante reemplaza al dígito original
Intercambie el primer dígito con el tercero y el segundo con el cuarto.
Manteniendo el algoritmo simple, con el supuesto que siempre son cuatro dígitos, se extrae cada dígito en las variables a,b,c,d para aplicar las operaciones indicadas.
Instrucciones en Python
# ICM00794-Fundamentos de Computación - FCNM-ESPOL# 2Eva_IIT2002_T3 Encriptar PIN(4 dígitos)# Propuesta: edelros@espol.edu.ec# literal a. funcion defencripta(n):
a = (n%10)+7
n = int(n/10)
b = (n%10)+7
n = int(n/10)
c = (n%10)+7
d = int(n/10)+7
a = a%10
b = b%10
c = c%10
d = d%10
z = b*1000+a*100+d*10+c
return (z)
# literal b. PROGRAMA# INGRESO
clave = int(input('¿cuál es su clave?: '))
while (clave>9999):
print(' la clave es de 4 digitos')
clave = int(input('¿cuál es su clave?: '))
# PROCEDIMIENTO
r = encripta(clave)
# SALIDAprint('clave encriptada es: ', r)
resultado del algoritmo
¿cuál es su clave?: 1254
clave encriptada es: 2189
>>>