[c++] czy mi ktos wyjasnii...

0

Witam dopiero zaczynam z c++
I mam pytanko
dlaczego w tym programie wchodze do while mimo tego ze zmienna pom w pewnym momencie ma wartosc 0.0??
i dlaczego nigdy nie pojawia sie na ekranie napis "ok"??
za pomoc bylbym baardzo wdzieczny
/////////////////////////////
#include <iostream.h>

int main()
{
float tab[5];
tab[0]=0.1f;
tab[1]=0.2f;
tab[2]=0.3f;
tab[3]=0.4f;
tab[4]=0.5f;

float pom, a=0.1;
for (int i=0;i<5;i++)
{

pom = 0;
pom = tab[i];

while(pom>0)
{
if(pom == 0.3)
cout<<"ok";
pom = pom - a;
cout<<"pom: "<<pom<<endl;
}
}
int k;
cin>>k;
}</cpp>

0

Hmmm nie jestem pewien, ale moze chodzi o dokladnosc typu float.
Zobaczy czy zadziala:
if(pom == float(0.3))

0

pomoglo.. troche znaczy sie "ok" juz dziala
ale ciagle petla wykonywana jest raz za duzo
po przerobieniu na inty dziala czyli rzeczywiscie cos z floatem sie dzieje
da sie to jakos poprawic??

while(pom>float (0.0))
nie pomaga :(

tomior

0

Ogólnie ze zmiennoprzcinkwymi jest ten problem, ze podczas dodawania i odejmowania traci sie precyzję, najlepiej ustalic przecinek i użyć jakichś intów. Po prostu jeśli to możliwe zmienia sie skale :)

#include <iostream.h>

int main(){
  int tab[5]={1,2,3,4,5} // zmaina na stałoprzecinkowe 0.1 , 0.2, 0.3, 0.4, 0.5 *10 
  int  pom, a=1;
  for (int i=0;i<5;i++){
    pom = 0;
    pom = tab[i];
    while(pom>0){
      if(pom == 3)cout<<"ok";
      pom = pom - a;
      cout<<"pom: "<<float(pom/10f)<<endl;
    }
  }
   int k;
   cin>>k;
   return 0;
}
0

Dzieki wielkie, tara wiem o co biega
niestety ta funkcja jest czescia wiekszej caloscii i tego tak nie da sie zrobic :(
ale juz wiem z czym mam walczyc ;)

tomior

1 użytkowników online, w tym zalogowanych: 0, gości: 1