Programação e Desenvolvimento

Projetos, softwares, sites, blogs e trabalhos conforme sua necessidade e com os melhores preços.
Tecnologia do Blogger.

Text Widget

Search (Don't Edit)

Sample Text

Colaboradores

Formulir Kontak

Nome

E-mail *

Mensagem *

Full-Width Version (true/false)

Flickr

Arquivo do blog

Facebook

Translate

Video of the Day

Slider (Add Label Name Here!) (Documentation Required)

Teste Teste Teste

Know us

Teste Teste Teste Teste

Popular Posts

Featured

29 de abr. de 2024

O estudo das estruturas de dados em Filas e Pilhas é fundamental para entender como organizar e acessar informações de forma eficiente em programação.

   MAPA - ADSIS - ESTRUTURA DE DADOS I - 52_2024

Entre em contato com a nossa equipe que vamos assessorar com esse trabalho

Mais de 10 anos no mercado acadêmico 


=================MV-ASSESSORIA==========================
CONTATO
Entre em contato com a nossa equipe que vamos assessorar com esse trabalho

(15)98170-8778

Tele gram.:( 15) 98170-8778 - 

E-MAIL: Mvf5system@gmail.com

O estudo das estruturas de dados em Filas e Pilhas é fundamental para entender como organizar e acessar informações de forma eficiente em programação. Uma Fila segue o princípio FIFO (First In, First Out), onde o primeiro elemento inserido é o primeiro a ser removido, ideal para cenários como processamento de tarefas em ordem de chegada. Por outro lado, uma Pilha segue o princípio LIFO (Last In, First Out), em que o último elemento inserido é o primeiro a ser removido, adequada para situações como rastreamento de chamadas de função ou expressões matemáticas. Compreender as operações básicas, como inserção (enqueue/ push), remoção (dequeue/ pop), e visualização (front/ top), permite a implementação eficaz de algoritmos e soluções para uma variedade de problemas computacionais, contribuindo para o desenvolvimento de sistemas robustos e eficientes.

Filas e pilhas são muito importantes em diferentes processos no dia a dia, tanto para processos em computação quanto no “mundo real”. As filas são estruturas sequenciais ordenadas, onde um novo elemento sempre é inserido no final da fila e só pode ser removido o elemento do início da fila. Não se pode “furar a fila”.

Vamos alterar um pouco essa definição de fila para atender a um problema real. Imagine que você entra em uma fila em um banco que é gerenciada através de senhas. Porém, não é uma fila única e simples, mas uma fila que comporta diferentes situações: 

• Existem 4 caixas realizando o atendimento.
• As senhas distribuídas possuem uma letra, que indica a categoria, seguida por um número sequencial.
• Considere as seguintes categorias:
- C – Comum
- P – Prioridade (idosos, gestantes, etc.)
- R – Atendimento rápido (operações simples)
• O caixa 1 atende às prioridades. Se não houver prioridades na fila, atendem o próximo da fila, de qualquer categoria.
• Os caixas 2 e 3 realizam atendimentos comuns. Se não houver, atendem o próximo da fila, de qualquer categoria.
• O caixa 4 é especial para atendimentos rápidos. Se não houver, atendem o próximo da fila, de qualquer categoria.

Segue uma implementação em linguagem C seguindo as regras apresentadas.
 

1 //Bibliotecas
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <locale.h>
5
6 //Constantes
7 #define tamanho 20
8
9 //Estrutura da Senha
10 typedef struct tsenha {
11    int numero;
12    char tipo;
13 } tsenha;
14 
15 //Estrutura da Fila
16 struct tfilabanco {
17    tsenha dados[tamanho];
18    int ini;
19    int fim;
20 };
21
22 //Variáveis globais
23 struct tfilabanco fila;
24 int op, proximo;
25
26 //Protipação
27 void fila_entrar();
28 void fila_sair();
29 void fila_mostrar();
30 void menu_mostrar();
31
32 //Função principal
33 int main(){
34    setlocale(LC_ALL, "Portuguese");
35    op = 1;
36    proximo = 1;
37    fila.ini = 0;
38    fila.fim = 0;
39    while (op != 0) {
40        system("cls");
41        fila_mostrar();
42        menu_mostrar();
43        scanf("%d", &op);
44        switch (op) {
45            case 1:
46                fila_entrar();
47                break;
48            case 2:
49                fila_sair();
50                break;
51        }
52    }
53    return 0;
54 }
55
56 //Adicionar um elemento no final da Fila
57 void fila_entrar(){
58    if (fila.fim == tamanho) {
59        printf("\nA fila está cheia, volte outro dia!\n\n");
60        system("pause");
61        return;
62    }
63
64    char tipo;
65    printf("\nEscolha o tipo do atendimento:");
66    printf("\nC - Comum");
67    printf("\nP - Prioridade");
68    printf("\nR - Rápido: ");
69    scanf(" %c", &tipo);
70    if (tipo != 'C' && tipo != 'P' && tipo != 'R') {
71        printf("\nTipo de atendimento inválido!\n\n");
72        return;
73    }
74    fila.dados[fila.fim].tipo = tipo;
75    fila.dados[fila.fim].numero = proximo;
76    proximo++;
77    fila.fim++;
78 }
79
80 //Retirar o primeiro elemento da Fila de acordo com o caixa
81 void fila_sair() {
82    if (fila.ini == fila.fim) {
83        printf("\nFila vazia, mas logo aparece alguém!\n\n");
84        system("pause");
85    } else {
86        int caixa;
87        char tipoatendimento;
88        printf("\nQual caixa vai atender (1 a 4)?: ");
89        scanf("%d", &caixa);
90        switch (caixa) {
91            case 1:
92                tipoatendimento = 'P';
93                break;
94            case 2:
95            case 3:
96                tipoatendimento = 'C';
97                break;
98            case 4:
99                tipoatendimento = 'R';
100                break;
101            default:
102                printf("\nValor inválido!");
103                return;
104        }
105        // Define a posição do elemento aser removido como 0
106        int posicao = 0;
107
108        // Procura elemento do tipo correspondente
109        for (int i = 0; i < tamanho; i++) {
110            if (fila.dados[i].tipo == tipoatendimento) {
111                posicao = i;
112                break;
113            }
114        }
115
116        printf("\n\n###### ATENDIMENTO #########\n");
117        printf("Senha: %c-%d\n", fila.dados[posicao].tipo, fila.dados[posicao].numero);
118        printf("Caixa: %d\n", caixa);
119        printf("###### ATENDIMENTO #########\n\n");
120
121        // Retira elemento da posição e move os demais
122        for (int i = posicao; i < tamanho; i++) {
123            fila.dados[i].numero = fila.dados[i+1].numero;
124            fila.dados[i].tipo = fila.dados[i+1].tipo;
125        }
126        fila.dados[fila.fim].numero = 0;
127        fila.dados[fila.fim].tipo = ' ';
128        fila.fim--;
129    }
130 }
131
132 //Mostrar o conteúdo da Fila
133 void fila_mostrar() {
134    int i;
135    printf("[ ");
136    for (i = 0; i < tamanho; i++) {
137        printf("%c-%d ", fila.dados[i].tipo, fila.dados[i].numero);
138    }
139    printf("]\n\n");
140 }
141
142 //Mostrar o menu de opções
143 void menu_mostrar() {
144    printf("\nEscolha uma opção:\n");
145    printf("1 - Nova senha\n");
146    printf("2 - Atender\n");
147    printf("0 - Sair\n\n");
148 }


Fonte: Elaborado pelo professor, 2024.

Baseado nas regras apresentadas e no código fonte apresentado, RESPONDA às perguntas a seguir:

1- Explique como é possível armazenar número e letra para cada senha nessa solução.
2- Explique como é que o caixa 4 consegue chamar primeiro quem tem senha de atendimento rápido, detalhando esse trecho do algoritmo, e o que acontece caso não haja nenhuma senha dessa categoria.
3- Suponha que a fila esteja composta por: P-512, R-513, C-514, C-515, P-516. Quando o caixa 3 fizer uma chamada, qual senha será atendida? Como fica a fila após esse atendimento?
4 - Nas linhas 76 e 77 há dois incrementos de variáveis. Por que isso é feito e qual é a diferença entre essas variáveis?

O que devo entregar?
Deverá ser entregar as respostas das 4 perguntas anteriores em um arquivo de WORD ou PDF, conforme formulário padrão constante nos materiais da disciplina.

Orientações:
1. Acesse o link com um vídeo tutorial para ajudá-lo neste processo de criação e desenvolvimento.
2. A entrega deve ser feita exclusivamente por meio do Template de entrega da atividade MAPA disponível no material da disciplina.
3. Antes de enviar sua atividade, certifique-se de que respondeu a todas as perguntas e realize uma cuidadosa correção ortográfica.
4. Após o envio não são permitidas alterações, ou modificações. Logo, você tem apenas uma chance de enviar o arquivo corretamente. Revise bem antes de enviar!
5. Lembre-se que evidências de cópias de materiais, incluindo de outros acadêmicos, sem devidas referências serão inquestionavelmente zeradas. As citações e referências, mesmo que do livro da disciplina, devem ser realizadas conforme normas da Instituição de Ensino.
6. Não são permitidas correções parciais no decorrer do módulo, ou seja, o famoso: “professor, veja se minha atividade está certa?”. Isso invalida seu processo avaliativo. Lembre-se que a interpretação da atividade também faz parte da avaliação.
7. Procure sanar suas dúvidas junto à mediação em tempo hábil sobre o conteúdo exigido na atividade, de modo que consiga realizar sua participação.
8. Atenção ao prazo de entrega, evite envio de atividade em cima do prazo. Você pode ter algum problema com internet, computador, software etc. e os prazos não serão flexibilizados, mesmo em caso de comprovação.

Bons estudos!
Em caso de dúvidas, encaminhar mensagem ao seu Professor(a) Mediador(a).

0 comentários:

Postar um comentário

Postagem em destaque

MVF5 System - SOLUÇÕES EM TI!

          Desenvolvimento de projetos, softwares, sites, blogs e trabalhos conforme sua necessidade e com os melhores preços. Entre em c...

Seguidores

Total de visualizações

Postagens populares