Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Giuseppe Visentim

C Exercício de programação em C

Recommended Posts

Preciso de ajuda no seguinte exercício:

 

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

 

Tenho de resolver sem usar vetor, não consigo ver como.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entendi o dilema, pois você não consegue imaginar como verificar o valor d nos n valores porque os n valores foram digitados antes de d.

 

né?

 

Editado por AnsiC

Compartilhar este post


Link para o post
Compartilhar em outros sites

O programa deve primeiro receber o inteiro d do usuário, depois pede para o usuário digitar os n inteiros, e a cada vez que o usuário digita um inteiro o programa checa se é igual a d, se for igual incrementa um contador.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Editado por AnsiC

Compartilhar este post


Link para o post
Compartilhar em outros sites

@AnsiC O enunciado não diz o que vem primeiro, ele só diz que os n inteiros e d são dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O programa deve ler o número de vezes (n) que sera lido valores inteiros, e um número específico (d).

Ler os n números, e informar quantas vezes "d" foi digitado.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Giuseppe Visentim você confirmou o que acabei de dizer a @isrnick

 

O problema está claro para mim desdo começo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria a mesma coisa se estivesse assim:

 

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

 

Mas isso facilitaria muito pra o aluno, a ideia é fazer o aluno usar a cabeça e perceber que d pode ser obtido primeiro.

  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se fosse como @isrnick propos seria muito simples de resolver. 

E seria na ordem inversa do que propõe a interpretação do problema.

adicionado 2 minutos depois

Pois é!

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perdi o interesse no problema.

Sem mais comentarios.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Editado por isrnick

Compartilhar este post


Link para o post
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;
}

 

Editado por Simon Viegas
Inserir tag CODE
  • Curtir 1

Compartilhar este post


Link para o post
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.

Editado por AnsiC

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só tu consegues me fazer rir. @Simon Viegas Obrigado

adicionado 1 minuto depois

Sim resolvido sem vetores

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, Simon Viegas disse:

se falei uma besteira, me desculpe.

Não entendi. Você é uma figura e engraçado. Ou engraçado e figura.

  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 minutos atrás, AnsiC disse:

Sim resolvido sem vetores

 

Tem como postar o código para entendermos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, o autor do topico já resolveu da maneira mais simples. No meu juizo isso já é o bastante.

Compartilhar este post


Link para o post
Compartilhar em outros sites
50 minutos atrás, AnsiC disse:

Não, o autor do topico já resolveu da maneira mais simples. No meu juizo isso já é o bastante.

 

Sim, sim... eu me refiro a um código alternativo... entender como seria feito sem uso de vetores...

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa :thumbsup:

Complicado é só o primeiro nome. 

Era uma problema de recursividade de fato.

 

 

Mas poderiamos usar ponteiro mais recursividade.

 

3 horas atrás, isrnick disse:

complicou a solução sem haver necessidade.

Físicos não são pragmaticos, físicos são físicos.

Editado por AnsiC

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






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

×