Ir ao conteúdo

Posts recomendados

Postado

Olá, tudo bem?

 

Preciso implementar um código utilizando estruturas com strings e laços de repetição, onde esse programa verificará se uma palavra ou frases são palíndromos. 

Nesse programa será solicitado ao usuário que informe o string (palavra ou frase) como entrada. O programa trata o string para eliminar espaços (simples ou múltiplos), avaliando na sequencia se a palavra é ou não um palíndromo. Também nesse programa deverá haver opções para o usuário continuar com as entradas de mais palavras ou encerrar o programa.

Também deve conter uma função conforme exemplo abaixo:

#include <stdio.h>
#include <string.h>

int funcaoauxiliar(void);

int main() {

   return(0);
}

int funcaoauxiliar(void) {
 
   return(valor);
}

Palíndromos: tem como propriedade permitir a leitura tanto da direita para a esquerda como da esquerda para a direita:

Exemplos:

 

1) O galo ama o lago.

2) Olá, galo!

3) Olé! Maracujá, caju, caramelo.

4) O lobo ama o bolo.

5) O romano acata amores e damas amadas e Roma ataca o namoro.

6) O teu dueto.

7) Ótimo, só eu, que os omito

😎 Oto come mocotó.

9) O trote torto

 

Se alguém puder ajudar eu agradeço!

Att.

Postado
Em 27/05/2020 às 11:40, userpc_2020 disse:

conforme modelo acima

 

Meigo esse modelo. Serviria também para construir uma espaçonave? Bem genérico! 🛸

Postado

@arfneto Muito obrigado pela sua ajuda! Contribuiui muito, ficou assim o código final!

 

Boa ideia a espaçonave nunca pensei que pudesse chegar tão longe! Altas ideias aqui!

#include <stdio.h>

void main() {
char string[41],contrario[41];
int total=0,i,j,erro=0;

printf("Digite a palavra: ");
scanf("%s",&string);

total = strlen(string);
j = total;
total++;
j--;

for(i=0; i < total; i++) {
   contrario[i] = string[j];
   j--;
}

total--;

for(i=0; i < total; i++) {
   if(string[i] != contrario[i]) { erro = 1; }
}

if(erro == 1) printf("\nNao e palindromo.");
else printf("\nE palindromo.");
}

 

  • Curtir 2
  • Obrigado 1
Postado

Muito bem. Em geral essa é a maneira mais comum de fazer isso mesmo. Trata-se de uma pilha, uma estrutura de dados que inverte as coisas, como numa pilha de livros onde você coloca os caras e retira depois a partir de cima, e os livros vem na ordem inversa.

 

Você usou uma outra string como a tal pilha e inverteu os valores, e aí basta comparar as duas.

 

Bom trabalho.

 

Não com aquele modelo, mas com essa implementação.

 

Note que em C apenas 0 --- zero --- é falso e assim muitos preferem escrever if(erro) ao invés de if ( erro == 1). 

  • Obrigado 1
Postado

De acordo com o exemplo do primeiro post, poderia ser feito assim:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

bool ePalindromo(char *entrada);

int main() {
    printf("%s \n", (ePalindromo("asa") ? "Sim" : "Nao"));
    return EXIT_SUCCESS;
}

bool ePalindromo(char *entrada) {
    // Descobrir a quantidade de letras
    int tamanho;
    for (tamanho = 0; entrada[tamanho] != '\0'; ++tamanho);

    // Criar uma copia invertida
    char inverso[tamanho + 1];

    for (int i = 0, j = tamanho - 1; i < tamanho; ++i, --j) {
        inverso[j] = entrada[i];
    }

    inverso[tamanho] = '\0';

    // Verifica se sao iguais
    return strcmp(entrada, inverso) == 0;
}

 

  • Curtir 1
Postado

@userpc_2020 @AdrianoSiqueira Nenhum dos 2 programas atendem aos requisitos do enunciado, pois de acordo com o enunciado o programa deve ser capaz de ler frases inteiras, e analisar se são palíndromos eliminando os espaçamentos e pontuação antes de inverter e checar se é igual ao sentido normal.

 

Outro problema é que os programas não consideram que pode ter letras maiúsculas e letras minúsculas na frase, e por isso ele pode acusar que não é palíndromo quando realmente é palíndromo, pois em C o caractere de uma letra maiúscula não é considerado igual ao caractere dessa mesma letra minúscula.

 

Eu e o @Mauro Britivaldo postamos soluções mais completas para esse problema nesse tópico:

 

Esse é um exercício comum, segue outro tópico com o mesmo problema:

 

  • Curtir 2
  • Membro VIP
Postado

@userpc_2020, alguns pontos notáveis:

 

  1. Em relação ao código do @AdrianoSiqueira, mudar o retorno de bool para int;
  2. O enunciado está "incompleto" (ou impreciso). Veja:
    Em 22/05/2020 às 10:42, userpc_2020 disse:

    O programa trata o string para eliminar espaços (simples ou múltiplos), avaliando na sequencia se a palavra é ou não um palíndromo.

    Ele só fala em "eliminar espaços", mas só isso não é suficiente. Ex.: "Olá, galo!". Sem os espaços: "Olá,galo!" x "!olag,alO", ou seja: não seria polídromo;
  3. Se for permitido utilizar o strcmp(), pelo que eu vi ele já "ignora" os espaços, mas falta "normalizar" o restante... como os acentos, a vírgula, pontuação, não diferenciação entre maiúsculo e minúsculos etc;
  4. O programa precisa ter a opção de repetir.

 

Postado
35 minutos atrás, Simon Viegas disse:

Se for permitido utilizar o strcmp(), pelo que eu vi ele já "ignora" os espaços, mas falta "normalizar" o restante... como os acentos, a vírgula, pontuação, não diferenciação entre maiúsculo e minúsculos etc;

 

Não, strcmp() não ignora espaços. Precisa remover os espaços da string também.

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!