def mitad(n): """ Crea un arreglo de tamano n cuyos elementos están dados de la forma 1,2,..,n/2,n/2,...,2,1 Parametros: n: Numero de elementos de arreglo. Retorna: Una lista con n números reales aleatorios entre 0 y 1. """ if n % 2 != 0: arrg = ArrayT(n - 1) for i in range(1, n // 2 + 1): arrg[i - 1] = i for i in range(n // 2, n): arrg[i] = int(n // 2) n -= 2 return arrg elif n % 2 == 0: arrg = ArrayT(n) for i in range(1, n // 2 + 1): arrg[i - 1] = i for i in range(n // 2, n): arrg[i] = int(n // 2) n -= 2 return arrg
def Mergesort(arreglo): k = 1 N= len(arreglo) NuevoArreglo=ArrayT(N) while k<N: a,b,c = 0, k, min(2*k,N) while b<N: p,q,r = a,b,a while p!=b and q !=c: if arreglo[p] <= arreglo[q]: NuevoArreglo[r] = arreglo[p] r,p = r+1, p+1 elif arreglo[q] <= arreglo[p]: NuevoArreglo[r]=arreglo[q] r,q = r+1, q+1 while p != b: NuevoArreglo[r] = arreglo[p] r,p = r+1, p+1 while q != c: NuevoArreglo[r] = arreglo[q] r,q = r+1, q+1 r = a while r!=c: arreglo[r]=NuevoArreglo[r] r = r+1 a,b,c = a + 2*k, b + 2*k, min(c + 2*k,N) k = k*2 return NuevoArreglo
def cargarCaritas(archivo): """ Descripcion: Funcion que carga un archivo con las caritas que se usaran en el chat ALGOGRAM Parametros: archivo: path del archivo """ try: global ret, msj, cargado with open(archivo, 'r') as f: for line in f: aux = line.split("\t") n = len(aux) ret = ArrayT(n) print(aux) for i in range(n): stop = 0 for j in range(len(aux[i]) - 1, -1, -1): if aux[i][j] == '=': stop = j break ret[i] = aux[i][0:stop] msj = " Caritas agregadas" cargado = True except FileNotFoundError: msj = " El archivo especificado no se ha encontrado"
def obtener_arreglo_n_4(n): """ Dado un conjunto ordenado de N elementos de tipo entero, se escogen al azar n=4 pares de elementos que se encuentran separados 4 lugares, entonces se intercambian los pares. Parametros: n: Numero de elementos del arreglo. Retorna: Un objeto lista con valores casi ordenados """ arrg = ArrayT(n) L = ArrayT(int(n/2)) for i in range(0,n): arrg[i]=i j=0 for x in range(0,int(n/4)): var=random.randint(0,n-5) arrg[var], arrg[var + 4] = arrg[var +4 ], arrg[var] return arrg
def obtener_arreglo_enteros(n): """ Crea arreglo con n valores enteros que son generados de forma aleatoria. Parametros: n: Numero de elementos del arreglo. Retorna: Un objeto lista con n valores enteros aleatorios. """ arrg = ArrayT(n) for i in range(n): arrg[i] = random.randint(0, M) return arrg
def obtener_arreglo_ordenado(n): """ Crea arreglo de tamaño N tal que sus elementos van 1...N-1,N Parametros: n: Numero de elementos del arreglo. Retorna: Un objeto lista con n valores de la forma 1....N-1,N """ arrg = ArrayT(n) for i in range(n): arrg[i]=i return arrg
def reales_aleatorios(n): """ Crea un arreglo cuyos elementos son números reales entre 0 y 1 generados aleatoriamente. Parametros: n: Numero de elementos del arreglo. Retorna: Una lista con n números reales aleatorios entre 0 y 1. """ arrg = ArrayT(n) for i in range(n): arrg[i] = random.uniform(0, 1) return arrg
def cero_uno(n): """ Crea un arreglo de ceros y unos aleatorios. Parametros: n: Numero de elementos del arreglo. Retorna: Un objeto lista con n ceros y unos colocados aleatoriamente. """ arrg = ArrayT(n) for i in range(n): arrg[i] = random.randint(0, 1) return arrg
def __init__(self, n): """ Descripcion: Funcion constructora de "Registro_Usuarios" Parametros: n: Tamaño del hash """ assert type(n) == int and n > 0, "La tabla no puede ser inicializada con 0 slots" self.tamano = n self.tablaRU = ArrayT(n) for i in range(n): self.tablaRU[i] = ListaDoble()
def obtener_arreglo_descendente(n): """ Crea arreglo con n valores enteros que son generados de forma descendentes. Parametros: n: Numero de elementos del arreglo. Retorna: Un objeto lista con n valores enteros descendente. """ arrg = ArrayT(n) for i in range(0,n): arrg[i]= n-i return arrg
def copia_arreglo(a_orig): """ Crea una nueva copia de un arreglo. Parametros: a_orig: Un arreglo a copiar. Retorna: Un nuevo arreglo copia del arreglo de entrada. """ n = len(a_orig) a_copia = ArrayT(n) for i in range(n): a_copia[i] = a_orig[i] return a_copia
def __init__(self, n): """ Descripcion: Funcion que crea la tabla de hash de tamano 'n' Parametros: n: Tamaño del hash a crear """ assert type( n ) == int and n > 0, "La tabla no puede ser inicializada con 0 slots" self.tamano = n self.tablaC = ArrayT(n) for i in range(n): self.tablaC[i] = ListaDoble()
def obtener_arreglo_reales(n): """ Crea arreglo de tamaño N tal que sus elementos son reales comprendidos entre [0,1) Parametros: n: Numero de elementos del arreglo. Retorna: Un objeto lista con valores aleatorios reales entre [0,1) """ arrg = ArrayT(n) for i in range(n): arrg[i]=random.uniform(0,1) return arrg
def orden_inverso(n): """ Crea un arreglo de una secuencia descendente dependiendo del tamaño dado. Parametros: n: Numero de elementos del arreglo. Retorna: Un objeto lista con n valores secuenciales decrecientes. """ arrg = ArrayT(n) for i in range(n): arrg[i] = int(n) n -= 1 return arrg
def ordenado(n): """ Crea un arreglo de una secuencia ascendente dependiendo del tamaño dado. Parametros: n: Numero de elementos del arreglo. Retorna: Un objeto lista con n valores secuenciales decrecientes. """ arrg = ArrayT(n) i = 1 while i <= n: arrg[i - 1] = i i += 1 return arrg
def casi_ordenado(n): arrg = ArrayT(n) i = 0 while i < n: arrg[i] = i i += 1 k = 0 while k <= (n // 4): numeroAleatorio = random.randint(0, n - 5) arrg[numeroAleatorio], arrg[numeroAleatorio + 4] = arrg[numeroAleatorio + 4], arrg[numeroAleatorio] k += 1 return arrg
def obtener_arreglo_mitad(n): """ Crea arreglo de tamaño N tal que sus elementos tienen la siguiente secuencia: 1,2...N/2,N/2,....2,1 Parametros: n: Numero de elementos del arreglo. Retorna: Un objeto lista con valores ordenados de la siguiente secuencia: 1,2...N/2,N/2,....2,1 """ arrg = ArrayT(n) for i in range(1,int(n/2)+1): arrg[i-1]=i for i in range(int(n/2),n): arrg[i]=n-i return arrg
def mergesort(array): """ Implementacion del algoritmo Mergesort del Kaldewaij. Parametro: array: Arreglo a ordenar Efecto Secundario: El arreglo se ordena ascendente """ k = 1 while k < len(array): a = 0 b = k c = min(2 * k, len(array)) while b < len(array): p = a q = b r = a z = ArrayT(c - a) while p != b and q != c: if array[p] <= array[q]: z[r - a] = array[p] r = r + 1 p = p + 1 elif array[q] <= array[p]: z[r - a] = array[q] r = r + 1 q = q + 1 while p != b: z[r - a] = array[p] r = r + 1 p = p + 1 while q != c: z[r - a] = array[q] r = r + 1 q = q + 1 r = a while r != c: array[r] = z[r - a] r = r + 1 a = a + 2 * k b = b + 2 * k c = min((c + 2 * k), len(array)) k = 2 * k
def cargarUsuarios(self, archivo): # Carga a los usuarios desde un archivo abrir = open(archivo, "r") lista = abrir.readlines() n = 0 for x in lista: n += 1 users = ArrayT(n) for x in range(n): t = lista[x].strip("\n") p = t.split("\t") users[x] = p for x in users: u = Usuario() u.crearUsuario(x[0], x[1], x[2], None) self.agregarUsuario(u)
def agregarContacto(self, usuario): c = self.contactos if c == None: self.contactos = Lista(usuario, None) return True else: repetido = False count = 0 while c != None: count += 1 c = c.next c = self.contactos while c != None: if c.element.nombre == usuario.nombre: print("El contacto ya está en la lista") repetido = True break else: c = c.next if repetido == False: c = self.contactos self.centinela = self.contactos lista = ArrayT(count + 1) t = 0 while c != None: lista[count] = c.element c = c.next count -= 1 t += 1 lista[0] = usuario t = t + 1 ordenado = mergesort(lista) for x in range(t): self.centinela.element = ordenado[x] if x != t - 2: self.centinela = self.centinela.next elif x == t - 2: self.centinela.next = Lista(ordenado[x + 1], None) self.centinela = self.centinela.next else: pass return True else: return False
Yuni Quintero 14-10880 German Robayo 14-10924 Profesor: Guillermo Palma """ # Variables de interfaz titulo = "\v █████╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ █████╗ ███╗ ███╗\n" titulo += " ██╔══██╗██║ ██╔════╝ ██╔═══██╗██╔════╝ ██╔══██╗██╔══██╗████╗ ████║\n" titulo += " ███████║██║ ██║ ███╗██║ ██║██║ ███╗██████╔╝███████║██╔████╔██║\n" titulo += " ██╔══██║██║ ██║ ██║██║ ██║██║ ██║██╔══██╗██╔══██║██║╚██╔╝██║\n" titulo += " ██║ ██║███████╗╚██████╔╝╚██████╔╝╚██████╔╝██║ ██║██║ ██║██║ ╚═╝ ██║\n" titulo += " ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝\n" msj = "" datos = ArrayT(6) datos[0] = " 1. Registrarse" datos[1] = " 2. Iniciar sesion" datos[2] = " 3. Cargar Usuarios" datos[3] = " 4. Eliminar usuario" datos[4] = " 5. Cargar caritas" datos[5] = " 6. Salir" sep = " +{:-^34}+".format('\0') menu_ingreso = sep menu_ingreso += "\n |{:32} |\n |{:32} |\n |{:32} |\n |{:32} |\n \ |{:32} |\n |{:32} |\n".format(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5]) menu_ingreso += sep + '\n' datos = ArrayT(8) datos[0] = "1. Agregar contacto" datos[1] = "2. Eliminar contacto"
from arrayT import ArrayT from PyQt5.QtWidgets import * import sys import subprocess as sp if __name__ == "__main__": app = QApplication(sys.argv) rep = Reproductor() rep.show() sp.call('clear', shell=True) canciones = open("canciones.in", "r") n = int(canciones.readline()) lista = ArrayT(n) can = canciones.readlines() for x in range(n): t = can[x].strip("\n") p = t.split("\t") lista[x] = p for x in lista: c = Cancion(x[1], x[0], x[2]) rep.playlist.agregar(c) ############# # Menu loop # #############
def crearTabla(self, n): # Crea la tabla vacía self.tablaRU = ArrayT(n)
if __name__ == "__main__": app = QApplication(sys.argv) try: archivo = sys.argv[1] except: print( "Recuerde ingresar el archivo como argumento del programa.\nEj: python3 cliente.py <archivo>" ) sys.exit(1) rep = Reproductor() rep.show() sp.call('clear', shell=True) with open(archivo, 'r') as f: lineas = f.readlines() n = int(lineas[0][:len(lineas) - 1]) lista_de_reproduccion = ArrayT(n) for i in range(n): linea = lineas[i + 1].split('\t') lista_de_reproduccion[i] = Cancion(linea[0], linea[1], linea[2][0:len(linea[2]) - 1]) rep.sonarDespues( Cancion(linea[1], linea[0], linea[2][0:len(linea[2]) - 1])) conf = "\tPresione ***<ENTER> para cancelar la operacion" data = ArrayT(9) data[0] = "1-Listar canciones" data[1] = "2-Agregar para sonar justo despues de la cancion actual" data[2] = "3-Agregar para sonar justo antes de la cancion actual" data[3] = "4-Ordenar lista de reproduccion por artista" data[4] = "5-Ordenar lista de reproduccion por titulo" data[5] = "6-Eliminar cancion por titulo"