Ir ao conteúdo

Posts recomendados

Postado

O exercício é o seguinte: Crie um algoritmo que leia o valor inicial da contagem, o valor final e o incremento, mostrando em seguida todos os valores no intervalo: Ex: Digite o primeiro Valor: 3 Digite o último Valor: 10 Digite o incremento: 2 Contagem: 3 5 7 9 Acabou!

 

Não estou conseguindo incrementar, o programa fica em um loop. Segue meu código:

#include <stdio.h>

int main(void) {
  int n, i=0, j, d=0;

  printf("Digite o inicio: ");
  scanf("%d", &n);

  printf("Digite o final: ");
  scanf("%d", &j);

  printf("Digite o incremento: ");
  scanf("%d", &d);
  while(n < j){
    printf("%d", i);
    i+=d;
  }
  return 0;
}

 

 

 

prog.jpeg

  • Amei 1
Postado

Olá Robs156, como vai?

 

Segue algumas prints funcionando e a source. 

 

spacer.png

 

spacer.png

 

#include <stdio.h>

int main(void){

int a, b, c;

printf("Digite o inicio: ");
scanf("%d", &a);

printf("Digite o final: ");
scanf("%d", &b);

printf("Digite o incremento: ");
scanf("%d", &c);

while(a <= b){

        printf("Os numeros sao: %d\n", a);

        a+=c;
}

return 0;

}

 

Até a próxima.

 

By ZTM

  • Obrigado 1
Postado

@Robs156 Use nomes mais significativos para suas variáveis. Leia o manual: Teste o retorno de scanf(). Mostre os valores das variáveis na tela até estar seguro de que as coisas são o que acha que são.

  • Obrigado 1
Postado
while(n < j){
    printf("%d", i);
    i+=d;
  }

 

Dentro do loop não muda o valor de n ou j. Como acha que seu programa iria terminar?

 

E está incrementando o incremento ??????  

 

        printf("%d", i);

 

Não fique surpreso pelos valores saírem grudados na tela já que não deixou espaço entre eles.

 

NUNCA escreva um programa interativo. Qual o propósito de ler TODA VEZ os valores de início, fim e incremento ANTES de saber se a lógica está certa?

 

É muito mais simples escrever

 

    int ini = 1;
    int final = 6;
    int inc = 1;

 

e testar usando valores conhecidos e nomes razoáveis, como te disse antes.

 

Compare com isso

 

#include<stdio.h>

int main(void)
{
    int ini = 1;
    int final = 6;
    int inc = 1;

    printf(
        "inicio = %d, final = %d, incremento = %d\n", ini,
        final, inc);

    int valor = ini;

    printf("\nwhile: ");
    while (valor < final)
    {
        printf("%d ", valor);
        valor += inc;
    }

    printf("\nfor: ");
    for (int valor = ini; valor < final; valor += inc)
        printf("%d ", valor);

    valor = ini;

    printf("\ndo: ");
    do {
        printf("%d ", valor);
        valor = valor + inc;
    
    } while (valor < final);

    printf("\ngoto: ");

    valor = ini;
loop:
        printf("%d ", valor);
        valor = valor + inc;
        if (valor < final) goto loop;

    return 0;
}

 

Que mostra

 

inicio = 1, final = 6, incremento = 1

while: 1 2 3 4 5
for: 1 2 3 4 5
do: 1 2 3 4 5
goto: 1 2 3 4 5

 

Faça seu programa trabalhar por você e mostre os valores e as outras maneiras comuns de fazer isso --- loop --- em C (Uma outra maneira seria usar recursão). 

 

  • Obrigado 1
  • mês depois...
Postado
Em 14/12/2022 às 03:00, Robs156 disse:

O exercício é o seguinte: Crie um algoritmo que leia o valor inicial da contagem, o valor final e o incremento, mostrando em seguida todos os valores no intervalo: Ex: Digite o primeiro Valor: 3 Digite o último Valor: 10 Digite o incremento: 2 Contagem: 3 5 7 9 Acabou!

 

Não estou conseguindo incrementar, o programa fica em um loop. Segue meu código:

 

prog.jpeg

O programa fica em loop porque você provavelmente deu um valor de n sendo menor que o valor de j, sendo que no seu loop while nem o valor n, nem o de j são modificados. Por exemplo, se eu digo que n = 5 e j = 10 e mando o programa rodar sem alterar nenhum deles, pela lógica da matemática 5 sempre vai ser menor que 10 e o programa não vai sair do loop, seja lá qual for. Só irá sair quando acabar o espaço na memória.

Os incrementadores i e j geralmente são usados (e declarados) num loop 'for', evite usar fora desse tipo de loop ou para outras funções como while. Você deu o nome a uma variável de 'd' sendo que na linguagem C existe esse comando "%d" que é comumente usado (ele indica pro scanf um valor inteiro decimal), isso pode causar confusão. É melhor usar outro nome pra essa variável.

Tenta entender linha por linha do programa e o resultado lógico que elas implicam.

Vou dar um exemplo de um loop while pra ficar mais claro. Esse é um programa que conta de 2 em 2 e vai até 20, começando em zero:

 

#include <stdio.h>

int main()
{
    int contador = 0;
    int incrementador = 2;
    
    printf("Iniciando contagem de 2 em 2...");
    
    while (contador <= 20) // Enquanto o contador for menor ou igual a 20, o programa vai executar o código no escopo do while{}
    {
        printf("\n%d", contador);
        contador = contador + incrementador; // também pode ser escrito: contador += incrementador; 
    }

    printf("\nA contagem foi encerrada"); // Esse '\n' serve para pular uma linha
    
    return 0;
}

 

  • Amei 1

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!