fpontesmorales

pratica 14

Oct 5th, 2011
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.31 KB | None | 0 0
  1. //########################################################################################
  2. //                  pratica_14.c
  3. //########################################################################################
  4.  
  5. /*Quesito 02: Faça um programa para simular as filas de um banco (considere 5 filas de atendimento). O laço do programa principal deve conter a seguinte seqüência de comandos:
  6. - Sortear (random) uma das filas e adicionar um cliente novo que chegou ao banco;
  7. - Sortear (random) uma das filas para ser atendido um cliente. Retirar um cliente da fila que foi sorteada para ser atendida;
  8. - Mostrar na tela o estado das filas, ou seja, a quantidade de clientes que tem em cada uma das filas;
  9. - Repetir este procedimento 20 vezes.
  10. OBS. Cada cliente deverá ser identificado por um número inteiro positivo seqüencial associado ao mesmo quando chegar ao banco.*/
  11.  
  12. #include<stdio.h>
  13. #include<stdlib.h>
  14. #include<time.h>
  15. #include "fila.h"
  16. #include "fila.c"
  17.  
  18.  
  19. int main (void){
  20.  
  21.     srand(time(NULL));
  22.     Fila* f[5];
  23.     int id=1 , escolha,aux;
  24.  
  25.     f[0] = Fila_cria();
  26.     f[1] = Fila_cria();
  27.     f[2] = Fila_cria();
  28.     f[3] = Fila_cria();
  29.     f[4] = Fila_cria();
  30.    
  31.     for (;;){
  32.  
  33.     system("clear");
  34.  
  35.     printf("____________________Fila do Banco___________________\n\n");
  36.     printf("\nDigite a opcao desejada:\n\n");
  37.     printf("[1] Novo Cliente\n");
  38.     printf("[2] Atender cliente\n");
  39.     printf("[3] Mostrar FILAS\n");
  40.     printf("[9] Sair\n\n");
  41.     printf("Opcao escolhida: ");
  42.     scanf("%d", &escolha);
  43.  
  44.     switch(escolha){
  45.  
  46.         case 1:
  47.         if(id<=20){
  48.         aux=rand()%5+0;
  49.         novo_cliente(f[aux],id,aux);
  50.         id++;}
  51.         else {
  52.         system("clear");       
  53.         printf("\nLimite de pessoas no banco excedido.");      
  54. }
  55.     printf("\n\nAperte ENTER para continuar.");
  56.         __fpurge(stdin);
  57.         getchar();
  58.         system("clear");
  59.         break;
  60.  
  61.         case 2:
  62.         aux=rand()%5+0;
  63.         atender_cliente(f[aux],aux);
  64.         printf("\n\nAperte ENTER para continuar.");
  65.         __fpurge(stdin);
  66.         getchar();
  67.         system("clear");
  68.         break;
  69.  
  70.         case 3:
  71.         system("clear");
  72.         printf("\n\nFila 01 = ");
  73.         mostrar_filas(f[0]);
  74.         printf("\n\nFila 02 = ");
  75.         mostrar_filas(f[1]);
  76.         printf("\n\nFila 03 = ");
  77.         mostrar_filas(f[2]);
  78.         printf("\n\nFila 04 = ");
  79.         mostrar_filas(f[3]);
  80.         printf("\n\nFila 05 = ");
  81.         mostrar_filas(f[4]);
  82.         printf("\n\nAperte ENTER para continuar.");
  83.         __fpurge(stdin);
  84.         getchar();
  85.         system("clear");
  86.         break;
  87.  
  88.         case 9:
  89.         Fila_libera(f[0]);
  90.         Fila_libera(f[1]);
  91.         Fila_libera(f[2]);
  92.         Fila_libera(f[3]);
  93.         Fila_libera(f[4]);     
  94.         system("clear");
  95.                 exit(1);
  96.  
  97.         default :
  98.             system("clear");
  99.             printf("Digite uma opcao valida.");
  100.             printf("\n\nAperte ENTER para continuar.");
  101.         __fpurge(stdin);
  102.         getchar();
  103.         system("clear");
  104.             break;
  105.         }
  106.     }
  107.    
  108.  
  109. }
  110.  
  111. void novo_cliente( Fila *f, int id, int aux ){ 
  112.     system("clear");
  113.     insere(f,id);
  114.     printf("O cliente [%d] foi adicionado na fila [%d]", id , aux+1);
  115. }
  116.  
  117. void atender_cliente( Fila *f , int aux){
  118.     int saiu;  
  119.     system("clear");   
  120.     saiu=retira(f);
  121.     system("clear");
  122.     if (saiu==NULL){printf("A fila [%d] esta vazia.", aux+1);}
  123.     else{
  124.     printf("O cliente [%d] foi da fila [%d] foi atendido", saiu , aux+1);}
  125.     }
  126.  
  127. void mostrar_filas( Fila *f ){
  128.  
  129.     Fila_imprime(f);
  130.  
  131. }
  132.  
  133.  
  134. //########################################################################################
  135. //                  fila.c
  136. //########################################################################################
  137.  
  138. #include <stdio.h>
  139. #include <stdlib.h>
  140. #include "fila.h"
  141.  
  142. /*****************************************************************************/
  143. Fila* Fila_cria (void) {
  144.     Fila* f = (Fila*) malloc(sizeof(Fila));
  145.     f->ini = f->fim = NULL;
  146.     return f;
  147. }
  148. /*****************************************************************************/
  149. Fila_No* Fila_ins_fim (Fila_No* fim, float v) {
  150.     Fila_No* p = (Fila_No*) malloc(sizeof(Fila_No));
  151.     p->info = v;
  152.     p->prox = NULL;
  153.     if (fim != NULL) /* verifica se lista não estava vazia */
  154.         fim->prox = p;
  155.     return p;
  156. }
  157. /*****************************************************************************/
  158. Fila_No* Fila_ret_ini (Fila_No* ini) {
  159.     Fila_No* p = ini->prox;
  160.     free(ini);
  161.     return p;
  162. }
  163. /*****************************************************************************/
  164. void insere (Fila* f, float v) {
  165.     f->fim = Fila_ins_fim(f->fim,v);
  166.     if (f->ini==NULL) /* fila antes vazia? */
  167.     f->ini = f->fim;
  168. }
  169. /*****************************************************************************/
  170. float retira (Fila* f) {
  171.     float v;
  172.     if (Fila_vazia(f)) {
  173.         printf("Fila vazia.\n");
  174.         return 0;
  175.     }
  176.     v = f->ini->info;
  177.     f->ini = Fila_ret_ini(f->ini);
  178.     if (f->ini == NULL) /* fila ficou vazia? */
  179.         f->fim = NULL;
  180.     return v;
  181. }
  182. /*****************************************************************************/
  183. int Fila_vazia (Fila* f) {
  184.     return (f->ini==NULL);
  185. }
  186. /*****************************************************************************/
  187. void Fila_libera (Fila* f) {
  188.     Fila_No* q = f->ini;
  189.  
  190.     while (q!=NULL) {
  191.         Fila_No* t = q->prox;
  192.         free(q);
  193.         q = t;
  194.     }
  195.     free(f);
  196. }
  197. /*****************************************************************************/
  198. /* imprime: versão com lista */
  199. void Fila_imprime (Fila* f) {
  200.     Fila_No* q;
  201.     for (q=f->ini; q!=NULL; q=q->prox)
  202.         printf(" [%.1f] ",q->info);
  203. }
  204.  
  205.  
  206. //########################################################################################
  207. //                  fila.h
  208. //########################################################################################
  209.  
  210.  
  211. #ifndef FILA_H
  212. #define FILA_H
  213.  
  214. typedef struct {
  215.     float info;
  216.     struct no* prox;
  217. } Fila_No;
  218.  
  219. typedef struct {
  220.     Fila_No* ini;
  221.     Fila_No* fim;
  222. } Fila;
  223. /* aloca a estrutura da fila e inicializa a lista como sendo vazia. */
  224. Fila* Fila_cria (void);
  225. /* função auxiliar: insere no fim */
  226. Fila_No* Fila_ins_fim (Fila_No* fim, float v);
  227. /* função auxiliar: retira do início */
  228. Fila_No* Fila_ret_ini (Fila_No* ini);
  229. /* funções para manipulação de filas */
  230. void insere (Fila* f, float v);
  231. float retira (Fila* f);
  232. int Fila_vazia (Fila* f);
  233. void Fila_libera (Fila* f);
  234. /* imprime: versão com lista */
  235. void Fila_imprime (Fila* f);
  236. #endif /* FILA_H */
Advertisement
Add Comment
Please, Sign In to add comment