Upravo tako. Znam da zvuci suludo.... Imam utisak kao da je za printf("%d",2+2) ispisao 5
Nemam vise nijednu ideju sta bi moglo da bude sem da mi baguje kompajler.
U medjuvremenu sam (u ocaju) skratio pi na cetri decimale i sve radi kako se i ocekuje... Prvo mi je palo na pamet da umesto float konverzije upotrebim double ali to nije dalo ocekivane rezultate. Pa sam probao pi i eto...
Ali me kopka kako je to moguce? Jeli u pitanju greska kompajlera ili postoji neko ogranicenje kod definisanja konstanti za koje ja ne znam.... mada da je predvidjeno ogranicenje valjda bi pri prijavio gresku?
Evo ceo sors pa ako neko moze da ga izvrsi kod sebe, probe radi.
#include<stdio.h>
//#include<math.h>
#define pi 3.14159265
#define min 14
#define max 30
#define nUlaz 1400
int main()
{
register int za1,za2,zg1,zg2;
int nIzlaz=0,linija,nNovi=1;
double wu,wi,ir,ip,greska;
FILE *tekstFajl;
tekstFajl=fopen("zupcanik.rtf","w");
if(!tekstFajl)
{
printf("Greska! Nemoguce je kreirati izlazni fajl.");
printf("\nPritisni ENTER za izlaz iz programa.");
getchar();
return 0;
}
wu=float(pi*nUlaz/30);
printf("Proracun u toku (Moze da potraje minut i duze) ...");
while(++nIzlaz<=1000)
{
if(nNovi)
{
fprintf(tekstFajl,"\n\n| za1 | za2 | zg1 | zg2 | ip | ir | Wizl |greska (%%)| Nizlazno|\n");
for(linija=0;linija<43;linija++)
fprintf(tekstFajl,"--");
fprintf(tekstFajl,"\n");
nNovi=0;
}
wi=(float)(pi*nIzlaz/30);
ip=wu/wi;
for(za1=min;za1<=max;za1++)
for(za2=min;za2<=max;za2++)
for(zg1=min;zg1<=max;zg1++)
for(zg2=min;zg2<=max;zg2++)
{
ir=(float)(4*(za1+zg1)*(zg2+za2))/(float)(za1*za2);
greska=(ir/ip-1)*100;
greska=(greska<0)?-greska:greska;
if(greska<10)
//if(fabs((ir/ip-1)*100)<10)
{
nNovi++;
fprintf(tekstFajl,"| %d | %d | %d | %d |%8.2f |%8.2f |%7.2f |%7.2f | %d |\n",za1,za2,zg1,zg2,ip,ir,wi,greska,nIzlaz);
}
}
}
fclose(tekstFajl);
return 0;
}
|