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

[Praca Domowa z rozdziału 15] Cofnięcie do początku programu.

Ostatnio zmodyfikowano 2014-05-11 18:57
Autor Wiadomość
Luteres
Temat założony przez niniejszego użytkownika
[Praca Domowa z rozdziału 15] Cofnięcie do początku programu.
» 2014-05-10 22:13:23
Witam!
(Kilka tematów odnośnie tej pracy domowej przeczytałem, lecz w żadnym z nich nie było mowy o moim problemie.. Kilka = nie wszystkie)

Próbuję właśnie napisać kalkulator do pracy domowej nr 2 z rozdziału 15. Póki co stworzyłem coś takiego:
C/C++
#include <iostream>
using namespace std;
int main()
{
    float wynik = 0;
    int menu;
    float liczba;
   
    cout << "=============== Kalkulator Adama! ===============" << endl << endl;
    do
    {
        cout << "Aktualny wynik: " << wynik << endl << endl;
        cout << "Wprowadz liczbe: ";
        cin >> liczba;
        cin.clear(); cin.sync();
        if( liczba == 0 )
        do
        {
            cout << "Wprowadz inna liczbe niz zero!: ";
            cin >> liczba;
            cin.clear(); cin.sync();
        } while( liczba == 0 );
       
        cout << endl << "[1] Dodawanie" << endl << "[2] Odejmowanie" << endl << "[3] Mnozenie" << endl << "[4] Dzielenie" << endl << "[5] Rezygnuj" << endl << endl;
        cout << "Wybierz dzialanie: "; cin >> menu; cout << endl;
        if( liczba != 0 )
        switch( menu )
        {
        case 1:
            cout << "Wynik + liczba = " << wynik + liczba << endl;
            wynik = wynik + liczba;
            break;
        case 2:
            cout << "Wynik - liczba = " << wynik - liczba << endl;
            wynik = wynik - liczba;
            break;
        case 3:
            cout << "Wynik * liczba = " << wynik * liczba << endl;
            wynik = wynik * liczba;
            break;
        case 4:
            cout << "Wynik / liczba = " << wynik / liczba << endl;
            wynik = wynik / liczba;
            break;
        case 5:
            return 0;
            // tutaj zamiast kończenia chcę cofanie do wpisania liczby
           
        }
    } while( liczba != 0 );
   
    return 0;
}

Polecenie brzmi:
"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.
Przykładowe menu wyboru działania:
[1] Dodawanie
[2] Odejmowanie
[3] Mnożenie
[4] Dzielenie
[5] Rezygnuj "

Z tego polecenia wnioskuję, iż "Rezygnuj" ma cofać do kroku nr 1, a nie mogę wpaść jak to ma się dziać. Trzeba zrobić dosyć dużą pętlę, czy inaczej? Czy mogę liczyć na wskazówki?
Bawię się z tym już dłuższy czas, ale mam ograniczony dostęp do komputera (czas) i wolę zasięgnąć rady.
P-109653
OSA_PL
» 2014-05-10 22:56:36
Daj samo
break;
 w
case 5:
P-109657
Luteres
Temat założony przez niniejszego użytkownika
» 2014-05-10 23:02:39
Czasem najciemniej pod latarnią, dziękuję i przepraszam za kłopot.
P-109658
Luteres
Temat założony przez niniejszego użytkownika
Zakończenie pętli do... while
» 2014-05-11 18:29:09
C/C++
#include <iostream>
using namespace std;
int main()
{
    float wynik = 0;
    int menu;
    float liczba;
    bool czyblad;
   
    cout << "=============== Kalkulator Adama! ===============" << endl << endl;
   
    do
   
    { cout << "Aktualny wynik: " << wynik << endl << endl;
        cout << "Wprowadz liczbe: ";
        cin >> liczba;
        czyblad = cin.fail();
        cin.clear(); cin.sync();
       
        if( czyblad || liczba == 0 )
        do
        {
            cout << "Wprowadz poprawna liczbe!: ";
            cin >> liczba;
            cin.clear(); cin.sync(); czyblad = cin.fail();
            cin.clear(); cin.sync();
        } while( czyblad || liczba == 0 );
       
        cout << endl << "[1] Dodawanie"
        << endl << "[2] Odejmowanie"
        << endl << "[3] Mnozenie"
        << endl << "[4] Dzielenie"
        << endl << "[5] Rezygnuj"
        << endl
        << endl << "[0] Zakoncz" << endl << endl;
       
        do {
           
            cout << "Wybierz dzialanie: "; cin >> menu;
            czyblad = cin.fail();
            cin.clear(); cin.sync();
            // problem z linijką poniżej
        } while( czyblad &&( menu >= 0 ) &&( menu <= 5 ) );
       
        switch( menu )
        {
        case 1:
            cout << "Wynik + liczba = " << wynik + liczba << endl;
            wynik += liczba;
            break;
        case 2:
            cout << "Wynik - liczba = " << wynik - liczba << endl;
            wynik -= liczba;
            break;
        case 3:
            cout << "Wynik * liczba = " << wynik * liczba << endl;
            wynik *= liczba;
            break;
        case 4:
            cout << "Wynik / liczba = " << wynik / liczba << endl;
            wynik /= liczba;
            break;
        case 5:
            break;
        case 0:
            return 0;
        }
    } while( liczba != 0 || czyblad );
   
    return 0;
}

Witam!
Znowu problem z tym samym kalkulatorem (po małych modyfikacjach), otóż w części:
C/C++
do {
   
    cout << "Wybierz dzialanie: "; cin >> menu;
    czyblad = cin.fail();
    cin.clear(); cin.sync();
    // problem z linijką poniżej
} while( czyblad &&( menu >= 0 ) &&( menu <= 5 ) );

po wpisaniu litery w "wybierz działanie" działa tak jak trzeba, ale po wpisaniu liczby innej niż 0/1/2/3/4/5 zamiast kręcić się od nowa przenosi do wpisania liczby. Co tym razem spaprałem?
P-109709
pekfos
» 2014-05-11 18:34:29
Co tym razem spaprałem?
Warunek, a co niby innego? czyblad = false, liczba spoza przedziału. Jaka będzie wartość całego warunku wtedy..?
P-109711
Luteres
Temat założony przez niniejszego użytkownika
» 2014-05-11 18:43:18
Będzie dodatnia, czyli dać negację?

EDIT: Ok, po dodaniu negacji zrobiło się na odwrót (w sumie czego innego się spodziewałem), więc nie trafiłem.
P-109714
pekfos
» 2014-05-11 18:54:44
To teraz z logicznym myśleniem. Pętla ma się powtarzać, gdy "(wystąpił błąd) lub (liczba jest spoza przedziału)".
P-109716
Luteres
Temat założony przez niniejszego użytkownika
» 2014-05-11 18:57:49
Ok, dzięki, od początku mylę to while, gdyż w Kursie jest napisane, że we while wpisuje się warunek zakończenia, a nie powtórzenia i jakoś mi utkwiło to zakończenie i się zamotałem.

} while( czyblad ||( menu <= 0 ) ||( menu >= 5 ) );
 
Teraz działa :)

EDIT:

} while( czyblad ||( menu < 0 ) ||( menu > 5 ) );

Teraz działa.
P-109717
« 1 »
  Strona 1 z 1