Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida de erro em um código aparentemente simples


TRS

Pergunta

Olá, eu sou iniciante em programação em C e surgiu uma dúvida sobre um erro no programa:

#include <stdio.h>
#include <stdlib.h>

/* Crie um programa que le um número natural n do teclado e imprime todos os divisores
desse numero fazendo tambem para com todos os inteiros positivos menores que esse número.
Ao final, imprima também a soma dos divisores encontrados para cada numero*/
// Não funciona
int main(void)
{
    int i, total, n=1, cont=0, j;
    printf("\n\nEscreva um numero inteiro positivo: ");
    scanf("%d", &n);
    
    for(j=n; j!=0; j--)
    {
        total=0;
        cont=0;
        for(i=1; i<=n; i++)
        {
            if(n%i==0)
            {
                cont++;
                printf("D%d=%d  ",cont ,i);
                total+=i;
            }
        }
        if(total>0) printf("\nA soma dos divisores de %d eh: %d\n\n",n ,total);
    }
    return 0;
}

Ele não muda o número decrementando em uma unidade e então em vez de mostrar todos os inteiros inferiores ao digitado ele mostra o mesmo.

Se alguém puder ajudar eu agradeço!!

Editado por TRS
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá, eu sou iniciante em programação em C e surgiu uma dúvida sobre um erro no programa:

#include <stdio.h>
#include <stdlib.h>

/* Crie um programa que le um número natural n do teclado e imprime todos os divisores
desse numero fazendo tambem para com todos os inteiros positivos menores que esse número.
Ao final, imprima também a soma dos divisores encontrados para cada numero*/
// Não funciona
int main(void)
{
    int i, total, n=1, cont=0, j;
    printf("\n\nEscreva um numero inteiro positivo: ");
    scanf("%d", &n);
    
    for(j=n; j!=0; j--)
    {
        total=0;
        cont=0;
        for(i=1; i<=n; i++)
        {
            if(n%i==0)
            {
                cont++;
                printf("D%d=%d  ",cont ,i);
                total+=i;
            }
        }
        if(total>0) printf("\nA soma dos divisores de %d é: %d\n\n",n ,total);
    }
    return 0;
}

Ele não muda o número decrementando em uma unidade e então em vez de mostrar todos os inteiros inferiores ao digitado ele mostra o mesmo.

Se alguém puder ajudar eu agradeço!!

Não sei se já resolveu, mas eu olhei aqui e tem só 2 detalhes no código que impedem de executar do jeito como você precisa.

 

1 - no For com o i ao invés de utilizar o j que você está trabalhando no for anterior você usa o n que é um valor que você não está mechendo o valor, por isso ele imprime o mesmo numero.

2 - no if em seguida o mesmo esquema você está usando o n e não o j.

int main(void)
{
    int i, total, n=1, cont=0, j;
    printf("\n\nEscreva um numero inteiro positivo: ");
    scanf("%d", &n);
    
    for(j=n; j!=0; j--)
    {
        total=0;
        cont=0;
        for(i=1; i<=j; i++)
        {
            if(j%i==0)
            {
                cont++;
                printf("D%d=%d  ",cont ,i);
                total+=i;
            }
        }
        if(total>0) printf("\nA soma dos divisores de %d eh: %d\n\n",j ,total);
    }
    return 0;
}

Espero que tenha sido útil.

Editado por renatoemoura
inserir o código correto.
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...