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

Rozdz. 15 ppkt. 2 - kalkulator - prośba o sprawdzenie zadania domowego

Ostatnio zmodyfikowano 2018-11-06 11:18
Autor Wiadomość
rottingham
Temat założony przez niniejszego użytkownika
Rozdz. 15 ppkt. 2 - kalkulator - prośba o sprawdzenie zadania domowego
» 2018-11-05 18:34:49
Cześć. Napisałem kalkulator z rozdz. 15.
Czy dobrze go napisałem?
Co można zrobić lepiej?

Z góry dzięki za pomoc! :)
Nie sądziłem, że kiedyś dojdę do tego poziomu a im dalej w las tym więcej motywacji, dlatego ogromne dzięki za dotychczasowe rady.
Pozdro!

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

int main()
{
    int a;
    int b;
    int c;
    int d; //Tworzę zmieną do której przypiszę informację czy wystąpił błąd podczas wpisywania danych do zmiennej a
    int e; //Tworzę analogiczną zmienną, która przechowa analogiczną informację przy wczytywaniu danych do zmiennej b
   
    do
    {
        do
        {
            cout << "\nWprowadz pierwsza liczbe (aby wyjsc wprowadz 0)" << endl;
            cin >> a;
            bool aCzyBlad = d = cin.fail(); //Tutaj nastepuje przypisanie
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        } while( d );
       
        if( a == 0 )
             return 0;
        else
       
        if( a != 0 )
        {
            cout << "\nWybierz dzialanie\n"
            "[1] Dodawanie\n"
            "[2] Odejmowanie\n"
            "[3] Mnozenie\n"
            "[4] Dzielenie\n"
            "[5] Zakoncz\n" << endl;
            cin >> c;
            if( c == 1 )
            {
               
                do
                {
                    cout << "Wprowadz druga liczbe " << a << " + ";
                    cin >> b;
                    bool bCzyBlad = e = cin.fail();
                    cin.clear();
                    cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                } while( e );
               
                cout << "Wynik dodawania to " << a << " + " << b << " = " << a + b << endl;
            }
        }
        if( c == 2 )
        {
            do
            {
                cout << "Wprowadz druga liczbe " << a << " - ";
                cin >> b;
                bool bCzyBlad = e = cin.fail();
                cin.clear();
                cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            } while( e );
           
            cout << "Wynik odejmowania to " << a << " - " << b << " = " << a - b << endl;
        }
        if( c == 3 )
        {
            do
            {
                cout << "Wprowadz druga liczbe " << a << " * ";
                cin >> b;
                bool bCzyBlad = e = cin.fail();
                cin.clear();
                cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            } while( e );
           
            cout << "Wynik mnozenia to " << a << " * " << b << " = " << a * b << endl;
        }
        if( c == 4 )
        {
            do
            {
                cout << "Wprowadz druga liczbe " << a << " / ";
                cin >> b;
                bool bCzyBlad = e = cin.fail();
                cin.clear();
                cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            } while( e );
           
            cout << "Wynik dzielenia to " << a << " / " << b << " = " << a / b << endl;
        }
        if( c == 5 )
             return 0;
       
    } while( b != 0 );
   
    return 0;
}
P-172756
pekfos
» 2018-11-05 18:51:48
C/C++
// 3. Logiczne miejsce by utworzyć zmienną
do
{
    cout << "Wprowadz druga liczbe " << a << " + ";
    cin >> b;
    bool bCzyBlad = e = cin.fail(); // 1. Wartość
    cin.clear();
    cin.ignore( numeric_limits < streamsize >::max(), '\n' );
} while( e ); // 2. Użycie wartości

Zmienna bCzyBlad skopiowana z kursu nic tu nie robi. Ma za mały zakres by coś robić. Więc dodałeś e, która ma tragicznie złą kombinację zakresu, nazwy i typu. I z jakiegoś powodu masz 2 takie zmienne, pomimo tego że nigdy nie używasz obu naraz. Poza dzieleniem przez zero, kod wygląda na poprawny. Za styl dostajesz dwóję.
P-172757
rottingham
Temat założony przez niniejszego użytkownika
» 2018-11-05 22:13:55
Ok, rozumiem.

Idąc za Twoimi sugestiami napisałem poniższy kod.

Czy to już wygląda dobrze i czy spełnia założenia zawarte w zadaniu domowym?

Co można zrobić lepiej?

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

int main()
{
    int liczba_pierwsza;
    int liczba_druga;
    int wybor_dzialania;
    bool sprawdzamy_poprawnosc;
   
    do
    {
        do
        {
            cout << "\nWprowadz pierwsza liczbe (aby wyjsc wprowadz 0)" << endl;
            cin >> liczba_pierwsza;
            sprawdzamy_poprawnosc = cin.fail();
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        } while( sprawdzamy_poprawnosc );
       
        if( liczba_pierwsza == 0 )
             return 0;
        else
       
        if( liczba_pierwsza != 0 )
        {
            cout << "\nWybierz dzialanie\n"
            "[1] Dodawanie\n"
            "[2] Odejmowanie\n"
            "[3] Mnozenie\n"
            "[4] Dzielenie\n"
            "[5] Zakoncz\n" << endl;
            cin >> wybor_dzialania;
            if( wybor_dzialania == 1 )
            {
               
                do
                {
                    cout << "Wprowadz druga liczbe " << liczba_pierwsza << " + ";
                    cin >> liczba_druga;
                    sprawdzamy_poprawnosc = cin.fail();
                    cin.clear();
                    cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                } while( sprawdzamy_poprawnosc );
               
                cout << "Wynik dodawania to " << liczba_pierwsza << " + " << liczba_druga << " = " << liczba_pierwsza + liczba_druga << endl;
            }
        }
        if( wybor_dzialania == 2 )
        {
            do
            {
                cout << "Wprowadz druga liczbe " << liczba_pierwsza << " - ";
                cin >> liczba_druga;
                sprawdzamy_poprawnosc = cin.fail();
                cin.clear();
                cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            } while( sprawdzamy_poprawnosc );
           
            cout << "Wynik odejmowania to " << liczba_pierwsza << " - " << liczba_druga << " = " << liczba_pierwsza - liczba_druga << endl;
        }
        if( wybor_dzialania == 3 )
        {
            do
            {
                cout << "Wprowadz druga liczbe " << liczba_pierwsza << " * ";
                cin >> liczba_druga;
                sprawdzamy_poprawnosc = cin.fail();
                cin.clear();
                cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            } while( sprawdzamy_poprawnosc );
           
            cout << "Wynik mnozenia to " << liczba_pierwsza << " * " << liczba_druga << " = " << liczba_pierwsza * liczba_druga << endl;
        }
        if( wybor_dzialania == 4 )
        {
            do
            {
                cout << "Wprowadz druga liczbe " << liczba_pierwsza << " / ";
                cin >> liczba_druga;
                sprawdzamy_poprawnosc = cin.fail();
                cin.clear();
                cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                if( liczba_druga == 0 )
                     cout << "Nie dzielimy przez zero!\n" << endl;
               
            } while( sprawdzamy_poprawnosc || liczba_druga == 0 );
           
            cout << "Wynik dzielenia to " << liczba_pierwsza << " / " << liczba_druga << " = " << liczba_pierwsza / liczba_druga << endl;
        }
        if( wybor_dzialania == 5 )
             return 0;
       
    } while( liczba_druga != 0 );
   
    return 0;
}
P-172762
pekfos
» 2018-11-06 09:25:51
bCzyBlad mówiło jasno, co znaczy wartość tej zmiennej. sprawdzamy_poprawnosc już nie bardzo. No i za długie te nazwy. Jedna litera źle, pełnie zdanie też źle. Wystarczyłoby liczba1, liczba2, dzialanie.

Poza tym wygląda ok.
P-172766
rottingham
Temat założony przez niniejszego użytkownika
» 2018-11-06 11:18:42
Faktycznie, chyba z przemęczenia przekombinowałem.

Wielkie dzięki za pomoc!
P-172768
« 1 »
  Strona 1 z 1