<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ConkerBadGuy</title>
    <description>The latest articles on DEV Community by ConkerBadGuy (@conkerbadguy).</description>
    <link>https://dev.to/conkerbadguy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1383156%2Fdac180a0-8f85-4748-bb6a-0900d9367a57.png</url>
      <title>DEV Community: ConkerBadGuy</title>
      <link>https://dev.to/conkerbadguy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/conkerbadguy"/>
    <language>en</language>
    <item>
      <title>S.O FIFO y Otros</title>
      <dc:creator>ConkerBadGuy</dc:creator>
      <pubDate>Wed, 10 Apr 2024 14:50:25 +0000</pubDate>
      <link>https://dev.to/conkerbadguy/so-fifo-y-otros-1kdc</link>
      <guid>https://dev.to/conkerbadguy/so-fifo-y-otros-1kdc</guid>
      <description>&lt;h1&gt;
  
  
  include
&lt;/h1&gt;



&lt;h1&gt;
  
  
  include
&lt;/h1&gt;



&lt;h1&gt;
  
  
  include
&lt;/h1&gt;

&lt;p&gt;&lt;br&gt;
using namespace std;&lt;br&gt;
struct Proceso {&lt;br&gt;
 string id;&lt;br&gt;
 int tiempo;&lt;br&gt;
 int prioridad;&lt;br&gt;
 Proceso* siguiente;&lt;br&gt;
};&lt;br&gt;
Proceso* primero = NULL;&lt;br&gt;
Proceso* ultimo = NULL;&lt;br&gt;
void agregarProceso() {&lt;br&gt;
int n;&lt;br&gt;
 cout&amp;lt;&amp;lt;"cuantos datos desea ingresar: ";&lt;br&gt;
 cin&amp;gt;&amp;gt;n;&lt;br&gt;
 for(int i=0;i
 Proceso* nuevo = new Proceso();&lt;br&gt;
 cout &amp;lt;&amp;lt; "Ingrese el id del proceso: ";&lt;br&gt;
 cin &amp;gt;&amp;gt; nuevo-&amp;gt;id;&lt;br&gt;
 cout &amp;lt;&amp;lt; "Ingrese el tiempo del proceso: ";&lt;br&gt;
 cin &amp;gt;&amp;gt; nuevo-&amp;gt;tiempo;&lt;br&gt;
 cout &amp;lt;&amp;lt; "Ingrese la prioridad del proceso: ";&lt;br&gt;
 cin &amp;gt;&amp;gt; nuevo-&amp;gt;prioridad;&lt;br&gt;
 nuevo-&amp;gt;siguiente = NULL;&lt;br&gt;
 if (primero == NULL) {&lt;br&gt;
 primero = nuevo;&lt;br&gt;
 ultimo = nuevo;&lt;br&gt;
 } else {&lt;br&gt;
 ultimo-&amp;gt;siguiente = nuevo;&lt;br&gt;
 ultimo = nuevo;&lt;br&gt;
 }&lt;br&gt;
 cout &amp;lt;&amp;lt; "Proceso agregado correctamente." &amp;lt;&amp;lt; endl;&lt;br&gt;
}&lt;br&gt;
}&lt;br&gt;
void imprimirProcesos() {&lt;br&gt;
 if (primero == NULL) {&lt;br&gt;
 cout &amp;lt;&amp;lt; "No hay procesos en la lista." &amp;lt;&amp;lt; endl;&lt;br&gt;
 return;&lt;br&gt;
 }&lt;br&gt;
 cout &amp;lt;&amp;lt; "Procesos:" &amp;lt;&amp;lt; endl;&lt;br&gt;
 Proceso* actual = primero;&lt;br&gt;
 cout &amp;lt;&amp;lt; "Id " &amp;lt;&amp;lt; " tiempo de ejecucion " &amp;lt;&amp;lt; "prioridad " &amp;lt;&amp;lt; endl;&lt;br&gt;
 while (actual != NULL) {&lt;/p&gt;

&lt;p&gt;cout&amp;lt;&amp;lt;" "&amp;lt;&amp;lt; actual-&amp;gt;id&amp;lt;&amp;lt;" "&amp;lt;tiempo&amp;lt;&amp;lt;" "&amp;lt;prioridad&amp;lt;
 actual = actual-&amp;gt;siguiente;&lt;br&gt;
 }&lt;br&gt;
}&lt;br&gt;
void calcularFIFO() {&lt;br&gt;
 if (primero == NULL) {&lt;br&gt;
 cout &amp;lt;&amp;lt; "No hay procesos en la lista." &amp;lt;&amp;lt; endl;&lt;br&gt;
 }&lt;/p&gt;

&lt;p&gt;else {&lt;br&gt;
 Proceso* actual = primero;&lt;br&gt;
 float tiempoRetorno = 0;&lt;br&gt;
 float tiempoRetornoTotal = 0;&lt;br&gt;
 int numProcesos = 0;&lt;br&gt;
 cout &amp;lt;&amp;lt; "Id " &amp;lt;&amp;lt; " tiempo de ejecucion: " &amp;lt;&amp;lt; " Tiempo de retorno: " &amp;lt;&amp;lt; endl;&lt;br&gt;
 while (actual != NULL) {&lt;br&gt;
 tiempoRetorno += actual-&amp;gt;tiempo;&lt;br&gt;
 tiempoRetornoTotal += tiempoRetorno; // declaramos/asignamos&lt;br&gt;
 cout&amp;lt;&amp;lt;" "&amp;lt;&amp;lt; actual-&amp;gt;id&amp;lt;&amp;lt;" "&amp;lt;tiempo&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;&lt;br&gt;
tiempoRetorno&amp;lt;
 actual = actual-&amp;gt;siguiente;&lt;br&gt;
 numProcesos++;&lt;br&gt;
 }&lt;br&gt;
 float timpoProm=tiempoRetornoTotal/numProcesos;&lt;br&gt;
 cout &amp;lt;&amp;lt; "El tiempo de retorno promedio es: " &amp;lt;&amp;lt; timpoProm &amp;lt;&amp;lt; endl;&lt;br&gt;
 }&lt;br&gt;
}&lt;br&gt;
void calcularSJF() {&lt;br&gt;
if (primero == NULL) {&lt;br&gt;
cout &amp;lt;&amp;lt; "No hay procesos en la lista." &amp;lt;&amp;lt; endl;&lt;br&gt;
}&lt;br&gt;
//se ordena por su tiempo de ejecución&lt;br&gt;
Proceso* actual = primero; //obj de tipo proceso&lt;br&gt;
while (actual != NULL){ // aun no se ha llegadi al final&lt;br&gt;
 Proceso* siguiente = actual-&amp;gt;siguiente;&lt;br&gt;
 while (siguiente != NULL) {&lt;br&gt;
 if (siguiente-&amp;gt;tiempo &amp;lt; actual-&amp;gt;tiempo) { //se compara el tiemp de ejec&lt;br&gt;
 // Intercambiar los procesos&lt;br&gt;
 string idAux = actual-&amp;gt;id;&lt;br&gt;
 int tiempoAux = actual-&amp;gt;tiempo;&lt;br&gt;
 int prioridadAux = actual-&amp;gt;prioridad;&lt;br&gt;
 actual-&amp;gt;id = siguiente-&amp;gt;id;&lt;br&gt;
 actual-&amp;gt;tiempo = siguiente-&amp;gt;tiempo; //intercambia valores actual/siguiente&lt;br&gt;
 actual-&amp;gt;prioridad = siguiente-&amp;gt;prioridad; //tiempo de mas corto se coloque antes&lt;br&gt;
 siguiente-&amp;gt;id = idAux;&lt;br&gt;
 siguiente-&amp;gt;tiempo = tiempoAux;&lt;br&gt;
 siguiente-&amp;gt;prioridad = prioridadAux; //tempor&lt;br&gt;
 }&lt;br&gt;
 siguiente = siguiente-&amp;gt;siguiente;&lt;br&gt;
 }&lt;br&gt;
 actual = actual-&amp;gt;siguiente;&lt;br&gt;
}&lt;br&gt;
//tiempos de retorno&lt;br&gt;
float tiempoRetorno = 0;&lt;br&gt;
float tiempoRetornoTotal =0;&lt;br&gt;
actual = primero;&lt;br&gt;
int numProcesos = 0;&lt;br&gt;
cout &amp;lt;&amp;lt; "Id " &amp;lt;&amp;lt; " tiempo de ejecucion " &amp;lt;&amp;lt; "prioridad " &amp;lt;&amp;lt; "Tiempo de retorno " &amp;lt;&amp;lt; endl;&lt;br&gt;
while (actual != NULL) {&lt;br&gt;
 tiempoRetorno += actual-&amp;gt;tiempo;&lt;br&gt;
 tiempoRetornoTotal += tiempoRetorno;&lt;br&gt;
 numProcesos++;&lt;br&gt;
 cout&amp;lt;&amp;lt;" "&amp;lt;&amp;lt; actual-&amp;gt;id&amp;lt;&amp;lt;" "&amp;lt;tiempo&amp;lt;&amp;lt;" "&amp;lt;prioridad&amp;lt;&amp;lt;" "&amp;lt;&amp;lt; tiempoRetorno&amp;lt;
 actual = actual-&amp;gt;siguiente;&lt;br&gt;
}&lt;br&gt;
float promedioRetorno = (float) tiempoRetornoTotal/ numProcesos;&lt;br&gt;
cout &amp;lt;&amp;lt; "Promedio de tiempos de retorno: " &amp;lt;&amp;lt; promedioRetorno &amp;lt;&amp;lt; endl;&lt;br&gt;
}&lt;br&gt;
void roundRobin(int quantum){&lt;br&gt;
 // Realizar un seguimiento del proceso y el tiempo actuales&lt;br&gt;
 Proceso* actual = primero;&lt;br&gt;
 int actual_time = 0;&lt;br&gt;
 // Realizar un seguimiento del tiempo total y el número de procesos completados&lt;br&gt;
 int total_time = 0;&lt;br&gt;
 int completed_processes = 0;&lt;br&gt;
 //Siga iterando hasta que el indicador se establezca en false&lt;br&gt;
 bool ejecutar = true;&lt;br&gt;
 while (ejecutar) {&lt;br&gt;
 // Ejecutar proceso para quantum o hasta su finalización&lt;br&gt;
 if (actual -&amp;gt; tiempo &amp;gt; quantum) {&lt;br&gt;
 actual_time += quantum;&lt;br&gt;
 actual -&amp;gt; tiempo -= quantum;&lt;br&gt;
 // Mover el proceso actual al final de la cola si no ha finalizado&lt;br&gt;
 if (ultimo == actual) {&lt;br&gt;
 ultimo = primero;&lt;br&gt;
 } else {&lt;br&gt;
 ultimo -&amp;gt; siguiente = actual;&lt;br&gt;
 ultimo = actual;&lt;br&gt;
 }&lt;br&gt;
 actual = actual -&amp;gt; siguiente;&lt;br&gt;
 } else {&lt;br&gt;
 // El proceso se ha completado&lt;br&gt;
 actual_time += actual -&amp;gt; tiempo;&lt;br&gt;
 cout &amp;lt;&amp;lt; "Proceso " &amp;lt;&amp;lt; actual -&amp;gt; id &amp;lt;&amp;lt; " terminado. Tiempo de retorno: "&lt;br&gt;
&amp;lt;&amp;lt; actual_time &amp;lt;&amp;lt; endl;&lt;br&gt;
 // Quitar proceso de la cola&lt;br&gt;
 Proceso* temp = actual;&lt;br&gt;
 actual = actual -&amp;gt; siguiente;&lt;br&gt;
 if (primero == temp) {&lt;br&gt;
 primero = actual;&lt;br&gt;
 }&lt;/p&gt;

&lt;p&gt;// Actualizar el tiempo total y el número de procesos completados&lt;br&gt;
 total_time += actual_time;&lt;br&gt;
 completed_processes++;&lt;br&gt;
 // borrar proceso&lt;br&gt;
 delete temp;&lt;br&gt;
 // Compruebe si todavía hay procesos en la cola&lt;br&gt;
 if (actual == NULL &amp;amp;&amp;amp; primero != NULL) {&lt;br&gt;
 actual = primero;&lt;br&gt;
 }&lt;br&gt;
 }&lt;br&gt;
 // Compruebe si se han ejecutado todos los procesos&lt;br&gt;
 if (actual == NULL &amp;amp;&amp;amp; primero == NULL) {&lt;br&gt;
 ejecutar = false;&lt;br&gt;
 }&lt;br&gt;
 }&lt;br&gt;
 //Calcular e imprimir el tiempo de respuesta promedio&lt;br&gt;
 float promedio_tiempo_retorno = total_time / (float)completed_processes;&lt;br&gt;
 cout &amp;lt;&amp;lt; "El promedio del tiempo de retorno es: " &amp;lt;&amp;lt; promedio_tiempo_retorno&lt;br&gt;
&amp;lt;&amp;lt; endl;&lt;br&gt;
}&lt;br&gt;
bool compararPorPrioridad(Proceso a, Proceso b) {&lt;br&gt;
 return a.prioridad &amp;gt; b.prioridad;}&lt;br&gt;
void calcularPrioridad(float quantum) {&lt;br&gt;
// inicialización de variables&lt;br&gt;
 int tiempoTotal = 0;&lt;br&gt;
 int cantidadProcesos = 0;&lt;br&gt;
 int tiempoRetornoTotal = 0;&lt;br&gt;
 int tiempoEsperaTotal = 0;&lt;br&gt;
// contar el tiempo total y la cantidad de procesos&lt;br&gt;
 Proceso* actual = primero;&lt;br&gt;
 while (actual != NULL) {&lt;br&gt;
 cantidadProcesos++;&lt;br&gt;
 tiempoTotal += actual-&amp;gt;tiempo;&lt;br&gt;
 actual = actual-&amp;gt;siguiente;&lt;br&gt;
 }&lt;/p&gt;

&lt;p&gt;// crear un array de procesos y ordenarlos por prioridad&lt;br&gt;
 Proceso* procesos = new Proceso[cantidadProcesos];&lt;br&gt;
actual = primero;&lt;br&gt;
 for (int i = 0; i &amp;lt; cantidadProcesos; i++) {&lt;br&gt;
 procesos[i] = *actual;&lt;br&gt;
 actual = actual-&amp;gt;siguiente;&lt;br&gt;
 }&lt;br&gt;
sort(procesos, procesos + cantidadProcesos, compararPorPrioridad);&lt;br&gt;
// inicializar arrays de tiempo, tiempo de retorno y tiempo de espera&lt;br&gt;
 int tiempo[cantidadProcesos];&lt;br&gt;
 int tiempoRetorno[cantidadProcesos];&lt;br&gt;
 int tiempoEspera[cantidadProcesos];&lt;br&gt;
 for (int i = 0; i &amp;lt; cantidadProcesos; i++) {&lt;br&gt;
 tiempo[i] = procesos [i].tiempo;&lt;br&gt;
 // primero = primero-&amp;gt;siguiente;&lt;br&gt;
 }&lt;br&gt;
// simular la ejecución de los procesos&lt;br&gt;
 int tiempoTranscurrido = 0;&lt;br&gt;
 while (true) {&lt;br&gt;
 bool todosTerminados = true;&lt;br&gt;
 for (int i = 0; i &amp;lt; cantidadProcesos; i++) {&lt;br&gt;
 if (tiempo[i] &amp;gt; 0) {&lt;br&gt;
 todosTerminados = false;&lt;br&gt;
 if (tiempo[i] &amp;lt;= quantum) {&lt;br&gt;
 tiempoTranscurrido += tiempo[i];&lt;br&gt;
 tiempoRetorno[i] = tiempoTranscurrido;&lt;br&gt;
 tiempo[i] = 0;&lt;br&gt;
 } else {&lt;br&gt;
 tiempoTranscurrido += quantum;&lt;br&gt;
 tiempo[i] -= quantum;&lt;br&gt;
 }&lt;br&gt;
 }&lt;br&gt;
 }&lt;br&gt;
 if (todosTerminados) {&lt;br&gt;
 break;&lt;br&gt;
 }&lt;br&gt;
 }&lt;/p&gt;

&lt;p&gt;// calcular el tiempo de espera de cada proceso y el tiempo total de retorno y espera&lt;br&gt;
for (int i = 0; i &amp;lt; cantidadProcesos; i++) {&lt;br&gt;
 int tEspera = tiempoRetorno[i] - procesos[i].tiempo;&lt;br&gt;
 tiempoEspera[i] = (tEspera &amp;lt; 0) ? 0 : tEspera;&lt;br&gt;
 tiempoRetornoTotal += tiempoRetorno[i];&lt;br&gt;
 tiempoEsperaTotal += tiempoEspera[i];&lt;br&gt;
 cout &amp;lt;&amp;lt; "Proceso " &amp;lt;&amp;lt; procesos[i].id &amp;lt;&amp;lt; " Tiempo de espera: " &amp;lt;&amp;lt;&lt;br&gt;
tiempoEspera[i] &amp;lt;&amp;lt; " Tiempo de retorno: " &amp;lt;&amp;lt; tiempoRetorno[i] &amp;lt;&amp;lt; endl;&lt;br&gt;
}&lt;br&gt;
// calcular el tiempo promedio de retorno y espera y mostrarlo por pantalla&lt;br&gt;
 double tiempoPromedioRetorno = (double) tiempoRetornoTotal /&lt;br&gt;
cantidadProcesos;&lt;br&gt;
double tiempoPromedioEspera = (double) tiempoEsperaTotal /&lt;br&gt;
cantidadProcesos;&lt;br&gt;
cout &amp;lt;&amp;lt; "Tiempo promedio de retorno: " &amp;lt;&amp;lt; tiempoPromedioRetorno &amp;lt;&amp;lt; endl;&lt;br&gt;
cout &amp;lt;&amp;lt; "Tiempo promedio de espera: " &amp;lt;&amp;lt; tiempoPromedioEspera &amp;lt;&amp;lt; endl;&lt;/p&gt;

&lt;p&gt;cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "Procesos ordenados por prioridad:" &amp;lt;&amp;lt; endl;&lt;br&gt;
 for (int i = 0; i &amp;lt; cantidadProcesos; i++) {&lt;br&gt;
 cout &amp;lt;&amp;lt; "Proceso " &amp;lt;&amp;lt; i+1 &amp;lt;&amp;lt; ": " &amp;lt;&amp;lt; "ID=" &amp;lt;&amp;lt; procesos[i].id &amp;lt;&amp;lt; " Tiempo="&lt;br&gt;
&amp;lt;&amp;lt; procesos[i].tiempo &amp;lt;&amp;lt; " Prioridad=" &amp;lt;&amp;lt; procesos[i].prioridad &amp;lt;&amp;lt; endl;&lt;br&gt;
 }&lt;br&gt;
}&lt;br&gt;
int main(){&lt;br&gt;
 int opcion;&lt;br&gt;
 do {&lt;/p&gt;

&lt;p&gt;cout &amp;lt;&amp;lt; "MENU" &amp;lt;&amp;lt; endl;&lt;br&gt;
 cout &amp;lt;&amp;lt; "1. Entrada de datos" &amp;lt;&amp;lt; endl;&lt;br&gt;
 cout &amp;lt;&amp;lt; "2. Calcular FIFO" &amp;lt;&amp;lt; endl;&lt;br&gt;
 cout &amp;lt;&amp;lt; "3. Calcular SJF" &amp;lt;&amp;lt; endl;&lt;br&gt;
 cout &amp;lt;&amp;lt; "4. Calcular prioridad" &amp;lt;&amp;lt; endl;&lt;br&gt;
 cout &amp;lt;&amp;lt; "5. Calcular Round-Robin" &amp;lt;&amp;lt; endl;&lt;br&gt;
 cout &amp;lt;&amp;lt; "6. Salir" &amp;lt;&amp;lt; endl;&lt;br&gt;
 cout &amp;lt;&amp;lt; "Ingrese su opcion: ";&lt;br&gt;
 cin &amp;gt;&amp;gt; opcion;&lt;/p&gt;

&lt;p&gt;system("cls");&lt;br&gt;
 switch (opcion) {&lt;br&gt;
 case 1:&lt;br&gt;
 agregarProceso();&lt;br&gt;
 imprimirProcesos();&lt;br&gt;
 break;&lt;br&gt;
 case 2:&lt;br&gt;
 calcularFIFO();&lt;br&gt;
 break;&lt;br&gt;
 case 3:&lt;br&gt;
 calcularSJF();&lt;br&gt;
 break;&lt;br&gt;
 case 5:&lt;br&gt;
 float quantum;&lt;br&gt;
cout&amp;lt;&amp;lt;"Ingrese el tiempo quantum: ";&lt;br&gt;
cin&amp;gt;&amp;gt;quantum;&lt;br&gt;
 roundRobin(quantum);&lt;br&gt;
 break;&lt;br&gt;
 case 4:&lt;br&gt;
 cout&amp;lt;&amp;lt;"INGRESE QUANTUM: "&amp;lt;
 cin&amp;gt;&amp;gt;quantum;&lt;br&gt;
 calcularPrioridad(quantum);&lt;br&gt;
 break;&lt;br&gt;
 case 6:&lt;br&gt;
 cout &amp;lt;&amp;lt; "Saliendo del programa." &amp;lt;&amp;lt; endl;&lt;br&gt;
 break;&lt;br&gt;
 default:&lt;br&gt;
 cout &amp;lt;&amp;lt; "Opcion invalida." &amp;lt;&amp;lt; endl;&lt;br&gt;
 break;&lt;br&gt;
 }&lt;br&gt;
 } while (opcion != 6);&lt;br&gt;
return 0;&lt;br&gt;
}&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
