Jump to content

Determinar os divisores de um número inteiro


thinkabout
Go to solution Solved by thinkabout,

Recommended Posts

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
Link to comment
Share on other sites

  • Solution

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;
}
Link to comment
Share on other sites

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;
}
Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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;
}
Link to comment
Share on other sites

No video ele começa por dividir por 1,2,3,4,5 quando chega ao 6,

ele vai parar , diz que já encontrou todos.

O ciclo vai-se executar 30 vezes em vez de só se executar 6 vezes. (no caso do 30) não tendo em conta o (valor / 2)

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

Edited by thinkabout
Link to comment
Share on other sites

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.