Interpretacja warunku if i dziwne wyniki z zmiennych typu float .
Ostatnio zmodyfikowano 2013-10-19 15:46
DarthDamin Temat założony przez niniejszego użytkownika |
Interpretacja warunku if i dziwne wyniki z zmiennych typu float . » 2013-10-19 15:21:44 Witam otóż zrobiłem program "Automat do kawy" i napotykam dziwny błąd(?). Gdy odejmuje przykładowo 2.50-w (w == 2.51) to wynik wynosi 0,0009999 a z tego co wiem to powinno wyjść 0,01 Drugi problem przy IF gdy warunek wynosi 2.50 a wypiszę 2.50 funkcja traktuje to jako fałszywe nie mam pomysłu już co zrobić ;_; . Załączam kod źródłowy :) #include <iostream> #include <stdio.h> #include <time.h> #include <conio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include <windows.h> #include <math.h>
using namespace std; class automat { public: void kawa( void ); void herbata( void ); void sok( void ); void kasa( void ); void kasa1( void ); void kasa2( void ); }; void automat::kawa( void ) { int ka; cout << "WYBRALES KAWE" << endl; cout << "WYBIERZ DODATKI!" << endl; cout << "1.Nic" << endl; cout << "2.Mleko" << endl; cout << "3.Cukier" << endl; cout << "4.Mleko+Cukier" << endl; cin >> ka; switch( ka ) { case 1: cout << "WYBRALES ZWYKlA KAWE" << endl; break; case 2: cout << "WYBRALES KAWE Z MLEKIEM" << endl; break; case 3: cout << "WYBRALES KAWE Z CUKREM" << endl; break; case 4: cout << "WYBRALES KAWE Z CUKREM I MLEKIEM" << endl; break; } cout << "=================" << endl; cout << "POBIERANIE KUBKA..." << endl; _sleep( 2000 ); cout << "SYPANIE KAWY..." << endl; _sleep( 2000 ); cout << "WLEWANIE WODY..." << endl; _sleep( 2000 ); cout << "MOZESZ ODEBRAC NAPOJ :)" << endl; _sleep( 4000 ); system( "cls" ); } void automat::herbata( void ) { int ka; cout << "WYBRALES HERBATE" << endl; cout << "WYBIERZ DODATKI!" << endl; cout << "1.Nic" << endl; cout << "2.Kwasek Cytrynowy" << endl; cout << "3.Cukier" << endl; cout << "4.Kwasek Cytrynowy+Cukier" << endl; cin >> ka; switch( ka ) { case 1: cout << "WYBRALES ZWYKlA HERBATE" << endl; break; case 2: cout << "WYBRALES HERBATE Z KWASKIEM CYTRYNOWYM" << endl; break; case 3: cout << "WYBRALES HERBATE Z CUKREM" << endl; break; case 4: cout << "WYBRALES HERBATE Z CUKREM I KWASKIEM CYTRYNOWYM" << endl; break; } cout << "=================" << endl; cout << "POBIERANIE KUBKA..." << endl; _sleep( 2000 ); cout << "SYPANIE HERBATY..." << endl; _sleep( 2000 ); cout << "WLEWANIE WODY..." << endl; _sleep( 2000 ); cout << "MOZESZ ODEBRAC NAPOJ :)" << endl; _sleep( 4000 ); system( "cls" ); } void automat::sok( void ) { cout << "WYBRALES SOK" << endl; cout << "=================" << endl; cout << "POBIERANIE KUBKA..." << endl; _sleep( 2000 ); cout << "SYPANIE SOKU..." << endl; _sleep( 2000 ); cout << "WLEWANIE WODY..." << endl; _sleep( 2000 ); cout << "MOZESZ ODEBRAC SOK :)" << endl; _sleep( 4000 ); system( "cls" ); } void automat::kasa( void ) { float w; float r; poczatek: cout.width( 45 ); cout << " ==================" << endl; cout.width( 40 ); cout << "=Wrzuc " << "3.20zl=" << endl; cout.width( 45 ); cout << " ==================" << endl; cin >> w; if( 3.20 >= w ) { cout << "Nie wystarczajaca pieniedzy !" << endl; goto poczatek; } else { r = w - 3.20; cout << "WYDAWANIE RESZTY" << endl; _sleep( 4000 ); cout << "Reszta :" << r << "zl" << endl; } } void automat::kasa1( void ) { float w; float r; poczatek: cout << "Wrzuc " << "2.00zl" << endl; cin >> w; if( 2.00 >= w ) { cout << "Nie wystarczajaca pieniedzy !" << endl; goto poczatek; } else { r = w - 2.00; cout << "WYDAWANIE RESZTY" << endl; _sleep( 4000 ); cout << "Reszta :" << r << "zl" << endl; } } void automat::kasa2( void ) { float w; float r; poczatek: cout << "Wrzuc " << "2.50zl" << endl; cin >> w; if( 2.50 >= w ) { cout << "Nie wystarczajaca pieniedzy !" << endl; goto poczatek; } else { r = w - 2.50; cout << "WYDAWANIE RESZTY" << endl; _sleep( 4000 ); cout << "Reszta :" << r << "zl" << endl; } } int main( void ) { int i; for( i = 150; i >= 0; i-- ) { int w; automat opcja; cout << "=AUTOMAT DO KAWY==== ILOSC WODY" << "==" << i << " Porcji" << endl; cout << "=================" << endl; cout << "1.KAWA - 3.20zl" << endl; cout << "2.HERBATA - 2.00zl" << endl; cout << "3.SOK - 2.50zl" << endl; cin >> w; switch( w ) { case 1: opcja.kasa(); opcja.kawa(); break; case 2: opcja.kasa1(); opcja.herbata(); break; case 3: opcja.kasa2(); opcja.sok(); break; } } } |
|
pekfos |
» 2013-10-19 15:36:55 Zmień float na double. |
|
DarthDamin Temat założony przez niniejszego użytkownika |
» 2013-10-19 15:46:04 dziękki ! :) |
|
« 1 » |