Ir ao conteúdo
  • Cadastre-se
MatheusINF

C Como fazer esse algoritmo

Recommended Posts

Fala galera meu professor passou uns exercicios parecidos porém não sei fazer sem ter um como molde, eu até peguei parte mais o resto eu não sei mesmo alguem me ajuda?

O exercicio é o seguinte: Dado um conjunto de N frases, faça um algoritmo para imprimir cada frase juntamente com o número de vezes que aparece a palavra DE na frase.

#include <stdio.h>

int main()
{
    // VARIAVEIS
    int n,i,de;
    char frase[150];


    // INICIO
    printf("Digite quantas frases tera: ");
    scanf("%i",&n);

    for(i=0; i<n; i++){
        printf("Digite a frase:\n");
        gets(frase);

    }
    
    printf("Na(s) frase(s) %c aparecem a palavra DE %i vezes",frase,de);


    return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia @MatheusINF

 

Uma ideia de como resolver o seu problema é criar um loop que corra por toda sua string verificando se a letra em questão é a "D" e se for verifica se a próxima letra é a "E" se for você soma +1 no contador.

 

Espero ter ajudado :D

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá ... @MatheusINF !

Quando penso no problema, a primeira ideia que vem é implementar um algoritmo de busca genérico, porque futuramente você poderá reutilizar tanto essa implementação quanto o seu conceito.

 

 

 

  • Curtir 4

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@MatheusINF  Vou arriscar passar um algoritmo q fiz agora apenas para ver se ajuda um pouco, ok?

 

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

int main()
{
    char frase[200], ch;
    int i, k, qtde, n;

    printf("Digite a quantidade de frases: ");
    scanf("%d", &n);
    fflush(stdin);


    for (k = 0; k < n; k++)
    {
        qtde = 0;

        printf("Digite uma frase: ");
        fgets(frase, 200, stdin);
        strtok(frase, "\n");
        if (strlen(frase) == 200 - 1)
        {
            while ((ch = getchar()) != '\n' && ch != EOF);
        }

        for (i = 0; i < strlen(frase); i++)
        {
            if (frase[i] == 'd' && frase[i + 1] == 'e')
            {
                qtde++;
            }
        }

        printf("\nFrase #%d: %s, encontrado: %d vez(es)\n\n", k + 1, frase, qtde);
    }
    return 0;
}

Se deu para pelo menos passar uma ideia de como fazer esse exercício ok!

adicionado 41 minutos depois

Fazer uso de um struct seria melhor para imprimir as frases depois de todas lidas com a quantidade de ocorrências correspodentes

adicionado 56 minutos depois

@MatheusINF  Já q ninguém postou nada, vou postar quase o mesmo código mas dessa vez usando um struct e imprimindo o resultado no final. Se der para ajudar ok!

 

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

struct frases
{
    char phrase[200];
    int qtde;
} item[20];

int main()
{
    char frase[200], ch;
    int i, k, n, vezes;

    printf("Digite a quantidade de frases: ");
    scanf("%d", &n);
    fflush(stdin);


    for (k = 0; k < n; k++)
    {
        item[k].qtde = 0;
        vezes = 0;

        printf("\nDigite uma frase: ");
        fgets(item[k].phrase, 200, stdin);
        strtok(item[k].phrase, "\n");
        if (strlen(item[k].phrase) == 200 - 1)
        {
            while ((ch = getchar()) != '\n' && ch != EOF);
        }

        fflush(stdin);

        for (i = 0; i < strlen(item[k].phrase); i++)
        {
            if ((item[k].phrase[i] == 'd') && (item[k].phrase[i + 1] == 'e'))
            {
                vezes++;
            }
        }

        item[k].qtde = vezes;
    }

    printf("\n");

    for (i = 0; i < n; i++)
    {
        printf("Frase #%d: %s, ocorrencias: %d vez(es)\n", i + 1, item[i].phrase, item[i].qtde);
    }
    return 0;
}

Pelos testes q fiz aqui tudo ok. Não sei dizer ao certo se é algo assim q queria fazer! 

  • Obrigado 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d Então mnw eu estava tentando fazer algo perto disso, o problema é que seu eu colocar a palavra "Deus" ele vai ler esse o "De", e o professor disse que quer apenas as palavras "DE" saca?, então não pode ser dentro de uma palavra e sim apenas ela : /

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, MatheusINF disse:

@giu_d Então mnw eu estava tentando fazer algo perto disso, o problema é que seu eu colocar a palavra "Deus" ele vai ler esse o "De", e o professor disse que quer apenas as palavras "DE" saca?, então não pode ser dentro de uma palavra e sim apenas ela : /

Coloca no algorítimo para ler um espaço antes e depois do "DE", ai você garante que ele leia o "DE" isolado. 

  • Obrigado 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá ... !

Por exemplo:

Ou seja, o que buscamos não é somente o DE, mais sim, DE com espaços.

 

                     " DE " << esse é o elemento da busca assim como idealizado.

" Estou de volta pro meu aconchego ... " << esse é o conjunto onde faremos a busca pelo elemento.

1 resultado!

:thumbsup:

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@MatheusINF  Corrigindo meu if ficaria assim:

 

for (i = 0; i < strlen(item[k].phrase); i++)
{
   if ((item[k].phrase[i - 1] == ' ') && (item[k].phrase[i] == 'd') && (item[k].phrase[i + 1] == 'e') && (item[k].phrase[i + 2] == ' '))
   {
       vezes++;
   }
}

Com essa mudança é possível diferenciar entre um "de" que está isolado de uma de de "cidade" por exemplo

adicionado 1 minuto depois

Pode não funcionar se a "De" está no começo da frase, mas aí entra a questão de diferenciar maiúsculos e minúsculos tbém

adicionado 3 minutos depois

Caso alguém tiver alguma sugestão agradeço. Creio q é possível melhorar essa validação

adicionado 5 minutos depois

@AnsiC E para casos como "De acordo com a lei tal..."???

adicionado 6 minutos depois

Aí tbém entra a questão de diferenciar maiúsculas e minúsculas tbém, não sei se é essa a questão

adicionado 8 minutos depois

Para uma frase como "Desde o dia 18 de janeiro de 2018 ..." funciona de acordo como o esperado, no caso, 2 ocorrências 

adicionado 11 minutos depois
4 horas atrás, MatheusINF disse:

Então mnw eu estava tentando fazer algo perto disso, o problema é que seu eu colocar a palavra "Deus" ele vai ler esse o "De", e o professor disse que quer apenas as palavras "DE" saca?, então não pode ser dentro de uma palavra e sim apenas ela : /

 Passei o if corrigido. Para o exemplo como você deu não seria contado pois a letra 'D" é maiúscula e o algoritmo só procura pela letra "d" minúscula

adicionado 13 minutos depois

Mas antes de corrigir se digitasse na frase a palavra "cidade" aí seria considerado como encontrado, agora, corrigido, não acontece mais isso

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, giu_d disse:

E para casos como "De acordo com a lei tal..."???

é caso especial, então testemos fora o loop e deixa dentro do loop o caso geral da maneira correta como já feito.

 

   if ((item[k].phrase[0] == 'd') && (item[k].phrase[1] == 'e') 
       			&& (item[k].phrase[2] == ' ')
   {
     vezes++;
   }

for (i = 0; i < strlen(item[k].phrase); i++)
{
   if ((item[k].phrase[i - 1] == ' ') && (item[k].phrase[i] == 'd') 
       			&& (item[k].phrase[i + 1] == 'e') && (item[k].phrase[i + 2] == ' '))
   {
       vezes++;
   }
}

 

2 horas atrás, giu_d disse:

Aí tbém entra a questão de diferenciar maiúsculas e minúsculas tbém, não sei se é essa a questão

deixa essa parte para auto do tópico ter alguma coisa para fazer kkk, é muito folga dele se tu responder tudo kkkk.

  • Haha 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@AnsiC

6 horas atrás, AnsiC disse:

deixa essa parte para auto do tópico ter alguma coisa para fazer kkk, é muito folga dele se tu responder tudo kkkk.

 

Falei com o professor hoje e ele deu umas dica HASUASHUAHASAUSHASUI mais valeu galera

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
6 horas atrás, AnsiC disse:
8 horas atrás, giu_d disse:

Aí tbém entra a questão de diferenciar maiúsculas e minúsculas tbém, não sei se é essa a questão

deixa essa parte para auto do tópico ter alguma coisa para fazer kkk, é muito folga dele se tu responder tudo kkkk.

Essa foi boa! kkkkkkkkk

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×