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

[Rozdział 15] Pętla do... while

Ostatnio zmodyfikowano 2014-10-26 15:30
Autor Wiadomość
luuuzik
Temat założony przez niniejszego użytkownika
[Rozdział 15] Pętla do... while
» 2014-10-26 02:19:25
Mam pytanie odnośnie zadania z rozdziału 15, a mianowicie: jak wykonać punkt pierwszy, tj. wypisywanie obecnego wyniku na początku?

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
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.

Oto mój kod:

C/C++
#include <iostream>
using namespace std;

int main()
{
    float b, c;
    int wartosc;
    bool poprawnie;
    int d;
   
    do
    {
        cout << "Podaj dwie liczby, na ktorych chcesz liczyc." << endl;
       
        do
        {
            cout << "Pierwsza liczba: " << endl;
            cin >> b;
            poprawnie = cin.good();
            wartosc = poprawnie;
            cin.clear();
            cin.sync();
           
            switch( poprawnie )
            {
               
            case 1:
                {
                    cout << "Gratuluje poprwnej liczby !\n" << endl;
                }
                break;
               
            case 0:
                {
                    cout << "Błąd kompilacji! To nie jest liczba!" << endl;
                }
                break;
            }
        } while( !poprawnie );
       
        do
        {
            cout << "Druga liczba: " << endl;
            cin >> c;
            poprawnie = cin.good();
            wartosc = poprawnie;
            cin.clear();
            cin.sync();
           
            switch( poprawnie )
            {
            case 1:
                {
                    cout << "Gratuluje poprwnej liczby !\n" << endl;
                }
                break;
               
            case 0:
                {
                    cout << "Błąd kompilacji! To nie jest liczba!" << endl;
                }
                break;
            }
        } while( !poprawnie );
       
        if( b != 0 && c != 0 )
       
        do
        {
            cout << "A teraz wybierz dzialanie: \n" << endl;
            cout << "[1]   @@@ Dodawanie   @@@" << endl;
            cout << "[2]   @@@ Odejmowanie @@@" << endl;
            cout << "[3]   @@@ Mnozenie    @@@" << endl;
            cout << "[4]   @@@ Dzielenie   @@@" << endl;
            cout << "[5]   @@@ Rezygnuj    @@@" << endl;
            cin >> d;
        } while( d == 0 && d == 5 );
       
        if( d != 0 && d < 6 )
       
        do
        {
            switch( d )
            {
            case 1:
                cout << "Liczba" << b << "+" << c << "=" << b + c << "\n" << endl;
                break;
               
            case 2:
                cout << "Liczba" << b << "-" << c << "=" << b - c << "\n" << endl;
                break;
               
            case 3:
                cout << "Liczba" << b << "*" << c << "=" << b * c << "\n" << endl;
                break;
               
            case 4:
                cout << "Liczba" << b << "/" << c << "=" << b / c << "\n" << endl;
                break;
               
            case 5:
                cout << "Koniec!" << endl;
                break;
               
                cin.clear();
                cin.sync();
            }
        } while( !d );
       
       
    } while( d == 1 || d == 2 || d == 3 || d == 4 );
   
   
    return 0;
   
}

Z góry bardzo dziękuję za pomoc;)
P-119413
Winner_Of_Death
» 2014-10-26 03:35:04
Podejrzewam, że jest to błąd, a nawet jeśli nie to nie ma się co gorączkować ;)
C/C++
  cout   <<   "Błąd kompilacji! To nie jest liczba!"   <<   endl;
Raczej programu. Program został przecież już wcześniej skompilowany.
P-119414
Rashmistrz
» 2014-10-26 12:38:18
jak wykonać [...] wypisywanie
obecnego wyniku na początku
Głównie wypisywanie będzie potrzebne
w kolejnych obiegach pętli...

Przyjmij sobie jako wynik na
przykład liczbę "12" i na
niej na początku operuj.

Możesz też zrobić na początku
przed pętlą wczytanie tej liczby.

W tym zdaniu twój program ma
wykonywać następne obliczenia
na poprzednim wyniku.

:F
_______________________________

switch( poprawnie )

Używasz Switcha w złym
celu, do tego służy:
» Kurs C++ » Poziom 1Instrukcja warunkowa if ... else lekcja
P-119430
luuuzik
Temat założony przez niniejszego użytkownika
» 2014-10-26 14:14:33
Tak to powinno wyglądać?
C/C++
#include <iostream>
using namespace std;

int main()
{
    float b, c, wynik, obecnywynik;
    int wartosc;
    bool poprawnie;
    int d;
    obecnywynik = 0;
   
    do
    {
        cin.clear();
        cin.sync();
        cout << "Podaj dwie liczby, na ktorych chcesz liczyc." << endl;
       
       
        do
        {
           
           
            cout << "Pierwsza liczba: " << endl;
            cin >> b;
            poprawnie = cin.good();
            wartosc = poprawnie;
            cin.clear();
            cin.sync();
           
            if( poprawnie == 1 )
            {
                cout << "Podales prawidlowa liczbe!" << endl;
            } else
            {
                cout << "Blad! To nie liczba!" << endl;
            }
           
           
        } while( !poprawnie );
       
        do
        {
            cout << "Druga liczba: " << endl;
            cin >> c;
            poprawnie = cin.good();
            wartosc = poprawnie;
            cin.clear();
            cin.sync();
           
            if( poprawnie == 1 )
            {
                cout << "Podales prawidlowa liczbe!" << endl;
            } else
            {
                cout << "Blad! To nie liczba!" << endl;
            }
        } while( !poprawnie );
       
        if( b != 0 && c != 0 )
       
        do
        {
            cout << "A teraz wybierz dzialanie: \n" << endl;
            cout << "[1]   @@@ Dodawanie   @@@" << endl;
            cout << "[2]   @@@ Odejmowanie @@@" << endl;
            cout << "[3]   @@@ Mnozenie    @@@" << endl;
            cout << "[4]   @@@ Dzielenie   @@@" << endl;
            cout << "[5]   @@@ Rezygnuj    @@@" << endl;
            cin >> d;
        } while( d == 0 && d == 5 );
       
        if( d != 0 && d < 6 )
       
        do
        {
            switch( d )
            {
            case 1:
                cout << "Liczba" << b << "+" << c << "=" << b + c << "\n" << endl;
                wynik = b + c;
                break;
               
            case 2:
                cout << "Liczba" << b << "-" << c << "=" << b - c << "\n" << endl;
                wynik = b - c;
                break;
               
            case 3:
                cout << "Liczba" << b << "*" << c << "=" << b * c << "\n" << endl;
                wynik = b * c;
                break;
               
            case 4:
                cout << "Liczba" << b << "/" << c << "=" << b / c << "\n" << endl;
                wynik = b / c;
                break;
               
            case 5:
                cout << "Koniec!" << endl;
                break;
               
               
               
            }
        } while( !d );
       
        obecnywynik = obecnywynik + wynik;
        cout << "Obecny wynik wynosi: " << obecnywynik << "\n" << endl;
       
    } while( d == 1 || d == 2 || d == 3 || d == 4 );
   
   
   
    return 0;
   
}
P-119440
Rashmistrz
» 2014-10-26 15:30:11
Gdyby treść zadania była by
dokumentacją tego programu
to by się nie zgadzała z
tym co zrobiłeś. :F

Według zadania powinno
być coś w tym stylu:
-Wybierasz liczbę, która będzie
obecnym wynikiem.
*Rozpoczyna się pętla.
-Wypisuje obecny wynik.
-Pobiera liczbę.
-Wybierasz działanie.
-Wykonuje działanie i zapisuje
 wynik jako "obecny wynik".
--||--

np. wpiszesz na początku do cin:
12 12 1 13 1 9 2 3 0 5 (na raz)
To wykona następujące obliczenia:
12 + 12 + 13 + 9 - 3 = 33

Jednak ja jeszcze zwracam Ci
uwagę na parę szczegółów do
aktualnej wersji programu:
-Gdy podamy "0" dzieją się dziwne rzeczy...
 Proszę napraw to:
Podaj dwie liczby, na ktorych chcesz liczyc.
Pierwsza liczba:
5
Podales prawidlowa liczbe!
Druga liczba:
5
Podales prawidlowa liczbe!
A teraz wybierz dzialanie:

[1]   @@@ Dodawanie   @@@
[2]   @@@ Odejmowanie @@@
[3]   @@@ Mnozenie    @@@
[4]   @@@ Dzielenie   @@@
[5]   @@@ Rezygnuj    @@@
1
Liczba5+5=10

Obecny wynik wynosi: 10

Podaj dwie liczby, na ktorych chcesz liczyc.
Pierwsza liczba:
0
Podales prawidlowa liczbe!
Druga liczba:
0
Podales prawidlowa liczbe!
Liczba0+0=0

Obecny wynik wynosi: 10

Podaj dwie liczby, na ktorych chcesz liczyc.
Pierwsza liczba:

Podaj dwie liczby, na ktorych chcesz liczyc.
Pierwsza liczba:
0
Podales prawidlowa liczbe!
Druga liczba:
0
Podales prawidlowa liczbe!
Obecny wynik wynosi: 2.30798e+032


Process returned 0 (0x0)   execution time : 3.782 s
Press any key to continue.

______________________________________________________

} while( d == 1 || d == 2 || d == 3 || d == 4 );

To można rozwiązać za pomocą przedziału:
} while( d > 0 && d < 5 );

______________________________________________________

if( poprawnie == 1 )
Niepotrzebnie to porównanie. :F
C/C++
if( wyrazenieLogiczne == true ) //...
//powyższy zapis jest równoważny poniższemu:
if( wyrazenieLogiczne ) //...
P-119448
« 1 »
  Strona 1 z 1