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>intmain(intargc,char*argv[]){intabund(intpn){intsoma,r,cont,dobro;soma=0;for(cont=1;cont<=pn;cont++){if(pn%cont==0){soma=soma+cont;}}dobro=pn*2;if(soma>dobro){return1;}if(soma<dobro){return0;}}intnum,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");return0;}
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
AbelBueno
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
Alessandro09
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>intmain(intargc,char*argv[]){intabund(intpn){intsoma,cont;soma=0;for(cont=1;cont<=pn;cont++){if(pn%cont==0){soma+=cont;}}pn*=2;if(soma>pn)return1;return0;}intnum;printf("Insira um numero:");scanf("%d",&num);if(abund(num)==1)printf(" Abundante.\n\n");elseprintf(" Nao e abundante.\n\n");system("PAUSE");return0;}
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>boolisAbundante(intn);intmain(void){inti;for(i=1;i<50;i++){printf("%d e' abundante? %s\n",i,isAbundante(i)?"sim":"nao");}returnEXIT_SUCCESS;}boolisAbundante(intn){inti;intsoma=0;for(i=1;i<=n;i++){if(n%i==0){soma+=i;}}if(soma>2*n){returntrue;}returnfalse;}
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 ?