Jump to content

Determinar os divisores de um número inteiro


Go to solution Solved by thinkabout,

Recommended Posts

Posted (edited)

Boa Noite,

O que há errado aqui ?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
/* Desenvolva um programa que determine os divisores de um número inteiro introduzido pelo
utilizador. */
int main()
{
int valor,i,divisor;

printf("Insira um valor para verificar os seus divisores: \n");
scanf("%d", &valor);

for (i = 1; i < valor; i++)
{
	divisor=valor%i==0;
	printf("E devisor %d \n", divisor);
}
return 0;
}

Exemplo do output:

Nr inserido 5 -

E devisor 1

E devisor 0

E devisor 0

E devisor 0

Edited by thinkabout
Posted

Estás a atribuir à variável divisor a veracidade de uma condição, valor%i==0, e a cada iteração imprimes sempre uma mensagem a dizer "E divisor" seguido do valor dessa condição - 1 para verdadeiro, 0 para falso.

Knowledge is free!

Posted

Existe alguma maneira de eliminar ali aquele último printf ?

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

Não estou a ver como, se meter o contador do for = 0 ele estoira porque depois vai tentar dividir por 0

Sim, mudar a condição de término do ciclo for de modo a contemplar o valor de valor.

Feito , a bocado tentei meter 0 no contador do for, mas estoirava porque tentava dividir por 0.

for (i = 0; i < valor; i++)

Agora já corrigi para

for (i = 1; i < valor+1; i++)

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

Segue aqui uma V2, no caso de queremos que o programa corra mais que uma vez.

(falta blindar o programa caso o utilizador inserida um carácter)

int main()
{
 int valor,i;
 do
 {
   puts("Insira um valor para verificar os seus divisores: (insere 0 ou um valor negativo para terminar)");
   scanf("%d", &valor);
   for (i = 1; i <= valor; i++)
   {
     if (valor%i==0)
     {
       printf("E devisor %d \n", i);
     }
   }
 } while (valor > 0);

 puts("Foi dada ordem para terminar");
 return 0;
}
Posted

Isso não termina o programa se inserires valores negativos, e não o termina de igual forma se inserires um valor positivo - tens aí um belo molho de bróculos que te dá um loop infinito.

Onde está a parte que termina o programa caso o utilizador insira 0 ou um nº negativo? Para que puseste um puts dentro de um while, e ainda para mais com a condição valor > 0?

Knowledge is free!

Posted (edited)

pois ... é uma questão de matemática ...

se valor for 30, qual o valor entre valor / 2 (15) e valor (30) que é divisor de valor (30) ?

Já entendi a questão... Agora não estou a ver é como vou aplicar a condição. 😕

https://www.youtube.com/embed/oe8tAU01YBw?feature=oembed

Já agora, porque é quando meto o código o identação fica toda alinhada a esquerda ?

Edited by thinkabout
Posted

queres descobrir através da factorização ?

tenta seguir o que ele faz ... desculpa mas não vou dizer como, isso é trabalho teu porque no video até que explica bem o que tens de fazer ..

Não, o exercício era só para aplicar o circulo for, não preciso de usar factorização.

Penso que o código podia estar melhor de forma a ele não correr os valores todos, contudo não o consegui melhorar. 😞

Posted

Penso que assim está melhor, já deito fora logo metade dos valores. (valor / 2)

Agora só me faltava a segunda parte da explicação que está no video que é quando o I fosse superior a um dos divisores ele parar.

#include <stdio.h>
int main()
{
   int valor,i;
do
{
 puts("Insira um valor para verificar os seus divisores: (insere 0 ou um valor negativo para terminar)");
 scanf("%d", &valor);

 printf("E devisor %d \n", valor);
 for (i = valor/2; i > 0 && i <= valor ; i--)
 {
  if (valor%i==0)
  {
  printf("E devisor %d \n", i);
  }
 }

} while (valor > 0);  // (falta blindar o programa caso o utilizador inserida um carácter)
puts("Foi dada ordem para terminar");
return 0;
}

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.