Busca

Google

miércoles, 10 de junio de 2009

Problema de los filosofos comensales en C++

Este programa esta en lenguaje C++ compilado en Turbo-C V3.0
ahora, para explicar un poco lo que hace este programa, es simular lo que ocurre en dicho problema de los filosofos.

cuando ejecutamos el programa, se muestran varias opciones(si entiendes el problema de los comensales no habra ningun problema, si no, te pido comprendas primero de que se trata, en google podras buscar al respecto), entonces, del 1 al 5 eliges que comensal levantara o intentara levantar el tenedor, y del 9 al 13 son para que un comensal baje los tenedores. Tambien el programa esta echo para simular un bloqueo irreversible, y tambien dejé la opcion para dejar de simularlo.

un poco dificil de entender, pero te pido analises el programa e interpretes para que sirve cada variable.

# include < conio.h >
# include < iostream.h >
# include < dos.h >
# include < stdio.h >

main()
{
int op=0,b=0,x,y,ti1=0,td1=0,ti2=0,td2=0,ti3=0,td3=0,ti4=0,td4=0,ti5=0,
td5=0;
do{
clrscr();
gotoxy(2,1);printf("Cena de filosofos");
gotoxy(2,2);printf("Escoge opcion");
gotoxy(2,4);printf("1.-Filosofo 1 9.- Quitar tenedores del filosofo 1");
gotoxy(2,5);printf("2.-Filosofo 2 10.-Quitar tenedores del filosofo 2");
gotoxy(2,6);printf("3.-Filosofo 3 11.-Quitar tenedores del filosofo 3");
gotoxy(2,7);printf("4.-Filosofo 4 12.-Quitar tenedores del filosofo 4");
gotoxy(2,8);printf("5.-Filosofo 5 13.-Quitar tenedores del filosofo 5");
gotoxy(2,10);printf("6.-Simular bloqueo irreversible");
gotoxy(2,11);printf("7.-Dejar de simular bloqueo irreversible");
gotoxy(2,12);printf("8.-Salir");

gotoxy(20,13);printf("1 %d",td1);printf("~(-_-)~");printf("%d",ti1);

if(ti2==0 && td1==0) {
gotoxy(18,14);printf("T");
}else{gotoxy(18,14);printf("0");}

if(td2==0 && ti4==0) {
gotoxy(14,22);printf("T");
}else{gotoxy(14,22);printf("0");}

if(ti1==0 && td3==0) {
gotoxy(36,14);printf("T");
}else{gotoxy(36,14);printf("0");}

if(td5==0 && ti3==0) {
gotoxy(36,22);printf("T");
}else{gotoxy(36,22);printf("0");}

if(td4==0 && ti5==0) {
gotoxy(26,24);printf("T");
}else{gotoxy(26,24);printf("0"); }

gotoxy(12,16);printf(" %d",ti2);
gotoxy(11,17);printf("2 (|)");
gotoxy(10,18);printf(" ( )");
gotoxy(11,19);printf(" (|)");
gotoxy(12,20);printf(" %d",td2);

gotoxy(35,16);printf(" %d",td3);
gotoxy(34,17);printf("3 (|)");
gotoxy(33,18);printf(" ( )");
gotoxy(34,19);printf(" (|)");
gotoxy(35,20);printf(" %d",ti3);

gotoxy(12,25);printf("4 %d",ti4);printf("~(_-_)~");printf("%d",td4);

gotoxy(28,25);printf("5 %d",ti5);printf("~(_-_)~");printf("%d",td5);

gotoxy(10,12);scanf("%d",&op);

switch(op)
{
case 1:

gotoxy(28,28);printf("Intentando levantar Tenedor Izquierdo");
delay(1000);
gotoxy(28,28);printf("Intentando levantar Tenedor Derecho ");
delay(1000);
if(td3==0&&ti2==0)
{ti1=1;td1=1; }else
{gotoxy(28,28);printf("Uno o los dos de los tenedores ya se estan utilizando");
delay(1500);}
break;

case 2:
gotoxy(28,28);printf("Intentando levantar Tenedor Izquierdo");
delay(1000);
gotoxy(28,28);printf("Intentando levantar Tenedor Derecho ");
delay(1000);
if(td1==0&&ti4==0)
{ti2=1;td2=1; }else
{gotoxy(28,28);printf("Uno o los dos de los tenedores ya se estan utilizando");
delay(1500);}
break;

case 3:
gotoxy(28,28);printf("Intentando levantar Tenedor Izquierdo");
delay(1000);
gotoxy(28,28);printf("Intentando levantar Tenedor Derecho ");
delay(1000);
if(ti1==0&&td5==0)
{ti3=1;td3=1; }else
{gotoxy(28,28);printf("Uno o los dos de los tenedores ya se estan utilizando");
delay(1500);}
break;

case 4:
gotoxy(28,28);printf("Intentando levantar Tenedor Izquierdo");
delay(1000);
gotoxy(28,28);printf("Intentando levantar Tenedor Derecho ");
delay(1000);
if(td2==0&&ti5==0)
{ti4=1;td4=1; }else
{gotoxy(28,28);printf("Uno o los dos de los tenedores ya se estan utilizando");
delay(1500);}
break;

case 5:
gotoxy(28,28);printf("Intentando levantar Tenedor Izquierdo");
delay(1000);
gotoxy(28,28);printf("Intentando levantar Tenedor Derecho ");
delay(1000);
if(td4==0&&ti3==0)
{ti5=1;td5=1; }else
{gotoxy(28,28);printf("Uno o los dos de los tenedores ya se estan utilizando");
delay(1500);}
break;

case 6:
b=1;
ti1=1;ti2=1;ti3=1;ti4=1;ti5=1;
break;

case 7:
if(b==1){
ti1=0;ti2=0;ti3=0;ti4=0;ti5=0;
b=0;
}else{ gotoxy(28,28);printf("No se esta simulando un bloqueo irreversible ");
delay(1500);}
break;

case 8:
break;

case 9:
td1=0; ti1=0;
break;
case 10:
td2=0; ti2=0;
break;
case 11:
td3=0; ti3=0;
break;
case 12:
td4=0; ti4=0;
break;
case 13:
td5=0; ti5=0;
break;

default:
gotoxy(20,11);printf("Opcion no disponible");
getch();
break;
}

}while(op!=8);
}

-------------Fin del programa-------------
Complicado no ? xD, normal, ademas, todas las librerias se usan cierto o falso? y todas las variables se usan ? cierto o falso, se los dejo de tarea
cualquier detalle ya saben, envia correo al juliocfd@gmail.com

2 comentarios:

Anónimo dijo...

Gracias por compartir el codigo! Esta muy bueno.

Anónimo dijo...

no puedo ejecutarlo....me marca error en las librerias....xq???