Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Primeiro commit

  • Loading branch information...
commit 755a845392c7ced3e69243913e5bcd88d797d99d 0 parents
@marcelokanzaki authored
Showing with 221 additions and 0 deletions.
  1. +1 −0  .gitignore
  2. +35 −0 20120326_fila_estatica.c
  3. +185 −0 20120327_fila_de_banco.c
1  .gitignore
@@ -0,0 +1 @@
+.DS_Store
35 20120326_fila_estatica.c
@@ -0,0 +1,35 @@
+#include <stdio.h>
+
+typedef struct FilaEstatica {
+ int elementos[10];
+ int inicio, fim;
+} FilaEstatica;
+
+struct FilaEstatica fila;
+int i;
+
+int main(int argc, char *argv[]) {
+ // Inicialização da fila
+ fila.inicio = 0;
+ fila.fim = 9;
+
+ // Inserindo elementos (populando) a fila
+ for(i = fila.inicio; i <= fila.fim; i++) {
+ printf("Digite o %iº elemento da fila: ", i + 1);
+ scanf("%d", &fila.elementos[i]);
+ }
+
+ // Excluindo um elemento por deslocamento dos outros
+ for(i = fila.inicio; i < fila.fim; i++) fila.elementos[i] = fila.elementos[i+1];
+ fila.fim--;
+
+ // Excluindo um elemento por deslocamento do início da fila
+ fila.inicio++;
+
+ // Apresentando os elementos da fila
+ for(i = fila.inicio; i <= fila.fim; i++) {
+ printf("%iº elemento: %i\n", i + 1, fila.elementos[i]);
+ }
+
+ return 0;
+}
185 20120327_fila_de_banco.c
@@ -0,0 +1,185 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+
+#define green "\033[0;32m"
+
+typedef struct Cliente {
+ int senha;
+ time_t horario_de_chegada;
+ char horario_de_chegada_formatado[80];
+ time_t horario_de_atendimento;
+} Cliente;
+
+typedef struct FilaDeBanco {
+ Cliente clientes[50];
+ int inicio;
+ int fim;
+ int senha;
+ int qtd_clientes_atendidos;
+ double tempo_de_espera_total;
+ double tempo_de_espera_medio;
+} FilaDeBanco;
+
+typedef struct Opcoes {
+ int inserir_cliente;
+ int atender_cliente;
+ int apresentar_todos;
+ int apresentar_proximo;
+ int informar_tempo_medio;
+ int sair;
+} Opcoes;
+
+void mostrar_opcoes() {
+ printf("Escolha uma das opções a seguir:\n");
+ printf(" 1: Inserir cliente na fila\n");
+ printf(" 2: Atender o próximo cliente da fila\n");
+ printf(" 3: Apresentar os clientes que estão na fila\n");
+ printf(" 4: Apresentar o próximo cliente a ser atendido\n");
+ printf(" 5: Mostrar o tempo médio de atendimento até o momento\n");
+ printf(" 0: Sair\n");
+}
+
+int main(int argc, char *argv[])
+{
+ // Inicializa Opçoes
+ Opcoes opcoes = {1, 2, 3, 4, 5, 0};
+ int opcao_atual;
+
+ // Cria a fila
+ FilaDeBanco fila;
+ fila.inicio = 0;
+ fila.fim = 0;
+ fila.senha = 1;
+ fila.qtd_clientes_atendidos = 0;
+ fila.tempo_de_espera_total = 0;
+ fila.tempo_de_espera_medio = 0;
+
+ // Outras variáveis usadas no programa
+ int i;
+ struct tm ts_horario_de_chegada;
+
+
+ // Input do Usuário...
+ do {
+ mostrar_opcoes();
+ printf("Opção: ");
+ scanf("%d", &opcao_atual);
+
+ // 1. Inserir Cliente
+ if (opcao_atual == opcoes.inserir_cliente) {
+ // cliente a ser inserido
+ Cliente cliente;
+ cliente.senha = fila.senha;
+ fila.senha++;
+ time(&cliente.horario_de_chegada);
+ // guarda a hora de chegada formatada para apresentação posterior
+ ts_horario_de_chegada = *localtime(&cliente.horario_de_chegada);
+ strftime(cliente.horario_de_chegada_formatado,
+ sizeof(cliente.horario_de_chegada_formatado),
+ "%H:%M:%S", &ts_horario_de_chegada);
+
+ // insere o cliente na fila
+ fila.clientes[fila.fim] = cliente;
+ fila.fim++;
+
+ system("clear");
+ printf("%s=> Cliente com a senha #%d inserido com sucesso.\n\n", green, cliente.senha);
+ printf("%s", "\033[0m");
+ }
+
+ // 2. Atender o próximo cliente da fila
+ if (opcao_atual == opcoes.atender_cliente) {
+ system("clear");
+
+ // Mensagem diferente caso a fila esteja vazia
+ if (fila.fim - fila.inicio == 0) {
+ printf("%s=> A fila está vazia\n\n", green);
+ printf("%s", "\033[0m");
+ continue;
+ }
+
+ // atende o cliente
+ printf("%s=> Atendendo Cliente com a senha #%d, que chegou às %s\n\n",
+ green,
+ fila.clientes[fila.inicio].senha,
+ fila.clientes[fila.inicio].horario_de_chegada_formatado);
+ fila.inicio++;
+ printf("%s", "\033[0m");
+
+ // grava o horario de atendimento do cliente
+ time(&fila.clientes[fila.inicio].horario_de_atendimento);
+
+ // calcula a média de tempo dos clientes atendidos
+ fila.tempo_de_espera_total += difftime(fila.clientes[fila.inicio].horario_de_atendimento,
+ fila.clientes[fila.inicio].horario_de_chegada);
+ fila.qtd_clientes_atendidos++;
+ fila.tempo_de_espera_medio = fila.tempo_de_espera_total / fila.qtd_clientes_atendidos;
+ }
+
+ // 3. Apresentar os Clientes que estão na fila
+ if (opcao_atual == opcoes.apresentar_todos) {
+ system("clear");
+
+ // Mensagem diferente caso a fila esteja vazia
+ if (fila.fim - fila.inicio == 0) {
+ printf("%s=> A fila está vazia\n\n", green);
+ printf("%s", "\033[0m");
+ continue;
+ }
+
+ printf("%s=> Existem %d clientes na fila:\n", green, fila.fim - fila.inicio);
+
+ // apresenta os clientes
+ for (i = fila.inicio; i < fila.fim; i++) {
+ printf("Cliente com a senha #%i, que chegou às %s\n",
+ fila.clientes[i].senha,
+ fila.clientes[i].horario_de_chegada_formatado);
+ }
+
+ printf("%s\n", "\033[0m");
+ }
+
+ // 4. Apresentar o próximo cliente a ser atendido
+ if (opcao_atual == opcoes.apresentar_proximo) {
+ system("clear");
+
+ // Mensagem diferente caso a fila esteja vazia
+ if (fila.fim - fila.inicio == 0) {
+ printf("%s=> A fila está vazia\n\n", green);
+ printf("%s", "\033[0m");
+ continue;
+ }
+
+ printf("%s=> O próximo cliente a ser atendido está com a senha #%d e chegou às %s\n\n",
+ green,
+ fila.clientes[fila.inicio].senha,
+ fila.clientes[fila.inicio].horario_de_chegada_formatado);
+ printf("%s", "\033[0m");
+ }
+
+ // 5. Mostrar o tempo médio de atendimento até o momento
+ if (opcao_atual == opcoes.informar_tempo_medio) {
+ system("clear");
+
+ // Mensagem diferente para quando nenhum cliente ainda tenha sido atendido
+ if (fila.qtd_clientes_atendidos == 0) {
+ printf("%s=> Nenhum cliente atendido até o momento.\n\n", green);
+ printf("%s", "\033[0m");
+ continue;
+ }
+
+
+ // Observação:
+ // quando o tempo de espera é muito curto, o valor mostrado parece ser estranho,
+ // espero que considere apenas a lógica, já que não sabemos lidar muito bem com
+ // essa função de cálculo da diferença de tempo
+ printf("%s=> O tempo médio de espera é %.2lf minutos.\n\n", green, fila.tempo_de_espera_medio / 60);
+ printf("%s", "\033[0m");
+ }
+
+ } while(opcao_atual != opcoes.sair);
+
+
+ return 0;
+}
Please sign in to comment.
Something went wrong with that request. Please try again.