Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERA
INFORME GRUPO #1
PUENTE DUERO
LENGUAJE DE PROGRAMACION
INTEGRANTES # CUENTA
NDICE
Portada--------------------------------------------------------------------------------------------------1
2
ndice-------------------------------------------------------------------------------------------------- 2
Introduccin------------------------------------------------------------------------------------------ 3
Objetivos-----------------------------------------------------------------------------------------------4
Objetivos generales.------------------------------------------------------------------4
Objetivos especficos.--------------------------------------------------------------- 4
Conclusiones----------------------------------------------------------------------------------------10
Anexos--------------------------------------------------------------------------------------------------11
INTRODUCCION
OBJETIVOS
4
OBJETIVOS ESPECIFICOS:
MARCO TEORICO
5
El pueblo de Puente Duero debe su nombre a un viejo puente romano sobre el conocido rio. El
puente es estrecho y no permite el cruce de dos coches que circulen en sentidos contrarios. Por su
peculiar forma, alto en el centro y bajo en los extremos, no hay visibilidad, y desde un lado no
podemos saber si hay un coche empezando a cruzar el puente por el otro.
Se han instalado cuatro sensores y dos barreras. Dos sensores indican la llegada de coches en
cada direccin, emitiendo una seal por cada coche que pasa, y los otros dos indican salidas
respectivas. Las barreras bloquean las entradas al puente, y cuando reciben una seal se levantan
para permitir el paso de un coche (y uno solo); acto seguido se vuelven a cerrar.
1. Nunca cruzan simultneamente en el puente vehculos en sentidos opuestos.
2. Nadie espera eternamente para pasar
3. Todos pasan lo ms pronto posible salvo violacin de las normas 1 o 2.
4. Las seales de los sensores se atienden inmediatamente (o al menos lo ms pronto posible),
para no perder el paso de ningn coche.
En el nodo primero apunta al primer auto que se ingrese en caso de que solo exista un auto en la
cola auto 1 sera tanto el primero como el ultimo, mientras la cola este vaca tanto primero como
ltimo son NULL.
En C podemos crear tipos de datos con la palabra reservada struct esta palabra nos permite crear
un dato que no sea ni string ni int sino que nosotros definimos las propiedades muy parecido al
concepto de clase , en este caso cada dato tipo Nodo tiene dos atributos int dato (almacena la
matrcula del vehculo) y otro dato tipo Nodo *siguiente que tendr tanto un dato como la
direccin a la que apunte La cual se usa en dos ocasiones para crear una cola derecha y una cola
izquierda, se utiliz este TAD (Tipo de dato abstracto) ya que sigue el orden firts in- firts out ya
que necesitamos que el primer auto en entrar a la cola es el primero que salga.
Cada auto se identifica con un nmero de matrcula propiedad que tendr cada objeto de la clase
cola que se asigna de manera aleatoria a los autos con la funcin rand() que es la funcin
utilizada en C para nmeros aleatorios y la propiedad direccin que puede ser izquierda derecha
o ninguno. Utilizar la clase cola nos permiti utilizar la funcin Sacar auto() , Ingresar_auto que
corresponden a el mtodo sacar() y meter() de cualquier TAD Cola respectivamente.
7
Los sensores devuelven true si el atributo sensorD (sensor derecho) que tambin es un atributo
booleano est activado si est activado quiere decir que hay un auto en espera para pasar en el
puente. As respectivamente cada sensor
Si el puente est vaco se activa el atributo barrera1 se llama al mtodo levantar barrera y se da
paso al auto, el auto entra por el puente se cierra la barrera y el sensor vuelve a ser false si no hay
ms autos en la cola de lo contrario contina siendo true.
8
Se cuentan los coches que hay en el puente cada vez que se da paso a un auto en el puente se
aumenta el contador en 1.
El mtodo puente_O verifica si el puente est ocupado si es as hace una espera con la funcin
sleep() y luego se desocupa.
Y cada vez que el auto termina de pasar, y sale del puente se decrementa el contador en 1.
Nos permiten ingresar autos tanto en la cola izquierda como en la cola derecha cada 5 3 y 7
segundos usando clock(), CLOCKS_PER_SEC esto nos permite que el programa sea
concurrente libre de bloqueos.
CONCLUCIONES
10
El programa creado funciono con xito y logro cumplir con los requisitos planteados en
la descripcin de lo que debe hacer el programa.
Se hizo de una manera exitosa del paradigma orientado a objeto y su respectiva
caracterstica.
Se hizo de la abstraccin para mostrar con el programa una versin simplificada de lo que
sera el puente Duero en una situacin de la vida real.
Se aprendi sobre las concurrencia en los programas y sobre cmo aplicarla para el
desarrollo de nuestro proyecto
Se logr aprender ms afondo del uso de las libreras, manejo de datos y funcionamiento
del lenguaje de programacin C++ y finalmente se logr trabajar en equipo de manera
exitosa para la resolucin del problema planteado.
ANEXOS
#include <iostream>
11
#include <Time.h>
struct Nodo{
int dato;
Nodo *siguiente;
}*primero,*ultimo=NULL,*primero2,*ultimo2=NULL; //apuntadores
int n,matric;
int x,cuentad=0,cuentai=0;
//sensores
bool p_ocupado=false,sensorD=false,sensorI=false,sensorSD=false,sensorSI=false;
bool barrera1=false,barrera2=false;
void Puente_O();
void Puente_des();
void Cuenta_Colad(int);
void Cuenta_Colai(int);
void Sensor_Siz();
//CLASE COLA
class Cola{
12
private:
int matricula;
public:
Cola(int,string);
Cola(){};
~Cola(){};
};
matricula=m;
direccion=d;
if(primero==NULL){
return true;
}
13
else{
return false;
nuevo->dato=n;
nuevo->siguiente=NULL;
if(Cola_vacia(primero)){
primero=nuevo;
cout<<"__________________________________________"<<endl;
cout<<"Auto ingresado";
else{
ultimo->siguiente=nuevo;
cout<<"__________________________________________"<<endl;
cout<<"Auto ingresado";
ultimo=nuevo;
}
14
if(Cola_vacia(primero)){
else{
n=primero->dato;
Nodo *aux=primero;
if(primero==ultimo){
primero=NULL;
ultimo=NULL;
}else{
primero=primero->siguiente;
delete aux;
if(Cola_vacia(primero)){
}else{
nuevo=primero;
15
while(nuevo!=NULL){
nuevo=nuevo->siguiente;
matric= rand()%99+1;
c1.Ingresar(p,ul,matric);
int main()
Cola Coizquierda=Cola();
int psec;
int sec = 3;
int sec2=5;
int sec3=7;
int iterations = 0;
int maximo=2;
16
string nombre,contra,m;
cout<<"--------------BIENVENIDO AL PUENTE
DUERO------------------"<<endl;
cout<<"..................SENSORES ACTIVADOS......................"<<endl;
cout<<"..................BARRERRAS CERRADAS......................"<<endl;
cout<<endl<<endl;
start = clock();
while (1) {
start=clock();
Coderecha.Ingresa_unAuto(Coderecha,primero,ultimo);
Coderecha.Mostrar_Cola(primero,ultimo);
sensorD=true;
17
Sensor_Ed();
Puente_O();
barrera1=true;
levantarb(barrera1);
if(p_ocupado==false){
Coderecha.Sacar_auto(primero,ultimo,x);
barrera1=false;
levantarb(barrera1);
cuentad++;
Cuenta_Colad(cuentad);
p_ocupado=true;
Puente_O();
sensorSD=true;
Sensor_Sd();
Puente_des();
cuentad--;
}else{
barrera2=true;
levantarb(barrera2);
sensorI=true;
Coizquierda.Ingresa_unAuto(Coizquierda,primero2,ultimo2);
Coizquierda.Mostrar_Cola(primero2,ultimo2);
barrera2=true;
Sensor_Eiz();
Coizquierda.Sacar_auto(primero2,ultimo2,x);
barrera2=false;
levantarb(barrera2);
cuentai++;
Cuenta_Colai(cuentai);
p_ocupado=true;
Puente_O();
Puente_des();
cuentai--;
}else {
cuentai++;
19
Sleep(8000);
Coizquierda.Ingresa_unAuto(Coizquierda,primero2,ultimo2);
Coizquierda.Mostrar_Cola(primero2,ultimo2);
sensorI=true;
Sensor_Eiz();
Puente_O();
if(p_ocupado==false){
Coizquierda.Sacar_auto(primero2,ultimo2,x);
sensorSD=true;
Sensor_Siz();
cuentai++;
Cuenta_Colai(cuentai);
Puente_des();
Coderecha.Mostrar_Cola(primero,ultimo);
20
cuentai=cuentai-2;
iterations++;
break;
int m1;
cout<<"----------Cola Derecha--------"<<endl;
Coderecha.Mostrar_Cola(primero,ultimo);
cout<<endl<<endl;
cout<<"----------Cola Izquierda--------"<<endl;
Coizquierda.Mostrar_Cola(primero2,ultimo2);
cout<<endl;
return 0;
21
void Puente_O(){
if(p_ocupado){
}else{
void Puente_des(){
p_ocupado=false;
cout<<endl<<"Puente desocupado"<<endl<<endl;
void Sensor_Ed(){
if(sensorD){
void Sensor_Eiz(){
if(sensorI){
void Sensor_Sd(){
if(sensorD){
void Sensor_Siz(){
if(sensorI){
if(b){
cout<<endl<<"Abriendo barrera..."<<endl;
}else{
cout<<endl<<"Cerrando barrera..."<<endl;