W tej lekcji stworzymy prosty kalkulator, który działa w sposób iteracyjny – tzn. pozwala użytkownikowi na wielokrotne wykonywanie obliczeń w pętli, aż do momentu wyjścia z programu.
1. Struktura kalkulatora iteracyjnego
🔹 Kalkulator powinien:
✅ Pytać użytkownika o wybór operacji.
✅ Pobierać dwie liczby i wykonywać obliczenia.
✅ Pozwalać na powtarzanie operacji aż do wyjścia.
✅ Obsługiwać błędy i niepoprawne dane.
2. Implementacja podstawowego kalkulatora iteracyjnego
#include <iostream>
using namespace std;
int main() {
char operacja;
double a, b;
while (true) {
// Wyświetlenie dostępnych operacji
cout << "\n--- Kalkulator ---\n";
cout << "Wybierz operację (+, -, *, /) lub 'q' aby wyjść: ";
cin >> operacja;
// Sprawdzenie czy użytkownik chce zakończyć działanie kalkulatora
if (operacja == 'q' || operacja == 'Q') {
cout << "Zamykanie kalkulatora...\n";
break; // Zakończenie pętli
}
// Pobranie dwóch liczb
cout << "Podaj pierwszą liczbę: ";
cin >> a;
cout << "Podaj drugą liczbę: ";
cin >> b;
// Wykonanie wybranej operacji
switch (operacja) {
case '+':
cout << "Wynik: " << a + b << endl;
break;
case '-':
cout << "Wynik: " << a - b << endl;
break;
case '*':
cout << "Wynik: " << a * b << endl;
break;
case '/':
if (b != 0) {
cout << "Wynik: " << a / b << endl;
} else {
cout << "Błąd! Dzielenie przez zero jest niedozwolone.\n";
}
break;
default:
cout << "Niepoprawna operacja! Spróbuj ponownie.\n";
}
}
return 0;
}
3. Jak działa kalkulator?
🔹 Pętla while (true)
zapewnia iteracyjność – kalkulator działa w nieskończoność, dopóki użytkownik nie wpisze 'q'
.
🔹 Użycie switch-case
pozwala na łatwe zarządzanie operacjami matematycznymi.
🔹 Obsługa błędu dzielenia przez zero zapobiega awariom.
🔹 Kalkulator obsługuje operacje: +
, -
, *
, /
.
4. Rozszerzona wersja – obsługa większej ilości błędów
Dodamy zabezpieczenie na wypadek błędnych danych wejściowych:
#include <iostream>
using namespace std;
int main() {
char operacja;
double a, b;
while (true) {
cout << "\n--- Kalkulator ---\n";
cout << "Wybierz operację (+, -, *, /) lub 'q' aby wyjść: ";
cin >> operacja;
if (operacja == 'q' || operacja == 'Q') {
cout << "Zamykanie kalkulatora...\n";
break;
}
cout << "Podaj pierwszą liczbę: ";
if (!(cin >> a)) {
cout << "Błąd! Wprowadzono nieprawidłową liczbę.\n";
cin.clear(); // Czyścimy błąd strumienia
cin.ignore(1000, '\n'); // Pomijamy błędne dane
continue;
}
cout << "Podaj drugą liczbę: ";
if (!(cin >> b)) {
cout << "Błąd! Wprowadzono nieprawidłową liczbę.\n";
cin.clear();
cin.ignore(1000, '\n');
continue;
}
switch (operacja) {
case '+': cout << "Wynik: " << a + b << endl; break;
case '-': cout << "Wynik: " << a - b << endl; break;
case '*': cout << "Wynik: " << a * b << endl; break;
case '/':
if (b != 0) cout << "Wynik: " << a / b << endl;
else cout << "Błąd! Dzielenie przez zero jest niedozwolone.\n";
break;
default:
cout << "Niepoprawna operacja! Spróbuj ponownie.\n";
}
}
return 0;
}
✅ Dodatkowe zabezpieczenia:
🔹 Jeśli użytkownik wpisze coś innego niż liczbę, program czyści błędne dane i ponawia pytanie.
🔹 Obsługa błędów zapobiega awarii programu przy nieprawidłowym wejściu.
5. Podsumowanie
✅ Kalkulator działa iteracyjnie – użytkownik może wykonywać operacje wielokrotnie.
✅ Obsługuje operacje +
, -
, *
, /
.
✅ Instrukcja switch-case
pozwala na łatwe zarządzanie działaniami.
✅ Pętla while (true)
pozwala na ciągłe działanie kalkulatora.
✅ Obsługa błędów chroni przed awariami (np. dzielenie przez zero, błędne dane).