Prosty kalkulator - jak go zabezpieczyć przed dzieleniem przez 0

0

Witam.
Mam do napisanie prosty kalkulator w C/C++, który będzie: dodawał, odejmował, dzielił i mnożył, oraz będzie zabezpieczony przed dzieleniem przez 0.
I właśnie z tym ostatnim mam problem, czy ktoś pomoże?
I jeszcze jedna sprawa: czy można stworzyć taki kalkulator używając do tego pętli? Jeżeli tak, to w jaki sposób?

#include <iostream>

using namespace std;
double dzialanie;
double liczba1;
double liczba2;

int main()
{
    cout << "[1] Dodawanie" << endl;
    cout << "[2] Odejmowanie" << endl;
    cout << "[3] Mnozenie" << endl;
    cout << "[4] Dzielenie" << endl;
    cout << "[5] Rezygnuj" << endl;

    cout << "Co chcesz zrobic? ";
    cin >> dzialanie;

    if (dzialanie == 1)
    {
        cout << "Podaj pierwsza liczbe calkowita: ";
        cin >> liczba1;

        cout << "Podaj druga liczba calkowita: ";
        cin >> liczba2;

        cout << "Ich suma wynosi: " << liczba1 + liczba2;
    }
    else if (dzialanie == 2)
    {
        cout << "Podaj pierwsza liczbe calkowita: ";
        cin >> liczba1;

        cout << "Podaj druga liczba calkowita: ";
        cin >> liczba2;

        cout << "Ich roznica wynosi: " << liczba1 - liczba2;
    }
    else if (dzialanie == 3)
    {
        cout << "Podaj pierwsza liczbe calkowita: ";
        cin >> liczba1;

        cout << "Podaj druga liczba calkowita: ";
        cin >> liczba2;

        cout << "Ich iloczyn wynosi: " << liczba1 * liczba2;
    }
    else if (dzialanie == 4)
    {
        cout << "Podaj pierwsza liczbe calkowita: ";
        cin >> liczba1;

        cout << "Podaj druga liczba calkowita: ";
        cin >> liczba2;

        cout << "Ich iloraz wynosi: " << liczba1 / liczba2;
    }
    else if (dzialanie == 5)
    {
        cout << "Koniec programu.";
    }

    return 0;
}
0
if(liczba2 == 0)
{
    cout << "Zepsułeś komputer. Podzieliłeś przez zero.";
}
1
if (liczba2 == 0)
{
  cout << "Nie mozna dzielic przez 0." << endl ;
  return 1 ;
}

Jak chcesz się zabawiać z liczbami całkowitymi, to używaj intów. I przede wszystkim zmienne powinny być lokalne, nie globalne (tj. trzymaj je w mainie).

Inzynier napisał(a)

czy można stworzyć taki kalkulator używając do tego pętli?

Tak.

Inzynier napisał(a)

Jeżeli tak, to w jaki sposób?

while(1)
{
  // kod Twojego kalkulatora

  if (dzialanie == 5)
  {
    cout << "Naracho!" << endl ;
    break ;
  }
}
0

1.Dlaczego te zmienne są globalne?
2.Nie wyczuwasz, że coś jest nie tak, gdy musisz cztery razy wykonać kopiuj-wklej?
3.Porównuj nie przez ==, tylko z epsilonem, ponieważ masz tam doubley.

0

Nie używam c/c++ ale w gogle aż roi się od rozwiązań, nawet w języku polskim...

1
Inzynier napisał(a):

...dzieleniem przez 0.
I właśnie z tym ostatnim mam problem, czy ktoś pomoże?

cout << "Podaj druga liczba calkowita: ";
cin >> liczba2;
if (liczba2 == 0)
    cout << "Nie dziele przez 0. Foch!" << endl;
else
    cout << "Ich iloraz wynosi: " << liczba1 / liczba2;
Inzynier napisał(a):

czy można stworzyć taki kalkulator używając do tego pętli?

do
{
    cout << "Co chcesz zrobic? ";
    cin >> dzialanie;
    .....
} while (dzialanie != 5);

W tym przypadku zamiast if..else if można używać switch. Pod warunkiem, że dzialanie zostanie najpierw zmienione na int.

6

Po co sobie tak zycie komplikujesz ciagle kopiujac ten sam tekst? :\

#include <iostream>
#include <vector>
#include <utility>
#include <functional>
using namespace std;

int main() {
	vector<pair<string,function<int(int,int)>>> menu = {
		make_pair("Suma", [](int a, int b) { return a + b; }),
		make_pair("Roznica", [](int a, int b) { return a - b; }),
		make_pair("Iloczyn", [](int a, int b) { return a * b; }),
		make_pair("Iloraz", [](int a, int b) { return b == 0 ? -1 : a / b; })
	};
	int input, a, b;
	
	cin >> input >> a >> b;
	
	cout << menu[input - 1].first << ": " << menu[input - 1].second(a, b) << endl;
	
	return 0;
}
0

Witam. Wklejam link do poprawionego kodu, po zabezpieczeniu przed dzieleniem przez 0, może komuś się przyda.
http://4programmers.net/Pastebin/3440
Oczywiście dodałem do kodu pętle, ale tego już nie wklejam, bo nie widzę potrzeby.
Co do tego co wkleił n0name_l to szczerze jeszcze nie rozumiem, ale mam nadzieję że z czasem zrozumiem.
Dzięki wszystkim za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1