C++ Poroblem z za dużą liczbą (prawdopodobnie) w programie liczącym masę, objętość i gęstość.
Ostatnio zmodyfikowano 2016-12-24 22:26
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! #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 ===|
|
|
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ć. |
|
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 #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...
|
|
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. |
|
« 1 » |