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

Czy da sie usprawnić bardziej ten kalkulator

Object Storage Arubacloud
0 głosów
334 wizyt
pytanie zadane 2 grudnia 2018 w C i C++ przez Ryszardziksde Początkujący (390 p.)

Witam,

Niedawno zacząłem swoją przygodę z C++. Napisałem dosyć prosty program, klakulator. Chciałbym się dowiedzieć czy można go jakoś usprawnić (krótszy kod). Z góry mówię, że pisany na linuxie Mint.

#include <iostream>
#include <unistd.h>
#include <stdio.h>

using namespace std;

float Liczba1, Liczba2, Wybor;
int main()
{
    cout << "Podaj 1 liczbę:";
    cin >> Liczba1;
    cout << endl;

    cout << "Podaj 2 liczbę:";
    cin >> Liczba2;
    cout << endl;

    cout << "Menu główne" << endl;
    cout << "------------------" << endl;
    cout << "1. Dodawanie" << endl;
    cout << "2. Odejmowanie" << endl;
    cout << "3. Mnożenie" << endl;
    cout << "4. Dzielenie" << endl;
    cout << "5. Wyjdź z programu" << endl;
    cin >> Wybor;

    if(Wybor == 1 )
    {
    cout << "Suma = " << Liczba1 + Liczba2;
    }

    else if (Wybor == 2 )
    {
    cout << "Różnica = " << Liczba1 - Liczba2;
    }

    else if (Wybor == 3 )
    {
    cout << "Iloczyn = " << Liczba1 * Liczba2;
    }

    else if (Wybor == 4 )
    {
        if (Liczba1 == 0)
        {
            cout << "Nie dzielimy przez zero!!!";
        }

        else if (Liczba2 == 0)
        {
            cout << "Nie dzielimy przez zero!!!";
        }
        else
        {
        cout << "Iloraz = " << Liczba1 / Liczba2;
        }
    }

    else if (Wybor == 5 )
    {
    return 0;
    }

    else
    {
    cout << "Nie ma takiej opcji!!!" << endl;
    }

    getchar();getchar();

    return 0;
}

 

4 odpowiedzi

+1 głos
odpowiedź 2 grudnia 2018 przez Bondrusiek Maniak (61,370 p.)
wybrane 2 grudnia 2018 przez Ryszardziksde
 
Najlepsza

Witam

według mnie możesz poprawić ten kod wprowadzając następujące ulepszenia

  1. Pozbycie się zmiennych globalnych (float Liczba1, Liczba2, Wybor;) wrzucenie je do funkcji main. Więcej: http://www.drzewniak.slupsk.pl/~ks/c/c_024.html
  2. Zamiast tylu ifów możesz wykorzystać switch. Więcej http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Warunek-wielokrotnego-wyboru-switch-case/17
  3. Możesz podzielić kod na funkcje i wykorzystać je w main. Na przykład możesz stworzyć funkcje void displayMenu(); która by wyświetlała menu.http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Funkcje-pierwsze-starcie/291
  4. Ewentualnie na przyszłość lepiej by było jakbyś nadawał angielskie nazwy zmiennych/funkcji itp. tak aby kod był bardziej uniwersalny i inni użytkownicy mogli go zrozumieć.
komentarz 2 grudnia 2018 przez Ryszardziksde Początkujący (390 p.)
Dzięki sprobóję to zrobić
komentarz 2 grudnia 2018 przez Bondrusiek Maniak (61,370 p.)

Ok, jakby coś to wrzucaj na pewno ktoś Ci pomorze.

PS

Nie używaj polskich znaków diakrytycznych ą/ę/ź/ć itp w kodzie. W komentarzach możesz.

cout << "Menu główne" << endl;
//zamień na 
cout << "Menu glowne" << endl;

 

komentarz 2 grudnia 2018 przez Ryszardziksde Początkujący (390 p.)
Dlaczego? w konsoli wyświetlają sie poprawnie
komentarz 2 grudnia 2018 przez Bondrusiek Maniak (61,370 p.)
Widocznie masz ustawione na polskie kodowanie w konsoli.
komentarz 2 grudnia 2018 przez Ryszardziksde Początkujący (390 p.)
codeblocks na linuxie ma tak domyślnie
+1 głos
odpowiedź 2 grudnia 2018 przez Secrus Nałogowiec (32,880 p.)
Usprawnić != krótszy kod. Obecnie tworzone oprogramowanie skupia się na wysokiej czytelności kodu, a w drugiej kolejności na jego długości. Poza tym, w tak małych programach nie ma potrzeby dużego skupiania się na wydajności, ponieważ obecne kompilatory i komputery, na których uruchamiamy programy są wystarczająco wydajne i szybkie.
+1 głos
odpowiedź 2 grudnia 2018 przez niezalogowany
edycja 2 grudnia 2018
  1. Lepiej formatuj kod - dodawaj wcięcia tam gdzie się je powinno dodawać. Znacznie polepsza to czytelność kodu:
        if(Wybor == 1)
        {
             cout << "Suma = " << Liczba1 + Liczba2;
        }
        else if (Wybor == 2)
        {
           cout << "Różnica = " << Liczba1 - Liczba2;
        }
        else if (Wybor == 3)
        {
            cout << "Iloczyn = " << Liczba1 * Liczba2;
        }
    
  2. Wynikiem dzielenia 0 / 5 jest 0. Więc warunek liczba1 == 0 jest błędny. Natomiast gdybyś miał kilka warunków prowadzących do jednego skutku warto by użyć koniunkcji logicznej:
    if (warunek1 && warunek2)
    {
         ...
    }
    
  3. CodeBlock ma opcję "zatrzymującą program po jego wykonaniu", getchary i inne takie konstrukcje w kodzie są zbędne. Jakiekolwiek inne IDE też powinno mieć takie opcje.
  4. Jeżeli nie napiszesz return 0 program i tak zwróci 0.
0 głosów
odpowiedź 2 grudnia 2018 przez vector Dyskutant (9,200 p.)
edycja 2 grudnia 2018 przez vector

[...] czy można go jakoś usprawnić (krótszy kod) [...]

Przepraszam, nie mogłem się powstrzymać ;P

#include <iostream>
using namespace std;

float Liczba1, Liczba2;
unsigned Wybor;
const char *t = (char*)u"潐慤‱楬穣쑢㪙倀摯橡㈠氠捩扺駄:敍畮朠苅돃湷੥ⴭⴭⴭⴭⴭⴭⴭⴭⴭㄊ‮潄慤慷楮੥⸲传敤浪睯湡敩㌊‮湍앯於楮੥⸴䐠楺汥湥敩㔊‮祗摪뫅稠瀠潲牧浡ੵ匀浵⁡‽刀돃볅楮慣㴠 汉捯祺‽一敩搠楺汥浩⁹牰敺⁺敺潲℡!汉牯穡㴠 楎⁥慭琠歡敩灯橣Ⅹ℡\n硜〥栲h";

void (*w[])() = {
    []{cout << &t[147] << Liczba1 + Liczba2;},
    []{cout << &t[156] << Liczba1 - Liczba2;},
    []{cout << &t[168] << Liczba1 * Liczba2;},
    []{Liczba2 == 0 ? cout << &t[175] : cout << &t[208] << Liczba1 / Liczba2;},
    []{exit(0);},
    []{cout << &t[212];}};

int main() {
    std::cout << std::endl;
    cout << &t[ 0], cin >> Liczba1, cout << endl;
    cout << &t[17], cin >> Liczba2, cout << endl;
    cout << &t[34], cin >> Wybor;
    w[min(Wybor-1, 5u)]();
    getchar();getchar();
}

 

komentarz 2 grudnia 2018 przez Ryszardziksde Początkujący (390 p.)
Nie wiedziałem że tak się da. Lecz ja to muszę pierw zrozumieć
komentarz 2 grudnia 2018 przez Byczek_ Bywalec (2,570 p.)
Ale przeciez kolega jeszcze nie zna programowania obiektowego.
komentarz 2 grudnia 2018 przez Ryszardziksde Początkujący (390 p.)
Więc trzeba się nauczyć!!
komentarz 2 grudnia 2018 przez Byczek_ Bywalec (2,570 p.)
To powodzenia!

Podobne pytania

0 głosów
2 odpowiedzi 247 wizyt
pytanie zadane 14 listopada 2017 w JavaScript przez NegativeAura Nowicjusz (120 p.)
–1 głos
1 odpowiedź 924 wizyt
0 głosów
4 odpowiedzi 751 wizyt
pytanie zadane 8 kwietnia 2020 w C i C++ przez Miszka255 Początkujący (280 p.)

92,536 zapytań

141,377 odpowiedzi

319,454 komentarzy

61,922 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!

...