omura Temat założony przez niniejszego użytkownika |
Problem z wynikiem dzielenia » 2021-09-25 21:57:43 Witam wszystkich. Stworzyłem mały program, którego zadanie jest proste liczenie (dodawanie, odejmowanie, mnożenie i dzielenie). O ile trzy pierwsze funkcje działają bez problemu, to w przypadku dzielenie jest już inaczej. Wynik z dzielenia zawsze wychodzi zero. Jeżeli ktoś może pomów, będę bardzo zobowiązany. Kod programu niżej. Dziękuję za pomoc. #include <iostream> #include <limits> using namespace std;
int main( void ) { cout << " \t\t\t\t\t Pierwszy program, ktory moze dziala ..." << endl; cout << endl; long long Liczba_A, Liczba_B, Liczba_C, Liczba_D, Liczba_E, Liczba_F, Liczba_G, Liczba_H; cout << " \t\t\t\t\t\t Opcje wyboru ..." << endl; cout << endl; cout << "\t [1]Dodawanie" << endl; cout << "\t [2]Odejmowanie" << endl; cout << "\t [3]Mnozenie" << endl; cout << "\t [4]Dzielenie" << endl; cout << "\t [5]Wyjscie" << endl; int wybor; cin >> wybor; char wybor_1 = '1'; char wybor_2 = '2'; char wybor_3 = '3'; char wybor_4 = '4'; char wybor_5 = '5'; switch( wybor ) { case 1: char wybor_1; void dodawanie(); { cout << "Dodawanie dwoch liczb do siebie... " << endl; cout << endl; cout << "Pierszwa liczba: "; cin >> Liczba_A; bool a_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); cout << "Druga liczba: "; cin >> Liczba_B; bool b_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); long long Wynik_dodawania = Liczba_A + Liczba_B; cout << "Wynik_dodawania = " << Liczba_A + Liczba_B << endl; } break; case 2: char wybor_2; void odejmowanie(); { cout << "Odejmowanie dwoch liczb od siebie... " << endl; cout << endl; cout << "Pierszwa liczba: "; cin >> Liczba_C; bool c_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); cout << "Druga liczba: "; cin >> Liczba_D; bool d_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); long long Wynik_odejmowania = Liczba_C - Liczba_D; cout << "Wynik_odejmowania = " << Liczba_C - Liczba_D << endl; } break; case 3: char wybor_3; void mnozenie(); { cout << "Mnozenie dwoch liczb przez siebie ..." << endl; cout << endl; cout << "Pierwsza liczba: " << endl; cin >> Liczba_E; bool e_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); cout << "Druga liczba: " << endl; cin >> Liczba_F; bool f_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); long long Wynik_mnozenia = Liczba_E * Liczba_F; cout << "Wynik_mnozenia = " << Liczba_E * Liczba_F << endl; } break; case 4: char wybor_4; void dzielenie(); { cout << "Dzielenie dwoch liczb ..." << endl; cout << endl; cout << "Pierwsza liczba: " << endl; cin >> Liczba_G; bool g_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); cout << "Druga liczba: " << endl; cin >> Liczba_H; bool h_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); long long Wynik_dzielenia = Liczba_G % Liczba_H; cout << "Wynik_dzielenia = " << Liczba_G % Liczba_H << endl; } break; case 5: char wybor_5; break; default: cout << "Troche to trwalo, ale sie udalo :P" << endl; break; } if( wybor_5 ) { cout << "\t\t\t Milego dnia" << endl; } return 0; }
|
|
nanoant20 |
» 2021-09-25 23:53:13 long long Wynik_dzielenia = Liczba_G % Liczba_H; - typ jaki reprezentuje wynik nie jest typem zmiennoprzecinkowym - operator moduło nie jest operatorem dzielenia - w momencie deklaracji zmiennej powinno się ją zainicjalizować wartością chyba, że zmienna jest globalna wtedy jej wartość domyślna jest 0 //edit - w switch ... case'ie powinno znajdować się tylko wywołanie funkcji a nie jej definicja poczytaj co to jest prototypy funkcji i definicja funkcji- dobrym zwyczajem nazwy zmiennych jest pisać małymi literami - zrefaktoruj ten kod porządnie, i wróć tu |
|
omura Temat założony przez niniejszego użytkownika |
» 2021-09-26 11:53:14 Poprawiony kod programu. Operacje matematyczne działają bez problemu. #include <iostream> #include <limits> using namespace std;
int main( void ) { cout << " \t\t\t\t\t Pierwszy program, ktory moze dziala ... " << endl; cout << endl; float liczba_a, liczba_b, liczba_c, liczba_d, liczba_e, liczba_f, liczba_g, liczba_h; cout << " \t\t\t\t\t\t Opcje wyboru ..." << endl; cout << endl; cout << "\t [1]Dodawanie" << endl; cout << "\t [2]Odejmowanie" << endl; cout << "\t [3]Mnozenie" << endl; cout << "\t [4]Dzielenie" << endl; cout << "\t [5]Wyjscie" << endl; int wybor; cin >> wybor; char wybor_1 = '1'; char wybor_2 = '2'; char wybor_3 = '3'; char wybor_4 = '4'; char wybor_5 = '5'; switch( wybor ) { case 1: char wybor_1; void dodawanie(); break; case 2: char wybor_2; void odejmowanie(); break; case 3: char wybor_3; void mnozenie(); break; case 4: char wybor_4; void dzielenie(); break; case 5: char wybor_5; break; default: cout << "Troche to trwalo, ale sie udalo :P" << endl; break; } if( wybor_5 ) { cout << "\t\t\tMilego dnia" << endl; } void dodawanie(); { cout << "Dodawanie dwoch liczb do siebie... " << endl; cout << endl; cout << "Pierszwa liczba: "; cin >> liczba_a; bool a_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); cout << "Druga liczba: "; cin >> liczba_b; bool b_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); float Wynik_dodawania = liczba_a + liczba_b; cout << "Wynik_dodawania = " << liczba_a + liczba_b << endl; } void odejmowanie(); { cout << "Odejmowanie dwoch liczb od siebie... " << endl; cout << endl; cout << "Pierszwa liczba: "; cin >> liczba_c; bool c_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); cout << "Druga liczba: "; cin >> liczba_d; bool d_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); float Wynik_odejmowania = liczba_c - liczba_d; cout << "Wynik_odejmowania = " << liczba_c - liczba_d << endl; } void mnozenie(); { cout << "Mnozenie dwoch liczb przez siebie ..." << endl; cout << endl; cout << "Pierwsza liczba: " << endl; cin >> liczba_e; bool e_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); cout << "Druga liczba: " << endl; cin >> liczba_f; bool f_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); float Wynik_mnozenia = liczba_e * liczba_f; cout << "Wynik_mnozenia = " << liczba_e * liczba_f << endl; } void dzielenie(); { cout << "Dzielenie dwoch liczb ..." << endl; cout << endl; cout << "Pierwsza liczba: " << endl; cin >> liczba_g; bool g_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); cout << "Druga liczba: " << endl; cin >> liczba_h; bool h_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); double Wynik_dzielenia = liczba_g / liczba_h; cout << "Wynik_dzielenia = " << liczba_g / liczba_h << endl; } return 0; }
|
|
nanoant20 |
» 2021-09-26 13:42:59 nie do końca o to mi chodziło #include <iostream> #include <limits>
using namespace std;
void dodawanie(); void odejmowanie(); void mnozenie(); void dzielenie();
int main() { cout << " \t\t Pierwszy program, ktory moze dziala ... " << endl; cout << endl; cout << " \t\t Opcje wyboru ..." << endl; cout << endl; cout << "\t [1]Dodawanie" << endl; int wybor; cin >> wybor; switch( wybor ) { case 1: dodawanie(); break; case 2: default: cout << "Troche to trwalo, ale sie udalo :P" << endl; break; } getchar(); return 0; }
void dodawanie() { float liczba_a = 0, liczba_b = 0, wynik = 0; cout << "Dodawanie dwoch liczb do siebie... " << endl; cout << endl; cout << "Pierszwa liczba: "; cin >> liczba_a; bool a_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); cout << "Druga liczba: "; cin >> liczba_b; bool b_blad = cin.fail(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cin.clear(); wynik = liczba_a + liczba_b; cout << "Wynik_dodawania = " << wynik << endl; }
void odejmowanie() { }
void mnozenie() { }
void dzielenie() { }
W przyszłości postaraj się, żeby twoje funkcje wyglądały np. tak: double dodawanie( double a, double b ) { return a + b; }
|
|
omura Temat założony przez niniejszego użytkownika |
» 2021-09-26 16:32:47 Dziękuje. |
|
pekfos |
» 2021-09-26 18:00:31 W przyszłości postaraj się, żeby twoje funkcje wyglądały np. tak: I do czego w ogóle się tu przyczepiłeś? Jakiekolwiek dzielenie programu na funkcje jest dobre, jeśli poprawia czytelność i ogranicza powtórzenia. Co powinno było tu być wydzielone do osobnej funkcji, to wczytywanie liczby od użytkownika. Nie ma tam nawet obsługi błędów, a już jest 10 kopii tego kodu.. |
|
nanoant20 |
» 2021-09-26 21:43:24 Proszę o skasowanie moich postów, które i tak są uważane za amatorskie i niekompetentne, oraz usunięcie konta. |
|
pekfos |
» 2021-09-26 22:49:47 Kabel do internetu też przeciąć? Nigdzie nie napisałeś, co w funkcji powinno być, a co nie, więc twojego "tak powinny wyglądać funkcje" nie ma jak zrozumieć zgodnie z intencjami. |
|
« 1 » 2 3 |