Numeros abundantes(excessivos)

8 respostas
paulinhom

Bom por definição um numero é abundante se a soma de seus divisores for maior que o dobro do numero.

ex: 12

divsores= 1,2,3,4,6 e 12. soma=28;

12*2=24

então 12 é dito abundante.

bom criei um codigo com uma função que identifica se o numero é ou n abundante, segue o codigo, mas ele sempre diz que o numero e abundante, alguem consegue ver onde estou errando ?

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

int main(int argc, char *argv[])
{
  
int abund(int pn){
     
        
        int soma,r,cont,dobro;
           
        soma=0;
      
        for(cont=1;cont<=pn;cont++){
           if(pn%cont==0){
               soma=soma+cont;           
           }
        }     
         
         dobro=pn*2;
             
     if(soma>dobro){return 1;}  
     if(soma<dobro){ return 0;}  
}      

int num,r;

    printf("Insira um numero:");
    scanf("%d",&num);
    
    r=abund(num);
    
    if(r=1){ printf(" Abundante.\n\n");}
    
    if(r=0){ printf(" Nao e abundante.\n\n");}
 
  system("PAUSE");	
  return 0;
}

8 Respostas

A

Provavelmente o erro está nesses if’s. O operador de igualdade é o == e não o =.
Você está atribuindo o valor 1 a r e como 1 é true no C ele sempre entrará lá.

Aliás, você poderia usar um else ao invés de outro if.

davidbuzatto

Acho que você deu uma misturada no seu código na hora de postar não deu?

Seu problema está no if no final da função main.
Ao invés de comparar r com 1 ou 0, vc está atribuindo 1 à v no primeiro if, que sempre é avaliado como verdadeiro.

[]´s

Editado: Ops, demorei p/ responder.

A

Eu fiquei imaginando que o C permitia criar funções dentro de outras funções…

Como não conheço muito, nem opinei…rs

A

Boa tarde, o unico erro que encontrei foi quando você foi comparar se o r é igual a 0 ou a 1, você colocou =, e num caso destes, como vc quer comparar, voce deve usar ==. Também fiz algumas alterações com relação as variáveis, pois neste caso muitas delas não estavam sendo necessárias.

#include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[]){
      
         int abund(int pn){
         
            
            int soma,cont;
               
            soma=0;
          
            for(cont=1;cont<=pn;cont++){
               if(pn%cont==0){
                   soma += cont;           
               }
            }     
             
             pn*=2;
                 
         if(soma>pn)
             return 1;  
         return 0;  
    }      
    
    int num;
    
        printf("Insira um numero:");
        scanf("%d",&num);
        
        if(abund(num) == 1)
            printf(" Abundante.\n\n");
        else
            printf(" Nao e abundante.\n\n");
     
      system("PAUSE");	
      return 0;
    }
davidbuzatto

O MinGW (GCC) até deixa (acabei de testar), mas acredito que este não seja um comportamento permitido no padrão ANSI. O pessoal que é expert em C pode falar disso melhor.
Dei uma googlada e realmente parece que não é parte do padrão. Estou terminando a leitura de um livro que aborda tanto o padrão C89 quanto o C99 e nele isso não é dito em nenhum lugar. Na dúvida, não declare. Não acredito que seja uma boa prática tbm.

Eu faria assim:

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

bool isAbundante( int n );

int main( void ) {

    int i;
    for ( i = 1; i < 50; i++ ) {
        printf( "%d e' abundante? %s\n", i, isAbundante( i ) ? "sim" : "nao" );
    }

    return EXIT_SUCCESS;

}

bool isAbundante( int n ) {

    int i;
    int soma = 0;

    for ( i = 1; i <= n; i++ ) {
        if ( n % i == 0 ) {
            soma += i;
        }
    }

    if ( soma > 2 * n ) {
        return true;
    }

    return false;

}

Dê uma olhada aqui: http://stackoverflow.com/questions/957592/functions-inside-functions-in-c

paulinhom

obrigado aos que responderam à minha dúvida, realmente o uso de funções em C n é muito padrão, mas ñ curso sistemas ou algo relacionado. Faço engenharia metalúrgica e essa é uma matéria optativa.Ainda não tenho muito conhecimento sobre,mas pretendo me aperfeiçoar.o programa acima realmente ficou mais eficiente em termos de processamento,boa =]

davidbuzatto

Muito pelo contrário. As “unidades” de programação em C são as funções. O que estamos discutindo é o caso de uma função ser implementada dentro de outra.

[]´s

paulinhom

Desculpe,acho que me expressei mal…No caso eu chamei de função aquela implementada em outra.

o que seria da linguagem C sem suas varias bibliotecas e funções ?

Criado 18 de dezembro de 2010
Ultima resposta 19 de dez. de 2010
Respostas 8
Participantes 4