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 C

Quantidade 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.
Resposta/Solução:

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


Link para compartilhar na Internet ou com seus amigos:

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 estrelas

Quantidade 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...
Resposta/Solução:

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 C

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

// 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ística

Quantidade 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

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á 66 usuários muito felizes estudando em nosso site.