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

Problem z wynikiem dzielenia

Ostatnio zmodyfikowano 2021-10-27 17:04
Autor Wiadomość
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.
C/C++
#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;
}
P-178981
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
P-178982
omura
Temat założony przez niniejszego użytkownika
» 2021-09-26 11:53:14
Poprawiony kod programu. Operacje matematyczne działają bez problemu.
C/C++
#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;
}
P-178983
nanoant20
» 2021-09-26 13:42:59
nie do końca o to mi chodziło

C/C++
#include <iostream>
#include <limits>

using namespace std;

// Prototyp funkcji
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;
   
//itd.
   
   
int wybor;
   
cin >> wybor;
   
   
switch( wybor )
   
{
   
case 1:
       
dodawanie();
       
break;
       
   
case 2:
       
//itd.
       
   
default:
       
cout << "Troche to trwalo, ale sie udalo :P" << endl;
       
break;
   
}
   
   
   
getchar();
   
return 0;
}

//Definicja funkcji
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:
C/C++
double dodawanie( double a, double b )
{
   
return a + b;
}
P-178984
omura
Temat założony przez niniejszego użytkownika
» 2021-09-26 16:32:47
Dziękuje.
P-178985
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..
P-178986
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.
P-178987
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.
P-178988
« 1 » 2 3
  Strona 1 z 3 Następna strona