Ir para conteúdo
Fórum Script Brasil
  • 0

Programa que Analisa palavras


braraujo

Pergunta

Olá, não consigo concluir o código para que funcione corretamente. Obrigado por qualquer ajuda?

O Programa em, deve receber do usuário duas palavras de até 30 caracteres reais, analisar e informar qual é a maior palavra, a menor ou se as duas são iguais)

#include <stdio.h>
int main()
{
  char pa1[30],pa2[30];
  printf("Entre com a primeira palavra:\n");
  gets(pa1);
  printf("Entre com a segunda palavra:\n");
  gets(pa2);
  if(strcmp(pa1,pa2))
       printf("As duas palavras são diferentes.");
  else
       printf("As duas palavras são iguais.");
  if(pa1>=pa2)
     printf("A primeira palavra é maior.\n");
  else
     printf("A segunda palavra é maior.\n");             
     system("PAUSE");
  return 0;
}

Editado por braraujo
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Não sei se entendi direito mas 30 caracteres reais eu acredito que seja 30 caracteres mais o nulo no final. Assim a declaração deveria ser:

char pa[31], pas[31];
Já para receber o texto do usuário, não use gets! Essa função não checa limites de vetor e podem causar problemas graves. Ao invés utilize a fgets:
fgets(pa, sizeof(pa), stdin);
Quanto a uma string maior que a outra: o que isso significa exatamente? Número de caracteres ou maior no sentido de ordem alfabética? Seguem códigos para as duas situações: 1) Maior em tamanho: use a função strlen que retorna o tamanho da string
if(strlen(pa1)>=strlen(pa2))
     printf("A primeira palavra é maior.\n");
  else
     printf("A segunda palavra é maior.\n");            
     system("PAUSE");
2) Maior em ordem alfabética: use a função strcmp pois ela retorna zero se forem iguais ou então se a primeira é maior que a segunda
if(strcmp(pa1,pa2)>=0)
     printf("A primeira palavra é maior.\n");
  else
     printf("A segunda palavra é maior.\n");            
     system("PAUSE");

Link para o comentário
Compartilhar em outros sites

  • 0

Marcelo, muito obrigado pela aula!!

Kara estou no primeiro ano no curso de Tecnologia e Análise em Desenvolvimento de Sistemas, mas confesso a você, q apesar de gostar muito de programação tá muito difícil. Mas, num vou desistir não!!

Bom, quanto ao código, depois da sua aula ficou assim:

quanto ao tamanho da palavra, é em ordem alfabética mesmo, mas gostei das duas opções!!

Tá rodando, mas no caso das palavras serem iguais, ele retorna que a primeira é maior, eu não consegui entender isso ainda.

Vou levar esta dúvida para meu professor.

Obrigado mais uma vez!!!

#include <stdio.h>
int main()
{
  char pa1[31],pa2[31];
  printf("Entre com a primeira palavra:\n");
    fgets(pa1, sizeof(pa1), stdin);
     printf("Entre com a segunda palavra:\n");
       fgets(pa2, sizeof(pa2), stdin); 
           if(strcmp(pa1,pa2))
           printf("As duas palavras são diferentes.\n");
           else
           printf("As duas palavras são iguais.\n");

           if(strcmp(pa1,pa2)>=0)
           printf("A primeira palavra é maior.\n");
           else
           printf("A segunda palavra é maior.\n");            
system("PAUSE");
}

Link para o comentário
Compartilhar em outros sites

  • 0

De nada, não foi aula nenhuma não! :)

Pode parecer um pouco difícil no começo pois realmente C/C++ é uma linguagem que exige muita lógica. Porém como eu sempre digo: a linguagem C/C++ é muito simples pois não tem muitas opções nem comandos. E justamente por ser tão simples é que dá mais trabalho ao programador. Assim que pega o jeito fica mais fácil.

Quanto ao seu problema, o motivo é o seguinte:

if(strcmp(pa1,pa2)>=0)
Na comparação acima o if será verdadeiro sempre que o retorno de strcmp for maior ou igual a zero. Porém, se o retorno for zero, as strings são iguais! O correto neste caso seria:
if(strcmp(pa1,pa2)) {
    printf("As duas palavras são diferentes.\n");

    if(strcmp(pa1,pa2)>0)
      printf("A primeira palavra é maior.\n");
    else
      printf("A segunda palavra é maior.\n");            
  } else {
    printf("As duas palavras são iguais.\n");
  }
Assim a checagem que indica se uma palavra é maior que a outra ocorrerá apenas se as palavras forem diferente pois, caso forem iguais, esta checagem já não fará mais sentido, correto? :) Obs.: a função fgets inclui o enter digitado pelo usuário na string. Porém, caso o limite seja alcançado, não existirá o enter. Assim o ideal é utilizar o gets da seguinte forma:
fgets(pa1, sizeof(pa1), stdin);
last_char = strlen(pa1)-1;
if(pa1[last_char] == '\n')
  pa1[last_char] = 0; // Adiciona o nulo sobre o \n para removê-lo da string.
Este código acima poderia até mesmo ser utilizado para criar uma função como:
char *read_stdin(unsigned int nchar)
{
  unsigned int last_char;
  char *ptr = (char *)(malloc(nchar));
  if(ptr != NULL) {
    fgets(ptr, nchar, stdin);
    last_char = strlen(ptr) - 1;
    if(ptr[last_char] == '\n')
      ptr[last_char] = 0;
  }

  return ptr;
}
Esta função recebe apenas o número de caracteres que a sua string deve conter. Ela automaticamente aloca a memória, lê o dado do usuário, remove o \n e retorna o endereço em memória utilizado para salvar a string. Seu programa programa precisaria apenas do seguinte código:
char *nome, *end;

printf("Digite seu nome: ");
nome = read_stdin(30);

printf("Digite seu endereço: ");
end = read_stdin(100);

if(nome == NULL || end == NULL) {
  printf("Memória insuficiente!\n");
} else {
  printf("Nome: %s\nEnd.: %s\n", nome, end);
}

free(nome);
free(end);

Como a memória foi alocada dinamicamente é necessário chamar a função free para liberá-la ou seu programa irá acabar com a memória do PC... :)

Editado por Marcelo Utikawa da Fonseca
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...