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

C++ Poroblem z za dużą liczbą (prawdopodobnie) w programie liczącym masę, objętość i gęstość.

Ostatnio zmodyfikowano 2016-12-24 22:26
Autor Wiadomość
W1ll_3ty
Temat założony przez niniejszego użytkownika
C++ Poroblem z za dużą liczbą (prawdopodobnie) w programie liczącym masę, objętość i gęstość.
» 2016-12-24 15:13:59
Witam, mam problem z programem liczącym masę, objętość i gęstość. Problem jest związany z tym, że spróbowałem w programie wprowadzić zmianę jednostki objętości i liczby są chyba po prostu za duże. Program nie jest jeszcze skończony a o pomoc proszę tylko w funkcji "Masa". Ewentualnie jeśli ktoś ma jeszcze jakieś porady to z chęcią posłucham. Jest jeszcze problem, że gdy używam typu danych float w tej funkcji i włączam program i próbuję obliczyć to w wyniku co jakiś czas pojawiają się litery inf + jednostka masy. Z zresztą można samemu zobaczyć. Z GÓRY DZIĘKI!
C/C++
#include <iostream>
using namespace std;

int gestosc()
{
    float m;
    float v;
    int jmi;
    int joi;
    string jm;
    string jo;
    cout << "Wpisz wartosc masy: ";
    cin >> m;
    cout << "Wybierz jednostke masy" << endl;
    cout << "1. g" << endl << "2. dg" << endl << "3. kg" << endl << "4. t" << endl;
    do
    {
        cout << "Wybrano: ";
        cin >> jmi;
        if( jmi > 4 || jmi < 1 )
        {
            cout << "Zla liczba!" << endl;
        }
    } while( jmi < 0 || jmi > 5 );
   
    switch( jmi )
    {
    case 1:
        {
            jm = "g";
            break;
        }
    case 2:
        {
            jm = "dg";
            break;
        }
    case 3:
        {
            jm = "kg";
            break;
        }
    case 4:
        {
            jm = "t";
            break;
        }
    }
   
    cout << "Wpisz wartosc objetosci: ";
    cin >> v;
    cout << "Wybierz jednostke objetosci" << endl;
    cout << "1. mm3" << endl << "2. cm3" << endl << "3. m3" << endl << "4. km3" << endl;
    do
    {
        cout << "Wybrano: ";
        cin >> joi;
        if( joi > 4 || joi < 1 )
        {
            cout << "Zla liczba!" << endl;
        }
    } while( joi < 0 || joi > 5 );
   
    switch( joi )
    {
    case 1:
        {
            jo = "mm3";
            break;
        }
    case 2:
        {
            jo = "cm3";
            break;
        }
    case 3:
        {
            jo = "m3";
            break;
        }
    case 4:
        {
            jo = "km3";
            break;
        }
    }
    float d = m / v;
    cout << "Gestosc tego obiektu to " << d << " " << jm << "/" << jo << endl;
}

int masa()
{
    float d;
    float v;
    string u;
    string o;
    string jo;
    int joi;
    cout << "Wpisz wartosc gestosci: ";
    cin >> d;
    cout << "Wpisz jednostke masy gestosci: ";
    cin >> u;
    cout << "wpisz jednostke objetosci gestosci: ";
    cin >> o;
    cout << "Wpisz wartosc objetosci: ";
    cin >> v;
    do
    {
        cout << "Wybierz jednostke objetosci" << endl;
        cout << "1. mm3" << endl << "2. cm3" << endl << "3. m3" << endl << "4. km3" << endl;
        cout << "Wybrano: ";
        cin >> joi;
        if( joi > 4 || joi < 1 )
        {
            cout << "Zla liczba!" << endl;
        }
    } while( joi < 0 || joi > 5 );
   
    switch( joi )
    {
    case 1:
        {
            jo = "mm3";
            break;
        }
    case 2:
        {
            jo = "cm3";
            break;
        }
    case 3:
        {
            jo = "m3";
            break;
        }
    case 4:
        {
            jo = "km3";
            break;
        }
    }
    if( jo != o || o == "mm3" || jo == "cm3" )
    {
        v = v * 1000;
    }
    if( jo != o || o == "mm3" || jo == "m3" )
    {
        v = v * 1000000000;
    }
    if( jo != o || o == "mm3" || jo == "km3" )
    {
        v = v * 1000000000000000000;
    }
   
   
   
    if( jo != o || o == "cm3" || jo == "mm3" )
    {
        v = v / 1000;
    }
    if( jo != o || o == "cm3" || jo == "m3" )
    {
        v = v * 1000000;
    }
    if( jo != o || o == "cm3" || jo == "km3" )
    {
        v = v * 1000000000000000;
    }
   
   
   
    if( jo != o || o == "m3" || jo == "mm3" )
    {
        v = v / 1000000000;
    }
    if( jo != o || o == "m3" || jo == "cm3" )
    {
        v = v / 1000000;
    }
    if( jo != o || o == "m3" || jo == "km3" )
    {
        v = v * 1000000000;
    }
   
   
   
   
    if( jo != o || o == "km3" || jo == "mm3" )
    {
        v = v / 1000000000000000000;
    }
    if( jo != o || o == "km3" || jo == "cm3" )
    {
        v = v / 1000000000000000;
    }
    if( jo != o || o == "km3" || jo == "m3" )
    {
        v = v / 1000000000;
    }
   
    float m = d * v;
    cout << "Masa tego obiektu to " << m << u << endl;
}

int objetosc()
{
    float d;
    float m;
    cout << "Wpisz wartosc gestosci: ";
    cin >> d;
    cout << "Wpisz wartosc masy: ";
    cin >> m;
    float v = m / d;
    cout << "Masa tego obiektu to " << v << endl;
}


int main()
{
    int wybierz;
    do
    {
        cout << endl << "Wybierz: " << endl;
        cout << "1. Gestosc" << endl << "2. Masa" << endl << "3. Objetosc" << endl << "4. Koniec" << endl;
        cout << endl << "Wybrano: ";
        cin >> wybierz;
        switch( wybierz )
        {
        case 1:
            {
                gestosc();
                break;
            }
        case 2:
            {
                masa();
                break;
            }
        case 3:
            {
                objetosc();
                break;
            }
        }
    } while( wybierz != 4 );
   
    return 0;
}




C:\Users\flork\Desktop\Admin\C++\Wzory.cpp|149|warning: integer constant is too large for 'long' type|
C:\Users\flork\Desktop\Admin\C++\Wzory.cpp|164|warning: integer constant is too large for 'long' type|
C:\Users\flork\Desktop\Admin\C++\Wzory.cpp|187|warning: integer constant is too large for 'long' type|
C:\Users\flork\Desktop\Admin\C++\Wzory.cpp|191|warning: integer constant is too large for 'long' type|
||=== Build finished: 0 errors, 4 warnings ===|
P-155372
mokrowski
» 2016-12-24 17:08:22
Sugestii może być wiele. Najpierw jednak przeczytaj to: http://kaczus.ppa.pl/art/liczbyzmiennoprzecinkowe,19.html ... i jak przeczytasz, będziesz miał bardziej precyzyjne pytania. Teraz nie ma większego sensu czegokolwiek sugerować.
P-155378
mateczek
» 2016-12-24 18:33:56
możesz spróbować "long double" to mieści najwięcej bez uciekania się do zewnętrznych bibliotek
Jeśli interesuje Cię tylko konwertowanie wprowadzonych danych do podstawowych jednostek takich jak "gram" i "metr" to możesz się posłużyć tablicą map

C/C++
#include <iostream>
#include<string>
#include<map>
using namespace std;
double factor( string jedn ) {
    map < string, double > Factor = { { "kg", 1000 }, { "g", 1 }, { "mg", 0.001 }, { "mm3", 0.000000001 }, { "cm3", 0.000001 }, { "m3", 1 }, { "km3", 1000000000 } };
    size_t poss = jedn.find( '/' );
    if( poss != std::string::npos ) {
        string s1 = jedn.substr( 0, poss );
        string s2 = jedn.substr( poss + 1 );
        return Factor[ s1 ] / Factor[ s2 ];
    }
    return Factor[ jedn ];
}
int main()
{
    double gestosc, obj;
    string jednV, jednG;
    cout << "podaj gęsość" << endl;
    cin >> gestosc >> jednG;
    cout << "podaj objętość" << endl;
    cin >> obj >> jednV;
    cout << "masa =" << gestosc * factor( jednG ) * obj * factor( jednV ) << " [g]" << endl;
   
    return 0;
}


podaj gęsość
12kg/cm3
podaj objętość
10cm3
masa =120000 [g]
Naciśnij <RETURN> aby zamknąć to okno...

 
P-155381
W1ll_3ty
Temat założony przez niniejszego użytkownika
» 2016-12-24 22:26:10
Dzięki za pomoc poczytam wszystko i poróbuję. Dzięki również za odpowiedź chociaż święta.
P-155385
« 1 »
  Strona 1 z 1