Ir ao conteúdo
  • Cadastre-se

C Exercício de programação em C


Posts recomendados

Fazendo como  propoe @isrnick terá invertida a ordem do problema. O desafio na minha analise, é justamente da ordem aos acontecimentos.

 
6 horas atrás, Giuseppe Visentim disse:

"Faça um programa que dados n inteiros e um inteiro d, d > 0, devolve quantas vezes o número d é digitado."

n inteiros e depois d inteiro.

Link para o comentário
Compartilhar em outros sites

7 minutos atrás, AnsiC disse:

Pois é!

 

Você entendeu o oposto do que eu impliquei, eu estou dizendo que os 2 enunciados dizem a mesma coisa:

 

"Faça um programa que dados n inteiros e um inteiro d, d > 0, devolve quantas vezes o número d é digitado."

"Faça um programa que dados um inteiro d e n inteiros, d > 0, devolve quantas vezes o número d é digitado."

 

No enunciado não diz qual a ordem em que os n inteiros e o d são obtidos, diz apenas que devem ser obtidos, o aluno é que tem que perceber que obter o d primeiro é o que deve ser feito.

 

Fazer o contrário seria ilógico, complicando sem necessidade, nenhum curso ou professor de programação que eu já vi deseja ensinar a fazer um programa mais complicado e ineficiente sem necessidade, em programação o intuito sempre é fazer o código mais direto e eficiente.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Consegui:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
setlocale(LC_ALL, "Portuguese");

printf("EXERCÍCIO 1:\nFaça um programa que dados n inteiros e um inteiro d, d > 0, devolve quantas vezes o número d é digitado.\n\t");
    int cont, d, n, vzs_digit, val;
        vzs_digit=0;
        printf("Quantos números devem ser lidos:\n\t\t");
            scanf("%d", &n);
        printf("\tQual valor será contado:\n\t\t");
            scanf("%d", &d);
                for(cont=1; cont<=n; cont++)
                {
                    printf("\tDigite o %d de %d números:\n\t", cont, n);
                        scanf("%d", &val);
                            if(val==d)
                            {
                                vzs_digit=vzs_digit+1;
                            }
                }
            printf("\t\tO número %d foi digitado %d vezes.", d, vzs_digit);
    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

6 horas atrás, isrnick disse:

@AnsiC Se desejar você pode tentar achar uma solução lendo os n inteiros primeiro e depois o d, sem usar vetor, como um desafio. :D

Sim, eu já havia resolvido esse problema na universidade, por isso estou convencido da interpretação ideal.

 

Mas agora não tem importancia para o autor.

 

@Giuseppe Visentim resolveu da maneira mais pragmatica.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

1#

@Giuseppe Visentim

Sempre mantenha o código indentado. É de suma importância, ex.:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main() {
    setlocale(LC_ALL, "Portuguese");
    int cont, d, n, vzs_digit, val;

    printf("EXERCÍCIO 1:\nFaça um programa que dados n inteiros e um inteiro d, d > 0, devolve quantas vezes o número d é digitado.\n\t");   
    vzs_digit=0;
    printf("Quantos números devem ser lidos:\n\t\t");
    scanf("%d", &n);
    printf("\tQual valor será contado:\n\t\t");
    scanf("%d", &d);
    for(cont=1; cont<=n; cont++) {
        printf("\tDigite o %d de %d números:\n\t", cont, n);
        scanf("%d", &val);
        if(val==d) {
            vzs_digit=vzs_digit+1;
        }
    }
    printf("\t\tO número %d foi digitado %d vezes.", d, vzs_digit);
    return 0;
}

Perceba a diferença.

 

 

2#

@Giuseppe Visentim, em relação o problema, me parece que seria por ai mesmo. :thumbsup:

 

 

3#

@AnsiC e @isrnick, em relação a "ordem das operações", acho o seguinte. Vejam:

 

Enunciado:

1 hora atrás, Giuseppe Visentim disse:

"Faça um programa que dados n inteiros e um inteiro d, d > 0, devolve quantas vezes o número d é digitado."

 

Então, de um modo geral as expressões podem estar atreladas um um sequência de eventos.. mas isso não está necessariamente atrelado à conjunção (o "e"), acho que está mais associada a talvez aos verbos... cito o Wikipedia:

 

Citação

A comutatividade da conjunção traz um problema para formalizar proposições da linguagem natural no Cálculo Proposicional Clássico, pois a ordem em que as orações aparecem pode sugerir uma sequência temporal. Por exemplo "Isabela se casou e teve um filho" é bem diferente de "Isabela teve um filho e se casou". Repare que o mesmo problema não acomete a proposição "Isabela é casada e tem filhos", que é equivalente a "Isabela tem filhos e é casada". Esta sentença é, portanto, perfeitamente formalizável no Cálculo Proposicional Clássico por meio de uma conjunção.

 

Fonte: https://pt.wikipedia.org/wiki/Lógica_proposicional#Conjunção

 

Resumidamente falando, para mim o enunciado se parece mais com o segundo caso... ou seja, "a ordem do trator não altera o viaduto".

 

Para complementar:

 

Entendi da seguinte forma:

P="n inteiro"

Q="um inteiro d, d > 0"

 

Logo:

"Faça um programa que dados P ^ Q"

Poderia ficar:

"Faça um programa que dados Q ^ P"

 

Vejam que o verbo está apenas no início e não denota ordem (de sequências) de nada... não vi uma sequência de eventos... logo, a ordem não importa. Inclusive podendo intercalar... ou seja, apenas exige que as duas coisas sejam feitas.

 

 

Fazendo um comparação de contexto...

"Faça uma pesquisa que consulte homens com mais de 21 anos e mulheres com mais de 18 sobre bla bla bla"


Percebem que nessa estrutura também não fica implícito que deveria entrevistar todos os homens e só após entrevistar todas a mulheres. Apenas nos diz que necessariamente deve entrevistar pelo menos um homem e pelo menos uma mulher.

 

O que acham?

 

 

ADENDO: @AnsiC, perca o interesse não... o assunto é interessante. Se puder contra-argumentar, eu agradeceria. :)

adicionado 2 minutos depois

 

 

4#

3 minutos atrás, AnsiC disse:

Sim, eu já havia resolvido esse problema na universidade, por isso estou convedido da interpretação ideal. 

Resolveu sem vetores?

  • Haha 1
Link para o comentário
Compartilhar em outros sites

@AnsiC Versões alternativas sempre ajudam pois dá mais ferramentas para o programador ter opções quando necessário, e além do criador do tópico, os tópicos do fórum também podem ser consultados por outras pessoas com dúvidas similares.

 

Aqui está uma solução com n números obtidos primeiro o d obtido depois sem usar vetor:

#include <stdio.h>

int cont = 0;

int func(int n){
    int d, num;
    if(n > 0){
        printf(" Numero: ");
        scanf("%d", &num);
        d = func(n-1);
        if(num == d)
            cont++;
    }
    else{
        printf("\n d: ");
        scanf("%d", &d);
    }
    return d;
}

int main()
{
    int n, d;
    
    printf(" Quantidade de numeros: ");
    scanf("%d", &n);
    printf("\n");

    d = func(n);
    
    printf("\n O numero d = %d foi digitado %d vezes.\n", d, cont);
    return 0;
}

O código usa uma função recursiva, e uma variável global como contador. E como falei complicou a solução sem haver necessidade. O código direto faz muito mais sentido.

  • Curtir 1
  • Obrigado 1
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!