Skip to content

Commit

Permalink
Initial Commit
Browse files Browse the repository at this point in the history
  • Loading branch information
IsmeniaIMGO committed Nov 25, 2022
0 parents commit acbb32e
Show file tree
Hide file tree
Showing 10 changed files with 755 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# created by virtualenv automatically
*
81 changes: 81 additions & 0 deletions Algoritmo1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@

procesos = []
n = int(input("Ingrese el número de procesos: "))

# Función de entrada
def inProcesos():

for i in range(n):
print("-------------------------------------------------------------------")
pName = input (f"Ingrese el nombre del proceso {i + 1}: ")
llegada = int (input ("Ingrese la hora de llegada: "))
ejecucion = int (input ("Ingrese el tiempo de ejecucion: "))

# Nombre del proceso, hora de llegada, tiempo de ejecucion, inicio, finalización, tiempo de servicio, indice de servicio, tiempo de espera
procesos.append([pName, llegada, ejecucion, 0, 0, 0, 0, 0])

def mostrarResultado(resultado):
# Calcular el tiempo de servicio, el indice de servicio y tiempo de espera
for i in range(n):
resultado[i][5] = resultado[i][4] - resultado[i][1]
resultado[i][6] = round((resultado[i][2] / resultado[i][5]),2)
resultado[i][7] = resultado[i][5] - resultado[i][2]

# Calcular el tiempo de servicio, el indice de servicio y el tiempo de espera promedio
tiempoServicioProm = 0
tiempoIservicioProm = 0
tiempoEsperaProm = 0

for i in range(n):
tiempoServicioProm = (tiempoServicioProm + resultado[i][5])
tiempoIservicioProm = (tiempoIservicioProm + resultado[i][6])
tiempoEsperaProm = (tiempoEsperaProm + resultado[i][7])

tiempoServicioProm = round((tiempoServicioProm/n),2)
tiempoIservicioProm = round((tiempoIservicioProm/n),2)
tiempoEsperaProm = round((tiempoEsperaProm/n),2)

# Resultados de salida, ordenados según la hora de inicio
resultado.sort(key = lambda x:x[3], reverse = False)
print ("Resultado de la ejecución:")

print("Proceso | Llegada | Ejecucion | Salida | Servicio | Indice Servicio | Espera |")
for i in range(n):
print(" ",resultado[i][0]," | ",resultado[i][1]," | ",resultado[i][2], " | ",resultado[i][4], " | ",resultado[i][5], " | ",resultado[i][6], " | ",resultado[i][7], " |")
print(f"Tiempo de Servicio promedio: {tiempoServicioProm}")
print(f"Indice Servicio promedio: {tiempoIservicioProm}" )
print(f"Tiempo de Espera promedio: {tiempoEsperaProm}")


# Primero algoritmo de primer servicio
def FCFS():

fcfs_procesos = procesos.copy()

# Ordenar la lista en orden ascendente por hora de llegada x: x [1] se ordena por hora de llegada
fcfs_procesos.sort(key = lambda x:x[1], reverse = False )

# Calcular tiempo de inicio y finalización
for i in range(n):
if(i == 0):
startTime = fcfs_procesos[i][1]
fcfs_procesos[i][3] = startTime
fcfs_procesos[i][4] = startTime + fcfs_procesos[i][2]

elif(i > 0 and fcfs_procesos[i - 1][4] < fcfs_procesos[i][1]):
startTime = fcfs_procesos[i][1]
fcfs_procesos[i][3] = startTime
fcfs_procesos[i][4] = startTime + fcfs_procesos[i][2]

else:
startTime = procesos[i - 1][4]
fcfs_procesos[i][3] = startTime
fcfs_procesos[i][4] = startTime + fcfs_procesos[i][2]

mostrarResultado(fcfs_procesos)

def lanzar():
inProcesos()
FCFS()

lanzar()
85 changes: 85 additions & 0 deletions Algoritmo2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@

procesos = []
n = int (input ("Ingrese el número de procesos: "))

# Función de entrada
def inProcesos():
for i in range(n):
print("-------------------------------------------------------------")
pName = input (f"Ingrese el nombre del proceso {i + 1}: ")
llegada = int (input ("Ingrese la hora de llegada: "))
ejecucion = int (input ("Ingrese el tiempo de ejecucion: "))

# Nombre del proceso, hora de llegada, tiempo de ejecucion, inicio, finalización, tiempo de servicio, indice de servicio, tiempo de espera
procesos.append([pName, llegada, ejecucion, 0, 0, 0, 0, 0])

def mostrarResultado(resultado):

# Calcular el tiempo de servicio, el indice de servicio y tiempo de espera
for i in range(n):
resultado[i][5] = resultado[i][4] - resultado[i][1]
resultado[i][6] = round((resultado[i][2] / resultado[i][5]),2)
resultado[i][7] = resultado[i][5] - resultado[i][2]

# Calcular el tiempo de servicio, el indice de servicio y el tiempo de espera promedio
tiempoServicioProm = 0
tiempoIservicioProm = 0
tiempoEsperaProm = 0

for i in range(n):
tiempoServicioProm = (tiempoServicioProm + resultado[i][5])
tiempoIservicioProm = (tiempoIservicioProm + resultado[i][6])
tiempoEsperaProm = (tiempoEsperaProm + resultado[i][7])

tiempoServicioProm = round((tiempoServicioProm/n),2)
tiempoIservicioProm = round((tiempoIservicioProm/n),2)
tiempoEsperaProm = round((tiempoEsperaProm/n),2)

# Resultados de salida, ordenados según la hora de inicio
resultado.sort(key = lambda x:x[3], reverse = False)
print ("Resultado de la ejecución:")

print("Proceso | Llegada | Ejecucion | Salida | Servicio | Indice Servicio | Espera |")
for i in range(n):
print(" ",resultado[i][0]," | ",resultado[i][1]," | ",resultado[i][2]," | ",resultado[i][4]," | ",resultado[i][5]," | ",resultado[i][6]," | ",resultado[i][7]," |")
print(f"Tiempo de Servicio promedio: {tiempoServicioProm}")
print(f"Indice Servicio promedio: {tiempoIservicioProm}" )
print(f"Tiempo de Espera promedio: {tiempoEsperaProm}")

# Primer algoritmo de proceso más corto
def SJF():
temp_procesos = procesos.copy()
sjf_procesos = []
queue_procesos = []

# # Ordenar la lista en orden ascendente por hora de llegada x: x [1] se ordena por hora de llegada
temp_procesos.sort(key = lambda x: x[1], reverse = False)


while(len(sjf_procesos) < len(procesos)):

for p in temp_procesos[::-1]:
if(len(sjf_procesos) != 0):
if (sjf_procesos[-1][1] < p[1] < sjf_procesos[-1][4]):
queue_procesos.append(temp_procesos.pop(temp_procesos.index(p)))

queue_procesos.sort(key=lambda x: x[2], reverse = False)

if(len(queue_procesos) == 0):
queue_procesos.append(temp_procesos.pop(0))
queue_procesos[0][3] = queue_procesos[0][1]
queue_procesos[0][4] = queue_procesos[0][3] + queue_procesos[0][2]

elif (queue_procesos[0][1] < sjf_procesos[-1][4]):
queue_procesos[0][3] = sjf_procesos[-1][4]
queue_procesos[0][4] = queue_procesos[0][3] + queue_procesos[0][2]

sjf_procesos.append(queue_procesos.pop(0))

mostrarResultado(sjf_procesos)

def lanzar():
inProcesos()
SJF()

lanzar()
107 changes: 107 additions & 0 deletions Algoritmo3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
# Función para buscar el tiempo de espera
# para cada proceso
def buscarTiempoEspera(procesos, n, te):
tr = [0] * n

# Se copia el tiempo de ráfaga en tr[]
for i in range(n):
tr[i] = procesos[i][1]
completados = 0
t = 0
min = 999999999
corto = 0
revisado = False

# Procesar hasta que todos los procesos se completen
while (completados != n):

# Encuentrar el proceso con el tiempo restante
# mínimo entre los procesos que llegan hasta la
# hora actual
for j in range(n):
if ((procesos[j][2] <= t) and
(tr[j] < min) and tr[j] > 0):
min = tr[j]
corto = j
revisado = True
if (revisado == False):
t += 1
continue

# Reducir el tiempo restante en uno
tr[corto] -= 1

# Se actualiza el mínimo
min = tr[corto]
if (min == 0):
min = 999999999

# Si un proceso se ejecuta completamente
if (tr[corto] == 0):

# Incremento completo
completados += 1
revisado = False

# Encuentra la hora de finalización
# del proceso actual
tiempoTerminacion = t + 1

# Calcular tiempo de espera
te[corto] = (tiempoTerminacion - proc[corto][1] -
proc[corto][2])

if (te[corto] < 0):
te[corto] = 0

# Incrementa el tiempo
t += 1

# Función para calcular el tiempo de respuesta
def encontrarTiempoRespuesta(procesos, n, te, tdr):

# Calcular tiempo de respuesta
for i in range(n):
tdr[i] = procesos[i][1] + te[i]

# Función para calcular tiempos medios de espera
# y respuesta.
def encontrarTiempoPromedio(procesos, n):
te = [0] * n
tdr = [0] * n

# Función para encontrar el tiempo de espera
# para todos los procesos
buscarTiempoEspera(procesos, n, te)

# Función para encontrar el tiempo de respuesta
# para todos los procesos
encontrarTiempoRespuesta(procesos, n, te, tdr)

# Mostrar procesos junto con todos los detalles
print("Procesos Tiempo ráfaga en espera")
total_te = 0
total_tdr = 0
for i in range(n):

total_te = total_te + te[i]
total_tdr = total_tdr + tdr[i]
print(" ", procesos[i][0], "\t\t\t",
procesos[i][1], "\t\t\t",
te[i], "\t\t\t", tdr[i])

print("\nTiempo medio de espera = %.5f "%(total_te /n) )
print("Tiempo medio de respuesta = ", total_tdr / n)

# Controlador del coódigo

# id's de procesos
proc = [[1, 5, 1], [2, 9, 2],
[3, 7, 4], [4, 4, 3],
[5, 8, 5]]
n = 5

def lanzar():
encontrarTiempoPromedio(proc, n)

lanzar()
33 changes: 33 additions & 0 deletions Algoritmo4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
class proceso(object):
def __init__(self, id, prioridad):
self.id = id
self.prioridad = prioridad

print("Ingrese el numero de procesos")
nnumeros = int(input(">"))
if (nnumeros > 0):
listadeprocesos = []
for i in range(nnumeros):
tmpllegada = -1
print("-------------------- Proceso " + str(i + 1) + " ------------------------")

prioridad = 0
while (prioridad< 1):
print("Ingrese la prioridad del proceso", i+1)
prioridad = int(input(">"))
# en el arreglo el primer item es el "id del proceso", prioridad
listadeprocesos.append(proceso((i + 1), prioridad))
print()
print()

print("Procesoss creados Con exito!!")
print()

listadeprocesos = sorted(listadeprocesos, key=lambda proceso: proceso.prioridad, reverse=True)
print("Orden de ejecucion de procesos: ")
for proceso in listadeprocesos:

print("Proceso " + str(proceso.id) + " Prioridad " + str(proceso.prioridad))



Loading

0 comments on commit acbb32e

Please sign in to comment.