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: 567 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 ::: Trigonometria - Funções Trigonométricas

Como calcular o seno de um número ou ângulo em C usando a função sin()

Quantidade de visualizações: 4452 vezes
Em geral, quando falamos de seno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função seno disponível nas linguagens de programação para calcular o seno de qualquer número, mesmo nossas aplicações não tendo nenhuma relação com trigonometria.

No entanto, é sempre importante entender o que é a função seno. Veja a seguinte imagem:



Veja que temos um triângulo retângulo com as medidas já calculadas para a hipotenusa e os dois catetos, assim como os ângulos entre eles.

Assim, o seno é a razão entre o cateto oposto (oposto ao ângulo theta) e a hipotenusa, ou seja, o cateto oposto dividido pela hipotenusa. Veja a fórmula:

\[\text{Seno} = \frac{\text{Cateto oposto}}{\text{Hipotenusa}} \]

Então, se dividirmos 20 por 36.056 (na figura eu arredondei) nós teremos 0.5547, que é a razão entre o cateto oposto e a hipotenusa (em radianos).

Agora, experimente calcular o arco-cosseno de 0.5547. O resultado será 0.9828 (em radianos). Convertendo 0.9828 radianos para graus, nós obtemos 56.31º, que é exatamente o ângulo em graus entre o cateto oposto e a hipotenusa na figura acima.

Pronto! Agora que já sabemos o que é seno na trigonometria, vamos entender mais sobre a função sin() da linguagem C. Esta função, disponível no header math.h, recebe um valor numérico e retorna um valor, também numérico) entre -1 até 1 (ambos inclusos). Veja:

----------------------------------------------------------------------
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 <math.h>  
  
int main(int argc, char *argv[]){
  printf("Seno de 0 = %f", sin(0));
  printf("\nSeno de 1 = %f", sin(1));
  printf("\nSeno de 2 = %f", sin(2)); 
   
  printf("\n\n");
  system("PAUSE");
  return 0;
}

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

Seno de 0 = 0.000000
Seno de 1 = 0.841471
Seno de 2 = 0.909297

Note que calculamos os senos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função seno mostrada abaixo:




C ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes)

Exercícios Resolvidos de C - Criando dois vetores de inteiros de forma que a soma dos elementos individuais de cada vetor seja igual a 30

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

Considere os seguintes vetores:

// dois vetores de 5 inteiros cada
int a[] = {50, -2, 9, 5, 17};
int b[] = new int[5];
Escreva um programa C que preencha o segundo vetor de forma que a soma dos respectivos elementos individuais de cada vetor seja igual a 30.

Sua saída deverá ser parecida com:

Valores no vetor a: 50   -2   9   5   17   
Valores no vetor b: -20   32   21   25   13
Resposta/Solução:

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

----------------------------------------------------------------------
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>

int main(int argc, char *argv[]){
  setlocale(LC_ALL,""); // para acentos do português

  // dois vetores de 5 inteiros cada
  int a[] = {50, -2, 9, 5, 17};
  int b[5];
  int i;  
    
  // vamos preencher o segundo vetor de forma que a soma dos
  // valores de seus elementos seja 30
  for(i = 0; i < 5; i++){
    b[i] = 30 - a[i];  
  }
    
  // vamos mostrar o resultado
  printf("Valores no vetor a: ");
  for(i = 0; i < 5; i++){
    printf("%d  ", a[i]);  
  }
    
  printf("\nValores no vetor b: ");
  for(i = 0; i < 5; i++){
    printf("%d  ", b[i]);  
  }
   
  printf("\n\n");
  system("PAUSE");	
  return 0;
}



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

Como contar as ocorrências de uma substring em uma string em C usando uma função substring_count() personalizada

Quantidade de visualizações: 10220 vezes
Em algumas situações precisamos obter a quantidade de vezes que uma substring ocorre dentro de uma string. Para isso podemos usar a função personalizada substring_count(). Esta função recebe a string e a substring que desejamos pesquisar e retorna um inteiro contendo a quantidade de vezes que a substring foi encontrada. Veja o código:

----------------------------------------------------------------------
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 <string.h>

// função personalizada que permite contar as
// ocorrências de uma substring em uma string
int substring_count(const char *str, const char *substring){
  int i, j, k, quant = 0;

  // vamos percorrer todos os caracteres da string
  for(i = 0; str[i]; i++){
    for(j = i, k = 0; str[j] == substring[k]; j++, k++){
      if(substring[k + 1] == 0) // fim da comparação
        quant++;
    }
  }

  return quant;
}

int main(int argc, char *argv[]){
  char frase[] = "Gosto muito de Java, JavaScript e Python";

  printf("Ocorrencias encontradas: %d",
    substring_count(frase, "Java"));

  puts("\n\n");
  system("PAUSE");
  return 0;
}



Desafios, 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: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



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