Você está aqui: C ::: Desafios e Lista de Exercícios Resolvidos ::: Geometria, Trigonometria e Figuras Geométricas |
Como calcular o ângulo entre os ponteiros de horas e minutos em um relógio analógico - Exercícios Resolvidos de CQuantidade de visualizações: 563 vezes |
Pergunta/Tarefa: Este exercício é um desafio que aparece com muita frequência em entrevistas para programadores. Trata-se de uma tarefa na qual você deverá pedir para o usuário informar o valor das horas (no formato 12 ou 24 horas) e os minutos (de 0 a 59) e retornar o ângulo, em graus, do ponteiro das horas em relação ao ponteiro dos minutos. Este desafio é muito interessante, pois serve como base para a criação de um relógio analógico que se atualiza sozinho, a cada segundo decorrido. Em mais dicas do site nós mostramos como isso pode ser feito. Antes da resolução do exercício você deve se lembrar que haverá dois ângulos: o ângulo que vai do ponteiro de horas para o ponteiro dos minutos e o ângulo que vai do ponteiro dos minutos para o ponteiro das horas. O exercício pede apenas o primeiro. Sua saída deverá ser parecida com: Informe as horas: 9 Informe os minutos: 0 O ângulo entre os dois ponteiros é: 90 graus. Veja a resolução comentada deste exercício em 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> #include <math.h> // função principal do programa int main(int argc, char *argv[]){ // variáveis usadas na resolução do problema int horas, minutos, angulo; setlocale(LC_ALL,""); // para acentos do português // vamos pedir para o usuário informar as horas printf("Informe as horas: "); scanf("%d", &horas); // vamos pedir para o usuário informar os minutos printf("Informe os minutos: "); scanf("%d", &minutos); // vamos calcular o ângulo entre os ponteiros de horas // e minutos no relógio analógico angulo = calcularAngulo(horas, minutos); // e mostramos o resultado printf("O ângulo entre os dois ponteiros é: %d graus.", angulo); printf("\n\n"); system("PAUSE"); return 0; } // função que recebe as horas e minutos e retorna o // ângulo entre os dois ponteiros do relógio analógico int calcularAngulo(int horas, int minutos){ // variáveis locais int ponteiro_horas, ponteiro_minutos, angulo; // o primeiro passo é converter o formato 24 horas para // 12 horas horas = horas % 12; // agora calculamos a posição do ponteiro das horas ponteiro_horas = ((horas * 360) / 12) + ((minutos * 360) / (12 * 60)); // calculamos a posição do ponteiro dos minutos ponteiro_minutos = (minutos * 360) / 60; // então calculamos o ângulo entre os ponteiros angulo = abs(ponteiro_horas - ponteiro_minutos); // queremos o ângulo mais curto if (angulo > 180) { angulo = 360 - angulo; } // finalmente retornamos o ângulo calculado return angulo; } |
![]() |
C ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Como usar o laço do...while em C - Linguagem C para iniciantes: O laço do...whileQuantidade de visualizações: 31573 vezes |
O laço do...while em C é bem parecido com o laço while. A diferença é que no do...while, a condição é testada no final da primeira iteração, o que garante que o laço será executado no mínimo uma vez. Veja um exemplo de seu uso:---------------------------------------------------------------------- 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[]) { int valor = 1; do{ printf("%d ", valor); valor++; }while(valor <= 10); printf("\n\n"); system("PAUSE"); return 0; } |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como copiar os caracteres de uma string para outra usando a função strcpy() da linguagem CQuantidade de visualizações: 12939 vezes |
Pessoas acostumadas com Delphi, Java ou PHP podem pensar que a tarefa de copiar o conteúdo de uma string para outra em C pode ser tão simples quanto o código a seguir:---------------------------------------------------------------------- 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> int main(int argc, char *argv[]){ char frase1[] = "Gosto de PHP"; char frase2[50]; // pode receber até 49 caracteres // copia a primeira frase para a segunda frase2 = frase1; // exibe o resultado printf(frase2); puts("\n\n"); system("PAUSE"); return 0; } Este código não funciona. No Dev-C++ (MingW) a seguinte mensagem de erro de compilação é exibida: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- incompatible types in assignment of `char[13]` to `char[50]` Em C, a forma correta de copiar os caracteres de uma string para outra é obtendo ponteiros para a posição inicial das duas strings, percorrer todos os caracteres da primeira e atribuí-los um de cada vez nas posições de memória reservadas para a segunda string. Veja o protótipo da função strcpy(), usada para tal finalidade: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- char *strcpy(char *destino, const char *origem); Como podemos ver, a função copiará todos os caracteres contidos na string origem para a string destino. É importante observar que a string destino deverá ser declarada de forma que todos os caracteres a serem copiados possam ser acomodados sem que o programa corra o risco de escrever em áreas de memória reservadas a outras finalidades. Veja um exemplo 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 <string.h> int main(int argc, char *argv[]){ char frase1[] = "Gosto de PHP"; char frase2[50]; // pode receber até 50 caracteres // copia a primeira frase para a segunda strcpy(frase2, frase1); // exibe o resultado printf(frase2); puts("\n\n"); system("PAUSE"); return 0; } |
C ::: Dicas & Truques ::: Struct (Estruturas, Registros) |
Como alocar memória para instâncias de uma estrutura (struct) e acessá-las usando ponteiros em CQuantidade de visualizações: 11370 vezes |
Esta dica mostra como declarar uma estrutura (struct), alocar duas instâncias desta e acessá-las usando ponteiros. Considere a seguinte struct: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // define a estrutura Livro struct Livro{ char titulo[80]; int codigo; int paginas; }; Note que agora a variável titulo foi declarada como uma matriz de caracteres de 80 posições. Mais adiante você entenderá o propósito de tal abordagem. Veja agora como alocamos memória para duas instâncias desta estrutura: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // cria dois ponteiros para duas instâncias (recém-alocadas) // de Livro Livro *a = (struct Livro*)malloc(sizeof(struct Livro)); Livro *b = (struct Livro*)malloc(sizeof(struct Livro)); A partir deste ponto as variáveis a e b são ponteiros para as duas instâncias recém alocadas. Observe que, quando usamos ponteiros para estruturas, seus membros são acessados usando-se a notação -> em vez do ponto. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- a->codigo = 342; a->paginas = 230; Para definir o valor para o membro titulo é preciso lançar mão da função strcpy(). Isso é feito porque estamos lidando com ponteiros, e cada instância de Livro possui sua área de memória a partir da qual a posição inicial da cadeia de caracteres que receberá o título do livro já foi inicializada. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- strcpy(a->titulo, "Programando em Java"); Observe agora o código completo para o exemplo: ---------------------------------------------------------------------- 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> // define a estrutura Livro struct Livro{ char titulo[80]; int codigo; int paginas; }; int main(int argc, char *argv[]){ // cria dois ponteiros para duas instâncias (recém-alocadas) // de Livro Livro *a = (struct Livro*)malloc(sizeof(struct Livro)); Livro *b = (struct Livro*)malloc(sizeof(struct Livro)); // preenche os dados do primeiro Livro // Estamos usando ponteiros agora. Para definir o título // do livro é preciso usar a função strcpy, já que estamos // usando uma cadeia de caracteres strcpy(a->titulo, "Programando em Java"); a->codigo = 342; a->paginas = 230; // preenche os dados do segundo Livro strcpy(b->titulo, "JavaScript - O Guia Prático"); b->codigo = 675; b->paginas = 930; // exibe os dados do primeiro livro printf("Primeiro Livro\nTitulo: %s\nCodigo: %d\nPaginas: %d\n", a->titulo, a->codigo, a->paginas); // exibe os dados do segundo livro printf("\nSegundo Livro\nTitulo: %s\nCodigo: %d\nPaginas: %d\n", b->titulo, b->codigo, b->paginas); 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 |
![]() 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 |