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:  
Marcel Yamaki

C Apresentar os números múltiplos de 5, entre 50 e 100

Recommended Posts

Postado (editado)

Poderiam me ajudar com um código?

Questão: Escreva um programa em linguagem C que apresenta os números múltiplos de 5, entre 50 e 100.

Meu código:

#include <stdio.h>
int main(){
        for(int i=50 ; i<=100 ; i = i%5==0){
                printf("%d", &i);
                return 0;
        }
    }

Ele deveria apresentar os números: 55 60 65 70 75 80 85 90 95 

Editado por Simon Viegas
Para códigos, use o botão <> (CODE).
  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@Marcel Yamaki     seu for está errado ,    então seria assim  :

 for(int i=50 ; i<100 ; i+=5){
     printf("%d", i);

 

Editado por devair1010
  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Marcel Yamaki  Tem um pequeno erro no seu printf. Usando o '&' comercial nele você vai imprimir o endereço de memória da variável em questão e não o valor dessa variável, q é o que você quer.

Uma maneira d fazer esse exercício seria essa:

 

#include <stdio.h>

int main() {

    for(int i = 55 ; i < 100 ; i++) {

        if (i % 5 == 0)
            printf("%d ", i);
    }
    return 0;
}

 

  • Curtir 4

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@giu_d Percebi que o seu return esta na chave de baixo, isso que estava errado, muito obrigado!

 

@devair1010 Mesmo mudando para o que você falou, não muda nada. Mesmo assim obrigado!

Editado por Marcel Yamaki
Descobri o erro
  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

Olá.

 

Vou tentar resumir os pontos.

 

1#

A primeira coisa a se entender é o enunciado:

14 horas atrás, Marcel Yamaki disse:

Questão: Escreva um programa em linguagem C que apresenta os números múltiplos de 5, entre 50 e 100.

 

Ou seja, primeiro se entende o que se tem que fazer, para só depois tenta fazer...  certo?

 

Então, o que significa a expressão "entre X e Y"? O números são inclusos? ou seja, o 50 e o 100 entram na conta? cada situação leva a uma lógica um pouco diferente!


No seu código inicial, você está incluindo-os.

14 horas atrás, Marcel Yamaki disse:

#include <stdio.h>
int main(){
        for(int i=50 ; i<=100 ; i = i%5==0){
                printf("%d", &i);
                return 0;
        }
    }

Já que usou "i=50 até i=100". Eles estão entrando na conta.
 

Já na resposta, dá a entender que não entram...

14 horas atrás, Marcel Yamaki disse:

Ele deveria apresentar os números: 55 60 65 70 75 80 85 90 95 

Pois 50 e 100 não apareceram (e estes são múltiplos de 5).

 

Então, vamos partir do pressuposto que não entram (eu não sei qual o correto, é necessário você analisar. Vou me basear pela sua resposta). E que você está tentando verificar número por número, e apenas exibindo os que são múltiplos de 5.

 

 

 

2#

Sobre o código em si, baseado que "quer verificar um a um", temos:

 

2.1

Segundo consta, "entre 50 e 100" é o mesmo que "maior que 50, e menor que 100", correto?  (sem o "=")

Percebe que essa UMA FORMA DE FAZER (pois podem existir infinitas formas), ou seja, verificando um a um, poderia deixar o for com algo assim:

for (int i=50+1; i<100; i++) {

Com o próximo número após o "limite inicial" (que ele não está incluso), até o primeiro número antes do "limite final" (já que ele não está incluso também). E o i sendo incrementado de 1 em 1.... (vai verificar 51, 52, 53... 97, 98 e 99).

 

Outra forma, que daria no mesmo, seria assim:

for (int i=50+1; i<=100-1; i++) {

Obs.:

O o código do @giu_d:

11 horas atrás, giu_d disse:

for(int i = 55 ; i < 100 ; i++) {

...já começa do 55. Mas como sabe que 51, 52, 53 e 54 não são múltiplos de 5?  Resumindo: esse código pode até exibir a resposta correta, mas não estará de acordo com a SUPOSTA intenção de verificar um a um, ou seja, o código pode está certo, mas para uma outra lógica, que não essa que estou SUPONDO que foi a sua intenção.

 

 

 

2.2

O outro ponto é a verificação da condição em si. No seu código, parece que você tentou colocar dentro da própria "assinatura do for":

11 horas atrás, giu_d disse:

for(int i = 55 ; i < 100 ; i++) {

 

Então, eu não manjo muito de C/C++, mas entendo que essa estrutura funciona assim:
for (<valor inicial da variável>; <condição de parada>,<comando executado após cada loop>).

Logo, no seu código, seria que ao final de cada loop, o i seria igual ao resultado da operação "i%5==0" (como tem um operador lógico, vai resultar em 1 ou 0 no C/C++... no Pascal, algo do tipo resultaria em TRUE ou FALSE, ou VERDADEIRO ou FALSO, no Visualg... etc).


Vamos supor o seguinte código:

#include <stdio.h>
int main(){
    for(int i=50 ; i<=100 ; i = i%5==0) {
        printf(" %d",i);
    }
}

Se executar o código acima, vai aparece da tela:
50 1 0 1 0 1 0 1 0 1 0 1.... infinitamente (o 1 e 0 se repetindo).

 

Pois:

- inicialmente vai exibir o 50.

- ai ao final do loop, i vai ser igual ao resultado de "50%5==0", que dá 1. Logo, exibe o número 1;

- ao final do loop, i vai ser igual ao resultado de "1%5==0", que dá 0. Logo, exibe o 0;

- ao final do loop, i vai ser igual ao resultado de "0%5==0", que dá 1. Logo, exibe o 1;

- ao final do loop, i vai ser igual ao resultado de "1%5==0", que dá 0. Logo, exibe o 0;

isso, "infinitamente"...


Como a execução é muito rápida, a pessoa que ver a tela vai apenas dizer "apenas aparece um monte de 0 e 1"... mas tecnicamente essa afirmação estará incorreta!!! (se fosse uma prova, a resposta seria que aparecem 3 números) Pois apareceu um 50 ali no início (apesar que possivelmente o usuário não ter tempo de ter visto).
 

Resumindo: a verificação não fica na parte da definição do for (ou pelo menos não desta forma), no caso deveria ficar dentro do for, como já demonstrando em outras respostas.
 

 

 

3#

Só para REFORÇAR A IMPORTÂNCIA DO ENTENDIMENTO DO PROBLEMA (análise do enunciado, e contexto);

 

Veja o que diz:

14 horas atrás, Marcel Yamaki disse:

Questão: Escreva um programa em linguagem C que apresenta os números múltiplos de 5, entre 50 e 100.

 

- Se o objetivo é verificar se cada um dos números entre 50 e 100 é múltiplo de 5, acho que poderia ficar assim:

#include <stdio.h>
int main() {
    for (int i=50+1; i<=100-2; i++) {
        if (i % 5 == 0)
            printf(" %d",i);
    }
}

 

-Se objetivo é apenas exibir o resultado (se for interpretar literalmente o enunciado), uma outra forma seria como @devair1010 sugeriu:

12 horas atrás, devair1010 disse:

@Marcel Yamaki     seu for está errado ,    então seria assim  :


 for(int i=50 ; i<100 ; i+=5){
     printf("%d", i);

 

Ou como @giu_d sugeriu:

11 horas atrás, giu_d disse:

#include <stdio.h>

int main() {

    for(int i = 55 ; i < 100 ; i++) {

        if (i % 5 == 0)
            printf("%d ", i);
    }
    return 0;
}


 

Agora perceba (com voz do Rafael Procópio):

- Ainda nesse apenas exibir o resultado poderia ser, inclusive, assim:

#include <stdio.h>
int main() {
    printf("55 60 65 70 75 80 85 90 95");
}

Em nenhum momento foi solicitado que é para "calcular ou verificar um a um". Logo, pode apenas exibir a resposta e pronto. Problema resolvido com sucesso.

 

Maaaas, além do enunciado, deve EXISTER UM CONTEXTO, ou seja, faz mais sentido que o objetivo do exercício de fato seja verificar um a um (começar do 51, e não do 55)... uma mistura de treinamento do uso do FOR, com o uso de IF, com o uso do operador %.

 

Concordam?
 

Editado por Simon Viegas
  • Curtir 3
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas  De fato é preciso concordar com a explicação dada com relação ao comando for. 

O ideal é fazer que o for percorra todos os números que sejam maiores q 50 e menores que 100 

  • Curtir 3

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

×