<filename>tareas/3/GarciaFigueroaAlberto-GarciaEdgar/RR.py
from collections import deque
import operator
class RR:
    def __init__(self,ProcesoA,ProcesoB,ProcesoC,ProcesoD,ProcesoE,quantum): #Tiempos en donde entran al sistema
        self.A=ProcesoA
        self.B=ProcesoB
        self.C=ProcesoC
        self.E=ProcesoE
        self.D=ProcesoD
        self.T_total=0
        self.P_total=0
        self.E_total=0
        self.quantum=quantum
        self.TiempoTotal=0
        self.Final = []
    
    def runRR(self):
        procesos=[self.A,self.B,self.C,self.D,self.E]
        procesosBase=[self.A,self.B,self.C,self.D,self.E]
        
        #PROCESOS ORDENADOS
        sortedProcesses=sorted(procesos, key=operator.attrgetter("tiempo_de_llegada"))
        queueProcesos = []
        for i in sortedProcesses:
            queueProcesos.append(i)
        
        primero = True
        terminados=[]
        #COLA CON PROCESO EN ESPERA
        waiting=[]
        waiting.append(sortedProcesses.pop(0))
        
        while waiting:
            proc = waiting.pop(0)
            if(primero==True):
                proc.inicio = proc.tiempo_de_llegada
                primero = False
            banderaQuantum = 0
            #SE REQUIERE QUE NO HAYA EXCEDIDO EL QUANTUM Y QUE AÚN LE FALTE TIEMPO PARA TERMINAR EL PROCESO
            while (banderaQuantum < self.quantum and proc.tRestantes > 0):
                banderaQuantum += 1
                proc.tRestantes-=1
                self.TiempoTotal += 1
                self.Final += proc.id
                for x in procesosBase: ##BUSCA EN LA BASE DE LOS PROCESOS SI ALGUNO TIENE SU TIEMPO DE LLEGADA EN EL QUANTUM ACTUAL PARA AGREGARLO A LA COLA DE PROCESOS EN ESPERA
                    if(x.tiempo_de_llegada == self.TiempoTotal):
                        try:
                            waiting.append(sortedProcesses.pop(0))
                        except(IndexError):
                            print("Somos estudiantes, Parece que algo malo paso")
            if proc.tRestantes: ##SI LE FALTA TIEMPO DE EJECUCIÓN SE VUELVE A AGREGAR A LA COLA DE PROCESOS PENDIENTES
                waiting.append(proc)
            else:
                proc.fin= self.TiempoTotal
                terminados.append(proc)
        
        #SE LLENAN LOS PARAMETROS CALCULADOS DE LOS PROCESOS
        for i in terminados:
            i.T =i.fin - i.tiempo_de_llegada
            i.E = i.T -i.t
            i.P =i.T /i.t
            #print(i.id +"  "+str(i.tiempo_de_llegada)+"  "+str(i.t)+"  "+str(i.inicio)+"  "+str(i.fin)+"  " +str(i.T)+"  " + str(i.E)+"  " + str(i.P))
            self.T_total= self.T_total + i.T
            self.E_total= self.E_total + i.E
            self.P_total= self.P_total + i.P 
        self.T_total=self.T_total / len(terminados) 
        self.E_total=self.E_total / len(terminados) 
        self.P_total=self.P_total / len(terminados) 
    
    
    def listDiaf(self):
        for i in self.Final:
            print(str(i) , end = '')
        print("")
        print("\nEL valor de T:"+str(self.T_total))
        print("EL valor de E:"+str(self.E_total))
        print("EL valor de P:"+str(round((self.P_total),2)))

<filename>tareas/3/GarciaFigueroaAlberto-GarciaEdgar/RR.py
from collections import deque
import operator
class RR:
    def __init__(self,ProcesoA,ProcesoB,ProcesoC,ProcesoD,ProcesoE,quantum): #Tiempos en donde entran al sistema
        self.A=ProcesoA
        self.B=ProcesoB
        self.C=ProcesoC
        self.E=ProcesoE
        self.D=ProcesoD
        self.T_total=0
        self.P_total=0
        self.E_total=0
        self.quantum=quantum
        self.TiempoTotal=0
        self.Final = []
    
    def runRR(self):
        procesos=[self.A,self.B,self.C,self.D,self.E]
        procesosBase=[self.A,self.B,self.C,self.D,self.E]
        
        #PROCESOS ORDENADOS
        sortedProcesses=sorted(procesos, key=operator.attrgetter("tiempo_de_llegada"))
        queueProcesos = []
        for i in sortedProcesses:
            queueProcesos.append(i)
        
        primero = True
        terminados=[]
        #COLA CON PROCESO EN ESPERA
        waiting=[]
        waiting.append(sortedProcesses.pop(0))
        
        while waiting:
            proc = waiting.pop(0)
            if(primero==True):
                proc.inicio = proc.tiempo_de_llegada
                primero = False
            banderaQuantum = 0
            #SE REQUIERE QUE NO HAYA EXCEDIDO EL QUANTUM Y QUE AÚN LE FALTE TIEMPO PARA TERMINAR EL PROCESO
            while (banderaQuantum < self.quantum and proc.tRestantes > 0):
                banderaQuantum += 1
                proc.tRestantes-=1
                self.TiempoTotal += 1
                self.Final += proc.id
                for x in procesosBase: ##BUSCA EN LA BASE DE LOS PROCESOS SI ALGUNO TIENE SU TIEMPO DE LLEGADA EN EL QUANTUM ACTUAL PARA AGREGARLO A LA COLA DE PROCESOS EN ESPERA
                    if(x.tiempo_de_llegada == self.TiempoTotal):
                        try:
                            waiting.append(sortedProcesses.pop(0))
                        except(IndexError):
                            print("Somos estudiantes, Parece que algo malo paso")
            if proc.tRestantes: ##SI LE FALTA TIEMPO DE EJECUCIÓN SE VUELVE A AGREGAR A LA COLA DE PROCESOS PENDIENTES
                waiting.append(proc)
            else:
                proc.fin= self.TiempoTotal
                terminados.append(proc)
        
        #SE LLENAN LOS PARAMETROS CALCULADOS DE LOS PROCESOS
        for i in terminados:
            i.T =i.fin - i.tiempo_de_llegada
            i.E = i.T -i.t
            i.P =i.T /i.t
            #print(i.id +"  "+str(i.tiempo_de_llegada)+"  "+str(i.t)+"  "+str(i.inicio)+"  "+str(i.fin)+"  " +str(i.T)+"  " + str(i.E)+"  " + str(i.P))
            self.T_total= self.T_total + i.T
            self.E_total= self.E_total + i.E
            self.P_total= self.P_total + i.P 
        self.T_total=self.T_total / len(terminados) 
        self.E_total=self.E_total / len(terminados) 
        self.P_total=self.P_total / len(terminados) 
    
    
    def listDiaf(self):
        for i in self.Final:
            print(str(i) , end = '')
        print("")
        print("\nEL valor de T:"+str(self.T_total))
        print("EL valor de E:"+str(self.E_total))
        print("EL valor de P:"+str(round((self.P_total),2)))

#Tiempos en donde entran al sistema #PROCESOS ORDENADOS #COLA CON PROCESO EN ESPERA #SE REQUIERE QUE NO HAYA EXCEDIDO EL QUANTUM Y QUE AÚN LE FALTE TIEMPO PARA TERMINAR EL PROCESO ##BUSCA EN LA BASE DE LOS PROCESOS SI ALGUNO TIENE SU TIEMPO DE LLEGADA EN EL QUANTUM ACTUAL PARA AGREGARLO A LA COLA DE PROCESOS EN ESPERA ##SI LE FALTA TIEMPO DE EJECUCIÓN SE VUELVE A AGREGAR A LA COLA DE PROCESOS PENDIENTES #SE LLENAN LOS PARAMETROS CALCULADOS DE LOS PROCESOS #print(i.id +"  "+str(i.tiempo_de_llegada)+"  "+str(i.t)+"  "+str(i.inicio)+"  "+str(i.fin)+"  " +str(i.T)+"  " + str(i.E)+"  " + str(i.P))