Esempio n. 1
0
# -*- coding: utf-8 -*-
import estructura
estructura.crear("fraccion","numerador denominador")

#sumaF: fraccion fraccion -> fraccion
#suma fracciones
#ej: sumF(fraccion(3,4),fraccion(4,5)) = fraccion(numerador=31, denominador=20)
def sumaF(a,b):
    num = b.denominador*a.numerador + a.denominador*b.numerador
    den = b.denominador*a.denominador
    return fraccion(num,den)

#restaF: fraccion fraccion -> fraccion
#resta fracciones
#ej: restaF(fraccion(3,4),fraccion(4,5)) = fraccion(numerador=-1, denominador=20)
def restaF(a,b):
    num = b.denominador*a.numerador - a.denominador*b.numerador
    den = b.denominador*a.denominador
    return fraccion(num,den)

#mulF: fraccion fraccion -> fraccion
#multiplica fracciones
#ej: mulF(fraccion(3,4),fraccion(4,5)) = fraccion(numerador=12, denominador=20)
def mulF(a,b):
    num=a.numerador*b.numerador
    den=a.denominador*b.denominador
    return fraccion(num,den)

#divF: fraccion fraccion -> fraccion
#divide fracciones
#ej: divF(fraccion(3,4),fraccion(4,5)) = fraccion(numerador=15, denominador=16)
En efecto, podemos
representar una _fracción_ como una estructura formada por dos
atributos: un _numerador_ y un _denominador_.


```python
import estructura
estructura.crear("nombre", "atributo1 atributo2 ...  atributoN")
```

### Definiendo fracciones como una estructura
"""

import estructura
estructura.crear("fraccion", "numerador denominador")
"""Fijarse que la función ```estructura.crear``` crea un _molde_ para crear una o más fracciones."""

a = fraccion(1, 2)  # crea la primera fracción y la guarda en a

a  # consultamos para ver que cosa es 'a'

print(a)  # que sucede si intentamos mostrar a en pantalla?

a.numerador  # vemos el numerador de 'a'

a.denominador  # vemos el denominador de 'a'

b = a  # se pueden copiar
print(a.numerador)
print(a.denominador)
Esempio n. 3
0
# -*- coding: utf-8 -*-
"""
Created on Mon Sep 30 19:41:34 2019

@author: Diego Campanini
"""
#============================= C2 2015-1 P1 ==================================
#%%
import estructura
from lista import *

#%% crear estructura que representa a un polinomio p(x)=5x^3 + 3x
estructura.crear('coeficiente', 'valor potencia')
P = lista(coeficiente(5, 3), lista(coeficiente(3, 1), None))


#%% funcion para evaluar un polinomio, por ej p(10)=5*10^3 + 3*10
def evaluar(p, x):
    if p == None:
        return 0
    else:
        coef = cabeza(p).valor
        exponente = cabeza(p).potencia
        unaParte = coef * (x**exponente)
        return unaParte + evaluar(cola(p), x)


print
print 'p(10)=5*10^3 + 3*10 =', evaluar(P, 10)

#%% funcion para evaluar p(x) para una lista de valores x
Esempio n. 4
0
import estructura
# -*- coding: cp1252 -*-
estructura.crear("Fecha", "dia mes ano")
estructura.crear("Lista", "valor siguiente")


#esLista(L): Lista(any)->bool
#dice si L es una Lista
#ej: esLista(Lista(4,None))==True
def esLista(L):
    if type(L) == Lista or L == None:
        return True
    return False


assert esLista(Lista(4, None))


#cabeza:Lista(any)->any
#entrega el valor de una lista
#ej:cabeza(Lista(4,None))==4
def cabeza(L):
    assert esLista(L)
    return L.valor


assert cabeza(Lista(4, None)) == 4


#cola:Lista(any)->Lista(any)
#entrega el siguiente valor de una lsita
Esempio n. 5
0
import estructura

# Diseno de la estructura
# lista : valor (any = cualquier tipo) siguiente (lista)
estructura.crear("lista", "valor siguiente")

# identificador para listas vacias
listaVacia = None


# crearLista: any lista -> lista
# devuelve una lista cuya cabeza es valor
# y la cola es resto
def crearLista(valor, resto):
    return lista(valor, resto)


# cabeza: lista -> any
# devuelve la cabeza de una lista (un valor)
def cabeza(lista):
    return lista.valor


# cola: lista -> lista
# devuelve la cola de una lista (una lista)
def cola(lista):
    return lista.siguiente


# vacia: lista -> bool
# devuelve True si la lista esta vacia
Esempio n. 6
0
import estructura
import random
#Arbol Binario
#AB: valor(any), izq(AB), der(AB)
estructura.crear("AB", "valor izq der")
estructura.crear("Lista", "valor siguiente")


def rand_list(contador=0):
    if contador == 15:
        return None
    return Lista(random.randint(1, 100), rand_list(contador + 1))


def insertar(x, A):
    assert A == None or type(A) == AB
    if A == None:
        return AB(x, None, None)
    v = A.valor
    if x == v:
        return A
    if x < v:
        return AB(v, insertar(x, A.izq), A.der)
    if x > v:
        return AB(v, A.izq, insertar(x, A.der))
    return


def list_to_abb(L, ab):
    if L == None:
        return ab
Esempio n. 7
0
#Distancia puntos 3D

# calculoDstancia: Punto3D Punto3D -> Float
# Calcula la distancia entre 2 puntos 3D
# Ejemplo: calculaDistancia(Punto3D(0,0,0), Punto3D(1,1,1))
# Devuelve: 1.73205080757

import estructura
from modulos import *
from cerca import *

estructura.crear("punto3D", "coordenadaX coordenadaY coordenadaZ")

coordenadaXpuntoA = input("Punto A, coordenada x?: ")
coordenadaYpuntoA = input("Punto A, coordenada y?: ")
coordenadaZpuntoA = input("Punto A, coordenada z?: ")

coordenadaXpuntoB = input("Punto B, coordenada x?: ")
coordenadaYpuntoB = input("Punto B, coordenada y?: ")
coordenadaZpuntoB = input("Punto B, coordenada z?: ")

puntoA = punto3D(coordenadaXpuntoA, coordenadaYpuntoA, coordenadaZpuntoA)
puntoB = punto3D(coordenadaXpuntoB, coordenadaYpuntoB, coordenadaZpuntoB)

print "La distancia entre A y B es: " + str(calculoDistancia(puntoA, puntoB))

# Test 1 usando la funcion cerca
epsilon = 0.0001
puntoA = punto3D(0, 0, 0)
puntoB = punto3D(1, 1, 1)
assert cerca(calculoDistancia(puntoA, puntoB), 1.73205080757, epsilon)
Esempio n. 8
0
Original file is located at
    https://colab.research.google.com/drive/1N5bBYn4UnkxEz_bd2OImYXH_CJa4e2Ye

#Auxiliar 8 - Mutación y Aliasing

### P1. ONU
La ONU requiere su ayuda manteniendo un registro actualizado de los mandatarios de todos los países del mundo. Para esto desarrollaremos una función que permita cambiar el nombre del presidente de un país.

### A)
Cree la estructura **no mutable** llamada 'Pais' que tenga los atributos nombre, continente y presidente_actual.
"""

import estructura
# Pais: nombre(str) continente(str) nombre_presidente(str)
estructura.crear("Pais", "nombre continente nombre_presidente")
"""### B)
Cree la estructura **mutable** PaisMut con los atributos nombre, continente y presidente_actual.
"""

# PaisMut: nombre(string) continente(string) nombre_presidente(str)
estructura.mutable("PaisMut", "nombre continente nombre_presidente")
"""### C)
Defina la función cambioDeMando, que recibe un **Pais** y el nombre de un presidente, y retorne un Pais con el nuevo nombre del presidente.
"""


#cambioDeMando: Pais, str -> Pais
#Recibe un Pais (pais) y el nombre del nuevo presidente (n),
# y retorna un Pais que cambia el nombre del presidente de pais por el dado como parametro n.
#Ej: cambioDeMando(Pais("EEUU", "America", "Donald Trump "), "Joe Biden") entrega Pais("EEUU", "America", "Joe Biden")
Esempio n. 9
0
import estructura

estructura.crear('tiempo', 'horas minutos')

[t1, t2, t3, t4] = [tiempo(23, 59), tiempo(0, 0), tiempo(12, 0), tiempo(0, 1)]


def aString(tiempo):
    return str(tiempo.horas) + ':' + str(tiempo.minutos)


#Casos de prueba
assert aString(t1) == '23:59'
assert aString(t2) == '0:0'
assert aString(t3) == '12:0'
assert aString(t4) == '0:1'


def enMinutos(tiempo):
    return tiempo.horas * 60 + tiempo.minutos


#Casos de prueba
assert enMinutos(t1) == 1439
assert enMinutos(t2) == 0
assert enMinutos(t3) == 720
assert enMinutos(t4) == 1


def sumar(tiempo1, tiempo2):
    if tiempo1.minutos + tiempo2.minutos >= 60:
Esempio n. 10
0
# -*- coding: utf-8 -*-
"""
Created on Sat Sep 21 19:39:47 2019

@author: Diego Campanini
"""
# c2 2018-2 p2
#%%
import estructura
from lista import *

#%% primero se crea la estructura y el ABB con los que se va a trabajar
estructura.crear('libro', 'codigo titulo rutLector')
a = libro(10, 'Python', '12345678-K'
          )  #ejemplo1: libro 'Python' de código 10 prestado a RUT '12345678-K'
b = libro(20, 'Python 3.0',
          '')  #ejemplo2: libro 'Python 3.0' de código 20 no está prestado
c = libro(30, 'Java', '87654321-0'
          )  #ejemplo3: libro 'Java' de código 30 prestado a RUT '87654321-0'

estructura.crear('arbol', 'valor izq der')
#libros de biblioteca en arbol binario de búsqueda según valores del código de los libros
bib = arbol(b, arbol(a, None, None),
            arbol(c, None, None))  #None es equivalente a arbolVacio
# crear segundo arbol
d = libro(5, 'c++', '')
e = libro(12, 'hi python', '')
bib2 = arbol(b, arbol(a, arbol(d, None, None), arbol(e, None, None)),
             arbol(c, None, None))

Esempio n. 11
0
import estructura
#Tiempo: horas(int) minutos(int)
estructura.crear('Tiempo', 'horas minutos')

#def esTiempo: Tiempo -> Bool
#determina si un valor esta escrito en Tiempo
#ej: esTiempo(Tiempo(2,20)) -> True
def esTiempo(x):
    if type(x) == Tiempo:
        h=x.horas
        m=x.minutos
        return 0<=h<=24 and 0<=m<=59
    else:
        return False
assert esTiempo(Tiempo(2,20))==True

#def aString: Tiempo -> str
#da el string de un tiempo de la forma HH:MM
#ej: aString(Tiempo(2,20))-> 2:20
def aString(x):
    assert esTiempo(x)
    return str(x.horas)+':'+str(x.minutos)
assert aString(Tiempo(2,20))=='2:20'

#def: enMinutos: Tiempo -> int
#da el tiempo solo en minutos
#ej: enMinutos(Tiempo(1,30)) -> 90
def enMinutos(x):
    assert esTiempo(x)
    return x.horas*60+x.minutos
assert enMinutos(Tiempo(1,30))==90
Esempio n. 12
0
import estructura
#lista: valor(any) siguiente(lista)
estructura.crear('listas', 'valor siguiente')


#cabeza: lista -> any
#primer valor de de una lista
#ej: cabeza(lista("a",lista("b",None)))->"a"
def cabeza(L):
    assert type(L) == lista
    returl.valor
Esempio n. 13
0
import estructura
import math

estructura.crear('fraccion', 'numerador denominador')


def simplifica_fraccion(f):
    """Simplifica la fraccion _f_."""
    g = math.gcd(f.numerador, f.denominador)
    return fraccion(f.numerador / g, f.denominador / g)


assert simplifica_fraccion(fraccion(4, 8)) == fraccion(1, 2)


def suma_fracciones(f1, f2):
    """Suma dos fracciones definidas usando el modulo _estructura_."""
    assert type(f1) == fraccion and type(f2) == fraccion
    assert f1.denominador != 0 and f2.denominador != 0

    num = f1.numerador * f2.denominador + f1.denominador * f2.numerador
    den = f1.denominador * f2.denominador
    sum = fraccion(num, den)
    sumSimplificado = simplifica_fraccion(sum)
    return sumSimplificado


f1 = fraccion(1, 2)
f2 = fraccion(3, 4)
assert suma_fracciones(f1, f2) == fraccion(5, 4)
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 25 18:23:22 2019

@author: Diego Campanini
"""
#============================= C2 2017-2 P2 ==================================
#%%
import estructura
from lista import *

#%% crear estruturas que se almacenaran en un arbol

#alumno: nombre(str) sexo(str)
estructura.crear('alumno', 'nombre sexo')
#arbol: valor(alumno) izq(arbol) der(arbol)
estructura.crear('arbol', 'valor izq der')

# crear arbol
abb=arbol(alumno('jose','M'),\
arbol(alumno('gabi','F'),arbol(alumno('ana','F'),None,None),None),\
arbol(alumno('rosa','F'),None,None))

#%% ===== P2 (a) ========


# my solution
def mybuscar(name, abb, n=0):
    if abb == None:
        return n + 1  # ojo aqui yo habia puesto solo 'n', pero para que
        # coincida con lo del profe es n+1
# Modulo para ser implementado en tarea2.py
import estructura
from lista import *
from abstraccion import *

estructura.crear("resultadoMesa", "circunscripcion mesa apruebo rechazo")


# buscaMesa: lista(resultadoMesa) str num -> resultadoMesa
# Busca una mesa dentro de una lista de mesas
# Ejemplo: siendo L una lista de mesas,
# si buscamos buscaMesa(L,"San Miguel",2) debe entregar resultadoMesa("San Miguel",2,200,60)
def buscaMesa(L, circu, num_mesa):
    assert type(L) == lista or L == listaVacia
    assert type(circu) == str
    assert type(num_mesa) == int

    if vacia(L):
        return None
    else:
        if cabeza(L).circunscripcion == circu and cabeza(L).mesa == num_mesa:
            return cabeza(L)
        else:
            return buscaMesa(cola(L), circu, num_mesa)


# Tests
r1 = resultadoMesa("Santiago", 3, 100, 20)
r2 = resultadoMesa("San Miguel", 2, 200, 60)
L = crearLista(r1, crearLista(r2, listaVacia))
assert buscaMesa(L, "Santiago", 3) == resultadoMesa("Santiago", 3, 100, 20)
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 25 12:45:36 2019

@author: Diego Campanini
"""

#%% while + cartas + list()
import estructura
estructura.crear('carta','calle ciudad pais')


cartas = list( )
c1 = carta('Lira 123', 'Santiago', 'Chile')
cartas = cartas + [ c1 ]
c2 = carta('Abaroa 2128', 'Calama', 'Chile')
cartas = cartas + [ c2 ]
c3 = carta('Vespucio 443', 'Arica', 'Chile')
cartas = cartas + [ c3 ]

#%% buscar una ciudad en la list de cartas y retornar True si esta o False si no
# my version
def my_estaLaCiudad(cartas,ciudad):
    for i in range(len(cartas)):
        if cartas[i].ciudad==ciudad:
            return True
    return False

print
print 'esta la ciudad: ',my_estaLaCiudad(cartas,'lama')