Parcial I Término 2003 – 2004. Julio 08, 2003 /ICM00794
Tema 3 (25 puntos) Dado un número n entero positivo, el siguiente procedimiento aplicado repetidamente al número lo modifica hasta que finalmente toma el valor de 1:
a) Si es par, divídalo para dos
b) Si es impar, multiplíquelo por tres y súmele 1
Diseñe un diagrama de flujo que encuentre cuál es el número entre 1 y 100 que requiere más repeticiones del procedimiento anterior hasta convertirlo en 1.
Realice un programa que valide el ingreso de un valor n entero (10 ≤ n ≤ 50) y verifique si cumple tal propiedad. Sugerencia: calcule ambos lados de la ecuación y compare resultados.
Rúbrica: suma de serie al cubo (5 puntos), formula derecha y comparación (5 puntos). Revisión de la propiedad (5 puntos)
Final I Término 2003 – 2004. Septiembre 02, 2003 /ICM00794
Tema 1. (25 puntos) Escriba 3 funciones en C/C++, denominadas promedio, mayor y menor, las cuales reciben como parámetro un arreglo de 12 números reales y retornen, respectivamente:
el promediode los elementos del vector,
el mayorde los elementos del vector y
el menorde los elementos del vector.
Escriba un programa en C/C++ que almacene en un arreglo las temperaturas medias de los 12 meses del año (datos de tipo float ingresados desde el teclado); luego llame a las 3 funciones anteriores a fin de mostrar por pantalla:
la temperatura anual promedio,
la diferencia de temperaturas entre el mes mas caluroso y el mes mas frío.
Se deben comparar las cadenas U y V en los elementos de las mismas posiciones.
Primero se plantea un algoritmo para determinar el número de parejas diferentes que existen dentro de cada cadena.
Si las cadenas difieren en el tamaño, la respuesta será ‘-1’.
Intrucciones en Python
# ICM00794-Fundamentos de Computación - FCNM-ESPOL# 2Eva_IIIT2003_T3 Distancia de Hamming# INGRESO
U = '20001'
V = '10103'# PROCEDIMIENTO
n = len(U)
m = len(V)
diferente= -1 # tamaño diferente U,Vif n == m:
diferente = 0
i = 0
whilenot(i>=n):
if U[i] != V[i]:
diferente = diferente +1
i = i + 1
# SALIDAprint('distancia Hamming: ', diferente)
resultado del algoritmo
distancia Hamming: 3
>>>
Luego se procede a convertir el algoritmo a una función y hacer la llamada desde un programa, con lo que se cumple lo requerido en cada literal
Instrucciones en Python usando una función
# ICM00794-Fundamentos de Computación - FCNM-ESPOL# 2Eva_IIIT2003_T3 Distancia de Hamming# literal a. funciondefdHamming(U,V):
n = len(U)
m = len(V)
diferente = -1
if n == m:
diferente = 0
i = 0
whilenot(i>=n):
if U[i] != V[i]:
diferente = diferente +1
i = i + 1
return(diferente)
# Programa -------------# INGRESO
U = '20001'
V = '10103'# PROCEDIMIENTO
diferente = dHamming(U,V)
# SALIDAprint('distancia Hamming: ', diferente)
Tarea: Añadir la lectura de los datos desde un archivo.
La función no debe admitir valores de x negativos o cero, de darse el caso se responde np.NaN que corresponde a no es un número o ‘Not a Number’.
# 2Eva_IIIT2003_T2 Raíz cuadrada por Newtonimport numpy as np
# literal a. función recursivadefraizNewton(x,n)
if n<=0 or x<=0:
# no se admiten negativos o cero
f = np.NaN
else:
if n == 1:
f = x/2 # valor inicialif n>1:
f = 0.5 *(raizNewton(x,n-1)+x/raizNewton(x,n-1))
return (f)
# literal b. Programa ---------------# INGRESO
x = float(input('ingrese x: '))
n = int(input('aproximación n-esima: '))
# PROCEDIMIENTOprint(' i , f(i)')
for i inrange(0,n+1,1):
print(i , raizNewton(x,i))
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)