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

Kalkulator - lekcja 15.

Ostatnio zmodyfikowano 2016-08-28 17:46
Autor Wiadomość
bartinio07
Temat założony przez niniejszego użytkownika
Kalkulator - lekcja 15.
» 2016-08-25 00:27:28
Witam,
mam problem z zadaniem domowym:
Napisz prosty kalkulator, który będzie potrafił dodawać, odejmować, mnożyć i dzielić. Program ten ma działać następująco:
1. Wypisuje obecny wynik
2. Wprowadź liczbę
3. Wybierz działanie (jeżeli liczba różna od 0)
4. Wykonaj obliczenia (jeżeli liczba różna od 0)
5. Wróć do kroku 1.
6. Jeżeli wprowadzoną liczbą jest 0, zakończ program.

Napisałem taki program:
C/C++
#include <iostream>
using namespace std;
int main()
{
    int liczba;
    int dzialanie;
    int wynik = 10;
    bool zabezpieczenie1, zabezpieczenie2;
    cout << "\tWitaj w moim kalkulatorze" << endl << endl;
    cout << "Obecny wynik to: " << wynik << endl;
   
    do
    {
        cout << "Wprowadz liczbe: ";
        cin >> liczba;
        zabezpieczenie1 = cin.good();
        cin.clear();
        cin.sync();
       
        if( zabezpieczenie1 == cin.fail() )
             cout << "Wprowadzona liczba jest nieprawidlowa" << endl;
       
       
       
        if( liczba != 0 )
        {
            cout << "[1] Dodawanie" << endl;
            cout << "[2] Odejmowanie" << endl;
            cout << "[3] Mnozenie" << endl;
            cout << "[4] Dzielenie" << endl;
            cout << "[5] Rezygnuj" << endl;
            cout << "Wybierz dzialanie, jakie chcesz wykonac: ";
            cin >> dzialanie;
            zabezpieczenie2 = cin.good();
            cin.clear();
            cin.sync();
           
            switch( dzialanie )
            {
            case 1:
                wynik = wynik + liczba;
                cout << "Obecny wynik to: " << wynik << endl;
                break;
            case 2:
                wynik = wynik - liczba;
                cout << "Obecny wynik to: " << wynik << endl;
                break;
            case 3:
                wynik = wynik * liczba;
                cout << "Obecny wynik to: " << wynik << endl;
                break;
            case 4:
                wynik = wynik / liczba;
                cout << "Obecny wynik to: " << wynik << endl;
                break;
               
            }
        }
        if( zabezpieczenie2 == cin.fail() )
             cout << "Nieprawidlowe dzialanie" << endl;
       
        if( dzialanie == 5 )
        {
            cout << "Zrezygnowales" << endl;
            return 0;
        }
       
       
       
       
    } while( zabezpieczenie1 == cin.fail(), zabezpieczenie2 == cin.fail(), 0 < dzialanie <= 5 );
   
   
   
    return 0;
}

Wszystko działa, jednak nie spełniłem punktu 6. - jeśli wpiszę 0 program nie kończy się, lecz pętla się powtarza, i na tym właśnie polega mój problem. Co powinienem zrobić, aby program po wpisaniu 0 zakończył się?
P-151081
carlosmay
» 2016-08-25 08:30:01
while( zabezpieczenie1 == cin.fail(), zabezpieczenie2 == cin.fail(), 0 < dzialanie <= 5 );
?
P-151086
kistel66
» 2016-08-25 11:51:04
while( zabezpieczenie1 == cin.fail(), zabezpieczenie2 == cin.fail(), 0 < dzialanie <= 5 );

Wut?

Łatwiej byłoby chyba:
while( liczba != 0 );
P-151090
bartinio07
Temat założony przez niniejszego użytkownika
» 2016-08-25 16:00:19
Próbowałem już z warunkiem
while( liczba = !0 );
, ale nadal działa tak samo - po wpisaniu zera program się nie kończy, tylko pętla powtarza się.
P-151105
michal11
» 2016-08-25 16:26:21
= !
 to nie to samo co
!=
P-151107
bartinio07
Temat założony przez niniejszego użytkownika
» 2016-08-25 19:10:19
Sorry, błąd przez nieuwagę. Teraz po wpisaniu tekstu zamiast liczby albo działania, program kończy się, zamiast powtórzenia pętli.
P-151112
kistel66
» 2016-08-25 19:24:01
Przykładowa kontrola błędu:
C/C++
//dajesz w miejsce, gdzie wyczytywales liczbe
while( !( cin >> liczba ) ) // poki strumien jest w stanie bledu...
{
    cout << endl << "Blad, podaj poprawna liczbe: ";
    cin.clear();
    cin.sync();
   
}

Poza tym w switchu nie masz żadnego default, co jak ktoś wpisze liczbę większą od pięć?
P-151113
merkuriusz
moze tak?
» 2016-08-27 14:15:49
C/C++
#include <iostream>
#include <cstdlib>

using namespace std;

float liczba, wynik = 33;
int dzialanie;

int main()
{
    cout << "Witam w zabawie z kalulatorem." << endl;
    do
    {
       
        cout << "Aktualny wynik = " << wynik << endl;
        cout << "Wprowadz dowolna liczbe: ";
        cin.clear();
        cin.sync();
        cin >> liczba;
       
        if( cin.good() )
        {
           
            if( liczba != 0 )
            {
                cout << "Wybierz dzialanie: " << endl;
                cout << "[1] dodawania" << endl;
                cout << "[2] odejmowanie" << endl;
                cout << "[3] mnozenie" << endl;
                cout << "[4] dzielenie" << endl;
                cout << "[5] rezygnuje" << endl;
                cin.clear();
                cin.sync();
                cin >> dzialanie;
                switch( dzialanie )
                {
                case 1: wynik += liczba; break;
                case 2: wynik -= liczba; break;
                case 3: wynik *= liczba; break;
                case 4: wynik /= liczba; break;
                case 5: exit( 0 ); break;
                    default: cout << "Nieprawidlowe dzialanie " << endl;
                }
            } else cout << "Wybrales '0'. Pa pa";
           
        } else
        {
            cout << "Nie podano liczby. Sprobuj ponownie." << endl;
            liczba = 1;
        }
    }
    while( liczba != 0 );
   
    return 0;
}
P-151139
« 1 » 2
  Strona 1 z 2 Następna strona