| 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 |