Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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;
}

 

  • Membro VIP
Postado

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 2
  • Obrigado 1
Postado

@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 

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