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: 1743 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 ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como ordenar os elementos de um vetor (array) usando a função qsort() da linguagem C

Quantidade de visualizações: 835 vezes
A função qsort() da linguagem C permite a ordenação dos elementos de um vetor (array ou matriz unidimensional) mediante o fornecimento de uma função auxiliar definida pelo usuário. Veja seu protótipo:

void qsort(void *base, size_t num, size_t size, 
  int(*comparator)(const void*, const void*)); 


Veja que só precisamos fornecer um ponteiro para o vetor a ser ordenado, a quantidade de elementos contidos no vetor, o tamanho em bytes de cada elemento e a função de comparação. No exemplo abaixo mostramos como ordenar um vetor contendo 9 valores inteiros:

----------------------------------------------------------------------
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>
 
// função auxiliar que permite comparar dois valores
// durante a ordenação
int comparar(const void *a, const void *b){
  return(*(int*)a - *(int*)b);
}
 
int main(int argc, char *argv[])
{
  int valores[] = {4, 6, 2, 8, 1, 9, 3, 0, 11};
  int i, tamanho = 9;
 
  // imprime o vetor sem a ordenação
  for(i = 0; i < 9; i++){
    printf("%d ", valores[i]);
  }
 
  // vamos ordenar o vetor usando
  qsort(valores, tamanho, sizeof(int), comparar);
 
  // imprime o vetor ordenado
  puts("\n");
  for(i = 0; i < 9; i++){
    printf("%d ", valores[i]);
  }
 
  puts("\n");
  system("pause");
  return 0;
}

Ao executarmos este código C nós teremos o seguinte resultado:

4 6 2 8 1 9 3 0 11

0 1 2 3 4 6 8 9 11

Pressione qualquer tecla para continuar...


C ::: Dicas & Truques ::: Arquivos e Diretórios

Como ler o conteúdo de um arquivo um caractere de cada vez usando a função fgetc() da linguagem C

Quantidade de visualizações: 431 vezes
A função fgetc() da linguagme C pode ser usada quando queremos ler o conteúdo de um arquivo um caractere de cada vez. Esta função retorna o caractere atualmente representado pelo indicador de posição interna no arquivo. Depois de lido o caractere, o indicador de posição avança para apontar para o próximo caractere.

Veja a assinatura desta função:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

int fgetc(FILE *file); 

O trecho de código abaixo mostra como usar um laço while para ler todos os caracteres do arquivo especificado e exibir o conteúdo na tela:

----------------------------------------------------------------------
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[])
{
  FILE *arquivo = fopen("c:\\testes.txt", "r");
  int caractere;

  // testa se o arquivo foi aberto com sucesso
  if(arquivo != NULL){

    // vamos usar um laço para ler o conteúdo do arquivo
    // e exibí-lo
    while((caractere = fgetc(arquivo)) != EOF)
      printf("%c", caractere);

    fclose(arquivo); // libera o ponteiro para o arquivo
  }
  else
    printf("Nao foi possivel abrir o arquivo.");

  printf("\n\n");
  system("PAUSE");
  return 0;
}



C ::: Dicas & Truques ::: Matemática e Estatística

Como arredondar um valor de ponto-flutuante para cima usando a função ceil() da linguagem C

Quantidade de visualizações: 14573 vezes
A função ceil() da linguagem C é usada quando precisamos arredondar um valor de ponto-flutuante (com casas decimais) para cima. Esta função retorna o menor valor integral maior que o valor fornecido a ela. Note que, mesmo o retorno sendo um inteiro, ele virá encapsulado em um double.

Para entender o funcionamento desta função, vamos considerar o valor 4.5. Ao aplicarmos a função ceil() a este valor, o retorno será 5.0. Isso pode ser comprovado no trecho de código abaixo:

----------------------------------------------------------------------
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[])
{
  printf("O valor 4.5 arredondado para cima e %f", 
    ceil(4.5));
  
  printf("\n\n");
  system("pause");
  return 0;
}

Ao executarmos este código teremos o seguinte resultado:

O valor 4.5 arredondado para cima é 5.000000.


Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica

Fórmula de Manning

Galerias subterrâneas de águas pluviais escoam todo o volume de chuvas que os bueiros conseguem drenar. São importantes para a drenagem de grandes centro. Isso porque, servem para evitar alagamentos e outros prejuízos sociais, ambientais e econômicos.

Para uma galeria de águas pluviais construída em concreto, com n igual 0,013, diâmetro de 85cm, declividade de fundo (S0) de 30cm/km, transportando 550l/s em regime permanente e uniforme, determine:

Qual altura da lâmina d'água pluvial que a galeria apresentará nessas condições?

A) 80cm.

B) 53cm.

C) 60cm.

D) 45cm.

E) 69cm.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em

Características do concreto armado

A fissuração é um efeito importante nas estruturas de concreto e não deve ser desprezada. O conhecimento íntimo desse tipo de efeito é de vital importância para garantir a durabilidade e o desempenho das estruturas por longos anos.

A seguir, correlacione os tipos de fissuração e as definições:

1 - Fissuras plásticas.
2 - Fissuras térmicas.
3 - Fissuras de retração por secagem.

( ) Desenvolvem-se por conta de tensões de tração devido à restrição interna causada por retração diferencial entre a superfície e o interior do concreto.

( ) Desenvolvem-se nas primeiras idades do concreto, após o endurecimento.

( ) Desenvolvem-se antes de o concreto estar endurecido, entre 1 e 8 horas após o lançamento.

Agora, assinale a alternativa que traz a sequência correta:

A) 1 - 2 - 3.

B) 2 - 1 - 3.

C) 3 - 1 - 2.

D) 2 - 3 - 1.

E) 3 - 2 - 1.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Ética e Legislação Profissional

Responsabilidade civil dos prepostos e preponentes

De acordo com as definições de preposto gerente, assinale a alternativa correta.

A) O gerente é autorizado a praticar todos os atos necessários ao exercício dos poderes que lhe foram outorgados, mesmo que a lei exija poderes especiais para tal.

B) O gerente responde sozinho pelos atos praticados em seu nome e em nome do preponente.

C) O preponente pode estar em juízo em nome do gerente, pelas obrigações resultantes do exercício da sua função.

D) Considera-se gerente o preposto permanente no exercício da empresa, em sua sede, filial ou agência.

E) Os gerentes são responsáveis pelos atos dos preponentes, praticados nos seus estabelecimentos e relativos à atividade da empresa, ainda que não autorizados por escrito.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Ética e Legislação Profissional

A responsabilidade moral

Na relação moral e ética, pode-se perceber que, enquanto as inquietações com a esfera conceitual dos valores regentes do comportamento humano estão localizadas no âmbito da ética, as questões práticas desse campo pertencem à esfera da moral, que governa a alma de cada indivíduo. Portanto, diferenciar moral e ética significa dizer que:

A) moral é a aplicação da ética.

B) moral é a prática da ética em nossa sociedade.

C) não podemos diferenciar, pois são idênticas.

D) moral é o conjunto de valores, e ética é a reflexão dos mesmos.

E) moral e ética são antagônicas.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em

Dimensionamento de lajes maciças à flexão

O comportamento estrutural das lajes maciças depende da altura (h) da seção transversal. Quanto maior a altura, maior o momento de inércia da seção e, por consequência, maior a sua capacidade em resistir a deformações.

Considere a seção transversal de uma laje maciça, conforme apresentado na figura a seguir.



Sendo o aço empregado CA-50 e o cobrimento nominal igual a 3,0cm, calcule o valor do momento fletor máximo atuante na laje, considerando uma área de armadura de 0,4729cm2.

A) Mmáx = 1,66kN.m.

B) Mmáx = 1,47kN.m.

C) Mmáx = 1,37kN.m.

D) Mmáx = 1,25kN.m.

E) Mmáx = 1,19kN.m.
Verificar Resposta Estudar Cards Todas as Questões

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: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 48 usuários muito felizes estudando em nosso site.