Ejercicios: Fundamentos y Control de Flujo¶
Introducción¶
Este conjunto de ejercicios está diseñado para fortalecer tu comprensión de los conceptos fundamentales de programación en Python, enfocándose en tipos de datos básicos, operadores, estructuras condicionales y bucles. Los problemas están organizados por nivel de dificultad y muchos de ellos están contextualizados en aplicaciones físicas simples.
Te recomendamos intentar resolver la mayor cantidad posible de ejercicios. Aquellos que no alcances a completar durante la sesión de clase deberás trabajarlos en casa. La práctica constante es clave para desarrollar fluidez en programación.
Nota
Para cada ejercicio, intenta primero comprender el problema completamente. Luego, diseña una solución antes de comenzar a escribir código. Al finalizar, prueba tu solución con diferentes entradas para verificar su correctitud.
Nivel 1: Fundamentos Básicos¶
Ejercicio 1: Conversión de Unidades de Temperatura¶
Escribe un programa que solicite al usuario una temperatura en grados Celsius y la convierta a:
Grados Fahrenheit \(F = \frac{9}{5} \cdot C + 32\)
Grados Kelvin \(K = C + 273.15\)
El programa debe mostrar ambas conversiones con exactamente dos decimales.
Truco
Para formatear números con un número específico de decimales, puedes usar f-strings con la sintaxis:
f"{variable:.2f}" donde .2f indica dos decimales.
También puedes consultar más opciones de formateo en:
Ejercicio 2: Cálculo de Energía Cinética¶
Crea un programa que pida al usuario la masa de un objeto (en kg) y su velocidad (en m/s), y calcule:
La energía cinética (\(E_c = \frac{1}{2} \cdot m \cdot v^2\))
El momento lineal (\(p = m \cdot v\))
Muestra los resultados con unidades apropiadas.
Ejercicio 3: Análisis de Caída Libre¶
Desarrolla un programa que pida al usuario la altura inicial (en metros) desde la que se deja caer un objeto, y calcule:
El tiempo que tarda en llegar al suelo (\(t = \sqrt{\frac{2h}{g}}\), donde \(g = 9.8 \, \text{m/s}^2\))
La velocidad con la que llega al suelo (\(v = g \cdot t\))
Muestra los resultados con tres decimales.
Ejercicio 4: Operaciones con Vectores Bidimensionales¶
Escribe un programa que solicite las coordenadas (x, y) de dos vectores y realice las siguientes operaciones:
Suma de los vectores
Resta del segundo vector al primero
Producto escalar
Módulo (magnitud) de cada vector
Muestra los resultados en un formato legible.
# Para un vector resultante (3, 4)
print(f"Vector resultante: ({resultado_x}, {resultado_y})")
print(f"Módulo del vector: {modulo}")
Ejercicio 5: Clasificación de Triángulos¶
Crea un programa que solicite las longitudes de los tres lados de un triángulo y determine si es:
Equilátero (tres lados iguales)
Isósceles (dos lados iguales)
Escaleno (ningún lado igual)
Además, verifica si cumple el teorema de Pitágoras (\(a^2 + b^2 = c^2\)) y en ese caso, indica que también es un triángulo rectángulo.
Ejercicio 6: Cálculo de Índice de Masa Corporal (IMC)¶
Escribe un programa que solicite al usuario su peso (en kg) y su altura (en metros) y calcule su IMC (\(\text{peso}/\text{altura}^2\)). Luego, muestra un mensaje según la siguiente clasificación:
IMC < 18.5: «Bajo peso»
18.5 ≤ IMC < 25: «Peso normal»
25 ≤ IMC < 30: «Sobrepeso»
IMC ≥ 30: «Obesidad»
Ejercicio 7: Conversión de Coordenadas¶
Desarrolla un programa que convierta coordenadas de cartesianas a polares y viceversa. El programa debe:
Preguntar al usuario si desea convertir de cartesianas a polares (opción 1) o de polares a cartesianas (opción 2)
Pedir las coordenadas correspondientes
Realizar la conversión y mostrar el resultado
Recuerda que: - Para cartesianas a polares: \(r = \sqrt{x^2 + y^2}\), \(\theta = \arctan2(y, x)\) (en radianes) - Para polares a cartesianas: \(x = r\cos(\theta)\), \(y = r\sin(\theta)\)
Muestra el ángulo tanto en radianes como en grados.
Ejercicio 8: Calculadora de Resistencias en Serie y Paralelo¶
Escribe un programa que solicite al usuario el valor de dos resistencias (en ohms) y calcule:
La resistencia equivalente en serie \(R_{eq} = R_1 + R_2\)
La resistencia equivalente en paralelo \(\frac{1}{R_{eq}} = \frac{1}{R_1} + \frac{1}{R_2}\) o simplificada como \(R_{eq} = \frac{R_1 \cdot R_2}{R_1 + R_2}\)
Muestra los resultados con dos decimales.
Nivel 2: Estructuras de Control¶
Ejercicio 9: Cálculo del Número de Reynolds¶
El número de Reynolds (Re) es un parámetro adimensional utilizado en mecánica de fluidos. Escribe un programa que calcule \(Re = \frac{\rho v D}{\mu}\), donde:
\(\rho\) (rho) es la densidad del fluido
\(v\) es la velocidad
\(D\) es el diámetro
\(\mu\) (mu) es la viscosidad dinámica
El programa debe solicitar estos valores al usuario y luego clasificar el flujo como:
\(Re < 2000\): «Flujo laminar»
\(2000 \leq Re < 4000\): «Flujo de transición»
\(Re \geq 4000\): «Flujo turbulento»
Ejercicio 10: Serie de Taylor para la Función Seno¶
La función seno puede aproximarse mediante la serie de Taylor:
Escribe un programa que solicite:
Un valor x (en radianes)
El número de términos a utilizar en la aproximación
Luego, calcula la aproximación del seno utilizando la serie de Taylor con el número de términos especificado, y compara el resultado con el valor de la función seno incorporada en Python (math.sin).
Ejercicio 11: Simulador de Movimiento Armónico Simple¶
Desarrolla un programa que simule el movimiento armónico simple de un péndulo. El programa debe:
Solicitar la longitud del péndulo (en metros)
Solicitar el ángulo inicial (en grados, asegúrate de que sea pequeño, preferiblemente menor a 15°)
Calcular el período \(T = 2\pi\sqrt{\frac{L}{g}}\) donde \(g = 9.8~\text{m/s}^2\)
Mostrar la posición y velocidad del péndulo en intervalos de 0.1 segundos durante un ciclo completo
Las ecuaciones del movimiento armónico simple para un péndulo son:
Posición angular: \(\theta(t) = \theta_0\cos(\omega t)\) donde \(\omega = \sqrt{\frac{g}{L}}\)
Velocidad angular: \(\dot{\theta}(t) = -\theta_0\omega\sin(\omega t)\)
Nota: Este modelo es una aproximación válida solo para ángulos pequeños donde \(\sin\theta \approx \theta\).
Ejercicio 12: Calculadora de Raíces de Ecuación Cuadrática¶
Escribe un programa que resuelva una ecuación cuadrática de la forma \(ax^2 + bx + c = 0\). El programa debe:
Solicitar los coeficientes a, b y c
Calcular el discriminante (\(\Delta = b^2 - 4ac\))
Determinar si la ecuación tiene: - Dos raíces reales distintas (\(\Delta > 0\)) - Una raíz real doble (\(\Delta = 0\)) - Dos raíces complejas conjugadas (\(\Delta < 0\))
Calcular y mostrar las raíces según corresponda
Ejercicio 13: Cálculo de Resistencia Eléctrica por Temperatura¶
La resistencia eléctrica de un material cambia con la temperatura según:
donde:
\(R_0\) es la resistencia a la temperatura \(T_0\)
\(\alpha\) es el coeficiente de temperatura
\(T\) es la temperatura actual
Escribe un programa que:
Solicite \(R_0\), \(T_0\), y \(\alpha\) para un material (sugerencia: para el cobre, \(\alpha \approx 0.0039 \text{ K}^{-1}\))
Muestre una tabla con valores de resistencia para temperaturas desde \(T_0\) hasta \(T_0+100\) en intervalos de 10 grados
Identifique a qué temperatura la resistencia aumentará un 25% respecto a \(R_0\)
Nota
Esta fórmula es una aproximación válida para pequeños rangos de temperatura alrededor de \(T_0\), donde el comportamiento del material puede considerarse lineal. Asegúrate de usar unidades consistentes para temperatura (°C o K), especialmente al calcular diferencias \((T - T_0)\).
Ejercicio 14: Suma de Números Primos¶
Escribe un programa que calcule la suma de todos los números primos menores o iguales a un número N ingresado por el usuario. Para determinar si un número es primo:
Implementa una función que verifique si un número es primo
Utiliza esa función dentro de un bucle para sumar todos los primos hasta N
Muestra tanto la suma como la lista de números primos encontrados.
Ejercicio 15: Análisis de Trayectoria Parabólica¶
Desarrolla un programa que analice el movimiento de un proyectil lanzado con:
Velocidad inicial $v_0$ (en m/s)
Ángulo $theta$ respecto a la horizontal (en grados)
El programa debe:
Solicitar $v_0$ y $theta$ al usuario
Calcular y mostrar:
El tiempo de vuelo total $t = frac{2 v_0 sin(theta)}{g}$
La altura máxima alcanzada $h = frac{(v_0 sin(theta))^2}{2g}$
El alcance horizontal $R = frac{v_0^2 sin(2theta)}{g}$
La velocidad al momento del impacto mediante tres métodos:
Método analítico (valor teórico: $v = v_0$ en ausencia de resistencia de aire)
Método de diferencias finitas: $vec{v}(t) approx frac{vec{r}(t+Delta t) - vec{r}(t)}{Delta t}$
Método de diferencias centrales: $vec{v}(t) approx frac{vec{r}(t+Delta t) - vec{r}(t-Delta t)}{2Delta t}$
Generar una tabla que muestre la posición (x, y) del proyectil en intervalos de 0.1 segundos hasta que toque el suelo ($y leq 0$)
Comparar el valor teórico de la velocidad de impacto con los obtenidos numéricamente y calcular el error porcentual para cada método
Utiliza $g = 9.8$ m/s² y considera que el proyectil parte desde el origen (0, 0).
Nota
Para el método de diferencias finitas, utiliza los dos últimos puntos antes del impacto.
Para el método de diferencias centrales, utiliza un punto antes y un punto después del último punto calculado antes del impacto.
Si el instante en que el proyectil toca el suelo no coincide exactamente con un múltiplo de 0.1 s, se recomienda realizar una interpolación lineal entre los dos últimos puntos calculados (es decir, el último punto con y>0 y el primero con y<0) para estimar con mayor precisión el tiempo y la posición exactos del impacto.
Ejercicio 16: Calculadora de Dilatación Temporal Relativista¶
La dilatación temporal es un fenómeno predicho por la teoría de la relatividad especial donde:
donde:
\(\Delta t\) es el tiempo propio
\(\Delta t'\) es el tiempo dilatado
\(v\) es la velocidad relativa
\(c\) es la velocidad de la luz (299,792,458 m/s)
Escribe un programa que:
Solicite un tiempo propio en segundos
Solicite una velocidad como porcentaje de la velocidad de la luz (ej. 90 para 90% de c)
Calcule y muestre el tiempo dilatado
Genere una tabla que muestre la dilatación temporal para velocidades desde 0% hasta el porcentaje ingresado, en incrementos de 10%
Ejercicio 17: Simulación de Carga y Descarga de un Capacitor¶
En un circuito RC, la carga de un capacitor sigue la ecuación:
y la descarga sigue:
donde:
Q es la carga máxima (en coulombs)
R es la resistencia (en ohms)
C es la capacitancia (en faradios)
t es el tiempo (en segundos)
RC es la constante de tiempo del circuito
Escribe un programa que:
Solicite valores para R, C y Q al usuario
Calcule la constante de tiempo τ = RC
Simule el proceso de carga, mostrando una tabla con:
Tiempo (en múltiplos de τ/2: 0, 0.5τ, 1.0τ, 1.5τ, …, 5τ)
Carga del capacitor en ese instante
Porcentaje de carga respecto a la carga máxima
Pregunte al usuario si desea simular también el proceso de descarga
Si la respuesta es afirmativa, simule la descarga desde Q, mostrando:
Tiempo (en múltiplos de τ/2: 0, 0.5τ, 1.0τ, 1.5τ, …, 5τ)
Carga remanente en el capacitor
Porcentaje de carga respecto a la carga máxima
Truco
Recuerda que después de 5 constantes de tiempo (5τ), el capacitor se considera prácticamente cargado (aproximadamente al 99.3%) o descargado (aproximadamente al 0.7%).
Ejercicio 18: Cálculo de Aproximación a π¶
El valor de π puede aproximarse mediante la serie:
O expresado de forma analítica:
Escribe un programa que:
Solicite al usuario el número de términos a utilizar
Calcule la aproximación de π utilizando esa cantidad de términos
Muestre una tabla que indique cómo mejora la aproximación a medida que se añaden términos (de 1 en 1) hasta llegar al número especificado
Compare el resultado final con el valor de π proporcionado por la biblioteca math
Ejercicio 19: Verificación de Equilibrio Térmico¶
Cuando dos objetos de masas \(m_1\) y \(m_2\), calores específicos \(c_1\) y \(c_2\), y temperaturas iniciales \(T_1\) y \(T_2\) se ponen en contacto térmico, la temperatura final de equilibrio viene dada por:
Escribe un programa que:
Solicite al usuario los valores de masa, calor específico y temperatura inicial para dos objetos
Calcule y muestre la temperatura final de equilibrio
Determine cuánto calor ha ganado o perdido cada objeto (\(Q = mc(T_f - T_{inicial})\))
Verifique y confirme que el calor total del sistema se conserva (la suma debe ser aproximadamente cero)
Ejercicio 20: Análisis del Efecto Fotoeléctrico¶
La energía cinética máxima de los electrones emitidos en el efecto fotoeléctrico viene dada por:
donde:
\(h\) es la constante de Planck (\(6.626 \times 10^{-34}\) J·s)
\(f\) es la frecuencia de la luz incidente
\(\phi\) es la función trabajo del material
Escribe un programa que:
Solicite la función trabajo de un metal en electronvolts (eV)
Convierta la función trabajo a joules (1 eV = \(1.602 \times 10^{-19}\) J)
Solicite la longitud de onda de la luz incidente en nanómetros
Convierta la longitud de onda a frecuencia (\(f = \frac{c}{\lambda}\), donde \(c = 3 \times 10^8\) m/s)
Determine si ocurre efecto fotoeléctrico (\(E_k > 0\))
En caso afirmativo, calcule y muestre la energía cinética en eV
Calcule la velocidad máxima de los electrones emitidos (\(E_k = \frac{1}{2}mv^2\))
Considera la masa del electrón como \(9.11 \times 10^{-31}\) kg.
Ejercicio 21: Cálculo de la Serie de Fibonacci y la Razón Áurea¶
La serie de Fibonacci (0, 1, 1, 2, 3, 5, 8, 13, …) es una secuencia donde cada número es la suma de los dos anteriores. A medida que avanzamos en la secuencia, el cociente entre términos consecutivos se aproxima a la razón áurea (\(\phi \approx 1.61803...\)).
Escribe un programa que:
Solicite al usuario el número de términos de la secuencia a calcular (n)
Genere y muestre los primeros n términos de la secuencia
Para cada par de términos consecutivos (a partir del segundo), calcule y muestre la razón \(F_n/F_{n-1}\)
Determine a partir de qué término la razón difiere de \(\phi\) en menos de 0.0001
Ejercicio 22: Simulación de Movimiento con Fricción¶
Un objeto de masa m se desliza por una superficie horizontal con una velocidad inicial \(v_0\) y experimenta una fuerza de fricción \(F = \mu mg\), donde \(\mu\) es el coeficiente de fricción y \(g\) es la aceleración de la gravedad.
Escribe un programa que:
Solicite al usuario la masa del objeto (en kg), la velocidad inicial (en m/s) y el coeficiente de fricción
Calcule la aceleración del objeto (\(a = -\mu g\))
Calcule el tiempo que tardará en detenerse (\(t = v_0/|a|\))
Calcule la distancia recorrida hasta detenerse (\(d = v_0^2/(2\mu g)\))
Genere una tabla que muestre la velocidad y posición del objeto en intervalos de 0.1 segundos hasta que se detenga
Utiliza \(g = 9.8 \text{ m/s}^2\).