Ir ao conteúdo
  • Cadastre-se
Marcel Yamaki

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

Recommended Posts

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 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@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

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?
 

  • Curtir 3
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@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

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

×