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

Prosty kalkulator

Object Storage Arubacloud
0 głosów
1,085 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 (155,460 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 (155,460 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 (155,460 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ź 276 wizyt
0 głosów
1 odpowiedź 244 wizyt
pytanie zadane 30 czerwca 2019 w C i C++ przez worldean Nowicjusz (200 p.)
0 głosów
1 odpowiedź 2,416 wizyt
pytanie zadane 2 września 2018 w C i C++ przez Archeon Początkujący (480 p.)

92,578 zapytań

141,426 odpowiedzi

319,653 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...