Examen Final

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 14

EXAMEN FINAL

ALGORITMOS Y ESTRUCTURAS DE DATOS II

NOMBRE Y APELLIDO: ANDY ANTONI BALDEON URRUNAGA

PREGUNTA 1:

PREGUNTA 2:

95% me falta poner un while, para evitar datos que no sean números, como string

Código:

import math

class Triangulo:

def __init__(self, a, b, c):

if a <= 0 or b <= 0 or c <= 0:

raise ValueError("Los lados deben ser positivos."

if a + b <= c or a + c <= b or b + c <= a:

raise ValueError("Los lados no forman un triángulo válido.")

self.a = a

self.b = b

self.c = c

def calcular_area(self):

s = (self.a + self.b + self.c) / 2

area = math.sqrt(s * (s - self.a) * (s - self.b) * (s - self.c))

return area

try:

a = float(input("Introduce la longitud del lado a: "))

b = float(input("Introduce la longitud del lado b: "))

c = float(input("Introduce la longitud del lado c: "))

tri = Triangulo(a, b, c)

area = tri.calcular_area()

print(f"El área del triángulo es: {area}")

except ValueError as e:
print(e)
PREGUNTA 3:

Código.

class FiguraGeometrica:

def __init__(self, base, altura):

self.base = base

self.altura = altura

def dibujar(self):

pass

class Triangulo(FiguraGeometrica):

def dibujar(self):

for i in range(self.altura):

for j in range(self.base):

if j < (self.base - i) // 2 or j >= (self.base + i) // 2:

print(' ', end='')

else:

print('*', end='')

print()

class Rectangulo(FiguraGeometrica):

def dibujar(self):

for i in range(self.altura):

for j in range(self.base):

print('*', end='')

print()

class Circulo(FiguraGeometrica):

def dibujar(self):

radio = self.base // 2

for y in range(-radio, radio + 1):

for x in range(-radio, radio + 1):

if x * x + y * y <= radio * radio:


print('*', end='')

else:

print(' ', end='')

print()

base_triangulo = int(input("Ingrese la base del triángulo: "))

altura_triangulo = int(input("Ingrese la altura del triángulo: "))

base_rectangulo = int(input("Ingrese la base del rectángulo: "))

altura_rectangulo = int(input("Ingrese la altura del rectángulo: "))

radio = int(input("Ingrese el radio del círculo: "))

print("\nTriángulo:")

triangulo = Triangulo(base_triangulo, altura_triangulo)

triangulo.dibujar()

print("\nRectángulo:")

rectangulo = Rectangulo(base_rectangulo, altura_rectangulo)

rectangulo.dibujar()

print("\nCírculo:")

circulo = Circulo(radio, radio)

circulo.dibujar()
PREGUNTA 3:

import matplotlib.pyplot as plt

%matplotlib inline

class KochSnowflake:

def __init__(self):

self.vertices = [(0, 0), (1, 0), (0.5, (3 ** 0.5) / 2)]

self.snowflake = []

self.n = 0

def midpoint(self, p1, p2):

return ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2)

def generate(self):

def koch_segment(p1, p2, depth):

if depth == 0:

return [p1, p2]

else:

mp1 = self.midpoint(p1, p2)

mp2 = ((2 * mp1[0] + p1[0]) / 3, (2 * mp1[1] + p1[1]) / 3)

mp3 = ((2 * mp1[0] + p2[0]) / 3, (2 * mp1[1] + p2[1]) / 3)

mp4 = self.midpoint(mp1, mp3)

koch1 = koch_segment(p1, mp2, depth - 1)

koch2 = koch_segment(mp2, mp4, depth - 1)

koch3 = koch_segment(mp4, mp3, depth - 1)

koch4 = koch_segment(mp3, p2, depth - 1)

return koch1 + koch2 + koch3 + koch4

self.snowflake = [koch_segment(self.vertices[i], self.vertices[(i+1)%3], self.n-1) for i in


range(3)]

def set_n(self, n):


self.n = n

def plot(self):

for i in range(3):

plt.plot(*zip(*self.snowflake[i]), 'k-')

plt.axis('equal')

plt.axis('off')

plt.show()

snowflake = KochSnowflake()

n = int(input("Ingrese el número de niveles de detalle: "))

snowflake.set_n(n)

snowflake.generate()

snowflake.plot()
PREGUNTA 4:

Codifique un programa usando POO. Que muestre la animación de un brazo con dos grados de
libertad. Para controlar el movimiento emplee el teclado.

Solución:

import pygame

import sys

import math

class Brazo:

def __init__(self, longitud1, longitud2):

self.longitud1 = longitud1

self.longitud2 = longitud2

self.angulo1 = 0

self.angulo2 = 0

def actualizar_angulos(self, delta_angulo1, delta_angulo2):

self.angulo1 += delta_angulo1

self.angulo2 += delta_angulo2

def obtener_posicion_extremo(self):

x = self.longitud1 * math.cos(self.angulo1) + self.longitud2 * math.cos(self.angulo1 +


self.angulo2)

y = self.longitud1 * math.sin(self.angulo1) + self.longitud2 * math.sin(self.angulo1 +


self.angulo2)

return int(x), int(y)

class SimuladorBrazo:

def __init__(self, brazo):

pygame.init()
self.brazo = brazo

self.ancho, self.alto = 600, 400

self.pantalla = pygame.display.set_mode((self.ancho, self.alto))

pygame.display.set_caption("Simulador de Brazo")

def ejecutar_simulacion(self):

reloj = pygame.time.Clock()

while True:

for event in pygame.event.get():

if event.type == pygame.QUIT:

pygame.quit()

sys.exit()

keys = pygame.key.get_pressed()

if keys[pygame.K_LEFT]:

self.brazo.actualizar_angulos(0.1, 0)

elif keys[pygame.K_RIGHT]:

self.brazo.actualizar_angulos(-0.1, 0)

elif keys[pygame.K_UP]:

self.brazo.actualizar_angulos(0, 0.1)

elif keys[pygame.K_DOWN]:

self.brazo.actualizar_angulos(0, -0.1)

self.pantalla.fill((255, 255, 255))

pygame.draw.line(self.pantalla, (0, 0, 0), (self.ancho // 2, self.alto // 2),

self.brazo.obtener_posicion_extremo(), 5)

pygame.display.flip()

reloj.tick(30)

if __name__ == "__main__":

brazo = Brazo(100, 80)

simulador = SimuladorBrazo(brazo)

simulador.ejecutar_simulacion()
LINK DEL VIDEO

https://www.youtube.com/watch?v=No1dV8fCn6g

También podría gustarte