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

Optymalizacja kodu

Object Storage Arubacloud
0 głosów
348 wizyt
pytanie zadane 7 maja 2016 w C i C++ przez mario5551 Użytkownik (550 p.)

Po trzech dniach pracy stworzyłem mój programik, czy da się zoptymalizować jego kod?

A może zauważyłeś coś co można poprawić?

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

using namespace std;
float cm, cal, celc, farch, litry, galony, kilogramy, funty;
string decyzja;
int main()

{
    x:
    cout <<"Wybierz 1 jesli chcesz zamienic cm na cale lub na odwrot."<<endl;
    cout <<"Wybierz 2 jesli chcesz zamienic celc na faranhajty lub na odwrot."<<endl;
    cout <<"Wybierz 3 jesli chcesz zamienic litry na galony lub na odwrot."<<endl;
    cout <<"Wybierz 4 jesli chcesz zamienic kilogramy na funty lub na odwrot."<<endl;
    cout <<"Wybierz x zeby zamknac program. "<<endl;
    cin>>decyzja;
    if(decyzja=="1")//cm na cale i na odwrut
    {
        system("cls");
        cout << "1.cm zamienic na cale?" << endl;
        cout << "2.cal zamienic na cm?" << endl;
        cout << "wybierz 1 lub 2: ";
        cin >> decyzja;
        if(decyzja=="1")
        {
            cout<<"Ile cm: ";
            cin>>cm;
            cout<<"to jest "<<cm/2.54<<" cali"<<endl;
        }
        else
        {
            cout<<"Ile cali: ";
            cin>>cal;
            cout<<"to jest "<<cal*2.54<<" centymetrow"<<endl;
        }
        cout <<"jeśli chcesz wrucic do menu wyboru kliknij ENTER";
    getchar(); getchar();
    system("cls");
    goto x;
    }

    if(decyzja=="2")//stopnie celcjusza na faranchajta i na odwrut
    {
        system("cls");
        cout << "1.cm celcjusze na faranchajty?" << endl;
        cout << "2.faranchajty na celcjusze?" << endl;
        cout << "wybierz 1 lub 2: ";
        cin >> decyzja;
        if(decyzja=="1")
        {
            cout<<"Ile celcjuszy: ";
            cin>>celc;
            cout<<"to jest "<<(9*celc/5)+32<<" faranchajtow"<<endl;
        }
        else
        {
            cout<<"Ile faranchajtow: ";
            cin>>farch;
            cout<<"to jest "<<5*(farch-32)/9<<" celcjuszy"<<endl;
        }
    cout <<"jeśli chcesz wrucic do menu wyboru kliknij ENTER";
    getchar(); getchar();
    system("cls");
    goto x;
    }

    if(decyzja=="3")//litry na galony i na odwrut
    {
        system("cls");
        cout << "1.litry na galony?" << endl;
        cout << "2.galony na litry?" << endl;
        cout << "wybierz 1 lub 2: ";
        cin >> decyzja;
        if(decyzja=="1")
        {
            cout<<"Ile litrow: ";
            cin>>litry;
            cout<<"to jest "<<litry/4.54561<<" galonow"<<endl;
        }
        else
        {
            cout<<"Ile galonow: ";
            cin>>galony;
            cout<<"to jest "<<galony*4.54561<<" litrow"<<endl;
        }
    cout <<"jeśli chcesz wrucic do menu wyboru kliknij ENTER";
    getchar(); getchar();
    system("cls");
    goto x;
    }
    if(decyzja=="4")//kilogramy na funty i na odwrut
      {
        system("cls");
        cout << "1.kilogramy na funty?" << endl;
        cout << "2.funty na kilogramy?" << endl;
        cout << "wybierz 1 lub 2: ";
        cin >> decyzja;
        if(decyzja=="1")
        {
            cout<<"Ile kilogramow: ";
            cin>>kilogramy;
            cout<<"to jest "<<kilogramy*2.20<<" funtow"<<endl;
        }
        else
        {
            cout<<"Ile funtow: ";
            cin>>funty;
            cout<<"to jest "<<funty/2.20<<" kilogramow"<<endl;
        }
    cout <<"jeśli chcesz wrucic do menu wyboru kliknij ENTER";
    getchar(); getchar();
    system("cls");
    goto x;
    }

    if((decyzja=="x")||(decyzja=="X"))
    {
        goto y;
    }
    y:
    return 0;
}

 

4 odpowiedzi

+1 głos
odpowiedź 7 maja 2016 przez adas94 Nałogowiec (29,200 p.)
wybrane 17 maja 2016 przez mario5551
 
Najlepsza
Ja bym pozamykał części kodu, które odpowiadają za konkretne przeliczenia w funkcjach. Zrobił prostego switcha i wywoływał odpowiednią funkcję. Byłoby dużo bardziej przejrzyście moim zdaniem.
+2 głosów
odpowiedź 7 maja 2016 przez C☺ndzi Stary wyjadacz (12,100 p.)
Wywalić goto (użyj pętli), zmienne globalne wrzucić do maina. I czytelność kodu trochę leży, wyszła z tego jedna bryła.
+1 głos
odpowiedź 7 maja 2016 przez Patryk Krajewski Nałogowiec (26,170 p.)

1. Przenieś zmienne globalnego do int main(){...} Jak można to twórz przed ich pierwszym użyciem.

2. NIGDY nie używaj goto.

3. Zmienne mają mówić do czego służą. Akurat tu nie jest aż tak źle.

4. Zamiast dodawać komentarze informujące co dane miejsce w programie robi to zrób z tego funkcje(Komentarzy w kodzie powinno być jak najmniej można)

5. Spróbuj w jakiś sposób to:

cout <<"jeśli chcesz wrucic do menu wyboru kliknij ENTER";
    getchar(); getchar();
    system("cls");

wrzucić do funkcji czy wywoływać po wyjściu z tych if'ów, ale raz.

komentarz 7 maja 2016 przez mario5551 Użytkownik (550 p.)

Funkcji i switcha jeszcze się nie nauczyłem ale nie długo to nadrobie :) i poprawie swój kod.

komentarz 7 maja 2016 przez Avernis Nałogowiec (27,400 p.)
wgl czemu nie używać goto? Zawsze mnie to zastanawiało
komentarz 7 maja 2016 przez Patryk Krajewski Nałogowiec (26,170 p.)
Avernis, mimo, że to działa jak chcesz to taki kod jest nieczytelny i ciężko zrozumieć o co w nim chodzi. Zawsze można ją ominąć.
0 głosów
odpowiedź 7 maja 2016 przez adrian17 Ekspert (344,860 p.)
"zoptymalizować"? A chodzi wolno?
komentarz 8 maja 2016 przez niezalogowany
Kod nie musi chodzić wolno by go optymalizować. Jedną z zasad dobrego programowania jest optymalizacja kodu.
komentarz 8 maja 2016 przez adrian17 Ekspert (344,860 p.)

Inną zasadą jest słynny cytat Donalda Knutha:

Premature optimization is the root of all evil

(oraz inna zasada bez cytatu: najpierw profiluj)

komentarz 18 maja 2016 przez maly Nałogowiec (37,190 p.)
Nie rozumiem czemu słowo "optymalizacja" zawsze kojarzona jest z szybkością, przecież zoptymalizować kod można pod kątem np.rozszerzalności, wykorzystwanej pamięci, itp.
Poza tym spora część zasad optymalizacji to poprostu czysty kod.
komentarz 18 maja 2016 przez adrian17 Ekspert (344,860 p.)

Nie rozumiem czemu słowo "optymalizacja" zawsze kojarzona jest z szybkością

Bo to jego definicja? A przynajmniej ogólna poprawa wydajności, więc zużycie pamięci też się liczy. Natomiast rozszerzalność to bardziej ogólny temat refactorowania.

komentarz 19 maja 2016 przez maly Nałogowiec (37,190 p.)

Natomiast rozszerzalność to bardziej ogólny temat refactorowania.

Refaktoryzacja kodu następuje w wyniku zmian założeń lub złej realizacji, jeśli łączysz zaplanowaną możliwość rozszerzania lub rozszerzanie z refaktoryzacją kodu to znaczy że udostępniony interfejs/architektura jest nieoptymalny(nadmiarowy lub jak częściej bywa niedomiarowy).

Nie będę się kłócił bo i tak większoś(pewnie Ty też) wiąże optymalizację z czynnością zmiany a nie z wcześniejszym planowaniem/organizowaniem.

komentarz 19 maja 2016 przez adrian17 Ekspert (344,860 p.)

Nie będę się kłócił z powyższym stwierdzeniem, natomiast powtórzę prostszymi słowami moją wypowiedź:

Nie rozumiem czemu słowo "optymalizacja" zawsze kojarzona jest z szybkością

Bo jego definicja jest związana z szybkością/wydajnością.

Podobne pytania

0 głosów
1 odpowiedź 160 wizyt
pytanie zadane 21 stycznia 2022 w C i C++ przez BKantur Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 407 wizyt
pytanie zadane 2 października 2021 w C i C++ przez Michał F Nowicjusz (120 p.)
0 głosów
1 odpowiedź 120 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...