Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nicolax_11

compilar programa code blocks

Recommended Posts

Eu uso o programa code blocks e sempre q eu tento compilar esse programa que serve para achar os primeiros 4 números perfeitos da o erro do windows 7 que o programa parou de funcionar está em c, será q eu errei alguma parte do código:

 

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

int main()
{
   int num, cont, soma, divs, modd;
   cont=0;
   num=2;
   do
   {   soma=0;
       divs=num;
       do
       {
           divs=divs-1;
           modd=num%divs;
           if (modd==0){
               soma=soma+divs;}
                  }
       while (divs!=0);
       if (soma==num){
           printf("\nO numero %d e perfeito.\n", &num);
           cont=cont+1;}
       num=num+1;}
       while(cont!=4);
       printf("Fim");
   system ("pause");
   return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor, mude o título de seu tópico para algo que melhor descreve seu problema. Eu poderia fazer isso pra você, mas quero que se esforce pra criar um título que acha pertinente.

 

Ainda nesta linha de raciocínio, me diga o que o formato '%d' espera como argumento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Velhinho, o seu codigo esta bugando porque voce esta fazendo divisoes por zero.

lembrando claro, que uma operação de sobra ( % ) nao deixa de ser uma divisão...

 

Um exemplo que resolve seu problema:

 

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

int verificar_nperfetct(int n);

int main() {
 int i, num;
 num = 4; // quantidade de numeros perfeitos que quero encontrar;
 for (i = 1 ; num ; i++ ) { //comecar verificando do numero 1; enquanto ainda nao tiver a quantidade desejada;
   //se i for um numero perfeito;
   if (verificar_nperfetct(i)) {
     printf("%d\n",i);
     num--; //decrementa num, informando que falta falta encontrar um perfeito a menos;
   }
 }
 return EXIT_SUCCESS;
}

//funcao para verificar se um numero é perfeito
int verificar_nperfetct(int n) {
 int i, soma;
 soma = 0; //zerando variavel para a soma das divisoes perfeitas;
 for (i = 1 ; i < n ; i++) { // para 2 ; ate i < numero sendo testado;
   if ((n/i)*i==n) { soma = soma + i; } //caso a divisao por i nao tenha sobras, incluir soma na verificação;
   //if (!(n%i)) { soma = soma + i; } //caso a divisao por i nao tenha sobras, incluir soma na verificação;
   //if (n%i == 0) { soma = soma + i; } //caso a divisao por i nao tenha sobras, incluir soma na verificação;
 }
 return ( n == soma ? 1 : 0 ); //se o numero testado é igual a soma de seus divisores retornar 1, caso contrario 0;
}

 

As linhas de codigos comentadas que eu coloquei, tem a mesma finalidade da que foi usada acima delas, eu apenas mostrei outros metodos de faze-lo, deixando ativo a "((n/i)*i==n)" pois li em algum lugar que a operação de resto ( % ) custa mais que fazer tal coisa demonstrada :D.

 

Vale lembrar que o codigo acima é apenas para demonstrar o problema funcionando sem bugs, sendo que cabem otimizações, como por exemplo, o loop de divisao nao tentar averiguar divisoes por 1, ja que este sempre sera verdadeiro na divisao de inteiros > 0 que é o caso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.