Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Interpretacja warunku if i dziwne wyniki z zmiennych typu float .

Ostatnio zmodyfikowano 2013-10-19 15:46
Autor Wiadomość
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 :)

C/C++
#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;
        }
       
    }
}
P-94022
pekfos
» 2013-10-19 15:36:55
Zmień float na double.
P-94024
DarthDamin
Temat założony przez niniejszego użytkownika
» 2013-10-19 15:46:04
dziękki ! :)
P-94026
« 1 »
  Strona 1 z 1