• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prosty kalkulator

0 głosów
1,647 wizyt
pytanie zadane 1 września 2018 w C i C++ przez Mavannkas Bywalec (2,290 p.)

Witam, właśnie napisałem swój pierwszy kalkulator. Mogę prosić i rady i oceny? Coś mogłem zrobić lepiej? Z góry dziękuję za odpowiedź!

#include <iostream>
using namespace std;
int main ()
{
    double a, b, zmienna,wynik;
    int c;
    b=0;
    a=0;
    c=0;
    cout<< "Witamy w kalkulatorze!"<<endl<<endl<<"Wprowadz pierwsza liczbe: ";
    cin>>a;
    cout<<"Co dalej?";
    do
    {
        if(c==6)
        {
        cout<<endl<<endl<<"Wprowadz pierwsza liczbe: ";
        cin>>a;
        cout<<"Co dalej?";
        c=9;
        }
        if(b!=0)
            cout<<endl<<endl<<"Aktualny wynik to... "<<b <<endl<<"Co dalej?";
        if(c!=6)
        {
            cout<<endl<<endl<<" [1] Dodawanie"<<endl<<" [2] Odejmowanie"<<endl<<" [3] Mnozenie"<<endl<<" [4] dzielenie"<<endl<<endl<<" [5] Reset" <<endl<< " [0] Koniec"<<endl;
            cin>>c;
            switch(c)
            {
            case 1:
                cout <<endl<<"Do jakiej liczby chcesz dodac ";
                if (a!=0)
                    cout << a;
                else;
                    cout << b;
                cout<<endl<<"Podaj druga liczbe ";
                cin>>zmienna;
                  if (b!=0)
                {
                    cout<<"Wynik dzialania "<<b<<" + "<<zmienna<<" = "<<b+zmienna;
                   b+=zmienna;
                }
                if (a!=0)
                {
                    cout <<"Wynik dzialania "<<a<<" + "<<zmienna<<" = "<<a+zmienna;
                    b=a+zmienna;
                    a=0;
                }
                break;
            case 2:
                     cout <<endl<<"Od jakiej liczby chcesz odjac? ";
                if (a!=0)
                    cout << a;
                else;
                    cout << b;
                cout<<endl<<"Podaj druga liczbe ";
                cin>>zmienna;
                  if (b!=0)
                {
                    cout<<"Wynik dzialania "<<b<<" - "<<zmienna<<" = "<<b-zmienna;
                   b-=zmienna;
                }
                if (a!=0)
                {
                    cout <<"Wynik dzialania "<<a<<" - "<<zmienna<<" = "<<a-zmienna;
                    b=a-zmienna;
                    a=0;
                }
                break;
            case 3:
                 cout <<endl<<"Przec co chcesz pomnozyc? ";
                if (a!=0)
                    cout << a;
                else;
                    cout << b;
                cout<<endl<<"Podaj druga liczbe ";
                cin>>zmienna;
                  if (b!=0)
                {
                    cout<<"Wynik dzialania "<<b<<" * "<<zmienna<<" = "<<b*zmienna;
                   b*=zmienna;
                }
                if (a!=0)
                {
                    cout <<"Wynik dzialania "<<a<<" * "<<zmienna<<" = "<<a*zmienna;
                    b=a*zmienna;
                    a=0;
                }
                break;
            case 4:
                cout <<endl<<"Przec co chcesz podzielic? ";
                if (a!=0)
                    cout << a;
                else;
                    cout << b;
                cout<<endl<<"Podaj druga liczbe ";
                cin>>zmienna;
                  if (b!=0)
                {
                    cout<<"Wynik dzialania "<<b<<" / "<<zmienna<<" = "<<b/zmienna;
                   b/=zmienna;
                }
                if (a!=0)
                {
                    cout <<"Wynik dzialania "<<a<<" / "<<zmienna<<" = "<<a/zmienna;
                    b=a/zmienna;
                    a=0;
                }
                break;
            case 5:
                cout<<endl<<"Reset wyniku";
                b=0;
                c=6;
                break;
            }
        }
    if (cin.fail()||(c<0||c>6) )
    {
        cin.clear();
        cin.ignore(1000, '\n');
        cout<<endl<<"Wprowadziles bledny znak :( "<<endl;
        c=6;
    }
    }while(c!=0);
    return 0;
}

 

komentarz 2 września 2018 przez mokrowski Mędrzec (158,960 p.)

I uzywaj duzych liter. Nie zawsze ale to ulatwi tb i inym w przyszlosci sprawdzanie kodu.

??? Ciekawe... gdzie znalazłeś takie zalecenie?

komentarz 2 września 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Ze swojego doswiadczenia. Latwiej sie czyta taka zmienna szczegolnie gdy uzywaz ich bardzo duzo.
komentarz 2 września 2018 przez Hiskiel Pasjonat (22,830 p.)
To jest tylko osobowa preferencja. W Javie np. z tego co się orientuję używa się CamelCase, ale nie trzeba tego używać. Tak się po prostu przyjęło.
komentarz 2 września 2018 przez mokrowski Mędrzec (158,960 p.)
No to zacznij może od tego:

https://google.github.io/styleguide/cppguide.html#Naming

https://isocpp.org/wiki/faq/coding-standards

http://www.codingstandard.com/

Te konwencje pochodzą z języka C#.

https://docs.microsoft.com/pl-pl/dotnet/standard/design-guidelines/naming-guidelines

Ogólnie konwencje z C# to nie to samo co reszta świata. Microsoft jest znany z twórczości i w tym obszarze: https://en.wikipedia.org/wiki/Hungarian_notation ... i twórczość ta nie jest oceniana dobrze.
komentarz 2 września 2018 przez Aisekai Nałogowiec (42,190 p.)
Hiskiel, nie CamelCase (bo to jest napisane w PascalCase) tylko camelCase :D

Ale tak, lepiej wyrobic sobie nawyk dobrego nazywania zmiennych. "zmienna" nic nie mowi, oprócz tego ze jest zmienną a nie stałą. Nie znasz jej przeznaczenia. Nie wiesz jakiego jest typu. O ile a i b można by sie domyślać, ale i tak lepiej nazwać to inaczej, o tyle zmienna to bardzo słaba nazwa

2 odpowiedzi

0 głosów
odpowiedź 2 września 2018 przez mokrowski Mędrzec (158,960 p.)

Biorę pod uwagę to że zaczynasz.

Ogromny plus i pochwała. Jeden z niewielu programów początkujących który nie używa zmiennych globalnych!!! Bardzo dobrze i tak trzymaj!! :)

1. Unikaj nawet w tak małych programach na początku nauki używania:

using namespace std;

To ogólnie zły nawyk który może się zemścić w większych projektach. Wiem że to może być uciążliwe, ale lepiej jest zapisać np. std::cout niż cout.

2. Zły nawyk definiowania w jednej linii zmiennych. Zamiast pisać:

double a, b, zmienna,wynik;

(BTW zmienna wynik nie używana w programie).

lepiej pisać:

double a;
double b;
double zmienna;
double wynik;

Na zarzut że "bo to dużo linii jest", odpowiedź prosta. Jeśli nauczysz się funkcji, zmiennych nie będzie dużo a ilość zmiennych jest sygnałem że funkcja za wiele rzeczy robi.

3. Ogromny plus za świadomość że zmienne nie są zerowane. Lepiej więc zapisać:

double zmienna = 0;
// lub..
double inna_zmienna();
// lub ... 
double inna_zmienna{};
// lub po 2011 roku dla C++11
auto jeszcze_inna_zmienna = 0U;

3. Nie nadużywaj std::endl. Wystarczy '\n'. std::endl, wyprowadza znak nowej linii i czyści strumień. Lepiej:

std::cout <<  "Witamy w kalkulatorze!\n\n"
          << "Wprowadz pierwsza liczbe: ";

 

Już po (wstępnym) formatowaniu kodu widać miejsce do poprawek... logiki nie sprawdzałem:

#include <iostream>

int main()
{
    double a = 0;
    double b = 0;
    double zmienna = 0;
    int c = 0;

    std::cout << "Witamy w kalkulatorze!\n\n"
              << "Wprowadz pierwsza liczbe: ";
    std::cin >> a;

    std::cout << "Co dalej?\n";
    do
    {
        if(c == 6)
        {
            std::cout << "\n\nWprowadz pierwsza liczbe: ";
            std::cin >> a;
            std::cout << "Co dalej?\n";
            c = 9;
        }
        if(b != 0)
        {
            std::cout << "\n\nAktualny wynik to... " << b
                      << "\nCo dalej?\n";
        }
        if(c != 6)
        {
            std::cout << " [1] Dodawanie\n"
                      << " [2] Odejmowanie\n"
                      << " [3] Mnozenie\n"
                      << " [4] dzielenie\n"
                      << " [5] Reset\n"
                      << " [0] Koniec\n";
            std::cin >> c;
            switch(c)
            {
            case 1:
                std::cout << "\nDo jakiej liczby chcesz dodac ";
                if (a != 0)
                {
                    std::cout << a;
                }
                else
                {
                    std::cout << b;
                }
                std::cout << "\nPodaj druga liczbe ";
                std::cin >> zmienna;
                if (b != 0)
                {
                    std::cout << "Wynik dzialania "
                              << b << " + " << zmienna
                              << " = " << b + zmienna;
                    b += zmienna;
                }
                if (a != 0)
                {
                    std::cout << "Wynik dzialania "
                              << a << " + " << zmienna
                              << " = " << a + zmienna;
                    b = a + zmienna;
                    a = 0;
                }
                break;
            case 2:
                std::cout << "\nOd jakiej liczby chcesz odjac? ";
                if(a != 0) {
                    std::cout << a;
                }
                else
                {
                    std::cout << b;
                }
                std::cout << "\nPodaj druga liczbe ";
                std::cin >> zmienna;
                if(b != 0)
                {
                    std::cout << "Wynik dzialania " << b
                        << " - " << zmienna << " = " << b - zmienna;
                   b -= zmienna;
                }
                if(a != 0)
                {
                    std::cout << "Wynik dzialania " << a
                              << " - " << zmienna << " = "
                              << a - zmienna;
                    b = a - zmienna;
                    a = 0;
                }
                break;
            case 3:
                std::cout << "\nPrzec co chcesz pomnozyc? ";
                if(a != 0) {
                    std::cout << a;
                }
                else
                {
                    std::cout << b;
                }
                std::cout << "\nPodaj druga liczbe ";
                std::cin >> zmienna;
                if(b != 0)
                {
                    std::cout << "Wynik dzialania " << b
                              << " * " << zmienna << " = "
                              << b * zmienna;
                   b *= zmienna;
                }
                if(a != 0)
                {
                    std::cout << "Wynik dzialania "<< a 
                              << " * " << zmienna << " = "
                              << a * zmienna;
                    b = a * zmienna;
                    a = 0;
                }
                break;
            case 4:
                std::cout << "\nPrzec co chcesz podzielic? ";
                if(a != 0) {
                    std::cout << a;
                }
                else
                {
                    std::cout << b;
                }
                std::cout << "\nPodaj druga liczbe ";
                std::cin >> zmienna;
                if(b != 0)
                {
                    std::cout << "Wynik dzialania " << b
                              << " / " << zmienna << " = "
                              << b / zmienna;
                    b /= zmienna;
                }
                if(a != 0)
                {
                    std::cout << "Wynik dzialania " << a
                              << " / " << zmienna << " = "
                              << a / zmienna;
                    b = a / zmienna;
                    a = 0;
                }
                break;
            case 5:
                std::cout << "\nReset wyniku";
                b = 0;
                c = 6;
                break;
            }
        }
        if (!std::cin || (c < 0) || (c > 6) )
        {
            std::cin.clear();
            std::cin.ignore(1000, '\n');
            std::cout << "\nWprowadziles bledny znak :(\n";
            c = 6;
        }
    } while(c != 0);
}

 

0 głosów
odpowiedź 2 września 2018 przez michulo Obywatel (1,240 p.)

To ja dla odmiany trochę potestowałem.

W liniach z else chyba nie powinno być ";" bo w tym momencie zawsze wywołasz "cout<<b"

case 1:
                cout <<endl<<"Do jakiej liczby chcesz dodac ";
                if (a!=0)
                    cout << a;
                else;
                cout << b;
                cout<<endl<<"Podaj druga liczbe ";
  1. Tak jak ktoś już napisał fajnie by było zrobić to na funkcjach.
  2. Czemu nie zrobisz działań na znakach +,/,- itp ?
  3. Nie rozumiem po co zmienna a i b  ? ale magę się nie znać.
  4. 2 razy wykonujesz to samo dzialanie, najpierw w aby wypisać komunikat potem aby ustawić wartość zmiennej starata czasu
  5. Udało mi sie podzielić przez 0 :P
  6. Pomieszana jest kolejność argumentów w opisach , przy nieprzemiennych działaniach robi róźnice:

Do jakiej liczby chcesz dodac 5

Podaj druga liczbe 7
Wynik dzialania 5 + 7 = 12

Aktualny wynik to... 12
Co dalej?

 [1] Dodawanie
 ...

 [0] Koniec
2

Od jakiej liczby chcesz odjac? 12
Podaj druga liczbe 2
Wynik dzialania 12 - 2 = 10

Aktualny wynik to... 10

Podobne pytania

0 głosów
1 odpowiedź 446 wizyt
0 głosów
1 odpowiedź 368 wizyt
pytanie zadane 30 czerwca 2019 w C i C++ przez worldean Nowicjusz (200 p.)
0 głosów
1 odpowiedź 3,216 wizyt
pytanie zadane 2 września 2018 w C i C++ przez Archeon Początkujący (480 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,326 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...