problematicni if

problematicni if

offline
  • PoP  Male
  • Ugledni građanin
  • Pridružio: 17 Apr 2003
  • Poruke: 420
  • Gde živiš: Pozega

Imam problem sa if uslovom. Naime cilj je da ukoliko je greska<10 stampa vrednosti u fajl...
Nisam imao pojma da je to moguce ali program opusteno stampa i vrednosti gde je greska=10
Kako je to moguce?
   {    greska=(ir/ip-1)*100;    greska=(greska<0)?-greska:greska;        //if(fabs((ir/ip-1)*100)<10)          if(greska<10)       {       nNovi++;       fprintf(tekstFajl,"|  %d  |  %d  |  %d   | ............greska,nIzlaz);                  }         }



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 25 Jul 2003
  • Poruke: 431
  • Gde živiš: Nis

Nisam bas razumeo, jel hoces da kazes da se ovaj kod

if(greska<10)       {       nNovi++;       fprintf(tekstFajl,"|  %d  |  %d  |  %d   | ............greska,nIzlaz);                  }
izvrsava i kada je greska = 10?



offline
  • PoP  Male
  • Ugledni građanin
  • Pridružio: 17 Apr 2003
  • Poruke: 420
  • Gde živiš: Pozega

Upravo tako. Znam da zvuci suludo.... Imam utisak kao da je za printf("%d",2+2) ispisao 5 Smile
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; }

offline
  • igor86  Male
  • Stručni saradnik
    Web programiranje
  • Pridružio: 24 Maj 2006
  • Poruke: 1633

pa stavi
if( (int) greska<10 )
i uzivaj.
Samo nisam siguran da li je int sa ili bez zagrada, ali ako ga castujes ne moras vise da se brines

offline
  • PoP  Male
  • Ugledni građanin
  • Pridružio: 17 Apr 2003
  • Poruke: 420
  • Gde živiš: Pozega

khm izvinjavam se. Ipak ovo skracenje pi nije promenilo nista, mrzelo me da sve pregeldam pa sam (kad sam napisao predhodni post) testirao nIzlazno do 35 ( od potrebnih 1000). Problem dakle ostaje na snazi. Dakle ulazi u true granu i kad je greska=10 !!!
Ima li neko pojma sta se ovde desava?
============================
@igor probao sam ((int)(greska)<10) nece.. probao sam cak i eksplicitno da postavim preduslov if(greska!=10) ipred spornog uslova nista ne pomaze

Ko je trenutno na forumu
 

Ukupno su 1137 korisnika na forumu :: 45 registrovanih, 5 sakrivenih i 1087 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: airsuba, Alibaba1981, amaterSRB, Apok, aramis s, babaroga, bankulen, bigfoot, Bobrock1, BORUTUS, darkangel, darkstar101, doom83, draganl, Dukelander, GORDI, kinez88, kybonacci, Litostroton, LUDI, macak44, madza, MB120mm, mkukoleca, moldway, Nemanja.M, nemkea71, nuke92, ObelixSRB, opt1, pacika, panzerwaffe, Romibrat, rovac, scimitar19, slonic_tonic, stankolich, theNedjeljko, vathra, virked, Webb, zixmix, zlaya011, žeks62, 1107