Sarsistema
Enviado por soyluna123 • 21 de Abril de 2017 • Tarea • 2.616 Palabras (11 Páginas) • 175 Visitas
TÍTULO:
Proyecto cajero |
- OBJETIVO:
Se requiere simular el proceso de cobro de productos de un supermercado; es decir, los clientes van con un carro lleno de productos y un cajero inicia el proceso de cobro de los productos, registrándolos uno a uno por el escáner de la caja registradora.
- DESARROLLO:
El primer programa debe ser dinámico con la capacidad de atender a dos clientes y una vez ejecutado debe mostrar por ejemplo la siguiente información:
El Cajero 1 COMIENZA A PROCESAR LA COMPRA DEL Cliente 1 EN EL TIEMPO: 0seg
Procesado el producto 1 ->Tiempo: 2seg
Procesado el producto 2 ->Tiempo: 4seg
Procesado el producto 3 ->Tiempo: 5seg
Procesado el producto 4 ->Tiempo: 10seg
Procesado el producto 5 ->Tiempo: 12seg
Procesado el producto 6 ->Tiempo: 15seg
El Cajero 1 HA TERMINADO DE ATENDER al Cliente 1 EN EL TIEMPO: 15seg
El Cajero 1 COMIENZA A PROCESAR LA COMPRA DEL Cliente 2 EN EL TIEMPO: 15seg
Procesado el producto 1 ->Tiempo: 16seg
Procesado el producto 2 ->Tiempo: 19seg
Procesado el producto 3 ->Tiempo: 24seg
Procesado el producto 4 ->Tiempo: 25seg
Procesado el producto 5 ->Tiempo: 26seg
El Cajero 1 HA TERMINADO DE ATENDER al Cliente 2 EN EL TIEMPO: 26seg
Mediante una arreglo donde arreglo donde vamos almacenar los tiempos de los clientes
int Cliente1[tiempo1]={2,2,1,5,2,3};
int Cliente2[tiempo2]={1,3,5,1,1};
En un proceso fork() tenemos una condición si =-1 no podrá comenzar el cajero caso contrario si es =0 podrá iniciar las compras el cliente con sus respectivo tiempo
if(proceso==-1){
printf("fallo en el fork\n");
return 1;
}else if(proceso==0){
printf("\nEl Cajero 1 comienza a procesar la compra del Cliente 1 en el TIEMPO:%d (seg) \n\n", j);
Para el tiempo dentro de una condición para poder acumular el tiempo y cuando termine poder visualizar el tiempo total de los productos
for(i; i
j+=Cliente1[i];
printf ("Procesando el PRODUCTO [%i] ->TIEMPO: %i (seg) \n", i+1, j);
}
printf(" \nEl Cajero 1 ha terminado de procesar Cliente 1 en el TIEMPO:%i (seg) \n", j);
printf("\nEl Cajero 1 comienza a procesar la compra del Cliente 2 en el TIEMPO:%d (seg) \n\n", j);
Una vez teniendo el tiempo total del cliente1para seguir acumulando el tiempo para el cliente 2
En una condición for caso contrario el tiempo seria desde 0 y lo que queremos es saber cuánto se demoraron los dos clientes en el cajero
for(tiempototal; tiempototal
j+=Cliente2[tiempototal];
printf ("Procesando el PRODUCTO [%i] ->TIEMPO: %i (seg) \n", tiempototal+1, j);
}
printf(" \nEl Cajero 1 ha terminado de procesar Cliente 2 EN EL TIEMPO: %i(seg)\n", j);
return 0;
}
}
Código completo
#define tiempo1 6
#define tiempo2 5
int i=0;
int j=0;
int tiempototal=0;
int main(){
int Cliente1[tiempo1]={2,2,1,5,2,3};
int Cliente2[tiempo2]={1,3,5,1,1};
pid_t proceso;
proceso=fork();
if(proceso==-1){
printf("fallo en el fork\n");
return 1;
}else if(proceso==0){
printf("\nEl Cajero 1 comienza a procesar la compra del Cliente 1 en el TIEMPO:%d (seg) \n\n", j);
for(i; i
j+=Cliente1[i];
printf ("Procesando el PRODUCTO [%i] ->TIEMPO: %i (seg) \n", i+1, j);
}
printf(" \nEl Cajero 1 ha terminado de procesar Cliene 1 en el TIEMPO:%i (seg) \n", j);
printf("\nEl Cajero 1 comienza a procesar la compra del Cliente 2 en el TIEMPO:%d (seg) \n\n", j);
for(tiempototal; tiempototal
j+=Cliente2[tiempototal];
printf ("Procesando el PRODUCTO [%i] ->TIEMPO: %i (seg) \n", tiempototal+1, j);
}
printf(" \nEl Cajero 1 ha terminado de procesar Cliente 2 EN EL TIEMPO: %i(seg)\n", j);
return 0;
}
}
Ahora, con el fin de procesar dos clientes a la vez se agrega un Cajero (es decir se tiene dos hilos o threads) para atender a los dos clientes a la vez y tardar menos tiempo en ejecutarse el programa.
El resultado de esta ejecución con los dos cajeros sería de manera concurrente y tardaría 15 segundos en terminar su ejecución, por ejemplo de la siguiente manera:
El Cajero 1 COMIENZA A PROCESAR LA COMPRA DEL Cliente 1 EN EL TIEMPO: 0seg
El Cajero 2 COMIENZA A PROCESAR LA COMPRA DEL Cliente 2 EN EL TIEMPO: 0seg
...