Você está aqui: C ::: Estruturas de Dados ::: Filas

Como criar uma fila em C usando um vetor de ints - Fila em C usando um menu de opções switch...case

Quantidade de visualizações: 541 vezes
Como sabemos, a Fila é uma estrutura de dados do tipo FIFO - First-In, First-Out (Primeiro a entrar, primeiro a sair). Neste tipo de estrutura, o primeiro elemento a ser inserido é o primeiro a ser removido. Funciona exatamente igual a fila de um banco, fila para comprar ingressos, fila para pagar no caixa da lanchonete, etc.

Nesta dica mostrarei como implementar um fila na linguagem C usando um vetor de inteiros, ou seja, um array. Para facilitar o seu entendimento eu coloquei um menu de opções, feito usando a estrutura de controle switch...case.

Veja que coloquei a maioria das funções presentes em uma fila, a saber, exibir_fila(), enfileirar(), desenfileirar(), fila_cheia(), fila_vazia(), retornar_inicio() e retornar_fim().

Veja o código C completo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

// tamanho máximo da fila
#define TAM_MAX 10

// vamos precisar de algumas variáveis globais
int fila[TAM_MAX]; // vetor de inteiros que servirá como fila
unsigned int tamanho = 0; // tamanho atual da fila
unsigned int inicio = 0; // índice que aponta para o início da fila
unsigned int fim = TAM_MAX - 1; // índice que aponta para o final da fila

// protótipo das funções (sim, alguns compiladores exigem isso)
void exibir_fila();
void enfileirar(int valor);
int desenfileirar();
int fila_cheia();
int fila_vazia();
int retornar_inicio();
int retornar_fim();

// função principal do programa
int main(int argc, char *argv[]){
  // variáveis usadas na resolução do exercício
  int opcao, valor, continuar = 1;
	
  setlocale(LC_ALL,""); // para acentos do português
  
  // laço infinito para o menu de opções
  while (continuar){
    printf("--------------------------------------\n");
    printf("         SIMULAÇÃO DE FILA EM C       \n");
    printf("--------------------------------------\n");
    printf("1. Enfileirar\n");
    printf("2. Desenfileirar\n");
    printf("3. Tamanho da Fila\n");
    printf("4. Retornar Início da Fila\n");
    printf("5. Retornar Final da Fila\n");
    printf("6. Sair do Programa\n");
    printf("--------------------------------------\n");
    printf("Sua opção: ");

    // lê a opção informada pelo usuário
    scanf("%d", &opcao);
    
    // trata as opções usando um menu switch
    switch(opcao){
      case 1: // enfileira um novo valor na fila
        printf("\nInforme o valor a ser enfileirado: ");
        scanf("%d", &valor);

        // enfileira o valor
	if(!fila_cheia()){
	  enfileirar(valor);
          printf("\nValor enfileirado com sucesso.\n\n");
          exibir_fila();
        }
	else{
	  printf("\nA fila está cheia.\n\n");
	}
      
	break;
			  
      case 2: // desenfileira um valor da fila
        if(!fila_vazia()){
	  valor = desenfileirar();
          printf("\nValor desenfileirado: %d\n\n", valor);
          exibir_fila();
        }
	else{
	  printf("\nA fila está vazia.\n\n");
	}
      
	break;

      case 3: // retorna o tamanho da fila
        printf("\nA fila possui %d elementos.\n\n", tamanho);
      
	break;
				
      case 4: // retorna o elemento no início da fila
        if(!fila_vazia()){
	  valor = retornar_inicio();
          printf("\nValor no início da fila: %d\n\n", valor);
        }
	else{
	  printf("\nA fila está vazia.\n\n");
	}
      
	break;
				
      case 5: // retorna o elemento no final da fila
        if(!fila_vazia()){
	  valor = retornar_fim();
          printf("\nValor no final da fila: %d\n\n", valor);
        }
	else{
	  printf("\nA fila está vazia.\n\n");
	}
      
	break;
				
      case 6: // sai do menu de opções
        printf("\nObrigado por usar o programa.\n");
        continuar = 0;
      
	break;		  
    }
  }
	
  printf("\n\n");
  system("PAUSE");	
  return 0;
}

// função que exibe o conteúdo da fila
void exibir_fila() {
  int i;
	
  // a fila está vazia
  if(fila_vazia()){
    printf("\nA fila está vazia.\n\n");
  } 
  else {
    printf("Conteúdo da fila:\n\n");
    
    for (i = inicio; i <= fim; i++) {
      printf("Item[%d]: %d\n", (i + 1), fila[i]);
    }
    
    printf("\n");
  }
}

// função que testa se a fila está cheia
int fila_cheia(){
  return (tamanho == TAM_MAX);
}

// função que testa se a fila está vazia
int fila_vazia(){
  return (tamanho == 0);
}

// retorna o elemento no início da fila
int retornar_inicio(){
  return fila[inicio];
}

// retorna o elemento no fim da fila
int retornar_fim(){
  return fila[fim];
}

// função que permite enfileirar um novo valor na fila
void enfileirar(int valor){
  // assegura que o final da fila não ultrapasse os limites
  // do vetor
  fim = (fim + 1) % TAM_MAX;

  // aumentamos o tamanho da fila
  tamanho++;

  // enfileiramos o novo valor
  fila[fim] = valor;
}

int desenfileirar(){
  int valor;

  // desenfileira um valor da fila
  valor = fila[inicio];

  // vamos evitar que o início da fila não ultrapassa
  // os limites do vetor
  inicio = (inicio + 1) % TAM_MAX;

  // reduzimos o tamanho da fila
  tamanho--;

  // e retornamos o valor desenfileirado
  return valor;
}

Ao executar este código C nós teremos o seguinte resultado:

--------------------------------------
         SIMULAÇÃO DE FILA EM C
--------------------------------------
1. Enfileirar
2. Desenfileirar
3. Tamanho da Fila
4. Retornar Início da Fila
5. Retornar Final da Fila
6. Sair do Programa
--------------------------------------
Sua opção: 1

Informe o valor a ser enfileirado: 39

Valor enfileirado com sucesso.

Conteúdo da fila:

Item[1]: 56
Item[2]: 39
...


Link para compartilhar na Internet ou com seus amigos:

C ::: Dicas & Truques ::: Strings e Caracteres

Como concatenar strings em C usando a função strcat() - Aprenda a programar na linguagem C

Quantidade de visualizações: 42034 vezes
Concatenar strings é a operação de anexar uma string a outra. Em C, isso é feito com o auxílio da função strcat(), disponível no header string.h. Esta função recebe a string de destino, a string de origem, anexa a string de destino no final da string de origem e retorna um ponteiro para o resultado final. Veja um exemplo no qual usamos esta função para concatenar três strings:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  char frase1[100] = "Gosto";
  strcat(frase1, " muito de ");
  strcat(frase1, " programar em C");

  // exibe o resultado
  printf("%s\n\n", frase1);

  system("PAUSE");
  return 0;
}


Veja que a string de destino deve ser declarada com um tamanho suficiente para acomodar as strings que serão anexadas a ela. Veja agora um exemplo que usa o ponteiro retornado pela função strcat() para inicializar um ponteiro do tipo char:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  // declara e inicializa duas strings
  char frase1[100] = "Gosto muito de ";
  char frase2[15] = "programar em C";
  char *res = strcat(frase1, frase2);

  // exibe o resultado
  printf("%s\n\n", res);

  system("PAUSE");
  return 0;
}



C ::: Dicas & Truques ::: Matemática e Estatística

Como usar a função modf() da linguagem C para separar um valor de ponto flutuante em suas partes inteira e fracionária

Quantidade de visualizações: 9820 vezes
Em algumas situações precisamos obter as partes inteira e fracionária de um valor de ponto flutuante. Para isso podemos usar a função modf(). Veja sua assinatura:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

double modf(double x, double * intpart);

O parâmetro x é o valor de ponto flutuante cujas partes queremos separar e intpart é uma variável do tipo double que receberá a parte inteira do valor. O retorno da função é o valor fracionário.

Vamos ver um exemplo? Veja como podemos quebrar o valor 34,27 em suas partes inteira e fracionária:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  double valor = 34.27;
  
  // vamos separar o valor em suas partes inteira e fracionária
  double inteira = 0.0, fracionaria = 0.0;
  fracionaria = modf(valor, &inteira);
  
  // vamos exibir o resultado
  printf("Parte inteira: %f\n", inteira);
  printf("Parte fracionaria: %f\n", fracionaria);
  
  printf("\n\n");
  system("pause");
  return 0;
}

Ao executarmos este código teremos o seguinte resultado:

Parte inteira: 34.000000
Parte fracionária: 0.270000


C ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade)

Exercícios Resolvidos de C - Um método recursivo que conta de 10 até 0

Quantidade de visualizações: 775 vezes
Pergunta/Tarefa:

Escreva um método recursivo em C que conta e exibe os valores de 10 até 0. Seu método deverá possuir a seguinte assinatura:

void contar_recursivamente(int n){
  // sua implementação aqui
}
Veja que o método deverá receber o valor 10 e efetuar novas chamadas a si mesmo até que os valores de 10 até 0 sejam exibidos. O ponto de parada da recursividade é a exibição do valor 0.

Sua saída deverá ser parecida com:

10
9
8
7
6
5
4
3
2
1
0
Resposta/Solução:

Veja a resolução comentada deste exercício usando C console:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>   
   
// função recursiva que conta de 10 até 0;
void contar_recursivamente(int n){
  // vamos exibir o número atual
  printf("%d\n", n);
	
  // devemos prosseguir com a recursividade?
  if(n > 0){
    // decrementa o valor de n
    n--;  
    contar_recursivamente(n); // e faz uma nova chamada recursiva
  }
}
   
int main(int argc, char *argv[]){
  setlocale(LC_ALL,""); // para acentos do português
	
  // efetua uma chamada ao método recursivo fornecendo 
  // o primeiro valor
  contar_recursivamente(10);
	
  printf("\n\n");
  system("pause");
  return 0;
}



Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais

Instalações prediais de combate a incêndio

A aspersão de água por meio de chuveiros automáticos é uma técnica eficiente para combater o princípio de incêndio. A norma NBR 10897, que estabelece os parâmetros mínimos para o projeto e a instalação de sistemas de proteção contra incêndio por chuveiros automáticos, classifica os sistemas de chuveiros automáticos em quatro tipos básicos.

Analise os tipos de sistemas de chuveiros automáticos listados a seguir e associe-os com as suas respectivas características:

1) Sistema de ação prévia

2) Sistema de tubo seco

3) Sistema de dilúvio

4) Sistema de tubo molhado

( ) É indicado para locais em que não há risco de congelamento da água na tubulação.

( ) É caracterizado pelo tempo prolongado entre a abertura do chuveiro automático e a descarga de água.

( ) Demanda um sistema suplementar de detecção, que deve ser instalado na mesma área dos chuveiros automáticos.

( ) Os chuveiros ficam abertos e funcionam apenas quando a água entra na tubulação após o acionamento de uma válvula.

Assinale a alternativa que apresenta a sequência correta:

A) 1, 2, 3, 4.

B) 4, 3, 2, 1.

C) 3, 2, 1, 4.

D) 2, 3, 4, 1.

E) 4, 2, 1, 3.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Ética e Legislação Profissional

Ética, Legislação e Entidades que regulamentam a profissão

No ambiente corporativo você pode deparar-se com comportamentos ou sinais de condutas antiéticas. Com base nos ensinamentos estudados no livro, qual é a forma mais apropriada de identificar um sinal de comportamento antiético?

A) Coletando fatos e comparando-os com padrões éticos.

B) A partir da aplicação natural do bom senso.

C) Pela observação das pessoas envolvidas que podem esboçar expressões suspeitas.

D) A partir de denúncias.

E) Questionando diretamente as pessoas com comportamentos suspeitos.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Java

Analise o seguinte código Java

double a = 0.0 / 0;
System.out.println(a);

Qual é o resultado de sua execução?

A) Infinity

B) NaN

C) Uma exceção java.lang.ArithmeticException: / by zero

D) 0
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica

O manômetro

Um manômetro é o instrumento utilizado para medir a pressão de fluidos contidos em recipientes fechados. O manômetro para medição da pressão absoluta é usado quando pressões devem ser medidas, independentemente da pressão atmosférica. A pressão do meio medido é determinada contra uma pressão de referência, sendo que esta última corresponde ao ponto zero da pressão absoluta.

Nesse contexto, determine a pressão manométrica em P devido à deflexão do mercúrio do manômetro em U da figura a seguir.



A) Aproximadamente 77kPa.

B) Aproximadamente 89kPa.

C) Aproximadamente 94kPa.

D) Aproximadamente 106kPa.

E) Aproximadamente 111kPa.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil

Formas: Confecção e colocação

O artifício chamado de contraflecha, usual no processo de execução de formas para estruturas em concreto armado, é utilizado para impedir o quê?

A) A tração.

B) A compressão.

C) A flexão.

D) A torção.

E) O cisalhamento.
Verificar Resposta Estudar Cards Todas as Questões

Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de C

Veja mais Dicas e truques de C

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 33 usuários muito felizes estudando em nosso site.