Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[c++] mój kalkulator z wykorzystaniem if


Rekomendowane odpowiedzi

Opublikowano

Witam. zacząłem się uczyć c++ i chciałbym się pochwalić moim kalkulatorem:

 

 

#include <iostream>

#include <cstdlib>

 

using namespace std;

 

int main()

{

int menu1;

int a;

int b;

 

cout << "wpisz 1 by przeczytac notatke o autorze" << endl;

cout << "wpisz 2 przejsc do kalkulatora" << endl;

 

cin>> menu1;

if (menu1 == 1)

{

cout <<"Witaj! Jestem Th0e i chcialbym pokazac wam swoj pierwszy program, nad ktorym sie pomeczylem nieco bardziej :)"<<endl;

}

if (menu1 == 2)

{

cout <<"podaj pierwsza cyfre"<<endl;

cin>> a;

cout <<"podaj druga cyfre"<<endl;

cin>> b;

cout<<"wynik dodawania: "<<a + b<<endl;

cout<<"wynik odejmowania: "<<a - b<<endl;

cout<<"wynik mnozenia: "<<a * b<<endl;

cout<<"wynik dzielenia: "<<a / b<<endl;

cout<<"aby wykonac nowe obliczenie musisz uruchomic program od nowa"<<endl;

 

}

 

 

system ("pause");

return 0;

}

 

co sądzicie o tym programie? jak go ulepszyć by program nie wyłączał się po wykonaniu zadania? piszcie i oceniajcie.

1346184056-U684255.jpg

Opublikowano

Używaj else, else if, switchów.

Poza tym pętli ofc.

 

No i np. jeśli wiesz, że "menu1" to mała liczba, w tym wypadku 1 lub 2, to użyj mniejszego typu danych, np.

unsigned short menu1;

 

Bo nie warto alokować 4 bajtów w pamięci dla danego działania, skoro wystarczy 1 (unsigned short to 2 bajty);p

 

Szczerze mówiąc, jeśli opcje wyboru masz tylko 2, to możesz użyć jeszcze mniejszego typu danych

 

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
   bool menu1;
   int a;
   int b;

   cout << "wpisz 0 by przeczytac notatke o autorze" << endl;
   cout << "wpisz 1 przejsc do kalkulatora" << endl;

   cin>> menu1;
   if (menu1 == false)
   {
    cout <<"Witaj! Jestem Th0e i chcialbym pokazac wam swoj pierwszy program, nad ktorym sie pomeczylem nieco bardziej "<<endl;
   }
   if (menu1 == true)
   {
    cout <<"podaj pierwsza cyfre"<<endl;
    cin>> a;
    cout <<"podaj druga cyfre"<<endl;
    cin>> b;
    cout<<"wynik dodawania: "<<a + b<<endl;
    cout<<"wynik odejmowania: "<<a - b<<endl;
    cout<<"wynik mnozenia: "<<a * b<<endl;
    cout<<"wynik dzielenia: "<<a / b<<endl;
    cout<<"aby wykonac nowe obliczenie musisz uruchomic program od nowa"<<endl;

   }


   system ("pause");
   return 0;
}


 

Opublikowano
Szczerze mówiąc, jeśli opcje wyboru masz tylko 2, to możesz użyć jeszcze mniejszego typu danych

Na NIE, bo:

- bool i tak musi zajmować jeden bajt, więc nie wykorzystasz 7 bitów

- w przypadku rozszerzenia listy wyborów musisz zmienić typ

- boola powinno się używać tam, gdzie wyrażenie ma być rzeczywiście fałszywe/prawdziwe, a nie w liście wyborów

Opublikowano

... Zrób tak, że user będzie mógł wybrać typ działania :P

I btw; jeśli program zacznie ci się bugować, czyli jak wpiszesz pierwszą liczbę, to od razu walnie wynik, to dodaj do programu takie cuś:

std::cin.clear();
std::cin.sync();

Mogłem się nieco pomylić, bo dawno tego używałem :)

846331404756772371599.jpeg
Opublikowano

Na NIE, bo:

- bool i tak musi zajmować jeden bajt, więc nie wykorzystasz 7 bitów

- w przypadku rozszerzenia listy wyborów musisz zmienić typ

- boola powinno się używać tam, gdzie wyrażenie ma być rzeczywiście fałszywe/prawdziwe, a nie w liście wyborów

 

Tak, pewnie, lepiej alokować 4 bajty niż 1/2 :f


 

Opublikowano

Prosty kalkulator . Jednak wiem , że troszkę zajmuje stworzenie czegoś takiego :) . Te ulepszenia co podają koledzy wyzej - to jak narazie dla mnie kosmos . ;) To co ja mogę dodać od siebie , to pętla - tego zabrakło ;)

Chcę , by stare czasy Metin2 wróciły ...  :(

Opublikowano
Pierwsze co mi wpadło do głowy żeby tu napisać to zmień "int" na "double".

jeszcze mu powiedz gdzie, bo wszystko zmieni

 

Tak, pewnie, lepiej alokować 4 bajty niż 1/2 :f

powiedzmy, że masz 2 GB ramu... Czyli 2 147 483 648 bajtów. Możesz więc zadeklarować (teoretycznie) 536 870 912 intów. Czy nadal robi ci to aż taką różnicę czy to mały bool (już by lepszy był char) czy wygodniejszy int (najlepiej unsigned, zresztą, zmiennych bez znaku powinno się używać wszędzie, gdzie tylko nie są potrzebne liczby ujemne. Z tego co pamiętam nawet niektóre operacje są na nich szybsze (chyba modulo) niż na signedach)?

Opublikowano

Powiedzmy że potem taki programista będzie pisał dużą grę i będzie wszędzie używał intów, albo co gorsza double, dalej to nie ma różnicy?

Twoja stara robi catch the clowny w Game Makerze.

Opublikowano
Powiedzmy że potem taki programista będzie pisał dużą grę i będzie wszędzie używał intów, albo co gorsza double, dalej to nie ma różnicy?

ale mówimy tu jebanym kalkulatorze z paroma zmiennymi, tutaj nie trzeba tego aż tak optymalizować...

Opublikowano

dziękuję za tak liczne rady. na pewno w przyszłości je wykorzystam.

 

PS: zrobiłem teraz na szybko nieco ulepszony kalkulator, zamieszczam to bo może się komuś przydać:

 

 

#include <iostream>

#include <cstdlib>

using namespace std;

 

int main()

{

int menu;

int a;

int b;

int c;

cout<<"wybierz 1 aby zobaczyc informacje o autorze"<<endl;

cout<<"wybierz 2 by przejsc do kalkulatora"<<endl;

cin>> menu;

if (menu == 1)

{

cout<<"autorem programu jest loordofdeathx2"<<endl;

}

if (menu == 2)

{

cout<<"podaj pierwsza liczbe"<<endl;

cin>> a;

cout<<"podaj drugą liczbe"<<endl;

cin>> b;

cout<<"napisz 1 by wykonac dodawanie"<<endl;

cout<<"napisz 2 by wykonac odejmowanie"<<endl;

cout<<"napisz 3 by wykonac mnozenie"<<endl;

cout<<"napisz 4 by wykonac dzielenie"<<endl;

cin>> c;

 

}

if (c == 1)

{

cout<< a + b <<endl;

 

}

if (c == 2)

{

cout<< a - b <<endl;

}

if (c == 3)

{

cout<< a * b <<endl;

}

if (c == 4)

{

cout<< a / b <<endl;

}

system ("pause");

return 0;

}

1346184056-U684255.jpg

Opublikowano

Ehh, dalej nie zmieniłeś "int" na "double", to ma służyć temu żeby można było używać liczb zmienno-przecinkowych.

 

Następnym razem umieść lepiej pomiędzy [code[/code] swój kog, lepiej się czyta ;)

<>

Opublikowano

oto nowa wersja kalkulatora z pętlą i mniejszymi zmiennymi:

 


#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
   double menu;
   double a;
   double b;
   double c;

   while (true)
   {cout<<"wybierz 1 aby zobaczyc informacje o autorze"<<endl;
   cout<<"wybierz 2 by przejsc do kalkulatora"<<endl;
   cin>> menu;
   if (menu == 1)
   {
       cout<<"autorem programu jest loordofdeathx2"<<endl;
   }
   if (menu == 2)
   {
       cout<<"podaj pierwsza liczbe"<<endl;
       cin>> a;
       cout<<"podaj drug¹ liczbe"<<endl;
       cin>> b;
       cout<<"napisz 1 by wykonac dodawanie"<<endl;
       cout<<"napisz 2 by wykonac odejmowanie"<<endl;
       cout<<"napisz 3 by wykonac mnozenie"<<endl;
       cout<<"napisz 4 by wykonac dzielenie"<<endl;
       cin>> c;

   }
   if (c == 1)
   {
     cout<< a + b <<endl;

   }
   if (c == 2)
   {
       cout<< a - b <<endl;
   }
   if (c == 3)
   {
       cout<< a * b <<endl;
   }
    if (c == 4)
    {
       cout<< a / b <<endl;
    }
   }
system ("pause");
   return 0;
}

1346184056-U684255.jpg

Opublikowano

Double to 8 bajtów, do zmiennej menu możesz użyć unsigned char zamiast double i wtedy będzie "oczekiwany" efekt.

Poza tym im wcześniej wyrobisz sobie nawyk optymalizacji (nie ważne czy to kalkulator czy inny progz) tym wygodniej będzie Ci później kodzić.

Poprzez stosowanie optymalizacji nauczysz się szybciej organizacji pamięci niżeli robiłbyś to na odpierdziel i wsadzał wszędzie zmienne takie jakie wygodne.

YOU MUST DIE

- Ganon, Koridai

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...