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

Zadanie 2 - pętla do...while (kalkulator)

Ostatnio zmodyfikowano 2014-06-19 12:51
Autor Wiadomość
Haryen
Temat założony przez niniejszego użytkownika
Zadanie 2 - pętla do...while (kalkulator)
» 2014-06-18 16:40:37
Cześć! Wykonałem zadanie 2 z pętli do..while.
Treść:
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.
Zabezpiecz wcześniej napisany kalkulator przed podawaniem niepoprawnych liczb i operacji. Wykorzystaj wiedzę zdobytą z pierwszego zadania pracy domowej niniejszego rozdziału. Zabezpiecz również w analogiczny sposób przed możliwością wyboru nieprawidłowego działania.

C/C++
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    int wybor;
    double liczba, wynik = 0;
   
    do
    {
        cout << "Obecny wynik: " << wynik << endl;
       
        cout << "[1] Dodawanie" << endl;
        cout << "[2] Odejmowanie" << endl;
        cout << "[3] Mnozenie" << endl;
        cout << "[4] Dzielenie" << endl;
        cout << "[5] Rezygnuj" << endl;
        cout << endl;
       
        cout << "Podaj liczbe: ";
        while( !( cin >> liczba ) )
        {
            cerr << "Zly znak!" << endl;
            cout << "Podaj prawidlowa liczbe: ";
            cin.clear();
            cin.sync();
        }
        if( liczba == 0 ) //*TEN IF
        {
            system( "cls" );
            cout << "Do widzenia!" << endl;
            exit( 0 );
        }
       
        cout << "Wybierz dzialanie: ";
        while( !( cin >> wybor ) )
        {
            cerr << "Zly znak!" << endl;
            cout << "Wybierz jeszcze raz ";
            cin.clear();
            cin.sync();
        }
       
        switch( wybor )
        {
        case 1:
            {
                wynik += liczba;
                break;
            }
        case 2:
            {
                wynik -= liczba;
                break;
            }
        case 3:
            {
                wynik *= liczba;
                break;
            }
        case 4:
            {
                wynik /= liczba;
                break;
            }
        case 5:
            {
                system( "cls" );
                cout << "Do widzenia" << endl;
                exit( 0 );
            }
            default:
            {
                cout << "Zly wybor!" << endl;
                break;
            }
        }
        system( "cls" );
       
    } while( liczba != 0 );
   
    return 0;
}

Mam pytanie. Tak naprawdę to ten *if sprawdza czy wpisano 0. Jeśli tak, to on kończy pętlę. Jeśli nie byłoby tego if'a, to nawet jeżeli wpisałbym 0, to pętla skończy się dopiero, kiedy "dojdzie" do miejsca, gdzie jest warunek. Da się to jakoś zrobić czy trzeba użyć pętli while?
P-112235
pekfos
» 2014-06-18 16:50:07
Da się to jakoś zrobić czy trzeba użyć pętli while?
Co zrobić..?
P-112236
Haryen
Temat założony przez niniejszego użytkownika
» 2014-06-18 17:03:50
Żeby bez tego if'a pętla po wpisaniu 0 zakończyła się od razu.
P-112239
Jacob99
» 2014-06-18 17:25:54
A po co chcesz rezygnować z tego if'a ?
P-112240
Haryen
Temat założony przez niniejszego użytkownika
» 2014-06-18 17:49:12
Chcę się dowiedzieć czy są inne sposoby na to, ale chyba ten if jest najlepszym wyborem.
P-112241
pekfos
» 2014-06-19 10:00:01
Da się to jakoś zrobić czy trzeba użyć pętli while?
A samą pętlą while się da..? Żadna pętla sama z siebie nie sprawdzi swojego warunku w trakcie wykonywania powiązanych z nią instrukcji. Od tego są warunki if itp i tyle.
I nie używaj exit(), chyba że na prawdę są ku temu powody. Tu możesz bez problemu zakończyć pętlę przez break lub return.
P-112277
Haryen
Temat założony przez niniejszego użytkownika
» 2014-06-19 11:34:06
Ok, dzięki. A powiesz dlaczego nie używa się exit?
P-112295
pekfos
» 2014-06-19 12:04:50
Nie powoduje zniszczenia zmiennych automatycznych.
P-112296
« 1 » 2
  Strona 1 z 2 Następna strona