Ir ao conteúdo

C Divisores de um número


Ir à solução Resolvido por Simão.,

Posts recomendados

Postado

@Simão.   qq número pode ser dividido por qq um outro número ,  mas  creio que o que você quer mesmo dizer é quais os divisores que tenham resultado exato , sem casas decimais , e sendo isso assim mesmo , você pode usar o comando "mod" que na linguagem c é esse "%" ,  e se for zero então a divisão é exata e esse será um divisor ,

poste um código que você já tenha feito sobre esse exercício e ajudaremos se precisar  .

  • Curtir 1
Postado
7 horas atrás, Simão. disse:

Precisava de fazer um programa que diga os divisores de um número indicado

 

Isso não seria uma dúvida sobre C C++ ou C#.

 

Considerando o ensino fundamental: 

  • todo número é divisível por 1 e por si.
  • os divisores aparecem claro aos pares: para um x dividir N tem que ter um y de forma que x*y = n. É a definição afinal.  E nesse caso conforme x cresce y diminui, o que é bem natural também.

Exemplo: divisores de 12

 

  • 1 e 12 dividem 12 por definição
  • a partir daí vão aparecer 2, 3, 4 e 6. Como são pares e a multiplicação é comutativa eles vão aparecer duas vezes: 2x6 e 6x2 3x4 e 4x3.

Então basta um loop testando os possívies fatores a partir de 2 inclusive.  Para a condição de parada: o maior fator que se pode ter é quando x*y = N e x=y, como em 16 teria 4x4. 

 

Isso acontece quando um número tem raiz quadrada inteira, no popular um quadrado perfeito. Então o loop continua até x*x maior que N certo?

 

Nada mais.

 

Considere o 12 de novo:

 

2 divide 12, e 2x2 = 4 menor que 12, continua no loop. E marca lá os fatores 2 e claro 6

3 divide 12, e 3x3 = 9 menor que 12, continua no loop. E marca lá os fatores 3 e 4

4 já está na lista e 4x4 = 16 maior que 12 então não tem mais divisor possível.

  • Curtir 3
  • Solução
Postado
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int valor, n;
		printf("Insira um valor para verificar os seus divisores: \n");
		scanf("%d", &valor);
	for (n = 1; n < valor + 1; n++)
	{
	if (valor % n == 0)
    	printf("E devisor %d \n", n);
	}
}

Eu fiz desta forma e funciona, eu sei que existe mais alguma forma de fazer mas não sei qual, se alguém souber que disponha aqui por favor.

  • Curtir 1
Postado
6 horas atrás, Simão. disse:

Eu fiz desta forma e funciona, eu sei que existe mais alguma forma de fazer mas não sei qual, se alguém souber que disponha aqui por favor

Leu o que eu te expliquei logo acima? 

Não está bom assim. Não sou eu que vou corrigir isso mas imagino que vai perder nota.

 

Se leu o exemplo que eu descrevi passo a passo está vendo lá que os divisores aparecem aos pares.

 

Não tem sentido encontrar 2 como divisor de 12 e não encontrar o 6 para depois fazer a mesma cona e encontrar o 6 e não encontrar o 2. 

 

  • Obrigado 1
Postado
20 minutos atrás, arfneto disse:

Leu o que eu te expliquei logo acima? 

Não está bom assim. Não sou eu que vou corrigir isso mas imagino que vai perder nota.

 

Se leu o exemplo que eu descrevi passo a passo está vendo lá que os divisores aparecem aos pares.

 

Não tem sentido encontrar 2 como divisor de 12 e não encontrar o 6 para depois fazer a mesma cona e encontrar o 6 e não encontrar o 2. 

 

O meu professor nem sequer falou sobre o programa quando lhe entreguei, mas vou falar com ele sobre isso. Obrigado

  • Curtir 1
Postado
1 minuto atrás, Simão. disse:

O meu professor nem sequer falou sobre o programa quando lhe entreguei, mas vou falar com ele sobre isso

 

??

Estou falando sobre o que eu expliquei ontem, e de novo hoje. E nada tem a ver com C e sim com o ensino fundamental: um número divide outro então tem um terceiro como te expliquei com o exemplo 12.

 

Se já entregou esqueça isso. Mas não está bom. Espero que tenha entendido o que eu expliquei: seu programa faz duas vezes a mesma coisa e despreza o fato de que ao descobrir por exemplo que 2 divide 12 FICA CLARO que tem que ter um outro número, o 6, para o qual 2 x 6 é 12. É aritmética fundamental. Então você faz o dobro de tudo em seu programa. Não usou a condição de parada que eu te expliquei em português lá em cima...

  • Curtir 1
Postado

Sobre o código:

 

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int valor, n;
		printf("Insira um valor para verificar os seus divisores: \n");
		scanf("%d", &valor);
	for (n = 1; n < valor + 1; n++)
	{
	if (valor % n == 0)
    	printf("E devisor %d \n", n);
	}
}

 

Além do que eu já te disse sobre esar fazendo duas vezes a mesma coisa...

 

  • TESTE sempre o retorno de scanf(). É ingênuo não testar e seguir adiane. Veja o manual
  • NUNCA deixe de declarar a variável de controle do loop DENTRO do loop
  • a grafia correta: "divisor"
  • não precisa e não deve incluir stdlib
     

O loop deve parar quando n for maior que a raiz quadrada de valor, já que conforme um fator diminui o outro aumenta, como no exemplo que te mostrei 2X. Para valor = 12  2x6 é o mesmo que 6x2: quando encontrou 2 como divisor de 12 tem que ter encontrado o 6 também. E não deve fazer de conta que não encontrou e pasar reto. Nesse caso nenhum valor acima de 4 deveria ser testado. E nem 4 já que 4x4 = 16 maior que 12.

 

Módulo % e raiz quadrada são operações "caras"e pode passar sem isso usando algo como o exemplo

 

EXEMPLO

 

#include <stdio.h>
int main(void)
{
    int qtd = 0;  // quantos fatores
    int valor   = 12;  // o valor
    int f1      = 1;   // um fator
    int produto = 0;   // para saber quando acabou

    printf("\nDividem %d: ", valor);
    while (produto <= valor)
    {
        int f2  = valor / f1;
        produto = f1 * f2;
        if (produto == valor)
            if (f1 == f2)
                printf("%d ", f1), qtd += 1;
            else
                printf("%d %d ", f1, f2), qtd += 2;
        f1      = f1 + 1;  // proximo candidato
        produto = f1 * f1;
    };
    if (qtd == 2)
        printf("  (%d PRIMO)\n", valor);
    else
        printf("  (%d divisores)\n", qtd);
    return 0;
}

 

que mostra para 12:
 

Dividem 12: 1 12 2 6 3 4   (6 divisores)

 

Ou para 13:

 

Dividem 13: 1 13   (13 PRIMO)

 

Lembre do ensino fundamental que essa é a definição de número primo: ter só dois divisores.

 

Ou para 60:
 

Dividem 60: 1 60 2 30 3 20 4 15 5 12 6 10   (12 divisores)

 

Ou para 25:

 

Dividem 25: 1 25 5   (3 divisores)

 

E esse é um caso particular importante porque 25 é um quadrado perfeito

  • Curtir 1
  • Obrigado 3

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