Armstrongov broj

Teme vezane za console/GUI programiranje u C/C++ jeziku
4 post(ov)a • Stranica: 1/1.

Armstrongov broj

PostPostao/la nemesis » 24 tra 2012, 11:14

treba mi vasa pomoc u vezi jednog programa napisanog u C jeziku, radi se o Armstrongovom broju, neki od vas znaju sta je neki ne, u svakom slucaju program radi osim jedne stvari, a malo sam zastario pa reko da potrazim pomoc. Kako da kada ukucam decimale brojeve da mi ispise "nije prirodan broj", evo kod:

c code
#include <stdio.h> 
#include <math.h>
main ()

{

pocetak: int broj,a,b,brcif,brcif2,cifra,kv,rez;
printf("Unesi prirodan broj:\t");scanf("%d",&broj);
if(broj>=0)

{
a=broj;
b=broj;
brcif=0;
rez=0;
while(a)
{

brcif++;
a=a/10;
}

while(b)
{

brcif2=brcif;
kv=1;
cifra=b%10;
while(brcif2--)
{

kv=kv*cifra;
}

rez=rez+kv;
b=b/10;

}
if(rez==broj) printf("Broj %d je Armstrongov broj.\n\n",broj);
else printf("Broj %d nije Armstrongov broj.\n\n",broj);
}

else printf("Broj %d nije prirodan broj.\n\n",broj);
goto pocetak; }


ako ne shvatate probacu pojasniti jos al imslim da vidite u kodu o cemu govorim, znaci radi sa cjelobrojnim ali ne sa decimalnim, ako ukucam 2.5 ili nesto tako onda vrti program konstantno, program je radjen u Dev C++
Zadnja izmjena: gagiD; 18 stu 2013, 20:32; ukupno mijenjano 2 put/a.
Razlog: naslov

Re: Pomoc

PostPostao/la Armin » 26 tra 2012, 00:03

Bio sam odsutan neko vrijeme i nisam odmah vidio ovu temu. Nisam siguran za taj amstrongov broj ali mogu ti pomoći što se tiče konkretnog pitanja. Ukoliko želiš provjeriti da li je unesen cijeli broj probaj koristiti sljedeći metod:


c code
#include<stdio.h>

main()

{
float broj;
int cijeli;
scanf("%f",&broj);
cijeli=(int)broj;
if((broj-cijeli)!=0)printf("Broj nije prirodan.\n");
else printf("Broj je prirodan.\n");
system("pause");
}


Urađeno je sljedeće:

- unijet floating point broj
- preko cast operatora odabran cijeli dio tog broja
- oduzmes realni i prirodni broj, i ukoliko je rjesenje oduzimanja 0, onda to znaci da iza decimalnog zareza nemas nista

S druge strane, imas malo sintaksičkih grešaka u kodu i nije mi jasno zasto koristis goto. Ako malo objasnis sta program treba da radi konkretno (vise o amstrongovom broju) onda ću ti rado pomoći još.
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla

Re: Pomoc

PostPostao/la nemesis » 26 tra 2012, 11:19

armstrongov broj je broj koji se stepenuje, cifre od 0 do 9 su armstrongov broj, za dvocifrene brojeve cifre se kvadriraju za trocifrene cifre su na trecu, evo primjer, broj 153 je armstrongov broj jer 1^3+15^3+3^3=153, nadam se da razumijes o cemu se radi, a goto sam stavio kako bi se program ponavljao, tj. stalno vrti u krug, kad ukucam prvi broj dobijem rjesenje pa idem opet tako da program nema kraja, radi konstantno. Kod koji sam vec napisao radi osim za decimalne brojeve, kad ukucam decimalan onda vrti program non-stop umjesto da napise rjesenje i na tome da stane

Re: Pomoc

PostPostao/la Armin » 26 tra 2012, 22:05

Preporučujem korištenje while petlje umjesto goto. Mislim da je ovo što tražiš:

cpp code
#include<stdio.h>
#include<math.h>

int broj_cifara(float);
int jel_prirodan(float);
float amstr(float,int);
main()
{
float broj;
int br_cif=0;
int temp;
float amstrong;
while(1)
{
printf("Unesi prirodan broj:");
scanf("%f",&broj);
if(!jel_prirodan(broj))
{
printf("Broj %f nije prirodan broj.\n",broj);
break;
}
printf("Broj %.f je prirodan broj.\n",broj);
br_cif=broj_cifara(broj);
amstrong=amstr(broj,br_cif);
printf("Novi broj: %.f\n",amstrong);
if(amstrong==broj)printf("Broj %.f je amstrongov broj.\n",broj);
else printf("Broj %.f nije amstrongov broj.\n",broj);
}
system("pause");
}

int broj_cifara(float x)
{
return log10(x)+1;
}

int jel_prirodan(float x)
{
int a;
a=(int)x;
if((x-a)==0)return 1;
else return 0;
}

float amstr(float broj,int br_cif)
{
int i;
float amstrong=0.;
int temp= (int)broj;
char niz[100];
itoa(temp,niz,10);
for(i=0;i<br_cif;i++)
{
amstrong=amstrong+pow(niz[i]-'0',br_cif);
}
return amstrong;
}
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla


4 post(ov)a • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.