Você está aqui: C ::: Desafios e Lista de Exercícios Resolvidos ::: Strings e Caracteres |
Como testar se duas palavras são anagramas uma da outra - Solução usando ordenação de strings - Desafio de Programação Resolvido em CQuantidade de visualizações: 1814 vezes |
Pergunta/Tarefa: Dadas duas palavras p1 e p2, escreva um código C que informa se uma palavra é anagrama da outra. Um anagrama é uma espécie de jogo de palavras criado com a reorganização das letras de uma palavra ou expressão para produzir outras palavras ou expressões, utilizando todas as letras originais exatamente uma vez. Para esta solução você deverá, obrigatoriamente, usar a ordenação das duas strings em ordem alfabética. Seu programa deverá exibir a seguinte saída: Informe a primeira palavra: perda Informe a segunda palavra: pedra As duas palavras são anagramas uma da outra. Veja a resolução com código comentado 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 <string.h> #include <locale.h> // Esta função é usada para converter todos os caracteres // para letras minúsculas void letras_minusculas(char *string){ while(*string){ *string = tolower(*string); string++; } } // Esta função é usada para ordenar a string em ordem alfabética void ordenar(char texto[]){ int temp = 0, i, j; for(i = 0; i <strlen(texto) - 1; i++){ for(j = i + 1; j < strlen(texto); j++){ if (texto[i] > texto[j]) { temp = texto[i]; texto[i] = texto[j]; texto[j] = temp; } } } } int main(int argc, char *argv[]){ // variáveis usadas para resolver o problema char palavra1[80], palavra2[80]; int i; int anagramas = 1; // true setlocale(LC_ALL,""); // para acentos do português // vamos pedir para o usuário informar as duas palavras printf("Informe a primeira palavra: "); gets(palavra1); printf("Informe a segunda palavra: "); gets(palavra2); // o primeiro passo é testar os tamanhos das duas strings if (strlen(palavra1) != strlen(palavra2)){ anagramas = 0; // falso } else{ // vamos converter as duas strings para letras minúsculas letras_minusculas(palavra1); letras_minusculas(palavra2); // agora ordenamos as duas strings em ordem alfabética ordenar(palavra1); ordenar(palavra2); // percorremos todos os os caracteres da primeira string for(i = 0; i < strlen(palavra1); i++) { // os dois caracteres nas duas strings são diferentes? if(palavra1[i] != palavra2[i]) { anagramas = 0; // falso } } } if(anagramas){ printf("As duas palavras são anagramas uma da outra."); } else{ printf("As duas palavras não são anagramas uma da outra."); } printf("\n\n"); system("PAUSE"); return 0; } |
![]() |
C ::: Desafios e Lista de Exercícios Resolvidos ::: Laços |
Exercício Resolvido de C - Escreva um programa C que usa o laço for para desenhar um padrão de diamante de estrelasQuantidade de visualizações: 1841 vezes |
Pergunta/Tarefa: Neste exercício para a prática da linguagem C você deverá usar o laço for para desenhar o famoso padrão de diamante de estrelas. Você pode também usar o laço while, se assim você o desejar. O programa deverá pedir que o usuário informe a quantidade de linhas que marcará a metade do diamante. Seu programa deve apresentar a seguinte saída: Informe a quantidade de linhas: 5 * *** ***** ******* ********* ******* ***** *** * Pressione qualquer tecla para continuar... 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> int main(int argc, char *argv[]){ int i, j; // para controlar o laço externo e interno int linhas; // quantidade de linhas int estrelas, espacos; // quantidade de estrelas e espaços // vamos pedir a quantidade de linhas printf("Informe a quantidade de linhas: "); // vamos ler a entrada do usuário scanf("%d", &linhas); estrelas = 1; // começamos com uma estrela (no topo do diamante) espacos = linhas - 1; // se linhas for igual a 5 nós começamos // com 4 espaços // repete duas vezes a quantidade de linhas informadas for(i = 1; i < linhas * 2; i++){ // vamos imprimir os espaços for(j = 1; j <= espacos; j++){ printf(" "); } // agora vamos imprimir estrelas for(j = 1; j < estrelas * 2; j++){ printf("*"); } // passamos para a próxima linha printf("\n"); if(i < linhas){ // é a parte superior do diamante espacos--; // diminui os espaços estrelas++; // e aumenta as estrelas } else{ // é a parte inferior do diamente espacos++; // aumenta os espaços estrelas--; // e diminui as estrelas } } printf("\n\n"); system("pause"); return 0; } |
C ::: Desafios e Lista de Exercícios Resolvidos ::: C Básico |
Exercício Resolvido de C - Como ler um número inteiro e imprimir seu sucessor e seu antecessor em CQuantidade de visualizações: 1374 vezes |
Pergunta/Tarefa: Escreva um programa C para ler um número inteiro e imprimir seu sucessor e seu antecessor. O usuário poderá informar um valor positivo ou negativo. Sua saída deverá ser parecida com: Informe um número inteiro: 16 O número informado foi: 16 O antecessor é 15 O sucessor é: 17 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> // função principal do programa int main(int argc, char *argv[]){ // variáveis usadas na resolução do problema int numero, sucessor, antecessor; setlocale(LC_ALL,""); // para acentos do português // vamos pedir para o usuário informar um número inteiro printf("Informe um número inteiro: "); scanf("%d", &numero); // vamos calcular o sucessor do número informado sucessor = numero + 1; // vamos calcular o antecessor do número informado antecessor = numero - 1; // e agora mostramos os resultados printf("O número informado foi: %d\n", numero); printf("O antecessor é %d\n", antecessor); printf("O sucessor é: %d", sucessor); printf("\n\n"); system("PAUSE"); return 0; } |
C ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular desvio padrão em C - C para Matemática e EstatísticaQuantidade de visualizações: 6310 vezes |
Em Matemática e Estatística, o Desvio padrão (em inglês: Standard Deviation) é uma medida de dispersão, ou seja, é uma medida que indica o quanto um conjunto de dados é uniforme. Quando o desvio padrão é baixo, isso quer dizer que os dados do conjunto estão mais próximos da média. Como calcular o desvio padrão de um conjunto de dados? Vamos começar analisando a fórmula mais difundida na matemática e na estatística: \[\sigma = \sqrt{ \frac{\sum_{i=1}^N (x_i -\mu)^2}{N}}\] Onde: a) __$\sigma__$ é o desvio; b) __$x_i__$ é um valor qualquer no conjunto de dados na posição i; c) __$\mu__$ é a média aritmética dos valores do conjunto de dados; d) N é a quantidade de valores no conjunto. O somatório dentro da raiz quadrada nos diz que devemos somar todos os elementos do conjunto, desde a posição 1 até a posição n, subtrair cada valor pela média do conjunto e elevar ao quadrado. Obtida a soma, nós a dividimos pelo tamanho do conjunto. Veja o código C completo que obtém o desvio padrão a partir de um conjunto de dados contendo quatro valores: ---------------------------------------------------------------------- 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> // função principal do programa int main(int argc, char *argv[]){ // conjunto dos dados float conjunto[] = {10, 30, 90, 30}; float soma = 0.0; // soma dos elementos float desvio_padrao = 0.0; // desvio padrão int tam = 4; // tamanho dos dados int i; float media; // vamos somar todos os elementos for(i = 0; i < tam; i++){ soma = soma + conjunto[i]; } // agora obtemos a média do conjunto de dados media = soma / tam; // e finalmente obtemos o desvio padrão for(i = 0; i < tam; i++){ desvio_padrao = desvio_padrao + pow(conjunto[i] - media, 2); } // mostramos o resultado printf("Desvio Padrão Populacional: %f\n", sqrt(desvio_padrao / tam)); printf("Desvio Padrão Amostral: %f", sqrt(desvio_padrao / (tam - 1))); printf("\n\n"); system("PAUSE"); return 0; } Ao executar este código C nós teremos o seguinte resultado: Desvio Padrão Populacional: 30.0 Desvio Padrão Amostral: 34.64101615137755 Veja que, para calcular o Desvio Padrão Populacional, nós dividimos o somatório pela quantidade de elementos no conjunto, enquanto, para calcular o Desvio Padrão Amostral, nós dividimos o somatório pela quantidade de elementos - 1 (cuidado com a divisão por zero no caso de um conjunto com apenas um elemento). |
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 |