Ir ao conteúdo
  • Cadastre-se

C Como fazer esse algoritmo


Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

@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! 

Link para o comentário
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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

@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

Link para o comentário
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 1
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!