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: 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 ... |
![]() |
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 30Quantidade 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]; 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 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() personalizadaQuantidade 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 - Como alocar memória para instâncias de uma estrutura (struct) e acessá-las usando ponteiros em C |
Códigos Fonte |
![]() 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 |
![]() 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 |