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...caseQuantidade 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 CQuantidade 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áriaQuantidade 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é 0Quantidade 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 } Sua saída deverá ser parecida com: 10 9 8 7 6 5 4 3 2 1 0 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 Javadouble 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 |
Software 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 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 |