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ść
nanoant20
» 2021-09-27 15:38:52
C/C++
#include <iostream>
#include <limits>

using namespace std;

// Prototyp funkcji
int dodawanie( int, int );
int odejmowanie( int, int );
int mnozenie( int, int );
double dzielenie( int, int );
int wczytaj_cyfre();
void czysc_strumien();

int main()
{
   
int liczba_a { 0 }, liczba_b { 0 }, wybor { 0 };
   
double wynik { 0 };
   
bool infinity = true;
   
   
for(; infinity; )
   
{
       
       
cout << " \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;
       
       
cout << "\n\tWybierz dzialanie : ";
       
wybor = wczytaj_cyfre();
       
       
if( wybor >= 1 && wybor < 5 )
       
{
           
cout << "\tWprowadz pierwsza liczbe: ";
           
liczba_a = wczytaj_cyfre();
           
czysc_strumien();
           
cout << "\tWprowadz druga liczbe: ";
           
liczba_b = wczytaj_cyfre();
       
}
       
       
switch( wybor )
       
{
       
case 1:
           
cout << "\n\tDodawanie dwoch liczb do siebie... " << endl;
           
wynik = dodawanie( liczba_a, liczba_b );
           
cout << "\t" << liczba_a << " + " << liczba_b << " = " << wynik << "\n\n";
           
break;
           
       
case 2:
           
cout << "\n\tOdejmowanie dwoch liczb od siebie... " << endl;
           
wynik = odejmowanie( liczba_a, liczba_b );
           
cout << "\t" << liczba_a << " - " << liczba_b << " = " << wynik << "\n\n";
           
break;
           
       
case 3:
           
cout << "\n\tMnozenie dwoch liczb przez siebie ..." << endl;
           
wynik = mnozenie( liczba_a, liczba_b );
           
cout << "\t" << liczba_a << " * " << liczba_b << " = " << wynik << "\n\n";
           
break;
           
       
case 4:
           
cout << "\n\tDzielenie dwoch liczb ..." << endl;
           
wynik = dzielenie( liczba_a, liczba_b );
           
cout << "\t" << liczba_a << " / " << liczba_b << " = " << wynik << "\n\n";
           
break;
           
       
case 5:
           
cout << "\n\t\t\tMilego dnia";
           
infinity = false;
           
break;
           
       
default:
           
cout << "\tMożesz wybrać tylko od 1 do 5" << "\n\n";
           
break;
       
}
       
    }
   
std::cout << "\n\t\t\tKoniec programu - Bye" << endl;
   
getchar();
   
return 0;
}

//Definicja funkcji
int dodawanie( int a, int b )
{
   
return a + b;
}

int odejmowanie( int a, int b )
{
   
return a - b;
}

int mnozenie( int a, int b )
{
   
return a * b;
}

double dzielenie( int a, int b )
{
   
double wynik = 0;
   
if( b == 0 )
   
{
       
cout << "\tDzielenie przez zero jest nieokreślone." << endl;
   
}
   
wynik = a /( double ) b;
   
return wynik;
}
int wczytaj_cyfre()
{
   
int x;
   
while( !( cin >> x ) )
   
{
       
if( cin.fail() )
       
{
           
cout << "\tWprowadzony znak nie jest cyfra/liczba" << endl;
           
cout << "\tProsze podac cyfre : ";
           
//czyscimy strumien wejsciowy std::cin
           
czysc_strumien();
           
continue;
       
}
    }
   
   
return x;
}
void czysc_strumien()
{
   
//czyscimy strumien wejsciowy std::cin
   
cin.clear();
   
cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
}
P-178989
pekfos
» 2021-09-27 17:39:22
Cały czas mi chodzi o to, że jedna Twoja rada jest nie do zrozumienia dla początkującego, bo rzuciłeś ją bez żadnego wyjaśnienia. Naprawdę nie poprawiasz sytuacji.
P-178990
nanoant20
» 2021-09-27 18:41:00
kilka słów wyjaśnienia:
Funkcje, tworzy się dla większej czytelności fragmentu programu.
Funkcje w programie powinny być w założeniu zbliżone do funkcji matematycznych
i operować na danych wejściowych
Nazwa funkcji jak i jej typ powinny jasno wskazywać na cel jaki ma wykonać.
Funkcje typu void to takie "display messages" krótko mówiąc służą raczej do wyświetlania wiadomości.
P-178991
omura
Temat założony przez niniejszego użytkownika
» 2021-10-22 19:55:40
Witam. Uprościłem kod programu do wersji poniżej. Funkcje czyść strumień, wczytaj_1, wczytaj_2, dodawanie, odejmowanie, mnożenie i dzielenie umieściłem przed główną funkcją programu. Stworzyłem funkcje wczytaj_1 i wczytaj_2 w celu wczytania wartości liczb wprowadzonych przez użytkownika. Obie funkcje zwracają wartości a i b, które są następnie wczytywane do pozostałych czterech funkcji (+,-,*,/). Mam jednak problem z działanie programu, konkretnie błąd występuje w "menu" programu, tak mi się wydaje. Po uruchomieniu programu i wybraniu opcji 1, następuje wyjście z programu. Identyczna sytuacja występuje również przy wyborach 2,3,4. Wyjście z programu powinno tylko nastąpić po wybraniu opcji 5. Jeżeli ktoś może niech sprawdzi poniższy program. Wskazówki jak naprawić program mile widziane. Dziękuje.

C/C++
#include <iostream>
#include <limits>
using namespace std;

float wczytaj_1()
{
   
float a;
   
cin >> a;
   
   
return a;
}
float wczytaj_2()
{
   
float b;
   
cin >> b;
   
   
return b;
}
int sprawdz_czy_liczba()
{
   
int x;
   
while( !( cin >> x ) )
   
{
       
if( cin.fail() )
       
{
           
cout << "\tWprowadzony znak nie jest liczba." << endl;
           
cout << "\tWprowadz liczbe." << endl;
           
       
}
    }
   
return x;
}
void czysc_strumien()
{
   
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
   
cin.clear();
}
float dodawanie( float liczba_a, float liczba_b, float Wynik_dodawania )
{
   
cout << "Dodawanie dwoch liczb do siebie... " << endl;
   
cout << endl;
   
   
cout << "Pierszwa liczba: ";
   
wczytaj_1();
   
czysc_strumien();
   
liczba_a = wczytaj_1();
   
cout << "Liczba: " << liczba_a << endl;
   
   
cout << "Druga liczba: ";
   
wczytaj_2();
   
czysc_strumien();
   
liczba_b = wczytaj_2();
   
cout << "Liczba: " << liczba_b << endl;
   
   
Wynik_dodawania = liczba_a + liczba_b;
   
cout << "Wynik_dodawania = " << liczba_a + liczba_b << endl;
   
   
return liczba_a + liczba_b;
   
}
float odejmowanie( float liczba_c, float liczba_d, float Wynik_odejmowania )
{
   
cout << "Odejmowanie dwoch liczb od siebie... " << endl;
   
cout << endl;
   
   
cout << "Pierszwa liczba: ";
   
wczytaj_1();
   
czysc_strumien();
   
liczba_c = wczytaj_1();
   
cout << "Liczba: " << liczba_c << endl;
   
   
cout << "Druga liczba: ";
   
wczytaj_2();
   
czysc_strumien();
   
liczba_d = wczytaj_2();
   
cout << "Liczba: " << liczba_d << endl;
   
   
Wynik_odejmowania = liczba_c - liczba_d;
   
cout << "Wynik_odejmowania = " << liczba_c - liczba_d << endl;
   
   
return liczba_c - liczba_d;
}
float mnozenie( float liczba_e, float liczba_f, float Wynik_mnozenia )
{
   
cout << "Mnozenie dwoch liczb przez siebie ..." << endl;
   
cout << endl;
   
   
cout << "Pierwsza liczba: " << endl;
   
wczytaj_1();
   
czysc_strumien();
   
liczba_e = wczytaj_1();
   
cout << "Liczba: " << liczba_e << endl;
   
   
cout << "Druga liczba: " << endl;
   
wczytaj_2();
   
czysc_strumien();
   
liczba_f = wczytaj_2();
   
cout << "Liczba: " << liczba_f << endl;
   
   
Wynik_mnozenia = liczba_e * liczba_f;
   
cout << "Wynik_mnozenia = " << liczba_e * liczba_f << endl;
   
   
return liczba_e * liczba_f;
}
double dzielenie( double liczba_g, double liczba_h, double Wynik_dzielenia )
{
   
cout << "Dzielenie dwoch liczb ..." << endl;
   
cout << endl;
   
   
cout << "Pierwsza liczba: " << endl;
   
wczytaj_1();
   
czysc_strumien();
   
liczba_g = wczytaj_1();
   
cout << "Liczba: " << liczba_g << endl;
   
   
cout << "Druga liczba: " << endl;
   
wczytaj_2();
   
czysc_strumien();
   
liczba_h = wczytaj_2();
   
   
Wynik_dzielenia = liczba_g / liczba_h;
   
Wynik_dzielenia = 0;
   
if( liczba_h == 0 )
   
{
       
cout << "\tDzielisz przez zero, zawsze wyjdzie zero." << endl;
   
}
   
   
cout << "Wynik_dzielenia = " << liczba_g / liczba_h << endl;
   
   
return Wynik_dzielenia;
}


int main()
{
   
cout << " \t\t\t\t\t Pierwszy program, ktory moze dziala ... " << endl;
   
cout << endl;
   
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;
   
wybor = sprawdz_czy_liczba();
   
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;
       
float dodawanie();
       
break;
       
   
case 2:
       
char wybor_2;
       
float odejmowanie();
       
break;
       
   
case 3:
       
char wybor_3;
       
float mnozenie();
       
break;
       
   
case 4:
       
char wybor_4;
       
double dzielenie();
       
break;
       
   
case 5:
       
char wybor_5;
       
break;
       
   
default:
       
cout << "Wybór od 1 - 5." << endl;
       
break;
   
}
   
   
if( wybor_5 )
   
{
       
       
cout << "\t\t\tMilego dnia" << endl;
   
}
   
   
return 0;
}
P-179021
nanoant20
» 2021-10-23 10:14:45
WTF? zamiast zgadywać przeczytaj ze zrozumieniem
Funkcje - pierwsze starcie
Funkcje, a słowo kluczowe return
P-179022
omura
Temat założony przez niniejszego użytkownika
» 2021-10-23 11:52:49
Poprawiony, bardziej czytelny.
C/C++
#include <iostream>
#include <limits>
using namespace std;

float wczytaj_1()
{
   
float a;
   
cin >> a;
   
return a;
}
float wczytaj_2()
{
   
float b;
   
cin >> b;
   
return b;
}

void czysc_strumien()
{
   
bool blad = cin.fail();
   
cin.clear();
   
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
   
}
float dodawanie()
{
   
cout << "Dodawanie dwoch liczb do siebie... " << endl;
   
cout << endl;
   
cout << "Pierszwa liczba: ";
   
wczytaj_1();
   
czysc_strumien();
   
float liczba_a = wczytaj_1();
   
   
cout << "Druga liczba: ";
   
wczytaj_2();
   
czysc_strumien();
   
float liczba_b = wczytaj_2();
   
   
float Wynik_dodawania = liczba_a + liczba_b;
   
cout << "Wynik_dodawania = " << liczba_a + liczba_b << endl;
   
   
return 0;
}
float odejmowanie()
{
   
cout << "Odejmowanie dwoch liczb od siebie... " << endl;
   
cout << endl;
   
cout << "Pierszwa liczba: ";
   
wczytaj_1();
   
czysc_strumien();
   
float liczba_c = wczytaj_1();
   
   
cout << "Druga liczba: ";
   
wczytaj_2();
   
czysc_strumien();
   
float liczba_d = wczytaj_2();
   
   
float Wynik_odejmowania = liczba_c - liczba_d;
   
cout << "Wynik_odejmowania = " << liczba_c - liczba_d << endl;
   
   
return 0;
}
float mnozenie()
{
   
cout << "Mnozenie dwoch liczb przez siebie ..." << endl;
   
cout << endl;
   
cout << "Pierwsza liczba: " << endl;
   
wczytaj_1();
   
czysc_strumien();
   
float liczba_e = wczytaj_1();
   
   
cout << "Druga liczba: " << endl;
   
wczytaj_2();
   
czysc_strumien();
   
float liczba_f = wczytaj_2();
   
   
float Wynik_mnozenia = liczba_e * liczba_f;
   
cout << "Wynik_mnozenia = " << liczba_e * liczba_f << endl;
   
   
return 0;
}
double dzielenie()
{
   
cout << "Dzielenie dwoch liczb ..." << endl;
   
cout << endl;
   
cout << "Pierwsza liczba: " << endl;
   
wczytaj_1();
   
czysc_strumien();
   
double liczba_g = wczytaj_1();
   
   
cout << "Druga liczba: " << endl;
   
wczytaj_2();
   
czysc_strumien();
   
double liczba_h = wczytaj_2();
   
   
double Wynik_dzielenia = liczba_g / liczba_h;
   
Wynik_dzielenia = 0;
   
if( liczba_h == 0 )
   
{
       
cout << "\tDzielisz przez zero, zawsze wyjdzie zero." << endl;
   
}
   
   
cout << "Wynik_dzielenia = " << liczba_g / liczba_h << endl;
   
   
return 0;
}

int main()
{
   
cout << " \t\t\t\t\t Pierwszy program, ktory moze dziala ... " << endl;
   
cout << endl;
   
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;
       
dodawanie();
       
break;
   
case 2:
       
char wybor_2;
       
odejmowanie();
       
break;
   
case 3:
       
char wybor_3;
       
mnozenie();
       
break;
   
case 4:
       
char wybor_4;
       
dzielenie();
       
break;
   
case 5:
       
char wybor_5;
       
break;
   
default:
       
cout << "Wybór od 1 - 5." << endl;
       
break;
   
}
   
if( wybor_5 )
   
{
       
cout << "\t\t\tMilego dnia" << endl;
   
}
   
   
return 0;
}
P-179023
nanoant20
» 2021-10-23 13:05:51
@omura uparłeś się na swoje rozwiązanie, niech Ci będzie

  • w listingu masz 2 funkcje float wczytaj_1() i float wczytaj_2(), jeśli byś musiał wczytać np. 100 liczby to byś napisał sto takich funkcji?
  • co Twoim zdaniem robi "bool blad = cin.fail();" w funkcji void czysc_strumien()
  • we wszystkich 4 funkcjach float+,-,*,/() wywołujesz podwójnie (dwukrotnie) funkcje wczytaj_1() i wczytaj_2() - po co?
  • wszystkie 4 funkcje float+,-,*,/() są typu float i zwracasz nimi ZERO, ponieważ i tak z tym wynikiem już dalej nic nie robisz w kodzie, to czy nie uważasz że te funkcje powinny być typu void.
  • w switch w każdym case jest char wybor_1; - co Twoim zdaniem to robi


P-179024
omura
Temat założony przez niniejszego użytkownika
» 2021-10-26 12:39:10
1) funkcje float wczytaj_1() i float wczytaj_2() zastąpiłem jedną wspólną funkcją float_wczytaj(). Wczytuje ona liczba a i b, oraz zwraca wartości a i b użyte w pozostałych funkcjach.
2) bool blad = cin.fail() w funkcji czysc_strumien() nic nie robi, zapis został usunięty.
3) taki miałem tok rozumowania pisząc te funkcje, dla mnie było to mniej kłopotliwe. Czytaj pkt. 1.
4) zmienione na funkcje typu void.
5) w każdym case jest char wybor_1 - wybor_5, ponieważ inaczej nie udało mi się stworzyć menu w tym przypadku.
6) jeżeli można to prościej napisać proszę o wzór.
7) kod programu może wydawać się nieczytelny, napisany bez przemyślenia, itp., itd. sorry za to. Dopiero stawiam pierwsze kroki w C++ i dużo zagadnień jest dla mnie niezrozumiałych, trudnych. Każdy jest w czymś dobry, ja C++ traktuję jako hobby, mimo to i tak staram się to jakoś ogarnąć. "nanoant20  uparłeś się na swoje rozwiązanie, niech Ci będzie" napisałeś, że się uparłem na moje rozwiązanie, wcale się nie uparłem na ten sposób rozwiązania, tylko nie mogłem sobie wyobrazić jak to by miało być inaczej. Wynika to z tego względu, że dopiero zaczynam z C++.
8) kod programu
C/C++
#include <iostream>
#include <limits>
using namespace std;

void czysc_strumien()
{
   
cin.clear();
   
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
   
}
float wczytaj()
{
   
float a, b;
   
cout << "Pierwsza liczba: " << endl;
   
cin >> a;
   
   
cout << "Druga liczba: " << endl;
   
cin >> b;
   
czysc_strumien();
   
   
return a, b;
}

void dodawanie()
{
   
cout << "Dodawanie dwoch liczb do siebie... " << endl;
   
cout << endl;
   
wczytaj();
   
czysc_strumien();
   
float liczba_a = wczytaj();
   
float liczba_b = wczytaj();
   
   
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;
   
wczytaj();
   
czysc_strumien();
   
float liczba_c = wczytaj();
   
float liczba_d = wczytaj();
   
   
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;
   
wczytaj();
   
czysc_strumien();
   
float liczba_e = wczytaj();
   
float liczba_f = wczytaj();
   
   
float Wynik_mnozenia = liczba_e * liczba_f;
   
cout << "Wynik_mnozenia = " << liczba_e * liczba_f << endl;
   
}
void dzielenie()
{
   
cout << "Dzielenie dwoch liczb ..." << endl;
   
cout << endl;
   
wczytaj();
   
czysc_strumien();
   
double liczba_g = wczytaj();
   
double liczba_h = wczytaj();
   
   
double Wynik_dzielenia = liczba_g / liczba_h;
   
Wynik_dzielenia = 0;
   
if( liczba_h == 0 )
   
{
       
cout << "\tDzielisz przez zero, zawsze wyjdzie zero." << endl;
   
}
   
   
cout << "Wynik_dzielenia = " << liczba_g / liczba_h << endl;
   
}

int main()
{
   
cout << " \t\t\t\t\t Pierwszy program, ktory moze dziala ... " << endl;
   
cout << endl;
   
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;
       
dodawanie();
       
break;
   
case 2:
       
char wybor_2;
       
odejmowanie();
       
break;
   
case 3:
       
char wybor_3;
       
mnozenie();
       
break;
   
case 4:
       
char wybor_4;
       
dzielenie();
       
break;
   
case 5:
       
char wybor_5;
       
break;
   
default:
       
cout << "Wybór od 1 - 5." << endl;
       
break;
   
}
   
if( wybor_5 )
   
{
       
cout << "\t\t\tMilego dnia" << endl;
   
}
   
   
return 0;
}
P-179026
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona